#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. Использование блокировщика скриптов в современном Интернете сломает всю сеть … по большей части