表单无法提交数据至MySQL数据库的技术求助
表单数据无法写入MySQL数据库的问题排查与修复
问题1:HTML表单嵌套错误+缺少提交按钮
你的HTML代码嵌套了两个<form>标签,这属于无效HTML结构,浏览器无法正确解析,直接导致表单数据无法通过POST提交到后端。同时原代码没有提交按钮,用户无法触发提交操作。
错误代码片段
<form method="post" action=""><br> <center><h1>BEGINNING INVENTORY</h1></center> <br> <form> <!-- 表单控件 --> </form>
修复后代码
<form method="post" action=""> <center><h1>BEGINNING INVENTORY</h1></center> <br> <div class="div4"> <label for="barid">Bar ID: </label><br> <input type="number" class="textbox" id="barid" name="barid" style="width: 690px" /> </div> <div class="div2"> <label for="barname">Bar Name: </label> <input type="text" class="textbox" id="barname" name="barname" style="width: 690px" /> <br> </div> <div class="div4"> <label for="man_name">Manager: </label> <input type="text" class="textbox" id="man_name" name="man_name" style="width: 690px" /> <br> </div> <div class="div2"> <label for="txt_date">Date (yyyy-mm-dd): </label> <input type="text" class="textbox" id="txt_date" name="txt_date" style="width: 690px" /> </div> <!-- 添加提交按钮,触发表单提交 --> <div style="margin-top: 15px;"> <button type="submit">提交数据</button> </div> </form>
问题2:PHP SQL语句语法错误
INSERT语句的VALUES部分缺失右括号,导致SQL语法报错:
错误代码片段
$sql = $con->prepare("INSERT INTO beginv (barID, barName, manName, dateUploaded) VALUES (:barid, :barname, :manname, :dateUp");
修复后代码
$sql = $con->prepare("INSERT INTO beginv (barID, barName, manName, dateUploaded) VALUES (:barid, :barname, :manname, :dateUp)");
问题3:PDO预处理语句执行方式错误
你使用$con->exec($sql)执行预处理语句是错误的,exec()仅适用于直接执行SQL字符串,预处理语句需要调用自身的execute()方法:
错误代码片段
if($con->exec($sql)) { echo "Request sent successfully"; }
修复后代码
if($sql->execute()) { echo "Request sent successfully"; }
可选优化:检查POST数据合法性
为避免未定义索引警告,建议在绑定参数前先检查POST数据是否存在:
$barid = $_POST["barid"] ?? null; $barname = $_POST["barname"] ?? null; $manname = $_POST["man_name"] ?? null; $dateUp = $_POST["txt_date"] ?? null; $sql->bindParam(':barid', $barid); $sql->bindParam(':barname', $barname); $sql->bindParam(':manname', $manname); $sql->bindParam(':dateUp', $dateUp);
完整修复后的PHP代码
<?php $host = "localhost"; $username = "root"; $password = ""; $dbname = "database"; try { $con = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 仅处理POST请求 if ($_SERVER['REQUEST_METHOD'] === 'POST') { $barid = $_POST["barid"] ?? null; $barname = $_POST["barname"] ?? null; $manname = $_POST["man_name"] ?? null; $dateUp = $_POST["txt_date"] ?? null; $sql = $con->prepare("INSERT INTO beginv (barID, barName, manName, dateUploaded) VALUES (:barid, :barname, :manname, :dateUp)"); $sql->bindParam(':barid', $barid); $sql->bindParam(':barname', $barname); $sql->bindParam(':manname', $manname); $sql->bindParam(':dateUp', $dateUp); if($sql->execute()) { echo "Request sent successfully"; } } } catch(PDOException $e) { echo "Error: " . $e->getMessage(); } ?>
内容的提问来源于stack exchange,提问作者Coy Gause
相关产品推荐
相关产品推荐

