Tikson
@Tikson

Как не потерять введенные данные формы?

Я пробую создать валидацию формы введенных данных на php. Как сделать так, чтобы если например пользователь ввел данные, но не всех полей и нажал кнопку "Отправить" часть уже введенных данных не потерялась? Как это делать именно на php?
Вот мой код
https://phpsandbox.io/n/zgywc
<!-- <pre> -->
<?php
$method=$_SERVER['REQUEST_METHOD'];
$error=null;
$showUserData=false;

$name=null;
$email=null;
$content=null;

if ($method==='POST'){
    if(empty($_POST['name'])){
        $error='Заполните имя';
    }
    elseif(empty($_POST['email'])){
        $error='Заполните email';
    }
    elseif(empty($_POST['content'])){
        $error='Заполните контент';
    }
    elseif(empty($_POST['agree']) || $_POST['agree']!=='on'){
        $error='Дайте согласие на обработку данных';
    }
    // var_dump($_POST);
    if($error===null){
        $showUserData=true;

        $name=$_POST['name'];
        $email=$_POST['email'];
        $content=$_POST['content'];
    }
}
?>
<!-- </pre> -->
<!doctype html>
<html lang="en">
 
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap demo</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
</head>
 
<body>
 
    <div class="container">
 <?php if($error!==null): ?>
        <div class="alert alert-danger mt-5" role="alert">
            <?= $error; ?>
        </div>
 <?php endif; ?>
 <?php if(!$showUserData):?>
        <div class="card mt-5">
            <div class="card-header">
                Форма обратной связи
            </div>
            <div class="card-body">
 
                <form action="<?php $_SERVER['SCRIPT_NAME'] ?>" method='POST'>
                    <div class="mb-3">
                        <label for="name" class="form-label">Имя</label>
                        <input type="text" class="form-control" id="name" name="name">
                    </div>
                    <div class="mb-3">
                        <label for="email" class="form-label">Email</label>
                        <input type="email" class="form-control" id="email" name="email">
                    </div>
                    <div class="mb-3">
                        <label for="content" class="form-label">Текст обращения</label>
                        <textarea class="form-control" id="content" rows="3" name="content"></textarea>
                    </div>
                    <div class="mb-3 form-check">
                        <input type="checkbox" class="form-check-input" id="agree" name="agree">
                        <label class="form-check-label" for="agree">Согласен с обработкой данных</label>
                    </div>
                    <button type="submit" class="btn btn-primary">Отправить</button>
                </form>
 
            </div>
 
        </div>
 
 <?php else: ?>
        <div class="card mt-5">
            <div class="card-header">
                Данные формы
            </div>
            <div class="card-body">
 
                <div class="row mb-3">
                    <div class="col-2">Имя:</div>
                    <div class="col-10"><?= $name;?></div>
                </div>
                <div class="row mb-3">
                    <div class="col-2">Email:</div>
                    <div class="col-10"><?= $email;?></div>
                </div>
                <div class="row mb-3">
                    <div class="col-2">Текст обращения:</div>
                    <div class="col-10"><?= $content;?></div>
                </div>
 
                <a href="/" class="btn btn-primary">Обратно к форме</a>
 
            </div>
 
        </div>
 
 
 
    </div>
 
    <?php endif;?>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
        crossorigin="anonymous"></script>
</body>
 
</html>
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
@balamyt92
; select * from users; --
В тех полях что нужно сохранить добавить атрибут value и вывести туда значение
например:
<div class="mb-3">
  <label for="name" class="form-label">Имя</label>
  <input type="text" class="form-control" id="name" name="name" value="<?= $name; ?>">
</div>


PS: вероятно у вас в action формы ошибка т.к. там не хватает echo
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы