用foreach更新几条记录

时间:2019-05-15 14:29:23

标签: php foreach

我对部分代码有问题,其中通过foreach,我遍历了一个数组,而满足某些条件的那些则由UPDATE值更新。问题是我尝试使用隐藏的输入传递值,并且仅更新最后一个值。如何修改代码以便可以使用数组?

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

<form action="actualizar.php" method="post">
      <?php foreach ($ca as $c){?>
        <?php foreach ($pr as $p) {}?>
      <?php if (($p['id_fecha'])==($c['nFecha'])){
        //actions to be taken if the conditions are met

                  }?>

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

      <?php }} ?>

      <input type="submit" value="Actualiza puntos">
    </form>

我需要的是在我的“ calculo”表中,只要符合条件就更新“ puntaje_fecha”的所有值。很多人建议我通过数组更改输入的名称,但是我不知道该怎么做。非常感谢任何可以帮助我的人。

2 个答案:

答案 0 :(得分:1)

您仅创建两个输入,名称分别为“ 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']; ?>">



确保您的输入看起来像下面的inspect元素,否则请检查$ ca和$ pr

中的数据
          <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">

在foreach的try块中,更新数组中的每个值。

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

答案 1 :(得分:0)

您可以更改下面的代码

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

为此:

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

上面将输入表单视为数组,因此在您的控制器中按以下方式获取数据:

$puntajes = $_POST["puntaje_fecha"]; //array
$idsCalculo = $_POST["id_calculo"];  //array

您可以使用简单的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());
}
}

希望我能帮上忙