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
Форумы портала PHP.SU :: Версия для печати :: Капча
Форумы портала PHP.SU » PHP » Программирование на PHP » Капча

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

1. Acuna - 03 Ноября, 2008 - 11:28:28 - перейти к сообщению
Всем привет! Я меняю в скрипте обычную цифровую капчу на капчу с вопросами (типа "Столица Франции?"). Вид капчи такой:
PHP:
скопировать код в буфер обмена
  1. <img src=\"./captcha.php\" alt=\"Код безопасности\" border=\"0\" />
(Т. е. просто картинка) А в src прописан путь к ее файлу. А как мне сделать, если мне нужна не картинка, а просто обращение к файлу капчи с вопросами? (она ведь текстовая). Пробовал функции readfile() и прочие. Но они просто выводят содержимое файла на месте капчи. Заранее благодарен!
2. Champion - 03 Ноября, 2008 - 11:34:05 - перейти к сообщению
нужно сделать ссылку на скрипт, а скрипт шлет заголовок, что контент тайп aplication/octet-stream(не помню как точно правильно), а потом readfile туда. Появится предложение сохранить файл
3. Acuna - 03 Ноября, 2008 - 11:53:21 - перейти к сообщению
В смысле? А можно по-подробнее?
(Добавление)
Извиняюсь за вопрос, а как вообще можно сделать капчу с вопросами?
4. Champion - 03 Ноября, 2008 - 15:01:13 - перейти к сообщению
CODE (text):
скопировать код в буфер обмена
  1. header("Content-Disposition: attachment; filename='имяподкоторымнадосохранитьфайл.расширение'");
  2. header("Accept-Ranges: bytes");
  3. header("Content-Length: ".filesize('имяфайласкоторымонхранитсянасервере.расширение'));
  4. header("Content-type: application/octet-stream");
  5. print file('имяфайласкоторымонхранитсянасервере.расширение')

(Добавление)
Я так понял, что проблема в том, что вы не хотите выводить текстовый файл в браузер, а хотите, чтоб получилось окошко для сохранения. Только куда вы это приткнуть хотите?
5. Ыыы - 03 Ноября, 2008 - 16:45:45 - перейти к сообщению
Цитата:
как мне сделать, если мне нужна не картинка

А какой тогда смысл каптчи? Улыбка я тоже хочу модератором быть... Улыбка
6. IOpeH - 03 Ноября, 2008 - 16:56:38 - перейти к сообщению
Champion вроде темы перепутал )))

зы Champion, жесткий у тебя аватар )))
7. Champion - 03 Ноября, 2008 - 17:03:17 - перейти к сообщению
IOpeH пишет:
Champion вроде темы перепутал )))

Я на это отвечал
Acuna пишет:
А как мне сделать, если мне нужна не картинка, а просто обращение к файлу капчи с вопросами? (она ведь текстовая). Пробовал функции readfile() и прочие. Но они просто выводят содержимое файла

(Добавление)
IOpeH пишет:
зы Champion, жесткий у тебя аватар )))

Мне тоже нравится Радость
8. valenok - 03 Ноября, 2008 - 22:49:33 - перейти к сообщению
вместо вот этого
<img src=\"./captcha.php\" alt=\"Код безопасности\" border=\"0\" />
нужно вывести простой текст.

Читатьй файл можно к примеру функцией file() , тогда будет проще отделять вопросы друг от друга как мне кажется.
9. Гость - 05 Ноября, 2008 - 20:20:38 - перейти к сообщению
А что запрещает воспользоваться библиотекой типа GD и запихать в картинку необходимый текст
P.S. Помоему в связи с неправильным толкованием терминов, забыи что такое КАПЧА, а капча это средство защиты от авторегистарций к примеру. А текст любой робот с легкостью прочитает Улыбка
10. valenok - 05 Ноября, 2008 - 21:55:39 - перейти к сообщению
текст на картинке прочитать роботу не сложно. Сложно должно быть ответить. А если сложно ответить то можно и обычным текстом.
В таких случая проблема с ограниченностью разных вопросов.
11. Jonas - 06 Ноября, 2008 - 11:56:57 - перейти к сообщению
Попробуй сделать то же самое с массивом:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //Массив с парами вопрос/ответ. Может быть любой длины.
  4. $questions = array();
  5.         $questions["Столица Франции"] = "париж";
  6.         $questions["Столица Германии"] = "берлин";
  7.         $questions["Столица Бельгии"] = "брюссель";
  8.         $questions["Столица Нидерландов"] = "амстердам";
  9.         $questions["Столица Испании"] = "мадрид";
  10.  
  11. //Если браузеру не передается ответ, то выводится вопрос.
  12. if ($_POST['Question'] == "")
  13.         {echo html_question();}
  14.         else
  15.         {echo html_answer($_POST['Question'], $_POST['Answer']);}
  16.  
  17.  
  18.  
  19. function html_question() {
  20. global $questions;
  21.  
  22. //Генерирует случайный номер $num, по которому из
  23. //массива берется пара вопрос/ответ.
  24. //Вопрос присваивается переменной $question,
  25. //который далее ставится в форму.
  26. $quest = rand(0, count($questions)-1);
  27. foreach ($questions as $k=>$v){
  28.         if ($num == $quest)
  29.                 {$question = $k;}
  30.         $num++;
  31.         }
  32.  
  33. //форма задавания вопроса
  34. //Вопрос и ответ передаются через $_POST
  35. $a = $question
  36.         <form name=\"question\" method=POST>
  37.         <input type=text name=\"Answer\">
  38.         <input type=hidden name=\"Question\" value=\"$question\">
  39.         <input type=submit value=\"Ответить\">
  40.         </form>";
  41.  
  42. return $a;
  43. }
  44.  
  45. function html_answer($question, $answer){
  46. global $questions;
  47.  
  48. //Ответ сравнивается с вопросом.
  49. if ($questions[$question] == $answer)
  50.         {$a = "Правильно!";}
  51.         else
  52.         {$a = "Неверно!";}
  53.  
  54. return $a;
  55. }
  56.  
  57. ?>
  58.  

 

Powered by ExBB FM 1.0 RC1