PHP/MySQL中传递行ID查询单行及FPDF动态打印问题求助
解决根据cardId查询单行并使用FPDF打印的问题
你已经搞定了批量打印全表的功能,现在要实现单行打印的话,咱们可以分成前端传递cardId、PHP查询单行数据、FPDF生成单行PDF这几个步骤来做,下面一步步给你拆解:
1. 前端添加单行打印触发按钮
首先在你现有的表格行里,给每一行加一个打印按钮,把当前行的cardId传递给PHP处理页面。修改你的前端代码,在<tr>末尾加一个<td>放置按钮:
<tr> <td>'.$data["cardId"].'</td> <td id="surname_'.$data["cardId"].'">'.$data["surname"].', '.$data["givenName"].'</td> <td id="resAddress_'.$data["cardId"].'">'.$data["resAddress"].'</td> <td id="resSuburb_'.$data["cardId"].'">...</td> <!-- 添加打印按钮 --> <td> <a href="print_single.php?cardId='.$data["cardId"].'" target="_blank">打印该行</a> </td> </tr>
这里用超链接直接跳转到打印处理页面,通过GET参数cardId传递当前行的ID,简单直接,适配FPDF需要直接输出PDF的场景。
2. PHP接收cardId并查询单行数据
接下来创建print_single.php文件,接收前端传过来的cardId,然后用预处理语句查询MySQL(一定要用预处理,避免SQL注入风险!):
<?php // 连接数据库(替换成你的数据库信息) $conn = new mysqli('localhost', 'username', 'password', 'database_name'); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 验证并获取cardId参数 if (!isset($_GET['cardId']) || !is_numeric($_GET['cardId'])) { die("无效的cardId参数"); } $cardId = $_GET['cardId']; // 使用预处理语句查询单行数据 $stmt = $conn->prepare("SELECT cardId, surname, givenName, resAddress, resSuburb FROM your_table_name WHERE cardId = ?"); $stmt->bind_param("i", $cardId); // "i"表示整数类型,若cardId是字符串则改为"s" $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); // 检查是否找到对应数据 if (!$row) { die("未找到对应ID的数据"); } // 关闭连接 $stmt->close(); $conn->close(); ?>
这里核心是用prepare和bind_param来避免SQL注入,绝对不要直接把$_GET['cardId']拼进SQL语句里!
3. 使用FPDF生成单行PDF
在print_single.php里,接着上面的数据库查询代码,引入FPDF库并生成包含该行数据的PDF:
<?php // 上面的数据库查询代码... // 引入FPDF库(确保路径正确) require('fpdf/fpdf.php'); // 创建PDF对象 $pdf = new FPDF(); $pdf->AddPage(); // 设置标题字体 $pdf->SetFont('Arial', 'B', 16); $pdf->Cell(40, 10, '个人信息详情'); $pdf->Ln(15); // 换行 // 设置普通内容字体 $pdf->SetFont('Arial', '', 12); // 逐行输出单行数据 $pdf->Cell(40, 10, 'Card ID:'); $pdf->Cell(80, 10, $row['cardId']); $pdf->Ln(); $pdf->Cell(40, 10, '姓名:'); $pdf->Cell(80, 10, $row['surname'] . ', ' . $row['givenName']); $pdf->Ln(); $pdf->Cell(40, 10, '地址:'); $pdf->Cell(80, 10, $row['resAddress']); $pdf->Ln(); $pdf->Cell(40, 10, '郊区:'); $pdf->Cell(80, 10, $row['resSuburb']); $pdf->Ln(); // 输出PDF到浏览器 $pdf->Output(); ?>
这样用户点击某一行的打印按钮时,会打开新窗口加载print_single.php,查询对应ID的单行数据后生成并输出PDF。
额外注意事项
- 确保FPDF库的路径正确,若你把FPDF放在项目根目录的
fpdf文件夹里,require('fpdf/fpdf.php')就没问题; - 数据库连接信息要替换成你自己的配置;
- 如果
cardId是字符串类型(比如UUID),记得把bind_param的参数从"i"改成"s"; - 可以根据需求调整PDF的布局,比如添加边框、调整单元格宽度、修改字体样式等。
内容的提问来源于stack exchange,提问作者Rayzor536
相关产品推荐
相关产品推荐

