这个通知指的是什么

时间:2010-11-01 00:46:13

标签: php

注意:未定义的索引:第12行的C:\ wamp \ www \ espn.com \ registration.php中的名称

注意:未定义的索引:第13行的C:\ wamp \ www \ espn.com \ registration.php中的用户名

注意:未定义的索引:第14行的C:\ wamp \ www \ espn.com \ registration.php中的密码 很抱歉,您指定的用户名已经被删除了。请选择另一个。

编码

<html>
<body>
<?php
$dbhost = "localhost";
$dbname = "users";
$dbuser = "root";
$dbpass = "*******";

mysql_connect ($dbhost,$dbuser,$dbpass)or die("Could not connect: ".mysql_error());
mysql_select_db($dbname) or die(mysql_error());

$name = $_POST['name'];
$username = $_POST['username'];
$password = md5($_POST['password']);

$checkuser = mysql_query("SELECT username FROM users WHERE username='$username'"); 

$username_exist = mysql_num_rows($checkuser);

if($username_exist > 1){
    echo "I'm sorry but the username you specified has already been taken.  Please pick another one.";
    unset($username);
    include 'registration.html';
    exit();
}

$query = "INSERT INTO users (name,username, password)
VALUES('$name','$username', '$password')";
mysql_query($query) or die(mysql_error());
mysql_close();

echo "You have successfully registered";
?>
</body>
</html>

2 个答案:

答案 0 :(得分:7)

这意味着$ _POST ['name'],$ _POST ['username']和$ _POST ['password']不存在。当您访问registration.php(或字段名称错误)时,您的表单很可能无法提交。

在PHP中,您必须确保在使用之前设置要使用的每个字段。您可以使用!empty或isset函数。

另外,你的脚本容易受到SQL注入攻击,看看mysql_real_escape_string函数。 你的情况是错误的:如果你想知道用户名是否已经存在,你应该检查它是否大于 0 ,而不是1.你也可以使用COUNT (*)查询而不是选择一行。

答案 1 :(得分:0)

基本上全局变量$ _POST ['name'],$ _POST ['username']和$ _POST ['password']不存在。我建议你检查一下表单的每个输入都是作为名称提交,可以声明如下:

<input name="username"/>

这样您就可以通过$ _POST ['username']访问该输入的值。 在那之后,脚本输出的字符串(我很抱歉,但你已经指定了用户名。请选择另一个。)回显,因为你的SQL查询看起来像这样:

SELECT username FROM users WHERE username=''

将使用空('')用户名返回每个用户。 如前所述,请尽快修复脚本。