echo $begrüßung;
[... Probleme ...] Woran kann das nur liegen?
Was hast du an grundlegenden Debuggingversuchen bereits unternommen? An welcher Stelle stimmen Wunsch und Wirklichkeit nicht mehr überein? Kontrollausgaben mit echo oder besser mit var_dump() und ein auf E_ALL gestelltes error_reporting (und display_errors auf on) sind Grundlagen zur Fehlersuche unter PHP. Da du diese Grundlagen immer wieder brauchst, nehme ich dir auch nicht die Möglichkeit, jetzt Erfahrung damit zu sammeln. Allerdings habe ich ein paar allgemeine Anmerkungen.
function entferneSlashesArray($a) {
Nimm lieber die Funktion aus dem Handbuch-Kapitel Disabling Magic Quotes. Die arbeitet nur, wenn es wirklich erforderlich ist. Außerdem wendest du deine Funktion zu spät an, nachdem du bereits einige Verarbeitungsschritte ausgeführt hast und unbehandelte Werte anderswo gelandet sind.
$Anrede = (isset($_POST["Anrede"]) && is_string($_POST["Anrede"])) ?
$_POST["Anrede"] : "";
Die Inhalte im POST-Array sind immer vom Typ String. Die is_string()-Prüfung ist überflüssig. Den Fall, dass Werte nicht gesetzt sind, fängst du ja mit isset() ab.
$ok = false;
$fehlerfelder = array();
if (isset($_POST["submit"])) {
$ok = true;
if (!isset($_POST["Anrede"]) ||
!is_string($_POST["Anrede"]) ||
$_POST["Anrede"] == "0") {
$ok = false;
$fehlerfelder[] = "Anrede";
}
Noch eine Prüfung? Du kannst beide kombinieren.
$betreff = isset($_POST["Kontaktformular"]) ? $_POST[$betreff] : "";
$nachricht = isset($_POST["body"]) ? $_POST["body"] : "";if (!empty($_POST["Cc"])) {
$header .="\r\nCc:" . $_POST["Cc"];
}
if (!empty($_POST["Bcc"])) {
$header .="\r\nBcc:" . $_POST["Bcc"];
}
Hier fehlen Prüfungen. Wenn in den Werten, die in Headerzeilen landen sollen (Empfänger, Betreff und Header), Zeilenumbrüche enthalten sind, kannst du die Verarbeitung grußlos beenden, denn dann handelt es sich mit Sicherheit um einen Bot, der über dein derzeit für Mail-Header-Injection anfälliges Formular Spam versenden möchte.
echo "$verabschiedung $name";