Avatar billede mibu Nybegynder
30. august 2007 - 14:33 Der er 24 kommentarer og
1 løsning

Fejl ved INSERT INTO.

Hvad er der galt her:

mysql_query('INSERT INTO `medlem` (`id`, `fornavn`, `efternavn`, `pass`, `mail`, `adr`, `post`, `town`, `tlf`) VALUES (\'\', \'\', \"'.$efternavn.'", \"'.$pass.'", \'\', \'\', \'\', \'\', \'\')')or die(mysql_error());

Der kommer intet til db! Og jeg får denne melding:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"test", \"1234", '', '', '', '', '')' at line 1

Men hvis jeg retter den til:

mysql_query('INSERT INTO `medlem` (`id`, `fornavn`, `efternavn`, `pass`, `mail`, `adr`, `post`, `town`, `tlf`) VALUES (\'\', \'\', \'test', \'1234', \'\', \'\', \'\', \'\', \'\')')or die(mysql_error());
           
så kommer noget i db'en. Fejlmeldingen må jo betyde at indtastningen trækkes med over. Jeg har lidt omkring mine $ poster, men det hjælper ikke.
Avatar billede mibu Nybegynder
30. august 2007 - 14:35 #1
> Jeg har rettet lidt omkring--- < :-)
Avatar billede nielle Nybegynder
30. august 2007 - 14:41 #2
Du havde "-tegn rundt om værdien et (faktisk to) af stederne:

mysql_query('INSERT INTO `medlem` (`id`, `fornavn`, `efternavn`, `pass`, `mail`, `adr`, `post`, `town`, `tlf`) VALUES (\'\', \'\', \"'.$efternavn.'", \"'.$pass.'", \'\', \'\', \'\', \'\', \'\')')or die(mysql_error());

rettes til:

mysql_query('INSERT INTO `medlem` (`id`, `fornavn`, `efternavn`, `pass`, `mail`, `adr`, `post`, `town`, `tlf`) VALUES (\'\', \'\', \'' . $efternavn . '\', \'' . $pass . '\', \'\', \'\', \'\', \'\', \'\')') or die(mysql_error());
Avatar billede olebole Juniormester
30. august 2007 - 14:42 #3
<ole>

mysql_query("INSERT INTO `medlem` (`id`, `fornavn`, `efternavn`, `pass`, `mail`, `adr`, `post`, `town`, `tlf`) VALUES ('', '', '".$efternavn."', '".$pass."', '', '', '', '', '')") or die(mysql_error());

/mvh
</bole>
Avatar billede nielle Nybegynder
30. august 2007 - 14:43 #4
Men det ville godt nok være mere læseligt hvis du skrev det på denne måde:

mysql_query("INSERT INTO medlem (id, fornavn, efternavn, pass, mail, adr, post, town, tlf) VALUES ('', '', '$efternavn', '$pass', '', '', '', '', '')") or die(mysql_error());
Avatar billede olebole Juniormester
30. august 2007 - 14:44 #5
Ja, hvis man bruger dobbelte gåseøjne om selv query'en, bliver det hele lidt lettere overskueligt  ;o)
Avatar billede mibu Nybegynder
30. august 2007 - 14:45 #6
mysql_query("INSERT INTO medlem (id, efternavn, pass) VALUES ('', '$efternavn', '$pass')") or die(mysql_error());

Og jeg fandt selv en tredie løsning!

Men smid lidt svar begge to - Så har jeg lidt at lege med! Og tak for hjælpen.
Avatar billede mibu Nybegynder
30. august 2007 - 14:47 #7
Øh! nummer 3 var jeg vist ikke ene om :-)
Avatar billede nielle Nybegynder
30. august 2007 - 14:49 #8
Det er nu ikke helt det samme resultat du får ud af det - nu får du NULL værdier i de felter du før fik tomme strenge i. Det har ikke nødvendigvis nogen praktisk betydning for dig, men det af hænger af hvordan resten af din kode ser ud.

I øvrigt burde det vist være:

mysql_query("INSERT INTO medlem (efternavn, pass) VALUES ('$efternavn', '$pass')") or die(mysql_error());
Avatar billede olebole Juniormester
30. august 2007 - 14:53 #9
- man får ikke nødvendigvis null-værdier - men default-værdier (som dog godt kan være null). Det kan både være en fordel og en bagdel at smide tomme strenge i felterne - og det kan være uden betydning i din situation ... men forskellen er betydelig  ;o)
Avatar billede mibu Nybegynder
30. august 2007 - 14:54 #10
Ok! >> Nielle - Jeg ser forskellen! et skal straks blive rettet :-)

iøvrigt har jeg et lille tillægsspørgsmål. Min pass i db er sat til unik, og jeg får så dette svar, når jeg forsøger at oprette et pass der findes i forvejen:

Duplicate entry '2212' for key 2

Kan man selv definerer den tekst?
Avatar billede nielle Nybegynder
30. august 2007 - 14:55 #11
Nej, men du skal fange og åndtere den fejl med din

... or die(mysql_error()));
Avatar billede mibu Nybegynder
30. august 2007 - 15:03 #12
HOV HOV! Det er vel ikke en fejl, Jeg har selv bedt om, at der ikke må oprettes dubletter, ved at gøre feltet UNIK!!!
Avatar billede nielle Nybegynder
30. august 2007 - 15:05 #13
Ja, og så reagere MySQL med at smide en fejlbesked når nogen forsøger at oprette dubletter. :^)
Avatar billede mibu Nybegynder
30. august 2007 - 15:08 #14
Men smid et svar :-) jeg har jo fået løst mit primærer spørgsmål, duplicate meddelsen kan jeg leve med, syns bare det var "blær" hvis jeg f.eks. kunne udspy en meddelse der sagde "BOTNAKKE! - DET PASSWORD ER JO BRUGT!" (måske formuleret lidt pænerer:)
Avatar billede olebole Juniormester
30. august 2007 - 15:16 #15
@mysql_query( ............... );
if (mysql_errno()==2212) {
  print "KÆRE, RARE BOTNAKKE! - DET PASSWORD ER JO BRUGT!";
}

- '@' undertrykker fejlen, som du efterfølgende selv kan fange og reagere på  :)
Avatar billede olebole Juniormester
30. august 2007 - 15:17 #16
- selvom jeg nu synes, jeg plejer at få fejl 1062 ved 'Duplicate entry'  :)
Avatar billede mibu Nybegynder
30. august 2007 - 15:25 #17
2212 er det password jeg testede ved at forsøge at taste det to gange :-)
Avatar billede mibu Nybegynder
30. august 2007 - 15:36 #18
Er det rigtigt forstået sådan her:
@ - foran min query
if (mysql_errno()==$pass)
{
  print "Min tekst!";

???
}
Avatar billede mibu Nybegynder
30. august 2007 - 15:37 #19
Minus ??? :-)
Avatar billede mibu Nybegynder
30. august 2007 - 15:56 #20
Nææ! det var det ikke :-)
Avatar billede nielle Nybegynder
30. august 2007 - 16:58 #21
Hvis du vil lave det på den måde, skel de vel snarere se ud som noget i denne stil:

@ - foran min query
if (mysql_errno() == "Duplicate entry '$pass' for key 2")
{
    print "Min tekst!";
}
Avatar billede nielle Nybegynder
30. august 2007 - 16:58 #22
... og et svar :^)
Avatar billede nielle Nybegynder
30. august 2007 - 18:26 #23
Og så den rigtige funktion:

@ - foran min query
if (mysql_error() == "Duplicate entry '$pass' for key 2")
{
    print "Min tekst!";
}
Avatar billede mibu Nybegynder
30. august 2007 - 18:51 #24
Aha!
Man skal fjerne or die!
Mit resultat blev så:

@ - foran min query
if (mysql_error() == "Duplicate entry '$pass' for key 2")
{
    print "Min tekst!";
}
else
{
  echo" en anden tekst";
}

kanon! Takker!

Jeg laver et nyt spørgsmål om error tekst, og henviser så til dette.
Der ligger 30 point til olebole i det nysprgsmål. OK?
Avatar billede nielle Nybegynder
30. august 2007 - 19:37 #25
Funktionen die("besked") sikre at sin applikation stopper helt og udskriver beskeden.

I det ovennævnte kommer beskeden altså fra mysql_error() men den kan komme alle steder fra. "die" betyder "dø!".
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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