【问题标题】:Keep checkbox checked after form submit表单提交后保持复选框选中
【发布时间】:2015-01-22 23:51:41
【问题描述】:

我有一个页面,我将 sql 结果显示为表格。我有它,以便默认检查所有选项。但是,当用户取消选中某些位置并提交表单时,他/她将不知道他们正在过滤哪些位置,因为仍然会选中所有复选框。我怎样才能使它在提交表单后只有被选中的复选框保留其值? 谢谢

到目前为止,这是我的页面:

   <?php 

   $start=_GET['start'];
   $end=_GET['end'];

   if(empty($start)){
      $start=date("Ym");
    }
  if(empty($end)){
    $end=date("Ym");
 }


 $places=array();
if(!empty($_GET['cities'])){
    foreach($_GET['cities'] as $loc){
  array_push($places,$loc);
  }
}else{
   $places=('CHI','DET','LA','NYC','DALLAS','SPR','PHI');
}

?>

//html
<form method='GET'>
  START:<input type='text' name='start' value= '<?$start?>'>
   END: <input type='text' name='end' value='<?$end?>'>
 <input type='checkbox' name='cities[]' value='CHI' checked>CHICAGO
 <input type='checkbox' name='cities[]' value='DET' checked>DETROIT
 <input type='checkbox' name='cities[]' value='LA' checked>LAS ANGELES
 <input type='checkbox' name='cities[]' value='NYC' checked>NEW YORK
 <input type='checkbox' name='cities[]' value='DALLAS' checked>DALLAS
 <input type='checkbox' name='cities[]' value='SPR' checked>SPRINGFIELD
 <input type='checkbox' name='cities[]' value='PHI' checked>PHILIDELPHIA
 <input type='submit' value='Filter'>
 </form>

 <?
 $SQL="SELECT NAME,
     ID,
     PHONE,
     EMAIL,
     EVENT,
     LOCATION
 FROM SHOPPERS
 WHERE LOCATION IN ('".implode("', '", $places)."')
 AND EVENT BETWEEN '{$start}' and '{$end}'
 AND ID BETWEEN '25687' AND '28050'
  ";

   //and then fetch array to print out results...
  .....
  ?>

【问题讨论】:

  • 我希望在 ajax 表单提交的帮助下解决您的问题

标签: php html forms checkbox


【解决方案1】:

与其将“checked”属性硬编码到每个&lt;input type="checkbox"&gt; 字段中,不如使用PHP 来确定与每个字段关联的GET 变量是否已传递给脚本。在这种情况下,您希望将 checked 属性附加到您的 &lt;input&gt; 字段。您可以通过在字段内使用三元运算符来完成此操作,如下所示:

<input type='checkbox' name='cities[]' value='CHI' <?= (in_array('CHI', $places)) ? 'checked' : ''; ?> >CHICAGO
<input type='checkbox' name='cities[]' value='DET' <?= (in_array('DET', $places)) ? 'checked' : ''; ?> >DETROIT
<input type='checkbox' name='cities[]' value='LA' <?= (in_array('LA', $places)) ? 'checked' : ''; ?> >LAS ANGELES
<input type='checkbox' name='cities[]' value='NYC' <?= (in_array('NYC', $places)) ? 'checked' : ''; ?> >NEW YORK
<input type='checkbox' name='cities[]' value='DALLAS' <?= (in_array('DALLAS', $places)) ? 'checked' : ''; ?> >DALLAS
<input type='checkbox' name='cities[]' value='SPR' <?= (in_array('SPR', $places)) ? 'checked' : ''; ?> >SPRINGFIELD
<input type='checkbox' name='cities[]' value='PHI' <?= (in_array('PHI', $places)) ? 'checked' : ''; ?> >PHILIDELPHIA

【讨论】:

  • 当我这样做时,它一直给我一个错误,说意外';'
  • 对不起,我在三元运算符的第一个参数周围缺少一个右括号。我现在更新了代码;希望它应该工作。
  • 谢谢!起初它给了我一个错误,因为数组应该列为第二个参数而不是第一个,但是当我修复它时它可以工作:)
【解决方案2】:

您可以发送在 GET 请求中选中复选框的参数, 并在您的页面中查看 例如

if ($_GET['param1']==1) // checked
{
?>
<input type='checkbox' name='cities[]' value='CHI' checked>CHICAGO
<?
else
?>
<input type='checkbox' name='cities[]' value='CHI' >CHICAGO
?>

【讨论】:

    【解决方案3】:
    <?php
    $citiesGroup = array();
    $citiesGroup['CHI'] = 'CHICAGO';
    $citiesGroup['DET'] = 'DETROIT';
    $citiesGroup['LA'] = 'LAS ANGELES';
    $citiesGroup['NYC'] = 'NEW YORK';
    $citiesGroup['DALLAS'] = 'DALLAS';
    $citiesGroup['SPR'] = 'SPRINGFIELD';
    $citiesGroup['PHI'] = 'PHILIDELPHIA';
    
    $citiesChecked = array();
    if (!empty($_GET['cities'])) {
        foreach ($_GET['cities'] as $cityCode) {
            $citiesChecked[] = $cityCode;       
        }
    }
    else {
        foreach ($citiesGroup as $key => $value) {
            $citiesChecked[] = $cityCode;       
        }
    }
    ?>
    <?php
    foreach ($citiesGroup as $cityId => $cityName) {
        $chekced = in_array($cityId, $citiesChecked) ? 'checked="checked"' : '';
    ?>
    <input type='checkbox' name='cities[]' value='<?php echo $cityId;?>' <?php echo $chekced;?>><?php echo $cityName;?>
    <?php
    }
    ?>
    

    获取数组中所有选中的 HTML 并循环遍历它。

    上面是工作代码。

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多