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暗号化 以下略
}
認証の送信をしたときに、エラー時エラーメッセージに飛ぶ(分岐する?)にはどういう記述にしたら良いでしょうか?
見にくいかもしれませんが、どんなヒントでも結構ですので宜しくお願いします。
No.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の分岐処理で、必ずどちらかに処理が流れる事。
こんなのしか思いつきません・・・。
(^^ゞ
親身に考えていただきありがとうございます。
後日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チェッカーなどでチェックしてみてください。
アドバイスをいただいた皆様ありがとうございました。この質問を終了させていただきます。
No.2
- 回答日時:
こんにちは。
認証のロジックはできているが、問題は、
>>A.cgiでID&PWを入力しないでも、B.thmlが表示されてしまいます。
なんですよね?
単純にonsubmitで、window.openしているからです・・・。
認証機能自体はうまく動いているようですが、いかんせん、forum.cgiが動く前にBを開いているので・・・。
(^^ゞ
この回答への補足
その通りでございます。
これはもしや、処理を2段階にする以外ないのでしょうか?
次善の策としてその場合も、複数あったらあるだけご教授ください。どれかでCGI がクリアされれば個人的にはOKと思っていますができるだけ周囲の納得のいくような編集にしたいため、よろしくお願いします。
No.1
- 回答日時:
こんばんは。
略が多くて・・・。
要するに、
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です。
ご要望があればスクリプトの一部前出を再掲載します。
ただし字数の範囲になりますが、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP php テーブルが作成できない 1 2022/11/17 23:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラーの意味がわかりません
-
画像アップ時のエラー
-
EXCELファイルに誰がアクセスし...
-
ASPから既存のexcelブックを開...
-
《エクセルVBA》「他の人が該当...
-
ASPからJavaScriptへの受け渡し...
-
perlからphpを実行して結果を得...
-
CGIでソースがそのままでてしま...
-
ユーザの所属するグループを取...
-
apache で /cgi-bin/にアクセス...
-
SFTPなどは使わないホームペー...
-
VBAでサーバーにアクセスするに...
-
イントラネット用HP アクセス解...
-
C# ファイル削除のエラーコード
-
XサーバーでCGIを使うには??
-
IISでエラー、Apachでは動くの...
-
ASP(IIS?)のエラーについて
-
perl 矢印演算子 -> の使い方
-
前回はごめんなさい。pythonでc...
-
FFFTPでアップロードできない?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画像アップ時のエラー
-
まったくわかりません。お手上...
-
エラーの意味がわかりません
-
CGIでの500エラー
-
cgiのエラーが修正できません!...
-
CGI(HTTP://dbgw_relay.cgi)の...
-
IE5.0でアプリケーションエラー
-
KENT WEBのTOPICS BOARDを改造...
-
一言メルフォを設置したが500エ...
-
買い物カゴのCGI エラーIntern...
-
FC2へのCGIメールフォーム設置
-
シグマリオン(3)に英辞郎(PD...
-
Movable Typeでインストール作...
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
URLに~/cgi-bin/~を隠す方法
-
VBAでサーバーにアクセスするに...
-
ラジオボタンのグループ化
-
ASPから既存のexcelブックを開...
-
VBScriptで、ファイルから任意...
おすすめ情報