我必须在网站上创建实时搜索。我必须使用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>
有人可以帮我解决这个问题,以便我可以继续处理我的项目。提前感谢您的时间和帮助!非常感谢!
答案 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 />";
}
}