Funktion gesucht
Nicksname
- php
Hallo,
wenn ich, um mir ein Javascript nicht zu stören, einen db-eintrag über mysql_real_escape_string($db_eintrag) in einen Textarea-value eintrage, wie muss ich ihn beim Wiedereintrag in die db behandeln, damit der Ursprungseintrag herauskommt?
Oder gehe ich die Sache komplett falsch an mit meiner Idee?
Gruß
Hi,
wenn ich, um mir ein Javascript nicht zu stören, einen db-eintrag über mysql_real_escape_string($db_eintrag) in einen Textarea-value eintrage,
Was soll JavaScript mit der Behandlung der Daten für den Kontext MySQL-Query zu tun haben?
wie muss ich ihn beim Wiedereintrag in die db behandeln, damit der Ursprungseintrag herauskommt?
Keine Ahnung, was du wissen willst.
Oder gehe ich die Sache komplett falsch an mit meiner Idee?
Was ist deine Idee?
MfG ChrisB
Was ist deine Idee?
Hi Chris,
stimmt, da habe ich was verwäxelt.
Ich formuliere mal um:
Je nach Inhalt funktioniert mein Javascript nihct, das mir eine Textarea mit einem Text vorbelegen soll.
Ich vermute, dass das an Sonderzeichen, wie Anführungszeichen oder Hochkommata liegt. Daher benötige ich hier die vielzitierte kontextkonforme Behandlung meines Strings.
Und da hatte ich dann etwas verwechselt.
Daher muss die Frage lauten:
Mit welcher Funktion muss ich den String behandeln, der in die Textarea über javascript eingesetzt werden soll und mit welcher Funktion behandel ich den String, wenn er wieder in die db eingetragen wird.
Den Frageteil 2 habe ich, so denke ich schon selber beantwortet mit mysql_real_escape_string, bleibt also noch der erste Teil der Frage.
Und eine Vermutung:
Könnte das mit htmlspecialchars gelingen?
Gruß, Nick
Hi!
Mit welcher Funktion muss ich den String behandeln, der in die Textarea über javascript eingesetzt werden soll
Welche Kontexte spielen denn bei dem Vorgang eine Rolle? Notierst du zunächst den String als Javascript-Code, der dann noch in einer HTML-Seite zu stehen kommt? Oder findet die komplette Verarbeitung im Browser statt?
und mit welcher Funktion behandel ich den String, wenn er wieder in die db eingetragen wird.
Individuell je nach DBMS.
Und eine Vermutung:
Könnte das mit htmlspecialchars gelingen?
Überlege dir, welche Zeichen in welchen Situationen eine Sonderbedeutung haben und vergleiche dann welche Zeichen von welchen Funktionen für welche Zwecke behandelt werden.
Lo!
Welche Kontexte spielen denn bei dem Vorgang eine Rolle? Notierst du zunächst den String als Javascript-Code, der dann noch in einer HTML-Seite zu stehen kommt? Oder findet die komplette Verarbeitung im Browser statt?
Der String kommt aus mysql und wird über php in die Javascriptanweisung notiert. Also in dieser Art:
document.forms.test.arr_textarea[".$row_texte[7]."].value = "".$val_pot.""
Überlege dir, welche Zeichen in welchen Situationen eine Sonderbedeutung haben und vergleiche dann welche Zeichen von welchen Funktionen für welche Zwecke behandelt werden.
Wenn ich alle Situationen kennte und alle Funktionen kennte, würde ich nicht nachfragen müssen.
Grüße, Nick
Hi!
Der String kommt aus mysql und wird über php in die Javascriptanweisung notiert. Also in dieser Art:
Wo etwas herkommt, ist egal, wenn man davon ausgeht, dass es von da in Rohform geliefert wird. Wenn du beim Eintragen in das DBMS keinen Fehler gemacht hast, bekommst du Rohdaten von dort. Also interessiert, wo es hingeht. Und da wird von innen nach außen aufgelöst. Zum Schluss soll ein Stringliteral in Javascript entstehen, also notiere es als solches und berücksichtige alle Zeichen mit Sonderbedeutung für Javascript-Strings. Das wären ", ' und \ sowie als Besonderheit die Zeilenumbrüche. Beachte dabei stets auch die "nicht sichtbaren Zeichen", die sich gerade hinter einem Variablennamen tarnen, also den Inhalt von Variablen, der später in der Ausgabe landen soll. Überprüfe auch immer das Ergebnis, notfalls in Zwischenschritten, so dass korrekte Syntax im Ziel-System entsteht.
document.forms.test.arr_textarea[".$row_texte[7]."].value = "".$val_pot.""
Schau dir auch mal die PHP-Funktion sprintf() in ihrer einfachsten Form mit %s als Platzhalter an (im Kontextwechsel-Artikel erwähnt). Die bringt etwas Übersicht in Code-im-Code-Situationen, weil weniger String-Raus-Rein zu notieren ist.
Überlege dir, welche Zeichen in welchen Situationen eine Sonderbedeutung haben und vergleiche dann welche Zeichen von welchen Funktionen für welche Zwecke behandelt werden.
Wenn ich alle Situationen kennte und alle Funktionen kennte, würde ich nicht nachfragen müssen.
Ich kenne dein Wissen auch nicht und verlange auch nicht, dass jeder alles kennt. Für mich zählt der Wille, sich mit Problemen auseinandersetzen und verstehen zu wollen. Versuche also bitte zu verstehen, was du machst, und bei Verständnisproblemen konkret nachzufragen. Nicht immer kann man Romane als Antwort schreiben, die auf alle Eventualitäten eingehen können.
Lo!
Hello,
Wo etwas herkommt, ist egal, wenn man davon ausgeht, dass es von da in Rohform geliefert wird.
Ist es hier nicht wichtig, in welcher Codierung die Seite ausgeliefert wird? Wenn die per JavaScript eingestanzten Inhalte dann aber UTF-8-codiert vorliegen, was wird daraus; oder umgekehrt?
Ich muss zugegeben, dass ich da im Moment auch erstmal einen Denkknoten lösen muss...
Unterliegen die in JavaScript verwursteten Daten der Seitencodierung oder müssen die immer in UTF-8 geliefert werden?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
Ist es hier nicht wichtig, in welcher Codierung die Seite ausgeliefert wird? Wenn die per JavaScript eingestanzten Inhalte dann aber UTF-8-codiert vorliegen, was wird daraus; oder umgekehrt?
Zeichenkodierung ist grad nicht das Problem. Selbst wenn er damit auch noch ein Problem haben sollte, muss er erst einmal das grundlegende Kontextwechselproblem erkennen und behandeln. Die Kodierung spielt dabei keine Rolle, jedenfalls nicht bei ISO-8859-x und UTF-8.
Unterliegen die in JavaScript verwursteten Daten der Seitencodierung oder müssen die immer in UTF-8 geliefert werden?
Der Javascript-Code und alle Stringliterale darin müssen so kodiert sein, wie für die Ressource angegeben, in der der Code steht. Wenn du ein HTML-Dokument mit charset=utf-8 auslieferst, müssen darin enthaltene Zeichenfolgen UTF-8-kodiert sein. Und das sowohl im HTML als auch in Script uns Style-Bereichen. Bei charset=iso-8859-1 eben alles gemäß ISO-8859-1. Javascript selbst bekommt keine Kodierung zu sehen sondern nur Unicode-Zeichen. Die hat der Browser beim Dokumentlesen bereits dekodiert. Auch eigenständige JS-Dokumente müssen so kodiert sein, wie es an den üblichen Stellen deklariert wurde. (Siehe Zeichencodierung/Webserver kurz vor dem Abschnitt "In Richtung Server")
Lo!
Hello,
Unterliegen die in JavaScript verwursteten Daten der Seitencodierung oder müssen die immer in UTF-8 geliefert werden?
Der Javascript-Code und alle Stringliterale darin müssen so kodiert sein, wie für die Ressource angegeben, in der der Code steht. Wenn du ein HTML-Dokument mit charset=utf-8 auslieferst, müssen darin enthaltene Zeichenfolgen UTF-8-kodiert sein. Und das sowohl im HTML als auch in Script uns Style-Bereichen. Bei charset=iso-8859-1 eben alles gemäß ISO-8859-1. Javascript selbst bekommt keine Kodierung zu sehen sondern nur Unicode-Zeichen. Die hat der Browser beim Dokumentlesen bereits dekodiert. Auch eigenständige JS-Dokumente müssen so kodiert sein, wie es an den üblichen Stellen deklariert wurde. (Siehe Zeichencodierung/Webserver kurz vor dem Abschnitt "In Richtung Server")
Ich denke, dass ich dafür mal ein Bild benötige.
Kennst Du eine Seite, die das grafisch darstellt?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
Ich denke, dass ich dafür mal ein Bild benötige.
Kennst Du eine Seite, die das grafisch darstellt?
Du notierst einfach alles als Zeichen in einem Dokument und kümmerst dich nicht weiter um die einzelnen Bereiche (HTML, Script, Style). Das speicherst du nun der Kodierung ab, die beim Ausliefern angegeben wird. Und wenn Teile des ausgelieferten Dokuments variabel sind, müssen sie ebenfalls in der angegebenen Kodierung eingefügt werden, ebenfalls wieder egal, ob es HTML, Style oder Script ist.
Ich weiß nicht, was du da grafisches brauchst und kann dir deswegen auch nichts malen.
Lo!
Für mich zählt der Wille, sich mit Problemen auseinandersetzen und verstehen zu wollen.
Ist absolut vorhanden. Nur jetzte erst wieder ab heute abend.
Bin etwas in Eile.
Danke auch an Dich für Deine Hilfe, ich bin schon viel weiter als vorhin :-)
Nick
Der String kommt aus mysql und wird über php in die Javascriptanweisung notiert. Also in dieser Art:
document.forms.test.arr_textarea[".$row_texte[7]."].value = "".$val_pot.""
In diesem Fall betrachte dir die Funktion json_encode()
Mahlzeit Nicksname,
Ich vermute, dass das an Sonderzeichen, wie Anführungszeichen oder Hochkommata liegt. Daher benötige ich hier die vielzitierte kontextkonforme Behandlung meines Strings.
Korrekt. Beides.
Mit welcher Funktion muss ich den String behandeln, der in die Textarea über javascript eingesetzt werden soll
Lass das Javascript mal weg. Das stört im Moment unnötig bei der Betrachtung.
Zuerst einmal möchtest Du die Daten, die in der Datenbank bestehen, mit PHP auslesen. Das dürfte im Normalfall problemlos funktionieren.
Anschließend möchtest Du diese Daten im Kontext HTML ausgeben. Du müsstest also alle in *HTML* existierenden und in den Daten möglicherweise enthaltenen *Sonderzeichen* entsprechend maskieren.
und mit welcher Funktion behandel ich den String, wenn er wieder in die db eingetragen wird.
An der Stelle musst Du umgekehrt die aus HTML kommenden und in PHP vorhandenen Daten für die Verwendung in MySQL maskieren.
Den Frageteil 2 habe ich, so denke ich schon selber beantwortet mit mysql_real_escape_string, bleibt also noch der erste Teil der Frage.
Korrekt.
Und eine Vermutung:
Könnte das mit htmlspecialchars gelingen?
Laut der entsprechenden Dokumentation ja ...
MfG,
EKKi
Hallo EKKI,
endlich mal eine Antwort mit "Packan". Danke!
Nur leider funktioniert mein Javascript Code nicht, wenn ich den String hiermit behandelt habe:
$Variable=nl2br(htmlspecialchars(trim($Variable)));
während er dummerweise, wenn auch völlig falsch eingesetzt mit mysql_real_escape_string das Javascript nicht zerstört.
Ich denke, es liegt immer noch an den Zeilenumbrüchen. Anders kann ich das nicht deuten.
Grüß, Nick
Hi!
Nur leider funktioniert mein Javascript Code nicht, wenn ich den String hiermit behandelt habe:
$Variable=nl2br(htmlspecialchars(trim($Variable)));
während er dummerweise, wenn auch völlig falsch eingesetzt mit mysql_real_escape_string das Javascript nicht zerstört.
Ich denke, es liegt immer noch an den Zeilenumbrüchen. Anders kann ich das nicht deuten.
Du spekulierst immer noch nur herum statt die eigentliche Ursache zu suchen. Schau dir noch einmal den Kontextwechsel-Artikel an, auch wenn du ihn schon von früher kennst. Offensichtlich fehlt dir noch immer Wissen daraus. Dort findest du nämlich auch, welche Sonderzeichen in Javascript wie zu behandeln sind inklusiv PHP-Code einer Funktion à la javascriptspecialchars(), die es in PHP so nicht gibt.
Lo!
Mahlzeit Nicksname,
Nur leider funktioniert mein Javascript Code nicht, wenn ich den String hiermit behandelt habe:
$Variable=nl2br(htmlspecialchars(trim($Variable)));
Das kann ich nicht nachvollziehen. Liefere aussagekräftigen Beispielcode. Server-seitiger PHP-Code ist beim Javascript-Problemen absolut irrelevant!
Was also kommt beim Browser an?
Ich denke, es liegt immer noch an den Zeilenumbrüchen. Anders kann ich das nicht deuten.
Ich auch nicht. Weil Du nämlich bisher keine hilfreichen und aussagekräftigen Code-Schnipsel geliefert hast ... :-)
MfG,
EKKi
Hi EKKI,
Nur leider funktioniert mein Javascript Code nicht, wenn ich den String hiermit behandelt habe:
$Variable=nl2br(htmlspecialchars(trim($Variable)));
Das kann ich nicht nachvollziehen. Liefere aussagekräftigen Beispielcode. Server-seitiger PHP-Code ist beim Javascript-Problemen absolut irrelevant!
Ich auch nicht.
Beispielcode:
<script type="text/javascript">
function show(a,b) {
document.getElementById(a).style.display = "block";
document.getElementById(b).style.display = "none";
document.forms.Testform.arr_textarea[201].value = "Hallo Welt!"
}
</script>
<style type="text/css">
span.aa { display:none; }
</style>
<input type="Radio" name="XYZ" value="ja" id="r0" onclick="show('d0','d1')" checked>ja
<input type="Radio" name="XYZ" value="nein" id="r1" onclick="show('d1','d0')">nein <BR><BR>
<span class="aa" id="d0"></span>
<span class="aa" id="d1"><U>Inhalt:</U><BR><BR><TEXTAREA NAME="arr_textarea[201]" rows=5 cols=20></textarea></span>
Nur, dass eben anstelle von Hallo Welt der String aus der db kommt. Und zwar als Rohdaten, also nut Text inkl. Zeilenumbrüche.
Ich auch nicht. Weil Du nämlich bisher keine hilfreichen und aussagekräftigen Code-Schnipsel geliefert hast ... :-)
Nu aber ;-)
Gruß, Nick
Hallo Nicksname,
Nur, dass eben anstelle von Hallo Welt der String aus der db kommt. Und zwar als Rohdaten, also nut Text inkl. Zeilenumbrüche.
dann zeig ihn doch auch!
Gruß, Jürgen
Hi,
Nur, dass eben anstelle von Hallo Welt der String aus der db kommt. Und zwar als Rohdaten, also nut Text inkl. Zeilenumbrüche.
Quizfrage: Darf ein Textliteral in JavaScript über Zeilengrenzen hinweg gehen?
MfG ChrisB
Mahlzeit ChrisB,
Quizfrage: Darf ein Textliteral in JavaScript über Zeilengrenzen hinweg gehen?
<schnips aufdringlich="extrem">Ich weiß es, Herr Lehrer - darf ich?!?</schnips>
MfG,
EKKi
Mahlzeit Nicksname,
Beispielcode:
Ich hatte bewusst *nicht* nach "Beispielcode", sondern nach "aussagekräftigem und relevantem Quellcode" gefragt. Dein Beispiel ist weder das eine noch das andere.
document.forms.Testform.arr_textarea[201].value = "Hallo Welt!"
Nur, dass eben anstelle von Hallo Welt der String aus der db kommt. Und zwar als Rohdaten, also nut Text inkl. Zeilenumbrüche.
Und *wie genau* sehen diese Rohdaten aus?
Nu aber ;-)
Nein, leider nicht.
MfG,
EKKi
Hallo,
Beispielcode:
[code lang=html]
<script type="text/javascript">
function show(a,b) {
document.getElementById(a).style.display = "block";
document.getElementById(b).style.display = "none";
document.forms.Testform.arr_textarea[201].value = "Hallo Welt!"
}
</script>
[...]
Nur, dass eben anstelle von Hallo Welt der String aus der db kommt. Und zwar als Rohdaten, also nut Text inkl. Zeilenumbrüche.
stelle Dir bitte vor, statt
Hallo Welt!
stände da
" + ", irgendwas
oder
";
}
</script>
<script type='text/javascript' src='boeser.server.example.org/uebler_code.js'>
oder
";
}
</script>
<iframe src='noch.schlimmerer.host.example.org/ganz_schlimme_seite'>
oder einfach nur
er sagte: "Hallo, Nick!"
Überlege Dir, wie das resultierende HTML aussieht, das an den Browser geschickt wird. Grundsätzlich gilt es, diese Zeichenkette kontextgerecht zu behandeln. Wie dedlfix schreibt: von innen nach außen.
Freundliche Grüße
Vinzenz
Hi,
Je nach Inhalt funktioniert mein Javascript nihct, das mir eine Textarea mit einem Text vorbelegen soll.
Also geht es eigentlich um dieses Problem?
Wenn ja, halte dich bitte künftig an das, was gelesen zu haben du schon explizit bestätigt hast - keine Doppelpostings.
MfG ChrisB
Also geht es eigentlich um dieses Problem?
Nein, es sind schon 2 komplett voneinander verschiedene Fragestellungen.
Das sie bei mir im Script in einem einizigen Codeblock vorkommen, ändert daran nichts.
1. Welche Sonderzeichen erfahren welche Sonderbehandlung mit welcher Funktion?
2. Wie greife ich auf ein php-aaray mittels Javascript zu?
Wenn in 3 Jahren jemand die Suche dieses Forums nutzt, wird er froh sein, dass es hierzu 2 Threads gibt.
Außerdem finde ich es wenig zielführend, Euch mein Gesamtproblem vor die Füße zu knallen und von Euch lösen zu lassen.
Gruß
Wenn in 3 Jahren jemand die Suche dieses Forums nutzt, wird er froh sein, dass es hierzu 2 Threads gibt.
Oder seine Haarpracht wird darunter leiden, weil er dieselben beiden Probleme hat, aber nur die Lösung für eines findet :p
Wenn in 3 Jahren jemand die Suche dieses Forums nutzt, wird er froh sein, dass es hierzu 2 Threads gibt.
Oder seine Haarpracht wird darunter leiden, weil er dieselben beiden Probleme hat, aber nur die Lösung für eines findet :p
...oder, weil er nur eines hat, sich aber durch den Wust beider Probleme durchkömpfen soll. Alles Spekulatius, aber ein Doppelposting ist mal ganz was Amders, als diese beiden Threads hier.
Hi!
Oder gehe ich die Sache komplett falsch an mit meiner Idee?
Grundlegendes Wissen über die Kontextwechselproblematik wäre sicher nicht verkehrt.
Lo!