PHP MySQL INSERT INTO erstellt 2 Einträge

Hallo zusammen.

Lang ist es her, aber ich habe nun wieder ein Problem und zwar, ich hab mir ein CMS gebaut, bin nur dran Inhalte ändern, löschen und hinzufügen.

Inhalte ändern > OK!
Inhalte löschen > OK!
Inhalte hinzfügen > TEILWEISE OK!

Nun zu meinem Problem, ich erhalte über $_GET[] alle nötigen Informationen zum Erstellen eines neuen Inhalts.

Ich erzeuge dann mittels folgende SQL Syntax:

INSERT INTO contents(`id`, `title`, `content`) VALUES (NULL, 's', 's ');

Super, der Eintrag wird erstellt! Jedoch nun zu meinem Problem, irgendwie, wir das Statement doppelt ausgeführt, denn, wenn ich einen neuen Inhalt hinzufüge, ist er doppelt drinnen. Warum?

Ich hab wirklich kein Plan, warum das so ist, die Codestelle:

if($\_GET["addContent"] == "Add this content" && isset($\_GET["addContent"]))
{
 $addContentTitle = $\_GET["addContentTitle"];
 $addContentContent = $\_GET["taAddContent"];

 $addContentSQL = "INSERT INTO $db\_tableContents(`id`, `title`, `content`) VALUES (NULL, '$addContentTitle', '$addContentContent');";
 echo $addContentContent;
 echo $addContentSQL;
 mysql\_query($addContentSQL) or die(mysql\_error());
 echo " **Content successfully added!**";
}

wird auch nicht 2x ausgeführt, deshalb ??

Vielen Dank.

LG,
Sebastian

wird es denn dann auch 2x ausgegeben, dass es geschrieben wurde? Oder gibt es an einer anderen Stelle nochmal ein query in dem noch die gleichen Daten stehen könnten?

zur not solltest Du dann eben den Weg gehen, dass es auch nur einmal gehen KANN…
Sprich:
id = Unique
ermitteln der max_id und dann einfügen mit max_id + 1

wird es denn dann auch 2x ausgegeben, dass es geschrieben
wurde? Oder gibt es an einer anderen Stelle nochmal ein query
in dem noch die gleichen Daten stehen könnten?

Also das Content successfully added wird nur 1mal ausgegeben. Ein anderes Query gibt es eben nicht!

zur not solltest Du dann eben den Weg gehen, dass es auch nur
einmal gehen KANN…
Sprich:
id = Unique
ermitteln der max_id und dann einfügen mit max_id + 1

Die ID ist fortlaufend, also wenn der erste Eintrag erstellt wird, hat id den wert zB 99 und der zweite Eintrag die id zB 100.

Sowas von eigenartig!!

echo $addContentContent;
echo $addContentSQL;

auskommentieren ; villeicht hilfts ja , das mein ich ernst.

auskommentieren ; villeicht hilfts ja , das mein ich ernst.

*lol* hat leider nicht geholfen!

ich weiss im moment nicht was da los ist, spinnt meine MYSQL-DB! Bzw. das Script wird 2 mal aufgerufen, das ist schlecht? sch*****!!!

zur not solltest Du dann eben den Weg gehen, dass es auch nur
einmal gehen KANN…

genau nach diesem prinzip bzw. ähnlichen prinzip habe ich es jetzt gelöst…

ich vergleiche den letzten erstellten Eintrag mit dem neuen Eintrag, wenn identisch, dann kein Eintrag, sonst Eintrag.

Trotzdem verstehe ich nicht, warum, mein PHP Script 2 Einträge erstellt, jetzt nur noch einen, aber trotzdem seltsam!

hier nun meine methode, zur überprüfung zur erstellung der neuen einträge:

 arsort($idContents);
 $i = 0;
 foreach($idContents as $key =\> $val){
 #echo $val;
 if($i==0)
 {
 if($addContentTitle != $titleContents[$key] && $addContentContent != $contentContents[$key])
 {
 $addContentSQL = "INSERT INTO $db\_tableContents(`title`, `content`) VALUES ('$addContentTitle', '$addContentContent');";
 mysql\_query($addContentSQL) or die(mysql\_error());
 echo " **Content successfully added!**";
 }
 }
 $i = $i + 1;
 }

Schönen Tag.

Irgentwann hat ich das auch mal, war aber nicht die DB schuld.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Und was war die Lösung, wurde das Script, fälschlicherweise 2 mal ausgeführt??

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

das war was mit echo $webseite ; und hätte echo „$webseite“ sein müssen.
Allerdings versteh ich das immernoch nicht, warum da ein unterschied sein soll. Und warum er nur die SQL sachen doppelt gemacht hat. Schien mir aber wie ein bugg, als würde ein statement irgentwie irgentwo gespeichert bleiben und dann einfach nochmal geschickt.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo!
Inzwischen gelöst?
Denn etwas merkwürdig find ich diese Codestelle:

$addContentSQL = „INSERT INTO $db_tableContents(id,
title, content) VALUES (NULL, ‚$addContentTitle‘,
‚$addContentContent‘);“;

Da steht am Ende:
;";
Vielleicht mal den ersten Strichpunkt wegmachen!
Weiss nicht, ob das das Problem ist, Richtig kann das aber nicht sein :smile:

grüßle
Geisterkarle

Hallo,

ich hatte dieses Problem auch mal und lange geforscht. Hab dann gemerkt, dass der Browser (Firefox) schuld war. Der Browser hat die Seite einfach 2x geladen (Grund: bisher unbekannt – vielleicht lädt ja irgendeine Extension die Seite im Hintergrund noch mal).
Bei mir war es auch so, dass nicht jedes mal doppelt geladen wurde, sondern nur jedes 2. Mal (glaub ich).
Ich konnte es gut testen, ob es daran lag, indem ich vergleichsweise den Internet-Explorer verwendete, um die Seite zu laden. Dort wurde das INSERT nur 1x gemacht.

Ich hoffe, es hilft.

Ajo

Hallo,

Trotzdem verstehe ich nicht, warum, mein PHP Script 2 Einträge
erstellt, jetzt nur noch einen, aber trotzdem seltsam!

Das liegt nur Sekundär an deinem Code. Der Browser macht einfach 2 Anfragen, wobei du von der 2. Anfrage nichts mitbekommst, weil der Browser die gar nicht anzeigt. Beispielsweise lädt z.B. Firefox mit Fasterfox Erweiterung Seiten schon vorab in den Cache. Wenn du die Daten nur per URL übergibst, kann so etwas eben passieren, bei POST macht das soweit ich weiss kein Browser automatisch.
POST-Formulare kann man ggfs. auch per CSS umgestalten, so das diese wie ein Link aussehen. Um sicher zu gehen, dann nach dem Eintragen die Bestätigungsseite per Redirect (Header(„Location:…“)) getrennt angzeigen lassen, um solches doppelte Laden zu vermeiden.

Oder eben deine Lösung, eine eindeutige ID ins Formular und in die Session, und die Daten nur annehmen, wenn die gesendete ID gleich der ID in der Session ist. Die ID natürlich nach dem ersten Laden aus der Session löschen. Das verhindert leider aber nicht die „versehentliche“ Ausführung des Requests, wenn der Browser alle Links vorlädt.

Alex