2011-01-05 95 views
0

我有一個函數,根據從我的主頁中的表單提交的內容設置和取消設置$ _SESSION變量。HTML複選框的PHP值

功能if語句:

$_SESSION['search'] = true; 
if($_POST['searchtv']){ 
    $_SESSION['searchtv'] = true; 
} else { 
    unset($_SESSION['searchtv']); 
} 
if($_POST['searchmovie']){ 
    $_SESSION['searchmovie'] = true; 
} else { 
    unset($_SESSION['searchmovie']); 
} 

的searchtv和searchmovie $ _POST變量通過下面的複選框設置:

<input type="checkbox" name="searchmovie" value="movie" <? echo isset($_SESSION['searchmovie']) ? 'checked' : ''; ?>"/> 

然而,檢查值似乎總是假的,並顯示 '' 這樣沒有「選中」被設置爲在框中顯示勾號。

我知道$ _SESSION變量被正確設置,因爲在同一個文件中,我有另一個IF語句(下圖),工作100%。

if(isset($_SESSION['searchtv'])){ 
    $database->searchTV($_GET['show'], $session->uid); 
} 
           if(isset($_SESSION['searchmovie'])){ 
    $database->searchMovies($_GET['show'], $session->uid); 
} 
           if(!isset($_SESSION['searchtv']) && !isset($_SESSION['searchmovie'])){ 
    $database->searchTV($_GET['show'], $session->uid); 
    $database->searchMovies($_GET['show'], $session->uid); 
} 

如果我只勾選複選框searchtv只運行searchTV功能等..所以我知道它被設置和工作..只是不能得到反饋的複選框說是它被選中當選擇搜索按鈕時。

回答

3

@medoix:嘗試改變這種

<input type="checkbox" name="searchmovie" value="movie" <? echo isset($_SESSION['searchmovie']) ? 'checked' : ''; ?>"/> 

這個

<input type="checkbox" name="searchmovie" value="movie" <?php if (isset($_SESSION['searchmovie'])) { echo 'checked="checked" '; } ?>/> 
+0

是的,你需要'checked ='checked''或'checked ='''。現在你只是回聲'檢查'。 – Ben 2011-01-05 05:23:53

+1

作品一種享受!非常感謝。令人驚訝的是,這樣一個小東西能不能讓我心動! – medoix 2011-01-05 05:34:00

0

您意識到檢查底部附近的$_SESSION['searchtv'] && $_SESSION['searchmovie']的代碼部分都是!isset。只有在兩者都沒有被檢查的情況下,它纔會運行,而不是如果它們是。

+0

這是一個好點的,我沒有設計它,那是因爲默認情況下,兩個箱子都沒有檢查。然而,隨着你提出這個問題,它提出瞭如果他們選擇兩個盒子的選項。但是如果兩者都被檢查過,那麼每個函數都會相互依賴地運行。 – medoix 2011-01-05 05:35:04

+0

似乎有點奇怪。真的應該是一個if/else if/else if/else結構。如果兩者都設置好了,那麼先做兩個,否則如果電視機已經設置,請運行電視機,否則如果設置了電影,請運行電影,否則請選擇一種搜索方式。然後在默認情況下進行檢查,這與在當前方法中未選中它們完全相同。當然,你不得不將它們設置爲false,而不是在未選中框時將它們設置爲false,然後檢查它們是否爲true或false,而不是setset。 – Phoenix 2011-01-05 06:14:08