# 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);
```