2016-08-16 132 views
0
$('.folder').on('contextmenu', function(ev){ 
    ev.preventDefault(); 
    var a = $(this).attr('data-id'); 
    var b = $(this).text(); 
    $('.marked').removeClass('marked'); 
    var c = $('#path').html(); 
    var d = '<span class="spant" data-id=' + a + '>' + b + '</span>'; 
    var e = c + d; 
    $.ajax({ 
     url: 'params.php', 
     type: 'post', 
     data: { 
      'path': e, 
      'par': a 
      }, 
     success: function() { 
      location.reload(); 
     } 
    }); 

}); 

params.php變化PHP會話變量使用AJAX

session_start(); 
if(isset($_POST['path'])) { 
    $_SESSION['path'] = $_POST['path']; 
} 
else{ 
    $_SESSION['path'] = '<span class="spant" data-id=0>HOME</span>'; 
} 

if(isset($_POST['par'])) { 
    $_SESSION['par'] = $_POST['par']; 
} 
else{ 
    $_SESSION['par'] = 0; 
} 

admin.php的

<?php 
include ("params.php"); 
echo $_SESSION['path']; 
echo $_SESSION['par']; 
?> 

結果呼應的是舊的值,如$_POST變量未設置。
如何獲得新的值,在JavaScript代碼中設置?

+0

請注意「$ _SESSION ['path'] = $ _POST ['path']」中可能存在的路徑遍歷漏洞。修正看看http://stackoverflow.com/questions/4205141/preventing-directory-traversal-in-php-but-allowing-paths/4205278#4205278 – swordsecurity

回答

1

您在請求中犯了一個錯誤,使用:method: "post"代替type: "post",所以難怪後VAR的沒有設置:)

$('.folder').on('contextmenu', function(ev){ 
    ev.preventDefault(); 
    var a = $(this).attr('data-id'); 
    var b = $(this).text(); 
    $('.marked').removeClass('marked'); 
    var c = $('#path').html(); 
    var d = '<span class="spant" data-id=' + a + '>' + b + '</span>'; 
    var e = c + d; 
    $.ajax({ 
     url: 'params.php', 
     method: 'POST', 
     data: { 
      'path': e, 
      'par': a 
      }, 
     success: function() { 
      location.reload(); 
     } 
    }); 

}); 

希望這將修復它;)

乾杯!

0

當您包含params.php時,它會將值重置爲兩個if塊中的else條件。

+0

我試圖解決Ajax代碼到admin.php並移動'如果'代碼從'params.php'到'admin.php' - 相同的結果。 – bonaca

+0

你記錄了$ _POST,看看裏面有什麼嗎?也許還可以直接在admin.php中調用session_start()(而不是包含params.php)以確保它不是該代碼? 目前,如果admin.php每次調用時沒有使用$ _POST值,它將恢復爲您的'else'值。 – Colin