ketyiaの作ってみた

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

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

こんにちは!keitaです♪
CSVでデモの商品管理アプリを作成してみようということで、続きを行っていきます!

この記事では、CSVのデータ情報を編集する機能についてまとめていきます。

前回の続きからはじめていきます!

テンプレートエンジンに編集ボタンを追加

各データの列にアクション列を追加し、編集ボタンを追加していきます!前回書いたテンプレートエンジンで下記のコードを追加します!
table内を下記に変更します!

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

 <table border="1">
           <tr>
             <th>商品ID</th>
             <th>商品名</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>
              <td>
              <input type="button" onclick="location.href='edit.php?id={{ data.商品ID }}'"value="編集">
           </tr>
           {% endfor %}
</table>

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

テンプレートエンジンで編集ページを作成

編集画面もテンプレートエンジンで作成しておきましょう。
下記のように作成ます。

ーーーーーーーーーーーーーーーーー
【edit.twig.php

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

      <form action="edit_comp.php">

      <label>商品ID</label>
      <input type="text" name="id" value={{ csvArray[0] }}><br>
      <label>商品名</label>
      <input type="text" name="name" value={{ csvArray[1] }}><br>
      <label>金額</label>
      <input type="text" name="price" value={{ csvArray[2] }}><br>
      <label>在庫数</label>       
      <input type="text" name="stock" value={{ csvArray[3] }}><br><br>
      <input type="submit" value="更新">
      </form>
      <br>
      <input type="button" onclick="location.href='index.php'"value="戻る">

  </body>
</html>
ーーーーーーーーーーーーーーーーー

これでOKです!
データを保持した状態でフォーム形式に表示するようになっています。
では、ここにデータを渡したりするPHPの処理を書いていきます。

編集機能を作成

まず、CSVのクラスに下記の機能を追加していきます。

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

private $serch = 0;

public function selectdata($result,int $num){
    // echo $this->data_count;
    for( $i=0; $i < $this->data_count; $i++){
      if($result[$i]['商品ID'] === $result[$num-1]['商品ID']){
        $this->serch = $i;
        for($j=0; $j < $this->num; $j++){
          $this->selectArray[$j] = $result[$i][$this->keys[$j]];
        }
      }
    }
   return $this->selectArray;
}
ーーーーーーーーーーーーーーーーー

 

では、編集画面にデータを渡すPHP処理を書いていきましょう!

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

【edit.php
<?php
session_start();

$csvArray = array();
$selectArray = array();

$id =$_GET['id'];
$_SESSION['before_id'] = $id;

unset($_GET['id']);

// CSVを取得
// ファイルを読み込む
require_once('class/csv.php');
$csvread_obj = new csv("csv/item.csv","r");

$csvArray = $csvread_obj->getalldata();

$selectArray = $csvread_obj ->selectdata($csvArray,$id);

// テンプレートエンジンクラス
require_once('class/templete.php');
$templete_file = new templete('edit.html.twig');

// htmlに渡すデータ
$data = array(
    'title' => 'csv商品管理',
    'message'  => '商品編集',
    'csvArray' => $selectArray
);
$templete_file->dataset($data)
$templete_file->display();
?>

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

はい!ここまでで、商品の一覧画面の編集ボタンを
押下したらこの商品の情報が保持された編集画面が表示されるようになっているはずです。

では動作確認です。。

出来ました!
しっかリ予定通りの動きになってますね!

次は編集の機能を作っていきます。

編集機能を作成

またになりますが、クラスに機能を追加していきます。
これは、データをクラス側に与える処理と
編集(データの置き換え)の処理を書いていきます。

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

private $id;
private $name;
private $price;
private $stock;

public function setid($id){
  $this->id = $id;
}
public function setname($name){
  $this->name = $name;
}
public function setprice($price){
  $this->price = $price;
}
public function setstock($stock){
  $this->stock = $stock;
}
public function edit($edit_id){
  $file = file($this->file);
  $after_text = $this->id . ',' . $this->name
         .','. $this->price .','. $this->stock."\n";  
  $file = str_replace($file[$edit_id],htmlspecialchars($after_text),$file);
  file_put_contents($this->file,$file);
}

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


次は、これを呼び出すPHP処理を書いていきます。

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

【edit_comp.php
<?php
session_start();

$id = $_GET['id'];
$name = $_GET['name'];
$price = $_GET['price'];
$stock = $_GET['stock'];

$before_id = $_SESSION['before_id'];

if ( empty( $id ) || empty( $name ) || empty( $price ) || empty( $stock )) {

  $_SESSION['error_message'] = '入力されていない項目があります';
  header('Location:edit.php');
exit;
}else{
unset( $_SESSION['id'] );
unset( $_SESSION['name'] );
unset( $_SESSION['price'] );
unset( $_SESSION['stock'] );
unset( $_SESSION['before_id'] );

// CSVを取得
// ファイルを読み込む
require_once('class/csv.php');
// インスタンス
$csvread_obj = new csv("csv/item.csv","r+");

$csvread_obj ->setid($id);
$csvread_obj ->setname($name);
$csvread_obj ->setprice($price);
$csvread_obj ->setstock($stock);

$edit_id = $id -1;
$csvread_obj ->edit($edit_id);

header('Location:index.php');
exit;
}

?>

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

はい!これで編集の機能が完成しました。
動作を見てみましょう。


問題ないですね!
これで編集の機能は完成です!

次は削除の機能を作成していきます。
ここまで見てくださりありがとうございました!


前の記事

begginerkun.hatenablog.com

次の記事