首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql数据库中保存IP地址

在mysql数据库中保存IP地址
EN

Stack Overflow用户
提问于 2014-10-27 17:48:07
回答 3查看 1.3K关注 0票数 0

我在将IP地址保存到DataBase时遇到问题

下面是我获取ip的方法:

代码语言:javascript
复制
function getUserIP()
{
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }

    return $ip;
}


$user_ip = getUserIP();

这是我的DB表创建php文件

代码语言:javascript
复制
$sql =  "CREATE TABLE users (".
            "ID         INT     NOT NULL    AUTO_INCREMENT,".
            "Guest          VARCHAR(60)     COLLATE utf16_general_ci,".
                        "IPAdd          INT UNSIGNED    NULL            DEFAULT NULL,".
            "PRIMARY KEY(ID));";

    $retval = mysql_query( $sql, $conn );

End这是我保存用户IP的方法

代码语言:javascript
复制
require("DBConnection.php");
require("getIP.php");

echo $user_ip."<br>";
if ($user_ip === '::1'){
    $user_ip = '127.0.0.1';
}
$user_ip = ip2long ($user_ip);
echo $user_ip."<br>";
//Проверява ме за вече съществъващ гост
$selectData  = mysql_query("SELECT * FROM users"); 
if (!$selectData ) 
{
        die('Could not get data: ' . mysql_error());
}
else {
    $i = 1; // index za poreden nomer na potrebitelq.
    $guest = 'Guest'.$i;
    while ($row = mysql_fetch_array($selectData) )
    {
        if($row[1] == $guest && $row[2] != $user_ip )
        {
            $i++;
            $guest = 'Guest'.$i;
        }     
    }
    $sql = "INSERT INTO `cssgendb`.`users` (`ID`, `Guest`, 'IPAdd') 
            VALUES ('0', '$guest', '$user_ip');";
    $_SESSION['is_logged'] = true;
    $_SESSION['Name'] = $guest;
}
$retval = mysql_query( $sql, $conn );
if(! $retval )
    {
      die('Could not enter data: ' . mysql_error());
    }
    echo "Session Start successfully\n";    
mysql_close($conn);

我的想法是获取用户的IP并保存它。如果用户IP在DataBase中不存在,则会像“Guest1”一样创建帐号...IPAdd "127.0.0.1";

EN

回答 3

Stack Overflow用户

发布于 2014-10-27 17:57:32

您有两个选择:

  1. 将IPAdd列的数据类型从Unsigned Int更改为Varchar以字符串格式保存ip
  2. 通过调用ip2long

将IP转换为长格式,然后再进行保存

正如另一个人所说,您应该考虑从mysql*切换到mysqli或PDO_MySQL,因为mysql*函数已被弃用。

票数 1
EN

Stack Overflow用户

发布于 2014-10-27 17:51:26

您需要更改IPAdd的数据类型,您不能在整型字段中保存像127.0.0.1或任何IP地址这样的数据。在此字段中,只能保存没有.的正整数值或负整数值

将数据类型更改为varchar,如下所示

代码语言:javascript
复制
ALTER TABLE `users` CHANGE `IPAdd` `IPAdd` VARCHAR( 20 ) NULL
票数 0
EN

Stack Overflow用户

发布于 2014-10-27 17:56:42

将ipadd字段更改为(int),并使用$_SERVER['SERVER_ADDR']获取用户系统ip地址。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26584772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档