我正在使用codeigniter和数据库中的加密会话,我正在使用twitter引导模式更新表单中的某些用户详细信息。
我在表单上使用jquery验证,在submitHandler中我通过ajax发布数据并关闭模式。
submitHandler: function (form) {
document.getElementById("edit-profile-submit-button").disabled = true;
$('.modal-ajax-loader').show();
$.ajax({
type: $(form).attr('method'), // 'Post'
url: $(form).attr('action'), // 'profile/edit_basic_details'
data: $(form).serialize(),
success: function(data, status){
$(form).html(data);
$('.modal-ajax-loader').hide();
setTimeout(function() { $('#edit-profile-details').modal('hide'); }, 2000);
},
error: function(data, status) {
$(form).html(data);
}
});
return false;
}
这是从控制器调用的具有相同名称的模型函数
function edit_basic_profile() {
$screenname = $this->security->xss_clean($this->input->post('screenname'));
$firstname = $this->security->xss_clean($this->input->post('firstname'));
$lastname = $this->security->xss_clean($this->input->post('lastname'));
$email = $this->security->xss_clean($this->input->post('email'));
$bio = $this->security->xss_clean($this->input->post('bio'));
$data = array(
'screen_name' => $screenname,
'first_name' => $firstname,
'last_name' => $lastname,
'email' => $email,
'bio' => $bio,
);
try{
// Run the update query
$this->db->where('profile_id', $this->session->userdata('profile_id'));
$this->db->update('profiles', $data);
// Let's check if there are any results
if($this->db->affected_rows() == 1)
{
// Setup the session information for the user
$this->session->set_userdata($data);
return true;
}
// If the previous process did not update rows then return false.
error_log("profile_model, edit_basic_profile(): There were no affected rows");
return false;
} catch(PDOExceprion $e) {
error_log("profile_model, edit_basic_profile(): ".$e);
return false;
}
}
我也可以在submitHandler中更新页面上已更改的值,当然还会在模型中更新服务器上的会话。
$("#profile-screenname").html($(screenname).val());
$("#profile-bio").html($(bio).val());
问题是当我再次打开模式时,它会从浏览器cookie中的会话数据中获取用户详细信息并获取原始数据,除非在第一次更新后页面已刷新。
(表格数据像这样加载);
<input type="text" class="input-large" id="firstname" name="firstname" placeholder="First Name" value="<?php echo $this->session->userdata('first_name'); ?>">
"<?php echo $this->session->userdata('first_name'); ?>"
第二次在任何页面刷新加载旧数据之前打开模态。
答案 0 :(得分:0)
当然,您只需要调用更新/设置新会话数据的ajax网址:
HTML+JS
---> Ajax call
----> $this->session->set_userdata('key','new-value');
----> session and db updated.
完成。
还要注意并更改所有这些:
$screenname = $this->security->xss_clean($this->input->post('screenname'));
到此:
$screenname = $this->input->post('screenname',true);
这是完全相同的结果