[英]cant get correct ip address into the database
我有以下简单代码用于在我的数据库中插入一些失败的登录值,但我有一些问题:
1- ip 地址被保存在数据库中为零,无论我做什么都没有成功(对此很疯狂)。 2-我使用当前时间戳在一个简单的查询中获取日期和时间,现在我使用准备好的语句它不能使用它,我被迫使用 date('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']);
我被迫使用 date('Ymd H:i:s'); 这给出了错误的时间。
您是否尝试过设置date_default_timezone_set
,即:
date_default_timezone_set('America/Los_Angeles');
您不能使用int
来存储包含点和冒号的 var。 将 DB 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
地址
参考:
也可能获得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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.