我正在使用数组来允许可以访问的IP地址,但在使用数据库查询时会得到错误的结果。
while($dProfile = oci_fetch_array($qProfile))
{
$allowedIP[] = array($dProfile['ALLOWED_IP_ADDRESS']);
}
if(in_array($_SERVER['REMOTE_ADDR'], $allowedIP))
{
$ip = 1;
}
else
{
$ip = 0;
}
echo $ip;
结果始终为0,甚至包括列表中的IP地址(192.168.183.28)。
当我print_r($allowedIP)
时,结果为:
Array ( [0] => Array ( [0] => 192.168.183.205, 192.168.183.28 ) [1] => Array ( [0] => 192.168.184.20, 192.168.184.15 ) )
应该得到结果1,因为我的IP地址在数组列表中。
有什么技巧可以做到吗?
答案 0 :(得分:2)
所以看起来$dProfile['ALLOWED_IP_ADDRESS']
包含像'192.168.183.205, 192.168.183.28'
这样的字符串,然后您将其填充到数组中的数组中。 in_array
不会在数组中的字符串中发现字符串。您需要首先制作所有这些单独地址的一个平面数组:
while ($dProfile = oci_fetch_array($qProfile)) {
$ips = array_map('trim', explode(',', $dProfile['ALLOWED_IP_ADDRESS']));
$allowedIP = array_merge($allowedIP, $ips);
}
现在您有一个in_array
可以搜索的IP平面列表。
但是,由于您首先从数据库中提取这些IP,因此您应该进行简单的数据库查询,而不是在PHP中构建和搜索此数组。
答案 1 :(得分:1)
in_array将检查数组的值,在您的情况下,它在数组值中有多个字符串格式的IP地址。
更改
while($dProfile = oci_fetch_array($qProfile))
{
$allowedIP[] = array($dProfile['ALLOWED_IP_ADDRESS']);
}
要
$allowedIP = array();
while($dProfile = oci_fetch_array($qProfile))
{
$allowedIP = array_merge($allowedIP, array_map('trim', explode(',', $dProfile['ALLOWED_IP_ADDRESS'])));
}
答案 2 :(得分:0)
您应该使用以下代码:
while($dProfile = oci_fetch_array($qProfile))
{
$allowedIps = explode(', ', $dProfile['ALLOWED_IP_ADDRESS']);
foreach($allowedIps as $singleAllowedIp)
{
$allowedIP[] = $singleAllowedIp;
}
}
而不是
while($dProfile = oci_fetch_array($qProfile))
{
$allowedIP[] = array($dProfile['ALLOWED_IP_ADDRESS']);
}

答案 3 :(得分:-2)
测试此代码:
while($dProfile = oci_fetch_array($qProfile))
{
$allowedIP[] = array($dProfile['ALLOWED_IP_ADDRESS']);
}
if([[$_SERVER['REMOTE_ADDR']]]==$allowedIP)
{
$ip = 1;
}
else
{
$ip = 0;
}
echo $ip;