[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: перезапись куков
brainraider
поискал по форуму, что то не нашел ничего схожего со своей проблемой.

если кто может показать аналог моей темы - прошу линк.

а проблема моя в следующем:

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 написал(а):
Господа, как бы вопрос уже не по кукам, но код тот же - вот и не стал новую тему портить...

<?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
Не.. Лучше подумай о том что твой "антибот" не будет работать smile.gif Боты в большинстве своем куки не принимают, а значит твой счетчик просто не будет на них срабатывать.

Спустя 2 минуты, 5 секунд (10.03.2010 - 05:15) brainraider написал(а):
ыц ) Вполне возможно... просто мне нужно написать именно такой... Такое вот условие, просто никак не могу разобраться с реализацией... я уе и через буфер делал... переделывал все 1000 раз =)))

kirik, подскажи по вопросам пожалуйста. =)

Спустя 8 минут, 33 секунды (10.03.2010 - 05:24) kirik написал(а):
brainraider
Ну для начала для чего придумали 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 запрос, через который помечаем что куки включены (или нет)
- послать юзеру куку, а при следующем обращении проверить существует ли она. Тут главное придумать хитрую систему отслеживания этого "следующего обращения" smile.gif

Боты никак не будут реагировать) Ты им посылаешь куку, а обратно они ее не отдают. Первый вариант с 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

подобрать ответ будет затруднительно

Спустя 1 минута, 38 секунд (10.03.2010 - 05:41) brainraider написал(а):
Цитата (kirik @ 10.03.2010 - 02:38)
Цитата (brainraider @ 9.03.2010 - 21:26)
.Ы. Все еще ищу таймер обратного отсчета!

Спасибо =) просто супер решение то что нуна нашлось тут же!

Спустя 35 минут, 31 секунда (10.03.2010 - 06:16) brainraider написал(а):
Относительно счетчика нашел... но только не могу понять

<script language="JavaScript" SRC="countdown.php?timezone=Europe/Kiev&countto=  ???   &do=r&data=http://vpoiskah.net/temp/antibot_register.php"></SCRIPT>


как вместо вопросов вставить дату... дата момента "сейчас"+180 секунд например.

Кто знает - жду ваших советов!



_____________
Там где есть новички, есть и двигатель прогресса!!!
Ну, если не сказать больше=)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.