PHP电商商品发布表单问题:else分支无法执行求助
问题描述
开发简易电商网站时,实现用户发布商品并上传图片的表单,空值校验的if分支可正常执行,但满足非空条件进入else分支时,页面直接跳转至空白页,无任何提示弹窗或错误信息。在else分支前添加echo语句可正常输出,怀疑move_uploaded_file操作或SQL插入查询存在问题。
相关PHP代码:
<?php include('../Includes/connect.php'); if(isset($_POST['insert_product'])){ $prod_title=$_POST['product_title']; $desc=$_POST['description']; $kw=$_POST['product_keywords']; $prod_cat=$_POST['product_category']; $price=$_POST['product_price']; $prod_status='true'; //images $p_img1=$_FILES['product_image1'] ['name']; $p_img2=$_FILES['product_image2'] ['name']; $p_img3=$_FILES['product_image3'] ['name']; //image temp name $tmp_img1=$_FILES['product_image1'] ['tmp_name']; $tmp_img2=$_FILES['product_image2'] ['tmp_name']; $tmp_img3=$_FILES['product_image3'] ['tmp_name']; //checking empty conditions if($prod_title=='' or $desc=='' or $kw=='' or $prod_cat=='' or $price=='' or $p_img1=='' or $p_img2=='' ){ echo "<script>('Please fill all the available fields')</script>"; exit(); }else{ move_uploaded_file($tmp_img1,"../Images/prod_imgs/$p_img1"); move_uploaded_file($tmp_img2,"../Images/prod_imgs/$p_img2"); move_uploaded_file($tmp_img3,"../Images/prod_imgs/$p_img3"); //insert query $insert_product = "insert into products (prod_title,prod_desc,prod_keyword,cat_id,prod_img1,prod_img2,prod_img3,date,status,price) values('$prod_title','$desc','$kw','$prod_cat','$p_img1','$p_img2','$p_img3',NOW(),'$prod_status','$price')"; $result_query=mysqli_query($con, $insert_product); if($result_query){ echo "<script>alert('Successfully inserted product')</script>"; } } } ?>
数据库products表结构:
prod_id:INT类型,主键,自增prod_title:VARCHAR(255)prod_desc:TEXTprod_keyword:VARCHAR(255)cat_id:INTprod_img1:VARCHAR(255)prod_img2:VARCHAR(255)prod_img3:VARCHAR(255)date:DATEstatus:VARCHAR(20)price:VARCHAR(100)
排查与解决步骤
1. 开启PHP错误显示
空白页通常是因为发生致命错误但未输出,在代码最顶部添加以下代码,强制显示所有错误:
<?php error_reporting(E_ALL); ini_set('display_errors', 1); include('../Includes/connect.php'); // 后续代码不变 ?>
2. 检查文件上传的有效性与权限
move_uploaded_file失败时不会自动抛出错误,需手动判断返回值并排查问题:
- 替换原上传代码为:
// 检查上传目录是否存在,不存在则创建 $upload_dir = "../Images/prod_imgs/"; if (!is_dir($upload_dir)) { mkdir($upload_dir, 0755, true); } // 上传图片1并检查结果 if (!move_uploaded_file($tmp_img1, $upload_dir . $p_img1)) { die("图片1上传失败,错误码:" . $_FILES['product_image1']['error']); } // 上传图片2并检查结果 if (!move_uploaded_file($tmp_img2, $upload_dir . $p_img2)) { die("图片2上传失败,错误码:" . $_FILES['product_image2']['error']); } // 上传图片3并检查结果 if (!move_uploaded_file($tmp_img3, $upload_dir . $p_img3)) { die("图片3上传失败,错误码:" . $_FILES['product_image3']['error']); }
- 确认
../Images/prod_imgs/目录的权限:设置为755(Linux)或确保服务器用户有写入权限(Windows)。
3. 排查SQL插入错误
原代码未处理SQL执行失败的情况,添加错误捕获:
$result_query = mysqli_query($con, $insert_product); if ($result_query) { echo "<script>alert('商品添加成功')</script>"; } else { die("SQL插入失败:" . mysqli_error($con)); }
同时注意:
- 确保
cat_id字段接收的$prod_cat是合法整数(可通过intval($prod_cat)转换),否则会因字段类型不匹配插入失败。 - 当前代码存在SQL注入风险,建议改用预处理语句:
$stmt = mysqli_prepare($con, "INSERT INTO products (prod_title, prod_desc, prod_keyword, cat_id, prod_img1, prod_img2, prod_img3, date, status, price) VALUES (?, ?, ?, ?, ?, ?, ?, NOW(), ?, ?)"); mysqli_stmt_bind_param($stmt, "sssisssss", $prod_title, $desc, $kw, $prod_cat, $p_img1, $p_img2, $p_img3, $prod_status, $price); $result_query = mysqli_stmt_execute($stmt);
4. 确认表单设置
确保提交商品的表单添加了enctype="multipart/form-data"属性,否则无法上传文件:
<form method="post" action="你的处理页面.php" enctype="multipart/form-data"> <!-- 表单内容 --> </form>
内容的提问来源于stack exchange,提问作者steven ndengi
相关产品推荐
相关产品推荐

