<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>php lesson</title>
<link rel="stylesheet" href="http://chigumaya.com/css/reset.css">
<link rel="stylesheet" href="http://chigumaya.com/css/common.css">
<link rel="stylesheet" href="css/lessonbook.css">
</body>
</head>

<body>

        <!--<section>
            <div class="code">
                <h1>while構文</h1>
                <p>繰り返しを行う条件式を記述。</p>
                <p>この条件式が真の間は繰り返し処理を行います。</p>
            </div>
            <div class="memo">
                <p>while (条件式) {<br>
                //<br>
                //ここに繰り返したい処理ブロック<br>
                //<br>
                }
                </p>
            </div>
        </section>-->

<div class="wrapper">
    <article>
        <h1>PHPレッスンブック クジラ飛行机著</h1>
        <section>
            <div class="code">
                <h1>インチからセンチへの単位変換</h1>
                <?php
                
if (isset($_GET["inch"])) { //値が送信されているか?
                    //変換結果を表示
                    
$inch $_GET["inch"];    //入力されたデータを取得
                    
$inch floatval($inch);    //文字列から数値へ変換
                    
$cm 2.54 $inch;    //インチからセンチへ変換
                    
echo "<div>(結果){$inch}インチ = {$cm}センチメートル</div>";
                } else {
                    
//値が送信されていない場合(フォームを表示)
                    
$self $_SERVER["SCRIPT_NAME"];    //このファイルのURLを取得
                    
echo "<form action='$self' method='GET'>";
                    echo 
"<input type='text' name = 'inch' value = '' />";
                    echo 
"<input type='submit' value='変換' />";
                    echo 
"</form>";
                }
                
?>
            </div>
            <div class="memo">
                <h2>if</h2>
                <p>処理の分岐を行う構文</p>
                <br><br>
                <h2>isset()</h2>
                <p>変数に値が設定されているかを判別する関数</p>
            </div>
        </section>
        
        <section>
            <div class="code">
                <h1>文字列を数値へ変換</h1>
                <?php
                $inch 
"3.14";
                
$inch_v floatval($inch);
                echo 
$inch_v;
                
?>
            </div>
            <div class="memo">
                <h2>floatval($str)</h2>
                <p>文字列$strを実数に変換して返す</p>
                <br><br>
                
                <h2>intval($str)</h2>
                <p>文字列$strを整数に変換して返す</p>
            </div>
        </section>
        
        <section>
            <div class="code">
                <h1>表示中のページのURLを調べる方法</h1>
                <?php
                    
echo $_SERVER["SCRIPT_NAME"];
                
?>
                <?php
                    $self 
$_SERVER["SCRIPT_NAME"]; //このファイルのURLを取得
                    
echo "<form action='$self' method='GET'>";
                    echo 
"<input type='text' name='inch' value=''>";
                    echo 
"<input type='submit' value='変換'>";
                    echo 
"</form>";
                
?>
                <p>※上をクリックするとURLが変更。GETメソッドだからなのだ</p>
            </div>
            <div class="memo">
                <h2>$_SERVER["SCRIPT_NAME"]</h2>
                <p>現在表示中のURLを取得</p>
                <p>※formのactionに指定しておけば、ファイル名やディレクトリを変更してもformの送信先を修正す必要がない</p>
                <p>※GETメソッドはURLが変化、POSTメソッドはURLに変化なし</p>
            </div>
        </section>
        
        <section>
            <div class="code">
                <h1>$_POSTで単位変換した場合</h1>
                <?php
                    
if (isset($_POST["inch"])) { //価が入力されているか?
                        //変換結果の表示
                        
$inch $_POST["inch"]; //入力されたデータを取得
                        
$inch floatval($inch); //文字列から数値へ変換
                        
$cm 2.54*$inch;
                        echo 
"<div>(結果) {$inch}インチ = {$cm}センチメートル</div>";
                    }
                    else {
                        
//価が入力されていない場合(フォームの表示)
                        
$self $_SERVER["SCRIPT_NAME"];
                        echo 
"<form action='$self' method='POST'>";
                        echo 
"<input type='text' name='inch' value=''>";
                        echo 
"<input type='submit' value='変換'>";
                        echo 
"</form>";
                    }
                
?>
            </div>
            <div class="memo">
                <h2>$_REQUEST</h2>
                <p>formのmethod属性がGETでもPOSTでも受け取れる</p>
            </div>
        </section>

        <section>
            <div class="code">
                <h1>肥満度判定プログラム</h1>
                <?php
                    
//フォームから体重と身長のデータが両方送信されているか?
                    
if (isset($_GET["w"]) && isset($_GET["h"])) {
                        
//データが送信されていればBMIを計算
                        
$w floatval($_GET["w"]); //体重(kg)
                        
$h floatval($_GET["h"]); //身長(cm)
                        
$bmi $w pow($h 1002); //BMI値を計算
                        
$per floor(($bmi 22)*100); //肥満率を計算
                        //結果を表示
                        
echo "体重{$w}kg,身長{$h}cm<br>";
                        echo 
"BMIは{$bmi}<br>";
                        echo 
"肥満度は{$per}%です。";
                    }
                    else {
                        
//データが送信されていない場合はフォームを表示
                        
echo "<form>";
                        echo 
"身長:<input type='text' name='h'>cm<br>";
                        echo 
"体重:<input type='text' name='w'>kg<br>";
                        echo 
"<input type='submit' value='BMI判定'>";
                        echo 
"</form>";
                    }
                
?>
            </div>
            <div class="memo">
                <h2>pow(基数,指数)</h2>
                <p>べき乗を計算する</p>
                <br><br>
                <h2>float(数値)</h2>
                <p>数値の端数を切り捨てる</p>
                <br><br>
                <h2>cell(数値)</h2>
                <p>数値の端数を切り上げる</p>
                <br><br>
                <h2>round(数値)</h2>
                <p>数値の端数を丸める</p>
                <br><br>
                <h2>if (条件式) {<br>
                //条件が真の時の処理<br>
                } else {<br>
                //条件が偽の時の処理<br>
                }
                </h2>
                <p>※このときelse以降は省略することができる</p>
                <br><br>
                <h2>if条件式が真のときの処理が単文であるなら、波括弧は省略可能</h2>
                <p>$i = 1;<br>
                if ($i == 1) echo "1でした";<br>
                if ($i == 2) echo "2でした";<br>
                if (Si == 3) echo "3でした";<br>
                </p>
            </div>
        </section>

        <section>
            <div class="code">
                <h1>比較演算子</h1>
                <p>if構文で使用可能。<br>
                結果が正しい時は真(true)、間違っている時は偽(false)となる。
                </p>
            </div>
            <div class="memo">
                <h2>$a == $b</h2>
                <p>$aと$bの値が正しい</p>
                <br><br>
                <h2>$a != $b</h2>
                <p>$aと$bの値が等しくない</p>
                <br><br>
                <h2>$a > $b</h2>
                <p>$aが$bより大きい</p>
                <br><br>
                <h2>$a >= $b</h2>
                <p>$aが$bと等しいか、より大きい</p>
                <br><br>
                <h2>$a < $b</h2>
                <p>$aが$bより小さい</p>
                <br><br>
                <h2>$a <= $b</h2>
                <p>$aが$bと等しいか、より小さい</p>
                <br><br>
                <p>※「=」の場合は代入文と見なされ、常に結果が真となる。
            </div>
        </section>

        <section>
            <div class="code">
                <h1>論理演算</h1>
                <p>複数の条件式を指定することができる</p>
            </div>
            <div class="memo">
                <h2>A && B</h2>
                <p>AもBも真である。論理積(AかつB)</p>
                <br><br>
                <h2>A || B</h2>
                <p>AあるいはBのどちらかが真である。論理和(AまたはB)</p>
                <br><br>
                <h2>!A</h2>
                <p>Aではない。否</p>
                <br><br>
                <h2>$iが2の倍数でかつ3の倍数であるか調べる場合</h2>
                <p>
                if ($i % 2 == 0 && Si % 3 == 0) {<br>
                    echo "$iは、2の倍数でかつ3の倍数です。";
                </p>
                <p> ※「%」は割り算の余り</p>
            </div>
        </section>

        <section>
            <div class="code">
                <h1>年齢を計算するプログラム</h1>
                <form>
                    <select name="year">
                        <option>生年月日を選んでください</option>
                        <?php
                            $this_year 
date("Y"); //今年を取得
                            
$end_year $this_year 80//終了年を計算(80年分)
                            
$y $this_year//開始する年をリセット
                            
while ($y >= $end_year) { //繰り返し処理
                                
echo "<option value='$y'>西暦{$y}年</option>";
                                
$y--; //1年分を減算する
                            
}
                        
?>
                    </select>
                    <input type="submit" value="計算">
                </form>
                <?php //生年を計算して表示
                    
if (isset($_GET["year"])) {
                        echo 
"今年".($this_year intval($_GET["year"]))."才です。";
                    }
                
?>
                <br>
                <br>
                <select name="price_list" size="1">
                    <option value="130" selected>トマト</option>
                    <option value="210">イチゴ</option>
                    <option value="180">トウモロコシ</option>
                </select>
            </div>
            <div class="memo">
                <h2>セレクトタグに指定rできる属性</h2>
                <p>name<br>送信する時の名前を指定</p>
                <br>
                <p>size<br>選択肢の行数を指定 ※1を選択すると▼が表示</p>
                <br>
                <p>desabled<br>部品を入力できないように指定</p>
                <br>
                <h2>オプションタグに指定できる属性</h2>
                <p>value<br>送信する値</p>
                <br>
                <p>label<br>表示ラベルの指定 ※通常はタグ内に指定</p>
                <br>
                <p>value<br>送信する値</p>
                <br>
                <p>seletted<br>項目を選択状態にする</p>
                <br>
                <p>value<br>項目を選択できないようにする</p>
            </div>
        </section>

        <section>
            <div class="code">
                <h1>while構文</h1>
                <p>繰り返しを行う条件式を記述。</p>
                <p>この条件式が真の間は繰り返し処理を行います。</p>
            </div>
            <div class="memo">
                <p>while (条件式) {<br>
                //<br>
                //ここに繰り返したい処理ブロック<br>
                //<br>
                }
                </p>
            </div>
        </section>

        <section>
            <div class="code">
                <h1>1から10まで次々に変更して表示するプログラム</h1>
                <?php
                    $i 
1;
                    while ( 
$i <=10) { //$iが10以下であれば繰り返す
                    
echo "<p> i = $i </p>"//$iの値を表示
                    
$i ++; //$iの値を加算する
                    
}
                
?>
            </div>
            <div class="memo">
                <h2>無限ループに注意</h2>
                <p>PHPではプログラムが一定時間実行され続けると強制的にプログラムを終了させる便利な機能がある。<br>
                PHPの設定ファイルphp.iniで指定されているmax_execution_timeで指定可能です。
                </p>
            </div>
        </section>
        
                <section>
            <div class="code">
                <h1>date()</h1>
                <p>「今年」の値の取得方法</p>
                <pre><?php
                
echo "今年は..." date ("Y") . "年 \n"//表示例 今年は...2016年
                
echo "今月は..." date("m") . "月 \n"//表示例 今月は...2月
                
echo "今日は..." date("d") . "日 \n"//表示例 今日は...17日
                
echo "今の時間は..." date("H") . "時 \n";
                echo 
"今の分は..." date("i") . "分 \n";
                echo 
"今の秒は..." date("s") . "秒 \n";
                
?>
                </pre>
                <br>
            </div>
            <div class="memo">
                <h2>Y</h2>
                <p>年 2016</p>
                <br><br>
                <h2>m</h2>
                <p>月 02</p>
                <br><br>
                <h2>d</h2>
                <p>日にち 17</p>
                <br><br>
                <h2>H</h2>
                <p>時間 22</p>
                <br><br>
                <h2>i</h2>
                <p>分 13</p>
                <br><br>
                <h2>s</h2>
                <p>秒 41</p>
                <br><br>
                <h2>連続表記</h2>
                <p>date("Y-m-d") 2016-02-17</p>
                <p>date("H:i:s") 22:13:41</p>
            </div>
        </section>
        
        <section>
            <div class="code">
                <h1>ボタン32個生成</h1>
                <?php
                    
//32個のbuttonタグを作る
                    
echo "<form>";
                    for (
$i 1$i <=32$i++) {
                        echo 
"<input type='submit' name='btn' value='{$i}' style='width:48px;'>";
                    }
                    echo 
"</form>";
                    
//ボタンが押されていれば、押された番号を表示
                    
if (isset($_GET["btn"])) {
                        
$btn intval($_GET["btn"]);
                        echo 
"<p>ボタンの{$btn}番が押されました</p>";
                    }
                
?>
            </div>
            <div class="memo">
            </div>
        </section>
        
        <section>
            <div class="code">
                <h1>for構文</h1>
                <p>繰り返しを行う条件式を記述。</p>
                <p>この条件式が真の間は繰り返し処理を行います。</p>
                <p>for構文とwhile構文の同記述内容</p>
                <br>
                <p>forの場合</p>
                <?php
                    
for ($i 1$i <= 3$i++) {
                        echo 
"<p>i = $i</p>";
                    }
                
?>
                <br>
                <p>whileの場合</p>
                <?php
                    $i 
1//変数の初期化
                    
while ($i <= 3) { //条件式
                     
echo "<p>i = $i</p>";
                     
$i++; //変数の増分指定
                    
}
                
?>
            </div>
            <div class="memo">
                <p>for (変数の初期化; 条件式; 変数の増分指定) {<br>
                //<br>
                // 繰り返したい処理ブロック<br>
                //<br>
                }
                </p>
            </div>
        </section>

        <section>
            <div class="code">
                <h1>繰り返しからの脱出「break」</h1>
                <br>
                <?php
                    
for ($i 1$i<=100$i++) {
                        echo 
"[$i]";
                        if (
$i == 10) break;
                    }
                
?>
            </div>
            <div class="memo">
                <p>if() break;
                </p>
            </div>
        </section>

        <section>
            <div class="code">
                <h1>アクセスの度に異なるメッセージを表示</h1>
                <br>
                <?php
                    $no 
rand(1,5); //ランダム数値を取得
                    
switch ($no) { //数値によって処理を分岐する
                        
case 1:
                            
$msg "人と生活をめくる";
                            break;
                        case 
2:
                            
$msg "26人のストーリー";
                            break;
                        case 
3:
                            
$msg "よく考えてみると、当たりまえかもしれないこと";
                            break;
                        default:
                            
$msg "岩木遠足";
                    }
                    echo 
$msg;
                
?>
            </div>
            <div class="memo">
                <h2>ランダム数値の取得</h2>
                <p>$変数 = rand(最小値,最大値);</p>
            </div>
        </section>

        <section>
            <div class="code">
                <h1>多分岐構文 switch</h1>
                <br>
                <p>
                    switch (判定する値) {<br>
                        case 選択肢の値1:<br>
                            //処理1<br>
                            break;<br>
                        case 選択肢の値2:<br>
                            //処理2<br>
                            break;<br>
                        case 選択肢の値3:<br>
                            //処理3<br>
                            break;<br>
                        default:<br>
                            //上記以外の時<br>
                    }
                </p>
            </div>
            <div class="memo">
                <h2>ランダム数値の取得</h2>
                <p>$変数 = rand(最小値,最大値);</p>
            </div>
        </section>

        <section>
            <div class="code">
                <h1>QRコード変換</h1>
                <?php
                    
//【1】パラメーターのチェックと処理の分岐
                    //パラメーターが送信されているかをチェック
                    
$param "";
                    if (isset(
$_GET["param"])) $param =$_GET["param"]; 
                    
//パラメーターにより処理を分岐
                    
switch ($param) {
                        case 
"big-qrcode" show_qrcode(300); break;
                        case 
"small-qrcode" show_qrcode(150); break;
                        default : 
show_form(); break;
                    }
                    
//【2】それぞれの処理を行う関数
                    //QRコードの表示
                    
function show_qrcode($size) {
                        
$url urlencode($_GET["url"]);
                        
$api "http://chart.apis.google.com/chart?cht=qr&";
                        
$src $api."chs={$size}x{$size}&chl={$url}";
                        echo 
"<img src='$src' />";
                    }
                    
//入力フォームの表示
                    
function show_form() {
                        echo<<<EOF
                        <form>
                            <h2>QRコードに変換したURLとサイズを指定</h2>
                            <input type="text" name="url">
                            <select name="param">
                                <option value="big-qrcode">大</option>
                                <option value="small-qrcode">小</option>
                            </select>
                            <input type="submit" value="変換">
                        </form>
EOF;
                    }
                
?>
            </div>
            <div class="memo">
                <h2>show_form()関数</h2>
                <p>フォームの表示</p>
                <br><br>
                <h2>show_qrcode($size)関数</h2>
                <p>サイズに応じたQRコードを表示</p>
            </div>
        </section>

        <section>
            <div class="code">
                <h1>関数(function)の定義方法</h1>
                <p>関数とは複数の命令の集まりを1つの命令として定義するものである。<br>
プログラムを機能的に分割する単位としても使われます。<br>
関数は任意の数の引数を持つことができ、return文に関数の戻り値を指定することができる。</p><br>
            <p>function 関数名 ($引数1, $引数2, $引数3, ...) {<br>
            //<br>
            //ここに関数で行う処理<br>
            //<br>
            return 関数の戻り値;<br>
            </p>
            </div>
            <div class="memo">
                <h2>足し算の関数</h2>
                <p>
                    <pre>
                    function my_add ($a, $b ) {
                        $c = $a + $b;
                        return $c;
                    }
                    //関数の利用例
                    echo my_add(3,5)."\n";  //表示結果:8
                    echo my_add(4,2)."\n";  //表示結果:6
                    echo my_add(2,3)."\n";  //表示結果:5
                    </pre>
                </p>
            </div>
        </section>

        <section>
            <div class="code">
                <h1>商品をセレクトボックスで選択するプログラム</h1>
                    <?php
                        
//商品一覧の定義
                        
$goods = array("目薬","日焼け止め","シャンプー","虫除けスプレー","石けん","ガム","チョコレート","バナナ");
                        
//パラメーターに応じて処理を変える
                        
if (isset($_GET["goods"])) {
                            
show_item();
                        } else {
                            
show_form_item();
                        }
                        
                        
//選択したアイテムを表示する
                        
function show_item() {
                            
$goods $_GET["goods"];
                            
$goods_html htmlspecialchars($goods); //html変換
                            
echo "商品「{$goods_html}」を購入しました。";
                        }
                        
                        
//フォームを表示する
                        
function show_form_item() {
                            global 
$goods//グローバル宣言
                            //選択肢の文字列を生成する
                            
$options "";
                            foreach (
$goods as $item) {
                                
$options .="<option value='$item'>$item</option>";
                            }
                            
                            
//フォームをヒアドキュメントで表示
                            
echo <<< EOF02
                                <form>
                                    <select name="goods">
                                        <option>商品を選択</option>
                                        
{$options}
                                    </select>
                                    <input type="submit" value="購入">
                                </form>
EOF02;
                        }
                    
?>
            </div>
            <div class="memo">
            </div>
        </section>

        <section>
            <div class="code">
                <h1>配列について</h1>
                <p>配列変数とは1つの変数の中に複数の値を保持することができる仕組み</p>
                <P>$_GETや$_POSTも配列の仲間で$_GET["変数"]と書いて1つの変数の中から複数の値を取り出すことが可能</P>
                <h2>記述例</h2>
                <p>
                    $a = array(); //配列の初期化<br>
                    $a[0] = "カボチャ";<br>
                    $a[1] = "ミカン";<br>
                    $a[2] = "レンコン";<br>
                    echo $a[2]; //表示結果:レンコン<br>
                    ※番号は自動的に付与されるが、0番から始まるので注意!
                </p>
            </div>
            <div class="memo">
                <h2>先頭を1番にするなど番号や名前を自分で指定したい場合</h2>
                <p>【番号=>値】と記述</p>
                <p>"$moon = array( 1=>"睦月", 2=>"如月", ... );<br>
                echo $moon[1]; //表示結果:睦月
                </p>
                <br>
                <h2>連想配列</h2>
                <p>文字列と要素名となる配列のこと</p>
                <p>"$moon = array( "睦月"=>"1", "如月"=>2, ... );<br>
                echo $moon["睦月"]; //表示結果:1
                </p>
            </div>
        </section>

        <section>
            <div class="code">
                <h1>foreach構文</h1>
                <p>foreach ($配列変数 as $値 {<br>
                //繰り返す処理<br>
                }<br>
                もしくは<br>
                foreach ($配列変数 as $要素名 => $値) {<br>
                //繰り返す処理<br>
                }<br>
                </p>
                <?php
                
//配列の初期化
                
$fruits = array("イチゴ","バナナ","オレンジ","マンゴー");
                
//変数の要素を1つずつ列挙
                
foreach ($fruits as $item) {
                    echo 
"<p>$item</p>";
                }
                
?>
            </div>
            <div class="memo">
                <h2>連想配列をforeach構文で繰り返し列挙</h2>
                <?php
                
//配列の初期化
                
$fruits02 = array("イチゴ"=>300,"バナナ"=>120,"オレンジ"=>200,"マンゴー"=>540);
                
//変数の要素を1つずつ列挙
                
echo "<table>";
                foreach (
$fruits02 as $item02 =>$price) {
                    echo
"<tr><th>$item02</th><td>{$price}園</td></tr>\n";
                }
                echo 
"</table>";
                
?>
            </div>
        </section>
        
        <section>
            <div class="code">
                <h1>ラジオボタンで色を選択</h1>
                <?php
                    
//主な処理の流れ
                    
show_header(); //HTMLヘッダを表示
                    
show_form(); //色変更のフォームを表示
                    
show_footer(); //HTMLのフッタを表示
                    //HTMLのヘッダを表示(この時に背景色を指定する)
                    //フォームで表示で利用するラジオボタンとラベルの作成
                    
function create_radio_code($name,$code) {
                        return <<< RADIO
                        <input type="radio" id="$name" name="color" value="$code">
                        <label for="
$name">$name</label>
RADIO;
                    }
                
?>
            </div>
            <div class="memo">
                <p>while (条件式) {<br>
                //<br>
                //ここに繰り返したい処理ブロック<br>
                //<br>
                }
                </p>
            </div>
        </section>
        
    </article>
</div>
</body>
</html>