Я очень новичок в php и mysql. Я нашел отличный учебник для создания раздела регистрации и регистрации на сайте. Мне удается очень хорошо его деконструировать и внести незначительные изменения. Однако…
При входе в систему, если пароль неверен, он проверяет и возвращается ошибка. Если он правильный, он входит в систему.
Проблема заключается в том, что если вы введете правильный пароль, но добавьте дополнительные символы после того, как он не проверит и не войдет в систему. Просто идет на пустую страницу. Вот код проверки для страницы входа –
<?php include('db.php'); if(!isset($_POST['login']))//checking if user has entered this page directly { include('form.php'); } else{ if(isset($_POST['user'])&&$_POST['user']==""||!isset($_POST['user'])) { $error[] = "Username Field can't be left blank"; $usererror = "1"; } if(!isset($usererror)) { $user = mysql_real_escape_string($_POST['user']); $sql = "SELECT * FROM users WHERE user = '$user'"; if(mysql_num_rows(mysql_query($sql))=="0")//1 means there is one entry same so we print error { $error[] = "Can't find a user with this username"; } } if(isset($_POST['pass'])&&$_POST['pass']==""||!isset($_POST['pass'])) { $error[] = "password Field can't be left blank"; } if(isset($error)){ if(is_array($error)){echo "<div class=\"error\"><span>please check the errors and refill the form<span><br/>"; foreach ($error as $ers) { echo "<span>".$ers."</span><br/>"; } echo "</div>"; include('form.php'); } } if(!isset($error)){ $suser=mysql_real_escape_string($_POST['user']); $spass=md5($_POST['pass']);//for secure passwords $find = "SELECT * FROM users WHERE user = '$suser' AND password = '$spass'"; if(mysql_num_rows(mysql_query($find))=="1"or die(mysql_error())){ session_start(); $_SESSION['username'] = $suser; header("Location: loggedin.php"); } else{ echo "<div class=\"warning\"><span>Some Error occured durring processing your data</div>"; } } } ?>
Любая помощь будет оценена…
РЕДАКТИРОВАТЬ
Я только что заметил, что единственная ошибка, которую я получаю, – это если не введен пароль NO. Если введен неправильный пароль, я получаю пустую белую страницу. Может ли кто-нибудь помочь, почему пароль не проверяется?
Используйте trim()
для обработки лишних пробелов до и после строк
Похож на логическую проблему. Для упорядочивания условных выражений необходимо использовать скобки:
if( (isset($_POST['pass'])&&$_POST['pass']=="") || !isset($_POST['pass']) )
Попробуйте это и посмотрите, работает ли это.
if(mysql_num_rows(mysql_query($find))=="1") { session_start(); $_SESSION['username'] = $suser; header("Location: loggedin.php"); } else { echo "<span>Your username or password was incorrect.</span>"; include "form.php"; die; }
if (mysql_num_rows (mysql_query ($ find)) == "1" или die (mysql_error ())) {
Если SQL-запрос не возвращает никаких результатов (это означает, что пароль и имя пользователя не совпадают), оператор if возвращает false и ничего не происходит. В этом случае вы должны вернуть сообщение об ошибке.
РЕДАКТИРОВАТЬ:
После этого я не заметил другого утверждения. Я думаю, что фактическая проблема – die (mysql_error ()) . Когда SQL-запрос не возвращает никаких результатов, оператор if выполнит die (mysql_error ()), который вернет пустой, поскольку пустой результат не является ошибкой.
Я предлагаю вам удалить die (mysql_error ()) и включить отдельный оператор if для проверки на mysql_errno () (который возвращает true, когда есть ошибка).
if (mysql_errno ()) {die (mysql_error ()); }
Стоит отметить, что функции mysql_ * устарели в последних версиях PHP. Рекомендуется использовать MySQLi или PDO для подключения к MySQL на PHP.