使用FPDF实现头像显示时else语句出现Undefined variable: pdf错误求助
解决FPDF中
Undefined variable: pdf的问题 我看了你这段用FPDF实现用户头像显示的代码,出现这个错误的原因很明确——你只在if ($row['status'] == 1)的代码块里初始化了$pdf对象,当用户状态不等于1时,进入else分支时$pdf根本还没被创建,自然会报未定义的错误。
错误原因拆解
你当前的逻辑存在变量作用域问题:
- 仅当用户状态为1时,才执行
$pdf = new PDF_Code128('P','mm','A4');创建PDF对象 - 当状态不符合条件时,直接跳到else分支调用
$pdf->image(),但此时$pdf还未被定义
修正后的代码
把PDF对象的初始化代码移到if判断的外面,这样不管进入哪个分支,$pdf都已经被正确创建:
$query = mysqli_query($con,"select * from s_users where s_id = '" . $_GET['s_id'] . "'"); $row = mysqli_fetch_array($query); // 先初始化PDF对象,放在判断逻辑外,确保两个分支都能访问到 $pdf = new PDF_Code128('P','mm','A4'); $pdf->AddPage(); $pdf->Cell(190 ,220,'',1,0); $pdf->image('images/logo.png', 14, 16, -200); if ($row['status'] == 1) { // 显示用户自定义头像 $pdf->image($row['imgdata'], 163, 16, -210); } else { // 显示默认头像 $pdf->image('images/profiledefault.jpg', 163, 16, -210); } $pdf->SetFont('Arial','B',14); // 记得最后调用Output生成并输出PDF,否则看不到结果 // $pdf->Output();
额外优化建议
- 原代码中
SetFont只在if块内执行,else分支不会设置字体,建议移到判断逻辑外,确保全局生效 - 最后一定要调用
$pdf->Output()来输出PDF文件,否则无法生成最终的PDF内容 - 直接将
$_GET['s_id']拼进SQL语句存在SQL注入风险,建议改用预处理语句优化安全性:
// 预处理语句示例(假设s_id为整数类型) $stmt = mysqli_prepare($con, "select * from s_users where s_id = ?"); mysqli_stmt_bind_param($stmt, "i", $_GET['s_id']); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $row = mysqli_fetch_array($result);
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

