Liste, SELECT



  • Grüße,

    Ich suche eine bessere, zuverlässigere Lösung für folgendes Problem :

    Ich habe 2 Dateien.
    1 Formulardatei, in der der Nutzer Länder per checkbox auswählen kann
    1 Verarbeitungsdatei, in der entsprechend der ausgewählten Länder Datensätze ausgegeben werden

    formular.html :

    <form method="POST" action="print.php">
     <input type="checkbox" name="land1" value="Deutschland">Deutschland
     <input type="checkbox" name="land2" value="Australien">Australien
     <input type="checkbox" name="land3" value="Thailand">Thailand
     <input type="checkbox" name="land4" value="Niederlande">Niederlande
     ...
    </form>
    

    print.php :

    $land1 = $_POST["land1"];
    $land2 = $_POST["land2"];
    $land3 = $_POST["land3"];
    $land4 = $_POST["land4"];
    
    $sql = "SELECT * FROM Waren WHERE land IN ('$land1', '$land2', '$land3',
           '$land4')";
    

    Ich brauche eine bessere Lösung (Alternative zur Lösung mit IN())



  • Was meinst du mit besser/zuverlässiger?

    Du erklärst nicht wo genau bei deiner Lösung das Problem liegt.



  • D. h. Wie könnte ich anstelle mit WHERE IN(),
    die SQL-Abfrage zusammensetzen. So das Datensätze
    entsprechend der ausgewählten checkboxen gezeigt
    werden.



  • Es gibt die Möglichkeit den Namen der Checkbochen nicht mit land1 zu belegen sondern land[1]. Dann hast du die Daten schonmal in einem Array aus dem du die Abfrage zusammenbauen kannst.

    $land = $_POST['land'];
    $num = count($land);
    $or = "";
    
    for($i=0;$i<$num;++$i)
    {
        if($i>0)
        { $or .= "|| "; }
    
        $or .= "land = '".$land[$i]."'";
    }
    
    $query = "
    SELECT *
    FROM Waren
    WHERE ".$or."
    ";
    

    So ungefähr.

    Bitte vergiss nicht die Variablen die du bekommst zu filtern, um SQL-Injections vorzubeugen.

    Viele Grüße,
    Daniel


Anmelden zum Antworten