Entschuldigung für mein Doppelpost, da diese frage nun schon etwas spezieller war hatte ich einen neuen Thread eröffnet und nicht bedacht das ich die frage hier ebenfalls weiterstellen kann.
Nachdem ja nun der Doppelpost geschlossen ist, hier nochmal die Frage.
danke trotzdem für eure hilfe!
Es geht um das tutorial von Henryk Plötz
http://aktuell.de.selfhtml.org/artikel/php/php-forum/
Das der Beitrag schon älter ist und somit nicht ganz konform ist mir klar, habe diesen jetzt aber soweit zur Funktion gebracht.
es können auch Einträge gemacht werden, jedoch scheint bei der Übergabe an der MYSQL Datenbank was nicht zu stimmmen.
hier mal die nun neue "neu.php"
<?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($_GET[eintrag]) || $eintrag < 0) $eintrag = 0;
else $eintrag = (int) $_GET[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($_POST[abschicken] != "") { // Nachricht soll abgeschickt werden
// Allgemeine Überprüfungen
if(!isset($_POST[name]) || $_POST[name] == "")
$errors[] = "Es wurde kein Name eingegeben. Bitte geben Sie einen Namen ein.";
if(!isset($_POST[email]) || $_POST[email] == "")
$errors[] = "Es wurde keine Email-Addresse eingegeben. Bitte geben Sie eine Email-Addresse ein.";
else {
$email = trim($_POST[email]); // Leerzeichen vor und hinter der Email-Addresse abschneiden
if(!preg_match("/^[^@]+@.+\.\D{2,5}$/", $_POST[email])) // Überprüfung ob die Email-Addresse das Format name@domain.tld hat
$errors[] = "Die eingebene Email-Addresse sieht nicht richtig aus.";
}
if(!isset($_POST[betreff]) || $_POST[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);
}
}
$name = $_POST[name];
$betreff = $_POST[betreff];
$email = $_POST[email];
$text = $_POST[text];
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=". (int) mysql_insert_id()); // Benutzer auf den neuen Eintrag umleiten
exit(); // Skript beenden
}
}
// HTML-Teil
?>
<?php if($eintrag == 0) { ?>
<h1>Neuen Eintrag verfassen</h1>
<?php } else { echo $eintrag;?>
<h1>Antwort verfassen</h1>
<p>Im Formular ist der Eintrag auf den Sie antworten noch einmal komplett zitiert.
Bitte löschen Sie beim Beantworten nicht benötigte Zitate.</p>
<?php } ?>
<?php if(isset($errors)) { /* es sind Fehler aufgetreten */?>
<h2>Fehler:</h2>
<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 -->
<h2>Nachricht schreiben</h2>
<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>Ihr Name: </td><td><input type="text" size="80" name="name" value="<?php wp($name);?>"></td>
</tr>
<tr>
<td>Ihre Mailaddresse: </td><td><input type="text" size="80" name="email" value="<?php wp($email);?>"></td>
</tr>
<tr>
<td>Betreff: </td><td><input type="text" size="80" name="betreff" value="<?php wp($betreff);?>"></td>
</tr>
<tr valign="top">
<td>Nachrichtentext: </td>
<td>
<textarea cols="80" rows="10" wrap="virtual" name="text"><?php wp($text);?></textarea>
</td>
</tr>
<tr>
<td>
<?php if($eintrag == 0) { ?>
<a href="forum.php">Abbrechen<br><small>Zur Hauptseite</small></a>
<?php } else { ?>
<a href="lesen.php?eintrag=<?php wp($eintrag);?>">Abbrechen<br><small>Zum gelesenen Eintrag</small></a>
<?php } ?>
</td>
<td><input type="submit" name="abschicken" value="Abschicken"></td>
</tr>
</table>
</form>
Die Übergabe an die MYSQL Datenbank klappt soweit, jedoch wird das Feld PID was mit $eintrag gefüllt werden soll, immer nur mit 0 gefüllt, auch das Feld TID wird nicht mit $Thread gefüllt sondern mit fortlaufender ID.
des weiterem erhalte ich folgenden Fehler:
Warning: Cannot modify header information - headers already sent by (output started at */neu.php:11) in */neu.php on line 76
was darauf schließen lässt das hier was nicht stimmt:
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=". (int) mysql_insert_id()); // Benutzer auf den neuen Eintrag umleiten
exit(); // Skript beenden
Ich bin einfach blind und finde den Fehler nicht, wäre dankbar für jede hilfe.