You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP页面图片无法显示:通过RestaurantQuery.php上传的图片不展示

问题排查:表单上传图片无法展示,phpMyAdmin上传正常

问题场景

现有两个PHP页面:

  • RestaurantQuery.php:提供表单上传餐厅名称、描述、Logo到MySQL数据库
  • restaurants.php:从数据库读取数据并展示,其中图片通过base64编码嵌入页面

当前问题:通过RestaurantQuery.php上传的图片无法显示,直接用phpMyAdmin上传的图片则能正常展示。

核心原因

原RestaurantQuery.php代码存在两个关键错误:

  1. 文件上传的内容不会出现在$_POST数组中,而是存储在$_FILES数组里,直接使用$_POST['logo']只能获取到文件名,而非图片的二进制数据
  2. 没有读取上传文件的内容并转义,直接将文件名插入数据库,导致数据库中存储的不是图片本身,无法通过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>

额外注意事项

  1. 确保数据库中restaurants表的logo字段类型为LONGBLOB(或足够存储图片的BLOB类型),避免因字段容量不足导致图片截断
  2. 原restaurants.php的展示逻辑无需修改,因为它已经正确处理了二进制图片数据的base64编码

内容的提问来源于stack exchange,提问作者Muath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:41:07