複数の検索ボックスを作成して、検索によって商品一覧の表示が変化する。

検索ボタンを押すと検索が初期化しないで入力した文字を維持する。

HTMLフォーム

三項演算子

3つのものを比較し、条件によって表示させる。

number_format

数字を千の位毎にグループ化してフォーマットする

PHPドキュメント
index_view.php


<?php
//検索項目を維持して表示する
$search_conditions = $_SESSION['search_conditions'] ?? [];
?>
                      
<form action="" method="POST">

<!--開始日〜終了日-->
<!--value内の三項演算子で値の存在確認行い、検索状態を維持する-->
<div class="label">日付</div>
<input type="date" name="start_date" value="<?php echo $search_conditions['start_date'] ?? ''; ?>">
<div class="label">日付</div>
<input type="date" name="end_date" value="<?php echo $search_conditions['end_date'] ?? ''; ?>">

<!--検索月-->                        
<div class="label">日付(月)</div>
<input type="month" name="month" value="<?php echo $search_conditions['month'] ?? ''; ?>">

<!--地域-->                       
<div class="label">地域</div>
<input type="text" name="region" value="<?php echo $search_conditions['region'] ?? ''; ?>">

<!--メーカー-->                         
<div class="label">メーカー</div>
<input type="text" name="maker" value="<?php echo $search_conditions['maker'] ?? ''; ?>">

<!--店舗名-->                     
<div class="label">店舗名</div>
<input type="text" name="shop" value="<?php echo $search_conditions['shop'] ?? ''; ?>">

<!--検索-->              
<input type="submit" name="submit" value="検索" class="search_top_btn">
<!--CSV出力-->                      
<button type="submit" name="export" value="csv">csv出力</button>
                      
</form>
                

<?php foreach($news_lists as $news_list): ?>
<li class="item">
<!--一意の詳細ページへのボタン-->
<a href="order/detail.php?id=<?php echo $news_list['shop_id']; ?>">
<p class="date"><?php echo $news_list['date']; ?></p>
<p class="title"><?php echo $message.'が届きました。';?></p>
<p class="category"><span><?php echo $news_list['shop_name']; ?></span></p>
</a>
</li>
<?php endforeach; ?>
                  

<table>
<tbody>
<tr>
<th>商品コード</th>
<th>商品名</th>
<th>基本在庫数</th>
<th>残数</th>
<th>発注数</th>
<th>商品単価</th>         
<th>小計</th>
</tr>

<?php foreach($lists as $list){ ?>
                    
<tr>
<td><?php echo $list['code'];?></td>
<td><?php echo $list['item']; ?></td>
<td><?php echo $list['basic_quantity']? $list['basic_quantity']:0;?></td>

<!--値がなかったら0と表示する-->
<td><?php echo $list["count"] ? $list["count"] : 0; ?></td>
<td><?php echo $list['order_quantity']; ?></td>

<!--number_formatで数字の間に「,」をつける-->
<td>¥<?php echo number_format($list['price']);?></td>
<td>¥<?php echo number_format($list['subtotal']);?></td>
</tr>
<?php } ?>
</tbody>
</table>

検索項目を維持して表示する

詳細ページへのボタンも設置する

検索に応じた一覧表示する

バックエンド部分を作成

index.php

<?php
session_start();
include "config.php";

$dbh = db_open();

if(isset($_SESSION['id'])){
    $id = $_SESSION['id'];
}else{
    header('Location:login/index.php');
        exit;
}

$where = []; //初期化
$params = []; 

//検索
if(isset($_POST['start_date']) && isset($_POST['end_date']) && !empty($_POST['start_date']) && !empty($_POST['end_date'])){
    $where[] = "si.date BETWEEN :start_date AND :end_date";
    $params['start_date'] = $_POST['start_date'];
    $params['end_date'] = $_POST['end_date'];
}

if(isset($_POST['shop']) && !empty($_POST['shop'])){
    $where[] = "s.shop_name LIKE :shop";
    $params['shop'] = '%'. $_POST['shop'].'%';
}

if(isset($_POST['maker']) && !empty($_POST['maker'])){
    $where[] = "si.maker LIKE :maker";
    $params['maker'] = '%'. $_POST['maker'].'%';
}

if(isset($_POST['item']) && !empty($_POST['item'])){
    $where[] = "si.item LIKE :item";
    $params['item'] = '%'. $_POST['item'].'%'; 
}

    // 全ての発注情報取得
    $stmt = $dbh->prepare("SELECT * FROM sales_product WHERE status = '承認待ち' OR status = '承認済み'");
    $stmt->execute();
    $orders = $stmt->fetchAll(PDO::FETCH_ASSOC);

    $lists = [];
    
//一覧表示
$query = "SELECT DISTINCT
  si.code, 
  si.item, 
  si.basic_quantity,
  si.count, 
  si.price, 
  (si.count * si.price) AS subtotal,
  COALESCE(sp.num, 0) AS order_quantity
FROM stock_input AS si
LEFT JOIN sales_product AS sp ON si.code = sp.code
LEFT JOIN shops AS s ON si.shop_id = s.shop_id
WHERE (sp.status = '承認待ち' OR sp.status = '承認済み' OR sp.status IS NULL)";

if($where){
    $query .= " AND " . implode(' AND ', $where);
}

try{
    $stmt = $dbh->prepare($query);

    foreach($params as $key => $val){
        $stmt->bindValue(':'.$key,$val);
    }


$stmt->execute();
$lists = $stmt->fetchAll(PDO::FETCH_ASSOC);


    if(empty($lists)){
        echo "該当するデータはありませんが、クエリは成功しました。";
    }

} catch (PDOException $e) {
    echo "エラー";
throw new PDOException($e->getMessage(), (int)$e->getCode());
}

include "index_view.php";

検索機能に入力する

全ての発注情報を取得して、商品一覧を表示する