Passage de variable JS vers PHP [Fermé]

Signaler
Messages postés
8
Date d'inscription
samedi 9 mars 2013
Statut
Membre
Dernière intervention
10 mai 2019
-
Messages postés
3606
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
6 août 2020
-
Bonjour,

Je cherche à récupérer des variables JS dans mon code PHP.
Voici mon code :

<script type="text/javascript">
function maPosition(position) {
  var lat = position.coords.latitude;
  var lon = position.coords.longitude;
}
if(navigator.geolocation)
 navigator.geolocation.getCurrentPosition(maPosition);
</script>



<?php
$latitude =  "<script>document.write(lat);</script>" ;
echo $latitude;
?>



La partie PHP n'affiche rien.
Après plusieurs tests, je me suis aperçu que j'arrivais, avec ce procédé, à récupérer la valeur d'une variable JS si celle-ci était déclaré hors d'une fonction.
Mais ici, rien à faire, je n'arrive pas extraire les valeurs 'lat' et 'lon' pour l'afficher depuis la partie PHP.
Quelqu'un aurait une idée ?
Merci d'avance pour votre aide

7 réponses

Messages postés
8744
Date d'inscription
vendredi 14 décembre 2012
Statut
Membre
Dernière intervention
7 août 2020
3 292
Bonjour,
je ne suis pas sur qu'on puisse mettre un algo js comme variable dans un php, le php s'exécutant sur le serveur, le js sur le client

pour passer des variables du js au php il faut utiliser l'ajax
Messages postés
8
Date d'inscription
samedi 9 mars 2013
Statut
Membre
Dernière intervention
10 mai 2019

Bonjour,

Merci Jumulka pour ta réponse.
Pourtant , si je fais ça, j'arrive bien à appeler la variable dans mon code PHP :

<script type="text/javascript">
var a = 123;
</script>


<?php
$a =  "<script>document.write(a);</script>" ;
echo $a;
?>


Je pense que ma requête est plutôt : comment récupérer mes variables hors d'une fonction JS ?

Merci
Messages postés
3606
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
6 août 2020
962
Bonjour,

Je pense qu'il y a quelque chose que tu n'as pas bien saisi dans les interactions entre PHP et JavaScript.
Il faut bien comprendre que le PHP génère du code source (JavaScript, HTML, CSS), en intégralité, puis envoie toute la page au navigateur client, qui, lui, interprète ce code. Il n'y a pas d'échanges synchrones entre les deux.

Au mieux, on peut utiliser JavaScript pour effectuer des requêtes vers le serveur PHP (ce qu'on appelle AJAX), mais c'est asynchrone (c'est même le premier A de AJAX) : tu ne peux pas espérer que PHP récupère une variable par ce biais à l'emplacement-même du code qui a généré le JavaScript qui a calculé cette variable. Tu seras forcément dans le cadre d'une nouvelle requête.

Le code que tu présentes ici ne signifie pas que PHP a connaissance de la valeur de A. Il n'a connaissance que d'une chaîne de caractère qui, côté client, permet d'afficher A. Cela signifie que tu ne peux pas utiliser ton code pour faire des opérations sur la valeur de A en PHP.
Pour t'en convaincre, avec le code que tu as écris, dans ton navigateur, fais « Afficher le code source ». Tu ne verras pas directement la valeur de A écrite par le PHP ; tu ne verras que ton code javascript qui dit au navigateur d'afficher A. Le PHP n'a jamais connu la valeur de A.

Retiens bien que pour PHP, le JavaScript n'est qu'un bout de texte qu'il envoie au client qui, lui, pourra l'interpréter.

Xavier
Bonjour,

Dans quel but souhaites-tu transmettre tes variables JS en PHP ?

Comme indiqué plus haut, tu peux utiliser de l'ajax pour transmettre tes variables.
Avec Jquery :
$.ajax({
	url: 'functions.php', 
	type: 'POST',
	data: 'latitude='+lat+'&longitude='+lon,
	success: function(data){
            // instructions
	}
});


Côté PHP
$lat = $_POST['latitute'];
$lon = $_POST['longitude'];
Messages postés
8
Date d'inscription
samedi 9 mars 2013
Statut
Membre
Dernière intervention
10 mai 2019

Merci Zero pour ta réponse. Il me manque quelques éléments pour bien comprendre.
Je récapitule mon besoin :
J'ai une page principale main.php dans laquelle j'ai besoin de récupérer des données (latitude et longitude) pour les afficher, les insérer dans une base de données....
Dans l'entête de cette page j'ai mon code JS qui me permet de récupérer les données souhaitées.

Avec le bout de code AJAX que tu me proposes, j'ai l'impression que je vais envoyer les données souhaitées vers une autre page functions.php

La question est donc : comment récupérer les données de functions.php dans main.php ?

Merci
Messages postés
29165
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 août 2020
2 673
Bonjour,

La question t'a déjà été posée.... dans quel but veux tu "récupérer" ces variables ?
Autrement dit... à quel endroit veux tu les avoir ?
Dans un élément HTML de ta page ? pour faire un calcul en PHP ?
Merci de détailler (en nous montrant ton code exact par exemple....) ce que tu souhaites faire.
Messages postés
8
Date d'inscription
samedi 9 mars 2013
Statut
Membre
Dernière intervention
10 mai 2019

Bonsoir,

Voici mon code :

main.php :
j'ai mis en commentaire les endroits où je voulais afficher mes valeurs et les insérer dans une BDD

<html>
<head>
<script type = "text/javascript">
src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">
      
function maPosition(position) {
  var lat = position.coords.latitude;
  var lon = position.coords.longitude;
}
if(navigator.geolocation)
 navigator.geolocation.getCurrentPosition(maPosition);
 
$.ajax({
	url: 'functions.php', 
	type: 'POST',
	data: 'latitude='+lat+'&longitude='+lon,
	success: function(data){
	// instructions
		}
});

</script>
      
   </head>
	
   <body>
   <div id = "board" >
   <!-- je souhaite ici afficher les valeurs obtenues de latitude et longitude -->
   </div>
   
   <?
   // je souhaite ici insérer les valeurs obtenues de latitude et longitude dans une BDD
   ?>
   </body>
</html>




et la page functions.php :
vers laquelle renvoie le bout de code ajax de main.php
$lat = $_POST['latitute'];
$lon = $_POST['longitude'];



Comment récupérer dans main.php les valeurs que l'ajax à envoyé dans functions.php ?
Messages postés
29165
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 août 2020
2 673
C'est dans le functions.php que tu gères justement l'insertion en bdd. .
Messages postés
8
Date d'inscription
samedi 9 mars 2013
Statut
Membre
Dernière intervention
10 mai 2019

Ok, mais si je veux afficher ces données dans la page main.php, je dois faire une requête mysql dans la BDD en question ?
Ce n'est pas possible de recharger à la volée un "bout" de code de la page main.php qui me permetrait de récupérer les données souhaitées ?
Messages postés
29165
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 août 2020
2 673
functions.php

<?php

//Connexion à la bdd
//ici tu place l'include vers ton fichier de connexion à la bdd
// par exemple 
require_once "chemin/vers/fichier/connexionBdd.php";

//récupération propre des variables AVANT de les utiliser
$lat = !empty($_POST['latitute']) ? $_POST['latitute'] : NULL;
$lon = !empty($_POST['longitude']) ? $_POST['longitude'] : NULL;


//Ici tu fais le traitement en BDD
//...




// On retourne les variables voulues au format JSON
json_encode(array('lat'=>$lat, 'lon'=>$lon));


Côté Javascript,
$.ajax({
	url: 'functions.php', 
	type: 'POST',
	data: {latitude:lat,longitude:lon},
  dataType: "json",
	success: function(data){
	  // instructions
    // c'est ici que tu code l'actualisation d'un bout de ta page
    console.log(data);
    //par exemple, si tu as un INPUT dont l'id est "coordoonnees"
    $('#coordoonnee').val(data.lat + " - " + data.lon);    
	},
  error: function(jqXHR,textStatus){
    console.log(textStatus,jqXHR);
    alert('Error AJAX !');
  }
});