點(diǎn)擊刪除按鈕后,被選中的數(shù)據(jù)從頁(yè)面中消失,貌似被刪除了,但是在刷新后,會(huì)再次顯示,同樣刷新數(shù)據(jù)庫(kù)表的數(shù)據(jù)后,數(shù)據(jù)沒(méi)有被刪除,煩大神看一下我的代碼是哪里出問(wèn)題了?
由原來(lái)的路由 action為url中的參數(shù),這是 data.php中的 line 6 $action報(bào)錯(cuò),現(xiàn)在已經(jīng)修改了這個(gè)報(bào)錯(cuò)的信息,但是仍然無(wú)法從數(shù)據(jù)庫(kù)中刪除數(shù)據(jù),請(qǐng)問(wèn)是怎么回事呢?我應(yīng)該怎么調(diào)試php中的代碼?
修改后:
php:
//做個(gè)路由 action為url中的參數(shù),這是 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;
}
//刪除方法,我怎么在瀏覽器中調(diào)試php?怎么可以看到這個(gè)方法有沒(méi)有執(zhí)行?
function del_row(){
//測(cè)試
/*echo "ok!";*/
//接收傳回的參數(shù)
$rowId = $_GET['rowId'];
$sql = "delete from t_users where user_id='$rowId'";
if(query_sql($sql)){
echo "ok!";
}else{
echo "刪除失??!";
}
}
修改后:
前臺(tái)頁(yè)面JS:
var $table = $('#table'),
$remove = $('#remove');
$(function() {
searchData();
delData();
});
function delData() {
$remove.on('click', function() {
if(confirm("是否繼續(xù)刪除")) {
var rows = $.map($table.bootstrapTable('getSelections'), function(row) {
//返回選中的行的索引號(hào)
return row.user_id;
});
}
$.map($table.bootstrapTable('getSelections'),function(row){
var del_url = "./php/data.php";
//根據(jù)userId刪除數(shù)據(jù),因?yàn)檫@個(gè)id就是 傳給服務(wù)器的參數(shù)
var rowId = row.user_id;
//根據(jù)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查看,由原來(lái)報(bào)錯(cuò)信息:action in data.php on line 6
現(xiàn)在是什么也沒(méi)有,為空
在Network中Response查看,由原來(lái)報(bào)錯(cuò)信息:action in data.php on line 6
現(xiàn)在也是什么也沒(méi)有,為空
使用 Rest Client 測(cè)試,結(jié)果為200,但是返回?cái)?shù)據(jù)仍為 刪除失??!真是要了老命了,搞不清楚到底出在哪里了,怎么老是刪除不了,從返回信息來(lái)看,php中del_row()這個(gè)方法 可能就沒(méi)有執(zhí)行是嗎?
我該怎么做呢?
在數(shù)據(jù)庫(kù)中執(zhí)行SQL語(yǔ)句:delete from t_users where user_id='1',提示是刪除成功了的,但是在頁(yè)面上卻執(zhí)行不成功,是不是沒(méi)有接收到傳回來(lái)的參數(shù)呢?
總結(jié)上面的錯(cuò)誤有4個(gè):
delete 返回的參數(shù)只能用 $_GET 獲取;
delete 返回的參數(shù)要放在URL中,不能放在body中;body中的參數(shù)是用來(lái)查詢(xún)的;
SQL語(yǔ)句一定要熟練,一步錯(cuò),步步錯(cuò);
要在數(shù)據(jù)庫(kù)中執(zhí)行SQL語(yǔ)句檢查語(yǔ)句是否執(zhí)行正確,要使用 Rest Client 測(cè)試URL請(qǐng)求是否正確;
下面是我的正確的代碼,雖然寫(xiě)的糟糕,但好歹能執(zhí)行不報(bào)錯(cuò)了。
php
<?php
//測(cè)試php是否可以拿到數(shù)據(jù)庫(kù)中的數(shù)據(jù)
/*echo "44444";*/
//做個(gè)路由 action為url中的參數(shù)
$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(){
//測(cè)試
/*echo "ok!";*/
//接收傳回的參數(shù)
$rowId = $_GET['rowId'];
$sql = "delete from t_users where user_id='$rowId'";
if(query_sql($sql)){
echo "ok!";
}else{
echo "刪除失?。?;
}
}
?>
前臺(tái)JS頁(yè)面:
var $table = $('#table'),
$remove = $('#remove');
$(function() {
searchData();
delData();
});
function delData() {
$remove.on('click', function() {
if(confirm("是否繼續(xù)刪除")) {
var rows = $.map($table.bootstrapTable('getSelections'), function(row) {
//返回選中的行的索引號(hào)
return row.user_id;
});
}
$.map($table.bootstrapTable('getSelections'),function(row){
var del_url = "./php/data.php";
//根據(jù)userId刪除數(shù)據(jù),因?yàn)檫@個(gè)id就是 傳給服務(wù)器的參數(shù)
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('刪除失??!');
}
});
});
})
}
公共方法,登錄數(shù)據(jù)庫(kù):
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;
}
你是用delete方式提交的請(qǐng)求,所以后端用$_GET和$_POST是接收不到參數(shù)的。
delete參數(shù)應(yīng)該放在url里:
if($_SERVER['REQUEST_METHOD'] == 'DELETE') {
//參數(shù)包含在請(qǐng)求url中
$uri = $_SERVER['REQUEST_URI'];
}
應(yīng)該是$userId = $_POST['rowId'];
吧
"DELETE FROM `t_user` where `user_id` = '.$userId'"
多了個(gè)點(diǎn)吧
你把action
放在body里了,自然$_GET
就取不到action
了,要用$_POST
。
看你都用了DELETE
方式提交了,不如改成restful
吧…
$sql = "DELETE FROM `t_user` where `user_id` = '".$userId."';";
sql 語(yǔ)句是不是有問(wèn)題 。程序運(yùn)行的時(shí)候打印出來(lái),復(fù)制到數(shù)據(jù)庫(kù)里運(yùn)行測(cè)試一次吧。
首先打印一下$_GET 看看有什么?
你的這個(gè)地方很奇怪,dataType 改為json試試
報(bào)錯(cuò)的原因是因?yàn)?沒(méi)有發(fā)現(xiàn)action這個(gè)參數(shù)