2012-01-25 6 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インジェクション"を読んでください - あなたのコードは安全ではありません。 –

+0

エラーの行番号は役に立ちます – xbonez

+0

完全なエラーを書く –

答えて

1

"未定義インデックス"はあなたの配列(おそらく$ _POST)を参照しています。エラーではなく通知でなければなりません。あなたは正確なメッセージを投稿できますか?一方

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

のためのあなたの最初の行を切り替えるには、また、それはあなたが期待するように見えることを確認するためにクエリをプリントアウトするデバッグに役立ちます:

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

[ $ _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]'のような一重引用符を使わずにも動作します。 –

関連する問題