- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
<?php $connection = mysqli_connect ('localhost','root','','userlistdb');
// Проверка, если это общий клиент
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
$ip=$_SERVER['HTTP_CLIENT_IP'];
//Is it a proxy address
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip=$_SERVER['REMOTE_ADDR'];
}
// Значение $ ip в этот момент будет выглядеть примерно так: "192.0.34.166"
$ip = ip2long($ip);
// Теперь $ ip будет выглядеть примерно так: 1073732954
$sql = "INSERT INTO user(ip) VALUES('$ip')";
$dbQuery = mysql_query($sql,$dbLink);
$stmt = $dbh->prepare("INSERT INTO usertbl(ip) VALUES(ip)");
$stmt->bindParam(1, $ip);
$stmt->execute();
?>
выдаёт ошибку:
Примечание : Не определено переменная: DBLink в C: \ XAMPP \ HTDOCS \ офсетные \ testip.php на линии 21
Внимание : mysql_query () ожидает параметр 2 , чтобы быть ресурсом, приведены в нуль C: \ XAMPP \ HTDOCS \ кормили \ testip.php на строка 21
Примечание : неопределенная переменная: dbh в C: \ xampp \ htdocs \ fed \ testip.php в строке 25
Фатальная ошибка : вызов функции-члена prepare () для null в C: \ xampp \ htdocs \ fed \ testip.php на линии 25
$dbQuery = mysql_query($sql,$dbLink);
$stmt = $dbh->prepare("INSERT INTO usertbl(ip) VALUES(ip)");
Кто знает как записать IP из формы и сохранить в базу даных MySQL
Скорее небо упадёт на Землю, чем переведутся дураки, которые так делают.
И всё было бы хорошо, если бы не один момент: любой клиент может спокойно добавить этот заголовок с абсолютно случайными данными. Более того, есть даже расширения, которые в автоматическом режиме на каждый запрос шлют случайный «реальный» IP. Поэтому доверять таким заголовкам (их несколько разных бывает, они не стандартизированы) абсолютно бессмысленно, а иногда и вредно (когда-то давно видел даже SQL-инъекцию, которая возникала из-за того, что анскиллябры не фильтровали содержимое заголовка). Но недалёкие желающие наебать систему и деанонимизировать злобных хакеров продолжают засыпать «SO» вопросами в стиле «How to get user's real IP».
Разумеется, это не касается всяких хитрых конфигураций, когда, к примеру, сайт стоит за «Cloudflare», который гарантированно добавляет настоящий IP, но это уже тонкие детали.
Но я хочу учиться и стать умным!
В принципе, логгировать X-Forwarded-For и ему подобные заголовки имеет смысл, но только для информационных целей — например, для ручного разбирательства в случае чего.
and to beat his ebalo.
Кстати, а что такая прокся делает если ей пришёл запрос, в котором уже есть x-forwarded-for?
Ни за что не догадаетесь. Возвращает false:
https://ideone.com/sMEM79
Интересно, а почему не -42?..
А некоторые опсосы и некоторые мобильные браузеры добавляют заголовок X-MSISDN с номером телефона.
На "Forwarded" есть спецификация:
https://tools.ietf.org/html/rfc7239#section-4
и на "Via":
https://tools.ietf.org/html/rfc7230#section-5.7.1
в отличие от "X-Forwarded-For", на который нет спецификаций, и он стал стандартом де-факто:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For
Просто у них синтаксис сложнее.
Спойлерю ответ:
modx_real_get_client_ip
Есть 14 конкурирующих стандартов.png
Так может это gost напиздел, и это всё правильные способы? Не могут же столько фреймворков ошибаться.
Весь код метода factory я цитировать не буду.
Поиграй с кавычками и пробелами) "INSERT INTO user (ip) VALUES('".$ip."')"
Строки 24-27 у тебя лишние, ты не используешь PDO.
ЗЫ. Найди какую-нибудь книжку, и учи язык нормально, а не копипасть код откуда попало, тогда и вопросов меньше будет.
Подготовленные выражения есть не только в PDO:
https://www.php.net/manual/ru/mysqli-stmt.prepare.php
Но здесь и вправду эти строки лишние, потому что переменная $dbh не инициализирована.
Какой анскилл )))