現在i-modeのフォームを制作しています。


その確認画面に「戻るボタン」をつけたいと思っています。

というのは、入力漏れがあった場合、次ページの確認画面で「入力漏れがあります」を表示し、「前のページへ戻る」ボタンをつけたいと思っています。その際「前のページの入力内容を残したまま」戻る方法を模索中です。

ようはキャッシュを残したまま戻りたいです。

cgi側での制御かと思いますが、下記のように「histry back」等色々試してみましたがやはりうまくいきませんでした。

<form>
<input type=button value='前のページに戻る' onClick='history.back();'>
</form>

javascriptが使えないのであたりまえですが・・。

初歩的な質問で申し訳ございませんが、
ご教授お願いします。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2006/07/26 13:45:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:yoneto164 No.1

回答回数813ベストアンサー獲得回数94

ポイント23pt

「戻る」ではなく「訂正する」という考え方で、訂正用フォームに変数を渡す方法が良いかと思います。最初のフォームをcgi等にしておけば、戻ってきた時に変数を取得する処理を組み込むと良いと思います。

ちょっと手間ですが、携帯用のサイトはそうしています。

id:saruz999

ご回答ありがとうございます!なるほど、そういう考え方なのですね。ただ初心者なもので、具体的に、どのような指定をすればよいか教えていただければ幸いです。すみません・・・(^^;

2006/07/19 14:40:14
id:pxb12663 No.2

回答回数395ベストアンサー獲得回数14

ポイント23pt

history.backはJavascriptなんで無理ですね。

データを残したまま戻らせるには、入力したデータを保持しておく必要があります。

一番簡単な方法はセッションを使う方法でしょう。PHPやCGIで簡単に利用できると思います。

あらかじめセッション変数として配列変数を定義しておき、フォームのページの、各項目にvalue=""でデータを代入しておきます(当然最初は空なので、何も表示されません)。

PHPの場合
<input type="text" name="data" value="<?php print $data[1]; ?>">

次に、POSTで入ってきたデータを、ページの頭で対応する配列変数に入れてやれば、普通にで戻ってもデータは残った状態になります。

id:saruz999

ご回答ありがとうございます!参考にさせていただきます!

2006/07/19 21:41:28
id:yoneto164 No.3

回答回数813ベストアンサー獲得回数94

ポイント22pt

PHPの例ですが、

http://acappella.cc/test/re/

のようになります。

フォーム(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" で、それぞれの変数をフォームに戻してやるところがミソです。

もしも続けてご質問がある場合は一度終了するか、回答回数を増やして下さい。

id:saruz999

yoneto164様

再度ご回答ありがとうございます!

申し遅れましたが、現在組み込んでいるフォームは、PHPではなくcgi(perl)を使用しています。

CGI上でご回答いただいたプログラムを活用する方法はございますでしょうか?

※回答回数を増やしました

何度もすみません・・・

2006/07/19 21:44:12
id:yoneto164 No.4

回答回数813ベストアンサー獲得回数94

ポイント22pt

いえいえ、最初から「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"; 
&amp;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"; 
&amp;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 用のフォームに適しているかどうかは不明ですが、ご参考になれば幸いです。

更に不明な点が御座いましたら遠慮なくどうぞ。

(回等回数は増やして下さいね)

id:saruz999

yoneto164様

わざわざスクリプトまで書いていただき

ありがとうございました!!

心から感謝しております!!

これを参考に、再度チャレンジしてみたいと思います。

本当にありがとございました。

もし再度つまずきましたら、また質問させてください・・・(^^;

よろしくお願いいたします。

2006/07/20 04:51:50

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません