我已经搜索这个解决方案一段时间了,发现了一些以前针对我的同一问题制作的线程。但我仍然无法解决我的问题。已经好几天了,我仍然无法将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验证器,可以查看用户在提交之前是否成功输入了每个表单。我的问题是,当我刷新或返回表单网站时,以前的数据将不在那里,如果输入了任何新数据。以前的数据将被覆盖
只有在提交了表单时,才必须设置$_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变量中删除了额外的数组
您缺少启动会话本身的session_start()。
并进行$_SESSION['data'] = [your_array];
等查询和isset($_SESSION['data'])
等测试
检查此页面http://php.net/manual/en/ref.session.php