0

我使用 PHP 做了一个简单的测验评分,但它出现了无法识别的偏移错误,但它工作正常。

错误:

Notice: Undefined offset: 0 in C:\Users\scorequiz1.php on line 17
Notice: Undefined offset: 1 in C:\Users\scorequiz1.php on line 18
Notice: Undefined offset: 2 in C:\Users\scorequiz1.php on line 19
Notice: Undefined offset: 3 in C:\Users\scorequiz1.php on line 20
Notice: Undefined offset: 4 in C:\Users\scorequiz1.php on line 21

Notice: Undefined offset: 0 in C:\Users\scorequiz1.php on line 52
Question 1. Correct.

Notice: Undefined offset: 1 in C:\Users\scorequiz1.php on line 52
Question 2. Incorrect.

Notice: Undefined offset: 2 in C:\Users\scorequiz1.php on line 52
Question 3. Correct.

Notice: Undefined offset: 3 in C:\Users\scorequiz1.php on line 52
Question 4. Correct.

Notice: Undefined offset: 4 in C:\Users\scorequiz1.php on line 52
Question 5. Incorrect.

第 17 至 21 行:

$data[0] = $_POST["a"];
$data[1] = $_POST["b"];
$data[2] = $_POST["c"];
$data[3] = $_POST["d"];
$data[4] = $_POST["e"];

第 50-56 行:

for($i = 0; $i < 5; $i++)
{
     if($answer[$i] == 1)
         echo "Question " . ($i+1) . ". " . "Correct.<br/>";
     else
         echo "Question " . ($i+1) . ". " . "Incorrect.<br/>";
}

我的测验就是这样。问题的选项具有名称“a”到“e”以及检查正确答案的值

<!-- question 1---->
<INPUT TYPE="radio" NAME="a" VALUE="1">10 days<BR>
<INPUT TYPE="radio" NAME="a" VALUE="1">40 days<BR>

<!-- question 2---->
<INPUT TYPE="radio" NAME="b" VALUE="1">True<BR>
<INPUT TYPE="radio" NAME="b" VALUE="1">False<BR>

我不确定有什么问题

4

3 回答 3

0

上半年最可能的问题是$data可能已经设置为其他内容。尝试这个:

$data = Array($_POST['a'],$_POST['b']...);

下半场,你确定你定义$answer正确吗?看起来你的意思是$data在那里。

旁注:我可以通过以下方式立即在您的测试中获得满分:

(function() {
    var qsa = document.querySelectorAll("input[type=radio]"), l = qsa.length, i;
    for( i=0; i<l; i++) if( qsa[i].value == "1") qsa[i].checked = true;
})();

只需将其粘贴在控制台中,测试将自动填写正确答案。

于 2012-05-10T23:43:12.547 回答
0

你的代码看起来有两个可能的问题

  1. 您正在为$data变量设置值并使用$answer变量来检查正确性。如果两个变量是有意的,则意味着您必须使用某个数据库检查它并$answer在其他地方创建您未显示的数组 - 也共享该代码。
  2. 您共享的示例 HTML 已value="1"写入问题的所有选项。如果这正是您在代码中的方式,则意味着即使选择了任何答案,您也会得到 1。
于 2012-05-11T07:31:44.930 回答
0

在数组中引用它们之前先尝试验证值
我通常先使用空来检查,所以在你的情况下,只有在它们不为空时才继续运行代码

    if (!empty($data[0])) 
    if (!empty($answer[$i])) 
于 2012-05-11T00:25:06.753 回答