|
|
|
| вообщем есть капча, для комментариев,
в бд табилца с картинками и результатами картинок
при добавлении выводит разные капчи, но при добавлении пишет что неправильно указана цыфра.
как исправить ошибку
БД
id img sum
1 img/sum/sum.gif 3
2 img/sum/sum1.jpg 4
|
кусок страницы добавления коментария:
$result4 = mysql_query ("SELECT * FROM comments_setting ORDER BY RAND() LIMIT 1",$db);
$myrow4 = mysql_fetch_array($result4);
?>
<p class='newst'>Добавить Ваш комментарий:</p>
<form action="comment.php" method="post" name="form_com">
<p><label>Ваше имя: </label><input name="author" type="text" size="30" maxlength="30"></p>
<p><label>Текст комментария: <br> <textarea name="text" cols="32" rows="4"></textarea></label></p><p>Введите сумму чисел с картинки<br><img style='margin-top:17px;' src="<? echo $myrow4["img"]; ?>" width="80" height="40">
<input style='margin-bottom:16px;' name="pr" type="text" size="5" maxlength="5"></p>
<input name="id" type="hidden" value="<? echo $id; ?>">
<p><input name="sub_com" type="submit" value="Комментировать"></p>
</form>
|
Исполняющий файл:
<?php include ("blocks/bd.php");
if (isset($_POST['author']))
{
$author = $_POST['author'];
}
if (isset($_POST['text']))
{
$text = $_POST['text'];
}
if (isset($_POST['pr']))
{
$pr = $_POST['pr'];
}
if (isset($_POST['sub_com']))
{
$sub_com = $_POST['sub_com'];
}
if (isset($_POST['id']))
{
$id = $_POST['id'];
}
if (isset($sub_com))
{
if (isset($author)) {trim($author); }
else {$author = "";}
if (isset($text)) {trim($text); }
else {$text = "";}
if (empty($author) or empty($text))
{
exit ("<p>Вы ввели не всю информацию, вернитесь назад и заполните все поля. <br> <input name='back' type='button' value='Вернуться назад' onclick='javascript:self.back();'>");
}
$author = stripslashes($author);
$text = stripslashes($text);
$author = htmlspecialchars($author);
$text = htmlspecialchars($text);
$result = mysql_query ("SELECT sum FROM comments_setting",$db);
$myrow = mysql_fetch_array($result);
if ($pr == $myrow["sum"])
{
$date = date("Y-m-d");
$result2 = mysql_query ("INSERT INTO comments (post,author,text,date) VALUES ('$id','$author','$text',NOW())",$db);
$address = "serega2101@i.ua";
$subject = "Новый комментарий на блоге";
$result3 = mysql_query ("SELECT title FROM data WHERE id='$id'",$db);
$myrow3 = mysql_fetch_array ($result3);
$post_title = $myrow3["title"];
$message = "Появился комментарий к заметке - ".$post_title."\nКомментарий добавил(а): ".$author."\nТекст комментария: ".$text."\nСсылка на заметку: http://citylife.uzhgorod.ua/view_post.php?id=".$id."";
mail($address,$subject,$message,"Content-type:text/plain; Charset=windows-1251\r\n");
echo "<html><head>
<meta http-equiv='Refresh' content='0; URL=view_post.php?id=$id'>
</head></html>";
exit();
}
else
{
exit ("<p>Вы ввели неверную сумму цифр с картинки на предыдущей странице. <br> <input name='back' type='button' value='Вернуться назад' onclick='javascript:self.back();'>");
}
}
?>
|
| |
|
|
|
|
|
|
|
для: milanello
(17.08.2010 в 15:05)
| | Храните цифру в сессии зачем её сохранять в БД!!! | |
|
|
|
|
|
|
|
для: serenya1983
(17.08.2010 в 15:11)
| | что значит хранить в сессии? | |
|
|
|
|
|
|
|
для: milanello
(17.08.2010 в 15:22)
| | Когда создаёте картину (цифры) сохраните их в сессии:
session_start();
$_SESSION['kod'] = md5($code);
|
затем, сравнивайте что введено (в начале страницы session_start();)
if (isset($_POST['pr'])&&(md5($_POST['pr'])==$_SESSION['kod']))
echo "код верный";
else echo "код не верный";
|
| |
|
|
|
|
|
|
|
для: serenya1983
(17.08.2010 в 15:31)
| |
<?php
$_SESSION['kod'] = md5($code);
?>
| А зачем md5()? | |
|
|
|
|
|
|
|
для: Commander
(18.08.2010 в 04:19)
| | Чтобы бот не ломанул. :) | |
|
|
|
|
|
|
|
для: sim5
(18.08.2010 в 04:53)
| | Это юмор?
Хэш необходим только в том случае, если бот получит доступ к данным сессии, а для этого необходимо ломать сервер. Если же сервер сломан, никакая каптча не поможет. | |
|
|
|
|
|
|
|
для: Commander
(18.08.2010 в 05:51)
| | >Это юмор?
А разве похоже на серьезный аргумент? ) | |
|
|
|
|
|
|
|
для: milanello
(17.08.2010 в 15:05)
| | Вы хотя бы представляеете механизм работы каптчи? Судя по коду и "картинки каптчи в БД" нет. | |
|
|
|
|
|
|
|
для: sim5
(17.08.2010 в 15:11)
| | вопрос чем ваш ответ может помочь решению проблемы? | |
|
|
|
|
|
|
|
для: milanello
(17.08.2010 в 15:23)
| | тем же, чем и Ваш вопрос "что значит хранить в сессии?"
Вы сами писали каптчу? возьмите готовое решение на captcha.ru | |
|
|
|
|
|
|
|
для: Slo_Nik
(17.08.2010 в 15:34)
| | скачал зип архив етой капчи
но он не открывается. | |
|
|
|
|
|
|
|
для: milanello
(17.08.2010 в 16:47)
| |
<?php
$width = 110;
$height = 38;
$length = 5;
$font = '../data/verdana.ttf';
$font_size = 14;
$bg_color = array(240, 240, 240);
$chars = 'ABCDEFGHKMNPQRSTUVWXYZ23456789';
session_start();
putenv('GDFONTPATH=' . realpath('.'));
$img = imagecreatetruecolor($width, $height);
$bkgr = imagecolorallocate($img, $bg_color[0], $bg_color[1], $bg_color[2]);
imagefilledrectangle($img, 0, 0, $width, $height, $bkgr);
$code = '';
for($i = 0; $i < $length; $i++)
{
$code .= $chr = $chars[mt_rand(0, strlen($chars)-1)];
$r = mt_rand(0, 192);
$g = mt_rand(0, 192);
$b = mt_rand(0, 192);
$color2 = imagecolorallocate($img, $r, $g, $b);
$rotation = rand(-35, 35);
$x = 5+$i*(4/3*$font_size+2);
$y = rand(4/3*$font_size, $height-(4/3*$font_size)/2);
imagettftext($img, $font_size, $rotation, $x, $y, $color2, $font, $chr);
$x1=0; $x2=$width; $y1=mt_rand(0, $height); $y2=mt_rand(0, $height);
$linecolor = imagecolorallocate ( $img , 255, 255, 255);
imageline($img, $x1, $y1, $x2, $y2, $textcolor);
}
$_SESSION['kod'] = md5($code);
header("Content-type: image/png");
header("Expires: Mon, 01 Jul 1998 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
imagepng($img);
imagedestroy($img);
?>
|
| |
|
|
|
|
|
|
|
для: serenya1983
(17.08.2010 в 16:59)
| | дружище а ето куда запхать?
ат оя чет не шарю уже вообще( | |
|
|
|
|
|
|
|
для: milanello
(17.08.2010 в 17:09)
| | вообщем вопрос такой
я в первом файле делаю присвоение переменной случайного числа
$sly4 = rand(1, 2);
как мне перенести число которое присвоилось на етой страничке перенести на другую?
на страничку в которой идет обработка | |
|
|
|
|
|
|
|
для: milanello
(17.08.2010 в 17:17)
| | через $_SESSION
код выше сохранить в php файл и указывать его в качестве адреса для картинки <img src='...'> | |
|
|
|
|
 164.4 Кб |
|
|
для: milanello
(17.08.2010 в 16:47)
| | архив в приложении, с того же сайта, всё открывается | |
|
|
|