0

次のような検索フォームがあるとします。

<form action="<?php $_PHP_SELF ?>" method="GET">
Some filter:
<select name="filter">
<option value="">Any value</option>
<option value="1">value is 1</option>
etc...
</select>
<input type="submit" value="Search">
</form>

インデックスページは次のようになります。

<?php 
if($_GET['filter']){

$sql = 'SELECT * FROM table WHERE value=' . $_GET['filter'];
/* prepare, execute blah blah blah etc etc etc */

include 'results.php';
exit();
}
include 'searchform.php';
?>

フィルターが設定されている場合、これは完全にうまく機能します。しかし、そうでない場合は、すべての結果を表示したいのですが、代わりに検索フォームにページを保持します。それを(論理的に)それに変更するとif($_GET['filiter'] or $_GET['filter'] == ""){、すべての結果がフィルタリングされず、検索フォームが無視されます。解決策はありますか?

注:<input type="hidden" name="hidden" value="true">を使用してフィルターをチェックする代わりに、and の ような非表示の入力タイプを設定できることはわかっていif($_GET['hidden'] == 'true'){ますが、URL に表示されるので、それは望ましくありません。また、フィルターが表示されないため、単に使用したくありませんPOST。また、検索フォームに戻るのではなく、URL のフィルターを変更したい場合に使用したいと思います。

注2 PDOを使用して準備と実行を行いますが、それは問題とは関係がないため、提供していません

4

7 に答える 7

1

Steven Liao のソリューションはあなたにぴったりです。はい、クエリで $_GET['filter'] をエスケープして、SQL インジェクションを処理します。お気に入り

$condition = isset($_GET['filter']) ? 'WHERE value='.mysql_real_escape_string($_GET['filter']) : ''; 
于 2013-09-17T06:24:34.163 に答える
1
<?php 
if(isset($_GET['filter'])){

$sql = 'SELECT * FROM table';
if ($_GET['filter'] != "") { $sql .= ' WHERE value=' . $_GET['filter'];
/* prepare, execute blah blah blah etc etc etc */

include 'results.php';
exit();
}
include 'searchform.php';
?>
于 2013-09-17T06:18:56.197 に答える
0
<?php 
$sql = 'SELECT * FROM table';
if($_GET['filter']!="")
$sql.=' WHERE value=' . $_GET['filter'];

// prepare, execute blah blah blah etc etc etc

include 'results.php';
exit();
}
include 'searchform.php';
?>
于 2013-09-17T06:18:42.150 に答える