1

Bonjour a tous,

Je voudrais savoir pourquoi certain de mes tableaux dont les données proviennent de mysql ne s'affiche pas correctement. En effet, mes tableaux ont leurs thead affichés correctement mais tout ce qui est dans le tbody est compressés (la hauteur entre chaque td est de même pas 1mm à l'impression). Je sais que la récupération des données est bonne vu que j'ai tester les commandes sql mais j'ai juste ce souci de hauteur de td.

Idem, pourquoi lorsqu'une table est vide, le tableau ne s'affiche pas? alors que ma requete et mon while se situe seulement après le thead donc logiquement je devrais au moins avoir le thead?

Voici une de mes pages pour que vous voyez les problèmes si quelqu'un peut m'aider:

<!-- ******* Page 1 ******** -->
<page orientation="paysage" backtop="10mm" backbottom="14mm" backleft="10mm" backright="10mm" style="font-size: 12pt">
<page_header>
<table class="page_header"><tr>
<td style="width: 25%; float: center"><div style="width: 100%"><img src="./doc/logo_min.png" alt="Logo"></div></td>
<td style="width: 75%;"></td>
</tr></table>
</page_header>
<page_footer>
<table class="page_footer"><tr>
<td style="width:33%; text-align:left;">Compte-Rendu d'Activités</td>
<td style="width:34%; text-align:center">Page [[page_cu]]/[[page_nb]]</td>
<td style="width:33%; text-align:right">© Spie Communications</td>
</tr></table>
</page_footer>
<br><br><br>
<!-- Tableau Récapitulatif du nbre/type-->
<table border="1"cellspacing="0" style="width:100%; text-align:center;" align="center" charset="utf-8">
<thead>
<tr style="vertical-align: middle; text-align: center; background-color: CMYK(255, 0, 0, 0);">
<th style="width:10%">Batiment</th>
<th style="width:10%">Ensemble</th>
<th style="width:10%">Elément</th>
<th style="width:10%">Date Début</th>
<th style="width:10%">Date Fin</th>
<th style="width:50%">Commentaires</th>
</tr>
</thead>
<?php
require_once('../php/connexionbdd.php');
$reqprev=mysql_query("SELECT id,ensemble,element,batiment,date_debut_inter,date_fin_inter,commentaires FROM preventif WHERE MONTH(date_debut_inter)=$month AND YEAR(date_debut_inter)=$annee");
while ($datas = mysql_fetch_assoc($reqprev)) {
?>
<tbody>
<tr style="vertical-align: middle; text-align: center; font-size:10px; height:12px;">
<td style="background-color:RGB(229, 229, 229)"><?php $datas['batiment'];?></td>
<td><?php htmlentities($datas['ensemble']);?></td>
<td><?php htmlentities($datas['element']);?></td>
<td><?php $datas['date_debut_inter'];?></td>
<td><?php $datas['date_fin_inter'];?></td>
<td><?php htmlentities($datas['commentaires']);?></td>
</tr>
</tbody><?php }?>
</table>
</page>

Cette page contient les 2 problèmes evoqués, si j'ai pas de données la page est vierge et si ma table en contient le tableau est mal construit.

J'espère que quelqu'un pourra m'aider

merci d'avance

maxredphenix

2

Bonjour,

J'ai trouvé pourquoi mes lignes étaient comme ça, il fallait juste mettre tous les paramètres style dans <page> et laisser seulement:
<tbody>
<tr style="font-size:10px">
...........

Par contre je comprends pas pourquoi tous mes tableaux récupèrent seulement les dates et laissent les autres champs vide alors que si je le fais dans une page html et que je l'affiche dans le navigateur j'ai tout.....

Merci

maxredphenix

3

Bon j'ai rien dit, ça vient de me sauter au yeux, j'ai oublier echo devant htmlentities......dur dur

Encore merci

4

Bonjour a tous,

Après une semaine de recherche et de test, je viens enfin de trouver comment faire pour avoir du texte qui peut faire un retour à la ligne automatique à l'intérieur d'un <td> et ainsi éviter que mon tableau dépasse sur xxxxx pages. Ce problème est d'ailleurs récurent et beaucoup de personnes ont le même problème que moi, ex sur les 4 dernières pages du forum:
topics/145542-table-width-100
topics/140030-creer-un-pdf-identique-au-tableau-affiche-dans-une-page-internet
topics/146176-table-attributes-ignored
topics/148289-texte-superpose-et-trop-large
topics/148427-comment-forcer-une-table-a-une-certaine-largeur-independamment-de-son-contenu
+ un de ma part.... smile

Le seul petit souci que je rencontre est que mon contenu ce centre en plein milieu de 2 <td>, j'ai beau faire un align:center, float:center, position:relative etc... rien n'y fait. Si quelqu'un peut m'aider, cela m'aiderai moi mais aussi tout ces autres personnes.

un petit screenshot de ce que cela donne:
http://dl.dropbox.com/u/31901874/Copie%20site%20pour%20forum/tableau%20html2pdf.jpg

Voici mon code:
<style type="text/css">
<!--
table.page_header {width: 100%; background-color: #EDF7F2; border-bottom: solid 1mm #AAAADD; padding: 2mm }
table.page_footer {width: 100%; background-color: #EDF7F2; border-top: solid 1mm #AAAADD; padding: 2mm}
table.taboverflow td{position: relative; float: center; display: inline-block; overflow:visible; width:98%; height:auto; text-align: left;}
-->
</style>
 <table border="1"cellspacing="0" style="width:100%; text-align:center; valign:middle;" charset="utf-8">
		<thead>
			<tr style="font-size:13px; background-color: CMYK(255, 0, 0, 0);">
				<th style="width:7%" scope="col">Batiment</th>
				<th style="width:7%" scope="col">N°Appel</th>
				<th style="width:9%" scope="col">Date Appel<br>Date Fin Inter</th>
				<th style="width:10%" scope="col">Nom Demandeur</th>
				<th style="width:29%" scope="col">Dysfonctionnement</th>
				<th style="width:37%" scope="col">Commentaires</th>
			</tr>
		</thead>
		<?php 
			$reqsolde=mysql_query("SELECT c.idCorrectif,c.id_appel,c.statut,d.batiment,d.date_appel,MAX(w.fin_inter) AS date_fin,d.nom_demandeur,d.commentaires AS dysfonctionnement,c.commentaires
								FROM demande AS d LEFT JOIN correctif AS c ON c.id_appel = d.id LEFT JOIN work_times AS w ON c.id_appel = w.intervention_id
								WHERE c.statut='Cloturé' ORDER BY d.batiment");
			while ($datas = mysql_fetch_assoc($reqsolde)) { 
		?>
		<tbody>
			<tr style="font-size:10px">
				<td style="background-color:RGB(229, 229, 229)"><?php echo $datas['batiment']; ?></td>
				<td><?php $datas['id_appel']; ?></td>
				<td><?php $date1=ConversionDate($datas['date_appel'], '-'); echo $date1;?><br><?php $date2=ConversionDateTime($datas['date_fin'], '-'); echo $date2; ?></td>
				<td><?php echo nl2br(htmlentities($datas['nom_demandeur'],ENT_QUOTES,'UTF-8')); ?></td>
				<td style="width:29%;"><div class="taboverflow"><?php echo htmlentities($datas['dysfonctionnement'],ENT_QUOTES,'UTF-8'); ?></div></td>
				<td style="width:37%;"><div class="taboverflow"><?php echo nl2br(htmlentities($datas['commentaires'],ENT_QUOTES,'UTF-8')); ?></div></td>
			</tr>
		</tbody><?php }?>
	</table>


Merci d'avance pour votre aide

maxredphenix

5

Bon j'avance un peu, mais c'est pas encore ça:
table.taboverflow td{position:relative; float:center; display:inline-block; overflow:visible; width:100%; height:auto; text-align:left;}
td.divtable div{width:300px;margin:-20px 0 0 0;}
td.divtable2 div{width:380px;margin:-20px 0 0 0;}

<td class="divtable" style="width:29%;"><div class="taboverflow"><?php echo htmlentities($datas['dysfonctionnement'],ENT_QUOTES,'UTF-8'); ?></div></td>
<td class="divtable2" style="width:37%;"><div class="taboverflow"><?php echo nl2br(htmlentities($datas['commentaires'],ENT_QUOTES,'UTF-8')); ?></div></td>

maintenant le texte est placé correctement sur la largeur, il est bloqué au milieu de la barre horizontale donc je suis obligé de faire des margin négatif mais cela n'est pas bon du faite que ça dépend de la taille du texte. Dans mon cas, j'ai -20px pour que la div soit au centre de mon td mais si je double mon texte du coup la div devient plus haute que le td.

Je sais pas comment trouvé un compromis

6

Bon, pour tout ceux qui ont des problèmes avec leurs tableaux, c'est simple, il suffit juste de faire à l'identique de ce qui est dans mon code:
-> style de la table
-> dimension fixe en px de chaque td
et .....c'est tout, pas besoin de ce compliqué la vie avec des overflow, des div, etc...

<table border="1"cellspacing="0" style="width:100%; text-align:center; vertical-align:middle; padding:0;" charset="utf-8">
	<thead>
		<tr style="font-size:13px; background-color: CMYK(255, 0, 0, 0);">
			<th style="width:7%" scope="col">Batiment</th>
			<th style="width:7%" scope="col">N°Appel</th>
			<th style="width:9%" scope="col">Date Appel<br>Date Fin Inter</th>
			<th style="width:10%" scope="col">Nom Demandeur</th>
			<th style="width:29%" scope="col">Dysfonctionnement</th>
			<th style="width:37%" scope="col">Commentaires</th>
		</tr>
	</thead>
	<?php 
		$reqsolde=mysql_query("SELECT c.idCorrectif,c.id_appel,c.statut,d.batiment,d.date_appel,MAX(w.fin_inter) AS date_fin,d.nom_demandeur,d.commentaires AS dysfonctionnement,c.commentaires
							FROM demande AS d LEFT JOIN correctif AS c ON c.id_appel = d.id LEFT JOIN work_times AS w ON c.id_appel = w.intervention_id
							WHERE c.statut='Cloturé' ORDER BY d.batiment");
		while ($datas = mysql_fetch_assoc($reqsolde)) { 
	?>
	<tbody>
		<tr style="font-size:10px">
			<td style="background-color:RGB(229, 229, 229)"><?php echo $datas['batiment']; ?></td>
			<td><?php $datas['id_appel']; ?></td>
			<td><?php $date1=ConversionDate($datas['date_appel'], '-'); echo $date1;?><br><?php $date2=ConversionDateTime($datas['date_fin'], '-'); echo $date2; ?></td>
			<td><?php echo nl2br(htmlentities($datas['nom_demandeur'],ENT_QUOTES,'UTF-8')); ?></td>
			<td style="width:310px"><?php echo htmlentities($datas['dysfonctionnement'],ENT_QUOTES,'UTF-8'); ?></td>
			<td style="width:390px;"><?php echo nl2br(htmlentities($datas['commentaires'],ENT_QUOTES,'UTF-8')); ?></td>
		</tr>
	</tbody><?php }?>
</table>