【发布时间】:2019-10-10 20:08:30
【问题描述】:
我有一个将表单响应发布到 MySQL 数据库的脚本。但是,它有时会在每行之间以秒为单位向表格发布两次。
这里是处理脚本:
if (isset($_POST['SignIn']))
{
$Name = $_POST['Name'];
$Sleep = $_POST['Sleep'];
$Soreness = $_POST['Soreness'];
$Fatigue = $_POST['Fatigue'];
$Energy = $_POST['Energy'];
$Stress = $_POST['Stress'];
$Total = $Sleep + $Soreness + $Fatigue + $Energy + $Stress;
$Comments = $_POST['Comments'];
$sql = "
INSERT INTO
YDP_Wellbeing (Name, Sleep, Soreness, Fatigue, Energy, Stress, Total, Comments)
VALUES
('$Name', $Sleep, $Soreness, $Fatigue, $Energy, $Stress, $Total, '$Comments')";
if (mysqli_query($con, $sql))
{
$_SESSION['alert-type'] = 'success';
$_SESSION['alert-head'] = 'Welcome!';
$_SESSION['alert-body'] = 'Thank You <strong>' . $Name . '</strong> You\'re Response Has Been Submitted.';
header("location: index.php");
}
else
{
echo "Failed: " . mysqli_error($con);
}
}
有时发一次,有时发两次,所以问题是间歇性出现的?
【问题讨论】:
-
听起来代码有时会被调用两次。可能就像用户在等待片刻时再次单击按钮一样简单,或者可能重新加载处理表单帖子的页面。
-
旁注:您的代码对 SQL 注入完全开放。这既是一个安全问题,也是常见的错误来源。您将想在此处了解 SQL 注入:php.net/manual/en/security.database.sql-injection.php 以及有关如何在此处防止它的信息和示例:stackoverflow.com/questions/60174/…
-
@David 是正确的。这里没有什么会插入两次,所以用户必须调用它两次。
-
我总是在重定向后添加
die();以防止脚本继续执行。见stackoverflow.com/questions/8665985/… -
您是否验证了重定向确实有效,或者它只是返回到同一页面并且它看起来就像它重定向了?