Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод сообщения об ошибке
 
 автор: V@ldem@r   (06.06.2008 в 19:37)   письмо автору
 
 

Всем привет!
Не подскажит ли мне кто-нибудь как сделать так, чтобы при вводе данных в поле формы, если информация не удовлетворяет регулярному выражению, то ошибка выводилась на этой же странице, где находится форма. И чтобы страница не обновлялась.
У меня 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>"); 
......

Ошибка выходит на новой странице и когда переходишь по ссылке "назад", то введенные данные исчезают, приходиться вводить все заново.

Как можно решить данную проблему? Я предполагаю, что скорее всего нужно все в одном скрипте делать, но пока не знаю как.

   
 
 автор: sim5   (06.06.2008 в 19:49)   письмо автору
 
   для: 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
}

   
 
 автор: V@ldem@r   (06.06.2008 в 20:00)   письмо автору
 
   для: sim5   (06.06.2008 в 19:49)
 

Спасибо большое, а не могли бы вы подробнее объяснить.
Этот код помешается также в мой отдельный файл обработчик "add.php" или в файл, где форма находится.

if ("наличие отправки формы") { 

}

В скобках данного участка кода должна быть переменная или так и оставить?

   
 
 автор: sim5   (06.06.2008 в 20:16)   письмо автору
 
   для: V@ldem@r   (06.06.2008 в 20:00)
 

У меня сегодня день рождения, и я немного "выпимши" - упаси меня бог, что-то писать конкретное и тем более подробное.)
В данных скобках, вы должны проверить - отправлена ли форма к вам на сервер, например, наличие какого либо имени поля формы от POST запроса. Можете просто проверить - пусто или нет одно из имен ранее инициализированных переменных (если вы будете делать так, как я привел в примере).
Все можно сделать в одном скрипте, просто структура вашего кода должна иметь последовательность: инициализация переменных (для того, чтобы при ошибках ввода, пользователю не пришлось вновь вводить уже введенные ранее данные); проверка принятых данных, если форма отправлена, с установлением ошибок или перехода к другой операции, если ввод верный; вывод формы по умолчанию и ошибках.
Как конкретно вы это будуте делать не так важно, главное в такой последовательности, тем более, если вы будете, после удачного принятия данных, делать перенаправление с помощью header(). А это нужно делать до любого вывода в браузер.

   
 
 автор: V@ldem@r   (06.06.2008 в 20:22)   письмо автору
 
   для: sim5   (06.06.2008 в 20:16)
 

С Днем Рождения тогда вас!!! Спасибо еще раз за информацию!!! Не буду вас отвлекать!!! Удачно отметить!!!

   
 
 автор: OLi   (06.06.2008 в 20:27)   письмо автору
 
   для: sim5   (06.06.2008 в 20:16)
 

По твоему комментарию не сказал бы что ты выпивший!!! ))))))))

   
 
 автор: sim5   (06.06.2008 в 20:38)   письмо автору
 
   для: OLi   (06.06.2008 в 20:27)
 

Пить надо в меру, а говорить "умные" слова, можно и выпивши, но написать код без ошибок...)

   
 
 автор: mihdan   (07.06.2008 в 00:39)   письмо автору
 
   для: sim5   (06.06.2008 в 20:16)
 

Оффтоп: С Днем Рождения, sim5. Всего вам наилучшего

   
 
 автор: OLi   (06.06.2008 в 20:32)   письмо автору
 
   для: V@ldem@r   (06.06.2008 в 20:00)
 

 <input type="submit" name="SUB" value="Добавить">
Кнопка на форме с именем SUB
А в обработчике ты должен проверить была ли нажата кнопка(с именем SUB) и если да, то дальше проверять данные


if (isset($SUB)) {  
//Дальнейшие действия

   
 
 автор: OLi   (06.06.2008 в 20:37)   письмо автору
 
   для: V@ldem@r   (06.06.2008 в 19:37)
 

Надо разместить обработчик и форму в одной файле и в action формы указать на этот же файл
или так
<form action="<?php print $PHP_SELF?>" METHOD="POST">

   
 
 автор: V@ldem@r   (06.06.2008 в 20:50)   письмо автору
 
   для: OLi   (06.06.2008 в 20:37)
 

Спасибо огромное!!! А если можно, примерчик для наглядности не покажите?

   
 
 автор: V@ldem@r   (06.06.2008 в 21:32)   письмо автору
 
   для: V@ldem@r   (06.06.2008 в 20:50)
 

Все получилось!!! Спасибо еще раз!!!

   
 
 автор: Sergeous   (08.06.2008 в 22:16)   письмо автору
 
   для: OLi   (06.06.2008 в 20:37)
 

А вот интересно, как в таком случае если ошибки выводятся на той же странице сделать так чтобы при нажати кнопки "обновить" данные снова не отправлялись?

   
 
 автор: sim5   (09.06.2008 в 06:40)   письмо автору
 
   для: 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>
"
;
?>

   
 
 автор: Sergeous   (13.06.2008 в 03:29)   письмо автору
 
   для: sim5   (09.06.2008 в 06:40)
 

А других способов нет? Иногда тогда придется создавать много get-параметров!

   
 
 автор: sim5   (13.06.2008 в 04:54)   письмо автору
 
   для: Sergeous   (13.06.2008 в 03:29)
 

Много, это сколько? Есть другой способ - поместите свои параметры в сессию и после перенаправления, а именно оно и есть защита от F5, забирайте их из сессии.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования