Php 面向对象验证
目前,我正在尝试通过OOP php和数组验证电子邮件地址,以便稍后添加其他功能,但是当我插入有效的电子邮件地址时,验证仍然失败,我认为可能我的数组设置错误,但我不完全确定,此外,我还尝试了不同的运营商,以检查电子邮件功能是否会输出不同的结果,但如前所述,它似乎总是失败,任何建议将不胜感激Php 面向对象验证,php,oop,Php,Oop,目前,我正在尝试通过OOP php和数组验证电子邮件地址,以便稍后添加其他功能,但是当我插入有效的电子邮件地址时,验证仍然失败,我认为可能我的数组设置错误,但我不完全确定,此外,我还尝试了不同的运营商,以检查电子邮件功能是否会输出不同的结果,但如前所述,它似乎总是失败,任何建议将不胜感激 class Login { private $email, $password, $database, $db = null; public funct
class Login
{
private
$email,
$password,
$database,
$db = null;
public function __construct()
{
$this->db = new Database;
}
public function validEmail($email)
{
return (filter_var($email, FILTER_VALIDATE_EMAIL) !== FALSE);
}
}
<?php
require "classes/Login.class.php";
$validate = new Login();
require "loadclasses.php";
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$email = $pass = "";
$post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
$email = $post['email-login'];
$pass = $post['password-login'];
$errors = array();
$fields = array(
'email-login' => array(
'validate' => 'validEmail',
'message' => 'Enter a valid email address'
)
);
foreach($fields as $key => $value)
{
if(isset($fields[$key]))
{
$errors[] = ['name' => $key, 'error' => $fields[$key]['message']];
}
}
if(empty($errors))
{
$success = ['response' => 'true'];
session_start();
}
}
header('Content-Type: application/json');
if (empty($errors))
{
echo json_encode($success);
}
else
{
echo json_encode(["errors" => $errors]);
}
类登录
{
私有的
$email,
$password,
$database,
$db=null;
公共函数构造()
{
$this->db=新数据库;
}
公共功能validEmail($email)
{
返回(filter\u var($email,filter\u VALIDATE\u email)!==FALSE);
}
}
正如评论中已经提到的-您不使用登录
类中的函数
那么,您当前代码的工作原理是:
$fields = array(
'email-login' => array(
'validate' => 'validEmail',
'message' => 'Enter a valid email address'
)
);
foreach($fields as $key => $value)
{
// isset($fields[$key]) is ALWAYS true
if(isset($fields[$key]))
{
$errors[] = ['name' => $key, 'error' => $fields[$key]['message']];
}
}
你真正应该做的是:
$fields = array(
'email-login' => array(
'validate' => 'validEmail',
'message' => 'Enter a valid email address'
)
);
// instantiate object of Login class
$login = new Login();
foreach($fields as $key => $value)
{
// call a function `$value['validate']` (it is `validEmail`)
$validation_result = $login->{$value['validate']}($email);
// if validation fails - add error message
if(!$validation_result)
{
$errors[] = ['name' => $key, 'error' => $value['message']];
}
}
顺便说一句,$post
是一个错误的变量名,我想它是$\u post
,正如注释中已经提到的那样-您不使用登录
类中的函数
那么,您当前代码的工作原理是:
$fields = array(
'email-login' => array(
'validate' => 'validEmail',
'message' => 'Enter a valid email address'
)
);
foreach($fields as $key => $value)
{
// isset($fields[$key]) is ALWAYS true
if(isset($fields[$key]))
{
$errors[] = ['name' => $key, 'error' => $fields[$key]['message']];
}
}
你真正应该做的是:
$fields = array(
'email-login' => array(
'validate' => 'validEmail',
'message' => 'Enter a valid email address'
)
);
// instantiate object of Login class
$login = new Login();
foreach($fields as $key => $value)
{
// call a function `$value['validate']` (it is `validEmail`)
$validation_result = $login->{$value['validate']}($email);
// if validation fails - add error message
if(!$validation_result)
{
$errors[] = ['name' => $key, 'error' => $value['message']];
}
}
顺便说一句,$post
是一个错误的变量名,我想它是$\u post
您没有在任何地方使用登录类。这没有任何意义。您没有在任何地方使用登录类。这没有任何意义。啊,我现在明白我的错误了,谢谢。是的,你是对的,我在复制的时候不小心删除了两行代码,真是太傻了,我现在可以看出我的错误了,谢谢。是的,你是对的,我在复制时不小心删除了两行代码,真是太傻了