2011-07-01 93 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

相关问题