在實作簡易部落格的編輯文章的功能時,實作內容可參考,需要讀取資料庫中的資料,而在讀取並轉換資料時,遇到了如何印出 option 的標籤且是被選取中的,實作過程中遇到了 Notice: Undefined offset 的錯誤訊息,而且我發現我的第五個選項,沒有預期的印出,代表迴圈並無跑到第五圈。
實作程式碼如下:
<?php
$type = escape($row['type']);
?>
<select id="post_type" name="type" class="required">
<?php
// 預設選項為五個
$option = [
1 => '<option value="1" >北部</option>',
2 => '<option value="2" >中部</option>',
3 => '<option value="3" >南部</option>',
4 => '<option value="4" >東部</option> ',
5 => '<option value="5" >離島</option>'
];
// 讀取資料庫中的 type 並替換 $option 的值
$selectedOption = NULL;
if ($type == 1) {
$selectedOption = array_replace($option,array(1 => '<option value="1" selected>北部</option>'));
}if ($type == 2) {
$selectedOption = array_replace($option,array(2 => '<option value="2" selected>中部</option>'));
}if ($type == 3) {
$selectedOption = array_replace($option,array(3 =>'<option value="3" selected>南部</option>'));
} if ($type == 4) {
$selectedOption = array_replace($option,array(4 => '<option value="4" selected>東部</option>'));
} if ($type == 5) {
$selectedOption = array_replace($option,array(5 => '<option value="5" selected>離島</option>'));
}
$optionLength = count($selectedOption); // $selectedOption的長度
echo $optionLength; // 確認 selectedOption的長度為 5
for($i = 0;$i < $optionLength; $i +=1){
echo $selectedOption[$i] . '<br>';
}
?>
</select>
在實際輸出,$option[4]= 5 => '<option value="5" >離島</option>'
並沒有被印出,並且出現Notice: Undefined offset: 0 in /opt/lampp/htdocs/alirong/week11/hw2/update.php on line 84
的錯誤訊息,因此爬文找到意思是並未設至 $option[0]
,因此讀取不到。
而在實作中只要將程式碼改為$i = 1
、$i <= $ $optionLength
for($i = 1;$i <= $optionLength; $i +=1){
echo $selectedOption[$i] . '<br>';
}
就可以順利印出 option 囉~
總結
這次遇到 Undefined offset 的問題,因 array 試圖讀取未賦值的 index = 0,而產生的錯誤,下次再設定資料庫的時候,也要考慮到結構,因為我沒特別設定 0 ,導致會出錯,不過可以運用 isset($array[0])
來判斷是否為空值,這邊紀錄一下,下次要小心點
參考資料
Notice: Undefined offset: 0 in
PHP 陣列出現 Notice : Undefined offset 警告的解決辦法