2006年09月14日

phpでPOSTとGETの情報を簡単に確認する方法 このエントリーをはてなブックマークに追加

こんにちは、陸遜です(嘘です)。

phpでWebプログラミングをする際には、基本的にはフォーム内で受け取った変数を加工してphpのプログラム内でごにょごにょやって結果を標準出力に返すってのが基本だと思う。
で、フォームのデータはどんな風にphpで取得するかってーと、例えばこんなフォームがあったとする。

<form name="my_form" method="post" action="./index.php">
<input type="text" name="user" value="りょーち"><br />
<input type="text" name="pref" value="北海道"><br />
<input type="submit" value="送信" />
</form>


で、ここで注意いただきたいのが、formを送るメソッド(方法)である

通常フォームで情報を送信する際によく使われるのが、「POST」と「GET」。
上記の場合は「post」と言う方法でフォームの内容を送っている。
phpではフォームの情報を受け取る際、このメソッドによって受け取り方が違う。
正確に言えば、メソッドによってフォームに格納される変数の名前が違うのだ。

POSTの場合は「$_POST」、GETの場合は「$_GET」という感じになる(大文字であることに注意)。
自分で作ったプログラムなどをデバッグする際には、送られてきたフォームの情報があっているかどうかを確認しながらデバッグを繰り返す。

この「$_POST」とか「$_GET」にフォームの内容がどのように格納されるかというと、配列として格納されちゃいます。これは非常に便利。

たとえば、上記のフォームの場合は「POST」で送信しています。
ここで、userに書かれている内容は、$_POST['user']という連想配列で取得できます。
同様に、prefに書かれている内容は、$_POST['pref']という連想配列で取得できます。

<form name="my_form" method="get" action="./index.php">
<input type="text" name="user" value="ryouchi"><br />
<input type="text" name="pref" value="北海道"><br />
<input type="submit" value="送信" />
</form>


って感じでGETメソッドで送信されている場合は、
userに書かれている内容は、$_GET['user']という連想配列で取得できます。
prefに書かれている内容は、$_GET['pref']という連想配列で取得できます。

なかなか本題に入ることができないが、上記の例ではFORMで渡される変数が2個くらいなので、デバッグ時には、変数を確認したいところで、
echo $_POST['user'];
echo $_POST['pref'];

って感じで調べればよいのだが、渡される変数がかなり多い場合に、いちいちフォームの変数を指定するのは相当面倒である。

ここからやっと本題。

で、どーするかってーと、phpで配列の内容を全て出力するprint_r()関数を使うのがよろしい。

print_r($_POST);


とすると、

Array( [user] => りょーち [pref] => 北海道 )


って感じでブラウザに表示されるので便利。
さらに、<pre>タグを利用すると可読性が高まる。

echo "<pre>";
print_r($_POST);
echo "</pre>";


って感じにすれば、

Array
(
  [user] => りょーち
  [pref] => 北海道
)

って感じで表示されて非常に読みやすい。

で、いちいち、<pre>タグを書くのも面倒なので、こんな感じで簡単な関数を作ってみる。

function debugprint($str){
  echo "<pre>";
  print_r($str);
  echo "</pre>";
}


こうしておけば、

debugprint($_POST);


と書けば、

echo "<pre>";
print_r($_POST);
echo "</pre>";


を書いたのと同じようになる。

お分かりかと思うが、このdebugprint()関数は見ての通り、配列の内容を<pre>タグで囲んでprint_r()するっていう関数なので、POSTやGETの内容だけでなく、プログラム内で利用する全ての配列変数に用いることができるので便利である。

更に、この関数を「debug.ini」というファイルに下記のような感じで格納しておく。
<?php
function debugprint($str){
  echo "<pre>";
  print_r($str);
  echo "</pre>";
}
?>


で、index.phpなどのファイルの先頭あたりに、
include("debug.ini");

って感じにincludeしておけばよい。

更に、debug.iniを下記のように設定しておくとよいかも。
<?php
function debugprint($str){
  if (DEBUG == "ON"){
    echo "<pre>";
    print_r($str);
    echo "</pre>";
  }
}
?>

こうすれば、index.phpに、

define ("DEBUG", "ON");
include("debug.ini");


って感じにしておけば、定数DEBUGがONのときだけdebugprint()が実行されるのだ。

php、やっぱり便利っす。
posted by りょーち | Comment(0) | TrackBack(0) | Web周辺技術
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: