-1

私はphpでアプリケーションを作成し、TCPDFでレポートを作成しましたが、問題はなく、selectクエリは正しく実行されます。しかし、データを注意深く見ると、最初のデータが欠落していることがわかります。

簡単なクエリ例:

 SELECT * FROM tb_expedition

このクエリをMySQLで実行すると、すべてのデータが表示されます。クエリが私のphpプログラムから実行された場合、結果はまだ完全ではありません。合計データが20行の場合、phpでは19行しか表示されず、最初のデータが欠落しています。

これは私のコードです:

<?php

require_once('tcpdf/config/lang/eng.php');
require_once('tcpdf/tcpdf.php');

// create new PDF document
 include "koneksi.php";//conection file

  $period=$_GET[PERIOD];

   $sql = "SELECT * FROM tb_exp_expor where period = ' $period'";

   $hasil = mysql_query($sql);
   $data = mysql_fetch_array($hasil);

   $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

   // set font
      $pdf->SetFont('times', '', 11);

// landscape
   $pdf->addPage( 'L', 'LETTER' );

   $html = '
<table border="1" cellspacing="3" cellpadding="4">
    <tr><td colspan="9" align="center"><h2>Form Pantauan Expedisi Export</h2></td></tr>
    <tr>
        <th align="center"><b>Tanggal</b></th>
        <th align="center"><b>Nama Expedisi</b></th>
        <th align="center"><b>Nama Distributor</b></th>
        <th align="center"><b>Kota Tujuan</b></th>
        <th align="center"><b>No Faktur</b></th>
        <th align="center"><b>Kondisi Armada Pengiriman</b></th>
        <th align="center"><b>Ketepatan Jumlah</b></th>
        <th align="center"><b>Ketepatan Waktu Kirim</b></th>
        <th align="center"><b>Keterangan</b></th>
    </tr></table>';
     $no=0;
   while ($data = mysql_fetch_array($hasil))
   {

     $html .= '<table border="1"><tr><td align="center">'.$data['tgl'].'</td>
                   <td align="center">'.$data['nama_exp_expor'].'</td>
                   <td align="center">'.$data['nama_distributor'].'</td>
                   <td align="center">'.$data['kota_tujuan'].'</td>
                   <td align="center">'.$data['no_faktur'].'</td>
                   <td align="center">'.$data['kon_armada'].'</td>
                   <td align="center">'.$data['ketepatan_jml'].'</td>
                   <td align="center">'.$data['ketepatan_wkt_kirim'].'</td> 
                   <td align="center">'.$data['ket'].'</td>  
                   </tr></table> ';

    $no++;             
    }

   $pdf->writeHTML($html, true, false, true, false, '');



   $pdf->Output('Daftar_Expedisi_Local', 'I');

?>
4

1 に答える 1

2

これらはあなたのラインの一部であり、エコーの一部が削除されています

 $query = mysql_query($sql);
 $data = mysql_fetch_array($sql);
 while($data = mysql_fetch_array($query))

2行目は本当に奇妙です。追加のfetch_arrayを実行しますが、引数としてsql-stringを使用しますか?それは本当に役に立ちません、それはエラーを与えませんか?

このコードの一部をクリーンアップする必要があります。たとえば、不要な「fetch_array」を余分に実行しないでください。その後機能しない場合は、デバッグに不要な不要な線(エコー、色など)をすべて削除してください。あなたはその方法で何が起こっているのかをより迅速に見つけることができます:)

あなたがそれにいる間、あなたは本当にmysql_関数から移動することを見る必要があります。マニュアルhttp://php.net/manual/en/function.mysql-fetch-array.phpでこの素敵な大きな読み取り警告を読んでください

提案された代替案

この拡張機能の使用はお勧めしません。代わりに、MySQLiまたはPDO_MySQL拡張機能を使用する必要があります。詳細については、MySQL:APIガイドの選択および関連するFAQも参照してください。この機能の代替手段は次のとおりです。

mysqli_fetch_array()
PDOStatement :: fetch()

さあ、これを試してください。これは、「可能な限り小さい」例として、最初に行うべきことです。

<?php
  include "koneksi.php";//conection file
  $period=$_GET[PERIOD];  
  $sql = "SELECT * FROM tb_exp_expor where period = ' $period'";
  var_dump($sql);//you can check this query in your database manually

  $hasil = mysql_query($sql);       
  //NO FETCH ARRAY HERE!

   while ($data = mysql_fetch_array($hasil)){
        var_dump($data);
    }

?>

注意してください:

  1. 余分なフェッチ配列の削除。
  2. デバッグのためのすべてのHTMLおよびPDFのものの削除
  3. 小さい、可能な限り自己完結型のコード。
于 2012-08-02T08:58:19.063 に答える