PHP表单-使用一个或多个复选框更新数据库行

PHP表单-使用一个或多个复选框更新数据库行,php,html,mysql,forms,checkbox,Php,Html,Mysql,Forms,Checkbox,当前无法通过选中一个或多个复选框来配置php页面以更新MySQL数据库行“orderStatus”。提交表单后,应将所选行的orderStatus更新为“已验证”。它只更新表的第一行,可能是由于$orderID=$\u POST['id']在validate.php代码段中。我试图做的是检索已检查行的所有orderID,并将其分配给变量/array$orderID,以便仅更改这些行的orderStatus 以下是HTML: <html> <header> <titl

当前无法通过选中一个或多个复选框来配置php页面以更新MySQL数据库行“orderStatus”。提交表单后,应将所选行的orderStatus更新为“已验证”。它只更新表的第一行,可能是由于$orderID=$\u POST['id']在validate.php代码段中。我试图做的是检索已检查行的所有orderID,并将其分配给变量/array$orderID,以便仅更改这些行的orderStatus

以下是HTML:

<html>
<header>
<title>Validate an Order</title>

</header>
<body>

<h1>Validate an Order</h1>
<h4>Showing all unvalidated orders.</h4>
<br/>

<?php
$con=mysqli_connect("***","***","***","***");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM orders WHERE orderStatus = 'processing' ORDER BY orderDate DESC");

echo "<table border='1'>
<tr>
<th>Validate?</th>
<th>OrderID</th>
<th>OrderDate</th>
<th>OrderShipDate</th>
<th>OrderType</th>
<th>OrderMedia</th>
<th>OrderContent</th>
<th>OrderStatus</th>
<th>OrderQuantity</th>
<th>OrderCost</th>
<th>OrderDeposit</th>
<th>OrderDesc</th>
</tr>";


while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . "<form action='validate.php' method='post'><input type='hidden' name='id' value='".$row['orderID']."'><input type='checkbox' name='validate[]' value='validated'>" . "</td>";
echo "<td>" . $row['orderID'] . "</td>";
echo "<td>" . $row['orderDate'] . "</td>";
echo "<td>" . $row['orderShipDate'] . "</td>";
echo "<td>" . $row['orderType'] . "</td>";
echo "<td>" . $row['orderMedia'] . "</td>";
echo "<td>" . $row['orderContent'] . "</td>";
echo "<td>" . $row['orderStatus'] . "</td>";
echo "<td>" . $row['orderQuantity'] . "</td>";
echo "<td>" . $row['orderCost'] . "</td>";
echo "<td>" . $row['orderDeposit'] . "</td>";
echo "<td>" . $row['orderDesc'] . "</td>";
echo "</tr>";
}
echo "</table>";
echo "<input type='submit' name='submit' value='Submit'></form>";
mysqli_close($con);
?>


</body>
</html>

确认订单
确认订单
显示所有未经验证的订单。


问题是表单在while循环中。当您与一起使用时,您需要将标记完全放在循环外,或者将整个标记放在循环内。任何其他结构都会破坏的语法,并将被浏览器忽略,或呈现不正确

请试试这个

<html>
<header>
<title>Validate an Order</title>

</header>
<body>

<h1>Validate an Order</h1>
<h4>Showing all unvalidated orders.</h4>
<br/>

<?php
$con=mysqli_connect("***","***","***","***");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM orders WHERE orderStatus = 'processing' ORDER BY orderDate DESC");
echo "<form action='validate.php' method='post'>
<table border='1'>
<tr>
<th>Validate?</th>
<th>OrderID</th>
<th>OrderDate</th>
<th>OrderShipDate</th>
<th>OrderType</th>
<th>OrderMedia</th>
<th>OrderContent</th>
<th>OrderStatus</th>
<th>OrderQuantity</th>
<th>OrderCost</th>
<th>OrderDeposit</th>
<th>OrderDesc</th>
</tr>";


while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . "<input type='hidden' name='id' value='".$row['orderID']."'><input type='checkbox' name='validate[]' value='validated'>" . "</td>";
echo "<td>" . $row['orderID'] . "</td>";
echo "<td>" . $row['orderDate'] . "</td>";
echo "<td>" . $row['orderShipDate'] . "</td>";
echo "<td>" . $row['orderType'] . "</td>";
echo "<td>" . $row['orderMedia'] . "</td>";
echo "<td>" . $row['orderContent'] . "</td>";
echo "<td>" . $row['orderStatus'] . "</td>";
echo "<td>" . $row['orderQuantity'] . "</td>";
echo "<td>" . $row['orderCost'] . "</td>";
echo "<td>" . $row['orderDeposit'] . "</td>";
echo "<td>" . $row['orderDesc'] . "</td>";
echo "</tr>";
}
echo "</table>";
echo "<input type='submit' name='submit' value='Submit'>"
. "</form>";
mysqli_close($con);
?>


</body>
</html>

确认订单
确认订单
显示所有未经验证的订单。


问题是表单在while循环中。当您与一起使用时,您需要将标记完全放在循环外,或者将整个标记放在循环内。任何其他结构都会破坏的语法,并将被浏览器忽略,或呈现不正确

请试试这个

<html>
<header>
<title>Validate an Order</title>

</header>
<body>

<h1>Validate an Order</h1>
<h4>Showing all unvalidated orders.</h4>
<br/>

<?php
$con=mysqli_connect("***","***","***","***");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM orders WHERE orderStatus = 'processing' ORDER BY orderDate DESC");
echo "<form action='validate.php' method='post'>
<table border='1'>
<tr>
<th>Validate?</th>
<th>OrderID</th>
<th>OrderDate</th>
<th>OrderShipDate</th>
<th>OrderType</th>
<th>OrderMedia</th>
<th>OrderContent</th>
<th>OrderStatus</th>
<th>OrderQuantity</th>
<th>OrderCost</th>
<th>OrderDeposit</th>
<th>OrderDesc</th>
</tr>";


while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . "<input type='hidden' name='id' value='".$row['orderID']."'><input type='checkbox' name='validate[]' value='validated'>" . "</td>";
echo "<td>" . $row['orderID'] . "</td>";
echo "<td>" . $row['orderDate'] . "</td>";
echo "<td>" . $row['orderShipDate'] . "</td>";
echo "<td>" . $row['orderType'] . "</td>";
echo "<td>" . $row['orderMedia'] . "</td>";
echo "<td>" . $row['orderContent'] . "</td>";
echo "<td>" . $row['orderStatus'] . "</td>";
echo "<td>" . $row['orderQuantity'] . "</td>";
echo "<td>" . $row['orderCost'] . "</td>";
echo "<td>" . $row['orderDeposit'] . "</td>";
echo "<td>" . $row['orderDesc'] . "</td>";
echo "</tr>";
}
echo "</table>";
echo "<input type='submit' name='submit' value='Submit'>"
. "</form>";
mysqli_close($con);
?>


</body>
</html>

确认订单
确认订单
显示所有未经验证的订单。


谢谢大家!最后,我将HTML中的输入复选框标记改为:
谢谢大家!最后,我将HTML中的输入复选框标记更改为:
请打印($\u POST['validate'])是否回显所有值?您正在为每个
$row
循环创建一个
。由于您在表单中只发送1个
validate
值,因此只更新第一个值。请打印($\u POST['validate'])是否回显所有值?您正在为每个
$row
循环创建一个
。由于您在表单中只发送1
validate
值,因此只更新第一个值。我没有检查此代码是否正常工作,但我假设您的表单正常工作,但您仍然需要更正他的validate.php,提示--只需在
$orderId
中添加索引,因此,每当循环返回时,它都会增加。我认为这比将来更重要fine@arif_suhail_123-对不起,如果我没有收到您的信息…您能编辑我的代码吗?不,我不想碰,因为我不知道还有什么问题,我要说的是$orderId不是一个值,它是一个数组,如果您看到图片,那么当您运行查询时,您需要处理它。他的查询是这样的
mysqli_查询($con,“updateorderssetorderstatus='$validate',其中orderID=$orderID”)
在这里orderID是一个值,他应该在循环之前声明变量
$i
,然后运行这个查询<代码>mysqli_查询($con,“更新订单集orderStatus=”$validate',其中orderID=”“$orderID[$i++]”);所以每次指针移动时
我没有检查这段代码是否有效,但是我假设您的表单可以正常工作,但是您仍然需要更正他的validate.php,提示--只需在
$orderId
中添加索引,这样当循环返回时,它就会增加。我认为这比将来更重要fine@arif_suhail_123-对不起,如果我没有收到您的信息…您能编辑我的代码吗?不,我不想碰,因为我不知道还有什么问题,我要说的是$orderId不是一个值,它是一个数组,如果您看到图片,那么当您运行查询时,您需要处理它。他的查询是这样的
mysqli_查询($con,“updateorderssetorderstatus='$validate',其中orderID=$orderID”)
在这里orderID是一个值,他应该在循环之前声明变量
$i
,然后运行这个查询<代码>mysqli_查询($con,“更新订单集orderStatus=”$validate',其中orderID=”“$orderID[$i++]”);因此,每次指针移动时
// if the vid array exists
if(isset($_POST['vid'])) {

// Loop through vid array "containing orderIDs" and set orderStatus to "validated" only for those orderIDs
foreach($_POST['vid'] as $vid) {
mysqli_query($con,"UPDATE orders SET orderStatus = 'validated' WHERE orderID = '$vid'");
}
}