【问题标题】:execute mysql DELETE query on click点击执行mysql DELETE查询
【发布时间】:2015-07-28 10:54:04
【问题描述】:

我是 php 和 sql 领域的新玩家。 单击删除链接(或按钮)时,我试图从我的人员表中删除身份 谁能告诉我我做错了什么?

这是我的 php 代码:

<?php
    $db = new DB();
    $cg_id = $_SESSION['cg_id'];
    $cg_address_id = $_SESSION['cg_address_id'];
    $sql ="SELECT f_name, phone, c.id as idc
           FROM contacts as c 
           WHERE c.cg_id = '$cg_id'";

    $result = $db->mysqli->query($sql);
    if ($result->num_rows > 0) {
        // output data of each row
        while($row = mysqli_fetch_assoc($result)) {
            echo "<article class='contactArea'>";
            echo  "<a href='contacts2.php?del=".$row["idc"]."' class='deleteContact' name='remove' value='remove'>Remove</a></article>";    

            if(isset($_POST['idc'])){

            $idco = $_POST['idc'];

            $removeQuery = "DELETE FROM contacts as c WHERE id=".$idco." ";


            $resultt = mysql_query($removeQuery);
            if($resultt) {
            header('Location: '.$_SERVER['REQUEST_URI']);
            }
            echo "<script>window.location.reload(true);</script>";
        }
        }

    }else {
        echo "Please edit senior profile for monitoring!";
    }
?>

【问题讨论】:

  • 您会得到什么结果/错误以及您希望收到什么结果?
  • 您似乎在混合使用 mysql 和 mysqli 命令,并且您为删除链接而生成的链接使用 'del' 作为查询字符串中的参数,但代码会查找名为 'idc' 的 POST 变量跨度>
  • 你也可能需要放置 session_start();使用会话之前
  • 您的 POST 表单在哪里?

标签: php mysql button delete-row


【解决方案1】:

试试这个(显然用你的 mysql 服务器和数据库的详细信息替换“localhost”、“dbuser”、“dbpassword”和“database_name”):

<?php
                    $db = new mysqli("localhost","dbuser","dbpassword","database_name");
                    $cg_id = $_SESSION['cg_id'];
                    $cg_address_id = $_SESSION['cg_address_id'];
                    // I've moved the deletion code to BEFORE the select query, otherwise the
                    // query will be shown including the to-be-deleted data and it is then deleted after it is displayed
                    if(isset($_GET["del"])){ // <--- this was $_POST["del"] which would have been unset
                        $idc = $_GET["del"];
                        if($db->query("DELETE FROM contacts WHERE id=$idc")){
                             echo "deleted";
                        } else { 
                            echo "fail";
                        }    
                    }  
                    $sql ="SELECT photo, f_name, phone, street, street_num, city, l_name, c.id as idc FROM contacts as c, address as a WHERE c.cg_id = '$cg_id' and a.id = c.address_id";
                    $result = $db->query($sql);
                    if ($result->num_rows > 0) {
                        // output data of each row
                        while($row = mysqli_fetch_assoc($result)) {
                            echo "<article class='contactArea'>";
                            echo "<article class='contact5 lior'>";
                            echo "<img class='CSImage' src='" .$row["photo"]."'>";
                            echo "<section class='generalFormTextW nameCPosition'> " .$row["f_name"]." ".$row["l_name"]."<br></section>";
                            echo "<section class='generalFormTextW phoneCPosition'> " .$row["phone"]."<br></section>";
                            echo "<section class='generalFormTextB addressCPosition'>".$row["city"].", <br> ".$row["street"]." ".$row["street_num"]. "<br></section>";
                            echo  "<a href='contacts2.php?del=".$row["idc"]."' class='deleteContact' name='remove' value='remove'>Remove</a></article></article>";       
                        }
                    }
?>

请注意,我正在更改您使用 mysqli 的方式,以便您直接使用它,而不是作为 DB 对象的成员,这是我在其他地方看到的使用方式 - 在我看来,好像您实际上并没有打开数据库连接(尽管您可能只是没有包含它,因为它显示了您的密码?)

**编辑:我已将 $_POST["del"] 更改为 $_GET["del"] - 因为您在 url ("contacts2.php?del=") 中设置 del 这将是 GET不是 POST。

**编辑:我已经移动了删除代码,以便它解决您必须刷新页面才能查看已删除记录的数据的问题 - 以前显示信息然后删除,我们要删除 THEN显示。

【讨论】:

  • 我在另一个页面 (db.php) 中打开了会话,否则我如何从 db 中查看我的所有联系人?此查询有效,但删除查询仍然无效。我试图改变你的方式,但仍然没有区别....我点击删除按钮,没有任何反应。
  • 我刚刚发现了问题 - 查看编辑 - 你有 $_POST 你应该使用 $_GET 因为在 URL 中设置了 del= 而不是 POSTed 提交 - 我有点不好意思没早点发现!
  • 另一件小事——你知道为什么我需要按两次删除按钮吗?我知道这是因为 reload(),但我不能在 isset 下使用它,因为它在循环中存货......
  • 我刚刚再次编辑 - 移动编辑中提到的删除代码应该可以解决“点击两次”问题。
  • 也只是最后的评论:“if ($result->num_rows > 0)”测试不是必需的 - while($result->fetch_assoc()) 不会运行代码如果没有记录则循环。
猜你喜欢
  • 1970-01-01
  • 2012-03-26
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
  • 2012-04-27
相关资源
最近更新 更多