職業訓練校

【職業訓練校 (プログラマー養成科)】 16週目まとめ ~ PHP プログラミング実習・応用~ フォーム・セッション・Cookie【PHP】

こんにちは。yuki(@Ryuki_4648)です。

プログラマー養成科の職業訓練・16週目のまとめです。


訓練校に通い始めて、早4か月が経ちました。

今週からPHPの授業・応用編がはじまりました。

教科書は詳細! PHP 7+MySQL 入門ノートを使っています。
Amazonで見る→ 詳細! PHP 7+MySQL 入門ノート (日本語) 単行本

前回の15週目のまとめはこちらです。


【職業訓練校 (プログラマー養成科)】 15週目まとめ ~ PHP プログラミング実習・基礎 / 現在の就職状況~ こんにちは。yuki(@Ryuki_4648)です。 プログラマー養成科の職業訓練・15週目のまとめです。 今週もPHPの授業です...


1.応用編の始まり


if文が入ってきたり、入力フォームを作ったり、エラーがあるかを判断するなど、記述するコードも徐々に増えていきました。
「隠しフィールドでPOSTする」というのも習いました。(よく使うらしい)

タイピングの速さを見本通りに打つ正確さが必要かなと思いました。

テキストは一部の章を飛ばしながら、どんどん進んでいく感じです。



2.習った関数など


新たに習ったもの、テキストでよく出てきたものを紹介します。


▽ isset — 変数が宣言されていること、そして NULL とは異なることを検査する

特にテキストよくでてきました。



▽ ctype_digit — 数字かどうかを調べる

すべての文字が0~9の数字かどうかを判定します。
0以上の整数ならtrue、「-」の符号が付いた負の数字や、「.」のついた小数点を含んだ数字はfalseになります。


▽ number_format — 数字を千位毎にグループ化してフォーマットする

たとえば、1000円を1,000円というようにカンマで区切ることができます。



▽ require_once – 外部ファイルの読み込み

外部ファイルの読み込み方法は、 include、include_once、require、require_once の4種類があります。
_onceが付くものは、すでに読み込まれているファイルを読み込みません。
(ファイルがすでに読み込まれているかどうかを PHP がチェックする)



▽ array_diff — 配列の差を計算する

array_diff(配列A,配列B)を実行すると、配列Aに、配列Bに含まれていない値があった場合、その値の配列を返します。
もし差分がなければ、空の配列[]を返します。



▽ trim — 文字列の先頭および末尾にあるホワイトスペースを取り除く



▽ empty — 変数が空であるかどうかを検査する



3.フォーム処理


Webサイトには欠かせないのがフォーム。
フォームに入力されたデータはPHPで処理します。



GETとPOST

GETはリクエストをURLにつけるため、ブックマークができます。
また、レスポンスがキャッシュされます。
=同じ内容のGETリクエストは毎回同じ結果になります。

一方POSTは、フォームのパラメータをURLに含めず、リクエストの本文に含めて送信します。
また、キャッシュもされません。


▽ GETとPOSTの違いについて




スーパーグローバル変数

フォーム処理を行うにあたり、$_POSTや、$_SERVERなどのスーパーグローバル変数を使うことになります。

▽ スーパーグローバル



フォーム入力処理 ~送信フォーム~

まずはhtmlファイルで送信フォームを作ります。


  • method属性:”POST”または”GET”を指定する
  • POST:使用するメソッド。
  • action属性:実行するPHPファイルを指定する
  • form.php:実行するPHPファイルの名前
  •   

ここで大事なのは、name属性です。

「名前:」には「name」、「年齢:」には「age」が設定されています。




フォーム入力処理 ~POSTされた値を取り出す~

「送信ボタン」が押されると、

の中にある「form.php」が呼び出されます。
このphpファイルでは、フォーム内の中にあった2つのテキストフォームの値を取り出して処理を行います。

POSTされた値は、$_POSTグローバル変数に入ります。

それぞれフォームに入力された値は、「name属性」につけた名前(ここではnameやage)をキーにして、配列$_POSTに保存されます。



4.いろいろなフォーム


ラジオボタンを作る

テキストボックスだけでなく、ラジオボタンもフォーム内ではよく見かけます。
ラジオボタンは、1つだけ選択できる入力フォームです。
性別選択などに使われています。

誤って選択できていないとき用に、エラー処理、エラー文の作成も必要です。
エラーは複数起こる可能性があるので、$errors = []; のように、配列で用意します。


▽ 【PHP入門】ラジオボタンの実装方法についてわかりやすく解説!




チェックボックスをつくる

次は、複数チェックができるチェックボックスを作りました。

ラジオボタンと異なる点は、array_diff()を使って、選択されているチェックボックスを調べることが挙げられます。


▽ 【PHP】チェックボックスの値を受け取る




テキストエリアを作る

「お問い合わせ内容」や「備考欄」など、ユーザーが自由にコメントを入力できるようなフォームを作ります。

HTMLで作るときは大方このようになると思います。

phpで書くときは↓のようになります。


ここで気を付けたいのは、textarea内のコードは改行せず、1行で書くということです。

改行してしまうと、フォームに入力するときに、中途半端な位置から文字入力が始まる恐れがあります。

textareaタグ内に書いたものが初期設定値となります。


▽ 文字列の長さを得る



▽ nl2br — 改行文字の前に HTML の改行タグを挿入する



▽ strip_tags — 文字列から HTML および PHP タグを取り除く





5.セッション処理


これまではページ移動すると、通信が途切れ、前のページで使っていた変数は使えなくなっていました。

しかしセッションを利用すると、複数のWebページで共通して使える「セッション変数」というものを使うことができます。


特にお問い合わせフォームやアプリを作る上で、Cookieとセッションについての理解は必須です。

▽ 【PHP超入門】Cookieとセッションについて




セッション変数

セッション変数は、$_SESSIONを使います。
ページをまたがって利用することができます。

このセッション変数を使うには、それぞれのページでセッションを開始する必要があります。

セッション開始時は session_start();
と書きます。




6.Cookieを使う


Cookie(クッキー)は、ユーザーがブラウザから離脱しても、ユーザーの値を保存しておくことができます。
セッションと似たような機能ですが、この点で異なります。

クッキーを保存する
$result = setcookie(クッキー名,値,期限,パス,ドメイン,セキュア,HTTPオンリー);

クッキーを削除する
$result = setcookie($削除するクッキー名,””, $現在時刻より過去のクッキー有効期限);

削除するときは、
$result = setcookie(“cookie”, “”, time()-3600);
のように書きます。

time()-3600 になっているのは、
「過去の有効期限」を渡すことで、クッキーが有効期限切れの状態となり、削除されるという仕組みです。


※ちなみに time ( ) は、UNIXタイムスタンプを取得することができる関数です。
UNIXタイムスタンプとは、コンピューターのシステム時刻の一種。
1970年1月1日(午前0時0分0秒)からの経過時間を指します。



▽ PHPでクッキーを削除する方法を現役エンジニアが解説【初心者向け】



▽ time — 現在の Unix タイムスタンプを返す




7.phpMyAdminでデータベースを作る


MAMPを立ち上げ、phpMyAdminでデータベースを使う練習をしました。


▽ MAMPのインストールなどについてはこちら

職業訓練校(プログラマー養成科) 13週目まとめ ~ 【データベース】 MySQL / 小テスト ~ こんにちは。yuki(@Ryuki_4648)です。 プログラマー養成科の職業訓練・13週目のまとめです。 今週はデータベースMy...


練習用の「test」データベースの作成、テーブルの作成、個々のカラムの設定、テーブル構造の確認、レコードの追加、データベースユーザの追加などを行いました。

以前のMySQLの授業で習っていたので、あまり難しくはありませんでした。




PHPからMySQLデータベースに接続する



$dsn = “mysql:host={$host};dbname={$dbName};charset=utf8”;

データベースに接続するユーザー名やパスワードなどを指定し、DSN(Data Source Name)の文字列を作成します。



$pdo = new PDO($dsn, $user, $password);

第1引数をDSN、第2引数をユーザー名、第3引数をパスワードにしています。

new PDOでPDOクラスのインスタンスを作成します。



▽ MySQL への接続




プリペアドステートメントって?

簡単に言うと、サニタイズ(無害化)のことです。

エスケープ処理、メモリの節約、処理速度UPなどの効果があります。

SQLでもサニタイズが必要です。
その方法が「プリペアドステートメント」という仕組みになります。




エスケープとは、
「>」「<」「"」「'」などを、HTMLのタグとして認識させないように文字を置き換えるものです。


エスケープされていないと、個人情報などを取って外部に送信することもできてしまいます。
セキュリティ対策のためにも必要になります。


▽ プログラミング初心者向け「サニタイズ・サニタイジング」まとめ




8.感想


PHPの基礎もできていないのに、応用編がどんどん進んでいきました。

コードの量も多く、打つのも大変でした。
タイピングが遅めな人は結構きついと思います。

内容も簡単ではないので、ブログを書きながら「そういえば習った気がする。」と復習しています。

少しずつ自分なりに解釈して理解できるようになると「楽しいな」と感じます。
改めて先生ってすごいなぁと思います。

(様々な私事の諸事情により、授業まとめを書くのは来週で終わろうと思います)