【发布时间】:2011-05-22 07:00:37
【问题描述】:
我正在学习 Cakephp,我一直在尝试使用复选框删除多个(选中的)记录,但仍然没有成功。这是我的 jQuery :
var ids = [];
$(':checkbox:checked').each(function(index){
ids[index] = $(this).val();;
alert(ids[index]);
});
//alert(ids);
var formData = $(this).parents('form').serialize();
$.ajax({
type: "POST",
url: "tickets/multi_delete",
data:"id="+ids,
success: function() {
alert('Record has been delete');
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest);
alert(textStatus);
alert(errorThrown);
}
});
这是控制器中的代码:
function multi_delete() {
$delrec=$_GET['id'];
//debuger::dump($del_rec);
foreach ($delrec as $id) {
$sql="DELETE FROM tickets where id=".$id;
$this->Ticket->query($sql);
};
}
请任何人帮助我。谢谢
【问题讨论】:
-
您可以在 ID 数组上尝试 .join(','),然后在服务器端尝试 explode() 以获取传递给脚本的 ID 数组。
-
小心 - 这看起来像 sql 注入在这里真的会伤害你。你不应该使用 $_GET 数据而不对其进行清理
-
请使用
$this->Ticket->deleteAll(array('id' => /* array of ids */))使用Cake 为您提供的SQL 注入预防和抽象。您不应该编写手动 SQL,除非没有其他方法可以让 Cake 做您想做的事。 book.cakephp.org/complete/1000/Models#Deleting-Data-1035 -
您在 AJAX 调用中使用 POST,然后在 PHP 中使用 _GET。这不会引起问题吗?或者您可以从 _GET 访问 POST 变量吗?
-
我支持 deceze 所说的,另外,对于您的 AJAX 调用,CakePHP 中已经有一个带有 Prototype 库的组件。一个简单的
$ajax->form()可以创建您需要的一切。
标签: php jquery ajax cakephp checkbox