php - 如何使用PHP和mysql制作搜索页面?

标签 php mysql arrays database

我一直在尝试建立一个网站来销售书籍,其中我有一个包含书籍及其作者的 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 的新手,这种搜索方式在逻辑上是否正确?如果没有,您能为这个简单的网络项目建议任何简单/基本的方法吗?

  • 如果我打算做的事情是正确的,你能帮我找出我哪里出错了吗?

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

  • 最佳答案

    您需要使用like ,而不是 == 需要匹配。 like 用于表示like 值。例如,如果数据库包含 firetruck 并且您这样做了

    select * from table where column = 'fire'
    

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

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

    您将获得消防车行。

    %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?

    关于php - 如何使用PHP和mysql制作搜索页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244928/

    相关文章:

    php - 使用php跨服务器的mysqli连接错误

    PHP 7 Unicode 支持和平台独立性

    php - add_filter 与 add_action 之间的区别

    php - 将 Android 应用程序与 php 和 mysql 连接

    javascript - JSON 解析文件返回字符串而不是 node/express 中的数组

    c - 总结c中的行,显示列中的垃圾数字

    php - Drupal 7 中具有多个文件字段的自定义字段

    mysql - 从终端访问 phpmyadmin 数据库

    php - 更改 php 数组输出

    python - 如何使用 reshape 将 N 长度向量 reshape 为 numpy 中的 3x(N/3) 矩阵