【问题标题】:How to make a search page using PHP and mysql?如何使用 PHP 和 mysql 制作搜索页面?
【发布时间】:2015-12-12 21:00:49
【问题描述】:

我一直在尝试建立一个网站来销售书籍,其中我有一个包含书籍及其作者的 mysql 数据库。 我希望在主页上添加一个搜索栏(使用基本的 PHP 和 mysql 打印所有书籍的列表)。

我仍然不确定如何去做,所以这是我打算做的事情

  1. 连接数据库
  2. 使用 POST 方法进行搜索查询,然后对 search.php 执行操作,例如,假设条目是“社会变革”
  3. 在 search.php 中,使用explode() 将查询语句分解为单词/关键字,并将其组成一个数组。所以查询变成了一个数组,包含 [0] => 'social' 和 [1] => 'change'
  4. 在我现有的数据库中,假设我有一本名为“社会变革动态”的书的条目。我在我的数据库中创建了另一列,其中包含与那本书相对应的(动态、社会、变化)数组。 ((((如何使用mysql?))))
  5. 使用 SQL 查询从书名数组包含我的关键字数组的任何元素的位置选择条目。
  6. 打印,如果找到任何结果。

这是我所做的: 来自 index.php

    <form action= 'search.php' method='post'>
        <input type='text' name='q'>                        
        <input type='submit'>
    </form>

从search.php,连接数据库后:

$q = $_POST["q"];
$keys = explode(" ", $q);

$x = 0;
echo "<table>";
while ($x < sizeof($keys))
{
    $req = "SELECT * FROM book WHERE name= '$keys[$x]'";
    $run = mysqli_query($connect,$req)
        or die('Query req failed: ' . mysql_error());
    while 
    ($line = mysqli_fetch_array($run, MYSQL_ASSOC))
    {
        echo "<tr>";
        echo "<td>" . $line['name'] . "</td>";
        echo "</tr>";

    } 
$x = $x + 1;
}
echo "</table>";

我面临的问题是我没有得到任何输出。 我尝试了不同的输入,但我无法找出错误。

我想问什么: 1. 我在逻辑上做对了吗?考虑到我是 PHP 和 mysql 的新手这一事实,在逻辑上进行搜索是否正确?如果没有,您能否为这个简单的 Web 项目建议任何简单/基本的方法?

  1. 如果我打算做的事情是正确的,你能帮我弄清楚我在哪里犯错了吗?

  2. 我还没有找到步骤 4 中的 HOW 部分,即在 mysql 数据库中创建另一个列,该列由一个数组组成,其中的元素基本上是从书名中分离出来的单词。 例如,A 栏:“社会变革的动态” B 列:(动态、社会、变化)

【问题讨论】:

  • 你能专注于 1 或 2 个狭隘的问题吗

标签: php mysql arrays database


【解决方案1】:

您需要使用like,而不是=s。 = 需要匹配。 likelike 的值。例如,如果一个数据库包含 firetruck 而你做到了

select * from table where column = 'fire'

你不会得到任何结果。但是,如果你这样做了

select * from table where column like '%fire%'

您将获得firetruck 行。

%s 允许该侧的任何内容,例如:

select * from table where column like '%fire'

找不到firetruck,因为它只会找到以fire结尾的记录。

不过,您可能希望查看全文搜索。 http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html

您也不应该将用户输入直接传递到 SQL 查询中。使用准备好的语句。

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28Parameterized_Queries.29
How can I prevent SQL injection in PHP?

【讨论】:

  • 好的,非常感谢。还有一个后续问题:如果是变量,正确的语法是什么?会是“%$keys[$x]”吗?
  • 您的意思是在您的代码中"SELECT * FROM book WHERE name= '$keys[$x]'"; 应该如何?那将是"SELECT * FROM book WHERE name like '%" . $keys[$x] ."%'";。对于有效的 SQL;再次虽然应该参数化它..
【解决方案2】:

也许您应该为这个问题使用全文索引: http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html

创建全文索引:

ALTER TABLE book ADD FULLTEXT(name);

查询:

"SELECT * FROM book WHERE MATCH(name) AGAINST ('" . $_POST["q"] . "')"

编辑:正如另一个答案中提到的,您永远不应该在查询中使用直接用户输入。来自用户输入的所有数据都应该经过清理,并且对数据库的所有查询都应该通过准备语句完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2017-08-05
    • 2015-06-10
    • 1970-01-01
    相关资源
    最近更新 更多