[英]Submit button for each iteration of a foreach loop in PHP
我对编码很陌生,所以请轻轻地...
我正在创建一个管理页面,其中包含需要验证的帐户列表。 我只需要在单击按钮时将 DB 中“已验证”列中的值从 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);
}
您可以根据键制作动态表单,并可以通过制作如下适当的条件来检查按钮是否具有特定值
<?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 $key => $row) {
//creating variable for account number to put in query
$clientid=$row["client_id"];
echo "<div class='valid_name_btn'>";
echo "<form method='post' name="'validation_form_'.$key"><input type='submit' class='btn btn-outline-primary' value ='Validate' name="'validate_'.$key" id="'validate_'.$key"></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>";
// validate account when button is clicked
if(isset($_POST['validate_'.$key]) && $_POST['validate_'.$key] == 'Validate') {
// query to change validated in customer table to 1
$updateSql ="UPDATE customer SET validated = 1 WHERE customer_id = '$clientid'";
$dbh->query($updateSql);
}
}
如果您需要任何帮助,请告诉我
首先,您的表单 - 提交时 - 没有提供有关要验证的客户 ID 的任何线索。 在我的示例代码中,我不会使用 echo 因为像这样回显 HTML 输出是丑陋的。 相反,您可以这样做:
?>
<div class='valid_name_btn'>
<form method='post'>
<input type="hidden" name="client" value="<?= $clientid ?>">
<input type='submit' class='btn btn-outline-primary' value ='Validate' name='validate' id='validate'></input>
</form>
<div class='valid_name'>
<?= $row["First_Name"] . " " . $row["Last_Name"]." - Account No. ".$row["account_no"] ?><br/>
</div>
</div>
<?php
我在表单中添加了一个隐藏的输入字段,然后您可以在文件的开头,在$tobe_validated = ..
行之前对其进行评估:
if (isset($_POST['validate']) && (isset($_POST['client'])) {
$clientid = $_POST['client'];
$sql = "UPDATE customer SET validated = 1 WHERE customer_id = '$clientid'";
$dbh->query($sql);
}
您还应该正确准备语句,或者至少转义 $client 值。 因为我不知道 $dbh 是什么(你的代码没有告诉)我不会在这里做这个。
$sql ="UPDATE customer SET validated = 1 WHERE customer_id = $clientid";
$clientid
应该没有 ''
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.