problème de tableau

Eléphant du PHP | 68 Messages

03 janv. 2006, 21:56

bonsoir à tous!
j'ai suis en train d'ajouter un module de news dans mon site je me suis inspiré d'un script existant pour ça car je débute, mais bon après pas mal de temps et de modif je finis par avoir quelque chose qui fonctionne!

tout fonctionne à part une chose qui est loin d'être au top et sur laquelle ça fait des jours que je bloque! j'aimerais que quand il y a une image dans ma news la cellule qui l'accueil prenne sa largueur et pas plus. actuellement ce n'est pas le cas même quand je retire la cellule de 5px de large. j'ai egalement l'impression qu'il y a bcp trop de table utilisé mais je ne trouve pas mieux pour obtenir le resultat souhaité!

une fois ma news enregistrée elle aparait sous forme de tableau

avec une première ligne comportant deux cellules:

la première le titre (via la variable titre)
la seconde le nom du posteur la date et l'heure via 3 variables

une seconde ligne comportant deux parties:

à gauche une photo via une variable image (cette partie est vide si aucune photo n'a été enregistrée)
à droite le contenu de la news

si il n'y a pas d'image enregistrée le contenu de la news doit prendre la totalité de la largueur du tableau.

l'affichage des news est paramaitrable:
couleur de fond de la news: $fond
couleur de fond de la cellule posteur, date: $fond1
couleur de police de la cellule posteur,date: $fond5
couleur des titres: $fond2
couleur de fond de la cellule titre:$fond4
couleur des bordures: $fond3
taille bodure: $border

voici ce que j'ai actuellement:
echo "
<br>
<center>
<table cellpadding=$border cellspacing=0 width=$largeur bgcolor=$fond3>
<tr><td>

<table cellpadding=1 cellspacing=0 border=0 bgcolor=$fond5 width=100%>
<tr><td bgcolor=$fond4 align=left valign=middle><font class=t3><b><font color=$fond2>> $titre</font></td><td bgcolor=2C2C1E align=right><font class=t3><b><font color=$fond2>De <a href=\"mailto:$email\"><font color=$fond2><b>$auteur</b></font></a> le $date à $heure</font></td></tr>
<tr><td colspan=2>
<table cellpadding=0 cellspacing=0 border=0 width=100% bgcolor=$fond1>
<tr><td bgcolor=$fond1 width=100%>

		
	<table cellpadding=0 cellpsacing=0 border=0 width=100%><tr><td align=left valign=top>";
	 if ($image == "http://" or $image == '') {echo "";} else {if ($lien == "http://" or $lien == '') {echo "<img src=\"$image\" border=0>";} else {echo "<a href=\"$lien\" target=blank><img src=\"$image\" border=0></a>";} echo "</td><td width=5>";}
	 echo "</td><td align=left valign=top><font class=tnews>"; smiley($dbserver, $dbuser, $dbpass, $dbbase, 0, $contenu, $url_smiley); echo "</td></tr></table>";

		
echo "
</td></tr>
</table>
</td></tr>
</table>

</td></tr>
</table>
</center>
";

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

03 janv. 2006, 22:18

Salut,

Ce que tu pourrais faire avant tout c'est d'indenter ton code, c'est un peu la cata :?

pour ça tu peux reposter le code ainsi:
<table>
	<tr>
		<td>
			<table>
				<tr>
					<td>
						blabla
					</td>
				</tr>
			</table>
		</td>
	</tr>
	<tr>
		<td>
			blabla
		</td>
	</tr>
</table>
tu as meme des balises qui ne sont pas fermées ou mal imbriquées.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

03 janv. 2006, 23:30

Le code tel quel est franchement illisible. Comment veux-tu t'y retrouver ?

Voilà une proposition :
<?php
echo <<<EOT
<br>
<center>
<table cellpadding="$border" cellspacing=0 width=$largeur bgcolor=$fond3>
  <tr>
    <td>
      <table cellpadding=1 cellspacing=0 border=0 bgcolor=$fond5 width=100%>
        <tr>
          <td bgcolor=$fond4 align=left valign=middle>
            <font class=t3><b><font color=$fond2>> $titre</font>
          </td>
          <td bgcolor=2C2C1E align=right>
            <font class=t3><b><font color=$fond2>De <a href="mailto:$email"><font color=$fond2><b>$auteur</b></font></a> le $date à $heure</font>
          </td>
        </tr>
        <tr>
          <td colspan=2>
            <table cellpadding=0 cellspacing=0 border=0 width=100% bgcolor=$fond1>
              <tr>
                <td bgcolor=$fond1 width=100%>
                  <table cellpadding=0 cellpsacing=0 border=0 width=100%>
                    <tr>
                      <td align=left valign=top>";
EOT;
if ($image == "http://" || $image == '')
{
    echo "&nbsp;";
}
else
{
    if ($lien == "http://" || $lien == '')
    {
        echo "<img src=\"$image\" border=0>";
    }
    else
    {
        echo "<a href=\"$lien\" target=blank><img src=\"$image\" border=0></a>";
    }
?>
                      </td>
                      <td width=5>
<?php
}
?>
                      </td>
                      <td align=left valign=top>
                        <font class=tnews>";
<?php
smiley($dbserver, $dbuser, $dbpass, $dbbase, 0, $contenu, $url_smiley);
?>
                      </td>
                    </tr>
                  </table>
                </td>
              </tr>
            </table>
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
</center>
Note : la première partie, c'est ce qu'on appelle la syntaxe Heredoc : ça cimplifie pour envoyer pas mal de html avec plusieurs variables. Voir la Doc
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 68 Messages

04 janv. 2006, 08:56

merci pour votre aide!

il est vrai que le code est illisible et c'exactement pour ça que quand je suis reparti de ce script je me suis dit qu'il fallait que je sépare le fond de la forme et que je simplifi au maximum!

j'ai déjà modifié pas mal de pages mais c'est celle ci qui me pose des problèmes avec toutes ces tables imbriquées c'est le "bordel" j'ai voulu simplifié mais je n'ai jamais obtenu le bon résultat!

voilà pourquoi je fais appel à vous!

j'ai donc repris ton code cyrano et pour le moment j'ai tjs le même problème pour que vous visualisiez voici la page en question, j'ai fait apparaitre les bordures pour que vous puissiez vous rendre compte du problème!

http://ayiore.free.fr/agua/sitephp/inde ... ge=gazette

Mammouth du PHP | 19672 Messages

04 janv. 2006, 09:20

Petit conseil pratique : construis un tableau en HTML d'abord en mettant quelques données dedans de façon simplifiée : quand il ressemblera à ce que tu veux obtenir, alors seulement tu feras l'intégration PHP avec. Il faut partir du HTML pour faire du PHP, pas l'inverse, surtout en partant d'un code comme celui-ci.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
ViPHP
ViPHP | 3008 Messages

04 janv. 2006, 10:16

Dans la construction du bloc de news tu as 3 tableaux imbriqués.

Deux auraient largement suffit pour ce que tu veux faire.

Le premier contiendra deux colonnes (titre et date) et deux lignes. La deuxième ligne sera fusionnée. Cette deuxième ligne contiendra l'autre tableau avec tes 3 colonnes (image, vide et contenu).

Pour que la cellule prenne toute la largeur s'il n'y a pas d'image, tu dois faire un test et supprimer l'affichage des deux premières colonnes (image et vide). Ainsi tu n'auras plus qu'une cellule qui prendra bien toute la largeur.

En gros :
<table>
<tr>
<?php
if(image_existe)
	{
		echo "<td>mon image</td><td>vide</td><td>contenu</td>";
	}
else
	{
		echo "<td>contenu</td>";
	}
?>
</tr>
</table>

Eléphant du PHP | 68 Messages

04 janv. 2006, 20:59

grace à vous j'ai pu supprimer deux tables et obtenir le même resultat!
merci

malheureusement mon problème de taille de la cellule accueillant l'image persiste! :cry:
<?php
echo <<<EOT
<br>
<center>
<table cellpadding='$border' border=$border cellspacing=0 width=$largeur bgcolor=$fond3>
  <tr>
    <td bgcolor=$fond4 align=left valign=middle>
		<b><font color=$fond2>> $titre</font>
    </td>
    <td bgcolor=$fond1 align=right> 
        <b><font color=$fond5>De <a href='mailto:$email'><b>$auteur</b></a> le $date à $heure</font>
    </td>
  </tr>
  <tr>
    <td colspan=2>
	  <table cellpadding=0 cellspacing=0 border=1 width=100% bgcolor=$fond>     
        <tr>   
           
                      
EOT;
if ($image == "http://" || $image == '')
{
    echo "<td align=left valign=top><font class=tnews>";
}
else
{
    if ($lien == "http://" || $lien == '')
    {
        echo "<td><img src=\"$image\" border=0></td><td width=5></td><td align=left valign=top><font class=tnews>";
    }
    else
    {
        echo "<td><a href=\"$lien\" target=blank><img src=\"$image\" border=0></a></td><td width=5></td><td align=left valign=top><font class=tnews>";
    }

}
		smiley($dbserver, $dbuser, $dbpass, $dbbase, 0, $contenu, $url_smiley);?>

          </td>
        </tr> 
      </table>
    </td>
  </tr>
</table>
          
</center>
  
voyez par vous même je ne comprends pas! :oops:

http://ayiore.free.fr/agua/sitephp/inde ... ge=gazette

Eléphant du PHP | 68 Messages

04 janv. 2006, 21:30

bon et bien j'ai trouvé je ne sais pas si c'est très correct mais en donnant une largeur de 100% à la cellule contenant le $contenu ça marche!
 if ($lien == "http://" || $lien == '')
    {
        echo "<td><img src=\"$image\" border=0></td><td width=5>&nbsp;</td><td align=left width=100% valign=top><font class=tnews>";
    }
    else
    {
        echo "<td><a href=\"$lien\" target=blank><img src=\"$image\" border=0></a></td><td width=5>&nbsp;</td><td align=left width=100% valign=top><font class=tnews>";
    }
merci pour votre aide en espérant que ça passe sous IE! :wink:

Avatar du membre
ViPHP
ViPHP | 3008 Messages

04 janv. 2006, 22:31

Si tu ne met pas 100% à ton tableau
<table cellpadding=0 cellspacing=0 border=1 width=100% bgcolor=$fond>
et que tu laisses le navigateur se charger de la taille ça devrait marcher tout aussi bien je pense, et bien sûr enlever le 100% de ta cellule.