Passage de variable JS vers PHP

Messages postés
8
Date d'inscription
samedi 9 mars 2013
Statut
Membre
Dernière intervention
10 mai 2019
- - Dernière réponse : Reivax962
Messages postés
3507
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2019
- 24 déc. 2018 à 10:21
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
Afficher la suite 

7 réponses

Messages postés
7248
Date d'inscription
vendredi 14 décembre 2012
Statut
Membre
Dernière intervention
21 novembre 2019
2321
0
Merci
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
Commenter la réponse de jumulka
Messages postés
8
Date d'inscription
samedi 9 mars 2013
Statut
Membre
Dernière intervention
10 mai 2019
0
Merci
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
Reivax962
Messages postés
3507
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2019
917 -
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
Commenter la réponse de mrpeek
0
Merci
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'];
Commenter la réponse de Zero
Messages postés
8
Date d'inscription
samedi 9 mars 2013
Statut
Membre
Dernière intervention
10 mai 2019
0
Merci
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
jordane45
Messages postés
26812
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2019
1891 -
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.
Commenter la réponse de mrpeek
Messages postés
8
Date d'inscription
samedi 9 mars 2013
Statut
Membre
Dernière intervention
10 mai 2019
0
Merci
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 ?
jordane45
Messages postés
26812
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2019
1891 -
C'est dans le functions.php que tu gères justement l'insertion en bdd. .
Commenter la réponse de mrpeek
Messages postés
8
Date d'inscription
samedi 9 mars 2013
Statut
Membre
Dernière intervention
10 mai 2019
0
Merci
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 ?
Commenter la réponse de mrpeek
Messages postés
26812
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2019
1891
0
Merci
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 !');
  }
});

Commenter la réponse de jordane45