1

Bonjour,

Je trouve html2pdf absolument formidable.
Je bloque sur un problème depuis des heures.
J'ai l'intention de générer des cartes. Pour cela je dois chercher des informations dans une base de donnée mysql.
voici mon script:

foreach ($TabFich as $value) {
$requete="select * from taskdata t, accesspanel a where t.Task_Number=a.Task_Number and t.SMRD_Reference='$value'"; // requête
$result= mysql_query($requete,$connection); // envoi de la requête 
$conteur=1;
while ($row=mysql_fetch_assoc ($result)){
?>
<table style="text-align: left; width:1000px ;" border="1">
  <tbody>
    <tr>
      <td colspan="1" rowspan="3" style="vertical-align: top; text-align: center; width:150px;"><br><img style="width: 100%;" src="./res/LOGO.png" alt="Logo"; align="center">
      </td>
      <td colspan="1" rowspan="3" style="vertical-align: top; text-align: center; width:150px;">
      <h3>Carte de travail</h3>
      </td>
      <td colspan="1" rowspan="3" style="vertical-align: top; text-align: center; width:100px;"><?php echo $conteur;?> <br>
      </td>
      <td colspan="4" rowspan="1" style="vertical-align: top; text-align: center; width:100px;">ERJ 145<br>
      </td>
    </tr>
    <tr>
      <td colspan="4" rowspan="1" style="vertical-align: top; text-align: center; width:100px;">IMMAT: F-GIJG</td>
    </tr>
    <tr>
      <td colspan="4" rowspan="1" style="vertical-align: top; text-align: center; width:100px;">MSN:362<br>
      </td>
    </tr>
    <tr>
      <td style="vertical-align: top; width:150px;">TASK Source</td>
      <td colspan="1" rowspan="2" style="vertical-align: top; width:100px;"><br>
      </td>
      <td colspan="1" rowspan="1" style="vertical-align: top; width:50px;">Niveau de controle :<br>
Inspection:<br>
      </td>
      <td colspan="4" rowspan="2" style="vertical-align: top; width:50px;">Visa Controleur:<br>
inspector:<br>
      </td>
    </tr>
    <tr>
      <td style="vertical-align: top; width:150px;">SMRD-REF: <?php echo $row["SMRD_Reference"]?> <br>
      </td>
      <td colspan="1" rowspan="1" style="vertical-align: top; width:50px;">Demand&eacute; par:<br>
Requested by: LCU<br>
      </td>
    </tr>
    <tr>
      <td style="vertical-align: top; width:150px;">Titre MPD<br>
      </td>
      <td colspan="2"  style="vertical-align: top; width:320px;"><?php echo  $row["Task_Title"]?>
      </td>
      <td colspan="1" rowspan="1" style="vertical-align: top; width:100px;">Zones<br>
      </td>
      <td colspan="1" rowspan="1" style="vertical-align: top; width:100px;">Accès<br>
      </td>
    </tr>
    <tr>
      <td colspan="3" rowspan="1" style="vertical-align: top; text-align: center; width:300px;">Description</td>
      <td colspan="4" rowspan="13" style="vertical-align: top; width:150px;"><br><?php echo $row["Zone"]?>
      </td>
    </tr>
    </table>
<?php
$conteur++;
		}
	}


802-A01 [5] => 55-10-00-240-802-A00 )
un print_r de $TabFich me done ceci: Array ( [0] => 53-12-00-250-801-A00 [1] => 53-12-00-250-801-A01 [2] => 54-50-00-230-801-A00 [3] => 54-50-00-230-802-A00
[4] => 54-50-00-250-


Tout se passe bien sauf que ma requête ne prend en compte que le dernier élément du tableau $TabFich. les autres étant écrasé j'ai l'impression.

Merci de votre éclairage

2

T'as essayé de faire un simple
foreach ($TabFich as $value)
{echo "$value<br />\n";}

Juste pour voir si au moins ça fonctionnait ?
avatar
Pas tout à fait là, pas tout à fait la personne que vous croyez connaître.

3

foreach ($TabFich as $value)
{echo "$value<br />\n";}

m'affiche le contenu de $TabFich:

53-12-00-250-801-A00
53-12-00-250-801-A01
54-50-00-230-801-A00
54-50-00-230-802-A00
54-50-00-250-802-A01
55-10-00-240-802-A00


le parcours s'effectue correctement.
La requête écrase celle de la boucle précédente. Au finish je n ai que la dernière requête.

4

titi123 (./1) :
Tout se passe bien sauf que ma requête ne prend en compte que le dernier élément du tableau $TabFich. les autres étant écrasé j'ai l'impression.


heu, je ne comprends pas le problème. Forcement que la requete ne prend en compte que le dernier TabFich, elle est dans le foreach...

et pourquoi faire autant de requete ? une seule requete est possible afin de récupérer l'ensemble des infos... (indice : t.SMRD_Reference IN (...) )

Ancien pseudo : lolo

5

Aaaah mais bien sûr ! J'avais pas compris ton début... C'est normal que ça fasse ça !
C'est toi qui écrases ton $result à chaque boucle du foreach... tu as donc deux solutions :
- faire un tableau de $result et faire un second foreach pour chaque $result (solution crade et lente, déjà que ce que tu fais est bien crade et lent si tu as de nombreux éléments (autant de requêtes que d'éléments !).
- revoir ta requête et n'en faire qu'une seule. Par exemple : $req_supplement = ""; foreach ($TabFich as $value) { $req_supplement.= " OR t.SMRD_Reference='$value' "; } $req_supplement = ltrim ($req_supplement, " OR"); if ($req_supplement == "") { echo "Erreur, pas de valeur transmise"; die(); //ou ce que tu veux d'autre ; genre un return quelconque. Ou alors tu réorganises tes conditions if/then/else pour protéger la requête. } else { echo "Erreur, pas de valeur transmise"; } $requete="select * from taskdata t, accesspanel a where t.Task_Number=a.Task_Number AND ($req_supplement) "; // requête $result= mysql_query($requete,$connection); // envoi de la requête $conteur=1; while ($row=mysql_fetch_assoc ($result)) { //Ici, la suite de ton code
avatar
Pas tout à fait là, pas tout à fait la personne que vous croyez connaître.

6

heu, pourquoi s'embeter avec tout ca ? un simple IN suffit smile
Ancien pseudo : lolo

7

Parce que je suis quasi sûr que IN est moins efficace en terme de performances sur de très gros volumes (en tout cas avec Oracle).
avatar
Pas tout à fait là, pas tout à fait la personne que vous croyez connaître.

8

j'ai modifié mon script en enlevant le for each et en mettant une requête avec IN.
Mais le résultat reste le même:

mysql_select_db("taskcard") or die ("pas de connection");
$Fichier = "listeTask.txt";
$TabFich = file($Fichier);
$temp=implode("','",$TabFich);
$requete="select * from taskdata t, accesspanel a where t.Task_Number=a.Task_Number and t.SMRD_Reference IN ('$temp')"; // requête
$result= mysql_query($requete,$connection); // envoi de la requête
while ($row=mysql_fetch_assoc ($result)){

9

attend, le problème c'est quoi exactement ? un pb de rendu PDF ? ou un pb directement lors de la génération de l'HTML (sans passer par HTML2PDF) ?
Ancien pseudo : lolo

10

Justement je pense que c'est lié à HTML2PDF qui m'écrase les résultats des requêtes. Je signale que l'affichage se fait sous format PDF via HTML2PDF.

11

d'ou ma question : est-ce que le problème est présent directement lors de l'affichage de l'HTML, sans passer par html2pdf ?

parce qu'il n'y a aucune raison qu'HTML2PDF interfère avec ce qu'il y a avant. Si il n'affiche que le dernier tableau, c'est que tu ne lui fournis que le dernier tableau
Ancien pseudo : lolo

12

Mais est-ce que ton rendu est bon en HTML, déjà, à la base ? Et est-ce que le résultat de ta requête te renvoie déjà ce que tu veux ? Parce que bon, à priori tu as quand même pas mal de difficultés en HTML et en SQL, et ce n'est pas vraiment le but de ce forum (même si, occasionnellement et parce que Spipu n'est pas [trop] méchant, on peut donner des pistes, faut pas non plus pousser mémé dans les orties !)

edit : cross.
avatar
Pas tout à fait là, pas tout à fait la personne que vous croyez connaître.

13

oui je suis débutant autodidacte. Si mon problème n'est pas lier à HTML2PDF je change de piste de recherche.
Merci pour votre aide.

14

problème solutionné. Il fallait juste trimer les valeurs du tableau.
Merci