2013-01-24 84 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