Php搜索多值

问题描述 投票:-2回答:1

我试图做一个有多个输入的搜索系统。我试着在查询中选择数据,如果它存在,它应该添加额外的数据,但它不这样做,我搞砸了,不知道如何修复它。从我的其他文件的数据得到那里。我检查过了。有人知道我做错了什么吗?

<?php
    $connect= mysqli_connect("localhost", "root", "root", "website");
    $query = "SELECT * FROM data";
    $sort = " date DESC"
    if(isset($_GET["search"])){
        $keywordsearch = $connect->escape_string($_GET['search']);
        $query .= " WHERE name like '%$keywordsearch%'";

        if(isset($_GET['tag'])){
            $keywordtag = $connect->escape_string($_GET['tag']);
            $query .= " AND tag like '%$keywordtag%'";  
            $query .= " ORDER BY $sort";
        }
    }
    $result = mysqli_query($connect, $query);
    while($row = mysqli_fetch_array($result)){
        echo $row['name']."<br>";
    }
    ?>
php database
1个回答
0
投票

这可以通过创建一个传入数据的数组来完成,使用该数组,你可以控制所有其他要求建立一个查询,并使用Parameterised和绑定查询传递参数

$_GET = ['search'=> 'fluff', 'tag'=>'easy'];


$connect= mysqli_connect("localhost", "root", "root", "website");
$query = "SELECT * FROM data";
$sort = " ORDER BY date DESC";

if(isset($_GET["search"])){
    $query .= " WHERE name like ?";
    $vals[] = '%' . $_GET["search"] . '%';
}

if(isset($_GET['tag'])){
    $query .= " OR tag like ?";  
    $vals[] = '%' . $_GET["tag"] . '%';
}

$query .= $sort;

$types = str_repeat('s', count($vals));

$stmt = $connect->prepare($query);
$stmt->bind_param($types, ...$vals);
$stmt->execute();

$result = $stmt->get_result();
while($row = $result->fetch_array(MYSQLI_ASSOC)){
    echo $row['name']."<br>";
}

结果。

easy peasy<br>
fluff fluff<br>

根据你的评论。 问题是,我可以输入标签变量 如果标签变量是数据库中没有的东西,它就什么都不显示了

那是因为你使用的是一个 AND 而非 OR 在查询中。我也纠正了这一点

© www.soinside.com 2019 - 2024. All rights reserved.