(这是我的第一个问题,如果我做错了什么,很抱歉)
所以我正在尝试编写一个锦标赛积分榜程序。这个想法是通过一个表格提交 12 名玩家及其位置,然后如果该人尚未在表中,则在数据库中创建一行,如果在表中,则将其添加到相应的列中。这是适用的代码:
for($i = 1; $i < 14; $i++) {
$g = $i - 1;
$fields = array('first', 'second', 'third', 'fourth', 'lose', 'tie');
$array[$g] = array($_GET['nameplayer' . $i], $_GET['placementplayer' . $i]); //Because there are 12 people, I used a for-loop for selecting player # hence the $array[$g]. It is being filled with the name and placement
//Insert Player Name
if($array[$g][0] != "") {
$k = $array[$g][0]; //Name of the person
$z = $_GET['tournyname'];
$t = $array[$g][1]; //Placement of the person (can be 1, 2, 3, 4, tie or lose)
$checkme = mysql_query("SELECT * FROM tournamentstandings WHERE name = '$k' AND tournyname = '$_GET[tournyname]'")or die(mysql_error()); //Getting the specific row for the guy I wanna add +1 to
if($t != "Tie" && $t != "Loss") { //Defining $y which is the field name for where the +1 should go
$y = $fields[$t - 1];
} else if ($t == "Tie") {
$y = $fields[5];
} else if ($t == "Loss") {
$y = $fields[4];
}
if (mysql_num_rows($checkme)){
$qone = mysql_query("SELECT $y FROM tournamentstandings WHERE name = '$k' AND tournyname = '$_GET[tournyname]'");
while($query = mysql_fetch_array($qone)) {
echo "updated";
mysql_query("UPDATE tournamentstandings SET $y = '$qone[$y] + 1' WHERE name = '$k' AND tournyname = '$z'") or die(mysql_error()); //THIS IS THE TROUBLE LINE
}
}
else if($y == "first" && !mysql_num_rows($checkme)) {
mysql_query("REPLACE INTO tournamentstandings(name, first, tie, second, third, fourth, lose, tournyname, totalplayed, totalpoints, pointspergame, winpercentage) VALUES('$k', '1', '0', '0', '0', '0', '0', '$z', '0', '0', '0', '0')")or die(mysql_error()); //Does the exact same thing but for $y == "second" and so on inserting 1 if the row does not already exist
}
所以问题是,有时当我添加一个新播放器时,它会变成 3 而不是 1,这意味着调用了“故障线”但没有显示“更新”(回显),这很奇怪。如果我注释掉该行,它可以正常工作,但如果该行已经存在,则不会添加 +1
所以表明智的假设有人提交了 12 个名字;name1(第一名),name2(第二名),name3(第三名),name4(第四名),name5(输)... name 12(输)并且这些都不存在于 tournyname FFA(可以是 FFA、1 Ally、2 Ally,6v6,您可以在表格中指定)
它应该是 :
name | first | tie | second | third | fourth | lose | tournyname
name1| 1 | 0 | 0 | 0 | 0 | 0 | FFA
name2| 0 | 0 | 1 | 0 | 0 | 0 | FFA
name3| 0 | 0 | 0 | 1 | 0 | 0 | FFA
name4| 0 | 0 | 0 | 0 | 1 | 0 | FFA
name5| 0 | 0 | 0 | 0 | 0 | 1 | FFA
等等
但正在发生的是:
name | first | tie | second | third | fourth | lose | tournyname
name1| 3 | 0 | 0 | 0 | 0 | 0 | FFA
name2| 0 | 0 | 3 | 0 | 0 | 0 | FFA
name3| 0 | 0 | 0 | 2 | 0 | 0 | FFA
name4| 0 | 0 | 0 | 0 | 1 | 0 | FFA
name5| 0 | 0 | 0 | 0 | 0 | 1 | FFA
或者像前三个坏了,最后几个没问题的那种随机的东西。当我稍后尝试更新它时(只需将一个添加到现有行,它就可以正常工作。这只是最初的提交。我已经尝试了一段时间来弄清楚它是什么但我不知道。我试过了:
- 使用 REPLACE 更改查询
- 将for循环运行的次数限制为提交的条目数(不一定是12,可以是1-12
- 添加 AUTO_INCREMENT id
- 主键更改
和一大堆玩选择查询等。我缺少什么小东西吗?:) 如果我遗漏了你们需要的东西,请告诉我!
非常感谢!
插入的问题图片 ::
所有的红框表示第三批 12 所有黑框表示错误。这些数字应该是 1,因为在我提交表单之前,这些行不存在。所有名称都是唯一的,因此该图片中的任何内容都不应超过一个。