2013-08-23 3 views
0

Я новичок в PHP и Mysql, по какой-то причине он проверяет только оператор if ($ email == $ result2), который вводит имя пользователя или адрес электронной почты. Я не знаю почему? может кто-то объяснить это логически, я застрял часами, выясняя это. :(Спасибо Пожалуйста, будьте добры.Я не знаю, что не так с этим кодом SQL

<?php 
session_start(); 
include_once("connect.php"); 

$email = $_POST['email']; 
$username = $_POST['username']; 
//echo $_POST['email']; 



if(isset($_POST['email'])) 
{ 
$extract= mysql_query("SELECT username, email FROM users"); 
$resultq = mysql_num_rows($extract); 
while($row= mysql_fetch_array($extract)) 
{ 

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


    //$pass = $_POST['pass']; 

    if($email == $result2) 
    { //check if there is already an entry for that username 
     echo "Email Address is already used!"; 
     exit(); //break; 
    } 
    if ($username == $result) 
    { 
     echo " Username is already Taken!"; 
      //mysql_query("INSERT INTO users (Username, Password) VALUES ('$user', '$pass')"); 
      //header("location:index.php"); 
     exit(); //break; 
    } 
    else 
    { 

    } 
} 

}

+0

Что вы имеете в виду –

+0

Это будет потенциально очень медленным. Что, если ваша таблица 'users' имела в ней большое количество строк? Это много данных для возврата и повторения. Я думаю, вам следует реорганизовать это, чтобы включить параметры электронной почты и имя пользователя * в * ваш запрос и позволить БД выполнить эту работу за вас. –

+0

Удалить 'exit()'. Удалите пустой 'else'. Если вы хотите, чтобы второе условие проверялось только в том случае, если первое значение false, используйте «else if». Если нет, используйте 'if'. В любом случае, я не вижу необходимости в 'exit()'. – Ariane

ответ

0

Я думаю, вам лучше использовать уникальный в вашей электронной почты и поле пользователя, то вам не нужно, чтобы проверить это больше, MySQL будет делать это для вас!

4

Это ведет себя, как написано. Если какой-либо if() тест успешно, вы сообщаете сценарий exit().

Удалить выход() вызывает ...

Вы также действительно НЕОБХОДИМО узнать о предложениях WHERE в запросах. Вы сосать всю таблицу пользователей и сравнивать записи по одному. Это эквивалент езды в продуктовый магазин, скупка инвентаря магазина ENTIRE, заведение его домой ... затем выброс всего этого в мусор, потому что все, что вам действительно нужно, это одна конфетка.

+0

, но он проверяет только ($ email == $ result2), даже если мой вход был именем пользователя, который соответствует базе данных, он будет использовать уже использованный адрес электронной почты. я не знаю, в чем проблема ... – Daryl

+0

так что начните отладку. проверьте, правильно ли отправлена ​​ваша форма. см., если $ email - это то, что, по вашему мнению, должно быть. Посмотрите, является ли $ result2 тем, что, по вашему мнению, должно быть и т. Д. –

+0

странно, когда я удаляю isset(), он проверяет и запускает все мое заявление, но дает мне ошибку, неустановленный индекс, всякий раз, когда я помещаю isset() обратно ошибка уходит, и моя проблема возвращается ... любое объяснение? Я попробовал предложение WHERE, но используя where where, я могу проверить только ((username == database) && (password == database)), а не конкретно определяет, было ли имя пользователя или пароль взяты, это было подчеркнуто мной в течение 12 часов, я могу 't найти какое-либо решение – Daryl

0

попробовать этот

if($email == $result2) 
{ //check if there is already an entry for that username 
    echo "Email Address is already used!"; 
    //---------removed that line 
} 
else if ($username == $result) //add else if instead of if 
{ 
    echo " Username is already Taken!"; 
     //mysql_query("INSERT INTO users (Username, Password) VALUES ('$user', '$pass')"); 
     //header("location:index.php"); 
    //----------removed that line 
} 
else 
{ 

} 

EDIT:

изменение этой

if(isset($_POST['email'])) 

в

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

это, чтобы проверить их обоих. вы проверяете только электронную почту, и почему вы не получаете второй, если.

0

Включает ли он во второй оператор if ($ username == $ result) после того, как вы закомментируете первый (if ($ username == $ result))?

Если да, то он продолжает бить эту функцию exit().

0

Ребята, я подобрал ответ, объединив некоторые из ваших комментариев. по какой-то причине мне нужно включить isset ($ _ POST ['username']) вместе с isset ($ _ POST ['email']), чтобы мои if-выражения были выполнены ... возможно, это была проверка isset, если это значение для имени пользователя.

+0

проверить измененный ответ. –

0

изменение этой линии следующая строка:

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

Тогда используйте где предложение следующим образом: «это только проверяет заявление»

$extract= mysql_query("SELECT username, email FROM users where username='$username' and email='$email'"); 
Смежные вопросы