CodeIgniter、Ajax... 如何使用 insert_id()
Posted
技术标签:
【中文标题】CodeIgniter、Ajax... 如何使用 insert_id()【英文标题】:CodeIgniter, Ajax... How to use insert_id() 【发布时间】:2018-12-31 17:37:11 【问题描述】:请原谅我的英语,希望你能理解我的问题...
在我的程序中,当您使用modal+form向数据库(mysql)提交一条新记录时,它会在不刷新或重新加载实际页面的情况下被绘制到数据表中,它是动态附加的。
我需要做的是,在每条新记录中,使用新数据的 ID 绘制/附加数据和 2 个按钮(1 个用于删除该记录,1 个用于更新它)。
我读到我可以使用 insert_id() 来获取最后插入的 id,但我不知道如何使用它以及如何处理我的 Ajax 调用中的结果。
有什么提示吗?我对编程很陌生。
感谢您的宝贵时间。
编辑
我需要我在模态/表单中引入的数据(因为我使用的是 .serialize())以及在数据库中生成的 ID... 我不知道如何使用模型/控制器返回的 ID 信息。
我的控制器中有这个:
public function nuevo_elemento_diccionario()
$this->load->helper('form');
$this->load->library('form_validation');
// Validation rules that I deleted for this post
if ($this->form_validation->run() === FALSE)
$this->load->view("header");
$this->load->view("section-aside");
$this->load->view("vista_nuevo_elemento_diccionario", $datos);
$this->load->view("footer");
else
$last_id = $this->mod_diccionarios->nuevo_elemento_diccionario();
echo json_encode(array('last_id' => $last_id));
redirect('/diccionarios/lista_diccionarios');
型号:
public function nuevo_elemento_diccionario()
$datos = array(
'ELDI_Key' => $this->input->post('eldi_key'),
'ELDI_Display' => $this->input->post('eldi_display'),
'ELDI_SuDiccionario' => $this->input->post('eldi_sudiccionario'),
);
$this->db->insert('elementos_diccionario', $datos);
/* $ultima_id = $this->db->insert_id();*/
$last_id = $this->db->insert_id();
return $last_id;
javascript/Ajax(你看到 var key = $('input[name="eldi_key"]').val(); 并使用它,是我需要使用 ID 来使用新 ID 进行删除的地方并更新点击生成的按钮):
function nuevo_elemento()
var id =$('input[name="eldi_id"]').val();
var display = $('input[name="eldi_display"]').val();
var key = $('input[name="eldi_key"]').val();
key = key.split(" ").join("_").toLowerCase();
swal(
title: 'Añadir elemento',
text: "¿Quieres añadir este elemento?",
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Sí',
cancelButtonText: 'No'
).then((result) =>
if (result.value)
$.ajax(
type: "POST",
url: $("#base_url").attr("valor") +
"diccionarios/nuevo_elemento_diccionario",
data: $("#formNuevoElementoDiccionario").serialize(),
success: function(data)
console.log(data);
$('#Modal_Add').modal('hide');
$("#formNuevoElementoDiccionario").trigger("reset");
var html =
'<tr>'+
'<td>' + key + '</td>' +
'<td>'+ display +'</td>'+
'<td>'+
'<span class="btn btn-default editar_elemento"
id=' + key + ' value="' + key + '">' +
'<a href="'+$("#base_url").attr("valor") +
"diccionarios/elemento_diccionario/"+key+'" title="Editar">' +
'<i class="material-icons">edit</i>' +
'</a>' +
'</span>' +
'</td>' +
'<td>' +
'<span class="btn btn-default borrar_elemento"
id="'+ key +'" value="'+ key +'">'+
'<i class="material-
icons">delete_outline</i>'+
'</span>'+
'</td>'+
'</tr>'
$('#tabla-diccionarios').append(html);
swal("Añadido", "Elemento añadido correctamente",
"success");
$(".borrar_elemento").off();
evento_borrar_elemento();
,
error: function(XMLHttpRequest, textStatus, errorThrown)
console.log("Error: " + textStatus);
);
)
【问题讨论】:
您可以添加上次更新数据以显示插入 id 的记录。 实际上有很多方法可以做到这一点,以至于无法知道哪一种适合您。请分享您的代码并阅读***.com/help/mcve 我编辑了我的问题,希望现在更清楚......对不起各位$ret = $this->db->insert_id(); return $ret;
在模型中试试这个
我用代码和这个再次编辑了 -> 我需要我在模态/表单中引入的数据(因为我正在使用.serialize())和在数据库中生成的 ID...
【参考方案1】:
您只能在将数据插入数据库后使用 insert_id()。如果您需要控制器或 js 中的用户最后一个 ID,请尝试以下操作:
public function nuevo_elemento_diccionario()
$datos = array(
'ELDI_Key' => $this->input->post('eldi_key'),
'ELDI_Display' => $this->input->post('eldi_display'),
'ELDI_SuDiccionario' => $this->input->post('eldi_sudiccionario'),
);
$this->db->insert('elementos_diccionario', $datos);
$ultima_id = $this->db->insert_id();
return $ultima_id;
然后就可以在Controller中使用json_encode()返回数据给js了:
public function nuevo_elemento_diccionario()
$this->load->helper('form');
$this->load->library('form_validation');
// Validation rules that I deleted for this post
if ($this->form_validation->run() === FALSE)
$this->load->view("header");
$this->load->view("section-aside");
$this->load->view("vista_nuevo_elemento_diccionario", $datos);
$this->load->view("footer");
else
$last_id = $this->mod_diccionarios->nuevo_elemento_diccionario();
echo json_encode(array('last_id' => $last_id));
// i`m not sure that you need to use redirect
redirect('/diccionarios/lista_diccionarios');
在你的js编辑成功函数:
success: function(data)
var result = JSON.parse(data);
var insert_id = result.insert_id;
【讨论】:
我无法让它工作...如何在 ajax 中使用 id?使用 insert_id 变量而不是 $key? 我用这个再次编辑 -> 我需要我在模态/表单中引入的数据(因为我使用的是 .serialize())和数据库中生成的 ID...以上是关于CodeIgniter、Ajax... 如何使用 insert_id()的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 CodeIgniter 中的 AJAX 函数更改网页的数据
如何检查请求是不是通过 CodeIgniter 中的 AJAX 发出?
CodeIgniter、Ajax... 如何使用 insert_id()