|
|
|
| Делаю голосование на сайт, и надо его защитить. Пошел через IP адрес
Проблема в том что если адрес 194.123.453.667 записуем в базу данных и при
выводе с нее пишит IP= 194 , ТИП данных = text | |
|
|
|
|
|
|
|
для: Karum
(08.07.2005 в 19:14)
| | Напишите структуру таблицы с записями об IP. | |
|
|
|
|
|
|
|
для: Саня
(08.07.2005 в 20:01)
| | Вношу данные:
<html>
<head>
<?
echo "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=result.php'> ";
?>
</head>
<body>
<?
define("DBName","");
define("HostName","localhost");
define("UserName","");
define("Password","");
if(!mysql_connect(HostName,UserName,Password))
{
echo "huevaia baza!";
echo mysql_error();
exit;
}
mysql_select_db(DBName);
@mysql_query("create table ip(id int auto_increment primary key, ip text)");
@mysql_query("create table opera(id int auto_increment primary key, opera int)");
@mysql_query("create table ie(id int auto_increment primary key, ie int)");
@mysql_query("create table ff(id int auto_increment primary key, ff int)");
@mysql_query("create table other(id int auto_increment primary key, other int)");
$REMOTE_HOST=($REMOTE_ADDR);
$resul = $_GET['RadioGroup1'];
mysql_query("insert into ip(ip) values('".$REMOTE_HOST."')");
if ($resul == 1 ) {
mysql_query("insert into opera(opera) values('".$resul."')");
}
if ($resul == 2 ) {
mysql_query("insert into ie(ie) values('".$resul."')");
}
if ($resul == 3 ) {
mysql_query("insert into ff(ff) values('".$resul."')");
}
if ($resul == 4 ) {
mysql_query("insert into other(other) values('".$resul."')");
}
?>
</body>
</html>
|
Вывожу
<html>
<body>
<?
define("DBName","");
define("HostName","localhost");
define("UserName","");
define("Password","");
if(!mysql_connect(HostName,UserName,Password))
{
echo "huevaia baza!";
echo mysql_error();
exit;
}
mysql_select_db(DBName);
//13
$REMOTE_HOST=($REMOTE_ADDR);
$ip=mysql_query("select * from ip ORDER BY id DESC");
$see_ip=mysql_fetch_array($ip);
$opera=mysql_query("select * from opera ORDER BY id DESC");
$see_opera=mysql_fetch_array($opera);
$ie=mysql_query("select * from ie ORDER BY id DESC");
$see_ie=mysql_fetch_array($ie);
$ff=mysql_query("select * from ff ORDER BY id DESC");
$see_ff=mysql_fetch_array($ff);
$other=mysql_query("select * from other ORDER BY id DESC");
$see_other=mysql_fetch_array($other);
echo "ip: $see_ip[ip] <br>";
echo "opera: $see_opera[id] <br>";
echo "ie: $see_ie[id] <br>";
echo "ff: $see_ff[id] <br>";
echo "other: $see_other[id] <br>";
if ($see_ip[ip]==$REMOTE_HOST) {echo "good"; }
else echo "hui <br><br>";
echo "$REMOTE_HOST";
?>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: Karum
(08.07.2005 в 20:04)
| | В место IP полного пишет только первую часть! | |
|
|
|
|
|
|
|
для: Karum
(08.07.2005 в 20:04)
| | Посмотрите при помощи панели управления, например, при помощи phpMyAdmin - адрес бъётся до помещения его в базу данных или после - т.е. в самой базе данных он полный? | |
|
|
|
|
|
|
|
для: cheops
(08.07.2005 в 20:30)
| | До внесения в базу (в базе 194)!
Мне кажется, что проблема в mysql_query("insert into ip(ip) values('".$REMOTE_HOST."')");
( но прогаю недавно не знаю как устранить) | |
|
|
|
|
|
|
|
для: Karum
(08.07.2005 в 20:36)
| | Выведите в окне браузера запрос
<?php
echo "insert into ip(ip) values('".$REMOTE_HOST."')";
?>
|
и попробуйте выполнить его в phpMyAdmin. | |
|
|
|
|
|
|
|
для: cheops
(08.07.2005 в 21:04)
| | Зайди на http://forum.motto.net.ua (другой домен лень создавать :)
выводит нормально, а в таблицу заносит крыво! | |
|
|
|
|
|
|
|
для: Karum
(08.07.2005 в 21:14)
| | Господа, сколько можно повторять, не ленитесь и выносите переменные из кавычек, а так же соблюдайте правила написания запросов - текст в одиночных кавычках не текст без кавычек. IP строковая константа а вней есть точки, PHP эти точки путает с разделителями переменных. Запишите как надо и все будет в порядке.
mysq_query("INSERT INTO Table ('ip') VALUES ('" . $ip . "')");
|
| |
|
|
|
|
|
|
|
для: XPraptor
(09.07.2005 в 01:24)
| | Если вы не заметили, то все написано так как и у вас!!!
Решена проблема так:
http://softtime.ru/forum/read.php?id_forum=1&id_theme=5331&page=1 | |
|
|
|
|
|
|
|
для: Karum
(09.07.2005 в 02:57)
| | а так можно?
>?
$query = "INSERT INTO users (Name , Nick) VALUES ('$user_name' , '$nick_name')";
mysql_query($users_query) or...
?>
|
| |
|
|
|
|
|
|
|
для: RV
(09.07.2005 в 05:07)
| | можно. | |
|
|
|
|
|
|
|
для: 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%) и привыкайте сразу писать код правильно, чтобы потом не страдать при отладке в поиске ошибок. | |
|
|
|