2010-09-07 6 views
2

Je veux utiliser une variable PHP en tant que variable javascript - en particulier je veux utiliser la variable PHP session_id(); et l'utiliser comme variable javascript.Comment puis-je transmettre une variable PHP à javascript?

<?php 
$php_var = session_id(); 
?> 
<script language="JavaScript" type="text/javascript"> 
js_var = <?php echo($php_var ?>; 
</script> 

Cela semble que cela devrait fonctionner pour moi mais cela ne peut-il pas suggérer un meilleur moyen?

+1

en double. [veuillez utiliser la fonction de recherche] (http://stackoverflow.com/search?q=How+can+I+pass+a+PHP+variable+to+javascript%3F). – Gordon

Répondre

13

La meilleure méthode que je peux penser ressemble à ceci:

<?php 
$php_var = session_id(); 
?> 
<script type="text/javascript"> 
    var js_var = <?php echo json_encode($php_var); ?>; 
</script> 

PHP's json_encode -funct ion produit toujours du JavaScript valide, ce qui n'est pas garanti si vous ne faites que produire des valeurs aléatoires. Si vous décidez de ne pas utiliser json_encode(), vous devez au moins inclure la valeur php avec des guillemets pour éviter les erreurs de syntaxe. Soyez conscient de s'échapper!

<?php 
$php_var = session_id(); 
?> 
<script type="text/javascript"> 
    var js_var = "<?php echo $php_var; ?>"; 
</script> 
+3

+1 pour 'json_encode'. C'est ce qu'il y a là-bas. N'utilisez jamais la version raw-echo. Vous risquez des bogues et des failles de sécurité XSS. – bobince

+0

Que voulez-vous dire par "Soyez conscient de s'échapper!"? Vous ne semblez pas échapper à quoi que ce soit dans votre exemple de code ....? Merci! – JDelage

+1

@JDelage: Mon premier exemple échappe tout correctement (c'est ce que 'json_encode()' fait lors de la sérialisation). Le deuxième exemple ne le fait pas. C'est pourquoi je recommande d'utiliser la première technique. La seconde technique n'est utilisable que lorsque l'on traite des valeurs déjà échappées ou des valeurs impossibles à provoquer un JavaScript invalide, mais cela n'a pas beaucoup de sens à utiliser, puisque la première couvre tous les cas. – jwueller

3

C'est très bien. Assurez-vous que si la variable que vous répétez est une chaîne dans laquelle vous placez des guillemets et évitez les guillemets, les retours à la ligne, etc. à l'intérieur - par exemple, assurez-vous qu'elle soit réellement sortie comme littéral de chaîne JavaScript valide. Aussi, n'oubliez pas le var avant js_var.

1

Il ne fonctionne pas parce que votre extrait contient des erreurs, il doit être:

<?php 
$php_var = session_id(); 
?> 
<script language="JavaScript" type="text/javascript"> 
js_var = <?php echo $php_var ?>; 
</script> 
2

Il semble que vous avez ouvert une parenthèse dans l'appel echo, mais n'a pas le fermer. En outre, vous devez placer un point-virgule après. Vous avez également oublié les citations (comme le dit Gordon dans le commentaire ci-dessous).

<?php 
$php_var = session_id(); 
?> 
<script language="JavaScript" type="text/javascript"> 
js_var = "<?php echo($php_var); ?>"; 
</script> 

PSYou peut utiliser moins de code en remplaçant echo par le caractère '=':

js_var="<?=$php_var?>"; 

+3

Drôle comment les gens ont voté cette réponse le plus, bien qu'il manque les citations autour du bloc php et annonce en utilisant la syntaxe sténographique, qui est [largement considérée comme une mauvaise pratique] (http://stackoverflow.com/questions/1386620/php-echo -vs-php-short-tags/1386631 # 1386631). – Gordon

+1

Je ne savais pas que l'utilisation de la syntaxe sténographique est mauvaise ... merci pour le lien. Et vous avez raison sur les citations ... Je l'ai déjà changé. Je ne sais pas vraiment pourquoi je les ai oubliés ... – rhino

Questions connexes