/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
addslashes() og database
Fra : Mikkel Jakobsen


Dato : 17-08-09 13:06

Hej Ng.

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.

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?

Mikkel



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
kasper (17-08-2009)
Kommentar
Fra : kasper


Dato : 17-08-09 17:39

Mikkel Jakobsen wrote in
dk.edb.internet.webdesign.serverside.php:
> Hej Ng.
>
> 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']);
prøv med
$plante_navn = addslashes($_POST['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.
>
> 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?
>
> Mikkel
>
>
>
> --
> Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
> - Pædagogiske tutorials på dansk
> - Kom godt i gang med koderne
> KLIK HER! => http://www.html.dk/tutorials


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Dan Storm (17-08-2009)
Kommentar
Fra : Dan Storm


Dato : 17-08-09 17:53

Mikkel Jakobsen skrev:
> 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?

Det lyder som om du kører noget forældet udgave af PHP?

Når du siger du 'kigger i databasen' antager jeg at du mener at du
kigger i den gennem phpMyAdmin - phpMyAdmin tager højde for de
backslashes (omvendte skråstreger) som du reelt set har indsat.
Derfor ser du dem ikke.

Grundet en magic quotes indstilling vil de skråstreger komme frem når du
selv henter dem frem.

Funktionen stripslashes() vil fjerne dem for dig efter udtrækket.

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Mikkel Jakobsen (17-08-2009)
Kommentar
Fra : Mikkel Jakobsen


Dato : 17-08-09 20:25

Hey Dan.

>
> Det lyder som om du kører noget forældet udgave af PHP?

Det er version 5.2.4 jeg ved ikke om den er "op to date"

>
> Når du siger du 'kigger i databasen' antager jeg at du mener at du
> kigger i den gennem phpMyAdmin - phpMyAdmin tager højde for de
> backslashes (omvendte skråstreger) som du reelt set har indsat.
> Derfor ser du dem ikke.

Jeg har kontakt til MYsql direkte med en kommando promt.
Jeg har også prøvet via mysqlfront.

> Grundet en magic quotes indstilling vil de skråstreger komme frem når du
> selv henter dem frem.
>
> Funktionen stripslashes() vil fjerne dem for dig efter udtrækket.
>

Madses forklaring gav mening.

$plante_navn fik tilføjet de rigtige slashes som den skulle, men jeg
forventede at jeg kunne se dem i min database.

Mikkel


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Mads Lie Jensen (17-08-2009)
Kommentar
Fra : Mads Lie Jensen


Dato : 17-08-09 19:25

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/

Mikkel Jakobsen (17-08-2009)
Kommentar
Fra : Mikkel Jakobsen


Dato : 17-08-09 20:16

Hey Mads


> 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.
>

Nååååh ja, nu kan jeg se det. Jeg troede at backslashen kom med ind i
databasen, men det gør den selvfølgelig ikke .
Din forklaring giver mening, tak.


> 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
>

Tak for forklaringen....

Mikkel

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177449
Tips : 31962
Nyheder : 719565
Indlæg : 6408125
Brugere : 218879

Månedens bedste
Årets bedste
Sidste års bedste