我在将IP地址保存到DataBase时遇到问题
下面是我获取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();这是我的DB表创建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 );End这是我保存用户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在DataBase中不存在,则会像“Guest1”一样创建帐号...IPAdd "127.0.0.1";
发布于 2014-10-27 17:57:32
您有两个选择:
将IP转换为长格式,然后再进行保存
正如另一个人所说,您应该考虑从mysql*切换到mysqli或PDO_MySQL,因为mysql*函数已被弃用。
发布于 2014-10-27 17:51:26
您需要更改IPAdd的数据类型,您不能在整型字段中保存像127.0.0.1或任何IP地址这样的数据。在此字段中,只能保存没有.的正整数值或负整数值
将数据类型更改为varchar,如下所示
ALTER TABLE `users` CHANGE `IPAdd` `IPAdd` VARCHAR( 20 ) NULL发布于 2014-10-27 17:56:42
将ipadd字段更改为(int),并使用$_SERVER['SERVER_ADDR']获取用户系统ip地址。
https://stackoverflow.com/questions/26584772
复制相似问题