Вывод ошибки заполнения формы PHP

194
03 августа 2018, 10:00

Столкнулся с вот такой проблемой. Создал небольшую форму с обработчиком. Мне нужно выводить ошибки ее заполнения, но я не могу этого сделать ни через редирект на

../страница_формы?zapolneno=error

Ни через объявленный в обработчике массив $errors и заполнение его через

array_push($errors, "OSHIBKA");

По той причине, что скрипт не считает $errors как массив и ф-ция count не срабатывает.

ПОЛАГАЮ, ЧТО ПРОБЛЕМА В ТОМ, ЧТО ФОРМА НАХОДИТЬСЯ ВО ВКЛАДКЕ #pass.

Вот код обработчика:

    <?php
$errors = array();
$success = array();
if (isset($_POST['changePass'])){
    include_once "server.php";
    $exPass = mysqli_real_escape_string($conn, $_POST['exPass']);
    $newPass = mysqli_real_escape_string($conn, $_POST['newPass']);
    $newPassRep = mysqli_real_escape_string($conn, $_POST['newPassRep']);
    $sql = mysqli_query($conn, "SELECT password FROM users");
    $pass = mysqli_fetch_assoc($sql);
    if ($exPass == "" || $newPass == "" || $newPassRep == ""){
        header("Location: ../panel/admin.php#pass?changePass=empty");
        exit();   // ВОТ ТАК ВЫГЛЯДИТ РЕДИРЕКТ. ПОЛАГАЮ, ЧТО ПРОБЛЕМА В ТОМ, ЧТО ФОРМА НАХОДИТЬСЯ ВО ВКЛАДКЕ #pass
    }
    if ($exPass != $pass['password']){
        array_push($errors, "The existing password was entered incorrectly");
    }
    if ($exPass == $newPass){
        array_push($errors, "The new password must be different from the previous one");
    }
    if ($newPass != $newPassRep){
        array_push($errors, "The second password is different");
    }
    if (count($errors) == 0){
        $sql = "UPDATE users SET password = '$newPass' WHERE id = 1";
        $result = mysqli_query($conn, $sql);
        array_push($success, "Password was changed!");
    }
}
?>

Код формы:

    <form action="../server/changepass.inc.php" method="post" class="changePass">
                <?php
                    include_once "../server/errors.inc.php"; <!-- Вывод ошибки -->
                ?>
                <div class="textbox" aria-hidden="true">
                    <input type="text" name="exPass" placeholder="Enter existing password">
                </div>
                <div class="textbox" aria-hidden="true">
                    <input type="password" name="newPass" placeholder="Create new password">
                </div>
                <div class="textbox" aria-hidden="true">
                    <input type="password" name="newPassRep" placeholder="Repeat new password">
                </div>
                <button type="submit" name="changePass">Change</button>
            </form>

И код файла errors.inc.php

<?php if (count($errors) > 0): ?>
<div class="error">
    <?php foreach ($errors as $error): ?>
        <p><?php echo $error; ?></p>
    <?php endforeach ?>
</div>

Еще раз повторюсь, форма находится во вкладке, поэтому путь к ней такой:

panel/admin.php#pass

Вопрос такой, как сделать вывод ошибки заполнения формы не прибегая к js?

Answer 1

Мне удалось решить проблему путем редиректа.

Вместо

 header("Location: ../panel/admin.php#pass?changePass=empty"); 

Записал

header("Location: ../panel/admin.php?changePass=empty#pass"); 

Таким образом - все стало работать. Но я почему-то уверен, что существует более правильное решение этой проблемы

READ ALSO
Как сделать поинты/валюту на сайте

Как сделать поинты/валюту на сайте

Я не знаю как правильно сформулировать вопрос, но попробую

182
Подставить значения в массив php

Подставить значения в массив php

реально получить вот так

187
Отправка 2-х разных писем AJAX

Отправка 2-х разных писем AJAX

Есть форма, которая отправляется два раза на две почтыАбсолютно одинаковые

204
PHP: запись в файл vs база данных

PHP: запись в файл vs база данных

Есть простенькая гостевая книга: в форме обратной связи 2 поля (имя и комментарий), аяксом данные отправляются на сервер и обратно выводятся...

208