Установка капчи

Статус
В этой теме нельзя размещать новые ответы.

Squoll2

Постоялец
Регистрация
2 Июн 2009
Сообщения
80
Реакции
15
Люди добрые помогите установить капчу в этот код а точнее чтобы шла проверка при нажатии кнопки добавить
PHP:
<?php
	$res = $db->query("SELECT * FROM `rigonda_reserv` ORDER BY `id` DESC");
/* KCAPTCHA */ session_start();
	if(isset($_POST['submit'])) {
		$errors = array();
		$required_fields = array('userName','userText','keystring');
		$errors = array_merge($errors, check_required_fields_2($required_fields, $_POST));
		$name = mysql_real_escape_string(strip_tags($_POST['userName']));
		$text = mysql_real_escape_string(strip_tags($_POST['userText']));
		if(empty($errors)) {
			$qr = $db->query("INSERT INTO `rigonda_reserv` (`id`, `name`, `text`, `date`, `level`) 
			VALUES  (0, '{$name}', '{$text}', curdate(), 0)");
			checkQueryResult_2($qr, 'index.php?cat=6&act=resAdd', 'index.php?cat=6&act=resAddErr');
		}
	}
?>
<div id="wn">
	<center>

			<table cellspacing="0" cellpadding="0" border="0" height="316">
				<tr>
					<td valign="top" align="left">
						<!------------->
						<div style="width: 475px;">
			<?php showContent(5); ?>
			<div id="hrhr"></div>
			<br />
		</div>
		<div id="wn" class="flexcroll" style="height: 190px; width: 455px;">
			<div id="lyr1">
				<?php if(mysql_num_rows($res) > 0): ?>
				<table cellspacing="0" cellpadding="0" border="0">
					<?php while($r = mysql_fetch_assoc($res)): ?>
						<tr>
							<td width="475">
								<span class="name">
									<i><?= $r['date'] ?></i>
									&mdash;
								</span>
								<span>
									<?php if($r['level'] == 1): ?>
										<?php $hh = "<br /><br />"; ?>
										<b style="color: red;"><?= $r['name'] ?></b>
									<?php else: ?>
										<?php $hh = "<br /><br />"; ?>
										<b><?= $r['name'] ?></b>
									<?php endif ?>
								</span>
							</td>
						</tr>
						<tr>
							<td>
								<span class="name">
									<div style="width:430px; margin: 0; padding: 0; padding-left: 10px;"><?= $r['text'] ?></div>
								</span>
								<?= $hh ?>
							</td>
						</tr>
					<?php endwhile ?>
				</table>
				<?php else: ?>
					<?= $lnNoRes ?>
				<?php endif ?>
			</div>
		</div>
	</div>

					</td>
				</tr>
			</table>
		
	</center>
	
</div>
<div id="second" >
		<form method="post" action="<?= $_SERVER['PHP_SELF'] ?>?cat=6">
			<table style="padding-left: 27px;" cellspacing="0" cellpadding="0" border="0">
				<tr>
					<td align="right" valign="top">
						<label for="userName"><?= $lnYourName ?>:</label>
					</td>
					<td style="width: 210px;" align="right">
						<input style="width: 200px;" name="userName" type="text" id="userName" />
					</td>
				</tr>
				<tr>
					<td colspan="2" style="height: 5px;"></td>
				</tr>
				<tr>
					<td align="right" valign="top">
						<label for="userText"><?= $lnYourText ?>:</label>
					</td>
					<td style="width: 210px;" align="right">
						<textarea style="width: 200px;" rows="7" name="userText" id="userText"></textarea>
					</td>
				</tr>
				<tr>
					<td align="right" valign="top">
						
					</td>
					<td style="width: 210px;" align="right">
						<img src="/kcaptcha/?<?php echo session_name()?>=<?php echo session_id()?>">
					</td>
				</tr>
				<tr>
					<td align="right" valign="top">
						
					</td>
					<td style="width: 210px;" align="right">
						<input type="text" name="keystring">
					</td>
				</tr>
												<tr>
					<td colspan="2" style="height: 5px;"></td>
				</tr>
				<tr>
					<td align="right" colspan="2">
						<input type="submit" name="submit" id="submit" value="<?= $lnResSend ?>" />
					</td>
				</tr>
			</table>
		</form>
		<div style="padding-left: 40px;">
			<? if (!empty($errors)) { display_errors($errors); } ?>
			<?php



				if(isset($_GET['act'])) {
					$act = $_GET['act'];
					if($act == "resAdd" OR $act == "resAddErr") {
						if($act == "resAdd") {
							print $lnResOk;
						}
						if($act == "resAddErr") {
							print $lnResErr;
						}
					} else {
						print $lnResPageErr;
					}
				}

			?>
		</div>
	</div>

А вот сам пример кода проверки
PHP:
if(count($_POST)>0){
	if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
		echo "Correct";
	}else{
		echo "Wrong";
	}
}
unset($_SESSION['captcha_keystring']);
?>
 
Переделка из твоего кода:
PHP:
session_start();
if(isset($_POST['submit'])) {
        $errors = array();
        $required_fields = array('userName','userText','keystring');
        $errors = array_merge($errors, check_required_fields_2($required_fields, $_POST));
        $name = mysql_real_escape_string(strip_tags($_POST['userName']));
        $text = mysql_real_escape_string(strip_tags($_POST['userText']));
//________ПРОВЕРКА КАПЧИ_____________________
$ucaptcha=isset($_POST['keystring']) ? $_POST['keystring'] : "xxx";
$captcha=isset($_SESSION['captcha_keystring']) ? $_SESSION['captcha_keystring'] : "yyy";
if(captcha!=ucaptcha)
  errors[]="Сообщение о неверной капче";
//__________________________________

        if(empty($errors)) {
            $qr = $db->query("INSERT INTO `rigonda_reserv` (`id`, `name`, `text`, `date`, `level`) 
            VALUES  (0, '{$name}', '{$text}', curdate(), 0)");
            checkQueryResult_2($qr, 'index.php?cat=6&act=resAdd', 'index.php?cat=6&act=resAddErr');
        }
    }
 
про session_start забыли
if(count($_POST)>0){
session_start();
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
echo "Correct";
...
 
Переделка из твоего кода:
PHP:
session_start();
if(isset($_POST['submit'])) {
        $errors = array();
        $required_fields = array('userName','userText','keystring');
        $errors = array_merge($errors, check_required_fields_2($required_fields, $_POST));
        $name = mysql_real_escape_string(strip_tags($_POST['userName']));
        $text = mysql_real_escape_string(strip_tags($_POST['userText']));
//________ПРОВЕРКА КАПЧИ_____________________
$ucaptcha=isset($_POST['keystring']) ? $_POST['keystring'] : "xxx";
$captcha=isset($_SESSION['captcha_keystring']) ? $_SESSION['captcha_keystring'] : "yyy";
if(captcha!=ucaptcha)
  errors[]="Сообщение о неверной капче";
//__________________________________
        if(empty($errors)) {
            $qr = $db->query("INSERT INTO `rigonda_reserv` (`id`, `name`, `text`, `date`, `level`) 
            VALUES  (0, '{$name}', '{$text}', curdate(), 0)");
            checkQueryResult_2($qr, 'index.php?cat=6&act=resAdd', 'index.php?cat=6&act=resAddErr');
        }
    }
Неработает этот вариант
 
про session_start забыли
Да, надо же, значит в строке №1 мы что-то (оригинал №2) отличное от сессии стартуем :smmne:
Неработает этот вариант
Поясни что не работат? Тут может не работать только 2 момента:
непонятные функция check_required_fields_2, $db->query, checkQueryResult_2(я исходил из того, что они где-то определены и не вызывают сомнения + параметры переданные им верные). И момент с капчей:
Если ты видишь картинку <img src="/kcaptcha/?<?php echo session_name()?>=<?php echo session_id()?>"> значит проверь в скрипте капчи сюда ли $_SESSION['captcha_keystring'] устанавливается сгенеривованная строка. Если картинки не видно - значит <img src="/kcaptcha/?<?php echo session_name()?>=<?php echo session_id()?>"> замени на <img src="/kcaptcha/index.php?<?php echo session_name()?>=<?php echo session_id()?>">? поскольку при определенных настройках сервера можешь и не получить картинки.
 
Картинки ввижу, при твоём варианте выдаёт пустую страницу, при моём всё работает единственное что неидёт проверки на капчу
 
Картинки ввижу, при твоём варианте выдаёт пустую страницу, при моём всё работает единственное что неидёт проверки на капчу
Ну потому что я привел фрагмент кода который идет до твоего HTML Добавь все чтопосле первого ?>.
 
Ну я то добавил что то я то понимаю, но вот почему неработает сама капча немогу понять точнее её функция на проверке
 
сорри, вот моя опечатка:
if(captcha!=ucaptcha) знак $ пропустил перед captcha. Еще замени строку "yyy" на false иначе лазейка обхода капчи получится.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху