2016-02-05 73 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

我很高興我幫了你,不客氣,謝謝你的好話=) –