-1

我有一个显示数据库中的选择 ID、选择和定义配对的表单。表单是动态的……取决于用户,可以有任意数量的这些配对。以下是三个配对的示例:

选择 ID、选择、定义

选择 ID、选择、定义

选择 ID、选择、定义

该页面显示得很好,但如果用户想要编辑选择或定义,我在提交表单时收到以下错误(注意:第 41 行是我的更新查询):

“注意:未定义的偏移量:3 in(链接到我的 php 文件)在第 41 行”

我假设通知告诉我查询没有读取我的三个数组中的信息......但我不知道我应该在我的查询中输入什么,以便它可以正确读取。非常感谢您的帮助。

if(isset($_POST['submit'])){    
    $selection_id = array();
    $selection = array();
    $definition = array();

foreach ($_POST as $key => $value){     
    // If array variable starts with "pd_selection_id_for_" save to $selection_id array, otherwise continue to the next array.  

    if(strpos($key, 'pd_selection_id_for_') !== false){
        $selection_id[] = mysql_real_escape_string($value);
    }else if(strpos($key, 'selection_for_') !== false){
        $selection[] = mysql_real_escape_string($value);
    }else if(strpos($key, 'definition_for_') !== false){
        $definition[] = mysql_real_escape_string($value);
    }
}

// Count one of the arrays to select the paired fields and update the database.

$total = count($definition);

for ($i=1; $i <= $total; $i++){
    // Update query for the paired selections and definitions.
    $query = mysql_query("UPDATE `pd_selections` SET `pd_selection` = '$selection[$i]', `pd_definition` = '$definition[$i]' WHERE `pd_selection_id` = '$selection_id[$i]' ") or die(mysql_error());
}

}

4

2 回答 2

0

第 41 行的小语法错误修复如下:

$query = mysql_query("UPDATE `pd_selections` SET `pd_selection` = '".$selection[$i]."', `pd_definition` = '".$definition[$i]."' WHERE `pd_selection_id` = '".$selection_id[$i]."'") or die(mysql_error());
于 2013-08-12T20:18:16.053 回答
0

Undefined Offset错误意味着您尝试在数组中访问的位置未设置,因此未定义。

您遇到的问题是您的数组未在您尝试从循环访问的索引处初始化,请尝试以下操作:

$i = 0;
foreach ($_POST as $key => $value){     
   //initialize array at position $i
   $selection_id[$i] = $selection[$i] = $definition[$i] = '';

   if(strpos($key, 'pd_selection_id_for_') !== false){
       $selection_id[$i] = mysql_real_escape_string($value);
   }else if(strpos($key, 'selection_for_') !== false){
       $selection[$i] = mysql_real_escape_string($value);
   }else if(strpos($key, 'definition_for_') !== false){
       $definition[$i] = mysql_real_escape_string($value);
   }

   $i++;
}

这样您就知道所有数组的大小都是相同的,因此将设置在与其他数组相同的位置。

于 2013-08-12T20:19:32.670 回答