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処理を書いていきましょう!
ーーーーーーーーーーーーーーーーー
<?php
session_start();
$csvArray = array();
$selectArray = array();
$id =$_GET['id'];
$_SESSION['before_id'] = $id;
unset($_GET['id']);
// CSVを取得
$csvArray = $csvread_obj->getalldata();
$selectArray = $csvread_obj ->selectdata($csvArray,$id);
// テンプレートエンジンクラス
// インスタンス化
$templete_file->dataset($data)
$templete_file->display();
?>
ーーーーーーーーーーーーーーーーー
押下したらこの商品の情報が保持された編集画面が表示されるようになっているはずです。
では動作確認です。。
出来ました!
しっかリ予定通りの動きになってますね!
次は編集の機能を作っていきます。
編集機能を作成
これは、データをクラス側に与える処理と
編集(データの置き換え)の処理を書いていきます。
【class/csv.php】
private $id;
private $name;
private $price;
private $stock;
public function setid($id){
public function edit($edit_id){
$file = file($this->file);
$after_text = $this->id . ',' . $this->name
$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;
}
ーーーーーーーーーーーーーーーーー
動作を見てみましょう。