Kim N.: list() funktioniert nicht

Hallo...

ich arbeite gerade an einem Kontaktformular.

Die ankommenden POST-Daten werden zunächst validiert.

  
function valid_input(&$var) {  
 if(is_string($var)) {  
  $var = strip_tags($var);  
  $var = htmlspecialchars($var);  
  $var = preg_replace("/(content-type:|bcc:|cc:|to:|from:)/im", "", $var); // ##### VERHINDERT HEADERMANIPULATION  
  $var = stripslashes($var);  
  $var = trim($var);  
 }  
 else {  
  if(is_array($var)) {  
   foreach($var AS $key => $value) {  
    valid_input($var[$key]);  
   }  
  }  
 }  
}  
  
valid_input($_POST);  

Anschließend möchte ich (da es viele input-Felder sind) mittles dieser while-Anweisung meinen Mail-Body erzeugen.
siehe: http://aktuell.de.selfhtml.org/tippstricks/php/form-mail/

  
while(list($strName,$value) = each($_POST)) {  
  if(is_array($value)) {  
   foreach($value as $value_array) {  
    $strMailtext .= $strName.": ".$value_array."\n";  
   }  
  }  
  else {  
   $strMailtext .= $strName.": ".$value."\n";  
  }  
 }  

Nun muss ich aber feststellen, dass KEIN Inhalt ($strMailtext) erzeugt wird. Und das schein an der Validierungsfunktion zu liegen,
denn wenn ich die Funktion valid_input($_POST) nicht aufrufe, funktioniert es.

Weiß jemand woran das liegen könnte.

Bin auch für sonstige Hinweise, was z.b. die Validierung angeht dankbar.

Gruß
Kim N.

  1. hi,

    Nun muss ich aber feststellen, dass KEIN Inhalt ($strMailtext) erzeugt wird. Und das schein an der Validierungsfunktion zu liegen,
    denn wenn ich die Funktion valid_input($_POST) nicht aufrufe, funktioniert es.

    Warum überprüfst du dann nicht erst mal, was $_POST nach deiner "Validierung" noch enthält? (print_r()/var_dump())

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. gute idee...

      habe ich sicher auch schon einmal in der letzten Stunde der Fehlersuche gemacht.

      dennoch:
      print_r

      Array ( [kommentar] => xyz [firma] => xyz [anrede] => herr [vname] => xyz [nname] => xyz [strasse] => xyz [plz] => xyz [ort] => xyz [land] => xyz [telefon] => xyz [telefax] => xyz [email] => xyz@xyz.de [antwort] => leer [submit_x] => 45 [submit_y] => 14 )

      Also alles normal!?

      Gruß
      Kim N.

    2. Hallo wahsaga...

      ich habe ein Beispiel zum testen.
      Hier geht (anstatt von valid_input) eine foreach-Schleife alle POST-Werte durch und erzeugt für die Schlüssel des Arrays einen neuen Variablennamen (Präfix). Auch hier funktioniert list() nur vor der Behandlung der POST-Daten. Warum?

        
      <?php  
        
      echo "<h1>SELFFORUM - TEST</h1>";  
        
      echo "<h3>Ausgabe vor foreach - POST</h3>";  
      while(list($strName,$value) = each($_POST)) {  
       if(is_array($value)) {  
        foreach($value as $value_array) {  
         echo $strName.": ".$value_array."\n";  
        }  
       }  
       else {  
        echo $strName.":".$value."\n";  
       }  
      }  
      echo "<h5>Kontrolle (print_r)</h4>";  
      print_r($_POST);  
        
      echo "<hr/>";  
      echo "<strong style=\"color:red\">foreach - Schleife</strong>";  
        
      foreach ($_POST as $key=>$value) {  
       ${"praefix_".$key} = $value;  
      }  
        
      echo "<hr/>";  
      echo "<h3>Ausgabe nach foreach - POST</h3>";  
      while(list($strName,$value) = each($_POST)) {  
       if(is_array($value)) {  
        foreach($value as $value_array) {  
         echo $strName.": ".$value_array."\n";  
        }  
       }  
       else {  
        echo $strName.":".$value."\n";  
       }  
      }  
      echo "<h5>Kontrolle (print_r)</h4>";  
      print_r($_POST);  
        
      echo "<hr/>";  
        
      echo "<h4>FORMULAR</h4>";  
      echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">";  
      echo "<p><input type=\"text\" name=\"inputfeld\" value=\"\"/></p>";  
      echo "<input type=\"submit\" value=\"senden\"/>";  
      echo "</form>";  
        
      ?>  
      
      

      Gruß
      Kim N.

  2. echo $begrüßung;

    Die ankommenden POST-Daten werden zunächst validiert.
    Nun muss ich aber feststellen, dass KEIN Inhalt ($strMailtext) erzeugt wird. Und das schein an der Validierungsfunktion zu liegen,

    Prüfe das bitte nach. Vermutungen bringen nichts, wenn man sie nicht nachprüft. Was gibt die Funktion zurück? Was erzeugen die einzelnen Zwischenschritte innerhalb der Funktion?

    Bin auch für sonstige Hinweise, was z.b. die Validierung angeht dankbar.

    [code lang=php]
    function valid_input(&$var) {
    if(is_string($var)) {
      $var = strip_tags($var);
      $var = htmlspecialchars($var);
      $var = preg_replace("/(content-type:|bcc:|cc:|to:|from:)/im", "", $var); // ##### VERHINDERT HEADERMANIPULATION
      $var = stripslashes($var);
      $var = trim($var);
    }

    stripslashes() sollte als erstes ausgeführt werden und auch dann nur, wenn die Magic Quotes eingeschaltet sind: get_magic_quotes_gpc(), Disabling Magic Quotes

    htmlspecialchars() ist keine Validierungsfunktion. Maskierungen sollten erst zum Ausgabemedium hin vorgenommen werden, nicht schon bei der Demaskierung und Validierung der Eingangsdaten.

    $strMailtext .= $strName.": ".$value_array."\n";

    Header werden mit CRLF abgeschlossen, nicht nur mit LF. Siehe PHP-Handbuch-Seite zu mail() und die dort erwähnte RFC.

    echo "$verabschiedung $name";