MySQL中的newsletter_ip字段被设置为UNSIGNED INT(10)。我也尝试使用INET_ATON来格式化数据,但我的结果总是看起来像this。当使用PHP ip2long函数进行转换时,IP地址被存储为0
这里是我的处理代码的一部分:
//Retrieve data from user and create variables
$ip_orig = $_SERVER['REMOTE_ADDR'];
$ip = ip2long($ip_orig);
//Place into database
$sql = "INSERT INTO newsletter(newsletter_email, newsletter_ip, newsletter_date, newsletter_time) VALUES('".$email."', '".$ip."', '".$date."', '".$time."')";
我也试过这个片段之前ip2long格式,无济于事:
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'];
}
任何帮助将不胜感激,谢谢!
尝试使用varchar(15)替代IP地址的字符串。 – andrewsi
您[无法信任X-Forwarded-For](http://stackoverflow.com/a/3003233/238978)! –
我相信你可能会发送超出范围的值。使用BIGINT或VARCHAR以字符串形式存储。我也会考虑IPv6地址。 – Kermit