その確認画面に「戻るボタン」をつけたいと思っています。
というのは、入力漏れがあった場合、次ページの確認画面で「入力漏れがあります」を表示し、「前のページへ戻る」ボタンをつけたいと思っています。その際「前のページの入力内容を残したまま」戻る方法を模索中です。
ようはキャッシュを残したまま戻りたいです。
cgi側での制御かと思いますが、下記のように「histry back」等色々試してみましたがやはりうまくいきませんでした。
<form>
<input type=button value='前のページに戻る' onClick='history.back();'>
</form>
javascriptが使えないのであたりまえですが・・。
初歩的な質問で申し訳ございませんが、
ご教授お願いします。
「戻る」ではなく「訂正する」という考え方で、訂正用フォームに変数を渡す方法が良いかと思います。最初のフォームをcgi等にしておけば、戻ってきた時に変数を取得する処理を組み込むと良いと思います。
ちょっと手間ですが、携帯用のサイトはそうしています。
history.backはJavascriptなんで無理ですね。
データを残したまま戻らせるには、入力したデータを保持しておく必要があります。
一番簡単な方法はセッションを使う方法でしょう。PHPやCGIで簡単に利用できると思います。
あらかじめセッション変数として配列変数を定義しておき、フォームのページの、各項目にvalue=""でデータを代入しておきます(当然最初は空なので、何も表示されません)。
PHPの場合 <input type="text" name="data" value="<?php print $data[1]; ?>">
次に、POSTで入ってきたデータを、ページの頭で対応する配列変数に入れてやれば、普通にで戻ってもデータは残った状態になります。
ご回答ありがとうございます!参考にさせていただきます!
PHPの例ですが、
のようになります。
フォーム(index.php)のソースは、
<html> <body> <p>"a" を入力するとエラーになります</p> <form name="form1" method="post" action="register.php"> <input type="text" name="textfield" value="<?php echo $textfield;?>"> <input type="submit" name="Submit" value="送信"> </form> </body> </html>
で、登録ページ(register.php)のソースは、
<html> <body> <?php if($textfield=="a"){?> <p>「<?php echo $textfield?>」は正しくありませんので訂正して下さい</p> <form name="form1" method="post" action="./"> <input type="hidden" name="textfield" value="<?php echo $textfield;?>"> <input type="submit" name="Submit" value="戻る"> </form> <?php }else{echo "「".$textfield."」が入力されました。";}?> </body> </html>
となります。
input type="hidden" で、それぞれの変数をフォームに戻してやるところがミソです。
もしも続けてご質問がある場合は一度終了するか、回答回数を増やして下さい。
yoneto164様
再度ご回答ありがとうございます!
申し遅れましたが、現在組み込んでいるフォームは、PHPではなくcgi(perl)を使用しています。
CGI上でご回答いただいたプログラムを活用する方法はございますでしょうか?
※回答回数を増やしました
何度もすみません・・・
いえいえ、最初から「cgi側での制御」とおっしゃられていたにも関わらず、こちらで勝手にPHPのほうが簡単であると思ってしまい、大変ご迷惑をおかけしました。
http://acappella.cc/test/re02/
にて実装しておりますが、CGI(Perl)の場合は、編集用のCGIファイルを作ったほうが簡単かと思いましたのでご案内させて頂きます。
ファイル構成は、
index.htm cgi-lib.pl register.cgi(755) edit.cgi(755)
とします。
index.htm のソースは、
<html><body> <p>"a" を入力するとエラーになります</p> <form method="post" action="register.cgi"> <input type="text" name="textfield"> <input type="submit" name="Submit" value="送信"> </form></body></html>
register.cgi のソースは、
#!/usr/local/bin/perl require "cgi-lib.pl"; print "Content-type: text/html\n\n"; &ReadParse(*form); if ($form{"textfield"}eq"a"){ print <<EOL; <html> <body> <p>「$form{"textfield"}」は正しくありませんので訂正して下さい</p> <form name="form1" method="post" action="edit.cgi"> <input type="hidden" name="textfield" value="$form{"textfield"}"> <input type="submit" name="Submit" value="訂正"> </form> </body> </html> EOL }else{ print <<EOL; <html> <body> 「$form{"textfield"}」が入力されました。 </body> </html> EOL }
edit.cgi のソースは、
#!/usr/local/bin/perl require "cgi-lib.pl"; print "Content-type: text/html\n\n"; &ReadParse(*form); print <<EOL; <html><body> <p>"a" を入力するとエラーになります</p> <form method="post" action="register.cgi"> <input type="text" name="textfield" value="$form{"textfield"}"> <input type="submit" name="Submit" value="送信"> </form></body></html> EOL
とします。
cgi-lib.pl は、
http://cgi-lib.berkeley.edu/2.18/cgi-lib.pl.txt
をダウンロードし、末尾の「.txt」を削除して下さい。
ただ、CGIの場合は、かなり様々な方法がありますので、この方法が現在ご使用されている i-mode 用のフォームに適しているかどうかは不明ですが、ご参考になれば幸いです。
更に不明な点が御座いましたら遠慮なくどうぞ。
(回等回数は増やして下さいね)
yoneto164様
わざわざスクリプトまで書いていただき
ありがとうございました!!
心から感謝しております!!
これを参考に、再度チャレンジしてみたいと思います。
本当にありがとございました。
もし再度つまずきましたら、また質問させてください・・・(^^;
よろしくお願いいたします。
ご回答ありがとうございます!なるほど、そういう考え方なのですね。ただ初心者なもので、具体的に、どのような指定をすればよいか教えていただければ幸いです。すみません・・・(^^;