KENT-WEB サポートコーナー 過去ログ [ 0493 ]


記事No: 2110
投稿日: 2007/11/10(Sat) 19:05:51
タイトルWEB MART 注文毎の通し番号を発行したい
ID情報: impresse
投稿者: TEN
URLhttp://www.japan-doll.jp/hina/kikue/test.html

■テストページ
http://www.japan-doll.jp/hina/kikue/test.html
■CGI
http://www.japan-doll.jp/cgi-bin/mart/mart.cgi


CGIのダウンロード・様々なサポート情報など、
いつもありがたく勉強させて頂いています。


今回 WEB MART を利用させて頂き商品購入ページを作成しているのですが、

アフェリエイト(A8.net)との連携を視野に入れ、
注文を管理する為、注文1件毎に
「注文番号」(通し番号や注文毎に発行されるランダムな文字列など)
を返信メールや購入画面に表示したいと考えています。


「注文日時=date」を代用できないかとも思ったのですが、
同時刻で複数の注文などの際に正しい管理が出来なくなる可能性があり、
なにか良い方法はないかと悩んでおります。


どうかアドバイスを宜しくお願い致します。


記事No: 2115
投稿日: 2007/11/11(Sun) 10:05:53
タイトルRe: WEB MART 注文毎の通し番号を発行したい
ID情報: fuyuki
投稿者: BAL
URLhttp://f43.aaa.livedoor.jp/~sumure/

> 「注文日時=date」を代用できないかとも思ったのですが、
> 同時刻で複数の注文などの際に正しい管理が出来なくなる可能性があり、
> なにか良い方法はないかと悩んでおります。
>
>
> どうかアドバイスを宜しくお願い致します。

$dateだと分単位ですので同時刻に複数の注文が入るかもしれません。秒単位にすれば重複の確率は限りなく0に近づき実用上問題ないと思います。

mart_order.cgi

#-------------------------------------------------
# 時間取得
#-------------------------------------------------
sub get_time {
local($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
local($date,$mdate,@w,@m);

@w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
@m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

# 日時をフォーマット
$date = sprintf("%04d/%02d/%02d(%s) %02d:%02d",
$year+1900,$mon+1,$mday,$w[$wday],$hour,$min);
#▼ここから▼
# 受注番号発行
$ord_no = sprintf("%02d%02d%02d%02d%02d%02d",
$year-100,$mon+1,$mday,$hour,$min,$sec);
#▲ここまで追加▲



#-------------------------------------------------
# 注文送信 (Step3)
#-------------------------------------------------
-- 途中省略 --

$mbody .= "\n▼その他\n連絡事項 : $in{'memo'}\n\n";
$mbody .= "----------------------------------------------------------------------\n";
$mbody .= "注文番号 = $ord_no\n"; ## ←追加
$mbody .= "注文日時 = $date\n";
$mbody .= "ホスト名 = $host\n";
$mbody .= "ブラウザ = $ENV{'HTTP_USER_AGENT'}\n";
$mbody .= "----------------------------------------------------------------------\n";


記事No: 2116
投稿日: 2007/11/11(Sun) 11:46:31
タイトルRe^2: WEB MART 注文毎の通し番号を発行したい
ID情報: impresse
投稿者: TEN
URLhttp://www.japan-doll.jp/hina/kikue/test.html


> $dateだと分単位ですので同時刻に複数の注文が入るかもしれません。秒単位にすれば重複の確率は限りなく0に近づき実用上問題ないと思います。


早速のご返答・現実的なカスタマイズのご教授、本当に有難う御座います。


まずは感謝と、そして説明不足を謝らせて下さい。



実はアフェリエイト(A8.net)よりタイムスタンプ以外の通し番号を用意する様に!
と指示をされてしまっているのが現状です。

可能でしたら時間以外の方法で注文毎の個別の文字列を発行したいのです。

注文毎に加算されていく通し番号で無くとも、
ランダムな文字列などでも構いません。



とても的確なカスタム案をお教え頂いたのに申し訳ありませんが、
タイムスタンプ以外で何か良い方法は無いでしょうか?

どうぞ宜しくお願い致します。


記事No: 2119
投稿日: 2007/11/11(Sun) 13:51:56
タイトルRe^3: WEB MART 注文毎の通し番号を発行したい
ID情報: fuyuki
投稿者: BAL
URLhttp://f43.aaa.livedoor.jp/~sumure/

>
> > $dateだと分単位ですので同時刻に複数の注文が入るかもしれません。秒単位にすれば重複の確率は限りなく0に近づき実用上問題ないと思います。
>
>
> 早速のご返答・現実的なカスタマイズのご教授、本当に有難う御座います。
>
>
> まずは感謝と、そして説明不足を謝らせて下さい。
>
>
>
> 実はアフェリエイト(A8.net)よりタイムスタンプ以外の通し番号を用意する様に!
> と指示をされてしまっているのが現状です。
>
> 可能でしたら時間以外の方法で注文毎の個別の文字列を発行したいのです。
>
> 注文毎に加算されていく通し番号で無くとも、
> ランダムな文字列などでも構いません。
>
>
>
> とても的確なカスタム案をお教え頂いたのに申し訳ありませんが、
> タイムスタンプ以外で何か良い方法は無いでしょうか?
>
> どうぞ宜しくお願い致します。

過去ログを参考にして考えて見てください。

http://www.kent-web.com/support/old/64/0437.html


記事No: 2134
投稿日: 2007/11/12(Mon) 12:23:50
タイトルRe^4: WEB MART 注文毎の通し番号を発行したい
ID情報: impresse
投稿者: TEN
URLhttp://www.japan-doll.jp/hina/kikue/test.html

> 過去ログを参考にして考えて見てください。
>
> http://www.kent-web.com/support/old/64/0437.html

過去ログの中にあったのですか・・・
大変失礼致しました・・・



[1221] Re^8: 注文番号を付与したいのですが・・・ 投稿者:BAL 投稿日:06/02-10:37

っえ!!

通し番号の付与方法って!!
コレですコレ!!

しかもBAL様なんですね!


「ここまで教えてくれているのであれば、後は自力で何とかするぞ!!」
と思って昨日からやってみているのですが

何度やり直してみても吐き出される物が
<INPUT TYPE=hidden NAME=order_no VALUE=-000001>
となってしまいます。

何か考えられる原因はありますでしょうか?



「頭を冷やして朝からやり直しだ!!」
と今朝から何度かやり直してみても同じ状況になってしまい。

お恥ずかしながら、再度ご質問させて下さい。

テキスト形式でアップし見て頂けたらとも思ったのですが
確認して頂くのに必要な部分が解らずまずは状況を説明させて頂きます。




下記4点の作業は行いました。
 mart_order.cgi へ2箇所の追加
 mart_init.cgiの基本設定への追加
 no.datというファイルを作成して転送。
 受注番号部分の記載


記事No: 2151
投稿日: 2007/11/12(Mon) 18:06:08
タイトルRe^5: WEB MART 注文毎の通し番号を発行したい
ID情報: fuyuki
投稿者: BAL
URLhttp://f43.aaa.livedoor.jp/~sumure/

> 何度やり直してみても吐き出される物が
> <INPUT TYPE=hidden NAME=order_no VALUE=-000001>
> となってしまいます。
>
> 何か考えられる原因はありますでしょうか?

参照先の過去ログはクロネコ@ペイメントに注文番号を送信する方法です。
メールに表示するには以下で。

#-------------------------------------------------
# 注文送信 (Step3)
#-------------------------------------------------
-- 途中省略 --

$mbody .= "\n▼その他\n連絡事項 : $in{'memo'}\n\n";
$mbody .= "----------------------------------------------------------------------\n";
$mbody .= "注文番号 = $num1\n"; ## ←追加
$mbody .= "注文日時 = $date\n";
$mbody .= "ホスト名 = $host\n";
$mbody .= "ブラウザ = $ENV{'HTTP_USER_AGENT'}\n";
$mbody .= "----------------------------------------------------------------------\n";


記事No: 2159
投稿日: 2007/11/13(Tue) 11:10:58
タイトルRe^6: WEB MART 注文毎の通し番号を発行したい
ID情報: impresse
投稿者: TEN
URLhttp://www.japan-doll.jp/hina/kikue/test.html

> メールに表示するには以下で。
>
> #-------------------------------------------------
> # 注文送信 (Step3)
> #-------------------------------------------------
> -- 途中省略 --
>
> $mbody .= "\n▼その他\n連絡事項 : $in{'memo'}\n\n";
> $mbody .= "----------------------------------------------------------------------\n";
> $mbody .= "注文番号 = $num1\n"; ## ←追加
> $mbody .= "注文日時 = $date\n";
> $mbody .= "ホスト名 = $host\n";
> $mbody .= "ブラウザ = $ENV{'HTTP_USER_AGENT'}\n";
> $mbody .= "----------------------------------------------------------------------\n";
>

説明不足でしたね・・・

申し訳ありません。

今私がぶつかっている問題点は
$num1の結果が変動しないという物です。

何回注文をしても000001となってしまい、
000002
000003
と変化してくれないのです。

no.datの属性も666としているのですが・・・

以下参考になるか解りませんが、
no.datの内容をテキストにてUPします。

2007/11/13(Tue) 11:02-000001<>
2007/11/13(Tue) 11:02-000001<>
2007/11/12(Mon) 11:36-000001<>
2007/11/11(Sun) 19:29-000001<>
2007/11/11(Sun) 19:11-000001<>


どうぞ宜しくお願いします。


記事No: 2160
投稿日: 2007/11/13(Tue) 17:54:01
タイトルRe^7: WEB MART 注文毎の通し番号を発行したい
ID情報: fuyuki
投稿者: BAL
URLhttp://f43.aaa.livedoor.jp/~sumure/

> > メールに表示するには以下で。
> >
> > #-------------------------------------------------
> > # 注文送信 (Step3)
> > #-------------------------------------------------
> > -- 途中省略 --
> >
> > $mbody .= "\n▼その他\n連絡事項 : $in{'memo'}\n\n";
> > $mbody .= "----------------------------------------------------------------------\n";
> > $mbody .= "注文番号 = $num1\n"; ## ←追加
> > $mbody .= "注文日時 = $date\n";
> > $mbody .= "ホスト名 = $host\n";
> > $mbody .= "ブラウザ = $ENV{'HTTP_USER_AGENT'}\n";
> > $mbody .= "----------------------------------------------------------------------\n";
> >
>
> 説明不足でしたね・・・
>
> 申し訳ありません。
>
> 今私がぶつかっている問題点は
> $num1の結果が変動しないという物です。
>
> 何回注文をしても000001となってしまい、
> 000002
> 000003
> と変化してくれないのです。
>
> no.datの属性も666としているのですが・・・
>
> 以下参考になるか解りませんが、
> no.datの内容をテキストにてUPします。
>
> 2007/11/13(Tue) 11:02-000001<>
> 2007/11/13(Tue) 11:02-000001<>
> 2007/11/12(Mon) 11:36-000001<>
> 2007/11/11(Sun) 19:29-000001<>
> 2007/11/11(Sun) 19:11-000001<>
>
>
> どうぞ宜しくお願いします。


通し番号だけでしたらもっと簡単な方法があります。過去ログの方は無視してください。

●mart_order.cgi

#-------------------------------------------------
# 注文送信 (Step3)
#-------------------------------------------------

-- 途中省略 --

# ホスト名及び時間を取得
&get_host;
($date,$mdate) = &get_time;
#▼ここから▼
open(IN,"$ordfile");
$count = <IN>;
close(IN);
($count, $dat) = split(/:/, $count);
$count++;
while (length($count) < 6) { $count = '0' . $count; } ## 番号の前に0を表示しない場合はこの行は不要
#▲ここまで追加▲
# メール題名を定義

-- 途中省略 --

$mbody .= "\n▼その他\n連絡事項 : $in{'memo'}\n\n";
$mbody .= "----------------------------------------------------------------------\n";
$mbody .= "注文日時 = $date\n";
$mbody .= "注文番号 = $count\n"; ## ←追加
$mbody .= "ホスト名 = $host\n";
$mbody .= "ブラウザ = $ENV{'HTTP_USER_AGENT'}\n";
$mbody .= "----------------------------------------------------------------------\n";

# sendmail起動
open(MAIL,"| $sendmail -t") || &error("メール送信失敗");
foreach ( split(/\n/, $mbody) ) {
&jcode'convert(*_, 'jis', 'sjis');
print MAIL $_, "\n";
}
close(MAIL);

# 買物情報のクッキー消去
print "Set-Cookie: $cookieID=; path=/;\n";

# 在庫調整
if ($stock) {
open(OUT,">$stkfile") || &error("Write Error: $stkfile");
while ( ($id,$zan) = each(%stock) ) {
print OUT "$id<>$zan<>\n";
}
close(OUT);

# ロック解除
&unlock if ($lockkey);
}
#▼ここから▼
open(DAT,"+< $ordfile") || &error("Open Error: $ordfile");
eval 'flock(DAT, 2);';
seek(DAT, 0, 0);
print DAT "$count\:$date";
truncate(DAT, tell(DAT));
close(DAT);
#▲ここまで追加▲

# 完了メッセージ表示開始



●mart_init.cgiの基本設定に以下追加

# 受注番号ログファイル
$ordfile = './no.dat';

no.datというファイルを作成して転送。


記事No: 2166
投稿日: 2007/11/13(Tue) 20:05:40
タイトルRe^8: WEB MART 注文毎の通し番号を発行したい
ID情報: impresse
投稿者: TEN
URLhttp://www.japan-doll.jp/hina/kikue/test.html

> 通し番号だけでしたらもっと簡単な方法があります。過去ログの方は無視してください。


出来ました!

完璧です!

まさに求めていた理想の形がコレです!!

本当に有難う御座います!



「KENT-WEB」や「KENT-WEBサポート掲示板」はいつも利用させて頂き、
助けて頂いているのですが、

掲示板への書き込みという物に抵抗があり、可能な限り自分で解決してきました。
 (「こんな質問するな!」とかって怒られたらどうしよう??とか・・・正直ビビッてました。)

掲示板への書き込みという物への抵抗も少し無くなった気がします!!
 (困ったら調べもしないでスグに質問しちゃお〜って意味じゃないですよ!!)
 (これからも最大限自力で解決出来る様に頑張ります!!)


最初から最後まで本当に丁寧に教えて頂き、
本当に有難う御座いました。


これからも頑張ってこの業界を盛り上げて下さいね!

私がお役に立てる事はあまり無いかと思いますが
影ながら応援させて頂きます。


[検索ページ]