Mærkeligste fejl i mysql_query ...

Tags:    php mysql

Det der skal ske er at man trykker på en knap og så er der et felt i databasen som skal stige med 1.

Det prøver jeg sådan:
Fold kodeboks ind/udKode 


Det mærkelige er bare at wins stiger med 2 hver gang i databasen. Hvis jeg flytter $updatestats ud af if'en tæller den rigtigt med 1 hver gang man opdaterer siden. Den tæller også rigtigt når jeg prøver at gøre det direkte inde fra phpMyAdmin siden.

Hvorfor får denne knap den til at tælle 2 i stedet for 1? Jeg har da prøvet flere gange at lave det samme nummer, hvor det også bliver udført af en knap. Hvad kan være galt?



10 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 7 karma
Sorter efter stemmer Sorter efter dato
Du lægger en streng til et tal... Det er en type konflikt og vil derfor give et uventet resultat.



Hvad mener du med "flytter ud af if'en"?


Eneste fejl jeg lige kan se er at du har skrevet '1' i stedet for bare 1. Er ikke helt sikker på, om mysql gør noget underligt når du specifict siger noget er en streng men bruger det som et tal.

Ellers vil jeg antage at du faktisk har en query stående et andet det der gør det samme og at det er derfor du får 2.



prøv wins = wins++
ved ikke om det virker, men prøv :D



Undskyld for bump, men er enig med Valdemar. Prøv wins++
Er heller ikke sikker på at det virker, men prøv alligevel! ;)



Fold kodeboks ind/udPHP kode 


Prøv den kode :D





... Hvis jeg flytter $updatestats ud af if'en tæller den rigtigt med 1 hver gang man opdaterer siden...


Den kode du paster her ser rigtig ud, måske problemet er et andet sted end du leder?

Vil du poster lidt mere af den omgivende kode?

--- Så lige at det er en gammel tråd..



Indlæg senest redigeret d. 23.05.2011 19:33 af Bruger #955
Man kan altid omkranse værdier (strenge såvel som integers) med singlequotes. Det er unødvendigt i ovenstående tilfælde, men det er normalt en god idé. Især når det er data fra brugeren.

wins++ vil ikke virke, for det er ikke en lovlig SQL construct.

Prøv at logge alle dine database kald, jeg vil næsten skyde på, at du får den udført to gange.



Man kan altid omkranse værdier (strenge såvel som integers) med singlequotes. Det er unødvendigt i ovenstående tilfælde, men det er normalt en god idé. Især når det er data fra brugeren.


At bruge quotes, single som double, typecaster altid dine værdier til strenge - MySQL er normalt logisk nok til at kunne fortolke en streng udelukkende bestående af numeriske tegn som værende en numerisk værdi. Men undlader man at bruge citationstegn omkring sine numeriske værdier vil MySQL vanligvis også forstå værdiens type som numerisk.

...

Til tidligere nævnte problem ville jeg nok udskrive en tekst til browseren for at lure om koden bliver afviklet to gange.

Problemet kan også opstå af at du aflæser databasen før du opdatere den - hvorved at wins+1 først vil være vist ved næste POST request. Løsning: byt rundt og opdater databasen før du aflæser den.




Hent evt. værdi'en ud i array, og læg et enkel til, og så update databasen. nok ikke den mest professionelle måde, men har erfaring med det virker :)

--



MySQL (og alle andre hvis de overholder kravene) kan se, at en streng er nummerisk hvis den bruges i en matematisk operation:

Fold kodeboks ind/udKode 




t