(初めての質問なので間違っていたらごめんなさい)
だから私はトーナメントの順位表プログラムを書こうとしています。アイデアは、フォームを介して 12 人のプレーヤーを配置して送信し、その人がまだテーブルにない場合はDB に行を作成し、テーブルにある場合は適切な列に 1 つ追加することです。該当するコードは次のとおりです。
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
}
そのため、問題は、新しいプレーヤーを追加すると、1 ではなく 3 のようになることがあるということです。これは、「トラブル ライン」が呼び出されても「更新」(エコー) が表示されないという奇妙なことを意味します。その行をコメントアウトすると、正常に機能しますが、行が既に存在する場合は +1 が追加されません
したがって、テーブルごとに、誰かが 12 の名前を提出したとしましょう。name1 (1 番目)、name2 (2 番目)、name3 (3 番目)、name4 (4 番目)、name5 (負け) ... name 12 (負け) であり、それらのどれもトーナメント名 FFA の下に存在しません (FFA、1 同盟国、2味方、フォームで指定できる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
または、最初の 3 つが壊れていて、最後のいくつかが問題ないようなランダムなもの。後で更新しようとすると (既存の行に 1 つ追加するだけで問題なく動作します。最初の送信だけです。それが何であるかをしばらく調べてみましたが、わかりません。試してみました:
- REPLACE を使用してクエリを変更する
- for ループの実行回数を、送信されたエントリの数に制限する (12 である必要はなく、1 ~ 12 にすることができます)
- AUTO_INCREMENT ID の追加
- 主キーの変更
そして、選択クエリなどをいじってみました。私が見逃している小さなものはありますか?:) 必要なものが不足している場合は、お知らせください。
どうもありがとう!
問題の画像を挿入::
赤いボックスはすべて 12 の 3 番目のバッチを示し、黒いボックスはすべてエラーを示しています。フォームを送信する前は、これらの行は存在しなかったため、これらの番号は 1 のはずです。すべての名前は一意であるため、その写真では何も上にある必要はありません.