1

以前のスクリプトから投稿された場​​合、vars $ state、$ cat、および$subを使用してスクリプトを実行するisset/get配列があります。

私の質問:どのようにして、私の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

私の理解が正しければ、データベースに既に存在する状態のみを有効な文字列にしようとしているのですか?

これを行う 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 に答える