我有一个表单页面调用一个函数,它从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>
答案 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)。