从SQL数据库检索数据并插入PHP数组

时间:2019-07-11 19:59:18

标签: php mysql

我希望允许Web应用程序的用户通过将IP地址列入白名单来保护自己的帐户。

我已经在相关数据库中创建了一个表,其中记录了以下内容:

IPID (primary key) | owner | IP_Address

目前,您可以将IP添加到数据库中,并且使用会话数据自动添加所有者。

现在,在保护基于IP的页面方面,我想使用类似以下内容:

$whitelist = array('111.111.111.111', '222.222.222.222');
if (in_array($_SERVER['REMOTE_ADDR'], $whitelist)) {
//Action for allowed IP Addresses
} else {
//Action for all other IP Addresses
echo 'You are not authorized here.'; 
echo "<br />IP Address: ".$_SERVER['REMOTE_ADDR'];
exit;
}

在上述情况下,数组是硬编码的,但是我显然想使用SQL数据库中的数据来填充数组。因此,为了获取数据,我可以使用类似的东西:

$sql = "SELECT IP_Address FROM ITWhitelist WHERE owner=$userid";
$result = $conn->query($sql);
    if ($result->num_rows > 0) {
    // output data of each row
        while($row = $result->fetch_assoc()) {
        SafeIP = $row["IP_Address"];
    }

作为一个新手,我不使用如何将上述方法与SQL查询结合起来并将数据插入到数组中。我熟悉遍历SQL输出以创建HTML的知识,但不熟悉如何将SQL数据动态添加到数组中。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:-1)

在访问数据库时,您应该搜索地址,这样就无需构建数组。

$allowed = false;
$sqldata = array(":user"=>$userid,":ipaddress"=>$_SERVER['REMOTE_ADDR']);
$sql = "SELECT IP_Address FROM ITWhitelist WHERE owner = :user && IP_Address = :ipaddress";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        if($row["IP_Address"] == $_SERVER['REMOTE_ADDR']){
            $allowed = true;
            break;
        }
    }
}

if ($allowed)) {
    //Action for allowed IP Addresses
} else {
    //Action for all other IP Addresses
    echo 'You are not authorized here.'; 
    echo "<br />IP Address: ".$_SERVER['REMOTE_ADDR'];
    exit;
}

如@tadman所建议,这比构建阵列和测试ip更好。

请注意,以上示例使用的是预准备语句,您可能需要针对特定​​用途对其进行调整,但我建议始终使用预准备语句。