PHPでショッピングカートを!【4.準備:共通部分関数化】

PHP

前回、商品削除を作成しました。
今回は、共通部分関数化について説明します。

共通部分を関数化する

複数のファイルで共通する部分関数にして
1つのファイルにまとめ、各ページから
読み込み使えると便利ですよね。

その共通部分を関数化することについて説明します。

共通部分の関数

ファイル名:com_func.php

<記述例>

<?php
function sanitize($input)
{
  foreach($input as $key=>$value)
  {
    $output[$key]=htmlspecialchars($value);
  }
  return $output;
}
function dbconnect()
{
  $dsn='mysql:dbname=fshop;host=localhost';
  $user='root';
  $password='';
  return new PDO($dsn,$user,$password);
}
?>

2~9行目サニタイジング用の関数です。

呼び出し先からのデータを$input変数で受け取り、
その変数に入ってあるデータを
foreach命令を使い1つずつ取り出し、
htmlspecialchars関数でサニタイジングしています。

それを、$output変数に代入して、すべて終わったら
呼び出し元にサニタイジングされた$output変数
を返します。

10~16行目データベース接続用の関数です。

これは、データベース接続で記述していた
ものと同じなのでわかると思います。

このデータベース接続を共通化することで
データベース名、ユーザー名、パスワードを
変更したときにこれだけ変更すればいいので
楽になりますよね。

例えば、XAMPPでローカル環境のデータベースから
実際のサーバー上のデータベースに書き換えるとき
なんか便利ですね。

関数ファイルの読み込み方

それから、この関数ファイルの読み込み方ですが、
require文を使って読み込みます。

例:require_once(‘com_func.php’);

ここでは、XAMPPを使いローカル環境で動作確認していますが、
XAMPPのドキュメントルートの中にfshopフォルダ
その中にgoodsフォルダを作成しました。

このcom_func.phpは、fshopフォルダにUTF-8として保存してください。

このfshopフォルダはgoodsフォルダの上の階層なので
ファイルを読み込む時に以下のように記述します。

例:require_once(‘../com_func.php’);

関数を読み込むために修正する

それでは早速、使ってみましょう。
ファイルソース全部を記述すると長くなるので
変更部分だけ記述します。

サニタイジング用の関数

サニタイジング用の関数を読み込み使う場合、
変更する箇所は変数の数に応じて変更します。

変更前記述例

$name=$_POST[‘name’];
$price=$_POST[‘price’];
$name=htmlspecialchars($name);
$price=htmlspecialchars($price);

変更後記述例

$post=sanitize($_POST);
$name=$post[‘name’];
$price=$post[‘price’];

データベース接続用の関数

データベース接続用関数を使う場合、
以下のように変更します。

変更前記述例

$dsn=’mysql:dbname=fshop;host=localhost’;
$user=’root’;
$password=”;
$dbh=new PDO($dsn,$user,$password);

変更後記述例

$dbh=dbconnect();

当然その前にcom_func.phpを読み込んでください。

では、各ファイルを修正していきます。

goods_list.php

ファイル名:goods_list.php

26~29行目のデータベース接続を

require_once(‘../com_func.php’);
$dbh=dbconnect();

に変更します。

goods_add_chk.php

ファイル名:goods_add_chk.php

13~17行目のサニタイジングを

require_once(‘../com_func.php’);
$post=sanitize($_POST);
$name=$post[‘name’];
$price=$post[‘price’];

に変更します。

goods_add_end.php

ファイル名:goods_add_end.php

13~17行目のサニタイジングを

require_once(‘../com_func.php’);
$post=sanitize($_POST);
$name=$post[‘name’];
$price=$post[‘price’];

22~25行目のデータベース接続を

$dbh=dbconnect();

に変更します。

goods_mod.php

ファイル名:goods_mod.php

26~29行目のデータベース接続を

require_once(‘../com_func.php’);
$dbh=dbconnect();

に変更します。

goods_mod_chk.php

ファイル名:goods_mod_chk.php

19~25行目のサニタイジングを

require_once(‘../com_func.php’);
$post=sanitize($_POST);
$id=$post[‘id’];
$name=$post[‘name’];
$price=$post[‘price’];

に変更します。

goods_mod_end.php

ファイル名:goods_mod_end.php

18~24行目のサニタイジングを

require_once(‘../com_func.php’);
$post=sanitize($_POST);
$id=$post[‘id’];
$name=$post[‘name’];
$price=$post[‘price’];

29~32行目のデータベース接続を

$dbh=dbconnect();

に変更します。

goods_del.php

ファイル名:goods_del.php

26~29行目のデータベース接続を

require_once(‘../com_func.php’);
$dbh=dbconnect();

に変更します。

goods_del_chk.php

ファイル名:goods_del_chk.php

18~24行目のサニタイジングを

require_once(‘../com_func.php’);
$post=sanitize($_POST);
$id=$post[‘id’];
$name=$post[‘name’];
$price=$post[‘price’];

に変更します。

goods_del_end.php

ファイル名:goods_del_end.php

18~24行目のサニタイジングを

require_once(‘../com_func.php’);
$post=sanitize($_POST);
$id=$post[‘id’];
$name=$post[‘name’];
$price=$post[‘price’];

29~32行目のデータベース接続を

$dbh=dbconnect();

に変更します。

これですべてのファイルを修正しました。

念のため、私は動作確認してみましたが、
大丈夫、ちゃんと動きました。

共通部分を関数化しただけですので
記述やコピペを間違わなければ今まで通り
動作します。

ファイルダウンロード

今回商品管理を作り終えたので関数用ファイルごと
ダウンロードできます。

これで商品管理に関して、ほぼ説明終えました。

いよいよ次回からショッピングカートの作り方
を説明する予定です。

コメント

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