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

PHP实现基于select选中项为指定数据库图书行上传图片的求助

图书图片关联上传功能修正方案

核心问题梳理

  • 结构错误:<select> 下拉选择框放在了 <form> 标签外部,选中值无法随表单提交
  • 传值错误:<option> 的 value 属性存储的是图书名称,没有传递唯一标识的book_id
  • 变量错误:upload.php 中文件获取变量书写错误($FILES 应为 $_FILES),且未定义$bookID变量,也没有接收前端传递的图书ID逻辑
  • 逻辑缺失:没有将图片存储路径/名称更新到对应图书的数据库行的逻辑

修正后代码

index.php 调整代码

<div class="box1">
    <?php
    $sql = "SELECT * FROM books";
    $result = mysqli_query($connection, $sql);
    if (mysqli_num_rows($result) > 0) {
        // 将form标签前置,包裹选择框与上传组件
        echo "<form action='includes/upload.php' method='POST' enctype='multipart/form-data'>";
        // 给select添加name属性,用于提交选中值
        echo "<select name='selected_book_id' class='books-title'>";
        echo "<option selected disabled>-- select book --</option>";
        $sqlBook = "SELECT book_id, book_title FROM books";
        $resultBook = mysqli_query($connection, $sqlBook);
        while ($rowBook = mysqli_fetch_array($resultBook)) {
            // option的value改为存储book_id,作为唯一关联标识
            echo "<option value='". $rowBook['book_id'] ."'>" .$rowBook['book_title'] ."</option>";
        }              
        echo "</select>";
        echo "<input type='file' name='file' class='uploadImg'>";
        echo "<button type='submit' name='submitImg'>UPLOAD</button>";
        echo "</form>";
    }else {
        echo "There's no Books yet!";
    }
    ?>
</div>

upload.php 调整代码

elseif (isset($_POST['submitImg'])) {
    // 接收前端传递的选中图书ID
    $selectedBookId = (int)$_POST['selected_book_id'];
    // 修正全局变量写法,$FILES改为$_FILES
    $fileName = $_FILES['file']['name'];
    $fileTmpName = $_FILES['file']['tmp_name'];
    $fileSize = $_FILES['file']['size'];
    $fileError = $_FILES['file']['error'];

    $fileExt = explode('.', $fileName);
    $fileActualExt = strtolower(end($fileExt));

    $allowed = array('jpg', 'jpeg', 'png');

    if (in_array($fileActualExt, $allowed)) {
        if ($fileError === 0) {
            // 原1000字节仅为1KB无法满足正常图片需求,调整为10MB阈值,可自行修改
            if ($fileSize < 10 * 1024 * 1024) {
                $fileNameNew = $selectedBookId.".".$fileActualExt;
                $fileDestination = '../../images/book_image/'.$fileNameNew;
                move_uploaded_file($fileTmpName, $fileDestination);
                // 新增数据库更新逻辑,将图片名关联到对应图书条目
                $updateSql = "UPDATE books SET book_img = '{$fileNameNew}' WHERE book_id = {$selectedBookId}";
                mysqli_query($connection, $updateSql); // 确保$connection为已激活的数据库连接对象
                header("Location: index.php?uploadsuccess");
            }else {
                echo "Your file is too big!";
            }
        }else {
            echo "There was an error uploading your file!";
        }
    }else{
        echo "You cannot upload files of this type!";
    }
}

注意:请提前确认books表中存在存储图片文件名的字段,示例中使用的字段名为book_img,可根据实际表结构调整字段名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:24:05