2017-11-22 5 views
0

derzeit habe ich ein Formular, mit dem Benutzer 3 Eingabefelder ausfüllen können. 3 davon sind Textfelder (Titel, Autor und ISBN) und 1 davon ist eine Auswahlmöglichkeit (Kategorien).Erweiterte Suchfunktion mit PHP

Ich möchte erreichen, dass Benutzer eine beliebige Anzahl der 4 Felder ausfüllen und die respektierten Werte zurückgeben können. Das heißt, wenn Benutzer zwei Eingabefelder ausfüllen, müssen zwei Bedingungen im Backend eingesehen werden. 3 Eingänge gefüllt bedeutet 3 Bedingungen.

Was ich habe currenly ist dies (ein Beispiel, nicht der eigentliche Code selbst):

if($title == $allMyArray["title"]){ 
     array_push($returningResult, $allMyArray); 
    }else if($author == $allMyArray["author"]){ 
     array_push($returningResult, $allMyArray); 
    }else if($ISBN == $allMyArray["ISBN"]){ 
     array_push($returningResult, $allMyArray); 
    }else if($categoreis== $allMyArray["categories"]){ 
     array_push($returningResult, $allMyArray); 
    }else{ 
     echo "nothing"; 
    } 

Dieser Satz von Code funktioniert, wenn ich nur in einem bestimmten Bereich füllen. Zum Beispiel, wenn ich nur die Autoreingabe ausfülle und die anderen 3 Optionen leer lasse, werde ich mit den Werten zurückgeschickt, die ich möchte. Wenn ich jedoch versuche, 2 oder mehr Felder gleichzeitig auszufüllen, ist der zurückgegebene Wert falsch.

Also, wie sonst kann ich mit einer if else-Anweisung kommen, die prüft, welche Felder gefüllt sind, und die Bedingungen richtig auf der Grundlage der eingegebenen Felder setzen?

Vielen Dank für Ihre Hilfe im fortgeschrittenen! Sehr geschätzt! :)

+0

Das macht keinen Sinn, den gleichen Befehl in jeder Bedingung auszuführen. BTW, was "der zurückgegebene Wert ist falsch." meint? Können Sie den zurückgegebenen Wert in der Frage bitte teilen? –

+2

Verwenden Sie 4 'if's, ohne' else' –

+0

Mein Fehler, @Ofir Baruch. Es macht Sinn, weil diese Funktion tatsächlich unter einer anderen Funktion ist. Also, was das Ganze macht, ist zuerst, es wird alle Datensätze in der Datenbank abrufen. Dann wird es jeden Datensatz durchlaufen und sehen, ob es übereinstimmt. Wenn es übereinstimmt, werden die Daten in ein resultArray übertragen, das ich später für Sitzungen verwenden werde. Daher werden alle Bedingungen, die erfüllt sind, dazu führen, dass Daten in das resultArray übertragen werden. –

Antwort

1

Ändern auf unter Code funktioniert. Das Problem ist, wenn Sie ELSE verwenden, begrenzen Sie Ihre bedingten Anweisungen nur auf ein Ergebnis.

Optional können Sie die Anweisung switch/case verwenden, wenn Sie IF verschmutzt finden.

Aber es kann Duplikate erzeugen, also müssen Sie dies ausarbeiten. (Ich weiß nicht, Ihren Code, es ist nur eine Annahme)

$atLeast1Result = false; 
if($title == $allMyArray["title"]){ 
    array_push($returningResult, $allMyArray); 
    $atLeast1Result = true; 
} 
if($author == $allMyArray["author"]){ 
    array_push($returningResult, $allMyArray); 
    $atLeast1Result = true; 
} 
if($ISBN == $allMyArray["ISBN"]){ 
    array_push($returningResult, $allMyArray); 
    $atLeast1Result = true; 
} 
if($categoreis== $allMyArray["categories"]){ 
    array_push($returningResult, $allMyArray); 
    $atLeast1Result = true; 
} 
if(!$atLeast1Result) { 
    echo "nothing"; 
} else { 
    $returningResult = array_unique($returningResult); // this might now work on all versions, as i dont know what this array is. 
} 
+0

yup, ich habe das versucht, aber ich laufe in Duplikate, wie wir sprechen –

+0

Ich habe den Code aktualisiert, um Duplikate zu entfernen ... aber das wird nicht auf allen Szenarien funktionieren (ich weiß nicht, was $ allMyArray ist). versuchen Sie es und lassen Sie uns wissen, ob es funktioniert hat. –

+0

ahhh Ich habe es selbst getestet, aber ich habe immer noch ein paar Fehler. Ich sollte versuchen, es zuerst zu debuggen, dann werde ich zu dir zurückkommen. Danke für Ihre Hilfe! –