商品選択画面表示のCGI
このプログラムでは2種類の処理を実行する。
前半では、注文の商品データを受け取った場合、その商品を買い物かごに追加し(クッキーに書き込み)、
後半では商品ページのHTMLをインターネットエクスプローラに送信する。

よって、データを受け取らない場合(始めてこのページを表示する時や、他のページから呼び出された場合)は、
ただ商品ページを表示し、「買い物かごに入れる」ボタンで呼び出された場合はデータを受け取るので、
クッキーに受け取った商品データの追加書き込みを行い、その後商品ページを表示する。

データの受け取りと商品の追加

(cart.cgiはここから)
#!/usr/local/bin/perl

require 'cgi-lib.pl';
require 'jcode.pl';

#データ取得
&ReadParse;

$shohin=$in{'shohin'};
$kazu=$in{'kazu'};

この部分では、今までのCGIの例ようにデータが渡された場合ReadParseを使って分割を実行する。

#クッキー読み込み(下に書いてあるサブルーチン利用)
&getCookie;

#買い物かごの商品数を$nに保存
$n=$COOKIE{'n'};
ここでは、買い物かごに商品がいくつ入っているかをクッキーから読み取る。
サブルーチンgetCookieを利用している。

#買い物かごに入れるボタンで実行されたか判断
if($kazu ne "")
{

#商品数を1つ増やす
$n++;

#クッキー書き込み

#買い物かごの全体の商品数
print "Set-Cookie: ";
print "n=$n\n";

#個別商品の名前と個数
print "Set-Cookie: ";
print "item$n=$shohin ::$kazu\n";
}

データを受け取った場合($kazuが空文字「""」でない場合)、
クッキーから読み取ったかごの中の商品数を1つ増やし($n++)、
その値を新しい商品の数として書き込み、
新しく受け取った商品データのクッキーへの書き込み(かごに追加)を実行する。

商品ページHTMLの表示

この部分はデータを受け取っても受け取らなくても実行され、
商品ページを表示するをインターネットエクスプローラに送信する。

#商品ページHTML作成
print < Content-type: text/html

<html><body>
<form action="cart.cgi" method="post">
スノーボード
<input type="hidden" name="shohin" value="スノーボード">
<br>注文個数<select name="kazu">
<option>1
<option>2
<option>3
<option>4
</select>

<input type=submit name="submit" value="カートに入れる"></form>

<form action="cart.cgi" method="post">
マウンテンバイク
<input type="hidden" name="shohin" value="マウンテンバイク">
<br>注文個数<select name="kazu">
<option>1
<option>2
<option>3
<option>4
</select>

<input type=submit name="submit" value="カートに入れる"></form>

<form action="printcart.cgi" method="post">
<input type=submit name="submit" value="カート確認"></form>
<br>クッキー:$ENV{'HTTP_COOKIE'}
<br>受け取ったデータ:$shohin $kazu
</body></html>
A
下から3,4行目は確認のためクッキーの内容と受け取ったデータを表示する部分で、
確認ができたらプログラムから削除してもよい。
また、「カートの確認」ボタンも作成しておき、
クリックされたら2の商品確認ページのCGIを呼び出し実行する。

#
# Cookieの値を読み出すサブルーチン
#
sub getCookie {
foreach $xx (split(/; /, $ENV{'HTTP_COOKIE'})) {
($name, $value) = split(/=/, $xx);
$COOKIE{$name} = $value;
}
}
#
これはクッキー読み込みのためのサブルーチンで、最後の方に記述しておく。
(cart.cgiはここまで)


(cart.cgiはここから)〜(cart.cgiはここまで)の
□の中のプログラムをcart.cgiというファイルで保存すると、
商品をかごにいれることができるページが完成する。