簡體   English   中英

使用文本框和兩個下拉菜單在PHP頁面上搜索和過濾MySql結果

[英]Using a textbox and two pulldowns to search and filter MySql results on a PHP page

我有一個頁面,該頁面的文本框附加到MySql數據庫,該頁面用於搜索使用姓氏的人的記錄。

為了使頁面更有用,我添加了2個下拉菜單。 一個菜單用於紀念館的位置,另一個菜單用於諸如第一次世界大戰,第二次世界大戰等沖突。我想使用下拉菜單作為搜索結果的過濾器。

下拉菜單將需要與文本框一起使用,並且還需要獨立使用,從而在記錄上給出以下結果:

  • 姓氏+紀念館
  • 姓氏+沖突
  • 紀念館
  • 紀念館+沖突
  • 沖突

我的表格代碼是:

<div class="memorialphp">
    <form action='./memorial.php' method='get'>

        <!-- $surname or 'surname' -->
        <input type='text' name='term' placeholder="Search...">

        <!-- $memorial or 'memorial' -->
        <select name="memorialsearch">
            <option value=" ">All Memorials</option>
            <option value="Hinckley War Memorial">Hinckley War Memorial</option>
            <option value="Burbage War Memorial">Burbage War Memorial</option>
            <option value="Barwell War Memorial">Barwell War Memorial</option>
            <option value="Earl Shilton War Memorial">Earl Shilton War Memorial</option>
        </select>

        <!-- $conflictsort or 'conflictsort' -->
        <select name="confictsearch">
            <option value="">All Conflicts</option>
            <option value="1">World War I</option>
            <option value="2">World War II</option>
            <option value="3">20th Century Wars</option>
        </select>
    </form>
</div>

我為PHP提供的代碼是:

<?php
    if (!empty($_REQUEST['term'])) {
        $term = mysql_real_escape_string($_REQUEST['term']);     
        $sql = "SELECT * FROM search WHERE surname LIKE '%".$term."%' ORDER BY surname, fullname, conflictsort"; 
        $r_query = mysql_query($sql);

        if(mysql_num_rows($r_query)){
            while ($row = mysql_fetch_array($r_query)){
                $id = $row['id'];
                $initial = $row['initial'];
                $surname = $row['surname'];
                $fullname = $row['fullname'];
                $dob = $row['dob'];
                $born = $row['born'];
                $service = $row['service'];
                $enlisteddate = $row['enlisteddate'];
                $enlisted = $row['enlisted'];
                $number = $row['number'];
                $rank = $row['rank'];
                $batt = $row['batt'];
                $unit = $row['unit'];
                $section = $row['section'];
                $died = $row['died'];
                $death = $row['death'];
                $memorial = $row['memorial'];
                $conflict = $row['conflict'];
                $conflictsort = $row['conflictsort'];
                $biography = $row['biography'];
                $link = $row['link'];

                echo"<h4>$surname</h4>
                <b>Name:</b> $fullname - <b>Rank:</b> $rank ($number) - <b>Regiment:</b> $batt $unit $section
                <br /><b>Birth:</b> $dob $born
                <br /><b>Enlisted:</b> $service - $enlisteddate $enlisted
                <br /><b>Died:</b> $died $death
                <br /><b>Memorial:</b> Shown as $initial$surname at $memorial
                <br /><b>Confilct:</b> $conflict
                <br /><b><a href='$link'>$biography</a></b>
                <br /><br /><br />";
            } 
        }else{
            echo "<br /><br /><br /><br /><br /><p><b>No records, please try again...</b></p>";
        } 
    }
?>

請注意,我是一個初學者,理想的解決方案是為您更改代碼並發布說明如何以及為使它起作用而進行了哪些更改。

第一件事:務必使用mysqli模塊,而不要使用舊的和不推薦使用的mysql

這是使用mysqli打開與數據庫的連接的方法:

$db=mysqli_connect($dbhost,$dbuser,$dbpassw,$dbname);

好的,現在我們可以開始搜索了。 我將使用一個名為$where的變量,其中where存儲查詢的where子句。 此子句將根據用戶輸入動態組成。 就像是:

$where='';

if (!empty($_REQUEST['term'])) {
    $term=$db->escape_string($_REQUEST['term']);
    $where.=" AND surname LIKE '%$term%'";
}
if (!empty($_REQUEST['memorialsearch'])) {
    $memorial=$db->escape_string($_REQUEST['memorialsearch']);
    $where.=" AND memorial='$memorial'";
}
if (!empty($_REQUEST['conflictsearch'])) {
    $conflict=$db->escape_string($_REQUEST['conflictsearch']);
    $where.=" AND conflict='$conflict'";
}

我不知道您的search表的確切結構,因此您可能必須修改以上代碼以匹配您的實際字段名稱。

在此塊末尾,如果請求中有一些搜索字段,則$where不會為空。 還要注意,非空的$where總是以“ AND”開頭。 這使得動態組成子句更加簡單,但是需要第一個條件可以附加我們的$where

因此,這是我們的工作方式:

if ($where) {
    $sql="SELECT * FROM search WHERE 1".$where;
    $r_query = $db->query($sql);

    // generate the output
}

查詢中的“ 1”始終是真實條件,我們可以$where附加$where並在語法上正確。

我想輸出部分應該還可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM