Sprung zum Inhalt

Webdesign nach Maß von webdesign weisshart

Mein Blog

RSS Feed AbonnementRSS 2.0 Feed

zum Archiv und den Kategorien

PHP Variable an Javascript übergeben

Montag, 8. Januar 2007

Serverseitiges Scripting, z.B. mittels PHP, ist in der Regel schnell, sicher, und ausreichend mächtig.
Manche Dinge müssen aber clientseitig gemacht werden. Dann ist Javascript die Sprache der Wahl.
Und wenn in einer Anwendung beide Verfahren zusammen arbeiten sollen, taucht häufig die Frage auf, wie Variablen von PHP an Javascript übergeben werden können.

Es gibt eine verblüffend einfache Lösung für dieses Problem:

Schreibe dein Javascript in eine PHP Datei, und liefere den Inhalt als Javascript aus.
Klingt kompliziert? Ist es aber nicht.

Ein einfaches Beispiel:
1. Gib deiner "Javascript"-Datei die Dateiendung .php, damit der Server weiß, daß sie von PHP geparst werden muss. Also z.B. meinscript_js.php
2. An den Anfang dieser Datei kommt:
<?php
header('Content-Type: text/javascript');
include("serverscript.php");
?>
Damit sagst du dem Server, dass er die Datei als Javascript ausliefern soll, und includest die PHP-Datei serverscript.php mit den zu übergebenden Variablen, damit sie im folgenden zur Verfügung stehen.

Das war's schon.

Du kannst jetzt innerhalb des Javascript-Codes PHP einfügen. Dazu schaltest du einfach auf PHP um, wie innerhalb einer HTML-Datei auch. Also z.B.:

… ganz normaler Javascript Code in Javascript Syntax …
<?php echo "Hallo Welt"; ?>
… weiter im Javascript Code …

Achtung!
genau dieses Beispiel wird nicht funktionieren. Warum nicht? Weil dein Script ja Javascript ausliefert. Das ausgelieferte Javascript beinhaltet jetzt die Zeile "Hallo Welt". Das ist ungültige Syntax. Um per Javascript etwas in eine HTML Seite zu schreiben, gibt es z.B. den Befehl document.write

Richtig wäre also:
<?php echo "document.write ('Hallo Welt')"; ?>

Alles klar?

Und nach dem selben Muster kannst du auch auf eine PHP-Variable zugreifen (die in der Datei serverscript.php definiert wurde), z.B.:

… ganz normaler Javascript Code in Javascript Syntax …
var irgendwas = <? echo $irgendwas; ?>
… weiter im Javascript Code …



6 Kommentare

  1. besten dank aber bei mir funktioniert es nicht:
    <?php
    global $new;

    global $database;
    $sql = "SELECT params FROM #__modules where id='56'";
    $database-setQuery( $sql );

    $news=explode("=",$database-loadResult());
    $news=explode("url2",$news[1]);

    $new=$news[0];
    echo $new;//bis hier die ausgabe ist richtig.

    ?>

    <script language="Javascript" type="text/javascript">
    <!–

    x='<?php echo "$new"; ?>';//das funktioniert nicht
    alert(x);
    //–>
    </script>

    problem javaschript funktioniert nicht sie liefert nicht aus
    aber wenn ich $new ein wert eingebe wie $new="ddddddddd";
    dann funktioniert es.

    Kommentar von Samir — Samstag, 16. Mai 2009 - 12:48 Uhr

  2. @Samir:
    <?php
    $new = "Test";
    echo $new;
    ?>

    <script type="text/javascript">
    x='<?php echo $new; ?>';
    alert(x);
    </script>

    Kommentar von Fritz — Samstag, 16. Mai 2009 - 14:10 Uhr

  3. Es geht aber auch einfacher:
    - PHP-Variable definieren und komplette mit dem JS-Code vorbelegen
    - Variable mittels ECHO ausgeben
    —————————
    \n alert(\"" . $_SERVER['HTTP_HOST'] . "\");\n ";

    echo $js;
    ?
    —————————
    ACHTUNG einige Fallen habe ich hier gefunden die man beachten muss.

    2. Zeile: alert(\"" – Das erste " muss gequotet sein da es Bestandteil des zu erzeugenden Strings sein muss. ALERT erwartet ja einen String. Das ist in vielen JS-Funktionen so.
    Daraus ergibt sich das Ende der Strings "\") – Hier muss ds 2. " gequotet sein das es ja ebenfalls Stringbestandteil ist.

    Hoffe geholfen zu haben

    Kommentar von Frank — Sonntag, 19. Juli 2009 - 16:28 Uhr

  4. SORRY vorheriger Post ging etwas ….. daneben.

    Es geht aber auch einfacher:
    - PHP-Variable definieren und komplette mit dem JS-Code vorbelegen
    - Variable mittels ECHO ausgeben

    <?php
    $js = "<script type=\"text/javascript\">\n alert(\"" . $_SERVER['HTTP_HOST'] . "\");\n </script>";

    echo $js;
    ?>

    ACHTUNG einige Fallen habe ich hier gefunden die man beachten muss.

    2. Zeile: alert(\" Das erste muss gequotet sein da es Bestandteil des zu erzeugenden Strings sein muss. ALERT erwartet ja einen String. Das ist in vielen JS-Funktionen so.
    Daraus ergibt sich das Ende der Strings "\") Hier muss ds 2. gequotet sein das es ja ebenfalls Stringbestandteil ist.

    Hoffe geholfen zu haben

    Kommentar von Frank — Sonntag, 19. Juli 2009 - 16:31 Uhr

  5. Ich habe ein sehr interessantes Buch von Googlemaps (die höhere Schule von Javascript) durchgearbeitet und dabei die Zielrichtung Übergabe von Datenbankinhalten über PHP an ein JavaScript Array, welches dann an die Clientseite übergeben wird.
    Aufgrund der Information, welche vorgelagert sind, konnte ich meinen Code zu laufen bringen.
    var markers = [
    <?php while($row = mysql_fetch_assoc($result)):?>
    <?= $joiner
    // UTF8_encode() für Datenfelder verwenden, die
    // Umlaute enthalten könnten
    ?>
    { 'latitude': <?= $row['f1_latitude'] ?>,
    'longitude': <?= $row['f1_longitude'] ?>,
    'name': '<?=addslashes(UTF8_encode($row['f1_name'])) ?>',
    'land': '<?=addslashes(UTF8_encode($row['f1_land'])) ?>',
    'kal': '<?= addslashes($row['f1_kalender']) ?>',
    'web': '<?= addslashes($row['f1_web']) ?>',
    'bild': '<?=addslashes(UTF8_encode($row['f1_bild'])) ?>'
    }
    <?
    $joiner = ',';
    $count++;
    ?>
    <?php endwhile; ?>
    ];

    Nun der gleiche welcher funktioniert

    $result = mysql_query($query, $conn);
    $rec = @mysql_num_rows($result);
    // echo "Datensätze ".$rec;
    //if($result)echo"Datenbank Verbindung hergestellt"; $joiner = ','; ?>

    var markers=[
    <?php
    while($info = mysql_fetch_object($result)): ?>
    {'latitude':<?php echo $info->f1_latitude; ?>,
    'longitude':<?php echo $info->f1_longitude; ?>,
    'name':'<?php echo addslashes(UTF8_encode($info->f1_name)); ?>',
    'land':'<?php echo addslashes(UTF8_encode($info->f1_land)); ?>',
    'kal':'<?php echo addslashes($info->f1_kalender); ?>',
    'web':'<?php echo addslashes($info->f1_web); ?>',
    'bild':'<?php echo addslashes(UTF8_encode($info->f1_bild)); ?>'
    }
    <?php echo $joiner;
    endwhile; ?>
    ];

    Kommentar von Wilhelm Löffler — Sonntag, 6. Juni 2010 - 8:52 Uhr

  6. Man kann keine PHP in eine javascript Funktion paken!

    Kommentar von Gettoman — Donnerstag, 18. August 2011 - 9:35 Uhr

Einen Kommentar abgeben

Damit Code-Beispiele richtig angezeigt werden, müssen Sonderzeichen maskiert werden (z.B. < zu &lt;).


(notwendig)

(notwendig)

Spamschutz:
Je nach Inhalt wird Ihr Kommentar eventuell nicht sofort angezeigt, sondern muss manuell freigeschaltet werden.

Archiv:

Kategorien:

Creative Commons Lizenzvertrag
Alle Texte (nicht Bilder!) Creative Commons CC BY-NC-SA 3.0 DE