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

如何通过PHP和HTML点击链接向MySQL插入用户房产浏览记录

实现点击房源链接时插入用户选择记录的方案

针对你的需求,这里提供两种简单易实现的方法,同时兼顾安全性和用户体验:

方案一:在详情页直接处理插入逻辑(最简单)

这种方法无需额外页面,用户点击链接跳转到房源详情页时,先执行插入操作,再展示房源信息。

  1. 修改房源链接,传递房源ID参数
    把原表格中的房源ID链接修改为带参数的形式:
<td><a href="about_house.php?house_id=<?= $row['Id_house']; ?>"><?= $row['Id_house']; ?></a></td>
  1. 在about_house.php开头添加插入逻辑
    确保页面开头先初始化数据库连接和Session,然后执行插入:
<?php
include "db.php";
session_start();

// 验证用户登录状态和房源ID参数
if (isset($_SESSION['Id_user']) && isset($_GET['house_id'])) {
    $user_id = $_SESSION['Id_user'];
    $house_id = $_GET['house_id'];

    // 用预处理语句防止SQL注入
    $stmt = $mysqli->prepare("INSERT INTO user_choice (user_id, house_id) VALUES (?, ?)");
    // 假设user_id和house_id都是整数类型,用"ii"绑定;如果是字符串则用"ss"
    $stmt->bind_param("ii", $user_id, $house_id);
    $stmt->execute();
    $stmt->close();
}

// 后续的房源详情展示逻辑...
?>

如果要避免同一用户重复插入同一房源的记录,可以先检查是否已存在:

// 先查询是否已有该记录
$check_stmt = $mysqli->prepare("SELECT id FROM user_choice WHERE user_id = ? AND house_id = ?");
$check_stmt->bind_param("ii", $user_id, $house_id);
$check_stmt->execute();
$check_stmt->store_result();

// 只有不存在时才插入
if ($check_stmt->num_rows === 0) {
    $insert_stmt = $mysqli->prepare("INSERT INTO user_choice (user_id, house_id) VALUES (?, ?)");
    $insert_stmt->bind_param("ii", $user_id, $house_id);
    $insert_stmt->execute();
    $insert_stmt->close();
}

$check_stmt->close();

方案二:AJAX异步插入(无跳转等待,体验更好)

这种方法通过JavaScript发送异步请求插入记录,完成后再跳转到详情页,页面不会出现加载等待。

  1. 修改房源链接,添加自定义属性
<td><a href="about_house.php?house_id=<?= $row['Id_house']; ?>" class="house-link" data-house-id="<?= $row['Id_house']; ?>"><?= $row['Id_house']; ?></a></td>
  1. 添加JavaScript处理点击事件
    利用页面已引入的jQuery,在页面底部添加:
$(document).ready(function() {
    $('.house-link').click(function(e) {
        e.preventDefault(); // 阻止默认跳转
        const houseId = $(this).data('house-id');
        const userId = <?php echo $_SESSION['Id_user']; ?>;
        const targetUrl = $(this).attr('href');

        // 发送异步请求插入记录
        $.post('insert_choice.php', { user_id: userId, house_id: houseId }, function() {
            // 请求完成后跳转到详情页
            window.location.href = targetUrl;
        });
    });
});
  1. 创建insert_choice.php处理插入请求
<?php
include "db.php";
session_start();

if (isset($_POST['user_id']) && isset($_POST['house_id'])) {
    $user_id = $_POST['user_id'];
    $house_id = $_POST['house_id'];

    // 预处理语句防注入,可选添加重复检查
    $stmt = $mysqli->prepare("INSERT INTO user_choice (user_id, house_id) VALUES (?, ?)");
    $stmt->bind_param("ii", $user_id, $house_id);
    $stmt->execute();
    $stmt->close();
}
?>

关键注意事项

  • SQL注入防护:必须使用预处理语句,绝对不能直接把用户输入的参数拼接到SQL语句中。
  • 重复记录控制:可以给user_choice表添加user_id和house_id的联合唯一索引,或者通过前置查询避免重复插入。
  • 登录状态验证:所有插入操作都要检查用户是否已登录,防止未登录用户的无效请求。

内容的提问来源于stack exchange,提问作者Oleksandr Mazur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:05:22