Avatar billede cooksie Nybegynder
08. februar 2003 - 00:01 Der 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;
Avatar billede ahv Nybegynder
08. februar 2003 - 00:06 #1
Det må være en fejl i din opsætning, prøv evt. at geninstallere hele molevitten.
Avatar billede cooksie Nybegynder
08. februar 2003 - 09:15 #2
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)
Avatar billede _darkstar_ Nybegynder
08. februar 2003 - 09:57 #3
Det lyder meget underligt. Prøv at fjerne typen (TYPE=MyISAM) til sidst og se om det hjælper.
Avatar billede cooksie Nybegynder
08. februar 2003 - 10:30 #4
Virker heller ikke :-(
Avatar billede _darkstar_ Nybegynder
08. februar 2003 - 10:36 #5
Er du sikker på at du ikke er den eneste hos udbyderen, som bruger Mysql? Det kunne jo være...

Derudover synes jeg at du skal poste koden som laver dobbelt-INSERTS her (gerne i forkortet form).
Avatar billede cooksie Nybegynder
08. februar 2003 - 10:54 #6
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');

Men de giver som sagt begge to fejlen
Avatar billede _darkstar_ Nybegynder
08. februar 2003 - 11:16 #7
Du bruger backticks på et sted hvor det ikke er standard. Alle backticks skal skiftes ud med almindelige plinger:

INSERT INTO guestbook2nd ( 'idnr' , 'name' , 'date' , 'msg' , 'team' , 'email' , 'www' , 'ip' )
VALUES (
'', 'navn', '0000-00-00 00:00:00', 'besked', 'hold', 'mail', 'hp', '1234'
);

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...
Avatar billede cooksie Nybegynder
08. februar 2003 - 11:37 #8
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.
Avatar billede _darkstar_ Nybegynder
08. februar 2003 - 11:51 #9
ved nærmere eftertankt - dine backticks skulle *ikke* skiftes ud med almindelige plinger. Din SQL ovenfor er korrekt. Altså

INSERT INTO guestbook2nd (name, date, msg, ip, team, email, www) VALUES    ('$name', DATE_SUB(now(), INTERVAL 2 HOUR) , '$msg', '$ip', '$team', '$email', '$www');

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.
Avatar billede cooksie Nybegynder
30. september 2003 - 00:30 #10
Opdagede lige tråden stadig var åben.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Udviklings- og Forenklingsstyrelsen

Data Scientist til stærkt data- og analysekontor

Udviklings- og Forenklingsstyrelsen

Erfarne IT-udviklere til fremtidens skattevæsen

Udviklings- og Forenklingsstyrelsen

Generalist til PMO