【发布时间】:2016-01-08 06:27:43
【问题描述】:
CSRF 保护已启用。
我正在尝试通过 AJAX 将班次插入到数据库表中。
$('#insert_shift').click(function(e) {
e.preventDefault();
var empty_td = $('.td_shift[data-type=""]').size();
if (empty_td == 0) {
var date = $('#atdnc_date').val() + '-';
var arr = [];
var new_arr = [];
$('.td_shift').each(function() {
//if($(this).attr('data-day') != 0){
var data_type = $(this).attr('data-type');
var shift_atdnc_id = $(this).attr('data-typeid');
var user_id = $(this).attr('data-user');
var new_date = date + $(this).attr('data-day');
if (data_type == 'shift') {
var shift_strt_time = $(this).attr('data-start');
var shift_end_time = $(this).attr('data-end'); // Change new_arr to old
var new_arr = {
'shift': shift_atdnc_id,
'user_id': user_id,
'date': new_date,
'shift_strt_time': shift_strt_time,
'shift_end_time': shift_end_time,
'checkin_time': '00:00:00',
'checkout_time': '00:00:00',
'time_spent': '00:00:00',
'checkin_reason': 'NA',
'checkout_reason': 'NA',
'work_report': 'NA',
'attn_status': 0
};
} else if (data_type == 'attendance') {
var new_arr = {
'shift': shift_atdnc_id,
'user_id': user_id,
'date': new_date,
'shift_strt_time': '00:00:00',
'shift_end_time': '00:00:00',
'checkin_time': '00:00:00',
'checkout_time': '00:00:00',
'time_spent': '00:00:00',
'checkin_reason': 'NA',
'checkout_reason': 'NA',
'work_report': 'NA',
'attn_status': shift_atdnc_id
};
}
arr.push(new_arr);
//}
});
$.post(base_url + 'test_shift/insert_shift', {
a: arr,
csrf_test_name: csrf_token
},
function(data) {
alert(data);
if (data == 1) {
document.location.href = base_url + 'test_shift';
} else {
alert("error");
}
}
);
} else {
alert("Please fill all the shifts");
}
});
如果只有 2 行移位,则将插入值。但是,如果有更多,在这种情况下为 3,则不会将任何内容插入 db,但会在控制台中出现错误。
遇到错误您请求的操作不是 允许。
当我对此错误进行搜索时,我才知道这是在 CSRF 问题的情况下引发的。但我找不到解决问题的方法。有人可以帮忙吗?
更新
当我更改 POST 中的数据顺序时,上述错误消失了。但现在又出现了一个。
遇到了 PHP 错误
严重性:通知消息:数组到字符串的转换
文件名:mysql/mysql_driver.php 行号:589
还有一个数据库错误。 INSERT 查询是这样的
INSERT into table_name () values ('1','some_value'),('2','some_value2'),Array
用于生成项目数组的代码是相同的,但从 arr[83] 开始出现问题。我尝试在第 83 天(即第 3 行的第 23 天)之后从浏览器中删除 tds,并且代码有效。我不明白这里发生了什么。第 83 个数组因某种原因被 PHP(或 CI)截断。
【问题讨论】:
-
添加到控制器或
config.php,$config['csrf_protection'] = false; -
@NiranjanNRaju:我做不到。
-
每次都会出现这个错误吗??
-
@NiranjanNRaju:如果只有 2 行移位,则会插入值。但如果有更多,在这种情况下为 3,则不会将任何内容插入 db,但会在控制台中出现错误。
-
我认为您传递的值更多,但我不确定,请尝试
json_encode()并在控制器json_decode()中发送。
标签: php jquery ajax codeigniter csrf