我有一个带有搜索表单的页面,下面有搜索结果的表格。在搜索表单中,我有复选框“在此类别中搜索”。我正在做的是默认检查它:
if(!isset($_SESSION['inthiscat'])){
$_SESSION['inthiscat'] = 'on' ;
$checked = 'checked';
}
$_GET['inthiscat'] = $_SESSION['inthiscat'];
复选框代码:INPUT type =“checkbox”name =“inthiscat”<?=$checked?>
。
链接到结果的下一页index.php?inthiscat = $ _ GET ['inthiscat']。
所以问题是当我取消选中“在此类别中搜索”时,当我转到下一页的结果时,它仍然会被检查。如何解决它以及我做错了什么?会议的开始当然。
答案 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" />
它的作用是:
on
,它会显示标记;否则,它没有。