学習記録：PHP 

#8月29日　PHP
##　はじめに

「何故PHPを学習しようとしてHTMLの話が出てくるのか」という筆者の初歩的な疑問に答えるため、筆者はネットの海に潜って調べる事にした。

- PHPはサーバーサイドでコードを実行することで、クライアント側にコードを隠す事が出来る
- HTMLの一部分に埋め込んで使用する事ができ、「関数」などHTMLやCSSが持たない機能を拡張できる
- MySQLなどの関係データベース管理システムと連携し、データの索引などが可能。また、クライアント側で入力された情報の保存も出来る。


※PHPとMySQLを連携する方法に興味をもって下記の記事を読んでみましたが、あえなく撃沈しました。[PHP 【保存版!!】PHPからMySQLに接続する方法etc【データベース】](https://qiita.com/icelandnono/items/0ae83baa779c293897a5)

なるほど、それでHTMLやCSSの話が出てくるのね、と納得したところで、progate -> PHPのⅠ章の振り返り（Ⅱ章の振り返りは…後に続きます）

##　個人的なメモ

**変数展開**

```php:
  <?php
// 'こんにちは！'という文字列と$nameを連結してechoする
    $name = 'IKARIN';
    // {$name}を用いて文字列とつなぐ場合は、全体を"　"で囲う。' 'は使用できない。
    echo  "こんにちは！{$name}" ;
    echo '<br>' ;
    //{ }を用いずに文字列と$nameをつなぐ場合は、'文字列'.$nameのようにつなぐ。
    echo 'こんにちは！'.$name ;
  ?>
```

**配列（array）**

```php:
  <?php
 // 配列化：$配列名 = array(値１, 値2, ・・・);
    $colors = array("赤","青","黄") ;
    echo $colors[0] ;
 // 配列の末尾に値を追加するときは「$配列名[] = 値;」  
    $colors[] = "白" ;
    echo $colors[3] ; →白が呼び出される
  ?>
```

**連想配列**

```php:
  <?php
    // 連想配列では「$配列名 = array('キー名' => '値１', ・・・);」と表記する
    $scores = array(
      '数学' => 70 ,
      '英語' => 90 ,
      '国語' => 80 ,
    ) ;
   // 連想配列から呼び出す時は、「$配列名[キー名];」とする
    echo $scores['国語'] ;　→80が出力される
  ?>
```

**配列・連想配列に対する、先頭のデータから順の繰り返し処理**

```php:
  <?php
    $scores = array('数学' => 70, '英語' => 90, '国語' => 80);
    // foreach ($配列名 as $値変数 ) ;
    // または
    // foreach ($配列名 as $キー変数 => $値変数 ) ;
    foreach ($scores as $key => $value ) {
    // $scores[1] → $scores[2] → と処理が進む
      echo "{$key}は{$value}点です。" ;
    // 結果：数学は70点です。英語は90点です。国語は80点です。
    } 
  ?>
```

**関数を定義する**

```php:
  <?php
    // 関数の定義　function 関数名()　{ ; }
    function hello () {
    echo 'Hello, world!' ;
    }
    hello () ;
    //結果： Hello, world!
    
    // 引数のある関数の定義　function 関数名(仮引数,…)　{ ; }
    function printRectangleArea ($height , $width) {
      echo $height * $width ;
    }
    printRectangleArea(5,10) ;
    //結果：50
  ?>
```
**フォーム作成に関する構文**

作っているときはfor、arrayとforeachに苦しめられましたが、
振り返ってみると理解が進んだ…気がします。

```php:index.php
  <div class="main">
    <div class="contact-form">
      <div class="form-title">お問い合わせ</div>
　　<!-- フォーム作成の準備：
　　<form method="getまたはpost" action="送信先（絶対URLか相対URL）"> 
　　　sent.phpは相対URL（ファイル名で指定）　-->
　      <form method="post" action="sent.php">
        <div class="form-item">名前</div>
　　<!-- 改行を含まないテキストボックスの生成：<input type="text"> 、閉じタグは不要
　　入力された値を受け取る際に使用するデータ名を設定する　name="名前"　-->
        <input type="text" name="name">
        <div class="form-item">年齢</div>
　　<!--　セレクトボックスの生成　<select>タグの中に<option>タグを並べる　
　　今回は$_POSTで値を受け取るため、<select>タグ内にnameを設けている
　　value=の値が初期値として表示される　-->
        <select name="age">
          <option value="未選択">選択してください</option>
          <?php 
            for ($i = 6; $i <= 100; $i++) {
              echo "<option value='{$i}'> {$i} </option>";
            } 
          ?>
        </select>
        <div class="form-item">お問い合わせの種類</div>
        <!--  -->
        <select name="category">
          <option value="未選択">選択してください</option>
           <?php
             $types = array(
            'Progateに関するお問い合わせ', 'Progateに対する意見', '採用に関するお問い合わせ',
            '取材・メディア関連のお問い合わせ', '料金に関するお問い合わせ', 'その他'
            );
             foreach ($types as $type) {
              echo "<option value='{$type}'> {$type} </option>";
             }
           ?>
        </select>
        <div class="form-item">内容</div>
　　<!-- 改行を含む文章のテキストボックスを生成　
　　<textarea name="名前"></textarea>　、閉じタグが必要　-->
        <textarea name="body"></textarea>
　　<!--送信ボタンの生成　<input type="submit"> 
　　value属性に指定された値がボタン上に表示される　-->
        <input type="submit" value="送信">
　　<!-- フォームには閉じタグが必要　-->
      </form>
    </div>
  </div>
```
```sent.php
  <div class="main">
    <div class="thanks-message">お問い合わせいただきありがとうございます。</div>
    <div class="display-contact">
      <div class="form-title">入力内容</div>
      <div class="form-item">■ 名前</div>
　　<!-- 入力されたデータの受け取り　$_POST['name＝の値']　-->
      <?php echo $_POST['name'] ?>
      <div class="form-item">■ 年齢</div>
      <?php echo $_POST['age'] ?>
      <div class="form-item">■ お問い合わせの種類</div>
      <?php echo $_POST ['category'] ?>
      <div class="form-item">■ 内容</div>
      <?php echo $_POST['body'] ?>
    </div>
  </div>
```

#補足
この記事を見た知人から「スライド見直せばいいのでは？」という話をされましたが、
書いてるときに「ここってどこにどうつながっているのか？」のかを理解しきれないまま書いてたりするのでその確認の意味も含んでいたりします