我有超过30个字段,我正在尝试自动将数据保存在数据库中。
我可以在数据库中插入数据但是它会不断插入。它没有更新最后一条记录。它没有检查其他部分。
我获得stud_id
的总计数并在stud_id
的帮助下更新记录。这是个好主意吗?
public function student_autosave($data){
$sql_count_id="SELECT COUNT(stud_id) FROM student_info";
$q = $this->db->query($sql_count_id);
$last_count=$q->num_rows();
if ($last_count == 1) {
$this->db->insert('student_info',$data);
}else{
$query = $this->db->where(['stud_id'=>$last_count])->update('student_info',$data);
if($this->db->affected_rows()>0){
return 1;
}else{
return 0;
}
}
}
自动保存脚本
$(document).ready(function() {
timePicker(10);
});
var s;
function timePicker(vr) {
if (vr > 0) {
if (vr > 1) {
$('#timer').html('Data will be updated in next '+ vr+' secounds');
} else {
$('#timer').html('Data will be updated in next 1 secound');
}
vr--;
s = setTimeout('timePicker(' + vr + ')', 1000);
} else {
clearInterval(s);
$.ajax({
type: 'post',
url: '<?php echo base_url("index.php/Student_controller/student_data_autosave"); ?>',
data: $('form[name="student_formname"]').serialize(),
success: function (data) {
s = setTimeout('timePicker(' + 10 + ')', 5000);
return false;
}
});
}
}
答案 0 :(得分:0)
我对此的新答案是:重新设计您的流程。
当我移民澳大利亚时,我必须在线填写政府表格。表格很长。他们做了明智的事;他们将表格分成5-7个问题/字段并提供了Back / Next按钮。每次我点击其中一个按钮,我的进度都会被保存。这不是一个可怕的笨重的经历,事实是,我确实需要离开或拨打电话来检索表格的一些个人信息。这些表格,一旦我提交了很多电子邮件地址,就被分配了一个固定链接(尽管我已经通过电子邮件发送给我),这样即使我断开连接,我也可以选择离开的地方。
使用这个故事,我的建议如下:
最后,在查询中使用数据之前,始终要清理并验证用户提交的所有内容 - 可能永远都是这样。
答案 1 :(得分:0)
需要小修正,如下所示
num_rows()
- 给出查询返回的行数,即结果在选择时获取的行数,这不计算,您必须单独访问计数
$sql_count_id="SELECT COUNT(stud_id) as count FROM student_info";
// perform your query,
$q = $this->db->query($sql_count_id);
// if there were rows returned and
if($q->num_rows() ){
// count ==1 then
if($q->row()->count == 1){
// perform your insert
}else{
// perform your update
}
}else{
// something went wrong with your query
// should return atleast 1 even if count is zero
}