Lancement de script via la balise <a href= >

Bonjour,

J'ai un petit souci dans mon code. J'essaye de faire ça :

<a href="#" onclick="javascript:infoChamp(<?php echo $nom_champ ?>)"> <?php echo $nom_champ ?> </a>



mon script :


function infoChamp(value)
{ 

									alert('TEST');

    var xhr; 
    try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   }
    catch (e) 
    {
        try {   xhr = new ActiveXObject('Microsoft.XMLHTTP'); }
        catch (e2) 
        {
           try {  xhr = new XMLHttpRequest();  }
           catch (e3) {  xhr = false;   }
         }
    }
 
    xhr.onreadystatechange  = function() 
    { 
       if(xhr.readyState  == 4)
       {
        if(xhr.status  == 200) 
            document.ajax.dyn="Received:"  + xhr.responseText; 
        else 
            document.ajax.dyn="Error code " + xhr.status;
        }
    }; 
	
var nom_champ;
nom_champ=value;
var nom_champ = encodeURIComponent(nom_champ);

xhr.open( "GET", "data_liste_table.php?nom_champ",  true); // recupere la liste des tables contenant le champs choisi

xhr.send(null); 

var liste_table = JSON.parse(xhr.responseText);
	
} 



Le Gros problème c'est que mon script ne se lance pas, je n'ai même pas l'affichage de l'alerte.

10 réponses

  1. Ce qui est surprenant c'est que l'alerte fonctionne si je le lance directement dans la balise

    
     <a href="#" onclick="javascript:alert('TEST')"> <?php echo $nom_champ ?> </a>
    
    


    J'ai bien entendu essayé d'écrire mon appel de script sous cette forme :

    
    <a href="javascript:infoChamp(<?php echo $nom_champ ?>)"> <?php echo $nom_champ ?> </a>
    
    


    ça ne fonctionne pas non plus.

    Une précision supplémentaire, ma balise est dans une boucle for.
    1. Personne n'a une petite idée d'où pourrais venir le problème ?

      Je bloque sur un autre appel de fonction java script (qui également ne se lance pas).

      Quelqu'un serait il en mesure de m'aider s'il vous plait ?
      1. bonjour ,
        essyez de mettre des " ' " avant les balises PHP <? ?>

        <a href="#" onclick="javascript:infoChamp('<?php echo $nom_champ ?>')"> <?php echo $nom_champ ?> </a>
        1. Contributeur
          Bonjour,

          Essaye comme ça :

          <?php 
             echo('<a href="#" onclick="javascript:infoChamp(\''.$nom_champ.'\')"> '.$nom_champ.'</a>');
          ?>
          1. Toujours pas.

            J'avoue que je bloque complétement sur ce problème, je suppose que sa doit être un problème de syntaxe ...
            1. Contributeur
              Et si à la place du PHP tu rentres directement le bon paramètre dans l'appel de ta méthode javascript, ça marche ?
            2. l'alerte fonctionne lorsque je la lance comme suis :
              <a href="#" onclick="javascript:alert('TEST')"> <?php echo $nom_champ ?> </a>
            3. Contributeur
              Oui mais remplaçant le "alert" par infoChamp avec un paramètre valide ?
            4. non, j'ai remplacé le echo par le nom d'un champ, mais lorsque je clique sur mon lien je n'ai toujours pas le message d'alerte TEST qui s'affiche ...
            5. Contributeur
              Et en virant le "javascript : " ?
              onclick="infoChamp('monparametre');"
          2. Je vous donne l'intégralité de mon code, c'est assez lourd, désolé.

            
            <!DOCTYPE html> 
            <?php  
            session_start();  
            // set_time_limit(0); // permet de ne plus limiter le timeout du navigateur 
            $nom_table="VTR_UG"; 
            ?>        
            
            <html> 
            <head> 
            
             <!-- <?php echo $_SERVER['PATHEXT']; ?> permet de verifier si java script est activé (cf js ou jse )  --> 
            
             <title>Vue Cascade </title> 
            
            <link rel="STYLESHEET" href="style.css" type="text/css"/> 
            
            <!--[if lt IE 9]> 
               <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> 
               <![endif]-->  
                  <!-- Permet de faire fonctionner le HTML 5 même dans un navigateur ancien --> 
            
            
            <script type="text/javascript"> 
            
            function infoChamp(value) 
            {  
            
                     alert('TEST'); 
            
                var xhr;  
                try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   } 
                catch (e)  
                { 
                    try {   xhr = new ActiveXObject('Microsoft.XMLHTTP'); } 
                    catch (e2)  
                    { 
                       try {  xhr = new XMLHttpRequest();  } 
                       catch (e3) {  xhr = false;   } 
                     } 
                } 
              
                xhr.onreadystatechange  = function()  
                {  
                   if(xhr.readyState  == 4) 
                   { 
                    if(xhr.status  == 200)  
                        document.ajax.dyn="Received:"  + xhr.responseText;  
                    else  
                        document.ajax.dyn="Error code " + xhr.status; 
                    } 
                };  
              
             var nom_champ; 
             nom_champ=value; 
             var nom_champ = encodeURIComponent(nom_champ); 
             xhr.open( "GET", "data_liste_table.php?nom_champ",  true); // recupere la liste des tables contenant le champs choisi 
             xhr.send(null);  
             var liste_table = JSON.parse(xhr.responseText); 
              
            }  
            
            
            
            function redirection() { 
            nom_table=document.getElementById("value"); 
            
            <?php $_SESSION['nom_table'] = $_GET['nom_table']; ?> 
            
            window.location.replace("vue_cascade.php"); 
            } 
            
            
            
            </script> 
            
            
            
            </head> 
              
            <body class="page"> 
              
            
             <div id="header"> 
              <!-- Bienvenue <?php 
              echo' '. $_SESSION['Nom'].' '. $_SESSION['Prenom'].''; ?> --> 
             </div> 
               
            
             <div id="menu"> 
              <h1> Menu </h1><br /> 
              <a href="page_centrale.php">Page Centrale</a><br/><br/> 
              <a href="vue.php">Vue</a><br/><br/> 
              <a href="role_schema.php">Role et Schema</a><br/><br/> 
               
             </div> 
               
            
            
             <div id="deconnexion"> 
              <form action="deconnexion.php"> 
              Vous êtes connecté en tant que <!-- <?php echo $_SESSION['login']; ?> -->.<br/> 
              <input class="submit" type="submit" name="Deconnexion" id="Deconnexion" value="Deconnexion"/><br/> 
              </form> 
             </div> 
              
            
              
              
             <div id="corps"> 
              <h2> Vue Cascade </h2><br/> 
               
            
            
               <div id="cadre_gauche"> 
                <table cellspacing="3" cellpadding="2"> 
              
                 <tr> 
                 <td><h3>Nom Table: <?php echo $nom_table ?></h3></td> <!-- Aller chercher le Nom de la Table selectionné --> 
                 </tr> 
                
                 <tr>    
                  <td>   <!-- Créer un volet déroulant regroupant l'ensemble des Tables Vue , Afficher le nom de la table préselectionné directement dans le volet deroulant --> 
                   <select name="liste" onchange="redirection(this.value)" > 
            
                   <?php  
                      
                   include("connexion_DWH.php");        // connexion a la Bdd 
                    
                   $resource_nbr_table=odbc_exec($connexion,"Select count( distinct table_name ) from user_tab_privs where grantee = 'USR_DWH_FRANCE' and privilege = 'SELECT'and table_name not like 'BIN%'" ); 
            
                    odbc_fetch_into ($resource_nbr_table, $result_array_1 ); 
                    
                   $nbr_table=$result_array_1{0};   // nombre de Tables Vue 
                    
                    
                   $resource_nom_table_menu_deroulant = odbc_exec($connexion,"Select distinct table_name from user_tab_privs where grantee = 'USR_DWH_FRANCE' and privilege = 'SELECT'and table_name not like 'BIN%' GROUP by table_name order by table_name" ); 
                          
                  
                      
                      
                      
                  if (!$connexion) {            // verification de la connexion a la Bdd 
                   ?> <script type="text/javascript"> 
                     //window.location.replace("index.php"); 
                     alert('Erreur de connexion à la Base de données.'); 
                     </script> 
                    <?php 
                      ;} 
            
                   else { 
            
                    for ($i=0;$i<$nbr_table;$i++)  { 
                           
                           
                          odbc_fetch_into ($resource_nom_table_menu_deroulant, $result_array_2_5,$i+1 ); 
            
                          odbc_fetch_into ($resource_nom_table_menu_deroulant, $result_array_2, $i ); 
            
                          $nom_table_menu_deroulant_1= $result_array_2{0} ; 
                          $nom_table_menu_deroulant_2= $result_array_2_5{0} 
                           
                          // tableau qui rescence l'ensemble des vues accessibles par cet utilisateur  
                           
                    ?> 
            
                       <option value="<?php echo $nom_table_menu_deroulant_1 ?> <?php if ($i<nbr_table-1 and $nom_table_menu_deroulant_1==$nom_table) {echo ('selected="selected"');} ?> > <?php echo $nom_table_menu_deroulant_1 ?>            
            
            <!-- Affiche dans le menu déroulant l'ensemble des Tables Vues présentes dans la Bdd et effectue une redirection lors d'un changement de table , préselectionner la table déja choisis par l'utilisateur --> 
                       
            
            <option value="<?php echo $nom_table_menu_deroulant_2 ?> <?php if ($nom_table_menu_deroulant_2==$nom_table) {echo ('selected="selected"');} ?> > <?php echo $nom_table_menu_deroulant_2 ?>  
                      
                     <?php 
                            ;} 
                     ;}        
                     ?> 
                   </select>  
                  </td> 
                 </tr> 
                 <!-- Lister l'ensemble des Champs contenu dans la Table selectionné --> 
                  <tr> 
                  <td> 
                   <?php 
                    
                   $resource_nbr_champ=odbc_exec($connexion,"SELECT count(*) FROM user_tab_columns WHERE table_name ='" . $nom_table . "'");
             
                        odbc_fetch_into ($resource_nbr_champ, $result_array_3 ); 
                   $nbr_champ=$result_array_3{0};       
              //calcul du nombre de champs de la table selectionné 
                    
                  
                   $resource_nom_champ=odbc_exec($connexion,"Select distinct COLUMN_NAME FROM user_tab_columns WHERE table_name ='".$nom_table."'GROUP by COLUMN_NAME" ); 
                         // Recuperation dans un tableau de l'ensemble des champs relatif a la vue selectionné 
                  
                    
                   if (!$connexion) {           // verification de la connexion a la Bdd 
                    ?> <script type="text/javascript"> 
                     //window.location.replace("index.php"); 
                     alert('Erreur de connexion à la Base de données.'); 
                     </script> 
                     <?php 
            
                   } else { 
            
                    for ($j=0;$j<$nbr_champ;$j++) {  
                         
                         
            
                     odbc_fetch_into ($resource_nom_champ, $result_array_4, $j ); 
                     $nom_champ=$result_array_4{0};     
                
            
                     
                 ?>
            
             <a href="#" onclick="javascript:infoChamp('<?php echo $nom_champ ?>')"> <?php echo $nom_champ ?> </a> </br> 
            
            <?php  // <!-- Affichage de tous les champs de la Table selectionné --> 
                           } ; 
                         $nom_champ=''; 
                     } 
                      ?>  
                     
                  </td> 
                 </tr> 
                  
            
               </table> 
                  
               </div> 
               <div id="cadre_droite"> 
                <!-- <INPUT type="text" name="dyn"  value=""> --> 
            
               </div> 
                
               <div id="cadre_bas"> 
                <h4>Informations relatives au champ <?php echo $nom_champ ?> :</h4> 
            
                 
               </div> 
                
             </div> 
              
             <div id="footer"> 
              <p style="text-align: right;"><a href="admin_contact.php">Contact</a></p> 
             </div>  
              
             </body> 
             </html>  
            
            
            1. Contributeur
              Tu devrais installer le plugin "Firebug" sous Mozilla et faire tourner ton site dessus ; Firebug te sortira les erreurs Javascript s'il y en a.
              1. Arrête moi si je me trompe, Firebug affiche le code source de la page en cours, et affiche en surligné jaune d'éventuelles erreurs de syntaxe ?

                Si c'est bien ça, je n'ai pas d'erreur sur le code concerné par ma demande ...

                Je désespère de comprendre pourquoi je n'arrive pas à appeler de fonction javascript ...
                C'est la première fois que j'ai un tel problème , j'ai même vérifié si JS était bien activé sur le navigateur via la commande :

                <?php echo $_SERVER['PATHEXT']; ?>
                1. Contributeur
                  Firebug a normalement un onglet "Console" dans lequel apparaissent les erreurs JS
                2. Oui, et sa vient de me permettre de trouver mon erreur !
                  J'avais une erreur dans une autre fonction js , ce qui bloquait tout le reste.

                  Merci beaucoup Mihawk !
                3. Contributeur
                  De rien :)