php - 刷新后如何保持图像按钮状态

时间:2015-07-03 10:26:17

标签: php jquery mysql session post

刷新或退出后,我在保留某些图像按钮的状态时遇到问题。我在页面上的每篇文章上都有一个最喜欢的按钮,用户可以点击它来收藏它。我使用以下jquery函数将帖子的唯一ID发送到mysql表:

$('.faver').on('click',function() {

var articleId = $(this).closest('.row').attr('id');

  $.ajax(
    {
    url: "favscript/addremove",
    method: "POST",
    data: { favourite: articleId },
    success: function() 
    {  
        alert(<?php echo $favid ?>);
     }                  

  });

});

然后在收到的php文件中,我得到了这样的会话变量:

 session_start();

if(isset($_SESSION['id']) AND isset($_POST['favourite'])){

$user = mysql_real_escape_string($_SESSION['id']);

$_SESSION['favourite'] = $_POST['favourite']; 

$favid = mysql_real_escape_string($_SESSION['favourite']);

然后我将值插入到mysql表中,如下所示:

// Firstly, check if article is favourite or not

$query = mysql_query("SELECT * FROM ajaxfavourites WHERE user=$user AND favid=$favid");
$matches = mysql_num_rows($query);

// If it is not favourited, add as favourite

if($matches == '0'){
mysql_query("INSERT INTO ajaxfavourites (user, favid) VALUES ('$user', '$favid')");


}

// Instead, if it is favourited, then remove from favourites

if($matches != '0'){
mysql_query("DELETE FROM ajaxfavourites WHERE user=$user AND favid=$favid");


}

} 

现在所有这些都在起作用,但我的问题是,一旦用户刷新或注销,我似乎无法找到每个按钮记住其状态的方法。如果我将$ favid设置为$ _SESSION ['favorite'],它只会在刷新后为所有按钮设置相同的按钮状态。

这是我如何检查按钮状态应该是什么:

 <!--Favourite Button-->
    <div id="favouritediv"> 

        <?php 

        $user = $_SESSION['id'];
        $favid = $_SESSION['favourite'];  //  <- problem here

        $query = mysql_query("SELECT * FROM ajaxfavourites WHERE user=$user AND favid=$favid");

    $matches = mysql_num_rows($query);

        if($matches == 0){
        ?>

        <img id="button" class="faver fave0 tog" src= "favscript/images/0.jpg" onclick="" width="54" height="49">


        <?php
        }

        if ($matches == 1) {
        ?>

        <img id="button" class="faver fave0 tog" src= "favscript/images/1.jpg" onclick="" width="54" height="49">


        <?php
        }
         ?>

    </div>  
        <!--Favourite Button END-->

如果我将$ favid直接设置为文章的id,如:$ favid = 3;它会工作得很完美,但我无法理解如何使用$ session变量正确地执行它或者分别获得每个按钮的文章ID并且仅自动影响每个按钮。

我希望这是有道理的,我是php的新手,对我应该如何做的任何帮助都将非常感激。

感谢。

2 个答案:

答案 0 :(得分:0)

如果您希望在用户注销后进行会话,只需将登录活动存储在单独的表中即可。例如列用户ID和会话ID。最后得到活动表的最后一行。

快乐的编码!

答案 1 :(得分:0)

我认为您的查询应该是为用户提取所有优惠:

PFInstallation *currentInstallation = [PFInstallation currentInstallation];
[currentInstallation setDeviceTokenFromData:deviceToken];
[currentInstallation addUniqueObject:@"global" forKey:@"channels"];
[currentInstallation saveInBackground];

现在使用$ allFavIds数组,如果该数组中存在“favid”,则可以检查每个按钮。

$query = mysql_query("SELECT favid FROM ajaxfavourites WHERE user=$user");
while($row = mysql_fetch_assoc($result)){
    $allFavIds[] = $row['favid'];
}

当然,$ individualFavId将被您的个人喜好所取代。

示例代码:

<img id="button" class="faver fave0 tog" src="favscript/images/<?php echo in_array($individualFavId, $allFavIds) ? '1.jpg' : '0.jpg' ; ?>" onclick="" width="54" height="49">