电子邮件验证器不工作 PHP
email validator is not working PHP
我是 php 的新人,我正在处理登录和注册表单。我创建了一个函数来检查电子邮件地址是否有效,即使我没有收到任何错误,但它似乎不起作用。如果这里的任何人都可以看一下我的代码,那将是一个很大的帮助。
<?php
$firstname="";
$lastname="";
$email="";
$password="";
$confirm_password="";
$error= array("firstname"=>"",
"lastname" =>"",
"email" =>"",
"password" =>"",
"confirm_password"=>"" );
function correct_email(){
if(!empty($email)){
if(filter_var($email,FILTER_VALIDATE_EMAIL)){
return true;
}else{
echo"your email address is not valid";
}
}
return false;
}
function correct_password(){
global $error;
if(empty($error['password'])){
if(strcmp($_POST['password'],$_POST['confirm_password'])==0){
return true;
}else{
$error['password']="Password didnot match";
$error['confirm_password']="Password didnot match";
}
}
return false;
}
function validate(){
global $error;
$valid= true;
foreach($_POST as $key=>$value){
if(empty($value)){
$valid=false;
$error[$key]="This field is blank";
}
}
return correct_password() && correct_email() && $valid;
}
if($_SERVER['REQUEST_METHOD']=="POST"){
$firstname=$_POST['firstname'];
$lastname=$_POST['lastname'];
$email=$_POST['email'];
$password=$_POST['password'];
$confirm_password=$_POST['confirm_password'];
if(validate()){
echo "registration succesful";
die;
}
else{
echo "couldnot register";
}
}
?>
<html>
<head>
<title>Registration</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<h1>New Memebers Registration</h1>
<form method="post" action="register.php">
<table>
<tr>
<td>Firstname:</td>
<td><input type="text" name="firstname" value="<?= $firstname ?>">
<?= $error['firstname'] ?> </td>
</tr>
<tr>
<td>Lastname:</td>
<td><input type="text" name="lastname" value="<?= $lastname ?>">
<?= $ error['lastname'] ?> </td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" name="email" value="<?= $email ?>">
<?= $error['email'] ?> </td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" value="<?= $password ?>">
<?= $error['password'] ?> </td>
</tr>
<tr>
<td>Confirm Password:</td>
<td><input type="password" name="confirm_password"
value="<?= $confirm_password ?>">
<?= $error['confirm_password'] ?> </td>
</tr>
<tr>
<td colspan="2" class="pullright">
<input type="submit" value="Register"> </td>
</tr>
</table>
</form>
</body>
</html>
您没有将 $email
传递给您的函数,因此由于作用域,它在您的函数中不可用。请参阅 variable scope 了解更多信息。
如果电子邮件地址为空,filter_var()
将 return 为假,因此您无需检查。
你不应该从你的函数中回显任何东西。只需 return true 或 false,让代码进行错误处理。
但是,如果您坚持在代码中设置错误消息,那么您的代码就会不一致,因为您会在此处回显错误消息,而不是像其他地方那样将其捕获到 $error
数组中你的代码。
您可以 return 默认情况下为 true 并且只有 return false 错误会缩短您的代码。
你的函数:
correct_email($email) {
if (!filter_var($email,FILTER_VALIDATE_EMAIL)) {
$error['email'] = "your email address is not valid";
return false;
}
return true;
}
调用它:
return correct_password() && correct_email($email) && $valid;
我建议删除对 global
的任何引用并将所有需要的变量作为参数传递,因为使用 global
被认为是一种糟糕的编程习惯。
变量在函数范围之外。
您需要像这样定义函数:
function correct_email($email)...
当您调用它时,首先解析电子邮件以验证 () 然后 correct_email:
correct_email($email)
或使用全局
correct_email($_POST['email'])
我是 php 的新人,我正在处理登录和注册表单。我创建了一个函数来检查电子邮件地址是否有效,即使我没有收到任何错误,但它似乎不起作用。如果这里的任何人都可以看一下我的代码,那将是一个很大的帮助。
<?php
$firstname="";
$lastname="";
$email="";
$password="";
$confirm_password="";
$error= array("firstname"=>"",
"lastname" =>"",
"email" =>"",
"password" =>"",
"confirm_password"=>"" );
function correct_email(){
if(!empty($email)){
if(filter_var($email,FILTER_VALIDATE_EMAIL)){
return true;
}else{
echo"your email address is not valid";
}
}
return false;
}
function correct_password(){
global $error;
if(empty($error['password'])){
if(strcmp($_POST['password'],$_POST['confirm_password'])==0){
return true;
}else{
$error['password']="Password didnot match";
$error['confirm_password']="Password didnot match";
}
}
return false;
}
function validate(){
global $error;
$valid= true;
foreach($_POST as $key=>$value){
if(empty($value)){
$valid=false;
$error[$key]="This field is blank";
}
}
return correct_password() && correct_email() && $valid;
}
if($_SERVER['REQUEST_METHOD']=="POST"){
$firstname=$_POST['firstname'];
$lastname=$_POST['lastname'];
$email=$_POST['email'];
$password=$_POST['password'];
$confirm_password=$_POST['confirm_password'];
if(validate()){
echo "registration succesful";
die;
}
else{
echo "couldnot register";
}
}
?>
<html>
<head>
<title>Registration</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<h1>New Memebers Registration</h1>
<form method="post" action="register.php">
<table>
<tr>
<td>Firstname:</td>
<td><input type="text" name="firstname" value="<?= $firstname ?>">
<?= $error['firstname'] ?> </td>
</tr>
<tr>
<td>Lastname:</td>
<td><input type="text" name="lastname" value="<?= $lastname ?>">
<?= $ error['lastname'] ?> </td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" name="email" value="<?= $email ?>">
<?= $error['email'] ?> </td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" value="<?= $password ?>">
<?= $error['password'] ?> </td>
</tr>
<tr>
<td>Confirm Password:</td>
<td><input type="password" name="confirm_password"
value="<?= $confirm_password ?>">
<?= $error['confirm_password'] ?> </td>
</tr>
<tr>
<td colspan="2" class="pullright">
<input type="submit" value="Register"> </td>
</tr>
</table>
</form>
</body>
</html>
您没有将
$email
传递给您的函数,因此由于作用域,它在您的函数中不可用。请参阅 variable scope 了解更多信息。
如果电子邮件地址为空,filter_var()
将 return 为假,因此您无需检查。你不应该从你的函数中回显任何东西。只需 return true 或 false,让代码进行错误处理。
但是,如果您坚持在代码中设置错误消息,那么您的代码就会不一致,因为您会在此处回显错误消息,而不是像其他地方那样将其捕获到
$error
数组中你的代码。您可以 return 默认情况下为 true 并且只有 return false 错误会缩短您的代码。
你的函数:
correct_email($email) {
if (!filter_var($email,FILTER_VALIDATE_EMAIL)) {
$error['email'] = "your email address is not valid";
return false;
}
return true;
}
调用它:
return correct_password() && correct_email($email) && $valid;
我建议删除对 global
的任何引用并将所有需要的变量作为参数传递,因为使用 global
被认为是一种糟糕的编程习惯。
变量在函数范围之外。
您需要像这样定义函数:
function correct_email($email)...
当您调用它时,首先解析电子邮件以验证 () 然后 correct_email:
correct_email($email)
或使用全局
correct_email($_POST['email'])