图片上传报错排查及非指定格式后异常提示移除需求咨询
Hey Bianca, let's work through your two issues step by step:
问题1:图片上传报错与查询语句问题
从你提供的代码片段来看,有两个关键问题可能导致报错或安全隐患:
严重的SQL注入风险
你直接将用户传入的$_GET['id']拼接进SQL查询语句:$p=mysqli_query($conn,"select * from product where productid='$id'");这种写法完全没有过滤用户输入,很容易被恶意用户利用,篡改数据库数据或窃取敏感信息。
缺失图片上传核心处理逻辑
你的代码里完全没有涉及$_FILES相关的处理(这是PHP处理文件上传的核心全局变量),这应该是图片上传报错的直接原因——系统根本没有接收、验证或存储上传的图片文件。
修复建议:
- 改用预处理语句彻底规避SQL注入:
// 假设productid是整数类型,用"i";如果是字符串则用"s" $stmt = $conn->prepare("SELECT * FROM product WHERE productid = ?"); $stmt->bind_param("i", $id); $stmt->execute(); $result = $stmt->get_result(); $prow = $result->fetch_assoc(); $stmt->close(); - 补充完整的图片上传处理逻辑:
要添加代码检查上传文件的错误状态、验证文件格式(优先用MIME类型而非后缀)、移动临时文件到指定存储目录,必要时将文件路径存入数据库。示例片段:if ($_FILES['image']['error'] === UPLOAD_ERR_OK) { $allowed_mimes = ['image/jpeg', 'image/png']; $file_mime = mime_content_type($_FILES['image']['tmp_name']); if (!in_array($file_mime, $allowed_mimes)) { // 格式错误提示逻辑 } else { $target_path = 'uploads/' . uniqid() . '_' . $_FILES['image']['name']; move_uploaded_file($_FILES['image']['tmp_name'], $target_path); // 后续将$target_path存入产品表的对应字段 } } else { // 上传错误提示逻辑(比如文件过大、临时存储失败等) }
问题2:非指定格式文件上传后错误提示+成功提示共存的问题
这个问题的核心是你的代码没有在格式验证失败时终止后续流程。当检测到文件格式不符合要求时,你只输出了错误提示,但没有阻止后面执行“产品更新成功”的代码。
修复方法:
在输出错误提示的语句后添加exit;(或die();),直接终止脚本执行,这样后续的成功提示就不会触发了:
// 假设你的格式验证代码如下 $allowed_ext = ['jpg', 'jpeg', 'png']; $file_ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION)); if (!in_array($file_ext, $allowed_ext)) { echo "<script>alert('图片未更新,请仅上传JPG或PNG格式图片!');</script>"; exit; // 终止后续代码,避免弹出成功提示 } // 以下是正常上传、更新产品逻辑,以及成功提示代码
或者,你可以用条件判断包裹成功提示的代码,仅当格式验证通过且更新操作成功时才输出成功提示。
内容的提问来源于stack exchange,提问作者Bianca
相关产品推荐
相关产品推荐

