Formularprüfung

Hallo,

ich möchte gerne die in einem Kontaktformular eingegebene Daten mit PHP auf Vollständigkeit prüfen. Bisher läuft die Prüfung mit Javascript (funktioniert allerdings bekanntermaßen nur bei denen, die JS aktiviert haben).

Hier zunächst das Formular:

Anrede:

Frau
Herr

Name: *

eMail: *

Betreff:

Nachricht: *

* Bitte unbedingt angeben!

So, dann die Prüfung per Javascript:

function ResetCheck () {
 var chk = window.confirm("Wirklich alle Eingaben löschen?");
 document.kontaktformular.name.focus();
 return (chk);
}

function testemail(testString) {
 var suche = /^[\w.-]{2,}\@(?:[a-z0-9-]{2,}\.)\*[a-z0-9-]{2,}\.[a-z]{2,4}$/i;
 return suche.test(testString);
 }

function pruefen () {
EingabeName = document.kontaktformular.name.value;
EingabeNachricht = document.kontaktformular.nachricht.value;
EingabeEmail = document.kontaktformular.email.value;
if (EingabeName == "") {
 alert ("Bitte Namen eingeben!");
 document.kontaktformular.name.focus();
 return false;
 }
else if (EingabeEmail == "" ) {
 alert ("Bitte geben Sie uns eine eMail-Adresse an!");
 document.kontaktformular.email.focus();
 return false;
 }
else if (!testemail(EingabeEmail)) {
 alert ("keine gültige eMail-Adresse!");
 document.kontaktformular.email.value="";
 document.kontaktformular.email.focus();
 return false;
 }
else if (EingabeNachricht == "" ) {
 alert ("Bitte hinterlassen Sie auch eine Nachricht!");
 document.kontaktformular.nachricht.focus();
 return false;
 }
return true;

Und hier noch die Datei mailscript.php:

<?php $admin= '[email protected]';<br /> $subject= 'Formularanfrage www.akk-leo.de';
 $subject2= 'Vielen Dank für Ihre Formularanfrage auf www.akk-leo.de';
 $message= 'Nachrichten an '.$admin.' von '.$email.":\n\n";
 foreach($HTTP\_POST\_VARS as $name=\> $value) {
 $message.= "$name:blush:value\n";
 }
 mail($admin, $subject, $message, "From: $email");
 mail($email, $subject2, $message, "From: $admin");
 header('Location: http://'.getenv('HTTP\_HOST').'/docs/formdanke.php');

?\>

Wie kann ich die JS-Prüfung in das Mailscript mit einbauen und dem Benutzer eine sinnvolle Fehlermeldung geben? Das Formular sollte dann möglichst wieder angezeigt werden, so wie der Benutzer es ausgefüllt hat und dann die entsprechende Meldung dazu. Pflichtfelder sind Name, Email und Nachricht.

Vielen Dank schonmal für Eure Hilfe!

Kerstin

Rückfrage:
Kannst Du PHP?
Ein paar if-klauseln sind nicht wirklich schwer zu schreiben…

das einzig doofe ist, wenn das Formular eine html-Datei ist und dann bei Fehlern alle Eingaben gelöscht würden…

wenns ne php-datei ist…
die Values mit leeren Variablen füllen und bei Fehler diese Variablen belegen und das Formular includieren.

Kannst Du PHP?

Nein, leider so gut wie nix :frowning:

Ein paar if-klauseln sind nicht wirklich schwer zu
schreiben…

das einzig doofe ist, wenn das Formular eine html-Datei ist
und dann bei Fehlern alle Eingaben gelöscht würden…

wenns ne php-datei ist…
die Values mit leeren Variablen füllen und bei Fehler diese
Variablen belegen und das Formular includieren.

Es ist eine PHP-Datei, da dort ein Counter vorhanden ist (den ich allerdings auch nicht selbst geschrieben habe).

HTML, CSS und Javascript sind soweit kein Problem für mich (das habe ich auch alles selbst gemacht), nur mit PHP hab ich mich noch überhaupt nicht beschäftigt.

Grüße,
Kerstin

servus,

das ganze geht eigentlich ziemlich einfach, ausser dem sollten die
bei die name attributte immer unterschiedlich benannt werden.

if ($_SERVER[‚REQUEST_METHOD‘] == $_POST){
if ($_POST[‚anrede‘] == „“){
$err_msg = „Fehler: Keine Anrede“;
}
.
.
}
else{
anzeige des Formulars
}

Formular in eigenes files auslagern und entweder mittels template oder include an der gewünschte stelle wieder einbinden.

im formular die values durch template variablen oder durch $_POST[‚anrede‘] ersetzten.

entweder $_POST oder $_GET mittels method=‚post‘ oder method=‚get‘ im form tag eingeben.

zcmaster

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

servus,

Hi,

das ganze geht eigentlich ziemlich einfach,

… wenn man es kann, sicherlich…

ausser dem sollten die
bei die name attributte
immer unterschiedlich benannt werden.

Hm, dafür ist doch die unterschiedliche ID da. Denn wenn ich dort unterschiedliche namen verwende, wird doch nicht mehr automatisch „Herr“ deaktiviert, sobald „Frau“ angeklickt wird und umgekehrt.

if ($_SERVER[‚REQUEST_METHOD‘] == $_POST){
if ($_POST[‚anrede‘] == „“){
$err_msg = „Fehler: Keine Anrede“;
}
.
.
}
else{
anzeige des Formulars
}

Soll das in die Datei mailscript.php? Wenn ja, hab ich aber trotzdem noch nicht genau verstanden, wie das laufen soll.

Formular in eigenes files auslagern und entweder mittels
template oder include an der gewünschte stelle wieder
einbinden.

Ja, das habe ich hinbekommen :smile:))

Hier die Datei formular.php:

<?php echo "<form method=\"post\" action=\"../phpscript/mailscript.php\" onSubmit=\"return pruefen();\" onReset=\"return ResetCheck();\" name=\"kontaktformular\">\n";
echo " 

\n";
echo " \n";
echo " Anrede:\n";
echo " \n";
echo " Frau\n";
echo " Herr\n";
echo " \n";
echo " \n";
echo " \n";
echo " Name: *\n";
echo " \n";
echo " \n";
echo " \n";
echo " eMail: *\n";
echo " \n";
echo " \n";
echo " Betreff:\n";
echo " \n";
echo " \n";
echo " Nachricht: *\n";
echo " \n";
echo " \n";
echo " \n";
echo " * Bitte unbedingt angeben!\n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
?>

die ich mit

<?php include("../phpscript/formular.php");<br /> ?\>

wieder eingebunden habe. Soweit alles klar.

im formular die values durch template variablen oder durch
$_POST[‚anrede‘] ersetzten.

entweder $_POST oder $_GET mittels method=‚post‘ oder
method=‚get‘ im form tag eingeben.

Sorry, hier verstehe ich nur noch Bahnhof :frowning:

Kannst Du das nochmal etwas genauer erklären für einen absoluten PHP-Anfänger?

Danke.

zcmaster

Grüße, Kerstin

morgen kerstin,

vielleicht hilft ja das:

function GetForm($_postdata = null){
$form = "
\n

„.$_postdata[‚error‘].“
Anrede:\

Frau
Herr

Name: *

eMail: *

Betreff:

Nachricht: *

„.$_postdata[‚nachricht‘].“
* Bitte unbedingt angeben!

";
return $form;
}

if ($_SERVER[‚REQUEST_METHOD‘] == „POST“ && isset($_POST[‚Abschicken‘])){
$err_msg = null;
//Formulareingaben Prüfen
if ($_POST[‚name‘] == „“){
$err_msg = „Geben Sie bitte Ihren Namen ein.“;
}
if ($_POST[‚email‘] == „“){
$err_msg = „Geben Sie bitte Ihre E-Mailadresse ein.“;
}
if ($_POST[‚nachricht‘] == „“){
$err_msg = „Geben Sie bitte eine Nachricht ein.“;
}
if ($err_msg != null){
$_postdata = $_POST;
$_postdata[‚error‘] = $_postdata;
print GetForm($_postdata);
}
else{
$to = $an_wenn_soll_die_nachricht_gehen;
mail($an_wenn_soll_die_nachricht_gehen,$_POST[‚betreff‘],$_POST[‚nachricht‘],„FROM:“.$_POST[‚email‘]);
print „Ihre NAchricht wurde erfolgreich verschickt.“;
}
}
else{
print GetForm();
}

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

nein, hilft leider nicht wirklich :frowning:

soll das die externe Datei für das Formular sein? Oder die Datei mailscript.php? Die sieht bisher ja so aus:

<?php $admin= '[email protected]';<br /> $subject= 'Formularanfrage www.akk-leo.de';
 $subject2= 'Vielen Dank für Ihre Formularanfrage auf www.akk-leo.de';
 $message= 'Nachrichten an '.$admin.' von '.$email.":\n\n";
 foreach($HTTP\_POST\_VARS as $name=\> $value) {
 $message.= "$name:blush:value\n";
 }
 mail($admin, $subject, $message, "From: $email");
 mail($email, $subject2, $message, "From: $admin");
 header('Location: http://'.getenv('HTTP\_HOST').'/docs/formdanke.php');
?\>

Also, ist alles korrekt ausgefüllt (Prüfung über JavaScript), dann wird das Formular per eMail an den Admin geschickt sowie eine Kopie zu dem User, der das Formular ausgefüllt hat. Dann wird auf eine Seite weitergeleitet, auf der steht, daß das Formular erfolgreich verschickt wurde. Das soll auch so bleiben.

Also wie baue ich die Prüfung hier jetzt ein???

Sorry, daß ich es nicht verstanden habe, aber PHP ist für mich im Moment noch so undurchsichtig. Ich kann bei meinen PHP-Dateien wohl nachvollziehen, welche Codezeile für welche Aktion verantwortlich ist, aber mehr eben auch nicht. Ein paar Erklärungen wären also nicht schlecht. Danke!

Kerstin

morgen kerstin,

vielleicht hilft ja das:

function GetForm($_postdata = null){
$form = "
\n

„.$_postdata[‚error‘].“

Anrede:\

Frau
Herr

Name: *

eMail: *

Betreff:

Nachricht: *

„.$_postdata[‚nachricht‘].“

* Bitte unbedingt
angeben!

";
return $form;
}

if ($_SERVER[‚REQUEST_METHOD‘] == „POST“ &&
isset($_POST[‚Abschicken‘])){
$err_msg = null;
//Formulareingaben Prüfen
if ($_POST[‚name‘] == „“){
$err_msg = „Geben Sie
bitte Ihren Namen ein.“;
}
if ($_POST[‚email‘] == „“){
$err_msg = „Geben Sie
bitte Ihre E-Mailadresse ein.“;
}
if ($_POST[‚nachricht‘] == „“){
$err_msg = „Geben Sie
bitte eine Nachricht ein.“;
}
if ($err_msg != null){
$_postdata = $_POST;
$_postdata[‚error‘] = $_postdata;
print GetForm($_postdata);
}
else{
$to = $an_wenn_soll_die_nachricht_gehen;

mail($an_wenn_soll_die_nachricht_gehen,$_POST[‚betreff‘],$_POST[‚nachricht‘],„FROM:“.$_POST[‚email‘]);
print „Ihre NAchricht wurde erfolgreich verschickt.“;
}
}
else{
print GetForm();
}

servus,

das bsp. script das ich gepostet habe ist eigentlich selbsterklärend.
ein wenig arbeit schadet niemanden.

zcmaster