アプリ版:「スタンプのみでお礼する」機能のリリースについて

1/17付CGIについての質問の関連です。
質問はパスワード付forum.cgi(付録フリーCGI)で、forum.cgiを入室後、ID&PW情報をA.cgiに渡したまま、新しいHTMLウィンドウを立上げることでした。
この質問は、こちらの教えてGOOでご教授いただきました。ありがとうございます。
できたCGIでは、A.cgiでID&PWを入力しないでも、B.thmlが表示されてしまいます。

# ID/PW認証 #
sub pass_check {
local($time,$time2,$inpw,$flag,$id,$pw,$check);

# 時間を取得
$time = 略;

$timeout = 略;
$password = '略';
$pwdfile = '略;
#中略
if ($in{'id'} eq "") {
&header;
print "<table><tr><td>\n";
print "<td><form action=\"$script\" method=\"GET\"onsubmit=\"window.open('B.html,'new')\">\n";

print "<tr><th><UL><LI>すでにパスワード取得済みの方は・・・略
print "<tr><th>ログインID<th><input type=text name=id size=8></tr>\n";
#中略
print "<tr><th colspan=2><input type=submit value=' 認証する '></tr>\n";

#中略
if ($in{'pw'} eq "") { &error("パスワードの入力モレです"); }

$flag=0;
open(IN,"$pwdfile") || &error("Open Error : $pwdfile");
while (<IN>) {
($id, $pw) = split(/:/);
if ($in{'id'} eq $id) { $flag=1; $pw=~s/\n//; last; }
}
close(IN);
if (!$flag) {&error("該当のIDは見当たりません"); }

$check = &decrypt("$in{'pw'}", "$pw");
if ($check ne "yes") { &error("パスワードが違います"); }

# パスワードを第2暗号化 以下略
}
認証の送信をしたときに、エラー時エラーメッセージに飛ぶ(分岐する?)にはどういう記述にしたら良いでしょうか?
見にくいかもしれませんが、どんなヒントでも結構ですので宜しくお願いします。

A 回答 (3件)

こんにちは。



普通は、onsubmitのwindow.openをやめて、target="_blank"ですか・・・。
B.htmlはcgiの中でリダイレクトさせればいいかと思います。
つまり、
1.Formのsubmitボタンを押す。
2.forum.cgiが呼ばれる。この時、targetは_blankにしておく。
3.チェックをパスしたら、cgiの中でB.htmlを呼ぶ。
4.B.htmlが新規で開く。
5.チェックがダメならエラー画面を呼ぶ。
6.ただしこの時に、エラー画面も新規で開くのが問題といえば問題・・・。

ここでの注意点は、cgiの分岐処理で、必ずどちらかに処理が流れる事。

こんなのしか思いつきません・・・。
(^^ゞ
    • good
    • 0
この回答へのお礼

親身に考えていただきありがとうございます。
後日CGIでJavaScriptのPOPUPウィンドウを利用して形のうえでは可能になりました。しかし、社内のパソコン内で同じ画面を見ましたが、ブラウザのバージョン違いで、クリックして見れる場合と、Ctrl+クリックした場合と二通りでました。どうやら、最近のブラウザではポップ広告排除の機能が何かしらのフリーウェア(多分セキュリティの性ではないでしょうか?)この操作を画面上で案内してた続き完了としたかったのですが、社内的に不慣れな方が利用するには不適切と判断されボツとなり、結局CGI 内にポップで出す予定のHTMLをリンクさせることになりました。
お騒がせしました。念のため、JAVASCRIPTの記述を紹介しておきます。
#CGIのヘッダー部に追加
print <<"EOM";
<SCRIPT LANGUAGE="JAVASCRIPT">
<!--function OpenWin(){
window.open("iinkai_keijiban.html","","fullscreen=yes");
}
//-->
</SCRIPT>
EOM

print "<td><form action=\"$script\" method=\"POST\"onclick=\"OpenWin()\">\n";

print "<tr><th colspan=2><input type=submit value=' 認証する '></tr>\n";
何度(何10回)も書き換えたためこれで厳密にエラーが出ないか自信ありませんので、実際にコピーペーストする場合はPERLチェッカーなどでチェックしてみてください。
アドバイスをいただいた皆様ありがとうございました。この質問を終了させていただきます。

お礼日時:2005/02/01 09:29

こんにちは。



認証のロジックはできているが、問題は、
>>A.cgiでID&PWを入力しないでも、B.thmlが表示されてしまいます。
なんですよね?

単純にonsubmitで、window.openしているからです・・・。
認証機能自体はうまく動いているようですが、いかんせん、forum.cgiが動く前にBを開いているので・・・。
(^^ゞ

この回答への補足

その通りでございます。
これはもしや、処理を2段階にする以外ないのでしょうか?
次善の策としてその場合も、複数あったらあるだけご教授ください。どれかでCGI がクリアされれば個人的にはOKと思っていますができるだけ周囲の納得のいくような編集にしたいため、よろしくお願いします。

補足日時:2005/01/20 14:50
    • good
    • 0

こんばんは。



略が多くて・・・。
要するに、
1.すでにパスワード取得済みの方は、無条件でBを表示。
2.それ以外でエラーがない人もBを表示。
3.何らかのエラーはエラー画面を表示。
という分岐処理ですよね?

よくあるサンプルのメール送信フォームで、必須項目が入ってなければエラー画面に飛ばす、
チェックがOKなら、確認画面を表示というのが結構ありますが、
その辺りを参考にされてはいかがですか?
(^^ゞ

この回答への補足

リプライありがとうございます。文字数制限のため省略が多くなり申し訳ありません。
さて、CGIの中でID&PW認証をしてますので、
1.すでにパスワード取得済みの方は、無条件でBを表示。
2.それ以外で何らかのエラーはエラー画面を表示。になります。会員制のフォーラム(情報交換場所たとえばメーカーサイドのサービス情報のようなものです。)

認証を済ませない方は入室不可です。A.CGIからB.HTMLに入室してBに入れた人だけリンク(最初の認証が生きている)でA.CGIの会議室で顧客間情報、トラブル情報、サービス情報のようなものをメーカー←→販売店←→顧客間で情報交換することを目的にしています。
やりたいことはCGIの記述でひとつのイベント(SUBMITまたはONSUBMITまたはONCLICKでA.CGIに認証データを渡しつつB.HTMLを表示することです。)
HTTP://www.esp-plan.co.jp/cgi-bin/forum.cgi
です。出展はKENTWEBさんのCDブックFORUM.cgiです。
ご要望があればスクリプトの一部前出を再掲載します。
ただし字数の範囲になりますが、よろしくお願いします。

補足日時:2005/01/20 00:04
    • good
    • 0

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