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自带的ZipArchive压缩文件并下载打包好的文件

    下面我将详细讲解“php文件打包下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件”的完整攻略。 1. ZipArchive介绍 ZipArchive是PHP自5.2.0版本之后新增的一个类,用于在服务器端对文件进行压缩和解压缩操作。ZipArchive支持将多个文件或文件夹压缩为一个ZIP压缩包,并通过HTTP协议将压缩包提供给用户下载等…

    PHP 2023年5月27日
    00
  • PHP生成短网址的3种方法代码实例

    下面我来为你详细讲解“PHP生成短网址的3种方法代码实例”的完整攻略。 一、背景介绍 短网址是将长网址转换为短的URL地址,以便在文本消息、微博等场合使用,简化URL长度。PHP作为一种常用的编程语言,可以通过各种方式来实现生成短网址。下面我将介绍三种常见的方法。 二、使用网址缩短服务 第一种方法是使用外部网址缩短服务。这种方式非常简单,只需要调用外部提供的…

    PHP 2023年5月23日
    00
  • Nginx+PHP(FastCGI)搭建高并发WEB服务器(自动安装脚本)第二版

    下面我就来为大家讲解“Nginx+PHP(FastCGI)搭建高并发WEB服务器(自动安装脚本)第二版”的完整攻略。 一、前置条件 已安装CentOS 7系统。 已安装Git 二、安装 Nginx 和 PHP(FastCGI) 请参考我之前写的文章:Nginx+PHP(FastCGI)高并发WEB服务器搭建教程,这里就不再赘述。 三、安装自动化部署脚本 gi…

    PHP 2023年5月24日
    00
  • 精心收集的jQuery常用的插件1000

    “精心收集的jQuery常用的插件1000”攻略 什么是jQuery插件? jQuery插件是为JQuery编写的可重用代码块,可以轻松地将它们添加到你的网站或应用程序中。常用的JQuery插件可以让你轻松地创建动画、表单验证、幻灯片、日期选择器和其他流行的内容。 “精心收集的jQuery常用的插件1000”是什么? “精心收集的jQuery常用的插件100…

    PHP 2023年5月27日
    00
  • php实现文件管理与基础功能操作

    下面是详细讲解“PHP实现文件管理与基础功能操作”的攻略: 1. 简介 文件管理是 web 应用程序的核心要素之一。在 PHP 中,可以通过访问文件系统来实现文件管理功能。文件管理功能主要包括以下基础操作: 创建目录 创建文件 删除目录或文件 读取文件内容 写入文件内容 2. 实现文件管理功能 2.1 创建目录 可以通过 PHP 内置函数 mkdir() 来…

    PHP 2023年5月27日
    00
  • PHP采用get获取url汉字出现乱码的解决方法

    当我们在使用GET方法获取含有汉字参数的URL时,可能会出现乱码的情况,这是因为浏览器和服务器对汉字编码方式不一致所导致的。为了解决这个问题,我们需要进行以下几个步骤: 在HTML页面中指定charset 我们需要在HTML页面的head标签中添加以下代码,指定页面的字符集为utf-8,这个字符集被广泛使用,并且适用于所有语言,包括中文。 <!DOCT…

    PHP 2023年5月26日
    00
  • 详解PHP防止直接访问.php 文件的实现方法

    要防止直接访问.php文件,我们可以使用.htaccess实现。下面是详解PHP防止直接访问.php文件的实现方法的完整攻略。 第一步:创建.htaccess文件 在.php文件所在的目录中创建一个名为.htaccess的文件,并在该文件中添加以下代码: # 禁止直接访问 PHP 文件 <Files *.php> Deny from all &l…

    PHP 2023年5月26日
    00
  • php foreach如何跳出两层循环(详解)

    在PHP中,可以使用for、while、do-while等多种循环结构循环遍历数组,但是foreach循环结构相比其他循环结构更加方便简洁。在某些情况下,我们需要从嵌套的foreach循环中跳出,具体细节如下: 使用break 2语句 在foreach循环中,我们可以使用break关键字来跳出当前的循环,但是如果有嵌套的循环,break只能跳出当前的循环。为…

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