请帮助我创建一个允许用户提交有效电子邮件的表单。
当有人试图输入电子邮件id时,应在提交到数据库之前对其进行验证。垃圾邮件ID的一些示例是test@abc.com
、123@xyz.com
等。
如果用户尝试输入上面示例中提到的电子邮件id,则应验证它是否是有效的电子邮件id并检查具有该电子邮件id的用户是否已经存在?
请帮助我在php代码点火器中构建一个代码。
CI中有一个内置功能可以为您处理此问题。它在表单验证库中。
请参阅:https://ellislab.com/codeigniter/user-guide/libraries/form_validation.html
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');
请注意已经为您提供的validemail规则。
希望能有所帮助。
您还可以使用dns验证电子邮件域。
public function check_domain($email)
{
if( ! (bool) checkdnsrr(preg_replace('/^[^@]++@/', '', $email), 'MX'))
{
return FALSE;
}
return TRUE;
}
首先,我想给你一个检查电子邮件地址域是否存在的功能,之后我将尝试找出验证过程,即用户是否已经从以前注册,并引用checkdnsrr()的链接。
我把答案分为三部分
- 验证域是否存在
- 客户端验证可以通过jquery或html5
- 要注册的唯一电子邮件地址
第1部分
请使用几个不同的域名尝试此功能。这个代码对我有效,我希望有
function validate_email($email="zazikhan1@wowowowowowowowoowoowowowo.com"){
$exp = "^[a-z''0-9]+([._-][a-z''0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";
if(stristr($exp,$email)){
if(checkdnsrr(array_pop(explode("@",$email)),"MX")){
echo 'good to go';
}else{
echo 'domain cant be verified';
}
}else{
echo 'sorry regular expression does not match';
}
}
第2部分
如果你想通过jquery做到这一点,那么访问jquery rain并选择你喜欢的插件,但如果你喜欢html5中的插件,只需
<input type="email" id="email" name="email" required>
在html5中,电子邮件将通过看到@
登录来自动验证任何用户是否已放入电子邮件。
required
标签只会看到任何一个用户在继续操作之前已经完全填写了电子邮件字段。
第3部分
以下是不注册那些已经注册的电子邮件的代码。
function subscriber()
{
$subscriber=$this->input->post('subscriber');
$query=$this->cartmodel->get_record('subscriber',array('email'=>$subscriber));
if($query)
{
$this->session->set_flashdata('error', '<script type="text/javascript">alert("you are already registered with us")</script>');
redirect('views');
}
else
{
$data=array('email'=>$this->input->post('subscriber'));
$this->cartmodel->insert_data('subscriber',$data);
$this->session->set_flashdata('error', '<script type="text/javascript">alert("you have sucessfully subscribed with us")</script>');
redirect('views');
}
}