【问题标题】:Retrieving user id from one table and inserting it into another table从一个表中检索用户 ID 并将其插入到另一个表中
【发布时间】:2020-08-19 20:18:13
【问题描述】:

我正在做一个有两张桌子的项目 1.用户表| (id 为主键) 2.电影桌| (movie_id为主键,id为外键)

我想从 users 表中获取 user_id 并想在该用户登录时插入电影相关信息 我正在为此使用 session_variables 但我不知道我的代码是否正确我尝试了以下代码但没有得到任何结果。

这是我的进程.php

$errors = [];
$fav = "";
$rank = "";
$rewatched = "";
$status = "";
$recommend = "";

if (isset($_POST['submit'])) {
    if (empty($_POST['fav'])) {
        $errors['fav'] = 'Favourite required';
    }
    if (empty($_POST['rank'])) {
        $errors['rank'] = 'Rank required';
    }
    if (empty($_POST['rewatched'])) {
        $errors['rewatched'] = 'Rewatched required';
    }
    if (isset($_POST['status'])) {
        $errors['status'] = 'Status required';
    }
    if (isset($_POST['recommend'])) {
        $errors['recommend'] = 'Recommend required';
    }

    $fav = $_POST['fav'];
    $rank = $_POST['rank'];
    $rewatched = $_POST['rewatched'];
    $status = $_POST['status'];
    $recommend = $_POST['recommend'];

    // Select id from users and insert into movie
    if (count($errors) === 0) {
        $sql = "SELECT * FROM movie WHERE id = (SELECT id FROM users WHERE id = '".$_SESSION['id']."')";
        $query = "INSERT INTO movie SET fav=?, rank=?, rewatched=?, status=?, recommend=? WHERE id = '".$_SESSION['id']."'";
        $stmt = $conn->prepare($query);
        $stmt->bind_param('siiss', $fav, $rank, $rewatched, $status, $recommend);
        $result = $stmt->execute();

        if ($result) {
            $anime_id = $stmt->insert_id;
            $stmt->close();

            $_SESSION['id'] = $movie_id;
            $_SESSION['fav'] = $fav;
            $_SESSION['rank'] = $rank;
            $_SESSION['rewatched'] = $rewatched;
            $_SESSION['status'] = $status;
            $_SESSION['recommend'] = $recommend;
            $_SESSION['message'] = 'Details have been submitted successfully!';
            $_SESSION['type'] = 'alert-success';
        } else {
            $_SESSION['error_msg'] = "Database error: Could not update details";
        }
    }
}

简单来说,我想从用户表中获取 id,当该特定用户登录并填写与电影相关的表单并提交结果时,它应该与他/她的用户 id 一起存储在电影表中。

谢谢

【问题讨论】:

  • 您已经在会话中存储了用户 ID 对吗?那为什么你还需要再次从数据库中查询呢?将$sql = "SELECT * FROM movie WHERE id = (SELECT id FROM users WHERE id = '".$_SESSION['id']."')"; 更改为$sql = "SELECT * FROM movie WHERE id = $_SESSION['id']";

标签: php mysql insert


【解决方案1】:
<?php

// Assuming $_SESSION['id'] is the User ID of the User Who Currently Logged in.

$errors = [];
$fav = "";
$rank = "";
$rewatched = "";
$status = "";
$recommend = "";

if (isset($_POST['submit'])) {
    if (empty($_POST['fav'])) {
        $errors['fav'] = 'Favourite required';
    }
    if (empty($_POST['rank'])) {
        $errors['rank'] = 'Rank required';
    }
    if (empty($_POST['rewatched'])) {
        $errors['rewatched'] = 'Rewatched required';
    }
    if (isset($_POST['status'])) {
        $errors['status'] = 'Status required';
    }
    if (isset($_POST['recommend'])) {
        $errors['recommend'] = 'Recommend required';
    }

    $fav = $_POST['fav'];
    $rank = $_POST['rank'];
    $rewatched = $_POST['rewatched'];
    $status = $_POST['status'];
    $recommend = $_POST['recommend'];
    $id = $_SESSION['id'];

    // Insert into Movie Table
    if (count($errors) === 0) {
        $query = "INSERT INTO movie SET fav=?, rank=?, rewatched=?, status=?, recommend=?, id =?";
        $stmt = $conn->prepare($query);
        $stmt->bind_param('siissi', $fav, $rank, $rewatched, $status, $recommend, $id);
        $result = $stmt->execute();

        if ($result) {
            // If Insertion Successful
        } else {
            // If Something Went Wrong
        }
    }
}

在上面的代码中,当用户提交表单时,它将捕获表单详细信息并将其存储在电影表中,外键作为用户 ID。我假设$_SESSION['id'] 是当前登录用户的用户ID。

【讨论】:

  • 感谢 @Harish ST 的回复我已尝试根据您的建议更改我的代码,但我没有得到任何结果我的数据库仍然是空白
  • @Harish ST 问题出现在我的代码实现中,我已经搜索了代码中的错误,现在它工作正常谢谢@Harish ST
  • 好的!很高兴听到!
  • @Harish ST 我的数据存储在两行而不是一行中,这是为什么呢?在一行中,它将先前提交的数据存储在另一行中,它存储当前提交的数据。当我刷新我的表单时,会出现一个弹出框并给出以下声明。您正在查找的页面使用了您输入的信息。返回该页面可能会导致您重复执行的任何操作。要继续吗?
  • 是的,INSERT INTO Query 就是这样做的。如果要更改现有行,请改用UPDATE 查询。并且不要忘记提及WHERE 子句。
猜你喜欢
  • 2017-08-02
  • 2012-06-10
  • 2015-05-30
  • 1970-01-01
  • 2021-06-12
  • 2021-08-25
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
相关资源
最近更新 更多