|
|
|
|
|
для: serjinio
(03.12.2008 в 23:14)
| | То что разобрались, это хорошо, но если говорить о примере, который я показал выше, то он годиться только как тест-пример, не более, для реального сценария он не подойдет.
У меня ссылка используется просто для сокращения записей - при большом числе элементов формы и многочисленных проверках POST-данных, можно сразу прописать ссылки на каждый элемент массива, код получиться более читабельным. Trianon уже сказал где почитать, значит вы изучили вопрос этот. | |
|
|
|
|
|
|
|
для: serjinio
(03.12.2008 в 23:14)
| | Вам не нужно его использовать как раз именно по этой причине.
http://ru2.php.net/manual/ru/language.references.php | |
|
|
|
|
|
|
|
для: sim5
(03.12.2008 в 08:55)
| | Спасибо Вам ,разобрался...пропускал цикл...
А можно попутно задать вопрос ...вот это &
$elemets = &$_SESSION['elemets_form'];
|
я как понимаю передача переменной по по ссылке,но не понимаю физический смысл этой передачи,в
частности используемой в функциях
function fs(&$var){$var++;}
|
в каких случаях & надо использовать,Заранее спасибо. | |
|
|
|
|
|
|
|
для: serjinio
(03.12.2008 в 07:44)
| | Потому, что ваш скрипт постоянно переназначает имена полей до их проверки. Запишите так:
<?
function formElemts($name, $elements) {
//возможно придется обращаться к элеменам формы в JS,
//а id элементов не должны начинаться с цифры,
//поэтому будем добавлять к имени поля буквенный префикс
$s = "qwertyupasdf";
$_SESSION[$name] = array();
foreach($elements as $val) {
$_SESSION[$name][$val] = $s[rand(0,10)] ."_". md5(uniqid(rand(),1));
}
return $_SESSION[$name];
}
//если форма пришла, выводим
if (isset($_POST[$_SESSION['visit']['submit']])) {
echo "<pre>"; //пощелкайте несколько раз отправку
print_r($_POST); //это будет выводить вам массив POST
echo "</pre>"; //постоянно с новыми именами полей формы
echo $_POST[$_SESSION['visit']['name']]."<br>".$_POST[$_SESSION['visit']['email']];
} else {
//формируем массив имен элементов формы здесь,
//предотвращая их переименование при получении формы до проверки полей ее.
//будем именовать массивы элементов полей - в функцию передаем имя массива
$elm = formElemts("visit", array("name","email","submit"));
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
Имя: <input type="text" name="<?php echo $elm['name'] ?>" value="as@as.as"><br>
e-mail: <input type="text" name="<?php echo $elm['email'] ?>" value="name"><br>
<input name="<?php echo $elm['submit'] ?>" type="submit" value="Отправить" />
</form>
|
После удачной обработки формы, удаляем массив имен. При реальной работе, проверям, установлен ли такой массив, если да - работа скрипта, если нет - то и дальнейшее проверять нет смысла. | |
|
|
|
|
|
|
|
для: sim5
(02.12.2008 в 19:23)
| | поэкспериментировал с динамической сменой полей формы и чтото не совсем понятно...
<?php session_start();
//функция создания случайных имен для полей формы
function formGet($name) {
$_SESSION['elemets_form'] = array();
foreach($name as $val) {
$_SESSION['elemets_form'][$val] = md5(uniqid(rand(),1));
}
return $_SESSION['elemets_form'];
}
//генерируем случайные имена полей формы
$elm = formGet(array("name","email","submit"));
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
Имя: <input type="text" name="<?php echo $elm['name'] ?>" value=""><br>
e-mail: <input type="text" name="<?php echo $elm['email'] ?>"><br>
<input name="<?php echo $elm['submit'] ?>" type="submit" value="Отправить" />
</form>
<?php
echo '<pre>';
print_r ($_SESSION['elemets_form']);
echo '</pre>';
$elemets = &$_SESSION['elemets_form'];
$name =$_POST[$elemets['name']];
$name1 = trim($_POST[$_SESSION['elemets_form']['name']]);
echo '<br>name=='.$name;
echo '<br>name1=='.$name1;
|
получаю массив
Array
(
[name] => b04029ae9bab46688c39327758a34b38
[email] => ca7d9aef4b68a842c7d3fc53491a92a0
[submit] => 363217f37b7996b61fb5266ebdff1bc9
)
|
но постом ничего не передается..прямо не знаю, в чем проблема | |
|
|
|
|
|
|
|
для: Dinya_1
(02.12.2008 в 18:56)
| | А вам что роман написать "Location, мать его ити"? :) Ну тогда это будет очень большое вступление о сомнениях и терзаниях душевных, большой заключительный пролог, а между ними всего одна полезная строк: - header("location: ...").
VAR - это имя переменной, которое вы можете заменить на любое другое. Я написал так потому, что это сокращение от variable - переменная.
Во втором блоке, вы проверяте данные полей пришедшей формы, и если какое либо поле имеет ошибки, то вы добавляете соответствующее сообщение переменной $error. Как добавлять, тут можно поступить по разному, например, сообщения об ошибках, это будут просто элементы параграфа с текстом ошибки в них, тогда при ошибках:
$error .= "<p>Error 1</p>"; и т.д.. Можно сделать текст ошибок массивом, и т.д., и т.п..
Теперь вывод формы, она будет (по условию) выводиться и при ошибках ввода. Значит, передав эту переменную в вывод формы, пользователь увидит сообщения. | |
|
|
|
|
|
|
|
для: sim5
(01.12.2008 в 18:48)
| | sim5 - написал красиво но коротко, кажется начинаю понимать что к чему, только не могу ни как разобрать что значить 'var' - тоже что и id ? типа порядкового номера?
также понятно насчет третьего блока...Сообщение об Ошибках с какой части будет выходить с первой или же со второй...? | |
|
|
|
|
|
|
|
для: Dinya_1
(01.12.2008 в 18:18)
| | Можно и пример. Можно его и упростить.
Суть всей кухни сброса POST данных от формы простая, я вам писал о ней выше, и всю эту суть можно выразить тремя строками. Разбейте свой код на три логических блока:
1. Окончание работы.
2. Прием и проверка данных.
3. Вывод формы по умолчанию и ошибках.
Так как механизм использует передачу заголовка, то нужно разделить вывод в браузер и передачу заголовка (перенаправление). Сделать это не сложно, даже, если перенаправление будет на саму себя. Действительно, после выдачи "ОК" пользователю, можно завершить работу скрипта - более то ничего не требуется. От сюда:
<?
//первый блок - окончание работы
//в этом блоке можно сделать и инициализацию переменных, например:
$name = isset($_POST['name']) ? $_POST['name'] : "";
$mail = isset($_POST['mail']) ? $_POST['mail'] : "";
if (isset($_GET['var'])) { //проверяем, было ли перенаправление
echo "All OK!";
//можно и завершить все
exit;
//второй блок - прием формы и проверка
} else if (isset($_POST['submit'])) {
//проверяем все поля формы
$error = "";
if ($name...) ...
if ($mail ...) ...
//если все ОК, запись и переход
header("location : script.php?var");
}
//третий блок - вывод формы по умолчанию и ошибках
if (!isset($_GET['var']) || $error) {
//код формы, значениями полей которой служат
//инициализированные переменные -
//по умолчанию они пусты, при получении формы и возврате ошибок
//будут содержать уже введенное пользователем
}
|
| |
|
|
|
|
|
|
|
для: sim5
(01.12.2008 в 18:09)
| | А можно пример кодирования, на смену полей...?,
И еще один вопрос, по перенапровлению: В примере "Николай2357" , показан "сброс" переменной Пост, прямо перед функцией добавления инфы в базу, и мне не понятно если её сбросить как же она добавится?
<?
if(isset($_POST['submit'])// Имя кнопки отправки
{
if (isset($_POST['id'])) {$id = $_POST['id'];}
.
.
.
.
.
$result = mysql_query ("INSERT INTO forma (title,cat,text,gorod,name_klient,tel,nomer_asq,email,nazv_razdela,nazvan,date)
VALUES '$title','$cat','$text','$gorod','$name_klient','$tel',
'$nomer_asq','$email','$nazv_razdela','$nazvan','$date')",$db);
header(.....
exit();
}
// Тут вывод результатов.
|
| |
|
|
|
|
|
|
|
для: Dinya_1
(01.12.2008 в 18:06)
| | А для чего каптча у вас? Для того чтобы не пропустить бота. А как бот работает? Да просто, запомнили html-код вашей формы, и в дальнейшем шлют вам автоматом лабуду всякую по статичным именам полей. А если имена полей с каждым выводом формы меняются, как вы думаете...? | |
|
|
| |
|