痔になりやすい生活習慣とは?

HTMLとPerl間のページ遷移について。

こんにちわ。
HTML(index.html)でログインフォーム(ユーザ名、パスワード)を作成し、そこに入力した情報を、Perl(login.pl)にPOST送信します。
Perlでは、受け取ったパラメータをチェックし、ユーザ名とそのパスワードが正しければ、もとのHTMLファイル(index.html)にページ遷移し、もともとあったログインフォームをJavaScriptで削除し、「ログイン中」と表示させる、ということをしたいのですがわからないところがあり投稿させていただきました。

現在、クライアントでは、JavaScriptを使ってログインフォームを作っています。そして、フォームの中の値を取得して、POST送信することはできます。次に、サーバにてPerlで受け取ったパラメータをチェックし、ユーザ名とパスワードの認証をとるところまではできています。しかし、その後にどうすべきかがわかりません。locationで、もとのHTMLファイル(index.html)を指定しても、ログインを認証したという情報は保持しておらず、それでは意味がありません。
Perlでログインを認証した後に、認証したという情報を保持したままHTMLページに遷移する事は可能でしょうか。可能であればその方法を教えていただきたく思います。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

 Perlが使えるなら、わざわざ制約の大きいjavascriptなど使わなくてすむと思いますが????



perlにて、
if(チェックOK){
 $login_FORM = qq^ログイン中<form
 action="$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}" metod="post">
 <input type="submit" size="10" value="ログアウト" </form>^;}
else{
 $login_FORM = qq^<form
 action="$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}" metod="post">
 <input type="text" size="10" value="" name="userName">ID
 <input type="pasword" size="10" value="" name="pasword">パスワード
 </form>^;
}

print qq^現在のHTMLからjavascriptを除いたものをここに書く。
$login_FORM
続きのHTML^;
**************処理
__END__

この場合、index.cgiが、そのページになる。
 htmlの拡張子がよければ、htmlをCGIとして、サーバーに認識させるか、PATH_INFOで処理すること。
例) htt://hoge.com/userPage/index.html
              ^^^^^^^^^自体をCGIにする
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
JavaScriptを使う理由として、JQueryを使ってみたかったからです。あと、作ろうとしてるものは掲示板です。後出しの情報ですいません。
実際にJQueryを使ってみて、ログインフォームの作成から非同期でログイン認証を行うことはできたのですが、ログイン認証の部分は非同期ではなくページ遷移をしたかったことから今回のような質問をさせていただきました。ですので、作ろうとしてるシステムでは、Perlは純粋に受け取ったリクエストパラメータを処理して、処理された結果のデータをクライアントへ返し、クライアントでは、JQeuryを使ってごにょごにょしようと考えておりました。
迅速なご回答本当にありがとうございます。

お礼日時:2010/02/03 01:32

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qボタンの処理

ボタンをクリックしたら指定されたサブルーチンの処理をするようなプログラムを作ろうとしているのですができません。submitではなくbuttonでやりたいのですが無理でしょうか?分かる方がいらっしゃいましたらよろしくお願いします。

Aベストアンサー

#1です。

これはPerlというよりもHTMLやJavaScriptのお話になりますが、
<button value="削除" name="hoge" onClick="delete()">
とした場合、「ボタンを押したらJavaScriptのdelete()関数を呼び出す」といった意味になります。
mizumaki22さんの組んだソース内に「function delete()」があればそれが呼ばれますが、無ければそこでエラーが発生するでしょう。
これは全てクライアント側で行われる作業であり、Webサーバ側では関知しません。

引き換え、Perlを動かす為にはサーバにアクセスして.cgiファイルを呼ばなければなりません。
そして.cgiファイルが呼ばれた際にWebサーバが内部的に処理を行い、その結果をクライアントに返します。
その為に一般的に使用されるのが<form action="hoge.cgi">といった記述です。
そうして<form>に記述された.cgiファイルを呼ぶには、<form>に対して"submit"を送らなければなりません。
その為に使用するのが<input type="submit" value="削除">といったような記述です。

mizumaki22さんのご質問の場合、この<input type="submit">を使わず<input type="button">で同じような動作をさせたいのかな?と読み取れました。
その場合には<input type="button">を押されたタイミングで"submit"を送ってやる必要があります。
それが#1で書いた<input type="button" onClick="submit()">の意味です。

前置きが長くなりましたが、直し方について・・といっても、もうほとんど書いてしまいましたが。(^_^;
mizumaki22さんの補足してくだっさったソースを見ると、CGI.pmというやつでしょうか。(正直、この辺りには余り詳しく無いのですが。)
> print button(-value=>"削除",-name=>"$link2",-onclick=>"delete()");
見たところ、この記述だと<input type="button" value="削除" name="hoge" onClick="delete()">というHTMLに出力されるように見受けられます。
これが<input type="button" value="削除" name="hoge" onClick="submit()">とHTML出力されれば動くと思われますので、
> print button(-value=>"削除",-name=>"$link2",-onclick=>"submit()");
でよろしいかと思われます。

#1です。

これはPerlというよりもHTMLやJavaScriptのお話になりますが、
<button value="削除" name="hoge" onClick="delete()">
とした場合、「ボタンを押したらJavaScriptのdelete()関数を呼び出す」といった意味になります。
mizumaki22さんの組んだソース内に「function delete()」があればそれが呼ばれますが、無ければそこでエラーが発生するでしょう。
これは全てクライアント側で行われる作業であり、Webサーバ側では関知しません。

引き換え、Perlを動かす為にはサーバにアクセスして.cgiファ...続きを読む

Q数値かどうかの判定方法

$aに代入されているものが数値かどうかを判定するにはどのようにしたらよいのでしょうか?

Aベストアンサー

$a =~ /^[0-9]*$/
上記の場合、*は「直前のパターンの0回以上の繰り返し」の意味なので、0から9がなくても、つまり$aが空でもマッチしてしまいます。
なので、
$a =~ /^[0-9]+$/
としましょう。
(+は「直前のパターンの1回以上の繰り返し」)
また、0-9は\dで表すこともできるので
$a =~ /^\d+$/
と書くこともできます。

QCGI動作後に元のページに戻る方法

Perl , javascript 初心者です。
あるページの一番下に,チェックボックスを設置して選択してもらうという簡単なアンケートを作っています。
submit ボタンを押した後,CGI(Perl) で処理を行い,その後元のページの元いた場所(アンケートがあるところ)を表示させることはできますか?
また,できれば submit ボタンの横に「ご協力ありがとうございました」というコメントを表示したいと思います。

良い方法があれば教えて下さい。

Aベストアンサー

perlでは、
print "location: (URL)\n\n";
これでページを呼び出します。
同じフォームに戻らなくても、お礼のページを作った方が良いと思います。
どうしても、フォームに戻るなら、CGIから戻ってきたことが判るようにURLの後ろに「?back」などと識別コードを付けます。
そして、HTML内にJavaScriptを埋め込み、自分自身のURLを調べれば、普段のURLと違うことが判ります。

Q処理終了後、他のページへジャンプする方法

perl での処理を終了後、他のページ(html)に自動的に飛ばしたいのですが(JavaScriptは使わずに)、どうすればよいでしょう。

Aベストアンサー

 CGIで動的ページを吐き出す際に、頭に
  print "Content-type: text/html\n\n";
とか表示しますよね?

 これと同じような感じで、
  print "Location: URL\n\n";
とすれば、そのURLにリンクしたかのように動作します。
 このとき、LocationとURLの間に半角スペース1つ開ける(確か必要なハズ…)のと、URLは絶対アドレスで指定する(相対指定だと飛ばないトコもあるらしい?)のを、忘れないようにして下さいね。

 では

QLocation: で cgi → cgi は不可?

print "Location: ./index.cgi\n\n";

上記の命令でエラーとなります。
i-mode用のHPを作ろうと思うのですが,情報の受渡が必要でして・・・
どうすればいいのでしょう?
何かいい方法有りませんか?

Aベストアンサー

 Location: ヘッダは、http:// から始まるフルパスでないと動きません。
 チェックしてみてください。

Q"use CGI::Session"でエラーが発生してしまいます

初投稿です。宜しくお願いします。

ActivePerl5.8.0+Apache1.3.14でSessionを使用した
Webサイトを作成中なのですが、
ppm経由でインストールしたCGI::Sessionを
useしようとしても、エラーになってしまいます。

サンプルコードは以下の通りです。

#!/usr/bin/perl

use CGI::Session;

&ses();
&print();

sub ses() {
# Session作成・ここから
my $session = new CGI::Session(undef, undef, {Directory => './tmp'});
my $tmpSID = $session->id();

$session->param('menu', 'MENU1');

$session->expire('+2h');

$session->header();
}

sub print() {
print "Content-type: text/html;charset=ISO-2022-JP\n\n";
print <<EOF;
OK!
EOF
}

use CGI::Session; の部分(と、Session関数を
呼び出している部分)をコメントアウト
すると、とりあえずはエラーが出なくなるので、
原因はここだとわかっているのですが、
文法的に間違っているとは思えないですし、
困っています。
情報お願いいたします。

初投稿です。宜しくお願いします。

ActivePerl5.8.0+Apache1.3.14でSessionを使用した
Webサイトを作成中なのですが、
ppm経由でインストールしたCGI::Sessionを
useしようとしても、エラーになってしまいます。

サンプルコードは以下の通りです。

#!/usr/bin/perl

use CGI::Session;

&ses();
&print();

sub ses() {
# Session作成・ここから
my $session = new CGI::Session(undef, undef, {Directory => './tmp'});
my $tmpSID = $session->id();

$session->param('menu', 'MENU1')...続きを読む

Aベストアンサー

>lib.pmが無いようですが、lib.pmを
>どのフォルダに置いてやればよろしいのでしょうか??

一番単純なのは、先のサンプルコードのファイルと同じ場所に置いておけば読み込んでくれるはずです。

もう少し賢いやり方は、libモジュールを使って、パスを通してやることです。
use CGI::Sesssion;
する前に
use lib qw('lib.pmが置いてある場所の相対パスまたは絶対パス');
としてやれば良いと思いますよ。

他にも、直接@INCにパスを通す方法
BEGIN { unshift @INC,"パス" };
もありますが、前者の方が良いです。

lib.pm以外にパスが通っていないモジュールが必要になった場合も、同様の処置で対応できるでしょう。

#今、実行環境がなく、試せないため、上記でうまくいくのかちょっと心配。

QPerlプログラム上でアラートを表示

現在、Perlにてチェックプログラム(チェック内容は省かせていただきます)を作っています。

もともとはweb上で「登録」をクリックすると以下のような csh で記述されたcgiが実行され、
------------------------------
#!/usr/bin/csh
echo "Content-type: text/html"
echo ""
~中略~
./既存プログラムA.exe
------------------------------
最終的に「既存プログラムA.exe」が起動するというような物で、今回この「既存プログラムA.exe」が起動される直前にチェックプログラムを実行するというものです。

前置きはこのような感じで、教えていただきたい内容は、
チェックプログラム内の記述に以下のようなチェック項目があります。
------------------------------
if(!(-e $CIRCUIT)){
print"END";
exit(0);
}
------------------------------
「$CIRCUIT」というフォルダが存在するか否か、存在すれば次のチェック項目へ、存在しなければ処理終了というような単純な構文なのですが、
このif文内に、"そのようなフォルダはありません"アラートを表示させるような記述を追加することは可能でしょうか?

サンプルURLや情報等お持ちの方いらっしゃいましたら、
よろしくお願いいたします。

現在、Perlにてチェックプログラム(チェック内容は省かせていただきます)を作っています。

もともとはweb上で「登録」をクリックすると以下のような csh で記述されたcgiが実行され、
------------------------------
#!/usr/bin/csh
echo "Content-type: text/html"
echo ""
~中略~
./既存プログラムA.exe
------------------------------
最終的に「既存プログラムA.exe」が起動するというような物で、今回この「既存プログラムA.exe」が起動される直前にチェックプログラムを実行するというも...続きを読む

Aベストアンサー

ウェブ上でアラートを出すなら
print <<END;
<script>
alert('メッセージ');
</script>
END
とかしてみたらどうでしょう。
(未確認自信なし)

Qperl/cgi リダイレクトができない

こんにちは。

レンタルサーバーにて、認証後に開きたいページをlocationで実行してみたのですが動かなくて困っています。

index.html(ログインフォーム)

aaa.cgi(認証可否チェック)
↓OKならsessionを与えて
bbb.cgi(認証後にユーザーに見せる最初のページ)

location以外でダイレクトさせる方法を教えてください。

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

Aベストアンサー

METAを使えばリダイレクトできますけども。
<meta http-equiv="refresh" content="0;URL=http://hogehoge.com">

普通は location でできます。
location の前にprint していませんか?
location は 一番最初(printする前)にやらないと動作しません。


ただし、例の動作でしたら私ならばaaa.cgiにすべて入れてしまいますね。
subルーチンとかを使えば余計なページ移動を考えなくてもいいので。

QPerl エラーログを指定の場所に出力する場合

以下のよーに指定すればエラーログの場所を指定する事ができますが、

# エラーログ
BEGIN{ open ( STDERR, ">>./log/err_log/err.txt" ); }

たとえば変数にファイル名を入れて指定する場合は、

$err_log = "./log/err_log/err.txt";
BEGIN{ open ( STDERR, ">>$err_log" ); }

とするとエラーが出てしまいます。変数に入っているものを指定するにはどうすればいいでしょうか?

Aベストアンサー

BEGINブロックは一番最初に実行されます。
この場合、$err_log = "./log/err_log/err.txt"; より前です。
なので、open時の$err_logは空です。

$err_log=をBEGINブロックに入れるか、openをBEGINブロックから出すか、になります。

QUse of uninitialized value ---

初心者です。フォームに文字を入力してもらい、↓
print blockquote(
textfield(
-name => 'die Antwort',
省略----条件にあえば、
my $value = param('die Antwort');#として
if (($value eq $ans || $value eq $ans2) and ($c eq $num)){
「正解」と表示することにしました。すると、うまくいくのですが、
if (($value eq $ans || $value eq $ans2) and ($c eq $num)){
について「Use of uninitialized value ----」とApacheのerror logに書かれてしまいます。このためerror logがすぐに巨大なファイルになってしまいます。これを避ける方法をお教えください。よろしく、お願いいたします。

Aベストアンサー

コードに use warnings が入っているのですよね。
デバッグも済んでいるのでしたら、
no warnings qw ( uninitialized );
で、この警告の表示を抑制してもよいと思います。


人気Q&Aランキング