IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Un script javascript ne s'éxécute correctement au sein d'un fichier PHP qu'au second lancement


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Retraité Ing Electronique
    Inscrit en
    Mars 2004
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité Ing Electronique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2004
    Messages : 369
    Par défaut Un script javascript ne s'éxécute correctement au sein d'un fichier PHP qu'au second lancement
    Bonjour,
    Recherchant les moyens de transférer les dimensions de l'écran client au serveur PHP, j'ai écrit le fichier test screen.php suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    //******************* Récupération données de l'écran client
    ?>
    <script language="JavaScript" type="text/JavaScript">
    document.cookie = "ecran_larg="+screen.width;
    document.cookie = "ecran_haut="+screen.height;
    document.cookie = "fen_larg="+window.innerWidth;
    document.cookie = "fen_haut="+window.innerHeight;
    alert("ecran_l = "+screen.width+"; ecran_h = "+screen.height+"; fen_l = "+window.innerWidth+"; fen_h = "+window.innerHeight+";");
    </script>
    <?php
    $_SESSION['ecran_larg'] = $_COOKIE['ecran_larg'];
    $_SESSION['ecran_haut'] = $_COOKIE['ecran_haut'];
    $_SESSION['fen_larg'] = $_COOKIE['fen_larg'];
    $_SESSION['fen_haut'] = $_COOKIE['fen_haut'];
    echo "_SESSION['ecran_larg']:".$_SESSION['ecran_larg']."; _SESSION['ecran_haut']:".$_SESSION['ecran_haut']."; _SESSION['fen_larg']:".$_SESSION['fen_larg']."; _SESSION['fen_haut']:".$_SESSION['fen_haut'].";";
    Mais, je me suis rendu compte que ce code ne fonctionnait au premier passage et ne donnaer les informations attendues qu'au deuxième lancement !

    A quoi cela est il dû ?

    Comment le faire fonctionner au premier lancement ?

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 983
    Par défaut
    Ce code ne peut pas marcher du premier coup, ce que tu essaies de faire n'est pas possible: le PHP s'exécute coté serveur et le javascript coté client (dans cet ordre).
    Voici le déroulement:
    • Lorsque que tu tapes l'adresse de ta page la première fois, le code PHP est d'abord exécuté coté serveur, mais à ce stade le code javascript censé récupérer les dimensions de l'écran pour les placer dans les cookies n'a pas encore été exécuté.
    • le résultat est envoyé au client, donc tout ce que tu devrais voir, c'est _SESSION['ecran_larg']:; _SESSION['ecran_haut']:; _SESSION['fen_larg']:;_SESSION['fen_haut']:;
    • Le code Javascript est exécuté et les clefs/valeurs des cookies sont alors définis.
    • La deuxième fois que tu charges la page, même topo, sauf que là les cookies sont définis, donc les variables $_SESSION['truc_bidule'] ne seront pas vides.


    Que cherches-tu à faire (d'un point de vue large)?

  3. #3
    Membre éclairé
    Homme Profil pro
    Retraité Ing Electronique
    Inscrit en
    Mars 2004
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité Ing Electronique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2004
    Messages : 369
    Par défaut
    Merci CosmoKnacki,

    J'ai monté une plateforme paramétrée par une base de données, pour des associations peu argentées, qui me permet de leur mettre à disposition un site web avec de nombreuses fonctionnalités utiles pour ces associations et ce pour un prix vraiment modique (moins de 50€).

    La Platerforme a été construite pour que chaque association puisse dialoguer facilement avec ses membres et sympathisants et donc avec des personnes qui connaissent l'url de leur asso.

    Mais ce qui devait arriver, arriva, certaines association veulent être indexées sur les moteurs de recherche.

    Pour faciliter la création d'un style propre à l'asso, la Plateforme utilise en particulier ces informations client sur l'écran.

    Jusque là, pour récupérer ces info, je passais par une page (client.php) récupérant ces info via un script JavaScript dans un formulaire qui appelait une seconde page (client_fin.php) qui mettait les info dans des variables de session.

    L’inconvénient notoire pour les moteurs de recherche était de tomber sur un code d'erreur 302 lorsqu'ils accèdent à la page client.php

    Je conçois qu'il soit sans doute possible de réorganiser en profondeur la plateforme pour éviter ce souci, mais je crois que je n'y arriverai pas, trop lourd pour moi de reprendre les quelques 25.000 lignes de code que la plateforme représente. => d'où mon essai !

    Cordialement
    Zakuli

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 983
    Par défaut
    Pour faciliter la création d'un style propre à l'asso, la Plateforme utilise en particulier ces informations client sur l'écran.
    Il n'est peut-être pas utile d'en passer par php pour faire ça, pourquoi ne pas te tourner vers une solution responsive design (qui s'adapte au terminal de l'utilisateur) et qui est basée uniquement sur le html et le css?

  5. #5
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    Ce code fonctionne au premier lancement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     <?php
    	// https://tecfa.unige.ch/guides/php/php5_fr/faq.html.html
    	if (isset($_GET['largeur']) AND isset($_GET['hauteur'])) {
    	  // Affichage des variables
    	  echo 'La largeur de l\'écran est : ' . $_GET['largeur'] ."<br />\n";
    	  echo 'La hauteur de l\'écran est : ' . $_GET['hauteur'] . "<br />\n";
    	} else {
    	  // passage des variables de dimensions
    	  // (préservation de la requête d'origine
    	  //   -- les variables par méthode POST doivent être traitées différemment)
     
    	  echo "<script type=\"text/javascript\">\n";
    	  echo "  location.href=\"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}"
    				. "&largeur=\" + screen.width + \"&hauteur=\" + screen.height;\n";
    	  echo "</script>\n";
    	  exit();
    	}
    ?>
    DS7

  6. #6
    Membre éclairé
    Homme Profil pro
    Retraité Ing Electronique
    Inscrit en
    Mars 2004
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité Ing Electronique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2004
    Messages : 369
    Par défaut
    Merci Droïde,

    Je ne comprends pas trop ton script.
    Peux tu m'expliquer comment en un seul appel à ce script, sans avoir préalablement envoyé une requête contenant la largeur de la page ?

    Pour qu'il fonctionne il doit être appelé par une autre page et donc il ne donne donc son résultat qu'en deux passes !

    Cordialement
    Zakuli

  7. #7
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    Si tu as essayé tu vois bien qu'une seule passe suffit.

    Or, tu n'as même pas essayé

    Ce n'est pas mon script, mais regarde le lien... Tu auras toutes tes explications.

    Bref, je te confirme que perso en UNE seule passe ; ça passe

    DS7

  8. #8
    Membre éclairé
    Homme Profil pro
    Retraité Ing Electronique
    Inscrit en
    Mars 2004
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité Ing Electronique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2004
    Messages : 369
    Par défaut
    Bonsoir Droïde,

    Non, j'avoue ne pas avoir essayé ! Je te prie donc de me donner une seconde chance.

    Pour l'instant, je n'arrive pas à le faire fonctionner, voilà ce que je récupère :

    \n"; echo 'La hauteur de l\'écran est : ' . $_GET['hauteur'] . "
    \n"; } else { // passage des variables de dimensions // (préservation de la requête d'origine // -- les variables par méthode POST doivent être traitées différemment) echo "\n"; exit(); } ?>


    Zakuli

  9. #9
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonsoir,

    Je ne sais pas ce que tu as fait...

    Mais stp : réalise une nouvelle page avec simplement en tout et pour tout le code dito...

    Car là nous partons totalement de traviole.

    DS7

  10. #10
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 983
    Par défaut
    Citation Envoyé par zakuli
    Peux tu m'expliquer comment en un seul appel à ce script, sans avoir préalablement envoyé une requête contenant la largeur de la page ?
    En réalité la page est appelée deux fois sauf que la deuxième fois se fait automatiquement par javascript. Il y a donc bien deux passes sauf que comme c'est automatique (via le location.href = ...) l'utilisateur n'a pas à rafraîchir la page, c'est transparent pour lui.

    Si on devait résumer le code coté serveur: si les dimensions sont connues alors affiche les, sinon affiche le code javascript pour recharger la page. (en passant les valeurs via GET)

  11. #11
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    Ça fait plaisir de voir qu'au moins une personne a testé

    Merci CosmoKnacki aussi de tes détails d'explication

    DS7

  12. #12
    Membre éclairé
    Homme Profil pro
    Retraité Ing Electronique
    Inscrit en
    Mars 2004
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité Ing Electronique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2004
    Messages : 369
    Par défaut
    Merci CosmoKacki,

    Vu du scroller d'un moteur de recherche, ma page web contenant ce script sera-t-elle vue comme en 2 passes ? Et dans ce cas y verra-t-il un Code 302 (voir mon post du 11/12) ?

  13. #13
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Pourquoi faire compliqué quand on peut faire bien plus simple ?

    Très bonne idée de CosmoKnacki en #4 quant à son idée de responsive.

    Non ?

    DS7

Discussions similaires

  1. Comment gérer les objects déclarer en HTML dans un script JAVASCRIPT?
    Par Thauglor dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/04/2006, 14h54
  2. Probleme avec un script javascript->php
    Par leluis dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/03/2006, 15h32
  3. aide pour un script javascript
    Par speedylol dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/03/2006, 14h28
  4. utiliser un recordset dans un script javascript
    Par insect INC dans le forum ASP
    Réponses: 4
    Dernier message: 10/10/2005, 19h29
  5. [PHP-JS] Php dans un script javascript
    Par nebule dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/11/2004, 10h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo