|
|
|
| Всем привет!
Не подскажит ли мне кто-нибудь как сделать так, чтобы при вводе данных в поле формы, если информация не удовлетворяет регулярному выражению, то ошибка выводилась на этой же странице, где находится форма. И чтобы страница не обновлялась.
У меня 2 скрипта:
1 скрипт (form.php)
<form name=form action="add.php" method="post">
<table>
<tr><td>Фамилия </td><td><input size=20 type=text name=FIO value=''></td></tr>
<tr><td>Имя</td><td><input size=20 type=text name=name value=''></td></tr>
<tr><td></td><td><input type=submit value='Добавить'></td></tr>
|
2 скрипт обработчик (add.php)
$FIO = $_POST['FIO'];
$name = $_POST['name'];
if(!preg_match("|^[\w]+$|i", $FIO))
exit("невeрный формат <p><a href=form.php?kod_abityra=$kod_abityra>Назад</a></p>");
if(!preg_match("|^[\w]+$|i", $name))
exit("невeрный формат имени<p><a href=form.php?kod_abityra=$kod_abityra>Назад</a></p>");
......
|
Ошибка выходит на новой странице и когда переходишь по ссылке "назад", то введенные данные исчезают, приходиться вводить все заново.
Как можно решить данную проблему? Я предполагаю, что скорее всего нужно все в одном скрипте делать, но пока не знаю как. | |
|
|
|
|
|
|
|
для: V@ldem@r
(06.06.2008 в 19:37)
| |
<?
$FIO = isset($_POST['FIO']) ? $_POST['FIO'] : "";
$name = isset($_POST['name']) ? $_POST['name'] : "";
if ("наличие отправки формы") {
//проверяем ввод
//если ОК - дальше
//если ошибка
$error = "Ошибка";
}
if ("нет отправки формы и обшибка") {
//вывод формы, где выводить $error
//и значение полей формы : $FIO, $name
}
|
| |
|
|
|
|
|
|
|
для: sim5
(06.06.2008 в 19:49)
| | Спасибо большое, а не могли бы вы подробнее объяснить.
Этот код помешается также в мой отдельный файл обработчик "add.php" или в файл, где форма находится.
if ("наличие отправки формы") {
}
|
В скобках данного участка кода должна быть переменная или так и оставить? | |
|
|
|
|
|
|
|
для: V@ldem@r
(06.06.2008 в 20:00)
| | У меня сегодня день рождения, и я немного "выпимши" - упаси меня бог, что-то писать конкретное и тем более подробное.)
В данных скобках, вы должны проверить - отправлена ли форма к вам на сервер, например, наличие какого либо имени поля формы от POST запроса. Можете просто проверить - пусто или нет одно из имен ранее инициализированных переменных (если вы будете делать так, как я привел в примере).
Все можно сделать в одном скрипте, просто структура вашего кода должна иметь последовательность: инициализация переменных (для того, чтобы при ошибках ввода, пользователю не пришлось вновь вводить уже введенные ранее данные); проверка принятых данных, если форма отправлена, с установлением ошибок или перехода к другой операции, если ввод верный; вывод формы по умолчанию и ошибках.
Как конкретно вы это будуте делать не так важно, главное в такой последовательности, тем более, если вы будете, после удачного принятия данных, делать перенаправление с помощью header(). А это нужно делать до любого вывода в браузер. | |
|
|
|
|
|
|
|
для: sim5
(06.06.2008 в 20:16)
| | С Днем Рождения тогда вас!!! Спасибо еще раз за информацию!!! Не буду вас отвлекать!!! Удачно отметить!!! | |
|
|
|
|
|
|
|
для: sim5
(06.06.2008 в 20:16)
| | По твоему комментарию не сказал бы что ты выпивший!!! )))))))) | |
|
|
|
|
|
|
|
для: OLi
(06.06.2008 в 20:27)
| | Пить надо в меру, а говорить "умные" слова, можно и выпивши, но написать код без ошибок...) | |
|
|
|
|
|
|
|
для: sim5
(06.06.2008 в 20:16)
| | Оффтоп: С Днем Рождения, sim5. Всего вам наилучшего | |
|
|
|
|
|
|
|
для: V@ldem@r
(06.06.2008 в 20:00)
| |
<input type="submit" name="SUB" value="Добавить">
| Кнопка на форме с именем SUB
А в обработчике ты должен проверить была ли нажата кнопка(с именем SUB) и если да, то дальше проверять данные
if (isset($SUB)) {
//Дальнейшие действия
}
|
| |
|
|
|
|
|
|
|
для: V@ldem@r
(06.06.2008 в 19:37)
| | Надо разместить обработчик и форму в одной файле и в action формы указать на этот же файл
или так
<form action="<?php print $PHP_SELF; ?>" METHOD="POST">
|
| |
|
|
|
|
|
|
|
для: OLi
(06.06.2008 в 20:37)
| | Спасибо огромное!!! А если можно, примерчик для наглядности не покажите? | |
|
|
|
|
|
|
|
для: V@ldem@r
(06.06.2008 в 20:50)
| | Все получилось!!! Спасибо еще раз!!! | |
|
|
|
|
|
|
|
для: OLi
(06.06.2008 в 20:37)
| | А вот интересно, как в таком случае если ошибки выводятся на той же странице сделать так чтобы при нажати кнопки "обновить" данные снова не отправлялись? | |
|
|
|
|
|
|
|
для: Sergeous
(08.06.2008 в 22:16)
| | Говорили, говорили...
<?php
$error = "";
$name = isset($_POST['name']) ? $_POST['name'] : "";
if (!empty($_GET['ok'])) echo "Все OK ".$_GET['ok'];
if ($name) {
if ($name == 'Sergeous') header("location: ?ok=$name");
else $error = "<p>Ошибка! Не корректный ввод!</p>";
}
if (empty($_GET['ok']) || !empty($error))
echo "$error <form method=\"post\">
<input type=\"text\" name=\"name\" value=\"$name\">
<input type=\"submit\" value=\"Send\">
</form>
";
?>
|
| |
|
|
|
|
|
|
|
для: sim5
(09.06.2008 в 06:40)
| | А других способов нет? Иногда тогда придется создавать много get-параметров! | |
|
|
|
|
|
|
|
для: Sergeous
(13.06.2008 в 03:29)
| | Много, это сколько? Есть другой способ - поместите свои параметры в сессию и после перенаправления, а именно оно и есть защита от F5, забирайте их из сессии. | |
|
|
|