簡易ショッピングカート

 PHPでとってもシンプルなショッピングカート・スクリプトを作って見ました。まだ商品別の削除機能などが実装できていませんが、ちょっとしたネットショップ・サイトには使えるかと思います。まあ、何しろこの手のスクリプトは処女作なもので…(^^ゞ

 処理の流れとしては、商品ページから送られて来たフォームデータをクッキー情報に書き込み、そのクッキー情報を元に後の一連の処理を行っています。システム的には本当に簡単です!

 尚、このスクリプトはクッキー機能を使っていますので、ブラウザのクッキーの読み込みを有効にしていないと使用出来ません。悪しからず_(._.)_

<?php PHP開始の合図。
//==================初期設定====================
$title = '簡易ショッピングカート';
$kago_img = './kago.gif'; //ショッピングカート画像。適当に!
$bg_color = '#fffbf0';
$back_img = ''; //バック画像。適当に!
$goback = './*****.htm'; //商品ページへのパス
$subject = '「PHPの小部屋」サンプルスクリプトより';
$to = '*****@***.**.jp'; //メール送信先
$taskrate = 0; //消費税率(%)。取らない時は0に設定する。
初期設定に必要なものを色々と設定しています。一応、消費税の設定も出来るようにしています。
//==================クッキー書き込み関数===================
function CookieSet(){
 global $value,$goods,$price,$amount;
 $value .= "$goods,$price,$amount&";
 setcookie("value","$value",time()+7*24*3600); //1週間で期限切れ
 HtmlHead();
 CookieView();
}
クッキーを書き込む為の関数CookieSet( )を作ります。

最初に
グローバル変数を設定している点に注意して下さい。

$valueの値は、各要素を「&」で結合して格納して行きます。

クッキーの書き込みは、必ずHTML出力前に行わなくてはいけません。
//==================クッキーリセット関数===================
function CookieReset(){
 global $value;
 setcookie("value"); //クッキー削除
 HtmlHead();
 print "<P ALIGN=CENTER><B>現在選択された商品はございません。</B></P><BODY></HTML>\n";
}
クッキーを一括削除する為の関数CookieReset( )を作ります。

最初に
グローバル変数を設定している点に注意して下さい。

PHPでは、
setcookie( )でクッキー名だけを引数にすると、この名前のクッキーがリモートクライアントから削除されます。
//==================HTMLヘッダー出力関数====================
function HtmlHead(){
 global $title,$bg_color,$back_img,$kago_img,$goback;
 print "<HTML><HEAD><TITLE>$title</TITLE></HEAD>\n";
 print "<BODY BGCOLOR=$bg_color BACKGROUND=$back_img LINK='red' VLINK='red'>\n";
 print "<CENTER><TABLE BORDER=0 CELLSPACING=1 WIDTH=84%>\n";
 print "<TR><TD WIDTH=24%><P ALIGN=RIGHT><IMG SRC=$kago_img WIDTH=70 HEIGHT=49 ALIGN=BOTTOM BORDER=0></TD>\n";
 print "<TD WIDTH=51% BGCOLOR=#FFCCFF><P ALIGN=CENTER><FONT SIZE=6>$title</FONT></TD>\n";
 print "<TD WIDTH=25%><IMG SRC=$kago_img WIDTH=70 HEIGHT=49 ALIGN=BOTTOM BORDER=0></TD></TR>\n";
 print "</TABLE></P>\n";
 print "<P>右のリンクで商品ページにお戻り下さい。<A HREF=$goback>商品ページへ</A></P></CENTER>\n";
}
クッキーの送信をHTML出力よりも先に行わなくてはいけない事から、この部分も関数化しました。関数名はHtmlHead( )です。

最初に
グローバル変数を設定している点に注意して下さい。
function CookieView(){
 global $value,$taskrate,$PHP_SELF;
 if($value != ""){
  $data = split("&", $value);
  $dcount = count($data);
  print "<CENTER><TABLE BORDER=1>\n";
  print "<TR><TH BGCOLOR=#ccffff>商品名</TH><TH BGCOLOR=#ccffff>価格</TH><TH BGCOLOR=#ccffff>数量</TH><TH BGCOLOR=#ccffff>小計</TH></TR>\n";
  for($i=0; $i<$dcount-1; $i++){
   list($dgoods,$dprice,$damount) = split(",", $data[$i]);
   $shoukei = (integer)$dprice * (integer)$damount;
   $goukei += $shoukei;
   print "<TR><TD>$dgoods</TD><TD>$dprice</TD><TD>$damount</TD><TD>$shoukei</TD></TR>\n";
  }
  print "<TR><TH><FORM ACTION=$PHP_SELF METHOD=POST>\n";
  print "<INPUT TYPE=HIDDEN NAME=action VALUE=reset>\n";
  print "<INPUT TYPE=SUBMIT VALUE=商品を選び直す/一括削除></TH></FORM>\n";
  print "<TH BGCOLOR=#ccffff COLSPAN=2>合計</TH><TH BGCOLOR=#ccffff>$goukei</TH></TR>\n";
  print "</TABLE><BR>\n";
  if($taskrate > 0){
   $task = (integer)$goukei * (integer)$taskrate / 100;
   $sougoukei = (integer)$goukei + (integer)$task;
   print "<CENTER><TABLE BORDER=1>\n";
   print "<TR><TH BGCOLOR=#ffffee>消費税</TH><TH BGCOLOR=#ffffee>総合計</TH></TR>\n";
   print "<TR><TD>$task</TD><TD>$sougoukei</TD></TR></TABLE><BR>\n";
  }
  print "ご注文がお決まりになりましたら、下の申込欄に必要事項をご記入の上、発注ボタンを押して下さい。\n";
  print "<FORM ACTION=$PHP_SELF METHOD=POST>\n";
  print "<INPUT TYPE=HIDDEN NAME=action VALUE=send>\n";
  if($taskrate > 0){
   print "<INPUT TYPE=HIDDEN NAME=sum VALUE=$sougoukei>\n";
  } else {
   print "<INPUT TYPE=HIDDEN NAME=sum VALUE=$goukei>\n";
  }
  print "<TABLE BORDER=1>\n";
  print "<TR><TD>お名前</TD><TD><INPUT TYPE=TEXT NAME=name SIZE=20> <FONT COLOR='red' SIZE=2>*必須!</FONT></TD>\n";
  print "<TR><TD>郵便番号</TD><TD><INPUT TYPE=TEXT NAME=pcode SIZE=20></FONT></TD>\n";
  print "<TR><TD>ご住所</TD><TD><INPUT TYPE=TEXT NAME=addr SIZE=50> <FONT COLOR='red' SIZE=2>*必須!</FONT></TD>\n";
  print "<TR><TD>電話番号</TD><TD><INPUT TYPE=TEXT NAME=tel SIZE=20></TD>\n";
  print "<TR><TD>E-mail</TD><TD><INPUT TYPE=TEXT NAME=email SIZE=30> <FONT COLOR='red' SIZE=2>*必須!</FONT></TD>\n";
  print "<TR><TD>一言どうぞ</TD><TD><TEXTAREA NAME=comment ROWS=5 COLS=50></TEXTAREA></TD></TABLE><BR>\n";
  print "<INPUT TYPE=SUBMIT VALUE=発注する> <INPUT TYPE=RESET VALUE=書き直す></FORM>\n";
  print "</CENTER></BODY></HTML>\n";
 } else {
  print "<P ALIGN=CENTER><B>現在選択された商品はございません。</B></P><BODY></HTML>\n";
 }
}
クッキー情報を表示する為の関数CookieView( )を作ります。

最初に
グローバル変数を設定している点に注意して下さい。

クッキー情報は変数
$valueで即取得出来ます。クッキーの値が存在するかどうかで、処理を分岐しています。クッキー情報が存在すれば、それらを一覧表示します。

一覧表示処理自体は、掲示板スクリプトと全く同じです。ループ処理を使っています。

まだ商品別の削除機能が実装できていないので、クッキーの一括削除用ボタンのみを付けています。

商品が選択されている場合は、商品一覧表の下に注文者の情報を入力するフォームも表示します。

商品情報に関しては、
TYPE指定をHIDDENにして必要な情報を送信しています。
//=======================メール送信処理関数===========================
function SendMail(){
 global $to,$subject,$taskrate,$value,$sum,$name,$pcode,$addr,$tel,$email,$comment;
 if(($name != "") && ($addr != "") && ($email != "")){
  $from = $email;
  $header = "From: $from";
  $data = split("&", $value);
  $dcount = count($data);
  $msg = "";
  for($i=0; $i<$dcount-1; $i++){
   list($dgoods,$dprice,$damount) = split(",", $data[$i]);
   $msg .= "ご注文 = $dgoods ( $dprice )× $damount\n";
  }
  if($taskrate != ""){ $msg .= "消費税率 = $taskrate %\n"; }
  $msg .= "合計 = $sum\n";
  $msg .= "お名前 = $name\n";
  if($pcode != ""){ $msg .= "郵便番号 = $pcode\n"; }
  $msg .= "ご住所 = $addr\n";
  if($tel != ""){ $msg .= "電話番号 = $tel\n"; }
  $msg .= "E-mail = $email\n";
  if($comment != ""){ $msg .= "一言どうぞ = $comment\n"; }
  if(mb_send_mail($to, $subject, $msg, $header)){
   setcookie("value"); //クッキー削除
   HtmlHead();
   print "<P ALIGN=CENTER><B>メールが無事送信されました(^o^)丿有難うございました。。</B></P></BODY></HTML>\n";
  } else {
   HtmlHead();
   print "<P ALIGN=CENTER><B>メールの送信に失敗しました(>_<)もう一度やり直して下さい。</B></P>\n";
   CookieView();
  }
 } else {
  HtmlHead();
  print "<P ALIGN=CENTER><B>必須事項が記入されていません。ブラウザの「戻る」で前のページに戻ってやり直して下さい。</B></P></BODY></HTML>\n";
 }
}
注文情報をメール送信する為の関数SendMail( )を作ります。

最初に
グローバル変数を設定している点に注意して下さい。

必須入力項目がちゃんと書き込まれているかどうかで、処理を分岐しています。

「ご注文」の値は、クッキー情報
$valueを分解して、それぞれ個別に変数$msgに格納しています。

メールの送信処理自体に関しては、「簡易フォームメール」のページを参考にして下さい。処理内容は一緒です。一応、メールが正常に送信できたかどうかで、処理を分岐しています。

メールが正常に送信できた場合は、次の注文処理の為に、まずクッキー情報を削除している点に注意して下さい。

メール送信に失敗した場合は、そのまま再度送信処理が行えるよう、関数
CookieView( )を呼び出しています。
//=======================メイン処理==========================
if($action == "regist"){ CookieSet(); }
elseif($action == "reset"){ CookieReset(); }
elseif($action == "send"){ SendMail(); }
else { HtmlHead(); CookieView(); }
メイン処理の部分です。最後の条件else{ }は、買い物カゴの中身を見るだけの時の処理に当たります。
?> PHP終了の合図。

 *上の内容をこのまま複写しても動きません。何故なら、表示を見やすくする為コード中に全角スペースが入っているからです。実際にお使いになる時は、この点を修正してからサーバにアップして下さい。

HOME