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

Posted

技术标签:

【中文标题】php - 如何在刷新后保持图像按钮状态【英文标题】:php - How to keep image buttons state after refresh 【发布时间】:2015-09-21 03:49:59 【问题描述】:

我在刷新或注销后保持某些图像按钮的状态时遇到问题。我在页面上的每篇文章上都有一个收藏按钮,用户可以点击它来收藏它。我使用以下 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['favourite'] 它只会在刷新后将所有按钮的按钮状态设置为相同。

这就是我检查按钮状态的方式:

 <!--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=""  >


        <?php
        

        if ($matches == 1) 
        ?>

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


        <?php
        
         ?>

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

如果我直接将 $favid 设置为文章的 id,例如:$favid = 3;它会完美运行,但我不知道如何使用 $session 变量或将分别获取每个按钮的文章 ID 并且只影响每个按钮本身的东西正确地做到这一点。

我希望这是有道理的,我是 php 新手,非常感谢任何关于我应该如何做到这一点的帮助。

谢谢。

【问题讨论】:

用户刷新页面后会话被删除? 【参考方案1】:

如果您在用户注销后仍需要会话,只需将登录活动存储在单独的表中。像列用户 ID 和会话 ID。最终得到活动表的最后一行。

编码愉快!

【讨论】:

【参考方案2】:

我认为您的查询应该是为用户获取所有 fvids:

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

现在使用 $allFavIds 数组,您可以检查每个按钮的“favid”是否存在于该数组中。

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

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

示例代码:

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

【讨论】:

以上是关于php - 如何在刷新后保持图像按钮状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React.js 中刷新页面后保持状态?

如何在使用 jquery 刷新页面后保持复选框在模式中的选中状态?

如何使按钮保持按下状态?

浏览器刷新后如何保持 React 组件状态

Ngrx Store 在浏览器刷新后重置。如何让应用保持状态?

react-router 如何在页面刷新时保持位置状态?