搜尋

首頁  >  問答  >  主體

搜尋只包含提交的搜尋輸入值的結果。

<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粉541551230515 天前559

全部回覆(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
  • 取消回覆