2012-01-25 3 views
1

시스템에서 작업 중이며 레코드가 있는지 확인하려고합니다. 레코드가 존재하면 데이터를 레코드하지 않고 대신 폼으로 리턴합니다. 데이터가 존재하지 않으면 DB에 데이터를 기록합니다.DB에 레코드를 삽입 할 때 인덱스가 정의되지 않았습니다.

HTML 양식 :

<form name="studentform" onSubmit="return validate_form ();" action="queries/insert.php" method="post"> 

Student Number: <input type="text" name="studentnumber"/> 
    College: 
<select name="college" id=a></select> 

&nbsp;&nbsp;Course: 
<select name="course" id=b></select> 

<input type="radio" name="status" value="regular" />Regular&nbsp;&nbsp; 
<input type="radio" name="status" value="irregular" />Irregular 
    <br><br> 
    <hr> 
    <br> 
    Name: 
    <input type="text" name="lname"> &nbsp; 
    <input type="text" name="fname"> &nbsp; 
    <input type="text" name="mname"> 


Address: 
<input type="text" name="address" /> 

<br><br> 

Gender: 
<select name="gender"> 
<option value="">---</option> 
<option value="Male">Male</option> 
<option value="Female">Female</option> 
</select> 



<input type="submit" value="Submit"> 
</form> 

PHP 양식 :

$query = ("SELECT studentnumber FROM students where studentnumber = '$_POST[studentnumber]'"); 
$result=mysql_query($query); 

if($result) 
    { 
     if(mysql_num_rows($result) >= 1) 
     { 
     echo "<script type='text/javascript'>alert('User already exist'); location.href = '../admin_home.php';</script>"; 
     } 
     } 
    else{ 

$sql="INSERT INTO students (studentnumber, college, course, status, lname, fname, mname, address, gender) 
VALUES 
('$_POST[studentnumber]','$_POST[college]','$_POST[course]','$_POST[status]','$_POST[lname]','$_POST[fname]','$_POST[mname]','$_POST[address]','$_POST[gender]')"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 

    echo "<script type='text/javascript'>alert('Record Successfully Added'); location.href = '../admin_home.php';</script>"; 
} 

난하지만 난 항상 정의되지 않은 인덱스 오류가 이유를 알고하지 않습니다. 어딘가에서 뭔가 잘못한 것 같아요. 감사 !!

+0

"SQL injection"에 대한 첫 번째 사항 - 코드가 안전하지 않습니다. 정의되지 않은 인덱스 : C에서 studentnumber : \ XAMPP \ htdocs를 \ SIS \ WEW \ 라인 (11) 에 insert.php \ 쿼리 이것이 오류 라인 오류에 대한 –

+0

라인 번호 – xbonez

+0

가 전체 오류 –

답변

1

"정의되지 않은 색인"은 배열 ($ _POST, 아마)을 나타내며 오류가 아니라 통지 여야합니다. 정확한 메시지를 게시 할 수 있습니까?

print $query."<br />"; // obviously 

[: 디버깅 당신이 기대하는 것 같습니다 확인하기 위해 쿼리를 인쇄하는 한편

, 또한

$query = "SELECT studentnumber FROM students where studentnumber = '".mysql_real_escape_string($_POST['studentnumber'])."'"; 

에 대한 귀하의 첫 번째 라인을 전환, 그것은 도움이 편집] 이제 오류 메시지를 게시 했으므로 훨씬 간단 해집니다. $ _POST [ 'studentnumber']가 존재하지 않습니다. 양식을 확인하십시오.

if(isset($_POST['submit'])){ 

    $student_num = mysql_real_escape_string($_POST['studentnumber']); 
    // Set all the require form fields here with mysql_real_escape_string() fun 

    if(!empty($student_num)){ 
    // Your Query Here 
    } 
    else{ 
    echo 'Value not Set in Student Number Field!'; 
    } 
} 

편집 : 먼저에 대한 확인 그래서 isset($_POST['submit']) 후 모든 필드를 확인

디버깅 좋은 방법은 결과를 게시 코드이와

print '<pre>'; 
print_r($_POST); 
print '</pre>'; 
+0

prepared statements를 사용하는 것이 좋습니다. –

+0

@MatthiasVance 나는 동의한다. 그러나 나는 우리가 걸어 갈 수 있기 전에 우리가 달릴 것이라고 생각한다. –

+0

동의. 나는 다른 사람들을 생각 나게하기 위해 여기에 넣을 것이라고 생각했다. –

0

시도를 사용하는 것입니다 모든 값이 적절하게 가져오고 있습니다.

쿼리를 시작한 후에 필요한 값을 모두 얻었습니다.

1

문제는 쿼리에 있습니다

$query = ("SELECT studentnumber FROM students where studentnumber = '$_POST[studentnumber]'"); 

$_POST[studentnumber]이 올바르지 않습니다. $_POST['studentnumber']이어야합니다. 키 주위의 인용 부호를 주목하십시오.

나는 이런 식으로 일을 제안 :

$query = sprintf("SELECT studentnumber FROM students where studentnumber = '%s'" 
        , mysql_real_escape_string($_POST['studentnumber'])); 

변경 모든 쿼리를 따라.

+0

나는 이것이 $ _POST [studentnumber]'에 영향을 줄 것이라고 생각하지 않는다. –

+0

'$ _POST'는 문자열을 키로 가지고 있기 때문에 가능합니다. 그녀의 경우, 그녀는 상수로 키를 호출합니다. – xbonez

+0

그러나 키는 '$ _POST [studentnumber]'와 같은 작은 따옴표 없이도 작동합니다. –

관련 문제