我该如何修复这个PHP代码?

时间:2017-02-25 00:29:00

标签: php xml

我必须在网站上创建实时搜索。我必须使用PHP,但我从未研究过它,而且我几乎是编程的初学者。

我有一个XML文件作为数据库,其目的是获取节点值并将其显示为用户输入内容时的建议。此代码的问题在于它将所有节点值吐出到网页上。

这是PHP代码:

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("collection.xml");
$books = $xmlDoc->getElementsByTagName("book");

$q = $_GET["q"];

if (strlen($q) > 0) {
$hint = "";

foreach ($books as $book) {
    $name = $book->getElementsByTagName("name")->item(0)->nodeValue;

    echo "$name <br/>";
}

}

if ($hint == "")
{
$response="no suggestion";
}
else
{
$response=$hint;
}
//output the response
echo $response;
?>

这是XML文件:

<books>

  <book>
    <name>Harry Potter</name>
    <quantity> 50 </quantity>
    <price>19.90</price>
  </book>


  <book>
    <name>Casino Royale</name>
    <quantity> 50 </quantity>
    <price>12.99</price>
  </book>


  <book>
    <name>The Great Gatsby</name>
    <quantity> 40 </quantity>
    <price>14.90</price>
  </book>

</books>

有人可以帮我解决这个问题,以便我可以继续处理我的项目。提前感谢您的时间和帮助!非常感谢!

1 个答案:

答案 0 :(得分:1)

问题在于:

$hint = "";

foreach ($books as $book) {
    $name = $book->getElementsByTagName("name")->item(0)->nodeValue;

    echo "$name <br/>";
}

请注意,此处有“foreach循环”。 “$ name = $ book ....”行只读取该特定XML节点的值并将其分配给$ name变量。然后你正在调用echo $ name。所以从本质上讲,你在这里所做的就是读取XML节点的值并打印它。代码的任何部分都不会将$ name与搜索查询($ q)进行比较。您似乎想要发生的事情似乎只打印出与$ q匹配的书籍。

为了做到这一点,我们需要在foreach循环中应用一些逻辑,只打印出与$ q匹配的值。

这是一个建议:

$hint = "";

foreach ($books as $book) {
    $name = $book->getElementsByTagName("name")->item(0)->nodeValue;

    // Let's only show this book if $q appears somewhere in $name.
    if (strpos($name, $q) !== false && strpos($name, $q) >= 0) 
    { 
       echo $name . "<br />"; 
    }
}