RÉCUPÉRATION DE DONNÉES DANS UNE FONCTION JAVASCRIPT PAR PHP

Petit nouveau ! | 2 Messages

26 mai 2009, 19:49

Bonsoir,
Je frotte les yeux depuis plusieurs nuit sr un même problème... Je cache pas que j'aime ça! MAIS là, a vraiment besoin d'un peu d'aide.
Je veux que mon site soit automatiquement réajusté à la taille taille de la fenêtre du navigateur, dès l'ouverture de la page index. une fonction java script me permet de récupérer ces valeurs (voir l'adresse suivante sur PHPFrance : http://www.phpfrance.com/tutoriaux/inde ... ion-decran ), cependant je bute sur la récupération de ces valeurs par php.

Pour ce faire j'ai créé dans ma page INDEX la fonction JAVASCRIPT accompagnée d'une redirection HTML puisque il me semble que je ne peux pas utiliser la fonction header sur cette page contenant du HTML.

je vous glisse ci dessous mon code.

//////////// MERCI DU COUP DE MAIN //////////////

      <html>
<meta http-equiv="refresh" content="0;url=http://mon.site.free.fr/index2.php?$resolutionx= "$_GET['width'] . ' * ' . $_GET['height']"/>
      <head>

      <script type="text/javascript">

      <!-- debut

var i=0;

while(i < 500){// TANT QUE i < 10, on execute les instructions suivantes :

i++;


      function resolution() {
   
      document.location="<?php echo $_SERVER['PHP_SELF']; ?>?width="+screen.availWidth+"&height="+screen.availHeight;
      <?php $resolutionx =  $_GET['width'] . ' * ' . $_GET['height']; ?>
      }
}
      // fin -->

      </script>
<!-- idée envoyer les données du script java via un formulaire caché-->
      </head>

      <?php


      if(!isset($_GET['width']) and !isset($_GET['height'])){

      echo '<body onload="resolution();">';
	  

 
      }else{

      echo '<body>';
 echo 'Votre résolution est ' . $_GET['width'] . ' * ' . $_GET['height'];
$resolutionx =  $_GET['width'] . ' * ' . $_GET['height']; 
echo $resolutionx;
     
      }
	  
	  exit;

      ?>

      </body>

      </html>

Eléphant du PHP | 94 Messages

26 mai 2009, 20:43

Alors y'a pas mal de choses à dire.

1. Pourquoi as-tu codé ta fonction resolution() à l'intérieur d'une boucle qui itère 500 fois ?
Je ne vois pas le but. Ecrit simplement ta fonction :

Code : Tout sélectionner

<script type="text/javascript"> function resolution() { document.location="<?php echo $_SERVER['PHP_SELF']; ?>?width="+screen.width+"&height="+screen.height; } </script>
2. Je ne vois pas non plus l'utilité de cette portion dans le code javascript:

Code : Tout sélectionner

<?php $resolutionx = $_GET['width'] . ' * ' . $_GET['height']; ?>
Cette instruction est exécutée tout le temps (même si la résolution n'a pas été renvoyé) car le php est exécuté côté serveur (lors de la création de la page) alors que le javascript sera exécuté côté client (une fois la page générée par php, ce script est interprété par le navigateur de l'utilisateur). Ton code php ne s'éxecutera pas lors de l'appel de la fonction javascript. Il s'exécutera à chaque rechargement de la page pour réecrire dynamiquement le code de ton javascript. Tu peux résoudre ça en placant ton code php dans ta structure conditionnelle ( if { .. } else { .. }

3. Enfin, dans tes commentaires, tu parles de script java. Tu fais ici un amalgame entre le langage Java et le langage de script Javascript, qui sont deux langages totalement différents.
Le nom javascript vient certes d'une collaboration entre Sun, créateurs du langage Java, et Netscape (qui lancait son langage de script pour son navigateur et voulait profiter de l'engouement pour java).
Le javascript a d'ailleurs été par la suite normalisé en langage "ecmascript", après la sortie de plusieurs langages similaires par Microsoft, Netscape, etc ...

4. N'oublie pas que le support du javascript peut ne pas être présent sur le navigateur ou tout simplement bloqué.
J'utilise par exemple l'extension Noscript pour Firefox, qui améliore mon espace visuel^^ en bloquant certaines pubs (qui utilisent du javascript pour s'afficher).

Petit nouveau ! | 2 Messages

26 mai 2009, 22:47

:shock: XD:
Bonsoir,
merci de m'avoir répondu aussi vite,
les parties inutiles sont des ajouts perso pour tenter de récupérer les données côté client et les faire dialoguer dynamiquement avec mon code.
Au vu de tes explications, je comprends mieux pourquoi rien ne peut se produire en effet, si mon script php tourne dans le vide...
Tout en attendant que quelqu'un me réponde sur le post j'ai rebricolé quelque chose.
Je ne chôme pas le bec ouvert!!!
Du coup j''arrive effectivement à voir s'afficher dans l'adresse url els données qui m'intéressent. Si j'ai bien compris elles ne sont présentes que sur mon écran- côté client. Saurais tu comment faire en sorte que mon code php lise cette url coté client pour interpréter en fonction la taille des cellules de mon tableau (mon template est en tableaux imbriqués pour tenir le choc avec les différents affichages php qu'il va supporter).

Si je tape encore à côté peux être pourrais tu m'expliquer plus en détail cette piste en "if".
voici la dernière mouture :

d'abord la page index, puis la page resolution.php qui je voudrait charger de récupérer les données, les variabiliser et les envoyer pour dialoguer avec mon template sur une autre page php.


///////////////////// INDEX ///////////////////////////////
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <html>
   <head>
    <?php
   
    // On vérifie si les valeurs de "width" et "height" sont passées
    // par l'URL (avec la méthode $_GET donc). Si ce n'est pas le cas,
    // on demande d'executer le javascript ci-dessous.
   
    if (!$_GET["width"] && !$_GET["height"]) :
  
   ?>
   <script type="text/javascript">
   <!--
   // Récupération de la largeur et la hauteur avec une conditionnelle
   // selon le navigateur utilisé (IE, ancien ou autre).
  if (document.body) {
       var largeur = (document.body.clientWidth);
       var hauteur = (document.body.clientWidth);
       }
   else {
       var largeur = (window.innerWidth);
      var hauteur = (window.innerHeight);
       }
   // Redirection vers la même page en passant par l'URL les valeurs
   // obtenues. L'URL ainsi demandée sera alors de la forme :
   // "http://www.monsite.fr/exemple.php?width=1280&height=900"
   document.location.href="http://monsite.free.fr/index2.php?width="+largeur+"&height="+hauteur;
   -->
   </script>
   <?php
   endif; // fin de la condition
   ?>
   </head>
<body>
   
      <?php
  
   // Enfin selon que les valeurs de "width" et "height" passées
 // par l'URL ont été trouvées ou non, on execute ce qu'on
   // souhaite en PHP.

   if ($_GET["width"] && $_GET["height"]) {
      $largeur = intval($_GET["width"]);
     $hauteur = intval($_GET["height"]);
   $resolx= $largeur;
   $resoly=$hauteur;
   echo $resolx;
   echo $resolx;
   
  ?> <form action="resolution.php" method="get"><input name="resol" type="hidden" value="<?php $POST["$resolx"];?>" /></form>
   
   <?php  }
   else
     {
      echo "Les valeurs de hauteur et largeur n'ont pas été trouvées ou sont incomplètes.";
      }
 
  ?>
  
</body>
 </html>
///////////////////////// resolution.Php ///////////////////////////////
<?php
function goahead () {
	if (isset($_POST['resolx'])) {
	echo resolx;
	header("Location: monsite.free.fr/index2.php?$resolx/"); /* Redirection du navigateur */

/* Assurez-vous que la suite du code ne soit pas exécutée une fois la redirection effectuée. */
				exit;
				 }
}	

	//goahead();

				
				
				 ?>

Eléphant du PHP | 94 Messages

27 mai 2009, 16:41

si mon script php tourne dans le vide...
Non, il ne tourne pas dans le vide. Je dirais qu'il est plutôt mal utilisé.
Je t'invite à lire le manuel php, et essayer de faire en premier lieu des tutoriaux plus simples.
merci de m'avoir répondu aussi vite [...]
Tout en attendant que quelqu'un me réponde sur le post
Tu attends quoi comme réponse exactement ?
Le tutorial est très bien expliqué, je ne vois pas pourquoi tu veux essayer de chercher midi à quatorze heures pour faire exactement la même chose.
Je vais décomposer plus simplement ce tuto pour que tu comprennes mieux.

1. Le visiteur fait une requête vers le serveur, c'est-à-dire l'ordinateur ou sont stockés tes fichiers php. Il exécute ces fichiers php pour renvoyer au visiteur un code source HTML généré dynamiquement. Autrement dit, le visiteur ne va recevoir aucun code php sur son navigateur (d'ailleurs, tu peux le constater en affichant le code source de ta page dans le navigateur - CTRL + U sous Firefox). Il recoit donc un code HTML statique en fonction de ton code php,qui le génère à chaque appel ou rafraichissement de la page (F5).

2. Le navigateur du visiteur va interpréter ce code statique (qui a été généré par PHP sur le serveur).
Si ce code appelle du javascript, le navigateur va utiliser son moteur javascript pour l'éxécuter.
Le php ayant déjà été éxecuté, il n'y donc aucune collaboration directe entre php et javascript (outre la transmission de variables par formulaire ou redirection - donc à condition donc de changer de page).

En l'occurence ici, le visiteur qui vient sur ton site arrive sur "www.site.fr/index.php"
Le php analyse l'url demandée, et voit qu'il n'y a pas de de variables GET (si il y en avaient l'url serait du type index.php?height=800&width=600 par ex)
Le php renvoie donc un code HTML avec <body onload="resolution()">, comme codé dans cettre structure conditionnelle. Une structure conditionnelle est le type de structure qui permet d'éxécuter différentes instructions selon les paramètres que nous lui indiquons. Dans ce tuto, cette "structure" est :

Code : Tout sélectionner

if(!isset($_GET['width']) and !isset($_GET['height'])){ // Si des variables GET sont présentes echo '<body onload="resolution();">'; // Renvoyer cette balise html qui appelera la fonction javascript }else{ // Sinon, donc si aucune variables GET n'est présente, soit l'arrivée sur le site echo '<body>'; // renvoyer cette balise qui ne fera pas appel à la fonction javascript echo 'Votre résolution est ' . $_GET['width'] . ' * ' . $_GET['height']; // Afficher la résolution }
// Fin de la ~"condition"

Tu peux regarder ici dans le manuel php si tu ne comprends pas bien cette structure.

Dans notre cas, il n'ya pas de variables GET, donc le code qui nous est renvoyé contient <body onload="resolution()">. Au chargement de la page, le navigateur va donc exécuter la fonction javascript résolution() qui nous redirigera vers la page actuelle, mais cette fois munie de variables GET.

3. Nous chargeons à nouveau la page suite à la redirection depuis javascript. Un nouvelle requête est donc envoyée au serveur, cette fois-ci avec l'url "index.php?height=...".
Le code php renverra donc cette fois-ci lorsqu'il rencontre notre structure conditionnelle <body> et pas <body onload="resolution()">, donc la fonction javascript sera bien présente dans le code mais pas appelée, donc pas exécutée par le navigateur du visiteur lorsque la page sera chargée.

Après, libre à toi de te servir de tes variables $_GET['height'] et $_GET['width'] pour faire autre chose que de les afficher (fonction echo() ). Mais attention de bien vérifier qu'elles existent (fonction isset($variable) qui renvoie 1 ou true si la variable est définie, et 0 ou false sinon). Tu peux te passer de cette vérification dans la structure conditionnelle, car une portion de code sera exécuté si les variables sont là, et un autre sinon. Tu sais donc dans quel cas de figure tu te trouves lorsque tu rentres ton code dans les accolades { }.
Maintenant que tu as compris ça, tu peux afficher un css différent selon les variables GET de résolution transmises,
au lieu de simpelemnt afficher "Votre résolution est ...".

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

27 mai 2009, 16:54

Modération :
lake, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Je l'ai fait pour toi cette fois, mais essaye de le faire les prochaines fois :wink:

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène