Bruzzler: Dropdown Formularfeld --> mind. 1 Wert muss ausgewählt werden

Hallo zusammen,

hoffe auf Eure Hilfe. Habe ein Formularfeld, in dem mehrere Termine zur Auswahl stehen. Es soll genau 1 Termin ausgewählt werden, ansonsten soll eine Fehlermeldung erscheinen. Darüber hinaus darf der Wert "Bitte Termin auswählen" nicht als gültiger Eingabewert verstanden werden.

Hier die Website und der Code:

Website

Hier mein bisheriger Code:

<select name="datum">  
                 	  <option>bitte gew&uuml;nschten Termin ausw&auml;hlen</option>  
	                  <option <? echo ($datum=="08.08.2009") ? "SELECTED":""?>>08.08.2009</option>  
	                   <option <? echo ($datum=="09.08.2009 ") ? "SELECTED":""?>>09.08.2009</option>  
                        <option <? echo ($datum=="10.08.2009") ? "SELECTED":""?>>10.08.2009</option>  
                         <option <? echo ($datum=="11.08.2009") ? "SELECTED":""?>>11.08.2009</option>  
  
</select><font color="red"><? echo $datumfehler?></font>

Mein PHP Code ist dabei folgender:

  
  
<?php  
  
        switch($_GET["action"])  
        {  
                case "pruefen":  
                {  
                        Pruefen();  
                        break;  
                }  
                default:  
                {  
                        $fehlertext="";  
                        Formular($email, $daten, $preis, $emailfehler, $datumfehler, $fehlertext);  
                }  
        }  
  
  
function check_email($email) {  
  // RegEx begin  
 ...  
  // RegEx end  
  
  return preg_match("/^$regex$/",$email);  
}  
  
function Pruefen() {  
        if (isset($_POST["bestellen"])) { # wenn der Submit Button betaetigt wurde  
                                          # wird das Formular ausgewertet  
        # Parameter aus dem Array $_POST auslesen  
  
        $email = $_POST["email"];  
        $datum= $_POST["datum"];  
        $daten = $_POST["daten"];  
	$preis = $_POST["preis"];  
  
                $fehler = 0;  
  
if ($email == "") {  
                $emailfehler = "<b>*</b>";  
                $fehler = 1;  
        }  
	  
if ($datum == "bitte gew&uuml;nschten Termin ausw&auml;hlen") {  
                $datumfehler = "<b>*</b>";  
                $fehler = 1;  
        }  
        if ($fehler){  
  
$fehlertext = "<font color='red'>Bitte füllen Sie alle Pflichtfelder aus.<br><br><br></font>";  
                Formular($email, $daten, $preis, $emailfehler, $datumfehler, $fehlertext);  
        }  
        else {  
                ...  
        }  
                                     }  
}  
  
function Formular($email, $daten, $preis, $emailfehler, $datumfehler, $fehlertext) {  
?>  
  

Hoffe mir kann jemand helfen, wenn kein Datum ausgewählt wurde, erscheint keine Fehlermeldung. Wenn ich aber ein Datum auswähle, springt nach Klick auf Bestellen der value wieder auf "bitte termin auswählen."
Was mache ich falsch?

Danke schonmal und viele Grüße

  1. Hello,

    Danke schonmal und viele Grüße

    Du hast das   selected="selected"   vergessen für das ausgewählte Feld.

    Außerdem würde ich den Optionen Nummern geben. 0 für 'nichts ausgewählt'. Aber das ist Geschmackssache.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    Den obligatorischen (Ab-)Satz mit Uschi und Wolle verkneife ich mir diesmal
    1. Hallo,

      Außerdem würde ich den Optionen Nummern geben. 0 für 'nichts ausgewählt'. Aber das ist Geschmackssache.

      Warum nicht den "bitte auswählen"-Hinweis auf disabled? In dem Fall wird nix übertragen wenn nichts ausgewählt wurde. Halte ich für eleganter aber ist sicher auch Geschmackssache ;)

      Grüße, Matze

      1. Hello,

        Warum nicht den "bitte auswählen"-Hinweis auf disabled? In dem Fall wird nix übertragen wenn nichts ausgewählt wurde. Halte ich für eleganter aber ist sicher auch Geschmackssache ;)

        Auch eine Idee :-)

        Aber genaugenommen müsste er den zurückgelieferten Wert prüfen, ob Anzahl UND Wert den Vorgaben entsprechen. Der Client könnte ja sonstwas liefern...

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        Den obligatorischen (Ab-)Satz mit Uschi und Wolle verkneife ich mir diesmal
        1. Hallo,

          Aber genaugenommen müsste er den zurückgelieferten Wert prüfen, ob Anzahl UND Wert den Vorgaben entsprechen. Der Client könnte ja sonstwas liefern...

          Richtig, daran hatte ich gar nicht gedacht *huch
          Gut, dann erweitern wir den if-Zweig um || is_array($_GET['datum']).
          Das sollte reichen um nur einen Eintrag durchzulassen oder irre ich mich da gerade?

          Grüße, Matze

          1. Hello,

            Gut, dann erweitern wir den if-Zweig um || is_array($_GET['datum']).
            Das sollte reichen um nur einen Eintrag durchzulassen oder irre ich mich da gerade?

            Ich lege radios, Checkboxen, Selct-Single und Selct-Multiple grundsätzlich als Array an. Das ermöglicht mir, alle mit einer gemeinsamen Produktion und Auswertung zu bedienen.

            Die Werte müssen trotzdem noch diskret geprüft werden. An dem Modul sitze ich seit Wochen. Es wächst so vor sich hin. Neulich gab es da schon mehrere Diskussionen:

            http://forum.de.selfhtml.org/archiv/2009/5/t187047/#m1242795
            http://forum.de.selfhtml.org/archiv/2009/5/t187309/#m1244852

            Runtop hatte das gleiche Problem und musste wohl auch erkennen, dass sich eine saubere Lösung nicht mal eben zwischen Tür und Angel bauen lässt.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            Den obligatorischen (Ab-)Satz mit Uschi und Wolle verkneife ich mir diesmal
            1. Hi an alle,

              sorry, mir is das leider zu kompliziert. ich habs mittlerweile dank eurer Tipps soweit hinbekommen, dass ich ne fehlermeldung bekomme, wenn "bitte Termin auswählen" ausgewählt ist.
              Wenn ich allerdings einen Termin auswähle, ist zwar die fehlermeldung weg, allerdings springt das Feld wieder auf den Ausgangswert "bitte Termin auswählen".

              Habt ihr ne Idee?

              Danke

              Hello,

              Gut, dann erweitern wir den if-Zweig um || is_array($_GET['datum']).
              Das sollte reichen um nur einen Eintrag durchzulassen oder irre ich mich da gerade?

              Ich lege radios, Checkboxen, Selct-Single und Selct-Multiple grundsätzlich als Array an. Das ermöglicht mir, alle mit einer gemeinsamen Produktion und Auswertung zu bedienen.

              Die Werte müssen trotzdem noch diskret geprüft werden. An dem Modul sitze ich seit Wochen. Es wächst so vor sich hin. Neulich gab es da schon mehrere Diskussionen:

              http://forum.de.selfhtml.org/archiv/2009/5/t187047/#m1242795
              http://forum.de.selfhtml.org/archiv/2009/5/t187309/#m1244852

              Runtop hatte das gleiche Problem und musste wohl auch erkennen, dass sich eine saubere Lösung nicht mal eben zwischen Tür und Angel bauen lässt.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              1. Hola!

                Wenn ich allerdings einen Termin auswähle, ist zwar die fehlermeldung weg, allerdings springt das Feld wieder auf den Ausgangswert "bitte Termin auswählen".

                Habt ihr ne Idee?

                Ja. Schau dir mal den ausgelieferten HTML Code im Browser an und zitiere bitte vernuenftig oder gar nicht.

                --
                "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
                      - T. Pratchett
                1. Ja. Schau dir mal den ausgelieferten HTML Code im Browser an und zitiere bitte vernuenftig oder gar nicht.

                  Und was soll ich da sehen??

                  1. Hello,

                    Ja. Schau dir mal den ausgelieferten HTML Code im Browser an und zitiere bitte vernuenftig oder gar nicht.

                    Und was soll ich da sehen??

                    ....bb du daran gedacht hast, ein     selected="selected"    in der ausgewählten Option/Alternative zu generieren mit deinem PHP-Script.

                    Beim Genereieren der <option>-Elemente muss Dein Script immer nachfragen, ob im $_POST-Array das gerade zu generierende Element ausgewählt ist. Wenn ja, wird es ergänzt durch das selected-Attribut.

                    Liebe Grüße aus dem schönen Oberharz

                    Tom vom Berg

                    --
                    Nur selber lernen macht schlau
                    http://bergpost.annerschbarrich.de
                    Den obligatorischen (Ab-)Satz mit Uschi und Wolle verkneife ich mir diesmal
                  2. Hoi,

                    Und was soll ich da sehen??

                    Wie Tom schon erwaehnt hat, ob dein Code zur Generierung des selected Attributs funktioniert hat.

                    Sollte dort z.B. nichts stehen, scheinst Du ein Problem mit deinen Variablen zu haben.

                    --
                    "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
                          - T. Pratchett
            2. Hallo,

              Ich lege radios, Checkboxen, Selct-Single und Selct-Multiple grundsätzlich als Array an. Das ermöglicht mir, alle mit einer gemeinsamen Produktion und Auswertung zu bedienen.

              die Idee hatte ich auch schonmal aber nie umgesetzt :|
              Wie sieht das dann bei dir aus? Oder besser wie müsste es aussehen?

                
              <select name="select_field[foobar]" >  
                  <option ...>...</option>  
              </select>
              

              So in etwa? Wie wertest du das Array dann aus? Ich glaub du hattest das schonmal beschrieben, ich find es nur nicht mehr^^

              Grüße, Matze

              1. Hello,

                So in etwa? Wie wertest du das Array dann aus? Ich glaub du hattest das schonmal beschrieben, ich find es nur nicht mehr^^

                Schau mal hier:

                http://forum.de.selfhtml.org/archiv/2007/4/t150060/#m974907

                Das kann nur als Vorlage dienen, bitte selber überarbeiten.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                Den obligatorischen (Ab-)Satz mit Uschi und Wolle verkneife ich mir diesmal
    2. Hi Tom,

      danke für deine Antwort. Sorry bin ziemlich neu in dem Metier.
      Wo genau fehlt das selected="selected" ?
      hier?
       <option>bitte gew&uuml;nschten Termin ausw&auml;hlen</option>
      Dann funktionierts auch nicht....

      Danke dir
      VG
      Bruzzler

      Hello,

      Danke schonmal und viele Grüße

      Du hast das   selected="selected"   vergessen für das ausgewählte Feld.

      Außerdem würde ich den Optionen Nummern geben. 0 für 'nichts ausgewählt'. Aber das ist Geschmackssache.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

  2. Hallo!

    Wär nett gewesen wenn du die Codeeinrückungen im Forum angepasst hättest.
    Ich hab mir auch nicht alles angeschaut.
    Wie auch immer...

    <select name="datum">

    <option>bitte gew&uuml;nschten Termin ausw&auml;hlen</option>

      
    Versuch:  
    [code lang=html  
    <option selected="selected" disabled="disabled" value="bitteauswaehlen">bitte gewünschten Termin auswählen</option>  
    [/code]  
      
    Warum du da die Umlaute maskierst ist mir nicht klar.  
      
    Der PHP-Teil wäre dann:  
      
    if(empty($\_GET['datum'])) {  
        echo 'Fehler';  
    }else{  
        // tu etwas sinnvolles  
    }  
      
    
    > Wenn ich aber ein Datum auswähle, springt nach Klick auf Bestellen der value wieder auf "bitte termin auswählen."  
    > Was mache ich falsch?  
      
    Du vergisst dem Element ein "selected" mitzugeben. Vorher natürlich dasselbe beim ersten Eintrag entfernen.  
      
    Gruß, Matze