Ankündigung

Einklappen
Keine Ankündigung bisher.

Ausgewählte option nach submit beibehalten

Einklappen

Neue Werbung 2019

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

  • Ausgewählte option nach submit beibehalten

    Hallo,
    ich weiß wie ich ein select in der Langform beibehalten kann. Es sieht bei mir wie folgt aus:

    PHP-Code:
    <label>
      <select class="DropDown" name="intervalDrop">
         <option selected disabled value="1" <?= (isset($_POST['intervalDrop']) && $_POST['intervalDrop'] == '1') ? 'selected="selected"' ''?>>select time interval</option>
         <option value="15" <?= (isset($_POST['intervalDrop']) && $_POST['intervalDrop'] == '15') ? 'selected="selected"' ''?>>15</option>
         <option value="30" <?= (isset($_POST['intervalDrop']) && $_POST['intervalDrop'] == '30') ? 'selected="selected"' ''?>>30</option>
         <option value="45" <?= (isset($_POST['intervalDrop']) && $_POST['intervalDrop'] == '45') ? 'selected="selected"' ''?>>45</option>
         <option value="1" <?= (isset($_POST['intervalDrop']) && $_POST['intervalDrop'] == '1') ? 'selected="selected"' ''?>>All</option>
      </select>
    </label>
    Aber könnte ich das ganze auch abkürzen? Also, geht das überhaupt, wenn ja, wie? Ich habe mehrere Dropdowns mit optionen, da kommt einiges zusammen. Hoffe die Frage ist verständlich.

    Gruß.
    Just a newbie, who began his training as an IT specialist/application develepor :)


  • #2
    Du hast ja nur zwei Werte die relevant sind: der Name des Feldes und sein Wert. Mal ganz grob

    PHP-Code:
    $field 'intervalDrop';
    foreach([
    1,15,30,45] as $value){
     
    $selected = ($_POST[$field] ?? '') == $value 'selected="selected"' '';
     echo 
    '<option '.$selected.'>'.$value.'</option>';

    Hier die Doku zu den beiden, falls das unverständlich wirkt: https://www.php.net/manual/de/langua...arison.ternary

    Und daraus baust du dir dann eine Funktion.
    You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

    Kommentar


    • #3
      Zitat von chorn Beitrag anzeigen
      Du hast ja nur zwei Werte die relevant sind: der Name des Feldes und sein Wert. Mal ganz grob

      PHP-Code:
      $field 'intervalDrop';
      foreach([
      1,15,30,45] as $value){
      $selected = ($_POST[$field] ?? '') == $value 'selected="selected"' '';
      echo 
      '<option '.$selected.'>'.$value.'</option>';

      Hier die Doku zu den beiden, falls das unverständlich wirkt: https://www.php.net/manual/de/langua...arison.ternary

      Und daraus baust du dir dann eine Funktion.
      Perfekt, funktioniert einwandfrei. Danke!!!
      Just a newbie, who began his training as an IT specialist/application develepor :)

      Kommentar


      • #4
        Zitat von chorn Beitrag anzeigen
        Und daraus baust du dir dann eine Funktion.
        Genau! Die nennt sich bei mir html::select(). Wie so etwas arbeitet kannst du dir anhand dieser Aktiv-Demo/Test anschauen.

        PHP-Klassen auf github

        Kommentar


        • #5
          Perfekt, funktioniert einwandfrei. Danke!!!
          Das war aber nur ein Vorschlag, wie gesagt, bau dir eine Funktion, du darfst bei mehreren Feldern ja nicht wieder den gleichen Fehler machen und den Code einfach kopieren. Im einfachsten Fall erwartet eine Funktion halt zwei Parameter: Alle Werte für das Select, und den Wert für den selektierten Eintrag.
          You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

          Kommentar


          • #6
            Zitat von chorn Beitrag anzeigen

            Das war aber nur ein Vorschlag, wie gesagt, bau dir eine Funktion, du darfst bei mehreren Feldern ja nicht wieder den gleichen Fehler machen und den Code einfach kopieren. Im einfachsten Fall erwartet eine Funktion halt zwei Parameter: Alle Werte für das Select, und den Wert für den selektierten Eintrag.
            Ich arbeite mit PHP erst seit knapp acht Wochen, ich versuch mein bestes.

            Ich habe mir das mal mit meinem derzeitigen Wissen zusammen geschnippelt:

            PHP-Code:
            <?php

            class optionFunction
            {      

                 public 
            $values = array();

                 function 
            foobar($values$field)
                 {
                    
            $this->values[]=$values;
                        foreach(
            $values as $ke)
                        {
                           
            $selected = ($_POST[$field] ?? '') == $ke 'selected="selected"' '';
                            echo 
            '<option '.$selected.'>'.$ke.'</option>';
                         }
                 }
            }

            ?>
            Just a newbie, who began his training as an IT specialist/application develepor :)

            Kommentar


            • #7
              Da sind ein paar Fehler drin.
              Bei den option Tags fehlt das value Attribut.
              Und durch Deine Zuweisung
              PHP-Code:
              $this->values[]=$values
              besteht "$this->values" nun aus nur einem Eintrag, der ein Array ist. In Deinem foreach entspricht $ke sozusagen Deinem Parameter $values.

              Da es keinerlei Abhängigkeiten zur Klasse an sich gibt, kann die Funktion zumdem static sein.

              So vielleicht:

              PHP-Code:
              class optionFunction
              {
                  public static function 
              foobar(array $values$activeValue null)
                  {
                      foreach (
              $values as $value) {
                          
              $selected = ($value == $activeValue) ? ' selected="selected"' '';
                          echo 
              '<option value="'.$value.'"' $selected '>' $value '</option>';
                      }
                  }

              Die Abhängigkeit von irgendwelchen geposteten Werten wäre nun ebenfalls weg, da Du den aktiven Wert als zweiten Parameter übergibst.
              Somit könnte der Wert auch woanders her kommen (z.B. aus der Datenbank).


              Würde es persönlich so trotzdem nicht verwenden, weil mir Methoden, die etwas per echo auswerfen überhaupt nicht gefallen.
              Aber das steht auf einem anderen Blatt.

              Kommentar


              • #8
                Zitat von Deprecated Beitrag anzeigen
                Da sind ein paar Fehler drin.
                Bei den option Tags fehlt das value Attribut.
                Und durch Deine Zuweisung
                PHP-Code:
                $this->values[]=$values
                besteht "$this->values" nun aus nur einem Eintrag, der ein Array ist. In Deinem foreach entspricht $ke sozusagen Deinem Parameter $values.

                Da es keinerlei Abhängigkeiten zur Klasse an sich gibt, kann die Funktion zumdem static sein.

                So vielleicht:

                PHP-Code:
                class optionFunction
                {
                public static function 
                foobar(array $values$activeValue null)
                {
                foreach (
                $values as $value) {
                $selected = ($value == $activeValue) ? ' selected="selected"' '';
                echo 
                '<option value="'.$value.'"' $selected '>' $value '</option>';
                }
                }

                Die Abhängigkeit von irgendwelchen geposteten Werten wäre nun ebenfalls weg, da Du den aktiven Wert als zweiten Parameter übergibst.
                Somit könnte der Wert auch woanders her kommen (z.B. aus der Datenbank).


                Würde es persönlich so trotzdem nicht verwenden, weil mir Methoden, die etwas per echo auswerfen überhaupt nicht gefallen.
                Aber das steht auf einem anderen Blatt.
                Das wäre ein ticken zu viel OOP, ich hab damit noch nicht wirklich was angefangen, ich hab nur ein wenig reingeschnuppert. Wie gesagt die Ausbildung hat erst begonnen. Aber Danke für die Korrektur.
                Just a newbie, who began his training as an IT specialist/application develepor :)

                Kommentar


                • #9
                  Zitat von kvnhmn Beitrag anzeigen

                  Das wäre ein ticken zu viel OOP, ich hab damit noch nicht wirklich was angefangen, ich hab nur ein wenig reingeschnuppert. Wie gesagt die Ausbildung hat erst begonnen. Aber Danke für die Korrektur.
                  Das hat aber doch mit OOP erstmal nichts zu tun, sondern eher mit EVA-Prinzip und der Faustregel, daß Funktionen etwas zurückgeben sollten (hier einen String), der dann an entsprechender Stelle "ge-echo-t" wird, oder?

                  Kommentar


                  • #10
                    Ja, eine Funtkion/Methode sollte "i.d.R so gut wie fast immer" etwas zurückgeben, nie etwas ausgeben.

                    Dh simple sample:


                    Statt:
                    PHP-Code:
                    function hello() {
                        echo 
                    "hello";
                    }

                    hello(); 

                    Ein:
                    PHP-Code:
                    function hello() {
                        return 
                    "hello";
                    }

                    echo 
                    hello(); 
                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Zitat von Alf2016 Beitrag anzeigen

                      Das hat aber doch mit OOP erstmal nichts zu tun, sondern eher mit EVA-Prinzip und der Faustregel, daß Funktionen etwas zurückgeben sollten (hier einen String), der dann an entsprechender Stelle "ge-echo-t" wird, oder?
                      Ouh, wusste ich nicht. Tut mir leid,aber wie gesagt - ich habe nocht nicht einmal von diesem EVA-Prinzip gehört.
                      Just a newbie, who began his training as an IT specialist/application develepor :)

                      Kommentar


                      • #12
                        Zitat von kvnhmn Beitrag anzeigen
                        ... ich habe nocht nicht einmal von diesem EVA-Prinzip gehört.
                        Macht ja nichts, dafür gibt es ja die Wissenssammlung und Wikipedia.

                        Kommentar

                        Lädt...
                        X