0

この[チュートリアル][1]でキャプチャを作成しました。

[1]: http://codechirps.com/how-to-add-a-completely-custom-captcha-to-any-web-form/しかし、私には完了していないようです。コードを作ったのですが、間違った答えを入れてもメールを送信できます。PHPファイルに余分なコードを書かなければならないと感じていますが、どこにあるのかわかりません。どんな助けでも大いに感謝します

<div class="modal-body">
                <form class="contact" name="contact">
                    <label class="label" for="name">Имя</label><br>
                    <input type="text" name="name" class="input-xlarge"><br>
                    <label class="label" for="email">E-mail</label><br>
                    <input type="email" name="email" class="input-xlarge"><br>
                    <label class="label" for="message">Сообщение</label><br>
                    <textarea name="message" class="input-xlarge"></textarea>
                </form>
            </div>
            <div class="modal-footer">
                        <p>2 + 3 =</p>
                        <input type="text" name="captcha" />
                <input class="btn btn-warning" type="submit" value="Отправить" id="submit">
                <a href="#" class="btn btn-danger" data-dismiss="modal">Закрыть</a>


<?php
$myemail = '';
if (isset($_POST['name'])) {
$name = strip_tags($_POST['name']);
$email = strip_tags($_POST['email']);
$message = strip_tags($_POST['message']);
$captcha = check_input($_POST['captcha']);
echo "<span class=\"alert alert-success\" >Сообщение отправлено</span><br><br>";

if (!preg_match("/5/", $captcha))
{
show_error("Check your math, Dude");
}


$to = $myemail;
$email_subject = "Contact form submission: $name";
$email_body = "You have received a new message. ".
" Here are the details:\n Name: $name \n ".
"Email: $email\n Message \n $message";
$headers = "From: $myemail\n";
$headers .= "Reply-To: $email";
mail($to,$email_subject,$email_body,$headers);
}?>
4

1 に答える 1

1

では、入力値が有効かどうかを確認する必要があります。そうでない場合は、エラーが表示され、メールは送信されません。すべてのチェックに合格すると、メールが送信されます。$_POST['email']そのため、とフィールドを確認する必要があります$_POST['captcha'](必要に応じて、残りが空でないかどうかなどを確認します)。

php では、次のようにできます。

$myemail = "";
if(isset($_POST['name'])){ // check if a form is submitted
    if(empty(trim($_POST['name'])) || empty(trim($_POST['message'])) || empty(trim($_POST['email'])) || empty(trim($_POST['captcha'])) ){ // check if values are not empty
        echo "Please fill in all the required fields.";
    }else if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){ // check email
        echo "Please give a real e-mail address.";
    }else if(!preg_match("/5/", $_POST['captcha'])){ // the code provided by your script
        echo "Get your math right, dude!";
    }else{ // all fields seem to be ok
        // sanitize input using htmlspecialchars(), see http://stackoverflow.com/a/5788361/1319187
        $name = htmlspecialchars($_POST['email']);
        $email = $_POST['email']; // email doesn't need to be sanitized since it's been filtered
        $message = htmlspecialchars($_POST['message']);

        //Send the mail
        $to = $myemail;
        $email_subject = "Contact form submission: $name";
        $email_body = "You have received a new message. ".
            " Here are the details:\n Name: $name \n ".
            "Email: $email\n Message \n $message";
        $headers = "From: $myemail\n";
        $headers .= "Reply-To: $email";
        if(mail($to,$email_subject,$email_body,$headers)){
            echo "Succes! Your mail has been sent!";
        }else{
            echo "Something went wrong with the sending of a mail.";
        }
    }
}

何をするかわからない場合は、いくつかの関数をグーグルで検索できます。

また、どこcheck_input()から来たのかもわかりません。これはネイティブの PHP 関数ではなく、提供したリンクにはその機能が示されていません。また、captcha の値が 5 であるかどうかを確認する正規表現は少しばかげています$_POST['captcha'] == '5'。また、これらの値を少しランダム化する必要があることに注意してください。

于 2013-09-01T17:01:03.883 に答える