2016-07-25 10 views
2

Ich habe ein paar Tage begonnen, PHP zu studieren, und ich habe den folgenden Code, der 3 Kontrollkästchen und 3 Dropdown-Listen entsprechend macht (könnte mehr sein, das ist nicht das Problem).IF-Anweisung innerhalb FOR Loop gibt falsche Ergebnisse zurück

Die Idee ist, dass eine benutzerdefinierte MySQL-Abfragezeichenfolge mit mehr als einer Bedingung erstellt wird. Dropdown-Listen enthalten Datenbankfelder. Der Benutzer entscheidet, wie viele benutzerdefinierte Bedingungen hinzugefügt werden, indem er auf diese Kontrollkästchen klickt und einen Wert in der Dropdown-Liste festlegt.

Nachdem Sie auf die Übergabeschaltfläche für jedes angekreuzte Kontrollkästchen geklickt haben und ein Wert aus der entsprechenden Dropdown-Box festgelegt wurde, wird der Wert aus der Dropdown-Liste gelesen. Der Code funktioniert und gibt nur dann die korrekten Ergebnisse (Werte aus Dropdown-Listen) zurück, wenn das Kontrollkästchen ALLE oder nur das erste Kontrollkästchen aktiviert ist. Wenn beispielsweise das zweite oder dritte Kontrollkästchen aktiviert ist und ein Wert für die Dropdown-Liste festgelegt ist, ignoriert die if-Anweisung dies. Offensichtlich ist etwas falsch mit der if-Anweisung (in bestimmten & & Zustand) innerhalb der for-Schleife, aber kann es beheben ?. Außerdem, wenn ich nur eine Bedingung in der if-Anweisung habe, sind die Ergebnisse korrekt!

<?php 
    echo <<<_query 
    <form action="check_array.php" method="post"> 
    query1<input type="checkbox" name="query[]" value="query0"> 
    query2<input type="checkbox" name="query[]" value="query1"> 
    query3<input type="checkbox" name="query[]" value="query2"> 

    fields0 
    <select name="fields[]"> 
    <option selected value="null">Select field</option> 
    <option value="author">author</option> 
    <option value="title">title</option> 
    <option value="category">category</option> 
    </select> 

    fields1 
    <select name="fields[]"> 
    <option selected value="null">Select field</option> 
    <option value="author">author</option> 
    <option value="title">title</option> 
    <option value="category">category</option> 
    </select> 

    fields2 
    <select name="fields[]"> 
    <option selected value="null">Select field</option> 
    <option value="author">author</option> 
    <option value="title">title</option> 
    <option value="category">category</option></form> 
    </select> 

    <input type="submit" name="submit" value="check"></form> 
    _query; 

    for ($i=0;$i<3;++$i) 
    { 
     if (isset($_POST["query"][$i]) && $_POST["fields"][$i] !="null") 
     { 
      echo $_POST["query"][$i] ."<br>".$_POST["fields"][$i]."<br>"; 
     } 
    }  
?> 

Antwort

1

Der Browser einreichen nichts für Kontrollkästchen, die nicht markiert sind und so die Array-Indizes für query[] werden zu jeder Zeit gibt es eine Lücke in der Sequenz der ausgewählten Kontrollkästchen abgeworfen. Sie können dies beheben, indem Sie die Array-Indizes für Ihre Kontrollkästchen angeben.

ändern

query1<input type="checkbox" name="query[]" value="query0"> 
query2<input type="checkbox" name="query[]" value="query1"> 
query3<input type="checkbox" name="query[]" value="query2"> 

zu

query1<input type="checkbox" name="query[0]" value="query0"> 
query2<input type="checkbox" name="query[1]" value="query1"> 
query3<input type="checkbox" name="query[2]" value="query2"> 
+0

Asaph: Vielen Dank für Ihre schnelle und genaue Antwort. Dies behebt das Problem! Sehr gut zu wissen. –

+1

@georgepgs Gern geschehen. Bitte vergessen Sie nicht, diese Antwort als korrekt zu markieren, indem Sie auf das Häkchen links neben der Antwort klicken. Außerdem würde ich eine Aufwertung auch schätzen. – Asaph

+0

Mein Ruf ist immer noch zu niedrig, um zu zählen, aber ich sage, dass er aufgezeichnet wurde –