忍者ブログ
バナヤンの忍者風呂
忍者ブログのカスタマイズ、各種WEBツールのテストなど試行錯誤の日々。 VMLによる地図の作成を研究していましたが、一時中断して、今はPHPを勉強しているところです。
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
お知らせ
この欄には管理人からのお知らせなどを掲載します。
[48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHP <?= $_SERVER[PHP_SELF] ?>

PHPで会員登録システムを作りたい。そのために必要な知識をひとつひとつ確認していこうと思っています。今回のテーマは「1粒で3回おいしい <?= $_SERVER[PHP_SELF] ?>」

次のように画面が推移する会員登録システムを作ろうと思っています。
私はうっかりものなので、パスワードなど入力間違いすることがたまにあります。そこで、本登録前に1度、入力データを確認する画面を設けます。

[フロー概要]

① ユーザー情報入力画面
  (ユーザーid、パスワード、メールアドレス)
     ↓
  「チェック」ボタンを押すと、使用文字などを形式チェック
   不適切なら①をやり直し、適切なら②の画面へ

② 入力情報確認画面
  形式チェックが済んだ入力データを確認します。
  修正が必要なら、データを修正して「チェック」ボタン、
  OKなら「登録」ボタンを押します。

  「チェック」ボタンを押した場合には、
  もう1度形式チェックを行い、適切なら②、不適切なら①へ戻ります。

  「登録」ボタンを押した場合には③へ

③ 登録処理画面
  ユーザー情報ファイルまたはデータベースへユーザー情報を書き込みます。
  ページには、登録完了の旨、表示します。

--------------------------------------
以上のフローを3つのファイルに分けて処理するやり方もあります。その場合、次のファイルにユーザー情報を渡す必要があり、フォームで送信して、$_POST変数で受けるという作業を繰り返さなければなりません。

データ項目が同じであり、同じようなレイアウトになるのであれば、1つのファイルで済ませたいものです。そこで登場するのが、自分自身に送信するという方法。<form method="post" action="このファイル名" >と記載すれば、自分自身に送信されます。

フォームで入力した情報は action属性に記載したファイルに送信されます。その送信先のファイル名を自分自身にすることもできます。そしてinput要素のvalue属性に$_POST['usrid']というように記載すれば、POSTメソッドで受信した値を表示することができます。

また、チェック済みなのかそうでないのか、登録してよいのか悪いのかを送信されるデータで判断することができます。条件分岐して、入力モード、チェック済モード、登録モードで処理することを分けられれば、3つのファイルにすることなく1つのファイルでやりたいことをすべて記述できます。

<form method="post" action="このファイル名" >の"このファイル名"は、"abc.php"というようにパス名をそのまま記載すればいいのですが、PHPには、わざわざファイル名を記載しなくてもよい方法も提供しています。

それが「<?= $_SERVER[PHP_SELF] ?>」です。
「<?= ?>」は、「<?php echo ?>」の短縮形です。
「$_SERVER[PHP_SELF] 」は、実行しているファイルのパス名を表します。すなわち、PHPファイル自分自身です。

この3モードによる処理のサンプルを記しておきましょう。4桁の数字を登録するという例です。



<?php
if(ereg("^[0-9]{4}$",$_POST['str'])){
$mode="checked";
$title="チェック済モード";
$msg="入力値は適正です。
修正する場合は「チェック」、
確定する場合は「regist」をクリック。";
}else{
$mode="input";
$title ="入力モード";
$msg="半角数字4文字を入力して下さい。";
}
if($_POST['regist']){
$mode="regist";
$title ="登録モード";
$msg="確定しました。";
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Pragma" content="no-cache">
<title>3モード・テスト</title>
</head>
<body>
<h1><?= $title ?></h1>
<p><?= $msg ?></p>
<form method='post' action="<?= $_SERVER[PHP_SELF] ?>">
<input type='text' name="str" value="<?= $_POST['str'] ?>">
<?php
if($mode=="input"||$mode=="checked"){
echo "<input type='submit' name='check' value='check'>";
}
if($mode=="checked"){
echo "<input type='submit' name='regist' value='regist'>";
}
?>
</form>
</body>
</html>


実際のユーザー情報の登録処理はもっと複雑になりますが、モードを分けて処理を分岐するという構造は、上記のサンプルと同じようになるはずです。

PR
QRコード
忍者ブログ [PR]
Copyright (C) 2006 banayan ALL RIGHTS RESERVED.