/ 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
Problemer med citationstegn "
Fra : Jesper Hansen


Dato : 16-07-03 00:26

Hejsa.

Jeg har en formular hvor der bla. kan indsættes et navn i en Mysql db.
Men hvis man indtaster fx. Anders "gammel " And - går der møg i
det når det skal hentes ud igen, så mangler alt det der står efter det
første ". Kan det løses ?

Med venlig hilsen
Jesper Hansen

 
 
Jette (16-07-2003)
Kommentar
Fra : Jette


Dato : 16-07-03 07:07

"Jesper Hansen" skrev:
> Jeg har en formular hvor der bla. kan indsættes et navn i en Mysql db.
> Men hvis man indtaster fx. Anders "gammel " And - går der møg i
> det når det skal hentes ud igen, så mangler alt det der står efter det
> første ". Kan det løses ?

$name = htmlentities($name);
http://dk2.php.net/manual/en/function.htmlentities.php


Mvh. Jette

--
***** LEJLIGHED TIL SALG I STORKØBENHAVN *****
3 vær. med have, centralt i 2860 Søborg
Se http://www.omnix.dk/lejlighed



Espen Askeladd (16-07-2003)
Kommentar
Fra : Espen Askeladd


Dato : 16-07-03 08:59

> $name = htmlentities($name);
> http://dk2.php.net/manual/en/function.htmlentities.php
>
>
> Mvh. Jette

Kanskje addslashes ville vært det beste her?



Christian Knudsen (25-07-2003)
Kommentar
Fra : Christian Knudsen


Dato : 25-07-03 09:11


"Jesper Hansen" <sebulba_@mailme.dk> skrev i en meddelelse
news:c439hv4ioeahr3r2da887ge7m8nc0bgr6h@4ax.com...
> Hejsa.
>
> Jeg har en formular hvor der bla. kan indsættes et navn i en Mysql db.
> Men hvis man indtaster fx. Anders "gammel " And - går der møg i
> det når det skal hentes ud igen, så mangler alt det der står efter det
> første ". Kan det løses ?
>
> Med venlig hilsen
> Jesper Hansen

Brug funktionen addslashes($str) når du indsætter det i db'en, og
stripslashes($str), når du trækker det ud igen.

http://dk2.php.net/manual/en/function.addslashes.php
http://dk2.php.net/manual/en/function.stripslashes.php

Jeg tror det er den "rigtige" metode.

Mvh.
Christian Knudsen



Peter Brodersen (25-07-2003)
Kommentar
Fra : Peter Brodersen


Dato : 25-07-03 09:18

On Fri, 25 Jul 2003 10:10:50 +0200, "Christian Knudsen" <csk@diggy.dk>
wrote:

>Brug funktionen addslashes($str) når du indsætter det i db'en, og
>stripslashes($str), når du trækker det ud igen.

Nej, man skal (stadigvæk :) ikke bruge stripslashes, når man hiver
data ud af databasen igen. Stripslashes bruges kun til at den aktuelle
SQL-INSERT-query ikke går i stykker - ikke til at den data, der ligger
i databasen, skal være "kodet" på en bestemt måde.

--
- Peter Brodersen

Mathias Vestergaard (25-07-2003)
Kommentar
Fra : Mathias Vestergaard


Dato : 25-07-03 12:56

"Peter Brodersen" <usenet@ter.dk> skrev i en meddelelse
news:bfqp3j$n15$1@dknews.tiscali.dk...
> On Fri, 25 Jul 2003 10:10:50 +0200, "Christian Knudsen" <csk@diggy.dk>
> wrote:
>
> >Brug funktionen addslashes($str) når du indsætter det i db'en, og
> >stripslashes($str), når du trækker det ud igen.
>
> Nej, man skal (stadigvæk :) ikke bruge stripslashes, når man hiver
> data ud af databasen igen. Stripslashes bruges kun til at den aktuelle
> SQL-INSERT-query ikke går i stykker - ikke til at den data, der ligger
> i databasen, skal være "kodet" på en bestemt måde.
>
> --
> - Peter Brodersen

Stripslashes bruges til at fjerne slashes, derfor skal den da ikke bruges
til insert query'en da det netop vil foresage de fejl som addslashes
forebygger.
addslashes() bruges til at adde \ foran " og dermed bruges den til insert
query og stripslashes fjerner \ foran " og dermed bruges den til at hente
dataen ud igen.

-Mathias



Peter Brodersen (25-07-2003)
Kommentar
Fra : Peter Brodersen


Dato : 25-07-03 16:57

On Fri, 25 Jul 2003 13:55:42 +0200, "Mathias Vestergaard"
<mathias@team-dominor.com> wrote:

>addslashes() bruges til at adde \ foran " og dermed bruges den til insert
>query og stripslashes fjerner \ foran " og dermed bruges den til at hente
>dataen ud igen.

Hold nu op :) Der er ikke \ foran dine data, NÅR de først er blevet
indsat i databasen.

Det er tillige let at afprøve. Lav en tabel ved navn "tabel", med ét
felt, der hedder "navn", og kør følgende undervejs:

<?php
mysql_query("DELETE FROM tabel");
mysql_query("INSERT INTO tabel (navn) VALUES ('Peter \'PB\'
Brodersen')");
$result = mysql_query("SELECT navn FROM tabel");
print mysql_result($result,0);
?>

Jeg får følgende output:
Peter 'PB' Brodersen
og når jeg kigger i tabellen med min mysql-klient, er der heller ikke
noget at se:

mysql> SELECT navn FROM tabel;
+----------------------+
| navn |
+----------------------+
| Peter 'PB' Brodersen |
+----------------------+
1 row in set (0.00 sec)

... og det samme kan ses med fx phpmyadmin.

Der er ikke noget mærkeligt i det. Eneste tilfælde, hvor outputtet vil
være fx
Peter \'PB\' Brodersen
er hvis man har magic_quotes_runtime aktiveret (hvilket ikke er
default) - det er dog udelukkende en PHP-mulighed her køres addslashes
blot, når man trækker dataen ud. Du kan fx prøve at tilføje:
set_magic_quotes_runtime(1);
i starten af ovenstående script.


Det, der til gengæld kan skabe forvirring, er for det første den måske
appellerende tankegang med "addslashes, når man indsætter -
stripslashes, når man hiver data ud" - det lader til at give mening,
men dog uden at man har tænkt processen igennem.

Det andet tilfælde kan være hvor magic_quotes_gpc er aktiveret
(default, ikke at forveksle med magic_quotes_runtime), og en bruger fx
sender dataen: Peter 'PB' Brodersen
Her vil indholdet af variablen - lad os kalde den for $navn - allerede
være lavet om til Peter \'PB\' Brodersen når scriptet starter, dvs.
addslashes er kørt.

Det forværres så måske af at man kaster addslashes på (igen), når
dataen indsættes i mysql-databasen, fx:

mysql_query("INSERT INTO tabel (navn) VALUES
('".addslashes($navn)."')");

Bemærk, hvad der sker - addslashes køres igen, og den endelige query
kommer til at se ud som følger:

INSERT INTO tabel (navn) VALUES ('Peter \\\'PB\\\' Brodersen')

På den måde kommer der rigtigt nok til at være for mange slashes i,
når man sætter dataen ind i databasen. Men så bør man hellere rette
den fejl, i stedet for bare at kaste stripslashes efter dataen, når
den hives ud af databasen igen. Andre applikationer ku' fx også tænkes
at ville bruge dataen i databasen.


Der er desværre masser af misforståelser, og jeg har givet lignende
eksempler på funktionaliteten i fx:
<news:berqq5$q1v$1@dknews.tiscali.dk>

Jeg har også for få dage netop skrevet om hvorfor, forvirringen
opstår. Det skyldes en kombination af PHP's standardopsætning, samt at
folk tvinges til at skulle klipkopiere en query selv.
<news:bfhnpv$a0j$1@dknews.tiscali.dk>

--
- Peter Brodersen

Mathias Vestergaard (26-07-2003)
Kommentar
Fra : Mathias Vestergaard


Dato : 26-07-03 14:08

Prøv den test med " istedet for ', så er jeg ret sikker på at du får
problemer.


"Peter Brodersen" <usenet@ter.dk> skrev i en meddelelse
news:bfrjvv$36e$1@dknews.tiscali.dk...
> On Fri, 25 Jul 2003 13:55:42 +0200, "Mathias Vestergaard"
> <mathias@team-dominor.com> wrote:
>
> >addslashes() bruges til at adde \ foran " og dermed bruges den til insert
> >query og stripslashes fjerner \ foran " og dermed bruges den til at hente
> >dataen ud igen.
>
> Hold nu op :) Der er ikke \ foran dine data, NÅR de først er blevet
> indsat i databasen.
>
> Det er tillige let at afprøve. Lav en tabel ved navn "tabel", med ét
> felt, der hedder "navn", og kør følgende undervejs:
>
> <?php
> mysql_query("DELETE FROM tabel");
> mysql_query("INSERT INTO tabel (navn) VALUES ('Peter \'PB\'
> Brodersen')");
> $result = mysql_query("SELECT navn FROM tabel");
> print mysql_result($result,0);
> ?>
>
> Jeg får følgende output:
> Peter 'PB' Brodersen
> og når jeg kigger i tabellen med min mysql-klient, er der heller ikke
> noget at se:
>
> mysql> SELECT navn FROM tabel;
> +----------------------+
> | navn |
> +----------------------+
> | Peter 'PB' Brodersen |
> +----------------------+
> 1 row in set (0.00 sec)
>
> .. og det samme kan ses med fx phpmyadmin.
>
> Der er ikke noget mærkeligt i det. Eneste tilfælde, hvor outputtet vil
> være fx
> Peter \'PB\' Brodersen
> er hvis man har magic_quotes_runtime aktiveret (hvilket ikke er
> default) - det er dog udelukkende en PHP-mulighed her køres addslashes
> blot, når man trækker dataen ud. Du kan fx prøve at tilføje:
> set_magic_quotes_runtime(1);
> i starten af ovenstående script.
>
>
> Det, der til gengæld kan skabe forvirring, er for det første den måske
> appellerende tankegang med "addslashes, når man indsætter -
> stripslashes, når man hiver data ud" - det lader til at give mening,
> men dog uden at man har tænkt processen igennem.
>
> Det andet tilfælde kan være hvor magic_quotes_gpc er aktiveret
> (default, ikke at forveksle med magic_quotes_runtime), og en bruger fx
> sender dataen: Peter 'PB' Brodersen
> Her vil indholdet af variablen - lad os kalde den for $navn - allerede
> være lavet om til Peter \'PB\' Brodersen når scriptet starter, dvs.
> addslashes er kørt.
>
> Det forværres så måske af at man kaster addslashes på (igen), når
> dataen indsættes i mysql-databasen, fx:
>
> mysql_query("INSERT INTO tabel (navn) VALUES
> ('".addslashes($navn)."')");
>
> Bemærk, hvad der sker - addslashes køres igen, og den endelige query
> kommer til at se ud som følger:
>
> INSERT INTO tabel (navn) VALUES ('Peter \\\'PB\\\' Brodersen')
>
> På den måde kommer der rigtigt nok til at være for mange slashes i,
> når man sætter dataen ind i databasen. Men så bør man hellere rette
> den fejl, i stedet for bare at kaste stripslashes efter dataen, når
> den hives ud af databasen igen. Andre applikationer ku' fx også tænkes
> at ville bruge dataen i databasen.
>
>
> Der er desværre masser af misforståelser, og jeg har givet lignende
> eksempler på funktionaliteten i fx:
> <news:berqq5$q1v$1@dknews.tiscali.dk>
>
> Jeg har også for få dage netop skrevet om hvorfor, forvirringen
> opstår. Det skyldes en kombination af PHP's standardopsætning, samt at
> folk tvinges til at skulle klipkopiere en query selv.
> <news:bfhnpv$a0j$1@dknews.tiscali.dk>
>
> --
> - Peter Brodersen



Mathias Vestergaard (26-07-2003)
Kommentar
Fra : Mathias Vestergaard


Dato : 26-07-03 14:18

Hmm nu har jeg testet det lidt igennem, og har faktisk ikke stødt på de
problemer jeg tidligere har haft, jeg ved ikke hvad jeg har gjort galt
tidligere. Er der blevet rettet et eller andet efter den nye mysql version
kom eller hvad?

Jeg mener nemlig de problemer jeg har haft skete tilbage i 3.x


"Mathias Vestergaard" <mathias@team-dominor.com> skrev i en meddelelse
news:3f227d1c$0$13179$edfadb0f@dread15.news.tele.dk...
> Prøv den test med " istedet for ', så er jeg ret sikker på at du får
> problemer.
>
>
> "Peter Brodersen" <usenet@ter.dk> skrev i en meddelelse
> news:bfrjvv$36e$1@dknews.tiscali.dk...
> > On Fri, 25 Jul 2003 13:55:42 +0200, "Mathias Vestergaard"
> > <mathias@team-dominor.com> wrote:
> >
> > >addslashes() bruges til at adde \ foran " og dermed bruges den til
insert
> > >query og stripslashes fjerner \ foran " og dermed bruges den til at
hente
> > >dataen ud igen.
> >
> > Hold nu op :) Der er ikke \ foran dine data, NÅR de først er blevet
> > indsat i databasen.
> >
> > Det er tillige let at afprøve. Lav en tabel ved navn "tabel", med ét
> > felt, der hedder "navn", og kør følgende undervejs:
> >
> > <?php
> > mysql_query("DELETE FROM tabel");
> > mysql_query("INSERT INTO tabel (navn) VALUES ('Peter \'PB\'
> > Brodersen')");
> > $result = mysql_query("SELECT navn FROM tabel");
> > print mysql_result($result,0);
> > ?>
> >
> > Jeg får følgende output:
> > Peter 'PB' Brodersen
> > og når jeg kigger i tabellen med min mysql-klient, er der heller ikke
> > noget at se:
> >
> > mysql> SELECT navn FROM tabel;
> > +----------------------+
> > | navn |
> > +----------------------+
> > | Peter 'PB' Brodersen |
> > +----------------------+
> > 1 row in set (0.00 sec)
> >
> > .. og det samme kan ses med fx phpmyadmin.
> >
> > Der er ikke noget mærkeligt i det. Eneste tilfælde, hvor outputtet vil
> > være fx
> > Peter \'PB\' Brodersen
> > er hvis man har magic_quotes_runtime aktiveret (hvilket ikke er
> > default) - det er dog udelukkende en PHP-mulighed her køres addslashes
> > blot, når man trækker dataen ud. Du kan fx prøve at tilføje:
> > set_magic_quotes_runtime(1);
> > i starten af ovenstående script.
> >
> >
> > Det, der til gengæld kan skabe forvirring, er for det første den måske
> > appellerende tankegang med "addslashes, når man indsætter -
> > stripslashes, når man hiver data ud" - det lader til at give mening,
> > men dog uden at man har tænkt processen igennem.
> >
> > Det andet tilfælde kan være hvor magic_quotes_gpc er aktiveret
> > (default, ikke at forveksle med magic_quotes_runtime), og en bruger fx
> > sender dataen: Peter 'PB' Brodersen
> > Her vil indholdet af variablen - lad os kalde den for $navn - allerede
> > være lavet om til Peter \'PB\' Brodersen når scriptet starter, dvs.
> > addslashes er kørt.
> >
> > Det forværres så måske af at man kaster addslashes på (igen), når
> > dataen indsættes i mysql-databasen, fx:
> >
> > mysql_query("INSERT INTO tabel (navn) VALUES
> > ('".addslashes($navn)."')");
> >
> > Bemærk, hvad der sker - addslashes køres igen, og den endelige query
> > kommer til at se ud som følger:
> >
> > INSERT INTO tabel (navn) VALUES ('Peter \\\'PB\\\' Brodersen')
> >
> > På den måde kommer der rigtigt nok til at være for mange slashes i,
> > når man sætter dataen ind i databasen. Men så bør man hellere rette
> > den fejl, i stedet for bare at kaste stripslashes efter dataen, når
> > den hives ud af databasen igen. Andre applikationer ku' fx også tænkes
> > at ville bruge dataen i databasen.
> >
> >
> > Der er desværre masser af misforståelser, og jeg har givet lignende
> > eksempler på funktionaliteten i fx:
> > <news:berqq5$q1v$1@dknews.tiscali.dk>
> >
> > Jeg har også for få dage netop skrevet om hvorfor, forvirringen
> > opstår. Det skyldes en kombination af PHP's standardopsætning, samt at
> > folk tvinges til at skulle klipkopiere en query selv.
> > <news:bfhnpv$a0j$1@dknews.tiscali.dk>
> >
> > --
> > - Peter Brodersen
>
>



Mads Lie Jensen (25-07-2003)
Kommentar
Fra : Mads Lie Jensen


Dato : 25-07-03 19:22

On Fri, 25 Jul 2003 10:18:18 +0200, Peter Brodersen <usenet@ter.dk>
wrote:

>data ud af databasen igen. Stripslashes bruges kun til at den aktuelle
>SQL-INSERT-query ikke går i stykker - ikke til at den data, der ligger
>i databasen, skal være "kodet" på en bestemt måde.

Du mener vel 'addslashes' i stedet for 'stripslashes' i ovenstående,
ikke?

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk

Jesper Hansen (25-07-2003)
Kommentar
Fra : Jesper Hansen


Dato : 25-07-03 19:56

On Fri, 25 Jul 2003 20:22:06 +0200, Mads Lie Jensen
<mads@gartneriet.dk> wrote:

Tak for jeres svar, men jeg fandt løsningen i tråden:

news:tsdohv077q1gvkimiu4ojt58hlvfb4enu2@4ax.com

Med venlig hilsen
Jesper Hansen

Peter Brodersen (26-07-2003)
Kommentar
Fra : Peter Brodersen


Dato : 26-07-03 00:11

fOn Fri, 25 Jul 2003 20:22:06 +0200, Mads Lie Jensen
<mads@gartneriet.dk> wrote:

>>data ud af databasen igen. Stripslashes bruges kun til at den aktuelle
>>SQL-INSERT-query ikke går i stykker - ikke til at den data, der ligger
>>i databasen, skal være "kodet" på en bestemt måde.
>Du mener vel 'addslashes' i stedet for 'stripslashes' i ovenstående,
>ikke?

Jo, fordømt! Det var nok et ret uheldigt sted, jeg kunne lave en fejl,
når jeg nu har sat mig for at prøve at rydde op i misforståelserne.

En pointe, jeg vist ikke fik nævnt før, er at folk sikkert på baggrund
af vilkårligt defekt kode får bedre resultater af at køre stripslashes
en gang for meget (når noget skal outputtes på skærmen) end en gang
for lidt, så at sige. Peter 'PB' Brodersen ser trods alt ens ud,
uanset hvor mange gange, man kører stripslashes på det, så det er
sjældent, at stripslashes gør skade.

Det er dog ingen undskyldning for at forurene sin database. Jeg kan
dog godt se, at hvis man allerede er røget ind i et addslashes-helvede
og eksisterende tabeller med entries med masser af ekstra slashes,
"just in case", så er det svært at begynde at rydde op.

Der er dog ingen grund til at gentage gamle fejl.

--
- Peter Brodersen

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

Månedens bedste
Årets bedste
Sidste års bedste