не могу получить правильный IP-адрес в базу данных

1

У меня есть следующий простой код для вставки некоторых неудачных значений входа в мою базу данных, но у меня есть некоторые проблемы:

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']);
  • 3
    ip_address row in the database is int(11) да, это неправильно, вам нужно сохранить его как VARCHAR(39)
  • 0
    просто опечатка, исправил, пожалуйста, уберите вниз голосование
Показать ещё 5 комментариев
Теги:
ip
pdo

2 ответа

2
Лучший ответ

Я вынужден использовать дату ("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


Рекомендации:

Максимальная длина текстового представления адреса IPv6?

  • 1
    почему отрицание?
  • 0
    Я собирался спросить то же самое ...
Показать ещё 9 комментариев
-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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню