首页 > 解决方案 > 我想让用户只提交一次表单,然后他可以更新它

问题描述

我正在做一个有两张桌子的项目;用户表和电影表

我有代码在用户登录后提交与电影信息相关的表单,但我想要做的只是将该数据插入表中一次,插入后用户可以根据需要更新它。

正如您所知,我已经编写了插入代码,每次提交表单时它都会插入一个包含数据的新行,我希望只插入一行,然后该用户可以更新它。

我的插入代码如下


if (isset($_POST['an-submit'])) {
    if (empty($_POST['anfav'])) {
        $errors['anfav'] = 'Favourite required';
    }
    if (empty($_POST['anrank'])) {
        $errors['anrank'] = 'Rank required';
    }
    if (empty($_POST['anrewatched'])) {
        $errors['anrewatched'] = 'Rewatched required';
    }
    if (empty($_POST['anstatus'])) {
        $errors['anstatus'] = 'Status required';
    }
    if (empty($_POST['anrecommend'])) {
        $errors['anrecommend'] = 'Recommend required';
    }

    $anfav = $_POST['anfav'];
    $anrank = $_POST['anrank'];
    $anrewatched = $_POST['anrewatched'];
    $anstatus = $_POST['anstatus'];
    $anrecommend = $_POST['anrecommend'];
    $id = $_SESSION['id'];

    // Select id from users and insert into movie
    if (count($errors) === 0) {
        $query = "INSERT INTO anime SET movie_fav=?, movie_rank=?, movie_rewatch=?, movie_status=?, movie_rec=?, id =?";
        $stmt = $conn->prepare($query);
        $stmt->bind_param('siissi', $anfav, $anrank, $anrewatched, $anstatus, $anrecommend, $id);
        $result = $stmt->execute();

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

            $_SESSION['movieid'] = $movie_id;   
            $_SESSION['anfav'] = $anfav;
            $_SESSION['anrank'] = $anrank;
            $_SESSION['anrewatched'] = $anrewatched;
            $_SESSION['anstatus'] = $anstatus;
            $_SESSION['anrecommend'] = $anrecommend;
            $_SESSION['message'] = 'Details have been submitted successfully!';
            $_SESSION['type'] = 'alert-success';
            header('location: movieinfo.php');
        } else {
            $_SESSION['error_msg'] = "Database error: Could not update details";
        }
    }
}

我怎样才能使表单只提交一次,然后使它可更新任何人都可以帮助我吗

谢谢

标签: phpmysqlrow

解决方案


您可以使用最后插入的 id 重定向到 movieinfo.php, header('location: movieinfo.php?movie_id='.$movie_id);无需在会话中存储所有字段的数据。在movieinfo.php 中,您可以从相应的表中获取movie_id 的详细信息并将其显示在HTML 表单中以进行更新。

例如:

if (isset($_POST['an-submit'])) {
    if (empty($_POST['anfav'])) {
        $errors['anfav'] = 'Favourite required';
    }
    if (empty($_POST['anrank'])) {
        $errors['anrank'] = 'Rank required';
    }
    if (empty($_POST['anrewatched'])) {
        $errors['anrewatched'] = 'Rewatched required';
    }
    if (empty($_POST['anstatus'])) {
        $errors['anstatus'] = 'Status required';
    }
    if (empty($_POST['anrecommend'])) {
        $errors['anrecommend'] = 'Recommend required';
    }

    $anfav = $_POST['anfav'];
    $anrank = $_POST['anrank'];
    $anrewatched = $_POST['anrewatched'];
    $anstatus = $_POST['anstatus'];
    $anrecommend = $_POST['anrecommend'];
    $id = $_SESSION['id'];

    // Select id from users and insert into movie
    if (count($errors) === 0) {
        $query = "INSERT INTO anime SET movie_fav=?, movie_rank=?, movie_rewatch=?, movie_status=?, movie_rec=?, id =?";
        $stmt = $conn->prepare($query);
        $stmt->bind_param('siissi', $anfav, $anrank, $anrewatched, $anstatus, $anrecommend, $id);
        $result = $stmt->execute();

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

            $_SESSION['message'] = 'Details have been submitted successfully!';
            $_SESSION['type'] = 'alert-success';
            header('location: movieinfo.php?movie_id='.$movie_id);
        } else {
            $_SESSION['error_msg'] = "Database error: Could not update details";
$_SESSION['type'] = 'alert-error';
        }
    }
}

推荐阅读