初期画面へ戻す方法


  画面分割実装後のソースコード




グループ(1)



グループ(2)



  

<?
# **********************************************************
# 関数定義
# **********************************************************
require_once( "function.php" );

$Sel[$_POST['kubun']] = "selected";

if ( $_SERVER['REQUEST_METHOD'] == 'GET' ) {
	$CurrentGROUP = 1;
}
else {
	$CurrentGROUP = 2;

	if ( $_POST['Group'] == 1 ) {
		$_POST['MainKey'] = trim( $_POST['MainKey'] );
		if ( $_POST['MainKey'] == '' ) {
			SetErrMessage( '空白文字が入力されました' );
			$CurrentGROUP = 1;
		}
	}

	if ( $_POST['Group'] == 2 ) {
		$CurrentGROUP = 1;
	}

	if ( $CurrentGROUP == 2 ) {
		$HideElement = '<INPUT name=kubun type=hidden value="';
		$HideElement .= $_POST['kubun'];
		$HideElement .= '">';
	}
}

if ( $CurrentGROUP == 1 ) {
	$GROUP1 = '';
	$GROUP1text = '';
	$GROUP2 = 'disabled';
	$GROUP2text = 'readonly';
}
if ( $CurrentGROUP == 2 ) {
	$GROUP1 = 'disabled';
	$GROUP1text = 'readonly';
	$GROUP2 = '';
	$GROUP2text = '';
}


require_once( "pagestart.php" );
?>

<FORM
	name=frmMain
	method=post
	action=<?= $_SERVER['SCRIPT_NAME'] ?>
	onSubmit='return CheckData();'
>
	<INPUT name=Group type=hidden value="<?= $CurrentGROUP ?>">
	<?= $HideElement ?>

	グループ(1)<BR>
	<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'] ?>"
		<?= $GROUP1text ?>
	>
	<INPUT
		name=SendButton
		type=submit
		value="送信"
		onClick='ClickedButton=1;'
		<?= $GROUP1 ?>
	>
	<BR>
	<?= $ErrMessage ?>

	<HR size=1 color=black>

	グループ(2)<BR>
	<INPUT
		name=Data1
		type=text
		value="<?= $_POST['Data1'] ?>"
		<?= $GROUP2text ?>
	><BR>
	<INPUT
		name=Data2
		type=text
		value="<?= $_POST['Data2'] ?>"
		<?= $GROUP2text ?>
	><BR>
	<INPUT
		name=SendButton
		type=submit
		value="送信"
		onClick='ClickedButton=2;'
		<?= $GROUP2 ?>
	>

</FORM>

<?
require_once( "pageend.php" );
# **********************************************************
# デバッグ用表示
# **********************************************************
DispPost();
?>

  







  画面遷移




画面に対しての操作で、画面の状態が変化して行きます。これを画面遷移と言います。


  1. 初期画面

  2. グループ(1)の送信ボタンを押す ---> 第2画面

  3. 第2画面

  4. グループ(2)の送信ボタンを押す ---> 初期画面



単純に書いてしまうと、上記のようになりますが、これをもっと詳しくするとこのようになります。


  1. 他のページのアンカー

  2. アンカーをクリックする
  3. GET コマンドにより、スクリプトを呼び出す
  4. ---> 初期画面

  5. 初期画面

  6. この時点で、再表示(ページのリロード)を行なっても画面の変化は無い
  7. グループ(1)の送信ボタンを押す
  8. POST コマンドにより、スクリプトを呼び出す
  9. ---> 第2画面

  10. 第2画面

  11. この時点で、再表示(ページのリロード)を行なうと、再送信の確認のダイアログが表示される
  12. グループ(2)の送信ボタンを押す
  13. POST コマンドにより、スクリプトを呼び出す
  14. ---> 初期画面



3 の場合、POSTコマンドにより、初期画面が表示される為、処理の初めに戻るように画面上は見受けられますが、再表示(ページのリロード)を行なうと、再送信の確認のダイアログが表示されてしまいます。これだと、第2画面で行なった処理を再実行してしまう可能性があります。

そこで、第2画面での処理を以下のように変更します。


  • 第2画面

  • この時点で、再表示(ページのリロード)を行なうと、再送信の確認のダイアログが表示される
  • グループ(2)の送信ボタンを押す
  • POST コマンドにより、スクリプトを呼び出す
  • スクリプトは、再度このページをGETで呼び出すという指示のみHTTPヘッダに与えて送り返す
  • ブラウザは画面には何も表示せずに即、GETコマンドをスクリプトに送る
  • ---> 初期画面



  •   
    
    if ( $_SERVER['REQUEST_METHOD'] == 'GET' ) {
    	$CurrentGROUP = 1;
    }
    else {
    	$CurrentGROUP = 2;
    
    	if ( $_POST['Group'] == 1 ) {
    		$_POST['MainKey'] = trim( $_POST['MainKey'] );
    		if ( $_POST['MainKey'] == '' ) {
    			SetErrMessage( '空白文字が入力されました' );
    			$CurrentGROUP = 1;
    		}
    	}
    
    	if ( $_POST['Group'] == 2 ) {
    		#
    		# ここでエラー処理。
    		#
    		if ( $ErrMessage == '' ) {
    			header( "Location: {$_SERVER['HTTP_REFERER']}" );
    			exit();
    		}
    	}
    
    	if ( $CurrentGROUP == 2 ) {
    		$HideElement = '<INPUT name=kubun type=hidden value="';
    		$HideElement .= $_POST['kubun'];
    		$HideElement .= '">';
    	}
    }
    
    
      

      リダイレクト

      
    
    header( "Location: {$_ENV['HTTP_REFERER']}" );
    
      

    この処理は、リダイレクトと呼ばれてPOSTの連鎖から抜け出る時に使用します。これは、HTTP ヘッダに上記フォーマットで書き出す事によって実現します。この処理の注意事項としては、「HTTPヘッダを出力する前にデータを出力してはいけない」という所ですが、後は自由です。でも、リダイレクトするだけなので画面を出力するのは無駄なので exit(); でスクリプトの処理を終わらせています。

    void exit ( [string status])

    ※ この関数は実際には関数ではなく言語構造

    exit() 関数は、スクリプトの実行を終了します。 終了直前にstatusを出力します。



    ASP では以下のように書きます

      
    
    Response.Redirect( Request.ServerVariables("HTTP_REFERER")  )
    
      


      キャンセルボタンを追加して、JavaScript での初期画面への移動

    第2画面に移動した後、処理を行ないたく無い場合があります。その場合はリダイレクトせずに、JavaScript によって現ページを再表示させます。リダイレクトは、クライアントサーバー間のやりとりが2往復してしまう為、必要でない場合は使用しません。

      
    
    <INPUT
    	name=CancelButton
    	type=button
    	value="キャンセル"
    	<?= $GROUP2 ?>
    	onClick='location="<?= $_SERVER['SCRIPT_NAME'] ?>";'
    >
    
      




    yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


    [pgdojo]
    CCBot/2.0 (https://commoncrawl.org/faq/)
    25/04/18 02:54:02
    InfoBoard Version 1.00 : Language=Perl

    1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube