2017-04-17 76 views
0

選擇我有一個從我產生提交表單的下拉值到另一頁之後的數據。選擇所有值,如果不從下拉列表中

<form method="post" action="details.php"> 

<select name="Station"> 
<option value="All">All</option> 
<option value="Home">Home</option> 
<option value="Office">Office</option> 
</select> 

<select name="Section"> 
<option value="All">All</option> 
<option value="Living">Living Room</option> 
<option value="Dinning">Dinning Room</option> 
<option value="Bathroom">Bathroom</option> 
</select> 

<input type="submit"> 
</form> 

基於上述形式上我有列在MySQL數據庫中與我所提到的值。

如果我首頁浴室選擇它工作正常,但如果我從選擇所有浴室然後我得到一個錯誤因爲我沒有與價值列所有命名的記錄。相反,我有價值觀首頁辦公室記錄(由所有我的意思是,這兩個首頁辦公室應生成)。

我的問題是當我從下拉列表中選擇全部時,如何生成兩個站的詳細信息。

在我details.php的網頁我有:

$execItems = $conn->query("SELECT StationName, SectionName FROM profiles WHERE Station = '$Station' AND Section = '$Section'"); 

,如果我從選擇首頁辦公室它工作正常,但如果我選擇所有然後它不會工作,因爲那裏是的所有名稱中列中沒有值(由所有我的意思是,這兩個首頁辦公室應選擇)。

+0

您的代碼很容易受到[** SQL注入攻擊**](https://en.wikipedia.org/wiki/SQL_injection)。你應該使用[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)或[** PDO **](https://secure.php.net/ manual/en/pdo.prepared-statements.php)準備帶有綁定參數的語句,如[**這篇文章**]所述(https://stackoverflow.com/questions/60174/how-can-i-prevent-sql步噴射功能於PHP)。 –

+0

謝謝,我現在只是爲了學習目的而使用它,之後我將使用它們。順便說一下,你知道我的問題的任何解決方案。 :) –

+0

如果提供值,只包含where子句 – Strawberry

回答

0

雖然動態編寫的WHERE子句是更好的方法,但快速解決方法是調整WHERE子句以從表單中傳入ALL

WHERE (station = '$Station' OR '$Station' = 'ALL') AND (Section = '$Section' OR '$Section' = 'ALL') 

如果有人是選擇,對於station形式值ALL併爲Section形式值Dining,那麼這個WHERE子句變爲:

WHERE (station = 'ALL' or 'ALL' = 'ALL') AND (Section = 'Dining' or 'Dining' = All) 

這第一或將產生一個TRUE因爲'All' = 'All'如果正在測試的記錄的section值爲Dining,則第二個將返回TRUE

+0

有一個在'Station'列中沒有'All'值檢索數據例如:'SELECT StationName從配置文件WHERE Station ='All''相反,我有'Home'和'Office'的值,所以我需要當從下拉菜單中選擇All,然後選擇'Home'和'Office'行應該被檢索。 –

+0

我已更新此答案,以更好地解釋我在評論中所談論的內容。傳遞硬編碼的值以供數據庫測試是有點奇怪的,這就是爲什麼動態生成的語句是更好的選擇,但這也足夠了。 – JNevill

0

您需要根據輸入構建dynamic where clause這樣

<?php 

$where ="1=1"; 

if(isset($_POST['Station']) && !empty($_POST['Station']) && $_POST['Station'] !='All') 
    { 
     $where .=" and station = '$Station'"; 
    } 

    if(isset($_POST['Section']) && !empty($_POST['Section']) && $_POST['Section'] !='All') 
    { 
     $where .=" and section= '$section'"; 
    } 

    "SELECT StationName, SectionName FROM profiles WHERE".$where 
+0

我用它是這樣的:[鏈接](https://jsfiddle.net/4sgh3co4/),但我得到錯誤'致命的錯誤:調用成員函數fetch_array()在非線對象93' while($ infoItems = $ execItems-> fetch_array()){' –

+0

echo「SELECT Station,Section FROM profiles WHERE」。$ where;出口;在執行之前執行此操作以知道您的查詢@Ahmad中的錯誤 – JYoThI

相關問題