【问题标题】:"Delete row" button for MySQL in PHPPHP中MySQL的“删除行”按钮
【发布时间】:2021-07-14 13:27:28
【问题描述】:

我有一个表格,其中填充了来自 MySQL 数据库的数据,并且每一行都有自己的删除按钮。我希望可以选择使用删除按钮分别删除每一行,该按钮删除数据库中的相应行。我该怎么做呢?这是我必须到目前为止的代码部分,它似乎不起作用。

if(isset($_POST['id'])) {
$id = $_POST['id'];
$delete = mysql_query($conn,"DELETE FROM mods WHERE id = '$id'");
}

省略不重要的代码。

表格/表格创建:

   echo "<td><form action=\"\" method=\"post\"></td>";
   echo "<tr class='modlist'>";
   echo "<td>".$row['id']."</td>";
   echo "<td><div class=\"edit\" id=\"div_1\">".$row['title']."</div></td>";
   echo "<td><div class=\"edit\" id=\"div_2\"><a href=".$row['mod_url'].">".$row['mod_url']."</a></div></td>";
   echo "<td><div class=\"edit\" id=\"div_3\">".$row['developer']."</div></td>";
   echo "<td><div class=\"edit\" id=\"div_4\">".$row['type']."</div></td>";
   echo "<td><div class=\"edit\" id=\"div_5\">".$v162."$nbsp".$v164."$nbsp".$v172."</div></td>";
   echo "<td><div class=\"edit\" id=\"div_6\">".$row['title'].",$nbsp".$row['developer']."</div></td>";
   echo "<td><div id=\"save\"><input type=\"submit\" name=\"save\" value=\"Save\"></div></td>";
   echo "<td><div id=\"delete\"><input type=\"submit\" name=\"delete\" value=\"Delete\"></div></td>";
   echo "</tr>";
   echo "</form>";
   }

【问题讨论】:

    标签: php mysql forms html-table


    【解决方案1】:

    你有 mysql_query() 的参数向后。先传查询,再传$conn。

    $delete = mysql_query("DELETE FROM mods WHERE id = '$id'", $conn);
    

    但请注意,您现在遇到了 SQL 注入问题!在使用 $id 之前对其进行消毒!

    $id = mysql_real_escape_string($id);
    

    并考虑使用mysqliPDO(并使用参数化查询),因为mysql_* 已被弃用!

    【讨论】:

    • +1 建议使用 mysqli 或 PDO。你最好早点学习(和使用)这个。
    • @swiftsly 也看看杰瑞的回答。这也很重要!
    • @nl-x 好的,我修复了查询,为$id 添加了清理,并将内容更改为 mysqli,但它仍然没有删除该行。有什么想法吗?
    【解决方案2】:

    表单动作需要有一个名为'id'的控件,否则$_POST不会得到任何id。

    你可以像&lt;input type="hidden" name="id" value=".$row['id']." /&gt;那样做

    另外,我建议您查看How can I prevent SQL injection in PHP?,因为您显示的代码看起来完全易受攻击。

    更新

    您还必须像提到的 nl-x 那样修复您的 $delete 查询:

    $delete = mysql_query("DELETE FROM mods WHERE id = '$id'", $conn);
    

    【讨论】:

    • 我在表单中添加了该行以及上面所说的所有内容,但删除该行仍然没有运气,有什么想法吗?
    • 我也使用/添加了他的更改,但仍然没有运气。您提供的代码的表单操作是否为空,还是我应该在其中包含一些内容?我目前有action='".$_SERVER['PHP_SELF']."',在这种情况下,它似乎与空白操作做同样的事情。
    【解决方案3】:

    有效 我在表中使用 PHP 代码创建了按钮

    table.php

    <?php 
    include "connect.php";
    $rezult = mysqli_query($con,"SELECT id,p1,p2,p3 FROM table");
    if($rezult === FALSE) {die(mysql_error());}
    $count=mysqli_num_rows($rezult);
    while($row=mysqli_fetch_assoc($rezult)){
    
    echo "<tr><td>".$row['p1']."</td>";
    echo "<td>".$row['p2']."</td>";
    echo "<td>".$row['p3']."</td>";
    echo "<td><form action='delete.php' method='post'><input type='hidden' 
    value='".$row['id']."'><input type='submit' name='delete' value='DELETE'>
    </form></td></tr>";
    ?>
    

    删除.php

    <?php
    
    include "connect.php";
    $str_del="DELETE FROM table WHERE (id=".$_POST['id'].")";
    $result = mysqli_query($con,$str_del) or die (mysql_error());
    ?>
    

    connect.php

     <?php
    $dbhost = ""; // ip
    $dbname = ""; // DBname
    $dbuser = ""; // login
    $dbpass = ""; // pass
    $con=mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
    mysqli_query($con, 'CREATE TEMPORARY TABLE `table');
    mysqli_select_db($con,$dbname);
    mysqli_query($con,"set names utf8");
    ?>
    

    【讨论】:

      猜你喜欢
      • 2013-05-30
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 2022-07-06
      • 2016-10-01
      相关资源
      最近更新 更多