skip to Main Content

I am building a website for a school-project. I have been programming in PHP for about a year now, and javascript shouldn’t be that much of a problem either.

However, I ran into a problem a couple of days ago. I have a "warning/notification" bar under my navbar. There is two buttons, one where you close the notification and one where you get redirected to read more about it.

If you click the close button, I want to make an AJAX call to the same file, where I have PHP code that will detect the call and then change a SESSION variable, so the notification doesn’t show up again regardless of which file you are on.

This however, does not seem to work no matter how many approaches I have tried. I’ve had enough of this struggle and would greatly appreciate any help from this wonderful community.

This by the way is all in the same file.

Here’s the AJAX code:

$("#close_warning").click(function(){  
  var info = "close";  
  $.ajax({  
     type:"POST",  
     url:"navbar.php",  
     data: info  
    });  
});  

And here’s the PHP code (that prints out the HTML):

<?php
require "includes/database.php";
$sql = "SELECT * FROM posts WHERE (post_sort = 'homepage' OR post_sort = 'everywhere') AND post_type = 'warning'";
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
if($_SESSION["closed_notification"] == 'no') {
    if($resultCheck >= 1) {
        while($row = mysqli_fetch_assoc($result)) {
                                
            $post_header = $row["header"];
            $post_content = $row["post_content"];
            $post_index = $row["post_index"];

            echo '<div class="nav_bottom_holder_warning">
            <div class="navbar_lower_container">

                <p>'.$post_header.'</p>

                <button class="btn" id="close_warning">Stäng</button>

                <button class="btn" id="show_warning">Visa inlägg</button>
            
            </div>
        </div>';

        }
    }     
}  
?>

Last but not least, the code that is responsible for changing the actual SESSION:

<?php
$_SESSION["closed_notification"] = "no";
if(isset($_POST["info"])) {
    $_SESSION["closed_notification"] = "yes";
}
?>

I have tried numerous approaches to this problem, this is just one of them. At this point I am just clueless of how to solve it, thank you.

EDIT: I have already included this file in another file that contains a "session_start()" command. So using that in this file would be no help.

2

Answers


  1. First of all there is no session_start(); on the first line so it will give you an error for the Session Variable.

    Secondly update your ajax code to this:

    $("#close_warning").click(function(){  
      var info = "close";  
     $.ajax({
             url: 'navbar.php',
             type: 'post',
             data: {info:info}
             
         });
     });  
    

    It basically means that data:{name1:variable2}
    Here you are giving the data from js variable(variable2) ‘info’ to php as info(name ==> that we generally set the input attribute) so in php you can access it as $_POST['info'];.

    And lastly you gave the js variable value ‘close’ and you just checked whether the variable is set while changing the session variable.

    Change it to actually checking the value which is better and clear when others read your code.

    Summary:

    Change data: info to data:{info:info}

    Login or Signup to reply.
  2. Just use Javascript local storage or session storage. I guess it is not important for the server to know if a user has closed the notification yet or not.

    $("#close_warning").click(function(){
      // close the notification
      $("#notification").hide();
    
      // set 'closed' flag in local storage 
      storage.setItem('closed', 1);
    });  
    

    Have javascript hide the notification, if the ‘closed’ flag is set.

    if (storage.getItem('closed')) {
      $("#notification").hide();
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search