2016-09-16 4 views
1

Ich versuche, eine Multi-Option-Suche zu erstellen. Ich habe überall hingeschaut und finde keine passende Lösung, obwohl so viele Webseiten das haben. So habe ich mein HTML-Formular (die ein wenig nicht zu langweilen abgeschnitten Ihnen):PHP Mysqli Erweiterte Suche (Multi-Optionen)

<form method="get" id="searchForm" name="searchForm" action="search-text.php" > 
<select name="make" id="make"> 
<option value="">ANY MAKE</option> 
<option value="make1">MAKE1</option> 
<option value="make2">MAKE2</option> 
</select> 
<select name="model" id="model"> 
<option value="">ANY MODEL</option> 
<option value="model1">MODEL1</option> 
<option value="model2">MODEL2</option>     
</select> 
<select name="minprice" id="minprice"> 
<option value="">ANY PRICE</option> 
<option value="1">1</option> 
<option value="2">2</option>     
</select> 
<select name="maxprice" id="maxprice"> 
<option value="">ANY PRICE</option> 
<option value="1">1</option> 
<option value="2">2</option>     
</select> 
</form> 

Dann auf der search.php Seite, ich kann alle Variablen erhalten, aber ich bin kämpfen, um die SELECT-Abfrage zu schreiben. Ich habe versucht, UND zu verwenden, aber das funktioniert natürlich nur, wenn alle Variablen gesetzt sind. Ich habe insgesamt 8 Variablen, die eingestellt werden können. Ich habe sogar versucht, etwas wie das unten zu tun, aber eindeutig nicht den Weg zu gehen.

SELECT * FROM search data where if(isset($make)) AND if(isset($model)) etc etc 

Vielen Dank alle im Voraus für Ihre Hilfe. Jeder Rat würde sehr geschätzt werden. Ich versuche so viel wie ich kann zu lernen, aber ich bin wirklich mit diesem fest.

UPDATE: So habe ich einige kreativen Experimentieren getan und ich fühle, dass ich in der Nähe bin, kann einfach nicht daran zu arbeiten:

$query = array(); 
if (!empty($_GET['vType'])) { 
$query[] = "vType='$vType'"; 
} 
if (!empty($_GET['make'])) { 
$query[] = "make='$make'"; 
} 
if (!empty($model)) { 
$query[] = "model='$model'"; 
} 
if (!empty($yearfrom)) { 
$query[] = "minyear >'$yearfrom'"; 
} 
if (!empty($yearto)) { 
$query[] = "maxyear>'$yearto'"; 
} 
if (!empty($minprice)) { 
$query[] = "minPrice >'$minprice'"; 
} 
if (!empty($maxprice)) { 
$query[] = "maxyear >'$maxprice'"; 
} 
if (!empty($location)) { 
$query[] = "location='$location'"; 
} 
if (empty($query)){ 
$where = "WHERE"; 
}else{ 
$where = ""; 
} 
$query = implode(' AND ', $query); 
$sql = "SELECT * FROM searchdata $where $query"; 

$result = mysqli_query($conDB, $sql); 
if (mysqli_num_rows($result) === 0) { 
echo 'Nothing Found'; 
} 
while ($row = $result->fetch_assoc()) { 
echo $row['vType']; 

Ich bin sicher, dass ich etwas sehr falsch hier mache. Danke Jungs Ich schätze deine Hilfe wirklich

+0

tun Sie auf eine Schaltfläche einreichen? –

+0

Bitte sagen Sie speziell, wie Sie Ihre Anfrage einrahmen möchten! – Jagrati

Antwort

0

dachte einfach aus Jungs nach vielen vielen Stunden tun können. Ich dachte, ich würde den Code für Sie posten, wenn jemand anderes mit denselben Problemen konfrontiert ist. Nochmals vielen Dank für Ihre Antworten: $ query = array();

if (!empty($_GET['vType'])) { 
$vType = $_GET['vType']; 
$query[] = "vType='$vType'"; 
} 
if (!empty($_GET['make'])) { 
$make = $_GET['make']; 
$query[] = "make='$make'"; 
} 
if (!empty($_GET['model'])) { 
$model = $_GET['model']; 
$query[] = "model='$model'"; 
} 
if (!empty($_GET['minyear'])) { 
$yearfrom = $_GET['minyear']; 
$query[] = "years>='$yearfrom'"; 
} 
if (!empty($_GET['maxyear'])) { 
$yearto = $_GET['maxyear']; 
$query[] = "years<='$yearto'"; 
} 
if (!empty($_GET['minPrice'])) { 
$minprice = $_GET['minPrice']; 
$query[] = "vPrice>='$minprice'"; 
} 
if (!empty($_GET['maxPrice'])) { 
$maxprice = $_GET['maxPrice']; 
$query[] = "vPrice<='$maxprice'"; 
} 
if (!empty($_GET['location'])) { 
$location = $_GET['location']; 
$query[] = "location='$location'"; 
} 
if (!empty($query)){ 
$where = "WHERE"; 
}else{ 
$where = ""; 
} 

$searchquery = implode(' AND ', $query); 
$getsearch = "SELECT * FROM searchdata $where $searchquery"; 

$ressearch = mysqli_query($conDB, $getsearch); 
if (mysqli_num_rows($ressearch) === 0) { 
echo 'Nothing Found'; 
}else{ 
while($r = $ressearch->fetch_assoc()) { 
//echo results here... 
} 

Thanks everyone :)

+0

Ihr Code ist anfällig für SQL-Injektion –

0

Du kannst isset mit dem PHP-Skript verwenden und deine Anfrage einrahmen. Etwas wie folgt aus:

$query = "select * search_data where"; 

if(isset($make) && isset($model)){ 
    //do something 
    $query .= "something you want to do "; 
} 
+0

Danke. Ich habe so etwas gedacht (und probiert), aber es gibt so viele Möglichkeiten, wie ein Besucher suchen kann (nur make, make und location, location und maxprice, etc etc). Vielleicht gibt es eine Möglichkeit, alle Variablen zu setzen und Erstellen Sie einen String aus dem Array? –

+0

@ FelipeFernándezSánchez gibt es so viele Möglichkeiten, die ein Besucher suchen könnte - einige Bedingungen erfordern strikte Vergleich, einige Teilstringsuche und einige mehr oder weniger Vergleich benötigen und für einige Sie eine Auswahl aus einem Satz benötigen von Array, dass Sie alle diese Informationen halten? –

+0

Was ist damit: Wenn ich alle Variablen zuerst mit If (iset ($ _ GET ['make']; $ query = "make = $ make") dann irgendwie implodieren und explodieren mit AND? Also wäre die letzte Abfrage SELECT * FROM Suchdaten WHERE $ make? –

1

Sie sehen auch, dass es

$sql = "select * from table_name where column = $param1" 

if(isset($param2)) 
{ 
$sql=. "and column2 = $param2" 
}` 
if(isset($param3)) 
{ 
$sql=. "and column3 = $param3" 
}` 
if(isset($param4)) 
{ 
$sql=. "and column4 = $param4" 
}` 
+0

Wie unterscheidet es sich von der anderen Antwort? –

+0

meine params sind diff – Ashish