其他部分正在使用CodeIgniter自动保存数据

时间:2017-10-13 13:07:59

标签: php mysql codeigniter codeigniter-3

我有超过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;
             }
         });
     }
 }

enter image description here

2 个答案:

答案 0 :(得分:0)

我对此的新答案是:重新设计您的流程。

  • 如果没有为每个新页面加载时为新用户生成唯一的表单ID,您将无法自信地区分用户。此外,如果用户中间形式发生了某些事情并且表单ID丢失了#34;那么用户将不得不重新开始,因为下次加载表单时,它将有一个新的随机生成的id 。 (更确切地说,当事情出错时,你可能会找到一种方法来保存表单id,但这是一种不必要的卷积)。
  • 使用计时器自动保存是一项不必要的功能,肯定会导致对服务器/数据库的浪费/不合需要的调用。想象一下,有人开始填写表格,上厕所,喝咖啡,打电话给亲戚,不得不从学校接孩子,记得杂货店需要一些东西......你得到了理念。在此期间,您的页面会反复自动保存。将这个僵尸放在跑步机上绝对没有任何好处。

当我移民澳大利亚时,我必须在线填写政府表格。表格很长。他们做了明智的事;他们将表格分成5-7个问题/字段并提供了Back / Next按钮。每次我点击其中一个按钮,我的进度都会被保存。这不是一个可怕的笨重的经历,事实是,我确实需要离开或拨打电话来检索表格的一些个人信息。这些表格,一旦我提交了很多电子邮件地址,就被分配了一个固定链接(尽管我已经通过电子邮件发送给我),这样即使我断开连接,我也可以选择离开的地方。

使用这个故事,我的建议如下:

  • 您的表单的第1页必须是最低限度的联系信息,以便您的程序可以为每个新用户分配一个ID(自动递增的主键)。
  • 因为我建议您通过电子邮件将固定链接发送给用户,所以您可以使用它来验证用户是否实际使用了真实且可以访问的电子邮件,从而使您的收益增加一倍。这意味着他们将输入他们的姓名&amp;电子邮件(和密码),表单将在用户收到您的自动电子邮件时暂停,他们会点击永久链接,将其自动放置在他们需要继续的页面上,并确认注册(可能)是合法的。
  • 每次用户单击“上一步/下一步”时,都会更新数据库。您可以使用ajax执行此操作,或者您可以使用纯html / php以简单/旧式方式提交页面。
  • 无论用户有多慢,或者他们遇到崩溃/断开连接,您的程序都不会执行任何盲目调用,甚至可以构建一些非常必要的验证和检查点。

最后,在查询中使用数据之前,始终要清理并验证用户提交的所有内容 - 可能永远都是这样。

答案 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
}