2016-08-16 125 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