2015-04-18 45 views
0

我在我的網站上有4個複選框的搜索功能。然後將它們粘貼到下一頁,我要查找與複選框的標準相匹配的所有產品。在select語句中有4'ands'

因爲我有4個複選框,我想用4「ANDS」,但我認爲3是最大(?)

我如何解決此得到如此它搜索,看看是否所有的產品都匹配?

HTML表單


<div id = "search"> 
      <form name = search action = "search.php" method = "POST"> 
      <p class = "big"> Refine Menu </p> 
      <hr> 
      <input type = "text" name = "search" placeholder = "Search for an item" size = "12"> 
      <input type = "submit" value = "Go"> 
      <br><br> 
      <input type = "checkbox" name = "vegetarian"> Vegetarian 
      <br><input type = "checkbox" name = "vegan"> Vegan 
      <br><input type = "checkbox" name = "coeliac"> Coeliac 
      <br><input type = "checkbox" name = "nutFree"> Nut free 
     </form> 
     </div> 

PHP


<?php 
session_start(); 
include "connection.php"; 
if(!isset($_SESSION["username"])){ 
    header("Location: login.php"); 
} 

if(isset($_POST["search"])){ 
    $search = $_POST["search"]; 
} 

if(isset($_POST["vegetarian"])){ 
    $vegetarian = 1; 
} 
else{ 
    $vegetarian = NULL; 
} 

if(isset($_POST["vegan"])){ 
    $vegan = 1; 
} 
else{ 
    $vegan = NULL; 
} 

if(isset($_POST["coeliac"])){ 
    $coeliac = 1; 
} 
else{ 
    $coeliac = NULL; 
} 

if(isset($_POST["nutFree"])){ 
    $nutFree = 1; 
} 
else{ 
    $nutFree = NULL; 
} 


$sql = "SELECT * FROM products WHERE vegan = '$vegan' and nutFree = '$nutFree' and vegetarian = '$vegetarian' and coeliac = '$coeliac'"; 
$result = mysqli_query($con, $sql); 


while($row = mysqli_fetch_assoc($result)){ 

    echo $row ["name"]; 

} 

我已經嘗試了一些不同的東西,但我不知道的sql正確的語法。

注:在我的數據庫是否滿足在其上的requierment被保存爲1或0,這就是爲什麼我從改成了「開」或「關」

+2

..我不知道你聽到的地方至多有3個'和'語句,但它是垃圾。嘗試一下。你得到了什麼錯誤?匆匆一瞥,你的陳述看起來很好。你的$ sql字符串在創建後看起來像什麼?您還應該考慮使用準備好的語句和綁定參數來代替字符串連接來構建您的查詢 –

+2

您的SQL查詢是正確的... – edCoder

+0

更正您的表單元素

它是名稱=」搜索「 – Saty

回答

1

不是很大,難以維護鏈if語句,你可以考慮類似如下的東西,這將動態地建立查詢取決於它您需要的字段都在您的形式被檢查的:

<?php 
    $search_fields = array('vegetarian', 'vegan', 'nutFree', 'coeliac', ...); 
    $ands = array('1' => '1'); 

    foreach($search_fields as $req) 
    { 
     if(isset($_POST[$req]) && $_POST[$req] != '') 
     { 
     $ands[$req] = "$req = '1'"; 
     } 
    } 

    $and_part = implode(" AND ", $ands); 
    $query = "select .... from ... WHERE $and_part ... "; 
?> 
0

我設法解決我的問題。當我發佈這個問題時,我錯了,因爲我認爲我的sql語句不工作的原因是因爲有太多的和,我沒有看到,而是我的SQL沒有做我認爲應該的。

這是我改變它或它已設置值或勾選複選框,但總是那些不是或者。

感謝大家的幫忙!

<?php 
session_start(); 
include "connection.php"; 
if(!isset($_SESSION["username"])){ 
    header("Location: login.php"); 
} 

if(isset($_POST["search"])){ 
    $search = $_POST["search"]; 
} 

if(isset($_POST["vegetarian"])){ 
    $vegetarian = 1; 
} 
else{ 
    $vegetarian = " "; 
} 

if(isset($_POST["vegan"])){ 
    $vegan = 1; 
} 
else{ 
    $vegan = " " ; 
} 

if(isset($_POST["coeliac"])){ 
    $coeliac = 1; 
} 
else{ 
    $coeliac = " " ; 
} 

if(isset($_POST["nutFree"])){ 
    $nutFree = 1; 
} 
else{ 
    $nutFree = " "; 
} 


$sql = "SELECT * FROM products WHERE (vegan = '$vegan' or vegan = 1 xor 0) and (nutFree = '$nutFree' or nutFree = 1 xor 0) and (vegetarian = '$vegetarian' or vegetarian = 1 xor 0) and (coeliac = '$coeliac' or coeliac = 1 xor 0)"; 
$result = mysqli_query($con, $sql); 

while($row = mysqli_fetch_assoc($result)){ 
    echo $row ["name"]; 
} 
+0

我認爲你使事情變得複雜而沒有獲得任何東西。查看WHERE語句中的每個括號內的子語句,看看您是否可以證明擁有'xor 0'。我認爲@pala_提供的答案會給您最好的建議,看看它的建議,然後在發現您的要求不同時稍作修改。 –

+0

這是我第一次見到'xor'用於查詢。這裏真的沒有必要 - '1個或0個'總是1 –

0

PHP的NULL沒有意義,當轉換爲字符串(SQL查詢),他們將評估爲空白,您的查詢將看起來像nutFree = '' and vegetarian = '' and coeliac = ''

如果這些字段在數據庫中爲0,那麼必須將變量設置爲0

對於第二種情況,如果它們是數據庫中的NULL,則必須在此更改查詢以及您定義NULL的方式。

首先,那些字符串包裝應該消失。你不需要他們的數字無論如何,這些都應該只包裹字符串:

$sql = "SELECT * FROM products WHERE vegan = $vegan and nutFree = $nutFree and vegetarian = $vegetarian and coeliac = $coeliac"; 

然後代替變量設置爲NULL,你將它們設置爲"NULL"

$nutFree = "NULL"; 

這將使NULL顯示在SQL查詢中,如其預期的那樣。