2012-04-10 4 views
1

По какой-то причине мой скрипт входа в PHP продолжает возвращать «недействительную комбинацию электронной почты/пароля», но я знаю, что я ввожу правильный адрес электронной почты и пароль. Кто-нибудь видит, что я могу делать неправильно?Понимание вложенных If .. Else statements

<?php 

$email= $_POST['email']; 
$password= $_POST['password']; 

if (!empty($email) && !empty($password)) { 

    $connect= mysqli_connect("localhost", "root", "", "si") or die('error connecting with the database'); 
    $query= "SELECT user_id, email, password FROM users WHERE email='$email' AND    
    password='$password'"; 
    $result= mysqli_query($connect, $query) or die('error with query'); 

    if (mysqli_num_rows($result) == 1) { 
     $row= mysqli_fetch_array($result); 
     setcookie('user_id', $row['user_id']); 
     echo "you are now logged in"; 
    } else { 
     echo "invalid username/password combination"; 
    } 

} else { 
    echo" you must fill out both username and password"; 
} 

?> 
+1

без хорошего отступа, очень сложно понять ваш код ... – dqhendricks

+0

@dqhendricks Только что отредактировал его! :-) –

+0

@dqhendricks это нормально в источнике, только SO рассматривает вкладки как 4 пробела вместо стандартного 8 – tobyodavies

ответ

1

вы получаете уход, что когда mysqli_num_rows ($result) не равна 1 ... Что я думаю, что вы должны сделать, это проверить, если username и password существуют непосредственно в базе данных ..... это единственная логическая причина в сценарии, почему вы должны получить invalid username/password combination

Если у вас есть дополнительные вопросы, дайте мне знать

+0

Это (в основном) правда, но почему получается сообщение «неверное имя пользователя»? Это произойдет только в том случае, если у него более одного пользователя с одним и тем же паролем и электронной почтой ... –

+0

он не может иметь более одного имени пользователя и пароля, но вы можете попробовать 'if (mysqli_num_rows ($ result)> 0) 'просто для проверки того, где именно происходит ошибка – Baba

2

я переключил бы это сказать,

if (mysqli_num_rows($result) > 0) 

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

2

Ваш код выглядит хорошо. Я бы проверил следующее:

Убедитесь, что запрос работает. Я бы откликнулся на запрос и запустил его в своей базе данных в вашей программе БД и посмотрел, каковы результаты.

Удостоверьтесь, что у вас нет более одного пользователя с этой комбинацией электронной почты и пароля - он будет проверять ваш счет.

Проверьте информацию о своем размещении и убедитесь, что они верны тем, что у вас есть в базе данных (без пробелов и т. Д.).

Наконец, вы бы лучше правильно отступов и выложив свой код, увидеть, насколько легче прочитать здесь: http://codepad.org/DmtMuTpC

0

ошибка появлялась, потому что было дублирующие данные в базе данных.