WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:CGI中のJavaScriptでCGIで得たデータは使える?

ヒデ筒井[MAIL][URL][WriteDate : Wed Nov 15 10:20:31 2000]

初めまして。
ヒデ筒井と言います。
いつも、このページ参考にさせていただいてます。

  初めて質問させていただきます。
  現在ランキングCGIを作成しているのですが、どうしても解決できない問題に当たってしまい困ってます。
(掲示板検索しましたが、該当するものがありませんでした。見落としてたらスミマセン。)

  問題は次のようなものです。
  写真ファイルのアップロードの際に、アップ先のディレクトリに同じ名前のファイルがあるかどうか確認をしたいんです。
  CGIでできるのですが、回線が混んでいれば確認までに時間がかかってしまうと思います。
  そこで、CGIでディレクトリ内のファイルを配列に読み込み、   JavaScriptで確認処理ができないかと考えたんです。
  ただ、その場合にPerlのスカラー変数はうまく使えたのですが、配列がどうもうまく使えません。
  12行目では変数 $photomax は"4"と代入されていますが、14行目では配列 @photo[0] の値しか読取れません。
  おそらく @photo[p] の"p"がよくないと思うのですが、ここをあれこれいじってもうまくできませんでした。
  このような使い方は間違っているのでしょうか?
  どうか、アドバイスをお願いします。

1   $photomax=4; #ディレクトリ内にあるファイル数
2   @photo[1]="file1.jpg"; #配列@photoの中身
3   @photo[2]="file2.jpg";
4   @photo[3]="file3.jpg";
5   @photo[4]="file4.jpg";
6
7   print "photoname = document.form1.photo1.value\n";
8 #写真アップ用ファイル名代入
9 #form name="form1"、input type name="photo1"
10
11  print "p=1\n"; #ループ用変数の初期値
12  print "while( p <= '$photomax' ) {\n";
13 #写真ディレクトリのファイル数分繰返しループ
14  print "if (photoname.match(/'@photo[p]'/i)) {\n";
15       #アップ用写真ファイル名と同じファイルが存在する時
16  print "alert('同じファイル名が既に存在します!!')\n";
17  print "return false\n";
18  print "}\n";
19  print "p++\n";
20  print "}\n";


いとまさ7[MAIL][URL][WriteDate :Wed Nov 15 10:29:01 2000]

まず1点

Perlの配列の要素の参照は
@photoの要素1番の参照は
$photo[1]
ですよ、たしか。

ヒデ筒井[MAIL][URL][WriteDate :Wed Nov 15 10:40:16 2000]

いとまさ7さん、さっそくの回答ありがとうございます。
今まで気づかずにずっと@photo[1]という記述してました。
(でも、今まではこれでも動いていました...不思議)
で、さっそく修正してやってみましたが、結果は同じでうまくいきません。
デバッグでは12行目の後に
print "alert('No.' + p + ':' + '$photo[p]')\n";
っていうのを入れて、ループがちゃんと回っているか確認してます。
その結果はループはちゃんと回ってるけど、メッセージはいつも配列の1個目のデータしか表示してません。
お助けを〜!!


Qz[MAIL][URL][WriteDate :Wed Nov 15 16:34:39 2000]

JavaScriptとPerlの文法をごちゃまぜにしてませんか?
Perl側の@photoの内容をJavaScript側の配列に入れるように
すればうまくいくと思います。
print "photo = new Array();\n";
foreach $i(@photo){
print "photo[$i] = $photo[$i];\n";
}
といった感じの記述をJavaScriptに出力するときに必要だと思います。
あと、JavaScript側のコードをPerlのソースに埋め込むときは、
ヒアドキュメントを利用すると見やすく、メンテナンスしやすくなりますよ。

例)
print <<"here";
<script>
documet.write("hello world!!");
</cript>
here



ヒデ筒井[MAIL][URL][WriteDate :Wed Nov 15 18:15:11 2000]

Qzさん、回答ありがとうございます。

上記のソースそのままだとうまく動きませんでしたが、シングルクォーテーション入れると動くようになりました。

本当にありがとうございました。


回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]