Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с IP
 
 автор: Karum   (08.07.2005 в 19:14)   письмо автору
 
 

Делаю голосование на сайт, и надо его защитить. Пошел через IP адрес
Проблема в том что если адрес 194.123.453.667 записуем в базу данных и при
выводе с нее пишит IP= 194 , ТИП данных = text

   
 
 автор: Саня   (08.07.2005 в 20:01)   письмо автору
 
   для: Karum   (08.07.2005 в 19:14)
 

Напишите структуру таблицы с записями об IP.

   
 
 автор: Karum   (08.07.2005 в 20:04)   письмо автору
 
   для: Саня   (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 == ) {
   
mysql_query("insert into opera(opera) values('".$resul."')");
}

if (
$resul == ) {
   
mysql_query("insert into ie(ie) values('".$resul."')");
}

if (
$resul == ) {
   
mysql_query("insert into ff(ff) values('".$resul."')");
}

if (
$resul == ) {
   
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:19)   письмо автору
 
   для: Karum   (08.07.2005 в 20:04)
 

В место IP полного пишет только первую часть!

   
 
 автор: cheops   (08.07.2005 в 20:30)   письмо автору
 
   для: Karum   (08.07.2005 в 20:04)
 

Посмотрите при помощи панели управления, например, при помощи phpMyAdmin - адрес бъётся до помещения его в базу данных или после - т.е. в самой базе данных он полный?

   
 
 автор: Karum   (08.07.2005 в 20:36)   письмо автору
 
   для: cheops   (08.07.2005 в 20:30)
 

До внесения в базу (в базе 194)!
Мне кажется, что проблема в mysql_query("insert into ip(ip) values('".$REMOTE_HOST."')");
( но прогаю недавно не знаю как устранить)

   
 
 автор: cheops   (08.07.2005 в 21:04)   письмо автору
 
   для: Karum   (08.07.2005 в 20:36)
 

Выведите в окне браузера запрос
<?php
  
echo "insert into ip(ip) values('".$REMOTE_HOST."')";
?>

и попробуйте выполнить его в phpMyAdmin.

   
 
 автор: Karum   (08.07.2005 в 21:14)   письмо автору
 
   для: cheops   (08.07.2005 в 21:04)
 

Зайди на http://forum.motto.net.ua (другой домен лень создавать :)
выводит нормально, а в таблицу заносит крыво!

   
 
 автор: XPraptor   (09.07.2005 в 01:24)   письмо автору
 
   для: Karum   (08.07.2005 в 21:14)
 

Господа, сколько можно повторять, не ленитесь и выносите переменные из кавычек, а так же соблюдайте правила написания запросов - текст в одиночных кавычках не текст без кавычек. IP строковая константа а вней есть точки, PHP эти точки путает с разделителями переменных. Запишите как надо и все будет в порядке.


mysq_query("INSERT INTO Table ('ip') VALUES ('" . $ip . "')");

   
 
 автор: Karum   (09.07.2005 в 02:57)   письмо автору
 
   для: XPraptor   (09.07.2005 в 01:24)
 

Если вы не заметили, то все написано так как и у вас!!!

Решена проблема так:
http://softtime.ru/forum/read.php?id_forum=1&id_theme=5331&page=1

   
 
 автор: 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...
?>

   
 
 автор: cheops   (09.07.2005 в 11:57)   письмо автору
 
   для: RV   (09.07.2005 в 05:07)
 

можно.

   
 
 автор: XPraptor   (10.07.2005 в 03:58)   письмо автору
 
   для: 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%) и привыкайте сразу писать код правильно, чтобы потом не страдать при отладке в поиске ошибок.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования