Проверка формы перед отправкой или отправка формы без проверки PHP?

79
03 марта 2022, 15:00

я изучаю PHP. Мне интересно решать задачи по средствам PHP, HTML и CSS, поэтому прошу не предлагать решения по средствам JS, AJAX.

Есть 2 файла form.php с обработчиком ошибок и save.php с обработчиком сохранения данных(для примера обработчик save.php создает папку login и сохраняет в нее пароль и почту)

  1. Если мы отправляем форму на <form action="save.php" method="post">, то мы сохраняем данные, но не получаем вывод ошибок.
  2. Если мы отправляем форму саму на себя <form action="" method="post">, то получаем вывод ошибок, но при этом данные не передаются на страницу для записи save.php

Задача у меня стоит такая: 1. Проверить форму на валидность и выводить ошибки на этой же странице 2. Если форма заполнена согласно условиям, то отправлять пользователя на следующую страницу, где ему выведут сообщение "Вы успешно зарегистрировались!"

FORM.PHP

<?php
$data = $_POST;
if (isset($data["button"])){
    $errors = array();
    if ($data["login"] == "") {
        $errors[] = "Вы не указали *Login:";
    }
    if ($data["password"] == "") {
        $errors[] = "Вы не указали *Password:";
    }
    if (empty($errors)) {
        // что то работает
    }
    else {
        echo "*Обязательные поля не заполнены";
    }
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Зарегистрировать нового пользователя</title>
</head>
<body>
<form action="" method="post">
    *Login:
    <label>
        <input name="login" value="<?php echo $data["login"];?>"/>
    </label> <br>
    *Password:
    <label>
        <input name="password" />
    </label><br>
    Email:
    <label>
        <input name="email" value="<?php echo $data["email"];?>" />
    </label><br>
    <input  type="submit" value="ОК" name="button" /><br>
</form>
</body>

SAVE.PHP

<?php
/*СОЗДАЕМ ПАПКУ login ЮЗЕРА*/
$login = $_POST['login'];
mkdir("$login");
/*Записываем "Password" в файл $login/password.txt*/
$password = $_POST['password'];
$folder_user = fopen("$login/password.txt", "w");
fwrite($folder_user, $password);
fclose($folder_user);
/*Записываем "Email" в файл $login/email.txt*/
$email = $_POST['email'];
$folder_user = fopen("$login/email.txt", "w");
fwrite($folder_user, $email);
fclose($folder_user);
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Успешная регистрация</title>
</head>
<body>
Вы успешно зарегистрировались!
</body>
Answer 1

Проще оставить один файл form.php и в нем производить сохранение.

Сначала нужно проверить если страница была запрошена после нажатия кнопки submit тогда произвести проверку на корректность заполнения формы, в случае успеха произвести сохранение, после чего сделать редирект на нужную страницу:

if(isset($_POST['submit']) {
    //код проверки
    if (empty($errors)) {
        // код сохранения
        header('Location: адрес страницы');    
    }
}
READ ALSO
Где искать log файл в структуре bitrix?

Где искать log файл в структуре bitrix?

Вылезла ошибка 500Пытаюсь освоить bitrix

75
curl command в php скрипт

curl command в php скрипт

Подскажите пожалуйста

106
как получить начало массива в консоли

как получить начало массива в консоли

Работаю над чужим парсеромЕго работу проверяю в консоли

131
Как передать Request Headers что бы получить json

Как передать Request Headers что бы получить json

Есть API, которое возвращает информацию в соответствии с передаваемыми заголовками (Reauest Headers)Нужно выполнить запрос:

108