2011-01-05 96 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