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

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:TEXT
  • prod_keyword:VARCHAR(255)
  • cat_id:INT
  • prod_img1:VARCHAR(255)
  • prod_img2:VARCHAR(255)
  • prod_img3:VARCHAR(255)
  • date:DATE
  • status: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:04:55