无法将正确的IP地址输入数据库

时间:2016-04-26 16:30:53

标签: php sql pdo ip

我有以下简单的代码,用于在我的数据库中插入一些失败的登录值,但我遇到了一些问题:

1- ip地址被保存在数据库中,因为无论我做什么都没有成功(对此疯狂)。 2-我使用当前时间戳来获取简单查询中的日期和时间,现在我使用预处理语句它不能使用它,我被迫使用日期(' Ymd H:i:s' );这给出了错误的时间。

我的代码是:

<?php
    $username = $_SESSION['Name'];
    $ip_address = $_SERVER['REMOTE_ADDR'];
    $attempted = date('Y-m-d H:i:s');
    $query = "INSERT INTO failed_logins (username, ip_address, attempted) VALUES(?, ?, ?)"; 
    $failed = $conn->prepare($query);
    $failed->bindParam(1, $username);
    $failed->bindParam(2, $ip_address);
    $failed->bindParam(3, $attempted);
    $failed->execute();
?>

数据库中的我的ip_address行是int(11),它是无符号的。

任何建议都会有所帮助

更新

我做了以下但仍然没有运气:

我改变了:

 $ip_address = $_SERVER['REMOTE_ADDR']; 

到此:

 $ip_address = ip2long($_SERVER['REMOTE_ADDR']);

2 个答案:

答案 0 :(得分:2)

  

我被迫使用日期('Y-m-d H:i:s');这给出了错误   时间。

您是否尝试过设置date_default_timezone_set,即:

date_default_timezone_set('America/Los_Angeles');

您不能使用int来存储包含 ans 冒号的var。 从

更改数据库ip_address
int(11)

varchar(15); //ipv4

ALTER TABLE `sometable`
MODIFY COLUMN `ip_address` varchar(15);

varchar(45); //ipv6

ALTER TABLE `sometable`
MODIFY COLUMN `ip_address` varchar(45);

如果您想存储ipv6地址

参考文献:

Maximum length of the textual representation of an IPv6 address?

答案 1 :(得分:-1)

也许可以获得IP(ish):

(string)$ip_address = getRealIpAddr();

function getRealIpAddr() {
    (string)$ip='';
    if (array_key_exists('HTTP_CLIENT_IP', $_SERVER) && !empty($_SERVER['HTTP_CLIENT_IP'])) {   //check ip from share internet
      $ip .= filter_input(INPUT_SERVER, 'HTTP_CLIENT_IP');
    } elseif (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER) && !empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {   //to check ip is pass from proxy
      $ip .= filter_input(INPUT_SERVER, 'HTTP_X_FORWARDED_FOR');
    } else {
      $ip .= filter_input(INPUT_SERVER, 'REMOTE_ADDR');
    }
    return $ip;
}