将会话变量从Ajax发送到PHP

将会话变量从Ajax发送到PHP,php,jquery,ajax,session,Php,Jquery,Ajax,Session,我在一个页面上有4个按钮,每个按钮都有自己的按钮。单击按钮时,页面不会刷新,也不会打开新页面 当按下按钮时,我想通过Ajax将该按钮的ID以会话的形式发送到php文件。4个按钮中的每个按钮都有不同的ID 1,2,3,4。 如果用户单击一个按钮,然后单击第二个按钮等,我想将每个单击的按钮Id添加到此会话中 这就是我到目前为止所做的: Jquery: $(document).ready(function() { $('a[name=add]').click(function(

我在一个页面上有4个按钮,每个按钮都有自己的按钮。单击按钮时,页面不会刷新,也不会打开新页面

当按下按钮时,我想通过Ajax将该按钮的ID以会话的形式发送到php文件。4个按钮中的每个按钮都有不同的ID 1,2,3,4。 如果用户单击一个按钮,然后单击第二个按钮等,我想将每个单击的按钮Id添加到此会话中

这就是我到目前为止所做的:

Jquery:

     $(document).ready(function() {  
     $('a[name=add]').click(function(e) {
     session = $(this).attr('id')

     $.post('sessions.php', {session:session}
    );              
     });
     });
因此,只需检查是否单击了名为add的按钮,所有4个按钮都具有该名称,然后获取按钮ID并将其发送到sessions.php

PHP:

只创建会话

我遇到的问题是PHP会话获取单击的第一个按钮的ID,仅此而已。如果单击了另一个按钮,Ajax会发布按钮ID,但会话只保留单击的第一个按钮的ID

如何将单击的下一个按钮的ID添加到会话中

示例:如果单击按钮1和3,我需要会话具有ID 1和3

<?php
    session_start();
    $id = $_POST['session']);
    if(!isset($_SESSION['ids'])) {
        $_SESSION['ids']= array();         
    }

    $_SESSION['ids'][$id] = $_POST['session']';
?>
每次发出AJAX请求时,会话id都会被重新初始化,因此最终只剩下一个值。因此,您可能需要为会话id创建一个数组,并将每个新的id值插入该数组


每次发出AJAX请求时,会话id都会被重新初始化,因此最终只剩下一个值。因此,您可能希望为会话id创建一个数组,并将每个新的id值插入该数组。

这是因为Jquery将名称或id视为唯一的。这就是javascript函数只读取第一个按钮的原因

解决方案:

为4个按钮使用通用类名

然后更改jquery代码:

 $(document).ready(function() {  
     $('a.sessionclass').click(function(e) {
         session = $(this).attr('id');    
         $.post('sessions.php', {session:session}
         );              
    });
});
现在,php会话应该在单击时设置适当的按钮值


我同意@Lim H。也像他建议的那样更改php代码。

这是因为Jquery将名称或id视为唯一的。这就是javascript函数只读取第一个按钮的原因

session_start();

// prepare $_SESSION['ids']
if ( ! is_array($_SESSION['ids']))
{
    $_SESSION['ids'] = array();
}

// fill $_SESSION['ids'] only with new $_POST['session'] posted
if ( ! in_array($_POST['session'], $_SESSION['ids']))
{
    $_SESSION['ids'][] = $_POST['session'];
}
解决方案:

为4个按钮使用通用类名

然后更改jquery代码:

 $(document).ready(function() {  
     $('a.sessionclass').click(function(e) {
         session = $(this).attr('id');    
         $.post('sessions.php', {session:session}
         );              
    });
});
现在,php会话应该在单击时设置适当的按钮值


我同意@Lim H。也要像他建议的那样更改php代码。

是的,这也是一个问题。所以OP需要结合OMG的建议和我的解决方案。OMG有正确的答案,并且为了存储会话,您不需要额外的php脚本。只需使用$.sessionStorage'foo',{data:'bar'};在jQuery脚本中…+1尽管您的解决方案比初始代码更好,但这并不是真的,jQuery没有将名称视为唯一:@roy finley sessionStorage是HTML5功能。不利于兼容性@OMG:$'a[name=add]'是正确的,因为OP使用$this获取其id。@lim-h您可以在同一页面的多个表单中使用相同元素的名称。完全合法是的,这也是一个问题。所以OP需要结合OMG的建议和我的解决方案。OMG有正确的答案,并且为了存储会话,您不需要额外的php脚本。只需使用$.sessionStorage'foo',{data:'bar'};在jQuery脚本中…+1尽管您的解决方案比初始代码更好,但这并不是真的,jQuery没有将名称视为唯一:@roy finley sessionStorage是HTML5功能。不利于兼容性@OMG:$'a[name=add]'是正确的,因为OP使用$this获取其id。@lim-h您可以在同一页面的多个表单中使用相同元素的名称。完全合法[name=add]'是正确的:然后如何从数组中获取每个值,以便在MySQL数据库中搜索它?foreach$_会话['ids']作为$value{/*使用$value在DB*/}中搜索谢谢,但是,仅当仅单击了1个按钮时,该功能才起作用。例如,如果单击了2个按钮,则会导致数组中出现1个结果。会话数组中存储的2个id无效。基本php一定存在问题。请仔细看看,如果你使用我的代码说明它必须工作。。。我建议您使用firebug调试AJAX帖子…让它工作起来,只是因为ID显示为单个数字,例如;123,而不是1,2,3。刚刚快速内爆以逗号分隔它们。然后如何从数组中获取每个值,以便在MySQL数据库中搜索它?foreach$_会话['ids']作为$value{/*使用$value在DB*/}中搜索谢谢,但是,仅当仅单击了1个按钮时,该功能才起作用。例如,如果单击了2个按钮,则会导致数组中出现1个结果。会话数组中存储的2个id无效。基本php一定存在问题。请仔细看看,如果你使用我的代码说明它必须工作。。。我建议您使用firebug调试AJAX帖子…让它工作起来,只是因为ID显示为单个数字,例如;123,而不是1,2,3。只是做了一个快速内爆,用逗号把它们分开。
session_start();

// prepare $_SESSION['ids']
if ( ! is_array($_SESSION['ids']))
{
    $_SESSION['ids'] = array();
}

// fill $_SESSION['ids'] only with new $_POST['session'] posted
if ( ! in_array($_POST['session'], $_SESSION['ids']))
{
    $_SESSION['ids'][] = $_POST['session'];
}