TOOL更新_ファイルアップロード処理を次期バージョンに置き換えた。
TOOL更新_ファイルアップロード処理を次期バージョンに置き換えた。
■画像
■クラス概略
■ControllerBase.php、ControllerDbBase.phpはhttp://d.hatena.ne.jp/kazpgm/20100121/1264095498(TOOL更新_ベースになるサンプルを作成中)にあります。
■ControllerAdminIUpBase.php
<?php // ============================================================= // 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) Start // 修正BSDライセンス。 // ============================================================= // DBマネージャを使用するプログラム用Controller基底クラス。 require_once 'ControllerDbBase.php'; // DBマネージャを使用する管理者側ファイルアップロード用Controller基底クラス abstract class ControllerAdminIUpBase extends ControllerDbBase { protected $_mode = ''; // モード protected $_modeBk = ''; // モードバックアップ // 各アクション共通の前処理 public function preDispatch() { // 親クラスの各アクション共通の前処理 parent::preDispatch(); // ログインチェック if( $this->_sess['login_type'] != '1' && $this->_sess['login_type'] != '2' && $this->_sess['login_type'] != '3'){ $this->_sess['req_url'] = $_SERVER["REQUEST_URI"]; $this->_sessObj->array = $this->_sess; $this->_redirect('index'); } } protected function _commActSub() { // 親クラスでabstractメソッドにしてある。親クラスの_commAct()から呼ばれる。 $this->_o['c_elements_idx'] = '0'; $this->_mode = strtolower($this->_o['mode']); $this->_modeBk = $this->_mode; // トークンチェックを行う。セッションは管理者側、ユーザ側別にしてあります。 if (TokenHandle::isTokenValid($this->_getAdminKbn(), $this->_o, strtolower($this->_o['mode']), $this->_getAdminKbn() == AppConst::VAL_USER) == false) { // 管理者側トークンチェック // トークンチェックエラー場合 throw new AppException('画面遷移(トークンチェック)エラーです。'); } // DB begin $this->_dbBegin(); $this->_mode = strtolower($this->_o['mode']); switch($this->_mode) { case 'up_csv'; // ファイルアップロード $this->_err = $this->_validCheck($this->_o, $this->_mode); if(AppCheckUtil::chkError($this->_err)) { // エラーあり } else { // 更新実行 $this->_csvUpload(); $eMes = array(); $eMes['up_csv'] = "UPLOADが正常終了しました。"; $this->_err = $eMes; } break; default: $this->_mode = 'list'; } // HTML出力 $this->_outHtml(); // DB commit $this->_dbCommit(); } // 管理者側かユーザ側かを戻す。(おもにトークンチェックで使用する) // "admin":管理者側、"user":ユーザ側 protected function _getAdminKbn() { return AppConst::VAL_ADMIN; // 管理者側 } // HTML出力 protected function _outHtml() { $this->_o['c_elements_idx'] = '0'; // viewログ出力 $this->_outViewLog($this->_o, $this->_err, $this->_result); $smarty = Zend_Registry::get('smarty'); $smarty->assign('o', $this->_o); $smarty->assign('err', $this->_err ); $smarty->assign('sess', $this->_sess ); if (isset($this->_result)) { $smarty->assign('result', $this->_result ); } // 登録 画面 $smarty->display('view/' . $this->_getViewFolderName() . ($this->_getViewFolderName()==''?'':'/') . $this->_getViewHtmlName()); } // viewに使用するhtml名 // 例 return 'iUplogininfoCsvView.html'; abstract protected function _getViewHtmlName(); // viewに使用するフォルダ名 // 例 return 'admin/initupload'; abstract protected function _getViewFolderName(); // 入力値のチェック abstract protected function _validCheck(&$vars, $mode); // 追加実行 abstract protected function _csvUpload(); // 追加実行 abstract protected function _insDoTbl(&$vars); } // ============================================================= // 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) End // 修正BSDライセンス。 // =============================================================
■IuplogininfoacsvController.php
<?php // ============================================================= // 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) Start // 修正BSDライセンス。 // ============================================================= // DBマネージャを使用するプログラム用Controller基底クラス。 require_once 'ControllerAdminIUpBase.php'; // DBマネージャを使用する管理者側ファイルアップロード用Controller実装クラス class Initupload_IuplogininfoacsvController extends ControllerAdminIUpBase { // viewに使用するhtml名 // 例 return 'iuplogininfoacsvView.html'; protected function _getViewHtmlName() { return 'iuplogininfoacsvView.html'; } // viewに使用するフォルダ名 // 例 return 'admin/initupload'; protected function _getViewFolderName() { return 'admin/initupload'; } // 入力値のチェック protected function _validCheck(&$vars, $mode) { $MAX_ERR_LINE=100; // エラー100個まで出す。 $errcount=0; $mode = 'ins_do'; // モード='ins_do'とする。 // 入力値チェック $result = true; $errorMessages = array(); $eMes = array(); // ファイル $result = AppCheckUtil::checkPhoto($vars, $errorMessages, "ファイル", $result, "up_csv", true,'0', array( "csv", "txt", "text")); if (!$result) { $eMes['up_csv'] = 'ファイルを指定してください。'; return $eMes; } $count = 0; $fp = fopen( $_FILES["up_csv"]["tmp_name"], "r") or die("up_csv couldn't open."); // 1行目がタイトルのときはコメントをはずしてください。 //$data = fgetExcelCSV($fp); // 1行目の項目名をスキップする為のダミー読み出し //$count++; while( $data = fgetExcelCSV($fp) ) { $count++; $vars = array(); $vars['login_id'] = mb_convert_encoding($data[0],"UTF-8","SJIS-WIN"); // ログインID $vars['login_type'] = mb_convert_encoding($data[1],"UTF-8","SJIS-WIN"); // ログイン権限 $vars['pwd1'] = mb_convert_encoding($data[2],"UTF-8","SJIS-WIN"); // パスワード $vars['yuko_flg'] = mb_convert_encoding($data[3],"UTF-8","SJIS-WIN"); // 有効フラグ if (count($data) != 4) { if ($errcount < $MAX_ERR_LINE) { $errcount++; $eMes['up_csv'] .= 'CSVデータの項目数に誤りがあります。 ' . $count . '行目' . "\n"; } continue; } // ■--PGM<<008>> start-------------------------------------------- $errorMessages = array(); // 入力値チェック $result = true; // ログインID $result = AppCheckUtil::checkMoji($vars, $errorMessages, "ログインID", $result, "login_id", AppCheckUtil::CON_CHK_HALF_LETTER_DIGIT, 10, false, true,'0'); // ログイン権限 $result = AppCheckUtil::checkCodeValue($vars, $errorMessages, "ログイン権限", $result, "login_type", "LOGIN_TYPE", true,'0'); // パスワード $result = AppCheckUtil::checkMoji($vars, $errorMessages, "パスワード", $result, "pwd1", AppCheckUtil::CON_CHK_HALF_LETTER_DIGIT, 8, false, true,'0'); // 有効フラグ $result = AppCheckUtil::checkCodeValue($vars, $errorMessages, "有効フラグ", $result, "yuko_flg", "YUKO_FLG", true,'0'); // 登録日時 // 更新日時 if ($mode == 'ins_do' && !AppCheckUtil::chkError($errorMessages)) { // 追加かつ、エラーなし $keychecks = array (); $keychecks['login_id'] = $vars['login_id']; $rtn = AppDbFunctions::logininfoGetRec($this->_db, $keychecks); if(!empty($rtn)) { $errorMessages['login_id'] = 'すでに登録されています。'; } } // ■--PGM<<008>> end-------------------------------------------- if (AppCheckUtil::chkError($errorMessages)) { foreach( $errorMessages as $key => $val ){ if ("" != $val) { if ($errcount < $MAX_ERR_LINE) { $errcount++; $eMes['up_csv'] .= '[' . $key . '] '. $val . $count . '行目' . "\n"; } } } continue; } } fclose($fp); return $eMes; } // 追加実行 protected function _csvUpload() { $fp = fopen( $_FILES["up_csv"]["tmp_name"], "r") or die("up_csv couldn't open."); // 1行目がタイトルのときはコメントをはずしてください。 //$data = fgetExcelCSV($fp); // 1行目の項目名をスキップする為のダミー読み出し while( $data = fgetExcelCSV($fp) ) { $vars = array(); $vars['login_id'] = mb_convert_encoding($data[0],"UTF-8","SJIS-WIN"); // ログインID $vars['login_type'] = mb_convert_encoding($data[1],"UTF-8","SJIS-WIN"); // ログイン権限 $vars['pwd1'] = mb_convert_encoding($data[2],"UTF-8","SJIS-WIN"); // パスワード $vars['yuko_flg'] = mb_convert_encoding($data[3],"UTF-8","SJIS-WIN"); // 有効フラグ $this->_insDoTbl($vars); } fclose($fp); } // 追加実行 protected function _insDoTbl(&$vars) { $sql = 'INSERT INTO ' . 'm_logininfo' . ' ( '. // ■--PGM<<010>> start-------------------------------------------- 'login_id, ' . // ログインID 'login_type, ' . // ログイン権限 'pwd1, ' . // パスワード 'yuko_flg, ' . // 有効フラグ 'logininfo_insert, ' . // 登録日時 'logininfo_update ' . // 更新日時 ' ) VALUES (?,?,?,?,?,?)'; // ■--PGM<<010>> end-------------------------------------------- $valary = array(); $valary[] = $vars['login_id']; // ログインID $valary[] = $vars['login_type']; // ログイン権限 $valary[] = $vars['pwd1']; // パスワード $valary[] = $vars['yuko_flg']; // 有効フラグ $valary[] = date( 'Y/m/d H:i:s' ); // 登録日時 $valary[] = date( 'Y/m/d H:i:s' ); // 更新日時 $this->_db->query($sql, $valary); } } // ============================================================= // 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) End // 修正BSDライセンス。 // =============================================================
■IuplogininfoacsvView.html
{{* // ============================================================================ // Copyright (c) 2010 kaz PHP自動作成お助けTOOL. All rights reserved. // ============================================================================ // ログイン情報 初期データアップロード 画面 *}} <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <title>kaz PHP自動作成お助けTOOL サイト管理システム</title> <link rel="stylesheet" href="/samples/kazBase/kaz/admin/css/screen.css" type="text/css" media="screen,print" /> </head> <body> <!-- wrapper start --> <div id="wrapper"> <!-- #BeginLibraryItem "/Library/header.lbi" --> {{include file='view/admin/header.lbi'}} <!-- #EndLibraryItem --> <!-- contents start --> <div id="contents"> <!-- #BeginLibraryItem "/Library/menu.lbi" --> {{include file='view/admin/menu.lbi'}} <!-- #EndLibraryItem --> <!-- main start --> <div id="main"> <h1>ログイン情報 初期データアップロード管理</h1> <h2>ログイン情報 初期データアップロード取込み</h2> <!-- tbl-01 start --> <!-- tbl-01 end --> <br/> <form name="frm" method="post" action="/samples/kazBase/kaz/admin/initupload/iuplogininfoacsv" enctype="multipart/form-data"> <input type="hidden" name="mode" value="up_csv"> {{kaz_token_html namespace='admin'}} <table border="0" cellpadding="0" cellspacing="0" class="tbl-01"> <tr> <th width="18%" nowrap><label for="up_csv">ログイン情報 初期データアップロードファイル</label></th> <td class="{{if $err.up_csv == ''}}none{{else}}error{{/if}}"> <label for="up_csv">CSV</label><input name="up_csv" type="file" id="up_csv" size="50" value="参照"> <br />エラーは先頭の100個まで表示します。1つでもエラーがあるときは処理しません。{{$err.up_csv|kaz_encErrTag}} </td> </tr><!-- radio --> <tr> </table> <p class="text-center"><a href="javascript:document.frm.submit();">【登録】</a></p> </form> </div> <!-- main end --> <p class="clear"></p> </div> <!-- contents end --> <!-- #BeginLibraryItem "/Library/footer.lbi" --> {{include file='view/admin/footer.lbi'}} <!-- #EndLibraryItem --> </div> <!-- wrapper end --> {{include file='view/admin/analytics.lbi'}} </body> </html>
8/14 9:00-11:00 13:00-18:00 20:00-2:30 これで管理者側の機能は次期バージョンに置き換えられることが確認できた。、、、、もう少しの調整(デバックログをモジュール、コントロール、アクションで出す出さないを制御できるようにしとこうと思う)したらユーザ側の置き換えに入る。
9/23 17:00-17:30
if (TokenHandle::isTokenValid($this->_getAdminKbn(), strtolower($this->_o['mode']), $this->_getAdminKbn() == AppConst::VAL_USER) == false) { // 管理者側トークンチェック を if (TokenHandle::isTokenValid($this->_getAdminKbn(), $this->_o, strtolower($this->_o['mode']), $this->_getAdminKbn() == AppConst::VAL_USER) == false) { // 管理者側トークンチェック に変更した
2011/02/01 0:00-0:10 IUplogininfoCsvをIuplogininfoacsv、iUplogininfoCsvをiuplogininfoacsvに修正した。これはhttp://d.hatena.ne.jp/kazpgm/20110131/1296487044による修正を反映したもの。
2011/03/07 4:00-4:10 http://d.hatena.ne.jp/kazpgm/20110307/1299523681(TOOL更新_Ver0.1Zd(次期バージョン)の管理者側もすべてアクションで切り分けるように修正した。(modeパラメータを使わないようにした。)など。)の内容を反映した。