☆ショッピングカートのCGIを作りたい!Perlで☆ (517レス)
☆ショッピングカートのCGIを作りたい!Perlで☆ http://medaka.5ch.io/test/read.cgi/php/1010660032/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
347: 名無しさん@お腹いっぱい。 [sage] 02/02/13 05:09 ID:??? >>346 それって全然簡単じゃない?例としては if ($ORDER{'mona'} > $ZAIKO{'mona'}) { print "申し訳ありません。只今$ORDER{'mona'}は在庫を切らしております。\n"; } else { $ZAIKO{'mona'} -= $ORDER{'mona'} } こんな場合こそ、パール独特の変数、ハッシュが力を発揮する時だよ。 ハッシュを上手く使ってね。 http://medaka.5ch.io/test/read.cgi/php/1010660032/347
348: 無謀者 [sage] 02/02/13 10:05 ID:??? >347 えっと、カートの中身が複数だった場合商品によって、格納されているファイルがそれぞれ違うので まずforeachとかで順にカートの中身を取り出しながら商品の格納されているファイルを、検索(hidenでファイル名を渡してある)して、見つかったファイル名をまたforeachなりwhileなりで 検索して、商品名がマッチしたら在庫数と注文数を比較、それで0か足りない場合は エラー、もし大丈夫なら、在庫数から注文数を引いて、ファイルに書き直し・・・・ みたいな事をやらなければダメな気がするんですが・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/348
349: 297 [sage] 02/02/13 12:22 ID:??? @files=glob "$dir/*.dat"; # $dirはディレクトリ名。*.datのlistを得る foreach $file(@files){ open FILE,$file or &error; while(<FILE>){ my($no, $hinmei, $zaiko・・・) = split /\t/; #左辺のmyのリストは適当に $zaiko{"$file::$hinmei"} = $zaiko; } close FILE; } とかやって%zaiko{"ファイル名::品名"}(%zaiko{"ファイル名::商品番号"}?)に 代入して、%zaikoに対しデクリメント。 >>347さんの言うとおりhashならサーチ用にループしなくてイイからね。 で、 foreach $file(@files){ open FILE,$file or &error; open TMP,">$temp" or &error; while(<FILE>){ my(@dummy) = split /\t/; @dummy[2] = $zaiko{"$file::$hinmei"} if exists $zaiko{"$file::$hinmei"}; #$dummy[2]は適宜変更 print TMP @dummy; } close FILE; close TMP; rename $temp,$file; } とかやって戻してやるってのはどうかな? あ、ここまでやって思いついたが、カートの中身を %cart{ファイル名::商品名}=注文数 ってハッシュにして、後者の書き戻しループで在庫チェックさせればイッパツだ。 そのほうがイイや。速いし。 http://medaka.5ch.io/test/read.cgi/php/1010660032/349
350: 297 [sage] 02/02/13 18:52 ID:??? えーと、ちょっとヒマがあったんで上の追記を。 カートの中身を $cart{ファイル名::商品名}=注文数 (注文がない場合は0でなくハッシュを生成しない) ってハッシュにしてあるとして、 @files=glob "$dir/*.dat"; foreach $file(@files){ open FILE,$file or &error; open TMP,">$temp" or &error; while(<FILE>){ my(@data) = split /\t/; my $key = "$file::$data[2]"; # $data[2]は商品名ね if (exists $cart{$key}){ if ($data[1] < $cart{$key}){ #$dummy[1]は在庫 print "$data[2]は在庫が不足しています"; }else{ $data[1] -= $cart{$key}; } } print TMP @data; } close FILE; close TMP; rename $temp,$file; } で、読み出し→在庫チェック→在庫デクリメント→書き戻し が1回で終わると思うんだな。 まあ例によって書きなぐりだから、globでファイルリストを取り出し、 cartをexistsで調べて在庫チェックとデクリメント処理する、 という流れだけ理解してもらえれば。 http://medaka.5ch.io/test/read.cgi/php/1010660032/350
351: 無謀者 [sage] 02/02/14 15:56 ID:??? >>350=297さん いつもありがとうございます。 せっかく、頂いたんですが、違う方法で実装できました。 次は「在庫がありません」だけではちょっと不親切なので「在庫が無いので買物カゴから削除しました」 と「在庫が足りないので$cyumon個を$zeiko個に変更しました」と表示して カートの中身を書き換える機能を作成中です。一度に商品ファイルとカートファイルを の二つをハンドルするので、ループ中の何処で、書き込んで、何処でテンポラリーファイルを リネームするのかが、書いててわからなくなる・・・・(苦笑 スクリプト一行書くごとに、print"処理結果" and exit;で出力内容を確認しながら 進めてます http://medaka.5ch.io/test/read.cgi/php/1010660032/351
352: 無謀者 [sage] 02/02/15 00:25 ID:??? 買物を途中で止められた場合、datファイルが残ってしまっているので、それを 定期的に消したいんですが、たとえば最終更新時間から$time以上経過したら 削除させるのって @files=glob("./cart/*.dat"); foreach(@files){ @info=stat $_; $deltime=time-60*60*$time if ($info[9] >$deltime){ unlink $_; } } で、大丈夫ですか? これを、買物終了時かなんかに実行されれば、誰かが買物を完了してくれたら自動的に 入らないファイルが消える、というふうにしようと思うんですが・・・・ statで得られる時間って time関数と同じで方式(1700年からの秒数?)ですか? http://medaka.5ch.io/test/read.cgi/php/1010660032/352
353: 無謀者 [sage] 02/02/15 00:39 ID:??? なんか誤字だらけ・・・ ×入らないファイルが消える ○要らないファイルが消える http://medaka.5ch.io/test/read.cgi/php/1010660032/353
354: 297 [sage] 02/02/15 01:39 ID:??? おお、自力で実装できたか。ガンガン腕を上げていますね。 あとは欲張って機能拡張しすぎてスパゲッティにならんようにね。 statで得られるのはtimeとおなじ*1970年からの*通算秒だよ。 最終更新からの経過だけ調べるだけなら、ファイルテスト演算子-Mで 最終更新からの*経過日数*が得られるよ。 foreach(glob("./cart/*.dat")){ unlink if -M $_ > $time; # $timeは日数、0.5なら12時間 } とか。 http://medaka.5ch.io/test/read.cgi/php/1010660032/354
355: 無謀者 [sage] 02/02/16 01:32 ID:??? 画像のアップロードって、難しいですね・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/355
356: 名無しさん@お腹いっぱい。 [] 02/02/16 15:01 ID:BlI0w0O/ 大人のCGI(書籍) ttp://www.byakuya-shobo.co.jp/hj21/otona/main.html あたり読んで、パクれ。 今のお前ならもうこの本のスクリプトを解析、応用できるはずだ。 http://medaka.5ch.io/test/read.cgi/php/1010660032/356
357: 無謀者 [sage] 02/02/16 16:40 ID:??? 持ってたりします・・・>大人のCGI 実は他でソースパクってUpload.cgi作ったら動いた事は動いたんですが それを、admin.cgiにサブルーチンとして埋め込むと動かなくなります。 そのソースは、CGI.pm使ってたんですが、enctype="multipart/form-data" で受け取ったデータを ReadParseかけちゃってるのが問題なのかな?とか思ってたりするんですが、関係あります? http://medaka.5ch.io/test/read.cgi/php/1010660032/357
358: 名無しさん@お腹いっぱい。 [] 02/02/16 17:51 ID:BlI0w0O/ そこだ。ファイルデータは生で扱え。 その動いたっちゅうUpload.cgiで、どこをパースしてどこを生で扱っているか 解析してみるのだ。この件に関して間違いのない文書はRFC1867。 http://medaka.5ch.io/test/read.cgi/php/1010660032/358
359: 無謀者 [sage] 02/02/16 19:24 ID:??? ちょっと、頭の中がテンパって来たので、気分転換で、管理画面のUIを整理しました。 ttp://cgitest.s7.xrea.com/cgi-bin/admin.htm 各画面から必要なページに戻れるようにボタンをつけました。 あと、新規ページ作成時と、デザイン変更時に作成結果(変更結果)が確認できるようにしました。 http://medaka.5ch.io/test/read.cgi/php/1010660032/359
360: 名無しさん@お腹いっぱい。 [ ] 02/02/16 20:34 ID:??? うぷろだでわかんないってどの辺?よかったら書いてみ http://medaka.5ch.io/test/read.cgi/php/1010660032/360
361: 無謀者 [sage] 02/02/16 22:34 ID:??? なんか、今日xreaが調子悪くないですが? 私のPCのせいだろうか・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/361
362: 名無しさん@お腹いっぱい。 [sage] 02/02/17 01:51 ID:??? しかし、1/10に > Perlも、いやプログラミングさえ未経験。「必ずわかるCGI」と > その他の入門書で何とか「掲示板」の仕組みがようやく理解できました。 んな事書いてた>>1が一ヶ月でここまで来るとは正直予想できなかった。 http://medaka.5ch.io/test/read.cgi/php/1010660032/362
363: 名無しさん@お腹いっぱい。 [sage] 02/02/17 09:32 ID:??? マジすごい! 無謀者さん 素直に感動しました http://medaka.5ch.io/test/read.cgi/php/1010660032/363
364: 名無しさん@お腹いっぱい。 [] 02/02/17 10:54 ID:FSHvXFjS 俺モジュール使え無い。つまり1にいつの間にか越された。ウツウツウツウツウツウツ。。 http://medaka.5ch.io/test/read.cgi/php/1010660032/364
365: 名無しさん@お腹いっぱい。 [sage] 02/02/17 11:14 ID:??? >356 そんなクソ本を紹介すんな。 誤字脱字だらけ&ヘタレすぎ。立ち読みしてて叩きつけたくなった。 http://medaka.5ch.io/test/read.cgi/php/1010660032/365
366: 名無しさん@お腹いっぱい。 [sage] 02/02/17 11:50 ID:??? >>365 マジっすか?? 近くの書店で注文しましたが・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/366
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 151 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.014s