Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法保留Ajax保留的会话变量_Php_Ajax_Session Variables - Fatal编程技术网

Php 无法保留Ajax保留的会话变量

Php 无法保留Ajax保留的会话变量,php,ajax,session-variables,Php,Ajax,Session Variables,我试图编写代码,将会话变量从一个php带到另一个php,而无需刷新。我试着仿效我在网上找到的例子,如下所示。在加载ajax页面时,它似乎成功地带来了价值。但是,即使使用session\u start()命令,创建的会话变量似乎也无法保留。它不加载数据,而是显示以下错误消息: 注意:第5行C:\xampp\htdocs\test\update.php中未定义的索引:numSum 如果有人能建议如何处理代码以使其正确,我将不胜感激 index.php <html> <?php

我试图编写代码,将会话变量从一个php带到另一个php,而无需刷新。我试着仿效我在网上找到的例子,如下所示。在加载ajax页面时,它似乎成功地带来了价值。但是,即使使用
session\u start()
命令,创建的会话变量似乎也无法保留。它不加载数据,而是显示以下错误消息:

注意:第5行C:\xampp\htdocs\test\update.php中未定义的索引:numSum

如果有人能建议如何处理代码以使其正确,我将不胜感激

index.php

<html>
<?php
    session_start();
?>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
    j_TOC = [1,2,3,4,5];

    $.ajax({
      method: "POST",
      url: "update.php",
      data: { numSum: j_TOC}
    })

      .done(function( msg ) {
        alert( "Data Saved: " + msg );
      });

 </script>
</html>
<html>
<?php
    session_start();
    session_save_path('/session_data/');
    $_SESSION['numSum1'] = $_POST['numSum'];

    ?>
<script type="text/javascript">
    function atest() {

        var id_toc = <?php echo json_encode($_SESSION['numSum1']); ?>;
        window.alert(id_toc);
    {

</script>
    <input type="button" id="clickme" onclick="atest()" value="update session"></>
</html>

j_TOC=[1,2,3,4,5];
$.ajax({
方法:“张贴”,
url:“update.php”,
数据:{numSum:j_TOC}
})
.done(函数(msg){
警报(“保存的数据:“+msg”);
});
update.php

<html>
<?php
    session_start();
?>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
    j_TOC = [1,2,3,4,5];

    $.ajax({
      method: "POST",
      url: "update.php",
      data: { numSum: j_TOC}
    })

      .done(function( msg ) {
        alert( "Data Saved: " + msg );
      });

 </script>
</html>
<html>
<?php
    session_start();
    session_save_path('/session_data/');
    $_SESSION['numSum1'] = $_POST['numSum'];

    ?>
<script type="text/javascript">
    function atest() {

        var id_toc = <?php echo json_encode($_SESSION['numSum1']); ?>;
        window.alert(id_toc);
    {

</script>
    <input type="button" id="clickme" onclick="atest()" value="update session"></>
</html>

函数atest(){
变量id_toc=;
窗口警报(id\U toc);
{
session\u save\u path()
应该在
session\u start()
之前调用,如果要使用它,请在使用
session\u start()的地方同时使用它


update.php
应该只为
alert()
返回一个字符串。当您直接加载该页面时,
$\u POST
为空,因此这就是您看到的错误。

您的代码很少有问题,例如:

  • 正常代码流:当您第一次访问index.php时,它将触发AJAX请求,并随后设置会话变量;因此,当您访问update.php页面时,您将获得所需的结果
  • 您的代码流:如上所述,如果您不首先访问index.php而直接访问update.php页面,您将得到此错误

    注意:未定义索引:numSum in

    这是因为没有设置
    $\u POST['numSum']
    ,事实上,整个超全局
    $\u POST
    数组是空的

    所以解决方案是这样的

    将此语句
    $\u SESSION['numSum1']=$\u POST['numSum'];
    包装在
    if
    块中,如下所示:

    if(!isset($_SESSION['numSum1']) || empty($_SESSION['numSum1'])){
        $_SESSION['numSum1'] = isset($_POST['numSum']) ? $_POST['numSum'] : array();
    }
    
  • 代码中还有一个小语法错误

    function atest() {
    
        var id_toc = <?php echo json_encode($_SESSION['numSum1']); ?>;
        window.alert(id_toc);
    {   <============ See here, it should be }
    
    另外,了解PHP中的比较运算符,特别是三元运算符。您所说的问号(
    ?:
    )与三元运算符有关。以下是必要的参考资料

    • (比较运算符)

    • (三元运算符)


    感谢您的及时回复。您能在不设置会话路径的情况下完成吗?您能告诉我如何优化代码,以便在页面之间传递值吗?我正在尝试使用此代码处理发布问题:if($_session['numSum1']==“”){$_session['numSum1']=$_POST['numSum']}或者{echo$_session['numSum1']}非常感谢这个解决方案。它在某种程度上是文字。我现在可以在update.php上获得会话变量数据。但是,它不能更改。特别是。当我将j_TOC更改为2,2,3,4,5时,例如在index.php中,并重新加载index.php,update.php仍然会给我1,2,3,4,5。有什么解决方案吗?另外,你能解释一下吗更详细地说,你提供的语法,就像我对PHP的新意。具体来说,在语句中间的“?”的含义是什么?“$ySale[ [ NUMUM1’] ] = ISSET($XPOST [ NUMUSEM ])?$$POST [ NUMSON' ]:ARARYY();“和”$POST(NUMSORT):“ARRAY())的含义是什么??最后,我看到您的整个语句似乎在检查会话变量是否为空或是否存在,并且从未看到您将$\u POST值分配给会话变量,哪个语句实际上占用了这项工作?非常感谢!@CL.L我已经更新了我的答案,请查看我答案的编辑部分。非常感谢,现在我理解了ternary运算符。我可以有一个后续问题吗?我理解您的代码是有效的,但只有在update.php刷新之后。但是,我们是否可以在不刷新update.php页面的情况下更新该值,而只需单击“更新会话”即可按钮?或者我们必须刷新页面以运行php部件才能使其正常工作?@CL.L会话变量只能通过index.php页面更新,因为这是传递新值的地方,而不是数组。如果单击更新会话按钮,它将只显示
    $\u会话['numSum1'中的任何内容
    ,就是这样。如果要更新update.php页面上的会话,请单击“更新会话”按钮,制作一个包含新会话值和此“更新会话”按钮的
    表单,并在表单处理过程中更新
    $\u会话['numSum1']