---
# System prepended metadata

title: 【InFiNiTO Club】プログラミング講座8回目

---

#  【InFiNiTO Club】プログラミング講座8回目
## 初期準備
MAMPのダウンロードとインストール
PHPの授業からはMAMPというアプリケーションを利用します。

以下のリンク先ページより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」の横に緑色のランプがついたら、サーバーの起動完了です。

参考記事
https://codeforfun.jp/how-to-install-mamp-windows-and-mac/#MAMPWindows
WindowsでMySQLが時の対処法
https://codeforfun.jp/mamp-mysql-not-starting-solutioin/

### 授業資料のダウンロードと解凍
Teams上にアップロードした資料をにダウンロードしてください。
Zipファイルですので解凍してください。

本日使う授業フォルダphp01に入っているもの。
```
001hensu.php
get_confirm.php
get.php
index.php
input.php
phpinfo.php
post_confirm.php
post.php
qa.php
```
### php01フォルダをMAMPのhtdocs階層に移動させてください。
先ほどCドライブにダウンロードしたMAMPの中にhtdocsというフォルダがあります。
ここに授業資料の「php01」フォルダを移動してください！

## セクション1 PHP基礎構文
### 1-1 PHPファイルとタグ
#### 1. test.phpファイルを作成
#### 2. PHP開始タグと終了タグを記述
```
<?php ←開始タグ

//ここに処理を書いていきます

?>←終了タグ
```

#### 3. タグの中に以下の処理を記述
`echo 'hello world';`

#### 4. MAMPを起動してlocalhost:8888/test.phpを開くと実行結果が確認できる

### 1-2 基本構文(変数)
#### 1. 001hensu.phpを開き開始タグ終了タグを準備
#### 2. int型とString型
```
$name = '中野';
$last_name = '憲一';
echo $name;
echo $name + $last_name;
echo $name . $last_name;

```

```
$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と一緒です）

## セクション2 フォーム操作
### 2-1 GET通信
#### 1. getで送信するにはmethodとactionの設定
get.phpを開いてformの中身を確認
```
<form action="get_confirm.php" method="get">
	お名前: <input type="text" name="name">
	EMAIL: <input type="text" name="mail">
	<input type="submit" value="送信">
</form>
```

#### 2. 受け取り方　
get_confirm.phpのPHPタグ中で以下の書き方で受け取る
```
// フォームから送られてきたデータを取得し変数に代入
$name = $_GET["name"];
$mail = $_GET["mail"];
```

#### 3. 表示
get_confirm.phpのHTMLの中で以下の書き方で表示
```
<li> お名前：<?= $name ?> </li>
<li> Mail：<?= $mail ?> </li>

<?php echo $name ?>
or
<?= $name ?>
```

### 2-2 POST通信
#### 1. postで送信するにはmethodとactionの設定
post.phpを開いてformの中身を確認
```
<form action="post_confirm.php" method="post">
	お名前: <input type="text" name="name">
	EMAIL: <input type="text" name="mail">
	<input type="submit" value="送信">
</form>
```

#### 2. 受け取り方
post_confirm.phpのPHPタグ中で以下の書き方で受け取る
```
// フォームから送られてきたデータを取得し変数に代入
$name = $_POST["name"];
$mail = $_POST["mail"];
```

#### 3. 表示
post_confirm.phpのHTMLの中で以下の書き方で表示
```
<li> お名前：<?= $name ?> </li>
<li> Mail：<?= $mail ?> </li>

<?php echo $name ?>
or
<?= $name ?>
```

### 2-3 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(変数); ?>`

## セクション3 データベースとは
### 3-1 まずはphpMyAdminとMySQLの場所を知る
#### 1. MAMPを起動
#### 2. WebStartボタンから起動トップページを表示
#### 3. ページの真ん中MySQLのタブからphpMyAdminのリンクをクリック
#### 4. 起動した画面がMySQLを管理するphpMyAdminの画面が表示されます。

### 3-2 データベースを作ってみよう
#### 1. データベースタブをクリック
#### 2. データベースを作成から以下の名前で作成
```
データベース名：gs_db
照合順序：utf8_unicode_ci
```
#### 3. 作成ボタンをクリック
左側にgs_dbというデータベースができていると思います。
現在は空っぽです。

### 3-3 テーブルを作成してみよう
データベースの中にデータ管理用の表としてテーブルを作成します。
今回はアンケートシステムのDBとしてテーブルを構築します。
#### 1. テーブルを作成に以下の設定で作成
```
テーブル名：gs_an_table
カラム数：5
```
#### 2. カラムを作成していく
```
id:    int(12) AUTO_INCREMENT PRIMARY KEY
name:  var_char(64)
email:  var_char(128)
naiyou: text
indate: datetime
```
#### 3. 実行してみる

## セクション4 データベース操作(SQL)
MySQLではデータベース言語SQLというものを使って操作します。
大きく次の4つの操作になります。登録・表示（取得）・更新・削除
＊SQL文ではシングルコーテーション！
＊phpMyAdminのSQLタブから入力してクエリを実行してみる。
### 4-1 INSERT（データ登録）
#### 1. 書式
```
INSERT INTO テーブル名(カラム1,カラム2,カラム3・・・) 
VALUES (値1,値2,値3・・・);
```

#### 2. データ登録SQLを書いてみよう
```
INSERT INTO gs_an_table(id,name,email,naiyou,indate) 
VALUES (NULL,'テスト太郎','test1@test.jp','test',sysdate());
```
#### 3. 3~4個ほどデータを追加してみよう

### 4-2 SELECT（データ取得）
#### 1. 書式
```
SELECT 表示するカラム FROM テーブル名;
```

#### 2. データ取得の基本バリエーション
```
SELECT　* FROM gs_an_table; --全カラム指定取得
SELECT name FROM gs_an_table; --単一カラム指定取得
SELECT name,email FROM gs_an_table; --複数カラム指定取得
SELECT　* FROM gs_an_table WHERE name='テスト太郎'; --WHEREを使った特定データの取得
```

#### 3. 条件付き検索取得
```
--演算子を使った検索
SELECT　* FROM テーブル名 WHERE id = 1;
SELECT　* FROM テーブル名 WHERE id >= 3;

--AND,ORで検索条件を複数指定
SELECT　* FROM テーブル名 WHERE id = 1 OR id = 2;
SELECT　* FROM テーブル名 WHERE id = 1 AND id = 2;

--曖昧検索
SELECT　* FROM テーブル名 WHERE indate LIKE '2021-06%';
SELECT　* FROM テーブル名 WHERE email LIKE '%@gmail.com';
SELECT　* FROM テーブル名 WHERE email LIKE '%@%';
```
#### 4. ソート取得と制限取得
```
--ソート
書式：SELECT　* FROM テーブル名 ORDER BY ソート対象カラム ソートルール;

SELECT　* FROM テーブル名 ORDER BY id DESC; --降順
SELECT　* FROM テーブル名 ORDER BY id ASC; --昇順



--取得数制限
書式：SELECT　* FROM テーブル名 LIMIT ***;

SELECT　* FROM テーブル名 LIMIT 5; --最大5件取得 
SELECT　* FROM テーブル名 LIMIT 3,5; --3番目のデータから最大5件取得 
```

### 4-3 UPDATE（データ更新）
#### 1. 書式
```
UPDATE テーブル名 SET 更新対象1=:更新データ ,更新対象2=:更新データ2,... WHERE id = 対象ID;
```

#### 2. データ更新SQLを書いてみよう
```
UPDATE gs_an_table SET name='テスト太郎2', email='test1@test.jp' WHERE id = 1;
```
#### 3. 3~4個ほどデータを追加してみよう

### 4-4 DELETE（データ削除）
#### 1. 書式
```
DELETE FROM　テーブル名　WHERE　id = 対象ID
```

#### 2. データ更新SQLを書いてみよう
```
DELETE FROM gs_an_table WHERE id = 1
```
#### 3. 3~4個ほどデータを追加してみよう