валидатор электронной почты не работает

я новичок в 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>

-2

Решение

переменная находится за пределами области действия функции.

вам нужно определить функцию как:

function correct_email($email)...

когда вы вызываете его, сначала анализируйте электронную почту для validate (), а затем для correct_email:

 correct_email($email)

или использовать глобальный

correct_email($_POST['email'])
2

Другие решения

  1. Вы не проходите $email к вашей функции, поэтому она не доступна в вашей функции из-за области. Увидеть переменная область чтобы узнать больше об этом.

  2. filter_var() вернет false, если адрес электронной почты будет пустым, поэтому вам не нужно проверять это.

  3. Вы не должны отражать что-либо из вашей функции. Просто верните true или false и позвольте коду выполнить обработку ошибок.

  4. Но если вы настаиваете на установке сообщения об ошибке в своем коде, вы не согласны с вашим кодом, так как вы выводите здесь сообщение об ошибке, а не записываете его в свой код. $error массив, как и везде в вашем коде.

  5. Вы можете вернуть true по умолчанию и возвращать 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 считается плохой практикой программирования.

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector