Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.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 提交前修改$\u POST变量_Php_Html - Fatal编程技术网

Php 提交前修改$\u POST变量

Php 提交前修改$\u POST变量,php,html,Php,Html,我正在制作一个测验生成器,我有一个带有单选答案单选按钮的HTML表单。现在,当我提交表单时,$\u POST变量的内容在我提交表单时如下所示: Array ( [a1] => Bob [a2] => Bobby ) (鲍勃和鲍比是我选择的单选按钮) 我使用一个PHP函数生成这个表单,它除了返回HTML表单外,还返回一个答案数组。有没有办法修改$\u POST变量,使其具有“answer”字段(用于检查我的答案),如下所示: Array( [a1] => Bob [a2] =

我正在制作一个测验生成器,我有一个带有单选答案单选按钮的HTML表单。现在,当我提交表单时,$\u POST变量的内容在我提交表单时如下所示:

Array ( [a1] => Bob [a2] => Bobby )
(鲍勃和鲍比是我选择的单选按钮)

我使用一个PHP函数生成这个表单,它除了返回HTML表单外,还返回一个答案数组。有没有办法修改$\u POST变量,使其具有“answer”字段(用于检查我的答案),如下所示:

 Array( [a1] => Bob [a2] => Bobby [answers] => Array( [0] => Bob [1] => Bilbo ))
$answers = array('a1'=>'Robert', 'a2'=>'Hobo');

foreach($_POST as $key => $value)
{
   if (!array_key_exists($key, $answers))
   {
       continue;
   }

   if (trim($value) == $answers[$key])
   {
        // correct
   }
   else
   {
        // incorrect
   }
}
上面是我想到的用$\u POST数组检查应答数组的一种方法

编辑:有关我目前拥有的内容的更多信息:

  • 我有一个PHP函数getTest(),它响应HTML表单,并返回一个包含正确答案的数组
  • getTest()随机生成每个问题,因此正确答案是随机的
  • 主要问题是我有两个单独的PHP文件,questions.PHP和verify.PHP。
    • php使用getTest()响应表单,并具有答案数组
    • verify.php只包含$\u POST的内容,但不包含正确答案的数组

一般来说,有没有更好的方法来检查表单提交的结果?谢谢

做测验的最好方法是有一个答案数组和一个用户输入数组。通过一个循环并使用相同的增量与另一个进行比较

您可以获取所有post变量并创建一个数组print\r($\u post);然后,循环这个

$inputArray = //the post data into an array
$answerArray = array('a','b','a');
$numCorrect = 0;
for($a = 0; $a < count($inputArray); $a++)
{
if($inputArray[$a] == $answerArray[$a])
{
$numCorrect++;
}
}
$inputArray=//将数据发布到数组中
$answerArray=array('a','b','a');
$numCorrect=0;
对于($a=0;$a<计数($inputArray);$a++)
{
如果($inputArray[$a]==$answerArray[$a])
{
$numCorrect++;
}
}

进行测验的最佳方法是使用答案数组和用户输入数组。通过一个循环并使用相同的增量与另一个进行比较

您可以获取所有post变量并创建一个数组print\r($\u post);然后,循环这个

$inputArray = //the post data into an array
$answerArray = array('a','b','a');
$numCorrect = 0;
for($a = 0; $a < count($inputArray); $a++)
{
if($inputArray[$a] == $answerArray[$a])
{
$numCorrect++;
}
}
$inputArray=//将数据发布到数组中
$answerArray=array('a','b','a');
$numCorrect=0;
对于($a=0;$a<计数($inputArray);$a++)
{
如果($inputArray[$a]==$answerArray[$a])
{
$numCorrect++;
}
}

如果希望$\u POST包含数组,只需在表单的名称字段中使用括号数组符号即可

例如:

<fieldset class="Question1"> 
  <input type="radio" name="answers[]" value="Question1Answer1">Question1Answer1<br>
  <input type="radio" name="answers[]" value="Question1Answer2">Question1Answer2<br>
  <input type="radio" name="answers[]" value="Question1Answer3">Question1Answer3<br>
</fieldset>

<fieldset class="Question2"> 
  <input type="radio" name="answers[]" value="Question2Answer1">Question2Answer1<br>
  <input type="radio" name="answers[]" value="Question2Answer2">Question2Answer2<br>
  <input type="radio" name="answers[]" value="Question2Answer3">Question2Answer3<br>
</fieldset>

<fieldset class="Question3"> 
  <input type="radio" name="answers[]" value="Question3Answer1">Question1Answer1<br>
  <input type="radio" name="answers[]" value="Question3Answer2">Question1Answer2<br>
  <input type="radio" name="answers[]" value="Question3Answer3">Question1Answer3<br>
</fieldset>

如果希望$\u POST包含数组,只需在表单的名称字段中使用括号数组表示法即可

例如:

<fieldset class="Question1"> 
  <input type="radio" name="answers[]" value="Question1Answer1">Question1Answer1<br>
  <input type="radio" name="answers[]" value="Question1Answer2">Question1Answer2<br>
  <input type="radio" name="answers[]" value="Question1Answer3">Question1Answer3<br>
</fieldset>

<fieldset class="Question2"> 
  <input type="radio" name="answers[]" value="Question2Answer1">Question2Answer1<br>
  <input type="radio" name="answers[]" value="Question2Answer2">Question2Answer2<br>
  <input type="radio" name="answers[]" value="Question2Answer3">Question2Answer3<br>
</fieldset>

<fieldset class="Question3"> 
  <input type="radio" name="answers[]" value="Question3Answer1">Question1Answer1<br>
  <input type="radio" name="answers[]" value="Question3Answer2">Question1Answer2<br>
  <input type="radio" name="answers[]" value="Question3Answer3">Question1Answer3<br>
</fieldset>

如果您想在提交表单时发送答案,可以使用隐藏类型(如)的输入,这些输入在页面上不可见。但是,用户只需检查页面的源HTML即可看到这些答案,因此这可能不适合您的使用。希望这对您有所帮助

如果您想在提交表单时发送答案,您可以使用隐藏类型(如)的输入,这些输入在页面上是不可见的。但是,用户只需检查页面的源HTML即可看到这些答案,因此这可能不适合您的使用。希望这能有所帮助

我想你需要做的是看一下会议

  • 这样,在questions.php上,您可以将答案保存到会话变量
  • 然后在verify.php上,您可以从会话变量中读取答案,并将它们与$\u POST变量提供的答案进行比较

我想你需要做的是看一下会话

  • 这样,在questions.php上,您可以将答案保存到会话变量
  • 然后在verify.php上,您可以从会话变量中读取答案,并将它们与$\u POST变量提供的答案进行比较

如果您真的愿意,您可以在表单中使用隐藏字段来提交答案数组。但是,任何人都可以更改您的来源并修改正确答案

最好的方法是在处理脚本中有一个具有相同键(a1、a2)但具有正确答案的数组

您的处理脚本如下所示:

 Array( [a1] => Bob [a2] => Bobby [answers] => Array( [0] => Bob [1] => Bilbo ))
$answers = array('a1'=>'Robert', 'a2'=>'Hobo');

foreach($_POST as $key => $value)
{
   if (!array_key_exists($key, $answers))
   {
       continue;
   }

   if (trim($value) == $answers[$key])
   {
        // correct
   }
   else
   {
        // incorrect
   }
}

如果您真的想,您可以在表单中使用一个隐藏字段来提交答案数组。但是,任何人都可以更改您的来源并修改正确答案

最好的方法是在处理脚本中有一个具有相同键(a1、a2)但具有正确答案的数组

您的处理脚本如下所示:

 Array( [a1] => Bob [a2] => Bobby [answers] => Array( [0] => Bob [1] => Bilbo ))
$answers = array('a1'=>'Robert', 'a2'=>'Hobo');

foreach($_POST as $key => $value)
{
   if (!array_key_exists($key, $answers))
   {
       continue;
   }

   if (trim($value) == $answers[$key])
   {
        // correct
   }
   else
   {
        // incorrect
   }
}

不确定,但看起来您要求的是解决方案Y,而您的问题是X()

XY的问题是当你需要做X,你认为你可以用Y 要做X,你就要问如何做Y,什么时候你才是真正应该做的 说明你的X问题是什么。可能有一个Z解是 甚至比Y更好,但如果X从未被提及,没有人能提出它

通常不建议修改$u POST数组,也不建议将带有问题的答案发送到客户端。相反,这种方法应该是这样的,因为
questions.php
不需要答案,但是
verify.php
需要答案,所以只有
verify.php
可以访问答案

例如,在考试时,答案清单永远不会与试卷一起送到考场

我已经冒昧地修改了你的代码结构。如果你仍然想使用你自己的代码,请发布它,然后你可以得到你想要的答案

尝试使用以下方法:

question.php:

<form action="verify.php" method="POST">
<fieldset class="Question1"> Complete this: ___<b>bar</b>
  <input type="radio" name="answers[]" value="foo">Foo<br>
  <input type="radio" name="answers[]" value="too">Too<br>
  <input type="radio" name="answers[]" value="cho">Cho<br>
</fieldset>

<fieldset class="Question2"> Complete this: ___<b>overflow</b> 
  <input type="radio" name="answers[]" value="stack">Stack<br>
  <input type="radio" name="answers[]" value="stock">Stock<br>
  <input type="radio" name="answers[]" value="stick">Stick<br>
</fieldset>
</form>
//correct answers
$answers = array("foo", "stock");
include("answers.php");
$user_answers = $_POST["answers"];
$user_answers_count = count($user_answers);

$error = "";
for($i=0;$i<$user_answers_count;$i++)
    if($user_answers[$i] !== $answers[$i]) //verify
        $error[] = "Answer for Question ".($i+1)." is wrong!";

if(empty($error))
    //Notify that user has passed the Quiz
else
    //Notify that user has NOT passed the Quiz
    //print the $error array 
verify.php:

<form action="verify.php" method="POST">
<fieldset class="Question1"> Complete this: ___<b>bar</b>
  <input type="radio" name="answers[]" value="foo">Foo<br>
  <input type="radio" name="answers[]" value="too">Too<br>
  <input type="radio" name="answers[]" value="cho">Cho<br>
</fieldset>

<fieldset class="Question2"> Complete this: ___<b>overflow</b> 
  <input type="radio" name="answers[]" value="stack">Stack<br>
  <input type="radio" name="answers[]" value="stock">Stock<br>
  <input type="radio" name="answers[]" value="stick">Stick<br>
</fieldset>
</form>
//correct answers
$answers = array("foo", "stock");
include("answers.php");
$user_answers = $_POST["answers"];
$user_answers_count = count($user_answers);

$error = "";
for($i=0;$i<$user_answers_count;$i++)
    if($user_answers[$i] !== $answers[$i]) //verify
        $error[] = "Answer for Question ".($i+1)." is wrong!";

if(empty($error))
    //Notify that user has passed the Quiz
else
    //Notify that user has NOT passed the Quiz
    //print the $error array 
include(“answers.php”);
$user\u answers=$\u POST[“answers”];
$user\u answers\u count=计数($user\u answers);
$error=“”;

对于($i=0;$i不确定,但看起来您在寻求解决方案Y,而您的问题是X()

XY的问题是当你需要做X,你认为你可以用Y 做X,所以你问如何做Y,当你做了什么