如何同时向两个MySQL表插入数据?现有代码插入失败求助
代码问题排查与修复
你的代码存在多个导致数据无法写入数据库的问题,以下是具体问题和修复方案:
1. 条件判断语法错误
验证条件的if语句末尾多了一个分号;,这会让if的逻辑块直接为空,无论验证是否通过,都会执行插入操作和页面跳转:
// 错误写法:末尾分号导致逻辑失效 if(!isset($errordonor_type) || !isset($errorcon_num) || !isset($errorname1) || !isset($errorcategor_type) || !isset($errorlocation)|| !isset($errordate)||!isset($erroramount)|| !isset($errorwithdrawal));
需去掉末尾分号,让大括号内的代码受条件控制。
2. 字段验证逻辑嵌套错误
$name1的验证被嵌套在$con_num的空值判断里,意味着只有当con_num为空时才会检查name1,不符合需求,应将name1的验证单独提取,与其他字段验证平级:
// 错误写法 $con_num = $_POST['con_num']; if(empty($con_num)){ $errorcon_num="please input your number"; $name1 = $_POST['name1']; if(empty($name1)){ $errorname1="please enter your name";} } // 正确写法 $con_num = $_POST['con_num']; if(empty($con_num)){ $errorcon_num="please input your number"; } $name1 = $_POST['name1']; if(empty($name1)){ $errorname1="please enter your name"; }
3. 缺少数据库操作错误检查
执行mysqli_query后未判断操作是否成功,也未输出数据库错误信息,无法定位插入失败的具体原因,需添加错误检查:
// 示例:检查插入结果并输出错误 $insert = mysqli_query($conn,"INSERT INTO donor(...) VALUES(...)"); if($insert){ echo "<script>alert('created account');window.location.href='login.php'</script>"; }else{ echo "插入失败:" . mysqli_error($conn); }
4. SQL注入风险(同时可能导致插入失败)
直接将POST参数拼入SQL语句,当参数包含特殊字符(如单引号)时会触发SQL语法错误,导致插入失败。必须使用预处理语句规避:
// 预处理语句示例 $stmt = mysqli_prepare($conn, "INSERT INTO donor(donor_type, con_num, name1, categor_type, location, date, amount, withdrawal) VALUES(?, ?, ?, ?, ?, ?, ?, ?)"); mysqli_stmt_bind_param($stmt, "ssssssds", $donor_type, $con_num, $name1, $categor_type, $location, $date, $amount, $withdrawal); if(mysqli_stmt_execute($stmt)){ echo "<script>alert('created account');window.location.href='login.php'</script>"; }else{ echo "插入失败:" . mysqli_stmt_error($stmt); } mysqli_stmt_close($stmt);
(注:ssssssds为参数类型绑定,对应8个参数的类型,可根据数据库字段类型调整)
5. 其他冗余与潜在问题
$donor_type = $_POST['donor_type'];重复赋值,删除其中一个即可;- 检查
categor_type的拼写是否与数据库字段一致(比如是否应为category_type),字段名不匹配会导致插入失败; - 确保
queries.php中的数据库连接$conn有效,无连接错误。
修正后的完整代码示例
<!DOCTYPE html> <html> <head> <?php include "queries.php"; include "header.php"; ?> </head> <body> <?php if(isset($_POST['submit'])){ $donor_type = $_POST['donor_type']; if(empty($donor_type)){ $errordonor_type = "not existing"; } $con_num = $_POST['con_num']; if(empty($con_num)){ $errorcon_num = "please input your number"; } $name1 = $_POST['name1']; if(empty($name1)){ $errorname1 = "please enter your name"; } $categor_type = $_POST['categor_type']; if(empty($categor_type)){ $categor_type = "not existing"; } $location = $_POST['location']; if(empty($location)){ $errorlocation = "please enter your location"; } $date = $_POST['date']; if(empty($date)){ $errordate = "not exist"; } $amount = $_POST['amount']; if(empty($amount)){ $erroramount = "please specefic amount"; } $withdrawal = $_POST['withdrawal']; if(empty($withdrawal)){ $errorwithdrawal = "please choose"; } // 修正条件判断:改为逻辑与,所有验证通过才执行插入 if(!isset($errordonor_type) && !isset($errorcon_num) && !isset($errorname1) && !isset($errorlocation) && !isset($errordate) && !isset($erroramount) && !isset($errorwithdrawal)){ $stmt = mysqli_prepare($conn, "INSERT INTO donor(donor_type, con_num, name1, categor_type, location, date, amount, withdrawal) VALUES(?, ?, ?, ?, ?, ?, ?, ?)"); mysqli_stmt_bind_param($stmt, "ssssssds", $donor_type, $con_num, $name1, $categor_type, $location, $date, $amount, $withdrawal); if(mysqli_stmt_execute($stmt)){ echo "<script>alert('created account');window.location.href='login.php'</script>"; }else{ echo "插入失败:" . mysqli_stmt_error($stmt); } mysqli_stmt_close($stmt); } } ?> </body> </html>
内容的提问来源于stack exchange,提问作者Mohammad Sali Jauhari
相关产品推荐
相关产品推荐

