Page 1 sur 1

Tableau

Posté : 10 avr. 2007, 00:04
par cmoi
Bonjour,
j'ai un petit souci de réglage avec un tableau. Pour vous rendre compte, voici l'adresse du site www.forum-formation.fr. Il faut cliquer dans le menu "Acheteurs de formations" puis sur "Recrutez un formateur".
Vous verrez que le contenu du tableau n'est pas du tout aligné avec les titres du tableau.

Et voici le code utilisé :
<?php 
    $table = "formateurs"; 
    $sql = "SELECT * FROM " . $table." ORDER BY RAND()"; 
    $res = mysql_query($sql); 
    $nb = mysql_num_rows($res);
    $i = 0; 
	echo '<table>'; 
    while ($i < $nb){ 
        echo '<tr onMouseOver="changeCouleur(this);" onMouseOut="remetCouleur(this);">'; 
		echo '<td width="25%" valign="top"><a href="http://'.mysql_result($res, $i, "SITE").'"><b><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "SOCIETE").'</font></b></a></td>'; 
	    echo '<td width="28%" valign="top"><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "REGIONS").'<br /></font></td>'; 
		echo '<td width="25%" valign="top"><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="left" >'.mysql_result($res, $i, "THEMES").'<br /></font></td>'; 
	    echo '<td width="20%" valign="top"><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="right" >'.mysql_result($res, $i, "COUT").'</font></td>'; 
        echo '</tr>'; 
        $i++; 
    } 
    echo '</table>';
?>
Les titres sont dans un tableau html classique (1 ligne, 4 colonnes). J'ai repris dans le code php, les mêmes valeurs "width" que dans le code html. Qu'est-ce qui ne va pas ?
Merci pour votre aide.

Posté : 10 avr. 2007, 00:38
par MainMa
Voici le code HTML généré par le script :

Code : Tout sélectionner

<table width="70%" border="0"> <tr valign="top"> <td width="25%" bgcolor="#FF9900"><b><font face="Arial, Helvetica, sans-serif" size="1" color="#666666"></font></b></td> <td width="28%" bgcolor="#FF9900" valign="top"> <div align="center"><b><font face="Arial, Helvetica, sans-serif" size="1" color="#666666">R&eacute;gions d'intervention </font></b></div> </td> <td [...] </td> <td [...] </td> </tr> <tr valign="top"> <td colspan="4"> <table>
Le problème, c'est que vous faites un tableau dans un autre tableau. Du coup, les cellules du deuxième tableau ne sont naturellement pas alignés avec les cellules du premier tableau - c'est-à-dire du tableau parent.

Faire un seul tableau va résoudre le problème.


PS. Vos menus ne marchent pas sous Firefox 2.0.0.3.

Posté : 10 avr. 2007, 00:42
par MainMa
Remarque : vos pourcentages ne correspondent même pas. Dans le cas du tableau parent, vous avez les pourcentages 25, 28, 27, 20. Et pour le tableau fils, vous avez 25, 28, 25, 20.

Posté : 10 avr. 2007, 10:03
par cmoi
Voici le code HTML généré par le script :
Quel script ?

C'est évidemment plus simple de ne faire qu'un seul tableau. Mais comment ? Je ne vois comment le code php s'intégre dans votre code html.

Posté : 10 avr. 2007, 10:36
par Ryle
Il parle du code source de ta page ;)

En HTML, la taille des cellules d'un tableau, même si une valeur est spécifiée, dépend de son contenu : une cellule ne peut pas être plus petite que ce son contenu le plus long (c'est à dire de sa plus longue chaine sans espace ni tiret, ou de son image la plus large, etc.)

Dans la mesure où tu fait un tableau principal pour tes entêtes de colonnes, et que tu colles à l'intérieur d'une cellule de celui-ci un nouveau tableau, les contenus sont totalement différents et les tailles des colonnes peuvent varier de l'un à l'autre. D'autant que tu n'as pas spécifié les mêmes tailles de cellule pour ton entête et ton contenu....

Le mieux est de ne faire qu'un seul tableau.... comme ca tu es sur que les colonnes correspondront ;)

Posté : 10 avr. 2007, 10:37
par charabia
Ce que tu dois faire c'est de mettre le début de tableau et la première ligne (titres) hors boucle.

Tu débutes ensuite ta boucle en répétant la ligne de résultat, donc tu auras autant de lignes que de résultats.

Et enfin tu fermes ton tableau après ta boucle.

En gros :

Code : Tout sélectionner

<table> <tr> <td>&nbsp;</td> <td>Régions d'intervention</td> <td>Thèmes de formation</td> <td>Coût journalier </td> </tr> //début boucle ici <tr> <td>résultat de la base</td> <td>résultat de la base</td> <td>résultat de la base</td> <td>résultat de la base</td> </tr> //fin boucle ici </table>

Posté : 10 avr. 2007, 14:33
par MainMa
C'est évidemment plus simple de ne faire qu'un seul tableau. Mais comment ?
<?php 
    $table = "formateurs"; 
    $sql = "SELECT * FROM " . $table." ORDER BY RAND()"; 
    $res = mysql_query($sql); 
    $nb = mysql_num_rows($res);
    $i = 0; 
    echo "      <table>
        <tr valign="top">
          <td width="25%" bgcolor="#FF9900"><b><font face="Arial, Helvetica, sans-serif" size="1" color="#666666"></font></b></td>
          <td width="28%" bgcolor="#FF9900" valign="top">
            <div align="center"><b><font face="Arial, Helvetica, sans-serif" size="1" color="#666666">R&eacute;gions
              d'intervention </font></b></div>
          </td>
          <td [...]
          </td>
          <td [...]
          </td>
        </tr>
        <tr valign="top">\n";

    while ($i < $nb)
    { 
        echo '        <tr onMouseOver="changeCouleur(this);" onMouseOut="remetCouleur(this);">'; 
        echo '<td valign="top"><a href="http://'.mysql_result($res, $i, "SITE").'"><b><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "SOCIETE").'</font></b></a></td>'; 
        echo '<td valign="top"><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "REGIONS").'<br /></font></td>'; 
        echo '<td valign="top"><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="left" >'.mysql_result($res, $i, "THEMES").'<br /></font></td>'; 
        echo '<td valign="top"><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="right" >'.mysql_result($res, $i, "COUT").'</font></td>'; 
        echo "</tr>\n"; 
        $i++; 
    } 
    echo "      </table>\n";
?>

Posté : 10 avr. 2007, 15:25
par charabia
MainMan ne donne pas la solution sur un plateau comme ça, laisses au moins cmoi voir s'il trouve de lui même avec les incides donnés.

Sinon tu penses que je lui aurais déjà donné la solution au lieu de lui donner l'algo général...

Posté : 10 avr. 2007, 16:53
par cmoi
ca devrait a priori être plus facile avec le code. Sauf que ça ne fonctionne pas !
Je pense qu'il manque des ; J'ai fait plusieurs essais non concluants. Je réessaierai quand j'aurai plus de temps.

Ceci dit, il y a de la syntaxe inconnue pour moi. Que je n'aurais pas trouvée même si on m'avait laisser chercher longtemps. Et je n'ai pas vraiment le temps. Hélas !

Posté : 10 avr. 2007, 17:22
par Ryle
Ce ne sont pas des ; qui manquent puisqu'il s'agit d'une chaine, colorée en rouge par notre très estimée coloration syntaxique, et qui met en évidence l'absence d'antislash pour protéger les guillemets de l'attribut face="..." (laissant ainsi php penser que la chaine est terminée alors que ce n'est pas le cas) :)

A remplacer également les [...] en fermant correctement les balises <td> ;)

Quant à la syntaxe inconnue, dans la mesure ou c'est rigoureusement ton code qu'il a utilisé, je ne vois pas trop ce qui peut bien te géner ?

Posté : 11 avr. 2007, 16:01
par cmoi
J'ai repris le code proposé en le complétant. Voici ce que ça donne :
<?php  
    $table = "formateurs";  
    $sql = "SELECT * FROM " . $table." ORDER BY RAND()";  
    $res = mysql_query($sql);  
    $nb = mysql_num_rows($res); 
    $i = 0;  
    echo "      <table> 
        <tr valign=\"top\"> 
          <td width=\"25%\" bgcolor=\"#FF9900\"><b><font face=\"Arial, Helvetica, sans-serif\" size=\"1\" color=\"#666666\"></font></b></td> 
          <td width=\"28%\" bgcolor=\"#FF9900\" valign=\"top\"> 
            <div align=\"center\"><b><font face="Arial, Helvetica, sans-serif\" size=\"1\" color=\"#666666\">R&eacute;gions 
              d'intervention </font></b></div> 
          </td> 
         <td width=\"27%\" bgcolor=\"#FF9900\"> 
            <div align=\"center\"><b><font face="Arial, Helvetica, sans-serif\" size="1" color=\"#666666\">Th&egrave;mes 
              de formation</font></b></div>
          </td>
          <td width=\"20%\" bgcolor=\"#FF9900\"> 
            <div align=\"left\"><b><font face=\"Arial, Helvetica, sans-serif\" size=\"1\" color=\"#666666\">Co&ucirc;t 
              journalier </font></b><b></b></div>
          </td>
        </tr> 
        <tr valign=\"top\">\n"; 

    while ($i < $nb) 
    {  
        echo '        <tr onMouseOver="changeCouleur(this);" onMouseOut="remetCouleur(this);">';  
        echo '<td valign="top"><a href="http://'.mysql_result($res, $i, "SITE").'"><b><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "SOCIETE").'</font></b></a></td>';  
        echo '<td valign="top"><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "REGIONS").'<br /></font></td>';  
        echo '<td valign="top"><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="left" >'.mysql_result($res, $i, "THEMES").'<br /></font></td>';  
        echo '<td valign="top"><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="right" >'.mysql_result($res, $i, "COUT").'</font></td>';  
        echo "</tr>\n";  
        $i++;  
    }  
    echo "      </table>\n"; 
?> 
Il y a toujours un problème quelque part. Mais je ne vois pas où.

Posté : 11 avr. 2007, 16:06
par MainMa
Cf. le message de Ryle - vous n'avez toujours pas ajouté les antislash que j'ai oublié de mettre dans mon message.
<?php  
    $table = "formateurs";  
    $sql = "SELECT * FROM " . $table." ORDER BY RAND()";  
    $res = mysql_query($sql);  
    $nb = mysql_num_rows($res); 
    $i = 0;  
    echo "      <table> 
        <tr valign=\"top\"> 
          <td width=\"25%\" bgcolor=\"#FF9900\"><b><font face=\"Arial, Helvetica, sans-serif\" size=\"1\" color=\"#666666\"></font></b></td> 
          <td width=\"28%\" bgcolor=\"#FF9900\" valign=\"top\"> 
            <div align=\"center\"><b><font face=\"Arial, Helvetica, sans-serif\" size=\"1\" color=\"#666666\">R&eacute;gions 
              d'intervention </font></b></div> 
          </td> 
         <td width=\"27%\" bgcolor=\"#FF9900\"> 
            <div align=\"center\"><b><font face=\"Arial, Helvetica, sans-serif\" size=\"1\" color=\"#666666\">Th&egrave;mes 
              de formation</font></b></div>
          </td>
          <td width=\"20%\" bgcolor=\"#FF9900\"> 
            <div align=\"left\"><b><font face=\"Arial, Helvetica, sans-serif\" size=\"1\" color=\"#666666\">Co&ucirc;t 
              journalier </font></b><b></b></div>
          </td>
        </tr> 
        <tr valign=\"top\">\n"; 

    while ($i < $nb) 
    {  
        echo '        <tr onMouseOver="changeCouleur(this);" onMouseOut="remetCouleur(this);">';  
        echo '<td valign="top"><a href="http://'.mysql_result($res, $i, "SITE").'"><b><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "SOCIETE").'</font></b></a></td>';  
        echo '<td valign="top"><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="center" >'.mysql_result($res, $i, "REGIONS").'<br /></font></td>';  
        echo '<td valign="top"><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="left" >'.mysql_result($res, $i, "THEMES").'<br /></font></td>';  
        echo '<td valign="top"><font face="Arial, Helvetica, sans-serif" size="1" color="#666666" align="right" >'.mysql_result($res, $i, "COUT").'</font></td>';  
        echo "</tr>\n";  
        $i++;  
    }  
    echo "      </table>\n"; 
?> 

Posté : 11 avr. 2007, 16:36
par cmoi
ok le problème est résolu pour ce qui est de l'alignement vertical.
Mais pourquoi la dernière colonne reste-t-elle cachée, quelle que soit la valeur width dans le <tr> ?