Wordpress モバイルバージョンエラー (Undefined index: action in)


Wordpress のプラグインアップデート後、モバイルバージョンの上部にエラーが表示されます。

[code]

    Notice : Undefined index: action in 
    /home/users/1/candle/web/Home page address/contact/index.php
     on line 42
    
[/code]

42番の文章を確認しましたが、何が問題なのかわかりません。

[code]

    if ($_REQUEST['action'] == 'rewrite') {
        $_POST = $_SESSION['inquiry'];
        $error['rewrite'] = true;}
    
[/code]




PHP の連想配列で，存在しない key へアクセスしようとしたときに

  * PHP5.4 〜 PHP7.4 ... Undefined index: {key_name} （Notice レベル）
  * PHP8.0 〜 ... Undefined array key "{key_name}" （Warning レベル）

というようなエラーメッセージが表示されます．

今回の場合は `$_REQUEST` 配列の `action` という key の値を取り出して， 'rewrite'
という文字列を比較しようとしているタイミングで， `$_REQUEST['action']` へのアクセスが発生していますが，このコードの実行時，この
key が存在していないということです．

`$_REQUEST` は， `$_POST`, `$_GET`, `$_COOKIE`
というスーパーグローバル変数の内容が合わさったものですので，リクエスト時にボディやクエリストリング, cookie に `action` という key
で値を渡していないんだと思います．

`$_REQUEST` から得られる値というのは，クライアント側から入力される値であり，サーバー側からしたらその存在が保証されているわけでは無いため，
key が無い，もしくは key があっても期待している値が入っていないことを想定したコードを書く必要があります．

今回でいうと， $_REQUEST['action'] が存在しない場合を考慮すべきですので，

[code]

    if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'rewrite') {
      // do something ...
    }
    
[/code]

と書くと安全です．

もしくは， Null 合体演算子を利用する方法も紹介します．これは PHP7 より追加された機能で，  
`$_REQUEST['action'] ?? 'default_value'`  
と  
`isset($_REQUEST['action']) ? $_REQUEST['action'] : 'default_value'`  
は等価です．

今回でいうと，

[code]

    if ($_REQUEST['action'] ?? '' === 'rewrite') {
      // do something ...
    }
    
[/code]

のように書くことで，安全に比較ができると思います．

