[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Странный косячок с сверкой IP
Albert
Ситуация такая, на сайте голосование ЗА и ПРОТИВ. Дабы заблокировать бесконечную накрутку пользователем, проводится сверка IP пользователя и IP, сохраненного в базу данных (во время последнего проголосования).

т.е. вы зашли на сайт, проголосовали, ваш ip записался в базу данных mysql, если еще раз проголосуете, уже не прокатит, ваш ip = сохраненному ip.

вот только не совсем работает функция. Голос Прибавляется ТОЛЬКО когда ip в базе равен 0 и пустоте. иначе даже если ваш ip 169.254.15.24 а в базе 122.23.12.221, то голос не прибавляется, хотя должен прибавиться...

вот код: $tmp_ip и $ip - ключевые переменные.
PHP
db_connect($host$user$pass$name);
$result mysql_query("SELECT Yes, No, IP FROM History WHERE id='$ss_vote'");
$res mysql_fetch_array($result);
$tmp_ip  $res['IP'];
$tmp_yes  $res['Yes'];
$tmp_no  $res['No'];
if (
$ss_type == "1") {$tmp_yes +=1;} else {$tmp_no +=1;}
$ip $_SERVER['REMOTE_ADDR'];

if (!
$tmp_ip == $ip) {
db_connect($host$user$pass$name);
$w ="UPDATE History SET `Yes`='$tmp_yes',`No`='$tmp_no',`IP`='$ip' WHERE id='$ss_vote'";
do_query($w);
}




Спустя 1 минута, 48 секунд (4.05.2009 - 12:32) Albert написал(а):
быть может проблема в самой базе данных? поле IP в таблице - VARCHAR

Спустя 1 час, 34 минуты, 47 секунд (4.05.2009 - 14:07) Alchemist написал(а):
Ошибка в выделеной строке:

Цитата
db_connect($host, $user, $pass, $name);
$result = mysql_query("SELECT Yes, No, IP FROM History WHERE id='$ss_vote'");
$res = mysql_fetch_array($result);
$tmp_ip =  $res['IP'];
$tmp_yes =  $res['Yes'];
$tmp_no =  $res['No'];
if ($ss_type == "1") {$tmp_yes +=1;} else {$tmp_no +=1;}
$ip = $_SERVER['REMOTE_ADDR'];

if (!$tmp_ip == $ip) {
db_connect($host, $user, $pass, $name);
$w ="UPDATE History SET `Yes`='$tmp_yes',`No`='$tmp_no',`IP`='$ip' WHERE id='$ss_vote'";
do_query($w);
}

Спустя 2 часа, 36 минут, 37 секунд (4.05.2009 - 16:44) Albert написал(а):
так в том то и дело, что в ней...

эта строка и сверяет ваш ip и ip сохраненный в базе... если они разные, то голос учитывается, если нет, то значит вы пытаетесь накрутить...




Спустя 41 минута, 34 секунды (4.05.2009 - 17:25) Kuliev написал(а):
Albert



PHP
if ($tmp_ip == $ip)





Спустя 1 час, 43 минуты, 30 секунд (4.05.2009 - 19:09) Guest написал(а):
нет, ребят вы не поняли...

kuliev

твой вариант приведет к тому, что проголосовать нельзя вообще никакда, то есть прибавить голос свой нельзя будет +1 к статье на сайте у меня.

голос должен прибавляться в случае, если !$tmp_ip == $ip
но он почему то не прибавляется...
прибавляется, только если $tmp_ip = 0 или = пустоте...

Спустя 27 минут, 32 секунды (4.05.2009 - 19:36) Guest написал(а):
а где ты поставил восклицательный знак?
!=

Спустя 12 часов, 53 минуты, 2 секунды (5.05.2009 - 08:29) Albert написал(а):
спасибо помогло, теперь вопрос возник...

я всегда восклицательный ставил перед переменной, то есть вот так !$tmp_ip == $ip и всегда работало, а тут вдруг нужно вот так ставить $tmp_ip !== $ip

почему????

Спустя 1 час, 6 минут, 32 секунды (5.05.2009 - 09:36) Kuliev написал(а):
Albert
Восклицательный знак это ОТРИЦАНИЕ т.е.
PHP
if (!isset($action));
// Данное условие будет выполнено если переменная
// $action не существует


Спустя 1 день, 16 часов, 1 минута, 28 секунд (7.05.2009 - 01:37) KUZNEC написал(а):
Цитата (Albert @ 5.05.2009 - 05:29)
спасибо помогло, теперь вопрос возник...

я всегда восклицательный ставил перед переменной, то есть вот так !$tmp_ip == $ip и всегда работало, а тут вдруг нужно вот так ставить $tmp_ip !== $ip

почему????

дополню.
в данном случае ты просто отрицаешь значение !$tmp_ip == $ip т.е. к примеру если $tmp_ip равно 1 то в этом условии будет считаться то оно равно 0.

и ещё не !== а !=
Быстрый ответ:

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