[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как сравнить ip с имеющимися в БД
m4a1fox
Доброй ночи уважаемые эксперты. Есть такой вопрос. С помощью функции $_SERVER['HTTP_REFERER'] получаю ip юзера. Как реализовать запрос, что бы он (запрос) проверял этот ip среди уже имеющихся в БД?



Спустя 8 минут, 41 секунда (5.03.2011 - 01:44) Trianon написал(а):
Цитата (m4a1fox @ 5.03.2011 - 01:35)
С помощью функции $_SERVER['HTTP_REFERER'] получаю ip юзера. Как реализовать запрос, что бы он (запрос) проверял этот ip среди уже имеющихся в БД?

$_SERVER - не функция, а массив.
Элемент $_SERVER['HTTP_REFERER'] содержит обычно не ip (и уж всяко не ip пользователя) , а URL-адрес страницы, с которой был выполнен переход на текущую, (или в контексте которой загружается элемент контента) .

Искать его содержимое среди строк таблицы с IP-адресами смысла не имеет.



Спустя 8 минут (5.03.2011 - 01:52) m4a1fox написал(а):
Trianon
Прошу прощение. Вот это $ip = $_SERVER['REMOTE_ADDR'];

Спустя 11 минут, 38 секунд (5.03.2011 - 02:03) Trianon написал(а):
m4a1fox

а таблица как выглядит?

Спустя 3 минуты, 13 секунд (5.03.2011 - 02:06) m4a1fox написал(а):
Trianon
5 полей. id, link, ip, vote_up, vote_down. Мне надо сравнить ip и link с теми что будут у меня в скрипте кот. будет заносить данные. Проблема в том, что я не знаю, как мне выполнить проверку. То есть, если такой ip уже есть, и такая link тоже, то нельзя оценивать статью, если же есть такой ip но нет link - тогда модно.

Спустя 8 минут, 58 секунд (5.03.2011 - 02:15) Invis1ble написал(а):
select count(*) from `table` where `ip`='ip' and `link`='link'

if (mysql_result($res, 0) == 0)
{
// оценивать можно
}

Спустя 58 секунд (5.03.2011 - 02:16) m4a1fox написал(а):
Invis1ble
Ага! Сейчас попробую и отпишусь. Просьбочка... далеко не уходите smile.gif

Спустя 8 минут, 6 секунд (5.03.2011 - 02:24) m4a1fox написал(а):
Invis1ble
Ругается вот на эту строчку if (mysql_result($res, 0) == 0). Матом вот таким
Warning: mysql_result() expects parameter 1 to be resource, boolean given in Y:\home\crimealeaks.com\www\like_unlike.php on line 6
. А в общем скрипте вот так делаю -
<?php
include './admin/blocks/db.php';
$ip = $_SERVER['REMOTE_ADDR'];
$view_f = $_SERVER['HTTP_REFERER'];
$res = mysql_query("select count(*) from `table` where `ip`='".$ip."' and `link`='".$view_f."'");
if (mysql_result($res, 0) == 0)
{
mysql_query("INSERT INTO `vote` SET
`link` = '"
.$view_f."',
`ip` = '"
.$ip."',
`vote_up` = 1,
`vote_down` = 0
"
);
}
else
{
mysql_query("INSERT INTO `vote` SET
`link` = '"
.$view_f."',
`ip` = '"
.$ip."',
`vote_up` = 0,
`vote_down` = 1
"
);
}
?>

Спустя 1 минута, 48 секунд (5.03.2011 - 02:26) Trianon написал(а):
m4a1fox
Это довольно самонадеянное решение.

Одинаковый ip вовсе не означает одного и того же пользователя.
Пример:
1.пользователи, которым в разное время был динамически выделен один и тот же IP-адрес.
2. пользователи интернет-кафе, пользователи некоторых домашних и большинства корпоративных сетей, выходящие в интернет через прокси.
3. пользователи GPRS и прочих мобильных средств доступа
и т.п.
Во всех этих случаях один ip присущ нескольким пользователям.

Равно как отличающиеся ip не означают, что пользователи разные.
Пример: человек оставил оценку с домашнего компа, а потом пришел на работу, и оставил её еще раз. Пользователь один - компы и ip - разные.

Спустя 4 минуты (5.03.2011 - 02:30) m4a1fox написал(а):
Trianon
Это я понимаю... Но этим и жертвую... Это не так строго. Так что важна реализация. Понимаете, я сделал это на cookie благо мне помогал fallow, ему огромное спасибо. Но там оказалась проблемка... Вот. И я решил попробовать реализовать с помощью бд. Вот. Данные я заношу. Но как проверить, что таких уже нет перед тем как заносить - не знаю.

Спустя 3 минуты, 7 секунд (5.03.2011 - 02:33) Trianon написал(а):
m4a1fox
недостает проверки
if(!$res) die("Error in sql: ". mysql_error());




А корректная реализация сохраняла бы id [зарегистрированного] пользователя портала, и ориентировалась именно по нему.

Спустя 4 минуты, 1 секунда (5.03.2011 - 02:37) m4a1fox написал(а):
Trianon
Вот такая строка
$res = mysql_query("select count(*) from `table` where `ip`='".$ip."' and `link`='".$view_f."'");
получается, что если в итоге $res существует, а в ней соответственно и ip=$ip, и link=$view_f, то скрипт останавливается. вот так
if(mysql_result($res, 0) != 0)
{
echo 'Такое уже было!';
}

иначе
if (mysql_result($res, 0) == 0)
{
mysql_query("INSERT INTO `vote` SET
`link` = '"
.$view_f."',
`ip` = '"
.$ip."',
`vote_up` = 1,
`vote_down` = 0
"
);
}
else
{
mysql_query("INSERT INTO `vote` SET
`link` = '"
.$view_f."',
`ip` = '"
.$ip."',
`vote_up` = 0,
`vote_down` = 1
"
);
}

Спустя 16 секунд (5.03.2011 - 02:38) Invis1ble написал(а):
m4a1fox
Цитата
Ругается вот на эту строчку if (mysql_result($res, 0) == 0). Матом вот таким
Warning: mysql_result() expects parameter 1 to be resource, boolean given in Y:\home\crimealeaks.com\www\like_unlike.php on line 6

ну во-первых добавь к запросу or die(mysql_error()). UPD: Trianon опередил =)
во-вторых отдебажь $res (var_dump($res)) и посмотри, что не так

Пс. Кстати, а зачем ты в таблице сделал vote_up и vote_down, ведь они взаимоисключающие, насколько я понял?.. Хватит и одного поля )

Спустя 2 минуты, 7 секунд (5.03.2011 - 02:40) m4a1fox написал(а):
Invis1ble
Извините насчет ошибки... сам недоглядел...

Спустя 51 секунда (5.03.2011 - 02:41) m4a1fox написал(а):
Invis1ble
Объясню. Хотел выводить сколько за и сколько против.

Спустя 2 минуты, 18 секунд (5.03.2011 - 02:43) m4a1fox написал(а):
Invis1ble
Спасибо. Эту часть задачи - благодаря Вам сделаю... Вроде как и работает!

Спустя 7 минут, 52 секунды (5.03.2011 - 02:51) Invis1ble написал(а):
m4a1fox
Цитата
Хотел выводить сколько за и сколько против

ну можно от общего количества отнимать количество проголосовавших "за", например.
Ну это дело хозяйское, тут нужно выбрать между производительностью и избыточностью данных, имхо..
Быстрый ответ:

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