dedlfix: Jquery: Formular ausfüllen (2. Anlauf)

Beitrag lesen

Tach!

ich versuche, eine Variable aus php an JS weiterzugeben, aber anscheinend kommt sie nicht in JS an.

Lass uns das mal exakter formulieren, um die Vorgänge etwas mehr klarzustellen.

Javascript interessiert sich nicht für PHP-Variablen. Und PHP kann auch keine Variablen irgendwohin reichen. PHP kann nur den Inhalt einer Variablen in irgendeine Ausgabe schreiben. Wenn in Javascript dieser Wert zur Verfügung stehen soll, dann muss PHP Javascript-Code schreiben. Und der muss auch syntaktisch korrekt sein. Mit anderen Worten: Du möchtest einen Wert, der sich in dem Fall in einer Variable befindet, im Javascript-Teil der Ausgabe zur Verfügung haben.

Wichtig ist, sie soll in einem externen js-script verfügbar sein.

Es gibt am Ende keinen Unterschied mehr zwischen eingebundenem oder direkt in der Seite befindlichen Javascript-Code. Ein script-src-Verweis ist letztlich so, als ob der Code an der Stelle stünde (abgesehen von async/defer). Für dein Poblem ist es auch nicht relevant, woher der Code kommt. Aber die Reihenfolge spielt eine Rolle. Der Code mit dem Wert muss zuerst dastehen, dann die Einbindung. Es sei denn, der Code in der Einbindung definiert nur Funktionen, die erst zu einem späteren Zeitpunkt ausgeführt werden, dann muss der Wert auch erst zum Aufruf bereitstehen.

if (!empty($_POST['myTest'])) {
echo("<script type=\"text/javascript\">var test = ".$_POST['myTest'].";</script>");
}

Das erzeugt unter Umständen ungültigen Javascript-Code. Gültig ist er nur, wenn in $_POST['myTest'] ein Wert steht, den Javascript als Zahlenliteral erkenen kann. Oder als Variablenname (einer Variable im Javascript-Code) oder als anderweitig gültigen Javascript-Code. Und das ist auch ein großes Problem, weil damit beliebiger Javascript-Code eingefügt werden kann. Wenn du stattdessen aus Sicht von Javascript lediglich ein Stringliteral sehen möchtest, fehlen da Anführungszeichen sowie eine kontextgerechte Behandlung des Inhalts von $_POST['myTest']. PHP hat aber keine Funktion, à la htmlspecialchars() für HTML, die für Javascript-Code vorgesehen ist. Stattdessen kann man json_encode() zuzüglich Anführungszeichen drumherum nehmen. Man muss aber sicherstellen, dass in $_POST['myTest'] nur ein String, aber kein Array steckt. Bei geeigneter Verwendung von []-Klammern erzeugt PHP ja nicht nur einen einfachen String, sondern ein Array. Also, ein Typecast zu string ist das mindeste. Bei einem Array kommt dann "Array" als String raus, aber das ist die ungefährliche Variante. Alternativ auf Array testen und die Verarbeitung wegen Betrugsversuchs abbrechen.

Wie gebe ich der externen js-datei denn eine Variable weiter?

Du schreibst erstmal nur Javascript-Code. Statt der Einbindung des PHP-Wertes nimmst du einen konstanten Wert, ein Stringliteral oder was auch immer der Wert am Ende sein soll. Nun sorgst du dafür, dass aus Sicht von Javascript alles läuft. Erst dann tauschst du den konstanten Wert so aus, dass der Inhalt der PHP-Variable eingefügt wird, natürlich kontextgerecht.

Die Strategie ist, statt von vornherein ein komplexes Problem mit mehreren Beteiligten zu lösen, baut man erstmal das eigentliche Ziel für sich auf, und verwendet anstelle der externen Komponenten zunächst Dummy-Werte. Auch die externen Systeme kann man separat aufsetzen und prüfen, ob sie am Ende das erzeugen, was sie sollen. Dann erst baut man alles zusammen und testet die Interaktionen.

dedlfix.