PHPでショッピングカートを!【17.商品一覧ダウンロード】

PHP

前回まで管理者ログインログアウト等を追加し、
商品管理、管理者管理についての修正しました。

今回は、そのデータをダウンロード出来るようにしましょう。

商品一覧ダウンロード

ファイル名: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ファイルがダウンロードされます。

今回はここまでです。

意外と簡単にファイルをダウンロードできましたね。

コメント

タイトルとURLをコピーしました