☆ショッピングカートのCGIを作りたい!Perlで☆ (517レス)
上下前次1-新
161(1): 名無しさん@お腹いっぱい。 02/01/18 02:25 ID:pneLb9V7(1) AAS
うちもPHPで格闘中。
>>106
ホントに夜のrootがウヨウヨしてるとしたら、よっぽどヤバイ鯖?
でも、まぁ共有鯖は危険なことは同意。せめて、置き場所と権限はキッチリしないとね。
>>1
初プログラムがカートはやめたほうがいい。せめて小さいものを10コぐらい作ってからにしたほうが、時間の効率的利用になると思われる。
イマはまだマシ。部分ごとにカンペキにしていっても、全体動作がうまくいくとは限らない。大きなプログラムは虫取りが大変だぞ。
162: sage 02/01/18 10:51 ID:??? AAS
いまおれもPHPの開発だ!最初はとっつきにくかったがなれればOK!
おとなげなくおこってしまったが、
>>161
にかかれているように、段階を踏んでPGを勉強していったほうがよいとおもわれる
PGって積み重ねていくものだからね!>>1
>>156
おれも同意する!おれはVB嫌いだが・・・そっちのほうがはやいかもよ!
163: 名無しさん@お腹いっぱい。 02/01/18 18:51 ID:??? AAS
. ∧ ∧
( ´ ・∀・`) へー
164: 名無しさん@お腹いっぱい。 02/01/18 21:31 ID:??? AAS
Perlによるセッション管理の難しさ、俺も痛いほどわかるぜ・・・。
ちょっとgoogleで旅してくるかな
165(2): 無謀者 02/01/18 21:44 ID:??? AAS
いろいろレスありがとうございます。
>自作にこだわる理由て何?。
う〜ん・・・前前からCGIを作れるようになりたいと思ってたんですが
掲示板とかカウンターとかは自分のHP作る際もフリーので満足できちゃって
きっかけが無かったんです。で、今回のがきっかけになっただけで・・・
どちらにしろ、いろいろ寄り道しながらperlを勉強していきたいと思ってますので、
お暇な方は今後とも激励、お叱り、罵倒などいただければ幸いです。
さて、セッション管理の件ですが、とりあえず「Cokieを使う」という検討を付けたのですが、
セッションID発行する際って一般的にはどうしてるんでしょう?調べてみると
Perl自体にはユニークなIDを発行する関数が無いみたいなので、環境変数を利用
省5
166: 名無しさん@お腹いっぱい。 02/01/19 00:41 ID:??? AAS
つうか 1には無理
まずは 1は掲示版CGIでもつくってなさいってことよ
単なる掲示版でも荒し対策とか色々細かいこと考えると結構大きなプログラムになるぞ
167: 名無しさん@お腹いっぱい。 02/01/19 00:45 ID:??? AAS
しかし、1ってプログラムの経験がないとか言う割には
そうでもなく感じられるようなことも書いてるね。
VBAは使えるの?
168: 無謀者 02/01/19 00:55 ID:??? AAS
>VBAは使えるの?
VBAを使える、というかアクセスのマニュアル本見ながらどうにかこうにか
簡単なものが作れる程度です。アクセスってその気になればMACROだけでも
かなり複雑なことやらせられるし・・・・
「よーし、パパプログラム作っちゃうぞ!!」って言いながら
エクセルのマクロ得意げに組み合わせてるおじさんとかわらんレベルです。
169(1): 名無しさん@お腹いっぱい。 02/01/19 01:53 ID:??? AAS
ここまで来て、疑問なんですが。
プログラムをしたこともない素人に頼む知り合いって
なかなか理解に苦しみます。
商売を舐めてるのでしょうか?w
170: 名無しさん@お腹いっぱい。 02/01/19 02:25 ID:??? AAS
ていうか、たかが2ちゃんの書き込みに、いちいち詮索入れるってのも
不思議で性がない。
ネタならネタで乗ってあげるか、放置できないのか?
171(1): 02/01/19 03:46 ID:Z1wHwPDO(1) AAS
>>165
>Perl自体にはユニークなIDを発行する関数が無いみたいなので、環境変数を利用
>して生成するようなのですが・・・取得できる環境変数の中でユニークな値って
>いうと、IPと時間でしょうか?
ユニークな値が欲しいなら、現在の時間と、プロセスIDを組み合わせる
のが定石かな。プロセスIDは、$$と書けば得られる。
実行中のプログラムに割り当てられるIDで、同時に同じ値が割り当て
られることはない。知ってるかもしれんが。
時間はtimeとかなんとか書けば、エポック秒が得られるだろ。
マイクロ秒まで出す方法があったはずだけど、忘れた。
省1
172(2): agege 02/01/19 04:12 ID:Z/A0FYpK(1) AAS
> 171
> マイクロ秒まで出す方法があったはずだけど、忘れた。
実は知らないんじゃないの?
173: 名無しさん@お腹いっぱい。 [age] 02/01/19 04:18 ID:??? AAS
>172
いや、実は知らなくってもちっともかまわない(笑)
174: 名無しさん@お腹いっぱい。 02/01/19 08:37 ID:??? AAS
>>165
apacheが生成してくれるの使えば?
最初に見たときは糞スレだと思ったけど、>>1の根気とチャレンジ精神で
良スレになりつつある予感。PGには必須の資質なので頑張ってくれ。
175: 171 02/01/19 09:24 ID:Mv1Es+po(1) AAS
>>172
モジュール入れないとダメだった。他の方法は知らん。
use Time::HiRes;
$time = Time::HiRes::time;
176(1): 無謀者 02/01/19 16:47 ID:??? AAS
どんな内容でもレスがつくのがありがたい限りです。
>>169
単にHPの作成頼まれただけです。一応既存のカートでOK貰って
ページ自体は完成してます。プログラム作ろうと思ったのは単にきっかけ
になったに過ぎません。極端に言えば作る必要性は無いんです。
で・・・
$id=$$+time()でユニークID作って、cookie渡して
split(/\=/,$ENV{'HTTP_COOKIE'})で埋め込まれたID参照して
これが無ければcookieを渡す、もし有るようなら{取り出したID}.dat
ていうファイルを作ってその後の処理をさせようと思ってるんですが、
省1
177: 名無しさん@お腹いっぱい。 02/01/19 17:04 ID:??? AAS
process ID + time で unique だと思ってると mod_perl ではまるよ。
178: 名無しさん@お腹いっぱい。 02/01/19 18:47 ID:??? AAS
>>176
OK,OK
179: 名無しさん@お腹いっぱい。 02/01/20 13:24 ID:??? AAS
失速気味age
ここまでよくがんばった!
180(1): 無謀者 02/01/20 20:25 ID:COvSUhiy(1) AAS
クッキー・・・
if ($ENV{'HTTP_COOKIE'} eq ""){
&set_cookie
}
print "content-type: text/html\n\n";
print $ENV{'HTTP_COOKIE'};
ってやると、もともとクッキーがあるときは$ENVを表示するんですが、
持ってないときは&set_cookieでクッキーをセットしてるはずなのに
表示してくれません。リロードすれば表示するんですが・・・
ちなみにサブルーチンはこんな感じです(変数省略)
省6
181(2): 名無しさん@お腹いっぱい。 02/01/20 20:45 ID:??? AAS
set-cookieした次のアクセスからクッキーが使える。
182: 名無しさん@お腹いっぱい。 02/01/20 21:05 ID:??? AAS
う〜ん、本当にがんばってるね。
陰ながら応援の機会を伺うとしよう。
183(1): 仕様書無しさん 02/01/20 21:26 ID:??? AAS
>>180
>>181にも書いてるけど、1セッションで一発読み書きは出来ない
そこにくる前(Top辺りで)、コッソリとダミーのCookieを仕込んでおいて
そいつを読んでクライアントのONOFFを確認するっつのが常套手段
184: 無謀者 02/01/20 22:14 ID:??? AAS
>>181,183さん
なるほどですね。>>183さんの方法は考えたんですが、Cookieに
埋め込むIDでその後の処理を管理する予定なので、どうしようかと・・・・
185(1): 無謀者 02/01/20 22:24 ID:??? AAS
で"$cookieのID.dat”を定義するのに
以下のような方法で解決できたっぽいんですが・・・
$ctime=time();
$cid=$$+$ctime;#クッキー用ID
if ($ENV{'HTTP_COOKIE'} eq ""){
&set_cookie
$cart="$cid"."\.dat";
}
else{
@id=split (/\=/,$ENV{'HTTP_COOKIE'});
省2
186(1): 名無しさん@お腹いっぱい。 02/01/20 23:13 ID:??? AAS
クッキー食わない奴がいるから、最初にチェックしたほうが良いと思われ。
操作した後に駄目でしたはイラツキの原因。
後、クッキーはセッションクッキーで充分だろう。
187(1): 無謀者 02/01/21 03:36 ID:??? AAS
とりあえずクッキーに関しては>>185の方法で一応動作してるようなので
その方法で進めてみます。>>186さんの進言に関しては後々方法考えてみます
で、普通のクッキーとセッションクッキーの違いって?
さて、またひとつ問題が発生してるのでどなたかよろしければご教示ください。
データの削除に関してですが、現在.datの中身が
$id\t$hoge\t$mona\t$giko\n
$id\t$hoge\t$mona\t$giko\n
$id\t$hoge\t$mona\t$giko\n
・
・
省16
188(2): 名無しさん@お腹いっぱい。 02/01/21 06:32 ID:yXZYknLA(1) AAS
>187
$i = 0;
foreach (@line) {
($id,$hoge,$mona,$giko) = split(/\,/,$_);
if (削除キー eq $id) { splice(@line,$i,1); last; }
$i++;
}
削除キーには、削除ボタン押したときに飛ばされる値を指定する。
189(2): 名無しさん@お腹いっぱい。 [ ] 02/01/21 12:21 ID:??? AAS
やっぱりこうやって見てるとDB使った方が楽だよね(わら
190(2): 名無しさん@お腹いっぱい。 02/01/21 12:30 ID:TFQKF+6T(1) AAS
>189
禿同。
セッションIDだけhiddenで渡しておいて、あとは全部DB任せ。
この方が絶対楽だね。ソートするにせよ、合計金額を出すにせよ
全部DB任せ。こんなに楽な方法ばかり普段使っていると
>1が凄いことをしているように見えてくる・・・
191: 189 [ ] 02/01/21 12:42 ID:??? AAS
>>190
だよね(わら
久しぶりにファイル操作スクリプトみたんで懐かしいよ。
>>1さん
エラー処理はきちんとしましょうね。
クッキー渡すときも、ファイルを開くときもね。
あとデータ受け取ったときもサイズとか中身のチェックいれとかないと
だめだかんね〜♪
全ての人間がフォームに従って入力してくれるとは限りませんから。
192(2): 無謀者 02/01/21 12:54 ID:??? AAS
>>188
ありがとうございます。試してみます。ってやってみたけどいまいち
うまくいかん・・スクリプトの意味もう一回良く見ながら考えてみます。
>>189-190
DBでMySQLとかでしょうか?
私が借りてる鯖(共用)は使えるようになってるみたいなんですが、
一般的にはどうなんでしょ?置く鯖が決まってればそれにあわせた
仕様で書けば良いんでしょうが、出来るだけ汎用性のあるものを
書きたいので・・・・もしDBが鯖依存でなくてPerlが使えれば
必ず使える、とかUNIX系の鯖ならほぼ大丈夫ってものなら
省1
193: 無謀者 02/01/21 13:00 ID:??? AAS
↑
×DBでMySQLとかでしょうか?
○DBってMySQLとかでしょうか?
194: 名無しさん@お腹いっぱい。 [age] 02/01/21 13:02 ID:??? AAS
>192
いいところ突きまくり・・・
195: 190 [0] 02/01/21 13:14 ID:??? AAS
>192
最近は安い共用鯖でもMySQLとかPostgreSQLを使えるところが
増えてきているから、汎用的だって判断しても良いんじゃない?
漏れはDB使えない(使わない)って仕事を受ける時は、それだけで
料金5割増にしてる(w しかも最近はPHPとかJavaを使うことが
多いんで、「Perlで書いてね」なんて言われたら、さらに5割増(w
最低限DBが使える鯖に移転することを強く薦めている。
フリーでばらまくならPerlでファイル操作で構成しておく方が
汎用的と言えるだろうが、作るのが面倒だよなぁ。
漏れの場合は、過去に使ったクラスを使いまわして自分の中で
省3
196(2): 無謀者 02/01/21 15:03 ID:??? AAS
えっと・・>>188を試しているんですが、これの意味って
$i = 0;#行数カウント用の初期設定
foreach (@line) {
($id,$hoge,$mona,$giko) = split(/\,/,$_);
if (削除キー eq $id) { splice(@line,$i,1); last; }#もし削除キー=$idだったら、@lineの$i個目(つまりファイルの$i行目)を空にする)
$i++;
}
って事で良いんですよね?
197: 名無しさん@お腹いっぱい。 02/01/21 15:35 ID:yxhIL91Y(1/2) AAS
>196
うん、その通り。
198: 名無しさん@お腹いっぱい。 02/01/21 15:35 ID:yxhIL91Y(2/2) AAS
>196
あ、ちがうよ。
空にするんじゃなくて、その行削除ね。
199(1): 無謀者 02/01/21 16:25 ID:??? AAS
いろいろ試してみて近いところまで来てると思うのですが・・・
open(DEL,"$cart");
@dl=<DEL>;
close(DEL);
$i=0;
foreach $line(@dl){
@cell = split(/\t/, $line);
if ($cell[0] eq "$del") {
$line="";
}
省11
200: 名無しさん@お腹いっぱい。 02/01/21 16:30 ID:??? AAS
>199
なんでそんな苦労をしているんだろう・・・・
201(1): ◆6KgJyjvE 02/01/21 16:49 ID:rYGhtF3P(1) AAS
open(IN,"$cart");
open(TMP,">${cart}.tmp");
while(<IN>){
my @cell = split/\t/;
if($cell[0] ne "$del"){
print TMP;
}
}
close IN;
close TMP;
省2
202(1): 名無しさん@お腹いっぱい。 02/01/21 17:18 ID:??? AAS
んじゃもっと短くして・・・
open(IN,"$cart");
open(TMP,">${cart}.tmp");
print TMP grep { ! /^$del\t/ } <IN>
close IN;
close TMP;
rename(${cart}.tmp,$cart);
grep使うのは別におすすめしないけど、
判定のためだけにsplitする必要はないかと。
というか、素直にApache::Session使えばいいのにと思ったり。
203(1): 無謀者 02/01/21 21:33 ID:??? AAS
>>201
最初、うまく行かなかったんですが、renameのところを変えたら
うまくいきました↓
open(IN,"$cart");
open(TMP,">$cart.tmp");
while(<IN>){
my @cell = split/\t/;
if($cell[0] ne "$del"){
print TMP;
}
省20
204: 02/01/22 00:28 ID:zQlW9qzl(1) AAS
もう解決ずみみたいだけど。
>で書き込もうと思ってるんですが、>>でやると元のリスト+
>(元のリストー削除した要素)が追加されちゃうし、
> でやるとなぜか、もとのリストが全て消えて、
> 削除すべき要素だけがファイルに書き込まれてしまいます。
>> で開くのは、追加書き込み。ファイルは安全。
> で開くと、ファイルサイズがゼロになる。ファイルのデータは失われる。
ファイルロックを併用で、ファイルから読んだあと同一ファイルに
書き戻したい場合は、読み+書き(+<)で開くのが一般的かな。
該当ファイルが存在しない場合は、ファイルを作ってはくれないが。
205(1): 名無しさん@お腹いっぱい。 02/01/22 01:23 ID:4ftMAJcg(1) AAS
>>203
クッキーの上書きだァ?
それ位調べろってんだよヴォケ!
206: 名無しさん@お腹いっぱい。 02/01/22 11:42 ID:??? AAS
>>205
数少ない自分が知ってるネタが出て来てよかったね ボクちゃん
早く病院に戻りなさい
207(1): 名無しさん@お腹いっぱい。 [ ] 02/01/22 16:17 ID:??? AAS
とりあえず今までのスクリプトどこかにUPしてみ
添削してくれるぞ、きっと
208(1): 無謀者 02/01/22 16:33 ID:??? AAS
>>207
今、個人情報の入力&その処理、の部分を書いてるので、それが終わったら
どっかにアップしてみます。垢とってこなきゃ・・・
もう、自分で処理内容を忘れないためのコメントが各所、各行に入りまくりの
ソースなんで恥ずかしいんですが、なにぶん2週間前までは「配列って何?」
っていう人間が書いているものなのでその辺はご容赦ください。
今日の夜くらいにアップできればと・・・
209(1): 名無しさん@お腹いっぱい。 02/01/22 16:40 ID:??? AAS
>>208
ソースパクって明後日ぐらいからシェアウェアとして
配布させてもらいます。w
プログラム名は、SuperCart2002です。
早めにうpして下さいね。
210(3): 名無しさん@お腹いっぱい。 02/01/22 16:50 ID:??? AAS
ココまで伸びてきていてなんだが‥‥
>>65
>えっと最終的にイメージにあるのは、来訪者(客)が各売場(ページ)で
>任意に商品をカートに入れていって、最終的に注文ボタンを押すと
>その内容が管理者(店主)と客注文明細のメールが行く、というものです。
以前作ったことがあるぞ、それ。個人商店向けで、ほとんど同じ仕様。
メール送信だけPerlでSendmail叩いて、あとJavaScript。
あ、商品ページは商品と単価はtextであげといてCGIから書かせたけどね。
#これなら途中で放棄してジャンプされてもカンケーなしだね。
省1
211(1): 無謀者 02/01/22 17:05 ID:??? AAS
>>209
つうか、ここの住人の方ならパクらないでも数時間で書き上げる内容じゃないかと・・・(w
>>210
javaScriptも触ったこと無いんで、スクリプトを書くという意味では、結局はどっちではじめても同じだったのかも
知れません。ただ、とっかかりが「既存のショッピングカートに商品ページ作成機能があればなぁ」
だったので、何も考えずにPerlでCGIを始めてしまいました。
しかし・・・普段HP作る時はDWとかばっかりだったんで、CGIの中のHTML書くのにタグが
わからず苦労してたりします(苦笑
212(1): 名無しさん@お腹いっぱい。 02/01/22 17:07 ID:??? AAS
クッキーは正常終了する場合消しとけよ、意味は自分で考えろ。
途中終了の場合は仕方ないがそれでも退室ボタンなどで消せるようにしとけ
213(1): 210 02/01/22 17:27 ID:??? AAS
>タグがわからず苦労してたりします
ドリウィで満足行くまでデザインして、パクれ。
214(2): 名無しさん@お腹いっぱい。 02/01/22 17:29 ID:??? AAS
商品ページ作成機能ってなに?
イメージが湧かない
215(2): 無謀者 02/01/22 20:25 ID:??? AAS
>>212
はい、最終的にマイナス時間で渡して消すつもりです。
>>213
いやそのつもりではいるんですが、現段階DW立ち上げてると重くて効率
悪いので、手で打ってます。ある程度目処がついたらデザイン面は見直そうと思います。
>>214
究極で言うと、楽天みたいにWEB上で全てのページが作れてしまう機能とでも言いましょうか・・・・
外部リンク:www.xrea.comに垢取ってアップしたけど動かん・・
ローカルはもちろん自分の借りてる鯖でも動いたんですが・・・・・
216: 214 02/01/23 01:12 ID:??? AAS
>>215
ああ、そういう機能ね。わかりました。
うちのは、エクセルからコピペして終わりだから
そんなこと考えたことなかったです。
217(1): 名無しさん@お腹いっぱい。 02/01/23 01:15 ID:Jv+hzd4q(1) AAS
>>211
初心者ですが、質問です。
JavaScript のカート、フリーのやつ
見たことあります。
フレームのindex.html の部分に、
プログラムが書いてありました。
あれって、フレームなしじゃ、
できないもんなんですか?
218: 210 02/01/23 03:21 ID:??? AAS
>>217
>フレームなし
JSの諸事情で、商品が複数ページに渡る場合、正直フレームにしないと
辛いな。
カート(このスレでの実装の場合、単なる送信フォームだが)と、
商品ページあわせて一枚なら、問題ないね。(ECサイトまで行かない
小さいショップのサイトの通販ページなんかで、この一枚タイプは
結構見かけるよ)
複数ページでフレーム避けたいなら、途中退場処理のコストを払っても
やはりカートをサーバーサイドに置いたほうが楽だと思われ。
省2
219: 名無しさん@お腹いっぱい。 [age] 02/01/24 10:19 ID:??? AAS
あげ。
220: 名無しさん@お腹いっぱい。 [ ] 02/01/24 11:10 ID:??? AAS
そろそろあきらめたかな?
221: 名無しさん@お腹いっぱい。 02/01/24 11:26 ID:??? AAS
そろそろあきられたかな?
222: 無謀者 02/01/24 13:34 ID:??? AAS
あきらめてないです。なんとか・・・
一応sendmailでメールを送信するところまでは漕ぎ着けました。
まだ、文字化けしたり、mailに必要な内容が反映されなかったり
とかありますが・・・・・それが解決したら次はページ作成用の
スクリプトに着手です。
223: sage 02/01/24 14:18 ID:??? AAS
いつのも間にかどんどんすすんでるね!
がんばれよ>>1
224(1): 名無しさん@お腹いっぱい。 02/01/24 14:25 ID:??? AAS
がんばれよ。
日本語は本文はベタにISO-2022-JPだが、
subjectのエンコードはけっこうめんどくさいんだ。
225: 名無しさん@お腹いっぱい。 02/01/24 21:22 ID:??? AAS
>>224
原理主義者で無ければ全部MIME::Base64しちまえば良いだろう。
これで困るMUAある?
226(1): 無謀者 02/01/24 22:06 ID:??? AAS
日本語コードって難しいですね・・・・
本とか読むと”EUCで書く”って書いてあり、フォームから取得したデータを
&jcode::convert(*form, 'euc');でデコード、でsendmailに送る時は
&jcode'convert(*name, 'jis');って書いてあるんですが、それでやると
表示が文字化けしたり、送られたメールが文字化けしたり・・・・
でいろいろ試した結果、スクリプトをsjisで保存、フォームでコードは
&jcode::convert(*form, 'sjis');メールはjisでデコードしたら今のところ
うまく行ってます。ちなみにw2k+IE6での検証です。あとはWinのNNと
MACでIE&NNを試してみないと・・・・
227: 名無しさん@お腹いっぱい。 02/01/24 23:49 ID:??? AAS
うんこすけーぷ4.xのヤロウ、たまにエンコード間違えやがるから、
確実にjis/sjis/eucを判定できる文字を各フォームに突っ込んどいて、
jcode.plかなんかで判定、convertんとき元コード指定せんと、テストで
上手く行ってても稼動させてしばらく経ったらクレームがなんて事が。
# 昔はまったな、これで。
charsetもHTTPヘッダ、METAで両方吐き出しとけ。念には念だ。
228: 名無しさん@お腹いっぱい。 02/01/25 01:13 ID:??? AAS
>>215
アップされるのを待ってるんだが。
229: 名無しさん@お腹いっぱい。 02/01/25 01:25 ID:??? AAS
>>226
gooとかhotmailとかの有名どころも
アカウント取って検証した方がいいよ。
以前 goo ではまったことがある。
230: 名無しさん@お腹いっぱい。 02/01/25 01:25 ID:??? AAS
スイマセン。どうしてもxrea.comで動かないんです・・・・・
他のところで垢とって試してみます。
231: 名無しさん@お腹いっぱい。 02/01/25 02:13 ID:??? AAS
困ったらとにかくへろぅわぅうど!
#!/usr/bin/perl #サーバにあわせりゅ
print "Content-type:text/plain \n\nHelloWorld.";
exit;
をウプだ。
これが動かないなら設置/設定方法が悪いかCGIが使えないかどっちかだな。
flockやsymlink、スクリプト本体より上のディレクトリにアクセスしてる
場合なんかもサーバによっては引っかかるぞ。
232(1): 名無しさん@お腹いっぱい。 [age] 02/01/25 02:17 ID:??? AAS
なにげに人気のあるスレだな。
何でだろう?
233: 名無しさん@お腹いっぱい。 02/01/25 02:29 ID:??? AAS
>>232
1のマメなレスと、微妙なジサクジエンによるものであろう。
234(1): sage 02/01/25 14:31 ID:??? AAS
これ自作慈円?なの?
235: 名無しさん@お腹いっぱい。 02/01/25 15:25 ID:??? AAS
>>234
なんか>>1が叩かれても逆切れせず、氏ったかもしないで真摯にガンバッテイルから、
漏れはいくつか応援出したじょ。
#なんか自分がPerlいじりだしたころを思い出すんだよな、このスレ。
236: 無謀者 02/01/25 19:29 ID:??? AAS
先の鯖でどうしても動かないのですが、ご協力いただいた方へのお礼も含めて
とりあえずソースだけでもウプして晒してみます。
コメントだらけの汚いソースですが2週間前にCGIに手をつけた素人という事で
見逃してください・・・・
外部リンク[txt]:cgitest.s7.xrea.com
まだエラー処理とかは全然してません。とりあえず動いたというレベルです。
今他の鯖の垢申請中なので動けばまたウプします。
ちなみに自作自演はしてません。てかこんな自作自演できるくらいなこんな苦労しなくていいのに・・・・・(w
237: 名無しさん@お腹いっぱい。 02/01/25 21:11 ID:??? AAS
さまになってきたジャン。
なんかスゲー懐かしい感じだyo
238: 名無しさん@お腹いっぱい。 02/01/25 23:43 ID:??? AAS
たいしたもんです。感心しました。
239(1): 無謀者 02/01/26 00:38 ID:??? AAS
文字コードEUCで送ったら動きました
外部リンク[htm]:cgitest.s7.xrea.com
ただやっぱりブラウザで頻繁に文字化けするし、sendmailで送られる
データはバヶバケなんですよね
はてさて、何にあわせるのが一番楽なのか・・・・
EUC統一がよさそうなんですが、そうするとブラウザが頻繁にエンコードミスるようなんですが
うちのIEのせいでしょうか?それともやっぱりブラウザ出力部はS-JISにしといたほうがいいですか?
240: 名無しさん@お腹いっぱい。 02/01/26 01:11 ID:??? AAS
>>239
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
だからじゃないの?
241(1): 名無しさん@お腹いっぱい。 02/01/26 01:18 ID:??? AAS
少し休め。
CGIが吐き出すHTML、<html>〜<head>〜</head>〜</html>が丸々抜けてんぞ。
shop4.htmはMETAの指定がShift_JISなのにファイル自体はEUC-JPだしな。
よくやったよ。フィニッシュに向けて、まずは寝れ。
242: 名無しさん@お腹いっぱい。 02/01/26 01:28 ID:??? AAS
正直、ここまでたどり着くとは思わなかった。
243: 名無しさん@お腹いっぱい。 02/01/26 10:31 ID:8XQYuO1B(1) AAS
AA省
244(2): 02/01/26 13:29 ID:cJzc6DfB(1) AAS
おおー、よくやったなー。お見事。
ちゃんとサブルーチンに分けてあるし。
見やすいし。
別に汚いソースじゃないじゃん。いいんじゃないの?
245(1): 244 02/01/26 13:49 ID:8S+CJ+jU(1/2) AAS
>sub sub_add{
> $ctime=time();#クッキーID作成用要素(時間)
> $cid=$$+$ctime;#クッキー用ID
厳密には、クッキー用のIDが足し算だとイカンと思うが・・。
プロセスIDは一回転して戻ってくるから。
Windows だと、プロセスIDはランダムに割り当てられるし。
246(1): 無謀者 02/01/26 15:20 ID:??? AAS
お褒めの言葉ありがたい限りです。ホントここに来て見てよかったですありがとうございます。
で、文字コードなんですが・・・
一般的にはスクリプト自体はEUCで書けとものの本には書いてありますよね?
ただ、HTML表示はS-JISが一般的(だと思うのですが)
たとえばスクリプトをeucで書いて(保存して)フォームからのデータは
jcode.pl使ってEUCにコンバートで、スクリプト内のHTML表示部だけMETAタグでs-jis
指定してやればブラウザはちゃんと解釈してくれるんでしょうか?
CGIというよりWEB作成の基礎の気もするんですが、今まではDW使ってて
文字コードって意識した事無かったもので・・・・・
前に書いた通り全てS-JISで統一すれば楽なんですけど、スクリプトがeucじゃないと
省8
247: 名無しさん@お腹いっぱい。 02/01/26 15:43 ID:??? AAS
>>246
内部でEUC処理するなら、出力もEUCで良いんじゃないの。
METAタグと、出力ヘッダの両方でEUCに指定した方がいいよ。
あと、メール本文はJIS出力でいいけど
subjectはそれだけじゃダメでちゅ。バケまちゅ。
248: 244 02/01/26 15:50 ID:8S+CJ+jU(2/2) AAS
プロセスIDは、65535 までいくよ。
+ って、文字列くっつけるんだっけ? 忘れちゃった。
$cid = "$ctime$$"; とかにしとく方がいいかと思ったんだけど。
あとcgi なら、同時アクセスでも、別のプロセスを立ち上げるから、
同時に買い物をスタートされても平気。
249: 名無しさん@お腹いっぱい。 [ ] 02/01/26 16:10 ID:??? AAS
お!キレイにかけてるじゃん
俺のスクリプトよりもキレイだぞ;
しかしCGI.pm使ってないの見るの久しぶりなんでなんとも懐かしいにおいがする
のう。。。
250: 無謀者 02/01/26 16:12 ID:??? AAS
あ、そうか・・・・数字の足し算だと確かに重複の可能性がありますね・・・
修正させてもらいます。
で、やっぱりメールの本文の文字化けが解消しない・・・・
スクリプトとHTML出力はEUCで統一したんですが。
@sendml=メールの本文;
&jcode'convert(*sendml, 'jis');
じゃダメなんですかね?
@sendmlはファイルから読み出して格納してます。
ファイル自体は開いて見るとeucになってるみたいなんですが。
251: 名無しさん@お腹いっぱい。 02/01/26 16:22 ID:??? AAS
ソースよく見てないんだけど、
@sendmlってことは、配列なんでしょ。
jcodeなら各要素ごとにやらなだめでしょ。
252: 無謀者 02/01/26 16:31 ID:??? AAS
なるほど・・・だとすればファイルに書き込む段階で各要素(変数)
をjisでコンバートして最後に一気に読み込んで送信すれば良いんですかね?
253(1): 名無しさん@お腹いっぱい。 02/01/26 16:35 ID:??? AAS
readparseが見当たらないが、ブラウザから受け取ったデータの汚染チェックはしているかな?
たとえばcookieに予想していない文字列突っ込まれたときとか
254: 無謀者 02/01/26 16:44 ID:??? AAS
メールの文字化けの件、ほぼ解決しました。ご指導いただいた方ありがとうございました。
>>253
ReadParseってフォームからのデータの取得にしか使ってないんですが、
他にも何か使い方があるんでしょうか?なんやら重要そうな内容みたいですが・・・
255(1): 名無しさん@お腹いっぱい。 02/01/26 17:06 ID:??? AAS
ソース見たんですが、ReadParseのあと
フォーム要素のハッシュに対してもjcodeで一括変換しようとしてるでしょ。
テストしてうまく行ってるのかもしれないけど、
jcodeは効いてないんじゃないかな。
256: 名無しさん@お腹いっぱい。 02/01/26 17:07 ID:??? AAS
例えばcookieに"../xxxx%00"とか仕込まれて、汚染チェックをしていないと
cartファイルが../xxxxになってしまう。
ブラウザから渡されたデータは全て信用できないものと仮定して汚染チェックを行わなければいけない。
それをReadParseの中でやっているのなら問題はないが、汎用ルーチンのようなのでやっていない可能性大。
257: 241 02/01/26 22:45 ID:??? AAS
お、直ってんジャン、CGIの吐くタグ。
まだ余計な<center>が<body>の前にひとつついてくるが。
EUC統一ついでにHTMLファイルもEUCに統一しちゃうと、フォームから入力される
文字コードはEUCと決め打ちできるから、入力段(&ReadParseのあと)でのコード
変換は要らなくなるぞ。
いま化けるのは>>255さんの言うとおり、商品ページがSJISで、jcode.plが
SJIS->EUCを変換し切れてないからだろう。
(ひょっとするとメールの件もここの変換ミスが一枚絡んでいるかもね)
&ReadParse( *form);
foreach $key(keys %form){
省3
258: 無謀者 02/01/26 23:14 ID:??? AAS
いろいろありがとうございます。shop.cgiに関しては少しずつ煮詰めていきたいと思います。
さて、これを始めるきっかけにもなった商品用ページ作成用CGIの作成に取り掛かろうと
思ってるのですが、その方法についてお知恵拝借いたしたく。
作りたい商品ページの形式としては今ウプしてあるようなかたちです。
画像ファイルのアップロード等勉強しなくちゃいけないことは山ほどあるのですが、手順として
どういうものがあるのか。
今考えてるのは、テーブル一個分の項目(1商品分)を一行としたdatファイルに保存しておいて
それにタグを挿入してHTMLファイルを作るというものです。新規商品を追加する時や削除
する時はそのdatファイルを呼び出して編集・削除・追加を行いHTMLファイルを丸々上書きという
方法です。HTMLファイルを直接いじるのはタグなどが邪魔して非常にめんどくさそうなので、
省5
259(2): 名無しさん@お腹いっぱい。 02/01/27 00:03 ID:??? AAS
編集、削除が出来る掲示板で、管理者以外カキコ禁止にすれば、あと一ひねりだろう。
画像は専用ディレクトリを作って、ファイルリストをgetして、
BBSの書き込みフォームのページかなんかにWidth/height指定してfilenameと
画像をサムネイル表示。
書き込みフォーム自体にはプルダウンメニュー(select/option)か何かを動的に
生成して、書き込み情報に加えるとかすればOK
画像ウプは説明が長くなるから、まあ「form multipart」あたりでグーグル逝け。
デザイン一括変更は雛型式(デザインを外部ファイルで指定)のBBSを
(拾ってく|作)ればいいんでないかい?
260: 無謀者 02/01/27 01:50 ID:??? AAS
なるほど、掲示板を応用すれば良いんですね。商品ページは複数ページ作りたいんで、
・多板作成が可能
・板毎のデザイン変更が可能
・書き込み内容編集が可能
・画像アップロード可
って掲示板探してそれを参考にしてみよう。
・・・・って思って、画像以外は2ch型改造のAhhanBBSがよさそう
なんでソース見てみたら複雑すぎてわけわかめ(鬱
もうちょっと簡単そうなの探してみよう。
というわけでCGI INDEXとCGI ZOOで旅してきます。
上下前次1-新書関写板覧索設栞歴
あと 257 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.029s