Проверка только учетных данных для входа из БД

#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. Вам не хватает ? after password =

Ответ №2:

По предположению, не видя остальной части HTML, он, вероятно, не удовлетворяет инструкции if $ _POST [«submit»]:

 if ($_POST['submit'] == "Login") {
  

и просто завершает сценарий, поскольку другого варианта нет. Возможно, проверьте, что ваша форма POST, название кнопки на самом деле «отправить», а ее значение — «Войти»