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>
