web-dev-qa-db-fra.com

Comment mettre php dans JavaScript?

J'ai essayé (mais ça ne fonctionne pas):

<?php  
  $htmlString= 'testing';
?>
<html>
  <body>
    <script type="text/javascript">  
      var htmlString=<?php echo $htmlString; ?>;
      alert(htmlString);
    </script>
  </body>
</html>

Voici le tutoriel que j'ai utilisé à cet effet:

23
Yosef

Essaye ça:

<?php $htmlString= 'testing'; ?>
<html>
  <body>
    <script type="text/javascript">  
      // notice the quotes around the ?php tag         
      var htmlString="<?php echo $htmlString; ?>";
      alert(htmlString);
    </script>
  </body>
</html>

Lorsque vous rencontrez des problèmes comme celui-ci, une bonne idée est de vérifier les erreurs JavaScript dans votre navigateur. Différents navigateurs ont différentes façons de le montrer, mais recherchez une console javascript ou quelque chose comme ça. Vérifiez également la source de votre page telle que vue par le navigateur.

Parfois, les débutants sont confus au sujet des guillemets dans la chaîne: dans la partie PHP, vous avez attribué 'testing' à $htmlString. Cela met une valeur de chaîne à l'intérieur de cette variable, mais la valeur ne contient pas de guillemets: ils sont juste pour l'interpréteur, donc il sait: oh, vient maintenant un littéral de chaîne.

48
Daren Thomas

Vous manquez des guillemets autour de votre chaîne:

...
var htmlString="<?php echo $htmlString; ?>";
...
25
John Conde

Toutes les explications ci-dessus ne fonctionnent pas si vous travaillez avec des fichiers .js. Si vous souhaitez analyser PHP dans des fichiers .js, vous devez apporter des modifications sur votre serveur en modifiant le .htaccess dans lequel les fichiers .js résident à l'aide des commandes suivantes:

<FilesMatch "\.(js)$">
    AddHandler application/x-httpd-php .js
</FilesMatch>

Ensuite, un fichier test.js contenant le code suivant exécutera .JS côté client avec le PHP côté serveur:

<html>
<head>
<script>
function myFunction(){
   alert("Hello World!");
}
</script>
</head>
<body>
<button onclick="myFunction()"><?php echo "My button";?></button>
</body>
</html>
11
JLavoie

La seule façon appropriée de mettre des données côté serveur dans le code javascript généré:

<?php $jsString= 'testing'; ?>
<html>
  <body>
    <script type="text/javascript">      
      var jsStringFromPhp=<?php echo json_encode($jsString); ?>;
      alert(jsStringFromPhp);
    </script>
  </body>
</html>

Avec des guillemets simples, le contenu de votre variable n'est pas échappé contre HTML et javascript, il est donc vulnérable aux attaques XSS ...

Pour des raisons similaires, je recommande d'utiliser document.createTextNode() au lieu de définir innerHTML. Ofc. c'est plus lent, mais plus sûr ...

9
inf3rno

vous avez besoin de guillemets autour de la chaîne en javascript

var htmlString="<?php echo $htmlString; ?>";
6
second