首页 > 解决方案 > 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);
          } 
         }

标签: phpsqlbuttonforeach

解决方案


您有逻辑错误,因为您的表单只是传递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);
    }


推荐阅读