0

私のサイトには、ユーザーが入力するフォームがいくつかあります。これらのフォームの 1 つで、多くの作業が発生する可能性があります。そのため、私は同意を求めています。ご覧のとおり、この形式では 40 ゲームになります。また、すべてのゲームでは、ユーザーが数字を入力するための 2 つのフィールドが提供されます (ゲームがどのように終了するかによって異なります)。したがって、40 ~ 50 のゲームでは、追跡するフィールドが 80 ~ 90 あることを意味します。2 つのフィールドはデータベース内の適切なゲームとペアになり、ユーザーの回答は常に記憶されます。これは私のコードのスナップです:

<div class="form-left">England- Italy</div>
                <div class="form-right"><input type="result" id="g1r1" name="g1r1" class="form-input" /></div>
                <div class="form-dash">-</div>
                <div class="form-right"><input type="result" id="g1r2" name="g1r2" class="form-input" /></div>
                <div class="form-error"></div>

<div class="form-left">Spain- Mexico</div>
                <div class="form-right"><input type="result" id="g2r1" name="g2r1" class="form-input" /></div>
                <div class="form-dash">-</div>
                <div class="form-right"><input type="result" id="g2r2" name="g2r2" class="form-input" /></div>
                <div class="form-error"></div>

私の考えでは、ゲームに game1row1 と game1row2 という名前を付けます。それらをデータベース内の正しいゲームと照合できるようにするため。問題は、90 個のフィールドを持つテーブルへの挿入が非常に難しいことです。だから私の質問は次のようになります:これをより良い方法で行うにはどうすればよいですか?挿入データベース側のコード行が少ない..

  insert into tablename ( g1r1, g1r2 values 1, 0 where MATCH_ID = MATCHID)

編集

明確にするために、私のテーブルには ID、user_id、match_id(g)、homeScore(r1)、awayScore(r2) が含まれています。g1r1 と g1r2 の私の考えは、r1 と r2 を右の g(ゲーム) に保存することです。

4

3 に答える 3

2

Problem is that an insertion to a table with 90 fields seems hug[e]

ユーザーテーブルはゲームテーブルとは別にする必要があり、スコア用の3番目のテーブルはこれをどのように使用していると思いますか。そうすれば、どのテーブルにも 90 列はありません。これにより、データベースの拡張を可能にする設計も可能になります

あなたの現在のデザインは次のとおりだと思います。

usser_id | g1r1 | g1r2 | g2r1 | g2r2 | g3r1 | g3r2 | ... | g50r1 | g50r2

あなたのデザインはどうあるべきか

Users:
user_id | ..[user info]...

Games:
game_id | ...[game info]...

Scores:
score_id | game_id | user_id | score_1 | score_2

また、@bart2puck の推奨に従って、html を php で動的に作成することをお勧めします。これにより、生活がとても楽になります。データベースの設計を変更すると、次のようにスコアを挿入できるようになります。

$insert = "INSERT INTO Scores (user_id,game_id,homeScore,awayScore) VALUES ";
foreach ($_POST['games'] as $key => $value){
    $insert = "(".$_POST["user_id"].",".$key.",".$value[0].",".$value[1].")";
}
//run query insert

これは、たとえばゲーム 1のデータベースと同等のname="games[game_id[]]"場所に従って入力フィールドに名前を付ける場合です。そのゲームの両方のスコア フィールドに対してです。game_idgame_idname="game[1[]]"

重要!!

クエリを実行する前に、必ずクエリ パラメータを使用するか、ポスト入力を mysql エスケープしてください。そうすれば、Bobby Tables AKA SQL Injectionから保護されます

編集:

使用したいテーブル名を含むOPコメントから

$insert = "INSERT INTO Scores (user_id, game_id, homeScore, awayScore) VALUES ";
foreach ($_POST["homeScore"] as $key => $value){
    $insert = "(".$_POST["user_id"].",".$key.",".$value.",".$_POST["awayScore"][$key].")";
}
//run query insert

次に、フォーム フィールドに名前を付けるhomeScore[game_id]awayScore[game_id]、ゲーム ID が 1 のゲームのホーム スコア フィールドは次のようになります。name="homeScore[1]"

編集2:

私の最後の編集に従えば、正しいフォーム名で php を使用して html を書くためのより良い方法もここにあります。

for ($i = 1;$i<=40;$i++){
   echo "<div class='form-right'><input type='result' id='homeScore[$i]' name='awayScore[$i]' class='form-input' /></div>\n";
   }
}
于 2013-08-29T16:52:47.620 に答える
1

1)ループを使用してページを記述し、フォーム名を配列にすることができます

 echo "<form action='$PHP_SELF' method='POST'>";
 for ($b = 1;$b<=40;$b++)
 {
   $gameId = "g" . $b;
   for ($a = 1;$a<=2;$a++)
   {
     $roundId = "r" . $a;
     $fieldName = $gameId . $roundId;

      echo "<div class='form-right'><input type='result' id='games[$fieldName]' name='games[$fieldName]' class='form-input' /></div>\n";
   }
}
 echo "<input type='submit' value='submit'>";

投稿結果は次のようになります。

[games] => Array
    (
        [g1r1] => a
        [g1r2] => b
        [g2r1] => c
        [g2r2] => d
        [g3r1] => e
        [g3r2] => f
        [g4r1] => g
        [g4r2] => h
        [g5r1] => i
        [g5r2] => j
        [g6r1] => k
        [g6r2] => l
        [g7r1] => m
        [g7r2] => n
        [g8r1] => o
        [g8r2] => p
        [g9r1] => q
        [g9r2] => r
        [g10r1] => s
        [g10r2] => t
    )

そしてあなたの処理ページで:

 foreach ($_POST['games'] as $key => $value)
 {
    $insert = "INSERT into games (" . $key . ") values ('" . $value. "')";
   //or whatever query you need here.
 } 
于 2013-08-29T16:22:00.380 に答える