2012-12-04 130 views
0

我目前有一個函數可以存儲已經輸入到表單中的查詢。我正在嘗試保存提交表單的用戶的IP地址以及輸入。存儲獲取和存儲IP地址

目前是這樣的功能:

function userIP(){ 
    $ip = $_SERVER['REMOTE_ADDR'];  
    if($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']; 

     $ipis = ip2long($ip); 
     } 
     return $ip; 
    } 
    return false; 
} 

public function __construct($data = array()) { 
    if(isset($data['text'])) $this->text = stripslashes(strip_tags($data['text'])); 
    if(isset($data['ipis'])) $this->ipis = stripslashes(strip_tags($data['ipis'])); 
} 

public function storeFormValues($params) { 
    $this->__construct($params); 
} 


    public function store() { 
    $correct = false; 
     try { 
      $con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
      $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $sql = "INSERT INTO tbl(content, ip) VALUES(:text, :ipis)"; 

      $stmt = $con->prepare($sql); 
      $stmt->bindValue("text", $this->text, PDO::PARAM_STR); 
      $stmt->bindValue("ipis", $this->ipis, PDO::PARAM_STR); 
      $stmt->execute(); 
      return "Added"; 
     }catch(PDOException $e) { 
      return $e->getMessage(); 
     } 
} 

}

但是它目前只存儲已輸入的,只是增加了NULL到數據庫IP「文本」。 IP行的MYSQL被設置爲一個無符號的INT 11. 關於解決這個問題的任何想法?

+0

可能是您需要更改數據類型爲varchar來存儲IP地址 – DeDav

+0

應該不需要,因爲我使用ip2long – JPDP

+0

Ip2long可能會返回負值。猜測第一項措施需要做什麼? – itachi

回答

0

使用字符串將IP存儲在數據庫中

+0

這似乎並不是問題,當試圖回顯Ip它甚至不顯示它。所以就我所知,它甚至沒有抓住IP開始。 – JPDP

1

函數返回long值時出錯。您已將return語句放入elseif條件中。此外,您正在返回實際值$ip值。

function userIP(){ 
$ip = $_SERVER['REMOTE_ADDR']; 
if($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']; 
    } 
    $ipis = ip2long($ip); 
    return $ipis; 
} 
return false; 
} 
0

另一種可能的選擇:

function userIP(){ 
    $ip = $_SERVER['REMOTE_ADDR'];  
    if(!$ip) 
    return false; 
    if(!empty($_SERVER['HTTP_CLIENT_IP'])) 
    $ip = $_SERVER['HTTP_CLIENT_IP']; 
    if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    return sprintf('%u' , ip2long($ip)); 
} 

閱讀PHP Manual on ip2long()後,我發現一些有趣的關於如何處理在某些系統上大的整數。