搜尋

首頁  >  問答  >  主體

javascript - php刪除資料一直不成功,求大俠幫忙,跪求了

點擊刪除按鈕後,被選中的資料從頁面中消失,似乎被刪除了,但是在刷新後,會再次顯示,同樣刷新資料庫表的資料後,資料沒有被刪除,煩大神看一下我的程式碼是哪裡出問題了?

由原來的路由 action為url中的參數,這是 data.php中的 line 6 $action報錯,現在已經修改了這個報錯的信息,但是仍然無法從數據庫中刪除數據,請問是怎麼回事呢?我該怎麼調試php中的程式碼?

修改後:
php:

//做个路由 action为url中的参数,这是 data.php中的 line 6  $action
    $action = $_GET['action'];

    switch($action) {
        case 'init_data_list':
            init_data_list();
            break;
        case 'add_row':
            add_row();
            break;
        case 'del_row':
            del_row();
            break;
        case 'edit_row':
            edit_row();
            break;
    }

//删除方法,我怎么在浏览器中调试php?怎么可以看到这个方法有没有执行?
    function del_row(){
        //测试
        /*echo "ok!";*/
        
        //接收传回的参数
        $rowId = $_GET['rowId'];
        $sql = "delete from t_users where user_id='$rowId'";
        
        if(query_sql($sql)){
            echo "ok!";
        }else{
            echo "删除失败!";
        }
    }

修改後:
前台頁JS:

var $table = $('#table'),
    $remove = $('#remove');

$(function() {
    searchData();
    delData();
});

function delData() {
                $remove.on('click', function() {
                    if(confirm("是否继续删除")) {
                        var rows = $.map($table.bootstrapTable('getSelections'), function(row) {
                            //返回选中的行的索引号
                            return row.user_id;
                        });
                    }
                    
                    $.map($table.bootstrapTable('getSelections'),function(row){
                        var del_url = "./php/data.php";
                        //根据userId删除数据,因为这个id就是 传给服务器的参数
                        var rowId = row.user_id;
                        
                        //根据php的要求,需要传del_row回去,以激活删除的方法
                        /*var dataParam = {
                            action: "del_row",
                            rowId:rowId
                        };*/
                        
                        $.ajax({
                            type:"delete",
                            url:del_url + "?action=del_row&rowId=" + rowId,
                            dataType:"html",
                            contentType: 'application/json;charset=utf-8',
                            success: function(data) {
                                $table.bootstrapTable('remove',{
                                    field: 'user_id',
                                    values: rows
                                });
                                $remove.prop('disabled', true);
                            },
                            error:function(data){
                                alert('删除失败!');
                            }
                        });
                    });
                })
            }

修改後:
在Network中Headers查看,顯示為:200

Request URL:http://localhost/muke/php/data.php?action=del_row&rowId=1
Request Method:DELETE
Status Code:200 OK
Remote Address:[::1]:80

Query String Parameters
action:del_row
rowId:1

在Network中Preview查看,由原來報錯資訊:action in data.php on line 6

现在是什么也没有,为空

在Network中Response查看,由原來報錯訊息:action in data.php on line 6

现在也是什么也没有,为空

使用 Rest Client 測試,結果為200,但回傳資料仍為 刪除失敗!真是要了老命了,搞不清楚到底出在哪裡了,怎麼老是刪除不了,從回傳訊息來看,php中del_row()這個方法 可能就沒有執行是嗎?

我該怎麼做呢?

在資料庫中執行SQL語句:delete from t_users where user_id='1',提示是刪除成功了的,但是在頁面上卻執行不成功,是不是沒有接收到傳回來的參數呢?

某草草某草草2752 天前741

全部回覆(8)我來回復

  • phpcn_u1582

    phpcn_u15822017-05-16 13:03:04

    總結上面的錯誤有4個:

    1. delete 傳回的參數只能用 $_GET 取得;

    2. delete 回傳的參數要放在URL中,不能放在body中;body中的參數是用來查詢的;

    3. SQL語句一定要熟練,一步錯,步步錯;

    4. 要在資料庫中執行SQL語句檢查語句是否執行正確,要使用 Rest Client 測試URL請求是否正確;

    下面是我的正確的程式碼,雖然寫的糟糕,但好歹能執行不報錯了。
    php

    <?php
        //测试php是否可以拿到数据库中的数据
        /*echo "44444";*/
        
        //做个路由 action为url中的参数
        $action = $_GET['action'];
    
        switch($action) {
            case 'init_data_list':
                init_data_list();
                break;
            case 'add_row':
                add_row();
                break;
            case 'del_row':
                del_row();
                break;
            case 'edit_row':
                edit_row();
                break;
        }
    
    //删除方法
        function del_row(){
            //测试
            /*echo "ok!";*/
            
            //接收传回的参数
            $rowId = $_GET['rowId'];
            $sql = "delete from t_users where user_id='$rowId'";
            
            if(query_sql($sql)){
                echo "ok!";
            }else{
                echo "删除失败!";
            }
        }
    ?>

    前台JS頁:

    var $table = $('#table'),
        $remove = $('#remove');
    
        $(function() {
            searchData();
            delData();
        });
    
    function delData() {
                    $remove.on('click', function() {
                        if(confirm("是否继续删除")) {
                            var rows = $.map($table.bootstrapTable('getSelections'), function(row) {
                                //返回选中的行的索引号
                                return row.user_id;
                            });
                        }
                        
                        $.map($table.bootstrapTable('getSelections'),function(row){
                            var del_url = "./php/data.php";
                            //根据userId删除数据,因为这个id就是 传给服务器的参数
                            var rowId = row.user_id;
                            
                            $.ajax({
                                type:"delete",
                                url:del_url + "?action=del_row&rowId=" + rowId,
                                dataType:"html",
                                contentType: 'application/json;charset=utf-8',
                                success: function(data) {
                                    $table.bootstrapTable('remove',{
                                        field: 'user_id',
                                        values: rows
                                    });
                                    $remove.prop('disabled', true);
                                },
                                error:function(data){
                                    alert('删除失败!');
                                }
                            });
                        });
                    })
                }

    公共方法,登入資料庫:

    function query_sql(){
            $mysqli = new mysqli("127.0.0.1", "root", "root", "crud");
            $sqls = func_get_args();
            foreach($sqls as $s){
                $query = $mysqli->query($s);
            }
            $mysqli->close();
            return $query;
        }

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-16 13:03:04


    你是用delete方式提交的請求,所以後端用$_GET和$_POST是接收不到參數的。

    delete參數應該放在url裡:

    if($_SERVER['REQUEST_METHOD'] == 'DELETE') {
        //参数包含在请求url中
        $uri = $_SERVER['REQUEST_URI'];
    }

    回覆
    0
  • 迷茫

    迷茫2017-05-16 13:03:04

    應該是$userId = $_POST['rowId'];

    "DELETE FROM `t_user` where `user_id` = '.$userId'" 

    多了個點吧

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-16 13:03:04

    印一下$_GET ,應該是參數沒傳遞過來

    回覆
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-16 13:03:04

    你把action放在body里了,自然$_GET就取不到action了,要用$_POST
    看你都用了DELETE方式提交了,不如改成restful吧…

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-16 13:03:04

    $sql = "DELETE FROM `t_user` where `user_id` = '".$userId."';";

    sql 語句是不是有問題 。程式運行的時候印出來,複製到資料庫裡執行測試一次吧。

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-16 13:03:04

    先印一下$_GET 看看有什麼?

    你的這個地方很奇怪,dataType 改為json試試

    報錯的原因是因為 沒有發現action這個參數

    回覆
    0
  • ringa_lee

    ringa_lee2017-05-16 13:03:04

    query_sql呢?用的什麼?

    回覆
    0
  • 取消回覆