我不确定原因,但下面的代码不检查现有用户名并处理请求。刚刚意识到相同的代码已经过格式化以便进行电子邮件检查,它适用于电子邮件但不适用于用户名。
现有用户名检查的代码(不检查):
//Session info
$username = $_SESSION["username"];
$_SESSION["username"] = $username;
$ucheck = mysql_real_escape_string($_POST['username']);
$check3 = mysql_query("SELECT username FROM accounts
WHERE username = '$ucheck' AND NOT(username='$username')")
or die(mysql_error());
$check3 = mysql_num_rows($check);
//if the name exists it gives an error
if ($check3 != 0) {
print("");
die('');
}
我已经检查过,字段名称是正确的。
现有电子邮件检查代码(正常工作):
$urlcheck = mysql_real_escape_string($_POST['email']);
$check = mysql_query("SELECT email FROM accounts
WHERE email = '$urlcheck' AND NOT(username='$username')")
or die(mysql_error());
$check2 = mysql_num_rows($check);
//if the name exists it gives an error
if ($check2 != 0) {
print("");
die('');
}
答案 0 :(得分:2)
在addslashes
关闭时使用magic_quotes_gpc
,然后在相同数据上调用mysql_real_escape_string
非常不寻常。当我发现数据库中的名称被双重转义时,我觉得在错误修复方面的尝试很糟糕。正确的方法是修复数据库,在stripslashes
开启时调用magic_quotes_gpc
并仅使用mysql_real_escape_string
处理输入数据。
magic_quotes_gpc = on
,addslashes
和mysql_real_escape_string
基本上做同样的事情,除了
magic_quotes_gpc = on
在脚本启动之前对所有输入执行此操作。这是最不合适的,因为它也是在从未用于数据库的输入上完成的(除addslashes
的问题外)。addslashes
选择性地对您调用它的输入执行此操作。它不会考虑DBMS及其语言环境。mysql_real_escape_string
是您的选择函数(除非您使用预准备语句)。答案 1 :(得分:1)
我明白了。 $ check值没有加起来。用户名查询有$ check3 = mysql_num_rows($ check); 什么时候应该是$ check3 = mysql_num_rows($ check3);