[PHP 7.4.11] MySQLにCSVインポートする

### dbとテーブルの作成
mysql> create database myapp;
mysql> use myapp;
mysql> create table users(
-> id int primary key auto_increment,
-> name varchar(255),
-> sports varchar(255)
-> );

nameとsportsを入れたcsvファイル(users.csv)を作成します。

### pdoの確認
$ php -i|grep PDO
PDO
PDO support => enabled
PDO drivers => mysql, sqlite
PDO Driver for MySQL => enabled
PDO Driver for SQLite 3.x => enabled

### csv.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
ini_set('display_errors', 1);
 
try {
        $pdo = new PDO('mysql:host=localhost;dbname=myapp;charaset=utf8','root','****',
                array(PDO::ATTR_EMULATE_PREPARES => false));
    } catch (PDOException $e){
        exit('データベース接続失敗.'.$e->getMessage());
    }
 
$fp = fopen("users.csv", "r");
 
while(! feof($fp)){
    $csv = fgets($fp);
    $csv = trim($csv,'"');
    $csv = mb_convert_encoding($csv, "UTF-8", "utf-8");
    $csv = str_replace('"','',$csv);
    $csv_array = explode(",",$csv);
 
    $stmt = $pdo->prepare("INSERT INTO users(name, sports) VALUES(:name, :sports)");
 
    $stmt->bindParam(':name', $csv_array[0],PDO::PARAM_STR);
    $stmt->bindParam(':sports', $csv_array[1],PDO::PARAM_STR);
    $stmt->execute();
}
 
echo "insert done";

$ php csv.php
insert done

mysql> select * from users;
+—-+—————–+—————-+
| id | name | sports |
+—-+—————–+—————-+
| 1 | name | sports
|
| 2 | Efa Trujillo | Gynastics
|
| 3 | Erica Werner | Rowing
|
| 4 | Amin Guerrero | Wiffleball
|
| 5 | Abbie Bender | Rugby
|
| 6 | Kamron Mcneill | Surfing
|
| 7 | Arabella Sutton | Basketball
|
| 8 | Emily Kerr | Curling
|
| 9 | Connar Small | Ice skating
|
| 10 | Haidar Fletcher | Figure skating |
+—-+—————–+—————-+
10 rows in set (0.00 sec)

1行目からinsertされてしまうので、1行目は抜かす必要がありますね。

[CSS] スマホで見た時に、下固定のメニューを表示させたい

ヤフオクとかでもそうだが、SP表示の際に下に固定メニューを表示させたい。
イメージとしてはこんな感じ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="styles.css" type="text/css">
</head>
<body>
    <h1>Test</h1>
    <div id="sp-fixed-menu" class="for-sp">
        <ul>
            <li><a href="#">お買い得品</a></li>
            <li><a href="#">セール品</a></li>
            <li><a href="#">カート</a></li>
        </ul>
    </div>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#sp-fixed-menu {
    position: fixed;
    width: 100%;
    bottom: 0px;
    font-size: 0;
    opacity: 0.9;
    z-index: 99;
}
 
#sp-fixed-menu ul {
    display: flex;
    list-style: none;
    padding: 0;
    margin: 0;
    width: 100%;
}
 
#sp-fixed-menu li {
    justify-content: center;
    align-items: center;
    width: 50%;
    padding: 0;
    margin: 0;
    font-size: 14px;
    border-right: 1px solid #fff;
}
 
#sp-fixed-menu li:first-child {
    background: #38b435;
}
#sp-fixed-menu li:nth-child(2) {
    background: #38b435;
}
#sp-fixed-menu li:last-child{
   background: #f3a324;
}
 
#sp-fixed-menu li a {
    color: #fff;
    text-align: center;
    display: block;
    width: 100%;
    padding: 10px;
    padding-left: 0px;
}
 
/* spのみ表示 */
@media (min-width: 768px){
    .for-sp {
        display: none;
    }
}

OK
さーワイヤー書くか。
一日中ワイヤー書くと、疲労感が半端ないんだよなー。

[CSS] スクロールしても横固定のメニュー

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<header id="header"></header>
<main id="main">
    <h2>MAIN BLOCK</h2>
</main>
 
<aside id="sub">
    <h2>Menu</h2>
    <ul>
        <li>Subject</li>
        <li>Subject</li>
        <li>Subject</li>
        <li>Subject</li>
        <li>Subject</li>
    </ul>
    <h2>Menu</h2>
    <ul>
        <li>Subject</li>
        <li>Subject</li>
        <li>Subject</li>
        <li>Subject</li>
        <li>Subject</li>
    </ul>
    <h2>Menu</h2>
    <ul>
        <li>Subject</li>
        <li>Subject</li>
        <li>Subject</li>
        <li>Subject</li>
        <li>Subject</li>
    </ul>
</aside>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
body {
    margin: 0;
    padding: 0;
}
#header {
    box-sizing: border-box;
    background: #ccc;
    height: 50px;
}
#main {
    box-sizing: border-box;
    margin-left: 220px;
    padding: 20px 40px;
}
#sub {
    box-sizing: border-box;
    top: 50px;
    height: 100%;
    width: 220px;
    position: fixed;
    overflow: auto;
    background: #eee;
    padding: 20px;
}

OK, keep goin
出掛けよう

[jQuery] マウスのhoverで写真表示を変える

amazonの様にマウスでホバーするとメイン画像の表示を切り替えたい

hoverしたらメイン画像のsrcをreplaceする。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<body>
    <img src="img/item1.jpg" class="item" width="610px" height="420px"><br>
    <img id="item1" src="img/item1.jpg" width="200px" height="140px">
    <img id="item2"src="img/item2.jpg" width="200px" height="140px">
    <img id="item3" src="img/item3.jpg" width="200px" height="140px">
    <script
  integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc="
  crossorigin="anonymous"></script>
    <script>
        $('.item').each(function(){
            let img_off = $(this).attr('src');
            let img_on_2 = $(this).attr('src').replace('1', '2');
            let img_on_3 = $(this).attr('src').replace('1', '3');
 
            let item2 = document.getElementById('item2');
            let item3 = document.getElementById('item3');
            $(item2).hover(
                function(){
                    $('.item').attr('src', img_on_2);
                },
                function(){
                    $('.item').attr('src', img_off)
                });
            $(item3).hover(
                function(){
                    $('.item').attr('src', img_on_3);
                },
                function(){
                    $('.item').attr('src', img_off)
                });
        });
    </script>
 
</body>

ああ、これは作ってて面白いね。

[Vue.js]Selectの初期値をdataで渡す

注文数の個数の変更の箇所をinputではなく、selectにしたい

select文を作成して、vue.jsのdataでvalueをv-modelに渡せば良い

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<body>
    <div id="app">
        <form>
            <select v-model="selected_item">
                <?php for($i=0; $i<10; $i++){
                    echo "<option value='$i'>$i</option>";
                }
                ?>
            </select>
        </form>
    </div>
    <script>
 
        const num = 5;
 
        var vm = new Vue({
            el: '#app',
            data: {
                selected_item: num,
            }
        });
    </script>
 
</body>
</html>

ずーと悩んでたけど、割と簡単にできたな🔥🔥🔥

### Vueと言えばこの本

yahoo shoppingの買い物カゴの挙動とID

ヤフーショッピングの買い物カゴの挙動を調査する

### 商品詳細ページ


yahooも商品ID:523085をURLにしています。

https://store.shopping.yahoo.co.jp/insair-y/523085.html
https://store.shopping.yahoo.co.jp/${shopID}/${itemID}.html

vwitem:523085, vwcatalog:insair-y, vwquantity
addcartでカートに商品を入れている。

1
2
3
4
5
6
7
8
9
<form name="addCart" action="https://order.shopping.yahoo.co.jp/cgi-bin/cart-form" method="post" accept-charset="EUC-JP" onsubmit="return false;">
                             
                             
<input name="vwitem" type="hidden" value="523085">
<input name="vwcatalog" type="hidden" value="insair-y">
<input name=".autodone" type="hidden" value="https://store.shopping.yahoo.co.jp/insair-y/523085.html">
 
// 省略
<input name="vwquantity" type="text" value="1" class="elTextBox" maxlength="3" onclick="this.select(0, this.value.length);" data-updown-quantity-box="">

js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$(function() {
    YAHOO.JP.shp.common.getSeleptah.init({
        domain     : 'https://store.shopping.yahoo.co.jp',
        deviceType : 'pc',
        position   : 1,
        moduleNum  : 5,
        itemId     : 'insair-y_523085',
        pcatId     : '22664',
        genre      : '49495',
        brand      : '113',
        price      : 12000,
        service    : 'shp',
        targetId   : 'seleptahItems',
        apicrumb    : 'hogehoge',
        ruleBucketId : '',
    });
});

商品をカートに入れる

1
2
3
4
5
<p class="elWrpButton" id="cartbtn">
        <a href="javascript:void(0);" class="elCartButton elButton" data-ylk="sec:cartbtn;slk:addcart;pos:0;">
            <span>商品をカートに入れる</span>
        </a>
    </p>

Commerce21iframeJsの記載があり、Commerce21をベンダーに使っている様に見える。

### ショッピングカート

数量変更

1
2
3
<a href="javascript:void(0);" style="display:none;" id="afterBuy-insair-y-0" data-ylk="slk:buyltr;pos:1"></a>                                     <script>
                                        document.write('<ul class="elFunction"><li class="elLater"><label><input type="checkbox" name="chk-insair-y-0" value="サウンドバー スピーカー サウンドスピーカー テレビスピーカー スピーカー Bluetooth 壁掛け 高音質 HT-SB-115  ホームシアター アイリスオーヤマ"><span class="elLabel">後で注文する</span></label></li></ul>');
                                    </script>

削除

1
2
3
4
<script>
                        document.write('<input type="text" name="item_num-0" id="dcNum03hogehoge" maxlength="3" class="dcNum dcMeiryo" value="1" >\
                        <input type="submit"name="delete-293201139" value="削除" class="dcOrderDelete" id="dhogehoge" data-ylk="slk:delete;pos:1">');
                        </script>

js

1
item: [{name: "サウンドバー スピーカー サウンドスピーカー テレビスピーカー スピーカー Bluetooth 壁掛け 高音質 HT-SB-115  ホームシアター アイリスオーヤマ", id: "insair-y_523085", store_id: "insair-y", product_category: "22664", price: 12000, num: 1, sum_price: 12000, point: 120, rate_point: 1}]

商品詳細とカートの挙動は大枠は掴めたので次はテストコードと行きたい。

rakutenの買い物カゴの挙動とID

楽天の買い物カゴの挙動とIDの使われ方を調査する

### 商品詳細ページ

ソースを見ると、URLの”gcv1-bk-w”が商品IDで、”item_number”として全てのkeyになっている様に見える。
item_numberとは別にitem_id 10000201がある。
shop_idはintの6桁の数字

1
<input value="331955" type="hidden" name="shop_id"><input value="ネスプレッソ公式 楽天市場店" type="hidden" name="shop_name"><input value="10000201" type="hidden" name="item_id"><input value="【公式】ネスプレッソ カプセル式コーヒーメーカー ヴァーチュオ ネクスト C クラシックブラック GCV1-BK-W | コーヒーメーカー コーヒーマシン エスプレッソマシーン おしゃれ 一人暮らし 家庭用 本格 一人用 コーヒー カプセル お手入れ簡単 Nespresso" type="hidden" name="item_name"><input value="GCV1-BK-W" type="hidden" name="item_number"><input value="nespresso" type="hidden" name="shopurl"><input value="/nespresso/gcv1-bk-w/" type="hidden" name="pageurl">

買い物かごへのbutton
->
-> 数量はunitsで管理している。

1
2
3
4
5
6
<form method="post" id="purchaseForm" data-timesale-id="10000201" action="https://basket.step.rakuten.co.jp/rms/mall/bs/cartadd/set?l2-id=item_PC_SingleNormalItem">
// 省略
<td class="floatingCartPurchaseButtonsContainer"><span class="unit">個数&nbsp;
</span><input value="1" type="text" size="4" name="units" id="units" class="rItemUnits"><span class="floatingCartSplitButtons"><span class="floatingCartSplitButtons">
// 省略
<span class="cart-button-container"><button data-ratParam="all" data-ratId="fixed_add" data-ratEvent="pv,appear" class="cart-button add-cart new-cart-button "><span class="normal"><img src="https://r.r10s.jp/com/img/rms/storefront/pc/page/plussign_23x23.png"><span>商品をかごに追加</span></span></button>

__event、shop_bid(shopid), item_id, inventory_flagを送っている。

1
<input value="ES01_003_001" type="hidden" name="__event"><input value="331955" type="hidden" name="shop_bid"><input value="10000201" type="hidden" name="item_id"><input value="1" type="hidden" name="inventory_flag">

買い物カゴへの追加はページ遷移していないので、onClickイベントでJSでやっているっぽい。

### 買い物カゴのページ

数量変更

1
2
3
4
5
6
7
8
            <select id="units_hogehoge" class="change-units" name="units&#91;0&#93;" autocomplete="off">
 
 
                <option value="1"  selected>1</option>
<option value="2" >2</option>
<option value="3" >3</option>
<option value="4" >4</option>
<option value="5" >5</option>

削除

1
2
3
<span class="remove-button">
                <a href="#" id="cartdelete_331955_hogehoge" class="cart-delete ratCustomEvent" data-rat-key="ratcart" data-rat-val="delete_pc">削除</a>
            </span>

js

1
2
3
4
5
6
7
8
9
10
grp15_ias_prm = {
    rakuten_pid: 2,
    service: 'ICHIBA',
    page: 'cart',
    d: 'pc',
    shopid: ['331955'],
    itemid: ['nespresso:10000201'],
    genreid: ['565115'],
    itemname:
             // 省略

ratTag
-> shopIDとitemIDで管理している。
-> ItemGenreのIDもあり。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<form class="ratForm" name="ratForm" id="ratForm" style="display:none;">
        <input type="hidden" name="rat" id="ratAccountId" value="1">
        <input type="hidden" name="rat" id="ratServiceId" value="3">
        <input type="hidden" name="rat" id="ratPageLayout" value="pc">
        <input type="hidden" name="rat" id="ratSiteSection" value="checkout">
        <input type="hidden" name="rat" id="ratAdobeSiteSection" value="cart">
        <input type="hidden" name="rat" id="ratPageType" value="cart_modify">
        <input type="hidden" name="rat" id="ratPageName" value="step0_shopping_basket">
        <input type="hidden" name="rat" id="ratCheckout" value="">
        <input type="hidden" name="rat" id="ratItemId" value="331955/10000201">
        <input type="hidden" name="rat" id="ratPrice" value="25300">
        <input type="hidden" name="rat" id="ratItemCount" value="1">
        <input type="hidden" name="rat" id="ratItemGenre" value="565115">
        <input type="hidden" name="rat" id="ratItemTag" value="">
        <input type="hidden" name="rat" id="ratItemVariation" value="&#91;{}&#93;">
        <input type="hidden" name="rat" id="ratOrderId" value="">
        <input type="hidden" name="rat" id="ratCouponId" value="">
        <input type="hidden" name="rat" id="ratCouponPrice" value="">
        <input type="hidden" name="rat" id="ratPointPrice" value="">
        <input type="hidden" name="rat" id="ratShippingFee" value="">
        <input type="hidden" name="rat" id="ratOrderList" value="">
        <input type="hidden" name="rat" id="ratTotalPrice" value="">
        <input type="hidden" name="rat" id="ratItemCountOrder" value="">
        <input type="hidden" name="rat" id="ratCvEvent" value="{'cart_go_checkout':1, 'cart_add':0}">
        <input type="hidden" name="rat" id="ratShopUrlList" value="nespresso">
        <input type="hidden" name="rat" id="ratCustomParameters" value="{'cart_type':'cart_view', 'display_of_card_packaged_registration':'0', 'asuraku_item_flg':'0', 'deal_item_flg':'1', 'rba_item_flg':'0', 'rba_order_flg':'', 'set_deliverydate':''}">

いやーこれ結構大変だなー

amazonの買い物カゴの挙動を見よう

amazonの買い物カゴで、IDをどう使っているのか調査する

### amazon

カートに入れるbuttonがinput type=”submit”としています。

1
2
3
<span class="a-declarative" data-action="dp-pre-atc-declarative" data-dp-pre-atc-declarative="{}" id="atc-declarative">
<span id="submit.add-to-cart" class="a-button a-spacing-small a-button-primary a-button-icon"><span class="a-button-inner"><i class="a-icon a-icon-cart"></i><input id="add-to-cart-button" name="submit.add-to-cart" title="カートに入れる" data-hover="左から&lt;b&gt;__dims__&lt;/b&gt;を選択して&lt;br&gt;ショッピングカートに追加" class="a-button-input" type="submit" value="カートに入れる" aria-labelledby="submit.add-to-cart-announce"><span id="submit.add-to-cart-announce" class="a-button-text" aria-hidden="true">カートに入れる</span></span></span>
</span>

“a”:”B08C9R7MVT”,”quantity”:”1″と書いてあるので、恐らくB08C9R7MVTが商品IDではないかと思う。

1
2
<script type="a-state" data-a-state="{&quot;key&quot;:&quot;turbo-checkout-page-state&quot;}">{"turboWeblab":"RCX_CHECKOUT_TURBO_DESKTOP_NONPRIME_87784","strings":{"TURBO_CHECKOUT_HEADER":"今すぐ購入:ナパバレーの日本人醸造家 ハヤシワインズ 2015 パウロニア・カベルネソーヴィニヨン [カリフォルニア/赤ワイン/750ml]","TURBO_LOADING_TEXT":"注文内容を読み込み中"},"inputs":{"a":"B08C9R7MVT","quantity":"1","oid":"","addressId":""},"configurations":{"isSignInEnabled":true,"initiateSelector":"#buy-now-button","prefetchEnabled":true},"buttonID":"buy-now","eligibility":{"isEligible":false},"turboWeblabTreatment":"T2","timeout":"5000"}</script>
</div>

商品ページのcookie

商品追加

やはり、”B08C9R7MVT”を渡しています。

1
2
3
<div id="huc-v2-order-row-item-B08C9R7MVT" data-asin="B08C9R7MVT" data-itemid="Ca5ba925d-a3ea-4f29-b288-38f3bfe04fe2" class="a-box a-box-thumbnail huc-middle-vertical huc-no-radius huc-v2-order-row-image-box huc-green-border huc-v2-order-row-item"><div class="a-box-inner">
    <img alt="" src="https://m.media-amazon.com/images/I/31j5L8Leq4L.jpg" class="huc-no-radius huc-v2-order-row-image huc-v2-table-col">
  </div></div>

ここで、Cookieを見ても、どの値が商品のCookieかは不明

カートの編集ページ

数量変更
-> name=”quantity”としているので、quantityで管理している事がわかる。

1
2
3
4
5
6
7
<span class="a-dropdown-container"><label class="a-native-dropdown">数量:<span class='sc-offscreen-label' aria-label='数量'></span></label><select name="quantity" autocomplete="off" data-a-touch-header="数量" tabindex="0" data-action="a-dropdown-select" class="a-native-dropdown a-declarative">
             
             
                <option value="0" data-a-css-class="quantity-option">
                    0 (削除)
                </option>
// quantity
1
2
3
4
5
6
7
8
<input name="submit.update-quantity.hogehoge38f3bfe04fe2"
       value="更新"
       data-action=""
       aria-label="更新"
       type="submit"
       class="a-color-link"/>
 
                    </span>

削除

1
2
3
4
5
6
7
<input name="submit.delete.hohoge"
       value="削除"
       data-action="delete"
       aria-label="削除 ナパバレーの日本人醸造家 ハヤシワインズ 2015 パウロニア・カベルネソーヴィニヨン &#91;カリフォルニア/赤ワイン/750ml]"
       type="submit"
       class="a-color-link"/>
            </span>

なるほど、商品カートは基本、商品IDとquantityで管理し、カートではquantity(数量)とdelete(削除)の機能があるって事がわかった。

[PHP7.4.11]セッション管理によるショッピングカート作成

ベタのphpでショッピングカートを作成して、仕組みを理解する事が目的

### セッションの扱い
1. 商品情報を表示するPHPファイルを用意する
2. カートに入れたデータはセッションのキーを商品IDに設定し、個数を代入
3. カートの中身を見る為のPHPファイル、カートの中身を一括削除する為のPHPファイルを用意する

### 機能要件
– カートに追加した商品は「追加ボタン」の代わりに「追加済み」とする
– カートには「変更」と「削除」の2種類のボタンを用意
– カートで表示する商品はIDではなく、商品名

### ページ一覧
– 商品一覧(list.php)
– 商品追加(create.php)
– カート(cart.php) ※カートの中身一覧を表示
– カートの中身全削除(delete.php)
※商品画像は img/*.png

list.php (商品一覧)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
    session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>商品一覧</h1>
    <a href="cart.php">カートを見る</a>
    <table style="text-align=center">
        <tr>
            <th>画像</th><th>商品</th><th>数量</th><th>ボタン</th>
        </tr>
        <form action="create.php" method="POST">
        <tr>
            <td><img src="img/rolex.png" width="50px" height="50px"></td>
            <td>ロレックス ROLEX 腕時計 サブマリーナデイト 16610T </td>
            <td>
                <select name="num">
                    <?php for($i=1;$i<10;$i++): ?>
                        <option value="<?php echo $i;?>"><?php echo $i;?></option>
                    <?php endfor; ?>
                </select>
            </td>
            <td>
                <input type="hidden" name="product" value="rolex_16610T">
                <?php if(isset($cart&#91;'rolex_16610T'&#93;)===true):?>
                    <p>追加済み</p>
                <?php else: ?>
                    <input type="submit" value="カートに入れる">
                <?php endif; ?>
            </td>
        </tr>
        </form>
        <form action="create.php" method="POST">
        <tr>
            <td><img src="img/omega.png" width="50px" height="50px"></td>
            <td>OMEGA SPEEDMASTER 腕時計 アナログ </td>
            <td>
                <select name="num">
                    <?php for($i=1;$i<10;$i++): ?>
                        <option value="<?php echo $i;?>"><?php echo $i;?></option>
                    <?php endfor; ?>
                </select>
            </td>
            <td>
                <input type="hidden" name="product" value="OMEGA_323-21-40-44-01-001">
                <?php if(isset($cart&#91;'OMEGA_323-21-40-44-01-001'&#93;)===true):?>
                    <p>追加済み</p>
                <?php else: ?>
                    <input type="submit" value="カートに入れる">
                <?php endif; ?>
            </td>
        </tr>
        </form>
    </table>
</body>
</html>


うん、何となくイメージ通り

create.php(商品追加)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
    session_start();
    // POSTデータをカート用のセッションに保存
    if($_SERVER&#91;'REQUEST_METHOHD'&#93;==='POST'){
        $product=$_POST&#91;'product'&#93;;
        $num=$_POST&#91;'num'&#93;;
        $_SESSION&#91;'cart'&#93;&#91;$product&#93;=$num;
    }
    $cart=array();
    if(isset($_SESSION&#91;'cart'&#93;)){
        $cart=$_SESSION&#91;'cart'&#93;;
    }
    var_dump($cart);
?>


OK ちゃんと渡されています。
※amazonだと、カートに入れると、「追加されました」ってページに遷移
※rakutenの場合はポップアップで「商品かごに追加しました」と表示して商品ページに戻る
※yahoo shoppingの場合は、「ショッピングカート一覧」に遷移

cart.php(カートの中身一覧)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
    session_start();
    $cart = array();
 
    if($_SERVER&#91;'REQUEST_METHOD'&#93;==='POST'){
        $product=$_POST&#91;'product'&#93;;
        $kind=$_POST&#91;'kind'&#93;;
        if($kind==='change'){
            $num=$_POST&#91;'num'&#93;;
            $_SESSION&#91;'cart'&#93;&#91;$product&#93;=$num;
        } elseif($kind==='delete'){
            unset($_SESSION&#91;'cart'&#93;&#91;$product&#93;);
        }
    }
    if(isset($_SESSION&#91;'cart'&#93;)){
        $cart=$_SESSION&#91;'cart'&#93;;
    }
    var_dump($_SESSION);
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Cart</title>
</head>
<body>
    <h1>ショッピングカート</h1>
    <p><a href="list.php">商品一覧へ</a></p>
    <p><a href="delete.php">カートを全て空に</a></p>
    <table style="text-align=center">
        <tr>
            <th>画像</th>
            <th>商品</th>
            <th>個数</th>
            <th>数量</th>
            <th>変更ボタン</th>
            <th>削除ボタン</th>
        </tr>
        <?php foreach($cart as $key=>$var):?>
        <tr>
            <td>
                <?php
                    switch($key){
                        case 'rolex_16610T':
                            echo '<img src="img/rolex.png" width="50px" height="50px">';
                            break;
                        case 'OMEGA_323-21-40-44-01-001';
                            echo '<img src="img/omega.png" width="50px" height="50px">'
                            break;
                    }
                    ?>
            </td>
            <td>
                <?php
                    switch($key){
                        case 'rolex_16610T':
                            echo 'ロレックス ROLEX 腕時計 サブマリーナデイト 16610T ';
                            break;
                        case 'OMEGA_323-21-40-44-01-001';
                            echo 'OMEGA SPEEDMASTER 腕時計 アナログ '
                            break;
                    }
                    ?>
            </td>
            <td>
                <?php echo $var; ?>
            </td>
            <form action="" method="POST">
            <td>
                <select name="num">
                    <?php for($i=1;$i<10;$i++): ?>
                        <option value="<?php echo $i;?>"><?php echo $i;?></option>
                    <?php endfor; ?>
                </select>
            </td>
            <td>
                <input type="hidden" name="kind" value="change">
                <input type="hidden" name="product" value="<?php echo $key;?>">
                <input type="submit" value="変更">
            </td>
            </form>
            <form action="" method="POST">
                <td>
                    <input type="hidden" name="kind" value="delete">
                    <input type="hidden" name="product" value="<?php echo $key;?>">
                    <input type="submit" value="削除">
                </td>
            </form>
        </tr>
    <?php endforeach; ?>
    </table>
 
</body>
</html>

各商品の数量変更、削除処理はcart.phpで行う

delete.php(中身全部削除)

1
2
3
4
5
6
7
8
9
10
11
<?php
    session_start();
    $session_name=session_name();
    $_SESSION=array();
    if(isset($_COOKIE&#91;$session_name&#93;)===true){
        setcookie($session_name,'',time()-3600);
    }
    session_destroy();
    header('Location:cart.php');
    exit;
?>

OK, sessionで商品IDと商品数を管理していることを理解した。つまり、DB側で商品名、商品画像、料金などを持っておけば良さそう。
一応、amazon, rakuten, yahooがセッションをどう管理しているか見ておこうと思う。