Php 标记正确复选框并更新mysql中的正确行
我找不到正确的方法如何从复选框更新mysqli中的正确行。如果我提交按钮,它将更新所有字段。如果我在循环时在外部使用ifset,它只对第一行进行更改。你能提出一些建议吗 功能显示命令{ $query=querySELECT*FROM orders orders BY ORDER\u id DESC; 确认$query; 而$row=fetch\u数组$query{ $order_id=$row['order_id']; $order_amount=$row['order_amount']; $order_transaction=$row['order_transaction']; $order_status=$row['order_status']; $order\u currency=$row['order\u currency']; $order_date=$row['order_date']; $order\u date=strotime$order\u date; $order_date=日期'd-m-Y',$order_date; $checked=$row['mark_as_done']; // 检查是否标记为完成或空 如果$checked==完成{ echo$checked_status=已检查; }否则{ echo$checked_status=; } 如果设置为提交,则更新表 ifisset$\u POST['submit']{ 全球美元连接; $value=$_POST['done']; $update_query=更新订单设置标记_as_done=?其中订单id=?;; $stmt=mysqli\u stmt\u init$connection; 如果!mysqli\u stmt\u准备$stmt,$update\u查询{ echo-SQL失败; } 否则{ mysqli_stmt_bind_param$stmt,ss,$value,$order_id; mysqli_stmt_execute$stmt; } } //从数据库中读取信息Php 标记正确复选框并更新mysql中的正确行,php,mysql,forms,function,Php,Mysql,Forms,Function,我找不到正确的方法如何从复选框更新mysqli中的正确行。如果我提交按钮,它将更新所有字段。如果我在循环时在外部使用ifset,它只对第一行进行更改。你能提出一些建议吗 功能显示命令{ $query=querySELECT*FROM orders orders BY ORDER\u id DESC; 确认$query; 而$row=fetch\u数组$query{ $order_id=$row['order_id']; $order_amount=$row['order_amount']; $o
$orders=这有点令人困惑/费解,但这可能更符合您试图实现的目标。生成的表单需要某种方式来引用它们要更新的记录-在这种情况下,order\u id似乎是正确的选择。为此,将提交一个带有order\u id值的隐藏字段ted的表单仍然不清楚除了提供“完成”的值之外,应该做什么
如果有关系的话,我会注意到DELIMETER不是一个单词。请使用正确的缩进,这样您的代码实际上是可读的。生成的每一行的表单都应该有一个与记录相关的ID,这样更新将使用正确的记录。现在看来,它似乎不是caseaction=index.php?orders
function display_orders(){
$query = query( "SELECT * FROM orders ORDER BY order_id DESC");
confirm($query);
while($row = fetch_array($query)) {
$order_id = $row['order_id'];
$order_amount = $row['order_amount'];
$order_transaction = $row['order_transaction'];
$order_status = $row['order_status'];
$order_currency = $row['order_currency'];
$order_date = $row['order_date'];
$order_date = strtotime($order_date);
$order_date = date('d-m-Y', $order_date);
$checked = $row['mark_as_done'];
if( $checked === "done" ){
$checked_status = "checked";
}else{
$checked_status = "";
}
$orders = <<<DELIMITER
<tr>
<td><a href="index.php?order_details&id={$order_id}">{$order_id}</a></td>
<td>{$order_transaction}</td>
<td>{$order_amount}</td>
<td>{$order_currency}</td>
<td>{$order_status}</td>
<td>{$order_date}</td>
<td><a class="btn btn-danger" href="index.php?delete_order_id={$order_id}"><span class="glyphicon glyphicon-remove"></span></a></td>
<td>
<form action='index.php?orders' method='post'>
<input type='checkbox' name='done' value='done' {$checked_status} />
<input type='hidden' name='order_id' value='{$order_id}' />
<input class='btn btn-primary btn-sm' type='submit' name='submit' value='submit'>
</form>
</td>
</tr>
DELIMITER;
echo $orders;
}
if( isset( $_POST['submit'], $_POST['order_id'], $_POST['done'] ) ){
global $connection;
$id = $_POST['order_id'];
$value = $_POST['done'];
$update_query = "UPDATE orders SET mark_as_done=? WHERE order_id =?;";
$stmt = mysqli_stmt_init($connection);
if( !mysqli_stmt_prepare($stmt, $update_query)){
echo "SQL failed";
} else {
mysqli_stmt_bind_param( $stmt, "ss", $value, $id );
mysqli_stmt_execute($stmt);
}
}
}