我对部分代码有问题,其中通过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”的所有值。很多人建议我通过数组更改输入的名称,但是我不知道该怎么做。非常感谢任何可以帮助我的人。
答案 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());
}
}
希望我能帮上忙