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

Professionelle Hilfe bei Kontaktformular

Validieren muss man immer alles, was vom Nutzer kommt. Requests können beliebig formuliert werden. Es können Parameter entfernt werden, als Geschlecht kann „12“ übergeben werden, als Name ein Array…
 
Wozu? Die Valedierung soll doch dazu dienen, dem Benutzer mitzuteilen, welche Felder er übersehen oder falsch ausgefüllt hat. Wenn der Seitenbesucher bewusst das Formular manipuliert, so dass am Ende Quatsch in der Mail steht, ist das doch komplett dessen Problem. Ich gäbe dir recht, wenn es um Einträge in einer Datenbank ginge ...
 
Interessante Tipps!
Da mach ich mal dran und poste hier meine Umsetzung und hoffe sie findet ihren Zuspruch durch die Experten hier!

Zu dieser Aussage:
Validieren muss man immer alles, was vom Nutzer kommt. Requests können beliebig formuliert werden. Es können Parameter entfernt werden, als Geschlecht kann „12“ übergeben werden, als Name ein Array…

Da tendiere ich zu bodil's Meinung:

Wozu? Die Valedierung soll doch dazu dienen, dem Benutzer mitzuteilen, welche Felder er übersehen oder falsch ausgefüllt hat. Wenn der Seitenbesucher bewusst das Formular manipuliert, so dass am Ende Quatsch in der Mail steht, ist das doch komplett dessen Problem. Ich gäbe dir recht, wenn es um Einträge in einer Datenbank ginge ...

<Klugscheiß = on> Übrigens: Validierung schreibt sich mit i statt mit e ! </klugscheiß>

Mir geht es beim Checken eher darum, ungewollte Fehler, wie das Vergessen oder unabsichtliche Falschausfüllen zu beheben.
Wenn einer (ein Mensch, kein Bot) ne Joke-Mail mit Käsekuchenangaben wegschicken will....dann kann er/sie und wird er das auch!
Diese Mails werden dann eh nach Erhalt einfach gelöscht!

1.) Ich mach mich mal zu RegEx schlau, hab ich schon mal gehört aber noch nie irgendwo verwendet!
2.) Die Idee mit dem "honey pot" is ja großartig, allerdings wissen das die Bot-Prgrammer nicht auch und passen ihre Bots solchen "honey pots" an???
3.) Die Ausgabe (per echo) von Fehlern a la "Sie haben vergessen, ihre E-Mail_Adresse anzugeben" ist schlecht für dieses Projekt, da ich wie gesagt in beiden Fällen auf ein anderes HTML-Dokument weiterleiten möchte (danke.html und fehler.html).
Gibt es eine Möglichkeit zu diesem Dokument weiterzuleiten, und nur den Ausgabesatz zu ändern
(also welches Feld nicht ausgefüllt wurde) oder müßte ich dazu jeweils ein eigenes HTML-Dokument für jeden Fehler mit dem
jeweiligen Satz anlegen ???
4.) Nochmal zu den Sonderzeichen-Fehlern....Hat jemand eine Idee, wieso die Sonderzeichen nicht korrekt übertragen wurden
trotz des "accept-charset="utf-8" ???

Meine Codevorschläge folgen sobald fertig!

Grüße Lovemate
 
<Klugscheiß = on> Übrigens: Validierung schreibt sich mit i statt mit e ! </klugscheiß>

...

2.) Die Idee mit dem "honey pot" is ja großartig, allerdings wissen das die Bot-Prgrammer nicht auch und passen ihre Bots solchen "honey pots" an???


Das geht theoretisch schon aber ist viel Aufwändiger umzusetzen. Viele Bots wirst du mit dieser Methode wohl fangen können.

3.) Die Ausgabe (per echo) von Fehlern a la "Sie haben vergessen, ihre E-Mail_Adresse anzugeben" ist schlecht für dieses Projekt, da ich wie gesagt in beiden Fällen auf ein anderes HTML-Dokument weiterleiten möchte (danke.html und fehler.html).
Gibt es eine Möglichkeit zu diesem Dokument weiterzuleiten, und nur den Ausgabesatz zu ändern
(also welches Feld nicht ausgefüllt wurde) oder müßte ich dazu jeweils ein eigenes HTML-Dokument für jeden Fehler mit dem
jeweiligen Satz anlegen ???


Nein natürlich nicht. Leg ein Array an und speicher darin alle Fehlermeldungen ab. Das Array übergibst du dann deinen Flashdaten. Das heißt soviel wie dass du das Array in eine Session speicherst welches genau einen Request lang gültig ist und sich dann anschließend selbst wieder löscht.

Edit: Aber wie Bodil schon sagt, wäre es sinnvoller die Fehler auf der selben Seite wie das Formular auszugeben, rein vom Usability Aspekt her.

4.) Nochmal zu den Sonderzeichen-Fehlern....Hat jemand eine Idee, wieso die Sonderzeichen nicht korrekt übertragen wurden

Ist das Dokument selber UTF-8? Stelle auch sicher dass du es nicht mit einer
Byte Order Mark gespeichert hast.
 
Zuletzt bearbeitet:
Nun, das stimmt nicht ganz. Valedierung schreibt man mit e und Validierung mit i.
Aber zu deinen Punkten:
zu 1) RegEx ist ein weites, hochinteressantes Feld. Andere würden sagen, ein Hurensumpf. Jedenfalls, ich hielte es für vertretbar in diesem speziellen Fall erst alles andere zum Laufen zu bringen und dann mal in der abschließenden Phase des Feintunings in dieses Thema einzusteigen. In deinem Fall bekommst die Probleme auch erstmal ohne RegEx gelöst.
zu 2) Theoretisch lässt sich jedes CAPCHA (und nichts anderes ist das ja: eine Erkennung, ob ein Mensch oder eine Maschine das Forumlar füllt) irgendwie umgehen. Auch deine Zeitmessgeschichte. Aber der Honey pot hat ein großartiges Aufwand-Nutzen-Verhältnis. Gib der Formularzeile eine css-Klasse, die dafür sorgt, dass die Zeile nicht sichtbar ist. Wo ich das Ding eingesetzt habe, ist noch nie Spam durchgekommen. Und wenn dann noch das Mail-Feld einerseits validiert, andererseits aber nicht als solches erkannt werden kann: Keine Chance.
zu 3) In deine Strategie mit dem Weiterleiten will ich dir nicht reinreden. Aber was macht der User auf der Fehlerseite? Irgendwie muss er doch wieder zum Formular? Wieder irgendwo hinklicken? Dann doch lieber gleich wieder auf dem Formular landen, wo die Fehler aufgeführt sind und/oder die fehlerhaften Felder markiert.
zu 4) Noch so ein Hurensumpf (Ich beginne das Wort zu lieben ...) Jedenfalls: Auch deine E-Mail und das verarbeitende Script müssen wissen, dass sie mit utf-8 arbeiten sollen. Und wenn das alles nichts nützt, schreibst du deine Formulardaten mit utf8_encode() in die Mail. Oder mit utf8_decode(). Das kann man sich dann logisch überlegen. Da es aber nur eine begrenzte Zahl von Möglichkeiten (2) gibt, entscheide ich mich hier immer für Trial and Error.
Viel Erfolg!
 
Edit: Mir ging es mit der Aussage zur Validierung primär auch um den Aspekt, dass „Nutzer kann nichts Falsches auswählen“ kein Schutz vor falschen Eingaben im Request ist. Wenn das klar ist, ist es schon ganz gut.

bodil schrieb:
Wozu? Die Valedierung soll doch dazu dienen, dem Benutzer mitzuteilen, welche Felder er übersehen oder falsch ausgefüllt hat. Wenn der Seitenbesucher bewusst das Formular manipuliert, so dass am Ende Quatsch in der Mail steht, ist das doch komplett dessen Problem. Ich gäbe dir recht, wenn es um Einträge in einer Datenbank ginge ...

Statt lediglich um den Versand einer Mail? Wo ist denn dabei der wesentliche Unterschied? Im Sinne einer Kapselung von Bestandteilen der Anwendung ist es zudem immer sinnvoll, davon auszugehen, dass zum Zeitpunkt einer etwaigen Validierung noch nicht bekannt ist, was mit den Daten im weiteren Verlauf der Anwendung passiert.

Stellt euch vor, dass die Daten des Kontaktformulars irgendwann nicht mehr per Mail verschickt, sondern – nehmen wir das Beispiel – in eine Datenbanktabelle geschrieben werden sollen. Bei der Umstellung habt ihr – oder ein weiterer Programmierer – aber vergessen beziehungsweise nie gewusst, dass ihr das Feld nicht validiert habt. Dann geht jemand mit ähnlicher Logik oder auch nur einer entsprechenden Vorannahme an die Gestaltung der SQL-Query: „Hier brauche ich nicht zu escapen, denn der Parameter ist ja eine Zahl.“ Schon kann an der Stelle fremder SQL-Code injiziert werden.

Später fragt man euch dann, warum ihr beim Einlesen der Daten in die Anwendung alles geprüft habt bis auf dieses eine Feld, obwohl das nur vielleicht drei Zeilen mehr Code gewesen wären, wodurch sämtliches Gefahrenpotenzial und sämtliche mögliche Verwirrung an dieser Stelle verhindert worden wäre. Dann sagt ihr: Das war unter den damaligen Umständen nicht notwendig, wenn man akzeptiert, dass die Mails an der Stelle falsch formatiert sein können. Das fanden wir nicht so schlimm. Wir fanden es außerdem cleverer, uns zu merken, dass wir dort erst in Zukunft validieren müssen, statt es gleich jetzt fertig zu schreiben und uns nichts merken zu müssen.

Ich würde mir so was gar nicht erst angewöhnen, sondern immer sofort sauber validieren. Die Vorteile liegen auf der Hand. Wo ist der Nachteil?

Lovemate schrieb:
Wenn einer (ein Mensch, kein Bot) ne Joke-Mail mit Käsekuchenangaben wegschicken will....dann kann er/sie und wird er das auch!

Natürlich. Das beeinträchtigt aber die Funktionsweise deiner Anwendung nicht. Die hat an formal korrekten Witz-Eingaben nicht das Geringste auszusetzen. Derlei Angaben sind aus Anwendungssicht nicht falsch. Ich könnte etwa hier ständig das Wort „Hurensumpf“ verwenden, ohne dass das Forum daran etwas auszusetzen hätte.

Programmlogik kommt vor allem dann aus dem Tritt, wenn sie falsche Datentypen oder unzulässige Wertebereiche erhält (etwa „Hund“ bei Geburtsjahr und nachfolgender Berechnung des Alters). Das lässt sich dann wiederum validieren. Eine Angabe „Klingone“ statt 0 oder 1 bei Geschlecht kann die Anwendung zweifelsfrei als Fehler erkennen, wohingegen „Käsekuchen 17 Müller“ vielleicht lediglich auf kreative Eltern zurückzuführen ist.

bodil schrieb:
Und wenn das alles nichts nützt, schreibst du deine Formulardaten mit utf8_encode() in die Mail. Oder mit utf8_decode(). Das kann man sich dann logisch überlegen. Da es aber nur eine begrenzte Zahl von Möglichkeiten (2) gibt, entscheide ich mich hier immer für Trial and Error.

Oder eben tatsächlich den Ursachen auf die Spur kommen, statt lediglich Symptome zu beheben. Dieser Artikel ist ein guter Anfang: UTF-8 - PHP Forum: phpforum.de Weitere Hintergründe dazu finden sich auch in diversen Threads. Etwa hier: Ich dachte, UTF-8 garantiert Umlaute??? - XHTMLforum
 
Zuletzt bearbeitet:
Danke, Leute!

Sehr interessante Aussagen, ich teile das meiste von deinen Tipps, mermshaus, bin aber nicht sicher, ob ich alles verstanden und anwenden kann!
Zum vermeintlich einfachsten, das sich mir nicht erschließt:

Bei der Übergabe der Daten werden die Sonderzeichen nicht korrekt angezeigt.
Das, obwohl ich im header aller html-Dokumente (auch jenes, welches das Kontaktformular beinhaltet) folgendes stehen habe:

HTML:
<!DOCTYPE html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

und in jeder css-Datei das hier:

HTML:
<!DOCTYPE html>
@charset "utf-8";

Dumme Frage also: Reicht das nicht?
Muss das noch ins PHP-script und wenn ja, auf welche Weise und an welche Stelle?

Zu den Punkten der Logik was das Weiterleiten auf ein anderes HTML-Dokument angeht, muss ich mir Gedanken machen!
Dem User direkt anzuzeigen welches input-Feld flasch oder gar nicht ausgefüllt wurde, macht Sinn und nur bei erfolgter Mail
auf die Danke-Seite weiterzuleiten ist clever, denke ich!
 
HTML:
<!DOCTYPE html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Das ist falsch. Der meta-Tag muss innerhalb von <head> stehen.

HTML:
<!DOCTYPE html>
@charset "utf-8";

Auch das ist falsch. In einer CSS-Datei dürfen keine HTML-Elemente stehen.

Dumme Frage also: Reicht das nicht?

Die Antwort auf die Frage hängt davon ab wie dein Webserver eingestellt ist. Wenn der Server beim Aufruf im HTTP-Header einen Zeichensatz mitliefert den Du nicht nutzt, dann kann das zu Problemen führen. Diesen Header kann man entweder an den Servereinstellungen, per .htaccess-Datei oder in der PHP-Datei über die header()-Funktion beeinflussen.

Abgesehen davon solltest Du auch die Dateien, die das Formular beinhaltet und die es verarbeiten im selben Zeichensatz speichern. Wenn es eine Abweichung gibt, kann es schon zu Problemen kommen.
 
Ah...ja, damit bin ich so schlau wie vorher!

Also:

HTML:
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta name="language" content="de" >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Steht im head aber das Ergebnis bleibt gleich!

Über irgendwelche Ideen, um das Problem zu beheben, wäre ich dankbar!

Dann zurück zum Formular:

Abfrage, ob alle Pflichtfelder ausgefüllt wurden und Abfrage ob das PLZ Feld aus 5 Zahlen besteht sowie das
E-Mail-Feld (das echte nicht der "honeypot") ein @-Zeichen beinhaltet sind die nächsten Aufgaben!

Ich bitte um Vorschläge, wie das effizient mit PHP zu lösen ist!
Zudem das Unterlegen der Felder mit Farbe, welche nicht ausgefüllt wurden (nach der Abfrage)
also auf der Seite bleiben und nicht die Felder zurücksetzen, wie es hier ja ausdrücklich von euch empfohlen wurde.

Hier der Code des finalen Formulars:

HTML:
<!DOCTYPE html>
                        <div id="kofo">
                            <form method="post" action="../scripts/hw_kofo.php">
                                <fieldset><legend>Ihre Kontaktdaten</legend>
                                <div id="geschlecht">
                                <label for "sex">Herr <input class="radio" type="radio" value="Herr" id="gesch" name="sex" checked="checked" accesskey="g"></label>
                                <label for "sex">Frau <input class="radio" type="radio" value="Frau" id="gesch" name="sex" accesskey="g"></label><div class="screw">
                                <img src="../pics/schraube.png" width="47" height="15"></div>                                
                                </div>
                                    <div class="felder"><label for="vn">Vorname..................<input type="text" id="vn" name="vorname" maxlength="40" accesskey="v"></label><br></div>
                                     <div class="felder"><label for="nn">Nachname...............<input type="text" id="nn" name="nachname" maxlength="40" accesskey="n"></label><div class="screw">
                                    <img src="../pics/schraube.png" width="47" height="15"></div><br></div>
                                 <div class="felder"><label for="frm">Firma.......................<input type="text" id="frm" name="firma" maxlength="40" accesskey="f"></label><br></div>
                                    <div id="hopo"><label for="email"> E-Mail-Adresse..........<input type="text" id="email" name="email" maxlength="50" accesskey="e"></label></div><br>
                                    <div id="brief"><label for="em"> E-Mail-Adresse........<input type="text" id="brf" name="brief" maxlength="50" accesskey="e"></label><div class="screw">
                                    <img src="../pics/schraube.png" width="47" height="15"></div><br></div>
                                    <div class="felder"><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></div>
                                    <div class="felder"><label for="ort">Ort...........................<input type="text" id="ort" name="ort" maxlength="45" accesskey="o"></label><br></div>
                                    <div class="felder"><label for="str">Strasse....................<input type="text" id="strasse" name="strasse" maxlength="55" accesskey="s"></label><br></div>
                                    <div class="felder"><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></div> 
                               </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>
                                <div id="geschlecht">                                 
                                <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></div>
                                
                                <div class="feld"><label for="grund">allgem. Anfrage<input type="checkbox" id="grund1" name="grnd1" value="allgemeine Anfrage"></label></div>
                                <div class="feld"><label for="grund">Wartung / Pr&uuml;fung<input type="checkbox" id="grund2" name="grnd2" value="Wartung / Prüfung"></label><br></div> 
                                <div class="feld"><label for="grund">Beratung Holz<input type="checkbox" id="grund3" name="grnd3" value="Beratung Holz"></label></div>
                                <div class="feld"><label for="grund">Beratung Spielger&auml;t<input type="checkbox" id="grund4" name="grnd4" value="Beratung Spielgeräte"></label><br></div>
                                <div class="feld"><label for="grund">Bestellung<input type="checkbox" id="grund5" name="grnd5" value="Bestellung"></label><br></div>                                                                                                
                                <label for="texa">Ihre Nachricht<textarea id="tex" 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>
 
Ich bitte um Vorschläge, wie das effizient mit PHP zu lösen ist!
Also, mein google sagt mit
php formular validierung
Ungefähr 5.650.000 Ergebnisse
Das sollte doch wohl reichen.

Und noch ein Tipp: wenn du eine Zwischenseite einbauen willst, um Fehler anzuzeigen, wirst du dich mit Sessions beschäftigen müssen. Einfacher wäre ein "Affenformular"

Und zum Thema eMail-Adresse prüfen: http://de1.php.net/manual/de/function.filter-var.php
 
HTML:
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta name="language" content="de" >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Das ist falsch. Du darfst nur einen Doctype verwenden. Also entweder

HTML:
<!DOCTYPE html>
<html>
<head>
<meta name="language" content="de" >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

oder

HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta name="language" content="de" >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Welcher für dich richtig ist, hängt davon ab, welchen HTML-Standard Du mit deinem Code folgen willst. HTML5, also der erstgenannte Doctype + Beginn von <head>, wäre der modernere.

Steht im head aber das Ergebnis bleibt gleich!

Was im HTML-Code steht spielt für die Verarbeitung der Formularfelder keine Rolle.

Hier der Code des finalen Formulars:

Final kann das nicht sein da es weder den von dir o.g. HTML-Kopf beinhaltet noch ein komplettes HTML-Grundgerüst.

Wie man Eingaben in Feldern prüfen kann, kannst Du dir bei vielen anderen PHP-Formularen abschauen. Z.B.:
PHP: Formularvalidierung mit regulren Ausdrcken

Wie man prüfen kann, ob ein String eine vom Format her korrekte E-Mail-Adresse enthält:
PHP - Checking the format of an email address
 
Oh, okay, threadi!!
Missverständnis....

Das erste Doctype ist beim copy/paste hier im Forum reingerutscht!
Es gibt nur einen Doctype bei mir:

HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta name="language" content="de" >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Ich habe nur das Div mit dem Kontaktformular hier dargestellt und nicht das gesamte HTML-Dokument in welchem sich
das Formular befindet mit Navi, Menü und head usw...wäre auch ein bisschen viel!
Mir gings ja nur um das Formular um dafür Ansätze zu erhalten wie man es in PHP machen kann!

Irgendwo ein Formular abgreifen und stundenlang testen ob die Anpassung an meine Bedürfnisse auch funktioniert ohne
wirklich zu kapieren was genau ich da mache, war nicht meine Intention!
Ich dachte vielleicht, auch was dabei zu lernen.
Also jemand, der einem zum Beispiel sagt:

Mit dem oder dem Befehl kann man folgendes machen....
Ich habe das Problem, das ich nicht wirklich viele Möglichkeiten kenne,
da mein Kurs Jahre her ist und mein Buch "Einstieg in PHP 5.3" nicht so wirklich
zu der Lösung meines aktuellen Problems beiträgt.!
Learning on the job, quasi!!!

Greets

Lovemate
 
Dies ist das dazugehörige PHP-script und funktioniert insofern, als das die Mail ankommt und die Inhalte übergibt und nach erfolgtem
Versand auf ein anderes HTM-Dokument weiterleitet.

PHP:
<?php

    $sex = $_POST['sex'];
    $vname = $_POST['vorname'];
    $nname = $_POST['nachname'];
    $firma = $_POST['firma'];    
    $mail = $_POST['brief'];
    $plz = $_POST['postleit'];
    $ort = $_POST['ort'];
    $strasse = $_POST['strasse'];
    $telefon = $_POST['telefon'];
    $typ = $_POST['typ'];
    $grund1 = $_POST['grnd1'];
    $grund2 = $_POST['grnd2'];
    $grund3 = $_POST['grnd3'];
    $grund4 = $_POST['grnd4'];
    $grund5 = $_POST['grnd4'];
    $nachricht = $_POST['texa'];

    $verschickt = 'http://www.mustermann.de/html/danke.html';
    
    
    $recipient = "[email protected]";
    $sender = "Kontaktformular Mustermann 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:" .$grund1. "\r\n";
    $message.="Kontaktgrund 2:" .$grund2. "\r\n";
    $message.="Kontaktgrund 3:" .$grund3. "\r\n";
    $message.="Kontaktgrund 4:" .$grund4. "\r\n";
    $message.="Kontaktgrund 5:" .$grund5. "\r\n";
    $message.="Nachricht:" .$nachricht. "\r\n";
    
    
    /*var_dump($_POST);*/

    

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

?>

Leider werden Sonderzeichen wie Umlaute usw. nicht korrekt in der Mail dargestellt und ich möchte eben die entsprechenden Abfragen einfügen,
vielleicht sogar noch den installierten "honeypot" irgendwie abfragen, denn wenn der ausgefüllt ist (unsichtbar für den menschlichen User),
dann muss es sich ja um einen Spambot handeln, oder?
 
Wenn Du in der E-Mail ein Zeichensatzproblem feststellst, dann sorge dafür, dass die E-Mail im selben Zeichensatz verschickt wird wie die Webseite im Browser ausgegeben wird. Das muss alles ein einheitlicher Zeichensatz sein - schon hast Du keine Probleme mehr. Wie man einen Zeichensatz beim E-Mail-Versand angibt, steht z.B. hier:
How to send correct UTF-8 mail in PHP | bitPrison.net
Stichwort: Header-Angabe für E-Mail. Und es sollte wie gesagt der selbe sein wie von der Webseite selbst.

Zusätzliche Abfragen sind, wenn Du das beachtest, nicht notwendig.

Der Honeypot könnte genau wie jedes andere Pflichtfeld geprüft werden. Dazu wurde oben bereits einiges gesagt. Kurzfassung:
PHP:
if( isset($_POST["feldname"]) && strlen($_POST["feldname"]) > 0 ) {
 // da steht was drinne
}
else
{
 // da steht nichts drinne
}
 
Hallo,

ohne jetzt alle beiträge gelesen zu haben nur das.

Umlaute ist klar, mach mal bitte auch im Betreff sonderzeichen rein beim testen sonst legst dir nach her die karten weil denkst alles super und dann soll in Btreff ein Müller rein :O).
Mail verschicken macht man mit einer Mailclasse wie PHPMailer da alles anderen quatsch und viel zu aufwendig ist geschweige sichergestellt werden kann das die mail ankommt oder andere sachen wie Bilder einbetten oder anhänge.

Das mit honeypot geht am einfachsten in dem zb feld E-Mail und Name die feldnamen tauscht.
Ist also bei Name eine E-Mail-Adresse drin kann das kein User gemacht haben.
Musst halt für dich selber in der PHP dokumentieren nicht das dich selber funderst wie so feld Name eine e-mail valide prüfung machst.

Cheffchen
 
Danke threadi...guter Link!

Und genau das meinte ich mit dem Anpassen!
Copy und paste nutzt nichts, weil diese Funktion in meinem script so natürlich nicht funktioniert!
Kann mir jemand diese Funktion auf mein script abwandlen und mir vielleicht noch erklären warum und wieso???
Dann kann ich es beim nächsten mal vielleicht selbst!

Der Code Schnipsel für den utf8 Zeichensatz von bitprison:
PHP:
  <?php   function mail_utf8($to, $subject = '(No subject)', $message = '', $header = '') {   $header_ = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n";   mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header_ . $header); }   ?>
Mein bestehendes Script:
PHP:
<?php
    $sex = $_POST['sex'];
    $vname = $_POST['vorname'];
    $nname = $_POST['nachname'];
    $firma = $_POST['firma'];    
    $mail = $_POST['brief'];
    $plz = $_POST['postleit'];
    $ort = $_POST['ort'];
    $strasse = $_POST['strasse'];
    $telefon = $_POST['telefon'];
    $typ = $_POST['typ'];
    $grund1 = $_POST['grnd1'];
    $grund2 = $_POST['grnd2'];
    $grund3 = $_POST['grnd3'];
    $grund4 = $_POST['grnd4'];
    $grund5 = $_POST['grnd4'];
    $nachricht = $_POST['texa'];

    $verschickt = 'http://www.mustermann.de/html/danke.html';
    
    
    $recipient = "[email protected]";
    $sender = "Kontaktformular Mustermann 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:" .$grund1. "\r\n";
    $message.="Kontaktgrund 2:" .$grund2. "\r\n";
    $message.="Kontaktgrund 3:" .$grund3. "\r\n";
    $message.="Kontaktgrund 4:" .$grund4. "\r\n";
    $message.="Kontaktgrund 5:" .$grund5. "\r\n";
    $message.="Nachricht:" .$nachricht. "\r\n";
    
    
    /*var_dump($_POST);*/

    

            mail($recipient, $betreff, $message, "From: $sender <$frommail>");
            header("Location: $verschickt");
            exit;
?>

Im Anschluß werde ich mal das if isset konstruieren und danach hier posten...

Danke bis hierhin, Leute!!!!
 
Wie soll man das eigentlich finden, dass wir hier deinen Job kostenlos machen und du damit Geld verdienst?

Ich versuche lediglich mich mit dem Thema PHP vertraut zu machen und zu lernen!
"Mein Job" umfaßt wesentlich mehr als ein php-script!

Zudem bitte ich nicht darum, um Arbeit zu sparen, sondern im Gegenteil zu lernen und mich weiterzubilden!
Ich helfe auch gerne anderen, wenn ich kann...aber bei PHP würde ich es nicht empfehlen sich von mir helfen zu lassen. :-)
Wäre ich durch das Lesen von Artikeln über Google Suche oder dem Anschauen von Video-Tutorials schlauer geworden, dann
wäre ich ja nicht hier und würde fragen....

Aber wenn Du mir nicht helfen möchtest, dann ist das bedauerlich aber ich kann es nicht ändern.
Freuen würde es mich trotzdem :-)

Lovemate
 
"Mein Job" umfaßt wesentlich mehr als ein php-script!
Das Script, um das es geht, gehört zu deinem Jon und somit verdienst du mit unserer kostenlosen Hilfe Geld!

Aber trotzdem ein Tipp: verfasse eine HTML-Mail und versende diese mit dem phpMailer. Damit ist dann das UTF-8 Problem erschlagen und die Mails kommen auch an.
 
Hallo,

danke bin wenigstens nicht alleine.
Nach ca halbes jahr hin und her habe ich das aufgegeben das ohne PHPMailer zu machen, da sind zu viel kompromisse ohne.

Cheffchen
 
Zurück
Oben