|
|
|
| Не пойму, что происходит. Прямо мистика какая-то с этой капчой...
Не так работает обработчик формы.
Вот коротко, в чем суть дела и что есть на этот момент.
Вывожу на страницу капчу + форму к ней, при нажатии на кнопку отправки формы создается ЕЩЕ ОДНО изображение (в папке получается 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');
}
?>
|
Не пойму, откуда берется второе изображение? И как от него избавиться? | |
|
|
|
|
|
|
|
для: Лена
(19.06.2009 в 10:54)
| | Первое предположение - функция testimagepng_mypage() вызывается в приемнике и раньше проверки. | |
|
|
|
|
|
|
|
для: Николай2357
(19.06.2009 в 14:29)
| | Не поняла вас. Что значит раньше проверки?
Я, получается, нажимаю на кнопку "скачать", и эта функция, которая генерирует капчу, вызывается еще раз. | |
|
|
|
|
|
|
|
для: Лена
(19.06.2009 в 15:30)
| | Похоже на то. Она же не сама по себе генерится, картинка. То есть вызов функции имеет место быть. А раз она срабатывает при "скачать", то логично предположить, что вызов её находится в обработчике. И вызов этот происходит, причем происходит раньше проверки, потому что успевает изменится сессия. | |
|
|
|
|
|
|
|
для: Николай2357
(19.06.2009 в 15:35)
| | достаточно того, чо она вызывается позже вывода картинки. | |
|
|
|
|
|
|
|
для: Trianon
(19.06.2009 в 16:20)
| | Я имел ввиду не вывод картинки а проверку. Она происходит наверняка позже, когда функция отработала и изменила переменную. По этому и не срабатывает. Если раньше, то проверка должна быть успешной. | |
|
|
|