hallo leute!
ich möchte im voraus sagen, dass ich mich nicht zum ersten mal mit php beschäftige, aber bei diesem bug bin ich total ratlos:
ich codiere gerade ein forum mit php und seit dem ich bei der insert.php, also jener seite, die beiträge in die sql datenbank einträgt (mittels insert into befehl) die session id funktion hinzugefügt habe, gibt es einen sehr seltsamen bug: der beitrag wird doppelt in der sql datenbank gespeichert, was mir totales kopfzerbrechen beschert. schließlich ist in dieser insert.php nur ein einziger insert into befehl (die anderen habe ich zur auffindung des bugs rausgelöscht) und auch keine schleife, was zu einer zweimaligen erfassung des datensatzes führen könnte.
lösche ich jedoch das session_start(); einfach raus, funktioniert es auf einmal, also der datensatz wird nur einmal erfasst (was erwünscht ist), und nicht zweimal.
im code schaut das so aus: (all der restliche code, der nicht zu diesem problem beiträgt, habe ich entfernt. ebenfalls habe ich anstatt der flexiblen werte wie zB $_REQUEST['threadid'] im insert into befehl fixe werte wie 99 genommen, um fehlerquellen zu reduzieren)
führe ich diesen code aus, kommen zwei (!) neue (gleiche) datensätze in die tbl_post hinzu:
102, 99, 99, 'irgendein topic', 99, 'irgendeine nachricht'
103, 99, 99, 'irgendein topic', 99, 'irgendeine nachricht'
(102 und 103 ist die postid --> autowert)
es sollte jedoch nur EIN solcher datensatz hinzugefügt werden, nirgendwo steht, dass dies zwei mal geschehen soll. interessant ist auch, dass der zweite (unerwünschte) datensatz nicht sofort hinzugefügt wird, sondern erst nach 5 sekunden oder manchmal sogar mehr, was mir total rätselhaft ist.
nach einigem ausprobieren bin ich jedoch wie gesagt drauf gekommen, dass wenn ich ganz am anfang einfach das session_start(); rauslösche, die zweifacherfassung des datensatzes nicht passiert, was ich ebenfalls überhaupt nicht verstehe, aber tatsache ist.
das session_start(); benötige ich übrigens zur speicherung der userid des users, der gerade eingeloggt ist. diese würde dann beim insert into befehl unter userid abgerufen und abgespeichert. die habe ich jedoch beim obrigen code wie gesagt der einfachheit halber durch den fixen wert 99 ersetzt.
also meine frage: warum führt das session_start(); zu einer zweifachausführung des insert into befehls und wie kann ich das beheben?
ich bin für jede antwort dankbar!
mfg
ich möchte im voraus sagen, dass ich mich nicht zum ersten mal mit php beschäftige, aber bei diesem bug bin ich total ratlos:
ich codiere gerade ein forum mit php und seit dem ich bei der insert.php, also jener seite, die beiträge in die sql datenbank einträgt (mittels insert into befehl) die session id funktion hinzugefügt habe, gibt es einen sehr seltsamen bug: der beitrag wird doppelt in der sql datenbank gespeichert, was mir totales kopfzerbrechen beschert. schließlich ist in dieser insert.php nur ein einziger insert into befehl (die anderen habe ich zur auffindung des bugs rausgelöscht) und auch keine schleife, was zu einer zweimaligen erfassung des datensatzes führen könnte.
lösche ich jedoch das session_start(); einfach raus, funktioniert es auf einmal, also der datensatz wird nur einmal erfasst (was erwünscht ist), und nicht zweimal.
im code schaut das so aus: (all der restliche code, der nicht zu diesem problem beiträgt, habe ich entfernt. ebenfalls habe ich anstatt der flexiblen werte wie zB $_REQUEST['threadid'] im insert into befehl fixe werte wie 99 genommen, um fehlerquellen zu reduzieren)
Code:
<?php session_start(); include ("verbindung/dbconnect.php"); $sql4 = "INSERT INTO tbl_posts(threadid,userid,posttopic,posttime,message) VALUES("; $sql4 = $sql4."'"."99"."',"; $sql4 = $sql4."'"."99"."',"; $sql4 = $sql4."'"."irgendein topic"."',"; $sql4 = $sql4."'"."99"."',"; $sql4 = $sql4."'"."irgendeine nachricht"."')"; $result4 = mysql_query($sql4, $link) or die("Fehler4!: ".mysql_error()); ?> <html> <head> <title>project::forum</title> <link rel="stylesheet" href="css/main.css" type="text/css"> </head> <body> ... wird eingetragen </body> </html>
102, 99, 99, 'irgendein topic', 99, 'irgendeine nachricht'
103, 99, 99, 'irgendein topic', 99, 'irgendeine nachricht'
(102 und 103 ist die postid --> autowert)
es sollte jedoch nur EIN solcher datensatz hinzugefügt werden, nirgendwo steht, dass dies zwei mal geschehen soll. interessant ist auch, dass der zweite (unerwünschte) datensatz nicht sofort hinzugefügt wird, sondern erst nach 5 sekunden oder manchmal sogar mehr, was mir total rätselhaft ist.
nach einigem ausprobieren bin ich jedoch wie gesagt drauf gekommen, dass wenn ich ganz am anfang einfach das session_start(); rauslösche, die zweifacherfassung des datensatzes nicht passiert, was ich ebenfalls überhaupt nicht verstehe, aber tatsache ist.
das session_start(); benötige ich übrigens zur speicherung der userid des users, der gerade eingeloggt ist. diese würde dann beim insert into befehl unter userid abgerufen und abgespeichert. die habe ich jedoch beim obrigen code wie gesagt der einfachheit halber durch den fixen wert 99 ersetzt.
also meine frage: warum führt das session_start(); zu einer zweifachausführung des insert into befehls und wie kann ich das beheben?
ich bin für jede antwort dankbar!
mfg
Kommentar