Php - How to keep image buttons after refresh

I am having a problem persisting the state of some image buttons after updating or logging out. I have a favorite button in every article on a page that a user can click to love. I am using the following jquery function to send a unique post id to mysql table:

$('.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 ?>);
     }                  

  });

});

      

then in the resulting php file, I get the session variable like this:

 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']);

      

and then insert values ​​into mysql table like this:

// 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");


}

} 

      

Now all of the above works, but my problem is that I cannot figure out how each button remembers its state after the user refreshes or logs out. if i set $ favid to $ _SESSION ['favorite'] it just sets the button state to be the same for all buttons after update.

This is how I can check the state of the button:

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

      

if i set $ favid for article id directly like this: $ favid = 3; it will work perfectly, but I can't figure out how to do it correctly with the $ session variable or something that will get the article ID for each button separately and only act on each button on its own.

I hope this makes sense, I am new to php and any help on how I should do this would be much appreciated.

thank.

+3


source to share


2 answers


If you want to perform sessions even after the user is logged out, just keep the logon operations in a separate table. similar to the User ID and Session ID columns. finally get the last row of the action table.



Happy coding!

0


source


I think your request should be to fetch all favids for a user:

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

      

Now, using the $ allFavIds array, you can check each button if a "favid" exists in that array.

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

      



Of course, the $ individualFavId will be replaced with your individual favids.

Sample code:

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

      

0


source







All Articles