使用一个HTML表单更新多个MySQL表行


Update multiple MySQL table rows using one HTML form

我在PHP中使用HTML表单来尝试同时更新MySQL表中的多行。PHP似乎运行(种),但更新我的表与"数组"在所有受影响的列。有人可以请填补空白,我的代码或解释我错过了什么?!

注:我知道我需要逃离我的PHP来防止注入攻击…以后再说吧

下面的HTML和PHP代码

PHP echo语句中的HTML表单

<form action='edit.php' method='POST' id='scheduler'>
<input type='hidden' id='identifier' name='identifier[]' value='".  $row['id'] . "'>
<input type='hidden' id='assoc_to_username' name='assoc_to_username' value='" .     $schedule['assoc_to_username'] . "'>
<input id='assoc_to_date' name='assoc_to_date[]' type='text' value='" .     $schedule['assoc_to_date'] . "'/>
<select name='assoc_to_start_time[]' id='assoc_to_start_time'>
<option selected disabled='disabled' value='" . $schedule['assoc_to_start_time'] . "'>" . $schedule['assoc_to_start_time'] . "</option>
<option disabled='disabled'>----------</option>
<option value='All day'>All day</option>
</select>
<select name='assoc_to_end_time[]' id='assoc_to_end_time'>
<option selected disabled='disabled' value='" . $schedule['assoc_to_end_time'] . "'>" . $schedule['assoc_to_end_time'] . "</option>
<option disabled='disabled'>----------</option>
<option value=''>No end time</option>
<option value=''>All day</option>
</select>
<input id='taskname' name='taskname[]' type='text' value='" . $schedule['taskname'] . "'/>
<input id='submit' name='submit' class='submit' type='submit' value='Edit' type='submit' />
</form>

PHP进程代码

require_once('../inc/database-config.php');
$id1 = $_POST['identifier'];
$assoc_to_username = $_POST['assoc_to_username'];
$assoc_to_date = $_POST['assoc_to_date'];
$assoc_to_start_time = $_POST['assoc_to_start_time'];
$assoc_to_end_time = $_POST['assoc_to_end_time'];
$taskname = $_POST['taskname'];
foreach ($_POST['identifier'] as $id1)
{
    $sql=mysql_query("UPDATE schedule SET assoc_to_date= $assoc_to_date, assoc_to_start_time= $assoc_to_start_time, assoc_to_end_time= $assoc_to_end_time, taskname=$taskname WHERE assoc_to_username=$assoc_to_username");
header("Location: ../admin.php?action=edited"); 
;}

if (!mysql_query($sql,$dbcon))
{   die (header("Location: ../error.php"));   }
mysql_close($dbcon);

请帮忙!

我认为问题是在每个块…其他POST变量也是数组,如何直接使用这些??像这样改变你的循环并尝试:

for($i =0;$i <count($_POST['identifier']);$i++)
{
    $sql=mysql_query("UPDATE schedule SET assoc_to_date= ".$assoc_to_date[$i].", assoc_to_start_time= ".$assoc_to_start_time[$i].", assoc_to_end_time= ".$assoc_to_end_time[$i].", taskname=".$taskname[$i]." WHERE assoc_to_username=".$assoc_to_username[$i].";");
    if (!mysql_query($sql,$dbcon)){
        die (header("Location: ../error.php")); 
    }
}

也添加[]到name='assoc_to_username[]'输入字段

通过在输入名称上使用方括号[],PHP试图挑选具有相同名称的多个输入,即使您有一个具有该名称的字段(您确实有),PHP仍然会将该信息存储为具有一个元素的数组。去掉名字属性中的方括号,就可以了。

首先,尝试更正您的查询,以便传递变量:

$sql=mysql_query("UPDATE schedule SET assoc_to_date= ".$assoc_to_date.", assoc_to_start_time=".$assoc_to_start_time.", assoc_to_end_time= ".$assoc_to_end_time.", taskname=".$taskname." WHERE assoc_to_username=".$assoc_to_username."");