CGIだけど、なんか質問ある? Part 6
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/07/06 13:41ID:Mpxtn4bk※CGIは特定の言語に依存するものではありません。
※Perlのコーディングに関する質問は専用スレがありますのでそちらでお願いします。
↓
Perl 初心者コーナー Part13
http://pc.2ch.net/test/read.cgi/php/1022731565/l50
過去ログ・関連スレッドは >>2
0335nobodyさん
02/07/29 11:39ID:t/nKwjTfセッションは立ち上げるブラウザのウインドウごとに違うと
思っていたのですが、同一の場合がでてしまいます。
再現しないの困っているのですが、どなたか原因を知りませんか?
IE5.5でファイルメニューから新規作成->ウインドウとやると
同じセッションになるようなのですが、今は普通にデスクトップの
IEのアイコンをたたいて立ち上げているのですが。
0336nobodyさん
02/07/29 15:00ID:???そのデータテキストから検索をしたいとします。
1,太郎,はじめまして。
2,花子,いい天気ですね。
3,名無し,逝ってよし
4,nobody,キタ━━━━━━(・∀・)━━━━━━!!!!
・・・・
こういうのがあって、で検索は名前と内容が条件です.
名前が○○で、本文に○○がある時、その投稿を抜き出します。
条件は一つでもいいです。
if(($name eq "$input_name") and ($content =~ /$input_content/)){
テキストファイルを開いて、printする。
}
$input_***は利用者が入力した文字列です。
で、どっちか片方でもいいので変数が空になる時もあります。
本文に○○があるのを抜き出せと命令が来たら、
名前が空に一致するわけないので条件に合うものは当然ゼロとなります。
この例だと条件が二つなので地道に3通り条件をif文で書けばいいかもしれないけど条件が多くなった時は大変です。
どうやったらうまく書けますか?
入力された変数が空かどうかを見て、if文を変数にどんどんつなげて作っていく方法が
あると思うんですけど、それってSQL文とかでDBに渡すときしか意味ないですよね。
$hoge = "($a eq $aa)";
if $hoge {
}
こうやったら出来なかったので。(当たり前だって怒られると思いますけど)
0337nobodyさん
02/07/29 15:18ID:???0338nobodyさん
02/07/29 15:28ID:???0339nobodyさん
02/07/29 15:28ID:S3zWiKSWファイル(圧縮ファイル)をダウンロードできるようにしたいのですが
どうすればいいのでしょうか?
ぜひ教えてください
0340nobodyさん
02/07/29 15:28ID:???0342nobodyさん
02/07/29 15:42ID:2AYT60/o0343nobodyさん
02/07/29 17:01ID:hJ6YB5taダイヤルアップ環境からアクセスしたところ、index.htmlは表示されるのですが、そこにFORM action="./test.cgi"で仕込んだ
cgiを実行しようとすると、ユーザー名とパスワードを入力するダイアログが出て困っております。
「ディレクトリセキュリティ」では「匿名アクセスを許可する」にチェックを入れております。usr/binもエイリアス切ってます。
どこが問題か、訳がわからなくなってしまいました。
どなたかお助けください。よろしくお願いいたします。
0344nobodyさん
02/07/29 18:07ID:YroFxsp9my $hoge;
sub hoge {
$hoge=2;
}
↑こんなmyの使い方をしているスクリプトの作者がいたんですが
これって意味があのでしょうか?
それは混乱を招きやすいね。
でもまぁ理解した上で使ってるなら敢えて文句を言おうとは思わないけど。
0346nobodyさん
02/07/29 22:57ID:luhGHKEGhttp://www.tekipaki.jp/
今OCNのPageOnサーバーを使っていて、
このサーバーはCGI用に借りました。
カウンタを表示させようとしているのですが、
違うサーバーにCGI本体をおいて、ページ上で使うにはどうすればいいんでしょうか?
違うサーバーのほうにページを移動すれば一番いいのですが、
かなり読み込みが遅いので、できれば今のままのサーバーを使いたいんです。
どなたか教えてください。お願いします。
0347nobodyさん
02/07/30 01:24ID:klN51cmM新しいバージョンでは変数の構成が違うんです。
そこで,HTMLフォームに入力した旧バージョンの変数の中身を,
新しいバージョン用に書き換えるといったものを作り始めたところ
壁にぶつかりました。お願いいたします。
まずは変換前の変数を入力するための,sub form1を実行します。
(入力する項目:@hairetu1 @hairetu2 $scalar1)
次にform1で入力された配列変数を分割したいので,
その範囲を入力するフォームと配列の中身の一覧を出します。(sub form2)
(入力する項目:$scalar2 $scalar3)
この時点では@hairetu1 @hairetu2 $scalar1にはform1で入力された内容が入っている。
最後にsub form3,変換された変数の中身を表示する…という予定だったのですが,
ここに来るとform1で入力した@hairetu1 @hairetu2 $scalar1が空っぽになってしまってます。
form2で入力した$scalar2 $scalar3にはちゃんと中身が入っています。
どうして@hairetu1 @hairetu2 $scalar1が空になってしまったのかがわかりません。
手持ちの解説書を読んでも,特に指定しない限りグローバル扱いされるとありますし。
どうかお願いします。
0349347
02/07/30 01:51ID:klN51cmM# HTML出力
print "Content-type: text/html\n\n";
print <<"EOM";
<html><head><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"><body>
EOM
if ($mode eq 'form2') { &form2; }
if ($mode eq 'form3') { &form3; }
if ($hairetu1[0] eq '') { &form1; }
print "</body></html>\n";
#フォームその1
sub form1{
print "<form action=\"$script\" method=\"$method\">\n";
print "<input type=hidden name=mode value=\"form2\">\n";
print "<p>配列その1 例:)'1','2','3'";
print "<input type=\"text\" name=\"hairetu1\" maxlength=\"100000\">\n";
print "<p>配列その2 例:)'1','2','3'";
print "<input type=\"text\" name=\"hairetu2\" maxlength=\"100000\">\n";
print "<p>\スカラーその1";
print "<input type=\"text\" name=\"scalar1\">\n";
print "<input type=\"submit\" value=\"次へ\">\n";
print "</tr>\n</table></form>\n";
}
0350347
02/07/30 01:54ID:klN51cmMsub form2{
print "<form action=\"$script\" method=\"$method\">\n";
print "<input type=hidden name=mode value=\"form3\">\n";
print "<div align=\"center\">\n";
print "スカラーその2<input type=\"text\" name=\"scalar2\"><br>\n";
print "スカラーその3<input type=\"text\" name=\"scalar3\"><br>\n";
print "<input type=\"submit\" value=\"表\示\">\n";
print "</table></form>\n";
$FORM{'hairetu1'} =~ s/'//g;
$FORM{'hairetu2'} =~ s/'//g;
@hairetu1 = split(/,/,$FORM{'hairetu1'});
@hairetu2 = split(/,/,$FORM{'hairetu2'});
$scalar1 = $FORM{'scalar1'};
}
# フォームその3
sub form3 {
$scalar2 = $FORM{'scalar2'};
$scalar3 = $FORM{'scalar3'};
print <<"EOM";
<table border align="center">
<tr><th>\@hairetu1</th><td>@hairetu1</td></tr><tr><th>\@hairetu2</th><td>@hairetu2</td></tr>
<tr><th>\$scalar1</th><td>$scalar1</td></tr><tr><th>\$scalar2</th><td>$scalar2</rd></tr>
<tr><th>\$scalar3</th><td>$scalar3</td></tr></table>
EOM
print "<br><br><br>";
}
0351347
02/07/30 02:10ID:???0352nobodyさん
02/07/30 02:14ID:???フォームその3でscalar2 scalar3しか表示されないのはあたりまえかと
0353nobodyさん
02/07/30 02:23ID:???hairetu1もhairetu2も渡されないから渡されるとしたらscalar2かscalar3
だけだろう。
また、&form1実行後画面においてhairetu1に入力するかどうかによって次の
フォームが1つや2つに変動する可能性もある。
0354347
02/07/30 02:32ID:???ありがとうございます。
でもフォームその2のところで,
@hairetu1 = split(/,/,$FORM{'hairetu1'});
@hairetu2 = split(/,/,$FORM{'hairetu2'});
$scalar1 = $FORM{'scalar1'};
と,フォームの内容を変数に格納しておいたんですが,
どうしてこの中身が消えてしまうのでしょう?
0355nobodyさん
02/07/30 02:37ID:???mode=form2のときだけです。
if ($mode eq 'form2') { &form2; }
0356347
02/07/30 02:42ID:???ええと,一度代入を行えばその中身はずっと保持されるわけじゃないんですか?
0357nobodyさん
02/07/30 02:50ID:???0358347
02/07/30 02:55ID:???すると&form3にデータを持ち越すには,
引数をつけて呼び出してやれば良い訳ですかね?
0359nobodyさん
02/07/30 02:58ID:???取得した値を出力HTMLフォーム内にhiddenタグで埋め込んで出力する。
0360347
02/07/30 03:04ID:???ごく初歩な質問に親切なご回答ありがとうございました。
精進します。
0361nobodyさん
02/07/30 10:11ID:???書かなきゃいけないのですか?
別にいらないよ。
スクリプトがそこで終わることを明示してるだけ。
そのトークンから先はパースしないから、Perlとは関係ないものを書ける。
大抵はドキュメントを書いたり、スクリプト内に大量のデータを埋め込んだりするときに使うね。
0363nobodyさん
02/07/30 11:11ID:???書かなければいけないということは無い。
0364nobodyさん
02/07/30 19:07ID:0gW7G4YTcgi-binはしーじーあいびんじゃなくて
しーじーあいばいんだと聞いたのですが本当ですか?
なんか、ばいなりの”ばい”らしいのですが。
おねがいします
0365nobodyさん
02/07/30 19:58ID:???0366ごめんなさい1
02/07/30 22:43ID:aKXjz8b/内容的にWEB制作版なんですがちょっとこっちのが安心なんで質問させてください。
お世話になっています。
ちょっとはまり気味なのでお知恵をいただきたく思ってます。
早速ですが。
イメージ的には以下のような感じです。
チェックボックスを選択していない場合エラーを返します。
<script language="Javascript">
<!--
function chkNull() {
var cnt = 0;
for(i=0; i <= document.forms[0].stock.length-1;i++){
if (document.forms[0].stock[i].checked == true){
cnt=cnt+1 ;
}
}
if (cnt < 1){
alert('少なくとも1つは選択してください');
return false;
}
return true;
}
//-->
</script>。
0367ごめんなさい2
02/07/30 22:46ID:aKXjz8b///このフォームは動的な部分。SQLのレコード数で0回以上ループしている。
<input type ="checkbox"
name="stock" value="#SQL.RESULT#">hoge
</form>
これで動かすとレコードが2つ以上の場合は、予定通り動くのですが、レコードが1つの場合、チェックボックスをONにしているにもかかわらず、チェックに引っかかってしまいます。
しらべてみると、レコードが1つの場合
document.forms[0].stock.length
がイメージでは1になるはずが配列として評価されていないみたいです。UNDEFINEDを返しています。
じゃ場スクリプトの勉強が足りないためちょっと嵌まっています。
ほかの方法も含めアドバイスがあればおねがいします
0368nobodyさん
02/07/30 22:56ID:???0369ごめんなさい2
02/07/30 23:12ID:aKXjz8b/0370nobodyさん
02/07/30 23:32ID:TwJHY/7Zか1000まで行ってHTML化されて過去ログとなります。
つまり、ある段階まではそのリンクをクリックして普通にスレッドが表示されま
す。
次の段階では、「HTML化を待つしかない!」という表示になります。
最終段階では「隊長!過去ログ倉庫で発見しました!」という表示になって、
そこのリンクをクリックすると出てきます。
この最終段階まで行ったときに、訪問者にいちいち画面の下のほうにあるリンク
を探させてクリックさせるのがイヤなので、HTML化が済んだスレッドは自動的に
リンクを過去ログ倉庫の方に変更したいのです。
どうすればいいですか。
ちなみに現状は、1週間ごとに手動でリンクをクリックしてHTML化されていれば
手動でリンクを変更しています。
HTML化されているスレッドであれば、「隊長!過去ログ倉庫で○○を発見しまし
た!」という文字列があるので、その文字列があるかどうかを検索し、もしあれ
ばそのURLをコピーして自動的にリンクをアップデートする、というロジックで
いいのでしょうか。
誰かがスレに「隊長!過去ログ倉庫で○○を発見しました!」って書いたらどう
すればいいでしょうか。
0371nobodyさん
02/07/31 00:48ID:???殆ど理解出来ないけど
「隊長!過去ログ倉庫で発見しました!」
とスレッド内の書き込みは違うセッションでしょ?
/隊長!過去ログ倉庫で発見しました!/ (HTML確認)
↓
Location または meta (クリック)
↓
スレッド内に
隊長!過去ログ倉庫で発見しました! (要求達成)
0372初心者ですいません。
02/07/31 21:50ID:???初心者で説明下手ですが申し訳ありません。
KENTの「SUN BOARD」を設置しようとしたのですが、どうしてもうまく表示できません。
http://www.kent-web.com/bbs/sunbbs.html
もしかして「$htm_dir」を「/public_html」にしたのが間違いなのかと思ったりしたのですが、正直わかりません。
説明書き通りにダウンロードしてプログラムの修正もして「lockフォルダ」も作ったのですがうまく表示されません。
大変困っている状態が1週間も続いておりますが、どなたか迷惑でなければ親切に詳細に教えていただけないでしょうか。
本当によろしくお願いいたします。
チェックモードの表示
./sunbbs.log のパス:OK
./sunbbs.log のパーミッション:OK
./public_htmlindex.html のパス:NG
./public_htmlindex.html のパーミッション:NG
./public_htmlindex2.html のパス:NG
./public_htmlindex2.html のパーミッション:NG
ロック形式:symlink
ロックディレクトリ:./lock
ロックディレクトリのパス:OK
ロックディレクトリのパーミッション:OK
過去ログ:設定あり
NOファイルパス:OK
NOファイルパーミッション:OK
過去ログディレクトリのパス:NG → ./past/
0373nobodyさん
02/07/31 21:55ID:???0374nobodyさん
02/07/31 22:01ID:???http://www.kent-web.com/support/ 逝け。
0375372・初心者ですいません。
02/07/31 22:18ID:???0376教えてください。
02/07/31 22:19ID:tRDjSXEOCGI設置してみてパスもPerlもパーミッションもあってるのですが
なぜかエラーがでてしまいます・・・
なにか他に原因はあるのですか?
0378nobodyさん
02/07/31 22:42ID:???転送モードは?
CGIの使える鯖?
SSIは使っている?使える鯖?
sendmailは使っている?使える鯖?
外部参照禁止鯖とか?
サーバの設定でhtml、CSS、画像がCGIだけ別鯖になっていない?
何処のスクリプト?
あなたが組んだの?
ローカルでは動いた?
つーか、ソース晒せコラァ!
0379教えてください。
02/08/01 00:10ID:Xu6VR8fOパスはあってるはずなんですが・・・
転送モードはアスキーモードです。
CGIは使えるはず!
SSIは・・・わかりません。
そのあとは・・・まったくわかりません・・・
すみません初心者な者で・・・
いろいろなところのでためしてみました。
KENT.WEBとかエイプボードとかタッキーさんのところのとかやってみました。
ソース?どうしたらいいのですか??
0380nobodyさん
02/08/01 00:10ID:???>もしかして「$htm_dir」を「/public_html」にしたのが間違いなのかと思ったりした
普通はありえないパスだろ、まぁサーバ調べないと断定はできないが・・・
0381nobodyさん?
02/08/01 00:29ID:???勉学が足りませんな。
ソースといえば、そのCGIの配布元等へのリンクでいいのです。
後は、貴方の使ってるサーバー環境を書いておくと。
0382教えてください。
02/08/01 00:35ID:Xu6VR8fOごめんなさい。
サーバー環境とかよくわからないのですが・・・
リンクとは??
ほんとにごめんなさい〜。
0383nobodyさん
02/08/01 00:40ID:???そこまで知識がないなら、自分で設置しない方がいいと思う。
トラブル起こして他利用者に迷惑かけるかもしれないし。
BBS程度なら、レンタルで探した方がいいぞ。
それで、レンタルしてる間にもっと初歩から勉強しろ。
0384教えてください。
02/08/01 00:45ID:Xu6VR8fOお勉強しておきます。
0385nobodyさん
02/08/01 13:59ID:qdgiH1MDパブリックはルートになるだろうから、cgiに指定するような場合は、書いちゃだめだろ。
あと、パーミションでNGってでてるのに、いいの?
0387nobodyさん
02/08/01 16:58ID:oYTgtzZ00388nobodyさん
02/08/01 17:08ID:???0389nobodyさん
02/08/01 19:45ID:???配布サイトからDLしたCGIを
自鯖にウプして日記をつけてるのですが、
解析に引っかからないかとヒヤヒヤしています。
掲示板も…。
ロボットよけタグを埋めこみたいのですが、
できるものなのでしょうか?
ここのサイトのを使ってます。
ttp://www.t-okada.com/cgi/
0390nobodyさん
02/08/01 19:59ID:???ttp://pc.2ch.net/test/read.cgi/php/1028193595/
【 スクリプト改造工房 PART 5 】
0392nobodyさん
02/08/03 23:31ID:8gDBPjZ01つの form タグのなかに 2つの submit ボタンを作って
cgi の中でどっちのボタンが押されたのか判断するには
どうしたらよい?
0393nobodyさん
02/08/03 23:34ID:???ダメなん
0394nobodyさん
02/08/04 00:03ID:??????
<input type="submit" name="button1" value="ボタン1">
<input type="submit" name="button2" value="ボタン2">
として、
if( $form{ button1 } eq 'ボタン1' ) { ... }
ってこと?
0396nobodyさん
02/08/04 00:52ID:???0398396
02/08/04 01:08ID:???fscanfと同様の動作をする関数ってCGIだとなんていうの?って意味だったんだけど。
CGIでもfscanf(FILE *stream, const char *format, ...)とかって使うのかな?
0400nobodyさん
02/08/04 01:18ID:???Perl に scanf があるかってことか?
0402nobodyさん
02/08/04 06:57ID:RYk8zHFq突然恐れ入ります。
134でリンクされている URLの意味がわかる方いらっしゃいます?
0403nobodyさん
02/08/04 07:43ID:???もう遅いかな。
Perl本のPOSIXモジュールの項より抜粋。
scanf - C固有のものである。代わりに<>と正規表現を使うこと。
だそうだ。
0404403
02/08/04 07:45ID:???0406nobodyさん
02/08/04 12:30ID:cDdwUQe9みんな CGI のメッセージは Shift_JIS で書いてるの?
0408nobodyさん
02/08/04 12:41ID:???0409nobodyさん
02/08/04 12:57ID:???2ch の CGI プログラムの表示って Shift_JIS でしょ。
CGI を EUC-JP で書くとプログラム内に埋め込まれた
メッセージも EUC-JP になるわけで、そうすると受け
取ったデータの表示とかも EUC-JP で扱わなきゃだめなん?
0411410
02/08/04 13:02ID:???0412409
02/08/04 13:13ID:???Perl だけど。
EUC-JP だと AA とかチルダとかエンマークとかどうなっち
ゃうのかなって思ったけど問題ないみたいだからいいや。
CGI プログラムも EUC-JP で、フォームから受け取った
データも jcode.pl の convert で euc に直して扱えば
いいですよね。
0414nobodyさん
02/08/04 14:11ID:???>>394 だけど、よく分からない。
<input type="submit" name="button" value="ボタン1">
<input type="submit" name="button" value="ボタン2">
if( $form{ button } eq 'ボタン1' ) { ... }
ってこと?
0415nobodyさん
02/08/04 14:54ID:???バカ?
0418nobodyさん
02/08/04 16:04ID:???http://web.archive.org/web/20010123233000/http://www2.plala.or.jp/Nieztche/mammy/
0419414
02/08/04 16:17ID:???394 で聞いて、414 で試してうまくいかないから
きいてんだけど。$form{ button } が空だよ。
0421nobodyさん
02/08/04 16:29ID:???>420 ハァ?
0422nobodyさん
02/08/04 16:34ID:???0423414
02/08/04 16:38ID:???value に日本語使うのやめたらでけた。サンクス。
あと、417 は僕じゃないですよ。
0424nobodyさん
02/08/04 17:18ID:???0425nobodyさん
02/08/04 17:41ID:???0426nobodyさん
02/08/04 17:47ID:???nameには使わないけどね。
0427nobodyさん
02/08/04 18:01ID:J46SL+QD0429nobodyさん
02/08/04 20:57ID:???フォームの内容を確認してから実際に登録するような
CGI では、
1.フォームに入力
↓
2.確認ボタンを押す
↓
3.HTML で入力データが表示される
↓
4.確認して登録ボタンを押す
↓
5.実際に登録
というような手順を踏むと思うのですが、
4.で登録ボタンを押して送信される入力データは
どこに確保あるのでしょうか?
0430nobodyさん
02/08/04 21:04ID:???0431nobodyさん
02/08/04 21:07ID:???0432nobodyさん
02/08/04 21:39ID:???レスありがとうございます。
やっぱり hidden ですか。hidden はデータが大きかったり
複数行にわたるデータの場合に html に埋め込むのはあまり
エレガントではない気がするんですが。
セッションは使ったこと無いのでよく分からんです。
0433nobodyさん
02/08/05 14:30ID:???さっきまでは大丈夫でした。
ローカルではエラーが出てないです。
サーバーのログを見るとテキストファイルがビジーです。と出ます。なにこれ?
サーバを見てみないとなんとも言えないなぁ。
ホスト名とアカウントは?
■ このスレッドは過去ログ倉庫に格納されています