如何处理带语句的复选框并回显它们

时间:2012-04-26 05:38:10

标签: php mysql html variables checkbox

您好我有以下问题:

我想为搜索引擎创建一个过滤器。我有一些特定搜索词的输入字段和相应的复选框旁边。所以看起来像:

输入字段a:[ _ ____ ]过滤a:开/关:[]

inputfield b:[ _ ____ ]过滤器b:开/关:[]

inputfield c:[ _ ____ ]过滤c:开/关:[]

代码结构是:

首先检查输入字段是否为空并且设置了复选框。如果选中,将在提交后取消选中。反过来说,如果只填写输入字段并取消选中复选框,它也会出错,出现错误并且过滤器无法正常工作。所以我正在为每个过滤器使用一个自己的错误数组,如(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"/>';
}
?>

什么都不满足。这是因为以下问题:

加载页面时,将显示未选中所有复选框。如果我因为没有填充输入而只是因为其中一个过滤器的选中复选框而导致错误,则在提交之后会自动检查所有其他复选框。

所以,如果有人可以帮助我,我真的很感激。非常感谢。

1 个答案:

答案 0 :(得分:1)

也许您可以这样做,方法是在脚本开头为复选框和值定义默认值。然后使用POST的值更改它们(如果设置或不设置)。

<?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 />';
?>