2016-03-27 7 views
2

ich binden bin zu filtern und Anzeigen von Daten aus MySQL mit PHP unten sind meine Eingangsfiltermehr Produkte Filter von MySQL-Daten mit PHP

<form id="search_form"> 
      <div class="well"> 
       <h4 class="text-info">Search by Size</h4> 
       <input value="32" class="sort_rang" name="size[]" value="New" type="checkbox"> 32 
       <input value="36" class="sort_rang" name="size[]" value="fashion" type="checkbox"> 36 
       <input value="38" class="sort_rang" name="size[]" value="New" type="checkbox"> 38 
      </div> 

      <div class="well"> 
       <h4 class="text-info">Search by price</h4> 
       <input value="950" class="sort_rangn" name="price[]" value="New" type="checkbox"> 950 
       <input value="1024" class="sort_rangn" name="price[]" value="fashion" type="checkbox"> 1024 
       <input value="500" class="sort_rangn" name="price[]" value="New" type="checkbox"> 500 
      </div> 
      </form> 

jetzt haben wir zwei Filter Größe und Preis sowohl in Array und sucht genommen werden in mysql

$sql="SELECT * FROM products"; 
    extract($_POST); 

    if(isset($size)) 
     $sql.=" WHERE size IN (".implode(',', $size).")"; 

    if(isset($price)) 

     $sql.=" WHERE (price IN (".implode(',', $price)."))"; 

    $all_row=$db->query($sql); 

seine Arbeit gut, aber für nur eine Bedingung entweder Größe oder Preis arbeiten, und ich bin mit einem Tabellennamen Produkten

+0

Haben Sie überprüft, dass sowohl 'size' als auch' price' gleichzeitig gesetzt sind? – 1000111

+0

Ich versuchte AND und OR, aber nicht funktioniert, ich denke, es ist falsch platziert –

+0

Sie haben meinen Punkt nicht bekommen. okay sag mir, hast du einen Fehler bekommen? – 1000111

Antwort

2

Sie den folgenden Code versuchen können, Schnipsel:

$sql="SELECT * FROM products"; 
    extract($_POST); 

    if(isset($size) && isset($price)) 
     $sql.=" WHERE size IN (".implode(',', $size).") OR price IN (".implode(',', $price).")"; 
    else if(isset($size)) 
     $sql.=" WHERE size IN (".implode(',', $size).")"; 

    else if(isset($price)) 

     $sql.=" WHERE (price IN (".implode(',', $price)."))"; 

    $all_row=$db->query($sql); 

Die Filterung ist entweder für Größe oder Preis erfolgreich. Wenn Sie beide übereinstimmen soll verwenden AND statt OR in der ersten if Anweisung

Hinweis: In Ihrem Code, wenn beide Variablen in einem Fall eingestellt sind, dann werden Sie Syntaxfehler erhalten. Hier kommt die Verwendung der IF ELSEIF Kette.

Angenommen, die Variablen $price und $size sind festgelegt. Dann wird Ihre $sql Variable von den beiden IF Aussagen beeinflusst. Dann wird Ihr endgültiges erzeugtes query zwei where-Klauseln haben, die einen Fehler für schlechte Syntax erzeugen werden. Ihre erzeugte Abfrage wird mehr oder weniger aussehen wie unten:

SELECT .... WHERE size IN (....) WHERE price IN (...) ... (BAD SYNTAX)

+0

ist das ein richtiger Weg? Ich weiß nicht, aber kein Fehler, es funktioniert gut. Rost danke. –

+0

ja. Ich denke schon. – 1000111

+0

Ich verstehe Sie nicht Hinweis –

0
$sql="SELECT * FROM products"; 
extract($_POST); 

if(isset($size) && isset($price)) 
    $sql.=" WHERE size IN (".implode(',', $size).") AND price IN (".implode(',', $price).")"; 
else if(isset($size)) 
    $sql.=" WHERE size IN (".implode(',', $size).")"; 

else if(isset($price)) 

    $sql.=" WHERE (price IN (".implode(',', $price)."))"; 

$all_row=$db->query($sql); 

Verwenden Sie diesen Code für mich arbeitet.