我正在尝试从HTML表单更新mysqli表中的多行。数据似乎从表单到我的“更新数据库”页面。但它不会进入数据库。
以下是表格的相关部分:
for($i=0;$i<$rowcount;$i++)
{
$row = mysqli_fetch_array($result);
echo "<tr>
<td> $row[SubFirstName] $row[SubLastName] </td>
<td> $row[PerfFirstName] $row[PerfLastName] </td>
<td style='display:none'><input type='text' class='input' name='PerformerID[]' value= '$row[PerformerID]' /> Years</td>
<td><input type='text' class='input' size= '5' name='GKYears[]' value= '$row[GKYears]' /> Years</td>
</tr>";
}
以下是将值插入数据库的代码:
for($i=0;$i<$count;$i++)
{
mysqli_query($con, "UPDATE Performers SET
GKYears = '$_POST[GKYears][$i]'
WHERE PerformerID = '$_POST[PerformerID][$i]'");
}
当我执行var_dump
POST
数据时,似乎一切都在那里。有人可以解释如何解决这个问题,以及为什么这是错的?我为其他页面提供了相同问题的其他更复杂的变体。
答案 0 :(得分:1)
结构不好。不要使用CSS来模拟隐藏的表单字段,甚至不需要隐藏字段:
echo <<<EOL
<tr>
<td>... name stuff ...</td>
<td>... perf stuff ...</td>
<td><input type="text" name="GKYears[{$row['PerformerID']}]" value="{$row['GKYears']}" /></td>
</tr>
EOL;
请注意ID值如何嵌入字段名称中,因此您最终会使用
<input ... name="GKYears[42]" ... />
<input ... name="GKYears[103]" ... />
然后你的PHP方面变得简单:
foreach($_POST['GKYears'] as $rowID => $value) {
... update db for record Id $rowID with value $value
}
除此之外,你的代码范围很广,只是求助SQL injection attack。