Shop-Hilfe.com
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 12.03.2005, 21:17   #1
TP-Senior
 
Benutzerbild von Magerquark
 
Registriert seit: May 2004
Magerquark macht alles soweit korrekt

[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 &uuml;berpr&uuml;fen Sie Ihre E-Mail-Adresse noch einmal auf ihre G&uuml;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&uuml;r Ihr Interesse. Wir werden uns so schnell wie m&ouml;glich bei Ihnen melden.</p>";
    endif;
    endif;
    
?> 
Grüße
M.
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
Magerquark ist offline   Mit Zitat antworten


Alt 12.03.2005, 21:29   #2
TP-Insider
 
Benutzerbild von HoRnominatoR
 
Registriert seit: Dec 2003
Ort: nienburg (raum hannover)
HoRnominatoR ist auf einem guten Weg
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
HoRnominatoR ist offline   Mit Zitat antworten
Alt 13.03.2005, 07:20   #3
TP-Moderator
 
Benutzerbild von walter
 
Registriert seit: Jan 2004
Ort: Bayern, Regensburg
walter hilft, wo's gehtwalter hilft, wo's gehtwalter hilft, wo's geht
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()
walter ist offline   Mit Zitat antworten
Alt 14.03.2005, 00:38   #4
TP-Senior
 
Registriert seit: Aug 2003
Ort: Kaiserslautern
khromium macht alles soweit korrekt
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.
khromium ist offline   Mit Zitat antworten
Alt 16.11.2005, 22:46   #5
TP-Senior
 
Benutzerbild von Magerquark
 
Registriert seit: May 2004
Magerquark macht alles soweit korrekt
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...>>
Magerquark ist offline   Mit Zitat antworten
Alt 16.11.2005, 23:59   #6
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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'])) ? 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>
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer

Geändert von steffenk (17.11.2005 um 00:01 Uhr).
steffenk ist offline   Mit Zitat antworten
Alt 17.11.2005, 09:29   #7
TP-Senior
 
Benutzerbild von Kuzi
 
Registriert seit: Sep 2005
Ort: Pforzheim
Kuzi macht alles soweit korrekt
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
PHP-Code:
$z_art2 
wird aus der Datenbank gehollt,
das macht das ganze nochmal schwieriger.

hab jetzt schon einpaar tage probiert aber will einfach nicht
Kuzi ist offline   Mit Zitat antworten
Alt 17.11.2005, 10:00   #8
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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.
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 17.11.2005, 10:06   #9
TP-Senior
 
Benutzerbild von Kuzi
 
Registriert seit: Sep 2005
Ort: Pforzheim
Kuzi macht alles soweit korrekt
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).
Kuzi ist offline   Mit Zitat antworten
Alt 17.11.2005, 11:51   #10
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
naja, wie Du das machst, kann man an Deinem Schnipsel ja nicht erkennen, daher ist es schwer dazu was zu sagen.
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 17.11.2005, 13:31   #11
TP-Senior
 
Benutzerbild von Kuzi
 
Registriert seit: Sep 2005
Ort: Pforzheim
Kuzi macht alles soweit korrekt
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
Kuzi ist offline   Mit Zitat antworten
Alt 17.11.2005, 15:43   #12
TP-Senior
 
Benutzerbild von Magerquark
 
Registriert seit: May 2004
Magerquark macht alles soweit korrekt
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...>>
Magerquark ist offline   Mit Zitat antworten
Alt 18.11.2005, 10:34   #13
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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 /> 
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 18.11.2005, 12:33   #14
TP-Senior
 
Benutzerbild von Magerquark
 
Registriert seit: May 2004
Magerquark macht alles soweit korrekt
Ö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...>>
Magerquark ist offline   Mit Zitat antworten
Alt 18.11.2005, 12:43   #15
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Antwort