我有一个按钮,按下该按钮时,用户可以查看目录。目前,我尚未从用户那里收集任何信息。我只收集他们下载的目录。我想更改此设置以收集其IP地址以插入到我的数据库中。
我要做的就是在PHP文件中像这样创建一个变量:
$ip = $_SERVER["REMOTE_ADDR"];
然后将其添加到我的PDO语句中以插入数据库吗?
我已经读到许多建议也建议检查$_SERVER["HTTP_X_FORWARDED_FOR"]
。如何检查两者并将其分配给一个变量?
我正确地做到了吗?
AJAX
$('.downloadButton').on('click', function (event) {
$.ajax({
url: 'downloadCatalogSend.php',
type: 'POST',
data: {
catalog_name: catalog_name,
button_triggered: button_triggered
}
});
});
PHP
$ip = $_SERVER["REMOTE_ADDR"];
try {
$con = getConfig('pdo');
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$catalog_download_insert = "INSERT INTO catalog_download_now
(catalog_name, button_triggered, date_sent, $ip)
VALUES(?, ?, NOW(), ?)
";
$catalog_download_stmt = $con->prepare($catalog_download_insert);
$catalog_download_stmt->execute(array($catalog_name, $button_triggered, $ip));
$hasError = false;
echo $hasError;
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
答案 0 :(得分:1)
使用空合并运算符:
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"] ?? $_SERVER["REMOTE_ADDR"];
如果已设置,则首选HTTP_X_FORWARDED_FOR(如果请求来自代理,则为客户端IP),否则返回REMOTE_ADDR(请求来自的实际IP。)
注意事项:客户端可以轻松伪造HTTP_X_FORWARDED_FOR。
另外请注意,你有这个:
$catalog_download_insert = "INSERT INTO catalog_download_now
(catalog_name, button_triggered, date_sent, $ip)
VALUES(?, ?, NOW(), ?)
";
从$ip
中删除该美元符号-应该是字段名,而不是您要存储在其中的值。