コードイグナイター バリデーション

フォームのバリデーションとは?

フォームを作る場合、必ずバリデーションやサニタイズをする必要があります。

つまり、入力された値の検証が必要です。

では、フォームバリデーションについて考えてみましょう。

 

・【全体の流れ】事前に考えておく事

・【サニタイズ】ユーザーの入力値を検証

・【バリデーション】

 

 

フォームを作る時に、考えておくこと

フォームを作る時に、考えておくことは、以下の事です。

 

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();?>
<?php echo form_open('form'); //コントローラーを指定しています。?>

<h5>ユーザ名:
<input type="text" name="username" value="<?php echo set_value('username'); ?>" size="20" />
</h5>
<h5>パスワード:
<input type="text" name="password" value="<?php echo set_value('password'); ?>" size="30" />
</h5>
<h5>パスワード確認:
<input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="30" />
</h5>
<h5>メールアドレス:<input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" />
</h5>
<div>
<p><input type="submit" value="Submit" /></p>
</div>

</form>

 

 

■view/form/formsuccess.php

<p><img src="/img/guide/osieru_02.jpg" alt=""/></p>
<p>■成功しました</p>
<p>成功しました</p>
<p>&nbsp;</p>
<p><?php echo anchor('form', 'もういっかい!'); ?></p>
<p>&nbsp;</p>

 

 

■controller/form.php

<?php
//https://qiita.com/seimatz_dev/items/cc5b7c3b778d2c10b367
class Form extends CI_Controller {

public function __construct(){
parent::__construct();
$this->load->database();
}

public function index()
{
$this->load->helper(array('form', 'url'));

$this->load->library('form_validation');

//バリデーションのルールを作る
$this->form_validation->set_rules('username', 'ユーザー名', 'required',array('required' => '%s は必須になります'));
$this->form_validation->set_rules('password', 'パスワード', 'required|max_length[10]',array('required' => '%s は必須です。'));
$this->form_validation->set_rules('passconf', 'パスワード確認', 'required',array('required' => '%s は必須です。'));
$this->form_validation->set_rules('email', 'メールアドレス', 'required');



//条件の分岐をする
//「run()」メソッドで「FALSE」が返った場合はエラーメッセージを取得して、 ビューに渡すことで、エラーメッセージをページに表示することができます。
if ($this->form_validation->run() == FALSE){

$this->load->view('form/my_form');

}else{
$this->load->view('form/formsuccess');
}
}

public function username_check($str)
{
//独自のルールを追加できる
if ($str == 'test')
{
$this->form_validation->set_message('username_check', ' {field} に使ってはいけない "test"が入っています');
return FALSE;
}
else
{
return TRUE;
}
}

}

 

これで動きます。

動かない場合、バリデーションの日本語化が出来てない可能性が高いです。というか、それしかありません(笑

 

 

サニタイズ

サニタイズとは?

日本語では、「無害化」するという意味。サニタイズは、ユーザーの入力値を検証する仕組みです。

 

入力値が要件として正しい値か?をチェックします。

 

【参照】

https://qiita.com/rana_kualu/items/11cd41de5f0364ba2ee8

 

バリデーション

バリデーションで「値」をチェックする

想定していない値をチェックするための入力値検証。スクリプト攻撃を防ぎ、クエリを破壊されないようにします。

エラーメッセージ出すようにする。 

 

以下のように使う事もできます。

<?php

class Form extends CI_Controller {

 

public function index() {
$this->load->helper(array('form', 'url'));

$this->load->library('form_validation');

if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else {
$this->load->view('formsuccess');
}
}
}

 

$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を利用することで、ユーザーによって、入力された特殊文字を「文字列」に変換してくれます。

 

シングルクォーテーション ・・・ 「 '」を「&#039;」

ダブルクォーテーション ・・・ 「 " 」を「&quot;」

アンド ・・・ 「 &」を 「&amp;」に変換

小なり ・・・ 「 <」 を 「 &lt ;」

大なり ・・・ 「 >」を 「 &gt; 」

 

コードイグナイターでは、これらは全て、フォームヘルパーで処理してくれます。

 

【参照】

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');
$config = [

[ 'field' => 'name',
'label' => '名前',
'rules' => ['trim', 'required', ],
],
];

 

$this->form_validation->set_rules($config);

 

if ($this->form_validation->run() === TRUE) {
// OKの場合の処理
} else {
// NGの場合の処理

}

 

参照URL >>

 

フォームヘルパーのファイルは、フォームを処理するのに 役立つ関数。

ヘルパーを使って、まずは使えるようにします。コントローラに書いておくと良いです!!

 

$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の場合の処理
} else {
// NGの場合の処理

}

 

okの場合は、成功しました。と文字がでるように、ビューを作っておけば良いです。

二重投稿の処理などは、コードイグナイターがやってくれます。これも、本当に便利すぎます!!

 

フォームはコントローラに飛ばすと覚えておきましょう。

 

【参照】

https://codeigniter.jp/user_guide/3/helpers/form_helper.html

 

 

if ($this->form_validation->run() === TRUE) {

 

「run()」メソッドでPOSTフィールドデータを検証します。

一括で検証をしてくれます。

 

if ( $this->form_validation->run() )
{
    $data['error_message'] = $this>form_validation->error_string();
    $this->load->view('ビューのファイル名', $data);
}

 

エラーをviewに渡す事もできます。

 

echo $data['error_message'];

 

で表示する事ができます。

※勝手に<p></p>を入れてくれるので、とても便利です。

参照はこちら>>

 

 

<p></p>を変えるためには?

 

$this->form_validation->set_error_delimiters('<div class="err">', '</div>');
$error_message = $this>form_validation->error_string();
echo $error_message;

 

<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();?>
<?php echo form_open('form'); //コントローラーを指定しています。?>

<h5>ユーザ名:
<input type="text" name="username" value="<?php echo set_value('username'); ?>" size="20" />
</h5>
<h5>パスワード:
<input type="text" name="password" value="<?php echo set_value('password'); ?>" size="30" />
</h5>
<h5>パスワード確認:
<input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="30" />
</h5>
<h5>メールアドレス:<input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" />
</h5>
<div>
<p><input type="submit" value="Submit" /></p>
</div>

</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件までとさせていただいております。 契約をお待ちいただく可能性もございますので、ご了承のほどよろしくお願いいたします

 

 

 

 

コードイグナイターの勉強方法

 

 

この記事を読んだ人は、こんな記事も読んでいます

 

SEO対策の基本 外部要因とは?

SEO対策の基本的である、外部要因とは何か?

SEO対策をするなら絶対に知っておきたい、基本知識です。

 

売れるサイトを作るのに知って起きたい知識

サーチエンジンマーケティングという言葉をご存知でしょうか?

ホームページで商品やサービスを売る時に知っておきたいマーケティング

についてご紹介いたします。

seo対策をするメリットとは

SEO対策をする5つのメリットとは?

なぜ上位表示させることが大事なのか?なぜSEO対策をする必要があるのか

についてご紹介させていただきます。

 

内部要因とは

SEO対策の内部要因とは?

上位表示させるためには、内部要因について知っておくことも大事です。

キーワードを上位表示させるために必要なのは、ソースコードを最適化することです

内部要因の対策について知りたい方はこちらへ

 

キーワード対策をするまえに

キーワード対策をする前に

そのキーワード対策。ちょっと待ってください。

そのまま対策をすると、必ずお金を損してしまいます。個人事業主や中小企業は

そんな大きなキーワードで対策をしてはいけません。

広告費用が高くなる理由とは

広告費用が高くなる本当の理由とは?

売れないサイトに集めていませんか?広告費用がかかるわりには

お問い合わせが少ない・・・と感じる方は多いはずです。

購入率の悪いサイトに集客をしている可能性があります。

 

 

 

 

【SEO対策・web広告・webコンサルティングのプラスワーク対応エリアについて】

プラスワークでは、東京、神奈川、千葉、埼玉を中心に全国でwebコンサルティング、SEO対策、ホームページの更新、ホームページのリニューアル運営代行をしております。売上アップをお考えならお気軽にご相談ください。

 

【SEO対策・web広告・webコンサルティングのプラスワーク 対応地域】

北海道 [ 北海道 ]

東北  [ 青森 | 岩手 | 山形 | 福島 | 秋田 | 宮城 ]

関東  [ 東京 | 埼玉 | 千葉 | 茨城 | 栃木 | 群馬 | 神奈川 ]

甲信越 [ 山梨 | 長野 | 新潟 ]

北陸  [ 石川 | 福井 | 富山 ]

東海  [ 愛知 | 静岡 | 岐阜 | 三重 ]

近畿  [ 大阪 | 兵庫 | 京都 | 滋賀 | 奈良 | 和歌山 ]

中国  [ 島根 | 山口 |鳥取 | 広島 | 岡山 ]

四国  [ 徳島 | 香川 | 愛媛 | 高知 ]

九州  [ 福岡 | 佐賀 | 長崎 | 熊本 | 大分 | 宮崎 | 鹿児島 ]

プラスワークでは全国でSEO対策、ホームページ更新、制作をしております。中小企業専門SEO対策・ホームページ更新制作会社、ダイレクト レスポンス マーケティング、ウェブ マーケティング、マーケティング 分析、口コミのよいSEO対策会社をお探しならプラスワークにお任せくださいませ。

 

 

【コンテンツ】

トップへ

更新レスキュー

料金について

制作実績

お客様の声

よくある質問

会社概要

お問い合わせ

【更新レスキュー】

ライトコース

ゴールドコース

プラチナコース

 

【その他】

ニュース

メルマガ登録

特別資料プレゼント

相互リンク募集中

【課題から探す】

ホームページの課題

SEO対策とは

SEO対策がダメな理由

上位表示されない理由

相互リンクとは

順位が落ちてしまう原因

 

 

フェイスブック  ツイッター