我有一个场景,我有2个表,即用户和请求,我要求用户填写表格,其中还有其他数据,他还要填写电子邮件。现在我希望如果用户输入电子邮件,它应该只是在users表中添加数据并选择最后一个插入ID然后继续并将数据+最后插入的id保存在请求表中并显示消息
您的帐户已创建..
直到这里我已完成编码,但我遇到的部分是
我希望如果用户输入已存在于users表中的电子邮件,则代码应选择针对该电子邮件的ID,并将其与表单数据一起存储在请求表中并显示消息
"已提交申请,但您已拥有帐户,请登录 检查更多详情"
用户表
id name email
1 sam sam@gmail.com
2 demo_user demo@gmail.com
请求表
id email userid
1 demo@gmail 2
控制器
public function submit()
{
$this->form_validation->set_rules('email','Email','trim|required');
if($this->form_validation->run() == FALSE)
{
$erdata = array
(
'error' => validation_errors()
);
$this->session->set_flashdata($erdata);
redirect('home/index');
}
else
{
if($this->user_model->instant_submit())
{
$this->session->set_flashdata('msg','Your account is created');
}
else
{
echo "failed";
}
redirect('home/index');
}
}
模型
public function instant_submit()
{
$userdata = array(
'email' => $this->input->post('email')
);
$insert_data = $this->db->insert('users', $userdata);
$lastid = $this->db->insert_id();
$reqdata = array(
'email' => $this->input->post('email'),
'userid' => $lastid,
'status'=>'pending'
);
$insert_request = $this->db->insert('request', $reqdata);
return $insert_data;
}
查看
<?php if($this->session->flashdata('msg')): ?>
<?php echo $this->session->flashdata('msg'); ?>
<?php endif; ?>
<?php
$reg_attributes = array('id'=>'form','role'=>"form");
echo form_open('home/submit', $reg_attributes);
?>
<?php
$data = array(
'type'=>'text',
'name'=>'email',
'placeholder'=>'Email',
'class'=>'form-control',
'id'=>'form-email'
);
echo form_input($data);
?>
<?php
$data = array(
'type'=>'submit',
'class'=>'btn-primary',
'name'=>'submit',
'content'=>'Submit!'
);
echo form_button($data);
?>
<?php echo form_close(); ?>
答案 0 :(得分:2)
is_unique
如果表单元素对参数中的表和字段名称不唯一,则返回FALSE
。
语法:
is_unique[table.field]
示例:
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');
这将解决您的问题
答案 1 :(得分:0)
在您拨打此$this->user_model->instant_submit()
之前,在您的控制器中添加一个条件,以检查电子邮件ID是否已存在,如下所示。
<强>控制器强>
public function submit()
{
$this->form_validation->set_rules('email','Email','trim|required');
if($this->form_validation->run() == FALSE)
{
$erdata = array
(
'error' => validation_errors()
);
$this->session->set_flashdata($erdata);
redirect('home/index');
}
else
{
if(!$this->user_model->check_user_exist($this->input->post('email'))) {
if($this->user_model->instant_submit())
{
$this->session->set_flashdata('msg','Your account is created');
}
else
{
echo "failed";
}
} else {
//do whatever operation you want to do if user is already exist;
$this->session->set_flashdata('msg','Request is submitted but you already have an account, please login to check furthur details ');
}
redirect('home/index');
}
}
现在,在您的模型中创建一个可以检查用户数据的函数
public function check_user_exist($email_id) {
$this->db->select('id');
$this->db->where('email',$email_id);
$query = $this->db->get('users');
$data = $query->row();
if($query->num_rows() == 1) {
return $data->id;
} else {
return false;
}
}
注意:请记住,如果找不到用户,它将发送false,因此它将创建该用户的新条目。