---
# System prepended metadata

title: PHP01

---

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

