【问题标题】:checkbox status "checked" by default problem默认情况下,复选框状态“已选中”问题
【发布时间】:2011-06-12 23:04:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: php


    【解决方案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) 国际海事组织,您可以删除 SESSION 变量,因为您在后续 url 中作为 GET 参数显式传递。或者不要在 url 中使用 GET 参数。

    【讨论】:

    • 关键是我在第一次加载页面时需要“检查”。然后如果检查状态未设置,则必须在下一页取消设置。我不知道该怎么做。如果需要,我可以添加更多代码。
    • JP19,您不会以这种方式将新数据存储在会话中。另外,为什么要为 $_GET 赋值?如$_GET['inthiscat'] = $_SESSION['inthiscat'];
    • 为 GET 编辑了答案。就 SESSION 变量而言,我假设 OP 只想跟踪首次访问,如果未指定 GET 参数,则默认行为。
    • 还有一件事,1,2,3... 带有结果和链接的页面数量看起来像“index.php?inthiscat=on”或“index.php?inthiscat=”和此链接是在页面加载时形成的,如果我取消设置检查状态,它们仍然具有 inthiscat=on。复选框状态更改时如何更改链接?
    • 你是如何“取消选中状态”的?如果您正确使用$checked 变量,链接将自动更改。尝试刷新页面?
    【解决方案2】:

    问题是:当您取消选中复选框并转到下一页时,$_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:&lt;INPUT type="checkbox" name="inthiscat" checked="&lt;?=$checked?&gt;" value="on" /&gt;

    所以它的作用是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 2011-10-27
      相关资源
      最近更新 更多