ホームページ > バックエンド開発 > PHPチュートリアル > 【勉強メモ】PHPショッピングカートを実装するセッション機構

【勉強メモ】PHPショッピングカートを実装するセッション機構

WBOY
リリース: 2016-06-13 12:53:41
オリジナル
938 人が閲覧しました

[研究ノート] セッションメカニズムは、PHP ショッピングカートを実装します。

セッションを使用するページには、システム内のセッションをクリアするためのセッション開始関数 session_start() が必要です。session_destroy() 関数を使用できます。 。

php.ini ファイルのセッション設定に関して: session.save_path はセッションを保存するパスを定義し、session.name は sessionID の名前を定義します。

以下は、コードをリストした演習の例です。

index.html ページ:

<html>
	<head>
		<title>商品分类列表</title>
	</head>
	<body>
		<a href="a.php">运动器材</a><br/>
		<a href="b.php">办公用品</a><br/>
		<a href="c.php">烟酒副食</a><br/>
		<a href="cart.php">查看购物车</a><br/>
	</body>
</html>
ログイン後にコピー

ファイル a.php ページ コード:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=GBK" http-equiv="Content-Type" />
<title>购物街</title>
</head>

<body bgcolor="#fff" text="#000" link="#f96" vlink="#f96" alink="#fc9">
	请选择商品<br />
	<form action="index.php" method="POST">
		<input type="checkbox" name="cart[ ]" value="篮球"/>篮球<br />
		<input type="checkbox" name="cart[ ]" value="排球"/>排球<br />
		<input type="checkbox" name="cart[ ]" value="足球"/>足球<br />
		<input type="checkbox" name="cart[ ]" value="桌球"/>桌球<br />
		<input type="checkbox" name="cart[ ]" value="气球"/>气球<br />
		<input type="submit" value="购买" />
		<input type="button" value="返回" onclick="location='index.php';" />
	</form>
</body>

</html>
ログイン後にコピー

ファイル b.php ページのコード:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>购物街</title>
</head>

<body bgcolor="#fff" text="#000" link="#f96" vlink="#f96" alink="#fc9">
	请选择商品<br />
	<form action="index.php" method="POST">
		<input type="checkbox" name="cart[]" value="铅笔"/>铅笔<br />
		<input type="checkbox" name="cart[]" value="钢笔"/>钢笔<br />
		<input type="checkbox" name="cart[]" value="圆珠笔"/>圆珠笔<br />
		<input type="checkbox" name="cart[]" value="电笔"/>电笔<br />
		<input type="checkbox" name="cart[]" value="自动笔"/>自动笔<br />
		<input type="submit" value="购买" />
		<input type="button" value="返回" onclick="location='index.php';" />
	</form>

</body>
</html>
ログイン後にコピー

ファイル c.php ページのコード:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>购物街</title>
</head>

<body bgcolor="#fff" text="#000" link="#f96" vlink="#f96" alink="#fc9">
	请选择商品<br />
	<form action="index.php" enctype="multipart/form-data" method="POST">
		<input type="checkbox" name="cart[]" value="猪肉"/>猪肉<br />
		<input type="checkbox" name="cart[]" value="牛肉"/>牛肉<br />
		<input type="checkbox" name="cart[]" value="中华香烟"/>中华香烟<br />
		<input type="checkbox" name="cart[]" value="长城葡萄酒"/>长城葡萄酒<br />
		<input type="checkbox" name="cart[]" value="金龙鱼花生油"/>金龙鱼花生油<br />
		<input type="submit" value="购买" />
		<input type="button" value="返回" onclick="location='index.php';" />
	</form>

</body>
</html>
ログイン後にコピー

Index.php データ処理ページ:

<?php

	//三个页面虽然显示内容不同,但是处理的php页面都是列表的index.php页面。处理页面会开启session功能,存储session的值。
	session_start();	//启用session
	if(!isset($_SESSION['cart'])){	//查看当前session中是否已经定义了购物车变量
		$_SESSION['cart'] = array();	//没有的话就新建一个变量,其值是一个空数组。 
		//session销毁之后变为空
	}

	if(isset($_POST['cart'])){		//是否是从商品页面提交过来的
		//如果是,则把提交来的商品加到购物车中
	//	$_SESSION['cart'] = array_merge($_SESSION['cart'],$_POST['cart']);

		//通过foreach遍历数组,把前台页面的值存储在session中。如果我们希望查看购物车,也就是查看session中存储的值。cart.php页面处理查看购物车
	//	foreach($_POST['cart'] as $c){
	//		$_SESSION['cart'][]=$c;
	//	}
	

		//定义关联数组,其键为商品名称,其值为商品数量。第一次买进的商品,其值为1
		for($i = 0; $i <count($_POST['cart']); $i++ ){
			$c = $_POST['cart'][$i];
			if(array_key_exists($c, $_SESSION['cart'])){
				$_SESSION['cart'][$c] = $_SESSION['cart'][$c] +1;
				//$_SESSION['cart'][$c]++;
			}else{
				$_SESSION['cart'][$c] = 1;
			}
			
		}
		
	}
	/*
	foreach (array_expression as $value)
		statement
	foreach (array_expression as $key => $value)
		statement
	*/

	if(isset($_POST['d'])){				//是否从购物车管理界面提交过来的
		foreach($_POST['d'] as $c){		//如果是,则将提交过来的商品序号从购物车数组中删除
			unset($_SESSION['cart'][$c]);
		}
	
	}

?>
<a href="a.php">运动器材</a><br/>
<a href="b.php">办公用品</a><br/>
<a href="c.php">烟酒副食</a><br/>
<a href="cart.php">查看购物车</a><br/>
ログイン後にコピー

ショッピング カート管理ページ cart.php。主に商品の削除とショッピング ページのキャンセルを実装します。

<form action="index.php" method="POST">
<?php
	session_start();			//重启session
	$cart = $_SESSION['cart'];	//得到购物车
	foreach($cart as $i=>$c){	//对购物车里的商品进行遍历
		//将商品的名字输出到页面上,每个商品前面对应一个多选框,其值是商品在购物车中的编号。
		//用d作为购物车管理界面中  购物车所有的商品,用于index.php页面撤销/删除某些商品的业务处理。
		echo "<input type='checkbox' value='$i' name='d[]' />".$i.' 数量:'.$c."<br />";
	}
?>
	<input type="submit" value="撤销购物" />
	<input type="button" value="返回" onclick="location='index.php';" />
</form>
ログイン後にコピー

ここで、PHPのフォームformにおけるenctype属性の設定に注目してください。

フォームの enctype 属性は、サーバーにデータを送信するときにブラウザーが使用するエンコード タイプを指定します。
以下は値の説明です:
multipart/form-data: フォーム データはメッセージとしてエンコードされ、ページ上の各コントロールはメッセージの一部に対応します。文字はエンコードされません。この値は、ファイル アップロード コントロールを含むフォームを使用する場合に必要です。 。
application/x-www-form-urlencoded: フォーム データは名前と値のペアとしてエンコードされます。これは標準のエンコード形式です。送信する前にすべての文字をエンコードします (デフォルト)。
text/plain: フォーム データは、コントロールや書式設定文字を含まないプレーン テキストとしてエンコードされます。スペースを「+」記号に変換しますが、特殊文字はエンコードされません。データ形式はパケット キャプチャで確認できます。

説明:

1) フォームにアップロードするファイルがある場合、アップロードされたファイルの MIME エンコードが匿名で行われるように、フォーム内の form タグで enctype="multipart/form-data" を設定する必要があります。デフォルトでは、フォームのエンコード形式は application/x-www-form-urlencoded であり、ファイルのアップロードには使用できません。

2) セッション処理を行う際、フォームが enctype="text/plain" に設定されている場合、$_POST、$_GET、$_REQUEST などで値を取得できません。これには気をつけてください! ! !

3 つのタイプの詳細については、実際の参照は次のとおりです。

enctype は、送信前にデータをどのようにフォーマットするかを定義します。2 つの正しい形式は、application/x-www-form-urlencoded (基本的に http ヘッダーを使用して key=valye&anotherkey=anothervalue として送信します) と multipart/form-data です。 (分割します text/plain は、何もする必要がないことを意味します。その動作は基本的にブラウザ間で定義されておらず、スパムが使用される前の時代には自動電子メール フォームにのみ使用されていました。フォーム URL コード化 テキストフォームの場合 (またはデフォルト設定を使用する場合はこれをそのままにします)、添付ファイルのアップロードの場合は multipart/form-data


テキスト/プレーン:


Content-Type: text/plain
================================================================================
foo=bar
baz=The first line.
The second line.
ログイン後にコピー

application/x-www-form-urlencoded:

マルチパート/フォームデータ:
Content-Type: application/x-www-form-urlencoded
================================================================================
foo=bar&baz=The+first+line.&#37;0D%0AThe+second+line.%0D%0A
ログイン後にコピー

最初の方法は、チェックされていない値を電子メール プログラムに直接渡す場合にどのように便利であるかがわかります (たとえば、フォームで mailto: アドレスが使用されている場合、送信には訪問者の電子メール プログラムを使用します)。しかし、プログラム的な用途にはほとんど役に立ちません。へのアクセス 実際のフォームベースのフォーム データには、下の 2 つの例のみが有効です。
Content-Type: multipart/form-data; boundary=---------------------------314911788813839
================================================================================
-----------------------------314911788813839
Content-Disposition: form-data; name="foo"

bar
-----------------------------314911788813839
Content-Disposition: form-data; name="baz"

The first line.
The second line.

-----------------------------314911788813839--
ログイン後にコピー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート