2013-01-18 222 views
1

在我製作的一個網站中,我需要一個搜索引擎來尋找人們傾聽的歌曲。我已經開始工作,它可以從數據庫獲取信息並將其顯示在頁面上。問題出現在有兩首同名歌曲時。我有一個系統,所以結果將轉到單獨的鏈接,但是當我搜索它們時,它們顯示相同的圖像,即使它們有兩個單獨的來源。由於某種原因,它也會產生額外的結果。這裏是我的代碼:製作一個PHP/MySQL搜索引擎

<?php 
if (isset($_GET['q'])) { 
    $q = $_GET['q']; 
    mysql_connect('********', '********', '********'); 
    mysql_select_db('********'); 
    $query = mysql_query("SELECT * FROM ******** WHERE title LIKE '$q'"); 
    $numrows = mysql_num_rows($query); 
} else { 
    echo " 
<span style='font-family: Helvetica, Arial;font-weight: bold;font-size: 25px;'>Search</span> 
<form action='http://www.example.com/search' method='get'> 
<input placeholder='Search for music' type='text' name='q' style='font-weight:bold;padding:5px;width:300px;border-top-left-radius: 4px;border-top-right-radius: 10px;border-bottom-left-radius: 10px;border-bottom-right-radius: 4px;border: 3px solid gray;background-color:#000000;color:#FFFFFF;' /> 
</form> 
    "; 
} 
if ($numrows != 0) { 
    $index = 0; 
    $results = array(); 
    while($row = mysql_fetch_assoc($query)) { 
     $results[$index] = $row; 
     $index++; 
     foreach ($results as $result) { 
      $url = "http://www.example.com?id=" . $row['id']; 
      $title = $row['title']; 
      $arturl = $row['art_url']; 
      if ($_GET['q'] != "") { 
       echo " 
        <a href='$url'> 
        <table> 
        <tr style='text-align:left;'> 
        <td><img src='$arturl' style='width:100px;height:100px;'></td> 
        <td> 
        <span class='songTitle'>$title</span> 
        <br/> 
        <span class='songArtist'>By: Unknown</span> 
        </td> 
        </tr> 
        </table> 
        </a> 
        <br />    
       "; 
      } 
     } 
    } 
} else { 
    if ($_GET['q'] != "") { 
     echo " 
<span style='font-family: Helvetica, Arial;font-weight: bold;font-size: 25px;'>Search</span> 
<form action='********' method='get'> 
<input placeholder='Search for music' type='text' name='q' style='font-weight:bold;padding:5px;width:300px;border-top-left-radius: 4px;border-top-right-radius: 10px;border-bottom-left-radius: 10px;border-bottom-right-radius: 4px;border: 3px solid gray;background-color:#000000;color:#FFFFFF;' /> 
</form> 
     "; 
     echo "<br />No results where found."; 
    } 
} 
?> 
+2

如果你使用'mysql_'函數,你肯定不會有一個很好的搜索引擎。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。 – Kermit

+0

好的,我會讀到的。但現在我需要這個在我徹底改變網站之前工作! –

+0

我不認爲你明白使用你的代碼的後果。 – Kermit

回答

2

while($ row = mysql_fetch_array($ result))嘗試$result['title']而不是$row['title'];。同樣到$url$arturl

這應該工作。

if ($numrows != 0) { 
    $index = 0; 
    $results = array(); 
    while($row = mysql_fetch_array($query)) { 
      $url = "http://www.example.com?id=" . $row['id']; 
      $title = $row['title']; 
      $arturl = $row['art_url']; 
      if ($_GET['q'] != "") { 
       echo " 
        <a href='$url'> 
        <table> 
        <tr style='text-align:left;'> 
        <td><img src='$arturl' style='width:100px;height:100px;'></td> 
        <td> 
        <span class='songTitle'>$title</span> 
        <br/> 
        <span class='songArtist'>By: Unknown</span> 
        </td> 
        </tr> 
        </table> 
        </a> 
        <br />    
       "; 
      } 
    }   
    } 
+0

它顯示的信息很好。問題是,它是重複的。 –

+0

我認爲你應該使用'while'或'foreach'。不是都。不需要while循環。 – Phphelp

+0

這樣做不好,我同時使用?是什麼原因?另外,如何將'foreach'循環更改爲'while'循環? –

0

你的代碼似乎是正確的。然而,爲了澄清,嘗試echo $ arturl,看看它是否得到正確的源名稱。並檢查數據庫中的值。最後一件事是嘗試檢查源圖像是否在正確的文件夾中。嘗試並提供反饋。

+0

你可以在這裏看到我在說什麼:http://www.dione.site11.com/search/?q=Song+title –

+0

我見過它。第一個是id = 5,但第二個和第三個id = 8。該id是相同的。最好檢查一下。該ID不應該是一樣的。嘗試刪除foreach,並使用while循環,看看發生了什麼。 while($ row = mysql_fetch_assoc($ query)){echo $ row ['id']。 「」。 $ row ['titlle']。 「」。$ row ['art_url']; } – Bizarre

+0

立即檢查出來。我做了@Phphelp所說的。雖然仍然有問題。 (現在是相反的,只有一個結果。) –