はじめに
PHPの構文についてはこちらでまとめているのでよかったら見てみてください。
この記事では、PHPの書き方はなんとなくわかったけれど実際どうやって使うのかというところにフォーカスを当てていきます。
WebサイトにおけるPHPの立ち位置
PHPに限った話ではないですがWebサイトの作成をする際に「HTML+CSS」に加えてPHPが必要になるかは、HTMLが動的であるかどうかによります。
以下の例のように会員制のWebサイトで会員情報を表示させたいとなったら、会員の情報によってHTMLを書き換える必要がある(=動的)ので、PHPなどが必要になってくるわけです。
PHP導入前の.HTMLファイル
<body>
<header>
<div class="user-info">
<div>ユーザーの名前</div>
<div>ユーザーの会員番号</div>
</div>
</header>
</body>
以下がphp言語を使用したphpファイルです。phpファイル = php言語だけが書かれているというわけでなく、HTML言語と混在していることがわかります。
厳密なコードではないですが、echoによってユーザーごとの情報を出力させています。
PHP導入 ⇒ .PHPファイル
<body>
<header>
<div class="user-info">
<?php
$userName = データベースなどから値を取得();
$userId = データベースなどから値を取得();
?>
<div><?php echo $userName ?></div>
<div><?php echo $userId ?></div>
</div>
</header>
</body>
最小のPHP
<body>
<?php 処理 ?>
</body>
- <?php と ?>で囲われた箇所にphpを記述します。
- 逆に<?php ?>外でphpを記述するとエラーになります。(外で記述できるのはhtml言語です。)
PHP内のHTML言語
<body>
<?php
<p>HTML言語です。</p>
?>
</body>
- <?php ?>内はphpを記述する空間ですが、 「<p>HTML言語です。</p>」はhtml言語なのでエラーになります。そのため、以下のように書き換える必要があります。
- “” で囲えばphp言語の文字列として扱われるのでエラーになりません。
<body>
<?php
echo "<p>HTML言語です。</p>";
?>
</body>
制御文
制御文内では、html言語を文字列化せず、php内に記述する方法があります。
- 方法1のデメリット
- <?php ?>で全体が囲われてしまい、phpとhtmlの境が分かりづらいです。
- 1と関連しますが、例えば、if文とfor文の間に純粋な(動的な値のない)<span>タグを3行追加する場合。それらに対しても、echoを手前に付けて、””で囲って…という手間が発生します。
- 方法2の記法
phpでの制御文とは2か所構文が異なります。
- 「{」を「:」にします。
- 「}」を「end〇〇」にします。
〇〇はif文ならendif, for文ならendforです。
方法1.行全体を文字列にする。
<?php
if($loginSucceed) {
echo "<span>こんにちは:.{$userName} ?></span>"
}
foreach($animals as $animal) {
echo "<span>.${animal -> name}</span>"
}
?>
方法2.「制御文~end制御文」を用いる。
<body>
<!-- if -->
<?php if($loginSucceed): ?>
<span>こんにちは:<?php echo $userName ?></span>
<?php endif ?>
<!-- foreach -->
<?php foreach($animals as $animal): ?>
<span><?php echo $animal -> name ?></span>
<?php endforeach ?>
</body>
PHPファイル間でデータの送受信をする。
あるphpで入力されたデータを別のphp側で受け取る必要が出てきます。
今回の例ではinput.phpからconfirm.phpにデータの受け渡しをします。
POSTの場合
送信側
- formタグを使ってデータを送信します。送信先をaction属性に設定します。
- name属性のついたタグのvalue属性が(name : value)のセットで送信されます。この場合、「fullname」「seibetsu」は送信対象、「weight」「height」はname属性を設定していないので送信対象外です。
<body>
<form method="post" action="confirm.php">
<input type="text" name="fullname" class="fullname" />
<input type="text" class="weight" />
<input type="text" class="height" />
<select name="seibetsu">
<option value="unknown">不明</option>
<option value="man">男性</option>
<option value="woman">女性</option>
</form>
</body>
受信側
- 受信データは連想配列の形式で$_POSTに格納されています。
- 格納形式はこんな感じです。 $_POST = array(“fullname” => “勝海舟”, “seibetsu => “man”);
<body>
<span>名前:<?php $_POST["fullname"] ?></span> <!-- 勝海舟 -->
<span>性別:<?php $_POST["seibetsu"]</span> <!-- man -->
</body>
GETの場合
送信側
- リンク押下時なども、URLにクエリを追加することでデータの送信が可能です。
<body>
<a href="confirm.php?fullname=勝海舟&seibetsu=man" />
</body>
受信側
- _POSTでなく_GETに送信データが格納されています。
<body>
<span>名前:<?php $_GET["fullname"] ?></span> <!-- 勝海舟 -->
<span>性別:<?php $_GET["seibetsu"]</span> <!-- man -->
</body>