忍者ブログ

からすまる日誌

20200205pm02 session ショッピングカート

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

20200205pm02 session ショッピングカート

CTRL+SHIFT+I
ネットワーク
CTRL+R 
 
ECサイトは怖いらしい。うっかりおかねを取りすぎたりミスったら損害賠償になる。
先生は基本的に受けないらしい。お金のやり取りと個人情報のやり取りは気をつけましょう。
 

なんだかめちゃくちゃエラーが出ますね
getとpostを間違えていましたよ
 
ちなみにそこを間違えると当然何も出なかった。白紙!
 
ここまで
--->shop.php 
 
<!DOCTYPE html>
<html lang="ja">
 <head>
  <meta charset="UTF-8">
  <title>ショップページ</title>
  <link rel="stylesheet" href="shop.css">
 </head>
 <body>
  <h1>ショップページ</h1>
  <form action="cart.php" method="post">
   <dl>
   <dt>Tシャツ</dt>
   <dd>3000yen</dd>
   <dd>
    <input type="hidden" value="0" name="id">
    <input type="submit" value="カートに入れる">
   </dd>
  </form>
  
  <form action="cart.php" method="post">
   <dl>
   <dt>靴下</dt>
   <dd>1000yen</dd>
   <dd>
    <input type="hidden" value="1" name="id">
    <input type="submit" value="カートに入れる">
   </dd>
  </form>
  
  <form action="cart.php" method="post">
   <dl>
   <dt>帽子</dt>
   <dd>5000yen</dd>
   <dd>
    <input type="hidden" value="2" name="id">
    <input type="submit" value="カートに入れる">
   </dd>
  </form>
  
  <p><a href="cart.php">カートの確認</a></p>
  
  <script src="shop.js"></script>  
 </body>
</html>
 
--->cart.php
 
<?php
 $names=["Tシャツ","靴下","帽子"];
 $prices=[3000,1000,5000];
 //print_r($names);
 
 if(isset($_POST["id"])){
  $id=$_POST["id"]; 
?>
<!DOCTYPE html>
<html lang="ja">
 <head>
  <meta charset="UTF-8">
  <title>ショッピングカート</title>
  <link rel="stylesheet" href="shop.css">
  <script src="../jquery-3.4.1.min.js"></script>
 </head>
 <body>
  <h1>カート一覧</h1>
  
  <table>
   <tr>
    <th>商品名</th>
    <th>値段</th>
   </tr>
   <tr>
    <td><?php echo $names[$id]; ?></td>
    <th><?php echo $prices[$id]; ?></th>
   </tr>
   
  </table>
  
  <h2>合計金額<?php echo $prices[$id]; ?>円</h2>
  
  <?php
  }else{
  ?>
  <h2>none</h2>
  <?php
  }
  ?>
  <script src="shop.js"></script>  
 </body>
</html>
 
 

さてどんどんカートに積まれるとして、
セッションでidの情報をもつとして、
毎回毎回idの値を残しておかないといけない
 
おくられてきたidをなにがしかに代入して、もしpostで送られてきているのがあれば、$_SESSION["id"]に代入
 

さてむつかしくなってきたよ
$_POST["id"]でおくられてきた→かーとにはいる→まえのぺーじにもどる→かーとをみる→からっぽだ。
よくない
じゃあ$_POST["id"]があるか$_SESSION["id"]かでif文OR条件にしたらどうですかね?
よくない
 if(isset($_POST["id"]) || $_SESSION["id"]){
  $_SESSION["id"] = $_POST["id"]; 
これではまずい
 

なお
session_start();でsessionをスタートすると、
任意の値をセッション変数にもたせることができる。
 

①session idを配列でもつ必要がある(上書きではまずいので)
②session idになにかがはいっているときと、
post idになにかがはいっているとき。
それらの条件がいる
 

かんがえられる条件が複雑なのがおわかりか。
 
<?php
①セッションがあってポストがない
②ポストがあってセッションがない
③両方あり
④両方なし
 
if(isset($_SESSION["id"])&& !isset($_POST["id"])){ //①
}
if(!isset($_POST["id"]) && isset($_POST["id"])){ //②
}
if(isset($_POST["id"]) && isset($_POST["id"])){ //③
}
if(!isset($_POST["id"]) && !isset($_POST["id"])){ //④
}
 

つまりこうなる:
 
<?php
if(isset($_SESSION["id"])&& !isset($_POST["id"])){//s is, p is not.
 //なにもしないがテーブルを表示
}
if(!isset($_POST["id"]) && isset($_POST["id"])){//s is not, p is
 $_SESSION["id"][] = $_POST["id"];//代入してテーブルを表示
}
if(isset($_POST["id"]) && isset($_POST["id"])){//both s and p are.
 $_SESSION["id"][] = $_POST["id"];//代入してテーブルを表示
}
if(!isset($_POST["id"]) && !isset($_POST["id"])){//never
 //商品がありませんといいたい
}
 

if文の順番を精査して条件で振り落とす。php部分が細切れなので全体の流れをみるように。
せんせの模範解答:
 
--->shop.php
 
<!DOCTYPE html>
<html lang="ja">
<head>
 <meta charset="utf-8">
 <title>ショッピングカート</title>
</head>
<body>
 <h1>ショップページ</h1>
 <form action="cart.php" method="post">
  <dl>
   <dt>Tシャツ</dt>
   <dd>
    3000円
   </dd>
   <dd>
    <input type="hidden" value="0" name="id">
    <input type="submit" value="カートに追加">
   </dd>
  </dl>
 </form>
 <form action="cart.php" method="post">
  <dl>
   <dt>靴下</dt>
   <dd>
    500円
   </dd>
   <dd>
    <input type="hidden" value="1" name="id">
    <input type="submit" value="カートに追加">
   </dd>
  </dl>
 </form>
 <form action="cart.php" method="post">
  <dl>
   <dt>帽子</dt>
   <dd>
    1500円
   </dd>
   <dd>
    <input type="hidden" value="2" name="id">
    <input type="submit" value="カートに追加">
   </dd>
  </dl>
 </form>
 <p><a href="cart.php">カートの確認</a></p>
</body>
</html>

 
--->cart.php
 
<?php
session_start();
$names=["Tシャツ","靴下","帽子"];
$prices=[3000,500,1500];
if(!isset($_SESSION["id"]) && isset($_POST["id"])){//sessionなしpostあり
 $_SESSION["id"][]=$_POST["id"];
}elseif(isset($_POST["id"])){//sessionありpostあり
 $_SESSION["id"][]=$_POST["id"];
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
 <meta charset="utf-8">
 <title>ショッピングカート</title>
</head>
<body>
 <h1>カート一覧</h1>
<?php
if(!isset($_SESSION["id"])){//上の2つのif文でsession追加されるのにないということは
?>
<h2>商品がありません</h2>
<?php
}else{//なにかしらのsession情報がある
print_r($_SESSION["id"]);
?>
<table>
 <tr>
  <th>商品名</th>
  <th>値段</th>
 </tr>
<?php
$num=0;
foreach($_SESSION["id"] as $value){
?>
 <tr>
  <td><?php echo $names[$value]; ?></td>
  <td><?php echo $prices[$value]; ?>円</td>
 </tr>
<?php
$num+=$prices[$value];
}
?>
 </table>
 <h2>合計金額:<?php echo $num; ?>円</h2>
<?php
}
?>
 <p><a href="shop.php">商品一覧</a></p>
</body>
</html>
PR

コメント

ブログ内検索

カレンダー

03 2025/04 05
S M T W T F S
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