You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击「加入想读清单」按钮时如何将传递的ISBN存入MySQL数据库

嘿,我来帮你搞定这个需求!要实现点击「加入想读清单」按钮把ISBN存入数据库,咱们可以分前端交互和后端数据库处理两部分来做,下面是具体的步骤和代码示例:

1. 前端修改:用AJAX实现无跳转添加(推荐)

这种方式不用跳转到新页面,用户体验更好。咱们先修改按钮的点击逻辑,再写对应的JS代码发送请求:

<!-- 把原来的a标签改成按钮,或者保留a标签但阻止跳转行为 -->
<button class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" onclick="addToWantRead()">Add to 'Want to Read'</button>

<script>
function addToWantRead() {
    // 获取页面上显示的ISBN
    const isbn = document.getElementById('isbn').textContent.trim();
    // 这里要获取当前登录用户的userID,假设你已经通过session保存了用户ID
    const userId = <?php echo $_SESSION['userID']; ?>; 

    // 先检查ISBN是否有效
    if (!isbn) {
        alert('无法获取书籍ISBN,请重试');
        return;
    }

    // 用fetch发送POST请求到后端处理脚本
    fetch('add_to_want_read.php', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        // 编码参数避免特殊字符问题
        body: `userID=${userId}&isbn=${encodeURIComponent(isbn)}`
    })
    .then(response => response.text())
    .then(data => {
        if (data === 'success') {
            alert('已成功加入想读清单!');
            // 可以在这里把按钮改成"已加入"状态,避免重复点击
            event.target.disabled = true;
            event.target.textContent = '已加入想读清单';
        } else {
            alert('添加失败:' + data);
        }
    })
    .catch(error => {
        console.error('请求出错:', error);
        alert('添加失败,请稍后重试');
    });
}
</script>

⚠️ 注意:要确保你的页面已经开启了Session(在bookdetails.php开头加上<?php session_start(); ?>),并且已经实现了用户登录逻辑,把用户ID存在$_SESSION['userID']里。

2. 后端创建处理插入的PHP脚本(add_to_want_read.php)

这个脚本负责接收前端传来的参数,连接数据库,执行插入操作,还要处理重复添加的情况:

<?php
session_start();
// 先验证用户是否登录
if (!isset($_SESSION['userID'])) {
    echo '请先登录后再操作';
    exit;
}

// 获取前端传递的参数
$userID = $_POST['userID'];
$isbn = $_POST['isbn'];

// 验证参数合法性
if (empty($userID) || empty($isbn)) {
    echo '参数错误,请重试';
    exit;
}

// 替换成你的数据库连接信息
$servername = "localhost";
$dbUsername = "你的数据库用户名";
$dbPassword = "你的数据库密码";
$dbName = "你的数据库名称";

// 创建数据库连接
$conn = new mysqli($servername, $dbUsername, $dbPassword, $dbName);

// 检查连接是否成功
if ($conn->connect_error) {
    die("数据库连接失败: " . $conn->connect_error);
}

// 先检查用户是否已经添加过这本书(避免重复记录)
$checkSql = "SELECT * FROM bookswantstoread WHERE userID = ? AND ISBN = ?";
$checkStmt = $conn->prepare($checkSql);
// "is"表示第一个参数是int类型,第二个是string类型
$checkStmt->bind_param("is", $userID, $isbn);
$checkStmt->execute();
$result = $checkStmt->get_result();

if ($result->num_rows > 0) {
    echo '这本书已经在你的想读清单里啦';
    $checkStmt->close();
    $conn->close();
    exit;
}

// 如果没重复,执行插入操作
$insertSql = "INSERT INTO bookswantstoread (userID, ISBN) VALUES (?, ?)";
$insertStmt = $conn->prepare($insertSql);
$insertStmt->bind_param("is", $userID, $isbn);

if ($insertStmt->execute()) {
    echo 'success';
} else {
    echo '数据库错误: ' . $insertStmt->error;
}

// 关闭所有连接和语句
$insertStmt->close();
$checkStmt->close();
$conn->close();
?>

3. 额外注意事项

  • 安全防护:上面用了预处理语句(prepare+bind_param),这是防止SQL注入的最佳实践,千万不要直接把变量拼接到SQL语句里。
  • 重复检查:添加前先查询用户是否已经添加过同一本书,避免数据库出现重复数据。
  • 用户权限:后端要再次验证$_SESSION['userID']和提交的userID是否一致,防止恶意伪造用户ID。
  • ISBN验证:可以在前端或后端额外验证ISBN的格式(比如10位或13位),过滤无效的ISBN。

备选方案:跳转页面处理添加

如果你更倾向于点击按钮跳转到新页面处理,也可以这样做:

修改按钮的链接:

<a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="wanttoread.php?isbn=<?php echo $ISBN; ?>">Add to 'Want to Read'</a>

然后在wanttoread.php里处理插入逻辑(和上面的add_to_want_read.php逻辑基本一致),完成后再跳回书籍详情页:

<?php
session_start();
if (!isset($_SESSION['userID'])) {
    header('Location: login.php');
    exit;
}

$isbn = $_GET['isbn'];
$userID = $_SESSION['userID'];

// 数据库连接和插入逻辑(和上面的add_to_want_read.php一样)
// ... 省略连接和插入代码 ...

// 插入完成后跳回书籍详情页,带成功提示
header('Location: bookdetails.php?isbn=' . $isbn . '&msg=added');
exit;
?>

内容的提问来源于stack exchange,提问作者Natalie Neill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:01:26