Php 多次单击“提交”按钮后出现复制问题
我的主要问题是,在代码中,当我多次单击提交按钮时,它会在数据库中多次插入重复项,我需要在其中避免重复。请帮我解决这个问题。这是我试图插入的两个表。选择并回答答案Php 多次单击“提交”按钮后出现复制问题,php,mysql,codeigniter,Php,Mysql,Codeigniter,我的主要问题是,在代码中,当我多次单击提交按钮时,它会在数据库中多次插入重复项,我需要在其中避免重复。请帮我解决这个问题。这是我试图插入的两个表。选择并回答答案 $val = $this->input->post(null, true); $val['id'] = $this->input->post('id'); $val['sub_type'] = $this->input->post('sub_
$val = $this->input->post(null, true);
$val['id'] = $this->input->post('id');
$val['sub_type'] = $this->input->post('sub_type');
$val['timeout'] = $this->input->post('timeout');
$val['level'] = $this->input->post('level');
$val['mat_category'] = $this->input->post('mat_category');
$option = $val['option'] = $this->input->post('option');
$type = $this->input->post('type');
$marks = [];
$uid = $this->session->userdata('id');
if (isset($val['id']) && isset($option)) {
$query = $this->db->query("SELECT * FROM mat_ans_options WHERE deleted=0 AND active=1 AND question=" . $val['id']);
$result = $query->result_array();
if ($query->num_rows() > 0) {
$count1 = 1;
foreach ($result as $res) {
if ($res['marks'] == 1) {
break;
} else {
$count1++;
}
}
}
// MAT answers options choose
$query1 = $this->db->query("SELECT * FROM mat_ans_options_choose WHERE deleted=0 AND active=1 AND uid=$uid AND q=" . $val['id']);
$result1 = $query1->result_array();
if ($query1->num_rows() > 0) {} else {
$data1 = [
'uid' => $uid,
'q' => $val['id'],
'option_chose' => $option,
'createdon' => $this->general_model->server_time(),
];
$this->db->insert('mat_ans_options_choose', $data1);
}
if ($count1 == $option) {
$marks = 1;
} else {
$marks = 0;
}
// if($marks==1 || $marks==0)
// {
// MAT answers
$query2 = $this->db->query("SELECT * FROM mat_answers WHERE deleted=0 AND active=1 AND uid=$uid AND q=" . $val['id'] . " AND type=" . $type . " AND sub_type=" . $val['sub_type'] . " AND level=" . $val['level']);
$result2 = $query2->result_array();
if ($query2->num_rows() > 0) {} else {
$data = [
'uid' => $uid,
'q' => $val['id'],
'type' => $type,
'level' => $val['level'],
'sub_type' => $val['sub_type'],
'mat_category' => $val['mat_category'],
'marks' => $marks,
'timeoutstatus' => $val['timeout'],
'createdon' => $this->general_model->server_time(),
];
$this->db->insert('mat_answers', $data);
}
// }
return 1;
} else {
return 0;
}
使用JS,您可以在第一次单击后禁用按钮-无论您是否使用AJAX,它都会工作。您可以使用JS/jQuery来限制客户端的请求数量。例如,通过禁用“提交”按钮:
$(“我的按钮”).prop(“禁用”,true)代码>
但是,如果数据对重复项(订单、用户注册等)敏感,则应使用PHP在服务器端设置请求限制。您可以通过向表中添加一个唯一索引来实现这一点,该索引位于用户id或随html表单提交的唯一标记上。在数据库中为uid和q创建唯一的索引。数据库不会多次插入来自同一用户id的同一问题id。您是否使用Ajax提交表单?我发送给它的代码是codeigniter的模型