練習問題

練習問題を通して本レッスンで学んだことを確認してみましょう!

問題1

PHPの「ヒアドキュメント」を使うと長文を出力することができます。では、ヒアドキュメントを利用して画面に、あなたのメールアドレスをQRコードで表示してみてください。

ヒント

QRコードは、Google Chart APIを使うと、簡単に表示できるのでした。また、ヒアドキュメントの書き方については、本文(Lesson4-1)で確認しましょう。

http://chart.apis.google.com/chart?cht=qr&chs=150x150&chl=(ここに値)

答え

ここでは、「hoge@example.com」というメールアドレスをQRコードで表示します。

file: 1-qrcode.php

<?php
$str = "hoge@example.com";
$str_htm = htmlspecialchars($str);
$str_url = urlencode($str);
$chartapi = "http://chart.apis.google.com/chart";
echo <<< __QRCODE__
<h1>$str_htm</h1>
<img src="$chartapi?cht=qr&chs=150x150&chl=$str_url" />
__QRCODE__;
実行したところ
実行したところ

ここでポイントとなるのは、ヒアドキュメントですね。問題の中で使うように指示されてますから!
ヒアドキュメントの中では、変数名を「$str_url」のように書いて値を埋め込めるのも便利な点です。
それから、QRコードに変換する値をURLとして指定する場合には、urlencode()を使う点も忘れないようにしたいところです。

問題2

配列とforeach構文を使って、セレクトボックスに、旧月名の一覧を表示させてみてください。また、選択して送信したら、それが現在の何月に当たるのかを表示するプログラムを作ってみてください。

ヒント

旧月名と現在の月番号の対応を連想配列で表すと、以下のようになります。

$moon = array( 1=>"睦月", 2=>"如月", 3=>"弥生", 4=>"卯月", 
               5=>"皐月", 6=>"水無月", 7=>"文月", 8=>"葉月", 
               9=>"長月", 10=>"神無月", 11=>"霜月", 12=>"師走");

答え

旧月明から現在の月番号を表示するプログラムは以下のようになります。
ポイントは、配列の初期化と、foreach構文を使ってセレクトボックスを作るところです。

file:2-moon.php

<?php
// 旧月名と現在の月の対応
$moon = array( 1=>"睦月", 2=>"如月", 3=>"弥生", 4=>"卯月", 
               5=>"皐月", 6=>"水無月", 7=>"文月", 8=>"葉月", 
               9=>"長月", 10=>"神無月", 11=>"霜月", 12=>"師走");
// パラメータが送信されているか?
if (isset($_GET["moon"])) {
    // 結果を表示
    $no = intval($_GET["moon"]);
    $name = $moon[$no];
    echo "{$name}は、{$no}月です。";
} else {
    // セレクトボックスを表示
    echo "<form><select name='moon'>";
    foreach ($moon as $no => $name) {
        echo "<option value='$no'>$name</option>";
    }
    echo "</select>";
    echo "<input type='submit' value='送信'/>";
    echo "</form>";
}
画面
画面
画面
画面

 本文の中で、旧月明がキー(配列要素名)になった連想配列も紹介しましたが、ヒントでは、現在の月番号がキーとして示されています。せっかくなので、この形式を使ってセレクトボックスを作成してみました。セレクトボックスの選択肢には、選択肢のラベルに表示するテキストの他に、選択肢の値としてvalue属性に送信する値を指定できます。そのため、セレクトボックスを表示する段階で、value属性を指定しています。