$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 ?
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')";
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";
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.
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.