PHP页面图片无法显示:通过RestaurantQuery.php上传的图片不展示
问题排查:表单上传图片无法展示,phpMyAdmin上传正常
问题场景
现有两个PHP页面:
RestaurantQuery.php:提供表单上传餐厅名称、描述、Logo到MySQL数据库restaurants.php:从数据库读取数据并展示,其中图片通过base64编码嵌入页面
当前问题:通过RestaurantQuery.php上传的图片无法显示,直接用phpMyAdmin上传的图片则能正常展示。
核心原因
原RestaurantQuery.php代码存在两个关键错误:
- 文件上传的内容不会出现在
$_POST数组中,而是存储在$_FILES数组里,直接使用$_POST['logo']只能获取到文件名,而非图片的二进制数据 - 没有读取上传文件的内容并转义,直接将文件名插入数据库,导致数据库中存储的不是图片本身,无法通过
base64_encode()生成可展示的图片数据
修复后的代码
修改后的RestaurantQuery.php
<?php $connection = mysqli_connect("localhost:3307", "root", "", "foodstation"); if (!$connection) { die("数据库连接失败: " . mysqli_connect_error()); } if(isset($_POST['submit']) && isset($_FILES['logo'])) { // 读取上传文件的二进制内容 $logoContent = file_get_contents($_FILES['logo']['tmp_name']); // 转义特殊字符,防止SQL注入 $name = mysqli_real_escape_string($connection, $_POST['name']); $description = mysqli_real_escape_string($connection, $_POST['description']); $logo = mysqli_real_escape_string($connection, $logoContent); $query = "INSERT INTO restaurants (name, logo, description) VALUES ('$name', '$logo', '$description')"; $query_run = mysqli_query($connection, $query); if($query_run) { echo '<script> alert("餐厅信息上传成功")</script>'; } else{ echo '<script> alert("餐厅信息上传失败: ' . mysqli_error($connection) . '")</script>'; } } ?> <!DOCTYPE html> <html> <head> <title> Restaurant Query </title> <meta charset="utf-8"> <link rel="stylesheet" href="RestaurantQuery-style.css"> </head> <body> <div class="container"> <a href="./login.php" class="AdminLogin">Log-in</a> <a href="./index.html" class="Home">Home</a> <a href="./AboutUs.html" class="AboutUs">About us</a> <a href="./Restaurants.php" class="Restaurants">Restaurants</a> <a href="./Cafes.html" class="Cafes">Cafés</a> <input type = "search" class = "search" placeholder=" search"> <div class="divider"> </div> </div> <img src="logo.png" class="logo"> <hr class="divider1" width=1 size=959> <div class="bodyc1"> <h1> <span style="color: #476e9e"> Add Restaurant </span> </h1> <form method="post" action="RestaurantQuery.php" enctype='multipart/form-data'> <label> Restaurant name: </label> <input type="text" name="name"> <br><br> <label> Restaurant description: </label> <input type="text" name="description"> <br><br> <label> Restaurant logo: </label> <input type="file" name="logo" accept="image/*" required> <br><br> <input type="submit" name="submit" value="Add Restaurant"> </form> </div>
额外注意事项
- 确保数据库中
restaurants表的logo字段类型为LONGBLOB(或足够存储图片的BLOB类型),避免因字段容量不足导致图片截断 - 原
restaurants.php的展示逻辑无需修改,因为它已经正确处理了二进制图片数据的base64编码
内容的提问来源于stack exchange,提问作者Muath
相关产品推荐
相关产品推荐

