|
|
|
| Пытаюсь реализовать проверку формы на правильность заполнения на PHP.
Задача следующая:
При первом обращении к странице пользователю показывается пустая форма в которой есть обязательные и не обязательные поля + к некоторым полям предъявляются определенные требования (email, совпадение паролей и т.п.)
После отправки форма проверяется и если поля заполнены безошибочно, то попытка внесения изменений в базу (тут тоже может возникнуть ошибка).
Если при заполнении формы были допущены ошибки, необходимо вывести все сообщения об ошибках (ну тут понятно - массив ошибок) и ту же самую форму с заполненными полями, которые заполнены правильно и предоставить пользователю возможность ее исправления.
Я раньше реализовывал это в одном файле, проверяя был передан $_GET или $_POST и наличие массива ошибок.
Есть ли другие варианты решения этой задачи, например, как то так, что бы обработчик и форма располагались в разных файлах? Как тогда передать массив ошибок и значения правильно заполненных полей? | |
|
|
|
|
|
|
|
для: durable
(11.11.2009 в 12:08)
| | просто разбить 1 файл на 2. и включать в файл с формой обработчик с помощью include/require
и передавать так же | |
|
|
|
|
|
|
|
для: psychomc
(11.11.2009 в 12:12)
| | И в чем смысл? | |
|
|
|
|
|
|
|
для: durable
(11.11.2009 в 12:27)
| | в том же в чем смысл вопроса:
>Есть ли другие варианты решения этой задачи, например, как то так, что бы обработчик и форма располагались в разных файлах? | |
|
|
|
|
|
|
|
для: psychomc
(11.11.2009 в 15:09)
| | Я имел в виду что бы совсем в разных файлах.
Например, viewform.php и handlerform.php, а от обработчика к форме передавать сообщения об ошибках и информацию о заполненных полях через, например, сесии. | |
|
|
|
|
|
|
|
для: durable
(11.11.2009 в 16:00)
| | С какой целью нужно так извращаться? | |
|
|
|
|
|
|
|
для: neadekvat
(11.11.2009 в 16:08)
| | Ну уже понял, что не надо. | |
|
|
|
|
|
|
|
для: durable
(11.11.2009 в 16:00)
| | извините, но по-моему это бред
и вообще не понятна разница между - в разных файлах и "совсем в разных файлах" )) | |
|
|
|
|
|
|
|
для: psychomc
(11.11.2009 в 16:11)
| | И что бред тоже понял. А с инклудами я так и делаю... | |
|
|
|
|
|
|
|
для: 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');
}
|
| |
|
|
|
|
|
|
|
для: neadekvat
(11.11.2009 в 12:41)
| | Спасибо, мозг немного встал на место :-) | |
|
|
|
|
|
|
|
для: neadekvat
(11.11.2009 в 12:41)
| | >В форме поля должны иметь значение по умолчанию (для удобства пользователя):
><input type="text" name="name" value="<? if(!empty ( $_POST['name'] ) ) echo $_POST['name'];?>">
Ну какое же это по умолчанию? :) | |
|
|
|
|
|
|
|
для: sim5
(11.11.2009 в 12:57)
| | Ну не знал я, как это назвать :-[ | |
|
|
|
|
|
|
|
для: 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; ?>" />
А перед первым выводом формы все значения этих переменных привожу к значениям по умолчанию. | |
|
|
|
|
|
|
|
для: durable
(11.11.2009 в 13:04)
| | Ну так можете сделать так:
<?php
if (!empty ($_POST['name']) ) {
$name = htmlspecialchars ($_POST);
} else {
$name = '';
}
?>
<input type="text" name="name" value="<?=$name?>" />
|
| |
|
|
|
|
|
|
|
для: neadekvat
(11.11.2009 в 13:07)
| | Ну да, я именно это и мел в виду. | |
|
|
|
|
|
|
|
для: durable
(11.11.2009 в 13:08)
| | Для сокращения можно еще так написать:
<?
$name = !empty($_POST['name']) ? htmlspecialchars ($_POST['name']) : '';
// в конце - две одинарные кавычки
|
| |
|
|
|
|
|
|
|
для: durable
(11.11.2009 в 12:08)
| | После отправки обязательные поля проверяйте на проверку заполнения и на правильность ее заполнения, в случае если поле не заполнено или заполнено некоректно следует занести ошибку в массив , например, $errors[row] = "Поле заполнено неверно"; И так все ошибки.
Затем в обработчики проверяйте если массив $errors содержится, выполняете его обход (foreach), иначе все данные верны продолжаете их обрабатывать и заносить в БД. | |
|
|
|