Aller au contenu

Problème JS/PHP


Jedino

Messages recommandés

Membre, Jedi pas oui, jedi pas no, 30ans Posté(e)
Jedino Membre 47 968 messages
30ans‚ Jedi pas oui, jedi pas no,
Posté(e)

Bonjour à tous,

Ca fait un moment que je n'ai rien posté sur le forum. Et, ça fait encore plus longtemps que je ne suis pas venu pour un problème quelconque. J'ai un projet en commun avec d'autres personnes, et nous bloquons sur la façon dont on peut solutionner la chose suivante. Je vais essayer d'être le plus clair possible.

Nous avons à faire une application qui doit permettre de trouver les professeurs qui correspondent le mieux après recherche de l'élève en fonction de critères de distances, de temps et de mode de déplacement, ces critères étant entrés par le professeur à son inscription sur le site. Nous parvenons à récupérer les informations en PHP, là n'est pas le problème. La chose se corse et nous dépasse quand il s'agit d'utiliser un calcul du temps et de la distance entre deux adresses à partir de l'API de google map, c'est-à-dire jongler entre PHP et javascript.

Je vous donne le code initial, adapté et fonctionnel quand il est à part avec un index qui va bien de la fonction javascript en question.

var initialize;
var calculate;
var direction;

initialize = function(){

 var contentMarker = [].join('');  
 direction = new google.maps.DirectionsRenderer();

};

calculate = function(){
   origin      = document.getElementById('origin').value; // Le point départ
   destination = document.getElementById('destination').value; // Le point d'arrivé
   if(origin && destination){
       var request = {
           origin      : origin,
           destination : destination,
		//on peut modifier le mode de transport avec cette page http://www.touraineverte.com/google-maps-api-version-3/exemple-tutoriel-itineraires-directions/index.html
		//on peut y trouver à pied, en vélo, en voiture (avec ou sans autoroute) et, apparemment, les transports en commun
           travelMode  : google.maps.DirectionsTravelMode.DRIVING // Mode de conduite
       }
       var directionsService = new google.maps.DirectionsService(); // Service de calcul d'itinéraire
       directionsService.route(request, function(response, status){ // Envoie de la requête pour calculer le parcours
           if(status == google.maps.DirectionsStatus.OK){
               direction.setDirections(response); // Trace l'itinéraire sur la carte et les différentes étapes du parcours
 				// Display the distance:
        	document.getElementById('distance').innerHTML += 
			response.routes[0].legs[0].distance.value + " meters";

		// Display the duration:
		document.getElementById('duration').innerHTML += 
           response.routes[0].legs[0].duration.value + " seconds";
           }
       });
   }
};

initialize();

Ainsi, on obtient bien en retour une durée et une distance. Mais tout ceci se fait par le biais d'un "onclick", et le retour se fait sur l'index dans les "div" ayant les id "duration" et "distance". Indépendant, cela fonctionne.

Nous, nous souhaitons utiliser ça, mais faire en sorte que "origin" soit l'adresse de l'élève, ce qu'on arrive à retrouver en php, et de même pour "destination" qui est le professeur. Ainsi la fonction javascript donne ça :

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=fr">   		         


  		         var initialize;
  		         var calculate;
  		         var direction;



  		         initialize = function(){

  		         var contentMarker = [].join('');  
  		         direction = new google.maps.DirectionsRenderer();

  		  		};

  		         calculate = function(){    		         
  			         var origin  	=  '<?php echo $adresse_eleve; ?>'// Le point de départ
  			         var    destination =  '<?php echo $adresse_eleve; ?>'; // Le point d'arrivée
  			         alert(destination);
  			         if(origin && destination){
  				         var request = {
  					         origin  	: origin,
  					         destination : destination,
  					         //on peut modifier le mode de transport avec cette page http://www.touraineverte.com/google-maps-api-version-3/exemple-tutoriel-itineraires-directions/index.html
  					         //on peut y trouver à pied, en vélo, en voiture (avec ou sans autoroute) et, apparemment, les transports en commun
  					         travelMode  : google.maps.DirectionsTravelMode.DRIVING // Mode de conduite
  				         }
  				         var directionsService = new google.maps.DirectionsService(); // Service de calcul d'itinéraire
  				         directionsService.route(request, function(response, status){ // Envoie de la requête pour calculer le parcours
  					         if(status == google.maps.DirectionsStatus.OK){
  						         direction.setDirections(response); // Trace l'itinéraire sur la carte et les différentes étapes du parcours
  						           // Display the distance:
  					  		document.getElementById('distance').innerHTML += 
  						         response.routes[0].legs[0].distance.value + ' meters';

  				  		// Display the duration:
  				         document.getElementById('duration').innerHTML += 
  					         response.routes[0].legs[0].duration.value + 'seconds';
  					         }
  				         });
  			         }
  		         };

  		         initialize();

  		         </script>

var initialize;

var calculate;

var direction;

initialize = function(){

var contentMarker = [].join('');

direction = new google.maps.DirectionsRenderer();

};

calculate = function(){

var origin = ''// Le point de départ

var destination = ''; // Le point d'arrivée

alert(destination);

if(origin && destination){

var request = {

origin : origin,

destination : destination,

//on peut modifier le mode de transport avec cette page http://www.tourainev...ions/index.html

//on peut y trouver à pied, en vélo, en voiture (avec ou sans autoroute) et, apparemment, les transports en commun

travelMode : google.maps.DirectionsTravelMode.DRIVING // Mode de conduite

}

var directionsService = new google.maps.DirectionsService(); // Service de calcul d'itinéraire

directionsService.route(request, function(response, status){ // Envoie de la requête pour calculer le parcours

if(status == google.maps.DirectionsStatus.OK){

direction.setDirections(response); // Trace l'itinéraire sur la carte et les différentes étapes du parcours

// Display the distance:

document.getElementById('distance').innerHTML +=

response.routes[0].legs[0].distance.value + ' meters';

// Display the duration:

document.getElementById('duration').innerHTML +=

response.routes[0].legs[0].duration.value + 'seconds';

}

});

}

};

initialize();

Cela semble fonctionner vu que je n'obtiens aucune erreur dans la console javascript et que les valeurs sont bien celles qu'il faut dans le code, donc que le script est lancé. Le problème, c'est qu'il ne retourne rien. En effet, nos "id" de retour sont cette fois sur la même page et nous n'utilisons aucun bouton pour lancer le script.

Ma question est donc simple : comment faire en sorte de récupérer les résultats de distance et de temps, sachant que nous voulons ensuite utiliser ça sans l'afficher pour le comparer à des critères après ça dans du PHP? Et je ne savais pas trop s'il fallait d'autres bout de code. Je fournirai s'il faut.

Merci d'avance aux courageux !

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Membre, Explorateur de Nuages, 45ans Posté(e)
Pheldwyn Membre 22 497 messages
45ans‚ Explorateur de Nuages,
Posté(e)

Je n'ai pas eu le temps de regarder en détail.

Mais vous voulez faire des choses en PHP et donc côté serveur (où se situe votre base de données), il faut éviter de passer par du javascript (qui s'exécute sur le poste du client lorsqu'il consulte votre page).

Le plus logique serait d'interroger directement l'api Google Maps depuis le PHP :

ça va passer par exemple par des file_get_contents() ou des sockets.

Lien à poster
Partager sur d’autres sites

Membre, Jedi pas oui, jedi pas no, 30ans Posté(e)
Jedino Membre 47 968 messages
30ans‚ Jedi pas oui, jedi pas no,
Posté(e)

Merci bien !

Et effectivement, on a bien conscience de la difficulté relationnelle entre JS et PHP. Mais on a pas du tout pensé essayer de tout mettre en PHP, pour le coup.

Lien à poster
Partager sur d’autres sites

Membre, Explorateur de Nuages, 45ans Posté(e)
Pheldwyn Membre 22 497 messages
45ans‚ Explorateur de Nuages,
Posté(e)

Le problème en PHP (si j'ai tout compris, mais je n'utilise pas vraiment Maps, ni les Google API d'ailleurs) c'est que tu ne peux passer qu'en WebService via des requêtes : ça n'offre sans doute pas la même souplesse que le Javascript à l'utilisation.

Lien à poster
Partager sur d’autres sites

Membre, Jedi pas oui, jedi pas no, 30ans Posté(e)
Jedino Membre 47 968 messages
30ans‚ Jedi pas oui, jedi pas no,
Posté(e)

Je ne sais pas si la solution qu'on a construite t'intéresse ou non, mais voilà ce qu'on a fait pour que ça puisse fonctionner :

- déplacer le script JS qui trainait en plein milieu du PHP pour le placer dans le "head"

- appeler avec un "echo" le script dans le PHP afin de faire nos calculs

- lancer une requête avec AJAX pour passer nos variables sur une autre page

- sur cette autre page, faire nos traitements

- retourner sur la page initiale en plaçant notre résultat dans la session

Je ne sais pas si c'est "propre", mais c'est la seule chose qui fonctionne à ma connaissance.

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×