从表单更新mysql / php中的多行

时间:2014-02-07 02:29:11

标签: php html forms mysqli

我正在尝试从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数据时,似乎一切都在那里。有人可以解释如何解决这个问题,以及为什么这是错的?我为其他页面提供了相同问题的其他更复杂的变体。

1 个答案:

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