php - foreach 循环中数组 undefined offset 通知

标签 php mysql arrays foreach prepared-statement

我有一个 form.php,其中有一个数组发布到 update.php 以更新 mysql 数据库。 每个的相关部分是:

表单.php

 if ($type == "1")      {echo ' 
    <input type="hidden" id="assettype" name="atype[]" value="'. $row['AType'] .'"/>
    <input type="hidden" id="assetid" name="aid[]" value="'. $row['AID'] .'"/>

    <input  type="text"  name="serialnum[]" value="'. $row['SerialNumber'] .'"/>
    <input type="text"  name="unitsize[]" value="'. $row['UnitSize'] .'"/>
    <input type="text"  name="prop1[]" value="'. $row['Prop1'] .'"/>    
    <input  type="text"  name="latitude[]" value="'. $row['Latitude'] .'"/>
    <input  type="text"  name="longitude[]" value="'. $row['Longitude'] .'"/>
                ';}  
if ($type == "2")       {echo ' 
    <input type="hidden" id="assettype" name="atype[]" value="'. $row['AType'] .'"/>
    <input type="hidden" id="assetid" name="aid[]" value="'. $row['AID'] .'"/>

    <input type="text"  name="serialnum[]" value="'. $row['SerialNumber'] .'"/>
    <input type="text"  name="unitsize[]" value="'. $row['UnitSize'] .'"/>
    <input type="text"  name="prop2[]"  value="'. $row['Prop2'] .'"/>
    <input type="text"  name="latitude[]" value="'. $row['Latitude'] .'"/>
    <input type="text"  name="longitude[]" value="'. $row['Longitude'] .'"/>
                ';}     

更新.php

foreach ($_POST['aid'] as $key=>$assetid) {
$atype = $_POST['atype'][$key];
if ($atype == "1")      {   

    $stmt =  $mysqli->stmt_init();
    $query = "UPDATE asset SET 
             SerialNumber=?,UnitSize=?,Prop1=?,Latitude=?,Longitude=?  WHERE AID = ?";
    if($stmt->prepare($query)) {

    $stmt->bind_param('sdddds', $serialnum, $unitsize, $prop1, $lat, $long, $assetid);

        $assetid = $_POST['aid'][$key];
        $serialnum = $_POST['serialnum'][$key];
        $unitsize = $_POST['unitsize'][$key];
        $prop1 = $_POST['prop1'][$key];
        $lat = $_POST['latitude'][$key];
        $long = $_POST['longitude'][$key];
        $stmt->execute();
    $stmt->close();
    }
}
elseif ($atype == "2")      {   

    $stmt =  $mysqli->stmt_init();
    $query = "UPDATE asset SET 
             SerialNumber=?,Prop2=?, Latitude=?,Longitude=? WHERE AID = ?";
    if($stmt->prepare($query)) {

    $stmt->bind_param('ssdds', $serialnum, $prop2, $lat, $long, $assetid);

        $assetid = $_POST['aid'][$key];
        $serialnum = $_POST['serialnum'][$key];
        $prop2 = $_POST['prop2'][$key];
        $lat = $_POST['latitude'][$key];
        $long = $_POST['longitude'][$key];
        $stmt->execute();
    $stmt->close();
     }
}}

这对于数组中除一个输入之外的所有输入都非常有效。 我不断收到以下信息:

Notice: Undefined offset: 3

与以下行相关:

$prop2 = $_POST['prop2'][$key];

除此之外,所有其他数据库字段都更新良好。谁能指出我正确的方向吗?

最佳答案

您应该为此数组输入字段使用相同的名称。即 prop[] ,但您使用了 prop1[] 和 prop2[]。

if ($type == "1")      {echo ' 
    <input type="hidden" id="assettype" name="atype[]" value="'. $row['AType'] .'"/>
    <input type="hidden" id="assetid" name="aid[]" value="'. $row['AID'] .'"/>

    <input  type="text"  name="serialnum[]" value="'. $row['SerialNumber'] .'"/>
    <input type="text"  name="unitsize[]" value="'. $row['UnitSize'] .'"/>
    <input type="text"  name="prop[]" value="'. $row['Prop1'] .'"/>    
    <input  type="text"  name="latitude[]" value="'. $row['Latitude'] .'"/>
    <input  type="text"  name="longitude[]" value="'. $row['Longitude'] .'"/>
                ';}  
if ($type == "2")       {echo ' 
    <input type="hidden" id="assettype" name="atype[]" value="'. $row['AType'] .'"/>
    <input type="hidden" id="assetid" name="aid[]" value="'. $row['AID'] .'"/>

    <input type="text"  name="serialnum[]" value="'. $row['SerialNumber'] .'"/>
    <input type="text"  name="unitsize[]" value="'. $row['UnitSize'] .'"/>
    <input type="text"  name="prop[]"  value="'. $row['Prop2'] .'"/>
    <input type="text"  name="latitude[]" value="'. $row['Latitude'] .'"/>
    <input type="text"  name="longitude[]" value="'. $row['Longitude'] .'"/>
                ';}     

实际页面更新如下:

$prop2 = $_POST['prop'][$key];

不知道你用的是什么逻辑,如果有逻辑错误就用,

$prop2 = !empty($_POST['prop2'][$key]) ? $_POST['prop2'][$key] : ''; 

关于php - foreach 循环中数组 undefined offset 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34903312/

相关文章:

PHP_XLSXWriter_plus大型Mysql数据集缺失数据

php - Wordpress 使用插件创建前端页面

phpMyAdmin - 不将 MySQL 查询读取为数字

python - 如何将多个数组输出添加到数据帧?

java - 在产生 NullPointerException 的 Java 中改组字符数组

php - 在事件网站中检索外部 Torrent 统计信息的最佳方式

javascript - 使用 javascript 继续或进入 PHP 循环

gzip - mysqldump 管道 gzip 速度差异

php - 从 Mysqli 中删除选定的 ID

python - 如何在除特定列索引之外的每一行中修改 Numpy 二维数组?