PHP Classes

File: doc/multiple_rules.php

Recommend this page to a friend!
  Classes of Gabriel Alejandro López López   PHP Form SPAM Protection without CAPTCHA   doc/multiple_rules.php   Download  
File: doc/multiple_rules.php
Role: Example script
Content type: text/plain
Description: Example script
Class: PHP Form SPAM Protection without CAPTCHA
Validate human users who submit form fields
Author: By
Last change:
Date: 3 months ago
Size: 5,782 bytes
 

Contents

Class file image Download
<?php
include '../lib/rules/RuleInterface.php';
include
'../lib/rules/BaseRule.php';
include
'../lib/rules/CssHiddenFieldRule.php';
include
'../lib/rules/JavascriptGeneratedHiddenFieldRule.php';
include
'../lib/rules/FormTimeTrapRule.php';
include
'../lib/rules/SessionTimeTrapRule.php';
include
'../lib/NoCaptchaAntiSpam.php';

use
daxslab\nocaptcha\NoCaptchaAntiSpam;
use
daxslab\nocaptcha\rules\CssHiddenFieldRule;
use
daxslab\nocaptcha\rules\FormTimeTrapRule;
use
daxslab\nocaptcha\rules\JavascriptGeneratedHiddenFieldRule;
use
daxslab\nocaptcha\rules\SessionTimeTrapRule;

$title = "Multiple rules";

// Session based time trap needs an active session
session_start();

// Declare rules
$noCaptchaAntiSpam = NoCaptchaAntiSpam::create([
       
'rules' => [
           
CssHiddenFieldRule::create([
               
'name' => 'contact_field1'
           
]),
           
JavascriptGeneratedHiddenFieldRule::create([
               
'name' => 'contact_field2',
               
'parentSelector' => 'form#contactForm',
            ]),
           
FormTimeTrapRule::create([
               
'name' => 'contact_field3',
               
'time' => 3,
            ]),
           
SessionTimeTrapRule::create([
               
'time' => 3,
            ])
        ],
]);

?>

<?php
include_once('common/header.php');
?>

<div class="row">
    <div class="col-md-12">

        <h1><?= $title ?></h1>

        <p>
            For an increased security level, multiple rules should be applied. In this example
            <a href="css_hidden_field_honeypot.php"><code>CssHiddenFieldRule</code></a>,
            <a href="form_time_trap.php"><code>FormTimeTrapRule</code></a>,
            <a href="javascript_generated_hidden_field_honeypot.php"><code>JavascriptGeneratedHiddenFieldRule</code></a>,
            and <a href="session_time_trap.php"><code>SessionTimeTrapRule</code></a> are used.

        </p>

        <h2>Example:</h2>

        <!-- show an alert message if it's a bot submit -->
        <?php if ($_POST): ?>
<?php if ($noCaptchaAntiSpam->checkSubmit()): ?>
<div class="alert alert-success" role="alert">
                    Form submitted correctly
                </div>
            <?php else: ?>
<div class="alert alert-danger" role="alert">
                    Bot detected
                </div>
            <?php endif; ?>
<?php endif; ?>

        <form id="contactForm" method="post">
            <div class="form-group">
                <label for="contactName">Name</label>
                <input class="form-control" name="contact_name" id="contactName" placeholder="Enter name">
            </div>
            <div class="form-group">
                <label for="contactEmail1">Email address</label>
                <input type="email" name="contact_email" class="form-control" id="contactEmail1" placeholder="Enter email">
            </div>
            <div class="form-group">
                <label for="contactBody">Body</label>
                <textarea name="contact_body" class="form-control" id="contactBody" placeholder="Write to us"></textarea>
            </div>
            <button type="submit" name="submit_button" class="btn btn-primary">Submit</button>
            <!-- Include rules form elements -->
            <?= $noCaptchaAntiSpam->renderRules() ?>
</form>

        <br>
        <h2>PHP example code:</h2>

        <?php
        $code
= <<< EOT
<?php
use daxslab\\nocaptcha\\NoCaptchaAntiSpam;
use daxslab\\nocaptcha\\rules\\CssHiddenFieldRule;
use daxslab\\nocaptcha\\rules\\FormTimeTrapRule;
use daxslab\\nocaptcha\\rules\\JavascriptGeneratedHiddenFieldRule;
use daxslab\\nocaptcha\\rules\\SessionTimeTrapRule;

// Session based time trap needs an active session
session_start();

// Declare rules
\$noCaptchaAntiSpam = NoCaptchaAntiSpam::create([
        'rules' => [
            CssHiddenFieldRule::create([
                'name' => 'contact_field1'
            ]),
            JavascriptGeneratedHiddenFieldRule::create([
                'name' => 'contact_field2',
                'parentSelector' => 'form#contactForm',
            ]),
            FormTimeTrapRule::create([
                'name' => 'contact_field3',
                'time' => 3,
            ]),
            SessionTimeTrapRule::create([
                'time' => 3,
            ])
        ],
]);

?>

<!-- show an alert message if is a bot submit -->
<?php if (\$_POST): ?>
    <?php if (\$noCaptchaAntiSpam->checkSubmit()): ?>
        <div class="alert alert-success" role="alert">
            Form submitted correctly
        </div>
    <?php else: ?>
        <div class="alert alert-danger" role="alert">
            Bot detected
        </div>
    <?php endif; ?>
<?php endif; ?>

<form id="contactForm" method="post">
    <div class="form-group">
        <label for="contactName">Name</label>
        <input class="form-control" name="contact_name" id="contactName" placeholder="Enter name">
    </div>
    <div class="form-group">
        <label for="contactEmail1">Email address</label>
        <input type="email" name="contact_body" class="form-control" id="contactEmail1" placeholder="Enter email">
    </div>
    <div class="form-group">
        <label for="contactBody">Body</label>
        <textarea name="contact_email" class="form-control" id="contactBody" placeholder="Write to us"></textarea>
    </div>
    <button type="submit" name="submit_button" class="btn btn-primary">Submit</button>
    <!-- Include rules form elements -->
    <?= \$noCaptchaAntiSpam->renderRules() ?>
</form>

EOT;

       
?>

        <pre>
            <code class="HTML">
<?= htmlspecialchars($code) ?>
</code>
        </pre>
    </div>
</div>

<?php
include_once('common/footer.php');
?>