Götz: Validierung aus PHP-Form entfernen/einschränken

Beitrag lesen

Hallo Knut,

Könnte mir jemand eine Hilfe geben, wie ich das mache?

  
$t='';  
$mailbody='';  
  
if($action == 'send') {  
  foreach($fields as $i){  
    initvar($i);  
    if($GLOBALS[$i] == '') {  
      $e .= '<li>Sie haben folgendes Feld vergessen '.$i;  
    } else {  
      $mailbody .= $i.': '.$GLOBALS[$i]."\n";  
    }  
  }  
  if(  
    !(eregi(  
      "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[_a-z0-9-]+(\.[_a-z0-9-]+)*(\.([a-z]{2,4}))+$",  
      $email)  
    )  
  ) {  
    $e .= '<li>'.$tx['error']['mustwritemail'].'.';  
  } else if($e == ''){  
    initvar('txtarea');  
    $mailbody .= $txtarea;  
    if(  
      !(@mail(  
        $reciever,  
        'Mailform from '.sv('SERVER_NAME'),  
        $mailbody.$recievermessage,  
        "From: ".$email."\r\n"."X-Remote: ".sv('REMOTE_ADDR')."\r\n")  
       )  
    ) {  
      $e .= tag('li').$tx['mailform']['notsend'];  
    } else {  
      $t = tag('p').$tx['mailform']['send'].tag('/p');  
    }  
    if(  
      !(@mail(  
        $email,  
        'Copy of mailform from '.sv('SERVER_NAME'),  
        $mailbody.$message,  
        "From: ".$reciever."\r\n"."X-Remote: ".sv('REMOTE_ADDR')."\r\n")  
      )  
    ) {  
      $e .= '<li>'.$tx['mailform']['recieptnotsend'];  
    }  
  }  
}  
  
if($t == '' || $e != '') {  
  $t = '<form action="'.$sn.'" method="post">  
          <input type="hidden" name="selected" value="'.$u[$s].'">  
          <input type="hidden" name="action" value="send">  
          <table cellpadding="5" cellspacing="0" border="0" width="400">';  
  foreach($fields as $field) {  
    $t .= mtr($field);  
  }  
  $t .= '<tr>  
           <td colspan="2">Deine Nachricht:<br>  
             <t'.'extarea rows="12" cols="80" name="t'.'xtarea"></t'.'extarea>  
           </td>  
         </tr>';  
  $t .= '</table>  
         <p><input type="submit" class="submit" value="'.$tx['mailform']['sendbutton'].'"></p>  
         </form>';  
}  
  
$output = preg_replace('/<textarea.*textarea>/is',$t,$c[$s]);  

Leider sieht der Code sehr unübersichtlich aus, da ich nicht weiss, wo ich Zeilenumbrüche machen kann. Wie kann ich PHP aufbrechen, ohne das die Logik gestört wird?

Nun, ich habe mich mal darauf beschränkt den Code übersichtlicher zu formatieren, vielleicht hilft Dir das ja schon weiter. Ich hoffe, ich hab in dem Wirrwarr nichts falsch eingerückt.
Manches hab ich ein wenig eigentümlich eingerückt (vor allem die mail()-Aufrufe als Bedingungen), das dient nur dazu, daß auch diese Teile ein wenig übersichtlicher sind und nicht durch Zeilenumbrüche in der Darstellung hier im Forum wieder unübersichtlich werden. Auch der HTML-Kram ist nicht ganz sauber eingerückt, sondern nur auf die "direkte Umgebung" bezogen.
Ich hoffe jedoch, daß es zumindest lesbarer ist, als es davor war.

Bei PHP kann man, soweit ich das beurteilen kann, fast überall beliebig viele Leerzeichen und Umbrüche setzen, ohne daß es den Parser stört (zumindest, wenn man konsequent Klammern setzt). Ich versuche mich im Allgemeinen mehr oder weniger strikt an die pear Coding Standards zu halten.

In diesem Bereich müßte die Validierung stattfinden. Ich bin mir nicht sicher, wie ich die Entfernen kann (einfach das Foreach raus? Wie würde ich das Gabeln, dass nur bestimmte Felder validiert werden?).

Ja, das erste foreach ist mit Sicherheit ein guter Punkt anzufangen ... aber ehrlich gesagt: bevor ich da was ändern würde, würde ich es neu schreiben.
Als Basis dafür kann ja zum Beispiel auch der gut dokumentierte SELFHTML Artikel: Einfacher PHP-Formmailer von Patrick Canterino dienen.

Grüße aus Stockholm,
Götz

--
Losung für Dienstag, 15. April 2008
Träufelt, ihr Himmel, von oben, und ihr Wolken, regnet Gerechtigkeit! Die Erde tue sich auf und bringe Heil, und Gerechtigkeit wachse mit auf! Ich, der HERR, habe es geschaffen. (Jesaja 45,8)
Jage nach der Gerechtigkeit, dem Glauben, der Liebe, dem Frieden mit allen, die den Herrn anrufen aus reinem Herzen. (2.Timotheus 2,22)
(zur aktuellen Losung)