Sebastian: Formular-Dropdown, Einträge mit Link vorselektieren

Ich möchte meine bestehenden Formulare zu einem Formular zusammenfassen. Dazu habe ich ein neues Formular mit Dropdown (Auswahlliste) für die Themen erstellt. Als Beispiel sieht das so aus:

  
<body>  
  
<?  
 if (isset($_GET["id"]))  
  $id = $_GET["id"];  
 else  
  $id = -1;  
?>  
  <form action="" method="post" name="contact">  
<table>  
 <tr>  
  <td class=p70>  
   <select class=input size="1" name="theme">  
   <option><? if ($id == 1) echo " SELECTED"; ?>&nbsp; FEEDBACK</option>  
   <option><? if ($id == 2) echo " SELECTED"; ?>&nbsp; Kategorie 1:</option>  
   <option><? if ($id == 3) echo " SELECTED"; ?>&nbsp; &#187;Thema1</option>  
   <option><? if ($id == 4) echo " SELECTED"; ?>&nbsp;&nbsp; &#8226;Unterthema1</option>  
   <option><? if ($id == 5) echo " SELECTED"; ?>&nbsp;&nbsp;&nbsp;&nbsp;Eintrag1</option>  
   <option value=""></option>  
   <option><? if ($id == 6) echo " SELECTED"; ?>&nbsp;&nbsp;&nbsp;&nbsp;Eintrag2</option>  
   <option><? if ($id == 7) echo " SELECTED"; ?>&nbsp;&nbsp;&nbsp;&nbsp;Eintrag3</option>  
   <option><? if ($id == 8) echo " SELECTED"; ?>&nbsp;&nbsp;&nbsp;&nbsp;Eintrag4</option>  
   <option><? if ($id == 9) echo " SELECTED"; ?>&nbsp;&nbsp;&nbsp;&nbsp;Eintrag5</option>  
   <option><? if ($id == 10) echo " SELECTED"; ?>&nbsp;&nbsp;&nbsp;&nbsp;Eintrag6</option>  
   <option value=""></option>  
   </select>  
   </td>  
 </tr>  
 <tr class=vier>  
  <td class=p70>&nbsp;</td>  
 </tr>  
 <tr>  
  <td class=p70>  
  <input class=buttonb type="submit" id=" senden" name="submit">  
  <input class=buttonn type="reset" id=" nochmal" name="reset" value="nochmal">  
  </td>  
 </tr>  
</table>  
  </form>  
  
</body>  

Das Formular habe ich unter "feedback.php" abgespeichert, damit ich auch direkt mit Variable und Wert auf einen bestimmten Eintrag im Dropdown verlinken kann. Nun habe ich einen Link alá "feedback.php?id=3" auf das Formular gesetzt. Ich möchte das der Eintrag mit der "id=3" bei Aufruf des Formulars im Dropdown dann vorselektiert ist. Wenn ich zum Beispiel ""feedback.php?id=10" verlinke, soll der 10. Eintrag ausgewählt sein usw. Damit es auch benutzerfreundlich ist, und der User nicht durch das ganze Formular-Dropdown scrollen muss. Nur leider funktioniert es nicht? Was ist falsch? Ich bin kein php-Experte und über jede Hilfe dankbar.

  1. hi,

    <option><? if ($id == 1) echo " SELECTED"; ?>&nbsp; FEEDBACK</option>

    Falls du ernsthaft annimmst,
    <option>SELECTED>...</option>
    wäre die richtige Syntax - dann schlage die wirklich richtige bitte in SELFHTML nach.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hallo Sebastian.

    Ich möchte meine bestehenden Formulare zu einem Formular zusammenfassen. Dazu habe ich ein neues Formular mit Dropdown (Auswahlliste) für die Themen erstellt.

    Warum lässt du die option-Elemente nicht auch gleich per PHP erzeugen?
    Du ersparst dir damit eine Menge Arbeit und kannst im gleichen Atemzug das selected-Attribut nach Anforderung setzen.
    Ich habe vor kurzem einmal ein kleines Beispiel dazu erstellt.

    <option><? if ($id == 1) echo " SELECTED"; ?>&nbsp; FEEDBACK</option>

    Hast du dir einmal den ausgegebenen HTML-Code angeschaut, wenn du eine ID angegeben hast? Aber schon alleine beim genaueren Hinschauen solltest du den Fehler bemerken.

    Im Übrigen solltest du auf die Short Open Tags verzichten, da du nie weißt, wo deine Scripte einmal unter welcher Konfiguration laufen werden.

    Einen schönen Mittwoch noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
    1. Vielen Dank für Deine Antwort. Und um das gleich vorweg zu nehmen: Ich bin php-Anfänger und sehe meinen Fehler einfach nicht. Aber ich lerne ja noch, habe Deine Hinweise aufmerksam gelesen und mein Dropdown-Menü noch mal nachgebessert. Um das in aller Ruhe zu testen, habe ich bei mir "xampplite" drauf. Nehm ich mal jetzt nur das Dropdown, sieht das jetzt bspw. so aus:

        
          <?php  
          if (isset($_POST["id"]))  
          $id = $_POST["id"];  
          else  
          $id = -1;  
          ?>  
          <select class=input size="1" name="id">  
          <option><?php if ($id == 1) echo " selected"; ?>&#160; FEEDBACK</option>  
          <option><?php if ($id == 2) echo " selected"; ?>&#160; Kategorie 1:</option>  
          <option><?php if ($id == 3) echo " selected"; ?>&#160; &#187;Thema1</option>  
          <option><?php if ($id == 4) echo " selected"; ?>&#160;&#160; &#8226;Unterthema1</option>  
          <option><?php if ($id == 5) echo " selected"; ?>&#160;&#160;&#160;&#160;Eintrag1</option>  
          <option value=""></option>  
          <option><?php if ($id == 6) echo " selected"; ?>&#160;&#160;&#160;&#160;Eintrag2</option>  
          <option><?php if ($id == 7) echo " selected"; ?>&#160;&#160;&#160;&#160;Eintrag3</option>  
          <option><?php if ($id == 8) echo " selected"; ?>&#160;&#160;&#160;&#160;Eintrag4</option>  
          <option><?php if ($id == 9) echo " selected"; ?>&#160;&#160;&#160;&#160;Eintrag5</option>  
          <option><?php if ($id == 10) echo " selected"; ?>&#160;&#160;&#160;&#160;Eintrag6</option>  
          <option value=""></option>  
          </select>  
      
      

      Trotzdem funktioniert es nicht? Warum? Bitte sag mir den Fehler. Natürlich habe ich auch Dein kleines Beispiel angeguckt. Und um ehrlich zu sein, es fällt mir ziemlich schwer zu verstehen, was in dem Script genau passiert. Wie gesagt, bin php-Anfänger und bitte um Nachsicht. Du hast die Dropdown-Infos ja in ein Feld (Array) gepackt, richtig? Und wie wird das dann aufgerufen? In meinem Beispiel will ich's ja so haben: "feedback.php?id=3" usw. Und bei Dir ist das dann "feedback.php?Anrede=Frau" oder wie? Und wenn es dann zwei Werte, wie "feedback.php?Anrede=Frau Dr." sind? Geht das dann überhaupt?

      Bei der Gelegenheit habe ich gleich noch ne andere Frage: Damit meine Site auch worldwide gut angeguckt werden kann, habe ich den Zeichensatz für die Seiten auf "utf-8" eingestellt. Nur leider bekommt es mein Editor nicht hin, die HTML Namen der Zeichen bspw. "&nbsp;" oder deutsche Sonderzeichen ä, ü, ö usw. gleich mit den Unicodes darzustellen. Nachdem ich meine Seiten fertig habe, muss ich immer über "ersetzen" gehen, und die Zeichen mit dem entsprechenden Unicode ersetzen. Ich hoffe, ich habe keine all zu doofen Fragen gestellt, denn nach dem Kommentar von "wahsaga" zweifle ich schon an mir...

      1. Hallo Sebastian.

        Trotzdem funktioniert es nicht? Warum?

        Bitte schau dir den ausgegebenen HTML-Code an. Mit Betonpfeilern winke ich ungern.

        Bitte sag mir den Fehler. Natürlich habe ich auch Dein kleines Beispiel angeguckt. Und um ehrlich zu sein, es fällt mir ziemlich schwer zu verstehen, was in dem Script genau passiert.

        Dann kommentiere ich es einmal:

        <select name="Anrede"> <!-- Das select-Anfangstag -->  
        [code lang=php]<?php  
        $arr_anreden = array('Herr', 'Frau', 'Fräulein', 'Sir'); # Die Werte für die option-Elemente  
          
        foreach ($arr_anreden as $str_anrede) {  
          
          echo '  <option value="'.$str_anrede.'"'; # Ausgabe von option-Anfangstag sowie dem passendem Wert fürs value-Attribut  
          
          # Wenn $_POST['Anrede'] gesetzt worden ist und dessen Wert mit dem aktuellen Wert von $str_anrede übereinstimmt …  
          if (isset($_POST['Anrede']) and $_POST['Anrede'] == $str_anrede) {  
            echo ' selected="selected"'; # … selected-Attribut (XHTML-konform) setzten  
          }  
          
          echo '>'.$str_anrede.'</option>'."\n"; # Anfangstag schließen, Text und Endtag ausgeben  
          
        }  
        ?>
        

        </select> <!-- Das select-Endtag -->[/code]

        Und wie wird das dann aufgerufen?

        Wie jedes andere PHP-Script auch.

        In meinem Beispiel will ich's ja so haben: "feedback.php?id=3" usw. Und bei Dir ist das dann "feedback.php?Anrede=Frau" oder wie?

        Nein, mein Beispiel muss noch an zwei Stellen verändert werden, wenn es deinen Anforderungen genügen soll:

        1. Aus $_POST muss $_GET werden, da du die jeweilige ID ja grundsätzlich per GET übergibst
        2. Aus der foreach-Schleife würde ich nun eine for-Schleife machen, da du damit gleich einen ansteigenden numerischen Index bei jedem Schleifendurchlauf zur Verfügung stehen hast. Diesen kannst du nutzen, um ihn mit dem übergebenen Wert von $_GET['id'] zu vergleichen und entsprechend das selected-Attribut zu setzen.

        Und wenn es dann zwei Werte, wie "feedback.php?Anrede=Frau Dr." sind? Geht das dann überhaupt?

        Dann wird daraus feedback.php?Anrede=Frau%20Dr., da Sonderzeichen URL-kodiert übertragen werden.

        Nur leider bekommt es mein Editor nicht hin, die HTML Namen der Zeichen bspw. "&nbsp;" oder deutsche Sonderzeichen ä, ü, ö usw. gleich mit den Unicodes darzustellen.

        Was heißt „mit den Unicodes“ darzustellen? Es gibt nur ein Unicode.

        Soll dein Editor die Zeichen direkt darstellen oder als Zeichenreferenzen, wie z. B. &auml; für „ä“? Wenn letzteres gewünscht ist, würdest du die Vorteile von UTF-8 gar nicht nutzen.

        Nachdem ich meine Seiten fertig habe, muss ich immer über "ersetzen" gehen, und die Zeichen mit dem entsprechenden Unicode ersetzen.

        Was genau ersetzt du hier durch was genau?

        Einen schönen Donnerstag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
        1. Hi, also erstmal danke. Zum Unicode: Wie gesagt als Zeichensatz ist "utf-8" eingestellt. Damit die in den Staaten bspw. das "ä" nicht durch Fragezeichen oder sonst was Undefiniertes angezeigt bekommen, dachte ich, ich muss im HTML-Quellcode dann alle "ä" durch "&#228;" ersetzen - oder das "&nbsp;" durch "&#160;"...

          Das Andere muss ich mir noch mal in Ruhe angucken, und ich glaub du musst doch mit Betonpfeilern winken :), ich schnall's nicht.

          1. Hallo Sebastian.

            Damit die in den Staaten bspw. das "ä" nicht durch Fragezeichen oder sonst was Undefiniertes angezeigt bekommen, dachte ich, ich muss im HTML-Quellcode dann alle "ä" durch "&#228;" ersetzen - oder das "&nbsp;" durch "&#160;"...

            Das ist blanker Unsinn. Du verwendest doch UTF-8, gerade damit du dies *nicht* tun musst. Du kannst praktisch jedes x-beliebige Zeichen direkt in den Dateien notieren.

            Damit alles reibungslos funktioniert müssen folgende Faktoren harmonisch zusammenarbeiten:

            1. Dein Editor muss wirklich UTF-8 können und darf nicht einfach mirnichtsdirnichts die Kodierung nach Belieben umwandeln.
            2. Der Content-Type-Header des Servers muss ebenfalls mit der gewählten Kodierung überein stimmen.
            3. Es muss auf dem Client mindestens eine Schriftart installiert sein, in der die anzuzeigenden Zeichen enthalten sind.

            Ist letzteres nicht gegeben, kannst du allerhöchstens eine freie Schriftart zum Download anbieten und die Installation schildern. Alles andere bleibt dem Nutzer des Clients überlassen.

            Einen schönen Donnerstag noch.

            Gruß, Ashura

            --
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
            „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
            [HTML Design Constraints: Logical Markup]
            1. Hallo Ashura.

              zurück zu meinem Formular-Problem: Erst mal danke, dass Du soviel Geduld mit mir hast. Habe es wieder zu GET geändert, das war's aber auch. Ich schnall's nicht, einfach ein Brett vorm Kopf. Das brauchst Du jetzt auch nicht kommentieren ;).

                
                  <?php  
                  if (isset($_GET["id"]))  
                  $id = $_GET["id"];  
                  else  
                  $id = -1;  
                  ?>  
                  <select class=input size="1" name="id">  
                  <option><?php if ($id == 1) echo " selected"; ?>&#160; FEEDBACK</option>  
                  <option><?php if ($id == 2) echo " selected"; ?>&#160; Kategorie 1:</option>  
                  <option><?php if ($id == 3) echo " selected"; ?>&#160; &#187;Thema1</option>  
                  <option><?php if ($id == 4) echo " selected"; ?>&#160;&#160; &#8226;Unterthema1</option>  
                  <option><?php if ($id == 5) echo " selected"; ?>&#160;&#160;&#160;&#160;Eintrag1</option>  
                  <option value=""></option>  
                  <option><?php if ($id == 6) echo " selected"; ?>&#160;&#160;&#160;&#160;Eintrag2</option>  
                  <option><?php if ($id == 7) echo " selected"; ?>&#160;&#160;&#160;&#160;Eintrag3</option>  
                  <option><?php if ($id == 8) echo " selected"; ?>&#160;&#160;&#160;&#160;Eintrag4</option>  
                  <option><?php if ($id == 9) echo " selected"; ?>&#160;&#160;&#160;&#160;Eintrag5</option>  
                  <option><?php if ($id == 10) echo " selected"; ?>&#160;&#160;&#160;&#160;Eintrag6</option>  
                  <option value=""></option>  
                  </select>  
              
              

              Ich geb's auf. Schönen Donnerstag noch.

              1. Hallo Sebastian.

                Ich geb's auf.

                Schade. Dabei musst du dir nur _den ausgegebenen HTML-Code anschauen_, wenn du eine ID übergibst. Dann siehst du den Fehler. (Auf welchen dich wahsaga sogar noch deutlicher hingewiesen hat, als ich.)

                Einen schönen Donnerstag noch.

                Gruß, Ashura

                --
                sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                [HTML Design Constraints: Logical Markup]
                1. Hi Ashura!

                  Ich habe es endlich geschnallt: Der Syntax war natürlich falsch. Aber das ist mir auch schon eher aufgefallen. Doch als ich drauf verlinkt habe, habe ich immer nur "feedback.php?id=3" als Link genommen. Damit das Ganze aber auch lokal läuft, muss man ja "http://localhost/feedback.php?id=3" nehmen. Schön blöd. Ich danke für Eure Hilfe. Und dank "xampplite" kann ich ja vielleicht auch mal Deine Alternative testen, wenn meine PHP-Kenntnisse besser sind :)

                  achso, was die Schriftart und "utf-8" angeht, so habe ich das mit css wie folgt definiert:

                  font-family: verdana, arial, helvetica, sans-serif; font-size: 0.8em;

                  Ist doch korrekt oder?

                  bye, bye Sebastian

                  1. Hallo Sebastian.

                    achso, was die Schriftart und "utf-8" angeht, so habe ich das mit css wie folgt definiert:

                    font-family: verdana, arial, helvetica, sans-serif; font-size: 0.8em;

                    Ist doch korrekt oder?

                    Es ist zumindest nicht falsch. Wenn der Client in Verdana ein bestimmtes Zeichen nicht findet, kann es durchaus sein, dass er es einfach aus einer anderen Schriftart ergänzt.

                    Einen schönen Donnerstag noch.

                    Gruß, Ashura

                    --
                    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                    [HTML Design Constraints: Logical Markup]