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

PHP CRUD数据提交无响应排查(数据库连接正常)

PHP CRUD 创建功能无反馈问题排查与解决

问题场景

开发PHP CRUD的创建功能,数据库连接已成功建立,但提交表单后无任何反馈(既不显示成功提示也不报错)。此前移除了提交按钮的name="submit"属性后,提交不再出现空白页,但会直接返回原表单页面。

涉及代码文件

connect.php

<?php 
$con = new mysqli('localhost', 'root', '', 'crudoperation');

if(!$con){
    die(mysqli_error($con));
}else{
    echo 'database connection successfully established';
}
?>

user.php

<?php 
include 'connect.php';

if (isset($_POST['submit'])){ // si on appuye sur submit, poster tous les champs
    $name=$_POST['name'];
    $email=$_POST['email'];
    $mobile=$_POST['mobile'];
    $password=$_POST['password'];

    $sql="insert into `crud` (name, email, mobile, password)
    values('$name','$email','$mobile','$password')";
    $result=mysqli_query($con, $sql);
    if($result){
        echo "Data inserted successfully";
    }else{
        die(mysqli_error($con));
    }
}
?>

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>CRUD PHP</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
  </head>
  <body>
    <div class="container my-5">
        <form method="post">
            <div class="mb-3">
                <label>Name</label>
                <input type="text" class="form-control" placeholder="Enter your name" name="name" autocomplete="off">
            </div>
            <div class="mb-3">
                <label>Email</label>
                <input type="email" class="form-control" placeholder="Enter your email" name="email" autocomplete="off">
            </div>
            <div class="mb-3">
                <label>Mobile</label>
                <input type="text" class="form-control" placeholder="Enter your mobile number" name="mobile" autocomplete="off">
            </div>
            <div class="mb-3">
                <label>Password</label>
                <input type="password" class="form-control" placeholder="Enter your password" name="password" autocomplete="off">
            </div>
            <button type="submit" class="btn btn-primary">Submit</button>
        </form>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.min.js" integrity="sha384-0pUGZvbkm6XF6gxjEnlmuGrJXVbNuzT9qBBavbLwCsOGabYfZo0T0to5eqruptLy" crossorigin="anonymous"></script>
  </body>
</html>

问题根源

核心问题出在表单提交的判断逻辑:

  • 代码中用isset($_POST['submit'])来判断是否提交了表单,但当前提交按钮没有name="submit"属性,导致表单提交后$_POST数组中不存在submit键,这个判断条件永远不成立。
  • 因此,插入数据的代码块完全没有执行,页面直接渲染原表单,自然看不到任何反馈。

解决步骤

  1. 恢复提交按钮的name属性:
    修改user.php中的提交按钮代码,添加name="submit":

    <button type="submit" name="submit" class="btn btn-primary">Submit</button>
    

    这样点击提交后,$_POST['submit']会被设置,判断条件isset($_POST['submit'])成立,插入逻辑才会执行。

  2. 修复数据库连接错误处理(可选但重要):
    当前connect.php中mysqli_error($con)的用法有误,当new mysqli连接失败时,应该用$con->connect_error,因为此时$con可能是false,无法作为参数传给mysqli_error。修改如下:

    if(!$con){
        die($con->connect_error);
    }
    
  3. 解决SQL注入风险(必须优化):
    当前代码直接将用户输入拼接到SQL语句中,存在严重的SQL注入漏洞。改用预处理语句:

    if (isset($_POST['submit'])){
        $name=$_POST['name'];
        $email=$_POST['email'];
        $mobile=$_POST['mobile'];
        $password=$_POST['password'];
    
        // 使用预处理语句
        $sql="insert into `crud` (name, email, mobile, password) values(?,?,?,?)";
        $stmt = $con->prepare($sql);
        $stmt->bind_param("ssss", $name, $email, $mobile, $password);
        $result = $stmt->execute();
        
        if($result){
            echo "Data inserted successfully";
        }else{
            die($con->error);
        }
        $stmt->close();
    }
    

内容的提问来源于stack exchange,提问作者Amaury

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:47:12