前回までで 新規登録部分は完成しました。今度は修正と削除ですね。間違ったときとか 修正できないと困ります。すでに修正ボタンと削除ボタンはindex.htmlに配置しています。しかし index.htmlのformタグのactionに注意してください。また
$this_nameになっていますよね。修正ボタンを押した場合は input.html に遷移しなければ入力内容を変更できません。というわけで 前回の要領でactionを input.html に変更してください。
<form action='input.html' method='POST'>
これで修正ボタンを押したらinput.htmlに遷移しますが・・・あれ?データが表示されていませんね。これでは新規登録と変わらないので 入力する側は混乱します。やっぱり修正前のデータが表示されていないと。
なぜ表示されていないかというと input.html 内に
<whiledata src='bbs'>の記述がないからです。この記述がないと掲示板システムが動作しませんので 変数の内容が取得できません。というわけで これを書いてやればいいわけです。
<whiledata src='bbs' putmax='1'> <form action='index.html' method='POST'> 〜省略〜<br> </form></whiledata>
データは1つしかいらないので putmax='1'で指定しています。この記述を入れてindex.htmlの修正ボタンを押してみてください。入力部品に値が表示されるようになりましたね。
ステップ@で書いたお約束の中に[Cフォーム部品には(どうしても初期値を固定したい場合を除いては) value属性を記述しない。]というのがありましたが これはこのように
自動的にvalue属性をセットさせるためです。逆にvalue属性値を記述してしまうと 動的にセットされなくなってしまいます。
ページ遷移とデータ取得はこれでOK。あとは修正ボタンを押すだけ・・・おっとinput.htmlには[登録]ボタンしかありません。修正ボタンに変えましょう。ここで鍵となるのが index.html の[修正]ボタンに記述したJavaScriptに注目してください。
<input type='button' value='修正' onclick='SetValueSubmit(this.form,"bbs_mode=Qmodify");'>
このbbs_modeというのが どんな処理をしたいのかをプログラムに判別させるための変数となります。SetValueSubmitは ホムペネットに実装されているJavaScript関数で サブミット(=データ送信)する前に 指定した変数の値をセットします。ここで指定しているQmodifyというのは [修正前のデータ問い合わせ]処理をするモードです。このようにいくつか処理に合わせてモードの値が異なります。
- Qmodify
- 修正前の問い合わせを行う。このモードで各入力値を取得する。
- Qdelete
- 削除前の問い合わせを行う。このモードで各入力値を取得する。このモードの場合入力部品はreadonlyに設定され変更できなくなる。
- Nwrite
- 返信モード。このモードの場合bbs_topicの一番前に[Re:}という文字列が付けられる。
- Qwrite
- 引用返信モード。このモードの場合bbs_topicの一番前に[Re:}という文字列が付けられ bbs_textの各行頭に引用符の>が付けられる。
- modify
- 修正実行。入力フォームの内容でデータが上書きされる。
- delete
- 削除実行。bbs_topicに[削除データ]と記され内容は破棄される。
- write
- 登録実行。入力フォームの内容でデータが追加される。
これをご覧いただければ分かるように 実際にはQmodifyというモードを送らなければ input.htmlに
<whiledata src='bbs'>タグを記述しても 入力値は取得できません。また input.htmlの登録ボタンにはbbs_mode=writeと記述されていますので これでは修正実行できないことも分かりますよね。というわけで 各種ボタンの実装です。問い合わせモードによって表示されるボタンを分岐してやるのが 分かりやすいでしょう。
<if $bbs_mode==''> <input type='button' value='登録' onclick='SetValueSubmit(this.form,"bbs_mode=write");'></if><if $bbs_mode=='Qmodify'> <input type='button' value='修正' onclick='SetValueSubmit(this.form,"bbs_mode=modify");'></if><if $bbs_mode=='Qdelete'> <input type='button' value='削除' onclick='SetValueSubmit(this.form,"bbs_mode=delete");'></if>
これで修正・削除ボタンの表示も切り替えられたし データも表示されるようになりました。後は内容を変更して修正ボタンを押すだけ!!と 思って実行してみたら 変更されてないじゃん!!とお怒りの方 最後の詰めがまだあります(^^;)。
input.htmlのformタグ直下に
<input type='hidden' 〜>という記述がありますね。このhidden部品はページ上には表示されないけれど プログラムには送信される変数となります。この中のbbs_modeというのは 先ほどまで説明したモードの値ですね。同じように目には見えないけれど データを識別するために必要なのが bbs_thrnoとbbs_selectnoです。これは 二つで一つと思ってください。bbs_thrnoは親記事の番号を表し bbs_selectnoは当該記事を判別する番号となります。この2つの値に当該データを識別できる値が入っていないため 修正できないわけです。この書き方は決まっているので丸覚えして下さい。
<input type='hidden' name='bbs_thrno' value='$bbs_thrno'><input type='hidden' name='bbs_selectno' value='$bbs_serno'>
bbs_selectnoのvalueに格納するのは
$bbs_sernoという変数であることだけ注意してください。bbs_sernoはデータに自動的に振られるシリアル番号で完全に一意となっています。
あとは基本的には nameと同じ文字列で先頭に
$をつけたものを valueに書いておけばOKです。
<input type='hidden' name='bbs_page' value='$bbs_page'>を記述しておくと index.html でページを移動していた際に 元のページに戻るために記述しています。なければ1ページ目が表示されるだけなので 細かい動作にこだわる方は 記述しておいてください。
さぁ!これで処理は終わりです。修正も削除もできるようになりましたか?
今回のソースは 次のリンクをクリックしてご確認ください。
index.html ソース全文input.html ソース全文