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键,这个判断条件永远不成立。 - 因此,插入数据的代码块完全没有执行,页面直接渲染原表单,自然看不到任何反馈。
解决步骤
恢复提交按钮的
name属性:
修改user.php中的提交按钮代码,添加name="submit":<button type="submit" name="submit" class="btn btn-primary">Submit</button>这样点击提交后,
$_POST['submit']会被设置,判断条件isset($_POST['submit'])成立,插入逻辑才会执行。修复数据库连接错误处理(可选但重要):
当前connect.php中mysqli_error($con)的用法有误,当new mysqli连接失败时,应该用$con->connect_error,因为此时$con可能是false,无法作为参数传给mysqli_error。修改如下:if(!$con){ die($con->connect_error); }解决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
相关产品推荐
相关产品推荐

