Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:从旧表单中获取值_Php_Mysql_Forms - Fatal编程技术网

PHP:从旧表单中获取值

PHP:从旧表单中获取值,php,mysql,forms,Php,Mysql,Forms,我在写考试代码。在表单中,我调用一个生成问题并存储学生答案的方法 我的问题是,在我将学生答案存储在数据库中的表单中,前一个问题的答案存储在当前学生答案字段中。根据我写的代码,即使学生的答案是对的,也总是错的 我觉得问题在于我将inset查询放在显示问题的display函数中,但我不知道如何修复它或将insert查询放在何处 例如: 问题1:学生的答案是4。 数据库中的学生答案字段存储为空 问题2:学生的答案是9。 数据库中的学生答案字段存储为4 问题3:学生的答案是2。 数据库中的学生答案字段存

我在写考试代码。在表单中,我调用一个生成问题并存储学生答案的方法

我的问题是,在我将学生答案存储在数据库中的表单中,前一个问题的答案存储在当前学生答案字段中。根据我写的代码,即使学生的答案是对的,也总是错的

我觉得问题在于我将inset查询放在显示问题的display函数中,但我不知道如何修复它或将insert查询放在何处

例如:

问题1:学生的答案是4。
数据库中的学生答案字段存储为空

问题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);