2013-01-24 57 views
1

我有一个复选框的表单。当用户第一次访问该页面时,我希望复选框被“检查”。但是,如果他们取消选中该框然后提交该页面,我希望它保持未选中状态(并且如果他们提交页面并选中,则保持检查状态)。初始默认值记住表单复选框状态

来确定何时已经检查和形式提交,我正在做的:

<input type='checkbox' class='seeAll' name='seeAll' value='true' <?php if ($_POST['seeAll'] == 'true') echo checked; ?>> 

这对于离开框选需要的时候,不过,我将如何去确保它保持的伟大工程如果他们以这种方式提交,他们是否会被取消选中,同时还会检查他们是否重新访问该网页(例如通过重新输入网址)?

谢谢!

+0

如果你希望它永久使用数据库或文件,否则,你可以使用$ _SESSION甚至饼干 – riso

+0

但$ _SESSION变量是行不通的重新检查框,如果他们重新页面通过提交按钮以外的任何方式。它会记住最后一次检查的状态,不管怎么样,对吧? – JToland

+0

这就是为什么我添加了选项将其存储在数据库中,您没有提及它是否是成员的一部分或是否为所有人免费,这取决于您是否知道 – riso

回答

1

我不知道为什么我花了这么长时间才想出这个答案,但经过这样的努力之后,我意识到我可以通过$_POST检查复选框的值,因为我在之前可以通过执行此操作检查用户是否通过提交按钮以外的某种方式到达页面:

<?php if(($_POST['seeAll'] == 'true') || !isset($_POST['submit'])) echo checked; ?> 

如果用户提交表单,比isset($_POST['submit'])将是真实的,因此,如果是这样的话​​是空的,他们显然是用户提交的未经检查的框。如果isset($_POST['submit'])为false,则用户在未提交表单的情况下抵达该页面,我应该选中该复选框作为“默认”。

所以后来我的整个<input>标签如下所示:

<input type='checkbox' class='seeAll' name='seeAll' value='true' <?php if(($_POST['seeAll'] == 'true') || !isset($_POST['submit'])) echo checked; ?>> 

作品就像我所需要的!

+0

您的规格很不明确,或者您的解决方案无法正常工作。如果用户浏览并返回页面,它将“忘记”复选框的状态。 –

+1

也许我的解释不清楚,但那就是我想要的。从上面,'同时也检查他们是否重新访问页面(例如通过重新输入URL)?'所以只要记住状态,如果他们被提交按钮放回到页面上。这就是为什么我最初回答下面的答案。 – JToland

+0

Gotcha,我看到了你想要的和我现在写的不同之处。 –

0

注意::这与OP的问题不同,因为即使用户离开页面(比如www.facebook.com)然后返回页面,它也会记住复选框的值。 OP希望它只记住该页面发布时的复选框的值。

如果你想有一个非永久的方法,你可以使用$ _SESSION:

<?php 
    if (!isset($_SESSION)) { 
     session_start(); 
    } 

    if ($_POST['seeAll'] == 'true' || !isset($_SESSION['seeAll'])) { 
     $_SESSION['seeAll'] = true; 
    } else { 
     $_SESSION['seeAll'] = false; 
    } 
?> 


<form method="POST"> 
    <input type='checkbox' class='seeAll' name='seeAll' value='true' 
     <?php if ($_SESSION['seeAll']) echo 'checked'; ?> 
    /> 
    <input type='submit'/> 
</form> 

见:http://php.net/manual/en/session.examples.basic.php

+0

这将持续与会话一样长。 –

+0

如果用户通过“提交”按钮之外的其他方式重新访问页面,这不会导致默认(选中)不会被设置。就像他们重新输入网址一样,我希望复选框可以回到默认的“已选中”,即使上次提交表单时未选中该复选框。 – JToland

0

一种解决方案是同时使用$_SESSION[""]$_POST[""]。 (见说明和下面的代码

说明

  1. 如果$_SESSION["loadcount"]没有设置,将其设置为0。
  2. 随着每if (isset($_POST["submit"],加+1 $_SESSION["load count"]
  3. 在input type =“checkbox”的“checked”选项中,echo PHP。如果if ($_SESSION["loadcount"] == 0)回声'检查'。 (将复选框设置为初始选中状态。)
  4. 否则,如果(isset($_POST["agree"] echo'checked',则记住用户检查的状态。 (记住用户设定的检查状态。

CODE

<?php 
session_start(); 
?> 
<!DOCTYPE html> 
<html> 
    <body> 
     <?php // session_firstload.php 

      // Check if $_SESSION is not set, set $_SESSION loadcount to 0 
      if (!isset($_SESSION["loadcount"])) 
       $_SESSION["loadcount"] = 0; 

      // When the user submits using POST Method 
      if (isset($_POST["submit"])) 
      { 
       // Increase $_SESSION["loadcount"] by +1 
       $_SESSION["loadcount"] = $_SESSION["loadcount"] + 1; 
      } 

      // Echoing for Debugging/Understanding 
      echo $_SESSION["loadcount"]; 
     ?> 

     <form action="session_firstload.php" method="post"> 
      <input id="agree" type="checkbox" name="agree" 
      <?php 
       // If Check the Checkbox is $_SESSION["loadcount"] == 0 
       // Else 'remember' with (isset($_POST["agree"] 
       if ($_SESSION["loadcount"] == 0) 
         echo "checked"; 
        else 
        { 
         if (isset($_POST["agree"])) 
          echo "checked"; 
        } 
      ?> 
      >I Agree<br> 
      <input type="submit" name="submit"> 
     </form> 
    </body> 
</html> 
+0

一个小细节,关闭你的br标签。 '
' – Bonatti

+0

在HTML中,
标签没有结尾标签说http://www.w3schools.com/tags/tag_br.asp – munster123

+0

恩,请查看:[w3fools.com](http://www.w3fools .com /)为w3schools质量差的证据...然后再次,而'
'标签将正常工作,HTML是一种标记,所以每个标签应该开始和结束。如果一个标签是自包含的,比如'
',''等,标签可以定义预期的结果.....在这种情况下,您是正确的。 br标签是自包含的,但是有一个封闭的br标签会指示一个XHTML文档,这就是我感到困惑的地方。作为参考,[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/br)远远优于w3schools。 – Bonatti