【发布时间】:2011-10-05 00:30:08
【问题描述】:
这是一个高级/设计类型的问题,而不是任何具体的问题。
在这个游戏http://koreanwordgame.com/ 中,用户必须在一分钟内获得尽可能多的正确答案(尽管出于开发目的将其设置为 5 秒)。时间一到,我就会使用 JQuery 进行 Ajax 调用,从而使用户得分。
在服务器端,我使用这个 SQL 查询来获取上面的 5 个分数和下面的 5 个分数
$getquery = "(SELECT *
FROM highscore
WHERE score >= '$score'
ORDER BY score ASC
LIMIT 5)
UNION ALL
(SELECT *
FROM highscore
WHERE score < '$score'
ORDER BY score DESC
LIMIT 5)";
这会向客户端返回一个 HTML 表格,您将在完成(5 秒)挑战后看到该表格(您不必正确获得任何答案)。
现在,最终我希望表格的长度约为 100 行(尽管它仍将仅显示周围的 10 个单元格,上方 5 个,下方 5 个),确定的行位置 (ID) 不像现在那样按时间顺序排列,而是根据分数,如果有人答对了 1000 个答案,他们会直接进入数据库中的第 1 位。显然,如果用户低于表中已经存在的 100 行中的任何一个,那么它应该被简单地丢弃。然后,当表格返回时,我希望文本输入出现在用户所在的表格单元格中,以便他们可以输入他们的姓名并触发另一个 Ajax 调用,以便将他们的条目插入数据库中的正确位置。
我知道让用户先输入他们的详细信息,然后从前 10 个结果中挖掘出他们是否到达那里会更容易,但我的想法是我希望任何人都能够获得某种进入,因为这将鼓励人们玩得更多。
也许是一个艰难的..我当然无法通过谷歌搜索找到任何类似的东西,非常感谢所有帮助!
编辑:
如果有人感兴趣,这就是我最终得到的结果,它还远未完成,我需要让它变得更健壮,例如输入匿名用户名以防用户关闭浏览器并防止重复发帖(尽管这会成为客户端)。
但谢谢大家的帮助,没有你们我不会做到。如果您发现任何可以改进的明显改进,请随时指出!
<?php
$dbcon = mysql_connect("localhost", "XXXX", "XXXX") or die(mysql_error());
mysql_select_db("tulesblo_koreangame", $dbcon) or die(mysql_error());
mysql_query("SET NAMES utf8");
$name = $_POST["name"];
$email = $_POST["email"];
$score = $_POST["score"];
$table = "";
$submit = "";
$input = "";
$newposition = $_POST['position'];
$position = mysql_query("(SELECT position
FROM highscore
WHERE score < '$score'
ORDER BY score DESC
LIMIT 1)");
if(!$name){
$gethigherrows = "(SELECT *
FROM highscore
WHERE score >= '$score'
ORDER BY score ASC
LIMIT 5)";
$getlowerrows = "(SELECT *
FROM highscore
WHERE score < '$score'
ORDER BY score DESC
LIMIT 5)";
$higherrows= mysql_query($gethigherrows);
$lowerrows= mysql_query($getlowerrows);
if(mysql_error())echo mysql_error();
while($row=mysql_fetch_array($higherrows))
{
$uppertable .= "<tr><td>$row[position]</td><td>$row[name]</td> <td>$row[score]</td></tr>";
}
$x = 0;
if (mysql_num_rows($lowerrows) > 0)
{ mysql_query("UPDATE highscore SET position = position + 1 WHERE score < '$score'")or die("update failed");
while($row=mysql_fetch_array($lowerrows))
{
if ($x == 0)
{$position = $row['position'];};
$x++;
$newpos = $row[position]+1;
$lowertable.= "<tr><td>$newpos</td><td>$row[name]</td> <td>$row[score]</td></tr>";
}
$input = "<tr><td id='position'>$position</td><td><input id='nameinput'type='text' /></td><td>$score</td></tr>";
$submit = "<br />Enter email if you want to receive a prize!<br /><input id='emailinput'type='text' /><br /><input id='submithighscore'type='submit' value='Submit'>";
}
$table .= "<table id='scoretable'><tr><th>Position</th><th>Name</th><th>Score</th></tr>";
$table .= $uppertable;
$table .= $input;
$table .= $lowertable;
$table .= "</table>";
$table .= $submit;
$table .= "<br /><span class='msg'></span>";
echo $table;
}else{ echo($newposition);
mysql_query("INSERT INTO highscore VALUES (NULL, '$score', '$name', '$email', '$newposition')");
}
?>
【问题讨论】:
-
您能问一下您的“高级/设计类型问题”吗?从你的描述中我看不出有什么困难。您需要什么帮助?
-
抱歉,我知道这听起来很菜鸟,但我更像是一个前端人员,我对 SQL 的经验很少但是我意识到我应该分别执行 2 个 SQL 查询,然后当我用 PHP 构建 HTML 表时,将输入框放在两组结果之间,这应该很明显。我想剩下的唯一问题是如何为每一行分配一个位置编号?这将需要对表中的所有记录进行排序,并在它们被选中之前为其分配一个等级/位置。插入新记录时有什么方法可以将其构建到表中?
-
您有一个 SQL 注入漏洞,请参阅:stackoverflow.com/questions/332365/…
标签: php mysql sql database-design jquery