• 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:



    Danke
    Seb

  • wo is dein Problem?


  • Hallo,

    danke jojo, ich habe mal folgendes probiert:



    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:


    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

  • 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.

  • 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.

  • Also CheckForm überprüft ob die Pflichtfelder ausgefüllt sind oder nicht.


    Genau richtig.


    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.

  • Also habe folgendes gemacht:



    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

  • Ein wenig mitdenken wäre nicht schlecht. Ungetestet:


    Ich würde allerdings auch noch die anderen Felder prüfen, sonst macht das keinen Sinn.

    Einmal editiert, zuletzt von bandit600 (13. November 2008 um 12:07)

  • 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 :-)):

    • Warum übergibts du die Form varibles nicht in php varibles, wie z.B. so
      PHP
      $name = $_POST['name'];

      gibt es da einen bestimmten Grund?

    • Welche Rolle spielt dieser Ausdruck in beiden Functions.
      PHP
      $strErrorMessage = "";

      Ich weiss was es bedeutet aber wozu wird es benötigt?.

    • 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

  • 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.

  • noch mal vielen Dank für deine ausführliche Erklärung.

    Ich habe noch ein weiteres Problemchen:
    Mein Kontakt-Formular gibt es in 2 Sprachen und es liegen 2 Kontaktdateien vor. Beide Dateien rufen email_form.php, welche das Formular verabeitet und die email versendet.
    In der email_form.php müssten nun logischerweise die Fehlermeldungen 2 sprachig vorliegen.
    Wie wäre denn hier der Lösungsansatz?
    Ich würde denken, man müsste dem Formular eine id gebne (id=deutsch und id=englisch) und in der email_form.php müsste eine if Schleife auswerten wenn Id=deutsch/englisch dann verwende die Fehlermeldung in deutsch/englisch.
    Wie übergebe ich den die id?

    Danke und schönes WE
    Sero

  • Wie wird denn bei dir die Sprache festgelegt? Idealerweise hält man sich die Sprache in einem Cookie oder in einer Session, dann kommt man jederzeit an den Wert und muss keine Parameter weiterreichen.

  • Also die Sprachauswahl erfolgt über einen simplen Link auf meiner Website. Die html liegen dabei 2 fach vor, zum einen gibt es eine kontakt.html im html Ordner und zum anderen gibt es eine kontakt.html im html_eng Ordner. Beide rufen die kontakt_form.php zum verarbeiten des Formulars auf.
    Leider habe ich mit Cookies und Sessions noch keine Erfahrung? Kannst du mir vielleicht ein Tutorial diesbezüglich empfehlen.
    Danke

  • Hab mal ne Frage kenn irgendeiner von euch eine Seite, in deren man Formular - Email senden kann! <nur HTML Bitte>

    Die auch das unterstützen:
    <input type="hidden" name="env_report" value="REMOTE_ADDR,HTTP_USER_AGENT,REMOTE_HOST,HTTP_REFERER">

    und

    <input type="hidden" name="subject" value="Betreff">

    nur ein Server also:
    <form method="POST" action="HIER DER SERVER">