【问题标题】:PHP PDF generation problemPHP PDF生成问题
【发布时间】:2011-03-21 06:01:29
【问题描述】:

我使用 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();

?>

【问题讨论】:

  • 在写入 pdf 之前生成 pdf 或获取值是否有问题。
  • 也请像其他人一样缩短你的问题并提醒我。

标签: php mysql fpdf


【解决方案1】:

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

编辑 1:

问题是您正在调用 window.open,它会打开一个 url 但不会提交您的输入值。所以第一次什么都不会发生。但是在下一次window.open 或下一次刷新时,report.php 中存在会话变量,从而检索数据。你可以遵循一些选项

  1. 将处理提交的report.php代码放在yearpdf.php中,并将“action”表单更改为yearpdf.php。并移除 onclick 功能
  2. 或从report.php 重定向到report.php 末尾的yearpdf.php。对于重定向,您可以使用header('Location: @987654321@');。并移除 onclick 功能
  3. 或修改您的 JavaScript 代码以发送类似 window.open("yearpdf.php" + "?course_year=" + document.getElementsByName("course_year")[0].value)); 的内容并将您的 $r1=$_SESSION['year1']; 更改为 yearpdf.php 中的 $r1=$_GET['course_year'];

选项 1 是推荐且简单的方法。选项 2 是一种开销,如果您在重定向之前输出任何 html,则该选项将不起作用。选项 3 会产生一个不必要的窗口。

【讨论】:

  • (我在第一个表单中使用这个会话变量,即包含您现在输入的 HTML 代码的表单)
  • 嗯..这很奇怪。你也可以发布report.php吗?
  • 这感觉像是messing with session 的问题,因为它适用于referh
  • 是的!确切地说..我在会话方面做错了。不知道该找谁修。
  • 发生了什么?你选择哪种方法?我认为选项一对你来说是最好的。因为除了声明会话变量之外,report.php 中没有没有处理。您只需要将表单action 更改为yearpdf.php 并将$r1 更改为$r1=$_POST['course_year'];。对吗?
猜你喜欢
  • 2014-05-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 2010-10-10
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多