☆ショッピングカートのCGIを作りたい!Perlで☆ (517レス)
上下前次1-新
282: 名無しさん@お腹いっぱい。 02/02/05 13:50 ID:??? AAS
>278
そうだね、現状ではサーバを製作者側で指定できない限りはPHPはまだ使えないね。
シカーシPHPも4になってほぼ機能的に出尽くした感があるし、ぼつぼつ標準設置の
レン鯖増えてきたし、WebアプリののRADとして、Perlとはすみわけしながら普及
しそうな勢いがあるな。
ところで設置URIは、上記と同じ
外部リンク[htm]:cgitest.s7.xrea.com
でいいのかえ?最終確認画面で文字化けしちょるようだが
283: 名無しさん@お腹いっぱい。 [ ] 02/02/05 15:21 ID:??? AAS
なかなかのデザインだのう。
はよ完成して動くことを祈る。
284: 名無しさん@お腹いっぱい。 02/02/05 17:43 ID:??? AAS
Mac/iCab2.71で見ると、購入ボタンの次の画面でunknown Content-Type: が出よりますな。
285(2): 無謀者 [age] 02/02/05 22:33 ID:??? AAS
CGI中のHTMLヘッダで文字コードを指定する場合って、たとえばeucにしたいのなら
"content-type: text/html;charset=EUC-JP\n\n";
で良いんでしょうか?ここで言われたので、ぐぐるで検索掛けてみたら
上のような書き方がちらほらあったので。ただ「文字コード、charset」とかで検索すると
ほとんどが<META>タグの記述方法になってるので、いまいちこれでいいのが自信が無い・・・
いまさらながら気が付いたんですが、どの本読んでもhtmlヘッダ
に関しては
"content-type: text/html\n\n"
を書けとしか書いてないんですよね。散々文字コードの事は書いてあってjcode使って
コンバートしろとかは書いてあるのに・・・・
286: 無謀者 02/02/05 22:34 ID:??? AAS
スイマセンsage忘れ・・
間に合いませんでした。
287: 名無しさん@お腹いっぱい。 02/02/05 23:04 ID:??? AAS
>>285
あってる。
ただ、;のあとに半角スペース入れた方がいいのかな
意味あるのかは知らないけど、みんなやってるということで
print "Content-type: text/html; charset=euc-jp\n\n";
でもmetaにも書いてくれると親切だ。
288(1): 無謀者 02/02/05 23:15 ID:??? AAS
ありがとうございます。ヘッダとMETA両方にしつこいくらいに書きます(w
しかし、なんで入門書にこれが書いて無いんですかね?
文字コードの自動判定なんてまともに出来ないヴァカブラウザがゴロゴロしていて
純粋なHTMLはS-JISで書くのが一般的(?)なのに・・・
いくらフォームデータエンコードしても、CGI内のHTML表示部分で
ちゃんと指定しとかなきゃ行ったり来たりしてる間にブラウザも迷うっちゅねん!
と思うのですが・・・・
ところで、皆さんはCGI内のHTML部にMETAとか<HTML></HTML>書くときに
何処に書いたらいいかわからなくなる事無いですか?
一箇所で完結すれば良いんですがHTML出力を前半と後半をサブルーチンで
省2
289(2): 名無しさん@お腹いっぱい。 02/02/06 00:26 ID:??? AAS
>>288
そうだよ両方書くんでちゅ。
それが当たり前でちゅ。
ていうかここで2回も書いたんでちゅ。
ヘッダ出力とフッタ(は要らんかもしれんが)を
サブルーチンとかモジュール化したら?
CGI.pmでもヘッダ出力できるけど、
日本語の場合、文字コードの指定が必要だから
ジブソで用意しました。
290: 名無しさん@お腹いっぱい。 02/02/06 00:33 ID:??? AAS
>>289
うろ覚えだけど、最近の CGI.pmなら
文字コードやContent-Typeとかも
指定できた気がする
291(1): sage 02/02/06 10:33 ID:??? AAS
えらいぞ!短期間でよくここまで!
後は289のいうとうりモジュール化することを進めるよ!
あとでつかいまわしができるよ!
292(1): 名無しさん@お腹いっぱい。 02/02/06 10:48 ID:??? AAS
CGI.pmでヘッダ出力できるよ。
#!/usr/bin/perl
use CGI;
$query = new CGI;
print $query->header(-charset=>'Shift_JIS');
おいらは最初にヘッダを出力しちゃってそれぞれの出力終了時にフッダの
サブルーチンに飛ばしてる。
293: 無謀者 02/02/06 16:55 ID:??? AAS
>>289
>ていうかここで2回も書いたんでちゅ。
そうでしたね。いや、読んではいたんですが、どうしても>>285の方法が
はっきり自信持てなかったもんで・・・・
>CGI.pm
その辺の事は今後順次勉強していきたいと思います。とりあえずはできるだけ
自分で書くというのも勉強になりますので・・・
>モジュール化
プログラム経験が無いのでモジュールと言うものの概念がいまいちワカランのですが
「良く使うものをサブルーチンにして、それを別ファイルに纏めておく」と言うことで
省8
294: 名無しさん@お腹いっぱい。 [ ] 02/02/06 17:06 ID:??? AAS
>>292
print $query->end_html
これで終れる
295(1): 259 02/02/06 20:31 ID:??? AAS
>「良く使うものをサブルーチンにして、それを別ファイルに纏めておく」
>と言うことで良いんでしょうか?
サブルーチンをファイルにしてメインからrequireするあたりがモジュール化の第一歩。
そこから名前空間の概念覚えて、別ファイルのほうpackage宣言してみて、って
少しづつ覚えていけばいいと思うよ。(その先がまだ長いんだけれど‥‥)
いきなり.pmモジュールなんていうとワケわかんなくなるからね。
で、商品ページの方はどうよ?
296(1): 無謀者 02/02/06 21:21 ID:??? AAS
>>295
なるほど、そんな単純なものではなさそうですね>モジュール
>商品ページ
いかんせん仕事の都合で間があいちゃったんで全然出来てません。設計書を作ってる
最中だったんですが、今読み返してみるとようワカラン(w
もう一度1からやり直しです。最初はフォームからHTML生成しちゃおうと思ったんですが、
在庫数をカウントしたいので、cgiからdatファイルから読み出してHTML表示させるしか無さそう・・・
HTMLにHiddenで入れようとも思ったのですが、商品が減る度にHTML書き直させなきゃならなそうだし。
ただ、全てをCGIにやらせると鯖の負荷も高くなりますよね?どうしたものか・・・・
297(5): 259 02/02/07 15:02 ID:??? AAS
>296
open (READ,$filename);
@data = <READ>;
close (READ);
#@dataに対して必要な処理
open (WRITE,">$filename");
print WRITE @data;
close (WRITE);
式でやると、.datの件数が増えると負荷もかかるしメモリも喰う。
これは鯖屋さんに嫌われる。(警告が来たり、いきなり垢止められたりする)
省22
298: 無謀者 02/02/08 21:13 ID:VrHm3ZfY(1) AAS
えーとパスワード認証してるCGIに直接アクセスするにはどうしたら?
フォームが
<input type="password" name="pass" size="10">
<input type="hidden" name="mode" value="login" >
になっていて、
&ReadParse(*form);
$pass=abc;
$fpass=$form{'pass'};
if ($fpass eq $pass){
#−−−メニュ画面ーーーーー#
省4
299: 名無しさん@お腹いっぱい。 02/02/09 09:04 ID:??? AAS
ハァ?
メニューに飛ばす?
なんか意味わかんねぇ
300(1): 無謀者 02/02/09 11:30 ID:??? AAS
すいません。書き方悪かったですね・・・・流れとしては
フォーム(HTML)からパスワード入力>menu画面(menu.cgi)>データ入力
>データ入力後refreshでもう一度menu画面に戻る。
てのをやりたいんですが、戻り先をmenu.cgiにするのにパスワード
を渡す方法をがわからないんです。そもそもFORMのinputで渡すような項目を
Formを使わずに渡す方法ってどんなのがあるんでしょう?
301(1): 名無しさん@お腹いっぱい。 [ ] 02/02/09 13:35 ID:??? AAS
>>300
方法としてアドレスに埋め込む(リフレッシュ先のアドレスに仕込む)
hoge.com/menu.cgi?id=hoge&pass=hoge
HIDDENを使う
データ入力の度に
<INPUT HIDDEN NAME=id VALUE=hoge><INPUT HIDDEN NAME=pass VALUE=hoge>
これを必ず仕込んでおく
なお、どちらの方法でもmenu画面で逐次パラメータを取得して次に渡す必要がある
的外れの返答かな?
302: 名無しさん@お腹いっぱい。 [ ] 02/02/09 13:36 ID:??? AAS
自己訂正
当然ながらHIDDENを使うときはFORMタグを必要としますからね。
303(1): 無謀者 02/02/09 13:50 ID:??? AAS
ありがとうございます。その辺を知りたかったんです。
つまり、通常フォームから
<input type="password" name="pass" size="10">
<input type="hidden" name="mode" value="login" >
と言う内容をsubmitボタンを押すことにより送信するんですが、
その内容をフォームを使わずに渡す方法を知りたかったんです。
>>301の説明だと
menu.cgi?mode=login?pass=123
とかで良いんですかね?
でスクリプト中で$loginpass=123とか指定しておけば、cgi内から上記のように
省4
304: 名無しさん@お腹いっぱい。 02/02/09 14:13 ID:??? AAS
パラメータは&で繋ぐ
305: 名無しさん@お腹いっぱい。 02/02/09 14:14 ID:2AUefyPU(1) AAS
>>303
そのとおり。
あと老婆心ながらHTMLのタグを書くときに""(クオーテーション)はいらない。
""がいるのはスペースが含まれる場合のみ。
""を省略するだけで結構処理スピードがあがるよ。
306(1): 無謀者 02/02/09 14:26 ID:??? AAS
ありがとうございました>教えてくださった皆様・
うまくいきました。
ちなみにこれと同じ方法を使ってFORM内の
Submitボタンを画像とかに置き換える事は可能なんでしょうか?
ボタンの変わりに画像貼ってそれのリンク先をmenu.cgi?neme=submit
ってやるとsubmitボタンとして動作します?
307: 名無しさん@お腹いっぱい。 02/02/09 14:58 ID:??? AAS
>>306
<input>タグでできる。
308: 名無しさん@お腹いっぱい。 02/02/09 18:56 ID:??? AAS
外部リンク[htm]:tohoho.wakusei.ne.jp
309: 無謀者 02/02/09 19:23 ID:??? AAS
皆様いつもありがとうございます。
商品ページ作成部分が若干出来たのでウプしました。
外部リンク[htm]:cgitest.s7.xrea.com
から入れます。パスワードは「123」です。
今のところ、商品カテゴリーの作成と商品の追加しか動きません。
カテゴリーを追加した後に商品を追加する事になります。既存のカテゴリーは
「商品群1」と「商品群2」です。
商品群1の内容は
外部リンク[cgi]:cgitest.s7.xrea.com
で
省7
310: 無謀者 02/02/09 20:31 ID:??? AAS
あ、今現在新規商品作成時に指定したオプション項目は反映されません。
「,」で区切って入力してもらって、そこからセレクトボックス生成させる
のを今作ってます。
311(4): 名無しさん@お腹いっぱい。 02/02/10 16:31 ID:??? AAS
うーん、せっかく上手くいっているところに水を差すようだが、
URIでパスワード指定やっちゃうと、認証もクソもないぜ。
URIがバレた時点でソッコーで改ざんされっぞ。
googleツールバーの高機能版では閲覧中のURI自動通知されちまうしな。
「登録しました」のページに「メニューに戻る」ボタンをつけて、
hidden渡しじゃだめなんかい?
どうしてもrefreshでやりたいなら、refererとってCGIと認証ページからの
アクセスのみ許可するとかやってやんねーと。
312(1): 無謀者 02/02/10 20:00 ID:??? AAS
>>311
確かにそれは思ったんですけど、一応pass入れたあとの管理者用画面だから
大丈夫かな・・・と考えてたんですが・・・・・
hiddenで入れてもソース見ればそのままpassが見えちゃうわけですし・・・・
313: 311 02/02/10 23:43 ID:??? AAS
>>312
postで(formから)passが入ってこないときadmin.cgiがエラーメッセージ吐いて
終了するようにすりゃいいんだよ。したら、URIがバレても簡単にはアクセスでき
ないだろ?
#!/usr/bin/perl
require 'cgi-lib.pl';
my $method=$ENV{REQUEST_METHOD};
$pass='123';
&ReadParse(*form);
if ($form{'pass'} ne $pass or $method ne 'post'){ #passミスマッチとGET拒否
省16
314(1): 無謀者 02/02/11 02:03 ID:??? AAS
ちょっと機能追加
登録済み商品の修正が出来るようになりました。
>商品登録テストしてくれて人
今のところ、文字置換やエラー処理全然いれて無いので、コメントのところで
改行入れるたり、新規ページ作成時に、ファイル名入れないと、データボロボロになります(汗
明日(今日か・・)必要フォーム項目未記入時のエラー処理と、改行その他、文字列の
置換処理を出来るようにします。
>>311=313
なるほど・・・・と入っても、いまいち管理用画面でのその辺のセキュリティの必要性が
理解できて無いんですが・・・・・
省1
315: 無謀者 02/02/11 02:16 ID:??? AAS
ところで、今回、新規データ入力時に
@data=($no,$hoge,$mona,$gik)
$line=join("\t",@data);
open(FH,$file);
@logdata=<FH>;
close(FH);
open(WRITE,">$file");
print WRITE $line;
print WRITE @logdata;
close(WRITE);
省23
316(1): 297(=259) 02/02/11 03:41 ID:??? AAS
$noは数値だよね?
なら、
while(<IN>){
my @cell = split/\t/;
$_ = $line if $cell[0] == $no;
print TMP;
}
で数値評価したらどうかな?
なんとなくだけど、$cell[0]か$noに空白とか含まれてそうだったんで。
317(1): 無謀者 02/02/11 18:26 ID:??? AAS
>>316
うまくいきました。ありがとうございます<IN>
で変数が$_に入ってるってのがすっかり頭から飛んでました・・
ところで、正規表現なんですが、たとえば$priceに半角数字以外(「,」とか)が入ってた場合に
エラーを表示させるのって
if ($price eq ~/\D/){
print "価格はカンマ無しの半角数字で入力してください";
}
で良いんですよね?
318: 名無しさん@お腹いっぱい。 02/02/11 22:44 ID:+mlK3wYT(1) AAS
>>317
全然違う。検索は $scalor =~ /$hoge/; だぞ。
if ($price =~ /\D/) {
print "価格はカンマ無しの半角数字で入力してください";
}
まあがんばれ。
319(2): 無謀者 02/02/11 23:18 ID:??? AAS
↑の通りに書いてみたら,半角数字も弾かれちゃいました・・・・・
320: 名無しさん@お腹いっぱい。 02/02/11 23:24 ID:??? AAS
>319
\Dは数字以外じゃない?
外部リンク[htm]:tohoho.wakusei.ne.jp
321: 無謀者 02/02/11 23:28 ID:??? AAS
そうだと思うんですが・・・・
だから
$price=~/\D/;
だと「$priceに数字以外のものが含まれていれば」
って事になりますよね?
322: 名無しさん@お腹いっぱい。 02/02/11 23:32 ID:??? AAS
だから半角数字だけならエラーにならないんじゃ?
323: 無謀者 02/02/11 23:34 ID:??? AAS
のはずなんですが・・・・弾かれちゃうんですよ・・・
もう一度ソース見直してみます。
324: 名無しさん@お腹いっぱい。 [ ] 02/02/11 23:35 ID:??? AAS
ってかさ、数字以外は取り除けばいいんでない?
そっちの方がユーザーライクだと思うが。
$price =~ tr/0-9//cd;
325: 名無しさん@お腹いっぱい。 02/02/11 23:38 ID:??? AAS
>>319
スペースも渡されてるとか
326: 無謀者 02/02/11 23:40 ID:??? AAS
それも考えたんですが、全角数字入れられた時の対応も一緒に
やっちゃおうと思ったので。
327: 無謀者 02/02/11 23:44 ID:??? AAS
>325
そう思って
[\D\s\t]とかもやってみたんですが・・・ダメ
328: 名無しさん@お腹いっぱい。 02/02/11 23:48 ID:??? AAS
適当なファイルに書き出して見てみたら?
CGI::Carpとかでハンドルしてるなら warnや dieで見てもいいけど。
329: 名無しさん@お腹いっぱい。 02/02/11 23:52 ID:pHWWFybw(1) AAS
もうめんどくせえから、全部最初からやり直せ!!
330(1): 297 02/02/11 23:52 ID:??? AAS
そうか、上手く逝ったか。漏れこのスレ、検証してないやつばっか(297とか^^;)
書いてるから、ちょっと心配してるんだな。
> で変数が$_に入ってるってのがすっかり頭から飛んでました・・
慣れると便利なんだよ、デフォルト変数$_。
はまると怖いけどね。
で、正規表現検索は相手が文字列でも
if ($price =~ /\D/)・・・
だよ。
331: 無謀者 02/02/11 23:52 ID:??? AAS
えっと、上記の処理より前に
if ($price eq ""){
print"error"
}
・
・
#その他変数の未記入チェック
・
・
ってやってから上の処理やってるんですけど、その辺は関係あります?
省2
332(1): 無謀者 02/02/11 23:59 ID:??? AAS
うわ、
if ($price =~ /\D/){
print "$price";
}
ってやったら、入力したのと違う数字が出てきた・・・・・
この数字どっから来たんだろ???
198000って入力したのに429467294って・・・たかどんな数字入れても
おんなじ数字が吐き出されてる????何でだ?
ちなみに置換処理を無くして実行すると、ファイルにはちゃんと入力した
数字が書き込まれてます。
333: 297 02/02/12 00:02 ID:??? AAS
>>330
うわ、とっくに話題が過ぎ去ってやがる。リフレ忘れた。鬱打
&jcode::tr(\$price, '0-9', '0-9'); #全角数字を半角に変換
if ($price !~ /0-9/){
print "価格はカンマ無しの半角数字で入力してください";
}
あたりではどうかな?
334: 名無しさん@お腹いっぱい。 02/02/12 00:06 ID:r54lTbCX(1/2) AAS
>>332
という事は、その処理以前にどこかで$priceに値が代入されてるんだよ。
探しなさい。
335(1): 無謀者 02/02/12 00:07 ID:??? AAS
え〜〜〜〜
解決したっぽいです・・・
どうやら、使ってるエディタにバグがあるらしく、上書き保存するとなぜか
s-jisで保存されてたっぽい、のが原因みたいです。(設定はEUCにしてるのですが)
お騒がせして本当に申し訳ありませんでした・・・・m(__)m
エディタ変えようかな・・・・・
336: 名無しさん@お腹いっぱい。 02/02/12 00:09 ID:r54lTbCX(2/2) AAS
>>335
俺はいまだにメモ帳使ってるぞ。メモ帳最強。
337: 無謀者 02/02/12 00:12 ID:??? AAS
あと、
>&jcode::tr(\$price, '0-9', '0-9'); #全角数字を半角に変換
jcodeでこんな事も出来るんですね。フォームデータ受け取り時に
h2zでカタカナは全部置換させてるんですが、そこで数値にしなければならない
変数も全部変換掛けといた方がよさそうですね。
とりあえずご迷惑したお詫びに町内10周走ってきます。
338(1): 無謀者 02/02/12 01:01 ID:??? AAS
皆様の暖かいご支援のおかげで、
新規ページの追加、商品の登録、編集、削除
までできるようになりました。また
「簡易商品ページメニュー」を作り、そこから商品ページにアクセス
出来るようにしました。(管理画面の中)
ココに表示されるURLをコピペすれば、使う人は、メニューページを
自由に作れるのでは無いかと・・・・
外部リンク[htm]:cgitest.s7.xrea.com
パスワードは123です。
ある程度のエラー処理と文字列置換は入れたつもりなのですが・・・・
339: 名無しさん@お腹いっぱい。 02/02/12 02:46 ID:??? AAS
>>338
適当に弄ってれば誰でも使えそうなカンジですね。
って、弄ってみました。
感想:
どのページからでも管理画面に戻れると良いかなあ。
(ページ作る時に何回も戻ったので…)
340(1): 311 02/02/12 05:58 ID:??? AAS
>>314
>いまいち管理用画面でのその辺のセキュリティの必要性が理解できて無いんですが・・・・・
だーかーらー、http://うんちゃらかんちゃら/admin.cgi?mode=login&pass=xxxって
URIがばれちまったらイッパツで商品ページ改ざんされちゃうだろっていってんの。
PasswordをGETに含めるのはヤバいんだって。直リンオッケーだしな。
知り合いとはいえ金絡んでやってんだろ?しっかりしろよ。
商品価格書き換えられたところに注文とか去れちまったら大損害だろ?
URIバレた瞬間にPasswordもってかれちまうんだから、ほんとはPOSTがいいんだけどな、
せめてリファラチェック(GETメソッドはCGI自身からのアクセスみ許可)と、
本稼動のときは変な名前のディレクトリ作って、cgi本体の名前からは予想も出来ねー
省1
341: 名無しさん@お腹いっぱい。 [sage ] 02/02/12 06:25 ID:??? AAS
>340
robotよけのメタは、誰も見ていないです。きっと。
342(1): 無謀者 02/02/12 13:16 ID:??? AAS
>340
詳しい説明ありがとうございます。リフレッシュを止めて、フォームボタンで
hiddenを渡し、リファラチェックも入れるようにします。
ところで、一つのサブミットボタンで二つ以上のアクションを指定する事って
出来るんでしょうか?たとえば
<form method=post action=hoge.cgi>
<form method=post action=hage.cgi>
<input ...
<input....
<input type=submit value=OK>
省3
343(1): 名無しさん@お腹いっぱい。 [さげ] 02/02/12 18:27 ID:??? AAS
むり(やったことないけど)。
仮に出来たとして、ブラウザはどっちに応答すればいいのさ。
344(1): 名無しさん@お腹いっぱい。 [あ] 02/02/12 21:09 ID:??? AAS
>>342
二つ以上アクションさせたい場合はhiddenでvalueを送ってスクリプト
のなかのifで受ける。
例:
<form method=post action=hage.cgi>
<input type=hidden name=action value=hoge>
<input type=hidden name=action value=hage>
<input type=submit value=OK>
</form>
〜hage.cgi〜
省6
345: 無謀者 02/02/13 00:04 ID:??? AAS
>>343-344ありがとうございました。
今、注文受けたら在庫数を減らすってところを作ってるんですが
これが結構大変そうです・・・・・
346(1): 無謀者 02/02/13 01:26 ID:??? AAS
う〜ん、注文が確定した時(メールを送信する直前)にカートに入ってる
各商品の注文数を、商品ごとに各商品ファイルと照合して、注文数>在庫数
又は在庫数=0ならエラー、もし注文数<在庫数なら、「在庫数ー注文数」して
商品ファイル内の該当商品の在庫数を修正・・・・・
それぞれの処理は、今まで教えていただいた事でかけそうなんですが、データの抽出、条件分岐が非常に複雑になりそうです。
347(2): 名無しさん@お腹いっぱい。 02/02/13 05:09 ID:??? AAS
>>346
それって全然簡単じゃない?例としては
if ($ORDER{'mona'} > $ZAIKO{'mona'}) {
print "申し訳ありません。只今$ORDER{'mona'}は在庫を切らしております。\n";
} else {
$ZAIKO{'mona'} -= $ORDER{'mona'}
}
こんな場合こそ、パール独特の変数、ハッシュが力を発揮する時だよ。
ハッシュを上手く使ってね。
348: 無謀者 02/02/13 10:05 ID:??? AAS
>347
えっと、カートの中身が複数だった場合商品によって、格納されているファイルがそれぞれ違うので
まずforeachとかで順にカートの中身を取り出しながら商品の格納されているファイルを、検索(hidenでファイル名を渡してある)して、見つかったファイル名をまたforeachなりwhileなりで
検索して、商品名がマッチしたら在庫数と注文数を比較、それで0か足りない場合は
エラー、もし大丈夫なら、在庫数から注文数を引いて、ファイルに書き直し・・・・
みたいな事をやらなければダメな気がするんですが・・・
349: 297 02/02/13 12:22 ID:??? AAS
@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{"ファイル名::商品番号"}?)に
省20
350(1): 297 02/02/13 18:52 ID:??? AAS
AA省
351: 無謀者 02/02/14 15:56 ID:??? AAS
>>350=297さん
いつもありがとうございます。
せっかく、頂いたんですが、違う方法で実装できました。
次は「在庫がありません」だけではちょっと不親切なので「在庫が無いので買物カゴから削除しました」
と「在庫が足りないので$cyumon個を$zeiko個に変更しました」と表示して
カートの中身を書き換える機能を作成中です。一度に商品ファイルとカートファイルを
の二つをハンドルするので、ループ中の何処で、書き込んで、何処でテンポラリーファイルを
リネームするのかが、書いててわからなくなる・・・・(苦笑
スクリプト一行書くごとに、print"処理結果" and exit;で出力内容を確認しながら
進めてます
352: 無謀者 02/02/15 00:25 ID:??? AAS
買物を途中で止められた場合、datファイルが残ってしまっているので、それを
定期的に消したいんですが、たとえば最終更新時間から$time以上経過したら
削除させるのって
@files=glob("./cart/*.dat");
foreach(@files){
@info=stat $_;
$deltime=time-60*60*$time
if ($info[9] >$deltime){
unlink $_;
}
省5
353: 無謀者 02/02/15 00:39 ID:??? AAS
なんか誤字だらけ・・・
×入らないファイルが消える
○要らないファイルが消える
354: 297 02/02/15 01:39 ID:??? AAS
おお、自力で実装できたか。ガンガン腕を上げていますね。
あとは欲張って機能拡張しすぎてスパゲッティにならんようにね。
statで得られるのはtimeとおなじ*1970年からの*通算秒だよ。
最終更新からの経過だけ調べるだけなら、ファイルテスト演算子-Mで
最終更新からの*経過日数*が得られるよ。
foreach(glob("./cart/*.dat")){
unlink if -M $_ > $time; # $timeは日数、0.5なら12時間
}
とか。
355: 無謀者 02/02/16 01:32 ID:??? AAS
画像のアップロードって、難しいですね・・・・
356(2): 名無しさん@お腹いっぱい。 02/02/16 15:01 ID:BlI0w0O/(1/2) AAS
大人のCGI(書籍)
外部リンク[html]:www.byakuya-shobo.co.jp
あたり読んで、パクれ。
今のお前ならもうこの本のスクリプトを解析、応用できるはずだ。
357: 無謀者 02/02/16 16:40 ID:??? AAS
持ってたりします・・・>大人のCGI
実は他でソースパクってUpload.cgi作ったら動いた事は動いたんですが
それを、admin.cgiにサブルーチンとして埋め込むと動かなくなります。
そのソースは、CGI.pm使ってたんですが、enctype="multipart/form-data" で受け取ったデータを
ReadParseかけちゃってるのが問題なのかな?とか思ってたりするんですが、関係あります?
358: 名無しさん@お腹いっぱい。 02/02/16 17:51 ID:BlI0w0O/(2/2) AAS
そこだ。ファイルデータは生で扱え。
その動いたっちゅうUpload.cgiで、どこをパースしてどこを生で扱っているか
解析してみるのだ。この件に関して間違いのない文書はRFC1867。
359: 無謀者 02/02/16 19:24 ID:??? AAS
ちょっと、頭の中がテンパって来たので、気分転換で、管理画面のUIを整理しました。
外部リンク[htm]:cgitest.s7.xrea.com
各画面から必要なページに戻れるようにボタンをつけました。
あと、新規ページ作成時と、デザイン変更時に作成結果(変更結果)が確認できるようにしました。
360: 名無しさん@お腹いっぱい。 [ ] 02/02/16 20:34 ID:??? AAS
うぷろだでわかんないってどの辺?よかったら書いてみ
361: 無謀者 02/02/16 22:34 ID:??? AAS
なんか、今日xreaが調子悪くないですが?
私のPCのせいだろうか・・・・
362: 名無しさん@お腹いっぱい。 02/02/17 01:51 ID:??? AAS
しかし、1/10に
> Perlも、いやプログラミングさえ未経験。「必ずわかるCGI」と
> その他の入門書で何とか「掲示板」の仕組みがようやく理解できました。
んな事書いてた>>1が一ヶ月でここまで来るとは正直予想できなかった。
363: 名無しさん@お腹いっぱい。 02/02/17 09:32 ID:??? AAS
マジすごい! 無謀者さん
素直に感動しました
364: 名無しさん@お腹いっぱい。 02/02/17 10:54 ID:FSHvXFjS(1) AAS
俺モジュール使え無い。つまり1にいつの間にか越された。ウツウツウツウツウツウツ。。
365(2): 名無しさん@お腹いっぱい。 02/02/17 11:14 ID:??? AAS
>356
そんなクソ本を紹介すんな。
誤字脱字だらけ&ヘタレすぎ。立ち読みしてて叩きつけたくなった。
366: 名無しさん@お腹いっぱい。 02/02/17 11:50 ID:??? AAS
>>365
マジっすか??
近くの書店で注文しましたが・・・・
367: 356 02/02/17 11:53 ID:S4ml9rOy(1) AAS
>>365
あれがクソ本だと言うのは構わないから、具体的にどのあたりのコードがヤバいとか、
他にいい本や資料、URIがあったら教えてやってくれ。
実践的で単機能のコードの量、カバーするCGIの範囲では間違いなく現在トップ
クラスの良書だ。
368: 名無しさん@お腹いっぱい。 02/02/17 12:47 ID:??? AAS
O'REILLYが出してる本ならまず間違いない・・・・・・高い&重いけど。
369: 無謀者 02/02/17 13:13 ID:??? AAS
久々にレスが沢山ついててちょっとビクーリ
さて、アプロダの件なんですが、今まではスクリプトの頭で
ReadParseかけちゃってて、multipart/form-data使うには
それがまずそう、というヒントを頂いたんですが、いまさら
ReadPaeseの前に
use CGI;
$query = new CGI;
$images=$query->param('gazou');
if ($images ne ""){
#処理
省5
370: 無謀者 02/02/17 13:15 ID:??? AAS
また、日本語がおかしい・・・
×というヒントを頂いたんですが、いまさら
○というヒントを頂いたんですが、いまさらReadParse止められないので。
371: 名無しさん@お腹いっぱい。 02/02/17 15:58 ID:??? AAS
それだと後ろの&ReadPaeseがコケる。POSTデータをCGI.pmが先に拾って
まうんやないかな。そんな妙なコード組んだことないから、いざやったら
出来てしまうんかも知れへんけど。
もうこの際CGI.pmで逝きゃええやんと思ふ(書き直しも大した手間じゃない)
けど、まぁ何にせよcgi-lib.plで逝くと決めたんやから、動くコードが落ちて
たからといって場当たりで手を広げるもんやない。
cgi-lib.plを用いたファイルアップロードのサンプル
外部リンク[html]:cgi-lib.berkeley.edu
と、そのソースや。
外部リンク[txt]:cgi-lib.berkeley.edu
省1
372: 名無しさん@お腹いっぱい。 02/02/18 07:41 ID:THrW4CtS(1) AAS
>>1
ここにCGI.pmのサンプルあり。
外部リンク[html]:www.harukaze.net
373: 無謀者 02/02/18 12:04 ID:??? AAS
あぷろだはいまだ研究中で未実装ですが、今までずっと気になっていた
「同じ商品を買い足した場合」の処理を変更しました。
これで、あとはアプロダさえ実装できればほぼ完成かと・・・
374(1): 無謀者 [age] 02/02/20 16:42 ID:??? AAS
ようやくアプロダ実装完了しました・・・
商品画像、ページ背景画像、ページバナー、それぞれあぷろど可能です。
但し、実サイズで表示されますので、あまり大きい画像は・・・・・
というわけで久々にageさせていただきます。
ページメニュー
外部リンク[cgi]:cgitest.s7.xrea.com
管理ログイン画面 pass=123
外部リンク[htm]:cgitest.s7.xrea.com
375: 名無しさん@お腹いっぱい。 [sage ] 02/02/20 16:51 ID:??? AAS
>374
トラフグ100円だったら買うよ。
376: 名無しさん@お腹いっぱい。 [sage ] 02/02/20 16:53 ID:??? AAS
いいかんじかな?
買い物かごの中をみる、を選択したときに、中身がある場合は常に
「精算する」というか、買い物フェーズに行くボタンが必要かなと思うけど。
377: 名無しさん@お腹いっぱい。 [sage ] 02/02/20 16:58 ID:??? AAS
reply-to:ツ蟆・
この度はご注文ありがとうございます。このメールはご注文いただいた方に自動的に送信
される
確認メールです。追って店主よりご連絡致しますので、ご注文の内容をご確認の上、今し
ばらく
お待ちください
・・・メールが文字化けしているかな?
378: 名無しさん@お腹いっぱい。 02/02/20 23:11 ID:??? AAS
menu.cgiが吐くMETA
<meta http-equiv=content-type content=text/html; chaset=EUC-JP>
になってるけど、
<meta http-equiv="Content-Type" CONTENT="text/html; charset=EUC-JP">
とクオートせんとばけちゃうよ。スペース入ってるから・・・
あと、「買い物を続ける」のリンク色が背景に溶けこんでて見にくいな。
ま、いずれも小さなことだ。よくやったね!
379: 名無しさん@お腹いっぱい。 02/02/21 02:27 ID:??? AAS
ほんとよく頑張ったよね。
見習わなきゃと思いました。
380(1): 無謀者 [age] 02/02/23 19:41 ID:??? AAS
ページ作成時に既存の画像ファイルを使えるようにアプロダ以外にファイル名指定
を可能にしました。また、商品やページを書き換える際に画像を削除できなかったので
(てかそうしちゃうと弊害もありそうなので)画像管理用のメニューを用意して
必要無い画像ファイルを削除するプログラムを追加しました。
ひとまずこれで「完成」という事にさせていただこうかと思います。(V1.00)
ファイル名を変えたのでアクセス用URL変更になりました
外部リンク[cgi]:cgitest.s7.xrea.com
パスワードは123です。
さて調子に乗ってCGIZooあたりにシェアで登録してみようか・・とか思ってるのですが・・・・
381: 厨房 02/02/23 19:44 ID:bztVw72v(1) AAS
顧客情報のファイルって、パーミッションを適切に設定しても覗けるんですか?
テキストじゃダメなんでしょうか。
上下前次1-新書関写板覧索設栞歴
あと 136 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.028s