0

こんにちは、次の問題があります。

検索エンジン用のフィルターを作成したいと思います。特定の検索用語とそれぞれのチェックボックスの横にいくつかの入力フィールドがあります。次のようになります。

入力フィールド a: [ _ ____ ] a のフィルター: オン/オフ: [ ]

入力フィールド b: [ _ ____ ] b のフィルター: オン/オフ: [ ]

入力フィールド c: [ _ ____ ] c: のフィルター on/off: [ ]

そのコード構造は次のとおりです。

まず、入力フィールドが空で、チェックボックスがオンに設定されているかどうかを確認します。チェックされている場合は、送信後にチェックが外されます。逆に、入力フィールドだけが入力され、チェックボックスがチェックされていない場合も、エラーが発生し、フィルターが機能しないというエラーが発生します。だから私は各フィルターに次のような独自のエラー配列を使用しています(the name and value of the first checkbox is name="filter_a" value="1"):

...
$checkbox_filter_a = $db->real_escape_string(htmlentities(trim($_POST['filter_a'])));
...
$filter_a = (!empty($checkbox_filter_a)) ? 1 : 0;
...
$errors_a = array();
if ($filter_a == 1){
    if (empty($input_a)){
        $errors_a[] = 'the filter needs some input';
    }
}

if (!empty($input_a)){
    if ($filter_a == 0){
        $errors_a[] = 'filter is not activated';
    }
}

エラーがなく、両方の基準が満たされている場合、フィルターはオンまたはオフのいずれかになります。そのため、論理的な背後にあるのは、ページをロードするときにチェックボックスをオフにする必要があるということです。フィルタリングする基準を考慮した後、オンになっています。

以下の条件でチェック済みまたは未チェックのステータスを表示するには、送信後にチェック済みかどうかを確認します。そのため、入力フィールドの後のチェックボックスの部分である各フィルター(それぞれのcheckbox_filter_b、...)にこのコードがあります:

<?php
if (checkbox_filter_a == 0 ) {
     echo '<input type="checkbox" name="checkbox_filter_a" value="1" checked/>';
}else {
     echo '<input type="checkbox" name="checkbox_filter_a" value="1"/>';
}
?>

まったく満たさないもの。これは、次の問題によるものです。

ページをロードすると、すべてのチェックボックスがオフになっていることが表示されます。入力が入力されていないか、これらのフィルターのいずれかのチェックボックスをオンにしただけでエラーを発生させようとすると、送信後に他のすべてのチェックボックスが自動的にオンになります。

私を助けてくれる人がいれば、本当に感謝しています。どうもありがとう。

4

1 に答える 1

1

おそらく、スクリプトの開始時にチェック ボックスと値のデフォルト値を定義することにより、この方法でそれを行うことができます。次に、設定されているかどうかにかかわらず、POSTed の値でそれらを変更します。

<?php
//Setup Variable Defaults, if POST dont change them then there no complicated ifelse's
$filter_a=null;
$checkbox_filter_a='<input type="checkbox" name="checkbox_filter_a" value="1"/>';
$filter_b=null;
$checkbox_filter_b='<input type="checkbox" name="checkbox_filter_b" value="1"/>';
$filter_c=null;
$checkbox_filter_c='<input type="checkbox" name="checkbox_filter_c" value="1"/>';

//Check for post
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    //If the check box is not checked checkbox_filter_a will fail this part
    // so $filter_a will still be null 
    if(isset($_POST['filter_a']) && isset($_POST['checkbox_filter_a'])){
        $filter_a = trim($_POST['filter_a']);
        $checkbox_filter_a ='<input type="checkbox" name="checkbox_filter_a" value="1" checked/>';
    }

    if(isset($_POST['filter_b']) && isset($_POST['checkbox_filter_b'])){
        $filter_b = trim($_POST['filter_b']);
        $checkbox_filter_b = '<input type="checkbox" name="checkbox_filter_b" value="1" checked/>';
    }

    if(isset($_POST['filter_c']) && isset($_POST['checkbox_filter_c'])){
        $filter_c = trim($_POST['filter_c']);
        $checkbox_filter_c = '<input type="checkbox" name="checkbox_filter_c" value="1" checked/>';
    }

}

echo <<<FORM
 <form method="POST" action="">
   <p>Inputfield a: <input type="text" name="filter_a" value="$filter_a" size="20"> filter for a: on/off:$checkbox_filter_a</p>
   <p>Inputfield b: <input type="text" name="filter_b" value="$filter_b" size="20"> filter for b: on/off:$checkbox_filter_b</p>
   <p>Inputfield c: <input type="text" name="filter_c" value="$filter_c" size="20"> filter for c: on/off:$checkbox_filter_c</p>
   <p><input type="submit" value="Submit"></p>
 </form>
FORM;

//now here all you have to do is see if these values are not null and build your query
echo $filter_a.'<br />';
echo $filter_b.'<br />';
echo $filter_c.'<br />';
?>
于 2012-04-26T06:07:50.793 に答える