2014-11-25 139 views
0

我有一个页面,我将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... 
    ..... 
    ?> 
+0

我希望在ajax表单提交的帮助下,你将解决你的问题 – Affan 2014-11-25 04:40:22

回答

3

而不是硬编码的“选中”属性到每个<input type="checkbox">字段,你应该使用PHP,以确定是否与相关的GET变量每个字段都被传递给脚本。在这种情况下,您想要将checked属性附加到您的<input>字段。您可以通过使用三元操作符右侧的领域内做到这一点,因为这样的:

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

当我这样做,它不断给我一个错误,说意外的';' – user3266259 2014-12-02 16:19:13

+0

对不起,我错过了三元运算符第一个参数的右括号。我现在更新了代码;希望它应该工作。 – 2014-12-02 16:34:34

+0

谢谢!它起初给我一个错误,因为数组应该被列为第二个参数而不是第一个,但是当我修复它时,它会起作用:) – user3266259 2014-12-05 14:53:50

1

您可以发送该复选框在GET请求, 检查参数,并检查它在你的页面 如

if ($_GET['param1']==1) // checked 
{ 
?> 
<input type='checkbox' name='cities[]' value='CHI' checked>CHICAGO 
<? 
else 
?> 
<input type='checkbox' name='cities[]' value='CHI' >CHICAGO 
?> 
0
<?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 
} 
?> 

获取数组中的所有复选框并将其循环。

以上是工作代码。