php复选框保留页面之间的值

时间:2015-11-23 02:34:09

标签: php mysql arrays checkbox

我有一个表单页面调用一个函数,它从mysql数据库中提取2个随机名称(由php函数pairim()调用)。我想创建一组复选框,这些复选框将创建可用于限制mysql拉动的条件。然后,这些条件需要继续,直到用户更改配置(下面的更新按钮)。

我希望创建一个选中值数组,以用作条件,直到用户再次更新其配置。不幸的是,我无法让数组在页面到页面时保持不变。我也无法创建一个数组以传回pairim()。原谅我的无知,无论如何要完成我想做的事情?

select_checkbox.php:

<?php 
session_start();

$_SESSION['G'] = isset($_POST['pG']) ? 1 : 0 ;
$_SESSION['D'] = isset($_POST['pD']) ? 1 : 0 ;
$_SESSION['W'] = isset($_POST['pW']) ? 1 : 0 ;
$_SESSION['C'] = isset($_POST['pC']) ? 1 : 0 ;

?>

<button class="btn btn-success" type="button" data-toggle="collapse" data-    target="#collapselimit" aria-expanded="false" aria-controls="collapselimit">
      Limit Names
    </button>
<div class="collapse container-fluid" id="collapselimit">

<form role="form" method="post" action=<?php pairsim() ; ?>>
<div class="panel panel-default">
    <div class="panel-body">


        <p><b>Position Limited:</b><br></p>
        <!--create array with checked values to include to mysql function-->
            <label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pG' checked>Goalies</label>
            <label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pD' checked>Defensemen</label>
            <label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pW' checked>Wingers</label>
            <label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pC' checked>Centers</label>

        <div>
        <!--locks in checkbox configuratons-->
        <input type="submit" class="btn btn-success btn-lg" value="Update"/>
        <!--script below to check/uncheck all-->
        <input type="button" class="btn btn-default btn-lg" id="CheckAll" value="Check All" />
        <input type="button" class="btn btn-default btn-lg" id="UncheckAll" value="Clear All" />
        </div>  
    </form>
        </div>
</div>

1 个答案:

答案 0 :(得分:0)

我在这里看到一些错误,我会尝试按程序顺序进行。

您的复选框都使用相同的名称,因此生成的post var将为$_POST['positionsel'];。所以你现有的会话检查总是错误的。

BTW输出var_dump($_POST['positionsel']);,检查的内容如下:

array(4) {
    [0]=>
    string(2) "pG"
    [1]=>
    string(2) "pD"
    [2]=>
    string(2) "pW"
    [3]=>
    string(2) "pC"
}

修正:

session_start();
$checkBoxValues = array('pG', 'pD', 'pW', 'pC');

foreach($checkBoxValues as $check)
{
    if(in_array($check, $_POST['positionsel']))
    {
        $_SESSION[$check] = true;
    } else {
        $_SESSION[$check] = false;
    }
}

这将检查$ _POST变量的复选框值,如果它存在,则意味着它已被选中。

这会导致如果您不提交表单,则不会处理任何后置值,导致$ _SESSION变量被擦除。为了防止这种情况,我们需要检查表单是否实际上已提交。一种便宜的方法是命名提交字段:

<input name="submitted" type="submit" class="btn btn-success btn-lg" value="Update"/>

在foreach之前,请检查它:

if(isset($_POST['submitted']))
{
    $checkBoxValues = array('pG', 'pD', 'pW', 'pC');


    foreach($checkBoxValues as $check)
    {
        if(in_array($check, $_POST['positionsel']))
        {
            $_SESSION[$check] = true;
        } else {
            $_SESSION[$check] = false;
        }
    }
}

现在只有在实际提交表单时才会覆盖会话变量。

接下来,您需要更改复选框,以便只检查它们是否已“检查”:

<label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pG' <?PHP if($_SESSION['pG']) { echo "checked"; }?> >Goalies</label>
<label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pD' <?PHP if($_SESSION['pD']) { echo "checked"; }?> >Defensemen</label>
<label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pW' <?PHP if($_SESSION['pW']) { echo "checked"; }?> >Wingers</label>
<label class='checkbox-inline'><input type='checkbox' name='positionsel[]' value='pC' <?PHP if($_SESSION['pC']) { echo "checked"; }?> >Centers</label>

然后应该允许使用已配置的复选框重新加载表单,在重新提交和&amp;只要会话保持活动状态,就会加载新页面。

在此示例中,我将会话变量名称更改为复选框值,因此请将其粘贴,因为您需要在使用会话的任何位置调整它(或调整我的代码以使用您的原始的varnames)。