【问题标题】:How can create a separate click event for each input button displayed using a while loop如何为使用 while 循环显示的每个输入按钮创建单独的单击事件
【发布时间】:2019-01-30 05:50:51
【问题描述】:

我在表格中列出数据库中的用户。对于每个用户;有一个“批准”和“拒绝”按钮。 我想以这样的方式放置我的代码,当我为每个用户单击每个按钮时,只有批准或拒绝事件应该影响该特定用户?我的桌子是这样的:

现在,当我在一个用户上单击“批准”时,也会触发另一个用户的批准事件。这是我的批准码:

$sql = "select * from user_table ORDER BY date_registered DESC LIMIT 10";
if(mysqli_num_rows($result) > 0) 
 {
   while($row = mysqli_fetch_assoc($result)){
    $emailadr = $row["email"];
    $adresses [] = $emailadr;
    echo "<tr>";
    echo "<td>";
    echo $row["firstname"];
    echo "</td>";
    echo "<td>";
    echo $row["lastname"];
    echo "</td>";
    echo "<td>";
    echo $row["idnumber"];
    echo "</td>";
    echo "<td>";
    echo $row["qualification"];
    echo "</td>";
    echo "<td>";
    echo $row["dofa"];
    echo "</td>";
    echo "<td>";
    echo $row["date_registered"];
    echo "</td>";
    echo "<td>";
    echo '<button  name="approve" value='. $row["user_id"].'>Approve</button> <button  name="reject" value='. $row["user_id"].'>Reject</button>';
    echo "</td>";
    echo '</tr>';
     }
            if(isset($_POST['approve'])){
           // Approved user ID is now in $_POST['approve']
           mail($adresses[$row["user_id"]],'subect 
           1','approved','From:email@example.com');
       }elseif(isset($_POST['reject'])){
    // 
    }

  }

print_r($adresses);

【问题讨论】:

  • 是 jquery,javascript 中的事件吗?请添加 html 代码并解释更多关于 php 代码的信息
  • 我在上面添加了一个更新的代码。谢谢

标签: javascript php jquery loops mysqli


【解决方案1】:

在插入新用户时,您通常有一个与每一行或用户相关的自动递增列(通常称为 ID),您可以通过几种方式进行操作,首先您需要包含该 ID 或值,以便您知道哪个要更改的用户:

创建您的按钮:

<button name="approve" value="5"> Approve</button>
<button name="reject" value="5"> Reject</button>

您可以将值更新为您的用户 ID

然后您可以简单地检查您是否已批准或拒绝用户:

if(isset($_POST['approve'])){
    // Approved user ID is now in $_POST['approve']
}elseif(isset($_POST['reject'])){
    // Rejected user ID is now in $_POST['reject']
}

要获得$adresses,您需要将其分配到循环之外。也将 $adresses [] 更新为 array_push($adresses, $row["email"]); 只是因为偏好,但如果您愿意,可以改回来。

<?php

$adresses = array();
$sql = "select * from user_table ORDER BY date_registered DESC LIMIT 10";
if(mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)){
        array_push($adresses, $row["email"]);
        echo "<tr>";
        echo "<td>";
        echo $row["firstname"];
        echo "</td>";
        echo "<td>";
        echo $row["lastname"];
        echo "</td>";
        echo "<td>";
        echo $row["idnumber"];
        echo "</td>";
        echo "<td>";
        echo $row["qualification"];
        echo "</td>";
        echo "<td>";
        echo $row["dofa"];
        echo "</td>";
        echo "<td>";
        echo $row["date_registered"];
        echo "</td>";
        echo "<td>";
        echo '<button name="approve" value='. $row["user_id"].'>Approve</button> <button name="reject" value='. $row["user_id"].'>Reject</button>';
        echo "</td>";
        echo '</tr>';
    }
    if(isset($_POST['approve'])){
        mail($adresses[$_POST["approve"]],'subect 1','approved','From:email@example.com'); 
        //update DB to approved
    }elseif(isset($_POST['reject'])){
        //update DB to rejected
    }

}

print_r($adresses);

?>

【讨论】:

  • 谢谢。我确实解析了按钮中的 id,但我仍然得到相同的结果。我不知道是不是因为我在调用提交事件时仍在while循环中?我应该在循环之外调用提交事件吗?如果是这样,我将如何存储用户 ID,以免在代码中出现“未定义索引”错误?
  • 如果要使用,需要在while外部定义$adresses$adresses[$row["user_id"]] 也不是你想要的,$row 可能会给你最后一行,我们发送$_POST['approve'] 中的用户ID 会变成$adresses[$_POST["approve"]]
  • 我很抱歉现在听起来很愚蠢。我正在努力在 while 循环之外定义 $addresses。正如您所指出的,它会选择最后一个地址。但我不知道如何将这些值存储在变量中。我有这个: if(isset($_POST['approve'])){ // 批准的用户 ID 现在在 $_POST['approve'] mail($adresses[$_POST['approve']],'subect 1 ','ereew','来自:email@example.com'); } 就在 print_r() 函数的下方,但它仍在获取最后一个地址
  • 非常感谢。代码仍然为最后一个索引执行。我做了一个 print_r($_POST) 这就是我得到的:数组([approve] => 2)。这是否也意味着我必须将 $_POST 存储在一个数组中?
  • $_POST 仅在您单击按钮时发送。 var_dump($adresses); 在邮件和发布结果之后,它应该正在收集所有电子邮件
【解决方案2】:

是的.. 传递 contentid 或一些唯一标识符将解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多