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

Php 如何处理带有语句的复选框并回显它们,php,mysql,html,variables,checkbox,Php,Mysql,Html,Variables,Checkbox,您好,我有以下问题: 我想为搜索引擎创建一个过滤器。我有一些特定搜索词的输入字段,旁边有相应的复选框。这看起来像: 输入字段a:[\uUuuuuuuuuuuuuuuuuuuuuuu]a的过滤器:开/关:[] 输入字段b:[\Uuuuuuuuuuuuuuuuuuuuuu]b的过滤器:开/关:[] 输入字段c:[\uuuuuuuuuuuuuuu]c的过滤器:开/关:[] 其代码结构为: 首先,检查inputfield是否为空,复选框是否设置为选中。如果选中,则在提交后将取消选中。另一方面,如果只是填

您好,我有以下问题:

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

输入字段a:[\uUuuuuuuuuuuuuuuuuuuuuuu]a的过滤器:开/关:[]

输入字段b:[\Uuuuuuuuuuuuuuuuuuuuuu]b的过滤器:开/关:[]

输入字段c:[\uuuuuuuuuuuuuuu]c的过滤器:开/关:[]

其代码结构为:

首先,检查inputfield是否为空,复选框是否设置为选中。如果选中,则在提交后将取消选中。另一方面,如果只是填写了inputfield,并且复选框未选中,那么它也会出错,即存在错误,并且过滤器无法工作。因此,我为每个过滤器使用自己的错误数组,如
(第一个复选框的名称和值为name=“filter\u a”value=“1”)

如果没有错误且两个条件都满足,则过滤器要么打开,要么不打开。 因此,背后的逻辑是,当加载页面时,必须取消选中复选框。在考虑要筛选的条件后,它将启用

若要在以下条件下显示已选中或未选中的状态,应在提交后选中或不选中。因此,我为每个过滤器(各自的复选框\过滤器\ 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"/>';
}
?>

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

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


所以如果有人能帮我,我会非常感激。非常感谢。

也许您可以这样做,在脚本开始时为复选框和值定义默认值。然后使用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 />';
?>

您好,谢谢您的回答,我刚刚测试了一下,但在回显复选框时遇到了问题。它们不会被显示。@bonny我不知道你的意思,看看它在这里工作:你好,对不起。我今天有点胖。好吧,我发现了错误。html中仍然有旧代码。另一件我有问题的事情是为每个设置错误数组:我使用:if($input\u a==null)&(isset($\u POST['checkbox\u filter\u a']){$errors\u 1[]=“filter need input”;}否则if($input\u a!==null)&(isset($\u POST['checkbox\u filter\u a'])){$errors\u 1[]=“filter was not activated”}
<?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 />';
?>