【发布时间】:2023-03-08 06:52:01
【问题描述】:
我有一个页面在初始上传后从数据库中获取图像,允许用户为图像添加标题和标签。
我已设置while 循环以在一个表单中输出单个图像。每个图像都有两个相关的输入字段。我想做的是,当提交表单时,数据库中的所有信息都会一次性更新(即使相关输入字段中的图像详细信息保持空白/未填写)。
为了实现这一点,我想我可以在while 循环之外设置表单的提交按钮。但是,这并没有按预期工作。它基本上一次更新一张图像,每次我按下提交时(它会更新循环中的最后一张图像)。
如何获取它,以便它在提交时一次性处理 while 循环内所有图像的所有信息?如果我将提交按钮放在循环中,我会为每个图像获得一个按钮,这是我不想要的。
注意:<img/> 源路径我刚刚在下面硬编码以保存添加实现此目的的不同变量,从而希望使代码更简单。
从数据库中获取数据并输出 HMTL 表单
<?php isset($_REQUEST['username']) ? $username = $_REQUEST['username'] : header("Location: login.php"); ?>
<form method="post" enctype="multipart/form-data">
<?php
if (isset($_SESSION['logged_in'])) {
$user_id = $_SESSION['logged_in'];
}
$stmt = $connection->prepare("SELECT * FROM lj_imageposts WHERE user_id = :user_id");
$stmt->execute([
':user_id' => $user_id
]);
while ($row = $stmt->fetch()) {
$db_image_filename = htmlspecialchars($row['filename']);
?>
<div class="upload-details-component">
<div class="form-row">
<img src="/project/images/image.jpg">
</div>
<div class="edit-zone">
<div class="form-row">
<label for="upload-details-title">Image Title</label>
<input id="upload-details-title" type="text" name="image-title">
</div>
<div class="form-row">
<label for="upload-details-tags">Comma Separated Image Tags</label>
<textarea id="upload-details-tags" type="text" name="image-tags"></textarea>
</div>
<div class="form-row">
<input type="hidden" name="username" value="<?php echo $username; ?>">
<input type="hidden" name="image-filename" value="<?php echo $db_image_filename; ?>">
</div>
</div>
</div>
<?php } ?>
<button type="submit" name="upload-submit">COMPLETE UPLOAD</button>
</form>
在提交表单时更新数据库
<?php
if(isset($_POST['upload-submit'])) {
$image_title = $_POST['image-title'];
$image_tags = $_POST['image-tags'];
$form_filename = $_POST['image-filename']; // value attribute from hidden form element
try {
$sql = "UPDATE lj_imageposts SET
image_title = :image_title,
image_tags = :image_tags
WHERE filename = :filename";
$stmt = $connection->prepare($sql);
$stmt->execute([
':image_title' => $image_title,
':image_tags' => $image_tags,
':filename' => $form_filename
]);
// This is the URL to this actual page (basically refreshes the page)
header("Location: upload-details.php?username={$username}");
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
// give values an empty string to avoid an error being thrown before form submission if empty
$image_title = $image_tags = "";
}
?>
【问题讨论】:
-
funfact,跟随 Location:directs 是可选的,对于黑客来说不跟随 Location 重定向是微不足道的。
-
嗨@Don'tPanic - 是的。我几乎肯定会把它标记为正确的,并在它到期时将赏金分配给你。非常感谢。