Problem mit PHP-Funktion in Javascript
Klaus
- php
0 Gunnar Bittersmann0 Matti Mäkitalo0 Klaus
0 1UnitedPower0 Klaus
0 kLAUS
Hallo,
ich habe ein Problem, bei dem ich (mal wieder) Eure Hilfe brauche:
Um auf meiner Seite mehrsprachigkeit zu unterstützen, habe ich eine kleine Funktion geschrieben, die mir unter Angabe der beiden Parameter Sprache und Kürzel den entsprechenden Text zurückliefert.
Die Funktion selber funktioniert tadellos:
function hole_text($sprache,$kuerzel) {
global $dbname,$verbindung;
$__text = "";
$__abfr = "SELECT textbaustein as __text FROM sprache WHERE land = '$sprache' AND kuerzel = '$kuerzel'";
$__erg = mysql_db_query($dbname,$__abfr,$verbindung);
if (mysql_num_rows($__erg) > 0) {
$__row = mysql_fetch_array($__erg);
extract($__row);
} else {
$__text = "??$kuerzel $sprache?? $__abfr";
}
return $__text;
}
Zur Diagnose lasse ich mir im Fehlerfall auch die erzeugte Abfrage ausgeben.
Jetzt versuche ich hierüber Texte in Javascript zu befüllen.
var sprache = "<? echo $browsersprache; ?>";
var text1 = "<? echo hole_text('"+sprache+"','PWMINZEICHEN'); ?>";
Der Text wird nicht gefunden und
??PWMINLENGTH DE?? SELECT textbaustein as __text FROM sprache WHERE land = 'DE' AND kuerzel = 'PWMINLENGTH'
zurückgegeben.
Also scheint er den Text nicht zu finden. Suche ich aber mit den selben Werten im PHP-Code oder auch im Phpmyadmin, dann wird der Text gefunden.
Baue ich die Abfrage um und nehme den Where-Teil raus. funktioniert es auch.
Scheinbar werden die Werte nicht korrekt an die Funktion übergeben, enthalten scheinbar Steuerzeichen oder irgendwas nicht maskiertes, denn die Ausgabe auf dem Bildschirm zeigt ja keinen Fehler.
Hat da jemand eine Idee?
Klaus
@@Klaus:
nuqneH
var text1 = "<? echo hole_text('"+sprache+"','PWMINZEICHEN'); ?>";
?? Verstehe ich das richtig? Du versuchst, mit JavaScript (im Browser, nachdem der Code vom Server dorthin gesendet wurde) PHP-Code zu generieren (der auf dem Server läuft, bevor die Seite zum Browser geschickt wird)?
Nun ja, du musst dazu einen Flux-Kompensator einbauen.
Im übrigen ist <? [code lang=php]echo
[/code] recht sinnfrei. Entweder man benutzt keine Shorttags (die bessere Variante), dann also <?php [code lang=php]echo
[/code]; oder man benutzt sie – dann aber richtig! <?=
Ansonsten glaube ich, dass du bei der Internationalisierung prinzipiell was falsch machst. Mit JavaScript hast du keinen Zugriff auf die vom Nutzer eingestellten bevorzugten Sprachen.
Beschäftige dich mit Sprachvereinbarung (language negotiation)!
Qapla'
Hallo,
Entweder man benutzt keine Shorttags (die bessere Variante)
Warum ist das die bessere Variante, außer dass es vielleicht mal irgendwo aus sein könnte? Ehrlich gesagt finde ich <?= $foo ?>viel sauberer als <?php echo $foo ?>.
Jeena
var text1 = "<? echo hole\_text('"+sprache+"','PWMINZEICHEN'); ?>";
?? Verstehe ich das richtig? Du versuchst, mit JavaScript (im Browser, nachdem der Code vom Server dorthin gesendet wurde) PHP-Code zu generieren (der auf dem Server läuft, bevor die Seite zum Browser geschickt wird)?
Es ist sehr merkwürdig, wenn ich
var text1 = "<? echo hole_text('$ldapsprache','PWMINZEICHEN'); ?>";
ausführe, dann wird
??PWMINLENGTH $browsersprache?? SELECT textbaustein as __text FROM sprache WHERE land = '$ldapsprache' AND kuerzel = 'PWMINLENGTH'
zurückgegeben.
Mit obiger (eigentlich ja völlig falscher Weise), kommt, warum auch immer, das 'DE' rüber.
Klaus
Hi,
<? echo hole_text('$ldapsprache','PWMINZEICHEN'); ?>
ausführe, dann wird
WHERE land = '$ldapsprache' AND kuerzel = 'PWMINLENGTH'
zurückgegeben.
Klar. In PHP werden Variablen innerhalb von '' nicht expandiert.
cu,
Andreas
@@MudGuard:
nuqneH
Ich frag mich gerade, warum sich jemand, der weder über Grundkenntnisse in PHP noch in JavaScript verfügt, sich an ein Projekt wagt, Mehrsprachigkeit mit PHP und JavaScript zu realisieren.
Qapla'
Hi,
var sprache = "<? echo $browsersprache; ?>";
var text1 = "<? echo hole_text('"+sprache+"','PWMINZEICHEN'); ?>";
Zu dem Zeitpunkt, an dem das PHP ausgeführt wird (Serverseitig), wird JavaScript nicht ausgeführt. Anders ausgedrückt: du sagst PHP, folgendes zu parsen:
`echo hole_text('"+sprache+"','PWMINZEICHEN');`{:.language-php}
Und ich gehe nicht davon aus, dass du in deiner DB die Sprache "+sprache+" hinterlegt hast.
Du musst dir technologisch etwas komplett anderes überlegen. Z.B. die Texte per AJAX nachladen oder die komplette Sprache mit JSON in JS-Scope bringen.
Bis die Tage,
Matti
--
[Webapplikationen in C++ entwickeln](http://tntnet.org/)
Hi,
var sprache = "<? echo $browsersprache; ?>"; var text1 = "<? echo hole_text('"+sprache+"','PWMINZEICHEN'); ?>";
>
> Zu dem Zeitpunkt, an dem das PHP ausgeführt wird (Serverseitig), wird JavaScript nicht ausgeführt. Anders ausgedrückt: du sagst PHP, folgendes zu parsen:
>
> `echo hole_text('"+sprache+"','PWMINZEICHEN');`{:.language-php}
> Und ich gehe nicht davon aus, dass du in deiner DB die Sprache "+sprache+" hinterlegt hast.
Eigentlich hast Du völlig recht, es macht nicht wirklich Sinn, komischerweise hatte es funktioniert und der Inhalt wurde tatsächlich korrekt übergeben.
Warum auch immer.
Ich hatte vorher
`var text1 = "<? echo hole_text('$browsersprache','PWMINZEICHEN'); ?>";`{:.language-javascript}
Aber merkwürdigerweise wurde dann der Funktion nicht der Inhalt von $browsersprache übergeben, sondern $browsersprache als Text.
Klaus
Ein ganz schönes Gewurschtel.
Ich fang mal hiermit an:
var sprache = "<? echo $browsersprache; ?>";
var text1 = "<? echo hole_text('"+sprache+"','PWMINZEICHEN'); ?>";
Du mischst hier auf eine sehr, sehr, sehr verwirrende Weise Javascript mit PHP-Code. Mich wundert ehrlich gesagt, dass überhaupt etwas passiert.
Übergiebst du hole\_text als ersten Parameter wirklich eine Javascript-Variable? Woher soll das PHP-Skript deren Wert kennen? Warum benutzt du nicht $browsersprache an dieser Stelle? Und als kürzel übergiebst du den String 'PWMINZEICHEN'? Welches Länderkürzel ist das?
Und damit wären wir schon beim zweiten Punkt.
Du sagst
> ??PWMINLENGTH DE?? SELECT textbaustein as \_\_text FROM sprache WHERE land = 'DE' AND kuerzel = 'PWMINLENGTH'
sei dein Rückgabewert. Woher stammt 'PWMINLENGTH'?
Weißt du das PHP auf dem Server ausgeführt und Javascript vom Client?
Du kannst also mittels PHP Javascript-Code genieren, du kannst aber mit Javascript keine PHP-Funktionen ausführen.
Ein ganz schönes Gewurschtel.
Ich fang mal hiermit an:
var sprache = "<? echo $browsersprache; ?>";
var text1 = "<? echo hole_text('"+sprache+"','PWMINZEICHEN'); ?>";
>
> Übergiebst du hole\_text als ersten Parameter wirklich eine Javascript-Variable? Woher soll das PHP-Skript deren Wert kennen? Warum benutzt du nicht $browsersprache an dieser Stelle?
Ich hatte vorher $browsersprache übergeben, also
var text1 = "<? echo hole\_text('$browsersprache','PWMINZEICHEN'); ?>";
Die Folge war, dass nicht der Inhalt von $browsersprache übergeben wurde, sondern der Text '$browsersprache'.
> Und als kürzel übergiebst du den String 'PWMINZEICHEN'? Welches Länderkürzel ist das?
Kürzel ist kein Länderkürzel, sondern der Text, nach dem in der Sprach-Tabelle gesucht werden soll.
> Und damit wären wir schon beim zweiten Punkt.
>
> Du sagst
> > ??PWMINLENGTH DE?? SELECT textbaustein as \_\_text FROM sprache WHERE land = 'DE' AND kuerzel = 'PWMINLENGTH'
> sei dein Rückgabewert. Woher stammt 'PWMINLENGTH'?
>
Sorry, da war mein hierein Copy&Paste verkehrt. Übergeben wird PWMINZEICHEN und der das steht auch in der Rückgabe, also dem ausgegebenen Select steht auch PWMINZEICHEN.
> Weißt du das PHP auf dem Server ausgeführt und Javascript vom Client?
Das weiß ich, daher wunderte ich mich auch stark, dass der PHP-Code nicht sauber interpretiert wird. Zu Anfang hatte ich
~~~javascript
checkerg = "<? echo hole_text('$browsersprache','PWMINZEICHEN'); ?>";
document.getElementById('pwdtest').innerHTML = checkerg;
Das Ergebnis war, dass in dem DIV-Tag als Text der PHP-Code stand (also '? echo hole_text( ...'
Danach hatte ich dann erstmal die Variable text1 erzeugt.
Du kannst also mittels PHP Javascript-Code genieren, du kannst aber mit Javascript keine PHP-Funktionen ausführen.
Was ich ja auch nicht möchte, ich will ja Javascript-Code vervollständigen.
Klaus
Hallo Leute,
ich hab die Lösung des Problems gefunden:
var text1 = "<? echo hole_text($browsersprache,'PWMINZEICHEN'); ?>";
So funktioniert es.
Vielen Dank für Eure Hilfe,
Klaus