StUV
Rotaredom
пример обработки формы
как принимать, обрабатывать и выводить форму.
вот пример обработки формы на примере формы для гостевой книги (без вывода оной, только заполнение)
который я считаю более-менее идеальным
Как это работает?
При заходе на страницу выводится форма для заполнения.
после того, как человек заполнит форму и нажмет кнопку Послать, данные отсылаются тому же самому скрипту. скрипт определяет, что это ПОСТ, и начинает его обрабатывать.
проверяет все поля, и если все ОК, то записывает в файл.
Дальше, чтобы избежать повторной посылки данных, мы заставляем браузер запросить страницу, но уже без посылки данных формы.
Еще про это можно почитать здесь
http://tony2001.phpclub.net/faq/other.location.html
после такого запроса надо всегда ставить команду exit;
Если же проверка выявила ошибки, то скрипт продолжает выполняться, то есть форма выводится снова, но перед ней выводятся сообщения об ошибках, а сама форма заполнена тем, что вводил пользователь.
мда...
в результате всех поправок и добавлений, которые щедро несли всякие доброхоты, а я весело включал в скрипт, он стал совершенно нечитаемым...
вот его краткая схема.
То есть, собственно ТО, ЧТО Я И ХОТЕЛ СКАЗАТЬ.
еще раз повторяю.
Это не пример ГОСТЕВОЙ КНИГИ. это не пример реальной гостевой книги.
Это пример работы с формой. простой работы с формой. как выводить, как обрабатывать.
как принимать, обрабатывать и выводить форму.
вот пример обработки формы на примере формы для гостевой книги (без вывода оной, только заполнение)
который я считаю более-менее идеальным
PHP:
<?
if ($_SERVER['REQUEST_METHOD']=='POST') {
//обрабатываем полученные переменные.
foreach($_POST as $key => $value) {
//сначала делаем обработку, которая не испортит данные,
//если их придется выводить в форму снова, при ошибке
$value=trim($value); // убираем пробелы в начале и в конце переменной.
if (get_magic_quotes_gpc()) $value = stripslashes($value); //убираем слеши, если надо
$value=htmlspecialchars($value,ENT_QUOTES); //заменяем служебные символы HTML на эквиваленты
$_POST[$key]=$value; //все изменения записываем в массив $_POST
//дальше делаем изменения, которые пойдут только в файл,
//а в форму их выводить не нужно.
$value=str_replace("\r","",$value); // заменяем все переводы строк
$value=str_replace("\n","<br>",$value); //на <br>
$msg[$key]=$value; //и присваиваем новые значения элементам массива $msg.
}
//дальше делаем разнообразные проверки. Они здесь для
//примера, вы можете добавлять, какие захотите
//главное то, что при любых ошибках переменная $err становится не пустой.
//то есть, она одновременно является и флагом ошибки и
//содержит все сообщения об ошибках.
$err='';
if (!$name) $err.="Вы забыли написать свое имя<br>";
if (!$notes) $err.="Вы забыли написать сам отзыв!<br>";
if (strlen($name) > 30) $err.="Длина имени не может превышать 30 символов<br>";
if (strlen($notes) > 1000) $err.="Длина отзыва не может превышать 1000 символов<br>";
if (strlen($email) > 50) $err.="емейл длинноват...<br>";
if (preg_match("/[0-9a-zA-Zа-яА-ЯЁё]{30,}/",$notes,$matches)) {
$err.="В отзыве присутствует слишком длинное слово ".$matches[0].". Cократите или разбейте его, пожалуйста.";
}
$email_ok=eregi("^([_\.0-9a-z-]+@)([0-9a-z][0-9a-z-]+\.)+([a-z]{2,4})$", $email);
if (!$email_ok && $email) $err.="Ошибка в емейле. Если не хотите, то просто не пишите!<br>";
//если ошибок нет, то пишем в файл
if (!$err) {
$s=$msg['name']."|".$msg['email']."|".$msg['notes']."|".time()."\n";
$fp=fopen("gbook.txt","a");
fwrite($fp,$s);
fclose($fp);
//после записи перенаправляем браузер на страницу,
//которая отображает сообщения
Header("Location: ".$_SERVER['PHP_SELF']);
//и обязательно завершаем работу скрипта
exit;
}
//если у нас были ошибки при заполнении формы, то в файл
//ничего не запишется, скрипт не завершится, а выведется
//форма, с заполненными полями и сообщения об ошибках
} else {
//если это не пост, то присваиваем переменным, выводимым
//в форме пустую строку
$_POST['name'] = $_POST['email'] = $_POST['notes'] ='';
}
?>
<html>
<head></head>
<body>
<? if ($err) echo '<font color=red><b>'.$err.'</b></font>'; ?>
<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="POST"><br>
Name: <input type="text" name="name" value="<? echo $_POST['name'] ?>"><br>
Email: <input type="text" name="email" value="<? echo $_POST['email'] ?>"><br>
Notes: <textarea rows="3" cols="30" name="notes"><? echo $_POST['notes'] ?></textarea><br>
<input type="submit" name="submit">
</form>
</body>
</html>
При заходе на страницу выводится форма для заполнения.
после того, как человек заполнит форму и нажмет кнопку Послать, данные отсылаются тому же самому скрипту. скрипт определяет, что это ПОСТ, и начинает его обрабатывать.
проверяет все поля, и если все ОК, то записывает в файл.
Дальше, чтобы избежать повторной посылки данных, мы заставляем браузер запросить страницу, но уже без посылки данных формы.
Еще про это можно почитать здесь
http://tony2001.phpclub.net/faq/other.location.html
после такого запроса надо всегда ставить команду exit;
Если же проверка выявила ошибки, то скрипт продолжает выполняться, то есть форма выводится снова, но перед ней выводятся сообщения об ошибках, а сама форма заполнена тем, что вводил пользователь.
мда...
в результате всех поправок и добавлений, которые щедро несли всякие доброхоты, а я весело включал в скрипт, он стал совершенно нечитаемым...
вот его краткая схема.
PHP:
if ($_SERVER['REQUEST_METHOD']=='POST') {
foreach($_POST as $key => $value) {
//пробегая по массиву ПОСТ обрабатываем полученные переменные.
}
//дальше проверяем поля формы
if (!$err) {
//записываем и перенаправляем
Header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
}
//выводим форму.
еще раз повторяю.
Это не пример ГОСТЕВОЙ КНИГИ. это не пример реальной гостевой книги.
Это пример работы с формой. простой работы с формой. как выводить, как обрабатывать.