我回来查看我的问题,并被告知它已“被作者自愿删除”,但我没有删除它!所以我不知道那里发生了什么。所以现在我得再问一遍,希望这一次能留在这里!
我有一个显示许多图像的 PHP 脚本页面。我正在设置一种方法,登录用户可以单击图像下方的链接来“喜欢”该图像(使其成为“收藏”) - 如果它已经是收藏,则“不喜欢”它。用户当前的“相似状态”保存在 MySQL 数据库中(作为 1 或 0)。
我的 PHP 页面遍历图像记录(以及一些分页逻辑),轮询数据库并根据返回的“like state”在每个图像下输出不同的链接。为已经“喜欢”的图像绘制一种形式的链接,为未“喜欢”的图像绘制另一种形式(每个使用两个不同的 css 类中的一个以显示为视觉反馈的翻转类型图标)。
它看起来像这样:
<?php
$step = 0;
while($row = $statement3->fetch()) {
$step++;
$ThisPhotoID = $row['photoid'];
echo '<img src="images/'.$ThisPhotoID.'.jpg" alt="" />';
echo '<div class="info">';
$statement4 = $db->prepare("SELECT COUNT(*) FROM `likes` WHERE `username` = ? AND `photoid` = ?");
$statement4->execute(array($username, $ThisPhotoID));
if (!$statement4->fetchColumn() > 0) {
//Favourite doesn't exist for this user, so invite to "like"...
echo '<a href="#" id="linkid'.$step.'" title="Click to like this photo" class="like"> </a>';
}
else {
//Favourite does exist for this user, so check if already "liked" or not...
$LikeState = 1;
$statement5 = $db->prepare("SELECT COUNT(*) FROM `likes` WHERE `username` = ? AND `photoid` = ? AND `likestate` = ?");
$statement5->execute(array($username, $ThisPhotoID, $LikeState));
if ($statement5->fetchColumn() > 0) {
//Favourite exists and it is liked, so invite to "unlike"...
echo '<a href="#" id="linkid'.$step.'" title="Click to UNLIKE this photo" class="unlike"> </a>';
}
else {
//Favourite exists but it is not "liked", so invite to "like"...
echo '<a href="#" id="linkid'.$step.'" title="Click to like this photo" class="like"> </a>';
}
}
echo '</div>';
}
?>
这一切正常,并根据是否“喜欢”为每个图像绘制适当的链接。目前,链接引用只是散列,因为我想知道如何进行处理以更改“类似状态”。
我准备好了一个处理脚本,我可以用它的名字代替哈希,它可以在查询字符串中获取 $ThisPhotoID 变量,并更新数据库(切换“like state”),然后通过 a 返回到页面PHP 标头 - 可能是锚点。
该处理脚本看起来像这样:
<?php
include("login.php");
$username = $session->username;
include('db_connect.php');
//This would be used in the link's query string...
$PhotoID = $_GET['photoid'];
//Get existing "likestate"...
$askstatement = $db->prepare("SELECT `likestate` FROM `likes` WHERE `username` = ? AND `photoid` = ?");
$askstatement->execute(array($username, $PhotoID));
$CurrentLikeState = $askstatement->fetchColumn(0); // Will be 1 or 0.
//Make new likestate...
if ($CurrentLikeState == 1) {
$NewLikeState = 0;
}
else {
$NewLikeState = 1;
}
//Change the like state...
$update_statement = $db->prepare("UPDATE `likes` SET `likestate` = ? WHERE `username` = ? AND `photoid` = ?");
$update_statement->execute(array($NewLikeState, $username, $PhotoID));
header("Location:mypage.php");
?>
但这并不理想,我想知道是否可以通过 Ajax 进行更新,而无需离开或刷新页面,也许使用 JQuery。据我所知,要做到这一点,我需要包括 JQuery,并且:
- 插入一个js函数
- 在每个链接中插入一个 js onclick 事件
- 在处理文件中构建新形式的链接,供 javacsript/ajax 用作替换链接
这是我需要帮助的 javascript/ajax 代码,但我对它可能如何工作感到有点困惑 - 如果要这样做的话,javascript/ajax 是否必须首先绘制我的链接更新数据库后更改它们?(如果 PHP 输出链接,它们不会像 PHP 输出一样保持不变吗?)