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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Запрет на обнавление обработчика... ?

Сообщения:  [1-10]    [11-20]  [21-26] 

 
 автор: sim5   (04.12.2008 в 06:16)   письмо автору
 
   для: serjinio   (03.12.2008 в 23:14)
 

То что разобрались, это хорошо, но если говорить о примере, который я показал выше, то он годиться только как тест-пример, не более, для реального сценария он не подойдет.
У меня ссылка используется просто для сокращения записей - при большом числе элементов формы и многочисленных проверках POST-данных, можно сразу прописать ссылки на каждый элемент массива, код получиться более читабельным. Trianon уже сказал где почитать, значит вы изучили вопрос этот.

  Ответить  
 
 автор: Trianon   (03.12.2008 в 23:29)   письмо автору
 
   для: serjinio   (03.12.2008 в 23:14)
 

Вам не нужно его использовать как раз именно по этой причине.

http://ru2.php.net/manual/ru/language.references.php

  Ответить  
 
 автор: serjinio   (03.12.2008 в 23:14)   письмо автору
 
   для: sim5   (03.12.2008 в 08:55)
 

Спасибо Вам ,разобрался...пропускал цикл...
А можно попутно задать вопрос ...вот это &
$elemets = &$_SESSION['elemets_form'];

я как понимаю передача переменной по по ссылке,но не понимаю физический смысл этой передачи,в
частности используемой в функциях
function fs(&$var){$var++;}

в каких случаях & надо использовать,Заранее спасибо.

  Ответить  
 
 автор: sim5   (03.12.2008 в 08:55)   письмо автору
 
   для: 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>

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

  Ответить  
 
 автор: serjinio   (03.12.2008 в 07:44)   письмо автору
 
   для: 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
)


но постом ничего не передается..прямо не знаю, в чем проблема

  Ответить  
 
 автор: sim5   (02.12.2008 в 19:23)   письмо автору
 
   для: Dinya_1   (02.12.2008 в 18:56)
 

А вам что роман написать "Location, мать его ити"? :) Ну тогда это будет очень большое вступление о сомнениях и терзаниях душевных, большой заключительный пролог, а между ними всего одна полезная строк: - header("location: ...").
VAR - это имя переменной, которое вы можете заменить на любое другое. Я написал так потому, что это сокращение от variable - переменная.
Во втором блоке, вы проверяте данные полей пришедшей формы, и если какое либо поле имеет ошибки, то вы добавляете соответствующее сообщение переменной $error. Как добавлять, тут можно поступить по разному, например, сообщения об ошибках, это будут просто элементы параграфа с текстом ошибки в них, тогда при ошибках:
$error .= "<p>Error 1</p>"; и т.д.. Можно сделать текст ошибок массивом, и т.д., и т.п..
Теперь вывод формы, она будет (по условию) выводиться и при ошибках ввода. Значит, передав эту переменную в вывод формы, пользователь увидит сообщения.

  Ответить  
 
 автор: Dinya_1   (02.12.2008 в 18:56)   письмо автору
 
   для: sim5   (01.12.2008 в 18:48)
 

sim5 - написал красиво но коротко, кажется начинаю понимать что к чему, только не могу ни как разобрать что значить 'var' - тоже что и id ? типа порядкового номера?

также понятно насчет третьего блока...Сообщение об Ошибках с какой части будет выходить с первой или же со второй...?

  Ответить  
 
 автор: sim5   (01.12.2008 в 18:48)   письмо автору
 
   для: 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) {
  
//код формы, значениями полей которой служат
  //инициализированные переменные -
  //по умолчанию они пусты, при получении формы и возврате ошибок
  //будут содержать уже введенное пользователем  

  Ответить  
 
 автор: Dinya_1   (01.12.2008 в 18:18)   письмо автору
 
   для: 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(); 

// Тут вывод результатов. 

  Ответить  
 
 автор: sim5   (01.12.2008 в 18:09)   письмо автору
 
   для: Dinya_1   (01.12.2008 в 18:06)
 

А для чего каптча у вас? Для того чтобы не пропустить бота. А как бот работает? Да просто, запомнили html-код вашей формы, и в дальнейшем шлют вам автоматом лабуду всякую по статичным именам полей. А если имена полей с каждым выводом формы меняются, как вы думаете...?

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-26] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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