Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [MySQL]: Bei INSERT doppelte Einträge verhindern- (https://www.delphipraxis.net/36794-%5Bmysql%5D-bei-insert-doppelte-eintraege-verhindern.html)

yankee 26. Dez 2004 00:11


[MySQL]: Bei INSERT doppelte Einträge verhindern-
 
Hallo, ich habe in php mir mein eigenes kleine Forum geschrieben. Wenn der user nun einen neuen Beitrag abschickt, bastelt sich ein PHP-Skript eine recht komplizierte Abfrage zusammen. Ok, dieser MySQL-Befehl ist zwar recht lang, aber eigentlich interessiert nur diese eine Zeile:
INSERT INTO `forum_inhalt` ( `id` , `topicid` , `autor` , `betreff` , `beitrag`, `html` ) VALUES ('',@topicid, '".$user."', '".$betreff."', '".$beitrag."', '".$html."');
In letzter Zeit ist es jedoch häufiger passiert, dass ein Beitrag gleich zwei oder drei mal gepostet wurde. Ich denke mal, dass das durch die Verwendung des "Zurück"-button kommt, wo das Skript dann ein zweites (drittes...) mal aufgerufen wird.

Wie auch immer: Ich will jetzt verhindern, dass dies passiert. Ich meine mal irgendwo eine verdammt einfache Lösung gefunden zu haben: Man musste nur ein einziges Wort in die Abfrage hinzufügen. Weiß zufällig jemand was davon? Selbst wenn ncht, gibt es einen einfacheren Weg, als vorher eine SELECT-Anweisung durchlaufen zu lassen, die prüft, ob der beitrag schon existiert??

supermuckl 26. Dez 2004 00:52

Re: [MySQL]: Bei INSERT doppelte Einträge verhindern-
 
du musst im prinzip nur ein feld deiner wahl auf "unique" stellen (in den feld-einstellungen der db)

dann kann der datensatz nur hinzugefügt werden, wenn er in dem unique feld auch ein uniquen wert drin stehen hat ( also nicht doppelt vor kommt )

ob du nun alle oder nur ein feld nimmst musst du überlegen

phXql 26. Dez 2004 01:01

Re: [MySQL]: Bei INSERT doppelte Einträge verhindern-
 
Zitat:

Zitat von yankee
Hallo, ich habe in php mir mein eigenes kleine Forum geschrieben. Wenn der user nun einen neuen Beitrag abschickt, bastelt sich ein PHP-Skript eine recht komplizierte Abfrage zusammen. Ok, dieser MySQL-Befehl ist zwar recht lang, aber eigentlich interessiert nur diese eine Zeile:
INSERT INTO `forum_inhalt` ( `id` , `topicid` , `autor` , `betreff` , `beitrag`, `html` ) VALUES ('',@topicid, '".$user."', '".$betreff."', '".$beitrag."', '".$html."');
In letzter Zeit ist es jedoch häufiger passiert, dass ein Beitrag gleich zwei oder drei mal gepostet wurde. Ich denke mal, dass das durch die Verwendung des "Zurück"-button kommt, wo das Skript dann ein zweites (drittes...) mal aufgerufen wird.

Wie auch immer: Ich will jetzt verhindern, dass dies passiert. Ich meine mal irgendwo eine verdammt einfache Lösung gefunden zu haben: Man musste nur ein einziges Wort in die Abfrage hinzufügen. Weiß zufällig jemand was davon? Selbst wenn ncht, gibt es einen einfacheren Weg, als vorher eine SELECT-Anweisung durchlaufen zu lassen, die prüft, ob der beitrag schon existiert??

das was du mit dem einzigen wort meinst, geht bei select. heisst distinct, und verhindert, dass doppelte abfragenresultate angezeigt werden.

supermuckl 26. Dez 2004 01:06

Re: [MySQL]: Bei INSERT doppelte Einträge verhindern-
 
ja aber er will doch das die datensätze erst garnicht in die db gelangen und das teil zumüllen

phXql 26. Dez 2004 01:26

Re: [MySQL]: Bei INSERT doppelte Einträge verhindern-
 
Zitat:

Zitat von supermuckl
ja aber er will doch das die datensätze erst garnicht in die db gelangen und das teil zumüllen

sag ich doch ^^. bzw hab ich nich gesagt, aber gemeint. man beachte meinen satz "das was du meinst, geht bei select". das war nich die direkte lösung des problems, sondern der hinweis, dass das wort, was er sucht, nich bei einem insert into existiert ;)

yankee 26. Dez 2004 09:58

Re: [MySQL]: Bei INSERT doppelte Einträge verhindern-
 
Zitat:

Zitat von phXql
das was du mit dem einzigen wort meinst, geht bei select. heisst distinct, und verhindert, dass doppelte abfragenresultate angezeigt werden.

Ja, ich glaube daran dachte ich...
Ich glube aber, was UNIQUE betrifft habe ich insofern ein poblem, dass dann trotzdem der beitragscounter erhöht wird und generell alle anderen SQL-Befehle ausgeführt werden. Aber ich will ja, dass, wenn der Eintrag schon existiert einfach garnichts passiert. Es gibt ja von MySQL so eine schöne IF-Bedingung. Aber ich bekomme das zum verrecken nicht hin. Ich bin jetzt hier Seite einer Stunde am probieren. Aber ich bekomme immer ein Syntax-error. Ich habe mir das so vorgestellt:
IF SELECT COUNT(*) =0 FROM `forum_inhalt` WHERE `autor`='[autor]', `betreff`='[betreff]' AND `beitrag`='[beitrag]' AND `html`='[html]' THEN [meine ganezn SQL, Befehle] else [SELECT 0] (um dem Skit den Feher mitzuteilen...)
END
Weil das nicht funzt, ahbe ich die Abfrage zu Testzwecken jetzt auf dieses Niveau heruntergeziegen:
SET @var :=1;
IF @var=1 THEN SELECT 'hallo' AS ergebnis;
END;
Ich habe da schon so einiges probiert, ht irgendemand von euch eine Ahnung, warum das nicht geht? Die
MySQL-Dokumentation Ist da ja leider nicht gerade genauer (die könnnten ja wenigstens mal ein Beispiel bringen...)

Coffeecoder 9. Mai 2011 09:07

AW: [MySQL]: Bei INSERT doppelte Einträge verhindern-
 
Hallo,

Wie wärs hiermit:

SELECT beitrag
FROM forum_inhalt
WHERE id = '$id'
LIMIT 1

Wenn das Ergebnis in einer String Variable von Delphi '' ist dann ist der Beitrag nicht eingetragen.
Dann kannste dein : Insert into machen.

Mfg Coffeecoder


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz