PHP — Форма: сохранение записей / выборок при отправке формы

#php #forms #form-submit

#php #формы #форма-отправить

Вопрос:

У меня есть PHP-форма, в которой есть несколько выпадающих списков и записей текстового поля. Если пользователь выбирает неправильный элемент из выпадающего списка, когда он отправляет форму, у меня это так, что он покажет пользователю сообщение об ошибке и заставит браузер вернуться на предыдущую страницу. Проблема в том, что пользователю приходится повторно вводить всю информацию.

Как мне заставить форму сохранять данные до тех пор, пока отправка формы не будет успешной?

Редактировать:

Метод отправки формы есть $_POST , и форма отправляется на другую страницу.

Это должно быть сделано строго на PHP, поскольку решения Javascript / Jquery могут быть заблокированы скриптами более защищенными пользователями.

Ответ №1:

Вот так. Это будет работать и не зависит от Javascript:

form.php // страница формы

 <?php session_start(); ?>
<form method="post" action="action.php">
    <input type="text" id="input1" value="<?php echo (isset($_SESSION['fields']) ? $_SESSION['fields']['input1'] : '') ?>" />
    <input type="text" id="input2" value="<?php echo (isset($_SESSION['fields']) ? $_SESSION['fields']['input2'] : '') ?>" />   
</form>
  

action.php //страница действия

 <?php
    session_start();

    //do your validation here. If validation fails:

    $_SESSION['fields']['input1'] = $_POST['input1'];
    $_SESSION['fields']['input2'] = $_POST['input2'];

    //redirect back to form.php
?>
  

Ответ №2:

Является ли форма POST или GET? В любом случае у вас есть доступ ко всем отправленным полям в переменных PHP $ _POST или $ _GET. В вашем HTML вы можете передать эти значения (если они установлены) в значение по умолчанию для каждого элемента ввода HTML. Таким образом, если это происходит в первый раз, они будут пустыми, если произошла ошибка, значения будут повторно заполнены.

Комментарии:

1. Это не сработает, если форма отправляется на другую страницу, верно? Если форма находится в form.php и она отправляется action.php , после action.php сбоя проверки и перенаправления обратно form.php , $_POST она будет очищена.

2. Верно. Я предположил, что он был отправлен на ту же страницу, что, вероятно, было плохим предположением.. В этом случае, когда вы перенаправляете обратно в форму, вы можете вставить $ _POST или $ _GET в сеанс.

3. Да, это то, что я понял. Либо добавьте данные в $_SESSION , либо, при перенаправлении обратно form.php , добавьте данные в $_GET

4. @BenM: для отправки формы из action.php потребуется Javascript. Если в браузере нет JS (не поддерживается или отключен), не будет ли это довольно впечатляющим сбоем?

5. ОК, или добавить переменные как inlinks? Таким образом, они доступны (т. Е. $_GET )

Ответ №3:

Если они являются значениями выбора, вы можете сделать что-то вроде этого:

 <select name="my_select" id="my_select">
    <option value="123"<?php if($_REQUEST['my_select'] == 123) echo ' selected="selected"; ?>>123</option>
</select>
  

Если у вас обычный ввод текста, вы можете просто применить $_REQUEST переменную к value атрибуту:

 <input type="text" name="my_text" value="<?php echo $_REQUEST['my_text'] ?>" />
  

Ответ №4:

Я предлагаю запретить переход страницы от отправки к отправке до тех пор, пока данные не будут проверены. Введите jQuery 🙂

 <script type="text/javascript" src="jquery-library.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        // Wait for the user to click on your button
        $('#submit_button').click(function(){
            // Check each form field for an appropriate value
            if ($('#form_field1').val() != 'something I expect')
            {
                alert('Wrong submission!');
                return false;
            }
            // Forward the user to some url location
            window.location = 'url';
            return false;
        });
    });
</script>
  

Комментарии:

1. Есть много способов выполнить то, что я предлагаю… у каждого из них есть свои нюансы, и может потребоваться некоторое время, чтобы все это заработало, но в конце, я уверен, это сделает вас счастливее…

2. Приятно, когда Jquery выполняет проверку формы, но если Javascript отключен и проверка выполняется PHP-скриптом, вам понадобится какой-то способ повторно заполнить поля и в этом случае

3. Хороший комментарий, но, как я уже говорил выше, все эти идеи — всего лишь идеи, пока мы не сможем определить, является ли js частью проекта или нет. На данный момент мы просто не знаем.

4. @xbonez вы правы в этом. некоторые люди (например, я) используют блокировщики скриптов. Поэтому я бы предпочел, чтобы он просто выполнял действие при отправке формы, а не активно.

5. Использование блокировщика скриптов в современном Интернете сломает всю сеть … по большей части