afficher le détail d'une cellule dans une infobulle

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : afficher le détail d'une cellule dans une infobulle

par Truc » 28 juil. 2007, 17:18

Ben c'est son propre code remis en ordre, il ne devrait pas être trop perturbé me semble :-k
Enfaite je ne suis pas sur qu'il ait remarqué tes changements.
Les id des div dynamique et l'emploi du modulo qui reprend son $i qui variait entre 0 et 1 or ici il sert justement pour avoir des div uniques... enfin bref :wink:

Pour le [Résolu] tu ne peux le faire toi même puisque tu as posté ton 1er message en tant qu'invité.

par martial » 28 juil. 2007, 17:13

Bien que je ne sois pas perturbé du tout, je ne trouve pas la mention "RESOLU" en haut à gauche?
car grace à vous mon probléme est resolu mais j'aimerais en informer tout le monde!!!

ce qu'il faut retenir ce n'est pas l'echec mais la leçon (Proverbe Chinois)

par martial » 28 juil. 2007, 17:10

Milles Mercis ça marche...En fait je confirme je suis un cochon...qui débute!!!
Quant au code il a déjà été remanié par un "mammouth" au mois de mars (voir un de mes premiers messages sujet: recherche des quatre derniers caractéres d'une chaine)

par Cyrano » 28 juil. 2007, 17:08

Ben c'est son propre code remis en ordre, il ne devrait pas être trop perturbé me semble :-k

par Truc » 28 juil. 2007, 17:06

Teste ça et reviens demander des explications si un point t'échappe.
Il y aura forcément des points qui vont lui échapper.
Excuse moi mais tu l'inondes un peu avec tout ce code... bien sûr c'est ton code d'exemple mais j'ai essayé de l'orienter vers son erreur

par Cyrano » 28 juil. 2007, 16:43

Que tu ne t'y retrouves pas ne me surprend pas trop : désolé, mais tu codes comme un cochon, c'est illisible. Voici un corrigé un peu remis en forme.

Discipline toi à prendre le temps d'écrire proprement ton code avec une indentation, tu gagneras pas mal de temps en débuggage.

Ce que tu n'as pas remarqué dans l'exemple que j'ai donné plus tôt, c'est que chaque ligne a un div avec un identifiant qui lui est propre, même chose pour le tableau. J'ai donc réutilisé ta variable $i pour ajuster ces identifiants dynamiques et j'ai simplifié ton système d'alternance de couleur de fond de ligne.

Résultat sommaire :
<?php
include("header.php");
include("menumod.php");
?>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
<title>Rechercher</title>
<link rel="stylesheet" type="text/css" href="css/transparent.css" />
<style type="text/css">
body {
background:;
font-family:Verdana, Arial, Helvetica, sans-serif;
color:black;
font-weight:bold;
font-size: 11px;

}
a:hover {color:white;}
a {text-decoration:none; color:black;}
.Style1 {font-size: x-small}
</style>
<script type="text/javascript"> 
/* <![CDATA[ */
function $(elt)
{
    return document.getElementById(elt);
}
function affichermasquer(idbloc)
{
    var etat = $(idbloc).style.display;
    $(idbloc).style.display = (etat == 'none') ? 'block' : 'none';
}
/* ]]> */
</script>
<style type="text/css"> 
/* <![CDATA[ */ 
div.blocinfo { 
    position: relative; 
} 
div.blocinfo p { 
    z-index: 10; 
} 
div.blocinfo table { 
    position: absolute; 
    top: 25px; 
    left: 0px; 
    border: 1px solid #ccc; 
    z-index: 20; 
    color: #000; 
    background-color: #efefef; 
    border-collapse: collapse; 
} 
div.blocinfo table td { 
    border: 1px solid #ccc; 
} 
/* ]]> */ 
</style>
</head>
<body>
<span class="Style2">
  <form action="rechercho.php" method="post" name="f" enctype="multipart/form-data">
    <td><input name="choix" value="nom" checked="checked" type="radio" />nom</td>
    <td><input name="choix" value="Adresse" type="radio" />Adresse</td>
    <td><input name="choix" value="CP" type="radio" />CP</td>
    <td><input name="choix" value="VILLE" type="radio" />Ville</td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <td> <input type=hidden name=count value="0" size=1 onkeydown="alert('Cette valeur est cre automatiquement!'); return false;">
      <td><input type="text" name="recherche" size="30" maxlength="30" /></td>
      <input type=hidden name=reset value="Restaurer">
      <input name="Rechercher" type="submit" class="button" value="Rechercher" />
    </td>
  </form>
  <div id="rechercheinfo" style="position:absolute; left:350px; top:25px; visibility: hidden">
    <table border=1 cellspacing=0 cellpadding=4>
      <tr>
        <td bgcolor=#FF9900>
          <font size=2 face="arial,helvetica" color=#000000><b>
          </b></font>
</td>
      </tr>
    </table>
  </div>
  <script language="JavaScript">
<!--
document.f.recherche.onkeydown = function()
{
    document.f.count.value++;
}
document.f.reset.onclick = function()
{
    return(confirm('Voulez-vous vraiment\n'+'annuler toutes les saisies ?'));
}

if(navigator.appName.indexOf('Netscape') != -1)
{
    with (document)
    {
        f.count.onmouseover = function()
        { countinfo.visibility='visible'; }
        f.count.onmouseout = function()
        { countinfo.visibility='hidden'; }

        f.recherche.onmouseover = function()
        { rechercheinfo.visibility='visible'; }
        f.recherche.onmouseout = function()
        { rechercheinfo.visibility='hidden'; }

        f.reset.onmouseover = function()
        { resetinfo.visibility='visible'; }
        f.reset.onmouseout = function()
        { resetinfo.visibility='hidden'; }
    }
}

if(navigator.appName.indexOf('Explorer') != -1)
{
    with (document)
    {
        f.count.onmouseover = function()
        { countinfo.style.visibility='visible'; }
        f.count.onmouseout = function()
        { countinfo.style.visibility='hidden'; }

        f.recherche.onmouseover = function()
        { rechercheinfo.style.visibility='visible'; }
        f.recherche.onmouseout = function()
        { rechercheinfo.style.visibility='hidden'; }

        f.reset.onmouseover = function()
        { resetinfo.style.visibility='visible'; }
        f.reset.onmouseout = function()
        { resetinfo.style.visibility='hidden'; }
    }
}
//-->
  </script>
  <?php
if ( !$_POST[choix] || !$_POST[recherche])
{
    echo "<table width=100% border=1 align=center>";
    echo '<tr><td align="center" bgcolor="#cccccc">RECHERCHE :<img src="images/o.png" width="20" height="20"></td></tr>';
    echo "</table>";
    exit;
}
$connect  = mysql_connect("localhost", "root", "") or die ("Echec de la connexion au serveur !");
$select   = mysql_select_db("carnet");
$query    = "SELECT nom,Adresse,CP,VILLE,coordonnees FROM ident ". $_POST[choix]." LIKE '%".$_POST[recherche]."' ORDER BY nom DESC";
$result   = mysql_query($query);
$totenreg = mysql_num_rows($result);
?>
<table width="70%" border="0" align="center" summary="">
<?php
if ( $result && mysql_num_rows($result) ==0)
{
?>
  <tr>
    <td align="center" bgcolor="#FFFFFF"><center>PAS DE REPONSES CORRESPONDANTES</center></td>
  </tr>
<?php
}
elseif ($result)
{
?>
  <tr bgcolor="#CCCCCC">
    <td colspan="2"><img src="images/o.png" width="20" height="20">NOMBRE DE REPONSES : <?php echo($totenreg); ?></td>
  </tr>
  <tr align="center" bgcolor="#FFFFCC">
    <td align="center" class="Style2">nom</td>
    <td align="center" class="Style2">Adresse Postale</td>
  </tr>
<?php
    $i = 0;
    $bgcolor = ($i % 2 == 0) ? 'CCFFFF' : 'EEEEEE';
    while ($row = mysql_fetch_array($result))
    {
?>
  <tr bgcolor=#<?php echo($bgcolor); ?>>
    <td class="Style3"><?php echo $row["nom"]; ?>
      <div id="blocinfo<?php echo($i); ?>" class="blocinfo">
        <p><a href="./" title="Afficher les coordonnées" onmouseover="affichermasquer('tableinfos<?php echo($i); ?>');" onmouseout="affichermasquer('tableinfos<?php echo($i); ?>');">Détails</a></p>
        <table id="tableinfos<?php echo($i); ?>" summary="" style="display: none">
          <tr>
            <td><?php echo $row["coordonnees"]; ?></td>
          </tr>
        </table>
      </div>
    </td>
    <td align="center" class="Style2"><?php $row['Adresse']."  ". $row['CP']."  ". $row['VILLE'] ?></td>
    </tr>
<?php
        $i++;
    }
?>
  </table>
<?php
}
?>
</body>
</html>
Teste ça et reviens demander des explications si un point t'échappe.

par Truc » 28 juil. 2007, 16:23

enfaite tu affiches toujours le même div
Il faut rendre le tout un peu plus dynamique, notamment l'appel de la fonction JS et de l'id du div.
<div id="blocinfo<?php echo $j; ?>" class="blocinfo">
...
< ... onmouseover="affichermasquer('tableinfos<?php echo $j; ?>');" >
...
<?php $j++; ?>
Enfaite partout où tu as "0" il faut incrémenter avec une variable qui à chaque tour de boucle change.

par martial » 28 juil. 2007, 16:13

Voilà le code complet ( en fait le DIV affiche le téléphone, le fax ou le mail!)
<?php
include("header.php");
include("menumod.php");
?>

<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
  <title>Rechercher</title>
<link rel="stylesheet" type="text/css" href="css/transparent.css" />  
<style type="text/css">
body {
	background:;
	font-family:Verdana, Arial, Helvetica, sans-serif;
	color:black;
	font-weight:bold;
	font-size: 11px;
	
}
a:hover {color:white;}
a {text-decoration:none; color:black;}
.Style1 {font-size: x-small}
</style>
<script type="text/javascript"> 
/* <![CDATA[ */ 
function $(elt) 
{ 
    return document.getElementById(elt); 
} 
function affichermasquer(idbloc) 
{ 
    var etat = $(idbloc).style.display; 
    $(idbloc).style.display = (etat == 'none') ? 'block' : 'none'; 
} 
/* ]]> */ 
</script> 
<style type="text/css"> 
/* <![CDATA[ */ 
div.blocinfo { 
    position: relative; 
} 
div.blocinfo p { 
    z-index: 10; 
} 
div.blocinfo table { 
    position: absolute; 
    top: 25px; 
    left: 0px; 
    border: 1px solid #ccc; 
    z-index: 20; 
    color: #000; 
    background-color: #efefef; 
    border-collapse: collapse; 
} 
div.blocinfo table td { 
    border: 1px solid #ccc; 
} 
/* ]]> */ 
</style> 
</head>
<BODY>
<span class="Style2">
<form action="rechercho.php" method="post" name="f" enctype="multipart/form-data">
        <td><input name="choix" value="nom" checked="checked" type="radio" />nom</td>
		 
        <td><input name="choix" value="Adresse" type="radio" />Adresse</td>

        <td><input name="choix" value="CP" type="radio" />CP</td>

        <td><input name="choix" value="VILLE" type="radio" />Ville</td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
     <td> <input type=hidden name=count value="0" size=1
     onkeydown="alert('Cette valeur est cre automatiquement!');
   return false;">
   <td><input type="text" name="recherche" size="30" maxlength="30" /></td>
        <input type=hidden name=reset value="Restaurer">
        <input name="Rechercher" type="submit" class="button" value="Rechercher" />

        </td>

</form>
<div id="rechercheinfo" style="position:absolute;
left:350px; top:25px; visibility: hidden">
  <table border=1 cellspacing=0 cellpadding=4>
  <tr><td bgcolor=#FF9900>
    <font size=2 face="arial,helvetica" color=#000000><b>
        </b></font>
  </td></tr></table>
</div>

<script language="JavaScript"><!--


document.f.recherche.onkeydown = function()
 { document.f.count.value++; }

document.f.reset.onclick = function()
 { return(confirm('Voulez-vous vraiment\n'
 +'annuler toutes les saisies ?')); }


if(navigator.appName.indexOf('Netscape') != -1)
{
  with (document)
  {
    f.count.onmouseover = function()
     { countinfo.visibility='visible'; }
    f.count.onmouseout = function()
     { countinfo.visibility='hidden'; }

    f.recherche.onmouseover = function()
     { rechercheinfo.visibility='visible'; }
    f.recherche.onmouseout = function()
     { rechercheinfo.visibility='hidden'; }

    f.reset.onmouseover = function()
     { resetinfo.visibility='visible'; }
    f.reset.onmouseout = function()
     { resetinfo.visibility='hidden'; }
  }
}

if(navigator.appName.indexOf('Explorer') != -1)
{
  with (document)
  {
    f.count.onmouseover = function()
     { countinfo.style.visibility='visible'; }
    f.count.onmouseout = function()
     { countinfo.style.visibility='hidden'; }

    f.recherche.onmouseover = function()
     { rechercheinfo.style.visibility='visible'; }
    f.recherche.onmouseout = function()
     { rechercheinfo.style.visibility='hidden'; }

    f.reset.onmouseover = function()
     { resetinfo.style.visibility='visible'; }
    f.reset.onmouseout = function()
     { resetinfo.style.visibility='hidden'; }
  }
}


//--></script>

<?php 
if ( !$_POST[choix] || !$_POST[recherche])
{
echo "<table width=100% border=1 align=center>";
echo "<td colspan=9 align=center bgcolor='#cccccc'>RECHERCHE :<img src='images/o.png' width='20' height='20'></td>"; echo "</table>";
exit;
} $connect=mysql_connect("localhost", "root", "") or die ("Echec de la connexion au serveur !"); 
$select=mysql_select_db("carnet"); 
$query = "SELECT nom,Adresse,CP,VILLE,coordonnees FROM ident
 ". $_POST[choix]." LIKE '%".$_POST[recherche]."' ORDER BY nom DESC";
$result=mysql_query($query); 
$totenreg=mysql_num_rows($result);
if ( $result && mysql_num_rows($result) ==0)
echo "<td colspan=9 align=center bgcolor='#FFFFFF'><center>PAS DE REPONSES CORRESPONDANTES</td>"; 
else if ($result) { 
echo "<table width=70% border=0 align=center summary="">";
echo "<tr bgcolor='#CCCCCC'>"; 
echo "<td colspan=9><b><center><span font-size='11px'><img src='images/o.png' width='20' height='20'>NOMBRE DE REPONSES :  ".$totenreg."</td>";
echo "</tr>"; 
echo "<tr align=center bgcolor=#FFFFCC>";
echo "<td align=center span class=Style2>nom</td>";
echo "<td align=center span class=Style2>Adresse Postale</td>";
echo "</tr>"; 
$i=0; 
while ($row=mysql_fetch_array($result)) { 
if ($i==0) { 
echo "<tr bgcolor=#CCFFFF>"; 
$i++; }
else { 
echo "<tr bgcolor=#EEEEEE>";
$i--; 
} ?>
<td span class=Style3><?php echo $row["nom"]; ?>
 <div id="blocinfo0" class="blocinfo"> 
          <p><a href="./" title="Afficher les coordonnées" onmouseover="affichermasquer('tableinfos0');" onmouseout="affichermasquer('tableinfos0');">Détails</a></p> 
          <table id="tableinfos0" summary="" style="display: none"> 
            <tr> 
              <td><?php echo $row["coordonnees"]; ?></td> 
</tr> 
          </table> 
        </div></td>
<td align=center span class=Style2><?php $row['Adresse']."  ". $row['CP']."  ". $row['VILLE'] ?></td></tr>
<?php } ?>
</table><?php }
?>
</body>
</html>

par Cyrano » 28 juil. 2007, 15:36

Mets donc le code complet de ta construction, autrement, il sera impossible de voir l'erreur. J'ai bien une bonne idée de sa nature, mais on évitera les spéculations inutiles.

par martial » 28 juil. 2007, 15:32

je récupére mes données par une simple requête

Code : Tout sélectionner

SELECT nom,coordonnees from matable
et je suis entierement d'accord avec toi, il n'y a aucune raison logique de récupérer un nom différent à chaque cellule et une coordonnée identique dans le DIV!
pourtant j'ai scrupuleusement respecté le code de Cyrano et cela ne vient pas du resultat de ma requête en effet, pour faire un essai j'ai remplacé la variable "coordonnees" par "nom" et le resultat est le même (un nom différent dans chaque cellule mais le nom du premier champ dans le DIV!)
<table id="tableinfos0" summary="" style="display: none">  
            <tr>  
              <td><?php echo $row['coordonnees'];?></td>  
            </tr>  
          </table> 
par
<table id="tableinfos0" summary="" style="display: none">  
            <tr>  
              <td><?php echo $row['nom'];?></td>  
            </tr>  
          </table> 

par Cyrano » 28 juil. 2007, 15:24

Dans la boucle qui traite les données pour préparer l'affichage, tu ne dois construire que les lignes, pas le tableau complet.
Donc avant la boucle, tu auras l'en-tête de ton tableau, ensuite la boucle qui va construire un <tr> à chaque tour et enfin la fermeture du tableau.

De cette manière les variables diffèreront à chaque tour pour autant qu'elles soient différentes d'une ligne à l'autre dans ta base de données.

par Truc » 28 juil. 2007, 15:13

Il n'y a aucune raison que "nom" change et pas "coordonnees" :-k

comment récupères tu ces données ?

par martial » 28 juil. 2007, 15:10

Ce qui cloche c'est que le nom est différent à chaque cellule mais le DIV coordonnées est toujours le même (en général la premiére adresse de la table qui correspond au premier nom de la table)

pourtant la requête SQL est valable puisque le tableau généré m'affiche tous les noms et toutes les adresses!

par martial » 28 juil. 2007, 15:07

je suis inscrit truc mais milles excuses, je suis au boulot et j'ai oublié de me connecter!
Pour cela c'est fait.
mais d'autre part, j'aurais aimé mettre "RESOLU" mais malheureusement cela ne l'est pas (voir mon dernier POST)

par Truc » 28 juil. 2007, 15:05

Pas très clair... ceci dit java n'est pas javascript (même si c'est plus rapide à écrire, JS l'est encore plus :wink: )

dans le bout de code que tu nous montres je ne vois pas très bien ce qui cloche.
Si tu veux changer de valeur il te faut changer la valeur de $row['coordonnees'], une boucle ou un truc dans le genre