为什么我的PHP验证没有';t是否检查数据库中现有的电子邮件地址?
我有一个基本的注册表,所有输入都使用jaquery验证,并使用php验证来检查现有的电子邮件地址。但是,如果我键入相同的电子邮件地址并多次提交,我不会收到任何验证消息,并且电子邮件会存储在数据库中。我无法理解为什么会发生这种情况,我认为我的代码中没有任何错误 以下是PHP验证:为什么我的PHP验证没有';t是否检查数据库中现有的电子邮件地址?,php,validation,email,Php,Validation,Email,我有一个基本的注册表,所有输入都使用jaquery验证,并使用php验证来检查现有的电子邮件地址。但是,如果我键入相同的电子邮件地址并多次提交,我不会收到任何验证消息,并且电子邮件会存储在数据库中。我无法理解为什么会发生这种情况,我认为我的代码中没有任何错误 以下是PHP验证: public function register_post(){ $register = new Register(); $register->loadFromPost(); $v
public function register_post(){
$register = new Register();
$register->loadFromPost();
$valid_error = array();
if($register->is_value_exist('email', $register->email)){
$valid_error[] = 'email already taken';
}
$regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
if (!preg_match($regexp, $register->email)) {
$valid_error[] = "not a valid email";
}
$var_array = array($register->first_name, $register->last_name);
$regexp = "/^[a-zA-Z]{2,16}+$/";
foreach($var_array as $var){
if (!preg_match($regexp, $var)) {
$valid_error[] = "not a valid input value for first name or last name";
}
}
if(count($valid_error) == 0)
{
$hash = Membership::hash($register->password);
$register->password = $hash['password'];
$register->hash = $hash['salt'];
}
$register->save();
$redirect_url = SITE_URL . "home/index";
redirect($redirect_url);
}
您的保存和重定向总是被调用,因为它们不在您的IF条件下。改为:
if(count($valid_error) == 0)
{
$hash = Membership::hash($register->password);
$register->password = $hash['password'];
$register->hash = $hash['salt'];
$register->save();
$redirect_url = SITE_URL . "home/index";
redirect($redirect_url);
}
只有在没有验证错误时才调用这三行。您还需要创建一种将有效的_错误发送回用户的方法,以便当它们没有被重定向时,用户知道原因
因为有人对此发表了评论…至于电子邮件的regexs,请看这里:。您不允许使用+或%或。-等等。您可以像我的代码一样尝试这个完整的jquery
$(document).ready(function(){
//validation
$("form[name='your form name']").validate({
rules: {
uname:{
required:true,
alphabetsnspace:true,
minlength: 3,
},
email:{
required:true,
email:true,
},
},
psw: {
required: true,
minlength: 5,
maxlength: 25,
},
rpsw: {
equalTo: "#psw",
minlength: 5,
maxlength: 25,
}
},
messages: {
uname:{
required:"Please enter your user name",
minlength:"User name should be more then 3 characters",
alphabetsnspace:"Only alphabets and numbers are allowd",
},
email:"Please enter a valid email address",
},
//calling php
submitHandler: function(form) {
$.ajax({
url :"register.php",
type:"post",
dataType : 'html',
data:$('#registerform').serialize(),
success: function(data)
{
//any function
}
});
});
});
请尝试使用此电子邮件进行多个插入验证
if(isset($email))
{
$checkdata=" SELECT email FROM users WHERE email='$email' ";
$query=mysqli_query($conn,$checkdata);
if(mysqli_num_rows($query)>0)
{
echo "email already taken";
exit;
}
else
{
//inset
}
使所有假设无效,并删除“提交时”条件。隔离此代码以针对数据库进行测试,以便您可以将其称为
trythithing(“lol@cats.com“”
在单独的专用脚本中。删除试图根据regexp验证地址的部分,只放入您知道有效的电子邮件。然后看看db部分做了什么。它行吗?很好,问题在于你的重新验证(你不应该自己进行验证,它非常复杂,你应该使用一个预先制作好的验证程序)严重损坏的正则表达式,不要验证这样的电子邮件,例如,限制为4个字符的TLD是一个糟糕的主意你没有告诉我们什么是价值存在,所以只有精神力量可以在这里提供帮助。“我认为我的代码中没有任何错误。”-这是一种非常糟糕的态度。请对该代码添加一些解释。为什么你认为它解决了问题?你想要验证还是发送电子邮件给几个插入站?这是什么意思?