У меня есть следующий простой код для вставки некоторых неудачных значений входа в мою базу данных, но у меня есть некоторые проблемы:
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']);
Я вынужден использовать дату ("Ymd H: i: s"); который выдает неправильное время.
Пробовали ли вы установить date_default_timezone_set
, то есть:
date_default_timezone_set('America/Los_Angeles');
Вы не можете использовать int
для хранения var, содержащего точки cols. Измените строку 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;
}
ip_address row in the database is int(11)
да, это неправильно, вам нужно сохранить его какVARCHAR(39)