[PHP-users 7288] Re: フォームの変数について

Masaaki Kikuzawa php-users@php.gr.jp
Mon, 06 May 2002 11:17:47 +0900


菊澤 と申します。

On Mon, 06 May 2002 05:36:30 +0900
naoki kishida <kishida@fk.urban.ne.jp> wrote:

> また、コーディング標準の違いの話かもしれませんが
>   <form action="submitmsg.php?id=<?=$id?>" method="post">
> とするより
>   <form action="submitmsg.php" method="post">
>   <input type="hidden" name="id" value="<?=$id?>">
> のほうが好きです。

上のケースで、$_POST['id']がどうなっているのか
ちょっと、おもしろそうなので、テストしてみました。

結果:
上のケースでは、$_POST['id']には値が入ってませんでした。
#$_GET['id']には、入っていました。
また、下記のテストスクリプトを実行したところ、
$_POST['id']と$_GET['id']に別々な値が入っていました。
$idには、$_GET['id']が入っていました。
#variables_orderの順に入れているのですね。

結論:
$_POST['id']と$_GET['id']と$idの使用方法を注意する
必要があり、無用な混乱を招きそうなので、上のような
使用方法は、しない方が良いと思います。

テスト環境:
Kondara Linux 2000
Apache 1.3.14
PHP 4.1.2
php.iniの関連項目の設定値
variables_order   = "EGPCS"
register_globals  = On

テストスクリプト:
<?
header("Content-type: text/html; charset=euc-jp");
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  echo "\$_POST['id'] = {$_POST['id']}<br>";
  echo "\$_GET['id'] = {$_GET['id']}<br>";
  echo "\$id = $id<br>";
}
else {
  echo <<<EOD
  <form action="index.php?id=2" method="post">
  <input type='hidden' name='id' value='1'>
  <input type='submit' value='ぽちっとな'>
  </form>
EOD;
}
?>

結果:
$_POST['id'] = 1
$_GET['id'] = 2
$id = 1

--------------------------------------------
菊澤 正明 mailto:kikuzawa@coo-co-ltd.co.jp
(株)空 Coo co.,ltd. http://www.coo-cyber.com