если кто может показать аналог моей темы - прошу линк.
а проблема моя в следующем:
1. Браузер не видит записи куков. Начал разбираться с куками по нормальному только сегодня... может просто не понял как они должны запиываться...
2. переменная counter не перезаписывается и я не сильно врубаюсь как нужно перезаписывать, ведь сеткуки можно ставить только до вывода любых заголовков...
вот код:
<?php
setcookie("counter",$counter,time()+180);
require("config.inc.php");
global $q_id, $a_id;
if(empty($_POST['ans']))
{
$sql='SELECT question FROM reg_question ORDER BY rand() LIMIT 1';
$sql_q=mysql_query($sql);
$q1=mysql_fetch_array($sql_q);
echo $q1['question'].'<br />
<form name="register" action="#" method="POST" enctype="multipart/form-data">
<input type="text" value="" name="ans"><br />
<input type="hidden" name="vopros" value="'.$q1['question'].'">
<input type="submit" value="Ответить"><br />
</form>
';
}
elseif(isset($_POST['ans']))
{
$sql='SELECT * FROM reg_question WHERE question="'.$_POST['vopros'].'"';
$sql_idv=mysql_query($sql);
$q2=mysql_fetch_array($sql_idv);
$q_id=$q2['id'];
$sql='SELECT * FROM reg_question WHERE ans="'.$_POST['ans'].'"';
$sql_ida=mysql_query($sql);
$q3=mysql_fetch_array($sql_ida);
$a_id=$q3['id'];
if($q_id==$a_id)
{
echo 'Теперь мы удостоверились, что Вы не робот и готовы принять Вас к нам на сайт!';
}
elseif($q_id!=$a_id)
{
$counter++;
echo $counter;
//$errors=3-$error_ans;
echo 'у вас осталось попыток: '.$errors.'<br /><br />
';
}
}
?>
Заранее ОЧЕНЬ благодарен!
Спустя 57 минут, 25 секунд (9.03.2010 - 01:58) kirik написал(а):
Вот пример использования куки в роли счетчика:
if(empty($_COOKIE['counter'])) {
$counter = 1;
} else {
$counter = $_COOKIE['counter'] + 1;
}
setcookie('counter', $counter, time() + 180);
echo $counter;
Спустя 18 минут, 20 секунд (9.03.2010 - 02:17) brainraider написал(а):
+100500 =))
Я уэ и не ожидал что мне седня ответтят =)
Спасибо большое - все заработало!
Я уэ и не ожидал что мне седня ответтят =)
Спасибо большое - все заработало!
Спустя 1 день, 2 часа, 33 минуты, 54 секунды (10.03.2010 - 04:51) brainraider написал(а):
Господа, как бы вопрос уже не по кукам, но код тот же - вот и не стал новую тему портить...
Подскажите пожалуйста, как мне сделать, что бы сообщение об ошибке или правильном ответе выводилось сразу под формой, а не на новой странице.
Т.е. нажал кнопку и не попал на чистый лист с надписью - у вас остало 3 попытки, а прям тут увидел...
Вот как щас работает: http://vpoiskah.net/temp/antibot_register.php
И, если вдруг сталкивались - подскажите какой нибудь готовый ЖС счетчик, что бы поставить вместо "ждите 3 минуты"...
Заранее благодарен!
<?php
if(empty($_COOKIE['counter'])) {$counter = 1;}
elseif($_COOKIE['counter']<3) {$counter = $_COOKIE['counter'] + 1;}
elseif($_COOKIE['counter']>=3) {$counter = 3;}
setcookie('counter', $counter, $time=time()+180);
require_once("config.inc.php");
if($_COOKIE['counter']<3)
{
if(empty($_POST['ans']))
{
$sql='SELECT question FROM '.$prefix.'reg_question ORDER BY rand() LIMIT 1';
$sql_q=mysql_query($sql) or die(mysql_error() ."<br/>". $sql);
$q1=mysql_fetch_array($sql_q);
echo $q1['question'].'<br />
<form name="register" action="#" method="POST" enctype="multipart/form-data">
<input type="text" value="" name="ans"><br />
<input type="hidden" name="vopros" value="'.$q1['question'].'">
<input type="submit" value="Ответить"><br />
</form>
';
}
if(isset($_POST['ans']))
{
$sql='SELECT * FROM '.$prefix.'reg_question WHERE question="'.$_POST['vopros'].'"';
$sql_idv=mysql_query($sql) or die(mysql_error() ."<br/>". $sql);
$q2=mysql_fetch_array($sql_idv);
$q_id=$q2['id'];
$sql='SELECT * FROM '.$prefix.'reg_question WHERE ans="'.$_POST['ans'].'"';
$sql_ida=mysql_query($sql) or die(mysql_error() ."<br/>". $sql);
$q3=mysql_fetch_array($sql_ida);
$a_id=$q3['id'];
if($q_id!=$a_id)
{
$errors=2-$_COOKIE['counter'];
echo 'у вас осталось попыток: '.$errors.'<br /><br />';
}
elseif($q_id==$a_id)
{echo 'Теперь мы удостоверились, что Вы не робот и готовы принять Вас к нам на сайт!';}
}
}
if($_COOKIE['counter']>=3)
{
$_COOKIE['counter']=3;
echo 'ждите 3 минуты';
}
?>
Подскажите пожалуйста, как мне сделать, что бы сообщение об ошибке или правильном ответе выводилось сразу под формой, а не на новой странице.
Т.е. нажал кнопку и не попал на чистый лист с надписью - у вас остало 3 попытки, а прям тут увидел...
Вот как щас работает: http://vpoiskah.net/temp/antibot_register.php
И, если вдруг сталкивались - подскажите какой нибудь готовый ЖС счетчик, что бы поставить вместо "ждите 3 минуты"...
Заранее благодарен!
Спустя 22 минуты, 46 секунд (10.03.2010 - 05:13) kirik написал(а):
brainraider
Не.. Лучше подумай о том что твой "антибот" не будет работать Боты в большинстве своем куки не принимают, а значит твой счетчик просто не будет на них срабатывать.
Не.. Лучше подумай о том что твой "антибот" не будет работать Боты в большинстве своем куки не принимают, а значит твой счетчик просто не будет на них срабатывать.
Спустя 2 минуты, 5 секунд (10.03.2010 - 05:15) brainraider написал(а):
ыц ) Вполне возможно... просто мне нужно написать именно такой... Такое вот условие, просто никак не могу разобраться с реализацией... я уе и через буфер делал... переделывал все 1000 раз =)))
kirik, подскажи по вопросам пожалуйста. =)
kirik, подскажи по вопросам пожалуйста. =)
Спустя 8 минут, 33 секунды (10.03.2010 - 05:24) kirik написал(а):
brainraider
Ну для начала для чего придумали if-else? Чтобы не писать
а сразу:
По вопросу - складируй ошибки (сообщения) в массив, а потом выводи форму и ошибки из массива под ней (через цикл например).
Ну для начала для чего придумали if-else? Чтобы не писать
if(empty($_POST['ans']))
{
//...
}
if(isset($_POST['ans']))
//...
}
а сразу:
if(isset($_POST['ans']))
{
//...
}
else
{
//...
}
По вопросу - складируй ошибки (сообщения) в массив, а потом выводи форму и ошибки из массива под ней (через цикл например).
Спустя 1 минута, 37 секунд (10.03.2010 - 05:26) brainraider написал(а):
Спасибо =)
Вот созрел вопросик: а если поставить проверку на включенные куки? Как будут реагировать боты?
З.Ы. Все еще ищу таймер обратного отсчета!
Вот созрел вопросик: а если поставить проверку на включенные куки? Как будут реагировать боты?
З.Ы. Все еще ищу таймер обратного отсчета!
Спустя 10 минут, 31 секунда (10.03.2010 - 05:36) kirik написал(а):
brainraider
Вот пример к предыдущему вопросу:
Вот пример к предыдущему вопросу:
Свернутый текст
$errors = array();
// Нам засабмитили форму
if(!empty($_POST)) {
if(!isset($_POST['login'])) {
$errors[] = 'Поле "Имя пользователя" не заполнено';
}
if(!isset($_POST['email'])) {
$errors[] = 'Поле "Адрес почты" не заполнено';
}
if(empty($errors)) {
// Все прошло хорошо и без ошибок - редиректим юзера куда-нить
}
}
echo 'тут наша форма';
// а тут выводим ошибки (если есть)
foreach($errors as $error) {
echo $error . '<br />';
}
Цитата (brainraider @ 9.03.2010 - 21:26) |
Вот созрел вопросик: а если поставить проверку на включенные куки? Как будут реагировать боты? |
Есть 2 способа проверить включены ли куки у юзера:
- через JS проверяем и отсылаем AJAX запрос, через который помечаем что куки включены (или нет)
- послать юзеру куку, а при следующем обращении проверить существует ли она. Тут главное придумать хитрую систему отслеживания этого "следующего обращения"
Боты никак не будут реагировать) Ты им посылаешь куку, а обратно они ее не отдают. Первый вариант с JS тем более отпадает, т.к. большинство ботов не дружат с JS.
Если возникнет вопрос "как защититься от подбора паролей" - юзай капчу единственный более-менее надежный вариант. Можешь брать IP юзера и писать куда-нибудь (БД/кэш..) сколько раз он пытался залогиниться, и только через 3 раза выводить капчу.
Спустя 2 минуты, 5 секунд (10.03.2010 - 05:38) kirik написал(а):
Цитата (brainraider @ 9.03.2010 - 21:26) |
.Ы. Все еще ищу таймер обратного отсчета! |
Спустя 58 секунд (10.03.2010 - 05:39) brainraider написал(а):
тут система иного рода.
Это не при логине... тут система типа капчи, вот только вместо непонятной картинки задается логичный детский вопрос, которых в базе порядка 300-1000
подобрать ответ будет затруднительно
Это не при логине... тут система типа капчи, вот только вместо непонятной картинки задается логичный детский вопрос, которых в базе порядка 300-1000
подобрать ответ будет затруднительно
Спустя 1 минута, 38 секунд (10.03.2010 - 05:41) brainraider написал(а):
Цитата (kirik @ 10.03.2010 - 02:38) | ||
|
Спасибо =) просто супер решение то что нуна нашлось тут же!
Спустя 35 минут, 31 секунда (10.03.2010 - 06:16) brainraider написал(а):
Относительно счетчика нашел... но только не могу понять
как вместо вопросов вставить дату... дата момента "сейчас"+180 секунд например.
Кто знает - жду ваших советов!
<script language="JavaScript" SRC="countdown.php?timezone=Europe/Kiev&countto= ??? &do=r&data=http://vpoiskah.net/temp/antibot_register.php"></SCRIPT>
как вместо вопросов вставить дату... дата момента "сейчас"+180 секунд например.
Кто знает - жду ваших советов!
_____________
Там где есть новички, есть и двигатель прогресса!!!
Ну, если не сказать больше=)