Ситуация такая, на сайте голосование ЗА и ПРОТИВ. Дабы заблокировать бесконечную накрутку пользователем, проводится сверка 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 написал(а):
Спустя 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.
и ещё не !== а !=