點擊刪除按鈕後,被選中的資料從頁面中消失,似乎被刪除了,但是在刷新後,會再次顯示,同樣刷新資料庫表的資料後,資料沒有被刪除,煩大神看一下我的程式碼是哪裡出問題了?
由原來的路由 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',提示是刪除成功了的,但是在頁面上卻執行不成功,是不是沒有接收到傳回來的參數呢?
phpcn_u15822017-05-16 13:03:04
總結上面的錯誤有4個:
delete 傳回的參數只能用 $_GET 取得;
delete 回傳的參數要放在URL中,不能放在body中;body中的參數是用來查詢的;
SQL語句一定要熟練,一步錯,步步錯;
要在資料庫中執行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;
}
PHP中文网2017-05-16 13:03:04
你是用delete方式提交的請求,所以後端用$_GET和$_POST是接收不到參數的。
delete參數應該放在url裡:
if($_SERVER['REQUEST_METHOD'] == 'DELETE') {
//参数包含在请求url中
$uri = $_SERVER['REQUEST_URI'];
}
迷茫2017-05-16 13:03:04
應該是$userId = $_POST['rowId'];
吧
"DELETE FROM `t_user` where `user_id` = '.$userId'"
多了個點吧
过去多啦不再A梦2017-05-16 13:03:04
你把action
放在body里了,自然$_GET
就取不到action
了,要用$_POST
。
看你都用了DELETE
方式提交了,不如改成restful
吧…
PHP中文网2017-05-16 13:03:04
$sql = "DELETE FROM `t_user` where `user_id` = '".$userId."';";
sql 語句是不是有問題 。程式運行的時候印出來,複製到資料庫裡執行測試一次吧。