星期四, 9月 30, 2010

PHP mysql query

因為現在都用zend本身ActiveRecord的function去做insert
所以都沒有sql query的特殊字元問題

但有時,純用php做sql query
一直在想有什麼比較好的寫法 去過濾sql query的特殊字元問題
不是用addslashes(),就是用mysql_real_escape_string()完成
不過程式碼就變超長的
如果參數多 就不容易看出來在寫啥
$query = "SELECT * FROM users WHERE
   user = '" . mysql_real_escape_string($user) ."'
   AND '" . mysql_real_escape_string($password) ."'";


看完php api用sprintf的寫法 覺得早該這樣寫了...
雖然還是很長..... 不過感覺比較有結構了
以前寫C#就有了,不過換個語言也換個腦袋了... 居然都沒想到...
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'"
  ,mysql_real_escape_string($user)
  ,mysql_real_escape_string($password));


附上常用的參數
  • % - a literal percent character. No argument is required.
  • d - the argument is treated as an integer, and presented as a (signed) decimal number.
  • f - the argument is treated as a float, and presented as a floating-point number (locale aware).
  • F - the argument is treated as a float, and presented as a floating-point number (non-locale aware). Available since PHP 4.3.10 and PHP 5.0.3.
  • s - the argument is treated as and presented as a string.


Reference
mysql_real_escape_string
sprintf
addslashes() vs mysql_escape_string()

星期三, 9月 29, 2010

MySQL常用指令

  • 將db輸出 (console mode)
    mysqldump  -u root -p [dbname] > [dbname].sql
  • 覆蓋db (console mode)
    mysql -u root -p [dbname]  < [dbname].sql
  • 指定資料 匯入/匯出 (進入MySQL執行)
    //匯出
    select * into outfile '/mdr/data/UNLOAD/檔名.sql' from [TableName]  where ITEM='409667';
    //匯入
    load data infile '/mdr/data/UNLOAD/檔名.sql' into table [TableName]
  • 匯入/匯出 整個Table (console mode)
    //匯出
    mysqldump -r(權限) 檔名.sql -u [帳號] -p --default-character-set=big5 [dbname]  [TableName]
    //匯入
    mysql -u [帳號] -p --default-character-set=big5 [dbname]  < [檔名].sql
  • 輸出為mssql 格式
    mysqldump --compatible=mssql -u root -p phalcon > ~/phalcon_test.sql
p.s. 感謝雅湘學妹提供

PHP file 註解

一直不知道檔案註解 應該要寫些什麼
網路上看到針對PHP做的 就學學吧
從別人網站截錄過來看
  • Title - What is your script or mod called
  • Author - You name, and the name of anyone who helped or who's work you modified
  • Version - What version of the script is this? 1.0? 2.3? etc....
  • Installation Time - An idea of how long it will take the user to be up and running.
  • Included Files / Edited Files - This is a list of files that are part of your script, and in the case of a mod, files that will need to be edited.
  • Licensing - Make sure it's clear how the user may and may not use your script.
  • History - History of the mod including the change log of all previous versions.
  • Other Notes - Any other information you want to include about your script, including your support website (if you have one) or other information that may be useful

/*
 *  @Title:
 *  @Author:
 *  @Version:
 */

Reference
PHP Author Notes

星期二, 9月 28, 2010

其他browser不支援firebug console問題

先前用firebug在看log
不過遇到其他browser就會說不支援~
甚至導致程式crash, 雖然開發完就會關掉,但就很煩
於是用jQuery本身的fucntion來檢查是否為firefox
//is browser firefox
jQuery.each(jQuery.browser, function(i, val) {
    isConsoleSupported = (i=="mozilla" ); //jQuery.browser.version.substr(0,3)=="1.9"
});
if(isConsoleSupported)
  console.info(message); 
};

不過遇到firebug沒啟動 也是會掛
有時還會嚇到自己.. 以為程式掛了...
一查原來是firebug沒啟動

上網看了一下 哈 這麼簡單...
//is it support console & is console turn on
isConsoleSupported = (window.console && window.console.firebug);

//2013.4 
後來firebug團隊決定把window.console.firebug拿掉,所以一定是false,為了兼容要改成
(window.console && (window.console.firebug || window.console.exception))

完整用法
//取得console
var console = getConsole();
console.log("console works");

function getConsole(){
    if(window.console && (window.console.firebug || window.console.exception))) 
        return window.console;

     //自行產生個console,雖然不能log,但至少引用的程式不用再判斷
     console = {
          write: function() { },
          debug: function() { },
          log: function() { },
          info : function() { },
          warn : function() { },
          error : function() { }
     };

     return console; 
}

References

管理課程3 - 目標管理

目標管理一方面重要的是目標本身,因為目標指明了方向。第二是計劃,計劃實際上是我們的路徑,是以什麼樣的方式去實現目標。第三個方面是實現目標需要以人為本。簡單的說方向、路徑和人是目標管理的三個重要環節。
目標管理構成的四個方面:
  1. 目標訂立
    目標可量化(天數、金額、數量)
    不能量化,不算是目標,因為沒辦法訂定評量
    訂定目標(依需求或Capacity制定)
    • 個人目標
    • 部門目標
  2. 輔導實施
    示範、指導、檢查
    檢查最為重要,因為1.可得知是否符合規範,2.得到第一線feedback,進而改善制度,增加Capacity
  3. 評估結果
    重點:溝通
    瞭解實際情況,找出問題所在及可改善的方法
  4. 修正
關於這四個方面我們中間所需要做的事情是大量的溝通,關於目標的溝通,關於我們用什麼樣的方法去達成目標的溝通。
目標管理的基本程式
  目標管理的具體做法分三個階段:
第一階段為目標的設置;
第二階段為實現目標過程的管理;
第三階段為測定與評價所取得的成果。
  
  1. 目標的設置
      這是目標管理最重要的階段,第一階段可以細分為四個步驟:
      ①高層管理預定目標,這是一個暫時的、可以改變的目標預案。即可以上級提出,再同下級討論;也可以由下級提出,上級批准。無論哪種方式,必須共同商量決定;其次,領導必鬚根據企業的使命和長遠戰略,估計客觀環境帶來的機會和挑戰,對本企業的優劣有清醒的認識。對組織應該和能夠完成的目標心中有數。
      ②重新審議組織結構和職責分工。目標管理要求每一個分目標都有確定的責任主體。因此預定目標之後,需要重新審查現有組織結構,根據新的目標分解要求進行調整,明確目標責任者和協調關係。
      ③確立下級的目標。首先下級明確組織的規劃和目標,然後商定下級的分目標。在討論中上級要尊重下級,平等待人,耐心傾聽下級意見,幫助下級發展一致性和支持性目標。分目標要具體量化,便於考核;分清輕重緩急,以免顧此失彼;既要有挑戰性,又要有實現可能。每個員工和部門的分目標要和其他的分目標協調一致,支持本單位和組織目標的實現。
      ④上級和下級就實現各項目標所需的條件以及實現目標後的獎懲事宜達成協議。分目標制定後,要授予下級相應的資源配置的權力,實現權責利的統一。由下級寫成書面協議,編製目標記錄卡片,整個組織彙總所有資料後,繪製出目標圖。
  2.   
  3. 實現目標過程的管理
      目標管理重視結果,強調自主,自治和自覺。並不等於領導可以放手不管,相反由於形成了目標體系,一環失誤,就會牽動全局。因此領導在目標實施過程中的管理是不可缺少的。首先進行定期檢查,利用雙方經常接觸的機會和信息反饋渠道自然地進行;其次要向下級通報進度,便於互相協調;再次要幫助下級解決工作中出現的困難問題,當出現意外、不可測事件嚴重影響組織目標實現時,也可以通過一定的手續,修改原定的目標。
  4.   
  5. 總結和評估
      達到預定的期限後,下級首先進行自我評估,提交書面報告;然後上下級一起考核目標完成情況,決定獎懲;同時討論下一階段目標,開始新迴圈。如果目標沒有完成,應分析原因總結教訓,切忌相互指責,以保持相互信任的氣氛。
目標管理的四個步驟
  由於各個組織活動的性質不同,目標管理的步驟可以不完全一樣,但一般來說,可以分為以下四步。
  
  1. 建立一套完整的目標體系
    實行目標管理,首先要建立一套完整的目標體系。這項工作總是從企業的最高主管部門開始的,然後由上而下地逐級確定目標。上下級的目標之間通常是一種 “目的一手段”的關係;某一級的目標,需要用一定的手段來實現,這些手段就成為下一級的次目標,按級順推下去,直到作業層的作業目標,從而構成一種鎖鏈式的目標體系。
      制定目標的工作如同所有其他計劃工作一樣,非常需要事先擬定和宣傳前提條件。這是一些指導方針,如果指導方針不明確,就不可能希望下級主管人員會制定出合理的目標來。此外,制定目標應當採取協商的方式,應當鼓勵下級主管人員根據基本方針擬定自己的目標,然後由上級批准。
      目標體系應與組織結構相吻合,從而使每個部門都有明確的目標,每個目標都有人明確負責。然而,組織結構往往不是按組織在一定時期的目標而建立的,因此,在按邏輯展開目標和按組織結構展開目標之間,時常會存在差異。其表現是,有時從邏輯上看,一個重要的分目標卻找不到對此負全面責任的管理部門,而組織中的有些部門卻很難為其確定重要的目標。這種情況的反覆出現,可能最終導致對組織結構的調整。從這個意義上說,目標管理還有助於搞清組織機構的作用。
  2.   
  3. 組織實施
    目標既定,主管人員就應放手把權力交給下級成員,而自己去抓重點的綜合性管理。完成目標主要靠執行者的自我控制。如果在明確了目標之後,作為上級主管人員還像從前那樣事必躬親,便違背了目標管理的主旨,不能獲得目標管理的效果。當然,這並不是說,上級在確定目標後就可以撒手不管了。上級的管理應主要表現在指導、協助。提出問題,提供情報以及創造良好的工作環境方面。
  4.   
  5. 檢查和評價
    對各級目標的完成情況,要事先規定出期限,定期進行檢查。檢查的方法可靈活地採用自檢、互檢和責成專門的部門進行檢查。檢查的依據就是事先確定的目標。對於最終結果,應當根據目標進行評價,並根據評價結果進行獎罰。經過評價,使得目標管理進入下一輪迴圈過程。

星期三, 9月 22, 2010

JSON toString

不知道json結構是件挺麻煩的事
怎麼看json結構咧 很簡單就
var iamjson = {id:1};
JSON.stringify(iamjson );


不過日子一久
就忘了這個function...
又花一些時間上網找
還有看到有人寫iamjson .toJSONString();
不過出現script error 指出沒這function
就很氣當時沒記下來 測試完就把段code給刪了
這次要寫好筆記... 不然又要花時間找了
都寫了 就順便寫JSON其他的function

取代eval
var myObject = JSON.parse(myJSONtext, reviver);

Reference
JSON in JavaScript

星期二, 9月 21, 2010

clone json object

利用jquery可以很輕易的複製dom裡的object
$("input").clone();

但想複製json就沒辦法了
截錄了網友的做法
JSON.clone = function (obj) {
return JSON.parse( JSON.stringify( obj ) );
};

var obj = { "date": "2009-03-05", "amount": "0.1" };
var clonedObj = JSON.clone(obj);


A more elegant browser independent solution comes from Marijn Haverbeke (Elegant JavaScript):
function clone(o) {
function OneShotConstructor(){}
OneShotConstructor.prototype = o;
return new OneShotConstructor();
}


最後查一下jQuery本身的方法
利用extend的方法來當成一個新的
雖然感覺...怪怪的...
不過也算是簡單的達到目的了
var shot = {id:1,x=2,y=3};

//Method 2 jQuery.extend( [ deep ], target, object1, [ objectN ] ) v1.1.4
var newShot = jQuery.extend(true, {}, shot); //沒有target,而是直接return


Reference

星期一, 9月 20, 2010

JQuery UI - event 回傳參數 ui 結構

記得前陣子不知聽誰說的
說亞洲人都不看說明書
拿到東西就亂試
外國人就會好好的研究使用說明書
再來看怎麼用

最近用jquery ui也是
都已經用2年了 頂多看範例
也不會去看Overview什麼的
反正google很方便

在用jquery ui時 每當有event(ex. draggable的start, drag, stop)
都會回傳function(event,ui)參數(官網固定的回傳值)
反正也沒有要用到,找到符合的event就用了 也沒去看callback參數
即使是想知道目前dragging的item是哪個 也是靠其他方法解決 (其實是不知道ui結構)
當然回傳的ui一定是必要的資訊,但看不出來回傳的ui結構是啥 也沒辦法用
看著官網說明文字範例 每個event都是回傳function(event,ui)
但就是沒說明ui是啥米... 真是氣死

這次用sortable又遇到這問題
想要找到目前被搬動的item,但ui結構不知道
下定決心要用callback的parameters找出目前的item (其實是用其他方法解決不了,逼不得已)
勉強把ui的架構印出來,第一層還好,只有5,6個
看到sender就很開心,但沒想到是null...
只好印其他為object型態的value
一印真是不得了,又臭又長... 都不想看了...

最後還是google找到一篇說明sotrable的ui回傳結構
一看才發現,我咧~~
原來官網上面每個ui的overview就寫的清清楚楚該ui回傳結構 …羞
看到ui.item的說明,就可以知道想要的東西就是這個啦
$(ui.item).attr("id"); //取得id, 其他的就以此類推
以後要先讀好說明手冊 (我自己都不相信我會讀...)

p.s.至於sender為何是null,圖有文字被截掉了,總之官網上寫only exists if you move from one connected list to another,所以囉...

Reference
JQuery UI - sortable

mysql 權限管理

管理可連線的Host及其帳戶
透過PhpMyAdmin來做 卻一直失敗
本以為是PhpMyAdmin flush privileges有問題
但試完後,還是失敗
後來改用console模式進去做 就成功了...

範例從references2抄來的
允許 someone 從任何主機連入
mysql> grant usage on *.* to someone@'%' identified by 'passwd';
mysql> flush privileges;
mysql> exit

p.s. 記得開放相關table讀取權限,不然又讀不到

References
  1. Specifying Account Names 
  2. mysql 權限管理備忘

星期二, 9月 14, 2010

Zend - Internationalization

  • Zend_Locale
    多國語系需用
    1.Localization(i10n) 及
    2.Internationalization(i18n)達成
    i18n是Internationalization,l10n是Localization。
    一個是國際化,一個是本土化,差異應該聽的出來了,其他的就google吧
    因為國際化的單字太長了,所以把中間18個字以18作替代,而本土化中間的10個字以10作替代。
  • Zend_Translate
    Zend_Translate is Zend Framework's solution for multilingual applications.

    In multilingual applications, the content must be translated into several languages and display content depending on the user's language. PHP offers already several ways to handle such problems, however the PHP solution has some problems
  • Zend_Date
  • Zend_Currency
  • Zend_View_Helper_Trans

星期日, 9月 12, 2010

Zend - Infrastructure

  • Zend_Config
    • Use/Purpose

      designed to simplify access to, and use of , configuration data within applications.
    • Multiple Environs

      • PHP Array
        <?php

        //Given an array of configuration data
        $configArray = array(
        'webhost' => 'ww.example.com',
        'database' => array(...
        )
        );

        //Create the object-oriendted wrapper upon the configuration dataconsumption
        require_once 'Zend/Config.php';
        $config = new Zend_Config(configArray );
        //Print a configuration datum (results in 'ww.example.com')

        echo $config->webhost;
      • PHP Configuration File
        <?php
        //config.php
        return array(
        'webhost' => 'ww.example.com',
        'database' => array(...


        <?php
        //Configuration consumption
        require_once 'Zend/Config.php';
        $config = new Zend_Config(require 'config.php');

        //Print a configuration datum (results in 'ww.example.com')
        echo $config->webhost;

        Zend_Config實作了Countable及Iterator interfaces,因此可用count()及foreach
        Two Zend_Config objects can be merged into a single object using the merge() function
    • .ini Files

      • .ini可宣告[production],[testing],[development]等,配合環境變數讀取不同的config

        $config = new Zend_Config_Ini('/path/to/config.ini'),'staging');
        echo $config->database->params->hosts;
        [staging:production] //staging繼承production的變數
        不要把變數內容值用單引號包起來,會把單引號當成值
      • Zend_Config_Xml

        $config = new Zend_Config_Xml('/path/to/config.xml'),'staging');
        echo $config->database->params->hosts;

    • Bootstrap File
    • Config Objects
  • Zend_Exception
    Purpose: recover from the failure
    <?php
    try{
    Zend_Loader::loadClass('nonexistantclass');
    }catch (Zend_Exception $e){
    echo "Caught exception: " . get_class($e) . "\n";
    echo "Message: " . $e->getMessage() . "\n";
    //other code to recover from the failure;
    }

  • Zend_Registry
    Purpose: a container for storing objects and values in the application space.
    Constructing a Registry
    <?php
    $registry = new Zend_Registry(array('index' => $value));


    Initializing the Static Registry
    <?php
    Zend_Registry::setInstance(array('index' => $value));


    The setInstance() method throws Zend_Exception if the static registry has already been initialized
  • Zend_Version
    <?php
    //return -1(older), 0(the same) or 1(newer)
    $cmp = Zend_Version::compareVBersion('1.0.0');
  • Zend_Loader
    Purpose: includes methods to help you load files dynamically
    Zend_Loader::loadFile($filename,$path,$once) is a wrapper for the PHP function include() and throws Zend_Exception on failure.
    limit: $filename argument can only contain alphanumeric characters, hyphens("-"), or periods("."), and must not contain any path information.
    $once is boolean, if TRUE, equals include_once(), otherwise include() is used.

    Loading Classes
    limit:同loadFile,多了underscores("_")
    Zend_Loader::loadClass($class, $dirs)
    $class = "Container_Tree"; //equals Container/Tree.php
    <?php
    Zend_Loader::loadClass('Container_Tree',
     array(
      '/home/productioin/mylib',
      '/home/productioin/myapp'
     )
    );

    會在給予的路徑參數中找claess,如果找不到就丟了Zend_Exception
    Plugin Loader
    <?php
    $loader = new Zend_Loader_PluginLoader();
    $loader->addPrefixPath('Zend_View_Helper', 'Zend/View/elper/')
        ->addPrefixPath('Foo_View_Helper','application/modules/foo/views/helpers');
  • Zend_Session
    Purpose: helps manage and preserve session data, a logical complement of cookie data, across multiple page requests by the same client.

    Zend_Session_Namespace

    就是PHP中的$_SESSION
    $sess = new Zend_Session_Namespace();
    $sees->tree = $tree;

    Operation

    當第一個session被requested時,Zend_Session就自動啟動PHP session,不必等到Zend_Session::start().
    The PHP session will use defaults from Zend_Session, unless modified by Zend_Session::setOptions().

星期三, 9月 08, 2010

html無敵畫圖、畫線

用網頁畫圖的效果總是差強人意
因為都是div去組 太多效率變很差
少的話 鋸齒又很嚴重
總是沒有漂亮的線條
畫出來的線很醜,總是被美工嫌 (johhny... 再記你一筆)

後來看google map畫的導航路線真是漂亮
看起來也不像是圖 但也不是用div畫的
利用firebug看了是用svg的tag組成
還以為是google自己開發的component
想想也不太可能 因為也要browser支援
好奇查了一下 原來早就有SVG這東西了
不過是2008年才成為W3C的標準
wiki上解釋為
「SVG嚴格遵從XML語法,並用文字格式的描述性語言來描述影像內容,因此是一種和影像解析度無關的矢量圖形格式」

開心的試了一下 哦耶~~ 這東西真是帥呆了

//SVG畫直線
"M30,0L100,110"


看圖就可以知道差異很大了
再看這張誘人的M字腿... ㄟ 我是說麥當當的曲線圖
看到那曲線好細膩.. 我好感動
就像從vcd進步到dvd畫質一樣...

更強的是還可以做到動畫效果
這不就是一直輸flash的地方嗎
看到動畫的效果都快哭了...
好像從dvd進步到blue-ray... (好像沒相關...硬要接一下梗)
從此做動畫不再是flash的天下了... ya~~~ flash書拿去丟一丟 (好啦 還是有差啦...)
路人:那silverlight?
謎之音:silverlight?那是什麼東西? 好吃嗎?

不過就是svg的語法難懂了點
畢竟要把程式及圖型表示全用文字來形容...
工欲其善,先利其器...
就用SVG編輯器來做吧...

Library
Raphael
在ie8時,出現raphel vml  null或 什麼物件不存在,看一下是不是用了顏色名稱
ex: stroke:red, 即會發生
改用stroke:#ff0000取代
References
wiki SVG