【发布时间】:2018-12-25 09:45:31
【问题描述】:
我有一个游戏,您可以在其中将您的分数提交到数据库,但由于某种原因,提交不断被触发两次。每个条目都加倍。我在这里看到过类似的问题,解决方案与最后的 if/else 检查有关,但我没有看到问题。
是我的 PHP 代码复制了条目还是我的游戏应用程序?
<?php
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";
$port = "xxx";
$link = mysqli_connect($servername, $username, $password, $dbname, $port);
// Security
$playerInitials = mysqli_real_escape_string($link,$_REQUEST['initials']);
$playerEmail = mysqli_real_escape_string($link,$_REQUEST['email']);
$playerScore = mysqli_real_escape_string($link,$_REQUEST['score']);
// Convert Initials to Upper Case
$playerInitialsUC = strtoupper($playerInitials);
$sql = "INSERT INTO xmas (initials, email, score)
VALUES ('$playerInitialsUC', '$playerEmail', '$playerScore')";
if(mysqli_query($link, $sql)){
echo "Records added successfully.";
} else{
echo "ERROR: " . mysqli_error($link);
}
mysqli_close($link);
?>
【问题讨论】:
-
检查任何可能触发某事的事物。通过服务、mysql、js 等。
-
也许您的浏览器出于某种原因发送了两次请求?检查你的 apache access_log
-
可能是你双击提交按钮?
-
您的脚本存在SQL Injection Attack 的风险。看看Little Bobby Tables 发生了什么。即使if you are escaping inputs, its not safe! 使用prepared parameterized statements 代替。 ... 天哪,我变成了 tadman。