现有用户名检查不起作用

时间:2011-05-08 19:35:49

标签: php field username

我不确定原因,但下面的代码不检查现有用户名并处理请求。刚刚意识到相同的代码已经过格式化以便进行电子邮件检查,它适用于电子邮件但不适用于用户名。

现有用户名检查的代码(不检查):

 //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('');
  }

2 个答案:

答案 0 :(得分:2)

addslashes关闭时使用magic_quotes_gpc,然后在相同数据上调用mysql_real_escape_string非常不寻常。当我发现数据库中的名称被双重转义时,我觉得在错误修复方面的尝试很糟糕。正确的方法是修复数据库,在stripslashes开启时调用magic_quotes_gpc并仅使用mysql_real_escape_string处理输入数据。

magic_quotes_gpc = onaddslashesmysql_real_escape_string基本上做同样的事情,除了

  • magic_quotes_gpc = on在脚本启动之前对所有输入执行此操作。这是最不合适的,因为它也是在从未用于数据库的输入上完成的(除addslashes的问题外)。
  • addslashes选择性地对您调用它的输入执行此操作。它不会考虑DBMS及其语言环境。
  • 当您想要从变量内容创建SQL语句时,
  • mysql_real_escape_string是您的选择函数(除非您使用预准备语句)。

答案 1 :(得分:1)

我明白了。 $ check值没有加起来。用户名查询有$ check3 = mysql_num_rows($ check);  什么时候应该是$ check3 = mysql_num_rows($ check3);