Lancement de script via la balise <a href= >

tanis -  
Mihawk Messages postés 4753 Statut Contributeur -
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. tanis
     
    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.
    0
  2. tanis
     
    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 ?
    0
  3. ily
     
    bonjour ,
    essyez de mettre des " ' " avant les balises PHP <? ?>

    <a href="#" onclick="javascript:infoChamp('<?php echo $nom_champ ?>')"> <?php echo $nom_champ ?> </a>
    0
  4. tanis
     
    Merci mais ça ne solutionne pas le problème :/ .
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mihawk Messages postés 4753 Statut Contributeur 846
     
    Bonjour,

    Essaye comme ça :

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

    J'avoue que je bloque complétement sur ce problème, je suppose que sa doit être un problème de syntaxe ...
    0
    1. Mihawk Messages postés 4753 Statut Contributeur 846
       
      Et si à la place du PHP tu rentres directement le bon paramètre dans l'appel de ta méthode javascript, ça marche ?
      0
    2. tanis
       
      l'alerte fonctionne lorsque je la lance comme suis :
      <a href="#" onclick="javascript:alert('TEST')"> <?php echo $nom_champ ?> </a>
      0
    3. Mihawk Messages postés 4753 Statut Contributeur 846
       
      Oui mais remplaçant le "alert" par infoChamp avec un paramètre valide ?
      0
    4. tanis
       
      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 ...
      0
    5. Mihawk Messages postés 4753 Statut Contributeur 846
       
      Et en virant le "javascript : " ?
      onclick="infoChamp('monparametre');"
      0
  8. tanis
     
    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>  
    
    
    0
  9. Mihawk Messages postés 4753 Statut Contributeur 846
     
    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.
    0
  10. tanis
     
    Ok je vais faire ça et je vous tient au courant.

    merci
    0
  11. tanis
     
    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']; ?>
    0
    1. Mihawk Messages postés 4753 Statut Contributeur 846
       
      Firebug a normalement un onglet "Console" dans lequel apparaissent les erreurs JS
      0
    2. tanis
       
      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 !
      0
    3. Mihawk Messages postés 4753 Statut Contributeur 846
       
      De rien :)
      0