使用while - Form更新表格

时间:2016-04-25 23:39:52

标签: php html mysql forms sql-update

我在使用此更新时遇到问题。我正在使用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';

tldr;我想将我的表所具有的值更新到我的数据库中。 The table that is created by the while

3 个答案:

答案 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 = ?)"

并传递正确的参数以填充问号。