Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обработка HTML-формы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Captcha
Itan
Отправлено: 18 Марта, 2010 - 14:19:22
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Здравствуйте! Подскажите, пожалуйста, как мне сделать?
У меня есть HTML форма и страница-обработчик
В форме прописана самодельная каптча:
PHP:
скопировать код в буфер обмена
  1. function captcha() {
  2. $captcha = array('3+5=','8+10=','10+5=','45+5=','8+6=','3+4=','84+6=','23+2=');
  3. $count = count($captcha);
  4. $rand = mt_rand(0, $count-1);
  5. print $captcha[$rand];
  6. }

Потом внизу я вызываю функуию и юзер вводит ответ в поле 'captcha'

В обработчике я пишу оператор if:
"Если $_POST['captcha'] равно 18 или $_POST['captcha'] равно 20 или $_POST['captcha'] равно 7.........", то "сделать кое-что", "в остальных случаях написать 'Ошибка! Введен неверный ответ!' "

Так вот. Когда я просто захожу на страницу, то мне сразу пишет "Ошибка, введен неправильный ответ!"

Пробовал прописать по другому:

"В остальных случаях, если $_POST['captcha'] равно пустому значению, т.е. '', то вывести сообщение о ошибке "

И все равно при первом же заходе на страницу выводится сообщене о ошибке.

Так вот я думаю, как же сделать проверку, чтобы ошибка выводилась только тогда, когда реально введен неверный ответ, а не во всех случаях...
 
 Top
Champion Супермодератор
Отправлено: 18 Марта, 2010 - 14:22:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




isset($_POST['captcha']) and $_POST['captcha'] == 8

Только вот эта капча имеет много уникальных свойств.
Во-первых, слишком мало различных наборов.
Во-вторых, если я знаю хотя бы один правильный ответ (пусть 8) и мне выведется вопрос 10+8=, я могу на него ответить 8 и мне никто слова не скажет
 
 Top
Itan
Отправлено: 18 Марта, 2010 - 14:26:26
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Большое спасибо! Ппц, я оказывается такой нуб... все так просто, а я не один час убил на эту фигню (про проверку)... Скажите, а вам не надоело на такие нубский вопросы каждый день отвечать?)

Да, я знаю про косяки, но мне пока некогда их править, так только, сделать наглядный образ..
 
 Top
Champion Супермодератор
Отправлено: 18 Марта, 2010 - 14:31:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Нормальный вопрос. "Нубские" ты не видел)
 
 Top
Itan
Отправлено: 18 Марта, 2010 - 14:35:14
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




хех)) ну ладно.. у меня что-то не выходит.. блин, день какой-то дебильный.. Нахмурился

Я не могу составить правильное условие, типа "Если переменная капча установена, но имеет пустое значение", то "принт-ошибка"

У меня получается только так:

PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['captcha'])
  2. and $_POST['captcha']==""
  3. or $_POST['captcha']!=8
  4. or $_POST['captcha']!=18
  5. or $_POST['captcha']!=15
  6. or $_POST['captcha']!=50
  7. or $_POST['captcha']!=14
  8. or $_POST['captcha']!=7
  9. or $_POST['captcha']!=90
  10. or $_POST['captcha']!=25)
  11. {
  12. print '<div style="color:red">Вы неправильно сложили числа! Попробуйте еще раз!</div>';
  13. }
Но я сам понимаю, что оно работает не так, как я задумываю..
 
 Top
Champion Супермодератор
Отправлено: 18 Марта, 2010 - 14:39:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Во-первых, подумай над скобками в условии.
А во вторых, так короче:
 
 Top
Itan
Отправлено: 18 Марта, 2010 - 14:48:37
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Ладно, подумаю Книжка
Еще раз спасибо, тема закрыта Улыбка
 
 Top
JustUserR
Отправлено: 19 Марта, 2010 - 18:29:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Itan Я бы вам советовал преобразоывать это выражение со сложением в картинку с помощью библиотеки GD/GD2 потому что такая капча ломается достаточно легко - досаточно сграбить страницу и составить регулярное выражения для вырезания вашей капчи - а далее автомат будет ее легко обрабатывать Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB