我有未定义的偏移量:第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());
}
}
答案 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中删除),最好转到mysqli
或PDO
。
PDO
和mysqli
都有预备语句,这对于转义数据有很大帮助(或者至少看到插入到数据库中的数据不会对它做坏事,比如的 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());
}
}
}