確認画面から戻って引き続き編集する場合
こんばんは、久しぶりのブログ更新です。
最近はサーバの方は安定稼働しているので、PHPの開発をやっています。
ちょっと自分がはまったところについて一人でも多くの人のためになれば思っています。
今回はプログラマの人からは、当たり前と思われてしまいますが、基本的な処理のフォームに入力して、確認画面を表示させてそこからやっぱりもう一度修正画面に戻りたい場合の画面遷移やデータの持ち方について説明したいと思います。
画面遷移
①表示画面
②編集画面
③確認画面
④更新処理
今回実現したい処理は
②->③->②
になります。2回目に表示される②の内容は最初に表示されると②のは違って
③の内容を引き継いだまま②に移りたいと考えております。
②編集画面の説明
こちらの画面では最初に表示される場合と③に行ってから戻った場合で処理を分ける必要があります。
最初に表示させる場合はDBからデータを取得して、③から戻る場合はPOSTのデータから取得するようにします。問題となるのがどちらが最初なのかを判断する必要があります。そこでそこはセッションで管理します。③に入ったらセッションにフラグ1を立てます。②ではセッションに値がなければ初回でフラグが1だった場合は③から来たとわかるのでPOSTからデータを取得するようにします。
ソース
echo "<form action = 'check.php' method = 'post'>"; //③確認画面へ行く処理
if($_SESSION["f_check"] == 1){
$data1= $_POST['data1'];
$data2= $_POST['data2'];
$data3= $_POST['data3'];}else{
//DBよりデータ取得
}
echo "<br>data1:<input type='text' name='data1' value='".$data1."'>";
echo "<br>data2:<input type='text' name='data2' value='".$data2."'>";
echo "<br>data3:<input type='text' name='data3' value='".$data3."'>";
<input type = "submit" value ='送信'>
③確認画面の説明
確認画面では送信とリセット(戻るの方が適切かな)の2つのボタンを付ける必要があります。そのためsubmitを並べて表示すると結果の処理が1か所にしか飛ばすことが出来ません。そこでフォームを2つ作成してそれぞれのボタンごとに別の処理をさせるようにします。
具体的には送信の場合は④の処理へリセットの場合は②の処理を実行させるように設定します。
ソース
session_start();
$_SESSION["f_check"] = 1; //戻ったときにわかるようにセッションに1を設定する
<form action = 'edit_api.php' method = "post"> //更新処理実行
echo "<input type='hidden' NAME='data1' value='".$_POST['data1']."'>";
echo "<input type='hidden' NAME='data2' value='".$_POST['data2']."'>";
echo "<input type='hidden' NAME='data3' value='".$_POST['data3']."'>";
echo "<br>data1:".$_POST['data1'];
echo "<br>data2:".$_POST['data2'];
echo "<br>data3:".$_POST['data3'];
<input type = "submit" value ='送信'>
</form> //ちゃんとフォームは閉じないとうまく動作しなくなります。
<form action = 'edit.php' method = "post"> //修正画面に戻るecho "<input type='hidden' NAME='data1' value='".$_POST['data1']."'>";
echo "<input type='hidden' NAME='data2' value='".$_POST['data2']."'>";
echo "<input type='hidden' NAME='data3' value='".$_POST['data3']."'>";
<input type = "submit" value ='リセット'>
</form>
イメージ的にはこんな感じになります。少しPHPとHTMLが混ざっているので適宜
<?php や ?>の付け加えて下さい。
もしうまくできない場合はコメント頂けたら出来る限り回答したいと思いますのでうまくいかない人は気楽にコメント下さい。