代码运行无任何报错,为何无法将数据插入数据库?
问题根因
- 超全局变量大小写错误:PHP 中
$_POST是大小写敏感的,你的代码中判断表单提交用了$_post['submit'](小写p),该判断永远返回false,导致插入逻辑完全不执行,所以无任何输出也无数据库操作。 - 表单属性存在多余空格:代码中
method=" POST"的属性值前有空格、用户名输入框type=" text"的属性值前有空格,部分浏览器会识别异常,导致表单提交不符合预期。 - PDO 预处理使用不规范:直接将用户输入变量拼接进SQL语句,既失去了预处理防SQL注入的能力,也可能因输入内容含特殊字符(如单引号)导致SQL执行失败,同时你开启了PDO异常模式但未捕获执行阶段的错误,所以出错也无提示。
- 逻辑提示不合理:插入失败的else分支仍输出“已发送”,无法直观判断执行结果。
修复后的代码示例
表单部分
<div class="container"> <!-- 修复method属性的多余空格 --> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <label for="fname"> الاسم </label><br> <!-- 修复type属性的多余空格 --> <input type="text" id="fname" name="username" placeholder=" الاسم"><br> <label for="email"> البريد الالكتروني </label><br> <input type="email" id="email" name="email" placeholder="البريد الالكتروني "><br> <label for="valley"> اسم الحي </label><br> <input type="text" id="valley" name="valley" placeholder="اسم الحي "><br> <label for="phone"> رقم الجوال</label><br> <input type="text" id="phone" name="mobile" placeholder="رقم الجوال "><br> <label for="subject">الطلب</label><br> <textarea id="subject" name="subj" placeholder="اكتب الطلب " style="height:200px"></textarea><br> <input type="submit" name="submit" value="ارسل"> </form> </div> <br>
数据插入逻辑部分
<?php include('connect_pdo.php'); // 修复超全局变量大小写错误 if (isset($_POST['submit'])) { $name = $_POST['username']; $email = $_POST['email']; $valley = $_POST['valley']; $phone = $_POST['mobile']; $subject = $_POST['subj']; // 改用参数绑定的预处理写法,避免SQL注入和语法错误 $stmt = $pdo->prepare("INSERT INTO emails (username,email,valley,mobile,subj) VALUES (?,?,?,?,?)"); try { $stmt->execute([$name, $email, $valley, $phone, $subject]); echo "تم الارسال بنجاح"; } catch (PDOException $e) { // 输出执行阶段的错误信息方便排查 echo "发送失败,错误原因:" . $e->getMessage(); } }
额外检查项
确认person库下的emails表字段名、字段类型、长度和插入内容匹配,比如mobile字段如果设置为int类型,输入过长的手机号会触发插入失败。
内容的提问来源于stack exchange,提问作者tarek
相关产品推荐
相关产品推荐

