php - PHP中foreach循环的每次迭代的提交按钮
问题描述
我对编码很陌生,所以请轻点...
我正在创建一个管理页面,其中包含需要验证的帐户列表。我只需要在单击按钮时将数据库中“已验证”列中的值从 0 更改为 1。问题是它对循环中所有其他返回的结果触发相同的事情,每个结果都有自己的按钮,而不仅仅是循环的特定迭代。任何帮助将不胜感激。当前代码如下所示:
<?php
$sql ="SELECT customer.First_Name, customer.Last_Name, account.account_no, account.client_id, customer.username
FROM customer
INNER JOIN account
ON customer.customer_id=account.client_id
WHERE validated = 0";
$tobe_validated = $dbh->query($sql);
foreach ($tobe_validated as $row) {
//creating variable for account number to put in query
$clientid=$row["client_id"];
echo "<div class='valid_name_btn'>";
echo "<form method='post'><input type='submit' class='btn btn-outline-primary' value ='Validate' name='validate' id='validate'></input></form>";
echo "<div class='valid_name'>"; //div for name
echo $row["First_Name"] . " " . $row["Last_Name"]." - Account No. ". $row["account_no"]."<br/>"; //show name and account number of client
echo "</div>";
echo "</div>";
// query to change validated in customer table to 1
$sql ="UPDATE customer SET validated = 1 WHERE customer_id = '$clientid'";
// validate account when button is clicked
if(isset($_POST['validate'])) {
$dbh->query($sql);
}
}
解决方案
您有逻辑错误,因为您的表单只是传递validate
值,而不是确切的clientid
. 您必须从循环中移出$_POST
操作,并在每个表单中添加一个隐藏字段,并带有相应的clientid
:
<?php
$sql = "SELECT customer.First_Name, customer.Last_Name, account.account_no, account.client_id, customer.username
FROM customer
INNER JOIN account ON customer.customer_id=account.client_id
WHERE validated = 0";
$tobe_validated = $dbh->query($sql);
foreach ($tobe_validated as $row) {
//creating variable for account number to put in query
$clientid = $row["client_id"];
echo "<div class='valid_name_btn'>";
echo "<form method='post'>
<input type='hidden' name='clientid' value='".$clientid."'>
<input type='submit' class='btn btn-outline-primary' value ='Validate' name='validate' id='validate'></input>
</form>";
echo "<div class='valid_name'>"; //div for name
echo $row["First_Name"] . " " . $row["Last_Name"] . " - Account No. " . $row["account_no"] . "<br/>"; //show name and account number of client
echo "</div>";
echo "</div>";
}
if (isset($_POST['validate']) && isset($_POST['clientid'])) {
$clientid = $_POST['clientid'];
$sql = "UPDATE customer SET validated = 1 WHERE customer_id = '$clientid'";
$dbh->query($sql);
}
推荐阅读
- android - MaterialCalenderView - 使选定的日期不可选
- python-3.x - 消息:过时的元素引用:使用 Selenium Python 单击网页上的多个链接时,元素未附加到页面文档
- python - 日期未在折线图中以所需格式显示
- search - 对于 SharePoint Search Server Express 2010,为什么从 Scope() 返回的排名始终为默认值 (100000000)
- python - AttributeError:调用 Clock.schedule_interval 函数时,“NoneType”对象在 Kivy 中没有属性“ids”
- javascript - 为什么 onClick() 没有响应
- maven - Jenkins 中缺少“将工件部署到 Maven 存储库”选项
- react-redux - 如何让 React 组件智能地在用户交互时调度 Redux 动作,而不传递不影响视觉外观的道具
- swift - 调用 Firebase 后自行调整单元格大小
- javascript - 正则表达式如何获取字符串中某个单词之后的内容?