/ 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
Problem med insert og addslashes
Fra : Bo Rattenbrog


Dato : 04-01-03 13:43

Jeg vil indsætte firma Tim's i mySQL via

$company = "Tim's";
$company = addslashes($company);

mysql_query("INSERT INTO
profiles(company)
values('$company')");

men får fejlen:
You have an error in your SQL syntax near 'Tim\'s'

Hvad gør jeg forkert, jeg vil gerne have at Company kan indeholde både ' "
og flere andre specielle tegn, uden der går 'ged' i det.

Jeg skal måske også lige nævne, at dataerne skal senere kunne redigeres via
en form.

Mvh
Bo



 
 
Jonas Voss (04-01-2003)
Kommentar
Fra : Jonas Voss


Dato : 04-01-03 14:42

In dk.edb.internet.webdesign.serverside.php, Bo Rattenbrog wrote:

> $company = "Tim's";
> $company = addslashes($company);
>
> mysql_query("INSERT INTO
> profiles(company)
> values('$company')");
>
> men får fejlen:
> You have an error in your SQL syntax near 'Tim\'s'

Jeg er ikke sikker, men prøv med:

mysql_query("INSERT INTO profiles (company) VALUES ('".$company."')");

i stedet.

> Jeg skal måske også lige nævne, at dataerne skal senere kunne redigeres via
> en form.

Så skal du blot huske at bruge stripslashes() på dit udtræk af
databasen.

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

"Bistromathics,' he said, 'the most powerful computational force
known to parascience."

Mads Lie Jensen (04-01-2003)
Kommentar
Fra : Mads Lie Jensen


Dato : 04-01-03 16:21

On Sat, 4 Jan 2003 14:42:21 +0100, Jonas Voss <voss@dev.null.dk> wrote:

>> Jeg skal måske også lige nævne, at dataerne skal senere kunne redigeres via
>> en form.
>
>Så skal du blot huske at bruge stripslashes() på dit udtræk af
>databasen.

Der var den igen. Hvad er det for en uvane?

addslashes escaper tegn som f.eks ' så mysql-parseren ved at det ikke
betyder at strengen ender her. Den indsætter ikke escape-tegnet (\) i
databasen.

Så når man bruger addslashes på en variabel inden den indsættes i mysql,
så skal man _ikke_ køre stripslashes når den skal ud igen.

(Hvis man bruger addslashes 2 gange på en variabel inden den indsættes,
så skal man, fordi så bliver alle escape-tegnene (\) også escape't. Og
alle tegn som følger et escape-tegn, bliver sat ind i databasen)

Hvis du virkelig behøver køre stripslashes når du henter noget ud af din
database, så er det enten fordi du fejlagtigt kører addslashes() 2 gange
på en værdi inden den ryger i database, eller, mere tænkeligt, fordi du
har magic_quotes_gpc slået til, som netop automagisk escape'r værdier
inden de sendes til dit php-script.

Når det så er sagt, så gør det normalt ingen skade at køre en
stripslashes() inden man viser værdien. Men det kan nemt gøre det!


--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Lær af andres fejl
- du lever alligevel ikke længe nok til selv at prøve dem alle.

Jonas Voss (06-01-2003)
Kommentar
Fra : Jonas Voss


Dato : 06-01-03 16:44

In dk.edb.internet.webdesign.serverside.php, Mads Lie Jensen wrote:

> On Sat, 4 Jan 2003 14:42:21 +0100, Jonas Voss <voss@dev.null.dk> wrote:
>
>>Så skal du blot huske at bruge stripslashes() på dit udtræk af
>>databasen.
>
> Der var den igen. Hvad er det for en uvane?

Pardon.

> addslashes escaper tegn som f.eks ' så mysql-parseren ved at det ikke
> betyder at strengen ender her. Den indsætter ikke escape-tegnet (\) i
> databasen.

Tak, det vidste jeg ikke. Jeg var sikker på at den indsatte slashet
også.

> Så når man bruger addslashes på en variabel inden den indsættes i mysql,
> så skal man _ikke_ køre stripslashes når den skal ud igen.

OK.

[...]

> Hvis du virkelig behøver køre stripslashes når du henter noget ud af din
> database, så er det enten fordi du fejlagtigt kører addslashes() 2 gange
> på en værdi inden den ryger i database, eller, mere tænkeligt, fordi du
> har magic_quotes_gpc slået til, som netop automagisk escape'r værdier
> inden de sendes til dit php-script.

Det var netop sagen i mit tilfælde, og forklarer hvorfor jeg blev
"nødt" til at køre stripslashes når jeg skulle hive værdien ud igen.

> Når det så er sagt, så gør det normalt ingen skade at køre en
> stripslashes() inden man viser værdien. Men det kan nemt gøre det!

Takker mange gange for gennemgangen, nu der er vist lige et par scripts
jeg skal have revideret (:

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

"If there's anything more important than my ego,
I want it caught and shot now."

Mads Lie Jensen (06-01-2003)
Kommentar
Fra : Mads Lie Jensen


Dato : 06-01-03 20:03

On Mon, 6 Jan 2003 16:43:33 +0100, Jonas Voss <voss@null.dk> wrote:

>> Hvis du virkelig behøver køre stripslashes når du henter noget ud af din
>> database, så er det enten fordi du fejlagtigt kører addslashes() 2 gange
>> på en værdi inden den ryger i database, eller, mere tænkeligt, fordi du
>> har magic_quotes_gpc slået til, som netop automagisk escape'r værdier
>> inden de sendes til dit php-script.
>
>Det var netop sagen i mit tilfælde, og forklarer hvorfor jeg blev
>"nødt" til at køre stripslashes når jeg skulle hive værdien ud igen.

Jeg har lige opgraderet til php 4.3.0, og det lader faktisk til at den
har "set_magic_quotes_gpc = on" som standard. Det har de tidligere
php-versioner nok også haft.

>> Når det så er sagt, så gør det normalt ingen skade at køre en
>> stripslashes() inden man viser værdien. Men det kan nemt gøre det!
>
>Takker mange gange for gennemgangen, nu der er vist lige et par scripts
>jeg skal have revideret (:

God fornøjelse

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Lær af andres fejl
- du lever alligevel ikke længe nok til selv at prøve dem alle.

Tinky Winky (06-01-2003)
Kommentar
Fra : Tinky Winky


Dato : 06-01-03 22:23

> på en værdi inden den ryger i database, eller, mere tænkeligt, fordi du
> har magic_quotes_gpc slået til, som netop automagisk escape'r værdier
> inden de sendes til dit php-script.

Ang. magic_quotes_gpc. Er der nogen der ved hvordan man kan "kode uden om
dem" ? Eller er den eneste løsning at slå det fra i php.ini?

Hvis jeg ikke vil bruge .htaccess eller php.ini til at slå det fra, er der
så ikke noget med at man kan gøre det direkte i sit script ala
set_php_value(magic_quotes_gpc, 'no');?

> http://www.gartneriet.dk

Er det ikke også en uvane at indsætte dele af en URI ind i en SQL sætning?



Ulrik Nielsen (06-01-2003)
Kommentar
Fra : Ulrik Nielsen


Dato : 06-01-03 23:44

Tinky Winky wrote:
> Hvis jeg ikke vil bruge .htaccess eller php.ini til at slå det fra, er der
> så ikke noget med at man kan gøre det direkte i sit script ala
> set_php_value(magic_quotes_gpc, 'no');?
>

ja den hedder ini_set('magic_quotes_gpc',0)


--
mvh
Ulrik Nielsen
- there is no spoon...


Tinky Winky (07-01-2003)
Kommentar
Fra : Tinky Winky


Dato : 07-01-03 11:36

> > Hvis jeg ikke vil bruge .htaccess eller php.ini til at slå det fra, er
der
> > så ikke noget med at man kan gøre det direkte i sit script ala
> > set_php_value(magic_quotes_gpc, 'no');?
> >
>
> ja den hedder ini_set('magic_quotes_gpc',0)

Tak. Eneste problem er at når PHP først begynder at gå igennem ens kode, er
det for sent at ændre på bl.a. magic_quotes_gpc.

http://www.php.net/manual/en/function.ini-set.php

Evt. kunne man lave noget ala:
if(ini_get('magic_quotes_gpc')=='') {
koer_stripslashes($_POST);
koer_stripslashes($_GET);
koer_stripslashes($_COOKIE);
}

koer_stripslashes kører stripslashes på alle variable i $_POST osv. Hvad
siger I, er der noget galt med den løsning?



Ulrik Nielsen (07-01-2003)
Kommentar
Fra : Ulrik Nielsen


Dato : 07-01-03 13:36

Tinky Winky wrote:
> Evt. kunne man lave noget ala:
> if(ini_get('magic_quotes_gpc')=='') {
> koer_stripslashes($_POST);
> koer_stripslashes($_GET);
> koer_stripslashes($_COOKIE);
> }
>
> koer_stripslashes kører stripslashes på alle variable i $_POST osv. Hvad
> siger I, er der noget galt med den løsning?
>

Jeg ville lave en kopi af de $_REQUEST variabler du skal bruge og køre
en stripslashes på dem..


--
mvh
Ulrik Nielsen
- there is no spoon...


Bo Rattenbrog (06-01-2003)
Kommentar
Fra : Bo Rattenbrog


Dato : 06-01-03 00:14

Takker - lige det der skulle til

/Bo



Søg
Reklame
Statistik
Spørgsmål : 177502
Tips : 31968
Nyheder : 719565
Indlæg : 6408538
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste