Ich habe ein Problem bei einem kleinen Forum. Sobald ich das Formular ausgefüllt habe und abschicke bekomme ich ein "Header alredy send". In der Meldung sagt er mir geht es um die Zeile:
Code:
header("Location: lesen.php?eintrag=". mysql_insert_id());
Hier ist einmal die ganze Datei:
Code:
<?php
include_once("inc/header.inc.php");
include("funktionen.php"); // Nützliche Funktionen importieren
unset($errors); // Ein Array in das wir Fehlermeldungen schreiben
unset($Thread); // Variablen die evt. uninitialisiert benutzt werden, löschen
$connid = DBverbinden(); // Datenbankverbindung herstellen
if(!isset($eintrag) || $eintrag < 0) $eintrag = 0;
else $eintrag = (int)$eintrag; // $eintrag auf einen vernünftigen Wert setzen
if($bearbeitet != true && $eintrag != 0) { // Es wurden keine Eingaben gemacht, und es soll eine Antwort verfasst werden
$result = mysql_query("SELECT Betreff, Text FROM Forum WHERE ID =".$eintrag, $connid);
if(!$result) die("Datenbank konnte nicht abgefragt werden");
if(mysql_num_rows($result) != 1) { // Eintrag entweder nicht vorhanden oder mehrere Einträge mit derselben ID (hmm?)
$errors[] = "Der Eintrag auf den Sie antworten wollen ist nicht in der Datenbank.
Entweder existierte er nie und Sie spielen grade an den Formularparametern rum
oder er wurde in der Zwischenzeit gelöscht.
Wenn Sie dieses Formular abschicken, wird ein neuer Thread eröffnet.";
$eintrag = 0; // Auf "neuen Thread" setzen
} else {
$eintragsdaten = mysql_fetch_array($result);
$betreff = $eintragsdaten["Betreff"]; // Alte Betreffzeile übernehmen
$text = $eintragsdaten["Text"]; // Alten Text übernehmen
if(get_magic_quotes_runtime())
$text = stripslashes($text); // Die Slashes die beim Auslesen freundlicherweise hinzugefügt werden entfernen
$text = wordwrap($text); // Nachrichtentext automatisch umbrechen
$text = preg_replace("/^/m", "> ", $text); // Zitatzeichen an den Anfang jeder Zeile stellen
$text = addslashes($text); // Gleiche Ausgangsbedingungen für alle Variablen wiederherstellen
}
}
if($abschicken != "") { // Nachricht soll abgeschickt werden
// Allgemeine �berprüfungen
if(!isset($name) || $name == "")
$errors[] = "Es wurde kein Name eingegeben. Bitte geben Sie einen Namen ein.";
if(!isset($email) || $email == "")
$errors[] = "Es wurde keine Email-Addresse eingegeben. Bitte geben Sie eine Email-Addresse ein.";
else {
$email = trim($email); // Leerzeichen vor und hinter der Email-Addresse abschneiden
if(!preg_match("/^[^@]+@.+\.\D{2,5}$/", $email)) // �berprüfung ob die Email-Addresse das Format name@domain.tld hat
$errors[] = "Die eingebene Email-Addresse sieht nicht richtig aus.";
}
if(!isset($betreff) || $betreff == "")
$errors[] = "Es wurde keine Betreff-Zeile eingegeben. Bitte geben Sie eine Betreffzeile ein.";
if($eintrag != 0) { // Es soll eine Antwort verfasst werden
$result = mysql_query("SELECT TID FROM Forum WHERE ID=".$eintrag, $connid);
if(!$result) die("Datenbank konnte nicht abgefragt werden");
if(mysql_num_rows($result) != 1) { // Da ist irgendwas faul
$errors[] = "Der Eintrag auf den Sie antworten wollen ist nicht in der Datenbank.
Entweder existierte er nie und Sie spielen grade am Formular rum
oder er wurde zwischenzeitlich gelöscht.
Wenn Sie das Formular erneut abschicken wird ein neuer Thread eröffnet.";
$eintrag = 0;
} else {
list($Thread) = mysql_fetch_row($result);
}
}
if(!isset($errors)) { // Keine Fehler bisher, let's rock
if($eintrag == 0) $Thread = 0; // neuer Thread
$result = mysql_query("INSERT INTO Forum (PID, TID, AutorName, Betreff, AutorEmail, Text)
VALUES (".$eintrag.",".$Thread.",'".$name."','".$betreff."',
'".$email."','".$text."')", $connid);
if(!$result) die("Konnte den neuen Eintrag nicht in die Datenbank schreiben");
if($eintrag == 0) // Jetzt die Thread-ID des neuen Threads korrekt setzen
if(!mysql_query("UPDATE Forum SET TID=ID, Zeitpunkt=Zeitpunkt WHERE ID = LAST_INSERT_ID()", $connid))
die("Konnte die Thread-ID in der Datenbank nicht aktualisieren.
Die Datenbasis könnte inkonsistent sein.");
// Wenn wir noch leben, dann ist alles glatt gegangen.
header("Location: lesen.php?eintrag=". mysql_insert_id()); // Benutzer auf den neuen Eintrag umleiten
exit(); // Skript beenden
}
}
// HTML-Teil
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<?php if($eintrag == 0) { ?>
<title>Neuen Eintrag verfassen</title>
<?php } else { ?>
<title>Antwort verfassen</title>
<?php } ?>
</head>
<body>
<?php if($eintrag == 0) { ?>
Neuen Eintrag verfassen<br><br>
<?php } else { ?>
Antwort verfassen<br><br>
Im Formular ist der Eintrag auf den Sie antworten noch einmal komplett zitiert.
Bitte löschen Sie beim Beantworten nicht benötigte Zitate.<br><br>
<?php } ?>
<?php if(isset($errors)) { /* es sind Fehler aufgetreten */?>
Fehler:
<p>Beim Bearbeiten Ihrer Anfrage sind folgende Fehler aufgetreten:</p>
<ul>
<?php foreach($errors as $error) { /* alle Fehler durchgehen */ ?>
<li><?php wp($error);?></li>
<?php } ?>
<?php } ?>
</ul>
<!-- Jetzt das Formular -->
Nachricht schreiben<br><br>
<form action="neu.php" method="POST">
<!-- Der Eintrag auf den geantwortet wird, oder 0 für neuen Thread -->
<input type="hidden" name="eintrag" value="<?php wp($eintrag);?>">
<!-- Damit die eingegeben Daten nicht aus der Datenbank überschrieben werden -->
<input type="hidden" name="bearbeitet" value="true">
<table>
<tr>
<td>Name: </td><td><input type="text" size="40" class="formelementsservice" name="name" value="<?php wp($name);?>"></td>
</tr>
<tr>
<td>Email: </td><td><input type="text" size="40" class="formelementsservice" name="email" value="<?php wp($email);?>"></td>
</tr>
<tr>
<td>Betreff: </td><td><input type="text" size="40" class="formelementsservice" name="betreff" value="<?php wp($betreff);?>"></td>
</tr>
<tr valign="top">
<td>Text: </td>
<td>
<textarea cols="40" rows="10" wrap="virtual" class="formelementsservice" name="text"><?php wp($text);?></textarea>
</td>
</tr>
<tr>
<td>
<?php if($eintrag == 0) { ?>
<a href="index_forum.php"><small>Forum</small></a>
<?php } else { ?>
<a href="lesen.php?eintrag=<?php wp($eintrag);?>">Abbrechen</a>
<?php } ?>
</td>
<td><input type="submit" name="abschicken" class="formelementsservice" value="Abschicken"></td>
</tr>
</table>
</form>
</body>
</html>
<?php include_once("inc/footer.inc.php"); ?>