Как записать ip в базу?

Столбец в mysql в формате text.

Получаю ip вот так
function get_ip() {
    if (!empty($_SERVER['HTTP_CLIENT_IP']))
    {
        $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
    {
        $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
        $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}


Пишу в базу так
$ip = get_ip();
$sql = "INSERT INTO cz ( `userip` ) VALUES
         ('$ip') ";
$result = mysql_query($sql) or die(mysql_error());
mysql_close($connect);


В базу записываются первые цифры (до точки)

Как исправить?
  • Вопрос задан
  • 4603 просмотра
Решения вопроса 1
@Apologiz
Разработчик
Необходимо преобразовать IP в integer или string.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
disc
@disc
веб-разработчик
Используйте при сохранении функцию INET_ATON(), при селекте - обратную функцию INET_NTOA()
Поле userip в этом случае можно сделать INT
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
функцию get_ip() выкини, используй вместо нее $_SERVER['REMOTE_ADDR']
подробнее: phpfaq.ru/ip
Ответ написан
Комментировать
какова длинна столбца userip таблицы cz?
я полагаю, что именно столько символов и пишется, либо столбец типа INT
увеличьте размер столбца БД
Ответ написан
Denormalization
@Denormalization
Так как тут речь идет о PHP, То я предпочитаю использовать функции: ip2long и long2ip. (ссылки не вставляются, можно легко найти на PHP.NET)

Одна из причин: функции: INET_ATON, INET_NTOA есть только в Mysql, и не существуют в Postgres/Sqlite.

PS.
Так же следует учесть, что все эти функции работают только с IPv4. Для IPv6 нужно использовать INET6_ATON, INET6_NTOA
Ответ написан
Комментировать
swipeshot
@swipeshot
Учусь на ошибках.
А можно сделать по-другому.
<?php

$h=fopen("file.txt","at");
fwrite($h,$_SERVER['REMOTE_ADDR']."-".$_SERVER['QUERY_STRING']."\r\n");
fclose($h);

?>


В file.txt записываются IP
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы