2013-08-24 4 views
0

Привет, ребята, я работал в течение 12 часов, я не могу найти исправление. Я пытаюсь сравнить пользовательский ввод с результатом базы данных, например $username == $result echo «Имя пользователя уже принято, но проблема в том, что он проходит через 2 оператора без перерыва, и если я поставлю перерыв для выхода из цикла, он всегда проверяет для $email == $result2 несмотря на не входящих любой электронной почты в полеPHP mysql bug query

if (isset($_POST['username']) or isset($_POST['email'])) { 
    $extract = mysql_query(" 
     SELECT 
      `username`, `email` 
     FROM `users` 
     WHERE `username`='$username' OR `email`='$email' 
    "); 

    $resultq = mysql_num_rows($extract); 
    while ($row = mysql_fetch_array($extract)) { 

     $result = $row['username']; 
     $result2 = $row['email']; 

     echo " " . $result; 
     echo " " . $result2; 

     if ($username == $result) { 
      echo " Username is already Taken!"; 
      // break; //whenever i put break, it always gives me the else if statement echo, despite not entering any email in the field 
     } //$pass = $_POST['pass']; 
     else if ($email == $result2) { 
      echo "Email Address is already used!"; 
      // break; 
     } else { 
     } 
    } 
} 
+0

Объясните мне, как это отличается от [mysql phpmyadmin User Input База данных COMPARE] (http://stackoverflow.com/questions/18407734/mysql-phpmyadmin-user-input-compare-database). Вы можете использовать вариант моего решения для этого также ... –

+0

Ваш скрипт уязвим для SQL-инъекций. – Gumbo

ответ

2

Обновление с MySQL на любой MySQLi или PDO

Однако,..

$extract= mysql_query("SELECT username, email FROM users where username='$username' or email='$email'"); 

$resultq = mysql_num_rows($extract); 
    if($resultq > 0) { 
     echo 'Either your username, or email is already taken!'; 
     return; 
    } 
0

См sniko для ответа на ваш INI проблемы. Однако увидеть следующее ...

Вы не определяющий $ имя пользователя или $ электронной почте

if ($username == $result) должен быть

if ($_POST['username'] == $result) 

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

Вы также должны изменить это:

isset($_POST['username']) or isset($_POST['email']) 

к этому:

isset($_POST['username']) && isset($_POST['email']) 

, потому что вы зависите как в запросе.

и, как сказал sniko, переключиться на mysqli или PDO. mysql_ устарел.

полный образец:

if(isset($_POST['username']) && isset($_POST['email'])) 
{ 
    $username = $_POST['username']; 
    $email = $_POST['email']; 

    $extract= mysql_query("SELECT username, email FROM users where username='$username' or email='$email'"); 

    $resultq = mysql_num_rows($extract); 
    if($resultq > 0) { 
     echo 'Either your username, or email is already taken!'; 
     return; 
    } 

} 

Также обратите внимание, что вы не дезинфицировать вход. Вы можете взломать этот вход. переключение на mysqli или pdo и использование подготовленных операторов помогло бы этому.

+0

У меня это до утверждения if, это то же самое? $ email = $ _POST ['email']; $ username = $ _POST ['username']; – Daryl

+0

Да, это почти то же самое, что и назначения, но вы по-прежнему вызываете оба в запросе, поэтому вам нужно либо разделить это на два запроса, либо сделать оба поля обязательными. –

+0

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