【问题标题】:Write to Session with Post - CakePHP使用 Post 写入会话 - CakePHP
【发布时间】:2012-06-28 02:53:18
【问题描述】:

我正在尝试将一组复选框 ID 发布到我的控制器中的操作。这是我的 index.ctp 中的脚本:

<script type="text/javascript">
$('.editSel_dialog').click(function()
{
    var selected = [];
    alert('Edit Selected Has Been Clicked');

    $("#[id*=LocalClocks]").each(function()
        {
        if(false != $(this).is(':checked'))
        {
            selected.push($(this).attr('id').replace('LocalClocks', ''));
        }
    });
    alert(selected);
    /*$.ajax(
    {
        type: 'POST',
        url: "/LocalClocks/editSelected/",
        data: selected,
        traditional: true,
        //contentType: "application/json",
        dataType: "text",
        success: function(data){ alert(data); alert('Edit Success');}
    });*/
    $.post('/LocalClocks/editSelected', { "Session" : selected }, function(data){
                   alert(data);
    });
});
</script>

我有一个 ajax 请求和一个 post 请求。我一直在使用 ajax,直到我看到帖子实际上可以修改 php 变量。大括号 { "Session" : selected } 中的代码应该修改 Session 变量并选择数组。

我尝试在$this-&gt;data$this-&gt;request-&gt;data$_POST 上使用调试,但它们都是空的。

我需要帮助将选定的数组写入变量或其他东西。我正在考虑尝试写信给$this-&gt;Session,但我不确定我将如何去做。

提前致谢

【问题讨论】:

  • 使用 firebug 并查看正在发送到服务器的数据。尝试显示或返回 $this->request->params alert() 显示什么?它是一个数组,对吧?

标签: ajax session cakephp post edit


【解决方案1】:

使用 Cake,要在 $this-&gt;request-&gt;data 中获取发布值,它们的名称必须以 data 为前缀:

Javascript:

$.post('/LocalClocks/editSelected', { "data[Session][selected]" : selected }, function(data){
               alert(data);
});

控制器:

function editSelected()
{
  if($this->request->is('post'))
  {
    if(isset($this->request->data['Session']['selected']))
    {
      $this->Session->write('selected', $this->request->data['Session']['selected']);
    }
  }
}

【讨论】:

  • 非常感谢你们的帮助。这有效,我能够成功发布数据。再次感谢。
【解决方案2】:

也许我错了,但我认为您不能使用 ajax 直接从客户端执行此操作。你能分享你关于你可以修改 php 变量的声明的来源吗?我在谷歌上搜索,但没有运气,能够修改 PHP 会话对我来说会很奇怪.. 这真的很不安全,说你可以使用会话固定/注入或其他恶意技术

编辑

为你需要的现有变量赋值

进行 ajax 调用

$.post('/LocalClocks/editSelected', { "selected" : selected }, function(data){
                   alert(data);
    });

在您的控制器上,您将拥有这样的功能

function editSelected($selected){
$_SESSION["selected"] = $selected;
}

然后瞧

【讨论】:

  • 这是我从中获得的链接:stackoverflow answer。海报说大括号中的东西将如何改变 php 变量的值。我的问题是我尝试修改会话,但没有运气。我希望能够将数组中的数据写入 php 变量,但我不知道该怎么做。
  • 哦,我明白了.. 那里的陈述是真的,你是 receiving 指定变量的值,而不是 修改现有的。您可以做的是接收该变量,然后在 PHP 上将其分配给您想要的 $_SESSION 变量
  • 愚蠢的问题,但我将如何去做。我是否只需在控制器的操作中创建一个新变量然后将其分配给会话?
  • 我进行了更改,但现在出现此错误:Missing argument 1 for LocalClocksController::editSelected()。任何想法为什么它没有得到 $selected 变量?不过,我想我离让它发挥作用越来越近了。谢谢。
  • 在 Google Chrome 开发者工具中,在网络选项卡上,您可以看到您正在进行的实际 ajax 调用。检查您是否在其中发送值
猜你喜欢
  • 2015-04-02
  • 2011-05-14
  • 2011-05-13
  • 2014-09-10
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
  • 2011-07-18
  • 2015-01-28
相关资源
最近更新 更多