プロが教える店舗&オフィスのセキュリティ対策術

人が作ってくれたcgiを見て、直すことができるか検討
しています。

a05.cgi という入力フォームで社員コードを入力して
「編集画面へ」をクリックすると a06.cgi に進み、
そこで詳細データを入力します。

a06.cgiにある

print "<a href=\"./a05.cgi\">戻る</a><br>\n";

この部分で、「戻る」をクリックしてa05.cgiに戻った
とき、先に入れた社員コードが消えてしまっているの
ですが、これを消さないように戻ることはできるので
しょうか。

cgiはリストを追加したりするくらいしかわかりません。
よろしくお願いします。

A 回答 (5件)

> 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という値を受け渡している状態になっています。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/01/11 11:42

#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が存在するかも?と思ったので。)
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/01/11 11:45

#2の方と同意見です。


あとは、a05.cgiとa06.cgiのソースがないとアドバイスのしようがないかと…。
たぶん、a06.cgiで社員コード受け取ってますから、それと似たような部分をa05.cgiに入れてやれば何とかなるとは思うのですが…。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/01/11 11:45

URLに引数表示されてしまいますが



print "<a href=\"./a05.cgi?code=c06.cgiで取得した社員コード\">戻る</a>";

にして、a05.cgiでcodeを受け取るようにし、
社員コードをフォームに表示したらいかがでしょうか。

まとを外していたら申し訳ないです。
    • good
    • 0
この回答へのお礼

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>

としてみましたがうまくいきません。

お礼日時:2004/12/28 11:16

フォームやCGIに問題があるわけではなさそうです。



フォームを記述しているhtmlファイルのヘッダ部分を確認してみてください。

常に最新のデータを取得しなおすように設定されていたりしませんか?

こういった設定をされている場合、戻るボタンで戻った場合でも、既に入力したデータを廃棄して再度サーバにアクセスしてhtmlを取得します。

BBSなど、頻繁に更新されるページで戻るボタンでも最新の情報を表示するようにと、よく利用されている機能ですが、今回の場合は不要ですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!