こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

複数のCGIを一括で動作させるには?

よろしくお願い致します。

現在ネットショッピングのホームページを制作しています。
ショッピングカートのお客様情報を入力するページにメールアドレス
を入力する項目があるのですが、この入力項目を利用して、別に用意
したメルマガ用CGIの登録も同時に行えないかと考えております。

メールアドレス■■■■■■■■■■■■■←入力フォーム
●メルマガを受け取る ●受け取らない

上記のようにフォームの下にラジオボタンを追加で付けて「受け取る」
を選択した場合、別に用意したメルマガ用CGIにデータを送りたいと
考えているのですが、ひとつの情報を複数のCGIへ送る場合、どのよう
にしたらよいのでしょうか?

また、お客様情報を送信した後はショッピングカートの送信完了画面
を表示させたいのですが、使用したいと考えているメルマガCGIは登録
完了画面が表示されるタイプのCGIなので、メルマガCGIはデータを受け
取った後は何も表示させないようにしたいと考えております。
この場合のメルマガCGIにはどのように書き込めばよいのでしょうか?

メルマガ用のCGIは http://www.netmania.jp/cgi/111.php のものを使
わせて頂こうと考えており、下記がメルマガCGIの登録部分の処理です。
--------------------------
sub readeradd {
if ($QUERY{mail} eq "" || $QUERY{'mail'} !~ /(.*)\@(.*)\.(.*)/) {&main("メールアドレスが未記入です");}
&readerload;
foreach $list (@readerlist) {
$newlist = $list;
$newlist =~ s/\n//g;
$newlist =~ s/\r//g;
if($newlist eq $QUERY{mail}){&main("メールアドレス $QUERY{mail} は既に登録済みです");}
}
$value = "$QUERY{mail}\n";
push(@readerlist,$value);
open(LOG,">$usrdata");
flock(LOG,2);
print LOG @readerlist;
flock(LOG,8);
close(LOG);
&main("メールアドレス $QUERY{mail} を登録しました<br>ご購読登録ありがとうございました");
--------------------------

説明が分かりにくくて申し訳ありません。
よろしければご教授下さいますようお願い致します。

投稿日時 - 2008-10-15 13:53:44

QNo.4403334

すぐに回答ほしいです

質問者が選んだベストアンサー

$FORM{'magazine'} が取得できていないのかも知れません。

$FORM{'magazine'}='メルマガを受け取る';
if($FORM{'magazine'} eq'メルマガを受け取る'){

としてテストしてみたらどうでしょう。

投稿日時 - 2008-10-19 14:25:10

お礼

okmotokun様

$FORM{'magazine'}

$FORM{'magazine'}='メルマガを受け取る';
if($FORM{'magazine'} eq'メルマガを受け取る'){

のように変更しましたら、無事list.datにアドレスを送ることができました!

知識のない私に最後までお付き合い下さり、本当に、本当にありがとうございました。

投稿日時 - 2008-10-19 14:52:40

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

list.datファイルに、注文者のメールアドレスは書き込まれていませんか。
書き込めないのでしたら、list.datファイルは書き込みできる属性になっていないのではありませんか。
open(LOG,"list.dat");
open(LOG,">>list.dat");
のところに、エラー処理を付けて確認してください。
open(LOG,">>list.txt"); とファイル名を変えてみて、ファイルが作られるかどうかも確認してください。

投稿日時 - 2008-10-19 11:41:13

補足

たびたびご回答ありがとうございます。
open(LOG,"list.dat"); → open(LOG,"list.txt");
open(LOG,">>list.dat"); → open(LOG,"list.txt");
へ変更して試してみたのですが、list.txtというファイルは作られていませんでした。

list.datは、「読み込み」「書き込み」ともに許可されています。
こちらのサーバーのパーミッションでは、「666」となっています。

本当にすみません。原因がお分かりになりますでしょうか?

投稿日時 - 2008-10-19 12:07:41

ANo.3

list.dat にパスが付いていませんが、このファイルはショッピングカートのCGIと同じフォルダにあるのですか。
別のフォルダにあるのなら、そのシステムパスを付けないと開けません。

投稿日時 - 2008-10-19 09:52:43

補足

ご回答ありがとうございます。
list.datはcart.cgiと同じフォルダに置いております。
list.datだけなく、メールマガジン関連のファイルをすべて
cart.cgiと同じフォルダに移動して試しているのですが..。

少なくとも私が試した手順に間違いはないようですか?
もしよろしければ、お教え頂けると幸いです。

投稿日時 - 2008-10-19 10:15:11

ANo.2

cart.cgi の Orderサブルーチンの最初に次のコードを書き加えれば良いと思います.

※ $FORM{'mailmaga'} はメルマガを受け取る、受け取らないのラジオボタンのnameに置き換えること
※ mailmaga_list はメルマガ読者登録ファイル名に置き換えること

if($FORM{'mailmaga'} eq'メルマガを受け取る'){
open(LOG,"mailmaga_list");
while(<LOG>){
chomp;
if($_ eq $FORM{'email'}){
my $match=1;
last;
}
}close LOG;
unless($match){
open(LOG,">>mailmaga_list");
print LOG "$FORM{'email'}\n";
close LOG;
}
}

投稿日時 - 2008-10-18 16:02:35

補足

ご回答頂きありがとうございます。
下記の手順で試してみたのですが、メールアドレスがメルマガCGIに届きませんでした。何か間違いがありますでしょうか?

< ※ $FORM{'mailmaga'} はメルマガを受け取る、受け取らないのラジオボタンのnameに置き換えること
magazineに変更しました。
< ※ mailmaga_list はメルマガ読者登録ファイル名に置き換えること
メールアドレスを格納しているのはlist.datだったので、list.datへと書き換えました。

cart.cgiの1429行目の「sub Order{」の直下にお教え頂いた下記のコードを加えました

●cart.cgiに加えたコード(抜粋)
-------------
sub Order{

if($FORM{'magazine'} eq'メルマガを受け取る'){
open(LOG,"list.dat");
while(<LOG>){
chomp;
if($_ eq $FORM{'email'}){
my $match=1;
last;
}
}close LOG;
unless($match){
open(LOG,">>list.dat");
print LOG "$FORM{'email'}\n";
close LOG;
}
}

my(
$chk_mailbody,$mailbody,
$tax,$date,@waweek,$sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst,
$date_d,$time_d,$total,$subtotal,$a_total,$postage_all,$infoline,
$count,$dai_charge,$subtotal_c,$total_c,$postage_all_c,$tax_c,$dai_name,
$pointnum,$dai_charge_c,$wrap_charge_c,
$tax_all,$odrID,$dum,$day,$y_f,$mon_f,$mday_f,$line,
$tday,$sec_f,$ref,$wari,$nop,$goods_all_ref,$goods_all_kessai_ref,
$wari_c,$subtotal_o,$subtotal_o_c,$hour_f
);
----------

enter.html(お客様情報を入力するページ)に下記のコードを加えました。

●enter.htmlに加えたコード(抜粋)
-------------
<tr>
<td bgcolor="#EBEBEB" class="pad">メールマガジンを受け取る<font color="#CC3300">*</font></td>
<td>
<input type="radio" name="magazine" value="メルマガを受け取る">受け取る<br />
<input type="radio" name="magazine" value="受け取らない">受け取らない<br />
</td>
</tr>

メールマガジン用のCGIとショッピングカートのCGIを同フォルダに置き試してみたところ、カートは問題なく動作するのですがメールマガジンの方にメールの情報が届きません。
私の知識が乏しいことでご迷惑をおかけしておりますが、よろしければ何が原因なのかお教え頂けませんでしょうか?

投稿日時 - 2008-10-18 18:06:52

ANo.1

期待されている回答ではないかもしれませんが、、、
そんな面倒なことしなくても、ショッピングカートの注文受け付けのルーチンに、メルマガ購読登録のコードを書き加えればいいんじゃないですか。

投稿日時 - 2008-10-15 15:36:57

補足

早速のご回答ありがとうございます。

ショッピングカートはhttp://www.cgipal.com/doc/cart.htm
一番上の「Cart Z ver.14」というものを使わせて頂こうかと
考えているのですが、どの部分にメルマガのコードを書き加え
れば良いのでしょうか?

CGIに全く明るくないもので、もし差し支えなければヒントだけ
でも頂けるととても助かります。

何卒よろしくお願い致します。

投稿日時 - 2008-10-15 22:28:47

あなたにオススメの質問