【问题标题】:PHP conditional statement is not workingPHP条件语句不起作用
【发布时间】:2017-02-17 21:20:27
【问题描述】:

我有一个语句可以检查页面的 url 并相应地标记页面,但它仅在我的 if 语句有一个检查选项时才有效。

$url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];

<?php if (strpos($url, 'events/eventname')!= false) { ?>
    ~markup~
<? } ?>

如果我修改它以检查两个可能的 url...

<?php if (strpos($url, 'events/eventname')!= false) { ?>
    ~markup~
<? }else if (strpos($url, 'events/othereventname')!= false) { ?>
    ~markup~
<? } ?>

...页面无法加载。我一定遗漏了一些明显的东西——有人能告诉我这个函数有什么问题吗?

*edit: 因为它被要求,我已经包含了 $url 变量和更具体的 url 示例

【问题讨论】:

  • URL 是在哪里定义的?还有,那些“urlhere”或“otherurlher”是什么?这些信息可能有助于开发人员理解您的代码。
  • 试试 !== 而不是 !=。关于 PHP 文档:警告此函数可能返回 Boolean FALSE,但也可能返回计算结果为 FALSE 的非布尔值。请阅读有关布尔值的部分以获取更多信息。使用 === 运算符测试此函数的返回值。 (php.net/manual/en/function.strpos.php)
  • @Ad5001 Gameur codeur autre URL 在代码的其他地方定义 - 我没有包含它或实际的 url(我用 urlhere 和 otherurlhere 代替),因为它与问题没有直接关系.
  • 我同意 $url'urlhere' 的一些更现实的例子在这里可能会有所帮助。我不一定同意它与问题没有直接关系。
  • 我认为您似乎可能对 strpos 的论点有所反感,但没有真正看到是什么,这只是一个猜测。

标签: php html drupal-7


【解决方案1】:

当搜索子字符串位于查询字符串的开头时,strpos 返回 0。您可以将 != 替换为 !== 以使其工作 - 否则 php 在内部将 false 转换为零,这会导致比较结果不正确。

例如:

<?php
var_dump(strpos('aaa', 'a'));
echo var_dump(strpos('aaa', 'a') === false);
echo var_dump(strpos('aaa', 'a') == false);

【讨论】:

    【解决方案2】:

    尝试使用!==比较,以防字符串位于位置0。

    另一个语法问题是else if,而你应该使用elseif

    尝试将短 php 标签 &lt;? 更改为完整的 &lt;?php

    【讨论】:

    • 感谢 Chris Cynarski 的回答,但这些更正都没有解决问题。
    • 尝试使用完整的php标签&lt;?php而不是短标签&lt;?
    • 如果没有启用短标签,第一个也不会起作用。
    【解决方案3】:

    您可以获得请求 uri,而不是使用 strpos(),它是域名之后的任何内容(即:www.example.com/foo/bar 会给您/foo/bar)。

    $url = $_SERVER['REQUEST_URI'];
    
    if($url == "/foo/bar") {
        // markup
    } elseif($url == "/bar/foo") {
        // markup
    } else {
        // markup
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-08
      • 2011-12-04
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多