【问题标题】:Delete wrong record from table从表中删除错误的记录
【发布时间】:2016-11-30 06:50:06
【问题描述】:

我需要你的建议。我从数据库获取数据到表:ID,名称。 表中有操作:删除、启用、阻止。当动作删除 被选中,我想,分别记录将被删除。 但是,我的脚本不起作用并且总是删除最后一条记录,即使我选择 另一个记录。我认为问题是,选择名称和隐藏输入 所有记录的名称都相似。但我找不到方法,如何创建 他们有不同的名字。 欢迎任何建议。

HTML:

  <form method='post'> 
  <table border='1'>
  <tr>
  <th> ID </th>
<th> Name </th>
<th> Action </th>
</tr>

代码:

$db = new PDO('mysql:host=localhost;dbname=****;charset=utf8', '**', '**');
$query = $db->query("SELECT ID,statusas,login,vardas,email FROM users");

while($row = $query->fetch(PDO::FETCH_BOTH)) { 
 echo "<tr><input type='hidden' name='id' value='".$row[0]."'>";
 echo "<td>".$row[0]."</td>";
 //echo "<td>".$row[1]."</td>";
 echo "<td>".$row[2]."</td>";
 //echo "<td>".$row[3]."</td>";
// echo "<td>".$row[4]."</td>";
 echo "<td><select name='action'>
             <option value='choose'>Choose..</option>
             <option value='delete'> Delete </option>
             <option value='enable'> Enable </option>
             <option value='block'> Block</option>
        </select></td>";
   echo "</tr>";
 }
 echo "<br><input type='submit' name='submit'></table></form>";

 if($_POST['submit']) {
   if ($_POST['action']== 'delete') {
   echo $_POST['id']; // delete query, but now I am just checking if I get a proper ID.
  }
}
else {
echo "bad";
}

【问题讨论】:

  • 我的猜测是您需要将每一行包装成自己的形式。在当前状态下,所有行都使用相同的表单,因此它只是使用带有name="id" 的最后一个元素进行删除。
  • @Supericy: 没必要,只要让 name='action[$row[0]]' 并循环检查即可。

标签: php forms select html-table


【解决方案1】:

您在表单中的每一行都使用相同的name 属性,因此它们被覆盖并且使用最后一个。

你可以做的是将每一行包装成自己的形式,或者你可以做这样的事情,并且只有一个提交按钮来对每一行执行操作:

// remove hidden id element

...

echo "<td><select name='action[" . $row[0] . "]'>"

...
// remove submit button in the loop, but add it after the while loop
...

if (isset($_POST['action']))
{
    foreach ($_POST['action'] as $id => $action)
    {
        if ($action !== 'choose')
        {
            // do action on the id;
            echo $id . " -> " . $action . "<br>";
        }
    }
}

【讨论】:

    【解决方案2】:

    您将每个 ID 放入表单中,这会导致 CGI 发送如下内容:id=1、id=2、id=3 等。然后 PHP 只读取最后一个 ID 并将其删除。

    要解决此问题,请为每一行赋予其自己的形式。

    while($row = $query->fetch(PDO::FETCH_BOTH)) { 
     echo "<form method='post'>";
     echo "<tr><input type='hidden' name='id' value='".$row[0]."'>";
     echo "<td>".$row[0]."</td>";
     //echo "<td>".$row[1]."</td>";
     echo "<td>".$row[2]."</td>";
     //echo "<td>".$row[3]."</td>";
    // echo "<td>".$row[4]."</td>";
     echo "<td><select name='action'>
                 <option value='choose'>Choose..</option>
                 <option value='delete'> Delete </option>
                 <option value='enable'> Enable </option>
                 <option value='block'> Block</option>
            </select></td>";
       echo "</tr>";
       echo "</form>";
     }
     echo "<br><input type='submit' name='submit'></table>";
    

    【讨论】:

    • 是的,现在可以了,但是现在它为所有记录提供了按钮,我只需要一个。有想法,如何实现?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多