-2

可能重复:
奇怪的 php 错误
提交带有空复选框的 HTML 表单
PHP 表单复选框和未定义的索引

某些原因我在以下代码中收到未定义的索引错误。任何帮助,将不胜感激。这是我收到的错误

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>
4

1 回答 1

2

当您的页面第一次加载时(除非它是另一个页面的操作),REQUEST_METHOD 是 'GET';结果,不存在 POST 变量(尽管存在 $_POST 超全局变量)。
当您从另一个页面或从同一页面进行 POST 时,表单中的所有数据集都将出现在 $_POST 超全局中,并且可以按照您之前访问它们的方式进行访问;不幸的是,如果数据不存在,而您尝试访问它,则会引发错误,类似于您所拥有的。
要解决这个问题,特别是如果您想发布到与表单相同的页面,请使用类似

  if (isset($_POST["用户名"]))
   {
      // 做任何事
   }
  if (isset($_POST["password"]))
   {
      // 做任何事
   }
  if (isset($_POST["firstname"]))
   {
      // 做任何事
   }
  if (isset($_POST["surname"]))
   {
      // 做任何事
   }

这样,如果这些数据不存在,您的代码将不会引发错误。
希望有帮助。
在一个不相关但重要的注意事项上,不要再使用 mysql_* 函数。它们已被弃用;使用 mysqli 或 PDO 函数进行数据访问。


快乐编码!

于 2012-05-13T23:57:06.560 回答