【发布时间】:2017-08-29 03:30:50
【问题描述】:
我正在尝试实施代码来验证公司电子邮件。当用户输入公司和工作电子邮件时,它们应该相互兼容。例如,如果在 QUT 工作的用户在以 QUT 身份进入公司时注册了系统,则电子邮件域必须是 @qut.edu.au。下面的代码显示了我实现的方法。但是由于某种原因,代码中有一个逻辑错误,给出“您必须输入有效的电子邮件”。(应该在域中不包含公司名称时触发)。但每次运行时都会弹出。任何帮助将不胜感激。谢谢!
<?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();
【问题讨论】:
-
也许您需要
stripos、php.net/manual/en/function.stripos.php Javascript 和正则表达式标签在这里似乎无关紧要,除非您正在寻找其他方法?但是如果公司域名与名称不匹配怎么办? -
当您使用 strpos 时,您不应该使用!== false 吗?
true在这里是否按预期工作? -
我也很好奇你为什么要强制这个电子邮件和公司的事情。我在一家名为 X 的公司工作,但由于公司历史原因,我的电子邮件使用更常见的名称 Y。实际上,我认为没有人在我的工作或公司的任何地方(这是一家非常大的公司)收到与 X 的电子邮件
-
还值得考虑:空格和缩写。例如,
fms-corp.com中没有出现“Frobozz Magic Sofas Corporation”…… -
@chris85 好点。我已将其更改为
stripos。尽管如此,它仍然是一种较弱的验证方法。最好使用电子邮件验证,或比较域名。
标签: php regex validation explode strpos