| |
|
|
| | Взял тут капчу: http://captcha.ru/kcaptcha.zip
Тестовый пример в зипе выводит картинку, правда почему-то не выводятся input и submit...
Пытался встроить этот скрипт в свою реальную страницу - безуспешно
Делал так:
<? session_start(); ?>
<html>
<head>
<!-- тут html страницы -->
<tr class='controw' id='rrrrr'>
<td><b>Капча:</b></td>
<td>
<form action="" method="post">
<img src="autoadd.php?<?php echo session_name()?>=<?php echo session_id()?>">
<input type="text" name="keystring"></p>
<input type="submit" value="Check"></p>
</form>
<?php
if(count($_POST)>0){
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
echo "Correct";
}
else{
echo "Wrong";
}
}
unset($_SESSION['captcha_keystring']);
?>
<?
include('kcaptcha.php');
if(isset($_REQUEST[session_name()])){
/*session_start();*/
}
$captcha = new KCAPTCHA();
if($_REQUEST[session_name()]){
$_SESSION['captcha_keystring'] = $captcha->getKeyString();
}
?>
</td>
</tr>
|
В общем, никакой картинки не выводит, только варнинг:
Warning: Cannot modify header information - headers already sent by (output started at z:\home\site.ru\www\autoadd.php:114) in z:\home\site.ru\www\kcaptcha.php on line 202
После варнинга идут бинарные данные, как я понял - это бинарник картинки.
Пробовал закомментировать строку, на которую ругается (там стоит header("Content-Type: image/jpeg");) - варнинг исчез, но по-прежнему картинки нет, только hex-код картинки.
Что делать? | |
| |
|
|
| |
|
|
| |
для: Хулиган
(06.02.2008 в 14:05)
| | | С картинкой разобрался: генератор картинки поместил в отдельный файл а для <img> сделал src = имя этого файла.
Ещё вопрос: когда я делаю сабмит формы и перехожу на страницу, указаную в её action, то для получения переменной $_SESSION['captcha_keystring'] мне приходится опять открывать сессию (session_start();), иначе пишет, что переменная не установлена.
Это действительно необходимо каждый раз открывать сессию, или я что-то не так делаю? | |
| |
|
|
| |
|
|
| |
для: Хулиган
(06.02.2008 в 14:57)
| | | >Это действительно необходимо каждый раз открывать сессию?
да | |
| |
|
|
| |
|
|
| |
для: Thrasher
(06.02.2008 в 15:00)
| | | Спасибо. | |
| |
|
|
| |
|
|
| |
для: Хулиган
(06.02.2008 в 14:05)
| | | Что-то проблемы с этой капчей продолжаются :(
read_msg.php:
<a href="add_msg.php">Добавить сообщение</a>
|
add_msg.php:
<?
$addmessage = "";
session_start();
if(count($_POST)>0){
$addmessage = $_POST['message']
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
unset($_SESSION['captcha_keystring']);
/* -- add new message -- */
if ( $result == "1" ) { //added successfully
Header("Location: /read_msg.php");
exit;
}
}
else {
/* -- wrong captcha --*/
unset($_SESSION['captcha_keystring']);
echo "Wrong";
}
}
?>
<? session_start(); ?>
<form name="addform" action="add_msg.php" method="post">
<input type='text' name='message' value=<? print $addmessage; ?>>
<img src="kk.php?<?php echo session_name()?>=<?php echo session_id()?>">
<input type='text' name='keystring'>
<input type='submit' value='Отправить'>
</form>
|
Алго такой: со страницы read_msg.php перехожу на страницу добавления сообщений add_msg.php.
Набираю текст, ввожу код с картинки и делаю сабмит. Если все правильно, сообщение добавляется в БД и далее перехожу на read_msg.php, где уже видно новое сообщение.
Если капча была набрана неверно, то add_msg.php перезагружается с новой картинкой.
В общем, 2 проблемы:
1. После добавления сообщения и возврата на read_msg.php если я пытаюсь добавить ещё одно объявление, то при переходе на add_msg.php у меня выводится картинка от предыдущего кода.
Почему - непонятно. При том, что $_SESSION['captcha_keystring'] сгенерирована заново. Естественно я ввожу число считаное с картинки(старое) и оно не совпадает с $_SESSION['captcha_keystring'] и при сабмите происходит ошибка.
После этого страница перезагружается с новой картинкой и с новым $_SESSION['captcha_keystring'] и после этого добавление происходит успешно.
Почему так?
2. При неправильном вводе капчи страница перезагружается с новой картинкой, как и положено, но при этом выскакивает предупреждение:
Notice: A session had already been started - ignoring session_start() in z:\home\site.ru\www\add_msg.php on line 31.
Пробовал заглушить вывод этого сообщение через error_reporting (E_ALL ^ E_NOTICE); - не помогает.
Что с этим можно придумать? Может есть способ определить, что сессия уже стартовала и пропустить повторный старт? | |
| |
|
|
| |
|
|
| |
для: Хулиган
(06.02.2008 в 23:14)
| | | 1. Так происходит тк видимо не передаётся хеадер о не кешировании изображения...
2. Насчёт 2 хз... :)
но меня смущает что в add_msg.php указано 2 функции session_start();
ждёмс ответов... решил ща вот себе тож прикрутить капчу... :) ещё не пробовал... | |
| |
|
|
| |
|
|
| |
для: spider-x
(07.02.2008 в 00:35)
| | | Я сделал так, что к имени файла, генерящего картинку прикручиваю рандомное число.
Из-за этого она каждый раз генерируется по новой, а не из кеша. | |
| |
|
|
| |
|
|
| |
для: spider-x
(07.02.2008 в 00:35)
| | | Картинка не может быть из кэша: у неё рандомный адрес (session_id).
В общем обе проблемы решены одним if: вместо второго session_start() делаю
if( !isset($_REQUEST[session_name()]) ) session_start();
чтобы предотвратить повторную генерацию кода session_id, если сессия ещё продолжается. | |
| |
|
|