2 回答
TA贡献1803条经验 获得超3个赞
表单显示后数据库被修改,因此新的“喜欢”状态不会反映在页面上。一种解决方案是在检查“喜欢”状态并显示表单之前修改数据库。
下面,我使用 PHP 的header
. 刷新页面不是绝对必要的,但它确实有助于防止用户刷新时重复提交。这称为Post/Redirect/Get 模式。
Post/Redirect/Get (PRG) 是一种 Web 开发设计模式,它允许重新加载、共享或添加表单提交后显示的页面而不会产生不良影响,例如再次提交表单。
if(isset($_POST['like'])) {
DB::run("INSERT INTO likes (id, lid, uid, pid) VALUES (?, ?, ?, ?)", [1, 1, $CURUSER['id'], $row['id']]);
header('Location: '.$_SERVER['REQUEST_URI']);
exit;
} elseif (isset($_POST['unlike'])) {
DB::run("DELETE FROM likes WHERE id=? AND lid=? AND uid=? AND pid=?", [1, 1, $CURUSER['id'], $row['id']]);
header('Location: '.$_SERVER['REQUEST_URI']);
exit;
}
/* Check Database */
$likes = DB::run("SELECT * FROM likes WHERE id=? AND lid=? AND uid=? AND pid=?", [1, 1, $CURUSER['id'], $row['id']])->fetch();
if (!$likes) {
/* If No Result Like */
echo "<form action='' method='post'>
<input type='submit' name='like' value='Like' />
</form>";
} else {
/* If Result UnLike */
echo "<form action='' method='post'>
<input type='submit' name='unlike' value='Unlike' />
</form>";
}
TA贡献1966条经验 获得超4个赞
没有人可以帮助你,因为我们看不到你的$likes结果,这里是伪代码,它是如何工作的,在哪里$likes硬编码为 false 开始(不喜欢),当你点击喜欢时,会显示不同按钮。在你得到这个之后,你应该调试$likes每个时刻包含的内容以及为什么它没有进入你的 if 语句:
<?php
/* Check Database */
$likes = false;
/* Check Result */
var_export($likes);
/* If No Result Like */
if (!$likes) {
echo
"<form action='' method='post'>
<input type='submit' name='like' value='Like' />
</form>";
if(isset($_POST['like']))
{
$likes = true;
}
}
/* If Result UnLike */
if ($likes) {
echo
"<form action='' method='post'>
<input type='submit' name='unlike' value='Unlike' />
</form>";
if(isset($_POST['unlike']))
{
$likes = false;
}
}
/* Show Results */
- 2 回答
- 0 关注
- 100 浏览
添加回答
举报