Проверка формы

  • Автор темы Spectrum
  • Дата начала

Spectrum

Guest
Автор оригинала: Pendos
А если есть файл с формой

и есть файл php :

if (empty($name_of_field))
{
echo "Ану быра заполни поле с фамилией !!!";
include "forma.html";
}
Всё классно выводится сообщение и ниже идёт форма - ...но пустая , а можно ли сделать так чтобы данные которые были введены пользователем в этих полях тоже отображались???
Так он сразу смотрит - предупреждение - вы не заполнили... - тут же в форме исправляет свою ошибку и отправляет.:)
 

-faqer-

Я только учусь
Ну вот и я даю свой первый совет на форуме
Я делал так, мне нравится
Допустим в форме есть поле для введения маила.
Это поле обязательное и маил должен быть правильный
Я сразу в форме делал <input type="text" name="mail" value="<?=$mail?>"><br><?=$error?>
При выводе просто затыкаешь рот ошибкам, чтоб не кричали что таких переменных нет.
После сабмита формы
PHP:
$mail = isset($mail)?$mail:'';
//на всякий случай
$mail = substr($mail,0,50);
//тоже на всякий
if ($mail == '') { $flag=1; $empty="Это поле является обязательным для заполнения"; }
if(!preg_match("/^(([a-zA-Z0-9_-])+\@([a-zA-Z0-9-])+(\.([a-zA-Z])+)+)?$/",$mail)){ $flag=1; $error="адес неправильный";}

if ($flag == 1)
{
//идем заполнять форму опять
}
else
{
//заносим в базу
}
 

RomikChef

Guest
Факер, все хорошо, но я бы чуть поменял местами.
PHP:
if ($submit) {
  проверяем поля и формируем сообщение об ошибках
  if (!$errmsg) {
    заносим в базу
    header(location
    exit;
}
Дальше пишем заголовок страницы
echo $errmsg;
и дальше - форму с валуями.
Все просто, линейно, логично, без "длинных" скобок.

А вот здесь $mail = isset($mail)?$mail:'' ты сам себе противоречишь :)
И вообще, я считаю, что если писать на РНР со всеми этими заморочками, то нафиг он никому не нужен. Это все те придумали, кто пишет на РНР серверы, операционные системы, библиотекм классов. А для формы в 10 строк навешивать всю эту лабуду, делая вместо десяти 50 - нафиг надо?

И вообще, я так понял, что у тебя форма для ввода одного только емейла? потому, что иначе сообщения об ошибках перепутаются.
Переменная флаг - лишняя. Вместо нее вполне можно проверять само сообщение об ошибке.

Ну вот, например, как я делаю
PHP:
  $err='';
  if (!$name) $err="Вы забыли написать свое имя<br>"; 
  if (!$notes) $err.="Вы забыли написать сам отзыв!<br>"; 
  if (!eregi("^([_\.0-9a-z-]+@)([0-9a-z][0-9a-z-]+\.)+([a-z]{2,4})$", $email) && $email) $err.="Ошибка в емейле. Если не хотите, то просто не пишите!<br>";
// ненавижу обязательные емейлы!
if (!$err) {
а дальше все, как я написал.
Заметь, здесь немного другой паттерн проверки емела...
 

-faqer-

Я только учусь
Ответ Чемберлену ака RomikChef
PHP:
if ($submit) { 
  проверяем поля и формируем сообщение об ошибках 
  if (!$errmsg) { 
    заносим в базу 
    header(location 
    exit; 
} 
Дальше пишем заголовок страницы 
echo $errmsg; 
и дальше - форму с валуями.
Действительно, я в своем примере забыл хэдер впилить
А насчет else да меньше скобок, согласен, но все же не критично

$mail = isset($mail)?$mail:''
допустим, выкидываем эту строку
и пишем хттп://кырлымырлы.php?submit=blaa
Получаем сообщение об отсутствии переменной $mail, в таком-то там файле в такой-то строке
Если файл один не страшно и так понятно в каком файле ошибка, а если поверка маила инклудалась, то имеем путь к файлу про который раньше и не знали
Конечно нормальный человек хттп://кырлымырлы.php?submit=blaa писать не будет, такое будет писать какой-нить урод, а ему тоько структуру файлов и дай.
К тому же вывод ошибки убъет header, да еще и при ошибке может флаг не сгенерится
Кто-то может сказать, что я параноик, кто-то скажет, что меня и так сломают, но я лучше напишу всего одну строчку, меня не убудет

И вообще, я так понял, что у тебя форма для ввода одного только емейла
Это был всего пример
Естественно в полей в форме много, всего навсего создаются пременные $error[mail],$error[site].....
И как раз, когда много полей, логичнее проверять один $flag чем все сообщения об эрорах
Мой подход был в том, чтоб при наличии нескольких ошибок(т.е. направильно заполнены или вообще незаполнены несколько полей) посетителя возвращали опять к форме и писали про все ошибки сразу
Меня лично бесит, когда говорят, Вы не заполнили то поле, заполняешь, жмешь сабмит, а еще и это не заполнили, и опять сабмит, так, а Вы еще и это не так вбили
Насчет порверки паттерна. Я посмотрю, сам его писал, чем еще несколько недель очень гордился бо еле в регексп въехал
А на что обратить внимание на функию или сам рег эксп, у меня во всяком случае все проверяет, объясни плз
С уважением
 

-faqer-

Я только учусь
2 RomikChef

Если будет желание продолжить общение по этой теме, то смогу только через 2 недели
 

Spectrum

Guest
А вот так можно?
PHP:
<?
$error_area = " <tr><td class=smtext>Компания:</td>
      <td class=smtext><INPUT name='company' type='Text' size='25' value='$company'  maxlength='30' ></td></tr>";


if (empty($email))
{
 echo "Введите e-mail!<br>";
 include $error_area;
 exit;
}
else
{в базу
}

?>
Всё получается красиво при выводе ... да вот чего-то PHP ругается :
' for inclusion (include_path='c:\php4\pear') in w:\www\action_board.phtml on line 73

Warning: Failed opening '

Что это и как с этим бороться? Спасибо.
 

RomikChef

Guest
переменные выводятся на экран не командой include, а командой echo
 

Spectrum

Guest
........а вот вопросик ещё- можно ли , также вывести значения из селекта , то есть выбрал город - а если ошибка - что бы он так и оставался в поле селекта (а не сбрасывался:() . то же касается и type="radio" -а они сбрасываются при переходе на страницу сообщения "Заполните информацию ..."- сбрасываются - реально ли????
 

RomikChef

Guest
Читай документацию на html.
www.w3.org
www.citforum.ru

ИЛИ! Открою тебе страшный СЕКРЕТ!
посмотри исходный текст любой страницы, которая "запоминает" выбор!
 

idencial

Одинаковый
2 Spectrum:
<input type="radio" name="name" value="value" checked>

С селектом тоже самое, т.е используй checked на том пункте, который нужен.
 

Spectrum

Guest
Автор оригинала: RomikChef
Читай документацию на html.
www.w3.org
www.citforum.ru

ИЛИ! Открою тебе страшный СЕКРЕТ!
посмотри исходный текст любой страницы, которая "запоминает" выбор!
Может я не так объяснил .... но меня интересует не это - попробую ещё раз -

Есть форма - если не заполнены поля - выводится таже форма - вверху сообщение - ниже форма с полями уже заполнеными пользователем(то есть он тут же дополняет и отправляет)
Так вот в этой форме есть селект - выбираю позицию и т.д - если в форме не заполнено определённое поле - "php выводит - вверху сообщение - ниже форма с полями уже заполнеными пользователем" - при этом выводе мой выбранный селект сбрасывается - я понимаю что там должен стоять checked в выбранной позиции , а вот как его туда притарабанить динамически и убрать его с позиции по умолчанию - собственно говоря вот мой
вопрос.:)

(А по умолчанию в форме у меня checked на возиции "--Ничего не выбрано --")

Спасибо.
 

RomikChef

Guest
Мда, я чувствую, намеками тут будет бесполезно...
На, держи соску.

<select name="select">
<option value="0">Ничегось не выбралось, аднака...
<option value="1"<? if ($select=="1") echo " checked"?>>1
<option value="2"<? if ($select=="2") echo " checked"?>>2
<option value="3"<? if ($select=="3") echo " checked"?>>3
</select>

Спектрум, может, ты бросишь это неблагодарное занятие - программирование, а? Не знаю, как у вас, в незалежной, но у нас оператор условного перехода проходят в школе, на уроках информатики...
 

Spectrum

Guest
:))) - Спасибо
- да бросить бы бросил - интересно мне это - не могу.:)))
а условные операторы........слышал:))).
На самом деле знаю , да с практикой пока уговато .............пока........:)

Ещё раз СПАСИБО.
 

Zeves

Guest
Небольшая поправка: для select-а надо ставить не checked, а selected. то есть

<select name="select">
<option value="0">Ничегось не выбралось, аднака...
<option value="1"<? if ($select=="1") echo " selected"?>>1
...

Стандарты надо знать... :)
 

-faqer-

Я только учусь
Вот я и вернулся, если это кого интересует
RomikChef хотелось бы продолжить обсуждение темы

[ЦВЕТОМ=darkblue]Не знаю, как у вас, в незалежной[/ЦВЕТОМ]
А вот это я хронически не перевариваю
Во-первых, заезжено до ужаса,
во-вторых, не в тему.
Не понимаю к чему россияне это постоянно произносят, особенно в свете того, что независимость справили почти на месяц раньше нас, интересно от кого это Вы при Союзе зависили
 
Сверху