コードイグナイター バリデーション
フォームのバリデーションとは?
フォームを作る場合、必ずバリデーションやサニタイズをする必要があります。
つまり、入力された値の検証が必要です。
では、フォームバリデーションについて考えてみましょう。
・【全体の流れ】事前に考えておく事 ・【サニタイズ】ユーザーの入力値を検証 ・【バリデーション】 |
フォームを作る時に、考えておくこと
フォームを作る時に、考えておくことは、以下の事です。
1.フォームが表示される 2.入力して送信ができる 3.無効なものをチェックする。 エラーを表示する 4.確認ページに行き、送信完了。 |
大まかには、こんなイメージです。
受信側で必要な処理
1.必須項目のチェック 2.データの型を確認。 3.サニタイズする 4.データベスに挿入するためのクエリ発行 |
完成品
3つのファイルで構成されています。
1.views/form/myform.php
2.view/form/formsuccess.php
3.controller/form.php
views/form/myform.php
※管理しやすいようにformフォルダの中にファイルを置いています。
<?php echo validation_errors();?> <h5>ユーザ名: </form> |
■view/form/formsuccess.php
<p><img src="/img/guide/osieru_02.jpg" alt=""/></p> |
■controller/form.php
<?php public function index() $this->load->library('form_validation'); //バリデーションのルールを作る public function username_check($str) } |
これで動きます。
動かない場合、バリデーションの日本語化が出来てない可能性が高いです。というか、それしかありません(笑
サニタイズ
サニタイズとは?
日本語では、「無害化」するという意味。サニタイズは、ユーザーの入力値を検証する仕組みです。
入力値が要件として正しい値か?をチェックします。
【参照】
https://qiita.com/rana_kualu/items/11cd41de5f0364ba2ee8
バリデーション
バリデーションで「値」をチェックする
想定していない値をチェックするための入力値検証。スクリプト攻撃を防ぎ、クエリを破壊されないようにします。
エラーメッセージ出すようにする。
以下のように使う事もできます。
<?php class Form extends CI_Controller {
public function index()
{ $this->load->library('form_validation'); if ($this->form_validation->run() == FALSE) |
$this->load->helper(array('form', 'url'));
フォームとURLヘルパーを同時に使う時の書き方。
$this->load->library('form_validation');
でバリデーションを使えるようにする。
【参照】
https://codeigniter.jp/user_guide/3/libraries/form_validation.html
エスケープ
htmlspecialchars()
特殊文字を変換して、スクリプト攻撃されないようにする時に利用します。「<」「>」などの文字を特殊変換します。これで、Javescriptによる攻撃(クロスサイトスクリプティング)を回避する事ができます。
クロスサイトスクリプティングとは、偽物のサイトに誘導されてしまう、脆弱性です。
htmlspecialcharsを利用することで、ユーザーによって、入力された特殊文字を「文字列」に変換してくれます。
シングルクォーテーション ・・・ 「 '」を「'」 ダブルクォーテーション ・・・ 「 " 」を「"」 アンド ・・・ 「 &」を 「&」に変換 小なり ・・・ 「 <」 を 「 < ;」 大なり ・・・ 「 >」を 「 > 」 |
コードイグナイターでは、これらは全て、フォームヘルパーで処理してくれます。
【参照】
https://www.php.net/manual/ja/function.htmlspecialchars.php
スクリプトの事例 ⇊
https://www.leon-tec.co.jp/blog/yoshida/8214/
ちょっと知っていた方がいい、注意点
htmlspecialchars()した後の値をCSVなどに出力されたら文字化けします
ようこそ、<?=htmlspecialchars($_REQUEST['name'], ENT_QUOTES, 'UTF-8'); ?>さん。 |
と出力部分に入れておくと、エラーがおきずらくなります。
しかし、フレームワークはHTMLエスケープ機能を持っているので、htmlspecialchars()ではなくフレームワークに沿った出力方法を行いましょう。
【参照】
https://qiita.com/rana_kualu/items/11cd41de5f0364ba2ee8
何が必要か?
コードイグナイターでフォームを作るには?
以下が必要になります。
・フォームコントローラ ・フォームを持つ ビュー ページ。 ・成功した時に飛ぶページ(viewページ) ・バリデーションファイルの設定(日本語化) ・configファイルの設定 |
が必要になります。
これらを作っていきましょう!!
※わたしは、日本語化の部分ではまりました^^; 日本語ファイルがネットで見つからず、苦労しました。重要なので、必ず行ってください。
コードの説明
codeigniterでは自動的にpostデータをバリデーションと二重投稿の処理、XSS処理をしてくれます。これが、本当に便利です。
これだけしか書いてないのに、安全なクエリに変えてくれるのです。
$this->load->library('form_validation'); [
'field' => 'name',
$this->form_validation->set_rules($config);
if ($this->form_validation->run() === TRUE) { } |
フォームヘルパーのファイルは、フォームを処理するのに 役立つ関数。
ヘルパーを使って、まずは使えるようにします。コントローラに書いておくと良いです!!
$this->load->helper('form'); |
フォームを生成するタグ
<?php echo form_open('form'); ?> |
<form method="post" accept-charset="utf-8" action="http://locallhost/index.php/form/">
を参照するフォームタグを生成してくれます。
form部分は、コントローラのファイル名です。コントローラに飛ばして、再度、分岐処理させるわけです。
if ($this->form_validation->run() === TRUE) { } |
okの場合は、成功しました。と文字がでるように、ビューを作っておけば良いです。
二重投稿の処理などは、コードイグナイターがやってくれます。これも、本当に便利すぎます!!
フォームはコントローラに飛ばすと覚えておきましょう。
【参照】
https://codeigniter.jp/user_guide/3/helpers/form_helper.html
if ($this->form_validation->run() === TRUE) { |
「run()」メソッドでPOSTフィールドデータを検証します。
一括で検証をしてくれます。
if ( $this->form_validation->run() ) |
エラーをviewに渡す事もできます。
echo $data['error_message']; |
で表示する事ができます。
※勝手に<p></p>を入れてくれるので、とても便利です。
<p></p>を変えるためには?
$this->form_validation->set_error_delimiters('<div class="err">', '</div>'); |
<div class="err">名前 は必須項目です。</div>
<div class="err">数量 は数値を入力してください。</div>
になるので、便利です。
Viewでエラーを表示する
全てのエラーを 「表示」 する場合に利用
<?php echo validation_errors(); ?> |
個別でエラーを表示する場合
<?php echo form_error('name'); ?> |
このように書きます。
コントローラでエラーを取得する場合
全てのエラーを取得する
$errors = $this->form_validation->error_array(); |
個別でエラーを取得する
$errors = $this->form_validation->error('name'); |
エラーを日本語にする場合
1.日本語化ファイルを探し、DLします。
2.system\language または application\languageに置きます。
3.config.phpを変える
application/config/config.phpでlanguageをjapaneseに変更する。
$config['language'] = 'japanese'; |
【参照】
http://www.ci-guide.info/practical/library/form_validation/
ポストのView
views/form/myform.php
※管理しやすいようにformフォルダの中にファイルを置いています。
<?php echo validation_errors();?> <h5>ユーザ名: </form> |
これで、フォーム部分は完成です。
コントローラにpostでデータを渡して、分岐処理します。
エラーの場合は、
<?php echo validation_errors();?> |
によって、エラー文字を表示してくれます。これまた便利です!!
※本当は、各フィールドの上にエラーメッセージを出した方が、UI的には分かりやすい。
エラーメッセージ
デフォルトでは、フォームバリデーションクラスは表示する各エラーメッセージの周囲に段落タグ(<p>)を追加します。
これらの区切り文字はグローバルに、あるいは個別に、 はたまた設定ファイルでデフォルトを変更することができます。
$this->form_validation->set_error_delimiters('<div class="error">', '</div>'); |
エラーの表示
サイト上に表示されるページには、必ずHTTPステータスコードが存在します。
HTTPステータスコードとは、Webブラウザ、またはクローラーがサーバーにアクセスした際に返されるレスポンスのことで、ページが存在しない場合には404のステータスコードが返されます。
100番台・・・サーバー側がリクエストを受け取り、継続してリクエストを出しても問題がない状態を表します。
200番台・・・サーバーへのリクエストが正しく処理され、ページが表示される状態です。我々が通常見ているWebページは、このHTTPステータスコードを返している
300番台・・・リダイレクト 301リダイレクト
404エラー・・・ページがない、サーバーが落ちている。
500番台・・・サーバーの内部にエラーが発生している状態です。
Googleサーチコンソールのサーバーエラーの項目で該当のURLを確認することができます。
phpエラーとは??
Fatal error...定義されてない変数を使うなど
Parse error ...付け忘れ 括弧の閉じ忘れ。
Warning Notice...
php.iniで定義をする
■エラーは表示させない。
ハッキングの対象になってしまうから。白紙画面にしておく。
webサイトのハッキングやデータベースのハッキング、webサイトの乗っ取りなどは、PHPの記述ミス、構文ミスが原因となることがあります。
といった理由で、非表示にしておく。
エラー構文
テスト環境
本番環境
ログファイル出力の仕組み
CodeIgniterでログをファイルに出力したい場合は、application/config/config.php内にある$config['log_threshold']の設定を変えれば良い。
<?php $config['log_threshold'] = 0; |
ログファイルを出力したい場合は、上記の0を以下のいずれかに変える。
0 = ログを出力しない 1 = エラーメッセージ(PHP自体のエラーも含む) 2 = デバッグメッセージ 3 = Info メッセージ 4 = 全てのメッセージ |
【参照】
https://code-bug.net/7xiyvtjkuqhlsng9drf2/
履歴情報
作成日と更新日を入れておく
https://qiita.com/takanemu/items/d9c52811d70d37b232a9
参照
【参照】
コードイグナイターのエラー構文を知りたい
http://www.ci-guide.info/practical/library/form_validation/
大変申し訳ありませんが、当社ではサービスの質を落とさないために、月の契約は5件までとさせていただいております。 契約をお待ちいただく可能性もございますので、ご了承のほどよろしくお願いいたします
コードイグナイターの勉強方法
■ 基本編 ■
■クエリ
Active Recordとは?
クエリヘルパー関数
■フォーム
■DBに情報を入れる
■メール
■DB接続
テーブル接続でデータを入れる
■会員登録を作ろう
管理画面を作ろう
ライブラリを利用して作ろう
オートロードとは
無名関数とは?
MVCとは何か?
この記事を読んだ人は、こんな記事も読んでいます
SEO対策の基本 外部要因とは?
SEO対策の基本的である、外部要因とは何か?
SEO対策をするなら絶対に知っておきたい、基本知識です。
売れるサイトを作るのに知って起きたい知識
サーチエンジンマーケティングという言葉をご存知でしょうか?
ホームページで商品やサービスを売る時に知っておきたいマーケティング
についてご紹介いたします。
SEO対策をする5つのメリットとは?
なぜ上位表示させることが大事なのか?なぜSEO対策をする必要があるのか
についてご紹介させていただきます。
SEO対策の内部要因とは?
上位表示させるためには、内部要因について知っておくことも大事です。
キーワードを上位表示させるために必要なのは、ソースコードを最適化することです
内部要因の対策について知りたい方はこちらへ
キーワード対策をする前に
そのキーワード対策。ちょっと待ってください。
そのまま対策をすると、必ずお金を損してしまいます。個人事業主や中小企業は
そんな大きなキーワードで対策をしてはいけません。
広告費用が高くなる本当の理由とは?
売れないサイトに集めていませんか?広告費用がかかるわりには
お問い合わせが少ない・・・と感じる方は多いはずです。
購入率の悪いサイトに集客をしている可能性があります。