【问题标题】:If else statement returning both instead of one?if else 语句返回两个而不是一个?
【发布时间】:2013-10-04 15:34:11
【问题描述】:

这是我的第一个 PHP if 语句,如果我犯了一个愚蠢的错误,请多多包涵!

我正在运行 pmWiki,并且有两个用于组名称的变量。 $Group 是不带空格的组名(例如 EasyCatalog),$Groupspace 是带空格的组名(例如 Easy Catalog)。

我想检查 $Groupspaced == "Easy Catalog",如果为真则返回 $Group 变量,否则返回 $Groupspaced

这是我的代码:

            <p class="grouptitle">
                <?php if ($Groupspaced == "Easy Catalog") : ?>
                    <a href='{$ScriptUrl}/{$Group}' class="pagegroup">{$Group}</a>
                <?php else : ?>
                    <a href='{$ScriptUrl}/{$Group}' class="pagegroup">{$Groupspaced}</a>
                <?php endif; ?>
            </p>

我遇到的问题是它返回的不是一个链接。

【问题讨论】:

  • 鉴于您发布的代码,这是不可能的。 没有办法“搞砸”if 语句以便评估两个分支。 PHP 从根本上不可能做到这一点,你不可能犯的错误会产生这种行为。你误解了你的错误。
  • 嗯,看来您正在使用 Smarty 或类似的东西。在这种情况下,您应该使用他们的 if else 语句来代替 clean php
  • 我知道这基本上是不可能的,这就是为什么它让我如此困惑。一定和pmWiki有关。

标签: php html if-statement pmwiki


【解决方案1】:

您似乎正在使用 Smarty:使用它的语法 for if else:

{if $Groupspaced eq 'Easy Catalog'}
    <a href='{$ScriptUrl}/{$Group}' class="pagegroup">{$Group}</a>
{else}
    <a href='{$ScriptUrl}/{$Group}' class="pagegroup">{$Groupspaced}</a>
{/if}

您可以在http://www.smarty.net/docsv2/en/language.function.if.tpl阅读更多内容

我发现这不是聪明人: 这是 pmWiki if else 语法:

(:if cond param:) body (:else:) body (:ifend:)

在你的情况下,代码应该是:

(:if equal "{$Groupspaced}" "Easy Catalog":)
     <a href='{$ScriptUrl}/{$Group}' class="pagegroup">{$Group}</a>
(:else:)
    <a href='{$ScriptUrl}/{$Group}' class="pagegroup">{$Group}</a>
(:ifend:)

我从这里得到这个:http://www.pmwiki.org/wiki/Cookbook/ConditionalMarkupSamples

【讨论】:

  • 嗨,它似乎不起作用。我在网络浏览器中得到以下信息:imgur.com/Pbrz0wc
  • 模板引擎“TinyButStrong”有什么意义吗?
  • 可能不够聪明。除非您不提供其余代码(例如控制器),否则我什么也说不出来
  • 我用上面的 pmWiki 语法进行了尝试,但是它仍然将 if 语句放在网页上,并在浏览器中检查元素时将其显示在 html 中。有什么东西阻止它执行吗?我已将代码放在上面的 DIV 标记中,我也尝试将其放入单独的 PHP 文件中并包含它,但是在浏览器中检查时包含似乎被注释掉了?如果有帮助,我已将主 pmwiki.php 粘贴到 pastebin 中:pastebin.com/aU1Q548z
  • 我已经设法解决了,条件语句只能在 Wiki 页面上使用,而不能在模板中使用。我必须创建一个“Site.AllGroupHeader”,然后设置 $GroupHeaderFmt 变量。 pmwiki.org/wiki/Cookbook/AllGroupHeader 谢谢大家的帮助。
【解决方案2】:

您的代码对我来说似乎是正确的,但我个人不喜欢使用这样的 if 语句,您可能想尝试一下:

 <p class="grouptitle">
                <?php if ($Groupspaced == "Easy Catalog") { ?>
                    <a href='{$ScriptUrl}/{$Group}' class="pagegroup">{$Group}</a>
                <?php } else { ?>
                    <a href='{$ScriptUrl}/{$Group}' class="pagegroup">{$Groupspaced}</a>
                <?php } ?>
            </p>

希望能成功

【讨论】:

  • 如果他使用 Smarty 也会产生同样的问题
【解决方案3】:
<p class="grouptitle">
                <?php 
                    if ($Groupspaced == "Easy Catalog")
                    {
                        echo " <a href='{$ScriptUrl}/{$Group}' class='pagegroup'>{$Group}</a>";
                    }
                    else{
                        echo " <a href='{$ScriptUrl}/{$Group}' class='pagegroup'>{$Groupspaced}</a>";
                    }
                   ?>
</p>

【讨论】:

    【解决方案4】:

    试试这个以确保你的理论是错误的,然后解决你的问题:

    <p class="grouptitle">
        <?php 
        $Groupspaced = "Easy Catalog2";
        if ($Groupspaced == "Easy Catalog") : ?>
        <a href='blablabla1' class="pagegroup">Group 1</a>
        <?php else : ?>
        <a href='blablabla2' class="pagegroup">Group spaced 2</a>
        <?php endif; ?>
    </p>
    

    现在你使用 smarty 模板,这是正确的smarty if/else syntax

    <p class="grouptitle">
    
        {if $Groupspaced eq "Easy Catalog"}
        <a href='{$ScriptUrl}/{$Group}' class="pagegroup">Group 1</a>
        {else}
        <a href='{$ScriptUrl}/{$Group}' class="pagegroup">Group spaced 2</a>
        {/if}
    </p>
    

    【讨论】:

      最近更新 更多