🔰はじめての方へ

PHPファイルだけで「データベース風」にURLでHTMLを切り替える方法

LP
記事内に広告が含まれています。
スポンサーリンク

はじめに

「果物ごとにページを作りたいけど、毎回HTMLファイルをコピーするのは大変…」

そんなときに便利なのが、PHPの配列をデータベース代わりに使う方法です。

通常、Webサイトで大量のデータを管理する場合はMySQLなどのデータベースを利用します。

しかし、小規模なサイトや検証用のサイトであれば、PHPの配列だけでも十分に運用できます。

この記事では、

  • データベースを使わない
  • PHPファイルだけで完結
  • URLによって表示内容を切り替える

という仕組みを解説します。

ちなみにデータベースを使用する際の方法については、下記記事(有料)で詳しく説明しているのでご参照ください!

初心者の私がデータベースを使用したコードを理解するまで【コード例あり】|momiji
Web制作の勉強をしていて、避けたかったものがあります・・・ それが、データベースです。 触ったら危ないことが起きるんじゃないかとか・・・ 実際にAIを使って学習していたのですが、 PDOって何? DSNって何? prepare? exec…

この方法でできること

例えば次のURLにアクセスすると、

index.php?fruit=1

「りんごの紹介ページ」が表示されます。

index.php?fruit=2

なら「みかんの紹介ページ」

index.php?fruit=3

なら「ぶどうの紹介ページ」。

つまり、

1つのHTMLテンプレートで複数ページを生成できる

ということです。


全体の仕組み(ファイル構成)

fruit_site/
├── data.php
├── config.php
└── index.php

各ファイルの役割

ファイル役割
data.phpデータベース代わり
config.phpサイトの基本設定
index.phpURLを受け取りページ生成

STEP1 データを配列で用意する(data.php)

まずは表示したいデータを配列として作成します。

これが今回の「簡易データベース」になります。

<?php

// 果物のデータ
$fruits = [
    1 => ['fruit_name' => 'りんご'],
    2 => ['fruit_name' => 'みかん'],
    3 => ['fruit_name' => 'ぶどう'],
    4 => ['fruit_name' => 'もも'],
  // ... 必要なだけ追加できる
];


// 農園のデータ
$farms = [
    1 => [
        'code' => 'north',
        'path' => '/fruit_site',
        'farm_name' => '北の農園',
        'tel' => '0120-123-456',
        'line' => 'https://example.com',
    ],
    2 => [
        'code' => 'south',
        'path' => '/fruit_site',
        'farm_name' => '南の農園',
        'tel' => '0120-123-456',
        'line' => 'https://example.com',
    ],
];

配列がデータベースになる仕組み

例えば、

$fruits[1]

を取得すると、

[
  'fruit_name' => 'りんご'
]

が返ってきます。

データベースでいうと、

idfruit_name
1りんご
2みかん
3ぶどう

と同じようなイメージです。


ポイント

  • 配列のキー(1、2、3)がIDになる
  • データを増やしたいときは1行追加するだけ
  • MySQL不要

STEP2 デフォルト設定を作る(config.php)

サイト全体で使う基本設定を別ファイルにしておきます。

config.php

<?php

return [
    'code' => 'north',
    'path' => '/fruit_site',
    'farm_name' => '北の農園',
    'tel' => '0120-123-456',
    'line' => 'https://example.com',
];

returnで配列を返す

このファイルは、

$config = include('config.php');

で読み込めます。

すると、

$config['farm_name']

のように利用できます。

ここに書いた値が、「何も指定しなかった時のデフォルト値」になります。


STEP3 URLの値を受け取る(index.php)

ここが一番重要な部分です。

index.php

<?php

// 1. 設定とデータを読み込む
$config = include(__DIR__ . '/config.php');
include(__DIR__ . '/data.php');

// 2. URLからパラメータを取得する
//   例: ?fruit=3 なら $fruit_id = 3
$fruit_id = isset($_GET['fruit'])
    ? (int)$_GET['fruit']
    : 1;

// 3. 該当するデータを取得(なければデフォルトの1番)
$fruit = isset($fruits[$fruit_id])
    ? $fruits[$fruit_id]
    : $fruits[1];

// 4. 設定にフルーツ名をセット
$config['fruit_name'] = $fruit['fruit_name'];

URLとの関係

URL表示内容
index.phpりんご(デフォルト)
index.php?fruit=1りんご
index.php?fruit=2みかん
index.php?fruit=3ぶどう
index.php?fruit=4もも

$_GETとは?

例えば

index.php?fruit=3

というURLの場合、

$_GET['fruit']

には

3

が入ります。


(int) を付ける理由

(int)$_GET['fruit']

としておくことで、

?fruit=abc

のような不正な文字列が送られても数値として扱えます

セキュリティ面でも重要な処理です


存在しないIDだった場合(isset())

例えば

?fruit=999

だった場合、

$fruits[999]

は存在しません。

そこで、

isset()

を使って確認し、

存在しなければデフォルトの

$fruits[1]

を表示しています。


STEP4 HTMLへ表示する

取得したデータはHTML内で利用できます。

<title>
    <?php echo $config['farm_name']; ?>
    <?php echo $config['fruit_name']; ?>紹介ページ
</title>

<p>
    <?php echo $config['fruit_name']; ?>
    の魅力をご紹介します。
</p>

<a href="tel:<?php echo $config['tel']; ?>">
    電話する
</a>

表示例

fruit=1

北の農園 りんご紹介ページ

fruit=3

北の農園 ぶどう紹介ページ

同じHTMLなのにURLだけで内容が変わります。


STEP5 共通パーツを分割する

ヘッダーやフッターなど、全ページで使う部品は別ファイルにして include で読み込みます。

index.php

<!-- header.phpを読み込み -->
<?php include(__DIR__ . '/header.php'); ?>

<div class="main-content">
    ページ本文
</div>

<!-- footer.phpを読み込み -->
<?php include(__DIR__ . '/footer.php'); ?>

header.php

<header>

    <p>
        <?php echo $config['farm_name']; ?>
        の果物情報サイト
    </p>

    <a href="tel:<?php echo $config['tel']; ?>">
        電話する
    </a>

    <a href="<?php echo $config['line']; ?>">
        お問い合わせ
    </a>

</header>

配列とデータベースの違い

ここで初心者が疑問に思うのが、

「結局データベースと何が違うの?」

という点です。

配列の場合(PHPファイルのみ)

$fruits = [
    1 => ['fruit_name' => 'りんご'],
    2 => ['fruit_name' => 'みかん']
];

PHPファイルの中に直接データを書きます。

メリット

  • 設定が簡単
  • MySQL不要
  • 小規模サイト向き
  • データの追加・変更は配列に1行足すだけ
  • 1つのHTMLで何十ページ分もカバーできる

デメリット

  • データが増えると管理しにくい
  • 編集のたびにファイル更新が必要
  • 書き間違えるとエラーになる

MySQLの場合(データベース使用)

データはデータベースに保存されます。

例:

idfruit_name
1りんご
2みかん
3ぶどう

PHPは必要なときだけ取得します。

メリット

  • 数千件以上でも管理しやすい
  • 検索機能を作りやすい
  • 更新が簡単

デメリット

  • 初期設定が必要
  • SQLの知識が必要

この方法が向いているケース

  • LPを大量生成したい
  • メーカー別ページ
  • 商品別ページ
  • 地域別ページ
  • 検証サイト
  • 小規模なオウンドメディア

まとめ

処理の流れは非常にシンプルです。

URLパラメータ(?fruit=3)
       ↓

index.php が受け取る($_GET['fruit'])

       ↓

data.phpから取得($fruits[3])

       ↓

HTMLへ表示

<?php echo $config['fruit_name']; ?>

この方法を使えば、

  • データベース不要
  • PHPだけで完結
  • 1つのテンプレートで大量ページ生成

が実現できます。

まずは配列で仕組みを理解し、データ量が増えてきたらMySQLへ移行するのがおすすめです。

PHP初心者が「動的ページの考え方」を学ぶ最初のステップとしても非常にわかりやすい方法です。