为什么SQL-服务器会为单个条目保存重复数据?
Why does SQL-Server save duplicate data for a single entry?
我在 php 中开发了一个基于 CRUD 的 Web 应用程序。这是一个表单,其输入数据保存在 sql 服务器数据库中。
即使用户填写一次,数据库也会为其保存多个条目。
问题似乎出在数据库中,因为表单已成功提交。
有人可以帮忙吗?
谢谢
代码如下:
<?php
ob_start();
require_once 'db-connect.php';
require_once 'email.php';
if(isset($_POST['pEmail'])){
$fName = filter_input(INPUT_POST, "fName") ? filter_input(INPUT_POST, 'fName') : null;
$lName = filter_input(INPUT_POST, "lName")? filter_input(INPUT_POST, 'lName') : null;
$mName = filter_input(INPUT_POST, "mName")? filter_input(INPUT_POST, 'mName') : null;
$tempRace = filter_input(INPUT_POST, "race", FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
$race = (is_array($tempRace)) ? implode(',', $tempRace) : null;
$hEthnicity = filter_input(INPUT_POST, "hEthnicity") ? filter_input(INPUT_POST, 'hEthnicity') : null;
$gender = filter_input(INPUT_POST, "gender") ? filter_input(INPUT_POST, 'gender') : null;
$age = filter_input(INPUT_POST, "age") ? filter_input(INPUT_POST, 'age') : null;
$education = filter_input(INPUT_POST, "education") ? filter_input(INPUT_POST, 'education') : null;
$gpa = filter_input(INPUT_POST, "gpa") ? filter_input(INPUT_POST, 'gpa') : null;
$hPhone = filter_input(INPUT_POST, "hPhone") ? filter_input(INPUT_POST, 'hPhone') : null;
$cPhone = filter_input(INPUT_POST, "cPhone") ? filter_input(INPUT_POST, 'cPhone') : null;
$pEmail = filter_input(INPUT_POST, "pEmail") ? filter_input(INPUT_POST, 'pEmail') : null;
$aEmail = filter_input(INPUT_POST, "aEmail") ? filter_input(INPUT_POST, 'aEmail') : null;
$inputAddress = filter_input(INPUT_POST, "inputAddress") ? filter_input(INPUT_POST, 'inputAddress') : null;
$inputCity = filter_input(INPUT_POST, "inputCity") ? filter_input(INPUT_POST, 'inputCity') : null;
$conn = DB::databaseConnection();
$conn->beginTransaction();
$sql = "INSERT INTO dbo.premedical ( FName,LName, MidInitial, Race, Ethnicity, Gender, Age, SchoolYear, Gpa, HPhone, CPhone, PEmail, AEmail, MailAddress, MailCity) VALUES
( :fName,:lName, :mName, :race, :hEthnicity, :gender,:age, :education, :gpa, :hPhone, :cPhone, :pEmail, :aEmail, :inputAddress, :inputCity)";
$q = $conn->prepare($sql);
$q->execute(array($fName, $lName, $mName, $race, $hEthnicity, $gender, $age, $education, $gpa, $hPhone, $cPhone, $pEmail, $aEmail, $inputAddress, $inputCity));
if ($q->execute()) {
$conn->commit();
if (Form::mailer($fName, $lName, $mName, $race, $hEthnicity, $gender, $age, $education, $gpa, $hPhone, $cPhone, $pEmail, $aEmail, $inputAddress, $inputCity)) {
echo '
<script >
alert("Thank you for registration.");
</script>';
}
return true;
} else {
echo '
<script>
alert("Error, please try submitting again. Error code 1");
window.history.back();
</script>';
}
}
?>
调用 $q->execute
会触发执行过程,即使您在逻辑检查中使用它也是如此 - 因此它会执行两次。您应该将其更新为:
<?php
ob_start();
require_once 'db-connect.php';
require_once 'email.php';
if(isset($_POST['pEmail'])){
$fName = filter_input(INPUT_POST, "fName") ? filter_input(INPUT_POST, 'fName') : null;
$lName = filter_input(INPUT_POST, "lName")? filter_input(INPUT_POST, 'lName') : null;
$mName = filter_input(INPUT_POST, "mName")? filter_input(INPUT_POST, 'mName') : null;
$tempRace = filter_input(INPUT_POST, "race", FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
$race = (is_array($tempRace)) ? implode(',', $tempRace) : null;
$hEthnicity = filter_input(INPUT_POST, "hEthnicity") ? filter_input(INPUT_POST, 'hEthnicity') : null;
$gender = filter_input(INPUT_POST, "gender") ? filter_input(INPUT_POST, 'gender') : null;
$age = filter_input(INPUT_POST, "age") ? filter_input(INPUT_POST, 'age') : null;
$education = filter_input(INPUT_POST, "education") ? filter_input(INPUT_POST, 'education') : null;
$gpa = filter_input(INPUT_POST, "gpa") ? filter_input(INPUT_POST, 'gpa') : null;
$hPhone = filter_input(INPUT_POST, "hPhone") ? filter_input(INPUT_POST, 'hPhone') : null;
$cPhone = filter_input(INPUT_POST, "cPhone") ? filter_input(INPUT_POST, 'cPhone') : null;
$pEmail = filter_input(INPUT_POST, "pEmail") ? filter_input(INPUT_POST, 'pEmail') : null;
$aEmail = filter_input(INPUT_POST, "aEmail") ? filter_input(INPUT_POST, 'aEmail') : null;
$inputAddress = filter_input(INPUT_POST, "inputAddress") ? filter_input(INPUT_POST, 'inputAddress') : null;
$inputCity = filter_input(INPUT_POST, "inputCity") ? filter_input(INPUT_POST, 'inputCity') : null;
$conn = DB::databaseConnection();
$conn->beginTransaction();
$sql = "INSERT INTO dbo.premedical ( FName,LName, MidInitial, Race, Ethnicity, Gender, Age, SchoolYear, Gpa, HPhone, CPhone, PEmail, AEmail, MailAddress, MailCity) VALUES
( :fName,:lName, :mName, :race, :hEthnicity, :gender,:age, :education, :gpa, :hPhone, :cPhone, :pEmail, :aEmail, :inputAddress, :inputCity)";
$q = $conn->prepare($sql);
$result = $q->execute(array($fName, $lName, $mName, $race, $hEthnicity, $gender, $age, $education, $gpa, $hPhone, $cPhone, $pEmail, $aEmail, $inputAddress, $inputCity));
if ($result) {
$conn->commit();
if (Form::mailer($fName, $lName, $mName, $race, $hEthnicity, $gender, $age, $education, $gpa, $hPhone, $cPhone, $pEmail, $aEmail, $inputAddress, $inputCity)) {
echo '
<script >
alert("Thank you for registration.");
</script>';
}
return true;
} else {
echo '
<script>
alert("Error, please try submitting again. Error code 1");
window.history.back();
</script>';
}
}
?>
我在 php 中开发了一个基于 CRUD 的 Web 应用程序。这是一个表单,其输入数据保存在 sql 服务器数据库中。
即使用户填写一次,数据库也会为其保存多个条目。
问题似乎出在数据库中,因为表单已成功提交。
有人可以帮忙吗?
谢谢
代码如下:
<?php
ob_start();
require_once 'db-connect.php';
require_once 'email.php';
if(isset($_POST['pEmail'])){
$fName = filter_input(INPUT_POST, "fName") ? filter_input(INPUT_POST, 'fName') : null;
$lName = filter_input(INPUT_POST, "lName")? filter_input(INPUT_POST, 'lName') : null;
$mName = filter_input(INPUT_POST, "mName")? filter_input(INPUT_POST, 'mName') : null;
$tempRace = filter_input(INPUT_POST, "race", FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
$race = (is_array($tempRace)) ? implode(',', $tempRace) : null;
$hEthnicity = filter_input(INPUT_POST, "hEthnicity") ? filter_input(INPUT_POST, 'hEthnicity') : null;
$gender = filter_input(INPUT_POST, "gender") ? filter_input(INPUT_POST, 'gender') : null;
$age = filter_input(INPUT_POST, "age") ? filter_input(INPUT_POST, 'age') : null;
$education = filter_input(INPUT_POST, "education") ? filter_input(INPUT_POST, 'education') : null;
$gpa = filter_input(INPUT_POST, "gpa") ? filter_input(INPUT_POST, 'gpa') : null;
$hPhone = filter_input(INPUT_POST, "hPhone") ? filter_input(INPUT_POST, 'hPhone') : null;
$cPhone = filter_input(INPUT_POST, "cPhone") ? filter_input(INPUT_POST, 'cPhone') : null;
$pEmail = filter_input(INPUT_POST, "pEmail") ? filter_input(INPUT_POST, 'pEmail') : null;
$aEmail = filter_input(INPUT_POST, "aEmail") ? filter_input(INPUT_POST, 'aEmail') : null;
$inputAddress = filter_input(INPUT_POST, "inputAddress") ? filter_input(INPUT_POST, 'inputAddress') : null;
$inputCity = filter_input(INPUT_POST, "inputCity") ? filter_input(INPUT_POST, 'inputCity') : null;
$conn = DB::databaseConnection();
$conn->beginTransaction();
$sql = "INSERT INTO dbo.premedical ( FName,LName, MidInitial, Race, Ethnicity, Gender, Age, SchoolYear, Gpa, HPhone, CPhone, PEmail, AEmail, MailAddress, MailCity) VALUES
( :fName,:lName, :mName, :race, :hEthnicity, :gender,:age, :education, :gpa, :hPhone, :cPhone, :pEmail, :aEmail, :inputAddress, :inputCity)";
$q = $conn->prepare($sql);
$q->execute(array($fName, $lName, $mName, $race, $hEthnicity, $gender, $age, $education, $gpa, $hPhone, $cPhone, $pEmail, $aEmail, $inputAddress, $inputCity));
if ($q->execute()) {
$conn->commit();
if (Form::mailer($fName, $lName, $mName, $race, $hEthnicity, $gender, $age, $education, $gpa, $hPhone, $cPhone, $pEmail, $aEmail, $inputAddress, $inputCity)) {
echo '
<script >
alert("Thank you for registration.");
</script>';
}
return true;
} else {
echo '
<script>
alert("Error, please try submitting again. Error code 1");
window.history.back();
</script>';
}
}
?>
调用 $q->execute
会触发执行过程,即使您在逻辑检查中使用它也是如此 - 因此它会执行两次。您应该将其更新为:
<?php
ob_start();
require_once 'db-connect.php';
require_once 'email.php';
if(isset($_POST['pEmail'])){
$fName = filter_input(INPUT_POST, "fName") ? filter_input(INPUT_POST, 'fName') : null;
$lName = filter_input(INPUT_POST, "lName")? filter_input(INPUT_POST, 'lName') : null;
$mName = filter_input(INPUT_POST, "mName")? filter_input(INPUT_POST, 'mName') : null;
$tempRace = filter_input(INPUT_POST, "race", FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
$race = (is_array($tempRace)) ? implode(',', $tempRace) : null;
$hEthnicity = filter_input(INPUT_POST, "hEthnicity") ? filter_input(INPUT_POST, 'hEthnicity') : null;
$gender = filter_input(INPUT_POST, "gender") ? filter_input(INPUT_POST, 'gender') : null;
$age = filter_input(INPUT_POST, "age") ? filter_input(INPUT_POST, 'age') : null;
$education = filter_input(INPUT_POST, "education") ? filter_input(INPUT_POST, 'education') : null;
$gpa = filter_input(INPUT_POST, "gpa") ? filter_input(INPUT_POST, 'gpa') : null;
$hPhone = filter_input(INPUT_POST, "hPhone") ? filter_input(INPUT_POST, 'hPhone') : null;
$cPhone = filter_input(INPUT_POST, "cPhone") ? filter_input(INPUT_POST, 'cPhone') : null;
$pEmail = filter_input(INPUT_POST, "pEmail") ? filter_input(INPUT_POST, 'pEmail') : null;
$aEmail = filter_input(INPUT_POST, "aEmail") ? filter_input(INPUT_POST, 'aEmail') : null;
$inputAddress = filter_input(INPUT_POST, "inputAddress") ? filter_input(INPUT_POST, 'inputAddress') : null;
$inputCity = filter_input(INPUT_POST, "inputCity") ? filter_input(INPUT_POST, 'inputCity') : null;
$conn = DB::databaseConnection();
$conn->beginTransaction();
$sql = "INSERT INTO dbo.premedical ( FName,LName, MidInitial, Race, Ethnicity, Gender, Age, SchoolYear, Gpa, HPhone, CPhone, PEmail, AEmail, MailAddress, MailCity) VALUES
( :fName,:lName, :mName, :race, :hEthnicity, :gender,:age, :education, :gpa, :hPhone, :cPhone, :pEmail, :aEmail, :inputAddress, :inputCity)";
$q = $conn->prepare($sql);
$result = $q->execute(array($fName, $lName, $mName, $race, $hEthnicity, $gender, $age, $education, $gpa, $hPhone, $cPhone, $pEmail, $aEmail, $inputAddress, $inputCity));
if ($result) {
$conn->commit();
if (Form::mailer($fName, $lName, $mName, $race, $hEthnicity, $gender, $age, $education, $gpa, $hPhone, $cPhone, $pEmail, $aEmail, $inputAddress, $inputCity)) {
echo '
<script >
alert("Thank you for registration.");
</script>';
}
return true;
} else {
echo '
<script>
alert("Error, please try submitting again. Error code 1");
window.history.back();
</script>';
}
}
?>