• 締切済み

登録ボタン」クリック後、同ページに登録内容を反映させる方法

php・smartyを使用しています。 (DBはoracleです。DB関連は問題ないと思います。) 「登録ボタン」クリック後、同ページに登録内容を反映させる方法を教えてください。 php・smartyテンプレートは以下のような構成にしています。 <php> ●記述A ---「登録ボタン」がクリックされたらDBに書込み ---if($_POST[xxx}==yyy){zzz;} ●記述B ---DB読込み ---⇒登録内容(ないし、登録されてない事実)を変数に設定 ---⇒smartyテンプレートにアサイン <smartyテンプレート> ●記述a ---登録フォーム ---method=post action={$smarty.server.PHP_SELF} ●記述b ---登録内容表示のためのソース 「登録ボタン」クリックでDB書込みはうまくいき 画面を更新するなどすれば、登録内容も表示されるのですが 「登録ボタン」クリックした直後には 登録内容が反映されません。 if($_POST[xxx}==yyy){ zzz; 記述B } 記述B のように、 記述Bを記述Aの中と外に2度書く形にするのは気持ちが悪いのです。 記述Bを function kijutuB(){ 変数1=・・・ 変数2=・・・ ・・・・・・ } とするには、変数の数だけglobal宣言をしなければならない(?)と思うので 結局効率が悪いです。 何かうまい方法はないものでしょうか?

みんなの回答

回答No.2

<?php $tmpl = new Smarty(); //Smartyのインスタンス作成 $template_file = 'default.tpl'; //デフォルトのテンプレートを変数に格納 if(strtoupper($_SERVER['REQUEST_METHOD']) == 'POST'){ //何らかの検証の後 //データベースに登録してそのステータスをえる $status = true; //成功したとして $tmpl->assign('status', $status); $template_file = 'success.tpl'; } //データベースに登録しようがしまいが、DBから結果を得る $db_data = hogehoge(); //なんらかの結果を得る記述 $tmpl->assign('db_data', $db_data); $tmpl->display($template_file); ?> このような流れにすれば二度かかなくて良い気がしますがいかがでしょうか。 単一ファイルに全て記述しているということという前提で回答してますが、私のほうで根本的に勘違いしているようでしたら、もう少し詳細を教えてください。

noname#152201
noname#152201
回答No.1

switch文を使ったりしてはどうでしょうか? switch( $_POST['mode'] ){ case "new": // データ登録処理 // データ取得処理 break; default: // 初期表示処理 } テンプレート側のフォームに <input type="hidden" name="mode" value="new" /> を定義して処理を切り替えるようにしています。

関連するQ&A