【问题标题】:Making a PHP/MySQL Search Engine制作 PHP/MySQL 搜索引擎
【发布时间】:2013-01-18 01:56:02
【问题描述】:

在我正在制作的网站中,我需要一个搜索引擎来查找歌曲供人们收听。我让它可以从数据库中获取信息并将它们显示在页面上。当有两首同名歌曲时,问题就来了。我有一个系统,因此结果将转到单独的链接,但是当我搜索它们时,即使它们有两个单独的来源,它们也会显示相同的图像。由于某种原因,它也会产生额外的结果。这是我的代码:

<?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.";
    }
}
?>

【问题讨论】:

  • 如果你使用mysql_函数,你肯定不会有一个很好的搜索引擎。它们不再维护and are officially deprecated。看到red box?改为了解prepared statements,并使用PDOMySQLi - this article 将帮助您决定哪个。
  • 好的,我会读的。但是现在我需要在完全改变网站之前让它工作!
  • 我认为您不了解使用您拥有的代码的后果。
  • ^^^^虽然如此,但对于普通 S.O 用户来说,每天看 10 次就有点乏味了。
  • @Gordan: "在我彻底改变网站之前" - 将字母 i 插入到每个 mysql_ 函数调用中(这几乎就是 切换到 MySQLi 的必要)并不是什么大不了的事。当然,也应该借此机会对语句进行参数化 - 但这是另一回事。

标签: php mysql database search


【解决方案1】:

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

【讨论】:

  • 它显示的信息很好。问题是,它正在重复。
  • 我认为您应该使用“while”或“foreach”。不是都。不需要那个while循环。
  • 两个都用不好吗?是什么原因?另外,如何将 foreach 循环更改为 while 循环?
  • 好的。我按照你说的做了,删除了while循环并将$row[''];更改为$result[''];。现在它只显示一个结果。应该有两个。
  • 那是因为你的索引++。删除它。
【解决方案2】:

您的代码似乎正确。但是,为了澄清,请尝试回显 $arturl 并查看它是否获得了正确的源名称。并检查数据库中的值。最后一件事是尝试检查源图像是否在正确的文件夹中。尝试并提供反馈。

【讨论】:

  • 你可以在这里看到我在说什么:dione.site11.com/search/?q=Song+title
  • 我看过了。第一个是 id=5,但第二个和第三个 id=8。 id是一样的。最好检查那个。 id 不应该相同。尝试删除 foreach,然后使用 while 循环看看发生了什么。 while($row = mysql_fetch_assoc($query)) { echo $row['id']. “”。 $row['titlle'] 。 " " .$row['art_url']; }
  • 立即查看。我做了@Phphelp 说要做的事情。不过还是有问题。 (现在正好相反。结果只有一个。)
  • 试试 phphelp 的当前帖子,我不能在这里发布代码,但我会去 phphelp 代码。
  • 嘿试试这个 if ($numrows != 0) { while($row=mysql_fetch_array($query)){ echo $row['id']. “”。 $row['titlle'] 。 " " .$row['art_url']; } } 先试试这个简单的代码。删除那些索引、数组、foreach。只需使用 while 循环。
猜你喜欢
  • 2013-09-03
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 2012-10-20
相关资源
最近更新 更多