前回、商品削除を作成しました。
今回は、共通部分関数化について説明します。
共通部分を関数化する
複数のファイルで共通する部分を関数にして
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();
に変更します。
これですべてのファイルを修正しました。
念のため、私は動作確認してみましたが、
大丈夫、ちゃんと動きました。
共通部分を関数化しただけですので
記述やコピペを間違わなければ今まで通り
動作します。
ファイルダウンロード
今回商品管理を作り終えたので関数用ファイルごと
ダウンロードできます。
これで商品管理に関して、ほぼ説明終えました。
いよいよ次回からショッピングカートの作り方
を説明する予定です。
コメント