On 17 Aug 2009 12:06:06 GMT, Mikkel Jakobsen <spam@bonzai.adsl.dk>
wrote:
>Jeg er ved at indsætte nogle data i en Mysql database.
>Jeg bruger addslashes() inden jeg indsætter.
>
>problemet er at når jeg kigger i databasen er der IKKE
>kommet nogle skråstreger før ".
>
>HTML og PHP
>
><input type="text" name="plante_navn">
>
>$plante_navn = addslashes($_REQUEST['plante_navn']);
>
>$query = mysql_query("INSERT INTO planter (plante_navn)" . "
> VALUES ('$plante_navn')"));
>
>
>Når jeg Echo'er $plante_navn er der skråstreger som der skal
>være, men i databasen er der ikke nogen.
Hvad indeholder $plante_navn inden du kører addslashes() på den, og hvad
indeholder den bagefter?
>Er der noget jeg har overset, eller hvorfor kommer der ikke
>skråstreger i databasen? eller er der noget andet jeg kan gøre
>for større/bedre sikkerhed?
Jeg tror mest på du har overset noget ..... nemlig at addslashes()
bruges til at tilføje en \ før tegnene ", \ og '.
Hvis nu $plante_navn = "Rosa rugosa 'Hansa'", så vil det du giver til
mysql_query blive til:
INSERT INTO planter (plante_navn) VALUES ('Rosa rugosa 'Hansa'')
.... det går ikke - når mysql støder på nr 2 ' (lige inden Hansa'), så
tror den at strengen slutter der - og den vil give en fejl.
For at fortælle mysql at den ikke slutter der, men faktisk er en del af
det du vil have indsat i databasen, har du så brugt addslashes() på
$plante_navn, og derfor bliver din sql til:
INSERT INTO planter (plante_navn) VALUES ('Rosa rugosa \'Hansa\'')
Backslashen fortæller således mysql at det følgende tegn skal indsættes
og ikke afslutte strengen.
MEN, og jeg tror det er her du misforstår det, selve backslashen bliver
ikke sat ind i databasen! Den bliver sådan set kun brugt til at fortælle
at det følgende tegn skal indsættes og ikke tages som afslutning af
strengen.
Derfor skal du heller ikke køre stripslashes() når du hiver værdien ud
fra databasen igen. For så risikerer du bare at få fjernet nogle \ som
egentlig skal være der .......
(Puha, det er egentlig svært at forklare den slags
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet -
http://www.gartneriet.dk/