Ankündigung

Einklappen
Keine Ankündigung bisher.

Gleiche Variable in mehreren Dropdowns nutzen

Einklappen

Neue Werbung 2019

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

  • Gleiche Variable in mehreren Dropdowns nutzen

    Hallo zusammen,

    ich bin zwar kein blutiger Anfänger mehr, aber noch grün hinter den Ohren.

    Ich bräuchte eure Hilfe bei folgenden Problem...

    Kontext:

    Ich habe eine MySQL-Tabelle mit zwei Spalten [id] [orte]. In der Tabelle sind x Datenzeilen.
    id orte
    1 Berlin
    2 München
    3 Hamburg
    4 Köln
    In meiner PHP-file frage ich die gesamte Tabelle ab und möchte diese in einer Dropdownauswahliste speichern und ausgeben. Dabei setze ich die id als Value und die Orte als angezeigete Option.

    PHP-Code:
    $sql_orte="SELECT * FROM t_orte";
    $result_ortemysqli_query($dbcon$sql_orte);
    echo 
    "<select name='orte1'>";  
    while(
    $row1 mysqli_fetch_assoc($result_orte)){
    echo 
    "<option value='".$row1['id']."'>" $row1['orte'] ."</option>";}
    echo 
    "</select>";

    echo 
    "<select name='orte2'>";  
    while(
    $row1 mysqli_fetch_assoc($result_orte)){
    echo 
    "<option value='".$row1['id']."'>" $row1['orte'] ."</option>";}
    echo 
    "</select>"
    Soweit so unproblematisch.

    Möchte ich jedoch nun ein zweites Dropdownauswahlfeld "orte2" einfügen (angenommen direkt nach dem ersten) und mit den selben Werten füllen.
    Dann bleibt das Feld leer. Es gibt nichts auszuwählen. So als würde die Result-Variable nur einmal genutzt werden können .

    Wie kann ich die Variable mehrfach benutzen?

  • #2
    moin, wilkommen hier .
    bitte besser einrücken in der zukunft ...
    wo setzt du den zweiten wert - ich sehe es in demk code nicht .

    prinzipiell lohnt das EVA prinzip (eingabe verarbeitung ausgabe zu trennen)
    https://php-de.github.io/jumpto/eva-prinzip/

    Kommentar


    • #3
      Ist angepasst.

      In wie fern hilft das EVA-Prinzip bei der konkreten Lösung des Problems?

      Kommentar


      • #4
        Zitat von Jepbolto Beitrag anzeigen
        In wie fern hilft das EVA-Prinzip bei der konkreten Lösung des Problems?
        Weil du einmal ermittelte Daten beliebig oft in der Ausgabe verwenden kannst.

        Kommentar


        • #5
          Nimm mysqli_fetch_all um einmal alle Zeilen in einen 2-dimensionalen Array abzulegen und arbeite dann mit diesen Array weiter.

          Kommentar


          • #6
            Zitat von hellbringer Beitrag anzeigen

            Weil du einmal ermittelte Daten beliebig oft in der Ausgabe verwenden kannst.
            Zu Recht erwartet man vom Fragesteller eine konkrete Porblembeschreibung mit ausreichend Kontext für die Leser um Lösungsorientiert zu helfen.

            Ist es dann zu viel erwartet, eine ebenso umfassden erklärende Atwort zu bekommen? Igrendwelche Links oder Begriffe als vermeintliche Lösungsantwort zu posten sind wenig hilfreich.

            Hilfreich wäre allerdings:

            Das Problem tritt auf wenn...
            oder
            Der Fehler resultiert aus zeile...
            oder
            Du musst das so ändern...
            oder
            Du musst die Datei XY auslagern...

            Wäre nicht nur für mich sondern auch für alle nachfolgenden Leser deutlich hilfreicher.

            Kommentar


            • #7
              #5 schon gelesen? Sollte als Tipp reichen. Wenn nicht, stelle dazu eine konkrete Frage. Beispiel im link.

              Kommentar


              • #8
                Zitat von jspit Beitrag anzeigen
                Nimm mysqli_fetch_all um einmal alle Zeilen in einen 2-dimensionalen Array abzulegen und arbeite dann mit diesen Array weiter.
                Danke für den Tipp! Das probiere ich gleich mal aus und berichte.

                Kommentar


                • #9
                  Zitat von Jepbolto Beitrag anzeigen

                  Zu Recht erwartet man vom Fragesteller eine konkrete Porblembeschreibung mit ausreichend Kontext für die Leser um Lösungsorientiert zu helfen.

                  Ist es dann zu viel erwartet, eine ebenso umfassden erklärende Atwort zu bekommen? Igrendwelche Links oder Begriffe als vermeintliche Lösungsantwort zu posten sind wenig hilfreich.

                  Hilfreich wäre allerdings:

                  Das Problem tritt auf wenn...
                  oder
                  Der Fehler resultiert aus zeile...
                  oder
                  Du musst das so ändern...
                  oder
                  Du musst die Datei XY auslagern...

                  Wäre nicht nur für mich sondern auch für alle nachfolgenden Leser deutlich hilfreicher.
                  Inwiefern kannst Du im Code von #1 die variable nicht zweimal nutzen,
                  Du umgehtst das von dir geschilderte Problem in dem Code - soweit kann ich das erkennen.

                  Kommentar


                  • #10
                    Zitat von jspit Beitrag anzeigen
                    Nimm mysqli_fetch_all um einmal alle Zeilen in einen 2-dimensionalen Array abzulegen und arbeite dann mit diesen Array weiter.
                    Danke nochmal für den Tipp hat mich auf den richtigen Weg gebracht und das hat dann wunderbar geklappt.

                    Habe das query-result in ein mehrdimensionales Array geschrieben.
                    Die Lösung sah dann so aus:

                    PHP-Code:
                    $sql_orte="SELECT * FROM t_orte";
                    $result_ortemysqli_query($dbcon$sql_orte);  
                    $orte = array();
                    while(
                    $row mysqli_fetch_assoc($result_orte)){
                    $orte[]=$row;}

                    echo 
                    "<select name='orte1'>";    
                    foreach (
                    $orte as $ort){
                    echo 
                    "<option value='".$ort['id']."'>" $ort['ort'] ."</option>";} echo "</select>";

                    echo 
                    "<select name='orte2'>";  
                    foreach (
                    $orte as $ort){
                    echo 
                    "<option value='".$ort['id']."'>" $ort['ort'] ."</option>";}
                    echo 
                    "</select>"

                    Kommentar


                    • #11
                      Zitat von tomBuilder Beitrag anzeigen
                      Inwiefern kannst Du im Code von #1 die variable nicht zweimal nutzen,
                      Na, mysqli_query liefert ein result-set. Dann wird doch mit jeden Aufruf von mysqli_fetch_assoc eine neue Zeile geliefert und am Ende NULL. Das result-set steht am Anfang der 2.Schleife doch noch am Ende denke ich mir.
                      (Kann mich irren, kenne mysqli nicht, nehme seit mehr als 10 Jahren PDO).

                      Jepbolto :
                      1. Select * ist unschön. Nimm dort immer die Feldnamen rein. Also SELECT id, ort FROM ..Es werden dann auch nur die Informationen geholt die du brauchst falls die Tabelle noch weitere Spalten enthält und es ist besser lesbar.

                      2. Bei der Ausgabe beachtest du den Kontextwechsel nach HTML nicht. Die Variablen müssen maskiert werden (mit htmlspecialchars).

                      Kommentar


                      • #12
                        Ich finde den Anastz jetzt nicht zwingend besser oder lesbarer, alerdings sei hierangemekrt:

                        PHP-Code:
                        $select1 =  "<select name='orte1'>";  
                        $ellect2 =   "<select name='orte2'>";
                        foreach (
                        $orte as $ort){
                            
                        $select1 .=  "<option value='".$ort['id']."'>" $ort['ort'] ."</option>";
                            
                        $select2 .=   "<option value='".$ort['id']."'>" $ort['ort'] ."</option>";
                        }
                        $select1  .= "</select>";
                        $select2  .= "</select>"

                        Kommentar


                        • #13
                          Danke für den Hinweis. Stimmt wohl, werde den Select anpassen dann kann ich meinen PHP-Code vermutlich auch in einem halben Jahr besser nachvollziehen ^^
                          (greife in dem Fall aber extra auf eine eigens für die Ausgabe bereitgestellte View zurück)


                          Und das mit dem Kontextwechsel werde ich mir auch durchlesen und beibringen.

                          Kommentar


                          • #14
                            Zitat von tomBuilder Beitrag anzeigen
                            Ich finde den Ansatz jetzt nicht zwingend besser oder lesbarer, alerdings sei hierangemekrt:

                            PHP-Code:
                            $select1 "<select name='orte1'>";
                            $ellect2 "<select name='orte2'>";
                            foreach (
                            $orte as $ort){
                            $select1 .= "<option value='".$ort['id']."'>" $ort['ort'] ."</option>";
                            $select2 .= "<option value='".$ort['id']."'>" $ort['ort'] ."</option>";
                            }
                            $select1 .= "</select>";
                            $select2 .= "</select>"
                            Der Code ist nicht nur schwer lesbar wie du selbst schon angemerkt hast, sondern verletzt auch das DRY-Prinzip.
                            Positiv: Es wird kein echo benutzt, was dem EVA-Prinzip entgegenkommt.
                            Warum nicht beide Prinzipien bedienen und das alles mit einer Funktion erledigen?

                            Ansatz:

                            PHP-Code:
                            function createHtmlSelectBox(string $name, array $configstring $idstring $caption): string
                            {
                              
                            $html '<select name="'.$name.'">';    
                              foreach (
                            $config as $item){
                                 
                            $html .= '<option value="'.$item[$id].'">' htmlspecialchars($item[$caption],ENT_QUOTES) .'</option>';
                              } 
                              
                            $html .= '</select>';
                              return 
                            $html;

                            Der Code hier ist in hohen Maße unvollständig. Auch ist die Array-Struktur für eine solche Selectbox nicht optimal. Der value-Wert muss eindeutig sein, was bei dieser Struktur nicht zwangsweise der Fall ist.



                            Kommentar


                            • #15
                              Da hast Du wohl Recht jspit
                              Mir ging es darum nicht nicht mehrmals durch das selbe array zu loopen . Und ich gebe zu ich so gar nicht nachgedacht bei meine Post.
                              Danke für die verbesserung.

                              Kommentar

                              Lädt...
                              X