直接复制粘贴即可使用。。。
增加美化一下就可以,附带题库接口
文章末尾附带了免费的题库接口,大佬们轻点用,
1. 设置后端(PHP)
数据库设置
首先,设置一个数据库来存储用户信息和API使用计数。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE api_usage (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
ip_address VARCHAR(45) NOT NULL,
request_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
PHP 后端用于 API 集成
创建 PHP 脚本来处理用户注册、登录和 API 使用。
注册 (register.php
)
<?php
// 数据库连接
$conn = new mysqli("localhost", "username", "password", "dbname");
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 初始化变量
$username = $password = $email = "";
// 处理表单提交
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT); // 使用默认的密码哈希算法加密密码
$email = $_POST['email'];
// 插入到用户表
$stmt = $conn->prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $username, $password, $email);
if ($stmt->execute()) {
// 保存用户名到会话,以便在登录页面显示
session_start();
$_SESSION['registered_username'] = $username;
$_SESSION['registered_password'] = $_POST['password']; // 这里直接存储明文密码,实际应用中应当考虑更安全的方式
// 关闭数据库连接
$stmt->close();
$conn->close();
// 重定向到登录页面
header("Location: login.html");
exit();
} else {
echo "错误: " . $stmt->error;
}
$stmt->close();
}
$conn->close();
?>
3. 修改 login.php
在验证用户登录信息正确后,添加页面重定向到查题页面
<?php
// 数据库连接
$conn = new mysqli("localhost", "username", "password", "dbname");
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 初始化变量
$username = $password = "";
// 处理表单提交
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];
// 查询用户信息
$stmt = $conn->prepare("SELECT id, username, password FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
if ($user && password_verify($password, $user['password'])) {
// 开始会话并存储用户ID
session_start();
$_SESSION['user_id'] = $user['id'];
// 关闭数据库连接
$stmt->close();
$conn->close();
// 重定向到查题页面
header("Location: quiz.html");
exit();
} else {
echo "用户名或密码错误";
}
$stmt->close();
}
$conn->close();
?>
4. 创建 quiz.php 处理查询逻辑
在 quiz.php 文件中,处理从前端发送过来的问题查询请求,并将结果返回给前端页面。
<?php
session_start();
// 检查用户是否已登录,如果未登录则返回错误信息
if (!isset($_SESSION['user_id'])) {
die("未经授权的访问");
}
// 数据库连接
$conn = new mysqli("localhost", "username", "password", "dbname");
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$user_id = $_SESSION['user_id'];
$question = $_GET['question'];
$api_url = "http://zr.026wk.xyz/youapi.php?question=" . urlencode($question);
// 示例:获取 API 数据
$response = file_get_contents($api_url);
$data = json_decode($response, true);
if ($data && isset($data['answer'])) {
// 更新数据库中的 API 使用次数
$ip_address = $_SERVER['REMOTE_ADDR'];
$stmt = $conn->prepare("INSERT INTO api_usage (user_id, ip_address) VALUES (?, ?)");
$stmt->bind_param("is", $user_id, $ip_address);
$stmt->execute();
$stmt->close();
// 格式化输出答案
$result = "<div class='card mt-4'>";
$result .= "<div class='card-body'>";
$result .= "<h5 class='card-title'>问题:</h5>";
$result .= "<p class='card-text'>{$question}</p>";
$result .= "<h5 class='card-title'>答案:</h5>";
$result .= "<p class='card-text lead'>{$data['answer']}</p>";
$result .= "</div>";
$result .= "</div>";
echo $result;
} else {
echo "<p class='text-danger'>从 API 获取数据时出错</p>";
}
$conn->close();
?>
前端界面
1.改进后的 quiz.html 页面
保持不变,继续使用之前优化的 HTML 结构和 jQuery AJAX 请求来处理查询并在页面下方显示结果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>查题页面</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<style>
.container {
max-width: 600px;
margin-top: 50px;
}
#result {
margin-top: 20px;
}
</style>
</head>
<body>
<div class="container">
<h2 class="text-center mb-4">查题页面</h2>
<form id="quizForm">
<div class="input-group mb-3">
<input type="text" class="form-control" id="question" name="question" placeholder="请输入问题" required>
<div class="input-group-append">
<button class="btn btn-primary" type="submit">查询</button>
</div>
</div>
</form>
<div id="result" class="text-center">
<!-- 查询结果将显示在这里 -->
</div>
</div>
<!-- 引入 jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
$(document).ready(function() {
// 捕获表单提交事件
$('#quizForm').submit(function(event) {
// 阻止默认提交行为
event.preventDefault();
// 获取表单数据
var formData = $(this).serialize();
// 发送 AJAX 请求
$.ajax({
type: 'GET',
url: 'quiz.php',
data: formData,
beforeSend: function() {
$('#result').html('<p class="text-muted">正在查询...</p>');
},
success: function(response) {
// 将查询结果显示在页面下方的 result 区域
$('#result').html(response);
},
error: function() {
$('#result').html('<p class="text-danger">查询出错,请稍后重试。</p>');
}
});
});
});
</script>
</body>
</html>
2. 更新 login.html
确保登录页面(login.html)的表单 action 指向正确的 PHP 脚本(login.php),以便处理用户提交的登录信息。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h2>用户登录</h2>
<form action="login.php" method="post">
<div class="form-group">
<label for="username">用户名:</label>
<input type="text" class="form-control" id="username" name="username" required>
</div>
<div class="form-group">
<label for="password">密码:</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<button type="submit" class="btn btn-primary">登录</button>
</form>
</div>
</body>
</html>
3.注册表单 (register.html
)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户注册</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h2>用户注册</h2>
<form action="register.php" method="post">
<div class="form-group">
<label for="username">用户名:</label>
<input type="text" class="form-control" id="username" name="username" required>
</div>
<div class="form-group">
<label for="password">密码:</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<div class="form-group">
<label for="email">邮箱:</label>
<input type="email" class="form-control" id="email" name="email" required>
</div>
<button type="submit" class="btn btn-primary">注册</button>
</form>
</div>
</body>
</html>
4. 其他考虑
- 安全性: 始终对用户输入进行清理和验证,以防止 SQL 注入和其他安全漏洞。
- 会话管理: 使用会话在页面之间保持用户认证状态。
- 错误处理: 实现健壮的错误处理和日志记录以便更好地进行故障排除。
- API 使用限制: 监控并限制每个用户的 API 使用次数,以防止滥用。
这些设置提供了一个基本的结构,集成了 Bootstrap 进行前端样式设计,使用 PHP 处理后端逻辑,包括用户注册、登录和 API 使用追踪。根据您的具体需求和安全考虑,调整和扩展这些示例。
结语:
1.可以直接复制服务器就能用
免费接口https://zr.026wk.xyz/youapi.php?question=