web-dev-qa-db-fra.com

Accéder à une variable JavaScript à partir de PHP

Je dois accéder à un JavaScript variable avecPHP. Voici une version simplifiée du code que j'essaie actuellement et qui ne fonctionne pas:

<script type="text/javascript" charset="utf-8">
    var test = "tester";
</script>

<?php
    echo $_GET['test'];
?>

Je suis complètement nouveau en JavaScript et en PHP, alors j'apprécierais vraiment tout conseil.

UPDATE: OK, je suppose que j'ai trop simplifié cela. Ce que j'essaie de faire est de créer un formulaire qui mettra à jour le statut de Twitter lors de sa soumission. Le formulaire fonctionne correctement, mais je souhaite également ajouter des données de géolocalisation. Étant donné que j'utilise le code JavaScript (notamment l'API Google Geolocation) pour obtenir l'emplacement, comment puis-je accéder à ces informations avec PHP lorsque je soumets le formulaire?

26
Chris Armstrong

La réponse courte est vous ne pouvez pas.

Je ne connais aucune syntaxe PHP, mais ce que je peux vous dire, c'est que PHP est exécuté sur le serveur et que JavaScript est exécuté sur le client (sur le navigateur).

Vous faites un $ _GET, qui est utilisé pour récupérer des valeurs de formulaire :

La fonction intégrée $ _GET est utilisée pour collecter des valeurs dans un formulaire avec method = "get".

En d'autres termes, si sur votre page vous aviez:

<form method="get" action="blah.php">
    <input name="test"></input>
</form>

Votre appel $ _GET récupèrerait la valeur dans ce champ de saisie.

Alors, comment récupérer une valeur à partir de JavaScript?

Eh bien, vous pouvez coller la valeur javascript dans un champ de formulaire caché ...

<script type="text/javascript" charset="utf-8">
    var test = "tester";
    // find the 'test' input element and set its value to the above variable
    document.getElementByID("test").value = test;
</script>

... elsewhere on your page ...

<form method="get" action="blah.php">
    <input id="test" name="test" visibility="hidden"></input>
    <input type="submit" value="Click me!"></input>
</form>

Ensuite, lorsque l'utilisateur cliquera sur votre bouton d'envoi, il enverra une demande "GET" à blah.php, en envoyant la valeur dans "test".

33
Pandincus

Comme JavaScript est un langage côté client et que PHP est un langage côté serveur, vous devez physiquement Transférer la variable dans le script PHP - en incluant la variable lors du chargement de la page. du script PHP (script.php? var = test), qui n'a vraiment rien à voir avec JavaScript, ou en passant la variable au PHP via un appel AJAX/AHAH temps la variable est changée.

Si vous vouliez emprunter le deuxième chemin, vous rechercheriez XMLHttpRequest, ou ma préférence, jQuerys Ajax appelle: http://docs.jquery.com/Ajax

4
Decipher

_GET accède aux variables de chaîne de requête, test n'est pas une variable de chaîne de requête (PHP ne traite en aucun cas le JS). Vous devez repenser. Vous pouvez faire une variable php $ test, et faire quelque chose comme:

<?php
$test = "tester";
?>
<script type="text/javascript" charset="utf-8">
    var test = "<?php echo $test?>";
</script>

<?php
    echo $test;
?>

Bien sûr, je ne sais pas pourquoi vous voulez cela, alors je ne suis pas sûr de la meilleure solution.

EDIT: Comme d’autres l’ont noté, si la variable JavaScript est réellement générée sur le client, vous aurez besoin de AJAX ou d’un formulaire pour l’envoyer au serveur.

2
Matthew Flaschen

Si vous affichez des données à l'utilisateur, effectuez une redirection:

<script language="JavaScript">
    var tester = "foobar";
    document.location="http://www.Host.org/myphp.php?test=" + tester;
</script>

ou un iframe:

<script language="JavaScript">
    var tester = "foobar";
    document.write("<iframe src=\"http://www.Host.org/myphp.php?test=" + tester + "\"></iframe>");
</script>

Si vous n'avez pas besoin de sortie utilisateur, créez un iframe avec width = 0 et height = 0.

2
Hawkcannon

essayez d'ajouter ceci à votre fonction js: 

    var outputvar = document.getElementById("your_div_id_inside_html_form");
    outputvar.innerHTML='<input id=id_to_send_to_php value='+your_js_var+'>';

Plus tard en html:

    <div id="id_you_choosed_for_outputvar"></div>

cette div contiendra la variable js à transmettre via un formulaire à une autre fonction js ou à php, n'oubliez pas de la placer dans votre formulaire html! . Cette solution fonctionne correctement pour moi.

Dans votre cas de géolocalisation spécifique, vous pouvez essayer d'ajouter les éléments suivants à la fonction showPosition (position):

    var outputlon = document.getElementById("lon1");
    outputlon.innerHTML = '<input id=lon value='+lon+'>';
    var outputlat = document.getElementById("lat1");
    outputlat.innerHTML = '<input id=lat value='+lat+'>';  

plus tard, ajoutez ces div à votre formulaire html:

<div id=lat1></div>
<div id=lon1></div>

Dans ces div, vous aurez la latitude et la longitude comme valeurs d’entrée pour votre formulaire php, vous feriez mieux de les cacher en utilisant css (afficher uniquement le marqueur sur une carte si elle est utilisée) afin d’éviter que les utilisateurs les modifient avant de les soumettre votre base de données pour accepter les valeurs flottantes de longueur 10,7.

J'espère que cela aidera.

2
cosphi

Le problème avec GET, c’est que l’utilisateur peut modifier lui-même la valeur s’il possède des connaissances. J'ai écrit ceci pour que PHP puisse récupérer le fuseau horaire à partir de Javascript: 

// - index.php

<?php
  if (!isset($_COOKIE['timezone'])) {
?>
<html>
<script language="javascript">  
  var d = new Date(); 
  var timezoneOffset = d.getTimezoneOffset() / 60;
  // the cookie expired in 3 hours
  d.setTime(d.getTime()+(3*60*60*1000));
  var expires = "; expires="+d.toGMTString();
  document.cookie = "timezone=" +  timezoneOffset + expires + "; path=/";
  document.location.href="index.php"
</script>
</html>
<?php
} else {
  ?>

  <html>
  <head>
  <body>

  <?php 
  if(isset($_COOKIE['timezone'])){ 
    dump_var($_COOKIE['timezone']); 
  } 
}
?>
1
kyle

JS est basé sur un navigateur, PHP est basé sur un serveur. Vous devez générer une requête/un signal basé sur un navigateur pour obtenir les données du JS dans PHP. Jetez un coup d'oeil dans Ajax .

0
Leonidas

Je regarde cela et je pense, si vous ne pouvez obtenir que des variables en php dans un formulaire, pourquoi ne pas simplement créer un formulaire et y insérer une entrée cachée pour qu'il ne s'affiche pas votre javascript dans l'entrée cachée et POST cela dans le php? Ce serait sûrement beaucoup moins compliqué que d'autres trucs, non?

0
Robin Joy Wirth