質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework

Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

Q&A

解決済

1回答

2826閲覧

MVCでの登録フォームのエラーチェック

YoichiNakanishi

総合スコア13

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework

Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

0グッド

1クリップ

投稿2015/07/03 02:41

初めての質問です、よろしくお願い申し上げます。

php初心者ながらMVCにチャレンジしたく、zenzdframeworkで会員登録の仕組みを練習しています。
下記のように記述して、DBに登録される所までクリアできたのですが、肝心のエラーチェックがうまくいきません。

親切な方がいましたら、ご教授頂けると有難いです。

lang

1 2<?php 3 4require_once('BaseController.php'); 5 6 7class UsersController extends BaseController 8{ 9 10 /** 11 * メンバー登録フォームを表示 12 */ 13 public function signupAction() 14 { 15 16 } 17 18 19 /** 20 * メンバー登録フォームからの送信内容を処理 21 */ 22 public function emailregistAction() 23 { 24 $errors = array(); 25 26 // 入力内容をチェック 27 28 // email の validation 29 $name = $me['name']; 30 $email = $me['email']; 31 32 // 全角英数を半角にする 33 $email = mb_convert_kana($email, 'a'); 34 35 // email チェック 36 if (empty($email)) { 37 $this->errors['email'] = array('required' => 'メールアドレスを入力してください。'); 38 } elseif (!is_valid_email($email)) { 39 $this->errors['email'] = array('invalid' => 'メールアドレスが正しくありません。'); 40 } else { 41 $user = $this->getUserByEmail($email); 42 if ($user) { 43 $this->errors['email'] = array('duplicate' => 'このメールアドレスはすでに利用されています。'); 44 } 45 } 46 47 // ... ここ大事 48 49 if (!$errors) { 50 // 内容に問題がなければ登録する 51 52 // 登録するデータ 53 $data = array(); 54 $data['user_id'] = md5(uniqid(mt_rand(), true)); // ユーザーIDを発行 55 $data['name'] = $this->_getParam('name'); 56 $data['email'] = $this->_getParam('email'); 57 $data['password'] = sha1($this->_getParam('password')); // パスワードを暗号化 58 59 // データベース接続を取得 60 $db = $this->application->getBootstrap()->getResource('db'); 61 62 // データ登録(挿入) 63 $db->insert("user", $data); 64 65 // ユーザーに登録完了メールを送信 66 67 } else { 68 // エラーがある場合はエラーを表示 69 } 70 71 } 72 73 74 public function newpasswordAction() 75 { 76 // action body 77 } 78 79 80 /** 81 * ログインフォームを表示 82 */ 83 public function signinAction() 84 { 85 $user = Zend_Auth::getInstance()->getStorage()->read(); 86 if ($user) { 87 // ログイン済み 88 // ... 89 } 90 } 91 92 93 /** 94 * ログインフォームからの送信内容を処理 95 */ 96 public function signincheckAction() 97 { 98 // 入力内容をチェック 99 // ... ここ大事 100 101 // データベース接続を取得 102 $db = $this->application->getBootstrap()->getResource('db'); 103 104 // コンストラクタにパラメータを渡し、インスタンスを設定します 105 $authAdapter = new Zend_Auth_Adapter_DbTable( 106 $db, 107 'user', 108 'email', 109 'password', 110 'SHA1(?)' 111 ); 112 113 // 入力情報 (ログインフォームからの値など) を設定します 114 $authAdapter 115 ->setIdentity($this->_getParam('email')) 116 ->setCredential($this->_getParam('password')) 117 ; 118 119 // Zend_Auth_Adapter_DbTable による認証を行います 120 $result = $authAdapter->authenticate(); 121 122 if ($result->isValid()) { 123 // 認証成功 124 125 // 認証情報をオブジェクトとして保存し、username と real_name のみを返します 126 $storage = Zend_Auth::getInstance()->getStorage(); 127 $storage->write($authAdapter->getResultRowObject(array( 128 'user_id', 129 'name', 130 'email' 131 ))); 132 133 /* ... */ 134 135 // トップへ転送 136 $this->_redirect(''); 137 138 } else { 139 // 認証失敗 140 141 /* ... */ 142 143 echo 'login failed'; 144 exit; 145 146 } 147 } 148 149 150 /** 151 * ログアウト処理 152 */ 153 public function signoutAction() { 154 // ログアウト 155 Zend_Auth::getInstance()->clearIdentity(); 156 157 // トップへ転送 158 $this->_redirect(''); 159 } 160 161}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おそらく emailregistAction の中で $this->errors にエラーをセットしているにも関わらず、すこし下の if (!$errors) {$errors をチェックしているからだと思います。

が、そもそも ZendFramework っぽい感じになっていないと思うので、学習目的なら下記のチュートリアルをやってみた方が良いと思います。

http://framework.zend.com/manual/1.12/en/learning.html

また、いまさら ZendFramework 1 もどうかと思うので、新しく覚えるなら ZendFramework 2 の方が良いと思いますよ。

投稿2015/07/03 11:10

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YoichiNakanishi

2015/07/05 15:03

なるほどですね、 ZendFramework 2 の方が良いですよね、 チュートリアルで学びます! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問