Задать вопрос

Как на php убрать тег html эллемента, и очистить форму?

У меня есть форма от админ панели, она подключена и работает, но нужно чтобы когда пароль введен неправильно, на html странице очищалась форма и появлялась надпись "данные введены неверно"(путем снятия класса 'display-none')
я знаю как это сделать на js, но так как данные пароля приходят из бд их получить нужно на php

код на php:
<?php
if (isset($_POST['login']) && isset($_POST['password'])){
    $login = strip_tags(trim($_POST['login']));
    $password = strip_tags(trim($_POST['password']));
    $db = new PDO(dsn:"mysql:host=localhost;dbname=BorkiFestival_site", username:"root", password: "1234");
    $info = [];
    if($query = $db->query("SELECT `login`, `password` FROM `admin`")){
        $info = $query->fetchAll(fetch_style: PDO::FETCH_ASSOC);
    }else{
        print_r($db->ErrorInfo());
    }
    foreach($info as $data):
      if($data["login"] == $login && $data["password"] == $password){
        header('location: admin/admin-input-true.html');
      }else{
        header('location: admin.php');
      }
    endforeach;
}
?>

элемент html
<div class="form__desc margin-bottom-50px display-none">
          Пароль введен неверно!         
      </div>
  • Вопрос задан
  • 141 просмотр
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
По уровню вопроса конечно понятно что гениальности от кода ждать не стоит, но все же...
Для начала пару занудных замечаний:
1)
if($query = $db->query("SELECT `login`, `password` FROM `admin`")){
Не стоит выбирать все записи из таблицы, если вам нужна одна, та где логины совпадают. Это в целом плохая практика, но еще хуже когда такой подход будет применен к большой таблице. SQL для этого и придуман чтобы так не делать. Так же, если у вас есть таблица пользователи, не нужно дублировать функционал, перенесите админов туда же, указав им уровень доступа или роль.
2) пароли в бд должны быть соответствующе зашифрованы, используйте соответствующие функции password_hash() и password_verify() при создании и проверке пароля.
3) Больше совет, чем инструкция: испльзуйте один стиль обрамления кодовых блоков везде, либо текстовые конструкции типа if - endif, либо везде фигурные скобки. Второе предпочтительнее.

Что касается собственно вопроса, есть несколько вариантов, самый кривой из которых уже написал сеньор Sergei Parfenov. При неверном логине код просто продолжается формой и вы имеете все данные о проверке, включая правильность/неправильность пароля. Стоит отметить что в данном случае блок проверки логина нужно обрамить проверкой метода запроса и вызывать ее только в случае если метод запроса POST (как это сделать - задание на дом).

Второй вариант более адекватный, так как первый имеет ряд недостатков.
1) В начале формы создаем переменные в сессии: $_session['message'] и $_session['old'] с пустыми значениями
2) В блоке проверки логина $_session['old'] присваиваем значения пришедшие из формы $_POST.
3) Если в ходе проверки у нас возникли ошибки, пишем сообщение об ошибке в $_session['message'].
4) Выполняем переадресацию. В форме сначала переносим в переменную $message = $_session['message']??'';; и $_session['message'] очищаем. Тоже самое делаем с $old, не забывая что там обычно массив;
5) Переносим в поля формы старые значения там где это нужно из $old;
6) Проверяем что лежит в $message, если там что-то есть - выводим сообщение об ошибке.
Профит.
Ответ написан
Комментировать
SergeiVL
@SergeiVL
Senior PHP developer
Нужно в случае неверного логина / пароля, нужно НЕ редиректить header('location: admin.php');
А отреднерить форму с помощью текущего php сценария. Удалить else блок

И после закрытия php тега ?>
Добавить html код формы c php вставками. Примерно так:

<form action="admin.php">
  <label for="login">login</label>
  <input type="text" id="login" name="login">
<?php if ($data["login"] !== $login || $data["password"] !== $password) ?>
 Неверный логин или пароль
<?php endif; ?>
</form>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы