2015-11-23 49 views
1

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

我希望能够创建一个选中值的数组作为条件,直到用户再次更新他的配置。不幸的是,我不能让页面一页一页地保持数组。我也有麻烦创建一个数组传回到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> 

+2

如果有'post'或表单被提交,只保存在'session'中。不要使用空格。每次用户转到该页面时,您的“会话”始终保存。 – roullie

+0

不确定是否要创建一个包含会话创建的php文件并将其包含在所有其他页面上 – davejal

回答

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变量被擦除。为了防止这种情况发生,我们需要检查表单是否已经提交。一个廉价的方式做到这一点是命名提交场:如果形式实际上是

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

现在会增值经销商将只覆盖:

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

而且在foreach之前,你检查它提交。

接下来,你需要改变你的复选框,只能是“检查”,如果他们在实际检测:

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

那么就应该允许的形式与已配置复选框重装,维护你的喜好只要会话保持活跃状态​​,就可以重新提交&新页面。

在此示例中,我将会话变量名称更改为复选框值,因此请记住,如果将其粘贴完毕,则需要在使用会话的任何其他位置进行调整(或调整要使用的代码你的原始varnames)。