08. februar 2003 - 00:01Der er
9 kommentarer og 1 løsning
Dobbelt poster i mysql
Hej folkens, jeg har et problem med min mysql database, som gør at den dobbelt poster en del af mine inserts. Det spændende er at det ikke kun foregår når de bliver postet udefra via php, men også når jeg indsætter data via phpMyAdmin 2.3.2. Håber nogen kan hjælpe. Jeg har oprettet tabellen vha denne kommando
CREATE TABLE guestbook2nd ( id mediumint(11) NOT NULL auto_increment, name varchar(20) NOT NULL default '', date datetime NOT NULL default '0000-00-00 00:00', msg text NOT NULL, team varchar(20) NOT NULL default '', email text NOT NULL, www text NOT NULL, ip text NOT NULL, PRIMARY KEY (id), KEY id (id) ) TYPE=MyISAM;
Jeg er ikke helt sikker på om du tænker på DB eller tabellen, men databasen kan jeg ikke komme til da den ligger på min udbyders server, og tabellen har jeg slettet og genoprettet en del gange uden resultat. Jeg har forresten ændret et par linier i ovenstående kommando, da jeg læste et sted at id var et reserveret ord.
idnr mediumint(11) NOT NULL auto_increment, PRIMARY KEY (idnr), KEY id (idnr)
Jeg har cliche.dk, og de skulle gerne bruge mysql til alle deres kunder. De inserts jeg bruger ser sådan ud: Den øverste er hvad phpmyadmin bruger når man vælger insert og giver den nogle data. INSERT INTO `guestbook2nd` ( `idnr` , `name` , `date` , `msg` , `team` , `email` , `www` , `ip` ) VALUES ( '', 'navn', '0000-00-00 00:00:00', 'besked', 'hold', 'mail', 'hp', '1234' );
Den anden er den jeg normalt bruger via mit php program. INSERT INTO guestbook2nd (name, date, msg, ip, team, email, www) VALUES ('$name', DATE_SUB(now(), INTERVAL 2 HOUR) , '$msg', '$ip', '$team', '$email', '$www');
Desuden behøver man ikke at quote selve tabellens navn. Databasen burde bare svare "niksen-biksen" da din forespørgsel indeholder syntaksfejl, men hvem ved...
hmm, men i min php forespørgsel bruger jeg jo netop ikke backticks, og jeg har også lige prøvet at modificere denne så den bruger plinger omkring name, date osv sådan her. INSERT INTO guestbook2nd ('name', 'date', 'msg', 'ip', 'team', 'email', 'www') VALUES ('$name', DATE_SUB(now(), INTERVAL 2 HOUR) , '$msg', '$ip', '$team', '$email', '$www'); men så overfører den slet ikke noget til databasen.
Så denne php forespørgsel: INSERT INTO guestbook2nd (name, date, msg, ip, team, email, www) VALUES ('$name', DATE_SUB(now(), INTERVAL 2 HOUR) , '$msg', '$ip', '$team', '$email', '$www'); må vel være korrekt formuleret.
Jeg har dog lige fundet ud af at jeg kan løse mit problem med et Unique index: ALTER TABLE guestbook2nd ADD UNIQUE mitindex (name, date, msg(100), team, email(30), www(100), ip(20)); Da det så er umuligt for databasen at lave to rækker med ens data, men mener jo stadig det burde kunne lade sig gøre uden. Så hvis darkstar eller andre kender "løsningen" på mit problem uden brug af unique ville det stadig være fedt, men i behøver ikke spilde tid på at finde en løsning hvis i ikke lige har den. Men ellers skal du have mange tak for forslagene darkstar.
Svaret er at din kode kører to INSERT-kommandoer. Du kan måske ikke lige gennemskue hvordan eller hvorfor, men det er det langt mest sandsynlige svar der er tilbage.
Prøv at lave en simpel side i PHP som bare opretter een post i en tabel og viser indholdet af samme tabel.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.