• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Professionelle Hilfe bei Kontaktformular

Lovemate

Neues Mitglied
Morgen!

Ich sollte mir vielleicht einen anderen Job suchen, denn offensichtlich bin ich für php zu blöde!
Bei jedem Web-Projekt gibt es immer nur mit einer Sache Ärger: dem Kontaktformular und
PHP! Ich habe Im Buch nachgeschlagen (Thomas Theiss), im Netz gesucht und Code-Schnipsel
und andere Tipps eingesetzt - ohne Erfolg!

Entweder die Mail kommt leer an (ohne die Kontaktdaten) oder sie kommt gar nicht an, aber
es kommt auch keine Fehlermeldung oder aber die berühmten php Fehler meldungen in Line
sowieso ist irgend ein unerwartetes Zeichen aufgetaucht usw.

Was ich dringend benötige (also was das Formular können soll), liste ich auf, sollte mir da ein flinker Finger und
flinker Geist helfen können, freue ich mich riesig. Aber nicht nur Code ist interessant, sondern auch
das warum und wieso und was genau derjenige sich dabei gedacht hat (kommentiert) wäre toll:

Los gehts:
Abfrage: wurde der submit button gedrück ? (type= submit name="absenden")
wenn ja überprüfen, ob die folgenden Felder ausgefüllt wurden: Type=radio button, value="1,2" name="geschlecht"
type=text name="nachname", type=text name="email", type=text name="postleit", type=text name="telefon",
wenn ja - > alle Feldinhalte in einem array speichern (auch die nicht ausgefüllten Felder), wenn Nein, weiterleiten zu einem
html-dokument mittels header(Location:).
Die ausgelesenen Felder im array(die eben genannten Pflichfelder sowie diese Nicht-Pflichtfelder:)
type=text name="vorname", type=text name="firma", type=text name="wohnort", type=text name="strasse",
type=radio button value="1,2" name="typ", type=checkbox name="grund1", type=checkbox name="grund2", type=checkbox name="grund3",
type=checkbox name="grund4", type=checkbox name="grund5", type=checkbox name="grund6" type=textarea name=texa
sollen per Mail an eine E-Mailadresse weitergegeben werden mit mail() es sei denn einer kann mir einen bessere Methode vorschlagen
und vor allem wie man diese dann auch umsetzt, sodaß sie funktioniert.
Sobald dies passiert ist soll ebenfalls zu einem anderen html-dokument weitergeleitet werden....

Ich hoffe, das ist verständlich, damit man hier nicht tonnenweise Formularcode, der völlig irrelevant ist
(letztlich müssen die Felder ausgelesen und per mail übertragen werden)...

Bin gesapnnt und freue mich auf echte PHP-Freaks ...
 
Hallo Lovemate. Also ich weiß nicht wie es den anderen geht aber ich finde deinen Post ziemlich unübersichtlich. Du hast deine Erklärungen und deinen Code in einem Rutsch runtergeschrieben und ich verstehe da kaum was. Bitte poste doch lieber Code und benutze die entsprechenden code tags.

Außerdem kann man dir ohne den richtigen code nicht wirklich helfen deshalb erstmal nur etwas Theorie:

Nach dem absenden des Formulars hast du deine Formulardaten im superglobalen $_POST array. Du kannst dann via: $_POST['feldname'] auf den Wert des Feldes zugreifen.

Validiere die Eingabe, prüfe ob alle benötigten Felder gesetzt sind und den richtigen Wert haben. Falls du oft Formulardaten validieren musst, schreibe dir eine Formvalidierungsklasse oder suche dir eine raus.

Falls keine Validierungsfehler aufgetreten sind sende die E-Mail.

sollen per Mail an eine E-Mailadresse weitergegeben werden mit mail() es sei denn einer kann mir einen bessere Methode vorschlagen


Ja. Benutze eine Mailklasse wie z.B.
Powerful component based mailing library for PHP – Swift Mailer. Die mail() Funktion ist eine Sache für sich und wenn du nicht vor hast dich durch ellenlange RFC's zu lesen würde ich vorschlagen eine Mailerklasse zu nutzen. Keine Furcht davor. Dass tun auch erfahrene Leute.
 
Aber so ganz generell vor dem Absenden mit mail() (oder wie auch immer) die Werte, die du deiner Mail-Funktion übergibst, mal mit var_dump() überprüfen? Und vielleicht vorher noch ein var_dump($_POST) machen? (Du benutzt doch method="post" in deinem <form> oder?) Damit müsstest du eigentlich sehr schnell zu einem Ergebnis kommen.
var_dump()s werden übersichtlicher, wenn man sie innerhalb von <pre>-Tags aufgerufen werden ...

@spaceCookie: netter Footer ;-)
 
Hey Space cookie!

Ganz ehrlich: Ich finde diese Code-Postings etwas nervig, denn in diesem Fall ist doch klar:
Ich habe eine Anzahl von Feldern in meinem (HTML) Formular, diese sollen im PHP script ausgelesen werden
und schließlich per Mail an den Betreiber der Site weitergegeben werden.
Wenn's geht so sicher wie möglich und so reibungslos wie möglich!
Welche Infos außer die name= - Bezeichnungen sowie die Art der Felder benötigt man denn für ein PHP-script
, das HTML und das CSS ist doch hier egal, denn das Formular funktioniert ja und was nicht geht ist das cript in PHP!!!

Diesen Swift Mail schaue ich mir mal an!
- Bin offen für jede Neuerung!
$verschickt = 'http://www.beispiel/html/danke.html';

$recipient = "[email protected]";
$sender = "Kontaktformular beispiel.com";
$frommail = "[email protected]";
$betreff = "Anfrage durch Kontakformular";
$message = "$sex $vname $nname will Kontakt";

$sex =$_POST["geschlecht"];
$vname =$_POST["vorname"];
$nname =$_POST["nachname"];

mail($recipient, $betreff, $message, "From: $sender <$frommail>");

header("Location: $verschickt");
exit;
?>


Dieses einfache script funktioniert leider nicht mal...
Aber immerhin komme ich zur Danke-Seite! Weltklasse!!!
Ich erhalte eine Mail, jedoch ohne Inhalt!!!
Solange nicht mal das funktioniert brauch ich an Felder-Überprüfungen
oder Mail-Klassen nicht mal zu denken - und das ist das Frustrierende für mich!


<?php
 
Hey, Bodil

Ich würde gerne mal ganz einfach folgendes hinbekommen:

Alle Formulardaten werden gesammelt und in Form einer Mail an den Betreiber übergeben und
dort auch alle angezeigt-Das wäre schon mal was!
Dann denke ich über die Überprüfung, den Spam-Schutz und anderes nach, aber wenn nicht
mal das Rudimentäre klappt, ist man von solchen spezifischen Sachen weit entfernt....
Es geht nicht mal blöde Formulardaten per Mail zu versenden - trotz aller php-Schnippsel und
Beschreibungen wie: Die PHP-Funktion mail() benötigt fünf Parameter: Empfänger, Betreff, Nachricht,
zusätzliche Mailheader und zusätzliche Parameter. Die beiden letzten Dinge sind aber optional.
Schön...meine Mails zeigen alles an, nur nicht die Daten aus den Feldern - sowas frustriert!
Keine Fehlermeldung, sogar die Dankemeldung dass die Mail verschickt wurde -aber keine Daten in der Mail!!!
 
Beherzige erstmal den Vorschlag von Bodil und lass dir ausgeben was überhaupt gesendet wurde. Kommentier die letzten 3 Anweisungen aus und ersetze sie durch ein

PHP:
var_dump($_POST);

Du solltest nun die Felder und die dazugehörigen Werte aus dem Formular bekommen. Wenn das nicht der Fall ist weißt du dass dein Problem nicht am Mailversand liegt.

Solange nicht mal das funktioniert brauch ich an Felder-Überprüfungen
oder Mail-Klassen nicht mal zu denken


An die Mailklasse solltest du schon denken weil es eben gerade die Mailheader sind die oft Probleme beim empfangen und versenden der Mails machen und gute Mailklassen regeln das für dich. Aber lass dir bevor du dazu kommst die Formulardaten ausgeben damit du das als Fehlerquelle ausschließen kannst.
 
Beherzige erstmal den Vorschlag von Bodil und lass dir ausgeben was überhaupt gesendet wurde. Kommentier die letzten 3 Anweisungen aus und ersetze sie durch ein

PHP:
var_dump($_POST);

Du solltest nun die Felder und die dazugehörigen Werte aus dem Formular bekommen. Wenn das nicht der Fall ist weißt du dass dein Problem nicht am Mailversand liegt.

Okay - wenn ich die letzten drei Zeilen auskommentiere und sie durch var_dump ($_POST); ersetze passiert nach dem Absende Button folgendes:
Ich erhalte einen weißen screen aud dem oben steht: array(0) { }

Und nun?

Lovemate
 
Zuletzt bearbeitet:
Das bedeutet, dass die Daten, von denen du denkst, dass du sie in deinem Formular absendest an dieser Stelle nicht zur Verfügung stehen. Meine Vermutung: Dein Formular sendet keine post- sondern get-Daten. Gibt jetzt zwei Möglichkeiten, das rauszufinden.
Möglichkeit eins, du ersetzt deinen var_dump():
PHP:
var_dump($_GET)
Oder du checkst mal dein Formular. Dort muss (mindestens) folgendes stehen:
HTML:
<form method="post" ...>
   ...
</form>
Oder noch einfacher: Was steht nach dem Absenden in deiner URL? Stehen da deine Forumlardaten mit drin? Dann arbeitest du mit GET. (get ist der Standardmodus, das ist die Methode, die dein Formular zum Datenabsenden nutzt, wenn du NICHT explizit post als method einsetzt. Dann werden die Daten in der URL übertragen. Wählst du aber post, werden die Daten »unsichtbar« übertragen. Je nach Übertragungsweg landen die Daten anschließend im Array $_GET oder im Array $_POST.)

Und var_dump() ist einer deiner besten Freunde bei der Fehlersuche. Es dient ausschließlich der Fehlersuche und hat in produktiven Websites nichts zu suchen. Es schreibt dir den Inhalt von Variablen auf den Bildschirm. Und während dir ein echo oftmals nichts ausgibt, verrät dir dein var_dump() immer auch gleich, ob das was in einer Variable steht ein leerer String ist, ein String voller Leerzeichen, ein NULL oder ein false, während ein echo jeweils nichts ausgeben würde.
 
So, mal ein Kindergartenformular gebastelt mit allen input-typen die im Richtigen auch vorkommen!
Ohne css einfach nur mal so auf die schnelle!
Und das PHP verwendet: Ergebnis: Keine Inhalte!
Alle Positionen von mail() werden dargestellt (Empfänger, Betreff, Absender und das was im Inhalt selbst im script reingeschrieben wurde
aber keine Felder-Inhalte!!!

Ich bekomme:


hat folgende E-Mail-Adresse: und wünscht . Außerdem:

Ich blicks nicht mehr!
Hier das HTML und das PHP!
Erleuchtet mich, weil ich schnalls echt nicht!

<form accept-charset="utf-8" method="post" enctype="text/plain" action="../scripts/hw_kofo.php">
<input type="radio" name="sex" value="1"/>Herr
<input type="radio" name="sex" value="1"/>Frau
<input type="text" id="nn" name="nachname"/>Nachname
<input type="text" id="em" name="email"/>E-Mail
<input type="checkbox" name="beratung"/>Ich möchte Beratung
<input type="text" name="texa"/>Ihre Nachricht<textarea></textarea>
<input type="submit" value="absenden"/>
<input type="reset" value="zurücksetzen"/>
</form>

<?php

$sex = $_POST['sex'];
$nname = $_POST['nachname'];
$mail = $_POST['email'];
$service = $_POST['beratung'];
$nachricht = $_POST['texa'];

$verschickt = 'http://www.beispiel.de/html/danke.html';

$recipient = "[email protected]";
$sender = "Kontaktformular Beispiel GmbH";
$frommail = "[email protected]";
$betreff = "Anfrage durch Kontakformular";
$message = "$sex $nname hat folgende E-Mail-Adresse: $mail und wünscht $service. Außerdem: $nachricht ";


/*var_dump($_POST);*/

mail($recipient, $betreff, $message, "From: $sender <$frommail>");

header("Location: $verschickt");
exit;
?>


Vielen Dank!!!!
 
Das bedeutet, dass die Daten, von denen du denkst, dass du sie in deinem Formular absendest an dieser Stelle nicht zur Verfügung stehen. Meine Vermutung: Dein Formular sendet keine post- sondern get-Daten. Gibt jetzt zwei Möglichkeiten, das rauszufinden.
Möglichkeit eins, du ersetzt deinen var_dump():
PHP:
var_dump($_GET)
Oder du checkst mal dein Formular. Dort muss (mindestens) folgendes stehen:
HTML:
<form method="post" ...>
.[/QUOTE]

Mir ist die Übertragungsmethode bekannt und ich weiß, dass es unsicher ist die Daten mittels URL zu verschicken!
Und wie du sehen kannst: in dem test-formular steht - wie im richtigen auch - method=post..
Noch ne weitere Idee, bodil???:?:
 
Ja, das mit diesem Get und dem Post sind halt so Fragen, die man stellt, wenn man nicht weiß, wie der Code aussieht. Aber wenn das jetzt geklärt ist ... hmmm ...
Dein Script sieht so aus, als würdest du erwarten, dass es nach dem Abschicken wieder aufgerufen und erneut abgearbeitet wird. Die action in deinem Form deutet darauf hin, dass du mit diesen Daten ein anderes Script aufrufen könntest. Dort steht dann natürlich nicht dein Code zur Verfügung.
Mails, die zwar rausgehen, aber leer sind könnten auch mit diesem Konstrukt
HTML:
<input type="text" name="texa"/>Ihre Nachricht<textarea></textarea>
zusammenhängen, das richtigerweise möglicherweise so heißt:
HTML:
Ihre Nachricht<textarea name="texa"></textarea>
Je nach dem, ob du dein Input-Feld ausfüllst oder die (mehrzeilige) Textarea, kommt für die Variable $_POST["texta"] nichts an, aber selbst mit diesem Fehler dürfte der var_dump() auf $_POST kein leeres Array anzeigen.
Dass für deine Checkbox mit dem Namen beratung nichts übertragen wird, liegt daran, dass dem input-Field kein Text hierfür (value="Beratung") hintelegt ist.
Und eigentlich würde ich erwarten, dass die Zeile
PHP:
header("Location: $verschickt");
laut knallt, wenn vorher schon ein komplettes Formular ausgegeben wurde.
 
Zuletzt bearbeitet:
Lovemate schrieb:
Ganz ehrlich: Ich finde diese Code-Postings etwas nervig, denn in diesem Fall ist doch klar:
Ich habe eine Anzahl von Feldern in meinem (HTML) Formular, diese sollen im PHP script ausgelesen werden
und schließlich per Mail an den Betreiber der Site weitergegeben werden.

Wenn du ein Problem mit dem Code hast, ist es aber durchaus von Vorteil, den zu zeigen. Sonst entstehen Threads wie dieser, in dem alle Leute erst mal wild rumraten müssen. Das ist total zweckfrei und bringt keinem was.

Mal als Demonstration, wie du dein Problem sinnvoll darstellen kannst:

Ich habe folgenden Code:

pages/formular.html

HTML:
<!DOCTYPE html>

<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <title>title</title>
    </head>

    <body>

        <form accept-charset="utf-8" method="post" enctype="text/plain" action="../scripts/hw_kofo.php">
            <input type="radio" name="sex" value="1"/>Herr
            <input type="radio" name="sex" value="1"/>Frau
            <input type="text" id="nn" name="nachname"/>Nachname
            <input type="text" id="em" name="email"/>E-Mail
            <input type="checkbox" name="beratung"/>Ich möchte Beratung
            <input type="text" name="texa"/>Ihre Nachricht<textarea></textarea>
            <input type="submit" value="absenden"/>
            <input type="reset" value="zurücksetzen"/>
        </form>

    </body>

</html>

scripts/hw_kofo.php

PHP:
<?php

$sex = $_POST['sex'];
$nname = $_POST['nachname'];
$mail = $_POST['email'];
$service = $_POST['beratung'];
$nachricht = $_POST['texa'];

$verschickt = 'http://www.beispiel.de/html/danke.html';

$recipient = "[email protected]";
$sender = "Kontaktformular Beispiel GmbH";
$frommail = "[email protected]";
$betreff = "Anfrage durch Kontakformular";
$message = "$sex $nname hat folgende E-Mail-Adresse: $mail und wünscht $service. Außerdem: $nachricht ";


var_dump($_POST);

#mail($recipient, $betreff, $message, "From: $sender <$frommail>");

#header("Location: $verschickt");
exit;

Wenn ich das Formular ausfülle und abschicke, erscheint als Ausgabe aber nur das hier:

Code:
array(0) {
}

Was mache ich falsch?​

Dann könnte das jemand relativ stressfrei lokal ausprobieren und sagen, dass der Fehler bei enctype="text/plain" liegt.

Du willst enctype="application/x-www-form-urlencoded", was aber auch der Standardwert ist. Das heißt, du kannst das Attribut insgesamt weglassen.

Code ist meist verständlicher als Umschreibungen, denn an Code gibt es nichts zu deuteln.
 
Zuletzt bearbeitet:
Hallo, mermshaus!

Dann könnte das jemand relativ stressfrei lokal ausprobieren und sagen, dass der Fehler bei enctype="text/plain" liegt.
Du willst enctype="application/x-www-form-urlencoded", was aber auch der Standardwert ist. Das heißt, du kannst das Attribut insgesamt weglassen.

Code ist meist verständlicher als Umschreibungen, denn an Code gibt es nichts zu deuteln.

Akzeptiert und verstanden! Sei doch bitte nun so gut und erläutere mir nun noch, wie ich den code so darstellen kann, wie du!
Bei mir erscheint er nur schwarz weiss, wenn ich ihn in die Nachricht im Forum so reinkopiere!

Ich habe deine Aussage kapiert und werde das enctype attribut weglassen...und schauen ob es dann paßt!

Grüße

Lovemate
 
PHP:
header("Location: $verschickt");
laut knallt, wenn vorher schon ein komplettes Formular ausgegeben wurde.

Sagst Du mir auch noch warum?
Denn die Weiterleitung zu diesem HTML-Dokument funktioniert einwandfrei - das war das einzige was von Beginn an funktioniert hat!

Ich will ja auch was lernen....*lach*

Grüße

Lovemate
 
und erläutere mir nun noch, wie ich den code so darstellen kann, wie du!
Bei mir erscheint er nur schwarz weiss, wenn ich ihn in die Nachricht im Forum so reinkopiere!

Du musst ihn mit Code-Tags umgeben. Im Erweiterten Editor dieses Forums gibt es dafür sogar 3 Buttons in der 2. Symbolleiste rechts.
 
Der header()-Befehl funktioniert (meines Wissens) nur dann, wenn vor dem Aufruf des Befehls noch keinerlei Zeichens ausgegeben werden. Also kein HTML-Gerüst, kein Formular, nichtmal ein Leerzeichen.
Zur formatierten Darstellung von Code gibt es im Editor (auf »Erweitert« klicken) die Möglichkeit, Text als PHP- oder HTML-Code auszugeben.
 
Erstmal: DANKE@alle, die geholfen haben!
Die Majestätsmedaille geht aber an mermshaus!
Denn nachdem der Fehler behoben wurde, bekomme ich nun Werte aus dem Formular!
ENDLICH und DANKE DAFÜR!

Nun habe ich diverse Fragen zum Finetuning und zum Gebrauch des Scriptes auf Dauer!
Ich poste nun Formular und Script und bitte um folgende Features, die ich benötige.
Gerne mit Erläuterung und/oder Kommentaren....

Das Formular soll prüfen, ob die Pflichtfelder ausgefüllt wurden ('geschlecht' 'nachname' 'email' 'postleit' 'telefon') und erst dann das Formular absenden bzw. die Daten per Mail übergeben.
Das Formular soll prüfen, ob die Postleitzahl aus 5 Zahlen besteht ('postleit') und ob die E-Mail-Adresse ein @-Zeichen beinhaltet sowie keines der Pflicht Felder mit weniger als 3 Zeichen gefüllt wurde.
Das (Ab-)Sende-Datum sollte ausgewiesen werden.
Wenn die obigen Bedingungen nicht erfüllt wurden, dann sollte zu einer Fehlerseite weitergeleitet werden, die wiederum die Option bietet, zum Formular zurückzukehren
ohne aber die bereits eingegebenen Daten zu löschen.
Das Formular sollte checken wie lange der User benötigt, um das Formular auszufüllen, ist die Zeit kürzer als 30 Sekunden, soll keine Absendung erfolgen (spambots)
Zudem wäre ich dankbar für alle möglichen Tipps um das Spammen und andere Bots abzulenken!
Ich weiß, bombensicher geht nicht aber wenigstes Basis-Vorkehrungen wären super, gerne auch kontrovers diskutiert, denn ich habe mehrfach gelesen, dass z.Bsp. captchas nutzlos sind.
Zudem wäre toll, wenn mir jemand verraten würde, warum die Sonderzeichen nicht korrekt dargestellt werden in der Mail trotz der utf-8 charset accept im Formular!

Danke im Vorfeld

HTML:
<!DOCTYPE html>
<h3>Direkt-Kontakt - Unser Kontaktformular :</h3>
                    
                    
                        <div id="kofo">
                            <form accept-charset="utf-8" method="post" action="../scripts/hw_kofo.php">
                                <fieldset><legend>Ihre Kontaktdaten</legend>
                                <label for "sex">Herr <input class="radio" type="radio" id="geschlecht" value="Herr" name="geschlecht" checked="checked" accesskey="g"></label>
                                <label for "sex">Frau <input class="radio" type="radio" id="geschlecht" value="Frau" name="geschlecht" accesskey="g"></label><div class="screw">
                                <img src="../pics/schraube.png" width="47" height="15"></div><br>                               
                                <label for="vn">Vorname....................<input type="text" id="vorname" name="vorname" maxlength="40" accesskey="v"></label><br>
                                <label for="nn">Nachname.................<input type="text" id="vorname" name="nachname" maxlength="50"accesskey="n"></label><div class="screw">
                                <img src="../pics/schraube.png" width="47" height="15"></div><br>
                                <label for="fa">Firma / Verein............<input type="text" id="firma" name="firma" maxlength="40" accesskey="f"></label><br>
                                <label for="em"> E-Mail-Adresse..........<input type="text" id="email" name="email" maxlength="50" accesskey="e"></label><div class="screw">
                                <img src="../pics/schraube.png" width="47" height="15"></div><br>
                                <label for="plz">Postleitzahl................<input type="text" id="postleit" name="postleit" maxlength="5" accesskey="p"></label>
                                <div class="screw"><img src="../pics/schraube.png" width="47" height="15">
                                </div><br>
                                <label for="ort">Ort.............................<input type="text" id="ort" name="ort" maxlength="45" accesskey="o"></label><br>
                                <label for="str">Strasse......................<input type="text" id="strasse" name="strasse" maxlength="55" accesskey="s"></label><br>
                                <label for="tel">Telefon-Nr..................<input type="text" id="telefon" name="telefon" maxlength="18" accesskey="t"></label><div class="screw">
                                <img src="../pics/schraube.png" width="47" height="15"></div><br>
                                
                                </fieldset>
                                <p><span>Die mit einer Schraube <img src="../pics/schraube.png" width="47" height="15"> gekennzeichneten Felder</span><br> 
                                <span>sind Pflichtfelder.</span></p>
                                <fieldset><legend>Kontaktgrund</legend>
                                <label for="typ"> Kunde <input type="radio" id="typ" name="typ"  value="Kunde "accesskey="t" checked="checked"></label>
                                <label for="typ">Interessent <input type="radio" id="typ" name="typ" value="Interessent" accesskey="t"></label><br>
                                <label for="grund">allgem. Anfrage<input type="checkbox" id="grund" name="grund" value="allgemeine Anfrage"></label>
                                <label for="grund">Wartung / Pr&uuml;fung<input type="checkbox" id="grund" name="grund" value="Wartung / Prüfung"></label><br> 
                                <label for="grund">Beratung Holz<input type="checkbox" id="grund" name="grund" value="Beratumg Holz"></label>
                                <label for="grund">Beratung Spielger&auml;t<input type="checkbox" id="grund" name="grund" value="Beratung Spielgeräte"></label><br>
                                <label for="grund">Bestellung<input type="checkbox" id="grund" name="grund" value="Bestellung"></label><br>                                                                                                
                                <label for="texa">Ihre Nachricht<textarea id="texa" name="texa" cols="35" rows="5" >Bitte hier Ihre Nachricht an uns eintippen</textarea></label>
                                </fieldset>
                                <label for="absenden"><button id="absenden" type="submit" class="submiter" name="absenden" value="submit">Absenden</button></label>
                                <label for="verwerfen"><button id="verwerfen" type="reset" class="submiter" name="verwerfen" value="reset">Verwerfen</button></label>                            
                            </form>
                        
                        </div>

scripts/hw_kofo.php

PHP:
<?php

    $sex = $_POST['geschlecht'];
    $vname = $_POST['vorname'];
    $nname = $_POST['nachname'];
    $firma = $_POST['firma'];    
    $mail = $_POST['email'];
    $plz = $_POST['postleit'];
    $ort = $_POST['ort'];
    $sex = $_POST['geschlecht'];
    $strasse = $_POST['strasse'];
    $telefon = $_POST['telefon'];
    $typ = $_POST['typ'];
    $grund = $_POST['grund'];
    $nachricht = $_POST['texa'];

    $verschickt = 'http://www.beispiel.de/html/danke.html';
    $fehler = 'http://www.beispiel.de/html/fehler.html';

    $recipient = "[email protected]";
    $sender = "Kontaktformular Beispiel GmbH";
    $frommail = "[email protected]";
    $betreff = "Anfrage durch Kontaktformular";
    $message="Anrede:" .$sex. "\r\n";
    $message.="Vorname:" .$vname. "\r\n";
    $message.="Nachname:" .$nname. "\r\n";
    $message.="Firma/Verein:" .$firma. "\r\n";
    $message.="Email:" .$mail. "\r\n";
    $message.="Postleitzahl:" .$plz. "\r\n";
    $message.="Ort:" .$ort. "\r\n";
    $message.="Strasse:" .$strasse. "\r\n";
    $message.="Telefon-Nr:" .$telefon. "\r\n";
    $message.="Klassifizierung:" .$typ."\r\n";
    $message.="Kontaktgrund 1:" .$grund. "\r\n";
    $message.="Kontaktgrund 2:" .$grund. "\r\n";
    $message.="Kontaktgrund 3:" .$grund. "\r\n";
    $message.="Kontaktgrund 4:" .$grund. "\r\n";
    $message.="Kontaktgrund 5:" .$grund. "\r\n";
    $message.="Nachricht:" .$nachricht. "\r\n";
    
    
    /*var_dump($_POST);*/
    
    mail($recipient, $betreff, $message, "From: $sender <$frommail>");
    
    header("Location: $verschickt");
    exit;

Dies ist das Ergebnis:


Anrede:Frau
Vorname: Michaela
Nachname:Mustermann
Firma/Verein:
Email:[email protected]
Postleitzahl:40594
Ort:Musterbach.
Strasse:Musterstraße 3
Telefon-Nr:03212-36038452
Klassifizierung:Kunde
Kontaktgrund 1:allgemeine Anfrage
Kontaktgrund 2:allgemeine Anfrage
Kontaktgrund 3:allgemeine Anfrage
Kontaktgrund 4:allgemeine Anfrage
Kontaktgrund 5:allgemeine Anfrage
Nachricht:Gibt es diese Statue auch aus massivem Metall?


Grüße

Lovemate
 
Das sind ja eine ganze Menge Baustellen.

Die Überprüfung von Mail-Adresse und PLZ macht man eigentlich mit RegEx, aber ob du eine fünfstellige Postleitzahl hast bekämst du z.B. auch mit einer einfachen Funktion ohne RegEx hin
PHP:
function is_PLZ($str) {
    return (strlen($str) == 5 && ($str == (int) $str));
}
ob ein @ vorkommt, kannst du mit strpos rausfinden. Aber wie gesagt, obs ne valide Mail-Adresse ist: nur mit RegEx

Des Spamschutzes wegen kann man natürlich testen, wie lange ein Seitenbesucher aus fer Seite war (z.B. in dem man einen Time-Stamp in ein hidden-Field einbaut und das dann in der Validierung testet.
Andere Überlegungen zu diesem Punkt:
Wenn du dein E-Mail-Feld umbenennst (anderer name-Parameter) wird ein Bot hier vermutlich keine valide Mail-Adresse eintragen.
Du kannst einen honey pot aufstellen. Ein leeres Input-Field, das per css unsichtbar ist. Ein Bot wird es ausfüllen, ein normaler user nicht. Wird das Feld ausgefüllt, akzeptierst du die Eingabe, verschickst aber keine Mail.
Und: schau dir dein Formular noch mal genauer an ... das besondere an IDs ist, dass sie einmalig sind ...

Ganz grundsätzlich solltest du dir überlegen, wie du dem Benutzer mitteilst, welche Eingaben Fehlerhaft waren. Du könntest zum Beispiel ein Array für Fehlermeldungen vorsehen. Für jeden Fehler, den du entdeckst, schreibst du hier eine Fehlermeldung rein:
PHP:
  $errors = array();
  ...
  if (empty($nachname)) {
    $errors["nachname"] = "Bitte geben Sie Ihren Nachnamen an!";
  }
  ...
Am Ende checkst du, ob das Array $errors Elemente enthält und entscheidest entsprechend, wohin du weiterleitest.
Wenn du übrigens fürs Geschlecht eines vorgibst
HTML:
  <input class="radio" type="radio" id="geschlecht" value="Herr" name="geschlecht" checked="checked" accesskey="g">
musst du das Ergebnis gar nicht validieren.
 
Zurück
Oben