簡易ショッピングカート
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終了の合図。 |
*上の内容をこのまま複写しても動きません。何故なら、表示を見やすくする為コード中に全角スペースが入っているからです。実際にお使いになる時は、この点を修正してからサーバにアップして下さい。