LiAn: select-Tag mit php überprüfen

Hallo allerseits,

ich habe ein Formular geschrieben, bei dem ich auch ein select-tag verwende. nun will ich das mit PHP überprüfen.
Das select-tag schaut so aus:

  
<label class="buchen" style="color:#<?php if (isset($zimmer) and empty($zimmer)) { echo "9b9681";} ?>;">Zimmer:*</label>  
     <select class="buchen" name="zimmer">  
      <option value="">Bitte ausw&auml;hlen</option>  
       <optgroup label="Hotel">  
         <option value="junior suite">&nbsp;&nbsp;Junior Suite</option>  
            <option value="Mini Suite">&nbsp;&nbsp;Mini Suite</option>  
            <option value="Superior Doppel">&nbsp;&nbsp;Superior Doppel</option>  
            <option value="Standard Doppel">&nbsp;&nbsp;Standard Doppel</option>  
            <option value="Standard Doppel, Einzelb.">&nbsp;&nbsp;Standard Doppel, Einzelb.</option>  
            <option value="Standard Einzel">&nbsp;&nbsp;Standard Einzel</option>  
            <option value="4-Zimmer Apartement">&nbsp;&nbsp;4-Zimmer Apartment</option>  
        </optgroup>  
        <optgroup label="R&eacute;sidence">  
         <option value="3-Zimmer Apartment">&nbsp;&nbsp;3-Zimmer Apartment</option>  
            <option value="2-Zimmer Apartment (504, 509)">&nbsp;&nbsp;2-Zimmer Apartment (504, 509)</option>  
            <option value="2-Zimmer Apartment (505, 510)">&nbsp;&nbsp;2-Zimmer Apartment (505, 510)</option>  
            <option value="Superior Doppel R&eacute;sidence">&nbsp;&nbsp;Superior Doppel</option>  
            <option value="Superior Doppel, Einzelb. R&eacute;sidence">&nbsp;&nbsp;Superior Doppel, Einzel.</option>  
        </optgroup>  
      </select>  

über dem Formular habe ich einige Zeile PHP:

  
<?php if (... | ... | ... | empty($zimmer) | ... | ... )  
  {  
  echo "<p>".$error."</p>";  
  }else  
  {  
  echo "<p>".$success."</p>";  
  }  
 ?>  

die Fehlermeldung definiere ich so:

  
if (isset($name) and empty($name) | isset($adresse) and empty($adresse) | isset($ort) and empty($ort) | isset($email) and empty($email) | isset($erwachsene) and empty($erwachsene) | isset($zimmer) and empty($zimmer) | isset($anreise) and empty($anreise) | isset($abreise) and empty($abreise)) {  
$error = "Bitte f&uuml;llen Sie die Plichtfelder aus.";  
}  

Das Mail wird dann so verschickt:

  
if (empty($error)){mail("eMailAdresse", "subject", $mailtext,  
$mailheader) OR die("Sorry, die Anfrage konnte leider nicht versendet werden!");}  

Das funktioniert eigentlich alles wunderbar, nur leider wird das Mail auch verschickt, obwohl kein Zimmer ausgewählt wurde. Ich seh leider nicht genau wieso.

Muss ich das select-tag irgendwie anders überprüfen?

wäre sehr sehr froh, wenn mir da jemand helfen könnte. Vielen Dank schon im voraus.

  1. Das Mail wird dann so verschickt:

    if (empty($error)){mail("eMailAdresse", "subject", $mailtext,
    $mailheader) OR die("Sorry, die Anfrage konnte leider nicht versendet werden!");}

      
    
    > Das funktioniert eigentlich alles wunderbar, nur leider wird das Mail auch verschickt, obwohl kein Zimmer ausgewählt wurde. Ich seh leider nicht genau wieso.  
      
    füge mal vor der mailversandgeschichte ein var\_dump($error); hinzu und schau nach, obs wirklich empty ist oder nicht
    
    1. füge mal vor der mailversandgeschichte ein var_dump($error); hinzu und schau nach, obs wirklich empty ist oder nicht

      ich erhalte dann:

      string(0) ""

      aber ist "" nicht gleich empty?

      1. ich erhalte dann:

        string(0) ""

        aber ist "" nicht gleich empty?

        http://de.php.net/empty
        Folgende Dinge zählen als nicht mit einem Wert belegt:
          * "" (eine leere Zeichenkette)

        "" sollte demnach empty sein

        1. "" sollte demnach empty sein

          Dann sollte mein Mail also doch eigentlich erst versendet werden, wenn eine Option der Auswahl ausgewählt wurde.

          Ich versteh's irgendwie nicht.

  2. Hi,

    if (isset($name) and empty($name) | isset($adresse) and empty($adresse) | isset($ort) and empty($ort) | isset($email) and empty($email) | isset($erwachsene) and empty($erwachsene) | isset($zimmer) and empty($zimmer) | isset($anreise) and empty($anreise) | isset($abreise) and empty($abreise))

      
    Wieso verwendest Du bitwise-or statt logical-or?  
      
    Und was anderes: hast Du register-globals auf on? Wenn ja, warum?  
      
    
    > Das funktioniert eigentlich alles wunderbar, nur leider wird das Mail auch verschickt, obwohl kein Zimmer ausgewählt wurde. Ich seh leider nicht genau wieso.  
      
    Was steht denn in $zimmer konkret drin?  
      
    cu,  
    Andreas
    
    -- 
    [Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
    [O o ostern ...](http://ostereier.andreas-waechter.de/)  
      
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.