首页  >  问答  >  正文

搜索只包含提交的搜索输入值的结果。

<p>嗨,如果可能的话,我很乐意帮助你处理搜索脚本。</p><p>我有一个搜索功能,使用三种类型的搜索输入从数据库中检索有关车辆的数据,并使用一个提交按钮。</p><p>输入1:选项列表搜索(searcha)</p><p>输入2:文本搜索(searchb)</p><p>输入3:两个单选按钮选择搜索(可以选择一个或两个按钮)</p><p>还有一个提交按钮。</p><p>当我提交搜索时,以下PHP代码会运行。它会显示结果,但只有当与数据库中的第一个正确结果匹配时才会显示。我希望它能够搜索只包含提交的搜索输入值的结果。</p><p>例如,如果我从输入1选择一个选项,从输入3选择一个单选按钮,搜索应该只找到包含这两个值的行(如果这样说得通的话)。</p><p><br /></p> <pre class="brush:php;toolbar:false;"><? // 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!'; } ?></pre> <p>有没有一种简单的方法来调整这个脚本以反映输入的搜索?我刚开始学习PHP,所以一个正确的指引会非常完美。谢谢。</p><p><br /></p>
P粉541551230P粉541551230422 天前484

全部回复(1)我来回复

  • P粉930534280

    P粉9305342802023-07-26 09:07:18

    首先,我不明白如何同时选择两个单选按钮,你是指复选框吗?关于你的问题 - 无论如何,你应该执行一个查询,但根据你的$_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!';
    }

    回复
    0
  • 取消回复