2017-02-25 43 views
-2

我必须在网站上创建实时搜索。我必须使用PHP,但我从来没有研究过它,而且我几乎是编程的初学者。如何修复此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

比较'$ name'到'$ q'?一个真正的数据库会更容易.. – chris85

+0

添加您的XML文件的相关片段到您的文章。 – nvisser

+0

请提及xml文件代码 –

回答

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 />"; 
    } 
} 
+0

感谢您的帮助。不幸的是它仍然不起作用:( – JavaApprentice