让我们说我想创建一个IP黑名单系统,如果他们的IP存在于数据库**中,它就会杀死该页面。
这是我目前所拥有的:
文件:index.php
get(K)
数据库:
#### Firewall ####
$data = $conn->query("SELECT * FROM firewall");
if (in_array($_SERVER['REMOTE_ADDR'], $data->fetchAll())) {
die("Error!");
}
#### Firewall ####
问题是,它似乎根本不起作用。 任何帮助表示赞赏。
**:我使用 PDO 连接数据库
谢谢, CrAzYz_(Zypeth)
答案 0 :(得分:0)
将其更改为:
#### Firewall ####
$data = $conn->query("SELECT `ip` FROM firewall");
if (in_array($_SERVER['REMOTE_ADDR'], $data->fetchAll(PDO::FETCH_COLUMN, 0))) {
die("Error!");
}
#### Firewall ####
它使用FETCH_COLUMN,因此您只能获得单个列而不是数组。
答案 1 :(得分:0)
来自manual page:
PDOStatement :: fetchAll()返回包含所有内容的数组 结果集中的剩余行。数组将每行表示为 列值数组或具有属性的对象 对应于每个列名。
这意味着$data->fetchAll()
不是一维数组,而是记录数组(二维数组)或对象数组。
所以,你应该这样做:
// Collect IP addresses in a separate array first
$ips = [];
foreach($data->fetchAll() as $record){
$ips[] = $record->ip; // or, $record['ip']
}
// Test the remote address against the 1-dimensional array
if (in_array($_SERVER['REMOTE_ADDR'], $ips)) {
die("Error!");
}
要确定返回数据的格式,您可以执行以下操作:
print_r($data->fetchAll());
答案 2 :(得分:0)
js/main.js