2017-02-25 103 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