私の HTML コードにはテーブルがありますが、最初はデータ行が読み込まれておらず、ヘッダーと列ラベルのみが読み込まれています。ボタンをクリックすると、SQL ステートメントでデータベースから選択された行数に応じて、多数の行がこのテーブルにロードされます。この状況で、私のチームがデータベースに 7 人の登録済みプレーヤーを持っている場合、テーブルには (PHP の echo ステートメントを介して) 7 行が表示されます。各行には、プレイヤー名とテキスト入力ボックスを含むチェックボックスがあります。
これは、結果後のボタンがクリックされると行を追加する jQuery です。
$("#post-result").click(function(){
$("#post-result").hide();
$("#confirm-result").show();
$("#cancel").show();
$("#home-player-count").show();
$("#home-score").html("<input class='form-input f-score' id='home-score-input' type=number name=home_score maxlength=2>");
$("#away-score").html("<input class='form-input f-score' id='away-score-input' type=number name=away_score maxlength=2>");
$("#stats-home").after(<?php
echo "\"";
$i = 0;
$sql2 = mysqli_query($link, "SELECT * FROM user_accounts WHERE ps4_club= '" . $myclub . "'");
while ($row = mysqli_fetch_array($sql2, MYSQLI_ASSOC))
{
$i++;
echo "<tr id='player-".$i."'><td class='match-stats-name'><input type='checkbox' class='f-player' checked='true' value='" . $row['username'] . "' name='home_player_".$i."'>". $row['username'] ."";
echo "<td><input class='form-input f-stats single' maxlength=1 name='home_player_".$i."_rating_1'> . <input class='form-input f-stats single' maxlength=1 name='home_player_".$i."_rating_2'></td>";
echo "<td><input class='form-input f-stats single' maxlength=1 name='home_player_".$i."_goals'></td>";
echo "<td><input class='form-input f-stats single' maxlength=1 name='home_player_".$i."_assists'></td>";
echo "<td><input class='form-input f-stats' maxlength=2 name='home_player_".$i."_tackles_won'> / <input class='form-input f-stats' maxlength=2 name='home_player_".$i."_tackles_made'></td></tr>";
}
echo "\"";
?>)
<?php
$_SESSION["match_id"] = $id;
$_SESSION["player_count"] = $i;
$_SESSION["team"] = $team;
?>
$("#stats-home").afterは、行が追加される場所です。
私が直面している問題は、このデータをテーブルからデータベースに入力しようとしているときです。これは、フォームの結果確認ボタンをクリックすると読み込まれる PHP コードの一部です。
<?php
include "../config.php";
if (isset($_POST["confirm_result"]))
{
session_start();
for ($i = 1; $i <= $_SESSION["player_count"]; $i++)
{
$sql = $link->prepare("INSERT INTO ps4_apl_1_stats (match_id, team, name, rating, goals, assists, tackles_won, tackles_made)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
$sql->bind_param("issiiiii", $match_id, $team, $name, $rating, $goals, $assists, $tackles_won, $tackles_made);
$match_id = $_SESSION["match_id"];
$team = mysqli_real_escape_string($link, $_SESSION["team"]);
$name = "test_".$i."_player";
$rating = $_POST["home_player_".$i."_rating_1"];
$goals = $_POST["home_player_".$i."_goals"];
$assists = $_POST["home_player_".$i."_assists"];
$tackles_won = $_POST["home_player_".$i."_tackles_won"];
$tackles_made = $_POST["home_player_".$i."_tackles_made"];
$sql->execute();
$sql->free_result();
}
header("Location: ../match.php?id=".$_SESSION['match_id']);
}
else
{
header("Location: ../match.php?id=".$_SESSION['match_id']);
}
?>
このコードが行うことは、$i 変数をインクリメントすることにより、テーブル内の各行をループすることです。各反復で、入力ボックスからのデータを変数に入れます。変数は、準備された SQL ステートメントに入れられます。各行の入力ボックスには、行番号によって番号が付けられた名前があります。次に例を示します。
行 1: home_player_1_goals、home_player_1_assists
行 2: home_player_2_goals、home_player_2_assists
行 3: home_player_3_goals、home_player_3_assists
このフォームを送信しようとすると、次のような「未確認のインデックス」通知が大量に表示されます。
注意: 未定義のインデックス: C:\Apache24\htdocs\script\match_post.php の 20 行目の home_player_1_goals
何らかの理由で、echo ステートメントを介してページに動的に挿入された入力ボックスの POST 変数が見つかりません。$_POST["confirm_result"] を見つけるのに問題はありません。なぜなら、その入力ボックスは最初にページに読み込まれるからです。
どうすればこれを回避できますか? echo ステートメントを介してロードされた入力ボックスをほとんど認識していません。
また、print_r を使用して $SESSION 変数と $POST 変数をダンプしました。
print_r($_SESSION): Array ( [email] => my_email@hotmail.com [userid] => 43 [xbox_club] => [ps4_club] => レッキング クルー [match_id] => 3 [player_count] => 7 [team ] => ホーム )
print_r($_POST):配列 ( [confirm_result] => 結果の確認 )
最初にページにロードされる confirm_result ボタンのみが表示されます。
別の質問もあります:
チェックされているかどうかに応じて、行の挿入をスキップするにはどうすればよいですか? 各行にチェックボックスがあります。このチェックボックスを無効にすると、その行入力ボックスはすべて無効になります。この行をスキップする最良の方法は何ですか? 現時点では、入力ボックスが無効になっているかどうかに関係なく、私のコードはすべての行を通過してデータを入力します。
前もって感謝します!
更新 - 「post-results」ボタンがクリックされた後に生成される単一の行は次のとおりです。
<tr id="player-1">
<td class="match-stats-name"><input type="checkbox" name="home_player_1" value="Syrian2nv" checked="true" class="f-player">Syrian2nv</td>
<td><input name="home_player_1_rating_1" maxlength="1" class="form-input f-stats single"> . <input name="home_player_1_rating_2" maxlength="1" class="form-input f-stats single"></td>
<td><input name="home_player_1_goals" maxlength="1" class="form-input f-stats single"></td>
<td><input name="home_player_1_assists" maxlength="1" class="form-input f-stats single"></td>
<td><input name="home_player_1_tackles_won" maxlength="2" class="form-input f-stats"> / <input name="home_player_1_tackles_made" maxlength="2" class="form-input f-stats"></td>
</tr>