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

Форум PHP

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

 

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

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

тема: Обработчик формы
 
 автор: Лена   (19.06.2009 в 10:54)   письмо автору
 
 

Не пойму, что происходит. Прямо мистика какая-то с этой капчой...
Не так работает обработчик формы.
Вот коротко, в чем суть дела и что есть на этот момент.
Вывожу на страницу капчу + форму к ней, при нажатии на кнопку отправки формы создается ЕЩЕ ОДНО изображение (в папке получается 2 изображения со случайным кодом) и в сессию пишется число со второго изображения.
Соответственно, когда сверяются пришедшие с формы данные, оказывается, что в $_POST-массиве число с первого изображения, а в сессии - число со второго изображения.


<?php
//генерим капчу
function testimagepng_mypage(){
//название файла случайного изображения
global $path_file;
$path_file 'image_' mt_rand() . '.png';

//заливаем картинку,
//создаем изображение со случайными цифрами, 
//все число пишем в $number
$number .= $num;
//посылаем заголовки, мим-типа и не кешировать изображение
//сохраняем в файл
imagepng($im$path_file);  
imagedestroy($im); 

//записываем полученное число в сессию
$_SESSION[$path_file] = $number

//выводим изображение
$tcontent .= '';
$tcontent .= '<img src="'check_url(url($path_file)) .'" 
alt="'
t('Image CAPTCHA') .'" title="'t('Image CAPTCHA') .'" /><br><br>';
//выводим форму с текстовым полем и кнопкой "Отправить"
$tcontent .= drupal_get_form('testimagepng_form',$node);
return 
$tcontent;

}
?> 


Далее - обработчик формы(функция ядра Друпала и аргументы в ней менять нельзя)

<?php
function testimagepng_form_submit($form, &$form_state){
global 
$path_file;
//в $form_state - значение текстового поля формы, куда пользователь вводит цифры, изображенные на картинке
if($form_state['values']['mycaptcha_number'] == $_SESSION[$path_file]){

//Вот тут и выясняется, что в $_SESSION[$path_file] находится число второго изображения, //а в $form_state - число первого изображения

//редирект на другую страницу
drupal_redirect_form($form$redirect 'upload_success');

}else{
//редирект на другую страницу
drupal_redirect_form($form$redirect 'upload_failure');
}
?>

Не пойму, откуда берется второе изображение? И как от него избавиться?

  Ответить  
 
 автор: Николай2357   (19.06.2009 в 14:29)   письмо автору
 
   для: Лена   (19.06.2009 в 10:54)
 

Первое предположение - функция testimagepng_mypage() вызывается в приемнике и раньше проверки.

  Ответить  
 
 автор: Лена   (19.06.2009 в 15:30)   письмо автору
 
   для: Николай2357   (19.06.2009 в 14:29)
 

Не поняла вас. Что значит раньше проверки?
Я, получается, нажимаю на кнопку "скачать", и эта функция, которая генерирует капчу, вызывается еще раз.

  Ответить  
 
 автор: Николай2357   (19.06.2009 в 15:35)   письмо автору
 
   для: Лена   (19.06.2009 в 15:30)
 

Похоже на то. Она же не сама по себе генерится, картинка. То есть вызов функции имеет место быть. А раз она срабатывает при "скачать", то логично предположить, что вызов её находится в обработчике. И вызов этот происходит, причем происходит раньше проверки, потому что успевает изменится сессия.

  Ответить  
 
 автор: Trianon   (19.06.2009 в 16:20)   письмо автору
 
   для: Николай2357   (19.06.2009 в 15:35)
 

достаточно того, чо она вызывается позже вывода картинки.

  Ответить  
 
 автор: Николай2357   (19.06.2009 в 16:25)   письмо автору
 
   для: Trianon   (19.06.2009 в 16:20)
 

Я имел ввиду не вывод картинки а проверку. Она происходит наверняка позже, когда функция отработала и изменила переменную. По этому и не срабатывает. Если раньше, то проверка должна быть успешной.

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

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