2017-08-29 3 views
0

J'essaie de mettre en place un code pour valider le courrier électronique de l'entreprise. Lorsqu'un utilisateur saisit une adresse e-mail d'entreprise et de travail, les deux doivent être compatibles les uns avec les autres. Par exemple, si un utilisateur qui travaille chez QUT s'enregistre auprès du système lorsqu'il entre dans la société en tant que QUT, le domaine de messagerie doit être @ qut.edu.au. Le code ci-dessous montre la méthode que j'ai implémentée. Mais pour une raison quelconque, il y a une erreur logique dans le code qui donne "Vous devez entrer un email valide" (supposé être déclenché lorsque le nom de l'entreprise n'est pas inclus dans le domaine) .Mais il apparaît chaque fois qu'il s'exécute. Toute aide serait très appréciée. Je vous remercie!vérifier si le domaine de l'e-mail est compatible avec le nom de la société

<?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(); 
+0

Peut-être que vous avez besoin 'strpos ', http://php.net/manual/fr/function.stripos.php Les tags Javascript et regex ne semblent pas pertinents ici sauf si vous cherchez d'autres approches? Mais que faire si le domaine de la société ne correspond pas au nom? – chris85

+0

Lorsque vous utilisez strpos n'est-ce pas! == false que vous devriez utiliser? Est-ce que 'true' fonctionne comme prévu ici? – Andreas

+3

Je suis également curieux de savoir pourquoi vous voulez forcer cet email et ce truc de l'entreprise. Je travaille dans une entreprise du nom de X, mais mon courriel est au nom plus commun Y à cause de l'histoire de l'entreprise. En fait, je ne pense pas que quiconque a un email avec X à mon travail ou n'importe où dans l'entreprise (c'est une très grande entreprise) – Andreas

Répondre

1

votre code lit

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

strpos peut jamais revenir true seulement un int ou FALSE, d'où vous obtenez toujours un message d'erreur. c'est dans le docs aussi.

la version correcte serait:

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

(en plus la notion d'appariement d'une adresse e-mail à un nom d'entreprise n'est pas une bonne idée comme mentionné en abondance dans les commentaires)

+0

Vous pouvez utiliser true mais comme vous le dites, strpos renvoie une position et donc avoir une erreur intégrée à ce sujet. https://3v4l.org/h6IY9 Ici, il renvoie "oui" comme vrai. Mais si vous cherchez "bonjour" alors la position sera 0, et 0 dans un if() sera faux même si la condition est vraie. Ce que vous pouvez faire pour résoudre ceci est d'ajouter un espace vide comme premier caractère dans la chaîne 'strpos (" ". $ Str, ....);' ceci vous assure que 0 ne peut pas être retourné même si c'est vrai – Andreas

+0

Vous avez raison, c'est une mauvaise idée de penser à ce genre de code. Cela ne fera que créer des problèmes. Si, en tant que client, je ne peux pas créer de compte parce que mon adresse e-mail ne correspond pas à celle de mon entreprise, je clique sur le bouton "Retour" pour revenir à ma recherche Google. – Andreas

+1

@Andreas Je n'ai pas fourni la solution, je dis juste que strpos ne peut jamais retourner true, et puisque '===' (ou '! ==') inclut une comparaison de type, le message d'erreur est toujours sorti. La réponse réelle est "' === false' "car elle fait exactement ce qui est nécessaire ici, car' 0! == false'. – Jakumi