Tableau PHP en parametre fonction Javascript

Résolu
Bonjour, jeune webmaster d'un site ecrit en Php/MySql, je souhaite agrémenter le site d'un menu en javascript que je ve renseigner via une requete sur la base MySql.
Seule problème le passage des deux variables ( tableau de chaine pour les deux ) dans la fonction javascript :

Dessine_Menu('.$Titre_Page.','.$Partie_Page.');

la fonction Dessine_Menu ne prend pa les valeurs des tableaux mais seulement les chaines "$Titre_Page" et "$Partie_Page".

Que puis-je faire pour passer les tableaux en parametres afin que javascript me les prennes comme des tableau de valeurs ( chaines ) et non des chaines ($Titre_Page et $Partie_Page ) ???

En espérant avoir été assez claire dans ma demande,
Merci d'avance :)
Configuration: Windows XP
Firefox 2.0.0.2

8 réponses

  1. Merci du coup de main ;)
    cela ne me fais plus d'erreur sur l'appel de la fonction via php ( GG mek :p )
    mais.. car il y a un mais... ( hélas oui :X )
    j'ai un otre appel de cette fonction javascript entre les balise
    <SCRIPT>
    Dessine_Menu(".$Titre_Page.",".$Partie_Page.");
    </SCRIPT>

    pitite précision :
    1)
    J'ai un appel de cette fonction entre mes balise
    <BODY>
    //Creation du Menu Javascript
    $Menu='<DIV ID=menu_java></DIV><script language=javascript>Dessine_Menu("'.$Titre_Page.'","'.$Partie_Page.'");</script>';
    </BODY>
    2)
    Et un appel dans le javascript :
    <script>
    position_menu = -1;
    function Dessine_Menu(onglet_menu,onglet_lien)
    {

    position_menu = -1;
    affichage_menu = "<table width=130 height=30 border=0 cellpadding=0 cellspacing=0><TR><TD><TABLE BORDER=0 height=20 CELLPADDING=0 CELLSPACING=7 WIDTH=100%>";

    for(a=0;a<onglet_menu.length;a++)
    {
    if(position_menu == a || !document.getElementById)
    {
    bgcolor = "#6699CC";
    }
    else
    {
    bgcolor = "#006699";
    }
    if(document.getElementById)
    {
    affichage_menu += "<TR><TD><A HREF=\"#\" onMouseOver=\"position_menu="+a+";Dessine_Menu()\" CLASS=menu>"+onglet_menu[a]+"</A></TD></TR>";
    }
    else
    {
    affichage_menu += "<TR><TD>"+onglet_menu[a]+"</TD></TR>"
    }
    if(position_menu == a || !document.getElementById)
    {
    affichage_menu += "<TR><TD>"+onglet_lien[a]+"</TD></TR>";
    }
    }

    affichage_menu += "</TABLE></TD></TR></TABLE>";

    if(document.getElementById)
    {
    document.getElementById("menu_java").innerHTML = affichage_menu;
    }
    else
    {
    document.write(affichage_menu);
    }
    }
    /*Voici le deuxieme appel de la fonction qui pose encore Pb*/
    Dessine_Menu("'.$Titre_Page.'","'.$Partie_Page.'");
    </script>

    Merci @ tous ceux qui pouorront m'eclairer (..vers le lumiere eternelle.. oopss..je m'egare ^^ xD )
    2
    1. ne ecrivez pas $_post["gg"] entre " "
      1
      1. Contributeur
        Si tu souhaite appeller ta fonction javascript depuis php, voici la syntaxe :

        <?php
        
        echo '<script language="javascript">Dessine_Menu("'.$Titre_Page.'","'.$Partie_Page.'"); </script>';
        
        ?>
        


        En théorie ca devrait être bon :)
        0
        1. Bonjour,
          Je ne suis pas certain de comprendre mais il est certain que mettre le nom de la variable entre guillemets comme tu fais:
          Dessine_Menu("'.$Titre_Page.'","'.$Partie_Page.'"); 
          

          dit au javascript de prendre la chaîne de caractères au lieu de la variable. Dans des cas semblables, il faut écrire différemment pour que javascript voit que $Titre_Page est une variable. Par exemple:
          Dessine_Menu("+'.$Titre_Page.'+","+'.$Partie_Page.'+"); 

          ou
          Dessine_Menu($Titre_Page,$Partie_Page); 

          ou encore avec l'aide de la fonction eval().
          Ton probème semble être de transformer des valeurs MySql en variables javascript.
          J'espère que ça t'aide.
          Serge.
          0
          1. Re-Bonjour et merci de ta participation serge.
            Je n'est pas pu resoudre mon problème grace à ta solution et j'ai pencher pour un changement de facon de faire...Je ne passe plus de tableau ( php ) en parametre de ma fonction java, par contre je rempli des tableau java (via requete MySsql/PHP) les valeurs semble bien affecter a mes variables. mais une petite erreur doit subsister.

            Voici le code pour lequel j'ai obter :
            <HEAD>
            <script>
            onglet_menu= new Array();
            onglet_lien= new Array();
            <?
            $i=0;
            $Requete="Select P.Id_Page,P.Libelle_Page from page P";
            $query=Query($Requete);
            if (mysql_num_rows($query) > 0)
            {
            while ($data=mysql_fetch_array($query))
            {
            ?>
            onglet_menu[<?=$i;?>]=<?=$data['Libelle_Page'];?>;
            <?
            //Recherche des parties associées à cette page
            $Requete2="SELECT PA.Id_Partie,PA.Titre_Partie,PA.Description_Partie
            FROM partie PA,page_partie PP
            WHERE PP.Id_Page=".$data['Id_Page']."
            AND PP.Id_Partie=PA.Id_Partie";
            $query2=Query($Requete2);
            if (mysql_num_rows($query2) > 0)
            {
            $Lien="";
            while ($data2=mysql_fetch_array($query2))
            {
            $TargetLien='page-'.$data['Id_Page'].'-'.$data2['Id_Partie'].'-'.$data2['Titre_Partie'].'.html';
            $TitreLien=$data2['Titre_Partie'];
            $Lien.="<A HREF='".$TargetLien."'CLASS=menu>".$TitreLien."</A><BR>";
            }
            ?>
            onglet_lien[<?=$i;?>]=<?=$Lien;?>;
            <?
            }
            //incrementation du compteur
            $i++;
            }
            }
            //die ("Lien : ".$Lien);
            ?>
            //alert("ONGLET menu : "+onglet_menu[0]+"ONGLET Lien : "+onglet_lien[0]);
            position_menu = -1;
            function Dessine_Menu()
            {
            //alert("ONGLET menu : "+onglet_menu[0]+"ONGLET Lien : "+onglet_lien[0]);
            affichage_menu = "<table width=130 height=30 border=0 cellpadding=0 cellspacing=0><TR><TD><TABLE BORDER=0 height=20 CELLPADDING=0 CELLSPACING=7 WIDTH=100%>";

            for(a=0;a<onglet_menu.length;a++)
            {
            if(position_menu == a || !document.getElementById)
            {
            bgcolor = "#6699CC";
            }
            else
            {
            bgcolor = "#006699";
            }
            if(document.getElementById)
            {
            affichage_menu += "<TR><TD><A HREF=\"#\" onMouseOver=\"position_menu="+a+";Dessine_Menu()\" CLASS=menu>"+onglet_menu[a]+"</A></TD></TR>";
            }
            else
            {
            affichage_menu += "<TR><TD>"+onglet_menu[a]+"</TD></TR>"
            }
            if(position_menu == a || !document.getElementById)
            {
            affichage_menu += "<TR><TD>"+onglet_lien[a]+"</TD></TR>";
            }
            }

            affichage_menu += "</TABLE></TD></TR></TABLE>";

            if(document.getElementById)
            {
            document.getElementById("menu_java").innerHTML = affichage_menu;
            }
            else
            {
            document.write(affichage_menu);
            }
            }
            Dessine_Menu();
            </SCRIPT>
            </HEAD>

            avec en plus mon eternelle rappel a cette fonction entre balise <BODY>
            $Menu='<DIV ID=menu_java></DIV><script language=javascript>Dessine_Menu();</script>';
            <?=$Menu;?>
            </BODY>

            Si quelqun pouvait me debloquer.. car je pense toucher au but :P (NEED A SOLUTION :X )

            PS: lorsque je fait un die ("Lien : $Lien") , je voi egalement les valeur des tableau javascript (onglet_menu[0] et onglet_lien[0]) c pour sa que je sait qu'ils sont bien renseigné ;)
            0
            1. Voici ce que me donne le die ("Lien : ".$Lien) une fois décommenté :

              onglet_menu= new Array();
              onglet_lien= new Array();
              onglet_menu[0]=TEST PAGE;
              onglet_lien[0]=TEST TITRE PARTIE; (PS : Lien Actif et bien formater)
              Lien : TEST TITRE PARTIE (PS : Lien Actif et bien formater)
              0
              1. WOOOTTTTTTT j'ai trouver ma SOLUTION xD
                héhé :P
                un ti pe capricieux le javascript keu meme.. :X

                Voilou c sa :
                <HEAD>
                <script>
                onglet_menu= new Array();
                onglet_lien= new Array();
                <?
                $i=0;
                $Requete="Select P.Id_Page,P.Libelle_Page from page P";
                $query=Query($Requete);
                if (mysql_num_rows($query) > 0)
                {
                while ($data=mysql_fetch_array($query))
                {
                ?>
                onglet_menu[<?=$i;?>]='<?=$data['Libelle_Page'];?>';
                <?
                //Recherche des parties associées à cette page
                $Requete2="SELECT PA.Id_Partie,PA.Titre_Partie,PA.Description_Partie
                FROM partie PA,page_partie PP
                WHERE PP.Id_Page=".$data['Id_Page']."
                AND PP.Id_Partie=PA.Id_Partie";
                $query2=Query($Requete2);
                if (mysql_num_rows($query2) > 0)
                {
                $Lien="";
                while ($data2=mysql_fetch_array($query2))
                {
                $TargetLien="page-".$data['Id_Page']."-".$data2['Id_Partie']."-".Format_URL($data2['Titre_Partie']).".html";
                $TitreLien=strtolower($data2['Titre_Partie']);
                $Lien.="<A HREF=".$TargetLien."CLASS=\"menu\">".$TitreLien."</A><BR>";
                }
                ?>
                onglet_lien[<?=$i;?>]='';
                onglet_lien[<?=$i;?>]+='<?=$Lien;?>';
                <?
                }
                //incrementation du compteur
                $i++;
                }
                }
                ?>
                position_menu = -1;
                function Dessine_Menu()
                {
                affichage_menu = "<table width=130 height=30 border=0 cellpadding=0 cellspacing=0><TR><TD><TABLE BORDER=0 height=20 CELLPADDING=0 CELLSPACING=7 WIDTH=100%>";

                for(a=0;a<onglet_menu.length;a++)
                {
                if(position_menu == a || !document.getElementById)
                {
                bgcolor = "#6699CC";
                }
                else
                {
                bgcolor = "#006699";
                }
                if(document.getElementById)
                {
                affichage_menu += "<TR><TD><A HREF=\"#\" onMouseOver=\"position_menu="+a+";Dessine_Menu()\" CLASS=menu>"+onglet_menu[a]+"</A></TD></TR>";
                }
                else
                {
                affichage_menu += "<TR><TD>"+onglet_menu[a]+"</TD></TR>"
                }
                if(position_menu == a || !document.getElementById)
                {
                affichage_menu += "<TR><TD>"+onglet_lien[a]+"</TD></TR>";
                }
                }

                affichage_menu += "</TABLE></TD></TR></TABLE>";

                if(document.getElementById)
                {
                document.getElementById("menu_java").innerHTML = affichage_menu;
                }
                else
                {
                document.write(affichage_menu);
                }
                }
                Dessine_Menu();
                </script>
                <HEAD>

                rien a changer ds le <BODY></BODY>
                c'etai juste une histoire de quote et guillement pour ceux qui ne verrai pa la difference ;)
                la chaine est apparement interpreter differement selon que l'on utilise l'un ou l'autre.. ( les boules ^^ :$ )
                Merci a tous ceux qui ont essayer de me filer un coup de main ;)
                @ une prochaine (.... pour de nouveaux problème :/ mdr )
                ++ Developper bien & Have Fun xD
                0
                1. haha!
                  C'est une erreur courante. Faut pas oublier de séparer les chaînes des variables. Faut pas mettre des ' à l'intérieur de '. Faut séparer les " des ', quoi. Et faire attention aux apostrophes dans une chaine de texte dans une variable.
                  Serge.
                  0