2010-07-22 9 views
1

J'ai 2 pages, un PHP et un Javascript. Je voudrais passer la variable de ce script PHP sur une page:Comment passer une variable PHP à Javascript?

$strFind="SELECT * FROM cometchat_chatrooms_users WHERE userid=$curmemid"; 
$result=mysql_query($strFind) or die(mysql_error()); 
$row=mysql_fetch_array($result); 
$room=$row['chatroomid']; 

à ce Javascript est désactivé sur une autre page:

var timestamp = 0; 
var currentroom = $room; 
var heartbeatTimer; 
var minHeartbeat = 3000; 
var maxHeartbeat = 12000; 

Comment puis-je faire cela?

+0

merci pour toutes les réponses, mais rien de tout cela fonctionne, je pensais à ce que les séances un travaillerait. –

+0

Ou vous pouvez utiliser une requête AJAX ou une entrée cachée. Lorsque vous utilisez des sessions PHP, souvenez-vous que votre JavaScript doit aussi être généré par PHP. – CSchulz

Répondre

2

Vous ne peut pas réellement "passer" une variable n'importe où. Mais seulement une valeur scalaire. Franchement, vous ne pouvez transmettre que des données de texte.
Ainsi, en cas de javascript vous avez 2 options:

  1. Pour générer tout le code js de PHP avec toutes ses des variables. J'aime beaucoup la façon dont vous générez du HTML.

  2. Pour demander une variable à JS s'exécutant dans un navigateur, en utilisant la technique AJAX.

8

Vous pouvez le faire, lorsque le JavaScript est généré par PHP. Exemple donné:

<?php 
... 
$curmemid = intval($externalValue); 
$strFind = 'SELECT * FROM cometchat_chatrooms_users WHERE userid='.$curmemid; 
$result = mysql_query($strFind) or die(mysql_error()); 

if (isset($result)) { 
    $row = mysql_fetch_array($result); 
    $room = $row['chatroomid']; 
} else 
{ 
    echo 'There is something wrong!'; 
    $room = -1; 
} 
... 
?> 
<script type="text/javascript"> 
var timestamp = 0; 
var currentroom = <?php echo $room; ?>; 
var heartbeatTimer; 
var minHeartbeat = 3000; 
var maxHeartbeat = 12000; 
</script> 
+0

Cela va juste essayer d'assigner la valeur de la variable * JavaScript * '$ room' (qui n'est pas définie) à' currentroom'. – Quentin

+0

Non, cela affectera la variable JavaScript 'currentroom' avec la valeur de la variable PHP' $ room'. – CSchulz

+2

@David Dorward: Non, ce code est absolument correct, '$ room' est entre' ' – nico

-2

Le code fonctionnera tel quel. Lorsque la sortie (html et javascript) est générée par votre php, elle aura déjà fait la substitution. Donc, votre valeur sera insérée ici comme un littéral. Si c'est une chaîne, vous devrez quand même le citer.

var currentroom = '$ pièce';

deviendra

var currentroom = 'myroom';

en sortie.

+0

Non, il ne fonctionnera pas de cette façon, voir H3llGhost réponse pour savoir comment le faire correctement – nico

1

pour une autre page, vous pouvez utiliser $ _SESSION

<script type="text/javascript"> 
var timestamp = 0; 
var currentroom = <?php echo $_SESSION['room']; ?>; 
var heartbeatTimer; 
var minHeartbeat = 3000; 
var maxHeartbeat = 12000; 
</script> 

Pour même fichier/script sequence- son très simple, pas besoin de SESSION

var currentroom = <?php echo $room; ?>; 
+0

merci de répondre Sadat, la page ce script Java devrait aller est une page .js, ; ne fonctionne pas. –

+0

Ceci est un exemple assez terrible. Les sessions sont des bêtes relativement compliquées et peuvent mener à des choses telles que les conditions de course très facilement. Cela pourrait être légèrement mieux si cela vous dérange de mentionner que vous devez créer une session et y stocker des données avant de pouvoir en extraire quoi que ce soit! – Quentin

+0

@Jon, je le sais bien. Selon votre question, vous en avez besoin dans une autre page. Rappelez-vous une chose, vous ne pouvez pas exécuter PHP dans le fichier JS sauf si vous l'autorisez depuis la configuration du serveur principal. – Sadat

2

Une autre option est celle de PHP sortant un élément caché avec la variable, puis JS le lisant.

Par exemple

<?php 
echo '<input type="hidden" id="myvar" value='.$val.' />'; 
?> 

puis à JS

var v = document.getElementById("myvar"); 
// do something with v.value 

Bien sûr, cela est facilement outrepassées par le client, alors prenez deux précautions:

1) utiliser seulement si elle n'est pas un problème pour un utilisateur d'être en mesure de voir la valeur de la variable (par exemple en regardant la source)

2) si le JS fait quelque chose qui peut être "dangereux", par ex. fait un appel asynchrone à une page PHP qui fait quelque chose dans la BD avec cette valeur, assurez-vous d'avoir des vérifications appropriées dans la deuxième page PHP (PAS dans le JS) pour vous assurer que la valeur n'a pas été falsifiée

+1

htmlspecialchars! htmlspecialchars! Chaque fois que vous placez des données que vous ne connaissez pas dans un document, utilisez htmlspecialchars! Nous n'aimons pas les trous de sécurité XSS! – Quentin

+0

En ce qui concerne les deux avertissements ... ils s'appliquent à toutes les données que vous finissez par demander au client de vous renvoyer. Il n'y a rien de spécial à l'intégrer dans le HTML. – Quentin

+0

@David Dorward: désolé? Quelle partie des données supposez-vous n'est pas sûre? En ce qui concerne les deux avertissements, je soutiens que le JS peut ne faire que quelque chose du côté client, auquel cas les problèmes d'altération des données ne sont pas un problème. Si c'est quelque chose de côté serveur, alors vous devriez faire des vérifications appropriées sur le serveur, c'est tout. – nico

3
<?php 

$strFind="SELECT * FROM cometchat_chatrooms_users WHERE userid=$curmemid"; 
$result=mysql_query($strFind) or die(mysql_error()); 
$row=mysql_fetch_array($result); 
$room=$row['chatroomid']; 

?> 
<script type="text/javascript"> 
var timestamp = 0; 
var currentroom = <?php if(isset($room))echo $room; else echo ""; ?>; 
var heartbeatTimer; 
var minHeartbeat = 3000; 
var maxHeartbeat = 12000; 
</script> 
0

essayez d'utiliser session pour stocker votre variable de chambre et de l'utiliser avec javascript par l'instruction echo

+0

Un morceau de code serait le bienvenu. – Florent

Questions connexes