前回「PHPでホームページ作成!ページ更新を楽にする方法-ヘッダー・フッター」で、メンテナンスが楽になる方法をご紹介しました。

今回は、PHPでホームページを作る際にリンク毎にファイルを作るのは面倒だし、メンテナンスも大変ですよね。

そんなときに便利なのが、クエリパラメータをindexファイルで用いる方法です。

果たしてこれが良いのか悪いのかは正直なところわかりませんwですが、アクセスを制限や、更新情報の表示、前のページで入力した情報をリンク先で読み込むなどの際には非常に便利です。

クエリパラメータとは?

クエリパラメータとは、検索エンジンやサイト内検索などでも見かけるwebサーバーの情報を伝えるために付け加えるURLの「?」以降の値のことです。

例えば

www.net-soleil.com/?s=sample

これの「?s=sample」がクエリパラメータです。これは「s」という定数に「sample」という値の情報を送ります。

パラメータは1つとは限らず「&」で繋げる事で複数の情報を伝えることが可能となります。

例えば、サイト内検索するには検索ページへの情報としてまずは例として「search」という値を送らなければいけません。

www.net-soleil.com/?page=search

これだけど検索ページに行くだけで検索文字列の情報がありません。そこで検索文字列を送るために「&」を使って追加の情報を付け加えてしまいます。

www.net-soleil.com/?s=search&moji=テスト

これで「search」というページに「テスト」という文字を送ることで検索ページでは「テスト」に関連する文字列を検索し表示します。※「&」以降は「?」は必要ありません。

定数名はリンク先で「$_GET」で取得できます。

1ファイルで複数ページを作れる!

基本的にクエリパラメータを用いるのは記入内容をリンク先に送る場合に用います(例えばお問い合わせやサイト内検索など)。

ですが、今回はわかりやすく説明するためにindex.php内でページが変わる方法を説明していきます。

まず「index.php」を用意します。今回このページでは前回説明したファイルを活用して説明していきます。

「$_GET」だけでできますが、筆者的にdefine関数を使用したほうがメンテナンスも楽なので今回の説明ではdefine関数を用います。

define関数とは

define(‘定数名’,’定数値’);

定数名は大文字の英数字で指定します。

定数値は日本語も使えます。

※定数名にも日本語は使えるようだがスクリプトエラーになるリスクを抑えるために日本語は控えたほうがいいです。

define()は定数を定義するための関数です。

indexファイルで複数ページ

if文を用いて使っていきます。

<?php
require "./header.php";
require "./footer.php";
require "./ini.php";
echo $header;
define("PAGE", $_GET['s']);?>
<body>
<?php if (PAGE == "main"): ?>
	<p>
	サンプルメインページ<br>
	</p>
<?php else: ?>
	<p>
	サンプルページ<br>
	<a href="./?s=main">メインページへ</a>
	</p>
<?php endif; ?>
</body>
<?php echo $footer; ?>

実行結果がこちら→【サンプル

ちなみに定数名は「s」でなくとも何でも使用できます。

情報をリンク先に引き継ぐ

これを応用して下記のようにすることができます。

サンプル

記述内容

<?php
require "./header.php";
require "./footer.php";
require "./ini.php";
echo $header;
define("PAGE", $_GET['s']);
extract($_POST);?>
<body>
<?php if (PAGE == "main"):?>
	<p>
	サンプルメインページ<br>
	ようこそ<font color="#FF0000"><?php echo $name; ?></font>さん!
	</p>
<?php else: ?>
	<p>
	サンプルページ<br>
	<form method="post" action="./?s=main">
	<p>お名前:<input type="text" name="name" size="30"></p>
	<p><input type="submit" value="送信する"></p>
	</form>
	</p>
<?php endif; ?>
</body>
<?php echo $footer; ?>

textボックスの中身は$_POSTとして送信されます。

上記の内容で行くと$_POST[‘name’]としてnameの値を表示しますが、「extract($_POST)」を用いることにより$nameと表示させることができます。



ブログランキング・にほんブログ村へ