PHP PDF生成问题

时间:2011-03-21 06:01:30

标签: php mysql fpdf

我使用FPDF在PHP中创建pdf。

我使用会话变量将变量在一个表单之间传递给另一个表单。当我在

中提供一个值时
    Report.php
    <?php
    session_start();
    $_SESSION['year1']=$_POST['course_year'];
    $_SESSION['sem1']=$_POST['semester'];
    $_SESSION['community1']=$_POST['community'];
    $_SESSION['course1']=$_POST['course'];
    $_SESSION['mess_type1']=$_POST['mess_type'];
    $_SESSION['block_name1']=$_POST['block_name'];
    ?>        
    <form action='report.php' method='POST'name= 'form1'>
        <p><tr><td><b> Course Year:</b></td><td><input type='text' name='course_year'></td></tr><br></p>
        <p><tr><td> &nbsp;</td><td><input style='width:105;height:32' type='submit'  value='Generate Report'onsubmit='yearpdf.php' onclick="year_open()" ></td></tr>
        </form>
    <h2 align='left'><b>Semester</h2></b>
    <form action='report.php' method='POST'name= 'form2'>
    <!--<form action='report.php' align='left' method='POST'>-->
    <p><b><tr><td>Semester:</b></td><td><input type='text' name='semester'></td></tr><br></p>
    <p><tr><td> &nbsp;</td><td><input style='width:105;height:32' type='submit'  value='Generate Report' onsubmit='sempdf.php' onclick="sem_open()"></td></tr></table>
    </form>
.... so on for community, course, messtype and blockname

其中yearpdf.php是我为创建pdf文件而编写的文件。生成pdf后,将立即显示带表的空白值。我必须刷新才能获得PDF中显示的值。我的yearpdf文件是:

    <?php
session_start();
require('fpdf/fpdf.php');

//Connect to your database

$r1=$_SESSION['year1'];

$con=mysql_connect('localhost','root','');

if(!$con)
{
die('Unable to connect'.mysql_error());
}
mysql_select_db('hostel',$con);

//Select the list you want to show in your PDF file
$result=mysql_query("select hosteladmissionno,student_name,sex,community,semester,course,course_year,mess_type,block_name from registration where course_year='".$r1."' ORDER BY hosteladmissionno");

$number_of_products = mysql_numrows($result);



//For each row, add the field to the corresponding column
while($row = mysql_fetch_array($result))
{
    $hostad = $row['hosteladmissionno'];
    $name = $row['student_name'];
    $sex = $row['sex'];
    $sem=$row['semester'];
    $comm=$row['community'];
    $course=$row['course'];
    $courseyr=$row['course_year'];
    $mess= $row['mess_type'];
    $block=$row['block_name'];



    $column_no = $column_no.$hostad."\n";
    $column_name = $column_name.$name."\n";
    $sex_details = $sex_details.$sex."\n";
    $sem_details= $sem_details.$sem."\n";
    $comm_details= $comm_details.$comm."\n";
    $course_details= $course_details.$course."\n";
    $courseyr_details= $courseyr_details.$courseyr."\n";
    $mess_details= $mess_details.$mess."\n";
    $block_details= $block_details.$block."\n";
    //$column_price = $column_price.$price_to_show."\n";


}
mysql_close();

//Convert the Total Price to a number with (.) for thousands, and (,) for decimals.
//$total = number_format($total,',','.','.');

//Create a new PDF file
$pdf=new FPDF();
$pdf->AddPage();

//Fields Name position
$Y_Fields_Name_position = 40;
//Table position, under Fields Name
$Y_Table_Position = 46;

//First create each Field Name
//Gray color filling each Field Name box
$pdf->SetFillColor(232,232,232);
//Bold Font for Field Name
$pdf->SetFont('Arial','B',10);
$pdf->SetY($Y_Fields_Name_position);
$pdf->SetX(5);
$pdf->Cell(30,6,'Admission No',1,0,'L',1);
$pdf->SetX(35);
$pdf->Cell(35,6,'Student Name',1,0,'L',1);
$pdf->SetX(70);
$pdf->Cell(20,6,'Sex',1,0,'L',1);
$pdf->SetX(88);
$pdf->Cell(20,6,'Category',1,0,'L',1);
$pdf->SetX(108);
$pdf->Cell(20,6,'Semester',1,0,'L',1);
$pdf->SetX(128);
$pdf->Cell(20,6,'Course',1,0,'L',1);
$pdf->SetX(145);
$pdf->Cell(15,6,'Year',1,0,'L',1);
$pdf->SetX(160);
$pdf->Cell(25,6,'Mess type',1,0,'L',1);
$pdf->SetX(185);
$pdf->Cell(25,6,'Block Name',1,0,'L',1);
$pdf->Ln();

//Now show the 3 columns
$pdf->SetFont('Arial','',10);
$pdf->SetY($Y_Table_Position);
$pdf->SetX(5);
$pdf->MultiCell(30,6,$column_no,1);
$pdf->SetY($Y_Table_Position);
$pdf->SetX(35);
$pdf->MultiCell(35,6,$column_name,1);
$pdf->SetY($Y_Table_Position);
$pdf->SetX(70);
$pdf->MultiCell(18,6,$sex_details,1);
$pdf->SetY($Y_Table_Position);
$pdf->SetX(88);
$pdf->MultiCell(20,6,$comm_details,1);
$pdf->SetY($Y_Table_Position);
$pdf->SetX(108);
$pdf->MultiCell(20,6,$sem_details,1);
$pdf->SetY($Y_Table_Position);
$pdf->SetX(128);
$pdf->MultiCell(17,6,$course_details,1);
$pdf->SetY($Y_Table_Position);
$pdf->SetX(145);
$pdf->MultiCell(15,6,$courseyr_details,1);
$pdf->SetY($Y_Table_Position);
$pdf->SetX(160);
$pdf->MultiCell(25,6,$mess_details,1);
$pdf->SetY($Y_Table_Position);
$pdf->SetX(185);
$pdf->MultiCell(25,6,$block_details,1);



$i = 0;
$pdf->SetY($Y_Table_Position);
while ($i < $number_of_products)
{
    $pdf->SetX(5);
    $pdf->MultiCell(205,6,'',1);
    $i = $i +1;
}

$pdf->Output();

?>

1 个答案:

答案 0 :(得分:3)

您的表单onsubmit似乎有误。 onsubmit应该是javascript function而不是php file。如果您需要提交到php文件,则应使用action form属性。目前您已将其作为report.php提供。您可能需要将其更改为yearpdf.php或重定向到report.php

编辑1:

问题是你正在调用window.open来打开一个网址,但是没有提交你的输入值。所以第一次什么都不会发生。但是在下一个window.open或下一次刷新时,会有来自report.php的会话变量,从而检索数据。你可以按照一些选择

  1. 将report.php的代码放在yearpdf.php中处理提交,并将表单“action”更改为yearpdf.php。并删除onclick功能
  2. 或者从report.php重定向到report.php末尾的yearpdf.php。对于重定向,您可以使用header('Location: http://www.yoursite.com/yearpdf.php');。并删除onclick功能
  3. 或修改您的JavaScript代码以发送类似window.open("yearpdf.php" + "?course_year=" + document.getElementsByName("course_year")[0].value));的内容,并在yearpdf.php中将$r1=$_SESSION['year1'];更改为$r1=$_GET['course_year'];
  4. 选项1是推荐且简单的方法。选项2是开销,如果在重定向之前输出任何html,则无法工作。和选项3产生一个不必要的窗口。