对单个变量使用多个复选框?

时间:2014-08-26 06:10:46

标签: php

我在此尝试实现的是让用户能够选择页面将显示的一个或所有类别。用户将检查3个复选框的任意组合,并将计算变量并将其保存到数据库中。然后从数据库中检索这些值,并相应地回显检查复选框。 发生的事情是当检查多于1个复选框时,仅保存后一个值,例如如果选中A和B,则仅保存B,或者检查A,B和C时,仅保存C.如果只保存1个复选框就可以了。

PHP

<?php
    if(isset($_POST['submit'])){
        if ($_POST['catA'] == "a" && $_POST['catB'] == "b" && $_POST['catC'] == "c"){
            $pageCat = "abc";
        }

        if ($_POST['catA'] == "a" && $_POST['catB'] == "b"){
            $pageCat = "ab";
        }

        if ($_POST['catA'] == "a" && $_POST['catC'] == "c"){
            $pageCat = "ac";
        }

        if ($_POST['catB'] == "b" && $_POST['catC'] == "c"){
            $pageCat = "bc";
        }
            if ($_POST['catA'] == "a"){
        $pageCat = "a";
        }

        if ($_POST['catB'] == "b"){
            $pageCat = "b";
        }

        if ($_POST['catC'] == "c"){
            $pageCat = "c";
        }
    }
?>

5 个答案:

答案 0 :(得分:1)

一个简单(不完美)的解决方案:

$pageCat = (isset($_POST['catA']) ? $_POST['catA'] : '')
    . (isset($_POST['catB']) ? $_POST['catB'] : '')
    . (isset($_POST['catC']) ? $_POST['catC'] : '');

答案 1 :(得分:0)

要拥有相同变量的多个条目,请将其命名为array:

<input type="checkbox" value="ACat" name="Category[A]"/>
<input type="checkbox" value="BCat" name="Category[B]"/>
<input type="checkbox" value="CCat" name="Category[C]"/>

你的POST将是这样的:

array(
    "Category" => array(
        "A" => "ACat"
        "B" => "BCat"
        "C" => "CCat"
    )
)

答案 2 :(得分:0)

例如,在这种情况下,您可以使用和数组来获取多个值

<!DOCTYPE html>
<html>
<body>

<form action="">
<input type="checkbox" name="vehicle[]" value="Bike">I have a bike<br>
<input type="checkbox" name="vehicle[]" value="Car">I have a car 
</form>

</body>
</html>

因此,如果在上述情况下用户选择了这两个值,那么您将在帖子中获得以下内容

 <?php 
     echo "<pre>";print_r($_POST['vehicle']);
    ?>

它会给你输出

阵列(     [0] =&gt;自行车,     [1] =&gt;汽车 )

然后你可以按照你想要的方式处理它

答案 3 :(得分:0)

要克服这个问题,你可以使用if / elseif,或者你可以在下面发布一些内容,因为如果&amp; b检查它是否在ifs列表中,并替换为true。

A&amp;&amp;乙

if ($_POST['catA'] == "a" && $_POST['catB'] == "b" && $_POST['catC'] == "c") FALSE
if ($_POST['catA'] == "a" && $_POST['catB'] == "b") TRUE $pageCat = 'ab'
if ($_POST['catA'] == "a" && $_POST['catC'] == "c") FALSE $pageCat = 'ab'
if ($_POST['catB'] == "b" && $_POST['catC'] == "c") FALSE $pageCat = 'ab'
if ($_POST['catA'] == "a") TRUE $pageCat = 'a'
if ($_POST['catB'] == "b") TRUE $pageCat = 'b'
if ($_POST['catC'] == "c") FALSE $pageCat = 'b'
Final value of pageCat = 'b'

尝试:

if (isset($_POST['submit'])) {
    $pageCat = '';
    if($_POST['catA'] === "a"){
        $pageCat .= "a";
    }
    if($_POST['catB'] === "b"){
        $pageCat .= "b";
    }
    if($_POST['catC'] === "c"){
        $pageCat .= "c";
    }
}

答案 4 :(得分:0)

可悲的是,我无法看到代码的形式部分 请注意:请记住为复选框设置不同的名称!

这是一个简短的例子:

// 4 Checkboxes with diffrent names //
echo '<form name="form1" method="post" action="test_scroll.php">
        A<input type="checkbox" name="checkbox1" value="a">
        B<input type="checkbox" name="checkbox2" value="b">
        C<input type="checkbox" name="checkbox3" value="c">
        D<input type="checkbox" name="checkbox4" value="d">
        <br><br>
        <input type="submit" name="submit" value="submit"/><br><br><br>';

// Loop throught the post-params and append the values of the checkboxes //
    array_pop($_POST);
    foreach($_POST as $entry){
        $values .= $entry;
    }
// here comes the result //
    echo $values;

array_pop只删除数组中最后一个“submit”的条目。因此,复选框的值将保留。

如果提交了复选框A和B,结果将只是“ab”。此示例仅适用于纯复选框表单。如果有更多值,则必须在使用此循环方法之前将其弹出。

问候。