2016-11-25 2 views
0

J'essaie d'exporter la table (filtrée) de MySQL en pdf.Générer une table de MySQL en PDF (en utilisant PHP)

Le problème principal ici est qu'il imprime uniquement le dernier résultat de la liste, au lieu d'imprimer tous les résultats.

J'ai essayé un autre code mais j'ai toujours le même résultat. Je ne sais pas quel est le problème avec mon code:

<?php 
include("configsample.php"); 
?> 
<?php 

$string=$_GET['string']; 
$course=$_GET['course']; 
$category=$_GET['category']; 
$from=$_GET['from']; 
$to=$_GET['to']; 

if ($_REQUEST["string"]<>'') { 
$search_string = " AND restu_title LIKE '%".mysql_real_escape_string($_REQUEST["string"])."%'"; 
} 
if ($_REQUEST["course"]<>'') { 
$search_course = " AND restu_course='".mysql_real_escape_string($_REQUEST["course"])."'"; 
} 
if ($_REQUEST["category"]<>'') { 
$search_category = " AND category='".mysql_real_escape_string($_REQUEST["category"])."'"; 
} 


if ($_REQUEST["from"]<>'' and $_REQUEST["to"]<>'') { 
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE restu_year BETWEEN '".mysql_real_escape_string($_REQUEST["from"])."' AND '".mysql_real_escape_string($_REQUEST["to"])."'".$search_string.$search_course; 
} else if ($_REQUEST["from"]<>'') { 
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE restu_year = '".mysql_real_escape_string($_REQUEST["from"])."'".$search_string.$search_course; 
} else if ($_REQUEST["to"]<>'') { 
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE restu_year = '".mysql_real_escape_string($_REQUEST["to"])."'".$search_string.$search_course; 
} else { 
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE restu_id>0".$search_string.$search_course.$search_category; 
} 
$html='<table> 
<tr style="color:#010101; font:bold 13px Times New Roman; height:40px;"> 
<th>Research Title</th> 
<th>Year</th> 
<th>Proponent(s)</th> 
<th>Adviser</th> 
<th>Research Panel</th> 
</tr>'; 
$sql_result = mysql_query ($sql, $connection) or die ('request "Could not execute SQL query" '.$sql); 
if (mysql_num_rows($sql_result)>0) { 
while ($row = mysql_fetch_assoc($sql_result)){ 
$html2='<tr> 
<td style="padding:10px;">'.$row['restu_title'].'</td> 
<td style="padding:10px;">'.$row['restu_year'].'</td> 
<td style="padding:10px;">'.$row['restu_by'].'</td> 
<td style="padding:10px;">'.$row['restu_ad'].'</td> 
<td style="padding:10px;">'.$row['restu_panel'].'</td> 
</tr> 
</table>'; 
} 
} 

include("mpdf60/mpdf.php"); 
$mpdf=new mPDF('c','Letter','','',20,20,18,16,9,9,'L'); 
$mpdf->SetDisplayMode('fullpage'); 
$mpdf->AddPage('L'); 
$mpdf->WriteHTML($html); 
$mpdf->WriteHTML($html2); 
$mpdf->Output(); 
exit; 
?> 
+0

Vous écrasez html2 de $ dans votre boucle while. Tant qu'il y a un autre enregistrement, il sera récupéré et html2 contiendra toujours la valeur du dernier enregistrement. – Twinfriends

Répondre

0

ajouter $ html2. Vous attribuez une valeur à la boucle pour qu'elle affiche uniquement le dernier enregistrement.

utilisation comme ça ..

$html2=$html2.'<tr> 
    <td style="padding:10px;">'.$row['restu_title'].'</td> 
    <td style="padding:10px;">'.$row['restu_year'].'</td> 
    <td style="padding:10px;">'.$row['restu_by'].'</td> 
    <td style="padding:10px;">'.$row['restu_ad'].'</td> 
    <td style="padding:10px;">'.$row['restu_panel'].'</td> 
    </tr>'; 
+0

Merci pour la suggestion. J'ai essayé de remplacer le code mais il me donne cette erreur: "erreur mPDF: Certaines données ont déjà été sortie au navigateur, ne peut pas envoyer le fichier PDF: –

2

Vous devez concatenate votre chaîne de texte pour éviter $html2 à écraser par la valeur suivante.

Chaque fois que la boucle est en cours d'exécution, $html2 est remplacée par la nouvelle valeur. Dans votre cas, vous devez ajouter un point juste avant le symbole d'égalité:

while ($row = mysql_fetch_assoc($sql_result)){ 
    $html .='<tr> 
      <td style="padding:10px;">'.$row['restu_title'].'</td> 
      <td style="padding:10px;">'.$row['restu_year'].'</td> 
      <td style="padding:10px;">'.$row['restu_by'].'</td> 
      <td style="padding:10px;">'.$row['restu_ad'].'</td> 
      <td style="padding:10px;">'.$row['restu_panel'].'</td> 
    </tr>'; 
} 

Prenez soin de placer correctement le </table>. Si votre requête SQL n'a pas de résultat, la table ne sera pas fermée, rendant le HTML invalide.

Vous devez le faire comme ceci:

$html='<table> 
    <tr style="color:#010101; font:bold 13px Times New Roman; height:40px;"> 
    <th>Research Title</th> 
    <th>Year</th> 
    <th>Proponent(s)</th> 
    <th>Adviser</th> 
    <th>Research Panel</th> 
    </tr>'; 
$sql_result = mysql_query ($sql, $connection) or die ('request "Could not execute SQL query" '.$sql); 
if (mysql_num_rows($sql_result)>0) { 
    while ($row = mysql_fetch_assoc($sql_result)){ 
     $html .='<tr> 
      <td style="padding:10px;">'.$row['restu_title'].'</td> 
      <td style="padding:10px;">'.$row['restu_year'].'</td> 
      <td style="padding:10px;">'.$row['restu_by'].'</td> 
      <td style="padding:10px;">'.$row['restu_ad'].'</td> 
      <td style="padding:10px;">'.$row['restu_panel'].'</td> 
      </tr>'; 
    } 
} 
$html .= '</table>'; 
+0

Merci pour la suggestion.J'ai essayé de remplacer le code, mais il me donne cette erreur: "Erreur mPDF: Certaines données ont déjà été envoyées au navigateur, impossible d'envoyer le fichier PDF: –

+0

Ce message apparaît lorsque vous avez var_dump ou une erreur avant $ mpdf->. Essayez de var_dump ($ html) sans faire le pdf pour voir s'il n'y a pas d'erreur, à propos de la requête de sql. – Benoti