PHP图片上传脚本:未选图时自动添加占位图的实现方法
解决方案:添加占位图自动存入逻辑
首先,准备占位图文件:在你的uploads/目录下放入一张占位图,命名为placeholder.jpg(格式可选用你允许的类型,比如jpg/png)。
接下来修改post.php的代码,调整逻辑:当用户未选择文件时,直接使用占位图的信息插入数据库,避免空数据导致应用崩溃。
修改后的post.php代码:
<?php include 'config.php'; $statusMsg = ''; $targetDir = "uploads/"; // 默认设置为占位图文件名 $fileName = 'placeholder.jpg'; $targetFilePath = $targetDir . $fileName; if(isset($_POST["submit"])){ // 检查是否有上传文件 if(!empty($_FILES["file"]["name"])){ $uploadedFileName = basename($_FILES["file"]["name"]); $uploadedTargetPath = $targetDir . $uploadedFileName; $fileType = pathinfo($uploadedTargetPath,PATHINFO_EXTENSION); // 允许的文件格式 $allowTypes = array('jpg','png','jpeg','gif','pdf','mp3'); if(in_array($fileType, $allowTypes)){ if(move_uploaded_file($_FILES["file"]["tmp_name"], $uploadedTargetPath)){ // 上传成功,替换为上传的文件名 $fileName = $uploadedFileName; $statusMsg = "文件: ".$fileName." 已成功添加到帖子。前往主页: <a href='strona_glowna.php'>主页</a>"; }else{ $statusMsg = "抱歉,上传文件时出错了。"; } }else{ $statusMsg = '抱歉,仅允许上传JPG、JPEG、PNG、GIF、PDF格式文件。'; } }else{ // 未选择文件,使用占位图 $statusMsg = "未选择上传文件,已使用占位图。前往主页: <a href='strona_glowna.php'>主页</a>"; } // 统一执行数据库插入,确保必有数据写入 // 使用预处理语句防止SQL注入 $stmt = $db->prepare("INSERT into images (file_name, uploaded_on) VALUES (?, NOW())"); $stmt->bind_param("s", $fileName); if(!$stmt->execute()){ $statusMsg = "数据库插入失败,请重试。"; } $stmt->close(); } ?>
关键改动说明:
- 初始化
$fileName为占位图文件名,确保无论是否上传文件,都有有效值 - 调整执行逻辑:先判断表单提交,再处理上传情况,未上传则保留占位图文件名
- 统一在最后执行数据库插入,保证一定会写入数据,避免应用崩溃
- 替换原SQL拼接写法,使用预处理语句规避SQL注入风险
你可根据需求修改占位图的文件名和格式,只要确保它在uploads/目录下,且属于允许的文件类型即可。
内容的提问来源于stack exchange,提问作者olioxpl
相关产品推荐
相关产品推荐

