注意:未定义的偏移量:2如何解决?

时间:2013-12-16 08:44:27

标签: php

我有未定义的偏移量:第11行和第12行有2个错误。这是第6行到第15行的代码。

    if(isset($_POST['submit'])){

        $surveyID =$_POST['surveyCategory'];

        for($i=0; $i<count($_POST['id']); $i++){
            $questionID = $_POST['id'][$surveyID][$i];
            $answer = mysql_real_escape_string(htmlspecialchars($_POST['answer'][$surveyID][$i]));
            mysql_query("INSERT INTO answers(survey_id, question_id, answer_body) VALUES   ('$surveyID', '$questionID', '$answer')") or die (mysql_error());
        }
    }

5 个答案:

答案 0 :(得分:6)

undefined offset表示数组已超出界限 即,数组大小小于您尝试从中获取对象的索引。

从查看代码开始,我猜它的$surveyID高于数组大小($_POST['id']数组)或$id$_POST['id'][$surveyID] }阵列) 这两个数组都是数组吗?

您似乎在$_POST['id']数组大小上进行迭代,但是您尝试从$_POST['id'][$surveyID]数组中获取对象,这可能是一个问题,因为您永远不会检查该数组的大小。<登记/> 您可能希望使用:$_POST['id'][$i]进行迭代,或者在循环中检查数组$_POST['id'][$surveyID]的大小(将猜测更晚)。

我建议检查以便$_POST['id']数组也设置$surveyID键(以及您希望它的类型),因为POST参数几乎可以是任何东西(客户端)完全控制post params,他们可以将那些他们想要的值发送到你的脚本中。

修改
当我在它时:在将它们插入数据库之前,始终验证/转义您的Request参数(在本例中为POST)。
您目前正在使用已弃用的Mysql_*(将从php中删除),最好转到mysqliPDO
PDOmysqli都有预备语句,这对于转义数据有很大帮助(或者至少看到插入到数据库中的数据不会对它做坏事,比如的 SQL-注射)。
所以,请看看那些(检查php.net文档)!

答案 1 :(得分:2)

count正在$_POST['id'],但正在迭代$_POST['id'][$surveyID]

更改为$i < count($_POST['id'][$surveyID])

答案 2 :(得分:1)

错误 - undefined offset:2 由于您使用的索引不存在而发生此问题。

您的代码中的问题是您的帖子未使用您正在使用的索引提交。

请按照以下方式打印$_POST并进行检查。

echo '<pre>';
print_r($_POST);

答案 3 :(得分:0)

尝试添加print_r($_POST['id'])以查看此数组元素包含的内容。

我敢打赌它不是一个多维数组。

答案 4 :(得分:0)

if(isset($_POST['submit'])) {
    $surveyID = $_POST['surveyCategory'];
    for($i=0; $i<count($_POST['id']); $i++) {
        if($i <> count($_POST['id'])) {
            $questionID = $_POST['id'][$surveyID][$i];
            $answer = mysql_real_escape_string(htmlspecialchars($_POST['answer'][$surveyID][$i]));
            mysql_query("INSERT INTO answers(survey_id, question_id, answer_body) VALUES   ('$surveyID', '$questionID', '$answer')") or die (mysql_error());
        }
    }
}