
PHPの勉強をしています。
先日ローカル環境のPHPを8に変更したのですが、その際今まで発生したいなかったWarningが沢山表示されて困っております、大きく仕様が変わったのでしょうか…。
アドバイスを頂けますと幸いです。
例えばメールフォームで今まで以下のように記述していたのですが、
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$error = [];
if ($_POST["lastName"] === "") {
$error["lastName"] = "blank";
}
}
?>
<form action="" method="post">
<fieldset>
<legend>お名前</legend>
<label>姓
<input type="text" name="lastName" value="<?php echo $_POST["lastName"]; ?>">
<span class="require">
<?php if ($error["lastName"]==="blank") {
echo "※お名前を入力してください。";
}
?>
</span></label>
<input type="submit" value="送信する">
</form>
しょっぱなからエラーが表示されます。
Warning: Undefined variable $error in E:\xampp\htdocs\index.php on line 45
Warning: Trying to access array offset on value of type null in E:\xampp\htdocs\index.php on line 45
遷移先の同ページで$_POSTを受け取った際にも以下のエラーが表示されます。
Warning: Undefined array key "lastName" in
調べてみると回避策として、isset()を指定するようなことがか書かれているのですが、色々と試してみるのですがうまく設定ができません。
ちなみに、error_reporting(E_ERROR | E_PARSE | E_NOTICE); でエラーを無視すると意図する動きをしてくれるのですが、そもそもきちんとした書き方ができていないからエラーが出ていると思うので、この辺り正しい書き方で対応したいと思っております。
アドバイスのほど宜しくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
php8 では以下が警告になります
* 未定義の変数を読み取ろうとした場合 → Undefined variable
* 未定義の配列のキーを読み取ろうとした場合 → Undefined array key
未定義の変数やキーが無くなる様に、プログラムを修正しましょう
例1)
条件によっては使わなくても、変数は必ず定義して初期化する
if (条件) { $error = []; }
↓
$error = [];
例2)
条件によっては値が無くても、キーは必ず定義して初期化する
if (条件) { $error["lastName"] = "blank"; }
↓
$error["lastName"] = (条件)? "blank": "";
例3)
どうしてもキーが無い状況があり得るなら、存在確認を事前に行う
if ($error["lastName"]==="blank")
↓
if ( isset($error["lastName"]) && $error["lastName"]==="blank" )
参考) 存在確認の手段候補
https://www.php.net/manual/ja/function.isset.php
https://www.php.net/manual/ja/function.array-key …
余談ではありますが、
php9 では警告ではなくエラーと判断されてしまう様です
面倒くさがらずにプログラム見直しをしましょう
https://wiki.php.net/rfc/undefined_variable_erro …
有難うございます!!
とても有益な情報有難うございます。
アドバイス頂きました内容を全て今は理解できておりませんが、とても的確なアドバイスを頂けていると感じております。有難うございます。
>>余談ではありますが、
>>php9 では警告ではなくエラーと判断されてしまう様です
有賀王御座います。
本当、ご指摘頂いた通りと認識しております。
なので、エラー回避などではなく、きちんと丁寧な記述ができるよう今回質問をさせて頂いた次第です。
ご連絡頂きました内容、1つ1つ確認して確実に理解したいと思います。
このような素人の質問に的確なアドバイスを頂きまして大変感謝申し上げます、有難う御座います。mm
No.1
- 回答日時:
下記に仕様変更で使えなくなった内容が書いているので、警告が表示された行と照らし合わせて修正して下さい。
https://www.php.net/manual/ja/migration80.incomp …
めんどくさいなら、PHP7に戻しましょう。
有難うございます。
まだPHPの8は使うには早いのかもしれませんね…。
ただ、書き方が緩いという認識はありましたので、これを機会にもう少し厳格な書き方を勉強したいと思いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 付属の写真のようにエラーが出るようにしたいです。 提示したコードだけでは、エラーメッセージ文字が上の 1 2021/11/23 08:27
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript javascriptとPHPで入力フォームのコードを書いているのですが、 流れとしては、①入力フォー 2 2021/12/02 09:18
- PHP アマゾンのような評価の星を選択した情報を確認画面でも表示させたいです。 1 2023/10/02 10:52
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript フォームの状態やGETのURLは保持しつつ、チェックボックスON/OFFした瞬間にSUBMITしたい 3 2021/10/24 01:12
- AJAX jQueryを使いformでsubmitした時の位置を保持する方法について 4 2021/12/23 16:23
- PHP 日付と年月日を選択するコードを書いているのですが、セレクトボックスの中に、「曜日」を表示させたいので 3 2021/12/10 09:20
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォントの色を変えるには?
-
PHPでネットワークドライブのop...
-
PHPで、エラーがない場合のみ画...
-
PHPでメールを送るために
-
「@$変数」の「@の意味は?」
-
ある条件に当てはまったときに...
-
【PHP】pearのインストール時の...
-
PHPエラー
-
エラーの意味!
-
ワーニングの非表示について
-
MovePrevious関数について
-
rename関数 できない
-
これは例外処理でしょうか?
-
PEAR::setErrorHandlingで戻り...
-
bindValueエラー
-
PHPのheader関数の疑問
-
SELECTの値を保持する
-
pchartというグラフ生成ライブ...
-
PHP関数 mb_strlenでエラーになる
-
自分のサーバーでのみstrtotime...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォントの色を変えるには?
-
トランザクションが原因?DBに...
-
PHPでfatal errorが出ても無視...
-
iframeからのアクセスか、ブラ...
-
PHP8を使うと、大量のWarningが...
-
パースエラーとは?
-
PHPで、エラーがない場合のみ画...
-
error_reporting(0);にも関わら...
-
PHPにて外部サイト内容が取得不...
-
「@$変数」の「@の意味は?」
-
PHPでネットワークドライブのop...
-
PHPで特定のURLにジャンプす...
-
phpのrenameでエラーが出ます
-
ある条件に当てはまったときに...
-
「file_get_contents」で「HTTP...
-
PostgreSQLへのinsert処理
-
正規表現での最後尾のバックス...
-
require_once で読み込まれたか?
-
awsにApacheとPHPを入れて、何...
-
IIS/PHPのサイトでたまにCGIエ...
おすすめ情報