当前位置: 首页 > 知识库问答 >
问题:

用数组PHP更新mysql数据库字段

顾昌翰
2023-03-14

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

我的代码是这样的:-//start a table 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");
}
?>

当我打印$\u POST数组时,一切都很好,但是变量为Null。我知道我不能在多个阵列上进行foreach(至少我不认为我可以),那么我还缺少其他技巧吗?我离这里不远了,因为$u 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

关键在于确定填充了哪些变量等,以及填充了哪些变量。回到第一原则上来,不是吗?

大家干杯。J

共有3个答案

乜裕
2023-03-14

问题是,您告诉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和一个警告。然后,这个空值会被填充到SQL语句中,这就是问题所在。

亢雅懿
2023-03-14

像这样更改查询:

  $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' ";

}   
米飞龙
2023-03-14

实际上,你可以通过做一个更简单(基本)的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);

我希望这有帮助。

干杯

 类似资料:
  • 我不是新来的,但这是我第一次在这个网站上寻求帮助。 我有一个非常有趣的问题,我已经在下面的同时循环中呈现了许多动态输入字段 我的目标是使用name='adjust[]'动态输入字段更新mysql数据库中的多行。目前有200多个项目更新为表列项目库存。表已存在,列已设置为整数。 (表:项)--(列:item_inventory(接受整数)) 这是我得到的↓它目前更新循环中最后一个数组项的所有行。因为

  • 问题内容: 我有以下要存储在数据库中的数组… 我试图搜索谷歌上如何做到这一点,我所能找到的是表明插入数组之前需要对数组进行拆分的信息。它是否正确?抱歉,天真,对于php来说还很陌生。 问题答案: 您不能直接将数组插入 mysql, 因为 mysql 无法 识别php 数据类型。 Mysql 只了解 SQL 。因此,要将数组插入mysql数据库,必须将其转换为sql语句。可以手动或通过库来完成。输出

  • 我想使用Ajax更新数据,下面是示例代码。SweetAlert被移位,因为它已经更新了,但是它在数据库中没有生效,因此它给出了一个错误。 这是在单击submit按钮时提交表单的Ajax脚本。 这段代码用于php服务器端,用于将数据插入数据库。

  • 所以,我的程序中有公司和员工实体。雇员为公司工作,在雇员表中有company_id(外键),我跟踪某些雇员为哪个公司工作。现在,如果我想更新该字段,如何更改公司员工正在工作? 我想更新员工类中的company_id,使用字段int companyId来引用该列,但是它不起作用。在员工服务实施中。类如果我想更新该列(这意味着员工不是为公司工作,或员工更改了公司),我必须调用公司类,这不是我想在员工表

  • 问题内容: 我正在开发一个PHP应用程序,该程序需要将各种设置存储在数据库中。客户经常询问是否可以添加或更改/删除某些内容,这已导致表格设计出现问题。基本上,我有很多布尔字段,它们仅指示是否为特定记录启用了各种设置。 为了避免使表格混乱,我考虑将数据存储为序列化数组。我已经读过,这被认为是不好的做法,但是我认为这是使用这种方法的合理案例。 有什么真正的理由避免这样做吗? 任何建议表示赞赏。 谢谢。

  • 问题内容: 我在MySql中有一个很大的数据库,我需要每天左右对其进行备份。 我需要能够从任何计算机上进行备份,因此我考虑制作一个php脚本来做到这一点,并将此php脚本置于联机状态(具有密码保护和授权等功能,因此只有我可以访问它)。 但是,我不知道如何正确完成? 我应该使用哪些命令,并且可以更改备份的设置(例如)? 我将不胜感激… 另外,如果这是一个错误的方法(不安全,或者使用错误的sql文件提