【发布时间】:2026-01-11 13:30:01
【问题描述】:
我正在创建网站项目,您可以在帖子发布后对其进行编辑。我已经使用 PHP、SQL 和 jQuery 创建了网站,所有发布到该网站的帖子都通过 while 循环(不包括在此问题内容中)输出到网站“提要”。所有帖子在发布时(在数据库中)都有一个唯一的 ID。
我现在遇到的问题是第二种形式(post__edit)根本没有提示。
我发现我需要在 <input type="hidden" value="$postID"> 字段中传递帖子的 ID。下面的这个表单只是提示实际的 post_edit 表单,该表单用于提交帖子更改。
echo '
<form method="post">
<button type="button" class="post__editBtn">Edit post</button>
<input type="hidden" name="post__editHidden" value="'.$postID.'">
</form>';
当按钮类:post__editBtn 被点击时,会触发一个 jQuery 点击事件监听器,该事件监听器会以淡入淡出的形式 (post_edit) 让您对帖子进行更改并提交。
$('.post__editBtn').click(function() {
$('.post__edit').fadeIn();
});
然后我有一个 PHP if 语句,用于检查隐藏值是否已设置。如果有,那么我会回显之前隐藏的表单,并分配一个 SESSION 变量,以便稍后在执行 UPDATE 查询时使用。
if(isset($_POST['post__editHidden'])) {
$_SESSION['post__editHidden'] = $_POST['post__editHidden'];
echo'
<form method="post" action="../../php/includes/updatePost.php" class="post__edit">
<input type="text" name="postTitle" placeholder="Edit title" required>
<textarea name="postMsg" maxlength="255" placeholder="Edit message" required></textarea>
<button type="submit">Edit Post</button>
<button class="post__edit-close">Close</button>
</form>';
}
总结
- 第一个表单为正确的帖子触发 jQuery 淡入效果(使用 $postID)
- jQuery 只是以第二种形式淡出 (post__edit)
- 第二种形式 (post__edit) 采用
post__editHidden值(正确帖子的正确 ID)并将其分配给 SESSION 变量,该变量以后可用于进行 SQL UPDATE 查询,当最终提交第二个表单(到 updatePost.php)时运行。
我相信因为我将第一个表单按钮设置为type="button",所以它不会提交表单,所以isset($_POST['post__editHidden'] 不会运行。但是,如果我将按钮更改为正常的提交类型,那么第一个表单就会出现并重新加载它所在的页面。我可以在我的 jQuery fadeIn 中只使用 e.preventDefault,但我不知道这是否有效。
我对 PHP 和 SQL 很陌生,所以我可能全都错了。还是谢谢!
【问题讨论】:
-
隐藏输入的表单中没有提交按钮。
-
所有 php 和初始 HTML 表单都在同一个页面中? php_self ?
-
@Bilel 两个 HTML 表单都在同一个页面上(在同一个 php 脚本中),它们在 while 循环中输出,该循环检查数据库表中的帖子,然后显示所有帖子。
-
@Barmar 是的,我在帖子中说过。如果我有一个类型为 submit 的按钮,那么页面只会重新加载并且不会显示辅助表单。但我不知道如何更好地构建脚本。
-
有不同的方法来解决它......比如通过向表单添加 Id 并使用 On submit 方法处理......