CodeIgniter

[CodeIgniter]get_table_names_by_dbname

$this->db->list_tables();

上記だとキャッシュから取得する。キャッシュを回避する場合下記を使用。

public function get_table_names_by_dbname($dbname)
{
    $names = array();
    $sql = "SHOW TABLES FROM {$dbname}";
    $query = $this->db->query($sql);
    foreach ($query->result_array() as $row)
    {
        if ( ! isset($key))
        {
            if (isset($row['table_name']))
            {
                $key = 'table_name';
            }
            elseif (isset($row['TABLE_NAME']))
            {
                $key = 'TABLE_NAME';
            }
            else
            {
                $key = array_keys($row);
                $key = array_shift($key);
            }
        }

        $names[] = $row[$key];
    }
    return $names;
}

[CodeIgniter]set_header

$this->output->set_header('X-Frame-Options: SAMEORIGIN');
$this->output->set_header('Cache-control: no-cache, no-store, post-check=0, pre-check=0');
$this->output->set_header('Pragma: no-cache');
$this->output->set_header('Expires: Thu, 01 Dec 1994 16:00:00 GMT');

[CodeIgniter]カラム名一覧取得

カラム名一覧取得
application/core/MY_Model.phpとかに追記

public function get_column_names($table = '', $format = '%s')
{
    $names = $this->db->list_fields(empty($table) ? $this->name : $table);
    if(!empty($format)){
        foreach($names as &$name){
            $name = sprintf($format,$name);
        }
    }
    return $names;
}

[CodeIgniter]テーブルのカラムのコメント取得

テーブルのカラムのコメント取得
/application/core/MY_Model.phpとかに実装

public function get_column_comments($table = '')
{
    if(empty($table)){
        $table = $this->name;
    }
    $query = "SELECT COLUMN_NAME,COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '$table' AND table_schema = '{$this->db->database}'";
    $result = $this->db->query($query);
    $result = $result->result('array');
    $tmp = array();
    foreach($result as $array){
        $tmp[$array['COLUMN_NAME']] = $array['COLUMN_COMMENT'];
    }
    return $tmp;
}

[CodeIgniter]バリデーション設定テンプレ

バリデーション設定テンプレ

public $validation = array(
    'login' => array(
        array(
            'field'  => 'email',
            'label'  => 'メールアドレス',
            'rules'  => 'trim|xss_clean|required',
            'errors' => array(
                'required' => '%sは必須です。',
                'custom_validation' => '%sかパスワードが異なります。',
            ),
        ),
        array(
            'field'  => 'password',
            'label'  => 'パスワード',
            'rules'  => 'trim|xss_clean|required',
            'errors' => array(
                'required' => '%sは必須です。',
            ),
        ),
    ),
    'update' => array(
        array(
            'field'  => 'company',
            'label'  => '会社名',
            'rules'  => 'trim|xss_clean|max_length[50]',
            'errors' => array(
                'max_length' => '%sは50文字以下にして下さい。',
            ),
        ),
        array(
            'field'  => 'zip',
            'label'  => '郵便番号',
            'rules'  => 'trim|xss_clean|regex_match[/[\d]{3}\-[\d]{4}/]',
            'errors' => array(
                'regex_match' => '%sは[半角数字3桁-半角数字4桁]で入力して下さい。',
            ),
        ),
        array(
            'field'  => 'address',
            'label'  => '住所',
            'rules'  => 'trim|xss_clean|max_length[100]',
            'errors' => array(
                'max_length' => '%sは100文字以下にして下さい。',
            ),
        ),
        array(
            'field'  => 'tel',
            'label'  => '電話番号',
            'rules'  => 'trim|xss_clean|regex_match[/^[\d]{2,5}\-[\d]{1,4}\-[\d]{4}$/]',
            'errors' => array(
                'regex_match' => '%sは[半角数字2~5桁-半角数字1~4桁-半角数字4桁]で入力して下さい。',
            ),
        ),
        array(
            'field'  => 'email',
            'label'  => 'メールアドレス',
            'rules'  => 'trim|xss_clean|valid_email|max_length[255]',
            'errors' => array(
                'valid_email' => '%sを正しく入力して下さい。',
                'max_length' => '%sは255文字以下にして下さい。',
            ),
        ),
        array(
            'field'  => 'password',
            'label'  => 'パスワード',
            'rules'  => 'trim|xss_clean|min_length[6]|max_length[12]|regex_match[/^[\w\-]+$/]',
            'errors' => array(
                'required' => '%sは必須です。',
                'min_length' => '%sは6文字以上にして下さい。',
                'max_length' => '%sは12文字以下にして下さい。',
                'regex_match' => '%sに使用出来るのは半角英数字、ハイフン、アンダースコアです。',
            ),
        ),
        array(
            'field'  => 'note',
            'label'  => '備考',
            'rules'  => 'trim|xss_clean|max_length[500]',
            'errors' => array(
                'max_length' => '%sは500文字以下にして下さい。',
            ),
        ),
    ),
);

[CodeIgniter]email

email

views/mail/user_mail.php

メール本文

libraries/MY_Email.php

<?php
class My_Email extends CI_Email {
	public function __construct(array $config = array())
	{
		parent::__construct($config);
	}

	/**
	 * get Body by tempalte
	 *
	 * @param	string
	 * @param   array
	 * @return	string
	 */
	public function get_template_contents($template, $values = array())
	{
		$file = VIEWPATH . $template;
		if(!file_exists($file)){
			$file .= '.php';
		}

		extract($values);
		ob_start();
		include($file);
		$contents = ob_get_contents();
		ob_end_clean();
		return $contents;
	}
}

config/config_mail.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$config['user_mail'] = array(
    'from'      => 'from@sample.co.jp',
    'from_name' => 'fromName',
    'subject'   => 'メールタイトル',
);

controller

$this->load->library('email');
$config_key = 'user_mail';
$this->load->config('config_mail');
$user_mail = $this->config->item($config_key);

$mail = new PHPMailer();
$mail->CharSet = "iso-2022-jp";
$mail->Encoding = "7bit";
$mail->AddAddress('to@sample.co.jp');
$mail->From = $user_mail['from'];
$mail->FromName = mb_encode_mimeheader(mb_convert_encoding($user_mail['from_name'], "JIS", "UTF-8"));
$mail->Subject = mb_encode_mimeheader(mb_convert_encoding($user_mail['subject'], "JIS", "UTF-8"));
$body = $this->email->get_template_contents('mail/'.$config_key);
//$mail->Body = mb_convert_encoding($body, "JIS", "UTF-8");
$mail->Body = mb_convert_encoding($body,"ISO-2022-JP-ms","UTF-8");//機種依存文字が含まれるならこちら
$result = $mail->Send();

[CodeIgniter]LoginControllerサンプル

LoginControllerサンプル

<?php
require_once 'BaseController.php';
class Login extends BaseController {
    protected $data = array();
    public function __construct()
    {
        parent::__construct();
        $this->load->model('admins');
    }

    public function index()
    {
        //postデータあり -> バリデーション
        if ($this->has_post_data()) {
            //バリデーション
            $result = $this->admins->validate('login');
            //バリデーションOK
            if($result){
                //メアド、パスワードDB照合
                $result = $this->admins->login();
                //メアド、パスワードDB照合OK
                if($result){
                    redirect('/');//ログイン済みホーム
                    return;
                }
            }
        }

        $this->view($this->get_template_name(),$this->data);
    }
}

AdminsModel

<?php
require_once 'BaseModel.php';
class Admins extends BaseModel {
	public $name = 'admins';
	public $validation = array(
		'login' => array(
			array(
				'field' => 'email',
				'label' => 'メールアドレス',
				'rules' => 'trim|xss_clean|required',
				'errors' => array(
					'required' => '%sは必須です。',
					'custom_validation' => '%sかパスワードが異なります。',
				),
			),
			array(
				'field' => 'password',
				'label' => 'パスワード',
				'rules' => 'trim|xss_clean|required',
				'errors' => array(
					'required' => '%sは必須です。',
				),
			),
		),
	);
	public function __construct()
	{
		parent::__construct();
	}
	public function login($email='',$password='')
	{
		if(empty($email)){
			$email = $this->post('email');
		}
		if(empty($password)){
			$password = $this->post('password');
		}
		$this->db->where('email',$email);
		$result = $this->db->get($this->name);
		if($result->num_rows() < 1){
			return false;
		}
		$result_data = $result->result('array');
		$data = array_shift($result_data);
		$login = password_verify($password,$data['password']);
		if($login){
			//ログイン成功
			$data = array(
				"email" => $email,
				"is_logged_in" => 1,
				"user_id" => $data['id'],
			);
			$this->session->set_userdata($data);
		}
		return $login;
	}
}

[CodeIgniter]BaseController

共通関数を設定する時は必要。
各ControllerはこのBaseControllerをextendsする。しなくてもよい。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class BaseController extends CI_Controller {

	public function __construct(){
		parent::__construct();

		if(!isset($_SERVER['PATH_INFO'])){
			$_SERVER['PATH_INFO'] = strtok($_SERVER['REQUEST_URI'],'?');
		}
		$this->data['class'] = $this->router->class;
		$this->data['method'] = $this->router->method;
		$this->data['uri'] = uri_string();

		//ログインしている
		if($this->session->userdata("is_logged_in")){
			//ログインページの時 -> ホームへリダイレクト
			if(in_array($this->data['class'],array('login'))){
				redirect('/');
			}

		//ログインしてない
		}else{
			//ログインページではない && 登録ページではない -> ログインページへリダイレクト
			if (!in_array($this->data['class'], array('login', 'regist'))) {
				redirect('/login/');
			}
		}
	}
	protected function get_template_name($name='')
	{
		return $this->get_class_method_string($name, '/', 2);
	}
	protected function get_class_method_string($name = '',$delimiter = '/',$backtrace_count = 1)
	{
		if(!empty($name)){
			return strtolower(get_class($this)) . $delimiter . $name;
		}
		$backtraces = debug_backtrace($limit=2);
		return strtolower(get_class($this)) . $delimiter . $backtraces[$backtrace_count]['function'];
	}
	protected function has_post_data()
	{
		return !empty($this->input->post());
	}
	protected function post($index = NULL, $xss_clean = NULL, $default = '')
	{
		$data = $this->input->post($index, $xss_clean);
		return empty($data) ? $default : $data;
	}
	public function view($template='',$data=[],$header='common/header',$footer='common/footer'){
		$this->load->view($header, $data);
		if(is_array($template)){
			foreach($template as $tmpl){
				$this->load->view($tmpl, $data);
			}
		}else {
			$this->load->view($template, $data);
		}
		$this->load->view($footer,$data);
	}
	protected function var_dump($data = null)
	{
		echo '<pre>';
		if(empty($data)){
			var_dump($this->data);
		}else{
			var_dump($data);
		}
		echo '</pre>';
	}
}