Hallo, ich habe eine PHP Datei (index.php), die mir über ein Template (maintemplate.tpl) eine Seite mit einem Kontaktformular ausgibt. Die Daten aus dem Kontaktformular werden an eine weitere PHP Datei (send.php) geschickt, dort verarbeitet und als Mail verschickt. Danach wird eine Dankesseite ausgegeben. Soweit funktioniert alles sehr gut. Jetzt möchte ich bei fehlerhafter Eingabe der E-Mail Adresse oder leerem Textfeld eine Fehlermeldung ausgeben. Die Fehler werden in der send.php Datei ermittelt, funktioniert auch, und sollen dann wieder über die index.php ausgegeben werden. Ich habe Probleme, die Fehlermeldung über "preg_replace" wieder an die Ausgabeseite zu geben, da gibt es immer wieder Fehler. Kann mir jemand einen Rat diesbezüglich geben bzw. wie programmiert man ein solches Formular typischerweise? Vielen Dank Stefan
mach doch beides in einer Datei dann ist das Problem weg. Wenn dir das nicht gefällt kannst du auch noch eine 3. Datei anlegen in welchen der Formular und der Fehlertext erzeugt wird und dise bindest du dann in die index und send per include ein.
Fehlermeldung? Quellcode? Herangehensweisen gibts mehrere. * Über eine Datei. Man wertet über GET/POST den Status der Seite aus. Wird die Seite blank aufgerufen => Template "Eingabe". Werden Daten übergeben => Daten überprüfen Daten OK => Senden und Template "danke" ausgeben Daten NOK => Template "Eingabe" mit Fehler ausgeben (zusätzliche Var {error} oder ähnliches) * Mehrere Dateien... ähnlich wie oben, nur wird hier id. regel auf die erste Seite zurückverwiesen und mit Sessions gearbeitet.
Vielen Dank erstmal für die schnelle Antworten!! Vom Prinzip hab ich es verstanden, jedoch funktioniert es in der Praxis nicht. Ich habe hier ausschnittsweise den Quellcode: ______________________________________________________________________ __ kontakt.php: ___________ <form action="send.php" method="post"> Kontaktformular <table border="0" cellpadding="0" cellspacing="5"> <tr> <td>Name:</td> <td></td> <td><input name="name" type="text" id="vorname" tabindex="1" size="35" maxlength="100"/></td> </tr> <tr> <td>E-Mail:</td> <td></td> <td><input name="mail" type="text" class="[%class_mail%]" id="email" tabindex="2" size="35" maxlength="100" /></td> </tr> <tr> <td>Betreff:</td> <td></td> <td><input name="betreffzeile" style="width:340px" type="text" id="betreff" tabindex="3" size="60" maxlength="100"/></td> </tr> </table> <textarea name="text" style="width:485px" cols="40" rows="8" class="[%class_text%]" id="anfrage" tabindex="4" ></textarea> <table border="0" cellpadding="0" cellspacing="5"> <tr> <td><input class="checkbox" name="mailcopy" type="checkbox" id="mail_copy" value="1" tabindex="5" /></td> <td>Sie möchten eine Kopie dieser Nachricht erhalten</td> </tr> </table> <input name="kontakt" type="submit" class="button" value="Absenden" tabindex="6" /> <input type="reset" class="button" value="Löschen" tabindex="7" /> ______________________________________________________________________ __ send.php: ___________ if(isset($_POST['kontakt'])) check_data(); function check_data() { if(empty($_POST['mail']) or empty($_POST['text'])) HIER SOLLTE DIE ANWEISUNG STEHEN, DAS FELD [%class_mail%] AUS DER kontakt.php ZU ERSETZEN: z.B. (oder so ähnlich!?) $class_mail_error = "formular"; $page = preg_replace("/\[\%class_mail\%\]/", $class_mail_error, $page); echo $page; else check_mail(); } ______________________________________________________________________ __ Die Seite aktualisiert sich nicht mit der neuen Variable ($class_mail_error ), da kommt dann ein weißer Bildschirm. Ich habe schon einiges versucht und irgendwie will es nicht funktionieren!? Vielen Dank für Euere Hilfe!!! Stefan
Ich verstehe den Sinn dieses Konstruktes nicht ganz. Arbeitest du jetzt mit Templates oder nicht? Warum ist die Form in einem php-File?
Ich habe die Sache hier vereinfacht dargestellt, so dass ich das Kontaktformular in der kontakt.php aufrufe und die Daten an die send.php schicke. In der send.php wird dann überprüft, ob die Daten soweit korrekt sind, sind sie es nicht, dann soll sich die kontakt.php mit der neuen Variable [%class_mail%] = "formular" aktualisiert darstellen. Das Kontaktformular wird über index.php?page=kontakt aufgerufen, dahinter verbirgt sich dann auch das Template. Ich wollte das hier aber nicht ganz ausführen, da es zu komplex ist. Mein Problem besteht darin, dass ich über die send.php ein Feld [%class_mail%] in der kontakt.php aktualisieren möchte und das funktioniert nicht: kontakt.php: _________ <form action="send.php" method="post"> Kontaktformular ... <td><input name="mail" type="text" class="[%class_mail%]" id="email" tabindex="2" size="35" maxlength="100" /></td> </tr> ... send.php: _________ ... function check_data() { if(empty($_POST['mail'])) HIER SOLLTE DIE ANWEISUNG STEHEN, DAS FELD [%class_mail%] AUS DER kontakt.php ZU ERSETZEN: z.B. (oder so ähnlich!?) $class_mail_error = "formular"; $page = preg_replace("/\[\%class_mail\%\]/", $class_mail_error, $page); echo $page; else check_mail(); } ...
DU kannst oben in '<form action="send.php"..' als Ziel die "index.php" reinschreiben: '<form action="index.php"..', dann werden die Eingaben an die "index.php" gesendet. In der index.php musst du die Information ermitteln, was gerade zu tun ist: wenn noch keine Eingaben vorliegen, dann zeigst du die Eingabeform. Wenn Eingaben vorliegen, dann zeigst du entweder die Eingabeform mit Fehlermeldungen, oder sendest die Mail und sagst "Vielen Dank!". Übernimm bitte nicht Benutzereingaben ungeprüft in Mail-Kopfzeilen, ansonsten können Spammer dein Kontaktformular zum Senden von Spam missbrauchen. preg_replace() würde ich weglassen (am Anfang zu kompliziert), sondern vielmehr die Fehler einfach ausgeben (z.B. als <ol>-Liste). Ohne Fehler ist die Liste leer und damit unsichtbar. Natürlich kannst du auch einen Template-Platzhalter ersetzen, da bietet sich str_replace() an (einfacher). viel Spaß noch, hans schnorg
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.