搜索只包含提交的搜索输入值的结果。
P粉541551230
P粉541551230 2023-07-25 09:17:02
[MySQL讨论组]

嗨,如果可能的话,我很乐意帮助你处理搜索脚本。

我有一个搜索功能,使用三种类型的搜索输入从数据库中检索有关车辆的数据,并使用一个提交按钮。

输入1:选项列表搜索(searcha)

输入2:文本搜索(searchb)

输入3:两个单选按钮选择搜索(可以选择一个或两个按钮)

还有一个提交按钮。

当我提交搜索时,以下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['radio1'], $_POST['radio2'])) {
    $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['radio1'])) {
    $stmt = $pdo->prepare('SELECT * FROM coun WHERE ref = ?');
    $stmt->execute([ 'In' ]);
    $search_results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else if (isset($_POST['radio2'])) {
    $stmt = $pdo->prepare('SELECT * FROM coun WHERE ref1 = ?');
    $stmt->execute([ 'On' ]);
    $search_results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}  else {
    $error = 'No options selected!';
}
?>

有没有一种简单的方法来调整这个脚本以反映输入的搜索?我刚开始学习PHP,所以一个正确的指引会非常完美。谢谢。


P粉541551230
P粉541551230

全部回复(1)
P粉930534280

首先,我不明白如何同时选择两个单选按钮,你是指复选框吗?关于你的问题 - 无论如何,你应该执行一个查询,但根据你的$_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!';
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号