Klaus: Problem mit PHP-Funktion in Javascript

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

  1. @@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'

    --
    Wer möchte nicht lieber durch Glück dümmer als durch Schaden klüger werden? (Salvador Dalí)
    1. 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

    2. 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

      1. 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

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        1. @@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'

          --
          Wer möchte nicht lieber durch Glück dümmer als durch Schaden klüger werden? (Salvador Dalí)
  2. 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/)
    
    1. 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  
      
      
  3. 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.
    
    1. 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

  4. 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