我在使用此更新时遇到问题。我正在使用select
创建一个表并使用while
(它显示15行以上)。有些值可以更新,所以这就是问题所在。当我在文本上写一个值并选择更新时,它只会更新表格在表格中检测到的最后一个值。
我使用以下方法创建表并显示我在数据库中的值:
<?php
$query_busqueda = "select * from servicio join venta on idServicio = servicioID join usuario on idUsuario = usuarioID where usuarioID = '".$_POST["idUser"]."';";
$resuVenta = mysqli_query($conexion,$query_busqueda);
while ($renglonVenta= mysqli_fetch_array($resuVenta)) {
//$totalHour=$totalHour+$renglonVenta['horasSerMes'];
$totalMH= $renglonVenta['precio'] * $renglonVenta['horasSerMes'];
$totalMonth=$totalMonth+$totalMH;
?>
<td><input style="border: 0;" type="text" readonly="readonly" value="<?php echo $renglonVenta['idServicio'];?>" class='barra' /></td>
<td><input style="border: 0;" type="text" readonly="readonly" value="<?php echo $renglonVenta['servicio'];?>" class='barra' /></td>
<td><input style="border: 0;" type="text" readonly="readonly" value="<?php echo $renglonVenta['precio'];?>" class='barra' /> </td>
<td><input name= "hour" style="border: 0;" type="number" min="0" value="<?php echo $renglonVenta['horasSerMes'];?>" class='barra' /> </td>
<td><input name= "monthandhour" style="border: 0;" type="text" value="<?php echo $totalMH;?>" class='barra' /></td>
</tr>
<?php
}
?>
我正在尝试使用以下代码更新值:
$query_update = "select * from servicio join venta on idServicio = servicioID join usuario on idUsuario = usuarioID where usuarioID = '".$_POST["idUser"]."';";
$resuTodo = mysqli_query($conexion,$query_update);
while ($renglonTodo= mysqli_fetch_array($resuTodo)){
$query_updateVE="UPDATE `venta` SET `horasSerMes`='".$updateH."',`costoSerMes`='".$updateMH."' WHERE `usuarioID`='".$updateIDU."' and servicioID = '".$renglonTodo['idServicio']."';";
//$resuUVE= mysqli_query($conexion,$query_updateVE);
echo $query_updateVE;
}
最后,我使用echo来查看我正在做的事情,如果你在下面的引文中看到,它只从我数据库中的最后一条记录中获取值。 “horasSrMes”和“costoSerMes”应根据表格中每个文本字段的值进行更改。
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '1';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '2';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '3';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '4';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '5';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '6';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '7';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '8';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '9';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '10';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '11';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '12';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '13';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '14';
UPDATE `venta` SET `horasSerMes`='9',`costoSerMes`='4000' WHERE `usuarioID`='30' and servicioID = '15';
答案 0 :(得分:3)
您在表单的每一行上使用相同的输入名称。如果您有name="idUser"
的多个输入,则$_POST['idUser']
的值只是其中之一。
为他们命名name="idUser[]"
。然后$_POST['idUser']
将是一个数组,您可以循环遍历数组以处理所有输入。
foreach ($_POST['idUser'] AS $i => $idUser) {
$hour = $_POST['hour'][$i];
$monthAndHour = $_POST['monthandhour'][$i];
// Code here to update the row with `idUser = $idUser`
}
答案 1 :(得分:0)
只做一次更新怎么样:
UPDATE venta SET horasSerMes='9',costoSerMes='4000' WHERE usuarioID='30' and servicioID IN (1, 2, 3);
代码将是:
$query_busqueda = "select * from servicio join venta on idServicio = servicioID join usuario on idUsuario = usuarioID where usuarioID = ".(int)$_POST["idUser"];
$resuVenta = mysqli_query($conexion,$query_busqueda);
$serviceIds = [];
while($renglonVenta = mysqli_fetch_assoc($resuVenta)){
$serviceIds[] = $renglonVenta['servicioID'];
}
$query_updateVE="UPDATE `venta` SET `horasSerMes`='".$updateH."',`costoSerMes`='".$updateMH."' WHERE `usuarioID`='".$updateIDU."' and servicioID IN (".implode(',', $serviceIds).")";
mysqli_query($conexion,$query_updateVE);
答案 2 :(得分:0)
我不喜欢你尝试update
的方式。您的代码容易受到SQL注入攻击,应该不惜一切代价阻止它,例如使用PDO。此外,您对数据库服务器有n + 1个请求。我会用PDO生成这个查询:
"UPDATE `venta`
SET `horasSerMes`=?,`costoSerMes`=?
WHERE `usuarioID`=? and servicioID in (select servicioID
from servicio
join venta
on idServicio = servicioID
join usuario
on idUsuario = usuarioID
where usuarioID = ?)"
并传递正确的参数以填充问号。