gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:31:11 25 4
gpt4 key购买 nike

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

我希望创建一个检查值数组以用作条件,直到用户再次更新他的配置。不幸的是,我无法让数组在逐页浏览时保持不变。我也无法创建一个数组传回 pairsim()。原谅我的无知,有什么方法可以完成我想做的事情吗?

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>

最佳答案

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

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

顺便说一句,输出 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 变量,如果存在则表示它已被选中。

这将导致如果您不提交表单,则不会处理任何 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;
}
}
}

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

接下来,您需要将您的复选框更改为仅在它们实际上被选中时才被“选中”:

<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>

这应该允许表单重新加载已配置的复选框,只要 session 保持事件状态,就可以在重新提交和新页面加载时保留您的首选项。

在这个例子中,我将你的 session 变量名称更改为复选框值,所以如果你将它粘贴过来,请记住这一点,因为你需要在你使用 session 的任何其他地方调整它(或调整我的代码以使用你的原始变量名)。

关于php复选框保留页面之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com