我正在尝试在一次提交中实现多次更新。我有一个包含多行的表,希望能够通过Tab键到下一个插入框来更新每一行中的一个字段。
我的代码是: - //开始一张桌子 回声' “;
//start header of table
echo '<tr>
<td width="60" align="center"><strong>Lab Item ID</strong></td>
<td width="60" align="center"><strong>Test Suite Name</strong></td>
<td width="60" align="center"><strong>Test Name</strong></td>
<td width="50" align="center"><strong>Result</strong></td>
</tr>';
//loop through all results
while ($row=mysql_fetch_object($sql)) {
//print out table contents and add id into an array and email into an array
echo '<tr>
<td align="center"><input name="id[]" value='.$row->lab_item_id.' readonly> </td>
<td align="center">'.$row->test_suite_name.'</td>
<td align="center">'.$row->test_name.'</td>
<td><input name="test_result[]" type="text" value="'.$row->test_result.'"></td>
</tr>';
}
//submit the form
echo'<tr>
<td colspan="3" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</form>';
//if form has been pressed proccess it
if($_POST["Submit"])
{
//get data from form
//$name = $_POST['name'];
//$_POST['check_number'] and $_POST['check_date'] are parallel arrays
foreach( $_POST['id'] as $id ) {
$tresult = trim($_POST['test_result']);
$query = "UPDATE tbl_lab_item SET test_result='$tresult' WHERE lab_item_id = '$id'";
//execute query
}
print_r($_POST);
var_dump($tresult);
//redirect user
$_SESSION['success'] = 'Updated';
//header("location:index.php");
}
?>
当我打印$ _POST数组时,所有内容都填充正常,但变量为Null。我知道我不能在多个阵列上做一个foreach(至少我认为我不能)所以还有其他一些我不知道的技巧吗?因为$ _Post印刷品中有正确的数据,所以我不能遥远。
顺便说一句,整个事情是由查询生成的,所以我永远不知道有多少记录需要更新。
我一直在关注这个(和其他)论坛,但似乎无法获得解决方案。我以为我理解了数组,但现在我开始怀疑了!
编辑 - 这是$ tresult变量无法正常工作。
非常感谢, 杰森
编辑2月21日星期四(英国时间05:41) 感谢大家的投入。我现在已经解决了这个问题,你的集体建议也有所帮助。最终破解它的代码是: -
//get data from form
$id1 = $_POST['id'];
$test_result1 = $_POST['test_result'];
foreach ($id1 as $key => $value){
$query = "UPDATE tbl_lab_item SET test_result='$test_result1[$key]' WHERE lab_item_id=$value ";
//execute query
处理填充了哪些变量等以及它们填充的内容是关键。回到第一原则,不是吗?
干杯。 Ĵ
答案 0 :(得分:1)
像这样更改查询:
$query = "UPDATE tbl_lab_item SET test_result=$tresult WHERE lab_item_id = $id";
通过添加单引号'',你告诉它读取是一个字符串,而不是取值的值。
修改强>
用以下内容替换你的foreach循环,让我知道:
$id1 = $_POST['id'];
$test_result1 = $_POST['test_result'];
foreach( $id1 as $key => $value ) {
$query = "UPDATE tbl_lab_item SET test_result='$test_result1[$key]' WHERE lab_item_id = '$key' ";
}
答案 1 :(得分:1)
实际上,你可以通过做一个更简单(基本)形式的for循环来完成它:
//get data from form
//$name = $_POST['name'];
//$_POST['check_number'] and $_POST['check_date'] are parallel arrays
$numberOfData = count($_POST['id']);
for($index = 0; $index < $numberOfData; $index++)
{
$id = $_POST['id'][$index];
$tresult = trim($_POST['test_result'][$index]);
$query = "UPDATE tbl_lab_item SET test_result='$tresult' WHERE lab_item_id = '$id'";
//execute query
}
print_r($_POST);
我希望这会有所帮助。
干杯
答案 2 :(得分:0)
问题是你告诉PHP将输入字段构建为数组,但稍后将其视为字符串:
<td><input name="test_result[]" type="text" value="'.$row->test_result.'"></td>
^^--- array
$tresult = trim($_POST['test_result']);
^^^^^^^^^^^^^^^^^^^^^--- no array key, so you're assigning the entire array
$query = "UPDATE tbl_lab_item SET test_result='$tresult'
^^^^^^^^^^--- array in string context
trim()需要一个字符串,但是你传入一个数组,所以你得到一个PHP NULL
和一个警告。然后将null填入您的SQL语句,这就是您的问题。