# 【A講座】Webプログラミング講座7回目
## 初期準備
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ファイルですので解凍してください。
本日使う授業フォルダ07_phpに入っているもの。
```
sample
qa.php
post.php
post_confirm.php
phpinfo.php
input.php
index.php
get.php
get_confirm.php
003kansu.php
002hairetsu.php
001hensu.php
```
### 07_phpフォルダをMAMPのhtdocs階層に移動させてください。
先ほどCドライブにダウンロードしたMAMPの中にhtdocsというフォルダがあります。
ここに授業資料の「07_php」フォルダを移動してください!
windows向け補足記事
ダウンロードから起動までの手順
https://codeforfun.jp/how-to-install-mamp-windows-and-mac/#MAMPWindows
MySQLが起動しない場合の対処法
https://codeforfun.jp/mamp-mysql-not-starting-solutioin/
## セクション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型
```
$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-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>";
```
[PHP組み込み関数良く使うやつ一覧](https://qiita.com/Tocyuki/items/282d49d2ae6e7eb96eca)
## セクション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件取得
```