2012-02-29 19 views
0

嘿傢伙我只是想讓這個愚蠢的事情工作,我可以從那裏調整, 我開始一個數組,它將最有可能通過$ _POST ,帶有多個查詢和數據陣列的PHP PDF寫作

$cleanArray = array(array('type'=>'berries', 'numb'=>'5555'), 
        array('type'=>'melons', 'numb'=>'686')); 

我再聲明一些數據陣列,將提供結構(如果有一個更好的方式來做到這一點特定的步驟,讓我知道!),這是三種類型,有總共六個。查詢是唯一查詢,每個類型需要返回正確的信息,而尺寸是字段大小是用於該項目在pdf中。

$dataShape = array(
    'berries' => array( 'sizes' => array(0 => 25, 1 => 20, 3 => 10, 4 => 15, 5 => 10, 6 => 20, 7 => 20, 8 => 10, 9 => 15, 10 => 10, 11 => 15, 12 => 10, 13 => 10, 14 => 10, 15 => 10, 16 => 10, 17 => 10, 18 => 10, 19 => 200), 
          'query' => array('shipper, po, commodity as comm, count, size, label, variety, pack_date AS date, grower_lot AS lot, CONCAT(color1, "-", color2) AS color, CONCAT(sizing1, "-", sizing2, "/", "sizing3", "-", sizing4) AS size, CONCAT(firmness1, "-", firmness2) AS firmness, CONCAT(scars_count1, "-", scars_count2) AS scars_count, CONCAT(bruise_count2, "-", bruise_count2) AS bruise_count, CONCAT(decay_count1, "-", decay_count2) AS green, CONCAT(sugar_brix1, "-", sugar_brix2) brix, rating, comments')), 
    'citrus' => array( 'sizes' => array(0 => 25, 1 => 20, 3 => 10, 4 => 15, 5 => 10, 6 => 20, 7 => 20, 8 => 10, 9 => 15, 10 => 10, 11 => 15, 12 => 10, 13 => 10, 14 => 10, 15 => 10, 16 => 10, 17 => 10, 18 => 10, 19 => 200), 
          'query' => array('shipper, po, commodity as comm, count, size, label, variety, pack_date AS date, grower_lot AS lot, CONCAT(color1, "-", color2) AS color, CONCAT(texture1, "-", texture2) AS texture, CONCAT(puff1, "-", puff2) AS puff, CONCAT(scar1, "-", scar2) AS scars, CONCAT(solidity1, "-", solidity2) AS solidity, CONCAT(green1, "-", green2) AS green, CONCAT(sugar_brix1, "-", sugar_brix2) brix, rating, comments')), 
    'melons' => array( 'sizes' => array(0 => 25, 1 => 20, 3 => 10, 4 => 15, 5 => 10, 6 => 20, 7 => 20, 8 => 10, 9 => 15, 10 => 10, 11 => 15, 12 => 10, 13 => 10, 14 => 10, 15 => 10, 16 => 10, 17 => 10, 18 => 200), 
          'query' => array('shipper, po, commodity as comm, count, size, label, variety, pack_date AS date, grower_lot AS lot, CONCAT(color1, "-", color2) AS color, CONCAT(ground_color1, "-", ground_color2) AS ground_color, CONCAT(texture1, "-", texture2) AS texture, CONCAT(scar1, "-", scar2) AS scars, CONCAT(solidity1, "-", solidity2) AS solidity, CONCAT(cut1, "-", cut2) AS cut, CONCAT(sugar_brix1, "-", sugar_brix2) brix, rating, comments')), 
); 

我然後嘗試基於所述類型查詢,和類型的結構,這將命名每個陣列type名稱,並打開每個部分成子陣列。 You can see it here.

foreach($cleanArray as $key=>$val) { echo $key; 
    $result[$cleanArray[$key]['type']] 
    = $dbc->fetch_array("SELECT ".implode(',',$dataShape[ $cleanArray[$key]['type'] ]['query'])." FROM `" 
         .$cleanArray[$key]['type']."` WHERE (status = '0' OR status = '1') AND `report_key` = " 
         .$cleanArray[$key]['numb']); 
} 

然後我嘗試添加頁面,並迭代東西,這是行不通的。它應該一次使用這些鍵來獲取列名,然後遍歷鍵值直到用完。如果值小於十二行(總共24行,因爲註釋佔用自己的行)迭代空白行直到有12行存在。

foreach($result as $fruitType=>$fruitTypeArray) { 
    $nameKeys = array_keys($fruitTypeArray[0]); 
    $i=0; $pdf->AddPage('L'); 

    foreach($dataShape[$fruitType]['sizes'] as $dataShapevalue) { 
    $pdf->Cell($dataShapevalue6,ucwords(str_replace('_',' ',$nameKeys[$i++])),1,0,'L',1); 
    } 

    // go to next row 
    $y_axis = $y_axis + $row_height; 

    foreach($dataShape[$fruitType]['sizes'] as $dataShapeValue) { 
    foreach($fruitTypeArray as $queryName=>$queryValue) { 
    if(!$queryName=='comments') { 
    $pdf->Cell($dataShapeValue,6,$queryValue,1,0,'L',1); 
    } else { 

    // go to next row 
    $y_axis = $y_axis + $row_height; 

    $pdf->Cell($dataShapeValue,6,ucwords(str_replace('_',' ',$nameKeys[$i++])),1,0,'L',1); 

    // go to next row 
    $y_axis = $y_axis + $row_height; 
    } 

} 

回答

0

我不得不廢棄並重寫所有內容,這裏是關心的人的代碼。

<?php 

    // temp array 
    $cleanArray = array(array('type'=>'berries', 'numb'=>'55555'), 
         array('type'=>'melons', 'numb'=>'686')); 

require('class/pdfwriter/report.php'); 
require('class/dbconnect.class.php'); 
require('class/perms.class.php'); 

include('class/structure.php'); 

$dbc = Database::obtain(DB_HOST, DB_USER, DB_PASS, DB_NAME); 

$pdf = new PDF('P','mm','A4'); 

    $pdf->AliasNbPages(); 
    $pdf->AddPage('L'); 
    $pdf->SetFillColor(255,255,0); 
    $pdf->SetAutoPageBreak('margin','1'); 

    $pad = 277; 

    $dbc->connect(); 

    foreach($cleanArray as $key) { 
     $data[] = getSlice($key['type']); // returns types query and cellpad settings 
    } 

    $i=0; 
    foreach($data as $key) { 
     $product[$cleanArray[$i]['type']] = $dbc->fetch_array(" SELECT ".implode(',',$key['query'])." FROM `{$cleanArray[$i]['type']}` WHERE (status = '0' OR status = '1') AND `report_key` = {$cleanArray[$i++]['numb']}"); 
    } 

    $current=$i=0; 
    foreach($product as $key) { 

     $empty = 15 - count($key); 
     $margin = $pad/count($key[0])+1; 
     $comment = $margin * (count($key[0])-1); 
     $total = $margin * (count($key[0])-5); 

     $pdf->SetFont('Helvetica','',15); 
     $pdf->Cell(0,0,ucwords(str_replace('_',' ',$cleanArray[$i]['type'])),0,0,'C'); 
     $pdf->SetFont('Arial','B',7); 
     $pdf->Ln(5); 

    // column names 
    foreach($key[0] as $name=>$value) { 
      if($name!='comments') { 
       $pdf->Cell($margin,5,strtoupper(str_replace('_',' ',$name)),1,0,'C',1); 
      } else { $pdf->Cell($comment,5,'',0,1,'L'); } 
    } 


    // row values 
    $pdf->SetFont('Times','',7); 
    foreach($key as $array) { 
     foreach($array as $name=>$value) { 
      if($name!='comments') { 
       $pdf->Cell($margin,5,$value,1,0,'C',0); 
      } else { 
       $pdf->Cell(0,5,'',0,1,'L'); 
       $pdf->SetFont('Arial','B',7); 
       $pdf->Cell($comment,5,'COMMENTS:',1,1,'L',0); 
       $pdf->SetFont('Times','',7); 
      } 
     } 

    } 

    while($empty) { 
     $innerCount = count($key[0])-1; 
     while($innerCount) { 
      $pdf->Cell($margin,5,'',1,0,'C',0); 
      $innerCount--; 
     } 
      $pdf->Cell(0,5,'',0,1,'L'); 
      $pdf->SetFont('Arial','B',7); 
      $pdf->Cell($comment,5,'COMMENTS:',1,1,'L',0); 
      $pdf->SetFont('Times','',7); 
     $empty--; 
    } 

     $pdf->SetFont('Arial','B',7); 
     $pdf->Cell($margin,5,'',0,0,'L',0); 
     $pdf->Cell($margin,5,'',0,0,'L',0); 
     $pdf->Cell($margin,6,'TOTAL',0,0,'C',0); 
     $pdf->Cell($margin,5,'',1,0,'L',0); 

     $pdf->Cell($total,5,'',1,1,'4',0); 

     $pdf->Ln(3); 

     $pdf->SetFont('Times','',9); 
     $pdf->Cell($pad,5,'This report (including any attachments) contains confidential information for a specific individual and purpose. If you are not the intended recipient',0,1,'C',0); 
     $pdf->Cell($pad,5,'you should delete this message and are hearby notified that any disclosure, copying, or distribution of this report is strictly prohibited',0,1,'C',0); 

    if(++$current!=count($product)){$pdf->AddPage('L');} 
    $i++; 
} 

$pdf->Output(); 

?>