gpt4 book ai didi

php提交仅给出填充表单的数组中的最后一个值

转载 作者:行者123 更新时间:2023-11-29 07:44:42 25 4
gpt4 key购买 nike

正在努力处理一页表单,我想首先从 mysql 查询填充表单,然后使用户能够从表单中的文本输入字段更新每个表行中的一些值。

代码的目的是通过引用行 ID 来更新字段。

但由于某种原因,我只能更新表单中的最后一行(数组的最后一行)。我已经包含了一些故障排除代码来查看 ID 变量是什么,并且它总是作为数组的最后一次迭代出现。我想我要么覆盖 while 循环或 for 循环中的 ID 变量。

我尝试将 POST/更新移动到第二个文件,但得到相同的结果。任何想法/建议将不胜感激

这是去掉数据库连接的代码:

$saveClicked = $_POST["saveClicked"];


{ // SAVE button was clicked
if (isset($saveClicked)) {
unset($saveClicked);


$ID = $_POST["ID"];

$win = $_POST["Winner"];
$winScr = $_POST["WinnerScore"];
$losScr = $_POST["LoserScore"];


$tschedule_SQLupdate = "UPDATE tschedule SET ";

$tschedule_SQLupdate .= "Winner = '".$win."', ";
$tschedule_SQLupdate .= "WinnerScore = '".$winScr."', ";
$tschedule_SQLupdate .= "LoserScore = '".$losScr."' ";
$tschedule_SQLupdate .= "WHERE ID = '".$ID."' ";


if (mysql_query($tschedule_SQLupdate)) {

echo '<p> the number of mysql affected rows is '.mysql_affected_rows().'</p>';
echo 'this is the value for post id '.$ID;

} else {
echo '<span style="color:red; ">FAILED to update the game.</span><br /><br />';
echo mysql_error();

}
}
// END: SAVE button was clicked ie. if (isset($saveClicked))
}


{ // Get the details of all associated schedule records
// and store in array: gameArray with key >$indx

$indx = 0;

$tschedule_SQLselect = "SELECT * ";
$tschedule_SQLselect .= "FROM ";
$tschedule_SQLselect .= "tschedule ";
$tschedule_SQLselect .= "WHERE week = 1 ";

$tschedule_SQLselect_Query = mysql_query($tschedule_SQLselect);

while ($row = mysql_fetch_array($tschedule_SQLselect_Query, MYSQL_ASSOC)) {

$gameArray[$indx]['ID'] = $row['ID'];
$gameArray[$indx]['Date'] = $row['Date'];
$gameArray[$indx]['week'] = $row['week'];
$gameArray[$indx]['Favorite'] = $row['Favorite'];
$gameArray[$indx]['Line'] = $row['Line'];
$gameArray[$indx]['Underdog'] = $row['Underdog'];
$gameArray[$indx]['OU'] = $row['OU'];
$gameArray[$indx]['Winner'] = $row['Winner'];
$gameArray[$indx]['WinnerScore'] = $row['WinnerScore'];
$gameArray[$indx]['LoserScore'] = $row['LoserScore'];
$indx++;
}

$numGames = sizeof($gameArray);

mysql_free_result($tschedule_SQLselect_Query);
}

{ // Output

echo '<form name ="postGame" action="'.$thisScriptName.'" method="post">';

echo '<table border="1">';
echo '<tr>
<th>ID</th>
<th class="date">Date</th>
<th class="num">Week</th>
<th>Favorite</th>
<th class="num">Line</th>
<th>Underdog</th>
<th class="num">OU</th>
<th>Winner</th>
<th>WScore</th>
<th>LScore</th>
<th>Save</th>
</tr> ';

for ($indx = 0; $indx < $numGames; $indx++) {
$thisID = $gameArray[$indx]['ID'];
$saveLink = '<input type = "submit" value = "Save" />';

$fld_ID = '<input type="text" name="ID" value="'.$thisID.'"/>';

$fld_saveClicked = '<input type="hidden" name="saveClicked" value="1"/>';


echo $fld_ID;
echo $fld_saveClicked;
echo '<tr>
<td>'.$gameArray[$indx]['ID'].'</td>
<td>'.$gameArray[$indx]['Date'].'</td>
<td>'.$gameArray[$indx]['week'].'</td>
<td>'.$gameArray[$indx]['Favorite'].'</td>
<td>'.$gameArray[$indx]['Line'].'</td>
<td>'.$gameArray[$indx]['Underdog'].'</td>
<td>'.$gameArray[$indx]['OU'].'</td>
<td><input type="text" size =5 name="Winner">'.$gameArray[$indx]['Winner'].'</td>
<td><input type="number" size=5 name="WinnerScore">'.$gameArray[$indx]['WinnerScore'].'</td>
<td><input type="number" size=5 name="LoserScore">'.$gameArray[$indx]['LoserScore'].'</td>
<td>'.$saveLink.'</td>
</tr> ';

}

echo '</table>';

echo '</form>';

echo' <a href ="../schedules/schedView.php">View Schedule</a>';

}

最佳答案

您对每行中的每个字段使用相同的名称,因此当您发布表单时,只能访问最后一个字段。对字段使用数组表示法,如下所示:

<input type="text" size =5 name="Winner[]">
^^

这将为您提供一个数组 $_POST['Winner']而不是单个值。对另一个 <input> 执行相同的操作元素。

此外,提交表单后处理表单的代码仅处理一个值。您需要修改它才能循环这些数组。

警告:

  • 不要使用mysql_*()对于新代码 - 它已被弃用。切换至mysqli_*()PDO现在。
  • 您的代码容易受到 SQL 注入(inject)。使用 mysql_real_escape_string() 转义输入变量(或 mysqli 等效项)或更好,切换到准备好的语句。

关于php提交仅给出填充表单的数组中的最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28144090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com