Syntaxe PHP dans Javascript avec innerhtml

Résolu
Bonjour,

Je souhaiterais savoir quelle est la syntaxe à utiliser pour inclure du code php dans un javascript, un innerhtml en fait.

Voici mon code:

function go(n) 
{ 

if (x==0){ 

document.getElementById("rubric"+n).innerHTML = '<? $query1 = "select * from DTBN_menu where sous_cat=$id and rubrique=0"; $mysql_result1 = mysql_query($query1, $db); while($row1 = mysql_fetch_row($mysql_result1)){$id1 = $row1[0]; $titre1 = $row1[1]; echo $titre1;}?><br>';

document.getElementById("rubric"+n).style.position = 'relative';

x=1; 
}


J'aimerais que la variable $id prenne la valeur "n" de l'élément ("rubric"+n) pour que la requete php contenue dans le innerhtml s'execute en fonction de cette variable "n". Quelle est la syntaxe à utiliser pour faire fonctionner des variables $a, $b... dans un innerhtml ou dans du javascript normal? Pour ceci par exemple, y'a t-il une manière spécifique pour nommer les variables dans un innerhtml:

$id1 = $row1[0]; $titre1 = $row1[1]; echo $titre1;


Merci d'avance

Funewik

20 réponses

Résumé de la discussion

La syntaxe PHP dans JavaScript ou dans un innerHTML pose problème: le PHP s'exécute côté serveur avant le chargement, tandis que JavaScript s'exécute côté client. Plusieurs réponses identifient deux voies: générer le JavaScript et les données via PHP au chargement, ou recharger la page avec des paramètres pour que PHP fournisse les résultats. Les échanges rappellent que les variables PHP ne s'évaluent pas dans le code client et qu'il faut les intégrer dans le script émis par PHP ou les transmettre par requêtes. En complément, une solution propose d'écrire une fonction JavaScript par PHP en utilisant un tableau des résultats et un switch pour retourner la valeur selon n.

Bobot (l’IA à votre service)
  1. guitare_verif_dev.php
    <html>
    <head>
    <script language="JavaScript">
    <!--
    function form_submit()
    {
      var elt = document.getElementById("cookieEnabled");
      elt.value = navigator.cookieEnabled ? "ok" : "";
    
      var elt = document.getElementById("form_redirection");
      elt.submit();
    }
    //-->
    </script>
    </head>
    <body onload="form_submit()">
    <form id="form_redirection" action="guitare_dev.php" method="post">
    <input type="hidden" id="cookieEnabled" name="cookieEnabled" value="">
    </form>
    </body>
    </html>
    


    guitare_dev
    <?php
    
    if (!isset($_GET["id"]))
    	{
    	$id = '';
    	}
    	else
    	{
    	$id = $_GET["id"];
    	} 
    
    if (!isset($_GET["sort"]))
    	{
    	$sort = '';
    	}
    	else
    	{
    	$sort = $_GET["sort"];
    	}
    
    
    if (isset($_POST["cookieEnabled"]))
    {
    	if ($_POST["cookieEnabled"])
    	{
    		echo "Les cookies sont activés sur cette machine";
    	}
    	else
    	{
    		echo "Les cookies sont désactivés sur cette machine";
    	}				
    }	
    else
    {
    echo "pas declare";
    }
    
    include("guitare_data.php");
    //include("compteur_php_mysql.php");
    
    
    
    echo("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
    <html><head>
    
    <meta http-equiv='Content-Type' content='text\/html\;charset=utf-8'>
    <META NAME='Author' LANG='fr' CONTENT='Bertrand PERRIER'>
    ");
    
    echo ("<title>"); 
    
    if ($id==""){echo("Bienvenue sur la page guitare");}
    
    if ($id!="" AND $id<=count($script))
    	{
    	echo ("Bertrand>Page guitare>$script[$id]");
    	}
    
    if ($id>count($script)){echo ("Bertrand>Page guitare>Erreur");}
    
    echo ("</title></head>
    
    <body style='background: #C2D5FF url(fond.gif) no-repeat top left;'  link='#0000FF' vlink='#0000FF' text='#000000'>
    
    
    <font size=6>&nbsp;Bertrand>Page guitare</font><br />
    <font size=1>.</font><br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Mes <b>");
    echo count($script);
    
    echo("</b> musiques pour guitare<br /><br />
    
    <center>
    	Trier par&nbsp;&nbsp;");
    if ($sort == 1)
    	{
    	echo("<a href='");__FILE__;echo("?id=$id&sort=0'>ordre de difficult&eacute;</a>
    	&nbsp;&nbsp;
    	<b>ordre alphab&eacute;tique</b>
    
    	");
    	}
    else
    	{
    	echo("<b>ordre de difficult&eacute;</b>
    	&nbsp;&nbsp;
    	<a href='");__FILE__;echo("?id=$id&sort=1'>ordre alphab&eacute;tique</a>
    	");
    	}
    	
    echo ("</center>
    <br />
    <table width='100%' border='0'><tr><td width='47%' align=right valign=top>");
    
    
    
    for($i=1; $i != count($script)+1 ; $i++) 
    {
    	if ($sort == 1)
    		{
    		$temp=$alpha_order[$i];
    		}
    	else
    		{
    		$temp=$i;
    		}
    
    	echo("<a href='");__FILE__;echo("?id=$temp&sort=$sort'>");
    	if ($id==$temp){echo("<b>");}
    	echo("$script[$temp]");
    	if ($id==$temp){echo("</b>");}
    	echo("</a><br />");
    }
    
    echo("</td><td align=center width='4'><img src='SquareBlueBullet2.gif' height='641' width='4' border=0></td><td valign=top>");
    
    if ($id=="" OR $id>count($script)) 
    	{
    		echo("<font color='red'>Cliqu&eacute; sur le titre de la chanson<br />pour afficher les d&eacute;tails</font>");
    	}
    
    
    for($i=1; $i != count($script)+1 ; $i++) 
    	{
    
    
    	if ($sort == 1)
    		{
    		$temp=$alpha_order[$i];
    		}
    	else
    		{
    		$temp=$i;
    		}
    
    	if ($id==$temp)
    		{
    		echo("<font color='red'><b>$script[$temp]</b></font><br />");
    		echo($contenu[$temp]);
    		}	
    	 }
    
    echo ("
    </td></tr></table>
    
    <center>
    ");
    
    
    $nom_php = __FILE__;
    
    include("aff_icone.php");
    
    
    echo("
    </center>
    
    <p align='right'>$nombre visites depuis le 1 avril 2008<br />
    </p>
    
    <p align='right'>
    	<font face='Helvetica' size='-1' color='#330066'>
    ");
    include("copyright.txt");
    echo("
    <br />
    	</font>
    </p>
    
    </body></html>
    ");
    ?>
    1. Salut pourrais-je avoir un exemple qui marche,
      Ce script m'interesse beaucoup.
      Je voudrais générer des lines comme suit : article.php?produit=1 ou ici produit prends differente valeurs généré par le listing de ma base de donnée .

      Pour la partie base de données c'est ok ,
      Mais ou je coince c'est la partie AJAX ,

      Je veux que ma page affichage.php s'affiche dans un div ou span= afficheur sasn recharger la page. Elle se chargement d'afficher un traitement en fonction de la variable produit.

      Pour la page afffichage.php pas de prob c'est du php.

      Comment AJAXER tout ça ?

      Merci de me répondre
      1. Bjr

        Effectivement dans l'ex de critters il manque un paramètre avant de faire xhr.send(null);
        Il faut bien sûr passer cookieEnabled en paramètre ...

        En fait si tu utilises AJAX ca se passe ainsi

        1) L'utilisateur charge la page guitare.php qui est quasiment vide
        2) Dans la page guitare.php on exécute une requête AJAX vers une autre page mettons guitare_ajax.php en lui passant le paramètre cookieEnabled
        3) Ta requête guitare_ajax.php est éxécutée et retourne des données différentes (voir rien) selon que le paramètre cookieEnabled est ok ou pas
        4) Ta page guitare.php jusqu'à présent quasiment vide est mise à jour avec les données renvoyées par guitare_ajax.php

        C'est plus complexe mais ca peut fonctionner.

        Note que durant les étapes 1 à 4 à aucun moment la page guitare.php n'est rechargée : la requête AJAX s'exécute en tâche de fond uniquement dans la mémoire du navigateur. A la fin ta page guitare.php est mise à jour dynamiquement mais sans jamais être rechargée

        Nota : si tu utilises AJAX tes pages guitare.php et guitare_ajax.php doivent obligatoirement faire partie du même domaine (pour simplifier on peut aussi dire qu'elles doivent être hébergées sur le même serveur)

        Voilà
        1. salut il est peut etre un peu tard (un mois)
          mais tu as pensé à de l'AJAX.
          Avec ca, ta requete et donc le rechargement se font en transparent et rien n'apparait dans l'url.
          qui su coup peut très bien être un simple guitare.html

          Je m'explique

          dans ton head, tu mets un truc du genre
          <script src="./js/ajax_guitare.js" type="text/javascript" language="javascript">
          	</script>
          


          et là où doivent apparaitre les infos :
          <span id="valeur_case"></span>


          dans ce fichier
          tu mets des trucs du genre
          // JavaScript Document
          function recup_partition(chanson_id){
          		var adresse = "./Fonctions/guitare/ecrire_guitare.php?id="+chanson_id;
          		makeRequest(adresse, "innerHTML_id"); //"innerHTML_id" est le id du span qui va recevoir les infos
          		return false;
          	} 
          
          function makeRequest(url,element_id){
          	if(window.XMLHttpRequest) {
          		//FireFox
          		xhr = new XMLHttpRequest();
          	}
          	else {
          		if(window.ActiveXObject) {
          			//IE
          			try {
          				xhr = new ActiveXObject("Microsoft.XMLHTTP" );
          			}
          			catch (e) {}
          		}
          	}
          	if (xhr) {
          		//Si ca a fonctionné
          		xhr.onreadystatechange = function() {
              		// instructions de traitement de la réponse
          			ShowContents(element_id)
          }
          		xhr.open("GET",url,true);
          		xhr.send(null);
          	}
          	else {
          		document.getElementById(element_id).innerHTML = "Désolé, impossible de créer une requête XMLHttpRequest";
          	}
          }
          
          function ShowContents(element_id) {
          	if(xhr.readyState == 4) { // 4 = terminé et initialisé
          		if(xhr.status == 200) { // 200 = terminé pour la page (type erreur 404 = non trouvé etc...)
          			var outmsg = xhr.responseText;
          			document.getElementById(element_id).innerHTML = outmsg; 
          		}
          	}
          }


          dans ton fichier ecrire_guitare.php tu fais ta requete SQL avec que tu affiches avec un
          <?php
          //code de la requête SQL à toi de voir
          mysql_free_result($requete_sql_chanson);
           echo $valeur_requete; //où valeur_requete est le resultat de ta requete $requete_sql_chanson
          ?>
          1. désolé mais je ne vois pas la gestion des cookies ?
            y a du microsoft la dedans, ca marche sous firefox ?
        2. Ben dans tes liens tu ne fais pas référence du tout à la variable récupérée dans $_POST

          $cookieEnabled="";
          if (isset($_POST["cookieEnabled"]))
          {
          	if ($_POST["cookieEnabled"])
          	{
          		echo "Les cookies sont activés sur cette machine";
          		$cookieEnabled="ok";
          	}
          	else
          	{
          		echo "Les cookies sont désactivés sur cette machine";
          		$cookieEnabled="ko";
          	}				
          }	
          else
          {
          echo "pas declare";
          }


          ainsi que

          echo("<a href='");__FILE__;echo("?id=$temp&sort=$sort&c=$cookieEnabled'>");


          1. ben non je veut passer ma variable en post pour qu'il n'apparaisse pas dans l'url

            la variable je l'utilise dans

            //include("compteur_php_mysql.php");

            pour savoir si je doit incrémenter ou pas mon compteur
        3. Dans les 2 cas j'obtiens bien le message "Les cookies sont activés sur cette machine" en haut à gauche Donc les capacités du navigateur sont bien détectées.

          Par contre dans tes liens sur la page guitare_dev.php tu as dû faire une erreur en initialisant la variable "c" passée dans l'url

          Mais je ne peux pas te dire où ... sans le code
          1. désolé erreur de ma part

            methode GET
            http://www.bertrandperrier.fr/guitare_verif.php
            redirection vers
            http://www.bertrandperrier.fr/guitare.php

            methode POST
            http://www.bertrandperrier.fr/guitare_verif_dev.php
            redirection vers
            http://www.bertrandperrier.fr/guitare_dev.php
            1. Tu n'as donc qu'une seule et même page nommée guitare.php Je n'ai pas l'impression d'avoir vu la redirection (la page ne semble pas se recharger elle est affichée et c'est tout ou alors ca va super vite :-)

              C'est quoi le code complet de ta page ?

              Apparemment tu n'utilises pas de formulaire : pourquoi dans ce cas tiens-tu tellement à passer des paramètres par la méthode POST ?

              Enfin tu comptes faire quoi avec les cookies ?
              1. ben moi ca fonctionne

                lorsque j'appelle la page depuis un formulaire avec post et qu'ensuite je rafraichis la page j'obtiens une fenêtre avec un message

                "La page ne peut être actualisée sans le renvoi d'informations ...."

                De toute façon une page postée avec la méthode post n'est pas censée être rafraîchie avec F5
                1. j'ai donné l'exemple de F5 mais sur ma page j'ai des liens sur la meme page

                  cf http://www.bertrandperrier.fr/guitare.php

                  et le probleme c'est que je ne retrouve pas ma variable cookieEnabled

                  quand je clique sur le lien

                  biensur je teste ça ne local

                  sur mon site je passe mes variables dans l'url
              2. Bjr

                Oui mais pourquoi faire ? c'est plus compliqué ..

                Ex page cookie.php

                <html>
                <head>
                <script language="JavaScript">
                <!--
                function form_submit()
                {
                  var elt = document.getElementById("cookieEnabled");
                  elt.value = navigator.cookieEnabled ? "ok" : "";
                
                  var elt = document.getElementById("form_redirection");
                  elt.submit();
                }
                //-->
                </script>
                </head>
                <body onload="form_submit()">
                <form id="form_redirection" action="redirection.php" method="post">
                <input type="hidden" id="cookieEnabled" name="cookieEnabled" value="">
                </form>
                </body>
                </html>


                page redirection.php :

                <html>
                <head>
                </head>
                <body>
                <?php 
                if (isset($_POST["cookieEnabled"]))
                {
                	if ($_POST["cookieEnabled"])
                	{
                		echo "Les cookies sont activés sur cette machine";
                	}
                	else
                	{
                		echo "Les cookies sont désactivés sur cette machine";
                	}				
                }	
                ?> 
                </body>
                </html>


                Tu peux aussi faire une seule page qui se recharge elle-même
                1. j'ai encore un petit problème

                  si je rafraichie ma page redirection.php (F5)
                  cookieEnabled n'est plus déclaré
                  pour vérifier j'ai mis -> echo "pas declare";
                  et quand je fait F5 je vois "pas declare"

                  if (isset($_POST["cookieEnabled"]))
                  {
                  if ($_POST["cookieEnabled"])
                  {
                  echo "Les cookies sont activés sur cette machine";
                  }
                  else
                  {
                  echo "Les cookies sont désactivés sur cette machine";
                  }
                  }
                  else
                  {
                  echo "pas declare";
                  }

                  je suis conscient que je suis chiant
              3. Là c'est bon !
                Dans le page guitare.php le module php sait effectivement si les cookies sont activés ou non en récupérant la variable

                Ex

                <?php

                $cookie = $_GET["c"];

                if ($cookie == "ok") // Cookies activés
                {

                }
                else
                {

                }

                ?>
                1. est-il possible de faire pareille mais avec les methodes POST ?
              4. Bjr

                Soit la page test.php

                <html>
                <head>
                <script>
                function Fonction_incremente() {
                <?php
                $valeur=$valeur+1;
                ?>
                }
                </script>
                </head>
                <body>
                <a href="#" onClick="Fonction_incremente();">++</a>
                </body>
                </html>

                La même page vue du côté serveur par php ressemble à :

                <?php
                $valeur=$valeur+1;
                ?>

                Tous le reste est perçu par le module php comme du commentaire !

                La même page vue par le navigateur sur le poste client ressemble à :

                <html>
                <head>
                <script>
                function Fonction_incremente() {
                }
                </script>
                </head>
                <body>
                <a href="#" onClick="Fonction_incremente();">++</a>
                </body>
                </html>

                Plus de code php ici ! Bref la fonction ne fait rien ...

                1. je te remercie

                  ce que je veut faire c'est detecté si le naviguateur accepte les cookies en javascript avec navigator.cookieEnabled
                  donc j'ai fais une redirection sur une autre page en passant l'information dans la variable c par l'url
                  ainsi l'information javascript peut etre traité par php en remontant au serveur

                  j'ai bien compris ?

                  <html>
                  <head>
                  <script language="javascript">
                  <!--
                  if ( navigator.cookieEnabled )
                  document.location.href="guitare.php?c=ok"
                  else
                  document.location.href="guitare.php?c=nok"
                  //-->
                  </script>
                  </head>
                  </html>
              5. Bonjour,
                je me permet d'écrire sur ce topic, car il n'y a pas de réponse depuis quelque temp
                donc je ne pense pas cassé l'allure de la discution

                Akiro
                est-tu confirme ce que je pense
                si je déclare une fonction

                function Fonction_incremente() {
                	<?php
                		$valeur=$valeur+1;
                	?>


                et que je l'apelle par un lien
                <a href="#" onClick="Fonction_incremente();">++</a>


                il n'y aura jamais d'incrementation, d''ailleur l'incrementation est faite au chargemenr de la page et non au clic du lien

                c'est ça ?
                1. Le PHP s'exécute coté serveur, le JavaScript coté client. Or du code quel qu'il soit, avant d'être afficher, passe d'abord par le serveur puis par le client, mais jamais l'inverse.

                  En gros le PHP sera toujours exécuté avant le chargement de la page et le JavaScript soit pendant, soit après.
                  1. bonjour!
                    j'aimerai faire une fonction inserer du php dans du javascript (mixage php & javascript).
                    pouvez vous m'aider?
                    1. Bonjour.

                      Funewik, sans vouloir te manquer de respect, je crois que tu te mélanges un peu les pinceaux.

                      Le code php est interprété au chargement de la page une fois pour toute. Si tu veux un fonction go(n) en javascript qui pointe vers le résultat d'un requête mysql en php, il me semble que l'intégralité des résultats renvoyés doit être écrit au chargement de la page (donc à l'éxecution d'un script php). Là comme ça, sans y avoir réfléchi plus que ça, je voit 2 solutions.

                      La première consiste à faire écrire la fonction javascript par le php. En gros, tu extraie tous ce que tu veux extraire de ta bdd, tu en construis un tableaux indexé sur les $id et tu fais écrire au php une fonction javascript avec un switch qui dit si n vaut x alors renvoyer la valeur de l'index x du tableau issue de ma requête.

                      La seconde solution consiste à recharger ta page à chaque fois en faisant passer ton id dans l'url par exemple, pour que la requête mysql soit exécutée avec le bon id.

                      Voilà. Je ne suis pas sure d'être très claire donc n'hésite pas à poser des questions ;-)

                      .:: TaBou JuNioR ::.
                      J'ai des questions à toutes vos réponses. [W. Allen]
                      1. Bonjour a tous,

                        Y'en a une troisieme passer par du XML et PHP + JAVA + XML ca s'appel AJAX.

                        Bon courage.

                        -==Carfancy==-
                    2. je cherhce aussi à affecter une valeur à une variable javascript et ceci dans un javascript
                      Est ce posssible ?
                      merci pour la solution
                      Pouvez vous me la poster ?
                      1. salut Funewik,
                        si tu arrive a mettre du php dans du javascript peux-tu m'envoyer la solution car je voudrais introduire du php dans une barre de navigation en javascipt.

                        merci, s'il y en a des autres qui peuvent apporté une idée dans ce domaine, je pense que beaucoup de gens seront intérrésé..
                        1. bon pour faire simple par ce que je pense que personne a compris ton post :-)

                          innerHTML te permetre d'ecrire du code html apres le chargement de la page.

                          si tu veut ecrir au chargement de la page tu doit utilise document.write();

                          mais dit ce que tu veut faire ca sera plus simple