首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法将正确的ip地址输入数据库

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

Stack Overflow用户
提问于 2016-04-26 16:30:53
回答 2查看 66关注 0票数 1

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

1- ip地址被保存在数据库中为零,没有成功,无论我做什么(在这方面疯狂)。2-我在一个简单的查询中使用了当前时间戳来获取日期和时间,既然我使用了准备好的语句--它不能处理它,我就不得不使用日期(‘Y:I:s’);这会给出错误的时间。

我的代码是:

代码语言:javascript
运行
复制
<?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),它没有签名。

任何建议都会有帮助,谢谢

更新:

,我做了下面的工作,但还是没有运气:

我改变了:

代码语言:javascript
运行
复制
 $ip_address = $_SERVER['REMOTE_ADDR']; 

对此:

代码语言:javascript
运行
复制
 $ip_address = ip2long($_SERVER['REMOTE_ADDR']);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-26 16:35:56

我被迫使用日期(‘Y:I:s’),它给出了错误的时间。

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

代码语言:javascript
运行
复制
date_default_timezone_set('America/Los_Angeles');

不能使用int存储包含点、冒号的变量。将DB ip_address行更改为

代码语言:javascript
运行
复制
int(11)

代码语言:javascript
运行
复制
varchar(15); //ipv4
代码语言:javascript
运行
复制
ALTER TABLE `sometable`
MODIFY COLUMN `ip_address` varchar(15);

代码语言:javascript
运行
复制
varchar(45); //ipv6
代码语言:javascript
运行
复制
ALTER TABLE `sometable`
MODIFY COLUMN `ip_address` varchar(45);

如果您想存储ipv6地址

参考文献:

Maximum length of the textual representation of an IPv6 address?

票数 2
EN

Stack Overflow用户

发布于 2016-04-26 16:44:55

还可能得到IP(ish):

代码语言:javascript
运行
复制
(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;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36870701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档