Mailinglist Archive: opensuse-de (5177 mails)
| < Previous | Next > |
Re: Verschachtelungen von ' und "
- From: Adalbert Michelic <adalbert+list@xxxxxxxx>
- Date: Thu, 26 Jun 2003 20:50:31 +0200
- Message-id: <20030626185031.GK27187@xxxxxxxxxxxxx>
* On Thu, 26 Jun 2003 at 20:30 +0200, Dieter Kroemer wrote:
[...]
Wenn ich mich richtig erinnere, werden die Arrayindizes in Strings
überhaupt nicht in Anführungszeichen gepackt, sollte also so sein:
mysql_query("INSERT INTO gaestebuch (mail, name, eintrag) VALUES
('$_REQUEST[feldname]' ...");
Die Anführungszeichen machen aber kein Problem. Was Dir aber sehr
wohl ein Problem macht könnte, ist übermäßiges Vertrauen. Alles, was
von Aussen kommt, ist per Definition äusserst evil, so auch alles,
was in $_REQUEST kommt.
Niemand hindert $FOO daran, in feldname so etwas wie "xxxx, yyy,
zzz); delete * from geastebuch;" o.ä. (ich weiß jetzt nicht genau,
ob das so wirklich funktionieren würde) zu übergeben. Felder von
Draussen _müssen_ wie ein rohes Ei behandelt werden, alles andere
ist grob fahrlässig. Für Eintragungen in MySQL-Datenbank gibt es die
Funktion mysql_escape_string, sähe also so aus:
mysql_query("INSERT INTO gaestebuch (mail, name, eintrag) VALUES
('" . mysql_escape_string($_REQUEST['feldname']) . "' ...");
^ ^
Die beiden Anführungszeichen sind dann mgl.weise hyperfluid,
ausprobieren. Mit dem Operator . können zwei Strings zusammengehängt
werden, damit brauchst Du keine Variablen o.ä. anpatzen.
Escapen. Maskier die ', die nicht Anführungszeichen sein sollen, mit
einem Backslash: '123\'456\'899'.
/apm
--
GPG welcome, request public key: mailto:adalbert+key@xxxxxxxx
[...]
Ich möchte den folgendem Befehl in _eine_ Zeile schreiben, acuh wenn es
vielleicht nicht schön ist; es soll also keine extra Variable hierfür
erstellt werden:
mysql_query("INSERT INTO gaestebuch (mail, name, eintrag) VALUES
('$_REQUEST['feldname']' ...");
aber das kann natürlich nicht funktionieren, da die Anfangs-' und End-' sich
gegenseitig in die Quere kommen. Gibt es eine Möglichkeit, wie man diese '
irgendwie schachteln kann (also ähnlich einer Klammer auf/zu)?
Die " kann ich ja auch nicht nehmen, da diese ja auch schon in Gebrauch sind
:-((
Wenn ich mich richtig erinnere, werden die Arrayindizes in Strings
überhaupt nicht in Anführungszeichen gepackt, sollte also so sein:
mysql_query("INSERT INTO gaestebuch (mail, name, eintrag) VALUES
('$_REQUEST[feldname]' ...");
Die Anführungszeichen machen aber kein Problem. Was Dir aber sehr
wohl ein Problem macht könnte, ist übermäßiges Vertrauen. Alles, was
von Aussen kommt, ist per Definition äusserst evil, so auch alles,
was in $_REQUEST kommt.
Niemand hindert $FOO daran, in feldname so etwas wie "xxxx, yyy,
zzz); delete * from geastebuch;" o.ä. (ich weiß jetzt nicht genau,
ob das so wirklich funktionieren würde) zu übergeben. Felder von
Draussen _müssen_ wie ein rohes Ei behandelt werden, alles andere
ist grob fahrlässig. Für Eintragungen in MySQL-Datenbank gibt es die
Funktion mysql_escape_string, sähe also so aus:
mysql_query("INSERT INTO gaestebuch (mail, name, eintrag) VALUES
('" . mysql_escape_string($_REQUEST['feldname']) . "' ...");
^ ^
Die beiden Anführungszeichen sind dann mgl.weise hyperfluid,
ausprobieren. Mit dem Operator . können zwei Strings zusammengehängt
werden, damit brauchst Du keine Variablen o.ä. anpatzen.
Ich weiß nicht, ob ich mich klar ausdrücke, daher noch ein Bsp.:
'123'456'899'
^ ^ ^ ^
1.' 2.' 3.' 4.'
Wie kann man einem php-Script erklären, dass das 2.' nicht das Ende-' vom
ersten 1.' sondern das Anfangs-' vom 4.'ist?
Escapen. Maskier die ', die nicht Anführungszeichen sein sollen, mit
einem Backslash: '123\'456\'899'.
/apm
--
GPG welcome, request public key: mailto:adalbert+key@xxxxxxxx
| < Previous | Next > |