【问题标题】:Multiple if statements with GET not outputting correctly in PHP with XPath使用 XPath 在 PHP 中使用 GET 的多个 if 语句无法正确输出
【发布时间】:2020-04-28 11:07:44
【问题描述】:

我正在尝试获取两位作者编辑或合着书籍的总次数。 (它们是由用户使用复选框选择的,所以我使用 GET 来查看复选框是否被选中)。

我从 'a's' (mj) xml 文档中交叉引用了作者 'a' (mj) 和 'b' (ms),其中包含他们所有的发布信息。

目前我有这个:

if ($_GET['author'] == 'mj55'){

                $getMj = new DOMDocument();
                $getMj->load("Margret-Jane.xml");
                $mjxpath = new DOMXpath($getMj);

                $mjAuth = $mjxpath->query("////author[@id = 'mj55']")->length;
                $mjEdit = $mjxpath->query("////editor[@id = 'mj55']")->length;
                $mjResult = ($mjAuth + $mjEdit);




                if ($_GET['author'] == 'ms10' ) {

                    $mjmsA = $mjxpath->query("////author[@id = 'ms10']")->length;
                    $mjmsE = $mjxpath->query("////editor[@id = 'ms10']")->length;
                    $mjmsTotal = ($mjmsA + $mjmsE);
                    echo $mjmsTotal;
                }
            }

如果我将 echo $mjResult 放在第一个 if 语句的末尾,我会得到正确的输出。但我根本没有从 echo $mjmsTotal 得到任何输出

【问题讨论】:

  • 第二个if 应该在第一个if 内吗?如果$_GET['author']'mj55',那么第二个if 怎么可能是真的?它永远不会被击中。
  • 我如何才能检查这两个条件?

标签: php xml xpath


【解决方案1】:

您使用了嵌套的 if,这就是为什么您只得到第一个 if.. 的结果的原因。尝试使用彼此完全独立的 if 语句。这是一个例子-

$getMj = new DOMDocument();
$getMj->load("Margret-Jane.xml");
$mjxpath = new DOMXpath($getMj);
if ($_GET['author'] == 'mj55'){
                $mjAuth = $mjxpath->query("////author[@id = 'mj55']")->length;
                $mjEdit = $mjxpath->query("////editor[@id = 'mj55']")->length;
                $mjResult = ($mjAuth + $mjEdit);
            }
 if ($_GET['author'] == 'ms10' ) {
                    $mjmsA = $mjxpath->query("////author[@id = 'ms10']")->length;
                    $mjmsE = $mjxpath->query("////editor[@id = 'ms10']")->length;
                    $mjmsTotal = ($mjmsA + $mjmsE);
                    echo $mjmsTotal;
                }

【讨论】:

  • 如果你只进入第二个if,所有的DOM内容都不会被设置,因为那只是在第一个if中完成的。
  • @NigelRen ops 我没有仔细检查...我重新编辑了我的答案。现在检查一下 ;-)
【解决方案2】:

您可以将其简化为一种情况,这样就不必对所有不同的作者/编辑进行硬编码。

首先检查是否设置了作者,然后在 XPath 表达式中包含这个值...

if ( !empty($_GET['author'])) {
    $getMj = new DOMDocument();
    $getMj->load("Margret-Jane.xml");
    $mjxpath = new DOMXpath($getMj);

    $mjAuth = $mjxpath->query("//author[@id = '{$_GET['author']}']")->length;
    $mjEdit = $mjxpath->query("//editor[@id = '{$_GET['author']}']")->length;
    $mjResult = ($mjAuth + $mjEdit);
    echo $mjResult;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2012-11-29
    • 2016-06-09
    相关资源
    最近更新 更多