簡體   English   中英

從 AJAX 調用更改 PHP session 變量

[英]Change PHP session variable from AJAX call

我正在為一個學校項目建立一個網站。 我已經在 PHP 編程了大約一年,而 javascript 應該也不是什么大問題。

但是,幾天前我遇到了一個問題。 我的導航欄下有一個“警告/通知”欄。 有兩個按鈕,一個用於關閉通知,另一個用於重定向以閱讀更多相關信息。

如果您單擊關閉按鈕,我想對同一個文件進行 AJAX 調用,其中我有 PHP 代碼可以檢測該調用,然后更改 SESSION 變量,因此無論您使用哪個文件,通知都不會再次顯示在...上。

然而,無論我嘗試了多少種方法,這似乎都不起作用。 我已經受夠了這場斗爭,非常感謝這個美妙社區的任何幫助。

順便說一句,這都在同一個文件中。

這是 AJAX 代碼:

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

這是 PHP 代碼(打印出 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>';

        }
    }     
}  
?>

最后但同樣重要的是,負責更改實際 SESSION 的代碼:

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

我已經嘗試了很多方法來解決這個問題,這只是其中之一。 在這一點上我只是不知道如何解決它,謝謝。

編輯:我已經將該文件包含在另一個包含“session_start()”命令的文件中。 所以在這個文件中使用它是沒有幫助的。

首先沒有session_start(); 在第一行,所以它會給你一個 Session 變量的錯誤。

其次將您的 ajax 代碼更新為:

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

它基本上意味着data:{name1:variable2}這里你將數據從 js variable(variable2) 'info' 提供給 php 作為 info(name ==> 我們通常設置輸入屬性) 所以在 php 你可以訪問它作為$_POST['info']; .

最后你給了 js 變量值 'close' 並且你只是在更改 session 變量時檢查變量是否設置。

將其更改為實際檢查其他人閱讀您的代碼時更好更清晰的值。

概括:

data: info更改為data:{info:info}

只需使用 Javascript 本地存儲或 session 存儲。 我想服務器知道用戶是否已經關閉通知並不重要。

$("#close_warning").click(function(){
  // close the notification
  $("#notification").hide();

  // set 'closed' flag in local storage 
  storage.setItem('closed', 1);
});  

如果設置了“關閉”標志,則讓 javascript 隱藏通知。

if (storage.getItem('closed')) {
  $("#notification").hide();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM