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

Форум PHP

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

 

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

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

тема: Подскажите правильный алгоритм обработки формы
 
 автор: durable   (11.11.2009 в 12:08)   письмо автору
 
 

Пытаюсь реализовать проверку формы на правильность заполнения на PHP.
Задача следующая:
При первом обращении к странице пользователю показывается пустая форма в которой есть обязательные и не обязательные поля + к некоторым полям предъявляются определенные требования (email, совпадение паролей и т.п.)

После отправки форма проверяется и если поля заполнены безошибочно, то попытка внесения изменений в базу (тут тоже может возникнуть ошибка).

Если при заполнении формы были допущены ошибки, необходимо вывести все сообщения об ошибках (ну тут понятно - массив ошибок) и ту же самую форму с заполненными полями, которые заполнены правильно и предоставить пользователю возможность ее исправления.

Я раньше реализовывал это в одном файле, проверяя был передан $_GET или $_POST и наличие массива ошибок.

Есть ли другие варианты решения этой задачи, например, как то так, что бы обработчик и форма располагались в разных файлах? Как тогда передать массив ошибок и значения правильно заполненных полей?

  Ответить  
 
 автор: psychomc   (11.11.2009 в 12:12)   письмо автору
 
   для: durable   (11.11.2009 в 12:08)
 

просто разбить 1 файл на 2. и включать в файл с формой обработчик с помощью include/require
и передавать так же

  Ответить  
 
 автор: durable   (11.11.2009 в 12:27)   письмо автору
 
   для: psychomc   (11.11.2009 в 12:12)
 

И в чем смысл?

  Ответить  
 
 автор: psychomc   (11.11.2009 в 15:09)   письмо автору
 
   для: durable   (11.11.2009 в 12:27)
 

в том же в чем смысл вопроса:

>Есть ли другие варианты решения этой задачи, например, как то так, что бы обработчик и форма располагались в разных файлах?

  Ответить  
 
 автор: durable   (11.11.2009 в 16:00)   письмо автору
 
   для: psychomc   (11.11.2009 в 15:09)
 

Я имел в виду что бы совсем в разных файлах.
Например, viewform.php и handlerform.php, а от обработчика к форме передавать сообщения об ошибках и информацию о заполненных полях через, например, сесии.

  Ответить  
 
 автор: neadekvat   (11.11.2009 в 16:08)   письмо автору
 
   для: durable   (11.11.2009 в 16:00)
 

С какой целью нужно так извращаться?

  Ответить  
 
 автор: durable   (11.11.2009 в 16:17)   письмо автору
 
   для: neadekvat   (11.11.2009 в 16:08)
 

Ну уже понял, что не надо.

  Ответить  
 
 автор: psychomc   (11.11.2009 в 16:11)   письмо автору
 
   для: durable   (11.11.2009 в 16:00)
 

извините, но по-моему это бред
и вообще не понятна разница между - в разных файлах и "совсем в разных файлах" ))

  Ответить  
 
 автор: durable   (11.11.2009 в 16:19)   письмо автору
 
   для: psychomc   (11.11.2009 в 16:11)
 

И что бред тоже понял. А с инклудами я так и делаю...

  Ответить  
 
 автор: neadekvat   (11.11.2009 в 12:41)   письмо автору
 
   для: durable   (11.11.2009 в 12:08)
 

Выделите форму в отдельный файл form.php
В форме поля должны иметь значение по умолчанию (для удобства пользователя):
<input type="text" name="name" value="<? if(!empty ( $_POST['name'] ) ) echo $_POST['name'];?>">
Можно проще, но тогда при определенном уровне ошибок могут полезть предупреждения о необъявленных переменных:
<input type="text" name="name" value="<?=$_POST['name']?>">

Файл, который является обработчиком имеет такую структуру:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
 
// обработка пришедших данных
 
if (!empty ($errors) { // если есть ошибки
  
include ('form.php');
 } else {
 
//добавляем в бд
 
}
} else {
 include (
'form.php');
}

  Ответить  
 
 автор: durable   (11.11.2009 в 12:53)   письмо автору
 
   для: neadekvat   (11.11.2009 в 12:41)
 

Спасибо, мозг немного встал на место :-)

  Ответить  
 
 автор: sim5   (11.11.2009 в 12:57)   письмо автору
 
   для: neadekvat   (11.11.2009 в 12:41)
 

>В форме поля должны иметь значение по умолчанию (для удобства пользователя):
><input type="text" name="name" value="<? if(!empty ( $_POST['name'] ) ) echo $_POST['name'];?>">

Ну какое же это по умолчанию? :)

  Ответить  
 
 автор: neadekvat   (11.11.2009 в 12:59)   письмо автору
 
   для: sim5   (11.11.2009 в 12:57)
 

Ну не знал я, как это назвать :-[

  Ответить  
 
 автор: durable   (11.11.2009 в 13:04)   письмо автору
 
   для: sim5   (11.11.2009 в 12:57)
 

Кстати а разве такая форма заполнения полей:
<input type="text" name="name" value="<? if(!empty ( $_POST['name'] ) ) echo $_POST['name'];?>
это не дыра для выполнениния, например javascript

Я например делаю так в форме пишу:
<input type="text" name="name" value="<? echo $name; ?>" />
А перед первым выводом формы все значения этих переменных привожу к значениям по умолчанию.

  Ответить  
 
 автор: neadekvat   (11.11.2009 в 13:07)   письмо автору
 
   для: durable   (11.11.2009 в 13:04)
 

Ну так можете сделать так:
<?php
if (!empty ($_POST['name']) ) {
 
$name htmlspecialchars ($_POST);
} else {
 
$name '';
}
?>
<input type="text" name="name" value="<?=$name?>" />

  Ответить  
 
 автор: durable   (11.11.2009 в 13:08)   письмо автору
 
   для: neadekvat   (11.11.2009 в 13:07)
 

Ну да, я именно это и мел в виду.

  Ответить  
 
 автор: neadekvat   (11.11.2009 в 13:10)   письмо автору
 
   для: durable   (11.11.2009 в 13:08)
 

Для сокращения можно еще так написать:
<?
$name 
= !empty($_POST['name']) ? htmlspecialchars ($_POST['name']) : '';
// в конце - две одинарные кавычки

  Ответить  
 
 автор: ols   (11.11.2009 в 12:41)   письмо автору
 
   для: durable   (11.11.2009 в 12:08)
 

После отправки обязательные поля проверяйте на проверку заполнения и на правильность ее заполнения, в случае если поле не заполнено или заполнено некоректно следует занести ошибку в массив , например, $errors[row] = "Поле заполнено неверно"; И так все ошибки.
Затем в обработчики проверяйте если массив $errors содержится, выполняете его обход (foreach), иначе все данные верны продолжаете их обрабатывать и заносить в БД.

  Ответить  
Rambler's Top100
вверх

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