【问题标题】:Delete data from database using PHP & JavaScript使用 PHP 和 JavaScript 从数据库中删除数据
【发布时间】:2015-11-08 18:29:43
【问题描述】:

我正在处理一个 PHP 文件。我正在尝试制作一个显示数据库中产品列表的表格。还有一个用于删除任何产品的按钮。我使用 javascript 从数据库中删除产品。我已经编写了代码,找不到任何错误。当我单击删除按钮时,它会显示确认框,但不会删除产品。代码如下:

<?php

$con=mysql_connect("localhost","root","");
mysql_select_db("grocery_shop",$con);

error_reporting(E_ALL^E_NOTICE);
session_start();


    $sql = mysql_query("select * from products");


if($_GET['did']){
    mysql_query("delete from products where product_id='$_GET[did]'");
    header("Location: product.php");
}

?>
<table border="1px" style="width:100%">
    <tr>
    <th>Serial No</th>
    <th>Product Name</th>       
    <th>Product Type</th>
    <th>Quantity</th>
    <th>Price</th>
    <th>Delete Product</th>
  </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
    </tr>

    <?php
    $i=1;
    while ($u = mysql_fetch_array($sql)) {
        ?>
        <tr>
            <td><?php echo $i; ?></td>
            <td><?php echo $u['product_name'];?></td>
            <td><?php echo $u['product_type'];?></td>
            <td><?php echo $u['quantity'];?></td>
            <td><?php echo $u['price'];?></td>
            <td><?php echo "<a href=\"javascript:delproduct(id=$u[product_id])\">Delete</a>";?></td>

        </tr>
        <?php
    $i++;
    }
    ?>

    <script>
    function delproduct(id){
        var msg = confirm("Are you sure you want to delete this product?");

    if (msg) {
        window.location = "product.php?did="+product_id;
    }
    }
    </script>
</table>

【问题讨论】:

  • 有报错吗?
  • 不...一切正常。就是不能删除数据。
  • 是否重定向到product.php
  • 是...页面重定向到product.php。
  • 离题,但很重要:请注意 PHP 的 mysql_query() 和相关函数已过时。它们在当前支持的 PHP 版本中已被弃用,并将在本月发布的新版本中完全删除。您应该强烈考虑切换代码以使用更新的 mysqliPDO 库。另请参阅Why shouldn't I use mysql_* functions in PHP?

标签: javascript php mysql database window.location


【解决方案1】:

问题出在您的 javascript 中,product_id 不存在

   if (msg) {
        window.location = "product.php?did="+id;
    }

出于调试目的,请尝试将其替换为您的代码,并让我们知道您收到的错误消息。

if($_GET['did']){
    mysql_query("delete from products where product_id='".$_GET['did']."'");
    echo "delete from products where product_id='".$_GET['did']."'";
    echo mysql_errno() . ": " . mysql_error() ;    
    die();
    //header("Location: product.php");
}

另外还尝试运行不带单引号的查询,我假设 product_id 是一个整数。

所以mysql_query("delete from products where product_id=".$_GET['did']);

【讨论】:

  • 谢谢....我已经解决了这个问题。但你的解决方案是正确的。问题出在我的javascript中。非常感谢.. :)
【解决方案2】:

你忘记了 $_GET[did] 中的 '':

mysql_query("delete from products where product_id='{$_GET['did']}'");

另外,正如@chris85 所指出的,直接使用 $_GET 或 $_POST 不是一个好主意,请记住在查询中使用它们之前清理这些值。

$did = filter_input(INPUT_GET, 'did', FILTER_SANITIZE_NUMBER_INT);
mysql_query("delete from products where product_id={$did}");

【讨论】:

  • 您应该写下您已更正的内容。还有 SQL 注入说明。
  • 你能 var_dump($_GET) 吗?
【解决方案3】:
  <?php

 $con=mysql_connect("localhost","root","");
 mysql_select_db("grocery_shop",$con);

 error_reporting(E_ALL^E_NOTICE);
session_start();


$sql = mysql_query("select * from products");


if($_GET['did']){
mysql_query("delete from products where product_id='$_GET[did]'");
header("Location: product.php");
}

?>
<table border="1px" style="width:100%">
<tr>
<th>Serial No</th>
<th>Product Name</th>       
<th>Product Type</th>
<th>Quantity</th>
<th>Price</th>
<th>Delete Product</th>
 </tr>
   <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
</tr>

<?php
$i=1;
while ($u = mysql_fetch_array($sql)) {
    ?>
    <tr>
        <td><?php echo $i; ?></td>
        <td><?php echo $u['product_name'];?></td>
        <td><?php echo $u['product_type'];?></td>
        <td><?php echo $u['quantity'];?></td>
        <td><?php echo $u['price'];?></td>
        <td><?php echo "<a href=\"javascript:delproduct(".$u[product_id].")\">Delete</a>";?></td>

    </tr>
    <?php
     $i++;
     }
    ?>

<script>
function delproduct(id){
     var product_id = id;
    var msg = confirm("Are you sure you want to delete this product?");

   if (msg) {
      window.location = "product.php?did="+product_id;
  }
  }
   </script>
</table>

【讨论】:

    【解决方案4】:

    您应该尝试:delproduct($u[product_id]) 而不是 delproduct(id=$u[product_id])

    mysql_query("delete from products where product_id='".$_GET['did']."'");
    
    while ($u = mysql_fetch_array($sql)) {
            ?>
            <tr>
                <td><?php echo $i; ?></td>
                <td><?php echo $u['product_name'];?></td>
                <td><?php echo $u['product_type'];?></td>
                <td><?php echo $u['quantity'];?></td>
                <td><?php echo $u['price'];?></td>
                <td><?php echo "<a href=\"javascript:delproduct($u[product_id])\">Delete</a>";?></td>
    
            </tr>
            <?php
        $i++;
        }
    

    【讨论】:

    • 它不起作用。使用后连确认信息都没有。
    • 你能再试一次吗?我已经编辑了答案。显示在 $_GET['did']
    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多