【问题标题】:Session array display only one result会话数组只显示一个结果
【发布时间】:2014-03-23 21:11:02
【问题描述】:

您好,我通过 $_POST 收到一个用户名和一个用户 ID。

我想在 $_SESSION 中得到类似的东西:

(id) - (user_name)
5 - John
6- Paul 


<?php
    $user_id = $_POST['user_id'];
    $user_name = $_POST['user_name'];

       $_SESSION['test'] = array('user_id' => $user_id, 'user_name' => $user_name);

    foreach( $_SESSION['test'] as $key => $value )
    {
          echo $key;
          echo $value;
    }
?>

仅显示 John 和他的 ID。我的意思是保罗和他的身份证没有显示。为什么?


我有一个js脚本,

$.ajax({
                    url : "ajax_chat.php",
                    type: "POST",
                    data: 'action='+action+'&user_id='+user_id,
                    success: function(result)
                    {
                    }
                });

当有人点击用户时,我希望为每个 ID 创建一个会话,该会话将发送到我的 php 文件。

ajax_chat.php

if ($action == "ChangeSessionValueUser")
{ 
   $_SESSION['test'] = array('user_id' => $user_id, 'user_name' => $user_name);
}

在 index.php 中

<?php
foreach( $_SESSION['test'] as $key => $value )
{
      echo $key;
      echo $value;
}
?>

【问题讨论】:

  • var_dump($_POST);的发布结果
  • 对于 JS 中的每次点击,我都想创建一个 SESSION 。所以对于 user_id ,它只是一个值一个值。

标签: php session


【解决方案1】:

我可能误解了你在做什么。但是,如果每个 POST 请求只获得 一个 user_id一个 user_name,那么您需要做一些事情。

  1. 您实际上并未创建会话。

您需要添加 session_start() 来激活或重新激活会话,这是一个简单的资源:@​​987654321@

  1. $_SESSION['test'] = array('user_id' =&gt; $user_id, 'user_name' =&gt; $user_name); 您每次都会覆盖$_SESSION['test'] 变量。因此,您需要像 $_SESSION['test'][] = array(...) 那样将该新数组附加到“测试”的末尾(如果我理解您想要做什么)

所以你的代码应该是这样的:

<?php
    session_start();
    $user_id = $_POST['user_id'];
    $user_name = $_POST['user_name'];
    $_SESSION['test'][] = array('user_id' => $user_id, 'user_name' => $user_name);

    foreach( $_SESSION['test'] as $key => $value )
    {
          echo $key;
          echo $value;
    }
?>

这应该在“test”键下的 $_SESSION 全局变量中添加一个 user_id 和 user_name 对。

【讨论】:

    【解决方案2】:

    您没有正确理解数组。采用没有会话的更简单的代码:

    $test = array('user_id' => 5, 'user_name' => 'john');
    $test = array('user_id' => 6, 'user_name' => 'paul');
    
    print_r($test);
    // this only prints paul, since you've overwritten the variable.
    
    // You want an array of arrays instead, so
    $test = array();
    $test[] = array('user_id' => 5, 'user_name' => 'john');
    $test[] = array('user_id' => 6, 'user_name' => 'paul');
    print_r($test);
    // this prints out both
    
    // If you want to loop, you must change it a little bit
    foreach ($test as $value) {
       echo 'User ' . $value['user_name'] . ' with user id ' . $value['id'];
    }
    // if you do echo($value); this yields "Array"
    // since you have an array in an array.
    

    要在会话中只初始化一次数组,您可以使用类似这样的东西

    if (!isset($_SESSION['test'])) {
      $_SESSION['test'] = array();
    }
    // then you can push in additional users on all pages like
    $_SESSION['test'][] = array('id' => 7, 'user_name' => 'test');
    
    // and output all with
    foreach ($_SESSION['test'] as $value) {
      echo 'User ' . $value['user_name'] . ' with user id ' . $value['id'];
    }
    

    【讨论】:

      【解决方案3】:

      您正在从 POST 接收单个值。您需要为每个输入字段设置数组名称,例如:

      <input type="text" name="user_id[]" />
      <input type="text" name="user_name[]" />
      

      然后当你收到这些值时,将它们一一放入会话中:

      $_SESSION['test'] = array();
      foreach ($_POST['user_id'] as $i => $id) {
          $_SESSION['test'][] = array($id => $_POST['user_name'][$i]);
      }
      

      【讨论】:

        猜你喜欢
        • 2017-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-02
        • 2015-08-10
        相关资源
        最近更新 更多