alienHRNの訓練日記

IT業界初心者で勉強中。

20200911 POST形式の送受信 他、osaraipluginの答え合わせなど

授業内容

要約

 

〇ファイルの読み込み

☆require'読み込むファイルパス';→読み込み失敗した時は処理が停止
require_once'読み込むファイルパス';→1回だけ読み込み
☆include'読み込むファイルパス';→読み込み失敗した時でも処理は続行
include_once'読み込むファイルパス';→1回だけ読み込み

 

〇POST形式の送受信
受け取る送信名がGETと違うだけ

例題)99-13.phpより
<?php
// 商品リスト
$productList = [
  [
    'name' => 'ノート',
    'img' => '../img/item0.png',
    'price' => 100,
    'stock' => 10,
  ],
  [
    'name' => 'はさみ',
    'img' => '../img/item1.png',
    'price' => 200,
    'stock' => 3,
  ],
  [
    'name' => '計算機',
    'img' => '../img/item2.png',
    'price' => 1500,
    'stock' => 0,
  ],
];
// ナビリスト
$navList = [
  'ノート',
  'はさみ',
  '計算機',
];
// エラーメッセージ
$error = ;
// 掲載商品番号受け取り
// 数字が届く場合
// 1、値が届いている?→isset命令で確認
// 2、データ型はおk?→ctype_digitで確認
// 3、数値の範囲はおk?→比較演算子の使用

if (isset($_GET['item'])) {
  // ここのitemはクエリ文字列に記述されているitemを拾ってきている
  $productNo = $_GET['item'];
  if (ctype_digit($productNo)) {
    if ($productNo < 0 || $productNo > count($productList) - 1) {
      $error = 'Error03:該当商品がありません';
    }
  } else {
    $error = 'Error02:該当商品がありません';
  }
else {
  $error = 'Error01:該当商品がありません';
}
// 消費税
$tax = 0.1;
// タイトルタグ
$title = '';
if (count($error) === 0) {
  // 掲載商品情報
  $productName = $productList[$productNo]['name'];
  $productImg = $productList[$productNo]['img'];
  $productPrice = $productList[$productNo]['price'];
  $productStock = $productList[$productNo]['stock'];
  // 送料
  $shipping = '全国一律500円';
  if ($productPrice >= 1000) {
    $shipping = '1000円以上の商品は送料無料';
  }
  // 在庫アイコン
  $stockIcon = '';
  if ($productStock <= 0) {
    $stockIcon = '<span class="soldout">売り切れ</span>';
  } else if ($productStock <= 5) {
    $stockIcon = '<span class="few">在庫僅少</span>';
  }
  // 共通メッセージ
  $message = '<p>この商品は' . $productName . 'です。</p>';
  // おすすめ商品
  $recommend = '<h2>おすすめ商品</h2>';
  $recommend .= '<ul>';
  for ($i = 0$i < count($navList); $i++) {
    if ($i != $productNo) {
$recommend .= '<li><a href="item.php?item=' . $i . '">' . $navList[$i. '</a></li>';
    }
  }
  $recommend .= '</ul>';
  // タイトルタグ
  $title = "便利な{$productName}";
}

// phpゾーンは受信後の処理項目を記述
// 配列リストの管理もこの領域で行う

?>




<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title><?php echo $title?> | ショッピングサイト</title>
  <link rel="stylesheet" href="../css/style.css">
</head>

<body>


  <div class="header">
    <div class="inner">
      <div class="logo">
        <a class="logo_link" href="#">
          ショッピングサイト
        </a>
      </div>


      <div class="nav">
        <ul class="nav_list flex-pc">
          <?php foreach ($navList as $key => $val) : ?>
            <li class="nav_listItem w33-pc">
              <a class="nav_link" href="item.php?item=<?php echo $key?>">
                <?php echo $val?></a>
            </li>
          <?php endforeach?>
          <!-- liのリスト表示
→foreach文で繰り返し表示($navListの連想配列
item.php?item=<?php echo $key?>←クエリ文字列付きのリンクを利用したもの。
-->

        </ul>
      </div><!-- .nav -->
    </div><!-- .inner -->
  </div><!-- .header -->

  <div class="debug">
    <div class="inner">
      <div class="debug_body">
        <h2 class="debug_title">$_GET</h2>
        <pre class="debug_pre"><?php var_dump($_GET); ?></pre>
      </div><!-- .debug_body -->
    </div><!-- .inner -->
  </div><!-- .debug -->

  <div class="product">
    <div class="inner">
      <?php if (count($error) > 0) : ?>
        <div class="product_body">
          <div class="error">
            <ul class="error_list">
              <?php foreach ($error as $val) : ?>
                <li class="error_listItem"><?php echo $val?></li>
              <?php endforeach?>
            </ul>
          </div><!-- .error -->
        </div><!-- .product_body -->
      <?php else : ?>
        <div class="product_body">
          <div class="product_image">
            <img src="<?php echo $productImg?>" alt="<?php echo $productName?>">
          </div><!-- .product_image -->
          <div class="product_text">
            <?php echo $message?>
          </div><!-- .product_text -->
          <div class="product_price">
            価格:<?php echo $productPrice?>
            (税込み:<?php echo round($productPrice * (1 + $tax)); ?>円)
          </div><!-- .product_price -->
          <div class="product_shipping">
            送料:<?php echo $shipping?>
          </div><!-- .product_shipping -->
          <div class="product_stock">
            在庫:<?php echo $productStock?>
            <?php echo $stockIcon?>
          </div><!-- .product_stock -->
        </div><!-- .product_body -->
        <div class="product_footer">
          <div class="product_text">
            <?php echo $recommend?>
          </div><!-- .product_text -->
        </div><!-- .product_footer -->
      <?php endif?>
    </div><!-- .inner -->
  </div><!-- .product -->

  <div class="footer">
    <div class="inner">
      <div class="copyright">
        &copy; <?php echo date('Y'); ?> company.
      </div><!-- .copyright -->
    </div><!-- .inner -->
  </div><!-- .footer -->

  <!-- 表示関連の記述 -->
  <!-- PHP領域側の処理を表示させるための領域を準備する -->


</body>

</html>