簡體   English   中英

在mysql數據庫中保存IP地址

[英]saving IP address in mysql database

我將IP地址保存到數據庫中時遇到問題

這是我獲取IP的方式:

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();

那是我的數據庫表創建php文件

$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 );

結束,這就是我保存用戶IP的方式

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在數據庫中不存在,則將創建“ Guest1” ... IPAdd“ 127.0.0.1”;

您有2個選擇:

  1. 將IPAdd列的數據類型從Unsigned Int更改為Varchar以將IP保存為字符串格式
  2. 通過調用ip2long將IP轉換為長格式,然后再保存

如另一個人先前所述,由於不建議使用mysql *函數,因此應考慮從mysql *切換到mysqli或PDO_MySQL。

您需要更改IPAdd的數據類型,不能保存127.0.0.1之類的數據或整數字段中的任何IP地址。 不能只保存正整數或負整數. 在這個領域里

像這樣將數據類型更改為varchar

ALTER TABLE `users` CHANGE `IPAdd` `IPAdd` VARCHAR( 20 ) NULL

將ipadd字段更改為(int)並使用$_SERVER['SERVER_ADDR']獲取用戶系統ip地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM