我在PHP中使用HTML表单尝试同时更新MySQL表中的多行。 PHP似乎运行(有点)但在所有受影响的列中使用'Array'更新我的表。有人可以填写我的代码的空白或解释我错过了什么?!
P.S。我知道我需要逃避我的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);
请帮忙!
答案 0 :(得分:1)
通过在输入名称上使用方括号[],PHP试图获取具有相同名称的多个输入,即使您有一个具有该名称的字段(您这样做),PHP仍会将该信息存储为一个元素的数组。从名称属性中删除方括号,你应该好好去。
答案 1 :(得分:0)
我认为问题出在foreach块中...其他POST var也是数组,你怎么能直接使用它们?改变你这样循环并尝试:
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 []'输入字段。
答案 2 :(得分:-1)
首先,尝试更正您的查询,以便传递变量:
$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."");