【问题标题】:Undefined Index - PHP MySQL [duplicate]未定义索引 - PHP MySQL [重复]
【发布时间】:2012-05-13 23:27:11
【问题描述】:

可能重复:
strange php error
Submit an HTML form with empty checkboxes
PHP form checkbox and undefined index

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

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>

【问题讨论】:

  • 请停止使用古老的mysql_* 函数编写新代码。它们不再维护,社区已经开始 deprecation process 。相反,您应该了解prepared statements 并使用PDOMySQLi。如果您无法决定,this article 将帮助您选择。如果你想学习,here is a good PDO-related tutorial.
  • 检查链接问题的解决方案,它可能会有所帮助。
  • 您的代码假定这些值存在。当表格发布时,他们会。但是当页面最初加载时,它们不会。查看 isset() 函数以检查数组中的值是否存在,然后再尝试使用该值。
  • 我不喜欢的一件事是在不需要的地方缩短 url,另一件事是在数组出现问题时询问 sql。修改你的$_POST
  • 您可以设置空值来形成$_SERVER['PHP_SELF']的动作

标签: php mysql


【解决方案1】:

当您的页面第一次加载时(除非它是另一个页面的操作),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 函数进行数据访问。


编码愉快!

【讨论】:

  • 如果我错了请纠正我,但if ($_POST["username"]) 不是更好吗?
  • 不,因为您假设 $_POST["username"] 将可用;如果username 不可用,仍然会抛出错误。 isset($_POST["username"]) 防止错误被抛出
猜你喜欢
  • 2011-06-18
  • 1970-01-01
  • 2014-01-27
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2011-08-06
相关资源
最近更新 更多