【 スクリプト改造工房 PART 6 】

このエントリーをはてなブックマークに追加
952731 ◆aiY4htt2.2 :03/09/14 12:10 ID:???
>>951
改造するより1から作り直した方がよさげ。
953nobodyさん:03/09/14 13:16 ID:???
>>947
CGI名でググってみたけど元が積み上げ式のBBSだな。
しくみはよくみてないけど、
レスタイトルや投稿者名、投稿日時とかをログから切り出して
それにリンク貼って一覧を作んなきゃなんないし、
レス単独表示の機能がなければレスを表示する処理も作んなきゃなんない。

そのCGIに思い入れがあるのかもしれんが素直に別のトピック式?を
探した方が幸せになれるんでないかい?
954947:03/09/14 13:58 ID:???
>>952 >>953
ありがとうございます。
やっぱり素直に別のを使った方が良いですか。

残念だけどそうします。
955nobodyさん:03/09/14 14:56 ID:1Xlg9LW5
ttp://minicgi.net/cgi2/vote.html
ここにある、何でもアンケートというふCGIを改造したいと考えております。

使い方はこのCGIをTOPのindec.shtmlにSSIで組み込むことを想定してます。
組み込むところまではうまくいったものの、投票をしてリロードさせると
CGIの結果のみが表示されてしまいます。投票後、自動的にindex.shtmlに
戻るためにはどこをどのように改造したらよいのでしょうか。

ここのサポート掲示板に聞いたところ、ほかのCGIの「location」という
項目を参照せよと教えていただいたのですが、ネット厨房のため皆目見当が
つきません。
ちなみに、以下のページに試験的においてありますので、動作を
見てください。よろしくお願いします。
ttp://redalart.hp.infoseek.co.jp/cgi-bin/anketo/index.shtml
956nobodyさん:03/09/14 15:20 ID:???
>>955
要は、Content-Type: text/html\n\n のかわりに
Location: http://............../index.shtml\n\n
を出力すればOK
submitなのかそうでないかの判別は当然必要
957nobodyさん:03/09/14 17:19 ID:1Xlg9LW5
>>956
サンクスでつ。
これは
Content-Type: text/html\n\n
というところを、
Location: http://............../index.shtml\n\n
にすべて置き換えればよいのでしょうか。
それでsubmitの判別とはどういうことですか。

トホホ
958nobodyさん:03/09/14 17:33 ID:???
<!--#exec cgi= から呼ばれたのか、投票ボタンを押して呼ばれたのか
区別するってこと。すべてのケースで差し替えたら本体が表示されないでしょ

type="submit" の部分に nameを追加してそのnameがパラメタに含まれていたら
submitと判断すればいいのではないかな
959nobodyさん:03/09/14 17:39 ID:???
よくわからなかったら、vote.cgiをコピーしてvote2.cgiを作り
index.shtmlからはvote2.cgiを呼び出し、
vote.cgi の Content-type ・・・ を Location: に差し替え
(Locationをprint したらexit;で抜ける)れば動作すると思う
960nobody ◆2chGAUCATE :03/09/14 19:23 ID:???
結構初心者ですけど、
入力した文字を送信して
その文字を表示させるのってどうやってやるの?
入力欄は名前やE-mailを入力する欄と同じに
961nobodyさん:03/09/14 19:35 ID:???
(゚Д゚)What's!?
962nobodyさん:03/09/14 19:41 ID:???
value="<?=$foo?>" とかの話しかね?
963nobodyさん:03/09/14 19:53 ID:???
つか、スレ違い?
964nobodyさん:03/09/14 19:56 ID:???
つか、マルチ。
965955:03/09/15 00:02 ID:iLw2WSof
>>958
意味はわかるのですが、具体的にどういう構文を組めばよいのでしょうか。
↓おそらく該当部分でつ。

#
# [ヘッダ表示]
#
sub hed_ {
print "Location: http://redalart.hp.infoseek.co.jp/cgi-bin/anketo/index.shtml\n\n ";
print <<"_HTML_";
<html><head>

として、さらに、以下のsubmit部分にname=を付け加えるとのことですが、

}
print"<tr><td colspan=2 align=center><input type=\"submit\" value=\" 送信 \"></td></tr>\n";
print "</table></form>\n";
&foot_;
}

この部分はどうなりますか?
教えてクンでスンマソン・・・。
966955:03/09/15 01:06 ID:iLw2WSof
スンマソン・・・いろいろ試してみましたがだめなようです。
当方ではお手上げです。

CGI呼び出し投票>ログへ書き込み>結果表示
        ↑        ↑
        │   ここでSHTMLへ飛ぶように指示

 SSIから呼ばれたかsubmitから呼ばれたか判断

という構造なのでしょうか?具体的な改造方法を教えてくだちい・・。

>>958
>type="submit" の部分に nameを追加してそのnameがパラメタに含まれていたら
>submitと判断すればいいのではないかな
これはどういう構文を組めばよいのでしょうか。
967nobodyさん:03/09/15 01:10 ID:???
<input type=submit value='投票'>を
<input type=submit value='投票' name=submit>とでもして、

sub hed_ 内の
print "Content-type〜";の行の前に
if (exists $FORM{'submit'}) {
 print "Location: http://redalart.hp.infoseek.co.jp/cgi-bin/anketo/index.shtml\n\n ";
 exit;
}

でいかがか。
つーかソースきちゃなくて読む気失せるわこれ・・・
968955:03/09/15 01:11 ID:???
ずれました。鬱

969955:03/09/15 01:14 ID:???
>>967
お返事
('・ω・')キターーーーーーーーーーーーーーーーーーーーー
早速やってみまつ!
970nobodyさん:03/09/15 01:14 ID:???
>>965
>>959のやりかたが簡単でよい(action=をいくつか書き換えるが)んだが・・・

あえてかえるなら、
<input type=\"submit\" name=\"vote\" value=・・・
とかやって、$FORM{"vote"} に値が入ってたらLocation、入ってなかったら Content-type
と切り替える。
971nobodyさん:03/09/15 01:15 ID:???
あ、サンクス>>967
972nobodyさん:03/09/15 02:23 ID:???
c-boardっていう高機能掲示板に添付したファイルのダウンロード回数を表示してくれるように改造して頂けませんか?

スクリプトはhttp://www.skullysoft.com/soft/ssc-board/index.shtmlにあります

よろしくお願いします。
973955:03/09/15 02:36 ID:???
さっそくやってみました。しかし、
#
# [ヘッダ表示]
#
sub hed_ {

if (exists $FORM{'submit'}) {
 print "Location: http://redalart.hp.infoseek.co.jp/cgi-bin/anketo/index.shtml\n\n ";
 exit;
}
print "Content-type: text/html; charset=Shift_JIS\n\n";
print <<"_HTML_";
<html><head>

としてみたところ、
a [an error occurred while processing this directive]
というエラーが表示されてしまいます。何度もすいません・・・。

974955:03/09/15 02:38 ID:???
>970
具体的にどうやりますか?教えてもらえますか。おながいします
975967:03/09/15 02:59 ID:???
>>973
行頭の全角スペースは消すなりタブに変換するなりしてくれ
あと\n\nのあとのスペースは消したほうがいいかもしれん
976955:03/09/15 03:12 ID:???
>>967
やったーーーーできたヨーーーー!!
みなさんありがとん〜〜〜〜!

夜分遅くまでお世話様でした。
977731 ◆aiY4htt2.2 :03/09/15 06:44 ID:???
>>972
如何ほどのご予算で?

と、返しておく。
tu-ka放置すればよいのか。
978nobodyさん:03/09/15 13:38 ID:???
あーくそ、過去スレ1.2見られないのか。
>>949で上げられてるタイプの掲示板(stlfbbs?)の事を調べたかったのに。
979955:03/09/15 15:19 ID:???
昨日はサンクスでした。
さっそくサイトに仕込んでみましたが、

【フォルダA】
   └index.shtml
【CGI-BIN】
   ├vote.cgi
   └index.shtml

CGI-BINフォルダのindex.shtmlよりCGIを呼び出すと正常に
フォルダAのindex.shtmlへ飛ぶのですが、
フォルダAのindex.shtmlよりvote.cgiを飛び出すと
403 Forbidden
以下のような理由が考えられます。
iswebサイト以外からのCGI呼び出しは禁止されています。
ファイル、ディレクトリのパーミッションが不適切です。
CGIはcgi-binディレクトリに設置してください。
参照しようとしたユーザーディレクトリにはindex.htmlが存在しません。
といわれてしまいますが、どれも確認しましたが作動しません。

解決のヒントを。
980nobodyさん:03/09/15 22:15 ID:???
>>979
そのエラーメッセージの中に答えは無いのかよ
少しは自分で考えるか、自分でどうやって呼び出してるか書けよ
981nobodyさん:03/09/15 22:17 ID:???
1
982955:03/09/15 22:20 ID:???
>>980

状況は
>>955
>>957
>>965
>>966
>>973
>>979
です。
解決のヒントをおながいします。
983nobodyさん:03/09/15 22:42 ID:???
スレッドフロートタイプの掲示板を使っているのですが、現状だと
スレッド単体を表示する時に、アドレス欄が
ttp://hoge.com/bbs/read.cgi?a=1234567890&b=l50&
という具合になっています。こいつを
ttp://hoge.com/bbs/read.cgi/(スレッドの番号)/表示範囲
と改造しているところなのですが、自力では
ttp://hoge.com/bbs/read.cgi?/(スレッドの番号)/表示範囲
までしか出来ませんでした。あとはread.cgiの直後の?を消したいんですが、
どの辺弄ればよいのでしょうか。
984nobodyさん:03/09/15 23:09 ID:???
>>983
"環境変数" "PATH_INFO"でググれ
985nobodyさん:03/09/16 07:55 ID:???
>>982
そのエラーメッセージの中に答えは無いのか
少しは自分で考えるか、自分でどうやって呼び出してるか書いて
986nobodyさん:03/09/16 10:58 ID:???
>>982
本物の馬鹿だろ、おまえ。
おまえの状況なんかどうでもいいんだ。
おまえはエラーメッセージを理解できない自分を問題にした方がいい。
「解決のヒントをおながいします」なんて言っても、
エラーメッセージの中にすでに十分なヒントは出ている。
だからみんな何も言わないんだ。
これだけ明白なヒントが出ているのにそれに気づかない程度なら、
むしろ、あきらめた方がこれからのおまえのため。いや、マジで。
987nobodyさん:03/09/16 13:10 ID:???
at works のアクセス解析「access cgi ver.2.81」を使ってるんですが、
ログファイルの日本語表示部分(曜日)だけが文字化けしてしまいます。
FTPソフトでログファイルをダウンロードしてみると
漢字コードがCIS-JISになっていて、SHIFT-JISに変換してアップすると正常に表示されますが、
新たにアクセスがあった分はまた文字化けしてしまいます。
(やはりログがCIS-JISになってしまう)
同じものを別のサーバーでは問題なく使えていて、
ログファイルをダウンロードするとSHIFT-JISになっています。
一体どうやったら文字化けしなくなるんでしょうか?
988nobodyさん:03/09/16 14:06 ID:???
*スクリプト
print "<SCRIPT language=\"JavaScript\">\n";
print "<!--\n";
print "function OpenWin(){\n";
print " win=window.open(\"wwwlng.cgi?print+$file\",\"new\",\"width=100,height=100\");\n";
print "}\n";
print "// -->\n";
print "</SCRIPT>\n";

*エラーメッセージ
Name "main::file" used only once: possible typo at tmp.pl line 1. tmp.pl syntax OK
(一度だけ使用される名前「main::file」:tmp.pl 4行に可能な誤植。tmp.plシンタックスOK)

新しいウィンドウを開くJavascriptを入れて文法チェックしたのですが
上記のエラーメッセージが出て上手く行きません。
4行目を削ったり足したりしてチェックしてみたところ、「$file」がエラーの原因になってるようなんですが
ここからどうやって修正したら良いか解らないんです。

target="_blank"なら上手く行きますが、サイズ指定や各種バーの設定も兼ねていまして。
他のウィンドウを開くJavascriptも試してみましたがやはり$fileが・・・。

対策方法をお願いします。
989nobodyさん:03/09/16 14:11 ID:???
$file を \$file にしたらどうよ?
そもそも $file ってどっから出てきたんだ・・・
990988:03/09/16 14:15 ID:???
>>989
ありがとうございます。
\を加えたところ、文法ミスが無くなりました。
良かった。

↑のスクリプト、とほほさんの所で配布してる物です。
991nobodyさん:03/09/16 14:21 ID:???
お前、こんなところでもやってんのか>>982

>>985-986
こいつは他の初心者系スレでも暴れてた厨房ですんで、
無視してやってください。そのうちいなくなりますから。
992nobodyさん:03/09/16 14:57 ID:???
>>990
""の中の変数($file)は評価されるからね
しかし、自分で書いといてなんだが、
これをエスケープしても本質的な解決にならんと思うぞ
993988:03/09/16 15:12 ID:???
>>992
はい、なりませんでした。
サーバーに上げてチェックしてみると、開いたウィンドウにラウンジエラー(ファイルが不正)。
やけになって全部$fileを\$fileにすると当然サーバエラー。
文法チェックに引っかかった\$fileを修正してもラウンジエラー。
今まではこの方法で通ってたのになぁ・・・。


ttp://tohoho.wakusei.ne.jp/cgi/wwwlng.cgi
の掲示板のタイトルをクリックすると新しいウィンドウを開くようにしたいんですが、
ちょっと別の方法を考えてみようと思います。
994nobodyさん:03/09/16 15:35 ID:???
>>993
この場合、OpenWin() に引数を設け、
呼び出し側の"・・OpenWin()・・" を "・・OpenWin($file)・・"とすればいいのでは

995731 ◆aiY4htt2.2 :03/09/16 16:46 ID:???
>>988
line: 946-947
print "<TD><A HREF=\"wwwlng.cgi?print+$file\" TITLE=\"$file\">";
print "$subject</A>($count件)</TD>\n";
を、
print qq{<TD><input type="button" value="新しいウィンドウで開く"};
print qq{ onclick="win=window.open(\"wwwlng.cgi?print+$file\",\"new\",\"width=100,height=100\");">$subject($count件)</TD>\n};
ってことかしらん?
よーわからん。

♪長すぎる行があります。って bbs.cgi に怒られた。。。
996988:03/09/16 17:03 ID:???
出来た!

>>994-995
ありがとうございます。
>>994の言うように、呼び出し側に$fileを入れたら上手く行きました。
ちゃんと動くようになるまで少々手間取りましたけど。

やった・・・!
997983:03/09/17 01:04 ID:???
>>984

解決しました。お世話になりました。
998 ◆cmTUKARERU :03/09/17 07:07 ID:???
おはよう?
999 ◆cmTUKARERU :03/09/17 07:07 ID:???
1000 ◆cmTUKARERU :03/09/17 07:08 ID:???
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。