2013-03-29 49 views
0

在此先感謝您檢查此問題。MySQL/PHP - 用戶過濾器變量返回所有值

我有一系列HTML選擇元素,用戶可以在其中定義他們想要從MySQL數據庫返回的數據。每個選項都存儲在一個變量中。某些選項使用戶能夠選擇「No Preference」,在這種情況下,sql語句需要接受一個變量,以允許它返回該特定列的所有字段。

我使用PHP作爲參考。

這是存在還是代碼設置不佳?目前SQL語句接受這種格式

AND `operationalTier1`='$userOps' 
AND `modelName`='$userEndpoint' 
AND `status`='$userStatus' 
AND `sourceName`='$userSource' 
AND `metSLA`='$userSLA' 

的選擇,爲用戶從選擇的變量是這種格式

<h3>Data Filters</h3> 
      <p>Case Created</p> 
      <form action="index.php" method="post"> 
      <p>Ops Tier 1</p> 
      <select name="ops_1_select"> 
       <option>No Preference</option> 
       <option>Add/Create</option> 
       <option>Delete/Remove</option> 
       <option>Fix</option> 
       <option>Inform</option> 
      </select> 

的選項設置爲可變

if ($_POST['ops_1_select'] = "No Preference") 
      { 
       $userOps= XXXX 
      } else 
      { 
       $userOps= $_POST['ops_1_select']; 
      } 

所以,如果用戶選擇「無偏好」,我需要該變量來存儲將返回數據庫中的所有操作層的東西,這將取代XXXX

+0

你能發表你已經寫過的代碼嗎? – zajd

+0

它與許多其他元素混合在一起,但我會嘗試並帶出關鍵部分 – user2217666

回答

0

在你的if語句中,你應該使用等號運算符(==)而不是賦值運算符(=)。如果語句總是結果爲真,它將設置您選擇的$ _POST鍵的值。更改if ($_POST['ops_1_select'] = "No Preference")if ($_POST['ops_1_select'] == "No Preference")

前:

if ($_POST['ops_1_select'] = "No Preference") 
      { 
       $userOps= XXXX 
      } else 
      { 
       $userOps= $_POST['ops_1_select']; 
      } 

後:

if ($_POST['ops_1_select'] == "No Preference") { 
    $userOps = "XXXX"; 
} else { 
    $userOps = $_POST['ops_1_select']; 
} 

你可以找到一些更多的信息here


因此,基於這樣的回答您的意見,我我會分享一些我認爲可能有用的代碼:

$fields = array('field1', 'field2', 'field3'); 
$query = 'text'; // should be everything up until your first WHERE 

for ($fields as $key => $val) { 
    if ($_POST[$val] == 'No Preference') { 
     // IS NOT NULL will return true as long as the field is set 
     $and = $val . ' IS NOT NULL'; 
    } else { 
     $and = $val . ' = "' . $_POST[$val] . '"'; 
    } 
    $query = $query . $and . ' AND '; 
} 

// Remove the trailing AND from $query, add anything else you need, run query 

還有一些筆記,驗證您的輸入數據!如果你不使用PDO/mysqli或其他數據庫抽象引擎,現在是時候開始了。正如此代碼非常容易受到SQL注入的影響。退房this question

+0

感謝你的採訪,但是你知道我可以傳遞什麼樣的價值,只返回「沒有偏好的情況下的所有值被選中「 – user2217666

+0

爲什麼你想要通過所有的值?當你提取$ _POST數據後,你應該可以創建另一個if語句,如'if($ userOps ==「XXXX」){//運行不關心其偏好的查詢} else {//運行查詢關心$ userOps}' – zajd

+0

考慮到有多個用戶選擇過濾這將意味着列出可能性和過濾組合 – user2217666

0

我會使用LIKE insted =並添加一個%

AND `operationalTier1` LIKE '$userOps' 

和:

$userOps= '%'; 

或者你可以從你的SQL語句時No Preference設置刪除的條件AND operationalTier1='$userOps'

+0

感謝Marcel,與此相關的問題是,大約有8個用戶選擇,因此如何確定他們是否已選擇選項,而不爲每個可能的組合創建數百個sql語句 – user2217666

+0

您也可以將'value =「%」'添加到select選項。刪除if語句。但我真的不明白你的問題。 –

+0

這很難解釋我將不得不向你展示代碼,但它總共有數百行代碼 – user2217666

相關問題