0

我有一个 jQuery 函数,它将结果时间变量发送到一个 php 文件,该文件将结果与数据库进行比较,如果它是一个新的高分则返回 1.. 但由于某种原因它返回 111

这是PHP:

require_once('db.php');

$sql = "SELECT score FROM highscores ORDER BY score ASC LIMIT 10";
$result = mysqli_query($con, $sql);
$score = $_POST['time'];

while($row = mysqli_fetch_array($result)) {
    if($row['score'] > $score) {
        echo 1;
    }
}

然后是jquery函数:

jQuery.ajax({
    url:'model/highscore.php',
    type:'POST',
    data: {time:totalTime},
    success:function(result){
        highScore = result;
    }
});

非常感谢任何帮助。

4

3 回答 3

1

为什么不根据需要修改 SQL 查询?

您正在获取 10 个最高分数,并遍历所有分数,以检查实际上有多少分数高于您的分数。但你实际上不检查,如果你的分数高于最高。

如果您想检查,如果您的分数是最高的,请计算所有高于您的分数。如果没有(计数 = 0),你知道你得到了最高的。

编辑:这是完整的脚本:

$score = $_POST['time']; // Format "00:00:02.95";
$sql = "SELECT Count(score) as c FROM highscores WHERE score > '".mysqli_real_escape_string($score)."'";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_object($result)->c;
if(!is_null($count) && $count < 1 )
    echo 1;
}

必须添加转义功能以防止 SQL 注入!

您还应该为您的分数找到更好的数据类型,因为 varchar 不是时间戳的最佳表示形式。

我现在出去了。

编辑:检查 $count 是否不为空

于 2013-06-05T14:20:56.073 回答
0

在没有看到数据库本身的情况下,这主要是一个猜测,但我猜它会从您的数据库中返回 3 个单独的分数。您需要将查询限制为 1。

于 2013-06-05T14:09:05.697 回答
-1

发生这种情况是因为您正在遍历 10 个高分记录,它发现了 3 个更高的结果,所以它打印了 3 次 1,就像它是

echo 1;
echo 1;
echo 1;

输出

111

你可以在你之后休息一下echo 1

echo 1;
break;
于 2013-06-05T14:11:58.007 回答