Avatar billede googolplex Novice
10. juni 2004 - 21:09 Der er 7 kommentarer og
1 løsning

Escape en hel 'Query string'

Hvis jeg eksempelvis har følgende (magic_quotes_gpc = off):

$fornavn = $_POST['fornavn'];
$efternavn = $_POST['efternavn'];
$fornavn = addslashes($fornavn);
$efternavn = addslashes($efternavn);

$sql = "INSERT INTO personer (fornavn, efternavn) VALUES ('$fornavn', '$efternavn')";

Findes der ikke en måde hvorpå jeg kan escape hele min 'query string' ($sql) på en gang, i stedet for at skulle escape hver enkelt variabel individuelt ?
Avatar billede swaxi Nybegynder
10. juni 2004 - 21:20 #1
nej. det er netop hele pointen med, at escape' variablene.
Avatar billede googolplex Novice
10. juni 2004 - 21:22 #2
Ok, tak :)

Husk at ligge et svar i det andet spørgsmål også !!
Avatar billede sostack Nybegynder
11. juni 2004 - 08:26 #3
Hvis det er for at forkorte scriptet, kunne du jo prøve:
$fornavn = addslashes($_POST['fornavn']);
$efternavn = addslashes($_POST['efternavn']);
$sql = "INSERT INTO personer (fornavn, efternavn) VALUES ('$fornavn', '$efternavn')";

//sostack
Avatar billede googolplex Novice
11. juni 2004 - 12:05 #4
Ja, jeg gør faktisk som du skriver allerede og har også en funktion, der kan escape et helt array ad gangen, jeg penslede bare tingene lidt ud :)

Men tak alligevel :)
Avatar billede swaxi Nybegynder
11. juni 2004 - 14:14 #5
hvis du slår magic_quotes til (det er default i ældre versioner af mysql), så vil dine post og get variable automatisk blive escape'et. på den måde behøver du ikke at escaper variablene inden du sætter dem ind i querien. det er dog en dårlig måde, at gøre det på. det mest korrekte er at foretage escapingen selv, som du gør nu.

du kan chekke om du har magic_quotes til med :
if (get_magic_quotes_gpc()) echo "Magic quotes er slået til";
else echo "Magic quotes er slået fra";
Avatar billede googolplex Novice
11. juni 2004 - 17:47 #6
Jeg har allerede slået magic_quotes fra, det var derfor jeg ville høre om man kunne escape hele 'queryen' :)
Avatar billede swaxi Nybegynder
11. juni 2004 - 19:43 #7
encoding af strings er noget af det, der forvirrer folk mest, så det er ikke underligt, at du går sur i det. men du skal altså escape hver enkelt variabel.

hvis du kigger på hvorfor man escaper string'en i første omgang, vil du nok bedre forstå hvorfor.
normalt er det ikke nødvendigt, at escape' en string. når du laver en SQL-query, der indeholder strings, smider du bare quotes omkring. eks :

UPDATE tbl SET navn="Frederik Secundus"

Dette virker fint. Men forestil dig nu, at din bruger ændrer sit navn til :
Frederik "Stupor Mundi" Secundus

Umiddelbart vil din SQL-query se såddan her ud :

UPDATE tbl SET navn="Frederik "Stupor Mundi" Secundus"

men det fungerer jo ikke. " er en special-karaktér, der instruerer din database om at den ikke skal fortolke det, der står imellem dem. I ovenstående eksempel, vil databasen læse "Frederik " som een string og " Secundus" som en anden. Og Stupor Mundi vil den opfatte som SQL-kode (hvilket vil give dig en syntaks-fejl).

Løsningen er at erstatte " med et andet symbol. Man kunne have valgt, at beslaglægge en mindre brugt karaktér og benytte den, men det ville ikke være en egt. løsning af problemet, da du så bare ville opleve problemet sjældnere. Istedet indfører man en regel om at hvis man skriver \ foran en " så skal quote'en ikke læses som en quote. istedet skal \ ignoreres fra stringen.

håber det hjælper lidt på det.
Avatar billede googolplex Novice
20. juni 2004 - 07:54 #8
Takker :)
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