Ankündigung

Einklappen
Keine Ankündigung bisher.

Auswahlliste zeigt selected nicht an

Einklappen

Neue Werbung 2019

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

  • Auswahlliste zeigt selected nicht an

    Folgendes Problem: Ich habe Text Datei, aus der ich jeden Zeile für eine Auswahlliste auslese. Nun möchte ich, dass ein bestimmter Wert, der immer variiert, aus dieser Liste als "selected" markiert wird.
    Dieser variable Wert wird durch eine SQL Anweisung übergeben und ist hier $data['Epoche'].

    PHP-Code:
        <select name='epoche' style='width:180px'>
                                            <
    option value=''>---- Keine Auswahl! ----</option>";
                      
    $ep=$data['Epoche'];
                    while (!feof(
    $f_e)) {
                          
    $row = fgets($f_e, 35);
                          if (
    $ep==$row) {
                              echo "
    <option selected>$row</option>";
                          } else {                      
                            echo "
    <option>$row</option>";
                          }
                      }
                      fclose(
    $f_e);
                    echo"                    
    </select>"; 
    Leider wird der Wert nicht als selected angezeigt. Wenn ich den Wert $data ausgebe, dann ist dieser gesesetzt und hat auch einen Wert, der in dem Auswahlfeld angezeigt wird.

    Wo liegt mein Denkfehler?


    Danke für eure Hilfe.

  • #2
    Es gibt während des Schleifendurchlaufes zu keinem Zeitpunkt eine Variable $row, die den gleichen Wert wie die Variable $ep hat. Woran das liegt, kann ich dir nicht sagen. Aber überflüssige Leerzeichen wären eine Möglichkeit. Vielleicht hat $ep aber auch gar nicht den erwarteten Wert.

    Kommentar


    • #3
      Also es gibt auf jeden Fall eine Variabel $row die den selben wert die $ep hat.

      Aber das mit den Leerzeichen. Da guck ich nochmal drüber. Danke für den Tipp.

      Kommentar


      • #4
        Gib halt testhalber die Werte von $ep und $row in jedem Durchgang aus:
        PHP-Code:
        echo "<select name='epoche' style='width:180px'>
              <option value=''>---- Keine Auswahl! ----</option>"
        ;
        $ep $data['Epoche'];
        while (
        $row fgets($f_e35)){
            echo 
        "|$ep|$row|
        "
        ;        // Testausgabe
            
        $sel = ($ep == $row) ? " selected='selected'" '';
            echo 
        "<option value='???'$sel>$row</option>";
        }
        fclose($f_e);
        echo 
        "</select>"
        Gruss
        L

        Kommentar


        • #5
          Mh .. mal eine kleine Zwischenfrage: Muss ich es so wie lazydog schreiben "selected='selected'"?
          Oder reicht einfach selected?!

          Kommentar


          • #6
            selected="selected" ist die XHTML-konforme Schreibweise: http://de.selfhtml.org/html/xhtml/un...eere_attribute

            Kommentar


            • #7
              Jetzt, da ich den Thread nochmals anschaue, ist mir auch klar, wo das Problem liegt. Du liest die Daten ja aus einer Datei, und da kommt immer noch ein
              Zeileende - abhängig vom Betriebssystem - dazu. Dieses bringst du mit chop() oder rtrim() weg:
              PHP-Code:
              while ($row chop(fgets($f_e35))){
              ... 
              Gruss
              L

              Kommentar


              • #8
                Es geht jetzt immer noch nicht.

                Ich habe den Quelltext wie folgt verändert.

                PHP-Code:
                <?php
                                       $ep
                =$data['Epoche'];
                                  
                rtrim($ep);
                                  
                ltrim($ep);
                                while (!
                feof($f_e)) {
                                      
                $row fgets($f_e35);
                                      
                rtrim($row);
                                      
                ltrim($row);
                                      echo 
                "<option";
                                      if (
                $ep==$row) {
                                          echo 
                "selected";
                                      }                       
                                        echo 
                ">$ep - $row</option>";
                                      
                                  }
                                  
                fclose($f_e);
                ?>

                Kommentar


                • #9
                  $ep musst du vermutlich nicht mit trim behandeln, sondern die nur eingelesenen Zeilen. Warum nimmst du nicht einfach meinen Code, mit der vorher beschriebenen Änderung. Was du jetzt machst, ist ein String, der am Ende so aussieht:
                  Code:
                  <optionselected>... - ...</option>
                  und das ist wohl kaum das, was du willst. Und wenn du der Option keinen Wert (value='...') zuweist, kannst du die Werte später ach nicht weiterverwenden.
                  Gruss
                  L

                  Kommentar


                  • #10
                    Hier nochmal mein aktueller Code.

                    PHP-Code:
                    <?php
                    $ep
                    =chop($data['Epoche']);
                                    while (!
                    feof($f_e)) {
                                          
                    $row chop(fgets($f_e35));
                                          if (
                    $ep==$row) {
                                              
                    $sel="selected";
                                          }                       
                                        echo 
                    "<option $sel>$row</option>";
                                      }
                                      
                    fclose($f_e);
                    ?>
                    Mir zeigt es jetzt immer den letzten Wert an.


                    Wenn ich Value nicht zuweise, dann nimmt er doch automatisch den Wert, der zwischen <option> steht.

                    Kommentar


                    • #11
                      Jetzt geht es.

                      Hab den Code jetzt so:

                      PHP-Code:
                      <?php
                                                     $ep
                      =chop($data['Epoche']);
                                      while (!
                      feof($f_e)) {
                                            
                      $row chop(fgets($f_e35));
                                            if (
                      $ep==$row) {
                                                echo 
                      "<option selected>$row</option>";
                                            } else {                  
                                              echo 
                      "<option>$row</option>";
                                          }
                                        }
                                        
                      fclose($f_e);
                      ?>

                      Kommentar


                      • #12
                        Selbstverständlich selektiert er damit den letzten Eintrag, weil 'selected' von dem Zeitpunkt an, an dem die Daten übereinstimmen immer gesetzt ist, und nur ein Element selektiert werden kann. Wie du das lösen kannst habe ich bereits geschrieben. Und wenn du unbedingt mit feof() operieren willst, kannst du das natürilch tun, aber fgets() merkt selber, wenn die Datei zu Ende ist.
                        Und mit dem Optionswert hast du natürlich recht, ich habs selber einfach noch nie so verwendet.
                        Gruss
                        L

                        Kommentar


                        • #13
                          Zum zeilenweisen Einlesen hättest du auch file verwenden können. Das ist etwas komfortabler finde ich.

                          Kommentar


                          • #14
                            Danke für die Tipps. Ich guck nochmal drüber. Und bei Fragen meld ich ich nochmal ..

                            Kommentar

                            Lädt...
                            X