【问题标题】:Update Multiple rows at one time in PHP在 PHP 中一次更新多行
【发布时间】:2014-04-05 04:58:30
【问题描述】:

我正在尝试在提交表单时更新多行(尤其是“小时”字段。

我有它的工作,但只有一个值更新而不是全部。

每次更新都可能有不同的值。

表格代码:

$query2 = "select * FROM work_hours WHERE formid = $formid ";
$result = $mysqli->query( $query2 );

$num_results = $result->num_rows;
if( $num_results > 0){ 

echo " <table border='0' align='center'>
<tr>
<td colspan='2' align='center'>
<strong> Time Away Break Down</strong>
 </td>
 </tr>
<tr>
<td align='center'>Date</td>
<td align='left'>Hours</td>
</tr>";

while( $row = $result->fetch_assoc() ){

extract($row);

 echo " <tr>
 <td class='hidden_sm' align='center'>
  <input type='text' name='id' size='10' value='$id' class='dept' readonly   style='width:30px;'>
<input type='text' name='date' size='40' value='$date' class='dept'   readonly>              <input type='text' name='end_date' size='40' value='$end_date' class='dept'    readonly> 
</td>
 <td class='hidden_sm' align='left' >
  <input type='text' name='hours' size='10' style='width:30px;' value='$hours'     class='dept' >        
</td>
</tr>

";
}

echo "<tr>
<td colspan='2' align='center'>
<input type='submit' name='Submit' value='Submit Request'>
</td>
</tr>
</form>
</table>";//end table

提交代码:

$id = $_POST['id'];
$formid = $_POST['formid'];
$hours = $_POST['hours'];
include 'connect-db.php'; 
$stmt = $mysqli->prepare("UPDATE work_hours SET hours = ? WHERE formid = ?");
$stmt->bind_param('si',
  $_POST['hours'],
  $_POST['formid']);
$stmt->execute(); 
 if ( $stmt ) {
echo "<p align='center'>Thank you, this request has been approved.<BR>You will be     redirected in 5 seconds</p>";
} else {
echo "Error, you status cannot be updated. <BR> Please contact your system     administrator.";
 }
$stmt->close();
?>

谁能指出我在提交时更新所有值的正确方向,因为我的运气为零。

我也明白防止 SQL 注入的必要性,而且我正在工作,所以不需要提醒我。

提前致谢!

【问题讨论】:

  • 如果您要更新小时 WHERE formid 等于某个值,那么它将更新所有 formid 等于某个值的行。 formid 是唯一值吗?
  • 实际上,id 是唯一值 - 我将查询更新为 $stmt = $mysqli->prepare("UPDATE work_hours SET hours = ? WHERE id = $id"); $stmt->bind_param('i', $_POST['hours']);但它只更新最后一个字段
  • 什么是强大的?您将希望根据行的共享值更新表......如果他们有一个,那就是。否则,您将不得不使用循环或批量更新来更新。
  • formid 对于每个表单提交都是唯一的,这样我可以查询与该表单相关的所有值(在这种情况下,它将是所有请求的休息日) - 这里是表单看起来像link 我猜我需要使用循环来完成它,但我正在使用如何。
  • 我想如果您将数据库的相关部分发布到问题中会有所帮助。没有看到就很难说更多。

标签: php mysql mysqli sql-update


【解决方案1】:

看起来您需要使用 CASE 语句,如下所述: How does MySQL CASE work?

使用循环来构建语句,最好使用 id 作为标识符而不是 formid,因为 id 是唯一值,您可以在表单中得到不同的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 2013-11-26
    • 2016-06-04
    • 1970-01-01
    • 2013-05-14
    • 2020-04-19
    • 2013-08-08
    • 2015-11-11
    相关资源
    最近更新 更多