UdemyのPHP+MySQL(Byたにぐちまこと)をまとめてみた

#はじめに

Udemyの講座を受けながら、まとめた自分なりのアウトプットです！

同じ講座を受ける際には参考にしてみてください！！！！！！

セクション1はセットアップのため飛ばして、2からになっています。
###セクション2:PHPの基本を学ぼう
・HTMLタグのname属性がformタグで送信する際の、識別子になる


・inputタグは閉じタグが必要ない=単独タグ


・input type = submitタグのvalueタグはボタンの表面に表示する文字列


・htmlspecialchars($_REQUEST[my_name],ENT_QUOTES)
　→$_REQUEST[my_name](name属性の値)をENT_QUOTESの型にエスケープさせるメソッド
　※特殊な場合以外は基本的にENT_QUOTES


・$_REQUESTはPOSTでもGETでもどちらでも受け取ることができる
　→GETかPOSTどちらが受け取れてるのかわからないため、基本的にわかっている場合は指定したほうがいい


・ラジオボタンはvalue属性が送信される（textfieldも一緒でvalue属性を送っている）
　フォームで送られるものはvalue属性に設定されているものが送信される
　チェックボックス、セレクトタグ、etc


・チェックボックスで複数の値を送信する場合はname属性にブレケッツ[]をつける必要がある
　→配列の形式で送信されるため
　→そのため受け取る時は配列で受け取り、foreach($_POST['reserve'] as $reserve)などで取り出す！


・変数はその画面で終わる
　セッションは画面間を移動してもブラウザを閉じるまでは保存されている
　(サーバーにsession IDが保存されていて
　、ブラウザ側のクッキーにsession IDを持たせてそれと付き合わせて照合する）
　クッキーは画面を閉じても有効期限までは保存されている（ブラウザ側に保存　パスワード等は入れちゃダメ！）
　→保存期間がそれぞれ違うから区別して使う！


###セクション３　データベースの基本を学ぼう
・UPDATEとDELETEのSQLはWHERE句で指定しないと全ての値が対象になるから気をつけて実行する必要がある


・PHPMyadminでは主キーの設定が上手くいかないことがある
→SQLで実行する！


・PHPMyadminはもともと英語のシステムを日本語で割り当ててるから文法とかおかしいのがたまにある
ex)カラムの追加


・主キーは一意の値のカラムになる（idとか）


・AUTO_INCREAMENTした状態で何か値を削除したらそこの採番は永久欠番になる


・基本DBで一度削除した値と同じ採番は実装しない！


・WHEREのあいまい検索はLIKE %~% で行う


・TIMESTAMPという型はデータの変更時間を自動的に入れてくれる


・LEFT JOIN　
　SELECT item_name,SUM(COUNT) FROM my_items LEFT JOIN carts ON my_item.id=carts.item_id GROUP BY carts.item_id
  
　my_itemsに属する形でcartsに結合させるからcartsにないものもmy_itemsにあればそれに紐づいて表示される
　ON以降にテーブルを繋げる条件を記述


・DISTICNTで値を重複させず取得できる


・BETWEEN 50 AND 149
　でWHERE price > 50 AND price < 150と同じ


・WHERE id IN（1,3）
  複数の条件を記述できる


・LIMIT 2,3(2個目から3つ取得)
  第一パラメータがどこから第二パラメータで何件かを取得するという記述


・半角空白を書くとそのテーブル名などのオブジェクトをエイリアスで記述できる
　SELECT item_name,SUM(COUNT) FROM my_items i LEFT JOIN
carts ON i .id=carts.item_id GROUP BY carts.item_id
  
・SQLが集まったものとしてエクスポートでバックアップを取れる


・復元はDBを作成したあとにインポートでバックアップしたSQLを取り込む

###セクション4: PHP+MySQL（MariaDB）を組み合わせて、Webシステムを作ろう
・$db = new PDO('mysql:dbname=mydb;host=127.0.0.1';charset=utf8,'root','root');
   でアクセス　host=127.0.0.1は自分自身を表すIPアドレス


・exec()メソッドは影響を与えた行の数を返す
　query()メソッドはSQLの結果の値を返す
    execute()メソッドはプリペアードステートメントを実行する


・queryはオブジェクトなのでそこから値を取得するにはfetch()する
　$record = $records -> fetch();の$recordは連想配列になっている


・$statement = $db->prepare('INSERT INTO memos SET memo = ?,created_at = NOW()');
    $statement -> execute(array($_POST['memo'])));
   で?の部分にexecuteで値を入れる


・bindparamで複数の?にSQLを代入できる


・Session以外で次のページに値を受け渡す方法として、
　inputタグのhidden属性を使ってPOSTでそのvalueを渡してやるといった方法もある


・PHPではCRUDはデータベースに直接SQLを発行して行う

###セクション5: 「Twitter風ひとこと掲示板」を作成しよう
・varchar型は文字数を制限したtext型のこと


・header('Location:check.php')でcheck.phpにリダイレクトできる
　その後路にはexitが必要


・formタグでファイルをアップロードする場合は
<form action="" method="post" enctype="multipart/form-data">が決まり文句


・$image = date('YmdHis'). $_FILES['image']['name'];
 でファイル名がアップロードされた時に日付を付加してファイル名が重複するのを防ぐ


・ move_uploaded_file($_FILE['image']['tmp_name'],'../member_picture/' . $image);
$_FILEがinput type = fileであげたものが入っているグローバル変数
['image']['tmp_name']は一時的に上がっている場所
move_uploaded_file（ファイル、ファイルの移動先../member_picture/' . $image)


・substr($fileName, -3)でファイルの拡張子を得る（後ろから３文字を切り取る)


・セッションは使い終わったらすぐに破棄するようにする
    unset($_SESSION['join']);


・textareaのformパーツはvalueタグがなく、その代わりに<textarea></textarea>に囲まれた部分がvalueになる

##最後に
Evernoteにまとめたやつを貼り付けただけなので、こっちが元になっています
見づらかったら以下を参考にしてください！
https://www.evernote.com/shard/s625/sh/d81568ef-475c-4c15-b3c6-ae9da198f15c/0573994a5c161bb9cbdb23f85cd37ba9