Php 使用foreach更新多个记录

Php 使用foreach更新多个记录,php,foreach,Php,Foreach,我在代码的一部分中遇到了一个问题,通过foreach我遍历了一个数组,满足某些条件的数组由更新值更新。问题是我试图传递这些值​​使用隐藏输入,只更新最后一个值。如何修改代码,以便使用数组进行修改 try { $add = "UPDATE calculo SET puntaje_fecha=:puntaje_fecha WHERE id_calculo=:id_calculo"; $d = $conn->prepare($add); $d->bindParam(

我在代码的一部分中遇到了一个问题,通过foreach我遍历了一个数组,满足某些条件的数组由更新值更新。问题是我试图传递这些值​​使用隐藏输入,只更新最后一个值。如何修改代码,以便使用数组进行修改

try {
    $add = "UPDATE calculo SET puntaje_fecha=:puntaje_fecha WHERE id_calculo=:id_calculo";
    $d = $conn->prepare($add);
    $d->bindParam(':puntaje_fecha', $_POST['puntaje_fecha']);
    $d->bindParam(':id_calculo', $_POST['id_calculo']);
    $d->execute();

} catch (PDOException $e) {
    die("Error: " . $e->getMessage() . "<br>on line: " . $e->getLine() . "<br>on file: " . $e->getFile());
}
试试看{
$add=“更新计算集puntaje\u fecha=:puntaje\u fecha,其中id\u calculo=:id\u calculo”;
$d=$conn->prepare($add);
$d->bindParam(':puntaje_fecha',$_POST['puntaje_fecha']);
$d->bindParam(':id\u calculo',$\u POST['id\u calculo']);
$d->execute();
}捕获(PDO$e){
死(“错误:“.e->getMessage()”
在文件:“.e->getFile()”
的第行:“.e->getLine()”; }



您可以更改下面的代码

<input type="hidden" name="puntaje_fecha" value="<?php echo $s; ?>">
<input type="hidden" name="id_calculo" value="<?php echo $c['id_calculo']; ?>">
您可以使用简单的foreach构建查询:

foreach($puntajes as $index => $puntaje) {
    updateData($puntaje, $idsCalculo[$index]); // call the new function for update
}

function updateData($puntaje, $idCalculo) {
   $add = "UPDATE calculo SET puntaje_fecha=:puntaje_fecha WHERE id_calculo=:id_calculo";
    $d = $conn->prepare($add);
    $d->bindParam(':puntaje_fecha', $puntaje);
    $d->bindParam(':id_calculo', $idCalculo);
    $d->execute();
    $message = '';
      if ($d->execute()) {
        $message = 'DATOS ACTUALIZADOS';
      } else {
        $message = 'ERROR DE ACTUALIZACION';
      }

} catch (PDOException $e) {
    die("Error: " . $e->getMessage() . "<br>on line: " . $e->getLine() . "<br>on file: " . $e->getFile());
}
}
foreach($puntajes作为$index=>$puntaje){
updateData($puntaje,$idsCalculo[$index]);//调用新函数进行更新
}
函数更新数据($puntaje,$idCalculo){
$add=“更新计算集puntaje\u fecha=:puntaje\u fecha,其中id\u calculo=:id\u calculo”;
$d=$conn->prepare($add);
$d->bindParam(':puntaje_fecha',$puntaje);
$d->bindParam(':id\u calculo',$idCalculo);
$d->execute();
$message='';
如果($d->execute()){
$message='DATOS-ACTUALIZADOS';
}否则{
$message='ERROR DE ACTUALIZACION';
}
}捕获(PDO$e){
死(“错误:“.e->getMessage()”
在文件:“.e->getFile()”
的第行:“.e->getLine()”; } }

我希望我已经帮了你

你可以更改下面的代码

<input type="hidden" name="puntaje_fecha" value="<?php echo $s; ?>">
<input type="hidden" name="id_calculo" value="<?php echo $c['id_calculo']; ?>">
您可以使用简单的foreach构建查询:

foreach($puntajes as $index => $puntaje) {
    updateData($puntaje, $idsCalculo[$index]); // call the new function for update
}

function updateData($puntaje, $idCalculo) {
   $add = "UPDATE calculo SET puntaje_fecha=:puntaje_fecha WHERE id_calculo=:id_calculo";
    $d = $conn->prepare($add);
    $d->bindParam(':puntaje_fecha', $puntaje);
    $d->bindParam(':id_calculo', $idCalculo);
    $d->execute();
    $message = '';
      if ($d->execute()) {
        $message = 'DATOS ACTUALIZADOS';
      } else {
        $message = 'ERROR DE ACTUALIZACION';
      }

} catch (PDOException $e) {
    die("Error: " . $e->getMessage() . "<br>on line: " . $e->getLine() . "<br>on file: " . $e->getFile());
}
}
foreach($puntajes作为$index=>$puntaje){
updateData($puntaje,$idsCalculo[$index]);//调用新函数进行更新
}
函数更新数据($puntaje,$idCalculo){
$add=“更新计算集puntaje\u fecha=:puntaje\u fecha,其中id\u calculo=:id\u calculo”;
$d=$conn->prepare($add);
$d->bindParam(':puntaje_fecha',$puntaje);
$d->bindParam(':id\u calculo',$idCalculo);
$d->execute();
$message='';
如果($d->execute()){
$message='DATOS-ACTUALIZADOS';
}否则{
$message='ERROR DE ACTUALIZACION';
}
}捕获(PDO$e){
死(“错误:“.e->getMessage()”
在文件:“.e->getFile()”
的第行:“.e->getLine()”; } }

我希望我已经提供了帮助

您只创建了两个名为“puntaje_fecha”和“id_calculo”的输入。
所以上一次迭代的值被发布,为了发布所有值,将隐藏的输入更改为数组

          <input type="hidden" name="puntaje_fecha[]" value="<?php echo $s; ?>">
          <input type="hidden" name="id_calculo[]" value="<?php echo $c['id_calculo']; ?>">

您只创建了两个名为“puntaje_fecha”和“id_calculo”的输入。
所以上一次迭代的值被发布,为了发布所有值,将隐藏的输入更改为数组

          <input type="hidden" name="puntaje_fecha[]" value="<?php echo $s; ?>">
          <input type="hidden" name="id_calculo[]" value="<?php echo $c['id_calculo']; ?>">

您正在循环中创建表单,但生成的字段的
名称
属性是相同的,这就是为什么您只获取最后一个值的原因,我知道错误就在那里。问题是,我不知道如何才能执行我的程序的这一部分。您正在循环中创建表单,但生成字段的
name
属性是相同的,这就是为什么您只能准确地获取最后一个值,我知道错误在那里。问题是我不知道该怎么做才能完成我计划的这一部分。非常感谢,我有一个疑问
foreach($index=>$puntaje){updateData($puntaje,$idscalulo[$index]);//调用update的新函数}
我应该在哪里添加它?好的,为我替换当前的foreach,我建议在当前脚本中创建一个名为updateData($puntaje,$idscalulo[$index])的新函数;它将在foreach函数内部调用。非常感谢,我有一个疑问
foreach($index=>$puntaje){updateData($puntaje,$idscalulo[$index]);//调用update的新函数}
我应该在哪里添加它?好的,为我替换当前的foreach,我建议在当前脚本中创建一个名为updateData($puntaje,$idscalulo[$index])的新函数;它将在foreach函数内部调用。谢谢!但你所说的添加隐藏的输入我无法理解。我不能一个接一个地更改它,因为在预编程运行时,表中的修复数量将不断变化。抱歉,如果我不理解,数组对我来说很复杂。@MarcosAlborelli将输入的名称更改为“puntaje_fecha[]”和“id_calculo[]”。它将根据foreach中数组的长度创建多个输入作为一个数组,此外,在try块中使用foreach,因为您将以数组形式接收数据。
您不需要使用$ca做任何进一步的操作,因为您已经使用foreach循环遍历了它。谢谢!但你所说的添加隐藏的输入我无法理解。我不能一个接一个地更改它,因为在预编程运行时,表中的修复数量将不断变化。抱歉,如果我不理解,数组对我来说很复杂。@MarcosAlborelli将输入的名称更改为“puntaje_fecha[]”和“id_calculo[]”。它将根据foreach中数组的长度创建多个输入作为一个数组,此外,在try块中使用foreach,因为您将以数组的形式接收数据。
您不需要进一步使用$ca做任何事情,因为您已经使用foreach循环遍历了它。
          <input type="hidden" name="puntaje_fecha[]" value="value_1">
          <input type="hidden" name="id_calculo[]" value="value_1">
          <input type="hidden" name="puntaje_fecha[]" value="value_2">
          <input type="hidden" name="id_calculo[]" value="value_2">
          <input type="hidden" name="puntaje_fecha[]" value="value_3">
          <input type="hidden" name="id_calculo[]" value="value_3">
try {

  $puntaje_fechaArray = $_POST['puntaje_fecha'];
  $id_calculoArray = $_POST['id_calculo'];

  foreach ($puntaje_fechaArray as $key => $val){


    $puntaje_fecha = $val[$key];
    $id_calculo = $id_calculoArray[$key];

    $add = "UPDATE calculo SET puntaje_fecha=:puntaje_fecha WHERE id_calculo=:id_calculo";
    $d = $conn->prepare($add);
    $d->bindParam(':puntaje_fecha', $puntaje_fecha );
    $d->bindParam(':id_calculo', $id_calculo);
    $d->execute();
 }

} catch (PDOException $e) {
    die("Error: " . $e->getMessage() . "<br>on line: " . $e->getLine() . "<br>on file: " . $e->getFile());
}