2016-02-05 3 views
1

J'ai un formulaire qui affiche les variables dans un script de traitement PHP.PHP si l'instruction ne fonctionne pas comme prévu avec filter_var

Avant le script de traitement commence, je voudrais désinfectez les variables affichées:

$Contact_Name = filter_var($_POST['contactName'], FILTER_SANITIZE_STRING); 
$Company = filter_var($_POST['company'], FILTER_SANITIZE_STRING); 
$Telephone = filter_var($_POST['telephone'],FILTER_SANITIZE_NUMBER_INT); 

Jusqu'à présent. Tellement bon. Mais la désinfection et la validation du courrier électronique sont très pénibles.

$Email = $_POST['email']; 
$Sanitised_Email = filter_var($Email, FILTER_SANITIZE_EMAIL); 
$Email_is_valid = filter_var($Email, FILTER_VALIDATE_EMAIL); 

Si $Sanitised_Email n'est pas la même chose que $Email, je veux revenir à la page du formulaire:

if ($Sanitised_Email != $Email) { 
header('Location: http://'.$_SERVER['HTTP_HOST'].'/form.php'); 
} 

Si $Email_is_valid est false, je veux revenir à la page du formulaire:

if ($Email_is_valid == FALSE) { 
header('Location: http://'.$_SERVER['HTTP_HOST'].'/form.php'); 
} 

Aucune de ces deux instructions if ne fonctionne lorsque je saisis un e-mail non valide et nécessitant une désinfection comme:

i.am.(totally)[email protected] 

Qu'est-ce que je fais mal? Ai-je foiré ma syntaxe quelque part?

+0

Cela ne résoudra pas votre problème, mais vous devriez envisager d'utiliser [ '' == au lieu de '! ! = '] (http://php.net/manual/fr/language.operators.comparison.php) –

+2

Pourquoi avez-vous besoin de désinfecter au lieu de simplement vérifier si l'adresse fournie est valide? – PeeHaa

+1

Une autre remarque: pensez à renvoyer un message d'erreur au formulaire plutôt qu'à une redirection de plain-jane (ce qui laisse probablement l'utilisateur se demander pourquoi le formulaire n'a pas été envoyé). Vous pouvez améliorer votre méthode actuelle avec un paramètre url simple qui déclenche un affichage d'erreur sur le formulaire, par exemple. –

Répondre

2

La syntaxe semble bonne. Je pense que votre problème est que vous ne terminez pas votre script après avoir défini l'en-tête. Changer à:

if (condition) { 
     header('Location: www.example.com'); 
     exit(); 
} 

Découvrez comment déboguer votre code, vous pouvez simplement faire écho quelque chose de savoir si vous entrez dans une structure ou non. Une bonne pratique est de créer une fonction pour rediriger les pages, il est rapide, propre et économiser quelques lignes:

function redirect($page){ 
     header('Location: http://'.$_SERVER['HTTP_HOST']."/$page.php"); 
     exit(); 
} 
+0

Voilà une réponse inestimable, Daniel Dan - merci beaucoup! Le problème, comme vous l'avez correctement identifié, était que je ne terminais pas le script avec 'exit();' après avoir défini l'en-tête. (J'ai utilisé 'header ('Location:');' plusieurs fois avant, mais seulement à la fin des scripts, donc je n'ai jamais été conscient que cela est nécessaire.) Mettre en place une redirection (page); 'function est une excellente idée et l'utilisation des instructions' echo' pour vérifier si les conditions sont correctement suivies est un gain de temps très intelligent. Merci pour tous vos conseils. Si je pouvais vous donner des points supplémentaires, je le ferais. – Rounin

+0

Je suis content que je vous ai aidé, je vous en prie, merci pour vos gentils mots =) –