Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2011, 23:04   #1
xDyPx
Форумчанин
 
Аватар для xDyPx
 
Регистрация: 21.01.2009
Сообщений: 148
По умолчанию каптча. показывается неверная картинка

вот скрин, на нем видно, что на html странице показывается картинка с кодом "19998", а firebug и в информации о странице - картинка с кодом "78948". и в сессии записан код "78948". откуда взялись цифры "19998" - непонятно, причем это не те цифры, которые с генерировались при предыдущем показе странице.
Вот код captcha.php:
Код:
<?php
session_start();
Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
Header("Cache-Control: no-cache, must-revalidate");
Header("Pragma: no-cache");
Header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
header("Content-type: image/png");
$string = '';
for ($i = 0; $i < 5; $i++) {
  $string .= chr(rand(48, 57));
}
$_SESSION['rand_code'] = $string;
$image = imagecreatetruecolor(120, 30);
$black = imagecolorallocate($image, 0, 0, 0);
$color = imagecolorallocate($image, 0, 70, 0); 
$white = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image,0,0,399,99,$white);
imagettftext ($image, 20, 0, 10, 30, $color, "fonts/happy.ttf", $_SESSION['rand_code']);
imagepng($image);
?>
так вывожу картинку:
Код:
<img id="captcha" src="captcha.php">
скрипт captcha.php на странице больше нигде не запускаю.
МОЙ САЙТ
Компьютер позволяет решать все те проблемы, которые до появления компьютера не существовали.
xDyPx вне форума Ответить с цитированием
Старый 17.05.2011, 08:55   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

а на основной странице session_start() стартуете?
покажите код основной страницы где вывод картинки происходит и проверяется
ADSoft вне форума Ответить с цитированием
Старый 17.05.2011, 11:56   #3
xDyPx
Форумчанин
 
Аватар для xDyPx
 
Регистрация: 21.01.2009
Сообщений: 148
По умолчанию

вот index.php:
Код:
<?php 
session_start();
header('Content-type: text/html; charset=utf-8');
mysql_connect('localhost','user','lohloh');
mysql_select_db('kursach');
mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET NAMES 'utf8'");
$r=mysql_query("SELECT * FROM messages ORDER BY date desc");
//mysql_query("SELECT * FROM gast ORDER BY date,time desc");
Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
Header("Cache-Control: no-cache, must-revalidate");
Header("Pragma: no-cache");
Header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");	
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="jquery-1.6.js"></script>
<script type="text/javascript">
//тут js функции, которые никакого отношения к каптче не имеют
</script>
<link href="style.css" rel="stylesheet" type="text/css" />
<title>Использование технологии AJAX в WEB-программирование на примере Гостевой книги</title>
</head>
<body>
<div id="hor">
  <div class="Q">
  <?php 
  if(empty($_SESSION['uid'])) 
  {?>
  <form  action="func.php?action=login" method="post" enctype="multipart/form-data" id="log_in" name="login">
  <input name="login" id="login" type="text" value="login" size="30" /><br />
   <input name="pass" id="pass" type="password" value="captcha" size="30" /><br />
   <input name="go_login" id="go_login" type="submit" value="Вход" /><br /> <a href="#comment">Восстановить пароль<a><br /> <a href="reg.php">Регистрация</a>
  </form>
  <div class="mess" id="mess_login"></div>
  <?php
  }
  else {echo 'Привет, <b>'.$_SESSION['login'].'</b><br><a href="func.php?action=logout">Выход</a>';}
  ?>
  </div>
</div>

<div id="middle">
 <div id="vert"><div class="menu"><div style="background-color: #DEEDF5; width: 200px; height: 20px;">123</div></div></div>
 <div class="title">Название страницы</div>
  <div class="comment">
  <form action="func.php?action=add" method="post" enctype="multipart/form-data" id="add_mess" name="add_mess">
  <?php 
  if(empty($_SESSION['uid'])) 
  {?>
   Имя: <input name="name" id="name" type="text" value="имя" size="30" /> E-Mail: <input  name="email" id="email" type="text" value="xdx@xdxd.ru" size="50" /><br />
   Сообщение:<br />
   <textarea  name="text" id="text" cols="75" rows="10" dir="ltr">Текст сообщения</textarea><br />
    <!-- вот тут вывод каптчи -->
   <img id="captcha" src="captcha.php" /> Введите код с картинки: <input  name="kapcha" id="kapcha" type="text" value="" size="20" /><br />

  <?php
  }
  else 
  {
  ?>
   <input name="name" id="name" type="hidden" value="<?php echo $_SESSION['login'];?>" size="65" />
   <input name="email" id="email" type="hidden" value="<?php echo $_SESSION['email'];?>" size="65" />
   <textarea  name="text" id="text" cols="75" rows="10" dir="ltr">Текст сообщения</textarea><br />
  <?php
  }
  ?>        
   <input name="send_mess" id="send_mess" type="submit" value="Отправить" /> <div class="mess" style="display: inline;" id="mess"></div>
  </form>
  
 </div>
 <div class="content">
 <?php 
  if (mysql_numrows($r)==0) {echo "Записей нет";} 
  else 
	{
	   for($i=0;$i<mysql_numrows($r);$i++)
	   {
	     $f=mysql_fetch_array($r);
		 echo "<div class=\"comment\" id=\"comment-".$f["id"]."\">";
		 echo "<div class=\"nick\">".$f['name_user']."</div> пишет:<br><a class=\"date\" href=\"/#comment-".$f["id"]."\">".$f['date']."</a><br>";
		 echo "<div class=\"text\">".$f['text']."</div>";
		 echo "<div class=\"comment_panel\"><a class=\"edit\" OnClick=\"edit_comment(".$f["id"].")\">Изменить</a> <a class=\"del\" OnClick=\"del_comment(".$f["id"].")\">Удалить</a></div>";
		 echo "</div>";
	   }
	}
 ?>
 </div>
</div>
</body>
</html>
причем раньше все нормально работало. что я сделал или что произошло - без понятия.
МОЙ САЙТ
Компьютер позволяет решать все те проблемы, которые до появления компьютера не существовали.

Последний раз редактировалось xDyPx; 17.05.2011 в 12:01.
xDyPx вне форума Ответить с цитированием
Старый 17.05.2011, 12:12   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

а файле func.php что? и именно func.php?action=add ?
ADSoft вне форума Ответить с цитированием
Старый 17.05.2011, 12:24   #5
xDyPx
Форумчанин
 
Аватар для xDyPx
 
Регистрация: 21.01.2009
Сообщений: 148
По умолчанию

добавление сообщения происходит асинхронно, с помощью ajax
func.php
Код:
<? 
session_start();
header('Content-type: text/html; charset=utf-8');
mysql_connect('localhost','user','lohloh');
mysql_select_db('kursach');
mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET NAMES 'utf8'");
switch($_GET['action'])
{
case 'add_comment':
	$name= strip_tags(stripslashes(htmlspecialchars(trim(substr($_POST['name'], 0, 30 ), ENT_QUOTES))));  
	$email= strip_tags(stripslashes(htmlspecialchars(trim(substr($_POST['email'], 0, 30 ), ENT_QUOTES)))); 
	$text=strip_tags(str_replace("\n", "<br />", stripslashes(htmlspecialchars(trim($_POST['text']), ENT_QUOTES))), '<br>');
	$captcha= strip_tags(stripslashes(htmlspecialchars(trim(substr($_POST['captcha'], 0, 30 ), ENT_QUOTES)))); 
	$id_user=0;	
	if($name!='' && $text!='' && eregi( "[-_[:blank:]0-9a-zа-я]+", $name ) && preg_match( "#^[0-9a-z_\-\.]+@[0-9a-z\-\.]+\.[a-z]{2,6}$#i", $email ))
	{
	if($captcha==$_SESSION['rand_code'] || !empty($_SESSION['uid']))
	{
	   if(mysql_query("INSERT INTO messages (id, id_user, name_user, email, text, date) VALUES (NULL , '$id_user', '$name','$email', '$text', NOW())"))
	   {
			$r=mysql_query("SELECT * FROM messages ORDER BY date desc LIMIT 1");
			$f = mysql_fetch_assoc($r);
			$js = '$("#mess").fadeIn("slow").html("Сообщение добавлено!").delay(3000).fadeOut("slow"); $("#middle .content").prepend("<div class=\"comment\" style=\"display:none;\" id=\"comment-'.$f["id"].'\"><div class=\"nick\">'.$f["name_user"].'</div> пишет:<br><a class=\"date\" href=\"/#comment-'.$f["id"].'\">'.$f["date"].'</a><br><div class=\"text\">'.$f["text"].'</div><div class=\"comment_panel\"><a class=\"edit\" OnClick=\"edit_comment('.$f["id"].')\">Изменить</a> <a class=\"del\" OnClick=\"del_comment('.$f["id"].')\">Удалить</a></div></div>"); $("#comment-'.$f["id"].'").fadeIn("slow");';
	   }
	   else $js = '$("#mess").fadeIn("slow").html("Неизвестная ошибка. Обновите страницу.'.$text.'").delay(3000).fadeOut("slow").clear();';	   
	}else $js = '$("#mess").fadeIn("slow").html("Неверный код с картинки.").delay(3000).fadeOut("slow").clear();';
	} 
	else $js = '$("#mess").fadeIn("slow").html("Заполните поля Имя и Текст или проверьте все поля на правильность заполнения!").delay(3000).fadeOut("slow").clear();';
	echo $js;
 break;
//......тут другие функции
default: break;
}
?>
и вот на jquery код, которые отправляет данные с формы из файла index.php:
Код:
$(document).ready(function () {
    $("#add_mess").submit(Send);
	}); 
function Send() {
    $.post("func.php?action=add_comment", 
        {
		 name: $("#name").val(),
		 email: $("#email").val(),
		 text: $("#text").val(),
		 captcha: $("#kapcha").val(),
		},     
	 function (result) {
					eval(result);
						}
		  ); 
    return false;
}
МОЙ САЙТ
Компьютер позволяет решать все те проблемы, которые до появления компьютера не существовали.
xDyPx вне форума Ответить с цитированием
Старый 17.05.2011, 12:31   #6
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Чисто ради эксперимента попробуйте вывести изображение вот так:
PHP код:
<img id="captcha" src="captcha.php?rand=<?php echo uniqid(''true); ?>" />
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 17.05.2011, 14:02   #7
xDyPx
Форумчанин
 
Аватар для xDyPx
 
Регистрация: 21.01.2009
Сообщений: 148
По умолчанию

Спасибо за помощь, но решение было простым, а проблема просто идиотской. Я обновлял страницы с открытой вкладкой Сеть в firebug'e и наводил мышкой на строку с запросом к файлу captcha.php. я не думал, что firebug будет еще один запрос к этому скрипту делать, а не брать картинку из кэша.
Johnatan, спасибо за этот совет. мне это помогло для обновления картинки с кодом при клике на нее.
МОЙ САЙТ
Компьютер позволяет решать все те проблемы, которые до появления компьютера не существовали.
xDyPx вне форума Ответить с цитированием
Старый 17.05.2011, 20:46   #8
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию

ГГ, естественно, он же не на базе уличной магии работает. тоже самое про просмотре кода страницы в хрома допустим...
8oOoRPM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Каптча (Sandr) PHP 4 26.09.2010 21:09
Неверная запись Golovastik HTML и CSS 1 26.07.2010 21:34
Не показывается слайдер в IE6 oregano HTML и CSS 0 06.05.2010 11:38
Сайт не показывается в IE HereComesTheRain Помощь студентам 0 30.04.2010 18:14
Неверная ссылка на профиль AlDelta О форуме и сайтах клуба 2 27.10.2007 21:03