Seite 1 von 1

Beitragsersteller falsch..

Verfasst: 24.10.2006 19:42
von insy
Grade eben ist was ganz kurioses passiert.

Ich hab einen Beitrag geschrieben, in dem ich etwas aus dem ersten Post des Topics zitiert hab. Der entspr. User hat darauf wieder geantwortet. Ich daraufhin nochmal geantwortet. Dann hab ich eine Weile nicht in das Topic geschaut. Dann guck ich ne Stunde später wieder rein und seh ne neue Antwort desjenigen, den ich zitiert hatte.. aber diese Antwort mit Text "von ihm" war mit meinem Nick gepostet worden, so als hätte ICH gepostet :o Ich dachte schon, "da hat jemand mein PW rausgekriegt und will mich nun verkackeiern.. shit.. sofort PW ändern.. ".. aber bei Klick auf IP seh ich, dass es meine IP war. Ich weiß aber ganz sicher, dass ich den Beitrag NICHT geschrieben hatte :-?
Dann hab ich den Beitrag gelöscht, der angeblich von mir war. Und auf einmal was dann auch der andere Beitrag von mir auch weg..

Da kam wohl in der Datenbank was durcheinander? Wie kann sowas sein? Wie kann der User auf das Topic antworten, aber der Beitrag ist dann "von mir"..

sorry, wenn ich verwirrt klinge.. ich bin es.

ich gehe davon aus, dass mein Beitrag, nicht abgeschlossen in die Datenbank eingetragen wurde und deshalb die antwort des anderen User (es war ja da ein zitat von mir drin) mit reingehängt wurde in den Datenbankeintrag.. ist da vielleicht ein gaaanz kurzer Datenbankverbindungsabbruch in dem moment wo er oder ich gepostet hatte schuld? Kann ich mir jetzt nur SO logisch erklären ^^

Verfasst: 24.10.2006 19:52
von MTV-King
:o

sowas ich hab nochnie gehört. is ja kurios. weis aber leider keine antwort :(

Verfasst: 24.10.2006 21:35
von gn#36
Hm kann ich mir kaum vorstellen. Eigentlich läuft das so ab, dass der Post in der DB gespeichert wird und dann der Text des Posts mit gleicher ID.

Code: Alles auswählen

$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig" . $edited_sql . " WHERE post_id = $post_id";
	if (!$db->sql_query($sql, BEGIN_TRANSACTION))
	{
		message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
	}

	if ($mode != 'editpost')
	{
		$post_id = $db->sql_nextid();
	}

	$sql = ($mode != 'editpost') ? "INSERT INTO " . POSTS_TEXT_TABLE . " (post_id, post_subject, bbcode_uid, post_text) VALUES ($post_id, '$post_subject', '$bbcode_uid', '$post_message')" : "UPDATE " . POSTS_TEXT_TABLE . " SET post_text = '$post_message',  bbcode_uid = '$bbcode_uid', post_subject = '$post_subject' WHERE post_id = $post_id";
Tritt ein Fehler auf wird sofort mit einer Fehlermeldung abgebrochen (Verbindungsfehler müsste also aufgefallen sein).

Die Frage ist was passiert wenn mehrere User absolut zeitgleich Posten. In den Zeilen

Code: Alles auswählen

	if ($mode != 'editpost')
	{
		$post_id = $db->sql_nextid();
	}
wird die gerade verwendete ID aus der DB geholt (bei einem neuen Post kennt man die ja noch nicht). Die Frage ist jetzt, kann das Skript so unglücklich pausiert worden sein (Multithreading, jetzt ist der andere User dran) dass ausgerechnet vor dem Holen der ID unterbrochen wurde? Dann bekämen beide User aus der DB die gleiche ID zurück. Haken an der Geschichte wäre allerdings dass (zumindest bei mir) die ID der Primärschlüssel in beiden Tabellen ist und somit eine Mehrfacheintragung mit gleicher ID unmöglich (würde auch eine Fehlermeldung generieren).
Oder zeitgleicher Post und die ID's werden durch minimale Zeitunterschiede beim Eintrag vertauscht? Auch unwahrscheinlich, denn der Befehl sollte immer die letzte ID rausrücken und müsste daher auch in diesem Fall beiden die gleiche liefern.

--> Mir fällt keine Situation ein, wo das eintreten könnte was du beschreibst.

Verfasst: 24.10.2006 22:50
von kazwo
Schau mal, ob die DB Maintainance Mod nen Fehler in der Datenbank findet. Sollte dem so sein, so sollte die Mod das auch beheben können :)

Verfasst: 27.10.2006 17:45
von insy
Das Problem hat sich inzwischen gelöst. Einer meiner Moderatoren wollte mich zitieren, er hatte aber stattdessen auf "edit" geklickt und es nicht gemerkt.. :oops: :cry:

Verfasst: 27.10.2006 19:26
von Miriam
Und wieder einmal sitzt die Fehlerquelle vor dem Computer :grin: