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 關注
- 139 瀏覽
添加回答
舉報