PHP PDF generation problem

删除回忆录丶 提交于 2019-12-11 02:07:22

问题


i have used FPDF for creating pdf in PHP.

I used session variable to pass the variable between one form to another form. When i provide a value in the

    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

where yearpdf.php is the file which i have written for the creation of pdf file. As soon as the pdf is generated Blank values with tables are displayed. I have to refresh to get the values displayed in the PDF. My yearpdf file is :

    <?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:


Your form onsubmit seems to be wrong. onsubmit should be a javascript function not a php file. if you need to submit to php file you should use action attribute of form. currently you have given it as report.php. you may need to change it to yearpdf.php or redirect in the report.php

EDIT 1:

the problem is you are calling the window.open which opens an url but doesn't submit your input value. so first time nothing will happen. but however on the next window.open or on the next refresh, there is the session variable from report.php and thus retrieves the data. you can follow some options

  1. put the code of report.php that to process the submit in yearpdf.php and change the form "action" to the yearpdf.php. and remove onclick function
  2. OR Redirect from report.php to yearpdf.php in the end of report.php. For redirect you can use header('Location: http://www.yoursite.com/yearpdf.php');. and remove onclick function
  3. OR modfiy your JavaScript code to send something like this window.open("yearpdf.php" + "?course_year=" + document.getElementsByName("course_year")[0].value)); and change your $r1=$_SESSION['year1']; to $r1=$_GET['course_year']; in yearpdf.php

Option 1 is the recommended and simple way. Option 2 is an overhead and won't work if you output any html before redirection. and Option 3 produces an unnecessary window.



来源:https://stackoverflow.com/questions/5374329/php-pdf-generation-problem

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!