前回まで管理者ログインログアウト等を追加し、
商品管理、管理者管理についての修正しました。
今回は、そのデータをダウンロード出来るようにしましょう。
商品一覧ダウンロード
ファイル名:goods_list.php
<記述例>
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['alogin'])==false)
{
print '管理者ログインしていません。<br>';
print '<a href="admin_login.html">管理者ログイン画面へ</a>';
exit();
}
else
{
$name=$_SESSION['name'];
print '管理者:'.$name.' ログイン中<br><br>';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>商品一覧</title>
<style type="text/css">
<!--
table {margin: 10px;padding: 10px;}
table tr:nth-child(even) {background: cornsilk;}
table tr:nth-child(odd) {background: wheat;}
table tr th,td {border-bottom: 1px solid tan; padding: 2px 5px; text-align: center;}
table .right{text-align: right;}
.btn{background:lightsteelblue;border-radius: 10px;border: 3px solid darkslategray;padding: 6px 10px; margin-left: 120px;}
-->
</style>
</head>
<body>
<main>
<section>
<?php
try
{
require_once('../com_func.php');
$dbh=dbconnect();
$dbh->query('SET NAMES utf8');
$sql='SELECT id,name,price FROM goods';
$stmt=$dbh->prepare($sql);
$stmt->execute();
$dbh=null;
print '<h3>商品一覧</h3>';
print '<table><tr>';
print '<td>商品ID</td><td>商品名</td><td>価格</td></tr>';
$csv='商品ID,商品名,価格'."\n";
while(true)
{
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
if($rec==false){break;}
$id=$rec['id'];
$name=$rec['name'];
$price=$rec['price'];
print '<tr><td class="right">'.$id.'</td>';
print '<td>'.$name.'</td>';
print '<td class="right">'.number_format($price).'</td>';
$csv.=$id.','.$name.','.$price."\n";
}
print '</tr></table>';
$file=fopen('./goodslist.csv','w');
$csv=mb_convert_encoding($csv,'SJIS','UTF-8');
fputs($file,$csv);
fclose($file);
}
catch(Exception $e)
{
print ' ただいま障害により大変ご迷惑をおかけしております。';
exit();
}
?>
<a href="goodslist.csv">商品一覧ダウンロード</a><br><button class="btn" onclick="location.href='goods_ctl.php'">商品管理へ</button>
</section>
</main>
</body>
</html>
54行目:[$csv]に商品一覧の見出しを代入。
65行目:[$csv]に商品ID、商品名、価格を追記。
68~71行目:ファイルアクセス。
76行目:商品一覧ダウンロードのリンク表示。
54・65行目で[$csv]に商品データを代入しています。
68~71行目のファイルアクセスについて簡単に説明します。
68行目:fopenでファイルを開きます。
書式例:$file=fopen(‘ファイル名’,’モード’);
モードは[r]は読み込み、[w]は書き込みです。
ここでは、[goods_list.php]と同じフォルダに
保存されます。
69行目:mb_convert_encoding で
文字エンコーディングを変換します。
記述例:mb_convert_encoding(変数,変換後コード,変換前コード);
ここでは、[$csv]のエンコーディングを[UTF-8]から[SJIS]に変換しています。
これはcsvファイルをエクセルで開けるように
文字エンコーディングを変換しています。
70行目:fputsでファイルを書き込みます。
記述例:fputs(ファイル名,変数);
71行目:fcloseでファイルを閉じています。
記述例:fclose(ファイル名);
商品一覧ダウンロード動作確認
商品管理[goods_ctl.php]から、[商品一覧]をクリックし、
商品一覧画面[goods_list.php]が表示されますので、
[商品一覧ダウンロード]をクリックします。

保存するファイルの保存先を選択し保存すると
csvファイルがダウンロードされます。

エクセルではこのような表示になります。

管理者一覧ダウンロード
ファイル名:admin_list.php
<記述例>
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['alogin'])==false)
{
print '管理者ログインしていません。<br>';
print '<a href="admin_login.html">管理者ログイン画面へ</a>';
exit();
}
else
{
$name=$_SESSION['name'];
print '管理者:'.$name.' ログイン中<br><br>';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>管理者一覧</title>
<style type="text/css">
<!--
table {margin: 10px;padding: 10px;}
table tr:nth-child(even) {background: cornsilk;}
table tr:nth-child(odd) {background: wheat;}
table tr th,td {border-bottom: 1px solid tan; padding: 2px 5px; text-align: center;}
table .right{text-align: right;}
.btn{background:lightsteelblue;border-radius: 10px;border: 3px solid darkslategray;padding: 6px 10px; margin-left: 120px;}
-->
</style>
</head>
<body>
<main>
<section>
<?php
try
{
require_once('../com_func.php');
$dbh=dbconnect();
$dbh->query('SET NAMES utf8');
$sql='SELECT id,name FROM admin';
$stmt=$dbh->prepare($sql);
$stmt->execute();
$dbh=null;
print '<h3>管理者一覧</h3>';
print '<table><tr>';
print '<td>管理者ID</td><td>管理者名</td></tr>';
$csv='管理者ID,管理者名'."\n";
while(true)
{
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
if($rec==false){break;}
$id=$rec['id'];
$name=$rec['name'];
print '<tr><td class="right">'.$id.'</td>';
print '<td>'.$name.'</td>';
$csv.=$id.','.$name."\n";
}
print '</tr></table>';
$file=fopen('./adminlist.csv','w');
$csv=mb_convert_encoding($csv,'SJIS','UTF-8');
fputs($file,$csv);
fclose($file);
}
catch(Exception $e)
{
print ' ただいま障害により大変ご迷惑をおかけしております。';
exit();
}
?>
<a href="adminlist.csv">管理者一覧ダウンロード</a><br>
<button class="btn" onclick="location.href='goods_ctl.php'">商品・管理者管理へ</button>
</section>
</main>
</body>
</html>
商品一覧ダウンロードと同じなので説明はいらないでしょう。
管理者一覧ダウンロード動作確認
管理者管理[goods_ctl.php]から、[管理者一覧]をクリックし、
管理者一覧画面[admin_list.php]が表示されますので、
[管理者一覧ダウンロード]をクリックします。

保存するファイルの保存先を選択し保存すると
csvファイルがダウンロードされます。

今回はここまでです。
意外と簡単にファイルをダウンロードできましたね。
コメント