Проверка существующего имени пользователя не работает - PullRequest
0 голосов
/ 08 мая 2011

Я не уверен, почему, но код ниже не проверяет существующее имя пользователя и обрабатывает запрос.Просто понял, что тот же код был отформатирован для проверки электронной почты, и он работает для электронной почты, но не для имени пользователя.

код для существующей проверки имени пользователя (без проверки):

 //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 ]

2 голосов
/ 08 мая 2011

Использование 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 делает это выборочно на вводе, который вы вызываетена.Она не учитывает ни СУБД, ни ее язык.
  • mysql_real_escape_string - это функция выбора, когда вы хотите создавать операторы SQL из переменного содержимого (если вы не используете подготовленные операторы).
1 голос
/ 09 мая 2011

Я понял.Значения $ check не складываются.Запрос имени пользователя имел $ check3 = mysql_num_rows ($ check);когда это должно было быть $ check3 = mysql_num_rows ($ check3);

...