Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ecrire une variable PHP dans un script javascript

    6 avril 2009 à 11:46:46

    Bonjour,

    je vais vous présenter mon problème. Je récupère dans ma base de donnée toutes les informations d'un article qu'un utilisateurs à créer.
    Mon but est d'afficher l'article dans une fenêtre dynamique créé en DHTML/Javascript.

    while($donnees_messages=mysql_fetch_assoc($retour_messages))­ // On lit les entrées une à une grâce à une boucle
    {
    if($donnees_messages['droit_consult'] == "invite" OR $donnees_messages['droit_consult'] == "membre")
    {
    
    echo'<table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
    <td id="lien"><strong>Sujet : <a href="../page/affiche_page.php?id='.$donnees_messages['id_page'].'" >'.nl2br(stripslashes($donnees_messages['titre'])).'</a>
    </td>
    </tr>
    <tr>
    <td>Ecrit par : '.stripslashes($donnees_messages['prenom']).' '.stripslashes($donnees_messages['nom']).'</strong></td>
    </tr>
    <tr>
    <td style="font-size: 12px">Mot clé : '.$donnees_messages['mot1'].', '.$donnees_messages['mot2'].', '.$donnees_messages['mot3'].'</td>';
    ?>
    <input type="button" value="Fenêtre 1" onclick="creer_fenetre(200,200,600,600,'<?php $donnees_messages['titre']; ?>','<?php $donnees_messages['commentaire']; ?>')" />
    <?php
    echo'</tr>
    </table>
    }
    }
    


    function creer_fenetre(left,top,width,height,titre,commentaire) {
    
    ... du code ..
    var milieu_centre = document.createElement("div");
    milieu_centre.className="milieu_centre";
    
    
    var txt = document.createTextNode(titre);
    var txt1 = document.createTextNode(commentaire);
    milieu_centre.appendChild(txt);
    milieu_centre.appendChild(txt1);
    
    
    var bouton = document.createElement('input');
    bouton.setAttribute("type","submit");
    bouton.setAttribute("value","Fermer");
    //bouton.setAttribute("onclick",close(fenetre));
    milieu_centre.appendChild(bouton);
    
    milieu.appendChild(milieu_gauche);
    milieu.appendChild(milieu_droite);
    milieu.appendChild(milieu_centre);
    fenetre.appendChild(milieu);
    


    Voila je n'arrive pas à afficher mes variables titre et commentaire dans la fenêtre javascript.
    Si vous avez des idées tenée moi au courant .

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      6 avril 2009 à 11:57:35

      Ca a pourtant l'air correct...

      As-tu vérifier le code HTML généré de l'appel, pour vérifier que tout est écrit correctement ?
      As-tu fait des alert(titre) et alert(commentaire) dans ta fonction pour vérifier que les paramètres sont bien reçus ?
      • Partager sur Facebook
      • Partager sur Twitter
        6 avril 2009 à 12:02:10

        En effet lorsque je fait un alert sur titre et commentaire dans mon script js, rien ne s'affiche. Apparament les variables ne transmettent pas les données.

        Une autre idée d'ou peut venir le problème ?

        Merci de porter intérêt à mon poste.
        • Partager sur Facebook
        • Partager sur Twitter
          6 avril 2009 à 12:07:55

          Et le code HTML généré par le PHP, ça donne quoi au niveau du input avec l'appel de la fonction ?
          • Partager sur Facebook
          • Partager sur Twitter
            6 avril 2009 à 12:19:47

            Euh

            tu as juste oublié de faire un echo :rire:

            <input type="button" value="Fenêtre 1" onclick="creer_fenetre(200,200,600,600,'<?php $donnees_messages['titre']; ?>','<?php $donnees_messages['commentaire']; ?>')" />
            


            rajoute echo ou print devant tes variables :-°
            • Partager sur Facebook
            • Partager sur Twitter
              6 avril 2009 à 12:24:01

              Lol ! Exact hugogo ! Bien joué ! xD
              • Partager sur Facebook
              • Partager sur Twitter
                6 avril 2009 à 13:26:57

                Apparament les paramètre sont bien passés mais le problème c'est que ma fenetre ne s'ouvre plus maintenant. Donc pas moyen de tester les paramètres par des alertes. Je vous donnes le code peut être que vous pourrez m'aider.

                while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle
                							{
                								if($donnees_messages['droit_consult'] == "invite" OR $donnees_messages['droit_consult'] == "membre")
                								{
                								 //Je vais afficher les messages dans des petits tableaux. C'est à vous d'adapter pour votre design...
                								 //De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
                								 
                												
                									echo'<table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
                										<tr>
                											 <td id="lien"><strong>Sujet : <a href="../page/affiche_page.php?id='.$donnees_messages['id_page'].'" >'.nl2br(stripslashes($donnees_messages['titre'])).'</a></td>	
                										</tr>
                										<tr>
                											 <td>Ecrit par : '.stripslashes($donnees_messages['prenom']).' '.stripslashes($donnees_messages['nom']).'</strong></td>
                										</tr>
                										<tr>
                											<td style="font-size: 12px">Mot clé : '.$donnees_messages['mot1'].', '.$donnees_messages['mot2'].', '.$donnees_messages['mot3'].'</td>';		
                										?>
                											<input type="button" value="Fenetre" onclick="creer_fenetre(200,200,600,600,'<?php echo $donnees_messages['titre']; ?>','<?php echo $donnees_messages['commentaire']; ?>')" />
                										<?php
                
                										echo '</tr>
                										</table>';		
                								}					
                							}
                


                var zindex=0;
                var fenetre_deplacee=0;
                var fenetre_deplacee_difx=0;
                var fenetre_deplacee_dify=0;
                
                
                function creer_fenetre(left,top,width,height,titre,commentaire) {
                
                        var fenetre = document.createElement("div");
                        fenetre.className="fenetre"; //On donne un attribut class à cette div
                        fenetre.style.left=left+"px"; //Modification de l'attribut left du style de notre div
                        fenetre.style.top=top+"px";
                        fenetre.style.width=width+"px";
                        fenetre.style.height=height+"px";
                        addEvent(fenetre,"mousedown",function (){premier_plan(fenetre)});
                       
                        //On crée de la même manière la div "haut" :
                        var haut = document.createElement("div");
                        haut.className="haut";
                        addEvent(haut,"mousedown",function (event){commencer_deplacement(event,fenetre)});
                        addEvent(haut,"mouseup",arreter_deplacement);
                        //On crée ensuite les trois div qui y figureront :
                        var haut_gauche = document.createElement("div");
                        haut_gauche.className="haut_gauche";
                        var haut_droite = document.createElement("div");
                        haut_droite.className="haut_droite";
                        var haut_centre = document.createElement("div");
                        haut_centre.className="haut_centre";
                        //Puis on les insère une par une dans notre bloc "haut" :
                        haut.appendChild(haut_gauche);
                        haut.appendChild(haut_droite);
                        haut.appendChild(haut_centre);
                        //On insère le tout (la div "haut" et les trois div à l'intérieur) dans le bloc "fenetre" :
                        fenetre.appendChild(haut);
                       
                        //On fait de même pour la div "milieu"
                        var milieu = document.createElement("div");
                        milieu.className="milieu";
                        var milieu_gauche = document.createElement("div");
                        milieu_gauche.className="milieu_gauche";
                        var milieu_droite = document.createElement("div");
                        milieu_droite.className="milieu_droite";
                		
                        var milieu_centre = document.createElement("div");
                        milieu_centre.className="milieu_centre";
                		
                		alert(titre);
                		alert(commentaire);
                		var txt = document.createTextNode(titre);
                		var txt1 = document.createTextNode(commentaire);
                		milieu_centre.appendChild(txt);
                		milieu_centre.appendChild(txt1);
                		
                		
                		var bouton = document.createElement('input');
                		bouton.setAttribute("type","submit");
                		bouton.setAttribute("value","Fermer");
                		//bouton.setAttribute("onclick",close(fenetre));
                		milieu_centre.appendChild(bouton);
                			
                        milieu.appendChild(milieu_gauche);
                        milieu.appendChild(milieu_droite);
                        milieu.appendChild(milieu_centre);
                        fenetre.appendChild(milieu);
                       
                        //On fait de même pour la div "bas"
                        var bas = document.createElement("div");
                        bas.className="bas";
                        var bas_gauche = document.createElement("div");
                        bas_gauche.className="bas_gauche";
                        var bas_droite = document.createElement("div");
                        bas_droite.className="bas_droite";
                        var bas_centre = document.createElement("div");
                        bas_centre.className="bas_centre";
                        bas.appendChild(bas_gauche);
                        bas.appendChild(bas_droite);
                        bas.appendChild(bas_centre);
                        fenetre.appendChild(bas);
                 
                        premier_plan(fenetre); //On met au premier plan notre fenêtre
                        document.body.appendChild(fenetre); //On insère le tout dans notre document, dans le corps
                
                }
                 
                /*function close(fenetre){
                	if(confirm('Voulez vous fermer la fenetre?'))
                	{
                	fenetre.parentNode.removeChild(fenetre);
                	}
                }*/
                
                
                
                
                 
                function premier_plan(fenetre) {
                        zindex++; //On incrémente la variable globale
                        fenetre.style.zIndex=zindex; //On affecte sa valeur au z-index de la fenêtre concernée
                }
                 
                function commencer_deplacement(fenetre) {
                        fenetre_deplacee=fenetre; //la variable pointe désormais sur la fenêtre à déplacer
                }
                function arreter_deplacement() {
                        fenetre_deplacee=0; //La variable vaut 0
                }
                 
                function addEvent(obj,event,fct){
                     if(obj.attachEvent)
                        obj.attachEvent('on' + event,fct);
                     else
                        obj.addEventListener(event,fct,true);
                }
                
                function deplacer_fenetre(ev) {
                        if(fenetre_deplacee!=0) { //On effectue le déplacement que s'il y a une fenêtre à déplacer
                                var souris=mouseCoords(ev); //On récupère les coordonnées de la souris
                       
                                fenetre_deplacee.style.left=souris.x+'px'; //On affecte à notre fenêtre sa nouvelle position : celle du curseur
                                fenetre_deplacee.style.top=souris.y+'px';
                               
                        }
                }
                
                function mouseCoords(ev){
                        if(ev.pageX || ev.pageY){
                                return {x:ev.pageX, y:ev.pageY};
                        }
                        return {
                                x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
                                y:ev.clientY + document.body.scrollTop  - document.body.clientTop
                        };
                }
                
                function deplacer_fenetre(ev) {
                        if(fenetre_deplacee!=0) {
                                var souris=mouseCoords(ev);
                                fenetre_deplacee.style.left=(souris.x-fenetre_deplacee_difx)+'px'; //On soustrait l'abscisse du curseur par rapport au coin gauche de la fenêtre
                                fenetre_deplacee.style.top=(souris.y-fenetre_deplacee_dify)+'px'; //On fait de même avec l'ordonnée
                        }
                }
                
                function commencer_deplacement(ev,fenetre) {
                        fenetre_deplacee=fenetre; //On définit quelle fenêtre est en cours de déplacement
                        old_mouseCoords=mouseCoords(ev); //On récupère la position de la souris
                        old_windowCoords=getPosition(fenetre); //Et la position de notre fenêtre
                        //On stocke les différences dans les variables globales
                        fenetre_deplacee_difx=old_mouseCoords.x-old_windowCoords.x;
                        fenetre_deplacee_dify=old_mouseCoords.y-old_windowCoords.y;
                }
                
                function getPosition(e){
                        var left = 0;
                        var top  = 0;
                        while (e.offsetParent){
                                left += e.offsetLeft;
                                top  += e.offsetTop;
                                e     = e.offsetParent;
                        }
                        left += e.offsetLeft;
                        top  += e.offsetTop;
                        return {x:left, y:top};
                }
                


                Autre petit soucis, lorsque je crée ce bouton :

                var bouton = document.createElement('input');
                		bouton.setAttribute("type","submit");
                		bouton.setAttribute("value","Fermer");
                		//bouton.setAttribute("onclick",close(fenetre));
                		milieu_centre.appendChild(bouton);
                


                Normalement je clique sur mon bouton fenetre et la fenetre s'ouvre ou cela affiche mon article. Et le bouton "bouton" devrait se trouver dans la fenetre. Lorsque je clique dessus cela me demande si je veut fermer la fenetre à l'aide de la function close. Le problème c'est que lorsque je'ouvre une fenetre avec le bouton fenetre cela me demande direct si je veut fermer le document. J'espere que vous avez compris :)

                Merci
                Merci
                • Partager sur Facebook
                • Partager sur Twitter
                  7 avril 2009 à 10:28:03

                  Quand tu cliques sur l'input, est-ce que ça rentre bien dans la fonction ? (autrement dit, est-ce que si tu fais un alert() au tout début de ta fonction, il s'affiche ?)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 avril 2009 à 10:58:09

                    Voila j'ai enfin trouvé d'où venait le problème.
                    Il vient de ma variable $commentaire. Cette variable contient souvent une grosse chaine de caractère car elle contient tout le contenue d'un article. J'ai l'impression que le fait de faire des sauts de ligne pose problème.

                    Il y a t'il une norme à respecter pour les chaines de caractère ou pouvez me conseiller une solution ?

                    Mise à part : Aurait tu une idée pourquoi le bouton submit qui me permet de fermer mon article s'éxécute au démarage de ma fonction et non lorsque j'appuie sur le bouton que j'ai créé à cette effet dans le script js.

                    Merci pour ton aide Golmote
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 avril 2009 à 11:57:43

                      Pour la mise à part :

                      bouton.onclick = alert("yop");
                      // Dans ce premier cas, l'alert se fera dès que la ligne sera lue (et non pas lors du onclick...)
                      // La solution ? La fonction anonyme 
                      bouton.onclick = function() {
                        alert("yop");
                      };
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 avril 2009 à 15:31:31

                        Merci gomote , marche nickel la fonction anonyme :)

                        Je continue de chercher pour mon autre problème.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Ecrire une variable PHP dans un script javascript

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown