我有一个MySQL表,作为一个数据透视/链接表,它最初包含两个列,这两个列都是外键。这两列是board_id
列和image_id
列。这个表基本上保存了图像分配到图像板时的数据。显然,一个板可以容纳多个图像,一个图像可以在多个板上。这个表叫做boards_images
表。我正在使用PHP PDO来更新数据库。
虽然用户必须登录才能将图像添加到板上,因为这些数据是通过表单元素中的value
属性(即提交按钮和输入元素)在提交表单上公开可见的,我希望能够首先运行检查,以确保将图像分配给属于登录用户的板(board_id
)。用户的user_id
可以通过登录的$_SESSION
值获得。如果我不运行此检查,则用户可以手动更改HTML中的这些值,并将图像添加到其他用户的随机板中。
我最初的方法是boards_images
链接表现在包含三列board_id
,image_id
和user_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.
}