【发布时间】:2020-05-06 05:15:16
【问题描述】:
我正在做一个有两张桌子的项目;用户表和电影表
我有代码在用户登录后提交与电影信息相关的表单,但我想要做的是只将该数据插入表中一次,插入后用户可以根据需要对其进行更新。
我已经编写了插入代码,正如您所知,每次我提交表单时它都会插入一个包含数据的新行,我希望只插入一行,然后该用户可以更新它。
我的插入代码如下
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";
}
}
}
我怎样才能让表单只提交一次,然后让它可更新 谁能帮我解决这个问题
谢谢
【问题讨论】:
-
正常方式:如果您填写表单 (html-form),则创建一个隐藏字段,其中“id”作为名称,主键 ($movie_id) 作为值。如果没有记录(新记录),则 id 为“0”。在脚本中,您可以检查 id 是 !=0(更新)还是“0”(插入)
-
也可以使用INSERT ON DUPLICATE KEY UPDATE,这样如果发生唯一密钥冲突,它就会成为更新。如果 user_id 是唯一的或 (user_id,movie_id),我没有关注。然而,两者都有效。
-
users表id为主键,movie表id为外键,movieid为主键。
-
很抱歉我忘了提及,但我在我的表单中使用了选择标签
-
听起来您可能需要两个单独的页面。 1允许唯一插入,另一个用于更新sql行。值得庆幸的是,正如先前评论中所述,只要您的数据库中有唯一的 id 标签,您就可以根据 ID 在 sql 中调用该行并将值回显到您的更新表单。