|
|
|
|
|
для: Karum
(09.07.2005 в 02:57)
| | Если вынести переменные из кавычек, то никакие преобразования не требуются, парсер не будет воспринимать точки в IP-адресе.
Вот код, который я использую на своих 10 сайтах и он не вызывает проблемм и заблокированный юзер не может попасть на сайт, его сразу перебрасывает на другой сайт и он мне повышает счетчик в программе обмена банерами.
Вот код добавления адреса в таблицу блокировок, он добавляется из формы POST методом (переменная $db_prefix - это просто префикс таблиц, чобы имена не нахлестывались когда одну базу юзаешь на много сайтов):
$start_dt=time();
$end_dt=time() + (3600 * 24 * 7 * intval($_POST["blk_cnt"]));
mysql_query("INSERT INTO " . $db_prefix . "Blocklist (blk_ip, blk_start_date, blk_end_date) VALUES ('" . $_POST["blk_ip"] . "', '" . $start_dt . "', '" . $end_dt . "')");
|
А вот код проверки блока, он вызывается инклюдом в каждом файле сайта (show_message в конце - это функция выводящая сообщение и перенаправляющая юзера на другой адрес):
global $usrS; //массив данных о пользователе
if(isset($_SERVER["REMOTE_ADDR"]) && !empty($_SERVER["REMOTE_ADDR"]))$usrS["user_ip"]=$_SERVER["REMOTE_ADDR"];
if(isset($_SERVER["HTTP_X_FORWARDED_FOR"]) && !empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
$usrS["user_ip"]=$_SERVER["HTTP_X_FORWARDED_FOR"];
$usrS["is_proxy"]=1;
}
//проверяем блокировку по IP
if($usrS["user_ip"]!="")
{
$rez=mysql_query("SELECT * FROM " . $db_prefix . "Blocklist WHERE blk_ip='" . $usrS["user_ip"] . "' AND blk_end_date>" . time());
if(!$rez || !mysql_num_rows($rez))
{
}else{
$row=mysql_fetch_assoc($rez);
$dt_end_blocked=date("d.m.Y", $row["blk_end_date"]);
mysql_free_result($rez);
session_destroy();
show_message("Ваш IP (" . $usrS["user_ip"] . ") заблокирован из-за нарушений до: " . $dt_end_blocked . "! Если вы считаете, чо это ошибка, свяжитесь с администратором: <a href='mailto:admin@admin.com'>admin</a>", "http://www.interess.ru/", 10000);
exit();
}
}
|
Как видно в коде: "WHERE blk_ip='" . $usrS["user_ip"] . "'... " никаких преобразований я не делаю и он работает и отлично блокирует.
Это только часть проверки, на самом деле блокированному юзеру, чтобы попасть на сайт нужно отключить куки, закрыть все окна, чтобы убить сессию и найти прокси который не передает его реальный адрес, только тогда он сможет войти на сайт. Согласитесь, достаточно веселая процедура, чтобы просто посмотреть содержимое сайта.
Поэтому еще раз повторюсь - выносите переменные из кавычек (это кстати дает прирост скорости в большом коде на 30%) и привыкайте сразу писать код правильно, чтобы потом не страдать при отладке в поиске ошибок. | |
|
|
|
|
|
|
|
для: RV
(09.07.2005 в 05:07)
| | можно. | |
|
|
|
|
|
|
|
для: Karum
(09.07.2005 в 02:57)
| | а так можно?
>?
$query = "INSERT INTO users (Name , Nick) VALUES ('$user_name' , '$nick_name')";
mysql_query($users_query) or...
?>
|
| |
|
|
|
|
|
|
|
для: XPraptor
(09.07.2005 в 01:24)
| | Если вы не заметили, то все написано так как и у вас!!!
Решена проблема так:
http://softtime.ru/forum/read.php?id_forum=1&id_theme=5331&page=1 | |
|
|
|
|
|
|
|
для: Karum
(08.07.2005 в 21:14)
| | Господа, сколько можно повторять, не ленитесь и выносите переменные из кавычек, а так же соблюдайте правила написания запросов - текст в одиночных кавычках не текст без кавычек. IP строковая константа а вней есть точки, PHP эти точки путает с разделителями переменных. Запишите как надо и все будет в порядке.
mysq_query("INSERT INTO Table ('ip') VALUES ('" . $ip . "')");
|
| |
|
|
|
|
|
|
|
для: cheops
(08.07.2005 в 21:04)
| | Зайди на http://forum.motto.net.ua (другой домен лень создавать :)
выводит нормально, а в таблицу заносит крыво! | |
|
|
|
|
|
|
|
для: Karum
(08.07.2005 в 20:36)
| | Выведите в окне браузера запрос
<?php
echo "insert into ip(ip) values('".$REMOTE_HOST."')";
?>
|
и попробуйте выполнить его в phpMyAdmin. | |
|
|
|
|
|
|
|
для: cheops
(08.07.2005 в 20:30)
| | До внесения в базу (в базе 194)!
Мне кажется, что проблема в mysql_query("insert into ip(ip) values('".$REMOTE_HOST."')");
( но прогаю недавно не знаю как устранить) | |
|
|
|
|
|
|
|
для: Karum
(08.07.2005 в 20:04)
| | Посмотрите при помощи панели управления, например, при помощи phpMyAdmin - адрес бъётся до помещения его в базу данных или после - т.е. в самой базе данных он полный? | |
|
|
|
|
|
|
|
для: Karum
(08.07.2005 в 20:04)
| | В место IP полного пишет только первую часть! | |
|
|
|
|