⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 order.cgi

📁 支持全流程的Perl+MySQL电子商务系统。完全公开代码。
💻 CGI
📖 第 1 页 / 共 2 页
字号:
	elsif ($FORM{'rec_address'} eq "") {$LIB->Error('没有地址');}
	elsif ($FORM{'rec_postcode'} eq "") {$LIB->Error('没有邮政编码');}
	elsif ($FORM{'rec_contact'} eq "") {$LIB->Error('没有联系电话');}
	elsif ($FORM{'rec_email'} eq "") {$LIB->Error('没有电子信箱');}
}

#用户验证
$sth=$LIB->MySQL_Query("select passwd,name,address,postcode,phone,email from userdata where id = '$FORM{'uid'}'");
$user_row = $sth->fetchrow_arrayref();
if (($LIB->crypt("$FORM{'pwd'}")) ne $user_row->[0]) {$LIB->Error("用户密码错误");}

my (@user_order,@user_count,@user_spec,$all_order_count);
if ($COOKIE{'order'} eq "") {	$LIB->Error("在没有订购商品的情况下是无法发送定单");}


###读出订购商品
@user_order=$LIB->Shopping("$COOKIE{'order'}");
@user_count=$LIB->Shopping("$COOKIE{'count'}");
@user_spec=$LIB->Shopping("$COOKIE{'spec'}");

###########调整
my $dm_pro_list=0;
my $i=0;
my $all_price=0;
for ($i=0;$i<=$#user_order ;$i++) {

my (@spec_desc,@spec,$spec_price,$pro_value);

	if ($user_order[$i] =~ /[0-9]/) {
		if ($user_spec[$i] eq 'NULL') {$user_spec[$i]="";}

		$sth=$LIB->MySQL_Query("select num,name,price,spec_desc,spec,pid from store where num = '$user_order[$i]'");
		$row = $sth->fetchrow_arrayref();

		if ($row->[3] ne "") {#在当产品有类型的情况下
			
			@spec_desc=$LIB->Str_spec($row->[3]);
			@spec=$LIB->Str_spec($row->[4]);


			for(my $fsc=0;$fsc<=$#spec;$fsc++) {

				#计算当前类型是否加价
				$spec_price=$spec[$fsc] if ($spec_desc[$fsc] eq $user_spec[$i]);
			}
		}

		#总加价(型号加价*附加费)
		$spec_price=$spec_price*$user_count[$i];

		#单总价(单种订购量*单价格)
		$pro_value=$user_count[$i]*$row->[2]+$spec_price;

		#计算总价(当前单种价+总价)
		$all_price=$all_price+$pro_value;
		
		#总数量(当前数量+单种数量)
		$all_order_count=$all_order_count+$user_count[$i];

		if ($row->[0] ne "") {
			$dbs{'pro_list'}{"$dm_pro_list"}={
				num		=>	$row->[0],
				name	=>	$row->[1],
				price	=>	$row->[2],
				pro_value	=>	$pro_value,
				spec_current	=>	$user_spec[$i],
				spec_price	=>	$spec_price,
				order_count => $user_count[$i],
				pid		=>	$row->[5],
			};
			$dm_pro_list++;
		}

	}
}

###########################
#格式化送货方式,与费用
#计算邮费
my (%send_man);
%send_man=&_count_postage($FORM{'rec_type'},$all_order_count);

my $pay_type_desc = $CON{parameter}{"pay_type$FORM{'pay_type'}"};

my ($rec_name,$rec_address,$rec_postcode,$rec_contact,$rec_email,$remark);

if ($FORM{'change_info'} eq '1') {
	$rec_name	=	$FORM{'rec_name'};
	$rec_address	=	$FORM{'rec_address'};
	$rec_postcode	=	$FORM{'rec_postcode'};
	$rec_contact	=	$FORM{'rec_contact'};
	$rec_email	=	$FORM{'rec_email'};
}
else {
	$rec_name	=	$user_row->[1];
	$rec_address	=	$user_row->[2];
	$rec_postcode	=	$user_row->[3];
	$rec_contact	=	$user_row->[4];
	$rec_email	=	$user_row->[5];
}
	$remark	=	$FORM{'remark'};

$text = {
	rec_type_value	=>	$send_man{'value'},
	rec_type_desc	=>	$send_man{'name'},
	rec_type		=>	$FORM{'rec_type'},
	all_price		=>	$all_price+$send_man{'value'},
	uid				=>	$FORM{'uid'},
	pwd				=>	$FORM{'pwd'},
	change_info		=>	$FORM{'change_info'},
	pay_type		=>	$FORM{'pay_type'},
	pay_type_desc	=>	$pay_type_desc,
	rec_name		=>	$rec_name,
	rec_address		=>	$rec_address,
	rec_postcode	=>	$rec_postcode,
	rec_contact		=>	$rec_contact,
	rec_email		=>	$rec_email,
	remark			=>	$FORM{'remark'},
	loop_pro_list	=>	$dm_pro_list-1,
	imgurl	=>	$CON{path}{webimg},
	cgiurl	=>	$CON{path}{cgiurl},
	
};

print $LIB->Parse("check_send_order.htm",$text,%dbs);
#MySQL Disconnect And The END
$LIB->MySQL_Disconnect();$LIB->exit();
}


##############################################################
#				定单发送程序(代码比较复杂)
sub do_send_order
{
my ($text,$rec_name,$sender_mailto,$rec_address,$rec_postcode,$rec_contact,$rec_email,$remark,$pay_type,$rec_type,$all_price);

#用户验证
$sth=$LIB->MySQL_Query("select passwd,name,address,postcode,phone,email from userdata where id = '$FORM{'uid'}'");
$row = $sth->fetchrow_arrayref();
if (($LIB->crypt("$FORM{'pwd'}")) ne $row->[0]) {$LIB->Error("用户密码错误");}

#检测是否按照系统用户的地址发货,还是按照重新输入的地址
if ($FORM{'change_info'} eq 'yes') {
	if ($FORM{'rec_name'} eq "") {$LIB->Error('没有收货人');}
	elsif ($FORM{'rec_address'} eq "") {$LIB->Error('没有地址');}
	elsif ($FORM{'rec_postcode'} eq "") {$LIB->Error('没有邮政编码');}
	elsif ($FORM{'rec_contact'} eq "") {$LIB->Error('没有联系电话');}
	elsif ($FORM{'rec_email'} eq "") {$LIB->Error('没有电子信箱');}
	$pay_type		=$LIB->MySQL_Quote("$FORM{'pay_type'}");
	$rec_type		=$LIB->MySQL_Quote("$FORM{'rec_type'}");
	$rec_name		=$LIB->MySQL_Quote("$FORM{'rec_name'}");
	$rec_address	=$LIB->MySQL_Quote("$FORM{'rec_address'}");
	$rec_postcode	=$LIB->MySQL_Quote("$FORM{'rec_postcode'}");
	$rec_contact	=$LIB->MySQL_Quote("$FORM{'rec_contact'}");
	$rec_email		=$LIB->MySQL_Quote("$FORM{'rec_email'}");
	$remark			=$LIB->MySQL_Quote("$FORM{'remark'}");
	$sender_mailto	=$FORM{'rec_email'};
}
else {
	$pay_type		=$LIB->MySQL_Quote("$FORM{'pay_type'}");
	$rec_type		=$LIB->MySQL_Quote("$FORM{'rec_type'}");
	$rec_name		=$LIB->MySQL_Quote("$row->[1]");
	$rec_address	=$LIB->MySQL_Quote("$row->[2]");
	$rec_postcode	=$LIB->MySQL_Quote("$row->[3]");
	$rec_contact	=$LIB->MySQL_Quote("$row->[4]");
	$rec_email		=$LIB->MySQL_Quote("$row->[5]");
	$sender_mailto	=$row->[5];
	$remark			=$LIB->MySQL_Quote("$FORM{'remark'}");
}

##########
#测试购物限制时间   	最后一次购物时间 > 当前时间-允许时间
my @dtime = $LIB->ReadTime(0);
my $grand_min = $dtime[1]-$CON{parameter}{shoplimit};
$grand_min = 0 if ($grand_min <= 0);

$sth=$LIB->MySQL_Query("select num from choosed where cretime > '$dtime[5]-$dtime[4]-$dtime[3] $dtime[2]:$grand_min:$dtime[0]' and choosed_name ='$FORM{'uid'}'");
$row = $sth->fetchrow_arrayref();
if ($row->[0] ne '') {$LIB->Error("请勿反复提交定单,请继续购物$CON{parameter}{shoplimit}分钟之后再提交定单");}

##########
#定单顺序号
$sth=$LIB->MySQL_Query("select num from choosed order by num desc limit 1");
$row = $sth->fetchrow_arrayref();
my $choosed_num = $row->[0]+1;

my (@user_order,@user_count,@user_spec,@spec_desc,@spec,$spec_price);
###读出订购商品
@user_order=$LIB->Shopping("$COOKIE{'order'}");
@user_count=$LIB->Shopping("$COOKIE{'count'}");
@user_spec=$LIB->Shopping("$COOKIE{'spec'}");

my $choosedpro_num;

#逐个将商品放如订购后产品数据表
for (my $for_pro=0;$for_pro<=$#user_order ;$for_pro++) {

	$user_count[$for_pro]=1 if ($user_count[$for_pro] =~ /[^0-9]/);#如果当前所订购产品数量不是0-9的字符就归0

##########
#产品订购表中的顺序号
	$sth=$LIB->MySQL_Query("select num from choosed_pro order by num desc limit 1");
	$row = $sth->fetchrow_arrayref();
	$choosedpro_num = $row->[0]+1;
#读出所订购产品的特性
	$sth=$LIB->MySQL_Query("select num,name,pid,price,spec_desc,spec,statmsg from store where num = '$user_order[$for_pro]'");
	$row = $sth->fetchrow_arrayref();
	if ($row->[0] ne '') {#有商品情况才记录

		if ($row->[4] ne "") {#在当产品有类型的情况下
			
			@spec_desc=$LIB->Str_spec($row->[4]);
			@spec=$LIB->Str_spec($row->[5]);

			for(my $fsc=0;$fsc<=$#spec;$fsc++) {
				#计算当前类型是否加价
				$spec_price=$spec[$fsc] if ($spec_desc[$fsc] eq $user_spec[$for_pro]);
			}
		}

		#记录数据
			$LIB->MySQL_Do("INSERT into choosed_pro(num,come_chose,pro_id,pro_name,pro_pid,pro_price,pro_count,spec,spec_desc,cretime,status)
						values('$choosedpro_num','$choosed_num','$row->[0]','$row->[1]','$row->[2]','$row->[3]','$user_count[$for_pro]','$spec_price','$user_spec[$for_pro]',sysdate(),'0')
						");
		#设置此商品已订购数量
			$LIB->MySQL_Do("UPDATE store SET choosed= choosed+$user_count[$for_pro] WHERE num='$row->[0]' AND pid='$row->[2]'");
	}

}

#将本定单的所有产品均读出
$all_price=0;
my $all_count=0;
$sth=$LIB->MySQL_Query("select pro_price,pro_count,spec from choosed_pro where come_chose = '$choosed_num'");
while ($row = $sth->fetchrow_arrayref()) {
	#计算所有订购商品的总价
	$all_price = $all_price + ($row->[0]+$row->[2])*$row->[1];
	$all_count = $all_count+$row->[1];
}

#计算邮费
my %send_man=&_count_postage($FORM{'rec_type'},$all_count);

#包含邮费的价格
$all_price=$all_price+$send_man{'value'};

$LIB->MySQL_Do("INSERT into choosed(num,cretime,all_price,gather,gather_desc,send,send_desc,choosed_name,pay_type,pay_channel,rec_type,rec_type_desc,rec_name,rec_address,rec_postcode,rec_contact,rec_email,remark)
				values('$choosed_num',sysdate(),'$all_price','0','','0','','$FORM{'uid'}',$pay_type,'',$rec_type,'$send_man{'name'}$send_man{'value'}',$rec_name,$rec_address,$rec_postcode,$rec_contact,$rec_email,$remark)
				");


#####格式化发给用户的邮件
my $mail_user = $LIB->Parse("mail2user.mlt",{
									username	=>	$FORM{'uid'},
									choosed_num	=>	$choosed_num,
									rec_type	=>	$send_man{'name'},
									all_price	=>	$all_price,
									pay_type	=>	$CON{parameter}{"pay_type$FORM{'pay_type'}"},
									company_address	=>	$CON{syscon}{company_address},
									company_postcode	=>	$CON{syscon}{company_postcode},
									company_recuser	=>	$CON{syscon}{company_recuser},
									cgiurl	=>	$CON{path}{cgiurl},
									webname	=>	$CON{syscon}{webname},
									weburl	=>	$CON{syscon}{weburl},
								});

&_sendmail($CON{syscon}{support_from},$CON{syscon}{support_replayto},$sender_mailto,"ieBUY确认信件",$mail_user);

#####格式化发给管理员的邮件
my $mail_sys = $LIB->Parse("mail2sys.mlt",{
									username	=>	$FORM{'uid'},
									choosed_num	=>	$choosed_num,
									all_price	=>	$all_price,
									all_count	=>	$all_count,
								});

&_sendmail($CON{syscon}{support_from},$CON{syscon}{support_replayto},$CON{syscon}{support_replayto},"ieBUY新定单",$mail_sys);

$text ={
	cgiurl		=>	$CON{path}{cgiurl},
	imgurl		=>	$CON{path}{webimg},
	all_count	=>	$all_count,
	all_price	=>	$all_price,
	pay_type_desc	=>	$CON{parameter}{"pay_type$FORM{'pay_type'}"},
	rec_type_desc	=>	$send_man{'name'},
	company_address	=>	$CON{syscon}{company_address},
	company_postcode	=>	$CON{syscon}{company_postcode},
	company_recuser	=>	$CON{syscon}{company_recuser},	
	choosed_num	=>	$choosed_num,
};

###
print ("Set-Cookie: order=; path=/\n");
print ("Set-Cookie: count=; path=/\n");
print ("Set-Cookie: spec=; path=/\n");

print $LIB->Parse("send_order_done.htm",$text);
#MySQL Disconnect And The END
$LIB->MySQL_Disconnect();$LIB->exit();
}


sub _sendmail
{
my ($from,$replay,$to,$subject,$text)=@_;

#SendMail System
 open( MAIL, "| $CON{path}{sendmail} -t" ) || die $LIB->Lost("不能给您发邮件");
 print MAIL "To: $to\n";
 print MAIL "From: $from\n";
 print MAIL "Reply-to: $replay\n";
 print MAIL "Subject: $subject\n\n";
 print MAIL "$text","\n\n";
 close MAIL;

return();
}


sub _count_postage
{
###########################
#目前支持两种,1为普通2为特快
my (%postage,$rec_type,$amount);
($rec_type,$amount)=@_;

	if ($amount > $CON{parameter}{"rec_num_type$rec_type"}) {
		$postage{'value'}=($amount-$CON{parameter}{"rec_num_type$rec_type"})*$CON{parameter}{"rec_addup_type$rec_type"}+$CON{parameter}{"rec_value_type$rec_type"};
	}
	else {
		$postage{'value'}=$CON{parameter}{"rec_value_type$rec_type"};
	}

	$postage{'name'}=$CON{parameter}{"rec_type$rec_type"};

return(%postage);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -