Проверьте SQL на имя пользователя и адрес электронной почты, создать сообщение об ошибке, если запись существует - PullRequest
0 голосов
/ 26 июля 2011

Когда пользователь регистрируется на моем сайте, я хочу иметь возможность проверить свою таблицу / записи sql и посмотреть, использовались ли уже тот адрес электронной почты и имя пользователя, с которым они регистрируются. Ниже приведен код, который я использую для возврата ошибок, если какое-либо из полей оставлено пустым:

//Input Validations
if($user_name == '') {
    $errmsg_arr[] = 'Username missing';
    $errflag = true;
}
if($user_password == '') {
    $errmsg_arr[] = 'Username Password missing';
    $errflag = true;
}
if($insp_name == '') {
    $errmsg_arr[] = 'Inspector Name missing';
    $errflag = true;
}
if($insp_email == '') {
    $errmsg_arr[] = 'Inspector Email missing';
    $errflag = true;
}
if($confirm_password == '') {
    $errmsg_arr[] = 'Confirm Password missing';
    $errflag = true;
}       

if ($user_password != $confirm_password) { 
        $errmsg_arr[] = 'The password which you have entered do not match';
    $errflag = true;
   }

//If there are input validations, redirect back to the registration form
if($errflag) {
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
    session_write_close();
    header("location: accountinfo.php");
    exit();
}

Я пробовал что-то вроде этого, чтобы проверить мой sql:

$result=mysql_query("SELECT email FROM members WHERE `email` = '$insp_email'" ); 
$exist = mysql_fetch_row($result); 
    if ($exist == 1) { 
       $errmsg_arr[] = 'That email is already registered.';
    $errflag = true;
       }

Это не работает, хотя. Я знаю, что это, вероятно, простое решение, я просто не вижу его, лол. Что я хотел бы, чтобы проверить sql для электронной почты и имени пользователя. Если какой-либо из этих 2 уже существует в SQL, то я хочу перенаправить обратно на страницу регистрации и отобразить сообщение «Этот адрес электронной почты или имя пользователя уже используется»

Спасибо!

Хорошо, теперь у меня все работает, и это именно то, что я хотел. Но еще одна проблема, которую я заметил, - если есть ошибка (пустое поле, имя пользователя уже используется), когда он перенаправляет обратно на страницу регистрации, он не отображает ошибку и не объясняет, почему пользователь был отправлен обратно на страницу регистрации. Опять же мой код для этой части ниже:

//If there are input validations, redirect back to the registration form
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: accountinfo.php");
exit();
}

Ответы [ 3 ]

1 голос
/ 26 июля 2011
$result=mysql_query("SELECT email FROM members WHERE `email` = '$insp_email' or username='$username' LIMIT 1" ); 
$exist = mysql_fetch_row($result); 
    if ($exist !==false ) { 
       $errmsg_arr[] = 'That email is already registered.';
    $errflag = true;
       }
0 голосов
/ 26 июля 2011

Используйте mysql_num_rows.

http://php.net/manual/en/function.mysql-num-rows.php

if (mysql_num_rows($result) > 0)
{
   $errmsg_arr[] = "That email is already registered.";
   $errflag = true;
   etc...

А также, поскольку на самом деле вы пытаетесь выполнить некоторую проверку ввода, вам следует подумать о защите своего кода от SQL-инъекций .

http://php.net/manual/en/function.mysql-real-escape-string.php

Используйте ИЛИ в предложении WHERE для проверки электронной почты и имени пользователя.

$result = mysql_query("SELECT email FROM members WHERE `email` = '$insp_email' OR `username` = '$user_name'");
0 голосов
/ 26 июля 2011

попробуйте что-то вроде этого:

select count(*) from yourtable where username = 'jimmy' and email = 'jim@aol.com';

Если результат = 0, то комбинация не существует, в противном случае она существует.

Однако вам, скорее всего, следует проверять имя пользователя только потому, что вы не хотите, чтобы у нескольких пользователей было одно и то же имя, не так ли?

Если это так, вы можете сделать это, как указано выше, но используйте ИЛИ:

select count(*) from yourtable where username = 'jimmy' or email = 'jim@aol.com';

Надеюсь, это поможет!

EDIT

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...