PHP $_SESSION[]是否可以存储一组连续变量
<?phpsession_start();……连接数据库部分while($row=mysql_fetch_array($myquery)){$arrayid[]=$row...
<?php session_start();
……连接数据库部分
while($row=mysql_fetch_array($myquery)){
$arrayid[]=$row[id];
$array[]=$row[question];
……将对应的列赋给相应数组
}
$cnt=count($arrayid);
$answer[]=$_POST['style1'];
$_SESSION[]=$answer;//这里遇到了问题
?>
<form name="form1" method="post" action ="select_last1.php">
<?php
echo
"<input type=\"radio\" id= \"style1\" name=\"style1\" value=\"A\" />".
"A." . $arrayA[$i]."".
`````````````省略B,C,D选项
?>
我在做一个在线答题系统,通过$answer[]数组接收每次用户的选项。我想用一个$_SESSION[]数组批量存储用户的选项(即一次性把用户的答题结果存储完)
但是目前只实现了每次仅存储用户上一道题的选项也就是读出第二题 $answer[]中存储了第一题的用户选项,读出第三题存储第二题用户的选项。
我希望最终打印print_r($_SESSION)实现
Array ( [0] => B [1] => C [2] => D [3] => A [4] => A ···········)
而不是
Array ( [0] => B)
我现在试过的方法
$answer[]=$_POST['style1'];
for($i=0;$i<$cnt;$i++){
$_SESSION[$i+1]=$answer[$i];
}
虽然是循环赋值,但由于POST每次只传出一个值给$answer[],因此其实只有$array[0]中有用户提交的答案,赋值给$_SESSION[]之后同样只有$_SESSION[1]中有答案,其他的键值均没有答案。
打印出的结果
Array ( [1] => A [2] => [3] => [4] => [5] => )
不知道大家有没有什么好的方法解决这个问题,使得$_SESSION[]中的每一个键值都可以对应相应题号用户选择的答案?
页面每次读取一个选择题,而不是一组,点击提交之后会在“同一页面”刷新出下一个题。也就是每点击一次提交相当于刷新一次页面,会不会是$_SESSION[]的机制是只能只能记录一次性提交的数据,第二次提交的数据会把第一次的数据覆盖掉。
若只考虑$_SESSION[]一次性存入用户所有的选项,不知道是否可行,希望大家能给出一个比较合理的解决方法。
刚才又换了一个方法
$answer=$_POST['style1'];
$i = $i+1;
$_SESSION[$i]=array("id"=>$i,"answer"=>$answer);
print_r($_SESSION);
目的是用$_SESSION创建一个二维数组,其中id用来记录题号,answer用来记录选项。
每题打印出的结果为
Array ( [0] => Array ( [id] => 0 [answer] => ) ) 未点击提交按钮
Array ( [1] => Array ( [id] => 1 [answer] => A ) ) 点击一次提交按钮,这里记录了题号1和用户选项A……
但是当我答完所有的选择题
print_r($_SESSION[5]);
print($_SESSION[4]);的时候,只有$_SESSION[5]中有值,这个是最后一个题,也就是说$_SESSION[$i]中只有最后一个题。
$_SESSION[1]——$_SESSION[4]里面的值去哪里了,为什么没有被记录? 展开
……连接数据库部分
while($row=mysql_fetch_array($myquery)){
$arrayid[]=$row[id];
$array[]=$row[question];
……将对应的列赋给相应数组
}
$cnt=count($arrayid);
$answer[]=$_POST['style1'];
$_SESSION[]=$answer;//这里遇到了问题
?>
<form name="form1" method="post" action ="select_last1.php">
<?php
echo
"<input type=\"radio\" id= \"style1\" name=\"style1\" value=\"A\" />".
"A." . $arrayA[$i]."".
`````````````省略B,C,D选项
?>
我在做一个在线答题系统,通过$answer[]数组接收每次用户的选项。我想用一个$_SESSION[]数组批量存储用户的选项(即一次性把用户的答题结果存储完)
但是目前只实现了每次仅存储用户上一道题的选项也就是读出第二题 $answer[]中存储了第一题的用户选项,读出第三题存储第二题用户的选项。
我希望最终打印print_r($_SESSION)实现
Array ( [0] => B [1] => C [2] => D [3] => A [4] => A ···········)
而不是
Array ( [0] => B)
我现在试过的方法
$answer[]=$_POST['style1'];
for($i=0;$i<$cnt;$i++){
$_SESSION[$i+1]=$answer[$i];
}
虽然是循环赋值,但由于POST每次只传出一个值给$answer[],因此其实只有$array[0]中有用户提交的答案,赋值给$_SESSION[]之后同样只有$_SESSION[1]中有答案,其他的键值均没有答案。
打印出的结果
Array ( [1] => A [2] => [3] => [4] => [5] => )
不知道大家有没有什么好的方法解决这个问题,使得$_SESSION[]中的每一个键值都可以对应相应题号用户选择的答案?
页面每次读取一个选择题,而不是一组,点击提交之后会在“同一页面”刷新出下一个题。也就是每点击一次提交相当于刷新一次页面,会不会是$_SESSION[]的机制是只能只能记录一次性提交的数据,第二次提交的数据会把第一次的数据覆盖掉。
若只考虑$_SESSION[]一次性存入用户所有的选项,不知道是否可行,希望大家能给出一个比较合理的解决方法。
刚才又换了一个方法
$answer=$_POST['style1'];
$i = $i+1;
$_SESSION[$i]=array("id"=>$i,"answer"=>$answer);
print_r($_SESSION);
目的是用$_SESSION创建一个二维数组,其中id用来记录题号,answer用来记录选项。
每题打印出的结果为
Array ( [0] => Array ( [id] => 0 [answer] => ) ) 未点击提交按钮
Array ( [1] => Array ( [id] => 1 [answer] => A ) ) 点击一次提交按钮,这里记录了题号1和用户选项A……
但是当我答完所有的选择题
print_r($_SESSION[5]);
print($_SESSION[4]);的时候,只有$_SESSION[5]中有值,这个是最后一个题,也就是说$_SESSION[$i]中只有最后一个题。
$_SESSION[1]——$_SESSION[4]里面的值去哪里了,为什么没有被记录? 展开
2012-09-19
展开全部
这样不应该用SESSION来做
你每道题没有一个独立的name来区别, 那SESSION赋值必然是用入栈的方式
直接$_SESSION[] = $_POST[];
你要的效果得确可以实现, 但是这样, SESSION保存答案的键值是以答题顺序来定的
假设你有4道题, 我答了3道以后, 我刷新了页面
SESSION没有失效, 我又会重新从第一道题开始答, 但是SESSION之前保存的仍然存在
这样. 我最终答完后, SESSION会保存了7个答案
按照你要的思路, 我觉得用JS做会比较合适
你每道题没有一个独立的name来区别, 那SESSION赋值必然是用入栈的方式
直接$_SESSION[] = $_POST[];
你要的效果得确可以实现, 但是这样, SESSION保存答案的键值是以答题顺序来定的
假设你有4道题, 我答了3道以后, 我刷新了页面
SESSION没有失效, 我又会重新从第一道题开始答, 但是SESSION之前保存的仍然存在
这样. 我最终答完后, SESSION会保存了7个答案
按照你要的思路, 我觉得用JS做会比较合适
追问
谢谢你提出的思路,后来我又改了一下
$_SESSION=array("id"=>$_POST['i'],"answer"=>$_POST['style1']);
用SESSION来记录题号和用户的选项,我现在遇到的主要问题在于SESSION数组只能保存一组题号和选项。也就是我读取第三题,SESSION中保存的是第二题的题号和选项。读取第四题,SESSION中保存了第三题的题号和选项,同时第二题的选项会被替换掉,也就是被第三题的答案覆盖,不知道您能否理解我说的意思。
追答
这样的话
$id = $_POST['i'];
$answer = $_POST['style1'];
$_SESSION['answer'][$id] = $answer;
//这样是不是你要的效果?
print_r($_SESSION['answer']);
/*
这样写的话, 每次SESSION的值都会被替换掉
$_SESSION=array("id"=>$_POST['i'],"answer"=>$_POST['style1']);
*/
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把整段代码贴出来看下
能不能这样把数据库里的数据放到session里面
然后循环数据,每次循环几次
能不能这样把数据库里的数据放到session里面
然后循环数据,每次循环几次
追问
用户答题的选项是没存到数据库里的,我想这样直接赋给$_SESSION。
您的意思是不是直接把用户选项提交给数据库,然后再循环赋值给$_SESSION,如果是这样,虽然能达到我说的效果,但是就失去意义了,我不希望连接数据库。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以,但是$_SESSION[ 名称 ] 中要加名称。。
最好是将要存的数组组合成字符串储存在SESSION中,调用时再传给另一变量后打散成数组
最好是将要存的数组组合成字符串储存在SESSION中,调用时再传给另一变量后打散成数组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以用js来做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以的,只要你对应的题目与SESSON中的数组标签一致就行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询