【问题标题】:PHP, POST data from one row only (id) from WHILE loop, when SUBMITPHP,当提交时,仅从 WHILE 循环中的一行(id)发布数据
【发布时间】:2020-05-31 02:36:50
【问题描述】:

问题,当submit 时,我如何才能从while 循环中仅发布一行所需的数据(idusername 等)?

代码(我使用POST作为调用“函数”delete_member,带有if条件,有什么更好的方法?)。

if(isset($_POST["delete_member"]))
{
# Delete member
echo $id=$_POST["id"];
$sql="delete from members where id = $id";
mysqli_query($db,$sql) ? $status = true : $status = false;
message($status);
}

$select_members = mysqli_query($db,"select * from members");
while($row = mysqli_fetch_array($select_members))
{
echo('
<tr>
<td><input type="text name="id" value="'.$row['id'].'" readonly></td>
<td><input type="text name="username" value="'.$row['username'].'" readonly></td>
<td><input type="text name="password" value="'.$row['password'].'" readonly></td>
<td><input type="text name="active" value="'.$row['active'].'" readonly></td>
<td><input type="submit" name="delete_member" value="Smazat"></td>
<td><input type="submit" name="send_email" value="Odeslat email"></td>
<tr>
');
}

echo $id=$_POST["id"]; 中没有存储任何内容。可以从input type="submit" 发送id 吗?比如这样。

<input type="submit" name="delete_member" id=".$row['id']." value="Smazat">

谢谢。

【问题讨论】:

    标签: php post submit


    【解决方案1】:
    if(isset($_POST["delete_member"]))
    {
    # Delete member
    echo $id=$_POST["id"];
    $sql="delete from members where id = $id";
    mysqli_query($db,$sql) ? $status = true : $status = false;
    message($status);
    }
    
    $select_members = mysqli_query($db,"select * from members");
    while($row = mysqli_fetch_array($select_members))
    {
    echo('
    <tr>
    <td>'.$row['id'].'</td>
    <td>'.$row['username'].'</td>
    <td>'.$row['password'].'</td>
    <td>'.$row['active'].'</td>
    
    <td><form method="post" action="HERE_FILL_IN_SCRIPT_URL"><input type="hidden" name="id" value="'.$row['id'].'"><input type="submit" name="delete_member" value="Smazat"><input type="submit" name="send_email" value="Odeslat email"></form></td>
    <tr>
    ');
    }
    

    【讨论】:

    • 真的将form 插入每一行吗?没有更好的办法吗?
    • 你可以在每一行中使用复选框 name="id[]" 并在表格末尾提交,然后在帖子中你有选定 ID 的数组
    • 或只是基本链接 /?id=x 然后在 php 中使用 $_GET['id']
    • 是的,我知道链接,但我认为这不是好方法,我想以正确的方式做,一劳永逸,GET 不是用于发送数据。不可能只是将另一个参数(id)添加到submit?另一种方法是例如将id添加到字符串delete_member,例如"delete_member_'.$row['id'].'",然后解析该字段...?
    • 如果您不想使用 JavaScript,则需要为每个 id 提供一个表单。您应该接受这个答案,因为它突出了您在代码中遇到的错误。
    【解决方案2】:

    最后,最好的方法是将input改为button,其中value不显示,所以value可以是$row['id'],名称在标签&lt;button&gt;NAME&lt;/button&gt;之间。

    if(isset($_POST["deleteMember"]))
    {
    # Delete member
    $id=$_POST["deleteMember"];
    $sql="delete from members where id = $id";
    mysqli_query($db,$sql) ? $status = true : $status = false;
    message("Smazání člena",$status);
    }
    
    while($row = mysqli_fetch_array($select_members))
    {
    echo('
    <tr>
    <td><input type="text name="id[]" value="'.$row['id'].'" readonly></td>
    <td><input type="text name="username[]" value="'.$row['username'].'" readonly></td>
    <td><input type="text name="password[]" value="'.$row['password'].'" readonly></td>
    <td><input type="text name="active[]" value="'.$row['active'].'" readonly></td>
    <td><input type="text name="sentEmailAll" value="'.$row['email_sent'].'" readonly></td>
    <td><button type="submit" name="deleteMember" value="'.$row['id'].'">Vymazat člena</button></td>
    <tr>
    ');
    }
    
    

    但我觉得这并不优雅,我相信有更好的方法来解决类似的事情。

    【讨论】:

      猜你喜欢
      • 2013-07-03
      • 2017-11-23
      • 2017-12-12
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      相关资源
      最近更新 更多