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
相关产品推荐
相关产品推荐

