• ベストアンサー

「戻る」と入力したデータが消えてしまう

人が作ってくれたcgiを見て、直すことができるか検討 しています。 a05.cgi という入力フォームで社員コードを入力して 「編集画面へ」をクリックすると a06.cgi に進み、 そこで詳細データを入力します。 a06.cgiにある print "<a href=\"./a05.cgi\">戻る</a><br>\n"; この部分で、「戻る」をクリックしてa05.cgiに戻った とき、先に入れた社員コードが消えてしまっているの ですが、これを消さないように戻ることはできるので しょうか。 cgiはリストを追加したりするくらいしかわかりません。 よろしくお願いします。

noname#183584
noname#183584
  • CGI
  • 回答数5
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.4

> a05.cgiの該当部分が > print "<FORM action=\"a06.cgi\" method=\"POST\">>【社員コード入力】<br>\n"; > print "<input type=\"text\" name=\"crc\">"; > print "</select><br>"; > print "日付選択"; > print "<select name = \"year_b\">\n"; > foreach………… > となっていましたので、 > <a href=\"./a05.cgi\">戻る</a> のところを > <a href=\"./a05.cgi?name=\"crc\"\">戻る</a> > としてみましたがうまくいきません。 a06.cgiで社員コードを[crc]という名前で受け取っている部分があると思います。 受け取った変数が$crcだと仮定すると、戻るのリンクの部分は <a href=\"./a05.cgi?crc=\"".$crc."\">戻る</a> になると思います。 そして、a06.cgiの中のa05.cgiから送信されたフォーム情報を受け取っている同じ物 をa05.cgiに入れてあげ、 print "<input type=\"text\" name=\"crc\" value=\"".$crc."\">"; とフォーム部分を変更すれば値が入ると思います。 @@@.cgi?xxx=yyy&iii=jjj というURLを検索エンジン等でお目にかかると思います。 xxxとiiiが値をやり取りする名前になり yyyとjjjが実際の値になります。 上ではcrcという名前で、$crcの値を引き渡す動作になります。 試してやってみたものはnameという名前でcrcという値を受け渡している状態になっています。

noname#183584
質問者

お礼

質問締め切りメールがきてしまいましたので、一旦閉じさせていただきます。 年明けから別の急ぎの仕事に追われ、まだ検討できていませんが、時間ができたらアドバイスいただいたことを再検討したいと思います。 どうもありがとうございました。

その他の回答 (4)

  • hikomin
  • ベストアンサー率63% (40/63)
回答No.5

#2の方へのコメント内のコードを見る限り、根本的に表示が出来ないように思います。つまり、 print "<input type=\"text\" name=\"crc\">"; という形では、たとえクエリーを取得出来ていたとしても表示は出来ないわけです。正確なソースコードが無いのでなんとも言えませんが、例えば print "<input type=\"text\" name=\"crc\" value=\"$in{'crc'}\>"; # $in{'crc'}にクエリーから取得した社員コードが入っているとする 等、何らかの形で取得したデータを表示に反映させなければなりません。 あと、a05.cgiがクエリーを読むのか否かでも結構違いが出ます。method="post"ということなので、場合によってはpostしか読まないのではないでしょうか。チェックしてみてください。 代案としては、社員番号をクッキーに保管する方法が考えられます。a06.cgiでクッキーを発行し、a05.cgiではクッキーを読めるようにすることになります。正直、クエリーで対処出来るならその方が楽に事を終えられますが、クッキーの方が応用が利くのも確かではあります。 もしも、複数ページに渡ってこうした(前の入力が生きている)処理を行ないたいと言うことであれば、処理の内容にもよりますがセッション処理が必要になるのではないかと思います。セッション処理を全く考えていないプログラムであれば、大規模な変更が必要になりそうです。 (a01.cgiやa02.cgiが存在するかも?と思ったので。)

noname#183584
質問者

お礼

コメントありがとうございます。 難しくて読んだだけでは理解できないのと、別の仕事に追われてしまっているのとで、なかなか検討できないでおります。 時間が取れたらもう一度やってみようと思います。 どうもありがとうございました。

  • Kirishima
  • ベストアンサー率32% (155/480)
回答No.3

#2の方と同意見です。 あとは、a05.cgiとa06.cgiのソースがないとアドバイスのしようがないかと…。 たぶん、a06.cgiで社員コード受け取ってますから、それと似たような部分をa05.cgiに入れてやれば何とかなるとは思うのですが…。

noname#183584
質問者

お礼

アドバイスありがとうございました。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

URLに引数表示されてしまいますが print "<a href=\"./a05.cgi?code=c06.cgiで取得した社員コード\">戻る</a>"; にして、a05.cgiでcodeを受け取るようにし、 社員コードをフォームに表示したらいかがでしょうか。 まとを外していたら申し訳ないです。

noname#183584
質問者

お礼

a05.cgiの該当部分が print "<FORM action=\"a06.cgi\" method=\"POST\">【社員コード入力】<br>\n"; print "<input type=\"text\" name=\"crc\">"; print "</select><br>"; print "日付選択"; print "<select name = \"year_b\">\n"; foreach………… となっていましたので、 <a href=\"./a05.cgi\">戻る</a> のところを <a href=\"./a05.cgi?name=\"crc\"\">戻る</a> としてみましたがうまくいきません。

  • iichiho
  • ベストアンサー率37% (416/1114)
回答No.1

フォームやCGIに問題があるわけではなさそうです。 フォームを記述しているhtmlファイルのヘッダ部分を確認してみてください。 常に最新のデータを取得しなおすように設定されていたりしませんか? こういった設定をされている場合、戻るボタンで戻った場合でも、既に入力したデータを廃棄して再度サーバにアクセスしてhtmlを取得します。 BBSなど、頻繁に更新されるページで戻るボタンでも最新の情報を表示するようにと、よく利用されている機能ですが、今回の場合は不要ですね。

関連するQ&A

  • cgiログデータ入力

    下記のようなものを作成しました。 if ($FORM{'WORD'} eq 'フォーム'){ &form; } elsif($FORM{'WORD'} eq '確認'){ &kakunin; } elsif($FORM{'WORD'} eq '入力'){ &nyuuryoku; } sub kakunin{ print "<FORM METHOD=POST ACTION=top_nyuuryoku1.cgi>\n"; print "<TABLE CLASS=TABLE2 CELLSPACING=0 CELLPADDING=2>\n"; print "<TR><TD WIDTH=80 CLASS=TD1>社員番号</TD><TD CLASS=TD2>$FORM{'BANGOU'}<INPUT TYPE=HIDDEN NAME=BANGOU VALUE=$FORM{'BANGOU'}></TD></TR>\n"; print "<TR><TD WIDTH=80 VALIGN=TOP CLASS=TD1>本文</TD><TD CLASS=TD2>$FORM{'NAKAMI'}</TD><INPUT TYPE=HIDDEN NAME=NAKAMI VALUE=$FORM{'NAKAMI'}></TR>\n"; print "</TABLE>\n"; print "<BR>と入力されました。これでよければボタンを押してください。<BR><BR>\n"; print "<INPUT TYPE=HIDDEN NAME=WORD VALUE=入力>\n"; print "  <INPUT TYPE=SUBMIT CLASS=BUTTON VALUE=入力>\n"; print "</FORM>\n"; } sub nyuuryoku{ print "入力しました。<BR>\n"; print "<A HREF='top.cgi'>戻る</A>\n"; open (FILE,">>top.log"); flock(FILE,2); @FILES = "$buffer\n"; print FILE @FILES; flock(FILE,8); close(FILE); } ※多少省略あり。 ※$bufferはこれの前のページから受け取ったもの。 kakuninのところの$FORM{'NAKAMI'}ではちゃんと半角スペースや改行が認識されていますが、nyuuryokuになるとだめです。 一体何が原因なのでしょうか?

    • ベストアンサー
    • CGI
  • フォームデータのcsv保存について

    お世話になります。フォームに入力されたデータを csvファイルに保存するというcgiの作成をしています。 初めてcgiを作成するので、書籍の真似をして作成した のですが、おかしいデータが保存されてしまいます。 質問の項目数は5個で以下のとおりです <FORM ACTION="./ans1.cgi" METHOD="POST"> 名前:<br> <input type="text" name="name" size=30> <br> 1:<br> <input type="text" name="a1" size=30> <br> 2:<br> <input type="text" name="a2" size=30> <br> 3:<br> <input type="text" name="a3" size=30> <br> 4:<br> <input type="text" name="a4" size=30> <br> <INPUT type="submit" value="送 信"> <INPUT type="reset" value="リセット"> <BR> </FORM> cgiの中身です。 #! /usr/bin/perl require './cgi-lib.pl'; $answer = 5; $ansfile = "kotae.csv"; &ReadParse(*in); $name = $in{'name'}; for($n = 1; $n <= $answer; $n++ ) { $a[$n] = $in{"a$n"}; } open (FILE,">>$ansfile"); flock (FILE,2); print (FILE "\"", $name); for($i = 1; $i <= $answer; $i++ ) { $a[$i] = ~ s/\"/""/g; print FILE "\"\,\""; print FILE $a[$i]; } print FILE "\"\n"; flock(FILE,8); close(FILE); print "Content-type: text/plain\n\n"; print "<HTML><BODY>\n"; print "tesuto"; print "</body></HTML>"; exit; csvファイルの中身を見ると、最初の列には、項目1で 記入したデータが入ってますが、項目2以降 は4294967295と数字が入ってます。どうも1個目の回答 欄のデータはちゃんと取得されてるのですがそれ以降の が取得されていないみたいです。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • 掲示板の上部に掲示板説明の欄をつくりたい

    こんにちは。今掲示板の設置をしています。            タイトル ---------------------------------------------------------     トップに戻る 新着表示 留意事項 管理 ---------------------------------------------------------           <このあたり> に枠に囲まれた掲示板説明を入れたいと思っています。 おそらく # メニュー部 print "<hr width=\"90%\">\n"; if ($in{'action'} eq "past") { print "[<a href=\"$script\" target=\"_top\">掲示板に戻る</a>]\n"; } else { print "[<a href=\"$homepage\" target=\"_top\">トップに戻る</a>]\n"; } # 新着順表示 if ($in{'list'} ne "new" && $in{'list'} ne "pickup") { print "[<a href=\"$script?list=new\">新着順表\示</a>]\n"; } elsif ($in{'action'} ne "past") { print "[<a href=\"$script?\">通常表\示</a>]\n"; } print "[<a href=\"$script?mode=howto\">留意事項</a>]\n"; print "[<a href=\"$script?mode=admin\">管理用</a>]\n"; print "<hr width=\"90%\"></div>\n"; # タイトル一覧表示 if ($alltitle) { &SubjectList; } # 投稿フォーム if ($in{'list'} ne "pickup") { &form(); } print "<center><br>\n"; if ($in{'list'} eq "new") { &newsort; } elsif ($in{'list'} eq "pickup") { &pickup; } else { このあたりを変えればいいのかなぁと思うのですが、どうしたらいいのかわかりません。どなたか教えていただけないでしょうか?

    • ベストアンサー
    • CGI
  • ルビープログラムのフォーム入力について

    Rubyプログラムを勉強中です。 簡単な掲示板から始めているのですが、実行させるとうまく動きません。 なにかヒントになるものがあれば教えて下さい。 参考サイト http://jp.rubyist.net/magazine/?0012-CGIProgrammingForRubyBeginners-3 エラーの症状 上記サイトの「CGI クラスを使ってフォームデータを取得する」項目で実際にhtmlフォームへ半角英数で入力すると値を返してくれます。 下記は値を返した時のページのソース <html><head></head><body>1<br></body></html> しかし全角入力でフォームへ入力するとするとHTML値を返してくれません。 下記は値を返した時のページのソース <html><head></head><body> 参考サイトのデータをそのまま実行させているのですが、何か原因はわかりますでしょうか? Rubyプログラムの中身は下記のとおりです。 #!/usr/local/bin/rubyrequire "cgi"print "Content-Type: text/html\n\n" print "<html><head></head><body>" c = CGI.newtext = c["t"] print textprint "<br>" print "</body></html>" もしわかれば教えて下さい。よろしくお願いします。

    • ベストアンサー
    • Ruby
  • アンケートフォームなどの送信ボタンを押すとソースコードが表示されてしま

    アンケートフォームなどの送信ボタンを押すとソースコードが表示されてしまいます。 初めまして、CGI初心者です。 色々な場所で調べてみた結果、いまいち明瞭な答えにたどりつかなかったので、 質問いたしました。 現在、WindowsXPにて、Perl(ver5.10.1)を使用したCGIを作ろうと思っています。 その中で、フォーム内容を記述して送信を押した場合に次のページに飛んだときに、 cgiのソースコードが表示される状態になってしまいます。 動作確認には、Apache2.2を使用しております。 例えば、単純にフォームに入力したものを次のCGIで表示するものを作った場合、 (sample_form.html) <form action=print.cgi target=_blank method=get> <input size=70 type=text name="input" value="sample text"> <input type=submit value="送信"> </form> は、正常にフォームが表示されますが、送信を押した場合に (print.cgi) #!/perl/bin/perl print "Content-type: text/html\n"; print "\n"; print "REQUEST_METHOD : $ENV{'REQUEST_METHOD'}<br>\n"; print "QUERY_STRING : $ENV{'QUERY_STRING'}<br>\n"; のようなCGI部分は、 CGIとして動作せずソースコードがそのまま表示されてしまいます。 過去ログにあったように Apathの設定関係 httpd.conf に手を加え、cgiを認識させるというような手順や、CGIを認識するディレクトリの変更はすでにしてあります。 それでも解決しませんでした。 あと、別に作ったCGIは普通に動作するという状況です。 フォームからの送信ボタンを押すとソースコードになってしまうのです。 どこに手をつけたらいいのかわからない状況なので、 よろしくお願いいたします。 また、書き足りない情報がありましたらご享受ください。

    • 締切済み
    • CGI
  • データが多いとエラーになる:改行をbrタグに変換

    フォームから受け取ったデータに改行があれば<br />に変換。 さらに<br />が2つ続いたら</p><p>に変換。 それを、テキストエリアに表示したいのですが、次のようなコードを書いたところ、 入力するデータが少ない(100文字程度)時は、問題なく処理されますが、データが多い(200~300文字程度)とエラー(Premature end of script headers:hoge.cgi)になります。 どこがいけないのか教えて下さい。 PCのスペックの問題なのでしょうか。 送り側(htmlのフォーム)の該当箇所 <textarea name="reviw" id="reviw" rows="8" cols="46"></textarea> CGIは 冒頭で 受け取ったデータの改行コードは、\nに変換し $in{$key} = $val; の形でセットしてあります。 print "Content-type: text/html\n\n"; (中略) print <<'CK13'; <tr> <td> <textarea name="tagoutput" cols="70" rows="10" onclick="this.focus();this.select()"> CK13 print '<p>'; &reviw_put; print <<'CKouttag6'; </p> </textarea> </td></tr> CKouttag6 (後略) がhtml出力部分で、 サブルーチンは sub reviw_put { $in{'reviw'} =~ s/\x0A/<br \/>/g; $in{'reviw'} =~ s/(<br \/>){2}/<\/p><p>/g; print "$in{'reviw'}"; } です。

    • ベストアンサー
    • Perl
  • URLに#を表示するには?

    初めまして。無料のCGI(掲示板)をDLして自分のHPで使用しているのですが「Res」ボタンをクリックするとスレッドの一番上に来てしまい、返信フォームが一番下にある為に使いづらいので改造を試みています。 とは言っても初心者なのでやり方自体が間違っているかもしれませんが。 返信フォーム付近に<a name=jump>タグを入力してあります、URLに「#jump」と手入力すれば思った事が出来るのですが以下のCGIにどの様に記述すれば良いのか教えてください。 print "<form action=\"$script\" method=GET>\n"; if($up_down){ print "<a href=\"#$mm[$x-1]\">▲前</a> <a href=\"#$mm[$x+1]\" class=\"ud\">▼次</a>"; $x++; } print "<input type=hidden name=mode value=new_html>\n"; print "<input type=hidden name=no value=$no>\n"; print "<input type=submit value='Res'> &nbsp; </td></form>\n"; 下から2行目の「=$no」の後に「#jump」と記述すると「#」が「%23」になってURLが出てきます。 これをURLで「#jump」と表示されるようにしたいのです。 下手くそな説明で申し訳ありませんがよろしくお願いします。

    • ベストアンサー
    • Perl
  • 次のcgiファイルを開くには?

    すみません。初心者です。 001.cgi というファイルで フォーム に 正解を入力して Enterキー を 押したら 次の 002.cgi を 開く(実行する)ようにするには どうしたらよいでしょうか? 今は↓このようにして 「次のファイルへ」をクリックしてもらっています。 Enterキーを押すだけで 次の002.cgi (=$num2.cgi)へ行きたいのです。よろしく、お願いいたします。 #-------- if (param('answer') eq $ans){ print ('正解'); print ("<a href=$num2.cgi accesskey=]>次のcgiファイルへ (Alt+])</a> "); #--------

    • ベストアンサー
    • Perl
  • 文字化け

    下記のようなcgiスクリプトがあり、test1.cgi から リンクの test2.cgiを呼ぶと 「リンドウ」が文字化けしてしまいます。 文字化けしないようにするには、どうしたらいいでしょうか。 Perl cgi 初心者です。 --------test1.cgi----------------------------------------- #!/usr/bin/perl print "Content-Type: text/html; charset=EUC-JP\n\n"; $name="リンドウ"; print "name=$name<br>"; print "<a href=\"test2.cgi?aaa,${name},bbb\">test2.cgi</a>\n"; ---------test2.cgi------------------------------------------------- #!/usr/bin/perl print "Content-type: text/html; charset=EUC_JP\n\n"; $query = $ENV{'QUERY_STRING'}; print "query=$query\n";

    • ベストアンサー
    • CGI
  • CGIの改造で判らないことが…

    tail_reviewと言うCGIの改造について聞きたいのですが、 ページ上部に記載される部分がこのコマンドフォームになると思うのですが、 HP|批評 type1|批評 type2|批評修正|タイトルリスト|ランキング|使用説明|管理用 と、この部分はどこのページでも適応されてるみたいです。 そこで質問なのですが、 ここの部分を改造して画面左側にメニューを常に表示するようにしたいのですが可能でしょうか? もし可能であれば、そのようにすればいいのかを教えて下さい^^: 無理であれば無理と教えて頂けたら嬉しい限りです(汗) # ---------------------------------------------------------- # コマンドフォーム # ---------------------------------------------------------- sub command{ print qq(<font size="2">\n); print qq(<a href="$hp_address">$hp_name</a>|); print qq(<a href="$cgi_name?mode=entrance">批評 type1</a>|); print qq(<a href="$cgi_name?mode=entrance&type=1">批評 type2</a>|); print qq(<a href="$cgi_name?mode=revision">批評修正</a>|); print qq(<a href="$cgi_name?mode=all_title">タイトルリスト</a>|); print qq(<a href="$cgi_name?mode=rank_review">ランキング</a>|); print qq(<a href="$cgi_name?mode=explain">使用説明</a>|); if( $add_key eq 'yes' ){ print qq(<a href="$cgi_name?mode=add_review">タイトル追加</a>|); } print qq(<a href="$cgi_name?mode=manager">管理用</a>); print qq(<font>); # 批評修正 最新記事一覧 }# end command 説明下手で本当にスイマセン。。。

    • ベストアンサー
    • CGI

専門家に質問してみよう