Ankündigung

Einklappen
Keine Ankündigung bisher.

Dropdown aus sql behält Auswahl nicht

Einklappen

Neue Werbung 2019

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

  • Dropdown aus sql behält Auswahl nicht

    Hallo zusammen,

    ich suche seit Tagen nach der Lösung zu meinem Problem, und ich habe viele Postings gelesen die ähnlich sind, aber ich kann die Antworten nicht auf meinen Code übertragen. Ich weiß einfach nicht was falsch ist.
    Ich habe eine Dropdown-Feld, dass aus eine sql gefüllt wird. Über onchange wird der ausgwählte Inhalt abgeschickt. Nachdem er abgeschickt wurde, wird ein Formular mit Daten gefüllt, das passt soweit. Allerdings behält das Dropdownfeld nicht den Wert. Es springt immer auf "bitte auswählen" zurück.
    Vielleicht könnt ihr mir weiterhelfen?

    Viele Grüße
    Flo

    PHP-Code:
     <form  method="post" style="background-color:#E8FBB4" >

            <?php    //Dropdown Benutzer


            
    if(isset($_POST['benutzer'])){
                
    $preSelection $_POST['benutzer']; 
            }
            else {
                
    $preSelection '';
            }

            
    ?>
            <select name="sliste" id="sliste" onchange="form.submit(sliste)">
                <option value="">Bitte auswählen</option>
                <?php
                
    if (isset($_POST['sliste']) and $_POST['sliste'] != "") {
                
    $auswahl $_POST['sliste'];
                
    $_SESSION['benutzer']=$_POST['sliste'];
                
    #$bauswahl= $_SESSION['benutzer'];
                
    }
                
    $pdo = new PDO('mysql:host=localhost;dbname=usr_web424_5''root''');
                
    $sql 'SELECT * FROM User WHERE benutzer !=""';

                foreach (
    $pdo->query($sql) as $row) {

               echo 
    '<option '. (($row['benutzer']==$preSelection) ? selected '').'>'.($row['benutzer']).'</option>';

                }

                
    ?>
            </select><br>


        </form>


  • #2
    Wilkommen im Forum FotoFlo.
    ich verstehe nicht ganz, wo genau es bei Dir hackt,
    Was wird abgeschickt, was kommt zurück.wie wird es abgeschickt etc pp.
    Zudem ist mir nicht klar, wieso Du js (und was da gensu nutzt, oder ob Du die normale Form submit functionalität benützt) , zweiteres bewirkt ein reload, ersteres nicht.

    Deswegen mal:
    https://php-de.github.io/#debugging

    Kommentar


    • #3
      Ja, hier ist Debugging notwendig. Schau dir an was im $_POST nach dem Absenden drin steht, insbesondere wo sich die Information für die Auswahl befindet und checke auch den Inhalt von $preSelection dagegen.

      Am Rande: Der Aufbau gefällt mir gar nicht. Mal was vom EVA-Prinzip gehört?
      PHP-Klassen auf github

      Kommentar


      • #4
        Abgesehen vom vorher gesagten,
        liegt da so einiges im Argen.
        • Code ist nicht richtig eingerückt.
        • verwende sprechende Bezeichner was ist unter sliste zu verstehen?
        • und am besten auf englisch anstatt $auswahl
        • Onchange raus: Javascript hat mit dem Problem nichts zu tun, kommt also erst ganz zum Schluss dazu, sodann jedoch mit eventlistener
        • Style raus: CSS hat mit dem Problem nichts zu tun also raus, zudem gehört CSS in eine Datei ausgelagert, wie Javascript auch.
        • SELECT + ist schlechter Stil. Schaue dir Beispiel 1 im Handbuch von pdo::query an, dort werden alle Spalten im Select aufgeführt, das solltest du auch so machen.
        • Kontextwechsel von PHP zu HTML nicht berücksichtigt siehe http://php.net/manual/de/function.htmlspecialchars.php
        • Session nicht initialisiert
        Da es für Anfänger immer sehr schwer ist alles gleichzeitig umzusetzen bekommst mal eine Basis auf der du aufbauen kannst.
        Diese kannst du nutzen, ist aber nicht fehlerfrei, sondern soll dir nur das EVA-Prinzip und den Kontextwechsel näher bringen.

        Erst PHP
        PHP-Code:
        <?php
        // Fehler anzeigen
        error_reporting(-1);
        ini_set('display_errors'1);

        // Wir verwenden sessions
        Session_start();

        if( isset(
        $_POST['benutzer']) ) {

            
        $preSelection $_POST['benutzer'];

        }else{

            
        $preSelection '';

        }


        if ( isset(
        $_POST['sliste']) and $_POST['sliste'] != "" ) {

            
        $auswahl $_POST['sliste'];
            
        $_SESSION['benutzer']=$_POST['sliste'];
            
        #$bauswahl= $_SESSION['benutzer'];

        }

        $pdo = new PDO('mysql:host=localhost;dbname=usr_web424_5''root''');
        $sql 'SELECT * FROM User WHERE benutzer !=""';

        $hmtlout null;
        foreach (
        $pdo->query($sql) as $row) {

            if( 
        $row['benutzer'] == $preSelection ){

                
        $hmtlout .= '<option selected >' htmlspecialchars($row['benutzer'], ENT_QUOTES ENT_HTML5'UTF-8') . '</option>';

            }else{

                
        $hmtlout .= '<option ' htmlspecialchars($row['benutzer'], ENT_QUOTES ENT_HTML5'UTF-8') . '</option>';

            }
        }

        ?>
        Dann die HTML Ausgabe
        PHP-Code:
        <!doctype html>
        ...

        <form method="post">
            <select name="sliste" id="sliste">
                <option value="">Bitte auswählen</option>
                <?= $hmtlout?>
            </select>
        </form>
        ...

        Kommentar


        • #5
          Zitat von FotoFlo Beitrag anzeigen
          if(isset($_POST['benutzer'])){
          Die Bedingung wird nie wahr werden, es gibt kein Feld mit dem Namen benutzer …

          Kommentar

          Lädt...
          X