Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Email Formular

  1. #1
    Azubi(ne)
    Registriert seit
    05.06.2008
    Beiträge
    71
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard Email Formular

    Hallo,

    hier ist mein Versuch eines Email Formulars, Dabei benutze ich PHPMailer zum versenden von Email. Mit Hilfe des kleinen Tutorials funktioniert es schon recht gut. Aus meiner Html übergebe ich die Variablen an meine php, die ich dann in die Variablen vom PHPMailer übergeben werden.
    Nun möchte ich das Formular noch ein wenig benutzerfreundlicher machen und versuche Pflichtfelder einzubauen (Name und Absenderemail). Bei Nichteingabe (in php bedeuted das: empty string '' ), kommt eine Error message zurück. Das habe ich auch hinbekommen.
    Bei Eingabe der Pfichtfelder sollte die Email versendet werden. Dazu muss ich die if Schleife [ if(!$mail->Send()) ] vom PHPMailer in meine CheckForm Function einbauen. Allerdings liegt hier mein Problem. Ich hoffe ihr versteht meinen Ansatz zu den Pflichtfeldern.


    Hier mal die komplette Email Formular php:
    Code:
    <?
     //include class
     require('phpmailer/class.phpmailer.php');
     
     //create instanz from PHPMailer  
     $mail = new PHPMailer();
     
     //variables from email_form.html 
     $name = $_POST['name']; 
     $email = $_POST['email'];
     $subject = $_POST['subject'];
     $message = $_POST['message'];
     
     $myEmail = 'meineEmail@xyz.com';
     
       //sender email
     $mail->From = $email;
     
     //sender name
     $mail->FromName = $name;
     
     //mail to address
     $mail->AddAddress($myEmail);
     
     //email subject
     $mail->Subject = $subject;
     
     //message text
     $mail->Body = $message;
     
     //send email and check if it was sent
     if(!$mail->Send())
     {
      //$mail->Send() returns FALSE: Error
      echo "The Email could not been sent";
      echo "Error: " . $mail->ErrorInfo;
     }
     else
     {
      //$mail->Send() returns TRUE: Success
      echo "The Email was sent.";
     }
     
     
     //testing for mandatory fields
     $strErrorMessage = CheckForm( $name, $email );
     
        if ($strErrorMessage > '')
        {
      echo $strErrorMessage; //this will retured when mandatory field are not filled in
        }
        else
        {
      echo "" Success; //this will returend when email has been sent successfully 
        }
    function CheckForm( $name, $email )
    {
     if ( $name == '' )   
     {
      $strErrorMessage = "Please enter your Name ... <br />";
     }
     if ( $email == '' )   
      {
       $strErrorMessage = $strErrorMessage . "Please enter your Email ... <br />";
      }
     if ( $name == '' AND $email == '' )   
      {
       $strErrorMessage = "You have to enter your Name and Email ... <br />";
      }
        if ($strErrorMessage == '') 
     {
      //if the error message is empty which means the mandatory field are filled in my email sould be ready to go!
     
     }
     
     return $strErrorMessage; 
    } 
     
    ?>
    Danke
    Seb
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    der/die Göttliche Avatar von jojo87
    Registriert seit
    23.03.2007
    Ort
    Leipzig
    Alter
    30
    Beiträge
    3.131
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Email Formular

    wo is dein Problem?
    PHP-Code:
    if(empty($strErrorMessage))
    {
      
     
    //send email and check if it was sent
     
    if(!$mail->Send())
     {
      
    //$mail->Send() returns FALSE: Error
      
    echo "The Email could not been sent";
      echo 
    "Error: " $mail->ErrorInfo;
     }
     else
     {
      
    //$mail->Send() returns TRUE: Success
      
    echo "The Email was sent.";
     }
    }
    else 
    {
      echo 
    $strErrorMessage;


  3. #3
    Azubi(ne)
    Themenstarter

    Registriert seit
    05.06.2008
    Beiträge
    71
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Email Formular

    Hallo,

    danke jojo, ich habe mal folgendes probiert:
    Code:
     //Klasse einbinden
     require('phpmailer/class.phpmailer.php');
     
     $strErrorMessage = CheckForm( $name, $email );
     echo $strErrorMessage;
     include 'email_form.html';
     
    function CheckForm( $name, $email )
    {     
     if(empty($name) and empty($email))
     {
      $strErrorMessage = "Ich brauche Name und Email ... <br />";
     }
     elseif(empty($name))
     {
      $strErrorMessage = "Name bitte ... <br />";
     }
     elseif(empty($email))
     {
      $strErrorMessage = "Email bitte... <br />";
     }
     else 
     {
      $mail = new PHPMailer();
     
      $name = $_POST['name']; 
      $email = $_POST['email']; //Absender email
      $subject = $_POST['subject'];
      $message = $_POST['message'];
     
      $myEmail = 'meine@Email.de';
     
      //Absenderadresse der Email setzen
      $mail->From = $email;
     
      //Name des Abenders setzen
      $mail->FromName = $name;
     
      //Empfängeradresse setzen
      $mail->AddAddress($myEmail);
     
      //Betreff der Email setzen
      $mail->Subject = $subject;
     
      //Text der EMail setzen
      $mail->Body = $message;
     
      //send email and check if it was sent
      if(!$mail->Send())
      {
       //$mail->Send() returns FALSE: Error
       $strErrorMessage = "Die Mail konnte nicht gesendet werden! Error: " . $mail->ErrorInfo;
      }
      else
      {
       //$mail->Send() returns TRUE: Success
       $strErrorMessage = "Die Mail wurde gesendet.";
      }
     
     } 
     return $strErrorMessage; 
    }
    Testen kann man hier: http://www.sebastianrost.de/test/email_form.html

    Eine Sache stört mich aber, warum verlangt die if(!$mail->Send()) Schleife, dass ich alle Variablen in die CheckForm Funktion hineinbringen muss. Diese Variablen meine ich:
    Code:
      $mail = new PHPMailer();
     
      $name = $_POST['name']; 
      $email = $_POST['email']; //Absender email
      $subject = $_POST['subject'];
      $message = $_POST['message'];
     
      $myEmail = 'meine@Email.de';
     
      //Absenderadresse der Email setzen
      $mail->From = $email;
     
      //Name des Abenders setzen
      $mail->FromName = $name;
     
      //Empfängeradresse setzen
      $mail->AddAddress($myEmail);
     
      //Betreff der Email setzen
      $mail->Subject = $subject;
     
      //Text der EMail setzen
      $mail->Body = $message;
    Wäre es nicht besser die stünden außerhalb der Funktion, so dass ich diese für weitere Funktionen nutzen könnte. Diese Variablen sind doch jetzt nur innerhalb der Funktion ansprechbar, oder?

    Danke
    Sero

  4. #4
    Bandit
    Gast

    Standard AW: Email Formular

    Ich möchte dir jetzt keine fertige Lösung posten, sondern mal ein paar Denkanstöße geben.

    1. Du hast eine Funktion CheckForm, gut
    2. Was macht die Funktion?
    3. Überlege, was man bei CheckForm erwartet.

  5. #5
    Azubi(ne)
    Themenstarter

    Registriert seit
    05.06.2008
    Beiträge
    71
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Email Formular

    Also CheckForm überprüft ob die Pflichtfelder ausgefüllt sind oder nicht. Falls alle Pflichtangaben eingegeben wurden, wird die email versendet mit Hilfe des PHPMailer.
    Diese Variablen stehen innerhalb von CheckForm:
    Code:
      $name = $_POST['name']; 
      $email = $_POST['email']; //Absender email
      $subject = $_POST['subject'];
      $message = $_POST['message'];
     
      $myEmail = 'meine@Email.de';
    Setze ich diesen Block an den Anfang meiner php (außerhalb von CheckForm) findet send() nicht die Variablen und die mail wird leer versendet.
    Schlecht ist jetzt, dass diese Variablen außerhalb von CheckForm nicht ansprechbar sind (z.B. über echo $email; etc.) und somit für weitere functionen unbrauchbar sind.
    Kannst du mir noch mal einen weiteren Tip geben.

  6. #6
    Bandit
    Gast

    Standard AW: Email Formular

    Zitat Zitat von sero79 Beitrag anzeigen
    Also CheckForm überprüft ob die Pflichtfelder ausgefüllt sind oder nicht.
    Genau richtig.
    Zitat Zitat von sero79 Beitrag anzeigen
    Falls alle Pflichtangaben eingegeben wurden, wird die email versendet mit Hilfe des PHPMailer.
    Und das ist der Fehler! CheckForm sollte eben nicht die eMail senden, sondern nur prüfen. Wenn du diese Funktion mal ohne Mail-Versand brauchst, fängst du wieder an zu stricken. Also den ganzen Kram mit dem phpMailer aus der Funktion rausnehmen und in eine weitere Funktion packen.

  7. #7
    Azubi(ne)
    Themenstarter

    Registriert seit
    05.06.2008
    Beiträge
    71
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Email Formular

    Also habe folgendes gemacht:
    Code:
     //Klasse einbinden
     require('phpmailer/class.phpmailer.php');
     
     $name = $_POST['name']; 
     $email = $_POST['email'];
     $subject = $_POST['subject'];
     $message = $_POST['message'];  
     
     echo "<br>". $name ."<br>". $email ."<br>". $subject ."<br>". $message ."<br>". $strErrorMessage ."<br>";
     
     
     $myEmail = 'meine@Email.de';
     
     //Absenderadresse der Email setzen
     $mail->From = $email;
     
     //Name des Abenders setzen
     $mail->FromName = $name;
     
     //Empfängeradresse setzen
     $mail->AddAddress($myEmail);
     
     //Betreff der Email setzen
     $mail->Subject = $subject;
     
     //Text der EMail setzen
     $mail->Body = $message;
     
     $strErrorMessage = CheckForm( $name, $email );
     echo $strErrorMessage;
     include 'email_form.html';
     
    function CheckForm( $name, $email )
    {     
     if(empty($name) and empty($email))
     {
      $strErrorMessage = "Ich brauche Name und Email ... <br />";
     }
     elseif(empty($name))
     {
      $strErrorMessage = "Name bitte ... <br />";
     }
     elseif(empty($email))
     {
      $strErrorMessage = "Email bitte... <br />";
     }
     else 
     {
      $strErrorMessage = SendEmail( $mail );  
     } 
     return $strErrorMessage; 
    }
    function SendEmail( $mail )
    {
     //send email and check if it was sent
     if(!$mail->Send())
     {
      //$mail->Send() returns FALSE: Error
      $strErrorMessage = "The Email could not been sent! Error: " . $mail->ErrorInfo;
     }
     else
     {
      //$mail->Send() returns TRUE: Success
      $strErrorMessage = "The Email was sent.";
     }
     return $strErrorMessage; 
    }
    Ich habe eine neue Function erstellt SendEmail und das Erbenis in die $strErrorMessage gepackt dann rufe ich $strErrorMessage = SendEmail( $mail ); in CheckForm wieder auf.
    Klappt aber wiederrum nicht da mail->Send() die Variablen nicht findet. Wenn ich alle Variablen in die SendEmail verschiebe gehts wieder, aber stehe ich ja wieder am Anfang! Hast du noch ne Idee wie ich die Variablen außerhalb der Funktionen belassen kann, aber trotzdem in die Funktionen überführen kann.
    Danke

  8. #8
    Bandit
    Gast

    Standard AW: Email Formular

    Ein wenig mitdenken wäre nicht schlecht. Ungetestet:
    PHP-Code:
    <?php
      
      $strErrorMessage 
    CheckForm($_POST['name'], $_POST['email']);
     
     if (
    strlen($strErrorMessage))
     {
        echo 
    $strErrorMessage;
     }
     else
     {
        
    $strErrorMessage SendMail($_POST['name'], $_POST['email'], $_POST['subject'], $_POST['message']);
      
        if (
    strlen($strErrorMessage))
        {
           echo 
    $strErrorMessage;
        }
        else
        {
           echo 
    "Mail sent";
        }    
     } 
     
    //------------------------------------------------------------------ 
    function CheckForm$name$email )
    {
      
    $strErrorMessage "";
      
      if(empty(
    $name) and empty($email))
      {
         
    $strErrorMessage "Ich brauche Name und Email ... <br />";
      }
      elseif(empty(
    $name))
      {
         
    $strErrorMessage "Name bitte ... <br />";
      }
      elseif(empty(
    $email))
      {
        
    $strErrorMessage "Email bitte... <br />";
      }

      return 
    $strErrorMessage
    }

    //------------------------------------------------------------------
    function SendEmail($name$mail$subject$message )
    {
       
    $strErrorMessage "";
       
       
    //Klasse einbinden
       
    require('phpmailer/class.phpmailer.php');
        
       
    $mail = new phpMailer():

       
    $myEmail 'meine@Email.de';
     
       
    //Absenderadresse der Email setzen
       
    $mail->From $email;
     
       
    //Name des Abenders setzen
       
    $mail->FromName $name;
     
       
    //Empfängeradresse setzen
       
    $mail->AddAddress($myEmail);
     
       
    //Betreff der Email setzen
       
    $mail->Subject $subject;
     
       
    //Text der EMail setzen
       
    $mail->Body $message;
     
       include 
    'email_form.html';

       
    //send email and check if it was sent
       
    if(!$mail->Send())
       {
         
    //$mail->Send() returns FALSE: Error
         
    $strErrorMessage "The Email could not been sent! Error: " $mail->ErrorInfo;
       }

       return 
    $strErrorMessage
    }
    Ich würde allerdings auch noch die anderen Felder prüfen, sonst macht das keinen Sinn.
    Geändert von bandit600 (13.11.2008 um 13:07 Uhr)

  9. #9
    Azubi(ne)
    Themenstarter

    Registriert seit
    05.06.2008
    Beiträge
    71
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Email Formular

    vielen Dank, es funktioniert!
    Sorry, aber ich bin noch in der PHP Lernphase und mir ist noch nicht alles bekannt. Damit es aber beim nächsten mal besser klappt habe ich noch ein Paar Fragen (für den Lerneffekt ):

    1. Warum übergibts du die Form varibles nicht in php varibles, wie z.B. so
      PHP-Code:
      $name $_POST['name']; 
      gibt es da einen bestimmten Grund?
    2. Welche Rolle spielt dieser Ausdruck in beiden Functions.
      PHP-Code:
      $strErrorMessage ""
      Ich weiss was es bedeutet aber wozu wird es benötigt?.
    3. zur strlen function: wenn $strErrorMessage einen Wert besitzt (nicht leer ist), dann wird die Errormessage angezeigt (z.B. der Name fehlt). Eine leere Errormessage (empty string ist 0 / ist er auch False?) bewirkt, dass die else Schleife weiter ausgewertet wird. Ist das so richtig erklärt?
    Gruß Sero

  10. #10
    Bandit
    Gast

    Standard AW: Email Formular

    Zu 1. Warum umschreiben? Den Wert hast du im Post-Array, das reicht doch.
    Zu 2. PHP ist relativ schlampig, was die Initialisierung von Variablen angeht. Es ist einfach besser, wenn man einen definierten Wert hat. Ich habe deine Variablennamen einfach übernommen, normalerweise heißt bei mir die Returnvariable $result. Es macht auch deshalb Sinn, wenn man ein true/false von einer Funktion erwartet. Dann initialisiere ich $result mit false und wenn alles OK ist, wird $result zu true. Das ist einfach saubereres Programmieren.
    Zu 3. Das ist auch so eine Sache. Wenn du mit "echten" Programmiersprachen arbeitest, dann gibt einen definierten Rückgabewert. Entweder bool, int, string, etc. PHP ist da leider nicht so pingelig, trotzdem meide ich solche Zwitter, das trägt auch zur Lesbarkeit bei.

Ähnliche Themen

  1. eMail Formular
    Von saugeimer im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 8
    Letzter Beitrag: 26.10.2008, 19:42
  2. Antworten: 3
    Letzter Beitrag: 03.11.2007, 13:22
  3. Text in Page laden + Formular für email + scrollbar
    Von micson im Forum HTML & CSS Forum
    Antworten: 8
    Letzter Beitrag: 03.06.2007, 22:19
  4. Problem mit Email-Formular
    Von Jens_M im Forum HTML & CSS Forum
    Antworten: 1
    Letzter Beitrag: 29.04.2006, 22:24
  5. Formular auf Email Abschicken ohne PHP
    Von GAST im Forum HTML & CSS Forum
    Antworten: 5
    Letzter Beitrag: 16.06.2004, 17:39

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •