2011-07-01 94 views
1

我想清理應該是一個簡單的電子郵件腳本的輸出,但它只輸出一個空白頁面。下面是該腳本:爲什麼這個腳本不能正確清理輸出?

<?php 
define("EMAIL", "[email protected]"); 

if(isset($_POST['submit'])) { 

    //include validation class 
    include('./support/validate.class.php'); 

    //assign post data to variables 
    $_POST['name'] = filter_var($_POST['name'], FILTER_SANITIZE_STRING); 
    $_POST['email'] = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); 
    $_POST['message'] = filter_var($_POST['message'], FILTER_SANITIZE_STRING); 

    $name = trim($_POST['name']); 
    $email = trim($_POST['email']); 
    $message = trim($_POST['message']); 

    //start validating our form 
    $v = new validate(); 
    $v->validateStr($name, "name", 3, 75); 
    $v->validateEmail($email, "email"); 
    $v->validateStr($message, "message", 5, 1000); 

    if(!$v->hasErrors()) { 
     $header = "From: $email\n" . "Reply-To: $email\n"; 
     $subject = "email from silentpost.net website!"; 
     $email_to = EMAIL; 

     $emailMessage = "Name: " . $name . "\n"; 
     $emailMessage .= "Email: " . $email . "\n\n"; 
     $emailMessage .= $message; 

     @mail($email_to, $subject ,$emailMessage ,$header); 

    } else { 
    //set the number of errors message 
    $message_text = $v->errorNumMessage(); 

    //store the errors list in a variable 
    $errors = $v->displayErrors(); 

    //get the individual error messages 
    $nameErr = $v->getError("name"); 
    $emailErr = $v->getError("email"); 
    $messageErr = $v->getError("message"); 
    }//end error check 


}// end isset 
?> 

如果我忽略了下面的代碼,腳本會運行良好:

$_POST['name'] = filter_var($_POST['name'], FILTER_SANITIZE_STRING); 
$_POST['email'] = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); 
$_POST['message'] = filter_var($_POST['message'], FILTER_SANITIZE_STRING); 

如果必要的話,我將包括類,但我不認爲這是一個問題與類,因爲正確地刪除filter_var行輸出。

任何幫助,將不勝感激。

+0

你不應該assing過濾瓦爾回張貼。將它們放入您在下一個塊中修剪的相同變量中。你也確定這些項目實際存在'$ _POST'作爲字符串嗎? – prodigitalson

+0

您還可以使用'$ xyz = trim(filter_var($ _ POST ['xyz'],FILTER _...));'以及來自@prodigitalson的評論。因此,如果出現問題,filter_var應該返回FALSE,而不是終止腳本。 –

+0

是的,項目存在(驗證類檢查) – dstrunk

回答

1

我會做兩件事情:

A.確保你運行PHP> = 5.2(最低爲filter_var功能)。

B.將error_reporting(E_ALL);添加到腳本的頂部,這會讓您看到引發空白頁面的錯誤。

+0

看起來像這是問題。我正在運行5.1.6。現在升級,並將filter_var添加到與修剪相同的變量中。 謝謝! – dstrunk

0

看來腳本沒有錯。什麼是確切的問題?您的腳本是否不發送電子郵件,如果您進行清理或未輸出任何內容?如果是後者,那麼我認爲你的腳本不會產生任何輸出。

嘗試呼應你的內容,前後消毒後,看他們是否有所不同:

echo 'BEFORE<br>'; 
echo $_POST['name'] . '<br>'; 
echo $_POST['email'] . '<br>'; 
echo $_POST['message'] . '<br>'; 

$_POST['name'] = filter_var($_POST['name'], FILTER_SANITIZE_STRING); 
$_POST['email'] = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); 
$_POST['message'] = filter_var($_POST['message'], FILTER_SANITIZE_STRING); 

echo 'AFTER<br>'; 
echo $_POST['name'] . '<br>'; 
echo $_POST['email'] . '<br>'; 
echo $_POST['message'] . '<br>'; 
+0

還檢查filter_var()是否返回FALSE? – Abhay

+0

看起來像我正在運行一箇舊版本的PHP,不支持filter_var ...我的部分愚蠢的錯誤;) – dstrunk

相關問題