2010-03-14 50 views
1

下面是我的示例脚本:PHP if语句 - 选择两个不同的get变量?

<li><a <?php if ($_GET['page']=='photos' && $_GET['view']!=="projects"||!=="forsale") { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos\""); } ?>>Photos</a></li> 
<li><a <?php if ($_GET['view']=='projects') { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos&view=projects\""); } ?>>Projects</a></li> 
<li><a <?php if ($_GET['view']=='forsale') { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos&view=forsale\""); } ?>>For Sale</a></li> 

我想PHP来呼应的 “href =” #”类= “活动”只有当它是不是两页:

?页=照片&视图=可供出售

?页=照片&视图=项目

我也试过这样做,它不工作:

<li><a <?php if ($_GET['page']=='photos' && ($_GET['view']!=='projects' || $_GET['view']!=='forsale')) { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos\""); } ?>>Photos</a></li> 

回答

2

除了问题cletus指出你也有一个问题precedence of the operators。 & &比||具有更高的优先级。因此

if (
    $_GET['page']=='photos' 
    && $_GET['view']!=="projects" 
    || $_GET['view']!=="forsale" 
) 

相当于

if (
    ($_GET['page']=='photos' && $_GET['view']!=="projects") 
    || $_GET['view']!=="forsale" 
) 

但你显然希望

if (
    $_GET['page']=='photos' 
    && ($_GET['view']!=="projects" || $_GET['view']!=="forsale") 
) 

也许不是两个备选方案,但如果你有更多的选择,你可能要考虑使用! in_array()。例如

if (
    'photos'=$_GET['page'] 
    && !in_array($_GET['view'], array("projects","forsale")) 
) 
+0

in_array工作得很好,谢谢! – arsoneffect 2010-03-14 04:14:01

3

你不能做:

if ($var !== 'a' || !== 'b') ... 

你要做的:

if ($var !== 'a' || $var !== 'b') ... 

如果你想清理代码,我会建议:

function active_view($content, $url, $view) { 
    if ($_GET['view'] == $view) { 
    return link($content, '#', 'active'); 
    } else { 
    return link($content, $url); 
    } 
} 

function active_page_view() { 
    $args = func_get_args(); 
    $content = array_shift($args); 
    $url = array_shift($args); 
    $page = array_shift($args); 
    if ($_GET['page'] == $page && !in_array($view, $args)) { 
    return link($content, '#', 'active'); 
    } else { 
    return link($content, $url); 
    } 
} 

function link($content, $href, $class) { 
    $ret = '<a href="' . $href . '"'; 
    if ($class) { 
    $ret .= ' class="' . $class . '"'; 
    } 
    $ret .= '>' . $content . '</a>'; 
    return $ret; 
} 

,然后你的代码变成:

<li><?php echo active_page_view('Photos', '/?page=photos', 'photos', 'projects', 'forsale'); ?></li> 
<li><?php echo active_view('Projects', '/?page=photos&view=projects', 'projects'); ?></li> 
<li><?php echo active_view('For Sale', '/?page=photos&view=forsale', 'project'); ?></li> 

以上是说明性的,而不是最终的,完整。我试图解决的一点是,即使不使用模板库(例如Smarty),您也希望习惯使用某种模板机制。你很少想要将复杂的逻辑嵌入到基本上是视图的东西中。如果您使用函数库(或对象)来创建标记,它会提供很多控制来转义特殊字符,自动放入属性,验证您要放入的内容等。

在这个例子中,你可能想要一个表示你的站点导航的数据结构,你可以在其中输入当前页面的内容,并且在动态构建导航并自动操纵链接时将其与所有条目进行比较。

0

<?php $ view = $ _GET ['view'];
如果($ _ GET [ '页'] == '照片' & &($视图== '项目' || $视图== '可供出售'))
{
回声“<李> < A HREF = "#" class = " active " > Photos </a > </li >';
}
其他
{
回声 '<李> < A HREF = " /页=照片" >照片</A > < /李>?';
}? >

0
if($_GET[ 'page' ] != "photos" && $_GET[ 'view' ] != "forsale") { 
    ... 
} 
else if($_GET[ 'page' ] != "photos" && $_GET[ 'view' ] != "projects") { 
    ... 
}