Hallo,
ich hab ein kleines Kontaktformular für meine Hompage
und das scheint schon recht betagt, um nicht zu sagen "veraltet" zu sein.
<?
Bitte immer die ausgeschriebene Form <?php verwenden. Short Open Tags sind auf vielen Servern nicht verfügbar, und das aus gutem Grund.
$ip = "".$HTTP_SERVER_VARS["REMOTE_ADDR"];
Die $HTTP_*_VARS sind schon seit langem missbilligt, in manchen PHP-Installationen sind sie schon gar nicht mehr verfügbar. Verwende stattdessen die superglobalen Arrays $_GET, $_POST, $_SERVER.
// Inhalt aus den Formularen übertragen "Name"
$name = $_POST['name'];
// Inhalt aus den Formularen übertragen "Email"
$email = $_POST['email'];
// Inhalt aus den Formularen übertragen "Betreff"
$betreff = $_POST['betreff'];
// Inhalt aus den Formularen übertragen "Nachricht"
$text = $_POST['text']; // Text
Wozu kopierst du diese Werte um, noch dazu ohne sie zu prüfen? - So wandert $betreff zum Beispiel ungeprüft in dein $subject, eine herrliche Methode für Header Injection. So kann dein Formular leicht als Spamschleuder missbraucht werden. Als allerminimalste Forderung sollte man hier sicherstellen, dass die übergebenen Werte keine Steuerzeichen (Codes <0x20) enthalten.
// Wir bauen eine Funktion die soll die Absender E-Mail überprüfen, ob die gültig ist
// das machen wir mit eregi() wir prüfen nicht nur ob "@" und "." vorhanden ist sondern auch
// 2 bustaben vor "@" und nach dem "@" da sind.
function mailcheck($mail) {
Autschn. Eine Funktion mitten in den linearen Codeablauf zu quetschen, ist schlechter Stil, vor allem macht es den Code unübersichtlich.
$subject = "Homepage Kontakt - $betreff";
Das meinte ich vorher: Hier setzt du $betreff ungeprüft ein.
$header = "FROM: $email";
Fehler: Der Header heißt "From", nicht "FROM", und du hast das abschließende \r\n vergessen. Folglich wird nicht nur *dieser* Header ignoriert, sondern auch der folgende ...
$header .= "Content-Type: text/html\r\nContent-Transfer-Encoding: 8bit\r\n";
... weil er ja mit dem vorherigen zu einer Zeile verschmilzt. Folge: Niemand weiß, dass deine Mail HTML enthalten soll.
$header .= "X-Mailer: PHP ". phpversion();
Okay, kann man machen; man kann's auch weglassen.
Man sieht ja was nachher fett geschrieben werden soll, nur leider kommt es so bei mir nicht an.
Sondern als Plain Text, ja. Siehe oben.
So long,
Martin
Ja, ja ... E.T. wusste schon, warum er wieder nach Hause wollte.