2010-03-12 3 views
0

기본적으로 admin 사용자가 관리자 사용자 유형 (기본적으로 등록 기능)을 작성할 수있는 페이지가 있습니다. 값이 제출되면 DB에 매우 기본적인 항목이 저장됩니다. 그러나 숨겨진 변수 유형이 있습니다. 나는 3 가지 다른 사용자 레벨을 가지고 있고 그것들을 정수로 선언했다. (예 : 7 = 관리자, 8 = 사용자 등)PHP에 문제가 있습니다. 숨겨진 가치 게시?

이 숨겨진 값을 올바르게 전달하는 방법을 누군가가 도와 줄 수 있는가? 데이터베이스에 저장 ... 여기

내 형태 :

<form id="userreg" name="userreg" method="post" action="adduser-process.php"> 
<label>Full Name:</label> <input name="fullname" size="40" id="fullname" value="<?php if (isset($_POST['fullname'])); ?>"/> 
    <br /> 
    <label>Username:</label> <input name="username" size="40" id="username" value="<?php if (isset($_POST['username'])); ?>"/>  <br /> 
    <label>Password:</label> <input name="password" size="40" id="password" value="<?php if (isset($_POST['password'])); ?>"/>  <br /> 
    <label>Email Address:</label> <input name="emailaddress" size="40" id="emailaddress" value="<?php if (isset($_POST['emailaddress'])); ?>"/> 
    <br /> 
    <input name="userlevel" type="hidden" size="1" id="userlevel" value="<?php $_POST[5]; ?>" /> <br /> 
    <input value="Add User" class="addbtn" type="submit" /> 
    </form></div> 

네 XT, 여기에 쿼리를 실행하는 스크립트입니다 : 나는 기본적으로 변경되지 않으므로, 그냥이 양식 '5'의 일정한 값으로 숨겨진에는 TypeM를 전달하기 위해 노력하고있어

<?php 

require_once "config.php"; 


$fullname = $_POST['fullname']; 
$username = $_POST['username']; 
$password = $_POST['password']; 
$emailaddress = $_POST['emailaddress']; 
$userlevel = $_POST[5]; 


$sql = "INSERT INTO users_tb VALUES('".$user_id."','".$fullname."','".$username."',MD5('".$password."'),'".$emailaddress."','".$userlevel."')"; 
$result = mysql_query($sql, $connection) 
    or die("MySQL Error: ".mysql_error()); 

header("Location: administratorfrontview.php"); 
exit(); 
?> 

은 ... 또한 여기있는 동안, 어떤 이유로 'fullname'은 DB에 저장되지 않습니다 !! WTH ?? 다른 모든 필드는 잘 처리됩니다. 어떤 도움을 많이 주시면 감사하겠습니다! 고맙습니다.

+4

SQL 인젝션을 실제로 읽어야합니다. 누군가가 귀하의 코드를 기반으로 귀하의 웹 사이트를 쉽게 손상시킬 수 있습니다. Google은 "PHP는 SQL 주입". – ryeguy

+0

예, JavaScript를 사용하여 유효성을 검사 할 예정이지만 로컬에서 편집 중이며 핵심 부분을 먼저 처리하려고합니다. 그러나 어쨌든 고마워. – Yvonne

+4

당신이 자바 스크립트를 사용하여 유효성을 검사한다고 말할 때까지 나는이 코드를 사용하기 전에 "SQL 주입에 대한 읽기"라고 당신을 변호했을 것입니다. 그 사람이 말한 것처럼하십시오. – Jage

답변

3

두 가지. 하나, $userlevel$_POST['userlevel']이 아닌 5과 같아야합니다. POST 데이터가 항상 그 순서가 아니기 때문입니다. 둘째, insert 문은 열 이름 앞에 와야합니다 (잘못된 순서로 데이터가 이동하는 것을 방지하기 위해).

$sql = "INSERT INFO users_tb (id, name, username, password, email, userlevel) ". 
     "('".$user_id."','".$fullname."','".$username."',MD5('".$password."'),'". 
     $emailaddress."','".$userlevel."')"; 
+0

감사합니다. 데이터가 올바른 열에 저장되었지만 여전히 사용자 수준을 저장할 수 없습니다. 숨겨진 필드의 값으로,하지만 단지 그것을 '0'으로 저장!? – Yvonne

+0

글쎄,이 전에 게시 된 무엇입니까? 게시하는 다른 페이지가 있습니까? 그렇지 않다면 문제가 될 것입니다. 공백으로 나오십시오. 그리고 당신의 데이터베이스 필드가 INTEGER이고 NOT NULL이라면, 디폴트 값은 0이 될 것입니다. $ _POST [5] 이외의 것을 찾아서 페이지에 사용자 레벨을 넘겨주는 것이 좋습니다 ($ _SESSION 변수에 저장). –

2

값을 출력하는 PHP가 잘못되었습니다. 사용 :

<?= $_POST[5]; ?> 

또는

<?php echo $_POST[5]; ?> 
+0

. – Jage

+0

5의 값은 여전히 ​​데이터베이스에 저장되지 않습니다. 나는 이것을 사용하고있다 : Yvonne

관련 문제