php点击验证码怎么保存
时间 : 2023-03-28 05:10:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

在PHP中,要保存验证码需要将验证码图片生成的数据保存到session中。在下面的代码中,我们使用验证码类来生成验证码图片,然后将验证码的值保存到session中。当用户提交表单时,我们可以检查用户输入的验证码是否与session中保存的验证码值相同。您可以按照以下步骤进行操作:

第一步:生成验证码图片

在PHP中,我们可以使用验证码类来生成验证码图片。这里是一个简单的示例代码:

<?php

session_start();

//创建画布

$im = imagecreatetruecolor(100, 30);

//设置背景颜色

$bg_color = imagecolorallocate($im, 255, 255, 255);

imagefill($im, 0, 0, $bg_color);

//生成随机字符串

$code = substr(md5(mt_rand()), 0, 4);

//将验证码保存到session中

$_SESSION['code'] = $code;

//生成验证码图片

$text_color=imagecolorallocate($im, 0, 0, 0);

imagestring($im, 5, 30, 6, $code, $text_color);

//输出验证码图片

header("Content-type: image/png");

imagepng($im);

//销毁画布

imagedestroy($im);

?>

上面的代码中,我们使用了`imagecreatetruecolor`函数创建了一个100x30的画布。然后我们用`imagefill`函数填充了整个画布为白色。接着,我们使用了`substr`函数和`md5`函数生成了一个长度为4的随机字符串,将其保存到`$_SESSION['code']`中,最后使用`imagestring`函数把生成的验证码字符串写到画布上。最后使用"Content-type: image/png"设置http头,输出验证码图片。

第二步:验证用户输入的验证码

当用户提交表单时,我们可以检查用户输入的验证码是否与保存在session中的验证码值相同。这里是一个简单的示例代码:

<?php

session_start();

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

$code = $_POST['code'];

if(strtolower($code) == strtolower($_SESSION['code'])){

echo "验证通过";

}else{

echo "验证码错误";

}

}

?>

<form action="" method="post">

<label for="code">验证码:</label>

<input type="text" name="code" id="code">

<img src="captcha.php" alt="验证码">

<br>

<input type="submit" name="submit" value="提交">

</form>

在上面的代码中,我们首先启动了session,然后判断表单是否提交,如果是,则获取用户输入的验证码值,将其转换为小写字母,与保存在session中的验证码值比较。如果两个值相同,则输出"验证通过",否则输出"验证码错误"。在表单中,我们使用了`<img>`标签来显示验证码,其`src`属性为验证码图片的地址。

综上所述,通过上面的示例代码,您现在应该可以保存验证码并在用户提交表单时进行验证。

在 PHP 中,实现点击验证码保存有多种方法,以下是其中一种常见的做法:

1. 创建一个用于保存验证码信息的表,可以命名为 `verification_codes`,表结构可以如下:

CREATE TABLE verification_codes (

id INT(11) NOT NULL AUTO_INCREMENT,

code VARCHAR(32) NOT NULL,

clicked_at TIMESTAMP DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

其中 `code` 字段用于保存验证码的值,`clicked_at` 字段用于保存验证码点击的时间。

2. 在生成验证码时,在验证码的 HTML 标签中加入一个 JavaScript 函数,用于向服务器发送验证码点击请求,例如:

<img src="captcha.php" onclick="clickCaptcha(this)" />

<script>

function clickCaptcha(imgElement) {

var code = imgElement.src.split('?')[1]; // 筛选出图片URL中的验证码

var xhr = new XMLHttpRequest();

xhr.open('POST', 'save_code.php', true);

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

xhr.onreadystatechange = function() {

if (xhr.readyState === 4 && xhr.status === 200) {

// 当请求成功后的操作

}

}

xhr.send('code=' + code);

}

</script>

这段代码中,点击验证码图片时会触发 `clickCaptcha` 函数,该函数首先从图片 URL 中筛选出验证码的值 `code`,然后向服务器发送 POST 请求,将验证码的值发送给 `save_code.php` 页面进行处理。

3. 在 `save_code.php` 页面中,接收前端传递的验证码值,在数据库中查找对应的记录,修改 `clicked_at` 字段的值为当前时间,表示验证码被点击过。代码实现如下:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

$code = isset($_POST['code']) ? trim($_POST['code']) : '';

if ($code) {

$pdo = new PDO('mysql:host=localhost;dbname=my_database;charset=utf8', 'username', 'password');

$sql = 'UPDATE verification_codes SET clicked_at = NOW() WHERE code = ?';

$stmt = $pdo->prepare($sql);

$stmt->execute([$code]);

echo 'success';

}

}

这段代码中,先从 POST 请求中获取验证码的值,并建立与数据库的连接。然后执行 SQL 更新语句,将对应验证码的 `clicked_at` 字段置为当前时间。最后输出 `success`,表示保存验证码点击信息成功。

这样就完成了点击验证码保存信息的操作。需要注意的是,在实际应用中,为了防止恶意攻击,需要做好对于验证码的生成和验证的安全性控制。