PHP Version 5.1.6を使っています。
CodeIgniterのバリデーション処理で分からないところがあります。
http://userguide.cilab.info/libraries/validation …
この例の中のindexメソッドです。
if ($this->validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
これはエラーがあったらmyformにエラーを付加したのを表示させ、
エラーがなかったらformsuccessページを表示させます。
入力ページ(myform)とその結果ページ(formsuccess)の2つで構成されています。
もし入力ページが2つ以上続いた場合にどのようなプログラムになるのかが分かりません・・・
例えば、myform1には'ユーザ名'と'パスワード'を入力するフォームがあり
myform2は'メールアドレス'を入力するフォームがあって、その次に
結果ページ(formsuccess)という3段階のステップあったとします。
(myform1→myform2→formsuccess)
この場合に上の制御プログラムは同じURIで作業するとして
$rules['username']= "required";
$rules['password']= "required";
$this->validation->set_rules($rules);
$fields['username']= 'ユーザ名';
$fields['password']= 'パスワード';
$this->validation->set_fields($fields);
if ($this->validation->run() == FALSE)
{
$this->load->view('myform1');
}
else
{
$rules['email']= "required";
$this->validation->set_rules($rules);
$fields['email']= 'メールアドレス';
$this->validation->set_fields($fields);
if ($this->validation->run() == FALSE)
{
$this->load->view('myform2');
}
else
{
$this->load->view('formsuccess');
}
}
このようなさらに奥に掘り下げていくようなプログラムになるのでしょうか?
これだとなんか変な感じがします・・・
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
よく使われているのは、何らかの方法でactionが何かを示すフラグを用意しているんじゃないかなと思います。
URIは同じと言うことで、以下のような状態になるんじゃないでしょうか?
<form action="http://一定のURI/">
<input type="hidden" name="ACTOIN_FLAG" value="ACTION_MODE">
//その他の入力フォームなど
</form>
このようにしておくと、以下のような処理を行うこと出来ます。
<?php
class a {
function __construct() {
//クラス名は適当です
$this->validation = new varidation();
$this->load = new load();
}
//Controll
function main() {
$mode = $_REQUEST['ACTION_FLAG'];
$this->setString();
switch ($mode) {
case 'myform1':
case 'myform2':
case 'myform3':
$this->$mode();
break;
}
$template_mode = ($this->validation->run()) ? 'error' : 'success';
$this->load->view($this->template[$template_mode]);
}
//Model
function myform1() {
$rules['username'] = "required";
$rules['password'] = "required";
$this->validation->set_rules($rules);
$this->template = array('error'=>'myform1','success'=>'myform2');
}
//Model
function myform2() {
$rules['username'] = "required";
$rules['password'] = "required";
$rules['email'] = "required";
$this->validation->set_rules($rules);
$this->template = array('error'=>'myform1','success'=>'myform2');
}
//Model
function myform3() {
$rules['username'] = "required";
$rules['password'] = "required";
$rules['email'] = "required";
$this->validation->set_rules($rules);
$this->template = array('error'=>'myform2','success'=>'formsuccess');
}
function setString() {
$_tmp = array();
foreach (array($_POST, $_SESSION) as $_array) {
foreach ($_array as $_k => $_v) {
$_tmp[$_k] = $_v;
}
}
$this->validation->set_fields($_tmp);
}
私だとこんな感じに書くかも知れません。
結構省略してしまっている部分があるので実用的ではないですが。
ご返答ありがとうございます。
なるほど、フラグで分けて処理するということですね。参考になります。
ただ気になるところがあるのですが、
Modelのmyform1の
'success'=>'myform2'
は必要なのでしょうか?template配列に空きがないようにする為のものでしょうか?
No.1
- 回答日時:
いったんデータをクッキーもしくはセッションに保存しておく。
ご返答ありがとうございます。
セッションに入れてからの制御処理がどうなるのかが分からないのですが、
具体的にこの場合はどのような書き方になるのでしょうか?
if ($this->validation->run() == FALSE)
{
$this->load->view('myform1');//この2つのフォームをどこに入れて書けば良いのかが分かりません・・・
$this->load->view('myform2');//
}
else
{
$this->load->view('formsuccess');
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- X(旧Twitter) Hello, We received your appeal regarding your acco 1 2022/09/12 03:57
- その他(プログラミング・Web制作) どうしてもエラーが解決できません。 1 2022/07/23 04:32
- その他(SNS・コミュニケーションサービス) 自分のpcがハッキングされたようなメールが来たのですがどうすればいいですか? 4 2022/10/02 16:14
- Gmail チャットGPTの登録ができない 1 2023/03/07 02:43
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- 英語 「this is the/my first time~」の文法上の制約について 1 2023/04/06 09:48
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- ビデオカード・サウンドカード DellのPC(xp)に、サウンドカードドライバ(内蔵)をインストールしたい。 1 2023/07/31 11:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpでPEAR::DBを使っているので...
-
index.phpって何ですか? 具体...
-
phpでcookieがうまく保存されない
-
PHPSpreadsheetを使って関数を...
-
PHPのセッション有効期限について
-
index.phpに入るには、どうすれ...
-
重複を防ぐ記述について教えて...
-
フォームで戻った際に入力済み...
-
アンドロイドスマホでのphp ech...
-
入力フォームの空白や改行を制...
-
PHP8を使うと、大量のWarningが...
-
PostgreSQLからCSV形式でエクス...
-
PHPで画像の渡しが上手く行きま...
-
reuterの記事をbeautiful.soup....
-
PHP一覧表示した項目にリンクを...
-
値の取り出し方について教えて...
-
PHPSpreadsheetによる書き出し...
-
連投防止
-
ここでの ②if($su_d<>"")の比較...
-
オススメのプログラミングスク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpでcookieがうまく保存されない
-
なんでブラウザでPHPを動かすた...
-
PHP8を使うと、大量のWarningが...
-
ワードプレスサイト PHP8.0.25...
-
PHPSpreadsheetを使って関数を...
-
php 入力画面から確認表示画面...
-
PHPのエラーの解消法について教...
-
掲示板のセキュリティについて...
-
php 完了画面の送信メールのコ...
-
PHPのセッション有効期限について
-
掲示板を作成しておりアップロ...
-
PHPでCookieを使った訪問回数に...
-
PHPで画像の渡しが上手く行きま...
-
重複を防ぐ記述について教えて...
-
php 確認表示画面で値をSESSION...
-
ファイルアップロードに関して...
-
メールフォームのタイトルが文...
-
フォームで戻った際に入力済み...
-
PHPで訪問回数を表示するカウン...
-
アップロード画像数でCSSを分け...
おすすめ情報