Avatar billede chadi_a Nybegynder
22. juni 2003 - 23:18 Der er 16 kommentarer og
1 løsning

Mysql error

Hvordan kan jeg få denne kode til at virke?

mysql_query ("INSERT INTO artikel (godkend) VALUES ('yes') where id = $_GET[nr] ") or die(mysql_error());

jeg får hele tiden denne fejl:'
You have an error in your SQL syntax near 'where id = 10 ' at line 1

Håber nogen kan hjælpe
Avatar billede Slettet bruger
22. juni 2003 - 23:19 #1
Det giver ikke mening med en WHERE betingelse, når du vil indsætte en række.

Måske du mener UPDATE istedet for INSERT?
Avatar billede chadi_a Nybegynder
22. juni 2003 - 23:21 #2
Hmm.. jeg tror faktisk du har ret.
Avatar billede chadi_a Nybegynder
22. juni 2003 - 23:21 #3
Hvordan skal den så se ud?
Avatar billede chadi_a Nybegynder
22. juni 2003 - 23:23 #4
mysql_query ("UPDATE artikel set godkend='yes' where id = $_GET[nr] ") or die(mysql_error()); ??
Det virker ihvertfald sådan. Tak for hjælpen
Avatar billede Slettet bruger
22. juni 2003 - 23:23 #5
mysql_query("UPDATE artikel SET godkend = 'yes' WHERE id = '".$_GET['nr']."'") or die(mysql_error());
Avatar billede chadi_a Nybegynder
22. juni 2003 - 23:24 #6
Giver du ikke lige et svar, så får du point'snene
Avatar billede Slettet bruger
22. juni 2003 - 23:25 #7
Ok.
Avatar billede jakoba Nybegynder
22. juni 2003 - 23:26 #8
cmon merkur8 hvornår begyndete du at sætte anførselstegn omkring talværdier ? :)
Avatar billede Slettet bruger
22. juni 2003 - 23:27 #9
Det er da altid en god vane. SQL injections og den slags.
Avatar billede jakoba Nybegynder
22. juni 2003 - 23:28 #10
Det må jeg hellere prøve at forstå. jeg plejer at fraråde det "injections"?
Avatar billede erikjacobsen Ekspert
22. juni 2003 - 23:37 #11
Det er nu ganske fornuftigt. Med '...' + addslashes (direkte eller indirekte)
forhindrer modifikation af SQL-sætningen, også når det er tal.

Men strengt taget bør man validere om det er et tal i PHP, hvis man nu
forventer et tal - har man gjort det, er det ligegyldigt med '...'-erne
Avatar billede Slettet bruger
22. juni 2003 - 23:39 #12
Vi forventer at id er nummerisk og checker iøvrigt intet

En ond mand sætter id til
NULL OR id LIKE %%

Og bliver super_user
SELECT is_super_user FROM foo WHERE id = $_GET['id']

Det kunne han ikke gøre, hvis vi skrev
SELECT is_super_user FROM foo WHERE id = '".$_GET['id']."'

Der er mange andre eksempler.

' ' omkring værdier alene nytter iøvrigt ikke, hvis vi glemmer at escape input.

Men det forhindrer sammen med inputvalidering, og escape af input
sql injections.
Avatar billede Slettet bruger
22. juni 2003 - 23:42 #13
"SQL Injection is a technique which enables an attacker to execute unauthorized SQL commands by taking advantage of unsanitized input opportunities in Web applications building dynamic SQL queries."

Bare en tilfældig definition fra nettet. (De skriver Web applications. Men det kan jo være andre typer applikationer også.)
Avatar billede Slettet bruger
22. juni 2003 - 23:46 #14
erikjacobsens forklaring var vist mere præcis end min egen, men han er jo også uddannet i at formidle den slags :)
Avatar billede jakoba Nybegynder
22. juni 2003 - 23:48 #15
takker
Avatar billede jakoba Nybegynder
22. juni 2003 - 23:52 #16
merkur8 >> ja og nej. det var din forklaring af injections der gjorde behovet for 'noget' klart.
men jeg foretrækker godtnok ej's ide med at checke data først :-)
anførselstengn er en lovlig 'smart' løsning.
Avatar billede Slettet bruger
22. juni 2003 - 23:58 #17
Så har jeg da lige et citat til :)

"Security in depth means protecting a page as best as you can, assumin other protections will fail." (Curphey, Mark et al. (2002))
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