一个实现登陆后查询网课答案的程序(带题库API接口)

 直接复制粘贴即可使用。。。

增加美化一下就可以,附带题库接口

文章末尾附带了免费的题库接口,大佬们轻点用,

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=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值