iT邦幫忙

0

PHP5 升級到PHP8 有Error

  • 分享至 

  • xImage

各位先進大家好
小弟對於php還是國小階段/images/emoticon/emoticon20.gif
正在做PHP5升到PHP8
目前遇到一個問題
前人留下的一段Code如下

if(isset($_GET['kind']) && $_GET['kind']==1 || $_GET['kind']==2 || $_GET['kind']==3){
	$kind=$_GET['kind']+1;
}else{
	$kind=2;
}
$kabout="about".$kind;

升到PHP8後出現以下的Error

Warning: Undefined array key "kind" in /Applications/XAMPP/xamppfiles/var/web/csweb/about_foundation.php on line 45

小弟查了許多資料
可以用isset來避免
但小弟每個kind都加卻不行/images/emoticon/emoticon02.gif
不知各位先進是否可以指點小弟要如何改寫這段Code?
在此先謝謝各位先進

淺水員 iT邦大師 6 級 ‧ 2024-01-10 00:16:13 檢舉
如下面的回答,你要注意一下 operator precedence 與 shortcut 的問題
&& 優先於 ||
而 || 如果前面不成立,會繼續判斷後面是否成立
ommjki iT邦新手 3 級 ‧ 2024-01-10 09:16:12 檢舉
小弟收到, 謝謝淺水員先進指導
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

5
Ray
iT邦大神 1 級 ‧ 2024-01-09 23:06:26
最佳解答

以下由 ChatGPT 3.5 回答, 請自行驗證:

在 PHP 8 中,若使用$_GET['kind']且未確認是否存在,可能會導致未定義的索引錯誤。為了避免這種錯誤,可以使用??來提供一個預設值,或者使用 filter_input 函數來確認輸入的存在性。

以下是修正後的程式碼:

if(isset($_GET['kind']) && ($_GET['kind']==1 || $_GET['kind']==2 || $_GET['kind']==3)){
    $kind=$_GET['kind']+1;
}else{
    $kind=2;
}

$kabout="about".($kind ?? 2);

或者使用 filter_input:

$kind = filter_input(INPUT_GET, 'kind', FILTER_VALIDATE_INT, ['options' => ['default' => 2]]);

if ($kind === false || !in_array($kind, [1, 2, 3])) {
    $kind = 2;
}

$kabout = "about" . ($kind + 1);
ommjki iT邦新手 3 級 ‧ 2024-01-10 09:17:02 檢舉

小弟試了,真的可以,謝謝raytracy先進指引明路

我要發表回答

立即登入回答