簡體   English   中英

以 HTML 形式查詢多個選定選項的 MySql

[英]MySql query for multiple selected options in HTML form

我已經搜索了有關我的問題的類似帖子和信息,但找不到任何有很大幫助的帖子。 我在網頁上有一個表單,它由 5 個下拉菜單組成,每個都有不同的選項,用戶將從每個下拉菜單中選擇一個選項,然后點擊提交按鈕。 在這一點上,我想在數據庫上運行一個查詢,以查找與“選定”的所有選項的匹配條件。 現在我不需要匹配所有字段,因為我只是在測試,所以我只想檢查一個字段。 我使用的表格是這樣的:

<div class="section-two">
    <div class="row bound-box">
        <div class="col-lg-8 col-md-8 col-sm-8 col-lg-offset-2 col-md-offset-2 col-sm-offset-2 main clearfix">
            <form id="nl-form" class="nl-form" action="searchpubs.php" method="post">
            I feel to visit 
            <select id="category">
                <option value="anywhere" selected>anywhere</option>
                <option value="pub">a pub</option>
                <option value="nightclub">a nightclub</option>
                <option value="brewery">a brewery</option>
                <option value="stripclub">a gentleman's club</option>
            </select>
            <br/>that
            <select id="foodDrink">
                <option value="food" selected>serves food</option>
                <option value="drinks">serves drinks only</option>
            </select>
            and has 
            <br/> 
            <select id="extra">
                <option value="poolTable" selected>a pool table</option>
                <option value="danceFloor">a dance floor</option>
                <option value="tv">tv's</option>
                <option value="everything">everything</option>
                <option value="anything">anything</option>
            </select>
            . It's within<br>
            <select id="distance">
                <option value="anyDistance" selected>any distance</option>
                 <option value="5">5 km</option>
                 <option value="10">10 km</option>
                 <option value="15">15 km</option>
                 <option value="20">20 km</option>
            </select>
            from me<br> and is open
            <select id="hours">
                <option value="late" selected>past 12 a.m.</option>
                 <option value="allDay">all day</option>
                 <option value="weekdays">on weekdays</option>
                 <option value="sundays">on sundays</option>
                 <option value="anytime">anytime</option>
            </select>
            <div class="nl-submit-wrap">
                <button class="nl-submit" type="submit">Find Your Pub</button>
            </div>
            <div class="nl-overlay"></div>
            </form>
        </div><!--column-->
    </div><!-- row -->
</div><!--section-two-->

因此,例如,如果用戶在選擇 id“foodDrink”下選擇了“服務食物”選項,我想在我們的數據庫上運行查詢以搜索標記為“食物”的列中包含“是”的任何行柱子。 然后在瀏覽器中顯示所有匹配條件。 現在它不需要格式化等,我只想在瀏覽器中看到它以確保查詢有效。 任何人都可以幫助我解決這個問題,並且可能了解如何在准備好時添加其他查詢。

我目前正在像這樣連接到我的數據庫:

<?php

//DATABASE CONNECTION INFO BELOW:
$hostname="hostname";
$database="dbname";
$username="myusername";
$password="mypassword";

$link = mysql_connect($hostname, $username, $password);
if (!$link) {
    die('Connection failed: ' . mysql_error());
}

$db_selected = mysql_select_db($database, $link);
if (!$db_selected) {
    die ('Can\'t select database: ' . mysql_error());
}

mysql_close($link);

?>

下面代表一個存根。 我不會為您編寫端到端的查詢。 請注意,您的表單在$_POST沒有為 PHP 處理程序提供任何內容,因為在下拉菜單的那 5 行左右缺少 name='xxx'。 他們所擁有的只是下拉ID。

此外,您需要使用 mysql_* 函數以外的其他東西。 那些舊的不推薦使用的函數很容易受到來自互聯網上大量源代碼的 sql 注入攻擊。 而且它們不會將查詢與參數分開。 其中沒有准備好的語句綁定,也沒有異常處理(我見過使用過,有人糾正我)。 所以這些是幾個原因,我會就此打住。

所以我把它移到了mysqli 如果你願意,你也可以為PDO揮桿。 並且您需要使用准備好的語句進行綁定以清理用戶輸入,以免在未經清理的情況下直接對其進行操作。 綁定會為您做到這一點。

但是以下內容將使您的 POST 返回到輸出中。 相應地進行。

形式

<html>
<body>
<div class="section-two">
    <div class="row bound-box">
        <div class="col-lg-8 col-md-8 col-sm-8 col-lg-offset-2 col-md-offset-2 col-sm-offset-2 main clearfix">
            <form id="nl-form" class="nl-form" action="searchpubs.php" method="post">
            I feel to visit 
            <select id="category" name="category">
                <option value="anywhere" selected>anywhere</option>
                <option value="pub">a pub</option>
                <option value="nightclub">a nightclub</option>
                <option value="brewery">a brewery</option>
                <option value="stripclub">a gentleman's club</option>
            </select>
            <br/>that
            <select id="foodDrink" name="foodDrink">
                <option value="food" selected>serves food</option>
                <option value="drinks">serves drinks only</option>
            </select>
            and has 
            <br/> 
            <select id="extra" name="extra">
                <option value="poolTable" selected>a pool table</option>
                <option value="danceFloor">a dance floor</option>
                <option value="tv">tv's</option>
                <option value="everything">everything</option>
                <option value="anything">anything</option>
            </select>
            . It's within<br>
            <select id="distance" name="distance">
                <option value="anyDistance" selected>any distance</option>
                 <option value="5">5 km</option>
                 <option value="10">10 km</option>
                 <option value="15">15 km</option>
                 <option value="20">20 km</option>
            </select>
            from me<br> and is open
            <select id="hours" name="hours">
                <option value="late" selected>past 12 a.m.</option>
                 <option value="allDay">all day</option>
                 <option value="weekdays">on weekdays</option>
                 <option value="sundays">on sundays</option>
                 <option value="anytime">anytime</option>
            </select>
            <div class="nl-submit-wrap">
                <button class="nl-submit" type="submit">Find Your Pub</button>
            </div>
            <div class="nl-overlay"></div>
            </form>
        </div><!--column-->
    </div><!-- row -->
</div><!--section-two-->
</body>
</html>

searchpubs.php

<?php
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    // error reporting is now turned on

    echo "start<br/>";
    try {
        $mysqli= new mysqli('hostname', 'username', 'password', 'dbname');  // change me please
        if ($mysqli->connect_error) {
            die('Connect Error (' . $mysqli->connect_errno . ') '
                . $mysqli->connect_error);
        }
        echo "I am connected and feel happy.<br/>";
?>
<table>
<?php 
    //http://stackoverflow.com/a/9332766/

    foreach ($_POST as $key => $value) {
        echo "<tr>";
        echo "<td>";
        echo $key;
        echo "</td>";
        echo "<td>";
        echo $value;
        echo "</td>";
        echo "</tr>";
    }


?>
</table>
<?php
        // make necessary mysqli queries by BINDING parameters with prepared statements

        // because even though they are from a drop down box, they can be faked

        // and sql injection can and will occur by some fool out there

        //$stmt->close(); 
        $mysqli->close();
    } catch (mysqli_sql_exception $e) { 
        throw $e; 
    } 
?>

瀏覽器輸出(成功后)

start
I am connected and feel happy.
category    anywhere
foodDrink   drinks
extra   poolTable
distance    10
hours   late

嘗試/捕獲,錯誤

以下是可能出現錯誤之一的輸出結果:

致命錯誤:未捕獲的異常“mysqli_sql_exception”帶有消息“連接嘗試失敗,因為連接方在一段時間后沒有正確響應,或者由於連接的主機未能響應而建立的連接失敗。 ' 在 C:\\Apache24\\htdocs\\searchpubs.php:9 堆棧跟蹤:#0 C:\\Apache24\\htdocs\\searchpubs.php(9): mysqli->mysqli('ibm.com', 'LordBenson', 'billybob ', 'db666') #1 {main} 在第 9 行的 C:\\Apache24\\htdocs\\searchpubs.php 中拋出

所以打開錯誤報告,嘗試/捕獲。 它有你的背。 讓它。

暫無
暫無

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

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