Verschachtelungen von ' und "
Hallo, nachdem ihr mir so gut beim "register_globals = on" geholfen habt, komme ich dadurch zu einem altbekannten Problem von mir: Was macht man, wenn man mit den Verschachtelungen von ' bzw. " nicht zurecht kommt? 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 :-(( 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? Ist meine etwas verworrene Frage einigermaßen klar? Viele Grüße Dieter
Dieter Kroemer wrote:
Hallo,
nachdem ihr mir so gut beim "register_globals = on" geholfen habt, komme ich dadurch zu einem altbekannten Problem von mir: Was macht man, wenn man mit den Verschachtelungen von ' bzw. " nicht zurecht kommt?
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']' ...");
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 :-((
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?
"123'456'789" oder?
Ist meine etwas verworrene Frage einigermaßen klar?
ja, wenn du wie oben mit Variabeln arbeitest, würde ich den String unterbrechen, die Variable mit ".$variabel." einfügen und dann den String fortsetzen, ist miner ansicht nach sowieso die übersichtlichere Methode. Und man vermeidet Fehler ;)
Viele Grüße Dieter
-- MfG Stefan Dürrschmidt There are only 10 types of people in the World: Those who understand binary code and those who don't.
On Thursday 26 June 2003 20:43, Stefan Dürrschmidt wrote:
Dieter Kroemer wrote:
mysql_query("INSERT INTO gaestebuch (mail, name, eintrag) VALUES ('$_REQUEST['feldname']' ...");
mysql_query("INSERT INTO gaestebuch (mail, name, eintrag) VALUES ('" .$_REQUEST['feldname']."')";
Und wenn Du den String nicht unterbrechen möchtest: "... {$ARRAY['feldname']} ..." -- Grüße / regards Sebastian
* On Thu, 26 Jun 2003 at 20:30 +0200, Dieter Kroemer wrote: [...]
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@lopez.at
On Thu, Jun 26, 2003 at 08:30:59PM +0200, Dieter Kroemer wrote:
Was macht man, wenn man mit den Verschachtelungen von ' bzw. " nicht zurecht kommt?
Man liest die Anleitung, die PHP FAQ auf http://www.dclp-faq.de und stellt seine Frage gegebenenfalls in der Newsgroup de.comp.lang.php.misc, die speziell für diesen Zweck eingerichtet wurde. Außerdem schützt man Sonderzeichen mit Backslashes: $str = "Er sagte: \"Verwende \\, um Sonderzeichen zu schützen.\"";
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']' ...");
mysql_query(sprintf("insert into gaestebuch (mail, name, eintrag ) values ( '%s', '%s', '%s' )", addslashes($_REQUEST['feldname']), ... )); Kristian
participants (5)
-
Adalbert Michelic
-
Dieter Kroemer
-
Kristian Koehntopp
-
Sebastian Bauer (ml)
-
Stefan Dürrschmidt