#php #mysql
#php #mysql
Вопрос:
<?php
session_start();
include("connection.php");
if (mysqli_connect_error()) {
die("Could not connect to database");
if ($_POST['submit'] == "Login") {
$query = "SELECT * FROM EmployeeTable WHERE name='"
. mysqli_real_escape_string($link, $_POST['name'])
. "'AND password='"
. md5(md5($_POST['name']) . $_POST['password'])
. "'LIMIT 1";
$result = mysqli_query($link, $query);
$row = mysqli_fetch_array($result);
if ($row) {
$_SESSION['id'] = $row['id'];
header("Location: http://www.ccm.net/forum/");
} else {
$error = "We could not find a user with that email and password. Please try again.";
}
}
?>
У меня есть приведенные выше коды только для входа пользователя.У меня уже есть таблица с именем пользователя и паролем.Я не хочу создавать кнопку регистрации, просто кнопку входа в систему, поскольку паролем будет сам их «идентификатор».Я могу подключиться к БД.
Пожалуйста, помогите мне, так как после входа в систему я попадаю на пустую страницу.
Комментарии:
1.
md5(md5($_POST['name']) .$_POST['password'])
Что это?2. Вы широко открыты для SQL-инъекций и должны действительно использовать подготовленные операторы вместо объединения ваших запросов.
mysqli_real_escape_string()
не так безопасно, как можно было бы надеяться, плюс то, что вы даже не экранируете все входные данные.
Ответ №1:
Прежде всего: Вы уязвимы для sql-инъекций, используя этот код. Пожалуйста, используйте параметризованные запросы, чтобы не забывать экранировать значения, которые вы используете в своих запросах.
$mysqli = new Mysqli($host, $username, $password, $database);
$mysqli->prepare('SELECT * FROM EmployeeTable WHERE name = ? AND password = ? LIMIT 1');
$mysqli->bind_param('ss', $name, $password);
$mysqli->execute();
$result = $mysqli->fetch_array();
Вы также не должны использовать md5
для хэширования паролей. Используйте встроенные password_*
функции.
password_hash
может использоваться для хэширования паролей следующим образом:
$hash = password_hash($password, PASSWORD_DEFAULT);
Это также применяет то, что называется солью, для усиления хэша против атак по словарю.
Если вы хотите проверить использование паролей, вы можете использовать password_verify
для проверки пароля по сохраненному хэшу следующим образом:
$is_correct = password_verify($password, $hash);
Используя эти методы, вы вряд ли что-нибудь испортите.
Прямым ответом на ваш вопрос может быть либо: if ($_POST['submit'] == "Login")
, либо if($row)
. Я бы использовал count()
для проверки количества найденных результатов следующим образом: if(count($row) > 0)
.
Комментарии:
1. Вам не хватает
?
afterpassword =
Ответ №2:
По предположению, не видя остальной части HTML, он, вероятно, не удовлетворяет инструкции if $ _POST [«submit»]:
if ($_POST['submit'] == "Login") {
и просто завершает сценарий, поскольку другого варианта нет. Возможно, проверьте, что ваша форма POST, название кнопки на самом деле «отправить», а ее значение — «Войти»