(Das Formular wird da aber nicht included)
Die Lösung für das gefragte Problem:
Formular und PHP in zwei getrennte Dateien tun und beim Formular bei action="" auch den Namen der PHP-Datei eintragen.
ABER, dieses ganze Script gehört zu 100% geändert.
Es so zu betreiben wird erstens oft nicht oder nicht richtig funktionieren, und zweitens hast du mehrere Sicherheitsprobleme (die zB. dabei helfen, anderen Leuten von deinem Server aus Viren unterzuschieben, deine DB kaputtzumachen, usw.usw.)
Die Punkte, die mir auffallen, in keiner bestimmten Reihenfolge, als Startpunkt zum weiterinformieren:
Wofür ist die Sache mit insertsent gut? Wenn es ein Captcha sein soll ist es ziemlich nutzlos. Besser eines der bewährten Captchasysteme verwenden.
Folgender Block ist zweimal vorhanden, wieso? Außerdem gibts beim zweiten Mal eine Variable mehr.
PHP:
$name = isset($_POST['name']) ? $_POST['name']:'';
$email = isset($_POST['email']) ? $_POST['email']:'';
$nachricht = isset($_POST['nachricht']) ? $_POST['nachricht']:'';
Folgender Block ist a) komplett sinnlos, weil die Variablen später wieder überschrieben werden, und b) ein Zeichen dass du dich mit der richtigen Setzung von Zeichensätzen beschäftigen solltest, c) ein Zeichen, dass du dich mit htmlspecialchars und striptags beschäftigen musst, d) ein Zeichen, dass du dich mit Contenttypen in Mails beschäftigen sollztest (angefangen mit Text vs Html), e) für alle drei Zwecke, die du da vielleicht im Sinn hattest, ist dieser Code jedenfalls nicht genug.
PHP:
$nachricht = str_replace("ä", "ä", $nachricht);
$nachricht = str_replace("Ä", "Ä", $nachricht);
$nachricht = str_replace("ö", "ö", $nachricht);
$nachricht = str_replace("Ö", "Ö", $nachricht);
$nachricht = str_replace("ü", "ü", $nachricht);
$nachricht = str_replace("Ü", "Ü", $nachricht);
$nachricht = str_replace("ß", "ß", $nachricht);
$nachricht = str_replace("<", "< ;", $nachricht);
$nachricht = str_replace(">", "> ", $nachricht);
$nachricht = str_replace("\r\n", "<br />", $nachricht);
$name = str_replace("ä", "ä", $name);
$name = str_replace("Ä", "Ä", $name);
$name = str_replace("ö", "ö", $name);
$name = str_replace("Ö", "Ö", $name);
$name = str_replace("ü", "ü", $name);
$name = str_replace("Ü", "Ü", $name);
$name = str_replace("ß", "ß", $name);
$name = str_replace("<", "< ;", $name);
$name = str_replace(">", "> ", $name);
Diese Zeile:
PHP:
if ($insertsent and $name and $email and $nachricht)
soll was genau prüfen? Ob Variablen existieren und/oder nicht null sind etc. prüft man nicht so, und außerdem existieren sie dank dem Code weiter oben ja immer und sind auch nie null. Eine Prüfung, ob sie getrimmt nicht leer sind, ob die Mailadresse gültig ist usw. wäre sinnvoller. (Speziell auch, da bei Nicht-Vorhandensein oben ein leerer Inhalt gesetzt wird, und das "nie" geprüft wird. Ein leeres Email an Leer.)
PHP:
$sqlin = 'INSERT INTO tabelle (id, seiten_id, name , nachricht ,email, datum)
VALUES (NULL , \''.$kom_nr.'\',\''.$name.'\', \''.$nachricht.'\',\''.$email.'\', \''.$datum.'\' )';
Sql-Injection, Sicherheit, siehe Prepared Statements mit MysqlI (das ist der Buchstabe i am Schluss).
PHP:
$ergin = mysql_query ($sqlin, $db) or die ("Fehlermeldung:".mysql_error());
Die "mysql_" - Funktionen gibts eigentlich nicht mehr. Seit mehr als 10 Jahren gibts was Besseres, in den letzten paar Jahren hat man bei jeder Verwendung dieser Funktionen eine Fehlermeldung bekommen (vorausgesetzt, man hat sie auch gelesen) (aber funktioniert hats trotzdem noch), und seit PHP7 gibts die Funktionen gar nicht mehr und damit funktionieren sie auch nicht mehr. Wenn sie bei dir noch funktionieren ist das a) ein Zeichen, dass du PHP updaten solltest, der Support für die letzte PHP-Version mit den Funktionen wird dieses Monat nämlich beendet, b) sowieso kein Grund, noch immer Code zu schreiben, der mit neuer SOftware nicht mehr funktioniert.
PHP:
$betreff = "ein neuer Kommentar für - $kom_nr";
$text = "Am $datum um $uhrzeit Uhr wurde folgendes an Modell-Art gepostet.\n
##########################################
# Vor der Freischaltung bitte Überprüfen #
##########################################\n
Seite: $kom_nr \n
Verfasser: $name \n
email: $email\n
Kommentar:
$nachricht\n
";
mail($empfaenger, $betreff, $text, "From: $absendername <$absendermail>");
Ich nenn das einmal "EMail-Injection", siehe "SQL-Injection" oben.
Hier gibts eine Menge Möglichkeiten, mit absichtlich falschen Eingaben ungewollte Effekte zu erreichen, zB. Senden von beliebigen Dateien (Viren...), beliebigen eingebundenen Webseiten (Werbung...), und so ziemlich allem anderen an dich oder auch beliebige andere Leute (= dein Server wird für Spam missbraucht).
Und zum echo am Schluss: Falls man "nicht" erfolgreich zu dieser Stelle kommt, sollte der Benutzer auch eine Meldung bekommen, warum (statt nur einer weißen Seite). => Fehlerbehandlung nach jedem if, jeder Funktion usw.