Короче скрипт такой: Скрипт ввода данных и проверочного кода. PHP: <?php session_start(); $tim=date("d.m H:i"); $site_title="Гостевая: RU-версия $tim"; $root = $_SERVER['DOCUMENT_ROOT']; include ("$root/ru/header.tpl"); ?> <p> <form action=verification.php method=post> <input type=hidden name=action value=post> Имя:<font color=red><sup>*</sup><font><br/> <input type=text name=name maxlength=32 value='<? echo $name; ?>'><br/> Город:<br/> <input type=text name=city maxlength=32 value='<? echo $city; ?>'><br/> E-Mail:<br/> <input type=text name=email maxlength=32 value='<? echo $email; ?>'><br/> URL:<br/> <input type=text name=url maxlength=36 value='<? echo $url; ?>'><br/> Сообщение:<font color=red><sup>*</sup></font><br/> <input type=text name=msg maxlength=36 value='<? echo $msg; ?>'><br/> <!--kcaptcha--> Введите код с картинки:<br/> <img src="/captcha/captcha.php?<?php echo session_name()?>=<?php echo session_id()?>"><br/> <input type="text" name="keystring"><br/> <!--////kcaptcha--> <input type=submit name="submit" value='Добавить'> <input type="reset" value="Очистить форму"><br/> </form> <small><font color=red><sup>*</sup></font> - поля, обязательные для заполнения </small> </p> <?php include ("$root/ru/baners.tpl"); include ("$root/ru/footer.tpl"); ?> Скрипт проверки капчи и обработки введенных данных: PHP: <?php Error_reporting(E_ALL); session_start(); if(count($_POST)>0) { if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']) { if ($_POST['name'] == "") { header("Location: [url=http://]http://[/url]".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/".$relative_url); die(""); } if ( $_POST['email'] == "" ){ $redir_404; die(""); } if ( $_POST['msg'] == "" ){ header("Location: [url=http://]http://[/url]".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/".$relative_url); die(""); } if (IsSet($_REQUEST['submit']) & !empty($_REQUEST['submit'])) { $name=$_POST['name']; $city=$_POST['city']; $email=$_POST['email']; $homepage=$_POST['url']; $msg=$_POST['msg']; $name=htmlspecialchars($name); if(strlen($name) >= 30 ) { $name=substr($name,0,30); } $email=trim($email); if(strlen($email) >= 30 ) { $email=substr($email,0,30); } $preg_match=preg_match ('/^[A-Z0-9]+@[A-Z0-9]+\.[A-Z]{2,6}$/i',$email); if(strlen($msg) >= 100 ) { $email=substr($msg,0,100); } $msg=htmlspecialchars($msg); } if ($preg_match == "1") { $file = fopen("$root/gb/records/rec.".time(),"w"); fputs($file,$name."\n"); fputs($file,$city."\n"); fputs($file,$email."\n"); fputs($file,$url."\n"); fputs($file,$msg."\n"); fputs($file,$time."\n"); fclose($file); } } else { echo "<center><h3>Вы неверно ввели код подтверждения!</h3></center>"; echo "<center><h3><a href=\"addrec.php\">Повторите ввод</a></h3></center>"; } } unset($_SESSION['captcha_keystring']); ?> А вот проблема в том что даже при верном вводе проверочного кода крипт возвращает "Вы неверно ввели код подтверждения!" Непонятно. Уже наверно все темы с капчами тут перечитал и гуглил, нигде ответа не нашол. Встречал правда подобные случаи но без решений проблемы. :?
И собственно еще сам скрипт капчи. Проблема в каком-то из этих 3х мест. Для начала проверь отдельные части условия if (просто сделай var_dump для них перед самим if)
Сам капч PHP: <?php define('ROOT_PATH', './'); // Конфигурация $cfg['captcha_len'] = 4; $cfg['captcha_shift'] = true; $cfg['captcha_turn'] = true; $cfg['captcha_chess'] = true; header('Pragma: no-cache'); $symbols = array(/*0,*/ 1, 2, 3, 4, 5, 6, 7, 8, 9); //, 'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', /*'O', 'o',*/ 'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's', 'T', 't', 'U', 'u', 'V', 'v', 'W', 'w', 'X', 'x', 'Y', 'y', 'Z', 'z' $i = 0; $captcha = NULL; $symbols_num = count($symbols) - 1; while($i < $cfg['captcha_len']) { $captcha = $captcha.$symbols[rand(0, $symbols_num)]; $i++; } $width = $cfg['captcha_len'] * 20 + 20; // Ширина $height = 50; // Высота $image = imagecreatetruecolor($width, $height); $background = imagecolorallocate($image, rand(230, 255), rand(230, 255), rand(230, 255)); imagefill($image, 0, 0, $background); // Шахматная доска if($cfg['captcha_chess']) { $q = 0; $cube_side = rand(8, 12); while($q <= $height / $cube_side) { $i = 0; while($i <= $width) { if(fmod($q, 2)) { $cube_side = rand(8, 12); // Размер стороны квадратика $color = imagecolorallocate($image, rand(150, 255), rand(150, 255), rand(150, 255)); imagefilledrectangle($image, $i*2+$cube_side, $q*$cube_side, $i*2+$cube_side*2, $q*$cube_side+$cube_side, $color); } else { $cube_side = rand(8, 12); $color = imagecolorallocate($image, rand(150, 255), rand(150, 255), rand(150, 255)); imagefilledrectangle($image, $i*2, $q*$cube_side, $i*2+$cube_side, $q*$cube_side+$cube_side, $color); } $i += $cube_side; } $q++; } } // Шрифты $fonts_list = scandir(ROOT_PATH.'fonts'); unset($fonts_list[0], $fonts_list[1]); $fonts_num = count($fonts_list); // Строка $i = 10; $captcha = str_split($captcha); foreach($captcha as $value) { $color = imagecolorallocate($image, rand(50, 150), rand(50, 150), rand(50, 150)); imagettftext($image, 25, ($cfg['captcha_turn'])? rand(-30, 30) : 0, $i, ($cfg['captcha_shift'])? rand(25, 45) : 35, $color, ROOT_PATH.'fonts/'.$fonts_list[rand(2, $fonts_num+1)], $value); $i += rand(15, 25); } // Рамка $black = imagecolorallocate($image, 0, 0, 0); imageline($image, 0, 0, 0, $height, $black); // left imageline($image, $width - 1, 0, $width - 1, $height, $black); // right imageline($image, $width, 0, 0, 0, $black); // up imageline($image, $width, $height - 1, 0, $height - 1, $black); // down // Вывод изображения header('content-type: image/png'); imagepng($image); imagedestroy($image); ?> Гдето на етом форуме нашол кстати. var_dump возвращает Notice: Undefined index: captcha_keystring in C:\Program Files\Apache Group\Apache2\htdocs\ru\gb\verification.php on line 4 NULL string(4) "5185" Походу проблема в капче, но почему? Картинку генерирует. У других работает нормально. Подобное как тут: http://www.php.ru/forum/viewtopic.php?t=14866&highlight=%EA%E0%EF%F7%E0
Не пость простыни кода с вопросом. За редким исключением, их никто не читает. Зато начинают копипастить с ошибками. Сессию у тебя капча не устанавливает.