簡體   English   中英

從通過echo語句動態添加的表單元素獲取POST值?

[英]Getting POST values from form elements added dynamically through echo statements?

在我的HTML代碼中,我有一個表,但最初沒有加載任何數據行,只有標題和列標簽。 單擊按鈕后,根據在SQL語句中從數據庫中選擇了多少行,該表中將裝載許多行。 在這種情況下,如果我的團隊在數據庫中有七個注冊玩家,那么我的表將顯示七行(通過PHP echo語句)。 在每一行中,我都有一個帶有玩家名稱和文本輸入框的復選框。

這是單擊后結果按鈕會添加行的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

當我嘗試提交此表單時,會收到很多“身份不明的索引”通知,如下所示:

注意:未定義的索引:第20行的C:\\ Apache24 \\ htdocs \\ script \\ match_post.php中的home_player_1_goals

由於某種原因,它找不到通過echo語句動態插入到頁面中的任何輸入框的POST變量。 找到$ _POST [“ confirm_result”]沒問題,因為該輸入框從一開始就已加載到頁面中。

我該如何解決? 幾乎無法識別通過echo語句加載的任何輸入框。

我還使用print_r轉儲了$ SESSION和$ POST變量:

print_r($ _ SESSION):數組([email] => my_email@hotmail.com [userid] => 43 [xbox_club] => [ps4_club] =>破壞人員[match_id] => 3 [player_count] => 7 [team ] => home)

print_r($ _ POST):數組([confirm_result] =>確認結果)

它僅顯示confirm_result按鈕,該按鈕最初已加載到頁面上。

我還有另一個問題:

我將如何跳過行的插入,具體取決於是否選中了它? 在每一行中,我都有一個復選框。 禁用此復選框后,所有行輸入框都將被禁用。 跳過這一行的最佳方法是什么? 目前,我的代碼遍歷每一行並輸入數據,無論是否禁用了輸入框。

提前致謝!

更新-這是單擊“發布結果”按鈕后生成的一行:

<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>

您與#stats-home有關的表格在哪里? 您要告訴jQuery在其后添加這些表單輸入,因此,如果您的表單在其中,則它們將丟失該表單。

如果我是你,我將通過在正常加載頁面時輸出字段,從而簡化整個jQuery調用,但是將一個類應用於表行,這將告訴您不可見:

echo "<tr class='player-information' 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'] ."";

<style type="text/css">
.player-information {
    display: none;
}
</style>

然后在您的jQuery中,將$("#stats-home").after()替換為:

$('tr.player-information').show();

不知道這是否能解決您的問題,但至少您會知道表單元素在DOM中並且在正確的位置被輸出(如果沒有幫助,請在ps上將生成的HTML輸出發布到單擊按鈕的頁面這樣我們就可以看到發生了什么)

--edit--同樣,發布您在加載頁面時生成的javascript,即在PHP完成其工作之后

我將回答第二個問題。 至於第一個,我敢打賭,基於$ _POST上的var_dump為空的事實,jQuery插入后html不太正確。

第二個問題,如果未選中此復選框,請跳過一行。 因此,如果您的html是這樣的:

<tr>
<td><input type="checkbox" name="checkme[]"></td>
<td><input type="text" name = "homePlayerRating[]"></td>
<td><input type="text" name="homePlayerGoals[]"></td>

</tr>

<tr>
<td><input type="checkbox" name="checkme[]"></td>
<td><input type="text" name = "homePlayerRating[]"></td>
<td><input type="text" name="homePlayerGoals[]"></td>
</tr>

然后在php中進行處理時:

foreach($_POST['homePlayerRating'] as $key=>$homePlayerRating){
    if(isset($_POST['checkme'][$key])){
        //now you know that row was checked
        $playerRating = $_POST['homePlayerRating'][$key];
        $goals = $_POST['homePlayerGoals'][$key];
    }
 }

編輯:這是完全錯誤的。 我不確定我在想什么。 $_POST['checkme']數組與該行的其余部分不匹配。 如果未選中,則不會將其添加到$ _POST數組中。 例如,如果您選中第三行下方的復選框,

$_POST['homePlayerTating']

鍵將2,但

$_POST['checkme']

key將為零,因為除非選中它,否則它不會添加到該數組中,因此它將成為$_POST['checkme']數組中的第一項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM