Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Mehrere Select Form Werte in einem Submit

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Mehrere Select Form Werte in einem Submit

    Hallo Zusammen,

    Ich habe drei Selectfelder die beim Abschicken jeweils einzeln dynamisch meine SQL Abfrage ändern. Nun würde ich gerne die Selectfelder so zusammenfassen das wenn ich in den Feldern einen Wert wähle, erst zum Schluss meine Abfrage durch die Formwerte generiert wird. Wie eine Art Kriterienfilter über die Selectfelder.. Ich glaube ich kann in einem Form ja nur einen zusammenhängenden Wert speichern und müsste den dann wieder aufsplitten für die dynamische Abfrage. Gibt es da einen einfache elegante Lösung oder muss ich meinen Code komplett zerrupfen ? Wo soll ich anfangen an der Select SQL Abfrage oder den Selectfeldern ? Hier mal Code zur Veranschaulichung

    Hier die Selectfelder

    PHP-Code:
    <?php

    include 'wahl.php';

    echo 
    "<table border='0' width='100%' CELLSPACING='5'>";

    echo 
    "<th>";
    echo 
    "<form method='post' action='".$_SERVER['PHP_SELF']."'>";
    echo 
    "<input style='width:150px' type='text' name='search' input type='submit' value='Suchen ?'>";
    echo 
    "<input type='submit' value='OK'>";
    echo 
    "</form>";
    echo 
    "</th>";

    echo 
    "<th>";
    echo 
    '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';
    echo 
    '<select style="width:100px" name="stadt">';
    foreach(
    $orte as $key => $stadt)
    {
      echo 
    '<option value="' $key '">' $stadt '</option>';
    }
    echo 
    '</select>';
      
    '<input type="submit" value="OK"/>' .
      
    '</form>';
    echo 
    "</th>";

    echo 
    "<th>";
    echo 
    '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';
    echo 
    '<select style="width:100px" name="hause">';
    foreach(
    $bauwerk as $baukey => $hausen)
    {
      echo 
    '<option value="' $baukey '">' $hausen '</option>';
    }
    echo 
    '</select>' .
      
    '<input type="submit" value="OK"/>' .
      
    '</form>';
    echo 
    "</th>";

    echo 
    "<th>";
    echo 
    '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';
    echo 
    '<select style="width:100px" name="abteilunge">';
    foreach(
    $abteil as $grukey => $gruppen)
    {
      echo 
    '<option value="' $grukey '">' $gruppen '</option>';
    }
    echo 
    '</select>' .
      
    '<input type="submit" value="OK"/>' .
      
    '</form>';
    echo 
    "</th>";

    echo 
    "<th>";
    echo 
    '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';
    echo 
    '<select style="width:100px" name="abteilunge2">';
    foreach(
    $abteil2 as $grukey2 => $gruppen2)
    {
      echo 
    '<option value="' $grukey2 '">' $gruppen2 '</option>';
    }
    echo 
    '</select>' .
      
    '<input type="submit" value="OK"/>' .
      
    '</form>';
    echo 
    "</th>";

    echo 
    "<th>";
    echo 
    "<form method='post' action='".$_SERVER['PHP_SELF']."'>";
    echo 
    "<input type='submit' value='Alle Anzeigen'>";
    echo 
    "</form>";
    echo 
    "</th>";

    echo 
    "</table>";
    ?>
    Und Hier die SQL Abfrage

    PHP-Code:
    <?php
    include 'wahl.php';

    $sql=" SELECT * FROM  telefonbuch ";

    if( isset(
    $_POST['stadt'] ) )
    {
      
    $stadtKey intval$_POST['stadt'] );
      
    $hausKey intval$_POST['hause'] );
      
    $sql.=" WHERE ";
      
    $sql.="ort = '"$orte$stadtKey ] ."' ";
      
    $sql.=" AND ";
      
    $sql.=" haus = '"$bauwerk$hausKey ] ."' ";
    }

    if( isset(
    $_POST['hause'] ) )
    {
      
    $hausKey intval$_POST['hause'] );
      
    $sql.=" WHERE ";
      
    $sql.=" haus = '"$bauwerk$hausKey ] ."' ";
    }

    if( isset(
    $_POST['abteilunge'] ) )
    {
      
    $gruppenKey intval$_POST['abteilunge'] );
      
    $sql.=" WHERE ";
      
    $sql.=" abteilung = '"$abteil$gruppenKey ] ."' ";
    }

    if( isset(
    $_POST['abteilunge2'] ) )
    {
      
    $gruppenKey2 intval$_POST['abteilunge2'] );
      
    $sql.=" WHERE ";
      
    $sql.=" abteilung = '"$abteil2$gruppenKey2 ] ."' ";
    }

    if( isset(
    $_POST['search'] ) )
    {
      
    $suche $_POST['search'];;
      
    $sql.=" WHERE name LIKE '"$suche ."'";
      
    $sql.=" OR vorname LIKE '"$suche ."'";
      
    $sql.=" OR telefon LIKE '"$suche ."'";
      
    $sql.=" OR mobil LIKE '"$suche ."'";
      
    $sql.=" OR email LIKE '"$suche ."'";
      
    $sql.=" OR ort LIKE '"$suche ."'";
      
    $sql.=" OR haus LIKE '"$suche ."'";
      
    $sql.=" OR abteilung LIKE '"$suche ."'";
      
    $sql.=" OR etage LIKE '"$suche ."'";
      
    $sql.=" OR position LIKE '"$suche ."'";
    }

    $sql.=" ORDER BY ort, haus, etage, name";

    include 
    'db_data.php';

    echo 
    "<table id='tabelle_ausgabe' border='1' width='100%'>";
    echo 
    "<th>Name</th><th>Vorname</th><th>Telefon</th><th>Mobil</th><th>Email</th><th>Ort</th><th>Haus</th><th>Abteilung</th><th>Etage</th><th>Position</th>";

    try {
      
    $db_verbindung = new PDO('mysql:host=localhost;dbname=tel'$db_name$db_passwort,
      array(
    PDO::ATTR_PERSISTENT => true));
      
    $db_verbindung->exec("SET CHARACTER SET utf8");

    foreach (
    $db_verbindung->query($sql) as $ausgabe)

    {
        echo 
    '<tr>';
        echo 
    '<div class="name"><td>'.$ausgabe['name'].'</td></div>';
        echo 
    '<div class="vorname"><td>'.$ausgabe['vorname'].'</td></div>';
        echo 
    '<div class="telefon"><td>'.$ausgabe['telefon'].'</td></div>';
        echo 
    '<div class="mobil"><td>'.$ausgabe['mobil'].'</td></div>';
        echo 
    '<div class="email"><td>'.$ausgabe['email'].'</td></div>';
        echo 
    '<div class="ort"><td>'.$ausgabe['ort'].'</td></div>';
        echo 
    '<div class="haus"><td>'.$ausgabe['haus'].'</td></div>';
        echo 
    '<div class="abteilung"><td>'.$ausgabe['abteilung'].'</td></div>';
        echo 
    '<div class="etage"><td>'.$ausgabe['etage'].'</td></div>';
        echo 
    '<div class="position"><td>'.$ausgabe['position'].'</td></div>';
        echo 
    '</tr>';
    }
    echo 
    "</table>";
    }
    catch (
    PDOException $db_fehler) {
      echo 
    "Datenbankfehler: Die Daten konnten nicht gelesen werden.";
      die();
    }

    $db_verbindung null;
    ?>
    Wäre für Denkanstösse dankbar
    LG re3ni

  • #2
    Du kannst in einem <form> mehr als einen Wert übertragen, ansonsten wären das ja keine wirklichen Formulare und das <form>-Tag wäre überflüssig.


    MFG Connar

    Kommentar


    • #3
      Ja habs bemerkt als ich die überflüssigen inputs und /forms rausgenommen und am ende echos gesetzt habe, der Fehler kam von der SQL Abfrage die im ifset jetzt nicht mehr passt. Bin irgendwie komplett konfus weil ich nicht weiss wie ich die SQL Abfrage aufbauen soll, das wird so ein And und OR gestrüp. Da ja entweder einer der Werte oder mehrere Werte die Abfrage beeinflussen .. oO

      Es sollte so eine $sql.=" WHERE OR AND ";verknüpfung geben.

      Kommentar


      • #4
        Bau deinen WHERE-Teil getrennt vom restlichen SQL-Statement auf, dann brauchst du das am Ende nur noch anhängen.
        Aber was das "And und OR gestrüp" angeht, gebe ich dir Recht. Wenn du mehrere Teile verknüpfen willst muss es das ja aber auch du solltest dir aber auf jeden Fall überlegen, was in den verschiedenen Fällen passieren soll. Zum Beispiel, wenn sowohl hause (das e eigentlich Absicht?) und search angegeben sind. Willst du dann, dass es

        Code:
        haus = $_POST["hause"] AND (dieGanzenSearchOptionen)
        ist oder eher

        Code:
        haus = $_POST["hause"] OR (dieGanzenSearchOptionen)
        ? (natürlich jeweils dieGanzenSearchOptionen ohne das haus.


        MFG Connar

        Kommentar


        • #5
          Ja "sowohl" als "auch" leider .. hause ist beabsichtigt, irgendwo im code hab ich haus bereits vergeben. Ein weiteres Problem ist mir aufgefallen, da ich ja jetzt nur ein Form habe, und meine Selectfelder mit foreach array werten aus der wahl.php geholt werden, habe ich jedesmal einen wert für die ifset teile. Ich vermute eine lange Verschachtelung mit einem IF Operator könnte die Lösung sein, mir aber nicht sicher und kaum SQL verziert. Dynamische Abfragen haben es halt echt in sich... *Kopfweh*..

          Kommentar


          • #6
            Soll ich dir was sagen: Genau das macht meiner Meinung nach den Spaß am Programmieren aus

            Einfach mal dran bleiben und dich versuchen. Wenn es dann nicht klappen sollte, kannst du uns ja zeigen, was du hinbekommen hast und dann basteln wir weiter zusammen dran


            MFG Connar

            Kommentar


            • #7
              Oh man da hätt ich auch früher drauf kommen können, habs gelöst bekommen mit einem zusätzlichen IF Operator ..

              PHP-Code:
              if( isset($_POST['hause'] ) )
              {
                
              $hausKey intval$_POST['hause'] );

              if (
              $hausKey == 1) {
                
              $sql.=" OR ";
                
              $sql.=" haus = '"$bauwerk$hausKey ] ."' ";
              } else {
                
              $sql.=" AND ";
                
              $sql.=" haus = '"$bauwerk$hausKey ] ."' ";
              }

              Vielen Dank Connar

              LG re3ni

              Kommentar

              Lädt...
              X