Formular/Überprüfung/DB-Eintrag in einer Funktion: Eintrag kommt doppelt!

27apricot

Erfahrenes Mitglied
Hallo allerseits,

ich habe eine Funktion geschrieben, die ein Formular für Kommentare in einem Blog zurückgibt und die außerdem auch die Überprüfung der POST-Daten vornimmt und gegebenenfalls den Eintrag in die DB.

In dem Script, dass die Seite ausgibt, rufe ich die Funktion (per echo-Befehl) vor der Ausgabe aller schon geschriebenen Kommentare auf.

Wenn ich jetzt das Formular ausfülle und absende, werden die Daten zweimal in die DB geschrieben. In der erscheinenden Liste der schon geschriebenen Kommentare steht der gerade geschriebene Kommentar aber zuerst nur einmal. Erst nach dem nächsten Aufruf der Seite wird er auch zweimal angezeigt. Ich finde das höchst rätselhaft.

Hier ist die Funktion:
PHP:
	function form_blog_comment($id_blog) {
		// Initialisierung der Ausgabe
		$formular = "";
		// Formularfeld-Vorbelegungen (werden bei Ausfüll-Fehlern später überschrieben)
		$name = "";
		$email = "";
		$url = "";
		$txt = "";

		if(isset($_POST[SUBMIT_BLOG_COMMENT])) {
			//<-- Überprüfung des versendeten Formulars -->//
			//<-- Wenn Fehler: schreiben des Arrays $fehler -->//
			if(empty($fehler)) {
				// Eintrag, wenn kein Fehler
				$sql_ins = "INSERT INTO `blog_comments`
							(`id_blog`, `datum_zeit`, `name`, `email`, `url`, `txt`)
							VALUES (
								'".$id_blog."',
								NOW(),
								'".addslashes($_POST['name'])."',
								'".addslashes($_POST['email'])."',
								'".addslashes($_POST['url'])."',
								'".addslashes($_POST['txt'])."'
							)";
				db_query($sql_ins); // Funktion zur Anfrage an die Datenbank
			}
		}
		if(!empty($fehler)) {
			// wenn Fehler: Fehlerausgabe und Formularfeld-Vorbelegungen
			$formular .= "<ul class=\"fehler\">";
			foreach($fehler AS $fehler_ausgabe) {
				$formular .= "<li>".$fehler_ausgabe."</li>";
			}
			$formular .= "</ul>";
			// Formularfeld-Vorbelegungen
			$name = $_POST['name'];
			$email = $_POST['email'];
			$url = $_POST['url'];
			$txt = $_POST['txt'];
		}
		// AUFBAU des Formulars über entsprechende Funktionen:
		$formular .= form_start($_SERVER['REQUEST_URI']."#formular");
		$formular .= "<p>".input_hidden("id_blog", $id_blog)."</p>";
		$formular .= "<h5>Name</h5>";
		$formular .= "<p>".input_text("name", $name, 100, "w75p")."</p>";
		$formular .= "<h5>E-Mail-Adresse</h5>";
		$formular .= "<p>".input_text("email", $email, 100, "w75p")."</p>";
		$formular .= "<h5>Internetseite</h5>";
		$formular .= "<p>".input_text("url", $url, 100, "w75p")."</p>";
		$formular .= "<h5>Text</h5>";
		$formular .= "<p>".textarea("txt", $txt, 5, "w75p")."</p>";
		$formular .= "<p>".button_submit(SUBMIT_BLOG_COMMENT, "Senden")."</p>";
		$formular .= form_ende();
		return $formular;
	}

Ich habe auch schon probiert, die einzelnen Elemente der Funktion voneinander zu trennen und die if-Abfragen eben doch wieder im eigentlichen Script zu machen. Aber auch das hat nix gebracht.

Vielen Dank im Voraus für eure Hilfe.

Schöne Grüße:
27apricot
 
Zurück