CSVファイルをMYSQLテーブルへインポートして表示する
名称,科名,分布
ヤマドリ,キジ科,本州、四国、九州
ヤンバルクイナ,クイナ科,沖縄島
アマミヤマシギ,シギ科,奄美諸島
アオゲラ,キツツキ科,本州、四国、九州、屋久島、種子島
ノグチゲラ,キツツキ科,沖縄島
ルリカケス,カラス科,奄美諸島
2行目
データベースに接続するファイルを読み込む
4行目-25行目 インポート結果を表示させるPHPプログラムコード
$_GET['status']をIF関数判定して空でなければ、SWITCH関数にてインポート処理結果を変数へ代入
インポートを行った場合、必ず変数へ代入される。
switch関数による値の切り替え
表示させるメッセージ変数 : $statusMsg
divクラスに代入する値により色を変えるための変数 : $statusType
45行目にメッセージを表示する
77行目-92行目
birdsテーブルをSELECT文クエリー、件数が0より多ければWHILE文を処理をして一件ずつ最終列までテーブルの
<?php
include "db.conn.php";
if(!empty($_GET['status'])){
switch($_GET['status']){
case 'succ':
$statusType = 'alert-success';
$statusMsg = 'インポートに成功しました';
break;
case 'err':
$statusType = 'alert-danger';
$statusMsg = 'インポートに失敗しました';
break;
case 'invalid_file':
$statusType = 'alert-danger';
$statusMsg = 'CSVファイルをアップロードしてください';
break;
default:
$statusType = '';
$statusMsg = '';
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<script>red text</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="script.js"></script>
<body class="mt-5">
<div class="container-sm">
<h2 class="text-center text-light bg-dark rounded-4">鳥類リスト</h2>
<?php if(!empty($statusMsg)){ ?>
<div class="col-xs-12">
<div class="alert" <?= $statusType ?><?= $statusMsg?></div>
</div>
<?php } ?>
<div class="row">
<div class="col-md-12 head">
<div class="float-right m-3">
<a href="javascript:void(0);" class="btn btn-dark" onclick="formToggle('importFrm')";><i class="plus"></i> インポート</a>
</div>
</div>
<div class="col-md-12 p-3 m-2 border border-info text-center" id="importFrm" style="display: none;">
<form action="importData.php" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" class="btn btn-dark" name="importSubmit" value="登録">
</form>
</div>
<table class="table table-hover">
<thead>
<tr class="table-info">
<th>ID</th>
<th>名称</th>
<th>科名</th>
<th>分布</th>
</tr>
</thead>
<tbody>
<?php
$result = $conn->query("SELECT * FROM birds ORDER BY id DESC");
if($result->num_rows > 0){
while($row = $result->fetch_assoc()){ ?>
<tr>
<td><?= $row['id']?></td>
<td><?= $row['name']?></td>
<td><?= $row['family_name']?></td>
<td><?= $row['distribution']?></td>
</tr>
<?php
}
}else{ ?>
<tr><td colspan="5">No member(s) found...</td></tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</body>
</html>
importata.php
4行目
登録ボタンをクリックときの判定
5行目
登録を許可するファイルの種類を変数へ代入(CSVファイル判定)
6行目
インポートファイルの変数存在しているとファイルの種類を判定
7行目
サーバー側にファイル送信されているかを判定
8行目-10行目
ファイルを読み込み権限で開いて行を取得、CSVをフィールドを処理する
12行目-31行目
while文でCSVファイルのデータを1つずつ繰り返し読み込む
変数へ代入してWHERE文から同じ名称を検索する
成功したフラグに、$_GET変数を代入
21行目-25行目
すでに同名称が存在すればCSVファイルへ新たに更新処理をする
同じ名称が存在しないならINSERT文を行う
33行目
WHILE文で失敗した場合のフラグを$_GETへ代入
35行目
ファイルの読み込みが失敗した処理を$_GETへ代入
39行目
index.phpへページを移動と$_GETを一緒に送る
script.js
function formToggle(ID) {
var element = document.getElementById(ID);
if(element.style.display === "none"){
element.style.display = "block";
}else{
element.style.display = "none";
}
}