【问题标题】:How can I search (In DB row)我如何搜索(在 DB 行中)
【发布时间】:2015-03-17 08:09:35
【问题描述】:

我正在尝试找出如何在数据库行中进行搜索,但我没有任何想法...也许你们中的一些人可以帮忙。我正在为我的老板制作一个魔法收集网站。在这个游戏中,你有多个集合,每个集合都有一张卡片。有一个页面,您可以在其中查看所有集合,在此页面中我想要一个搜索栏来查找集合。我想要的是页面顶部的搜索栏,当您输入“Strong”时,您会看到每个包含“Strong”的集合名称。

输出:http://prntscr.com/5ubsa2 列表持续了很多...

正如您在输出中看到的那样,所有集合都已列出。我希望你可以在那里看到搜索结果。

输入:

<body>

<?php
    // Get data
    $query = 'select * from sets ORDER BY releaseDate;';
    $sets = $conn->query($query);

    // Generate HTML
    $htmlSets = '';
    foreach($sets as $row){
        $htmlSets .= '<div class="col-md-4 magic-set"><a href="'.$baseURL.'set.php?id='.$row['id'].'"><h5>'.$row['name'].'</h5></a></div>';
    }
    //set.php?fname=areg&lname=aerga

?>

<!-- Page Content -->
<div class="container">
    <?php include_once 'inc/navigation.php';?>
    <div class="content">
        <div class="row">
            <div class="col-md-12">
                <div class="text-center">
                    <h3>Magic: the Gathering Sets</h3>
                    <hr>
                </div>
            </div>
        </div>

        <div class="row">
            <?= $htmlSets ?>
        </div>
        <!-- /.row -->
    </div>

    <?php include_once 'inc/footer.php';?>

</div>
<!-- /.container -->
</body>

【问题讨论】:

  • $query = "select * from sets WHERE name LIKE '%" . $searched_name . "%' ORDER BY releaseDate"; 这样的东西 - 确保你总是逃避$searched_name SEE HERE的值
  • WHERE子句

标签: php html database list search


【解决方案1】:

这很简单,实际上你必须检查你的 saerch 表单是 get 还是 post 你总是检查用户是否搜索过任何东西或者它是空的 例如它是获取形式 你的查询参数是“q” 在php中你只需要这样做

$query = "select * from sets ORDER BY releaseDate";
if( if(!empty($_GET['q'])))
{
    $query = "select * from sets WHERE name LIKE '%" .$_GET['q']. "%'    ORDER BY releaseDate";
}

这只是基本概念...

【讨论】:

    【解决方案2】:

    您似乎还没有启动 MySQL 连接,也没有退出它。

    <?php
    
        define("DB_SERVER", "localhost");
        define("DB_USER", "username");
        define("DB_PASS", "password");
        define("DB_NAME", "database_name");
    
        $connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
    
        // If the connection didn't succeed, run this error:
    
        if (mysqli_connect_errno()) {
            die("Database connection failed: " .
                mysqli_connect_error() .
                " (" . mysqli_connect_errno() . ")"
            );
        }
    ?>
    

    此连接应位于文档的开头。你还必须有 mysqli_close($connection);以关闭您的连接。

    您的查询末尾还有一个分号,因此请务必将其删除。这应该是查询的正确格式:

    $query = 'SELECT * FROM sets ORDER BY releaseDate';
    

    您不能对 MySQL 查询使用 foreach 循环,只能使用 while 循环(除非您为主 ID 关闭了自动增量)。以下是您的代码在 while 循环中的样子:

    <?php
    
        // You can also use mysqli_fetch_row()
        while ($row = mysqli_fetch_assoc($sets)) {
            $htmlSets .= '<div class="col-md-4 magic-set"><a href="'.$baseURL.'set.php?id='.$row['id'].'"><h5>'.$row['name'].'</h5></a></div>';
        }
    
        // Since your query is of a 'read' type and
        // not an 'update', you are required the free the result:
    
        mysqli_free_result($sets) ;
    
    ?>
    

    一定要释放你的结果,以防你以后需要再次使用它。

    【讨论】:

      【解决方案3】:

      您可以使用一点 AJAX 来做到这一点。 Here's 样品。只需替换为您的值和 CSS。

      【讨论】:

        猜你喜欢
        • 2019-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多