3

必要なさまざまなメッセージを提供するphpを使用した連絡フォームを正常に作成しました。次に、単純なランダム算術キャプチャ(非画像)を追加します。以下の匿名化された(機能している)htmlフォームと既存の(機能しているが算術キャプチャなしの)phpを参照してください。

アイデアは、他のエラーメッセージと同じ方法で「不正解」を表示するか、正解を含む正しく記入されたフォームのありがとうページに渡すことです。私はこれでうまくいきましたが、それを完全に機能させることはできません。どんな援助も大歓迎です。


HTML:

    <p>Area of interest:
    <input type="radio" name="likeit" value="A" checked="checked" /> A
    <input type="radio" name="likeit" value="B" /> B
    <input type="radio" name="likeit" value="C" /> C</p>

    <p>How did you hear about us?
    <select name="how">
    <option value=""> -- Please select -- </option>
    <option>Recommendation</option>
    <option>Internet</option>
    <option>Advertisement</option>
    <option>Other</option>
    </select></p>

    <p><strong>Your message subject:</strong><br /><input type="text" name="subject" size="35"/></p>

    <p><strong>Your message:</strong><br />
    <textarea name="comments" rows="10" cols="40"></textarea></p>

    <p>Please answer the following arithmetic question: What is <?php echo $digit1;?> + <?php echo $digit2;?>?
     <input name="captcha" type="text" size="2" id="captcha"/></p>


    <p><input type="submit" value="Send" /></p>

    </form>

PHP:

    <?php
    /* Contact form with arithmetic captcha */
    $myemail  = "enquiries@X.co.uk";

    /* Check all form inputs using check_input function */
    $yourname = check_input($_POST['yourname'], "Enter your name");
    $email    = check_input($_POST['email']);
    $telephone  = check_input($_POST['telephone']);
    $website  = check_input($_POST['website']);
    $likeit   = check_input($_POST['likeit']);
    $how_find = check_input($_POST['how']);
    $subject  = check_input($_POST['subject'], "Add a subject");
    $comments = check_input($_POST['comments'], "Add your message");

    /* If e-mail is not valid show error message */
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email))
    {
            show_error("Email address is not valid");
    }

    /* If URL is not valid set $website to empty */
    if (!preg_match("/^(https?:\/\/+[\w\-]+\.[\w\-]+)/i", $website))
    {
        $website = '';
    }

    /* Message for the email */
    $message = "Hello!

    Your contact form has been submitted by:

    Name: $yourname
    Email: $email
    Telephone: $telephone
    URL: $website

    Area of interest? $likeit
    How did they find us? $how_find

    Comments:
    $comments

    End of message
    ";

    /* Send the message using mail() function */
    mail($myemail, $subject, $message);

    /* Redirect visitor to the thankyou page */
    header('Location: thankyou.html');
    exit();

    /* Functions used */
    function check_input($data, $problem='')
    {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        if ($problem && strlen($data) == 0)
        {
            show_error($problem);
        }
        return $data;
    }

    function show_error($myError)
    {
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <!--
    Head data in here
    -->
        <html xmlns="http://www.w3.org/1999/xhtml">

        <body>

            <div id="mainheader">

    <div id="mainlogo">

    <h1><a href="http://www.X.co.uk/" title="X">
                                    <img style="border:0;width: 260px; height: 160px;" src="images/X.jpg" alt="X" /></a></h1>
    </div>
    </div>

    <div id="content">
            <div class="content">
                    <h2 class="title">Error!</h2>

    <p><strong>Please correct the following error:</strong></p>
    <p><?php echo $myError; ?></p>

            </div>
    </div>

        <div id="panel">

            <div id="main" class="boxed">
                <h2 class="heading">Main</h2>
                <ul>
                    <li><a href="index.html">Home</a> </li>
                    <li><a href="about.html">About</a> </li>
                    <li><a href="contact.html">Contact</a> </li>
                </ul>
            </div>

            <div id="services" class="boxed">
                <h2 class="heading">Services</h2>
                <ul>
                    <li><a href="services.html">Services</a> </li>
                    <li><a href="recent-projects.html">Recent projects</a> </li>
                </ul>
            </div>

            <div id="pricing" class="boxed">
                <h2 class="heading">Pricing</h2>
                <ul>
                    <li><a href="pricing.html">Pricing</a> </li>
                </ul>
            </div>

            <div id="info" class="boxed">
                <h2 class="heading">Info</h2>
                <ul>
                    <li><a href="tips-and-tricks.html">Tips and tricks</a> </li>
                    <li><a href="useful-links.html">Useful links</a> </li>
                    <li><a href="faq.html">Frequently asked questions</a> </li>
                    <li><a href="site-map.html">Site map</a> </li>
                </ul>
            </div>

                    <div id="contact" class="boxed">
                            <h2 class="heading">Contact</h2>
                            <ul>
                            <li><a href= "mailto:enquiries&#38;#64;X.co.uk">Contact by email</a> </li>
                            <li><strong>Telephone:<br />X</strong> </li>
                            </ul>
                    </div>

        </div>

       <div id="mainfooter">
                    <p> &#38;#169; 2011 X<br />Designed by <a href="http://www.X.co.uk/" title="X"><strong>X</strong></a> </p>
                            <a href="http://validator.w3.org/check?uri=referer" title="Valid XHTML 1.0">
                    <img style="border:0;width:88px;height:31px" src="images/valid-xhtml10.png" alt="Valid XHTML 1.0" />
                </a>
                            <a href="http://jigsaw.w3.org/css-validator/check/referer" title="Valid CSS!">
                    <img style="border:0;width:88px;height:31px" src="images/vcss.gif" alt="Valid CSS!" />
                </a>
        </div>

        </body>
        </html>
    <?php
    exit();
    }
    ?>
4

2 に答える 2

12

一般に、キャプチャの考え方は、自動フォーム処理を防ぐことです。画像以外の比較は簡単に解決できます。

とにかく、私はこの問題を解決するためにセッションを使用します。

期待される結果を最初のページのセッション変数に保存し、2番目のページで一致することを確認するだけです

page1.php:

    <?php

    session_start();

    $digit1 = mt_rand(1,20);
    $digit2 = mt_rand(1,20);
    if( mt_rand(0,1) === 1 ) {
            $math = "$digit1 + $digit2";
            $_SESSION['answer'] = $digit1 + $digit2;
    } else {
            $math = "$digit1 - $digit2";
            $_SESSION['answer'] = $digit1 - $digit2;
    }

    ?>

    <form method="POST" action="page2.php">
            What's <?php echo $math; ?> = <input name="answer" type="text" /><br />
            <input type="submit" />
    </form>

page2.php

    session_start();

    echo "You entered ".htmlentities($_POST['answer'])." which is ";

    if ($_SESSION['answer'] == $_POST['answer'] )
            echo 'correct';
    else
            echo 'wrong. We expected '.$_SESSION['answer'];

    ?>
于 2013-03-18T05:58:59.580 に答える
0

シンプルなPHP数学キャプチャを使用する https://github.com/kmlpandey77/MathCaptcha

MathCaptcha

シンプルなPHP数学キャプチャ

使用法

composer require kmlpandey77/math-captcha

画像の数学

画像で数学を返します

作成captcha.php

<?php
require_once 'vendor/autoload.php'; // link to vendor's autoload.php

use Kmlpandey77\MathCaptcha\Captcha;

$captcha = new Captcha();
$captcha->image();

作成form.php

<form action="check.php" method="post">
    <p>
        Answer it <img src="./captcha.php" alt="" valign="middle">  <input type="text" name="captcha">
    </p>
    <p><button type="submit" name="submit">Submit</button></p>
</form>

テキストの数学

数学をテキストで返します

作成form.php

このコードを上に配置しますform.php

<?php
require_once 'vendor/autoload.php'; // link to vendor's autoload.php

use Kmlpandey77\MathCaptcha\Captcha;
?>

そして、このコードをbody

<form action="check.php" method="post">
    <p>
        Answer it <?php echo new Captcha; ?>  <input type="text" name="captcha">
    </p>
    <p><button type="submit" name="submit">Submit</button></p>
</form>

小切手

ユーザーが正しいキャプチャキーを入力したかどうかを確認します

作成check.php

<?php
require_once 'vendor/autoload.php'; // link to vendor's autoload.php
use Kmlpandey77\MathCaptcha\Captcha;

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

    if(Captcha::check()){

        //valid action

        echo('<font color="green">Answer is valid</font>');
    }else{
        echo('<font color="red">Answer is invalid</font>');
    }
}
于 2020-06-07T06:07:09.167 に答える