0

我试图在一次提交中实现多次更新。我有一个包含许多行的表,并且希望能够通过切换到下一个插入框来更新每一行中的一个字段。

因此,我的代码是:-//开始一个表 echo ' ';

//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

研究填充了哪些变量等以及填充了什么是关键。回到第一原则,不是吗?

祝大家欢呼。Ĵ

4

3 回答 3

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);

我希望这有帮助。

干杯

于 2013-02-19T09:17:58.533 回答
1

像这样更改查询:

  $query = "UPDATE tbl_lab_item SET test_result=$tresult WHERE lab_item_id = $id";

通过添加单引号 ' ',您可以告诉它以字符串的形式读取,而不是获取 var 的值。

编辑

用以下内容替换您的 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' ";

}   
于 2013-02-19T01:47:53.907 回答
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() 需要一个字符串,但是你传入一个数组,所以你会得到一个 PHPNULL和一个警告。然后那个 null 会被塞进你的 SQL 语句中,这就是你的问题。

于 2013-02-19T03:32:24.477 回答