セッションの使用

  初期画面への画面遷移実装とソースコードの整備



グループ(1)



グループ(2)



  
<?
require_once( "function.php" );
# **********************************************************
# 画面表示前のサーバ側の処理
# **********************************************************
	$Sel[$_POST['kubun']] = 'selected';		# コンボボックスの復帰

	# 初期画面の表示
	if ( strtoupper( $_SERVER['REQUEST_METHOD'] ) == 'GET' ) {
		SetGroup( 1 );
	}
	# 入力処理
	else {
		switch ( $_POST['Group'] ) {
			# 初期画面よりの入力
			case 1:
				# エラーチェック
				$_POST['MainKey'] = trim( $_POST['MainKey'] );
				if ( $_POST['MainKey'] == '' ) {
					SetErrMessage( '空白文字が入力されました' );
				}

				if ( $ErrMessage == '' ) {		# エラー無し
					$HideElement = '<INPUT name=kubun type=hidden value="';
					$HideElement .= $_POST['kubun'];
					$HideElement .= '">';
					SetGroup( 2 );
				}
				else {	# エラー有り
					SetGroup( 1 );
				}
				break;

			# 第2画面よりの入力
			case 2:
				if ( $ErrMessage == '' ) {		# エラー無し
					header( "Location: {$_ENV['HTTP_REFERER']}" );
					exit();
				}
				else {	# エラー有り
					SetGroup( 2 );
				}
				break;
		}

	}


# **********************************************************
# クライアント側に表示される画面
# **********************************************************
?>
<SCRIPT language=JavaScript>
var ClickedButton;
function CheckData() {

	if ( ClickedButton == 1 ) {
		if ( document.all.item("MainKey").value == "" ) {
			alert( "データを入力して下さい" );
			document.all.item("MainKey").focus();
			return false;
		}
	}

	return true;
}
</SCRIPT>

<? require_once( "pagestart.php" ); ?>
<!-- *******************************************************
 送信フォーム
******************************************************** -->
<FORM
	name=frmMain
	method=post
	action=<?= $_SERVER['SCRIPT_NAME'] ?>
	onSubmit='return CheckData();'
>

	<INPUT name=Group type=hidden value="<?= $CurrentGROUP ?>">
	<?= $HideElement ?>

	<!-- ****** 処理区分 ****** -->
	<SELECT name=kubun <?= $GROUP1 ?>>
	<OPTION value=1 <?= $Sel[1] ?>>登録
	<OPTION value=2 <?= $Sel[2] ?>>修正
	<OPTION value=3 <?= $Sel[3] ?>>削除
	</SELECT><BR>

	<!-- ****** キー入力 ****** -->
	<INPUT name=MainKey type=text
		value="<?= $_POST['MainKey'] ?>"
		<?= $GROUPtext1 ?>
	>

	<!-- ****** 第1送信 ****** -->
	<INPUT name=SendButton type=submit
		value="送信"
		<?= $GROUP1 ?>
		onClick='ClickedButton=1;'
	>

	<!-- ****** エラーメッセージ表示用 ****** -->
	<BR><?= $ErrMessage ?>

	<HR size=1 color=black>

	<!-- ****** データ入力 ****** -->
	<INPUT name=Data1 type=text <?= $GROUPtext2 ?>><BR>
	<INPUT name=Data2 type=text <?= $GROUPtext2 ?>><BR>

	<!-- ****** 第2送信 ****** -->
	<INPUT name=SendButton type=submit
		value="送信"
		<?= $GROUP2 ?>
		onClick='ClickedButton=2;'
	>

	<!-- ****** 第2画面キャンセル用 ****** -->
	<INPUT
		name=CancelButton type=button
		value="キャンセル"
		<?= $GROUP2 ?>
		onClick='location="<?= $_SERVER['SCRIPT_NAME'] ?>";'
	>

</FORM>
<? require_once( "pageend.php" ); ?>

<?
	DispPost();
?>
  



  セッション使用の目的



Webページでは画面から画面へのデータの受け渡しに隠しフィールドやURLにQueryStringを追加して行ないます。しかし、通常この作業はプログラマにまかされる為、煩雑な上に間違いを生じやすく、また、隠しフィールド等では実現不可能な処理を行なうWebアプリケーションも存在する為、通常Webアプリケーションでは最初に「セッション」の使用を検討しなければなりません。

但し、セッションの使用はブラウザ側の「クッキー」が有効となっている事が前提なので、ページを読むユーザによっては実現が不可能となります。



  セッションの開始

セッションの開始は以下の関数で行ないます。

bool session_start ( void )

session_start() は、セッションを作成します。 (もしくは、リクエスト上でGET,POSTまたはクッキーにより渡されたセッションIDセッショ ンに基づき現在のセッションを復帰します)

名前付きのセッションを使用したい場合、 session_start()の前に session_name()をコールする必要があります。

この関数は常に TRUE を返します。

※ クッキーに基づくセッションを使用している場合、ブラウザに何か出力 を行う前にsession_start()をコールする必要があ ります。

php.exe によるセッションはファイルに書き込まれる為、書き込む為のディレクトリを作成しておく必要があります。その場所は、php.ini の session.save_path にセットされますが、デフォルトで /tmp となっている為、スクリプトと同じドライブのルートに TMP ディレクトリを作成して下さい。



  セッションに変数を登録するには

結論から言うと、$_SESSION スーパーグローバルに直接セットします。

register_globalsを 考慮することなくスクリプトを書きたい場合には、 $_SESSION配列を 代わりに使用する必要があります。 $_SESSIONのエントリーは自動的に登録されます。 スクリプトでsession_register()を 使用している場合には、それは register_globalsを 不可としている環境下では動作しません。

よって、セッション変数の初期化は以下のように書きます

  
$_SESSION = array();

  




  現在の処理で保持したい値は

  • 処理区分
  • キーの値
  • カレントの画面状態(画面グループ)

  • の3つです。これらをセッション変数とする事によって、隠しフィールド
    による値の保持は不要となります。

      
    $HideElement = '<INPUT name=kubun type=hidden value="';
    $HideElement .= $_POST['kubun'];
    $HideElement .= '">';
    
    の処理と
    
    <INPUT name=Group type=hidden value="<?= $CurrentGROUP ?>">
    
    が不要になります
    
      



      SetGroup関数の変更

      
    # **********************************************************
    # グループ処理
    # **********************************************************
    function SetGroup( $Group ) {
    
    	switch ( $Group ) {
    		case 1:
    #			$GLOBALS['CurrentGROUP'] = 1;
    			$_SESSION = array(); 
    			$_SESSION['Group'] = 1;
    			$GLOBALS['GROUP1'] = '';
    			$GLOBALS['GROUPtext1'] = '';
    			$GLOBALS['GROUP2'] = 'disabled';
    			$GLOBALS['GROUPtext2'] = 'readonly';
    			break;
    		case 2:
    #			$GLOBALS['CurrentGROUP'] = 2;
    			$_SESSION['Group'] = 2;
    			$GLOBALS['GROUP1'] = 'disabled';
    			$GLOBALS['GROUPtext1'] = 'readonly';
    			$GLOBALS['GROUP2'] = '';
    			$GLOBALS['GROUPtext2'] = '';
    			break;
    	}
    
    }
    
      



      入力処理の変更

      
    # 初期画面の表示
    if ( strtoupper( $_SERVER['REQUEST_METHOD'] ) == 'GET' ) {
    	SetGroup( 1 );
    }
    # 入力処理
    else {
    	switch ( $_SESSION['Group'] ) {
    		# 初期画面よりの入力
    		case 1:
    			# エラーチェック
    			$_POST['MainKey'] = trim( $_POST['MainKey'] );
    			if ( $_POST['MainKey'] == '' ) {
    				SetErrMessage( '空白文字が入力されました' );
    			}
    
    			if ( $ErrMessage == '' ) {	# エラー無し
    				$_SESSION['Mode'] = $_POST['kubun'];
    				$_SESSION['Key'] = $_POST['MainKey'];
    				SetGroup( 2 );
    			}
    			else {	# エラー有り
    				SetGroup( 1 );
    			}
    			break;
    
    		# 第2画面よりの入力
    		case 2:
    			if ( $ErrMessage == '' ) {	# エラー無し
    				header( "Location: {$_ENV['HTTP_REFERER']}" );
    				exit();
    				SetGroup( 2 );
    			}
    			else {	# エラー有り
    				SetGroup( 2 );
    			}
    			break;
    	}
    }
    
    $Sel[$_SESSION['Mode']] = 'selected';	# コンボボックスの復帰
    
      

    コンボボックスの復帰が最後になっているのは、$_SESSION['Mode']の内容
    によって復帰させている為です。










      infoboard   管理者用   
    このエントリーをはてなブックマークに追加





    フリーフォントWEBサービス
    SQLの窓WEBサービス

    SQLの窓フリーソフト

    素材

    一般WEBツールリンク

    SQLの窓

    フリーソフト

    JSライブラリ