【问题标题】:Store Two Dimensional Array in Session PHP在 Session PHP 中存储二维数组
【发布时间】:2015-11-28 20:58:35
【问题描述】:

我一直在寻找这个解决方案一段时间,并找到了一些以前关于我同样问题的线程。但我仍然无法解决我的问题。现在已经好几天了,我仍然无法将我的 HTML 表单中的数组数据存储在会话中。它只是每次都被覆盖。我的编码有问题吗?

这是我处理输入的 PHP 文件

<?php 
    if(!isset($_SESSION)){
        session_start();
    }

    $student1 = array(
        array(
            'Name'=>$_POST['name'],
            'Matric-No'=>$_POST['matric'],
            'Gender'=>$_POST['gender'],
            'Day'=>$_POST['DOBDay'],
            'Month'=>$_POST['DOBMonth'],
            'Year'=>$_POST['DOBYear'],
            'Citizen'=>$_POST['citizen'],
            'Marital'=>$_POST['kahwin'],
            'Religion'=>$_POST['religion'],
            'Active'=>$_POST['active'],
            'Year-of-Study'=>$_POST['Cyear'],
            'ID-Number'=>$_POST['idno'],
            'Email'=>$_POST['email']
        )
    );

    $_SESSION['data'] = $student1;

    print_r($_SESSION);

?>

*编辑:很抱歉...我忘了提到我确实有一个 javascript 验证器来查看用户在提交之前是否已成功输入每个表单。我的问题是,当我刷新或返回表单站点时,以前的数据将不存在,并且是否输入了任何新数据。之前的数据会被覆盖

【问题讨论】:

  • 我不太明白你的问题。你有任何错误吗?您期望会发生什么目前没有发生的事情? $_POST 数组是空的还是填充了您的预期值?
  • 数据已完美插入,但问题是,如果要插入另一个表单,它不会保留当前数据。我正在尝试制作一个表格,将其数据保存在一个数组中,以便它可以从收集的数据中计算出一些东西,例如他们的公民身份、宗教信仰、年龄等。我确实有一个 JavaScript 验证器来查看用户是否在表单中输入了每个数据

标签: php arrays session


【解决方案1】:

只有在表单已提交时,您才必须设置$_SESSION['data']。这是一个测试姓名和宗教是否已发送的示例(您可以测试所有变量以确定):

session_start();

if ( isset( $_POST['name'] && isset( $_POST['religion'] ) {
    $student1=array(
        'Name'=>$_POST['name'],
        'Matric-No'=>$_POST['matric'],
        'Gender'=>$_POST['gender'],
        'Day'=>$_POST['DOBDay'],
        'Month'=>$_POST['DOBMonth'],
        'Year'=>$_POST['DOBYear'],
        'Citizen'=>$_POST['citizen'],
        'Marital'=>$_POST['kahwin'],
        'Religion'=>$_POST['religion'],
        'Active'=>$_POST['active'],
        'Year-of-Study'=>$_POST['Cyear'],
        'ID-Number'=>$_POST['idno'],
        'Email'=>$_POST['email']
    );

    $_SESSION['data']=$student1;
}

print_r($_SESSION);
?>

现在$_SESSION['data'] 仅在您发布带有姓名和宗教信仰的表单时才会更改!

编辑: 如果您想在会话中添加多个学生,请尝试以下操作:

$_SESSION['data'][]=$student1;

或者简单地说:

$_SESSION['data'][]=$_POST;

要检索数据,您可以执行以下操作:

foreach ( $_SESSION['data'] as $data )
    echo 'Name: ' . $data['Name'];

for( $i = 0; $i < count( $_SESSION['data'] ); $i++ )
    echo 'Name: ' . $_SESSION['data'][$i]['Name'];

编辑 2 从 $student1 变量中删除了额外的数组

【讨论】:

  • 很抱歉没有包含我有一个 javascript 来验证表单以查看用户是否已完全输入所需的所有表单。我的问题是,当我刷新或返回表单站点时,以前的数据将不存在,并且是否输入了任何新数据。之前的数据将被覆盖
  • 您是否在表单中寻找类似&lt;input type="text" name="name" value="&lt;?= $_SESSION['data']['name'] ?&gt;"&gt; 的内容来保留之前输入的值?
  • 是的!类似的东西,这样我就可以在会话数组中存储 3 个学生信息,并且可以在不被自身覆盖的情况下获取它们。我之所以要找回这些信息,是为了管理和统计男女学生的人数、平均年龄、公民等
  • 非常感谢老兄!这解决了我的问题!但是我没有做 foreach 和 for 循环。当我这样做时,它只是向我显示了第一个插入的值,然后给了我这个错误:注意:未定义的索引:第 15 行的 C:\xampp\htdocs\studentprocess.php 中的名称名称:但无论如何,我将其更改为仅使用 print_r($_SESSION);它创造了奇迹。伙计,我欠你很多人。谢谢!自从两天前我就被这个问题困扰了,直到今天仍然无法继续前进。向你好先生致敬!我非常感激。
  • 我希望我能竖起大拇指,但我的声誉仍然是 1。对不起,伙计
【解决方案2】:

您缺少 session_start() 来启动会话本身。

并查询$_SESSION['data'] = [your_array]; 并测试为isset($_SESSION['data'])

查看此页面http://php.net/manual/en/ref.session.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-14
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2020-03-11
    • 2016-11-07
    相关资源
    最近更新 更多