0

我回来查看我的问题,并被告知它已“被作者自愿删除”,但我没有删除它!所以我不知道那里发生了什么。所以现在我得再问一遍,希望这一次能留在这里!

我有一个显示许多图像的 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">&nbsp;</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">&nbsp;</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">&nbsp;</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 输出一样保持不变吗?)

4

2 回答 2

0

只是因为我真的不知道如何评论您的问题,所以我在本节中提供此评论。JQuery 有两个不同的函数可供您使用,它们是函数$.post()$.ajax()- 函数。

您可以像这样对链接进行分类:

<a class="like_link" title="<?php echo $picture_id; ?>">

并且只需使用 jquery click 功能:

$('.like_link').click(function(){
     var id=$(this).attr("title");
     // Ajax-stuff
});

或以这种方式。我真的不打算将此作为答案,只是提供信息。

于 2012-05-22T22:08:26.713 回答
0

我过去做过类似的事情,并将其修改为您的示例。

假设您的带有链接的 html 如下所示:

<div id="allmylinks">
    <a href="toggle.php?link=foo">First link</a>
    <a href="toggle.php?link=bar">Second link</a>
</div>
$("div#allmylinks a").click(function(e){
    e.preventDefault();
    var link= $(this);
    $.get(
        $(this).attr('href'),
        function(data){
            console.log('Succesfull! '+data);
            link.attr('href',data);      // Set the new link
            $link.append(' was toggled');// Add some text
    });
    $(this).parents('div.entry-content').fadeOut('slow');
});

在 toggle.php 我有这个:

if(isset($_REQUEST['link']))
    $link = $_REQUEST['link'];
else
    $link = "error";

// Validate link and process it
...

// If it's ajax
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest')
{
    // The new link
    echo 'toggle.php?link=toggled-'.$link;
}
// Not an ajax-request, redirect to previous page
else 
{
    header('Location: index.php');
    die();
}
于 2012-05-26T12:10:30.200 回答