从表单元素中获取POST值是否通过echo语句动态添加?

时间:2013-10-09 01:11:53

标签: javascript php jquery mysql sql

在我的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;
    ?>

$(&#34; #stats-home&#34;)。之后是添加行的地方。

我遇到的问题是我试图将这些数据从表格输入到我的数据库中。这是我点击表单的确认结果按钮后加载的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

当我尝试提交此表单时,我收到了很多&#34; Unidentified index&#34;通知,像这样:

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

由于某种原因,它没有找到通过echo语句动态插入页面的任何输入框的POST变量。找到$ _POST [&#34; confirm_result&#34;]是没有问题的,因为该输入框在开头就被加载到页面中。

我如何解决这个问题?它几乎无法识别通过echo语句加载的任何输入框。

我还使用print_r:

转储$ SESSION和$ POST变量

print_r($ _ SESSION):数组([email] =&gt; my_email@hotmail.com [userid] =&gt; 43 [xbox_club] =&gt; [ps4_club] =&gt; Wrecking Crew [match_id] =&gt; 3 [player_count] =&gt; 7 [团队] =&gt;主页)

print_r($ _ POST):数组([confirm_result] =&gt;确认结果)

它只显示最初加载到页面上的confirm_result按钮。

我还有另一个问题:

我如何根据是否检查来跳过插入行?在每一行中我都有一个复选框。禁用此复选框后,将禁用所有行输入框。跳过这一行的最佳方法是什么?目前,无论输入框是否被禁用,我的代码都会遍历每一行并输入数据。

提前致谢!

UPDATE - 这是在&#34;后期结果&#34;之后生成的单行。单击按钮:

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

2 个答案:

答案 0 :(得分:0)

#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输出点击按钮后,以便我们看到正在发生的事情)

- 编辑 - 也,发布加载页面时生成的javascript,即PHP完成后的事情

答案 1 :(得分:0)

我会回答第二个问题。就第一个问题而言,基于$ _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']

键将为零,因为它未添加到该数组,除非它已被选中,因此它将是$_POST['checkme']数组中的第一项。