PHP mySQL проверяет, находятся ли имя пользователя и пароль в базе данных

Я хочу, чтобы мой код проверял, существуют ли имя пользователя и пароль в моей базе данных. Он работает жестко, но я хочу сделать это с помощью базы данных. Теперь это то, что у меня есть:

if(isset($_POST["name"], $_POST["password"])) { $name = $_POST["name"]; $password = $_POST["password"]; $result1 = mysql_query("SELECT password FROM Users WHERE username = '".$name."'"); $result2 = mysql_query("SELECT username FROM Users WHERE password = '".$password."'"); if($name == $result2 && $password == $result1) { $_SESSION["logged_in"] = true; $_SESSION["naam"] = $name; } else { echo'The username or password are incorrect!'; } } 

Проблема в том, что result1/2 я думаю, потому что, когда я использую правильное имя пользователя и пароль на своем сайте, он дает неверное сообщение.

О да, и запрос работает тоже, попробовал его в PHPmyAdmin, но затем без имени $name который я заменил его именем пользователя

Вы можете использовать mysql_num_rows() и объединить свой запрос – см. Сноски

 if(isset($_POST["name"], $_POST["password"])) { $name = $_POST["name"]; $password = $_POST["password"]; $result1 = mysql_query("SELECT username, password FROM Users WHERE username = '".$name."' AND password = '".$password."'"); if(mysql_num_rows($result1) > 0 ) { $_SESSION["logged_in"] = true; $_SESSION["naam"] = $name; } else { echo 'The username or password are incorrect!'; } } 

Чтобы сделать ваш настоящий код более безопасным, используйте:

 $name = stripslashes($_POST["name"]); $name = mysql_real_escape_string($_POST["name"]); $password = stripslashes$_POST["password"]); $password = mysql_real_escape_string$_POST["password"]); 

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


Примечания:

Ваш существующий код открыт для SQL-инъекции . Используйте подготовленные заявления или PDO с подготовленными заявлениями . Посетите эти ссылки для получения дополнительной информации.

Я заметил, что вы можете хранить пароли в текстовом виде. Если это так, то оно очень обескуражено.

Если вы и это сайт LIVE, вы, в конце концов, будете взломаны.

Я рекомендовал вам использовать функцию CRYPT_BLOWFISH или PHP 5.5's password_hash() . Для PHP <5.5 используйте password_hash() compatibility pack .


mysql_* уведомление об mysql_* функций:

http://www.php.net/manual/en/intro.mysql.php

Это расширение устарело с PHP 5.5.0 и не рекомендуется для написания нового кода, поскольку оно будет удалено в будущем. Вместо этого следует использовать расширение mysqli или PDO_MySQL . См. Также Обзор API MySQL для получения дополнительной информации при выборе API MySQL.

Эти функции позволяют вам обращаться к серверам баз данных MySQL. Более подробную информацию о MySQL можно найти на странице http://www.mysql.com/ .

Документацию по MySQL можно найти по адресу http://dev.mysql.com/doc/ .


Изменить: чтобы помочь OP (просмотрите ссылки, которые я предоставил относительно хэширования паролей).

Попробуйте заменить

  if(mysql_num_rows($result1) > 0 ) { $_SESSION["logged_in"] = true; $_SESSION["naam"] = $name; } else { echo 'The username or password are incorrect!'; } 

с:

 while($row=mysql_fetch_assoc($result1)) { $check_username=$row['username']; $check_password=$row['password']; } if($username == $check_username && $password == $check_password){ echo "Matches."; } else{ echo "No match."; } в while($row=mysql_fetch_assoc($result1)) { $check_username=$row['username']; $check_password=$row['password']; } if($username == $check_username && $password == $check_password){ echo "Matches."; } else{ echo "No match."; } 

$name и $password , вероятно, являются строками. Если ваши запросы пройдут и завершится правильно, они будут возвращены как объекты.

Чтобы это сработало, вам просто нужно удалить $name == и $password == из условия if() !

Вы можете также объединить эти запросы для простоты.

 <?php $result = mysql_query("SELECT username, password FROM Users WHERE username = '".$name."' && password = '".$password."'"); if ($result && mysql_num_rows($result) > 0) { // Login } else { // Failed! } 

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