mysql 搜索仅包含提交的搜索输入值的结果

kq0g1dla  于 2023-08-02  发布在  Mysql
关注(0)|答案(1)|浏览(115)

你好,如果有一个搜索脚本可能的话,寻找一点帮助。
我有一个搜索功能,它使用三种类型的搜索输入和一个提交按钮从数据库中检索有关车辆的数据。
输入1.选项列表搜索(searcha)
输入2.文本搜索(searchb)
输入3.2单选按钮选择搜索(选择任一按钮或两者)
加上一个提交按钮
我有下面的PHP代码,当我提交搜索时运行。它确实显示了结果,但只有它与数据库中的第一个正确结果匹配,然后才显示那个。我想它做的是搜索结果,只持有提交的搜索输入值
例如,如果我说从输入1中选择一个选项,从输入3中选择一个单选按钮,搜索将只找到包含这两个值的行(如果有意义的话)。

<?
// Vehicles
if (in_array($_POST['searcha'], $search_a_option_list)) {
    $stmt = $pdo->prepare('SELECT * FROM coun WHERE inth = ?');
    $stmt->execute([ $_POST['searcha'] ]);
    $search_results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else if ($_POST['searchb']) {
    $stmt = $pdo->prepare('SELECT * FROM coun WHERE bunty LIKE ?');
    $stmt->execute([ '%' . $_POST['searchb'] . '%' ]);
    $search_results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else if (isset($_POST['check1'], $_POST['check2'])) {
    $stmt = $pdo->prepare('SELECT * FROM coun WHERE ref = ? OR ref1 = ?');
    $stmt->execute([ 'In', 'On' ]);
    $search_results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else if (isset($_POST['check1'])) {
    $stmt = $pdo->prepare('SELECT * FROM coun WHERE ref = ?');
    $stmt->execute([ 'In' ]);
    $search_results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else if (isset($_POST['check2'])) {
    $stmt = $pdo->prepare('SELECT * FROM coun WHERE ref1 = ?');
    $stmt->execute([ 'On' ]);
    $search_results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}  else {
    $error = 'No options selected!';
}
?>

字符串
有没有一个简单的方法来调整这个脚本,以反映输入的搜索?刚刚开始学习PHP,所以在正确的方向上稍微推动一下就完美了。
问候

xmakbtuz

xmakbtuz1#

首先,我不明白怎么可能同时选择两个单选按钮,你是说复选框吗?关于你的问题--无论如何,你应该执行一个查询,但是根据你的$_POST值来构建它。
它可以是这样的

// make an empty array to hold all the conditions
$whereValues = [];

// populate the array with conditions
if (in_array($_POST['searcha'], $search_a_option_list)) {
    $whereValues[] = "inth = '$_POST[searcha]'";
} else if ($_POST['searchb']) {
    $whereValues[] = "bunty LIKE '%$_POST[searchb]%'"
} else if (isset($_POST['radio1'], $_POST['radio2'])) {
    $whereValues[] = "ref = 'In' OR ref1 = 'On'"
} else if (isset($_POST['radio1'])) {
    $whereValues[] = "ref = 'In'"
} else if (isset($_POST['radio2'])) {
    $whereValues[] = "ref1 = 'On'"
} 

// if we have something then build the result string of `WHERE` conditions
if ($whereValues) {
    $where = implode(' AND ', $whereValues);
    $stmt = $pdo->prepare("SELECT * FROM coun WHERE $where");
    $stmt->execute();
    $search_results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else {
    $error = 'No options selected!';
}

字符串

相关问题