【问题标题】:Search engine only single return?搜索引擎只能单返回?
【发布时间】:2013-04-17 05:28:57
【问题描述】:

大家好,我做了一个简单的搜索引擎,但是它有一个问题,当我搜索一个字符串时,我的结果只有一行我做错了什么我找不到多个结果。

搜索.php:

<?php
if (isset($_POST['search']) && !empty($_POST['xs']) && isset($_POST['s']))
    echo $functions->Search($_POST['xs'], $_POST['s']);
?>

functions.php:

    function Search( $post, $type )
    {
    global $database;
        if ($database->getSearchData($type, $post) && preg_replace("/[^0-9A-Za-z]/", "", $post))
        return $database->getSearchData($type, $post);
         else
         return 
         '
<div class="title_box"><div class="title_inner">
Results </div></div>
<div class="title2_box"><div class="title2_inner">
<p>
<table width="50%">
<tr>
<td>Player</td>
<td>Level</td>
<td>Total honour</td>
</tr>
<tr><td class="f" colspan="2">No results</td></tr></table>  </p>
</div></div>
        ';
    }

数据库.php:

        function getSearchData($type, $keyword)
        {
        $find = strtoupper( $find );
        $find = strip_tags( $find );
        $find = trim ( $find );

            switch($type)
            {
                case '1':
                    $q = "SELECT * FROM users WHERE upper(username) LIKE '%$keyword%'";
                break;
                case '2':
                    //$q = "SELECT * FROM guilds WHERE upper(username) LIKE '%$keyword%' LIMIT 25";
                    return false;
                break;
                case '3':
                    //$q = "SELECT * FROM guilds WHERE upper(username) LIKE '%$keyword%' LIMIT 25";
                    return false;
                break;
                default:
                    return false;
                break;
            }

            $result = mysql_query($q, $this->connection);

            if(mysql_num_rows($result) <= 0)
                return false;

             while($row = mysql_fetch_array( $result )) 
             { 
    return
    '
<div class="title_box"><div class="title_inner">
Results </div></div>
<div class="title2_box"><div class="title2_inner">
<p>
<table width="50%">
<tr>
<td>Player</td>
<td>Level</td>
<td>Total honour</td>
</tr>
<tr>
<td>
<a href="index.php?mod=player&p='.$row['id'].'" " target="_self">'.$row['username'].'</a>
</td>
<td style="text-align:center">'.$row['level'].'</td>
<td style="text-align:center">'.$row['honour'].'</td>
</tr>
</table>    </p>
</div></div>
    ';
             } 
        }

问题只有一个结果需要多个结果。

【问题讨论】:

  • 别忘了properly escape your SQL。您还使用了mysql_query,它已被弃用且很危险。除非您有充分的理由使用它,否则请不要使用它,它会在不久的将来从 PHP 中删除。 Use PDO 如果可以的话。
  • 在寻求帮助之前,您需要学习如何调试代码。解决这个问题的方法非常明显。
  • 我知道 PDO 和 mysql。 Sverri M. Olsen,感谢您的建议。

标签: php mysql sql search


【解决方案1】:

您在 while 循环中调用了 return。当return 被调用时,函数退出并将指定的数据发送回调用者。每次函数调用只能发生一次。

要纠正此问题,您可能需要创建一个临时变量来存储您的结果集,并在每次迭代结果集时将其连接到该变量上。然后你可以在循环结束后调用一次return 以返回整个集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多