# PHP01 ## 授業資料 [ダウンロードリンク](https://drive.google.com/drive/folders/1LPZ1Fv0eQ6OAkXXwHGVv27mltQTrHJAh?usp=sharing) ## 初期準備 MAMPのダウンロードとインストール PHPの授業からはMAMPというアプリケーションを利用します。 参考記事 https://codeforfun.jp/how-to-install-mamp-windows-and-mac/#MAMPWindows WindowsでMySQLが時の対処法 https://codeforfun.jp/mamp-mysql-not-starting-solutioin/ ### windowsの場合 以下のリンク先ページよりMAMPのwindows版3.3.1をダウンロードしてください。ページ下部にあります。 https://www.mamp.info/en/downloads/older-versions/ #### 1. ダウンロードが完了したらインストーラーを起動して下さい。 #### 2. MAMP PROとInstall Apple Bonjourのチェックを外す(不要なので) #### 3. I accept the agreementを選択してNext #### 4. 以降は指示に従ってNEXTを選択しインストールを完了させる。 #### 5. ダウンロードできたらインストールを完了させる。 #### 6. インストールした MAMP を開いて「Start Servers」を押し起動 *「Apache Server」と「MySQL Server」の横に緑色のランプがついたら、サーバーの起動完了です。 ### Macの場合 以下のリンクよりMAMPのMac版をダウンロードしてください。 なお、CPUがIntelかM1でダウンローダーが違いますので下三角からチェックをお願いいたします。 https://www.mamp.info/en/mamp/mac/ #### 1. ダウンロードが完了したらインストーラーを起動して下さい。 #### 2. 以降は指示に従ってNEXTを選択しインストールを完了させる。 #### 3. ダウンロードできたらインストールをして起動までお願いいたします。 #### 4. インストールした MAMP を開いて「Start Servers」を押し起動 *「Apache Server」と「MySQL Server」の横に緑色のランプがついたら、サーバーの起動完了です。 ## PHP基礎構文 ### PHPファイルとタグ #### 1. test.phpファイルをMAMPフォルダ内の「htdocs」フォルダの中に作成 #### 2. PHP開始タグと終了タグを記述 ``` <?php ←開始タグ //ここに処理を書いていきます ?>←終了タグ ``` #### 3. タグの中に以下の処理を記述 `echo 'hello world';` #### 4. localhost:8888/test.phpを開くと実行結果が確認できる ### 基本構文(変数) #### 1. 001hensu.phpを開き開始タグ終了タグを準備 #### 2. int型とString型 ``` $int_age = 10; // 数値型(int型) $str_age = "10"; // 文字列型(String型) echo $int_age; echo '<br>'; echo $str_age; ``` ``` $sato_age = 30; $yamada_age = "25"; $total_age = $sato_age + $yamada_age; var_dump($total_age); echo $total_age; echo "<br>"; ``` ``` //結合演算子 $total_age = $sato_age . $yamada_age; ``` ``` // 簡単なおみくじ // rand(min,max) $num = rand(1,2); // おみくじ if ( $num == 1 ) { echo "アタリ"; }else{ echo "ハズレ"; } ``` #### 3. 制御構文(if文、for文はjsと一緒です) ### 基本構文(配列) #### 1. 002hairetu.phpを開き開始タグ終了タグを準備 #### 2. 以下の処理を順番に書いてみて自分でちょっと演習 ``` $city_names = array("渋谷", "新宿", "池袋"); var_dump($city_names); echo "<br>"; //配列に追加 array_push($city_names,"原宿"); $city_names2 = array(1 => "渋谷", 2 => "新宿", 3 => "池袋"); var_dump($city_names); echo "<br>"; $city_names3 = [1 => "渋谷", 2 => "新宿", 3 => "池袋"]; var_dump($city_names); echo "<br>"; echo "取り出し:"; echo $city_names2[1]; echo "<br>"; echo $city_names[3]; ``` ### 基本構文(関数) #### 1. 003kansu.phpを開き開始タグ終了タグを準備 #### 2. PHP組み込み関数 ``` // 変数・配列等の中身を確認する関数 var_dump(変数); $ary = array("渋谷", "新宿", "池袋"); var_dump($ary); ``` ``` // 日付・時間取得 date関数  date("Y年m月j日 H時i分s秒"); echo date("Y年m月d日 H時i分s秒"); echo "<br>"; echo date("Y/m/d"); echo "<br>"; echo date("H/i/s"); echo "<br>"; ``` ``` // 文字列の長さ表示 $length = strlen("abcde"); echo $length; echo "<br>"; ``` ``` // 文字列の一部分を表示 $hoge = substr($hoge, 3); echo $hoge; echo "<br>"; ``` ``` // 数字のフォーマット $price = 10000; echo $price; echo "<br>"; $price2 = number_format($price); echo $price2; echo "<br>"; ``` [PHP組み込み関数良く使うやつ一覧](https://qiita.com/Tocyuki/items/282d49d2ae6e7eb96eca) ## フォーム操作 ### GET通信 #### 1. getで送信するにはmethodとactionの設定 ``` <form action="get_confirm.php" method="get"> お名前: <input type="text" name="name"> EMAIL: <input type="text" name="mail"> <input type="submit" value="送信"> </form> ``` #### 2. 受け取り方 ``` // フォームから送られてきたデータを取得し変数に代入 $name = $_GET["name"]; $mail = $_GET["mail"]; ``` #### 3. 表示 ``` <li> お名前:<?= $name ?> </li> <li> Mail:<?= $mail ?> </li> <?php echo $name ?> or <?= $name ?> ``` ### POST通信 #### 1. getで送信するにはmethodとactionの設定 ``` <form action="post_confirm.php" method="post"> お名前: <input type="text" name="name"> EMAIL: <input type="text" name="mail"> <input type="submit" value="送信"> </form> ``` #### 2. 受け取り方 ``` // フォームから送られてきたデータを取得し変数に代入 $name = $_POST["name"]; $mail = $_POST["mail"]; ``` #### 3. 表示 ``` <li> お名前:<?= $name ?> </li> <li> Mail:<?= $mail ?> </li> <?php echo $name ?> or <?= $name ?> ``` ### XSS:クロスサイトスクリプティング #### 1. 実演postのformに以下をコピペして送信 `<script>alert("ok");</script>` #### 2. 意図しないscriptを埋め込まれる危険性があるので対策 `htmlspecialchars(変数,ENT_QUOTES);` *GETやPOSTで受け取ったデータをechoする時は必ず行う #### 3. 良く使うので自分で関数化 ``` // XSS対策関数 function h($value){ return htmlspecialchars($value,ENT_QUOTES); } ``` 呼び出し方 `<?php echo h(変数); ?>` ## ファイル操作 ### ファイル書き込み #### 1. write.phpに以下を記述 ``` //文字作成(日付) $str = date("Y-m-d H:i:s"); //File書き込み $file = fopen("data/data.txt","a"); // ファイル読み込み fwrite($file, $str."\n");//ファイルへの書き込み fclose($file);//ファイルを閉じる ``` ### ファイル読み取り #### 1. read.phpに以下を記述 ``` // ファイルを開く $file = fopen('data/data.txt', 'r'); // ファイル内容を1行ずつ読み込んで出力 while ($str = fgets($file)) { echo nl2br($str); } // ファイルを閉じる fclose($file); ``` ### 演習 サンプルフォーム(input.php)からPOST通信でデータをwrite.phpに送って名前・メールアドレス・日時をdate.txtに保存できるようにする ``` // データをPOSTで受け取る $name = $_POST['name']; $mail = $_POST['mail']; // 日時を取得 $time = date('Y-m-d H:i:s'); //データを変数にまとめる $str = $time . '/' . $name . '/' . $mail; // ファイルに書き込み $file = fopen('data/data.txt', 'a'); fwrite($file, $str . "\n"); fclose($file); ```