LoginSignup
0
0

More than 5 years have passed since last update.

フォームからGETで送信すると、クエリ文字が無視されてしまう!?

Posted at

フォームからGETで送信すると、クエリ文字が無視されてしまう!?

<form method="get" action="?page=mylist">

これで送信すると、

$page = isset($_GET['page']) ? (string)$_GET['page'] : '';

$_GET['page'] は取得できない。

  <input type="hidden" name="p" value="del" /> ...

フォームにこんなのがあったら、$_GET['p']は取得出来るのに。
おかしいな、URIのパラメータは無視されてしまう。

うまく取得できてないんだろうか、しらべる。

$qs = $_SERVER['QUERY_STRING'];

クエリ文字列からは「page=mylist」が取得出来ました。

フォームで送信すると、クエリ文字は無視されてしまう!!!
気づかなかった!

なんとなくダメっぽい。諦めましたorz

ハマったきっかけ

     add_options_page(
        "マイリスト管理画面",
        "マイリスト",
        'manage_options',
        'mylist',
        function() use ($table)
        {
            echo '<form method="get" action="?page=mylist">';
            $table->search_box('検索する', 'items');
            $table->display();
            echo '</form>';
        }
    );

WordPressでこんなコード書いてました(一部省略)。

http://wordpress/wp-admin/options-general.php?page=mylist

↑オプションメニューのページからフォームをGETで送信する(hostsにて「wordpress」を仮想設定)。

オプションページのリンクはこのようにpageにスラグを貼り付けているわけで。
ここが無視されると当然ちゃんとしたページが表示されない。

なぜPOSTではなくGETで送ろうとした・・・!?

ワードプレス管理画面の「投稿」では、POSTはGETで送信してる。

http://wordpress/wp-admin/edit.php

でも送信先は「edit.php」だからクエリ文字使わないためきちんとうごく。

     add_options_page(
        "マイリスト管理画面",
        "マイリスト",
        'manage_options',
        'mylist',
        function() use ($table)
        {
            $page = esc_attr(isset($_GET['page']) ? (string)$_GET['page'] : '');

            echo '<form method="get">';
            echo sprintf('<input type="hidden" name="page" value="%s" />', $page); // ←しゃーない
            $table->search_box('検索する', 'items');
            $table->display();
            echo '</form>';
        }
    );

仕方ないのでhiddenに入れておく。
もっといい方法とかあったら教えてください!

結局WordPressがわの問題ではなかったorz

次はWordPressのリストテーブルについて書きます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0