2011-01-21 64 views
3

我有一個包含搜索表單的頁面和下面的搜索結果表。在搜索形式中,我有複選框「在這個類別搜索」。我在做什麼,默認情況下檢查:複選框狀態默認爲「已選中」問題

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

複選框代碼:INPUT TYPE = 「複選框」 NAME = 「inthiscat」 <?=$checked?>。 鏈接到結果的下一頁index.php?inthiscat = $ _ GET ['inthiscat']。 所以問題是當我去取消選擇「在這個類別搜索」它仍然檢查當我去結果的下一頁。如何解決它,我做錯了什麼?課程開始當然。

回答

1

首先,你真的需要SESSION變量嗎?如果你想要框檢查當沒有指定GET參數時,你根本不需要SESSIONs。

假設你想保存,以防有人行爲刪除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)指定值以獲取陣列是不是一個好的做法。

2)我假設你正在爲你的FORM提交使用正確的語法。

3)國際海事組織,你可以刪除SESSION變量,因爲你顯式傳遞作爲GET參數在隨後的網址。或者不要在網址中使用GET參數。

+0

問題是我第一次加載頁面時需要「檢查」。然後如果檢查狀態未設置,則必須在下一頁上取消設置。我不知道該怎麼做。如果需要,我可以添加更多的代碼。 – TonyM 2011-01-21 06:34:10

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. 看起來爲獲取數據,然後,如果有,給它分配(可以是'開'或'')給SESSION;
  2. 如果沒有SESSION(也就是說,沒有GET),那麼這是用戶訪問的第一頁,因此檢查;
  3. 如果有inthiscat的SESSION,這意味着它不是第一頁,GET數據已分配給SESSION。所以,如果它是on,它會顯示標記;否則,它不會。