foreach 循环中带有数组的未定义偏移通知
Undefined offset notice with array within foreach loop
我有一个 form.php,其中有一个数组发布到 update.php 以更新 mysql 数据库。
每个的相关部分是:
form.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'] .'"/>
';}
Update.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] : '';
我有一个 form.php,其中有一个数组发布到 update.php 以更新 mysql 数据库。 每个的相关部分是:
form.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'] .'"/>
';}
Update.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] : '';