-1

我在这个问题的标题中得到了错误。帮助我找出我的联系表中的问题:

<?php

//Prefedined Variables
$to = "example@example.com";
$subject = "1";

if($_POST) {
    // Collect POST data from form
    $name = stripslashes($_POST['name']);
    $email = stripslashes($_POST['email']);
    $comment = stripslashes($_POST['comment']);

    // Define email variables
    $message = date('d/m/Y')."\n" . $name . " (" . $email . ") sent the following comment:\n" . $comment;
    $headers = 'From: '.$email.'\r\n\'Reply-To: ' . $email . '\r\n\'X-Mailer: PHP/' . phpversion();

    //Validate
    $header_injections = preg_match("(\r|\n)(to:|from:|cc:|bcc:)", $comment); 

    if( ! empty($name) && ! empty($email) && ! empty($comment) && ! $header_injections ) {
        if( mail($to, $subject, $message, $headers) ) {
            return true;
        }
        else {
            return false;
        }
    }
    else {
        return false;
    }
}
?>

似乎问题就在这里,但我不明白出了什么问题!

$header_injections = preg_match("(\r|\n)(to:|from:|cc:|bcc:)", $comment);
4

2 回答 2

3

尝试:

$header_injections = preg_match("#(\r|\n)(to:|from:|cc:|bcc:)#", $comment); 

您必须在正则表达式的开头和结尾提供一个有效的符号,在这个例子中是 just #,但您可以使用/或任何您想要的。

看看这篇文章:RegEx delimiters

于 2012-11-25T19:07:56.087 回答
0

尝试使用这个:

$header_injections = preg_match('/(\r|\n)(to:|from:|cc:|bcc:)/', $comment); 

同样在您的 IF 条件下,您应该$header_injections这样检查:

if( ! empty($name) && ! empty($email) && ! empty($comment) && FALSE !== $header_injections ) {

因为 preg_match 可以返回可以转换为布尔值并跳过验证的值。

于 2012-11-25T19:14:15.213 回答