Обновите несколько записей с помощью foreach - PullRequest
1 голос
/ 15 мая 2019

У меня проблема с частью кода, в которой через 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>

Что мне нужно, так это то, что в моей таблице «calclo» все значения «puntaje_fecha»обновляется, пока они соответствуют этому условию.Многие люди рекомендовали мне изменить имя ввода массивами, но я не знаю, как это сделать.Большое спасибо всем, кто может мне помочь.

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Вы создаете только два входа с именами "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">

В вашем блоке try с помощью foreach обновите каждое значение вмассив.

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());
}
0 голосов
/ 15 мая 2019

Вы можете изменить свой код ниже

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

Надеюсь, я помог

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...