ich wollte nochmals kurz den Unterschied zwischen PHP-Variablen und HTML POST-Variablen beschreiben, denn da kam es hier zwischen den Änderungen im Skript durch Volker, bzw. der KI "ChatGPT", zu den Diskrepanzen.
Ich schreibe das jetzt nur, um möglicherweise ein wenig zum Verständnis des Skripts beizutragen.
Hier mal als Beispiel mit der Variable namens "name". Eine PHP Variable erkennt man an dem vorstehenden $ Zeichen.
PHP Variable ($name)
Eine normale PHP-Variable, wie z. B.:
Code: Alles auswählen
$name = "Max";
Alle PHP-Anweisungen werden übrigens stets mit einem Semikolon (;) beendet.
PHP POST Variable ($_POST["name"])
Die $_POST-Variable ist ein sogenanntes Superglobales Array, das Daten speichert, die über ein HTML-Formular mit der Methode "POST" - also method="POST" - an das PHP-Skript gesendet wurden.
Ein Formular-Beispiel in HTML mit method="POST":
Code: Alles auswählen
<form method="POST" action="verarbeitung.php">
<input type="text" name="name">
<input type="submit" value="Senden">
</form>
Ein weiterer wichtiger Grund, sensible Inhalte einer E-Mail nicht zunächst an Drittanbieter zu senden, ist, dass niemand garantieren kann, ob diese dort möglicherweise ausspioniert werden.
Im PHP-Skript "verarbeitung.php" - in meinem Tutorial ist das als "mailscript.php" benannt - kann dann auf die Eingabe des Nutzers zugegriffen werden:
Code: Alles auswählen
$name = $_POST["name"]; // Holt den eingegebenen Wert über die POST-Variable aus dem Formular
echo "Hallo, " . $name . "!"; // Ausgabe am Bildschirm
Hauptunterschiede
PHP Variable ($name)
> Wird direkt im PHP-Skript gesetzt
> Lokale oder globale Variable
> Existiert nur während der Skriptausführung
POST Variable ($_POST["name"])
> Kommt von einem HTML-Formular (Methode POST)
> Teil eines Superglobalen Arrays
> Existiert nur, wenn ein POST-Request an das Skript gesendet wurde
Im Skript von Volker werden die POST-Variablen, die vom Formular an das Mailskript gesendet werden, zunächst in normale PHP-Variablen umgewandelt. Ein Beispiel dafür ist die POST-Variable "name":
Code: Alles auswählen
$name = htmlspecialchars(strip_tags($_POST["name"] ?? ""));
https://www.php.net/manual/de/function. ... lchars.php
Die Funktion "htmlspecialchars()" entfernt HTML-Zeichen wie < und > in ihre HTML-Entities (< und >), also HTML-Ersatzzeichen, umwandelt. Dadurch wird der "Tag" in der Ausgabe angezeigt, anstatt als HTML interpretiert.
Meines Wissens wird dies bereits im "PHPMailer" erledigt, weshalb es im Skript "mailscript.php" von Werner Zenk nicht erneut gesetzt wurde. Ich halte es für überflüssig und habe es daher nicht aus der Skriptänderung von Volker übernommen, um unnötige Verwirrung zu vermeiden. Gestern gab es wiederholt Missverständnisse von Volker bezüglich der Variablen, insbesondere der POST-Variablen.
Reply to
Du kannst übrigens bei dem "Antworten an" (Reply to) dann Deine beiden Felder "vorname" und "nachname" auch anstelle von jetzt nur "nachname" zusammen anzeigen lassen.
Also anstelle von:
Code: Alles auswählen
// "Antworten an" den Absender der Nachricht setzen
$mail->addReplyTo($_POST["email1"], $_POST["nachname"]);
Code: Alles auswählen
// "Antworten an" den Absender der Nachricht setzen
$mail->addReplyTo($_POST["email1"], $_POST["vorname"] . " " . $_POST["nachname"]);
→ Verbindet den Vornamen und Nachnamen durch die Punkte . mit einem Leerzeichen " " dazwischen.
Detlev,
es ist stets ratsam, sich zunächst genau an das im Tutorial vorgegebene Formular und das Mailscript zu halten, insbesondere wenn man sich noch nicht so gut auskennt. Auf diese Weise lassen sich zusätzliche eigene Fehler vermeiden.
Gestern habe ich mehrmals andere Feldnamen von dir übersehen, da ich beim Nachbauen eines Skripts aus meinem Tutorial naturgemäß auf die Angaben in meinem Tutorial zurückgreife, ohne alles jedes Mal erneut durchsehen zu müssen.
Sobald alles einwandfrei funktioniert, kann man Schritt für Schritt weitere Felder hinzufügen und diese im Script ergänzen. Sollte dann ein Fehler auftreten, lässt sich viel leichter nachvollziehen, woran es liegen könnte. Dies gilt nicht nur hier, sondern generell für alle Scripts, die man irgendwo einbaut.
Volker,
das erste Skript von meiner Seite, das Du verwendest und das lediglich die PHP-Mail-Funktion nutzt, ist eigentlich nicht besonders empfehlenswert. PHPMailer bietet meines Wissens keinerlei Schutz gegen Spambots. Deshalb empfehle ich die Verwendung von SMTP und biete zusätzlich auf meiner Seite sowohl einen
Honeypotals auch ein
Captchaals Schutzmaßnahme an.
Wenn man, wie ich, schon einmal über eine Million Spam-Mails innerhalb einer Woche über einfaches PHP-Mail erhalten hat und einem sämtliche Postfächer vom Provider gesperrt wurden, dann ist man gerne bereit, sich etwas zusätzliche Mühe und Arbeit zu machen
