Передача данных между PHP файлами

93
24 марта 2022, 15:10

Есть тестовый сайт на котором форма регистрации находиться в одном файле,а обрабатываеться в другом,обработка устроенна так,что если логин/пароль верны,происходит редирект на форму и создается кука,если же логин/пароль не верны,то просто редирект на форму,но хотелось бы чтоб выше формы выводилась ошибка,которая присваевается некой переменной,а затем та переменная должна попасть в форму,как такое реализовать? Код формы:

<form action="login.php" method="POST">
  <h4 style="color: red;"><?=ВОТ СЮДА БУДУ ВСТАВЛЯТЬ ПЕРЕМЕННУЮ?></h4><br>
  <input type="text" name="username" placeholder="username" class="form-control" value="<?=$_POST['username']?>"><br>
  <input type="password" name="password" placeholder="password" class="form-control"><br>
  <input type="submit" class="btn btn-success" name="do_auth" value="Log in">
</form>

PHP:

<?php
  require_once 'includes/config.php';
  $username = $_POST['username'];
  $password = md5($_POST['password']);
  if(isset($_POST['do_auth'])) {
    $signin = $connection->query("SELECT * FROM `admins` WHERE `username` = '" . $username . "' AND `password` = '". $password."'");
    if( mysqli_num_rows($signin) == 0 ) {
        $login_error = 'Incorrect username or password'; //<<<--- Вот эту переменную нужно передать
        header('Location: admin.php');
        die();
    }
    setcookie('user', $username, time() + 60, "/");
    header('Location: admin.php');
  }
?>
Answer 1

Это делается с помощью механизма сессий:

// Запуск сессии
session_start();
require_once 'includes/config.php';
// Если $_SESSION['error'] не пустой
if (! empty($_SESSION['error'])) {
    // сохранить текст ошибки в переменную
    $login_error = $_SESSION['error'];
    // и очистить сессию, чтоб после обновления
    // страницы текст ошибки не отображался
    unset($_SESSION['error']);
} else {
    $login_error = null;
}
$username = $_POST['username'] ?? '';
if (isset($_POST['do_auth'])) {
    $password = md5($_POST['password']);
    $signin = $connection->query("SELECT * FROM `admins` WHERE `username` = '" . $username . "' AND `password` = '". $password."'");
    // Если произошла ошибка
    if( mysqli_num_rows($signin) == 0 ) {
        // сохранить её текст в сессии
        $_SESSION['error'] = 'Incorrect username or password';
        header('Location: admin.php');
        die;
    }
    setcookie('user', $username, time() + 60, "/");
    header('Location: admin.php');
}
?>
<form action="login.php" method="POST">
    <h4 style="color: red;"><?= $login_error ?></h4><br>
    <input type="text" name="username" placeholder="username" class="form-control" value="<?= $username ?>"><br>
    <input type="password" name="password" placeholder="password" class="form-control"><br>
    <input type="submit" class="btn btn-success" name="do_auth" value="Log in">
</form>

И ещё - почитайте про "Подготовленные выражения", дабы убрать уязвимость из вашего sql-запроса:

"SELECT * FROM admins WHERE username = '" . $username . "' AND password = '". $password."'"

READ ALSO
Проблема с подключением библиотеки brain.js

Проблема с подключением библиотеки brain.js

Написал нейросеть на JavaScript (должна определять рисунки), однако возникла проблема при подключении самой библиотеки brainjs

159
Регулярное выражение JS не работает

Регулярное выражение JS не работает

Всем ку! Помогите плез разобратьсяПочему при следующем коде я получаю вывод 'ttps', а не 'facebook'? Почему не работает \?

107
Получить geoJSON полигоны напрямую онлайн

Получить geoJSON полигоны напрямую онлайн

Я использую карты leaflet, и мне нужно выделить определенные регионыЯ делаю выделение с помощью полигонов geoJSON

68
Работа с файловой системой JS ( Source-&gt;Filesystem )

Работа с файловой системой JS ( Source->Filesystem )

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

86