复选框状态默认问题“已选中”

时间:2011-01-21 06:18:45

标签: php

我有一个带有搜索表单的页面,下面有搜索结果的表格。在搜索表单中,我有复选框“在此类别中搜索”。我正在做的是默认检查它:

if(!isset($_SESSION['inthiscat'])){
    $_SESSION['inthiscat'] = 'on' ;
    $checked = 'checked';
}
$_GET['inthiscat'] = $_SESSION['inthiscat'];

复选框代码:INPUT type =“checkbox”name =“inthiscat”<?=$checked?>。 链接到结果的下一页index.php?inthiscat = $ _ GET ['inthiscat']。 所以问题是当我取消选中“在此类别中搜索”时,当我转到下一页的结果时,它仍然会被检查。如何解决它以及我做错了什么?会议的开始当然。

2 个答案:

答案 0 :(得分:1)

首先,你真的需要SESSION变量吗?如果您希望在未指定GET参数时对选中框,则根本不需要SESSION。

假设您想保留行为以防有人删除GET参数:

<?php
session_start();
//......
//......
$checked='checked';
if(isset($_REQUEST['inthiscat'])) {
   // Form input and url GET parameters take precedence
   if($_REQUEST['inthiscat'] != 'checked') { $checked = ''; };
} else if(isset($_SESSION['inthiscat'])) { 
   // Next, use session variable if it exists
   if($_SESSION['inthiscat'] != 'checked') { $checked = ''; };
};
$_SESSION['inthiscat']=$checked;
?>

注意:

1)为GET数组赋值不是一个好习惯。

2)我假设您使用的是正确的FORM提交语法。

3)IMO,你可以删除SESSION变量,因为你在后续的URL中明确地传递了GET参数。或者不要在网址中使用GET参数。

答案 1 :(得分:0)

问题是:当您取消选中该复选框并转到下一页时,$_SESSION['inthiscat']仍然会被取消设置 - 您在哪里更改了它?

以下是代码:

if (isset($_GET['inthiscat'])) {
    $_SESSION['inthiscat'] = $_GET['inthiscat'];
}
if (!isset($_SESSION['inthiscat'])) {
    $checked = 'checked';
} else {
    if ($_SESSION['inthiscat'] == 'on') {
       $checked = 'checked';
    } else {
       $cheked = '';
    }
}

假设这个HTML:<INPUT type="checkbox" name="inthiscat" checked="<?=$checked?>" value="on" />

它的作用是:

  1. 查找GET数据,如果有,则将其分配给(可以是'on'或'')到SESSION;
  2. 如果没有SESSION(也就是说没有GET),那么这是用户访问的那种第一页,所以检查了;
  3. 如果inthiscat有一个SESSION,则表示它不是第一页,GET数据已分配给SESSION。所以,如果它是on,它会显示标记;否则,它没有。