Столкнулся с вот такой проблемой. Создал небольшую форму с обработчиком. Мне нужно выводить ошибки ее заполнения, но я не могу этого сделать ни через редирект на
../страница_формы?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?
Мне удалось решить проблему путем редиректа.
Вместо
header("Location: ../panel/admin.php#pass?changePass=empty");
Записал
header("Location: ../panel/admin.php?changePass=empty#pass");
Таким образом - все стало работать. Но я почему-то уверен, что существует более правильное решение этой проблемы
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть форма, которая отправляется два раза на две почтыАбсолютно одинаковые
Есть простенькая гостевая книга: в форме обратной связи 2 поля (имя и комментарий), аяксом данные отправляются на сервер и обратно выводятся...