 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
12.03.2005, 21:17
|
#1
|
|
TP-Senior
Registriert seit: May 2004
|
[PHP] email-Formular prüfen, Eingaben nicht löschen
Moin. Anbei das Skript, das ich zum Versenden von eMails (Kontaktformular) benutze. Es läuft. Nun gibt es aber in dem Skript einige Überprüfungen, die z.B. checken, ob ein Name oder eine gültige email-Adresse angegeben wurden. Wenn jetzt jemand seinen Namen vergisst einzugeben, dann kommt die Fehlermeldung, aber alle Felder sind leer. Das ist natürlich blöde, wenn jemand einen laaaangen Text geschrieben hat, das Teil abschickt und die Fehlermeldung erscheint, der Text aber weg ist.  Ich wusste mal, wie man das hinbekommt, dass Anfangs ein leeres Formular erscheint und bei Fehlern die bereits ausgefüllten Felder weiterhin vorhanden sind. Aber wie? Das ist lange her und ich habs nicht mehr auf meiner Kiste gefunden.  Wäre dankbar für Denkanstöße.
Das Skript:
PHP-Code:
<form action="$_SERVER[PHP_SELF]\" method=\"post\" id=\"thisform\">
<input type=\"hidden\" name=\"formular_gezeigt\" value=\"pos\" />
<fieldset>
<legend>Das Formular</legend>
<p><label for=\"name\">Ihr Name</label><br />
<input type=\"text\" id=\"name\" name=\"name\" /></p>
<p><label for=\"email\">Ihre E-Mail-Adresse</label><br />
<input type=\"text\" id=\"email\" name=\"email\" /></p>
<p><label for=\"kommentar\">Ihre Mitteilung</label><br />
<textarea id=\"kommentar\" name=\"kommentar\" rows=\"7\" cols=\"35\"></textarea></p>
<p><input type=\"submit\" value=\"Abschicken\" /></p>
</fieldset>
</form>";
// wurde das Formular schon angezeigt?
if($formular_gezeigt != "pos"):
echo $formular;
// alles ausgefuellt?
else:
$fehler_flag = "no";
// $name leer?
if ($name == ""):
echo "<p class=\"fehler\">Sie haben vergessen, Ihren Namen einzugeben!</p>";
$fehler_flag = "yup";
endif;
// $email leer?
if ($email == ""):
echo "<p class=\"fehler\">Sie haben vergessen, Ihre E-Mail-Adresse einzugeben!</p>";
$fehler_flag = "yup";
endif;
//else:
// ist email gueltig?
$email = strtolower(trim($email));
if (! @eregi('^[0-9a-z]+'.'@'.'([0-9a-z]+\.)+'.'([0-9a-z]){2,4}$', $email)):
echo "<p class=\"fehler\">Bitte überprüfen Sie Ihre E-Mail-Adresse noch einmal auf ihre Gültigkeit!</p>";
$fehler_flag = "yup";
endif;
// wenn $fehler_flag gesetzt, dann zeige $formular noch einmal an
if ($fehler_flag == "yup"):
echo "$formular";
else:
//mailroutine
$zeit = date("d.m.Y");
$empfaenger = "ich@hier.tld";
mail($empfaenger,"Kontaktformular: Nachricht von ".$name,"
Kontaktformular
Herr/ Frau $name hat Kontakt aufgenommen
Kommentar von $name:
------ Anfang Nachricht ------
$kommentar
------ Ende Nachricht ------
geschrieben: $zeit","From: $name <$email>");
echo "<p>Vielen Dank $name für Ihr Interesse. Wir werden uns so schnell wie möglich bei Ihnen melden.</p>";
endif;
endif;
?>
Grüße
M.
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
12.03.2005, 21:29
|
#2
|
|
TP-Insider
Registriert seit: Dec 2003
Ort: nienburg (raum hannover)
|
Code:
$form = '<form>
<input value="'.$_POST['name'].'" />'
[...]
__________________
in eile kam er,
in schwarzem gewand,
aus den tiefen des waldes,
ein einsamer mann, ein geschoepf der freiheit,
ein geschoepf ohne furcht,
doch alle nannten sie ihn nur T O D
|
|
|
13.03.2005, 07:20
|
#3
|
|
TP-Moderator
Registriert seit: Jan 2004
Ort: Bayern, Regensburg
|
Vom Prinzip her passt die Lösung von Horminator. (Bis auf das vergessene maskierte Anführungszeichen - wird wohl in der Eile vergessen worden sein.  )
Magerquark, ich wollte nur noch kurz die Anmerkung machen, das Du, wenn Du eine POST-Variable direkt wieder als Value ins Formular schreibst noch was beachten solltes:
Du solltest das die Sonderzeichen und HTML-relevanten Zeichen maskieren, da Dir sonst jemand html-Code in den Quellcode schreiben könnte. Es gibt dafür die PHP-Funktion htmlentities()
|
|
|
14.03.2005, 00:38
|
#4
|
|
TP-Senior
Registriert seit: Aug 2003
Ort: Kaiserslautern
|
Außerdem werden, je nach dem wie dein Server konfiguriert ist, eine Menge Notice-Fehlermeldungen ausgespuckt, da ja die Variablen nicht immer definiert sind. Würde ich zumindest auch drauf achten.
|
|
|
16.11.2005, 22:46
|
#5
|
|
TP-Senior
Registriert seit: May 2004
|
Moin.
Dann will ich das Teil doch noch einmal etwas weiterspinnen.  Wie man es macht, dass Eingabefelder beim Neuladen (Fehlermeldung, z.B. Feld vergessen auszufüllen) nicht gelöscht werden, haben wir nun geklärt. Jetzt die Frage, wie es mit so lustigen Dingen wie Checkboxen und Select-Options ausschaut? Sagen wir, ich habe drei Checkboxen, setze ein Häkchen, mache aber irgendwo einen anderen Fehler, die Seite wird noch einmal neu angezeigt, alles in den Eingabefeldern ist da, der gesetze Haken ist aber weg. Wie umgeht man das? Und das selbe Spiel - wahrscheinlich ein Tick schwieriger  - bei einer Auswahlliste. Wie bleibt der ausgewählte Wert bestehen?
Jemand dazu eine Idee?
Grüße
M.
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
16.11.2005, 23:59
|
#6
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
das Prinzip
PHP-Code:
<?php
//Initialisierung
$name=$email=$adresse="";
$check1=$check2=0;
//Ist Formular abgesendet worden ?
if(isset($_POST['submit'])) {
//Vars auslesen
//strings
$name=get_magic_quotes_gpc() ? stripslashes($_POST['name']) : $_POST['name'];
...
...
//checkboxen
$check1=isset($_POST['check1'])) ? 1 : 0;
...
//Validierung
$err=array();
if($name=="") $err[0]="Der Name darf nicht leer sein";
if($check1==0) $err[1]="vergessen, check1 anzuklicken";
...
//ok ?
if(count($err)>0) {
//fehler
$fehlermeldung=implode('<br>',$err);
} else {
// alles ok
// DB-Eintrag
//redirect
header("location:bestaetigung.php");
exit;
}
}
?>
<form ...>
<input type="text" ... name="name" value="<?php echo $name;?>">
<input type="checkbox" name="check1" value="1" <?php if($check1==1) echo checked="checked";?>>check1
...
</form>
Geändert von steffenk (17.11.2005 um 00:01 Uhr).
|
|
|
17.11.2005, 09:29
|
#7
|
|
TP-Senior
Registriert seit: Sep 2005
Ort: Pforzheim
|
ich hab das gleiche Problem mit den Checkboxen und Select-Options
PHP-Code:
<td width="489" valign="top">
<input type="Radio" name="z_art" value="Rechnung"<?php if($z_art2=='Rechnung') echo checked; ($z_art=='Rechnung' ? " checked" : "") ?>>
Überweisung
<input type="Radio" name="z_art" value="Einzug"<?php if($z_art2=='Einzug') echo checked; ($z_art=='Einzug' ? " checked" : "") ?>>
Einzugsermächtigung <br>
</td>
wobei ich halt vorher auch noch füllen lasse mit einem Select wird aus der Datenbank gehollt,
das macht das ganze nochmal schwieriger.
hab jetzt schon einpaar tage probiert aber will einfach nicht
|
|
|
17.11.2005, 10:00
|
#8
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Da hast Du auch Fehler drin:
PHP-Code:
if($z_art2=='Rechnung') echo checked; ($z_art=='Rechnung' ? " checked" : "")
korrekt muss das so sein:
PHP-Code:
if($z_art2=='Rechnung' || $z_art=='Rechnung') echo ' checked="checked"';
Der Syntax checked="checked" ist der richtige Syntax für xhtml, kann aber auch für html benutzt werden.
Deine Fehler waren vergessene ; - echo checked (Du hast bestimmt keine Konstante mit diesem Namen) und auch doppelte Ausgaben.
|
|
|
17.11.2005, 10:06
|
#9
|
|
TP-Senior
Registriert seit: Sep 2005
Ort: Pforzheim
|
weis nicht so richtig, er hat mir die richtigen werte gespeichert, aber wen ein feld nicht gefüllt war und das formular nochmal eingezeigt wurde, waren in den checkboxen statt der änderung der wert der DB drin
wobei wen ich es änder was ich grad probiert hab, übernimmt er die Werte auch nicht wen das Formular nochmal kommt 
er nimmt wieder nur den wert von $z_art2 aus der DB
Geändert von Kuzi (17.11.2005 um 10:10 Uhr).
|
|
|
17.11.2005, 11:51
|
#10
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
naja, wie Du das machst, kann man an Deinem Schnipsel ja nicht erkennen, daher ist es schwer dazu was zu sagen.
|
|
|
17.11.2005, 13:31
|
#11
|
|
TP-Senior
Registriert seit: Sep 2005
Ort: Pforzheim
|
ich hab den kompletten quelltex im meinem Thread Logisches Problem
da hab ich zwar was anderes gelöst aber der Quelltext is der selbe.
Das problem mit den checkboxen is echt hartnäckig 
|
|
|
17.11.2005, 15:43
|
#12
|
|
TP-Senior
Registriert seit: May 2004
|
Moin Steffen.
Kleines Problem bei mir. Du machst es so, dass Dein Formular ganz normal in HTML ist. Dann wird in PHP geschaut, ob alles ausgefüllt ist und wenn dem so ist, wird in eine DB eingetragen und durch header(location) ein Redirect gemacht. Das schaut jetzt bei mir aber anders aus. Nämlich so:
Alles, auch das Formular, ist in PHP. Es wird geschaut, ob das Formular schon einmal gezeigt wurde, wenn nicht, dann "anzeigen". Nach Abschicken ( <form action=\"$_SERVER[PHP_SELF]\" ...) wird geschaut, ob Fehler vorhanden sind und entsprechend ausgegeben. Wenn keine da sind, wird per eMail (kein DB-Eintrag) verschickt, das Formular nicht mehr, dafür aber ein entsprechender Text angezeigt. Somit klappt das hinten und vorne mit dem Checked nicht so ganz. Eine Input schaut bei mir so aus:
Code:
<?php
(...)
<input type=\"checkbox\" name=\"fall1\" value=\"1\" /> Blau<br />
(...)
<input type=\"text\" id=\"vorname\" name=\"vorname\" value=\"".htmlentities($_POST['vorname'])."\" />
(...)
?>
In das obere Input bekomme ich aber kein PHP rein. Also kann auch nicht geprüft werden, ob ein Haken gesetzt ist und dieser beim Neuladen notfalls auch wieder aufgenommen wird (checked).
Zwei Möglichkeiten: Man versucht irgendwie das Problem mit dem "checked" in meinem Formular zu lösen, oder Du bist so nett und gibst einen Tipp ab, wie man den Redirect umgeht und stattdessen das Formular nicht, dafür aber einen Blablabla-Text anzeigen kann. *schauganzlieb* 
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
18.11.2005, 10:34
|
#13
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
wieso bekommst Du in das Input kein php ?
PHP-Code:
echo "
...
<input type=\"checkbox\" name=\"fall1\" value=\"1\" ".(isset($_POST['fall1']) ? ' checked="checked"' : '')." /> Blau<br />
|
|
|
18.11.2005, 12:33
|
#14
|
|
TP-Senior
Registriert seit: May 2004
|
Öh, gute Frage?  Wenn ich das so mache, wie Du, dann gibt es einen hässlichen Parse-Error ( Parse error: syntax error, unexpected T_IF in blablabla). Es mag daran liegen, wie das Formular bei mir aufgebaut ist:
PHP-Code:
<?php
$formular="
<form action=\"$_SERVER[PHP_SELF]\" method=\"post\">
<input type=\"hidden\" name=\"formular_gezeigt\" value=\"pos\" />
(...)
<input type=\"checkbox\" name=\"fall1\" value=\"1\" ".(isset($_POST['fall1']) ? ' checked="checked"' : '')." /> Blau<br />
(...)
<input type=\"text\" id=\"name\" name=\"name\" value=\"".htmlentities($_POST['name'])."\" />
(...)
</form>";
///// Ende Formular
///// Anfang Validierung
if($formular_gezeigt != "pos"): echo $formular;
else: blablabla
(...)
?>
Oder? Wie gesagt, bei mir ist alles, auch das Formular, im PHP-Teil. *hmm*  Meine gesamte Abfragerei, ob ein Feld ausgefüllt ist oder nicht sowie der eMail-Versand kommen dann nach dem abschließenden Form-Tag.
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
18.11.2005, 12:43
|
#15
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
dann hast Du irgendetwas falsch.
Überprüfungen sollten immer vor dem Formular gemacht werden.
Ob Du das mit php oder html ausgibst ist wurscht
Stell das doch um und poste dann mal das gesamte Script, sonst posten wir Kleinteile noch bis morgen früh 
|
|
|
| |