Codeigniter
判斷DB是否執行成功
判斷select
if ($query->result_array())
{
// display data..
}
return FALSE;
判斷insert
if ($this->db->insert_id())
{
return TRUE;
}
判斷update是否成功更新
if ($this->db->update('shares'))
{
return TRUE;
}
或
return ($this->db->affected_rows() > 0) ? TRUE : FALSE;
判斷delete是否成功刪除
$this->db->delete('question_options');
if ($this->db->affected_rows() > 0)
{
return TRUE;
}
return FALSE;
欄位更新 ex: +1
$this->db->set('lose', 'lose+1', FALSE);
$this->db->where('guid', $data['guid']);
$this->db->update('users');
array(
'field' => 'current_passwd',
'label' => 'lang:users-current_passwd',
'rules' => 'trim|required|callback_check_password[13]'
)
function check_password($current_passwd, $uid)
{
// $current_passwd : CI 會自已捕捉 HTML 裡 name="current_passwd" post 進來的值,放入第一個參數
// $uid = 13
if ( // Condition )
{
return TRUE;
}
return FALSE;
}
給 callback 的參數是從第二個參數開始給,第一個參數都是保留給自已那個欄位的值(current_passwd的值)
Load model in Library
private $CI = NULL;
public function __construct()
{
$this->CI =& get_instance();
$this->CI->load->model('test_model');
}
codeigniter 寄信錯誤 “無法使用 mail() 函式發送信件. 主機可能未設定此方法發送信件”
可能沒有安裝sendmail
sudo apt-get install sendmail
測試sendmail 寄信
$ sendmail test_user@example.com <= enter
Subject: test <= enter
test <= enter
. <= enter
OR
echo "My test email being sent from sendmail" | /usr/sbin/sendmail test_user@example.com
system/core/Input.php
的 CI_INPUT class
在 __contruct()
會執行 _sanitize_globals
metheod
而 _sanitize_globals
method 會過濾一切 $_GET
及 $_POST
變數所以即使拿原生函數 $_GET
去抓都沒有用,會先被ci的 method 給過濾掉
而在這裡面它執行的是 _clean_input_data
這個 method 而它又會去執行
remove_invisible_characters
這個 function,而它是在 system/core/Common.php
裡
就是由它去過濾 %00
-%08
%0b
%0c
%0e
%0f
,把它們轉成空字串
可藉由 remove_invisible_characters
的第二個參數指定為 false
關閉過濾
自訂 controller
/application/core/MY_Controller :
require_once 'Base_Controller.php';
class MY_Controller extends CI_Controller {
CI 的 log_message
log_message("INFO", "data: " . var_export($data, TRUE));
第二個參數預設為 FALSE
:
If you would like to capture the output of print_r(), use the return parameter. When this parameter is set to TRUE, print_r() will return the information rather than print it.
crop avatar
$crop_x = $this->input->post('crop_x');
$crop_y = $this->input->post('crop_y');
$crop_w = $this->input->post('crop_w');
$crop_h = $this->input->post('crop_h');
// calculate new coordinate, width and height
list($ori_width, $ori_height) = getimagesize($original_image_path);
list($pre_width, $pre_height) = getimagesize($preview_image_path);
$width_percent = round($ori_width / $pre_width, 2);
$height_percent = round($ori_height / $pre_height, 2);
$new_x = (int) round($crop_x * $width_percent);
$new_y = (int) round($crop_y * $height_percent);
$new_w = (int) round($crop_w * $width_percent);
$new_h = (int) round($crop_h * $height_percent);
//crop
$config = array(
'image_library' => 'gd2',
'source_image' => $original_image_path,
'new_image' => $destination_image,
'quality' => 100,
'maintain_ratio' => FALSE,
'x_axis' => $new_x,
'y_axis' => $new_y,
'width' => $new_w,
'height' => $new_h
);
$this->image_lib->initialize($config);
if ($this->image_lib->crop())
{
// resize to 180 * 180
$config = array(
'image_library' => 'ImageMagick',
'library_path' => '/usr/bin',
'source_image' => $destination_image,
'quality' => 100,
'maintain_ratio' => TRUE,
'width' => 180,
'height' => 180
);
$this->image_lib->initialize($config);
if ($this->image_lib->resize())
{
// update last_avatar_time
$this->load->model(array('users_model', 'userlog_model'));
$time = time();
if ($this->users_model->update($user['account'], array('last_avatar_time' => $time)))
{
// update session
$update_session_data = array('avatar_url' => get_avatar_path($user['id'], FALSE) .'?'. $time);
$this->login->update_session($update_session_data);
$this->userlog_model->insert($user['id'], $user['name'], UserLog_model::USER_AVATAR_UPDATE);
}
$this->_outputJSON(array('status' => 'ok'));
}
}
parseImg
$url = $this->input->get_post('url');
if ( ! $html_content = @file_get_contents($url))
{
return $this->_outputJSON(array('status' => 'fail', 'error' => 'Wrong url'));
}
$patten = "/<img.*src=\"(((http[s]?):\/\/|www\.)([^\s\[\\\"'])+)\".*>/";
if (preg_match_all($patten, $html_content, $matches, PREG_SET_ORDER))
{
foreach ($matches as $key => $match)
{
if (list($width, $height) = @getimagesize($match[1]))
{
if ($width >= 100 OR $height >= 100)
{
return $this->_outputJSON(array('status' => 'ok', 'url' => $match[1]));
}
}
else
{
unset($matches[$key]);
}
}
if ( ! empty($matches))
{
reset($matches);
return $this->_outputJSON(array('status' => 'ok', 'url' => current($matches)[1]));
}
}
return $this->_outputJSON(array('status' => 'fail', 'error' => 'Image not found'));