1

我有一个 isset/get 数组,如果从以前的脚本发布,则使用变量 $state、$cat 和 $sub 执行脚本

我的问题:如何只允许我的 mysql 数据库中的 isset($_GET 条目显示并对不在我的数据库中的所有其他条目抛出错误???

以下是运行良好的现有脚本的一部分,但我已将其作为示例显示,以尝试了解如何忽略不在我的数据库中的字符串。当前允许传递任何字符串的位置。

    if
    index.php?state=Washington 
        is changed to
    index.php?state=Hempville

该脚本仍然通过 Hempville 作为我最后一页中的新实例。

我不是一个完整的 n3wb,所以感谢您的帮助。

例子

$self = mysql_escape_string($_SERVER['PHP_SELF']);
$state = mysql_escape_string($_GET['state']);
$cat = mysql_escape_string($_GET['cat']);
$sub = mysql_escape_string($_GET['sub']);

并且,isset/_GET 例程是:

if (isset($_GET['state'], $_GET['cat'], $_GET['sub'])) {
echo "<h3>$state</h3>";

// Breadcrumb 
echo "<a href=\"./\">HOME</a> >> <a href=\"index.php?state=$state\">$state</a> >> <a href=\"#\">$cat</a> >> <a href=\"index3.php?cat=$catup&sub=$sub&state=$state\">$sub</a>";
4

2 回答 2

1

如果我理解正确,您试图只允许数据库中已经存在的状态为有效字符串?

您可以做到这一点的一种方法是对状态进行查找 (SELECT) 以确保它在数据库中。

示例:(伪)

SELECT count(*) FROM table WHERE state='Washington';
if (count > 0) {
    // washington is a valid input
    ...
}
于 2012-12-10T21:43:59.427 回答
0

您需要针对您的数据集进行验证。您可以通过多种方式执行此操作:

例如,设置一个具有可接受值的会话变量:

 if(!isset($_SESSION["acceptable_states"])) {  
    $q = "select distinct(state) from states_table";
    $r = mysql_query($q);
    while($row = mysql_fetch_row($r)) {
        $_SESSION["acceptable_states"][] = $row[0];
    }
}

然后对于 $_GET["state"] 你会做:

if(in_array($_GET["state"], $_SESSION["acceptable_states"])) {
    //display page or whatever here
} else {
    echo 'No Such State';
}

然后对每个变量执行此操作。

于 2012-12-10T21:50:31.493 回答