kostenloser Webspace werbefrei: lima-city


Formular überprüfen mit PHP - Hilfe!

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s***w

    Hallo!
    Der folgende Code umfasst einen PHP-Form-Mailer mit Eingabeüberprüfung. Der Form-Mailer funktioniert ausgezeichnet, aber die Überprüfungsfunktion nicht! Wenn ich den Namen und die Email-Adresse eingebe, wird das Mail abgesendet, obwohl noch kein Text enthalten ist. Fehlt der Name oder die E-Mail-Adresse funktioniert die Eingabenüberprüfung aber, also die Email wird nicht versendet!!!

    Ich arbeite schon sehr lange an diesem Skript und ich komm nicht drauf, warum die Überprüfungsfunktion nur beim Text (logischerweise: textarea-feld) nicht funktioniert. Hat es etwas damit zu tun, dass die anderen 2 Felder, die überprüft werden, <input type=\"text\">-Felder sind?

    Bitte um baldige Hilfe!!

    <?php
    
      function eingabe_check($name,$text,$mail) // Überprüfungsfunktion
      {
        if($name==\"\") // Namensüberprüfung
        {
          $fehler = $fehler.\" <li>ihr Name</li>\";
        }
        if($text==\"\") // Textüberprüfung
        {
          $fehler = $fehler.\"<li>TEXT</li>\";
        }
        if($mail==\"\") // E-Mail-Überprüfung
        {
          $fehler = $fehler.\"<li>ihre emailadresse</li>\";
        }
        if($fehler==\"\")
        {
          return 1;
        }
        else
        {
         echo \"Ihre Eingabe ist nicht korrekt. Es fehlt noch: <ul>$fehler</ul> Bitte machen Sie Ihre Eingabe erneut\";
        }
      }
    
        // Aufruf der Funktion
        if(eingabe_check($_POST[\'versender\'], $_POST[\'nachricht\'], $_POST[\'mailer_email\'])==1)
          { // ab hier ist der Code eigentlich unwichtig
            function filtern($inhalt)
            {
            if(!empty($inhalt))
            {
              $inhalt = strip_tags($inhalt);
              $inhalt = htmlspecialchars($inhalt);
              $inhalt = trim($inhalt);
              $inhalt = stripslashes($inhalt);
            }
            return $inhalt;
          }
          foreach($_POST as $key => $element)
          {
            if($key != \"senden\")
            {
              $daten=filtern($element);
              ${\"mailer_\".$key} = $daten;
              $maildaten .= \"$key: $daten\\n\";
            }
          }
            $webmaster=\"irgendwas@irgendwas.com\";
            $mailinhalt =\"Website-Kontaktformular\\n\\n E-Mail: $mailer_email\\n\\n $maildaten\";
            @mail($webmaster, \"Kontaktformular\", $mailinhalt, \"From: $mailer_email\");
            echo \"
             Die Mail wurde abgeschickt\";
          }
        ?>
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hi,

    also soweit ich das überblicke ist das alles ok so.
    Bei deinem Problem kommt es auf diese Zeile an:

    if(eingabe_check($_POST[\'versender\'], $_POST[\'nachricht\'], $_POST[\'mailer_email\'])==1)

    daraus resultiert dass dein Formular so aussehen muss mit den Namen:

    echo \'<form action=\"\" method=\"post\">\';
    echo \'<input type=\"text\" name=\"versender\">\';
    echo \'<input type=\"text\" name=\"mailer_email\">\';
    echo \'<textarea name=\"nachricht\"></textarea>\';
    echo \'<input type=\"submit\" name=\"senden\">\';
    echo \'</form>\';

    Sollte zum Bsp. bei der Textarea das Name-Attribut fehlen geht´s natürlich nicht. Setze doch evtl mal ein \"var_dump($_POST);\" vor die If Bedingung, dann siehst du was dein Formular so übermittelt.

    Grüßle Scout


    Tipp: nach der Zeile: echo \"Ihre Eingabe ist nicht korrekt. Es fehlt noch: <ul>$fehler</ul> Bitte machen Sie Ihre Eingabe erneut\"; würde ich noch ein \"return 0;\" einpflegen, damit die Funktion immer einen Rückgabewert hat ;-)
  4. Autor dieses Themas

    s***w

    Hallo scout! Vielen Danke für die Antwort!

    Der Tipp mit \"var_dump($_POST)\" war super!! Ich hab damit festgestellt, dass ein Leerzeichen bei der textarea übergeben wird, weil ich in guter alter HTML-Manier das Anfangs- und Endtag immer in verschiedene Zeilen schreibe, so auch das textarea-Tag. Dadurch entsteht ein Leerzeichen und wenn man überprüft, ob das Textarea-Feld leer ist, ist es nie leer weil es immer mit einem Leerzeichen \"gefüllt\" ist. Das war der Fehler - echt gemein ^^!

    Vielen Danke nochmals für die gute Idee!!

    Greets


    Beitrag geändert: 14.12.2007 13:27:26 von sinew
  5. So als kleinen Tipp nebenbei: mit trim() kannst du Leerzeichen am Anfang und Ende einer Variable entfernen. Wenn du das bei dir auf $_POST[\'nachricht\'] anwendest, kannst du deinen html-Quelltext so lassen, wie du ihn hattest.
  6. Das hat jetzt zwar nichts mit dem Thema zu tun aber was macht die Zeile:

    ${\"mailer_\".$key} = $daten;


  7. Das hat jetzt zwar nichts mit dem Thema zu tun aber was macht die Zeile:

    ${\"mailer_\".$key} = $daten;




    In der Zeile werden Variablen deklariert...
    zum Bsp. wenn $key = \"nachrichten\" ist, dann wird die Variable $mailer_nachrichten angelegt und dieser der Wert $daten zugewiesen. Man kann sozusagen dynamische Variablennamen anlegen ;-)

    Grüßle
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!