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 :

Appel de JavaScript avec un echo


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Par défaut Appel de JavaScript avec un echo
    Bonjour,

    Je viens poster sur le forum car je suis un peu bloqué... Je tente de faire appel à une fonction en javascript avec un echo, de la maniere suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo'<script type="text/javascript" language="javascript" src="js/availability.js"> change_class('. $indice .');</script>';
    Ma fonction js en question est ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function change_class(b) {
     
    	var avail = document.getElementById("available"+b); 
    	avail.className= "yes";
     
    }
    Après un tour d'horizon sur google, beaucoup de personnes postent des appels de javascript similaires, et cela n'a pas l'air de leur poser de problèmes. J'ai lu aussi beaucoup de programmeurs qui aggressaient un peu en disant "Oui, PHP est orienté serveur, c'est complètement nul d'appeler du javascript qui est orienté client, arrétez de pourrir le web avec vos sites pourris!" (Je précise que je n'ai pas lu ça sur un forum développez...)
    Or, dans mon cas, il me semble difficile de faire autrement, car ma fonction change_class me permet de modifier mon .css, et j'ai 28 éléments potentiellement modifiables.

    Si quelqu'un a une solution différente, ou voit une erreur qui m'aurait échappé.
    Je précise que j'utilise IE7 (et oui, personne n'est parfait ) et que lorsque j'ouvre ma page, il ya marqué: Terminé, mais il existe des erreurs sur la page (on dirait une erreur javascript, non?)

    Merci à ceux qui prendront le temps de m'aider.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Bonjour,

    Utilises Firefox pour tester ta page, il a une console d'erreur qui t'indiquera precisemment les problemes javascript.

    Sinon pour le fond, il semble effectivement que l'utilisation du javascript soit inutile.
    Plutot que de faire une variable PHP, l'inserer dans du javascript pour lui faire modifier une composante HTML, ecris directement ta composante HTML en fonction de la variable.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 135
    Par défaut
    D'accord avec sabotage...
    et télécharges le module de firefox : "firebug" ...TRES utile pour le debugage, et très utile si tu fais un site en Ajax (il te permet de visualiser le code html correspondant à ta page ... et non le code statique inscrit dans les fichiers serveurs)

    [edit] si tu tiens à rester sous IE7, cliques sur le petit icone d'erreur pour avoir des détails sur l'erreur...

    aussi, si tu fais apel à ton javascript de la sorte, il s'execute au chargement de la page si je ne m'abuse... il faut l'executer une fois que la page est chargée (ce qui assure que tout le document est chargé)... autrement dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.onload=function(){ ce que tu veux faire }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Par défaut
    Merci pour vos réponses,

    Les informations données par la petite icone sous IE7 ne m'ont guère aidé: j'ai donc installé le module Firebug sous Firefox. Je constate que j'ai bien l'appel de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo'<script type="text/javascript" language="javascript" src="js/availability.js"> document.onload=change_class(28);</script>';
    J'ai donc bien l'élément n°28 qui est censé subir change_class une fois la page chargée (document.onload sur les conseils d'icareo)

    L'information tirée par l'affichage du code une fois chargé coté client est que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="seatprocess.php?seat=28&amp;passeport=0010001" class="no" id="available28"/>
    On peut donc voir que la classe de mon élément "available28" est restée "no", alors qu'elle devrait être passée à "yes".

    Ce qui m'étonne encore plus, c'est que j'utilise une fonction très similaire à change_class dans une autre page et elle marche parfaitement...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 135
    Par défaut
    essaye window.onload ? ça marchera surement mieux

    sinon, laisse le comme tu l'avais mis...Je suis pas un expert en javascript, mais je crois que dans ce cas, il faut inclure ta feuille de style AVANT le script (il me semble que les instructions situées entre <script> et </script> n'attendent pas que la page soit complètement chargée pour s'executer... donc si les classes ne sont pas définies au moment où il se charge, le script ne sait pas à quoi correspond ce que tu modifies)
    enfin faut voir, c'est ce que j'ai compris jme plante peut-être

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Par défaut
    Tout d'abord, merci à toi d'avoir suivi mon problème. J'ai changé, sans succès mon document.onload par window.onload. Par contre je ne suis pas sûr de bien saisir le sens de cela:

    Citation Envoyé par icareo Voir le message
    il faut inclure ta feuille de style AVANT le script
    car sur ma page, c'est le cas: ma feuille de style est appelé dans le head de mon html, qui n'est pas généré par php.

    Je ne pense pas que ce soit un problème de feuille de style car la classe de mon élément "available28" n'a même pas été changée.

    Je suis juste débutant en php et javascript, mais je pensais que l'ordre d'exécution de php était le suivant: il traite les requêtes sql, ensuite génère éventuellement du html, exécute le code et envoie la page ainsi crée au client.

    Peut-être ai-je mal compris ce que tu tente de m'expliquer, mais je ne vois pas trop comment modifier mon code pour que cela soit fonctionnel.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 135
    Par défaut
    Pour ce qui est de php, pas de problème, c'est exécuté coté serveur...

    En revanche, si tu as le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <script langage="text/javascript">
    changer_maclasse();
    </script>
    <style type="text/css">
    .maclasse{}
    </style>
    la navigateur va d'abord charger le script, et (c'est là que je suis pas sûr de moi ) l'executer... avant même qu'il aie reçu la partie <style></style>
    Donc finalement, tu vas effectuer une opération en javascript sur une classe CSS dont ton navigateur ne connait pas encore l'existence (pas encore reçue via ta connexion)... normale qu'elle ne soit pas modifiée, puisqu'elle est reçue plus tard !

    il faudrait donc s'assurer d'avoir le paragraphe <style> avant celui <script>


    encore une fois, c'est à vérifier

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 135
    Par défaut
    Au fait, t'a essayé un truc comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <script type="text/javascript" language="javascript" src="js/availability.js" /> 
    <script type="text/javascript" language="javascript" >
      change_class(<? echo $indice; ?>);
    </script>

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    As tu regardé dans le console d'erreur de firefox s'il y avait quelque chose ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Par défaut
    @Sabotage: Il n'y a rien d'affiché dans ma console d'erreurs FF, tout se charge normalement, sauf que la classe de mon élément "available28" n'a pas changé, comme si le javascript n'avait pas pu s'exécuter...

    @Icareo: Non, ma feuille de style est appelée plus au dans mon head, et je pense que l'erreur se situe "avant" le css, puisque même dans mon code html généré côté client, la valeur de la classe n'a pas changé.
    Et sinon, je ne peux malheureusement pas faire le:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <script type="text/javascript" language="javascript" src="js/availability.js" /> 
    <script type="text/javascript" language="javascript" >
      change_class(<? echo $indice; ?>);
    </script>
    car $indice est incrémenté dans une boucle et si je fais l'utilise or de ma boucle, il aura seulement la dernière valeur de la boucle.

    Je comprend que ce soit assez difficile de m'aider sans savoir vraiment ce que je fais. Je vais tenter de vous décrire mieux ce que je tente de réaliser:
    C'est un système de reservation de place dans un avion: l'utilisateur rentre son numéro de passeport, et lorsque c'est fait il peut cliquer sur une des places de l'avion pour la réserver. Chaque place de l'avion est générée comme cela par un echo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <dt id="seat1">Seat 1</dt>
    		<dd id="seat1Def"><a id="available1" class="no" href="seatprocess.php?seat=1&passeport=' . $passeport_nb .'"></a></dd>
    Pour l'instant, la place change de couleur au survol de la souris. Ce que je souhaite, c'est qu'après la génération du code html, lorsqu'une place à déjà été réservée dans ma base de donnée, la classe de <a id="available(place concernée)" passe de "no" à "yes".

    Je ne sais pas si ça vous paraît plus clair...

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 135
    Par défaut
    car $indice est incrémenté dans une boucle et si je fais l'utilise or de ma boucle, il aura seulement la dernière valeur de la boucle.
    Solution (si par exemple t'as un while) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <? while( $condition ): 
     instruction();
    ?>
    <script type="text/javascript" language="javascript" src="js/availability.js" /> 
    <script type="text/javascript" language="javascript" >
      change_class(<? echo $indice; ?>);
    </script>
    <? enwhile; ?>
    cette syntaxe est généralement plus pratique puisqu'elle permet de garder les balises html hors des balises php... ce qui te permet d'avoir un rendu à l'écran de ta page si tu utilises un éditeur (du genre dreamweaver & co)




    ... cette petite digression mise à part, quand je disais d'essayer ça, je pensais à séparer la balise contenant "src="js/availability.js" et la balises sans ça ... je sais pas si une balise script accepte à la fois une source (via un fichier .js) et un contenu explicite ... à voir

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 135
    Par défaut
    Sinon, pourquoi ne pas mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <dt id="seat1">Seat 1</dt>
      <dd id="seat1Def">
        <a id="available1" class=<? if($full) echo 'yes'; else echo 'no'; ?> href="seatprocess.php?seat=1&passeport='<? echo $passeport_nb ?> '> 
        </a>
      </dd>
    plutôt que de faire ça en javascript ?

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Par défaut
    Ah yeah! Je vais essayer ça... et je reviens mettre un "résolu" si c'est ok!

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Par défaut
    Bonsoir,

    Etant donné que je générais mes éléments places avec le echo, le "if" avait tendance à provoquer des erreurs, donc j'ai fais ça avec un tableau de 'yes' et de 'no' en fonction des cas... Je ne sais pas si c'est très "propre" mais en tout cas, ça marche nikel!

    Merci beaucoup à vous deux pour avoir pris le temps de m'aider

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. appel fonction javascript avec argument null
    Par cecile38 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 12/01/2011, 10h54
  2. Appeler du JavaScript avec des AutoGenerateButtons
    Par Johann7751 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/01/2011, 15h54
  3. Réponses: 4
    Dernier message: 27/09/2009, 15h25
  4. Réponses: 1
    Dernier message: 04/03/2009, 00h11
  5. Appel en Javascript avec paramètres vers Php
    Par francoisch dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 18/12/2007, 19h48

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