带有GET的多个if语句在带有XPath的PHP中未正确输出



我试图获得两位作者编辑或合著书籍的总次数。(它们是由用户使用复选框选择的,所以我使用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;
}
}

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

您使用了嵌套的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;
}

您可以将其简化为一个条件,这样就不用对所有不同的作者/编辑器进行硬编码。

首先检查是否设置了author,然后在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;
}

最新更新