在另一个表(MySQL)上提交数据库之前,对一个表中的数据执行条件检查



我有一个MySQL表,作为一个数据透视/链接表,它最初包含两个列,这两个列都是外键。这两列是board_id列和image_id列。这个表基本上保存了图像分配到图像板时的数据。显然,一个板可以容纳多个图像,一个图像可以在多个板上。这个表叫做boards_images表。我正在使用PHP PDO来更新数据库。

虽然用户必须登录才能将图像添加到板上,因为这些数据是通过表单元素中的value属性(即提交按钮和输入元素)在提交表单上公开可见的,我希望能够首先运行检查,以确保将图像分配给属于登录用户的板(board_id)。用户的user_id可以通过登录的$_SESSION值获得。如果我不运行此检查,则用户可以手动更改HTML中的这些值,并将图像添加到其他用户的随机板中。

我最初的方法是boards_images链接表现在包含三列board_id,image_iduser_id,它们分别是来自板,图像和用户表的外键。

我的问题是我如何运行检查,以确保board_id属于登录用户,之前添加图像到板?

board表有user_id作为外键。

我目前使用的代码如下,它使用INSERT IGNORE来防止重复(即它防止图像被添加到同一板不止一次)。

if (isset($_POST['submit-board-name'])) {
$boardIdValue = $_POST['board-name'];           // board id value is shown in button's value attribute
$imageIdValue = $_POST['image-id-for-board'];   // hidden element that shows image id of selected image
$stmt = $connection->prepare(
"INSERT IGNORE boards_images (board_id, image_id, user_id) 
VALUES (:board_id, :image_id, :user_id)"
);
$stmt->execute([
':board_id' => $boardIdValue,
':image_id' => $imageIdValue,
':user_id' => $sessionId
]);
}

我是否需要首先从董事会表中加入SELECT的数据?

当从板上删除图像时,这是非常简单的分配给登录用户,因为我所需要做的就是在WHERE子句中添加另一个条件,即

"DELETE FROM boards_images
WHERE board_id = :board_id AND image_id = :image_id AND user_id = :user_id"
// do PDO stuff
<<p>

问题总结/strong>在为该板分配映像之前,如何检查该板是否属于登录用户?

任何帮助都是了不起的。

如果你说boards表也有一个user_id列…

$stmt = $connection->prepare(
"SELECT user_id
FROM boards
WHERE board_id = :board_id
LIMIT 1"
);
$stmt->execute([':board_id' => $boardIdValue]);
if($stmt->fetchColumn() == $sessionId) {
// The board belongs to the user, add the image
}
else {
// The board does not belong to the user, print error message etc.
}

相关内容

  • 没有找到相关文章

最新更新