检查电子邮件的域名是否与公司名称兼容

checking whether domain of the email compatible with the company name

我正在尝试实施一个代码来验证公司电子邮件。当用户输入公司和工作电子邮件时,它们都应该相互兼容。例如,如果在 QUT 工作的用户在 he/she 以 QUT 身份进入公司时向系统注册,则电子邮件域必须是 @qut.edu.au。下面的代码显示了我已经实现的方法。但是由于某种原因,代码中存在一个逻辑错误,给出了"You must enter a valid email"。(应该是在公司名称不包含在域中时触发)。但每次运行时都会弹出。任何帮助将不胜感激。谢谢!

    <?php
require_once $_SERVER['DOCUMENT_ROOT'].'/abp/core/init.php';
include 'includes/head.php';
include 'includes/navigation.php';
$email = ((isset($_POST['email']))?sanitize($_POST['email']):'');
$email = trim($email);
$password = ((isset($_POST['password']))?sanitize($_POST['password']):'');
$password = trim($password);
$company_name = ((isset($_POST['company_name']))?sanitize($_POST['company_name']):'');
$company_name = trim($company_name);
$errors = array();
**$domain = array_pop(explode('@', $email));**


if($_POST){
        // form validation
        if(empty($_POST['email']) || empty($_POST['password'])){
          $errors[] = 'You must provide email and password.';
        }else {
          //validlate email

          **if (strpos( $domain, $company_name) !== true) {**
            $errors[] = 'You must enter a valid email.';


          }else{
            // check if email exist in the databse
            $query = "SELECT * FROM users WHERE email=?";
            $stmt = $db->prepare($query);
            $stmt->bind_param("s", $email);
            $stmt->execute();
            $stmt->store_result();

您的代码显示

if(strpos(something, something) !== true) {
    error message
}

strpos 永远不会 return true 只有一个整数或 FALSE,因此您总是会收到错误消息。它也在 docs 中。

正确的版本是:

if(strpos($haystack, $needle) === false) {
     //errormessage
}

(另外,将电子邮件地址与公司名称匹配的概念在评论中大量提及并不是一个好主意)