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

正規表現の最初と最後に有効な記号を指定する必要があります。この例では だけ#ですが、または必要なものを使用できます/

この記事を見てみましょう: 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 に答える