2016-02-05 74 views
1

我有一个表单将变量传递给PHP处理脚本。在处理脚本开始PHP如果语句不按预期与filter_var一起工作

之前,我想消毒张贴变量:

$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); 

至今。太好了。

但消毒和验证电子邮件是一个真正的痛苦。

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

如果$Sanitised_Email是不一样的$Email,我想回去到窗体页:

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

如果$Email_is_validfalse,我想回去到窗体页:

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

这两个if声明都不起作用,因为我输入的电子邮件既无效又需要卫生如:

i.am.(totally)[email protected] 

我在做什么错?我在某处弄乱了我的语法吗?

+0

这不会解决你的问题,但你应该考虑使用[''==而不是'! != =](http://php.net/manual/en/language.operators.comparison.php) –

+2

为什么你需要清理而不是只检查提供的地址是否有效? – PeeHaa

+1

另一个注意事项:考虑将错误消息传递回表单而不是简单的重定向(因此可能会让用户疑惑为什么表单没有提交)。例如,您可以使用一个简单的url参数来改进当前的方法,例如,该参数会触发表单上的错误显示。 –

回答

2

语法看起来不错。我认为你的问题是你在设置标题后没有结束你的脚本。将其更改为:

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

了解如何调试代码,你可以简单地附和件事你必须知道,如果你正进入一个结构体。一个好的做法是还创建一个函数重定向页面,它的快速,干净,节省一些行:

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

这是一个无价的答案,@Daniel MK - 非常感谢你!这个问题,正如您正确识别的那样,在设置标题后,我并没有用'exit();'结束脚本。 (我已经使用'header('Location:');'以前几次,但只能在脚本结尾,所以我从来没有意识到这是必要的。 '函数是一个好主意,并且使用'echo'语句来验证条件是否被正确执行,这是一个非常明智的节省时间的方法。感谢您的所有提示。如果我能给你加分,我会的。 – Rounin

+0

我很高兴我帮了你,不客气,谢谢你的好话=) –