php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】

当网站需要设计一些用户交互功能时,拖动滑块验证码是一种比较常见的方式。通过使用PHP和JS的结合,可以实现一个简单的拖动滑块验证码验证表单操作。以下是完整攻略。

环境准备

  1. 安装PHP
  2. 安装Web服务器(如Apache)
  3. 在服务器上安装MySQL

实现步骤

  1. 创建数据库表

为了实现验证码的验证功能,我们需要在数据库中存储用户的滑块位置以及生成的验证码,因此,首先需要在MySQL中创建一个数据表,用于存储这些数据。

CREATE TABLE `captcha` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `session_id` varchar(32) NOT NULL,
  `captcha_value` varchar(32) NOT NULL,
  `slider_position` int(11) NOT NULL,
  `create_time` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. 创建验证码生成函数

在PHP中,可以使用GD库生成一个包含随机文本的图像,用于生成验证码。以下是一个示例函数,用于生成验证码图像并返回图像的二进制数据。

function generateCaptchaImage($length = 6) {
    // 设置文本内容
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $captcha_data = substr(str_shuffle($characters), 0, $length);

    // 在图像上绘制文本
    $img = imagecreate(100, 50);
    $bg_color = imagecolorallocate($img, 255, 255, 255);
    $text_color = imagecolorallocate($img, 0, 0, 0);
    imagestring($img, 5, 25, 20, $captcha_data, $text_color);

    // 输出图像
    ob_start();
    imagepng($img);
    $captcha_image_data = ob_get_contents();
    ob_end_clean();

    return $captcha_image_data;
}
  1. 生成验证码

在PHP脚本中调用生成验证码函数,用于返回一个包含随机文本的图像,将生成的验证码数据存储到数据库中。可以使用PHP的session机制,将生成的验证码与当前用户的会话ID进行绑定。

$captcha_image_data = generateCaptchaImage();
$captcha_value = bin2hex(random_bytes(16));
$slider_position = 0;
$session_id = session_id();
$create_time = date('Y-m-d H:i:s');

$sql = "INSERT INTO captcha (session_id, captcha_value, slider_position, create_time) VALUES ('$session_id', '$captcha_value', $slider_position, '$create_time')";
mysqli_query($db_conn, $sql);

echo json_encode(array(
    'status' => 'success',
    'captcha_image' => base64_encode($captcha_image_data),
    'captcha_value' => $captcha_value
));
  1. 验证用户信息

在用户填写表单时,需要对用户提供的验证码和滑块位置进行验证。可以使用JavaScript监听用户的拖动事件,获取到滑块的位置信息。在用户提交表单时,向PHP服务器发送滑块位置和验证码数据,进行验证。以下是一个展示如何监听用户拖动事件的JavaScript示例。

var slider = document.querySelector('#slider');

slider.addEventListener('mousedown', function (event) {
    var initialPosition = event.pageX;

    document.addEventListener('mousemove', function onMouseMove(event) {
        var sliderPosition = event.pageX - initialPosition;
        slider.style.transform = 'translateX(' + sliderPosition + 'px)';

        document.addEventListener('mouseup', function onMouseUp(event) {
            document.removeEventListener('mousemove', onMouseMove);
            document.removeEventListener('mouseup', onMouseUp);

            // 向服务器验证数据
            validateCaptcha(sliderPosition);
        });
    });
});
  1. PHP数据验证

在PHP服务器接收到用户提交的验证数据时,需要将提交的滑块位置与存储在数据库中的滑块位置进行比较。如果两个位置相等,则验证通过。

$session_id = session_id();
$captcha_value = $_POST['captcha_value'];
$slider_position = intval($_POST['slider_position']);

$sql = "SELECT slider_position FROM captcha WHERE session_id = '$session_id' AND captcha_value = '$captcha_value'";
$result = mysqli_query($db_conn, $sql);
if ($result && $row = mysqli_fetch_assoc($result)) {
    $stored_slider_position = intval($row['slider_position']);
    if ($slider_position === $stored_slider_position) {
        // 验证成功
    } else {
        // 验证失败
    }
} else {
    // 验证失败
}

示例说明

示例1

下面的示例演示了如何生成一个随机文本的图像验证码,并将图像返回给用户。

$captcha_image_data = generateCaptchaImage();
$captcha_value = bin2hex(random_bytes(16));
$slider_position = 0;
$session_id = session_id();
$create_time = date('Y-m-d H:i:s');

$sql = "INSERT INTO captcha (session_id, captcha_value, slider_position, create_time) VALUES ('$session_id', '$captcha_value', $slider_position, '$create_time')";
mysqli_query($db_conn, $sql);

echo json_encode(array(
    'status' => 'success',
    'captcha_image' => base64_encode($captcha_image_data),
    'captcha_value' => $captcha_value
));

该示例中生成了一个验证码,将生成的验证码存储到数据库中,并将图像返回给用户。

示例2

下面的示例演示了如何验证用户提供的拖动滑块位置数据是否正确。

$session_id = session_id();
$captcha_value = $_POST['captcha_value'];
$slider_position = intval($_POST['slider_position']);

$sql = "SELECT slider_position FROM captcha WHERE session_id = '$session_id' AND captcha_value = '$captcha_value'";
$result = mysqli_query($db_conn, $sql);
if ($result && $row = mysqli_fetch_assoc($result)) {
    // 比较用户提供的滑块位置与存储在数据库中的滑块位置
    $stored_slider_position = intval($row['slider_position']);
    if ($slider_position === $stored_slider_position) {
        // 验证成功
    } else {
        // 验证失败
    }
} else {
    // 验证失败
}

该示例中将用户提交的滑块位置与存储在数据库中的滑块位置进行比较,从而进行验证码的验证操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • php正则替换变量指定字符的方法

    当我们在使用 PHP 编程时,常常需要对字符串进行正则替换操作。在这个过程中,有时候需要替换字符串中的某个变量的值,而保留其他内容不变。下面是一些关于 PHP 正则表达式替换中指定变量字符的方法。 1. PHP 正则表达式的基本语法 PHP 正则表达式使用特殊的符号来代表字符和字符串的模式。以下是一些常用的符号: ^: 匹配字符串的开头 $:匹配字符串的结尾…

    PHP 2023年5月26日
    00
  • 微信小程序 图片等比例缩放(图片自适应屏幕)

    下面是“微信小程序 图片等比例缩放”的完整攻略: 1. 问题背景 在微信小程序开发中,我们经常会使用到图片,但是由于不同设备尺寸的差异,以及不同图片大小的差异,会导致在小程序中显示的图片大小不一致,影响了小程序的美观度和用户体验度。因此,有必要实现图片自适应屏幕,并且保持图片等比例缩放的效果。 2. 解决方案 2.1 使用 rpx 单位 rpx 是小程序的一…

    PHP 2023年5月23日
    00
  • php 字符串中的\n换行符无效、不能换行的解决方法

    要让 PHP 字符串使用 “\n” 换行符进行换行,需要在字符串前面加上双引号 (“”) 或者单引号 (”),并且把换行符写为 “\n” 的形式。然而,如果你在输出字符串时,发现使用 “\n” 换行符不起作用,不能换行时,可能是因为你的字符串中包含了 HTML 标签,或者 CSS 样式,这些标签和样式会覆盖你的换行符,导致字符串无法换行。 解决该问题的方法…

    PHP 2023年5月26日
    00
  • php 数组处理函数extract详解及实例代码

    PHP中,数组是一种非常重要的数据类型,它可以存储大量数据并进行各种操作。PHP内置了许多用于处理数组的函数,其中一个比较有用的函数是extract()。本文将详细讲解extract函数的用法及实例代码。 什么是extract函数 extract是PHP内置的一个数组处理函数,用于将数组中的元素转换为独立的变量。它的原型如下: extract(array $…

    PHP 2023年5月26日
    00
  • php生成用户密码的两种方式

    下面是PHP生成用户密码的两种方式的具体攻略: 方式一:使用PHP内置函数password_hash() 使用PHP内置函数password_hash()生成密码是一种比较常用的方式。password_hash()函数能够帮助我们生成安全的哈希密码,同时也自动进行加盐操作,避免了简单的hash被彩虹表破解。 代码示例 <?php $password =…

    PHP 2023年5月26日
    00
  • PHP检查URL包含特定字符串实例方法

    下面是关于PHP检查URL包含特定字符串的完整攻略,这个攻略分为四个步骤: 步骤1: 获取URL链接 我们需要使用PHP中有关URL链接的相关函数,来获取用户当前访问的URL链接。 $url = "http://".$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’]; 步骤2: 提取URL中的关键信…

    PHP 2023年5月26日
    00
  • 让CodeIgniter数据库缓存自动过期的处理的方法

    CodeIgniter框架提供了一个非常强大的数据库缓存功能,它可以大幅度提高应用程序的性能,降低数据库服务器的负载。然而,如果不采取任何措施,缓存的过期时间将无法自动更新,导致缓存内容失效,这将会影响应用程序的可用性。因此,让CodeIgniter数据库缓存自动过期是非常必要的。 下面是让CodeIgniter数据库缓存自动过期的处理的方法的完整攻略: 步…

    PHP 2023年5月23日
    00
  • .NET Core 实现微信小程序支付功能(统一下单)

    .NET Core 实现微信小程序支付功能(统一下单)攻略 微信小程序支付功能是一种常见的电商需求,本攻略将介绍如何使用.NET Core实现微信小程序支付功能的统一下单流程。 基本流程 微信小程序支付主要包含以下基本流程: 用户在小程序中选择商品并发起支付请求; 小程序调用开发者服务器,向后端发送订单信息; 开发者服务器向微信支付服务器发起统一下单请求; …

    PHP 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部