2012-05-13 43 views
-2

可能重複:
strange php error
Submit an HTML form with empty checkboxes
PHP form checkbox and undefined index未定義指數 - PHP MySQL的

一些原因,我在下面的代碼變得不確定指數的錯誤。任何幫助,將不勝感激。下面是我Recieving錯誤

Notice: Undefined index: username in C:\xampp\htdocs\register.php on line 5 
Notice: Undefined index: password in C:\xampp\htdocs\register.php on line 6 
Notice: Undefined index: firstname in C:\xampp\htdocs\register.php on line 7 
Notice: Undefined index: surname in C:\xampp\htdocs\register.php on line 8 

代碼:

<?php 
mysql_connect("localhost", "root", "") or die(mysql_error()); 

mysql_select_db("clubresults") or die(mysql_error()); 
    $username = $_POST['username']; 
    $password = md5($_POST['password']); 
    $firstname = $_POST['firstname']; 
    $surname = $_POST['surname']; 

    $sql = "INSERT INTO members (Username, Password, Firstname, Surname) VALUES ($username, $password, $firstname, $surname);"; 

    mysql_query($sql); 

?> 

<html> 
     <div class="content"> 
     <center> 
     <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
      <table border="0"> 
      <tr><td colspan=2><h1>Register</h1></td></tr> 
      <tr><td>Username:</td><td> 
      <input type="text" name="username" maxlength="60"> 
      </td></tr> 
      <tr><td>Password:</td><td> 
      <input type="password" name="password" maxlength="10"> 
      </td></tr> 
      <tr><td>Firstname:</td><td> 
      <input type="text" name="firstname" maxlength=210"> 
      </td></tr> 
      <tr><td>Surname:</td><td> 
      <input type="text" name="surname" maxlength=210"> 
      </td></tr> 
      <tr><th colspan=2><input type="submit" name="submit" 
      value="Register"> </th></tr> </table> 
     </form> 
     </center> 
     </div> 
</html> 
+7

請不要使用古老的'mysql_ *'函數編寫新代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/KJveJ)。相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定,[本文](http://goo.gl/3gqF9)將有助於選擇。如果你關心學習,[這裏是一個很好的PDO相關教程](http://goo.gl/vFWnC)。 – vascowhite

+0

檢查鏈接問題的解決方案,它可能會有所幫助。 – vascowhite

+1

您的代碼假定這些值存在。當表格發佈時,他們會。但是當頁面最初加載時,它們不會。查看'isset()'函數,在嘗試使用該值之前檢查數組中的值是否存在。 – David

回答

2

當第一次您的頁面加載(除非它是另一個頁面的動作)時,REQUEST_METHOD是「GET」;因此,不存在POST變量(儘管$ _POST超全局存在)。
當您從其他頁面或同一頁面進行POST時,表單中設置的所有數據都將出現在$ _POST超全局中,並且可以按照您先前訪問它們的方式進行訪問;不幸的是,如果數據不存在,並且您嘗試訪問它,則會出現類似於您所擁有的錯誤。
爲了解決這個問題,特別是如果你想要發佈到同一個頁面的形式,使用類似

 
    if (isset($_POST["username"])) 
    { 
     // do whatever 
    } 
    if (isset($_POST["password"])) 
    { 
     // do whatever 
    } 
    if (isset($_POST["firstname"])) 
    { 
     // do whatever 
    } 
    if (isset($_POST["surname"])) 
    { 
     // do whatever 
    } 

就這樣,如果這些數據不存在你的代碼不會引發錯誤。
希望有所幫助。
在一個不相關但重要的注意事項上,不要再使用mysql_ *函數。他們已被棄用;使用mysqli或PDO功能進行數據訪問。


快樂編碼!

+0

糾正我,如果我錯了,但不會'if($ _POST [「username」]) 「好些? – Sliq

+1

不,因爲您假定$ _POST [「用戶名」]將可用;如果'用戶名'不可用,錯誤仍然會被拋出。 'isset($ _ POST [「username」])'防止錯誤被拋出 –