Simon: PHP Fehlermeldung in Kontaktformular Erzeugen

Hi,
bei meinem Kontaktformular wird oben angezeigt wann etwas falsch ist.
Ich würde aber gerne dass mir das Script (Bei falscher Eingabe), im entsprechenden Input eine class="error" einfügt.
Könnte mir vieleicht jemand dabei helfen?

Hier mal das Script:

<?php  
include ("includes/validation/validation_functions_kon.php");  
if (@$_POST['gesendet']) {  
  $vorname = @$_POST['vorname'];  
  $nachname = @$_POST['nachname'];  
  $email = @$_POST['email'];  
  $betreff = @$_POST['betreff'];  
  $nachricht = @$_POST['nachricht'];  
  
if ( get_magic_quotes_gpc() ) {  
  $vorname = stripslashes($vorname);  
  $nachname = stripslashes($nachname);  
  $email = stripslashes($email);  
  $betreff = stripslashes($betreff);  
  $nachricht = stripslashes($nachricht);  
}  
  
  
$gueltig = verifiziereAlphaNum ($vorname);  
if (!$gueltig) {  
$fehler_nachricht[]="Vorname darf nur aus Buchstaben, Zahlen, Leerzeichen, Bindestrichen und ' bestehen.";  
}  
  
$gueltig = verifiziereAlphaNum ($nachname);  
if (!$gueltig) {  
$fehler_nachricht[]="Nachname darf nur aus Buchstaben, Zahlen, Leerzeichen, Bindestrichen und ' bestehen.";  
}  
  
$gueltig = verifiziereEmail ($email);  
if (!$gueltig){  
$fehler_nachricht[]="Email muss ein g&uuml;ltiges Format besitzen (z.B. beispiel@hotmail.com).";  
}  
  
$gueltig = verifiziereAlphaNum ($betreff);  
if (!$gueltig) {  
$fehler_nachricht[]="Betreff darf nur aus Buchstaben, Zahlen, Leerzeichen, Bindestrichen und ' bestehen.";  
}  
  
$gueltig = verifiziereText ($nachricht);  
if (!$gueltig){  
$fehler_nachricht[]="Nachricht darf nur Buchstaben, Zahlen und diese Zeichen enthalten \" ' - ? ! enthalten";  
}  
  
$ziel_email="admin@heimgeistig.at";  
  
  
  
$email_hauptteil = "Sie haben folgende Nachricht erhalten: \n\n";  
$email_hauptteil .="Vorname: ";  
$email_hauptteil .=$vorname;  
$email_hauptteil .="\nNachname: ";  
$email_hauptteil .="$nachname";  
$email_hauptteil .="\nBetreff: ";  
$email_hauptteil .=$betreff;  
$email_hauptteil .="\nNachricht: ";  
$email_hauptteil .=$nachricht;  
$email_hauptteil .= "\n\nDatum/Zeit: ";  
$email_hauptteil .= date("d.m.Y H:i:s");  
  
  
  
  if (!$fehler_nachricht) {  
  mail ($ziel_email, $betreff, $email_hauptteil, "From: ".$_REQUEST['email']);  
  header ('Location: a_kontakt.php');  
  exit();  
  }  
}  
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">  
<head>  
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />  
<title>Page</title>  
<link rel="stylesheet" media="all" type="text/css" href="css.css" />  
</head>  
<body>  
  <div id="wrapper">  
    <div id="header">  
    </div><!--header-end-->  
    <div id="content">  
      <fieldset id="field_kon">  
        <legend class="legend">Kontakt</legend>  
        <form action="
~~~~~~php
<?php echo $_SERVER['PHP_SELF']; ?>" method="post">  
        <?php  
        if ($fehler_nachricht) {  
        echo "<ul>\n";  
          foreach ($fehler_nachricht as $fehler) {  
          echo"<li>".$fehler."</li>\n";  
          }  
        echo "</ul><br /><br />\n";  
        }  
        ?>
          <p><label for="vorname">Vorname</label>  
            <input name="vorname" type="text" size="20" id="vorname" value="<?php echo $vorname ?>" /></p>  
         <p> <label for="nachname">Nachname</label>  
            <input name="nachname" type="text" size="20" id="nachname" value="<?php echo $nachname ?>" /></p>  
          <p><label for="email">Email</label>  
            <input name="email" type="text" size="20" id="email" value="<?php echo $email ?>" /></p>  
          <p><label for="betreff">Betreff</label>  
            <input name="betreff" type="text" size="20" id="betreff" value="<?php echo $betreff ?>" /></p>  
          <p><label for="nachricht">Nachricht</label>  
            <textarea name="nachricht" rows="3" cols="20" id="nachricht"><?php echo $nachricht ?></textarea></p>  
          <p><input type="submit" name="gesendet" id="button" value="Senden" /></p>  
        </form>  
      </fieldset>  
    </div><!--content-end-->  
    <div id="footer">  
    </div><!--footer-end-->  
  </div><!--wrapper-end-->  
</body>  
</html>

MfG
Simon

  1. Lieber Simon,

    if (@$_POST['gesendet']) {

    nicht gut. Besser so:

    if (isset($_POST['gesendet']))

    $vorname = @$_POST['vorname'];

    Nicht gut. Besser:

    $nachname = isset($_POST['nachname']) ? $_POST['nachname'] : '';

    Ich habe allerdings noch nicht geprüft, ob auch folgende Zeile ohne Fehlermeldung gelingt:

    $nachname = $_POST['nachname'] || '';

    Jedenfalls verhindert vielleicht das '@' eine Fehlermeldung sowohl auf der Seite, als auch im Fehler-Log, jedoch hilft Dir das in dem Moment nicht weiter, wo Du beim Debugging diese wertvollen Fehlermeldungen bräuchtest! Daher ist es immer besser, wenn Dein Code erst garkeine Fehlermeldungen provoziert, damit Du deren Erzeugung auch nicht unterdrücken musst.

    $gueltig = verifiziereAlphaNum ($vorname);
    if (!$gueltig) {
    $fehler_nachricht[]="Vorname darf nur aus Buchstaben, Zahlen, Leerzeichen, Bindestrichen und ' bestehen.";
    }

    Warum nicht kürzer?

    if ( !verifiziereAlphaNum($vorname) )  
        $fehler_nachricht[] = ".......";
    

    Um nun Dein Hauptanliegen zu behandeln:

    <input name="vorname" type="text" size="20" id="vorname" value="<?php echo $vorname ?>" />

    Das wird sehr gerne gemacht, ist aber aus meiner Sicht nicht sinnvoll. Du mischst hier PHP-Code (also Programmlogik) mit HTML-Code (also Auszeichnungs-Logik). Dadurch entsteht eine Vermischung von Programm-Logik und Ausgabe-Code. Auch wenn das mit PHP möglich ist, so ist es doch nicht immer sinnvoll.

    Suche einmal danach, was ich hier im Forum bereits zum Thema "Affenformular" geschrieben habe. Dort beschreibe ich auch den Umgang mit einer Vorlage (neudeutsch: Template). Das sollte Dir weiterhelfen!

    Ähm... die Forumssuche ist gerade nicht verfügbar. Ich habe Dir den Archivthread deshalb mal eben herausgesucht.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Erstmals danke für die hilfreiche Antwort. Der link ist ansich genau das was ich gesucht hab. Hätte da nur eine Frage:

      In meinem Script prüfe ich ja die Richtigkeit der Anaben:

      <?php

      function verifiziereAlphaNum ($testString) {
      return (eregi ("^([[:alnum:]]|-|.| |')+$", $testString));
      }

      function verifiziereEmail ($testString) {
      return (eregi("^([[:alnum:]]|_|.|-)+@([[:alnum:]]|.|-)+(.)([a-z]{2,4})$", $testString));
      }

      function verifizierePasswort ($testString) {
      return (eregi("^([[:alnum:]]|-|.| |?|!|"|')+$", $testString));
      }

      function verifiziereText ($testString) {
      return (eregi("^([[:alnum:]]|-|.| |?|!|"|')+$", $testString));
      }

      ?>

      Aber wie kann ich dass dann in das von dir Beschriebene "Affenformular" einbinden?

      MfG
      Simon

      1. Lieber Simon,

        Der link ist ansich genau das was ich gesucht hab.

        prima! Das freut mich.

        Aber wie kann ich dass dann in das von dir Beschriebene "Affenformular" einbinden?

        Was hast Du denn probiert und bist gescheitert? Vielleicht brauchst Du nur etwas Zeit, um das Posting in Ruhe zu durchstöbern und diverse Dinge damit auszuprobieren...?

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Was hast Du denn probiert und bist gescheitert? Vielleicht brauchst Du nur etwas Zeit, um das Posting in Ruhe zu durchstöbern und diverse Dinge damit auszuprobieren...?

          Hi,
          Hat leider ein bischen länger gedauert weil ich bis heute keine Zeit gehabt habe.  Ja ansich funkioniert alles. Ich habe es jezt so gelöst:

          Script:~~~php <?php
          include ("includes/validation/validation_functions_kon.php");
          if (@$_POST['gesendet']) {
            $vorname = @$_POST['vorname'];
            $nachname = @$_POST['nachname'];
            $email = @$_POST['email'];
            $betreff = @$_POST['betreff'];
            $nachricht = @$_POST['nachricht'];

          if ( get_magic_quotes_gpc() ) {
            $vorname = stripslashes($vorname);
            $nachname = stripslashes($nachname);
            $email = stripslashes($email);
            $betreff = stripslashes($betreff);
            $nachricht = stripslashes($nachricht);
          }

          $gueltig1 = verifiziereAlphaNum ($vorname);
          if (!$gueltig1) {
          $fehler_nachricht[]="Vorname darf nur aus Buchstaben, Zahlen, Leerzeichen, Bindestrichen und ' bestehen.";
          }

          $gueltig2 = verifiziereAlphaNum ($nachname);
          if (!$gueltig2) {
          $fehler_nachricht[]="Nachname darf nur aus Buchstaben, Zahlen, Leerzeichen, Bindestrichen und ' bestehen.";
          }

          $gueltig3 = verifiziereEmail ($email);
          if (!$gueltig3){
          $fehler_nachricht[]="Email muss ein g&uuml;ltiges Format besitzen (z.B. beispiel@hotmail.com).";
          }

          $gueltig4 = verifiziereAlphaNum ($betreff);
          if (!$gueltig4) {
          $fehler_nachricht[]="Betreff darf nur aus Buchstaben, Zahlen, Leerzeichen, Bindestrichen und ' bestehen.";
          }

          $gueltig5 = verifiziereText ($nachricht);
          if (!$gueltig5){
          $fehler_nachricht[]="Nachricht darf nur Buchstaben, Zahlen und diese Zeichen enthalten " ' - ? ! enthalten";
          }

          $ziel_email="EMAIL";

          $email_hauptteil = "Sie haben folgende Nachricht erhalten: \n\n";
          $email_hauptteil .="Email: ";
          $email_hauptteil .="$email";
          $email_hauptteil .="\nVorname: ";
          $email_hauptteil .=$vorname;
          $email_hauptteil .="\nNachname: ";
          $email_hauptteil .="$nachname";
          $email_hauptteil .="\nBetreff: ";
          $email_hauptteil .=$betreff;
          $email_hauptteil .="\nNachricht: ";
          $email_hauptteil .=$nachricht;
          $email_hauptteil .= "\n\nDatum/Zeit: ";
          $email_hauptteil .= date("d.m.Y H:i:s");

          if (!$fehler_nachricht) {
            mail ($ziel_email, $betreff, $email_hauptteil, "From: ".$_REQUEST['email']);
            header ('Location: a_kontakt.php');
            exit();
            }
          }
          ?>
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
          <head>
          <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
          <title>Page</title>
          <link rel="stylesheet" media="all" type="text/css" href="css/css.css" />
          </head>
          <body>
            <div id="wrapper">
              <div id="header">
                <img src="img/logo.png" alt="" height="200" />
              </div><!--header-end-->
              <div id="content">
                <fieldset id="field_kon">
                  <legend class="legend">Kontakt</legend>
                  <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
                  <?php
                  if ($fehler_nachricht) {
                  echo "<ul>\n";
                    foreach ($fehler_nachricht as $fehler) {
                    echo"<li>".$fehler."</li>\n";
                    }
                  echo "</ul><br /><br />\n";
                  }
                  ?>
                    <p><label for="vorname">Vorname</label>
                      <input <?php if (@$_POST['gesendet']) {if (!$gueltig1) {echo 'class="error"'; }} ?> name="vorname" type="text" size="20" id="vorname" value="<?php echo $vorname ?>" /></p>
                    <p><label for="nachname">Nachname</label>
                      <input <?php if (@$_POST['gesendet']) {if (!$gueltig2) {echo 'class="error"'; }}?> name="nachname" type="text" size="20" id="nachname" value="<?php echo $nachname ?>" /></p>
                    <p><label for="email">Email</label>
                      <input <?php if (@$_POST['gesendet']) {if (!$gueltig3) {echo 'class="error"'; }}?> name="email" type="text" size="20" id="email" value="<?php echo $email ?>" /></p>
                    <p><label for="betreff">Betreff</label>
                      <input <?php if (@$_POST['gesendet']) {if (!$gueltig4) {echo 'class="error"'; }} ?> name="betreff" type="text" size="20" id="betreff" value="<?php echo $betreff ?>" /></p>
                    <p><label for="nachricht">Nachricht</label>
                      <textarea <?php if (@$_POST['gesendet']) {if (!$gueltig5) {echo 'class="error"'; }} ?> name="nachricht" rows="10" cols="40" id="nachricht"><?php echo $nachricht ?></textarea></p>
                    <p class="button"><input type="reset" name="Zurücksetzen" id="r_button" value="Zur&uuml;cksetzen" />
                      <input type="submit" name="gesendet" id="s_button" value="Senden" /></p>
                  </form>
                </fieldset>
              </div><!--content-end-->
              <div id="footer">
                &copy; Simon Schnabl 2008 &nbsp;| <a href="index.php">Home</a> | <a href="impressum.php">Impressum</a> | <a href="kontakt.php">Kontakt</a>
              </div><!--footer-end-->
            </div><!--wrapper-end-->
          </body>
          </html>

            
          Ich weis dass ich, wie du schon gesagt hast, die beiden Trennen solte aber da ich nicht sehr viel zeit im Moment hab ich es so gelassen.  
            
          Nochmals danke für alles  
          MfG  
          Simon
          
    2. Hi,

      Ich habe allerdings noch nicht geprüft, ob auch folgende Zeile ohne Fehlermeldung gelingt:

      $nachname = $_POST['nachname'] || '';

      Du benutzt hier einen boolschen Operator, der besagt, $nachnahme soll dann true sein, wenn $_POST['nachname'] true ist (also ungleich 0) oder wenn '' true ist (also ungleich 0). In C liesse sich das sogar kompilieren, solange nachname nicht als String deklariert ist. Da es diese Typprüfung in PHP nicht gibt, kommt wahrscheinlich auch kein Fehler. Wäre aber natürlich unsinnig, nachname wäre immer true, also 1.

      Ciao, Stefanie

    3. echo $begrüßung;

      Ich habe allerdings noch nicht geprüft, ob auch folgende Zeile ohne Fehlermeldung gelingt:
      $nachname = $_POST['nachname'] || '';

      In Python ginge das gemäß deiner Intention, in PHP nicht. PHP wertet beides im booleschen Kontext aus und ergibt auch ein boolesches Ergebnis. Python liefert den ersten Wert, wenn der boolesch ausgewertet true ergibt, ansonsten den zweiten. Erst für PHP 6 ist eine Funktion namens ifsetor() geplant, mit der dieses oft benötigte Konstrukt bequemer zu notieren ist. Man kann sich ja eine Implementation der Funktion selbst erstellen, Beispiele dazu findet man mit $suchmaschine.

      echo "$verabschiedung $name";