dedlfix: Threadbasiertes Forum mit PHP

Beitrag lesen

Hi!

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);

einfügen:
$lastid = mysql_insert_id();

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

stattdessen:

header("Location: lesen.php?eintrag=". $lastid); // Benutzer auf den neuen Eintrag umleiten

exit(); // Skript beenden
  }
}

  

> Wenn ich nun aber einen neuen Eintrag ohne Bezug mache, somit also $eintrag = 0 ist, werden zwar alle Felder in der Datenbank gefüllt aber die Antwort auf mysql\_insert\_id() ist ebenfalls 0. hier fehlt also scheinbar die Rückantwort der Datenbank welche neue ID vergeben wurde.  
  
Da müsste man jetzt prüfen, wie sich mysql\_insert\_id() nach den UPDATE verhält, das ja dem INSERT mit der neu vergebenen ID folgt. Vermutlich gibt es nun die 0, weil das PHP-Handbuch das auch so beschreibt, dass sich der Wert auf das jüngste Statement bezieht und nicht auf das jüngste mit erhöhter ID. Entweder ist das damals auch schon ein Fehler gewesen oder erst durch eine Änderung seitens PHP/MySQL entstanden. Die obige Korrektur sollte helfen, denke ich. (Und wenn du ganz genau bist, gibst du dem Location-Header eine vollständige URL.)  
  
  
Lo!