本日のプログラミング学習
PHP &MySQL Lesson 12~18 7hour
ネットワーク Lesson1~9 1.5hour
Aug / 10hour
Total 35hour
PHP & MySQL
前回から続き〜お問い合わせフォーム作成から
バリデーションチェック1 入力欄が空欄かどうかのチェック
バリデーションチェック2 メールアドレスが正規表現か、パスワードと再入力パスワードが型も含めて一緒か
mb_strlen (バリデーションチェック3)
今度のチェックは「入力されたパスワードが半角英数字かどうか」のチェック。
これは前回と同じく、preg_matchを用いて引数1には半角英数字の正規表現を、引数2には$passをすることで確認している。
もしこの正規表現が偽(False)であれば、MSG04が表示される。
続いてelseifとして、それ以外であれば次のチェックを行うとしている。
mb_strlen($pass) < 6
mb_strlenは引数に指定した文字数を取得する関数。全角でも半角でも一文字として取得する。
この場合は入力された文字数が6文字未満だった場合は、MSG05が表示される。
データベースへのアクセス
MAMPでデータベースを作成したら、そこへ情報を保存するロジックを作成する
$dsn = ‘mysql:dbname=php_sample01;host=localhost;charset=utf8′; (dsn=Data Server Name)
$変数=’接続したいデータベースソフトの名前:dbname=作成したデータベースの名前:=接続したいサーバーの名前=charset=データベースの文字コード’
$user = ‘root’;
$password = ‘root’;
どちらもデータベースにログインするための情報を記述している。デフォルトだと「root」。
$options=array( 〜〜
以下はこういうものだとして毎回記述する。
PDO PHP Data Object
$dbh = new PDO($dsn, $user, $password, $options); ($dbh=データベースハンドラ)
の部分について。
まず、PDOって何?ということ。
PDOとは、「データベースの抽象化レイヤー」。
????となるが、ざっくりいうと、「PHPやOracle(など)とデータベースの間に入ってくれて、一つの命令でそれぞれのデータベースにアクセスできるようにしてくれる「層」のこと。本来であればPHPはPHP用の記述を、OracleであればOracle用の記述をしないといけないが、PDOを用いると、それを一つにまとめて実行してくれるというもの。
これを使用する際は、下記の記述をしてPDOインスタンスを作成して変数に代入し、データベースにアクセスする。
$dbh = new PDO(‘DSN’,’ユーザー名’,’パスワード’,オプション);
()内それぞれに必要なコードを記述するとコードが見づらくなるために、最初に変数をそれぞれ作成している、と考える。
プリペアドステートメント
プリペアード(準備された)+ステートメント(命令文)
データベースを利用する時には、追加・削除・取得といった同じような命令を何度も行う。それを一回一回処理するのは非常に手間。
なので予め変更する部分だけを虫食い状態にした命令文だけをデータベースに投げることで、後から値がきたら処理をするということにすれば繰り返しそれが使えるし、処理も高速になる。
プレースホルダ
簡単にいうと、上述した虫喰い部分のこと。
「?」を用いると疑問符プレースホルダ
「:名前」とすると名前つきのプレースホルダ *名前の部分は英字を用いる
となる。
また、プレースホルダに値を割り当てることを「バインド」と言う。
$stmt = $dbh->prepare(‘INSERT INTO users (email,pass,login_time) VALUES (:email,:pass,:login_time)’);
が表しているのは、プリペアードステートメントを作成しているということ。
ここではusersというテーブルのemail,pass,login_timeというカラムに:email,:pass,:login_timeと言うプレースホルダを作成し、プリペアドステートメントを作っている、と言うことになる。それを変数$stmtに代入している。
$stmt->execute(array(‘:email’ => $email, ‘:pass’ => $pass, ‘:login_time’ => date(‘Y-m-d H:i:s’)));
上記で作成したプリペアドステートメントを実行する。
今回の「PDO」を理解するためには(もちろん完璧にはわかっていませんが)、この記事がなかったら到底無理でした。作成者の@7968さんには感謝しかありません。
Udemy で講座の販売を開始しました!Udemy で「プログラミング学習の心得&HTTPの基礎」の動画講座を公開しました。特別に 85% OFFのクーポンを発行します。通常価格 10,800…[…]
ログインシステムの構築
$stmt = $dbh->prepare(‘SELECT * FROM users WHERE email = :email AND pass = :pass’);
プリペアドステートメントを作成し、usersと言うテーブルの中からemailとpassのカラムを選び、プレースホルダ:emailと:passを入れる。(email AND passなので、両者が同じかどうかを検索している)
$stmt->execute(array(‘:email’ => $email, ‘:pass’ => $pass));
プレースホルダに値をセットして、実行。
$result = 0;
$result = $stmt->fetch(PDO::FETCH_ASSOC);
こう記述することで、変数$resultに値が入る。
sessionとは何か?
Cookieを使った、ブラウザとサーバー間での値のやり取りを他者から見えなくするための仕組みのこと。
これを使うことで、Cookie内にIDが付与され保存される。情報はサーバー側で保管をしていおいてこのIDを参照して値を取り出してくる仕組み。
<How to?>
⒈ session_start(); として宣言する
⒉ $_session[‘login’] = true; としてloginをキーとしてtrueを保存する
メールフォームの構築
include 外部のPHPファイルを読み込む
何度も使用するファイルは外部から読み込ませることで使い回すことができる。
include(‘ファイル名’);
とすることで呼び出すことができる。ファイル名の書き方は以前行ったパスの書き方に倣ってかく。
また外部のファイルを用いても、読み込み元の変数はそのまま使用することができる。
mb_send_email関数
この関数を記述することでメールが送信される。(結果はtrue or falseで返される。ここでは$resultにその結果を代入している)
画像アップロードフォーム
formタグの書き方
input要素にtype属性=fileとして、その親要素にenctype=”multipart/form-data”とすることで画像データを送ることができる。
そのため、今までは$_postに値が格納されていたが今度は$_FILESという変数に格納されるようになる。
格納されたデータは、以下の処理を実行される。
もしFILESの値が空でない場合、以下の処理を実行せよ
変数$fileにimageをキーとした配列を代入する
メッセージ表示用と画像表示用の変数を用意する
includeメソッドを用いて、upload.phpを呼び出す。
PHPのエラーについて
そもそもエラーってどういう状態?
→PHPが理解できないような記述をしてしまっている状態。エラーの場合は画面が真っ白になる。
エラーレベルの種類
⒈ E_PARSE コンパイルエラー
⒉ E_ERROR 実行時停止エラー
⒊ E_WARNING 実行時警告エラー
⒋ E_NOTICE 実行時注意エラー
⒌ E_DEPRECATED 実行時注意エラー
対応方法
⒈ php + エラー +エラーメッセージ としてググる。
⒉ var_dump(); print_r(); として変数や配列の中身や定義がきちんと定義されているか確認する
上記でも不具合が発生している箇所が分からない場合には、ログを追ってみる
rror_reporting(E_ALL); //全てのエラーを報告する
ini_set(‘display_errors’, ‘On’); //画面にエラーを表示させるか
ini_set(‘log_errors’,’on’); //ログを取るか
ini_set(‘error_log’,’php.log’); //ログの出力ファイルを指定
これをすることで処理がどこまで行われているのかを調べ、特定していく。
ネットワーク
GETとPOST
ブラウザ側からサーバーへ情報を送信する方法は、GETとPOSTがある。
詳しい違いについては下記を参照する。
こんにちは!むちょこです。PHPが大好きです! 今日は、GETメソッドとPOSTメソッドの違いとその使い分け方についてお話してみようと思います。 「長文読むのしんどい」「御託はいいから今どっちを使ったらいいのか知りたい」 ... […]
学習は全てウェブカツ!!というプログラミングスクールで学んでいます。
大手スクール生徒や現役エンジニアが多数学び直している「実務レベル」に特化した「稼ぐ」ためのプログラミングスクール[…]