PHP:从旧表单中获取值
我在写考试代码。在表单中,我调用一个生成问题并存储学生答案的方法 我的问题是,在我将学生答案存储在数据库中的表单中,前一个问题的答案存储在当前学生答案字段中。根据我写的代码,即使学生的答案是对的,也总是错的 我觉得问题在于我将inset查询放在显示问题的display函数中,但我不知道如何修复它或将insert查询放在何处 例如: 问题1:学生的答案是4。PHP:从旧表单中获取值,php,mysql,forms,Php,Mysql,Forms,我在写考试代码。在表单中,我调用一个生成问题并存储学生答案的方法 我的问题是,在我将学生答案存储在数据库中的表单中,前一个问题的答案存储在当前学生答案字段中。根据我写的代码,即使学生的答案是对的,也总是错的 我觉得问题在于我将inset查询放在显示问题的display函数中,但我不知道如何修复它或将insert查询放在何处 例如: 问题1:学生的答案是4。 数据库中的学生答案字段存储为空 问题2:学生的答案是9。 数据库中的学生答案字段存储为4 问题3:学生的答案是2。 数据库中的学生答案字段存
数据库中的学生答案字段存储为空 问题2:学生的答案是9。
数据库中的学生答案字段存储为4 问题3:学生的答案是2。
数据库中的学生答案字段存储为9 以我调用方法(1)的形式,调用方法(2)和方法(3) 方法(2): 调用内部方法(1):
函数操作($sec、$levelofevel、$numOfQ、$EvalOrExam)
{
如果(isset($_POST['result']))
{
回声“
”;
$stdAnswer=$_POST['stdAnswer'];
$result=intval($_POST['result']);
如果(!isset($会话['correctAnswers'])和!isset($会话['ErrorAnswers'])和!isset($会话['Answers']))
{
$\会话['correctAnswers']=$correctAnswers=0;
$\会话['ErrorAnswers']=$ErrorAnswers=0;
$\会话['Answers']=$Answers=0;
}
其他的
{
$correctAnswers=$\会话['correctAnswers'];
$ErrorAnswers=$_会话['ErrorAnswers'];
$Answers=$\会话['Answers'];
}
如果($result!=$stdAnswer或$stdAnswer==“”)
{
$s++;
$Answers++;
}
else if($result==$stdAnswer)
{
$correctAnswers++;
$Answers++;
}
$\会话['correctAnswers]=$correctAnswers;
$\会话['ErrorAnswers']=$ErrorAnswers;
$\会话['Answers']=$Answers;
}
如果($\会话['Answers']<$numOfQ)
{
回声';
如果(isset($U会话['correctAnswers'])和isset($U会话['ErrorAnswers'])以及isset($U会话['Answers'])和$EvalOrExam='0')
{
回应正确的答案;
回声“
”;
回应错误的答案;
回声“
”;
}
echo$Answers+1;
回声“
”;
回声';
$operation=rand(1,4);//1加,2减,3乘,4除
//如果条件生成$x和$y的值
$Qbody=displayOperations($sec、$levelofevel、$operation、$x、$y、$EvalOrExam、$Answers、$stdAnswer、$result);
如果($EvalOrExam==1)
{
storeExamQ($sec、$level、$EvalOrExam、$Answers、$stdAnswer、$result、$Qbody);
}
回声“
”;
返回$result;
}
其他的
{
如果($EvalOrExam==0)
{
回声“
”;
回应正确的答案;
回声“
”;
回应错误的答案;
回声“
”;
/*回声“答案:”;
回音$答案*/
回声“
”;
$sql=“插入到`result`(`resultID`、`stdID`、`secID`、`grade`)值中(null、”$_SESSION['id']。”、'$sec'、'$correctAnswers.”);
$query=mysql\u查询($sql);
如果(!$query)回显“数据库错误:”.$sql;
}
else if($EvalOrExam==1)
{
$sql=“UPDATE`student`SET`activateExam`=0,其中`ID`='”$\u会话['ID'].'”;
$query=mysql\u查询($sql);
如果(!$query)回显“数据库错误:”.$sql;
echo mysql_error();
取消设置($_会话['examID']);
取消设置($_会话['operationsCount']);
未设置($_会话['ShapeCount']);
取消设置($_会话['calculationsCount']);
}
$\会话['finish']='1';
取消设置($_会话['correctAnswers']);
取消设置($_会话['ErrorAnswers']);
取消设置($_会话['Answers');
}
}
表格:
echo '<div>' . $result = evaluation('4', $level,$numOfQ,'1') . '</div>';
echo '<input type="hidden" name="result" value="' . $result . '">';
echo“”$结果=评估('4',$level,$numOfQ,'1');
回声';
方法求值调用同时调用display和store的操作。最可能的情况是,您的一条SQL语句格式不正确 以后
$sql = ...
插入:
echo $sql;
然后直接在数据库中运行SQL,看看是否得到了所需的内容
此外,请编辑您的问题以反映当前代码。有很多注释,很难弄清楚您的实际代码是什么
如果你需要更多的帮助,请告诉我。非常感谢你们,我非常感谢你们的帮助 通过调用方法解决了这个问题
storeExamQ($sec, $level,$EvalOrExam, $Answers, $stdAnswer, $result,$Qbody);
在方法(1)中,直接在学生答案和结果设置之后进行。如果调用函数
display
,我希望它只显示问题-我建议将保存答案的代码分离到另一个函数中,并在调用display
之前调用该函数。这会让事情更容易维护。我按照你说的做了,但我仍然有问题。我根据你说的更新了帖子中的代码。很难理解你的代码,因为我不知道这些变量是什么。但如果我不得不冒险摇摆一下,你会得到这一行$\u SESSION['examID']=$query+1代码>在插入之前。我会把它移到插入后。是的,我知道,我真的很感谢你的努力。通过$\u会话['examID']=$query+1代码>我的意思是,我希望代码获取最后一个考试id并将其递增1,以便为当前考试创建一个新id,我认为这与我遇到的问题无关。谢谢你,我想。那么恐怕你得再做一些调试了。我可以看到两个插入到考试
行中;我想这些就是给你带来问题的人?你能试着缩小范围吗?当您提交第一个问题时,答案根本没有被存储在哪里,您能将写入数据库的SQL回显出来吗?还要标出它是哪一行?
$sql = ...
echo $sql;
storeExamQ($sec, $level,$EvalOrExam, $Answers, $stdAnswer, $result,$Qbody);