ketyiaの作ってみた

このサイトでは作ってみたことを記事にまとめていきます!

PHPでCSVを使って商品管理システムを作成しよう①

こんにちは!
wordpressで今までブログを書いていたのですが、諸事情で無料ブログに切り替えていきたいと思います!
では、以前途中までまとめていたCSVを使って、デモの商品管理アプリを作成してみようってことをやっていこうと思います!

言語はPHPを使い、Twigというテンプレートエンジンを使用していきます。
処理は、CSVのデータ情報を表示、追加、編集、削除できるものとします!

こういうシステムはデータベースを使うのが主流だと思いますが、PHPでファイル操作してみようってことでこの条件でやっていきます!

この記事では、CSVのデータ情報を表示(商品一覧表示)することをやっていきます!

使用するCSV


下記の形式のCSVを使っていきます。
右から商品ID、商品名、価格、在庫数のデータとなっています!

ーーーーーーーーーーーーーーーーー
csv/item.csv
1,PC,90000,25
2,キーボード,5600,200
3,マウス,1500,500

ーーーーーーーーーーーーーーーーー

CSVからデータ取得


では、CSVのデータを配列で取得していきます!
こういったデータは、配列で取得するのが一般的だと思います。

下記がPHPでの処理のコードです。


ーーーーーーーーーーーーーーーーー
【index.php

<?php

# csvを開く
$handle = fopen("csv/item.csv","r");

# (変数)
#行数
$count = 0;
#配列のキー
$keys = ['商品ID','商品名','金額','在庫']; 
#データを格納する配列
$csvArray = array(); 

# (一行ずつ読み込む)
# カンマごとのデータを$dataに格納 (注釈対策のため、()の数を一つ余分に入れてます)
while((($data = fgetcsv($handle))) !== FALSE) {
    # データ数を取得
    $num = count($data);

    # 配列に格納
    for ($c=0; $c < $num; $c++) {
        $csvArray[$count][$keys[$c]] = $data[$c];
    }
    $count++;
}

# csvを閉じる
fclose($handle);

ーーーーーーーーーーーーーーーーー

テンプレートエンジンで表示部分作成


次にTwigというを使って表示部分を作成します。
Twigに関しては、時間ができたらまとめます!
というか過去にまとめたwordpress記事から移行します!

下記がテンプレートエンジンの処理です。

ーーーーーーーーーーーーーーーーー
【index.html.twig】

<!DOCTYPE html>
<html lang="ja">
    <head>
      <title>{{ title }}</title>
    </head>
    <body>
      <h1>{{ message }}</h1>

      <table border="1">
          <tr>
                <th>商品ID</th>
                <th>商品名</th>
                <th>金額</th>
                <th>在庫数</th>
           </tr>

             {% for data in csvArray %}
            <tr>
                <td>{{ data.商品ID }}</td>
                <td>{{ data.商品名 }}</td>
                <td>{{ data.金額 }}</td>
                <td>{{ data.在庫 }}</td>
            </tr>
             {% endfor %}
        </table>
    </body>
</html>

ーーーーーーーーーーーーーーーーー

テンプレートエンジンをクラスで呼び出す


他でも使いまわしができるようにテンプレートエンジンをPHPで呼び出す処理をクラス化しておきます!

下記がコードです。

ーーーーーーーーーーーーーーーーー
【class/templete.php

<?php
class templete{
    // プロパティ(変数)
    private $filename;
    private $twig;
    private $data = array();

    // コンストラク
    public function __construct(string $file){
        // Twigライブラリの読込み
        require_once './vendor/autoload.php';
        // Twigを使用するテンプレートの読込み
        $loader = new \Twig\Loader\FilesystemLoader('./view');

        $this->twig = new \Twig\Environment($loader);
       
        // ファイルをセット
        $this->filename = $file;
    }

    // メソッド(関数)
    // データを設定
    public function dataset($data){
        $this->data = $data;
    }

    // 表示する(レンダリング)
    public function display(){
        echo $this->twig->render($this->filename, $this->data);
    }
}
?>

ーーーーーーーーーーーーーーーーー


では、PHPで読み出してみます!

ーーーーーーーーーーーーーーーーー
【index.php

// クラス読み出し
require_once('class/templete.php');
$templete_file = new templete('index.html.twig');

// htmlに渡すデータ
$data = array(
    'title' => 'csv商品管理',
    'message' => '商品一覧',
    'csvArray' => $csvArray
);

$templete_file->dataset($data);

$templete_file->display();

ーーーーーーーーーーーーーーーーー

いったん動作確認


一通りの処理はできていると思うので、ここいらで動作を見ておこうと思います!
Xamppというアプリを使って、確認を行います。

Xamppの使い方は色々なサイトで紹介されているので、それらで参考にしてみてください!

下記のようになっていれば問題ないです!


CSVの処理をクラスにまとめる


ここまでで表示させることはできました。
しかし、まだ追加、編集、削除の機能が残ってますね。。
毎回毎回、処理を書いていくのも大変なので、CSVの処理をクラスでまとめてしまいましょう!

クラスのコードは下記のようになりました!

ーーーーーーーーーーーーーーーーー
【class/csv.php

<?php
class csv{
    private $keys = ['商品ID','商品名','金額','在庫']; #配列のキー
    private $csvArray = array(); #データを格納する配列
    private $file; #ファイル名
    private $type; #ファイルタイプ
    private $handle; #ファイル操作
    private $num; #1列のデータの個数
    private $data_count; #データの列数

    // コンストラク
    public function __construct($filename,$type) {
      // 変数の代入
        $this->file = $filename;
        $this->type = $type;
        $this->handle = fopen($this->file, $this->type);
    }

    public function getalldata(){

        while ((($data = fgetcsv($this->handle))) !== FALSE) {
            $this->num = count($data);

            for ($c=0; $c < $this->num; $c++) {
                $this->csvArray[$this->data_count][$this->keys[$c]] = $data[$c];
            }
        $this->data_count++;
        }
    fclose($this->handle);
    return $this->csvArray;
    }
}

ーーーーーーーーーーーーーーーーー


呼び出し方は下記です。
先ほど書いたCSVの処理から置き換えておきます。


ーーーーーーーーーーーーーーーーー
【index.php

/読み出し
require_once('class/csv.php');
$csvread_obj = new csv("CSVファイルパス","r");
// データを取得
$csvArray = $csvread_obj->getalldata();

ーーーーーーーーーーーーーーーーー

表示される画面が、一旦確認した画面と差異がなければOKです!

これでCSVのデータを表示させる機能は完成です。
次の記事からは、追加の機能をまとめていきます!

 

begginerkun.hatenablog.com