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