2012年12月24日 星期一

[Linux]Ubuntu Desktop(桌機版)安裝教學


想要入門Linux但又猶豫的人可以先看看這篇

如果未安裝VMware Player請點擊,如果不知道VMware Player是幹麻的請先點擊上面的連結

如果是要灌雙系統的話,此教學比較不適合您,網路上有很多寫的很好的教學文可以參考看看

[VMware Player]安裝教學 (使用windows 7)


[linux]Linux入門,介紹ubuntu desktop(桌機版)

我是個Linux的初學者,最近開始想要玩玩Linux,這篇是我查很多資料彙總起來的大意,也是

寫給打算入門Linux的新手來看看,算是個導引~

可以說完全沒什麼深度,但非常地白話淺顯易懂XD

如果有些名詞或觀點解釋錯誤麻煩各位前輩指正:)

2012年12月20日 星期四

[git][merge]實際操作,合併與他人做的專案

我是個初學者,但我一直連最簡單的合併都做不好,一直以來我有個問題是想要將同事寫的與我寫的合併在一起。其實這個問題我在網路上問了兩次,結果兩次都領悟不出來網友說的merge觀念...慚愧..,終於...今天我像是被電到一樣突然想通了,其實道理也是很簡單--branch的parent一定要同一個(分支要由同一條主線分出來就對了!),此方法適合與未使用git的人合併專案。

2012年12月13日 星期四

[php][正則]陣列取代,範例:將關鍵字標示紅色



$p_name='科科P神奇超長外套保暖s襪綠油p油披風r';
echo '查詢字串 : '.$p_name.'</br>';
$search_array=array('長外套','綠','披','p','r');
$patterns = array();
$patterns = '/('.implode('|',$search_array).')/i';
echo '關鍵字 : '.$patterns.'</br>';
$res = preg_replace($patterns,"<span style='color:red;'>\\1</span>",$p_name);
echo '結果 : '.$res;


顯示結果:






----

[mysql][json]mysql 組 json 字串

CONCAT('[[',GROUP_CONCAT(z.type ORDER BY z.type ASC),'],\"',a.p_name,'\"]')  as type_name
↓  長的像這個樣子
[[0,1,3],"綠洲-v320LS"]

2012年12月11日 星期二

[javascript][date]日期

var today = new Date();
today_year = today.getFullYear();  //getYear()的定義原本就是年份減去1900,要改用這個today_month = today.getMonth()+1;  //月是從0開始
today_date = today.getDate();
today_day = today.getDay(); //它是星期
alert(today_year+'年'+today_month+'月'+today_date+'日'+'星期'+today_day);

javascript沒有format寫法(new Date("yyyy-MM-dd  HH:mm"))

4564

2012年12月10日 星期一

[mysql]日期相減、日期之間 、now()

目前時間如果在開始與結束時間之間:
now() BETWEEN start_time AND end_time


註:
除了 now() 函數能獲得當前的日期時間外,MySQL 中還有下面的函數:

 
current_timestamp()
,
current_timestamp
,localtime()
,localtime
,localtimestamp    
-- (v4.0.6)
,localtimestamp()  -- (v4.0.6)

這些日期時間函數,都等同於 now()。鑒於 now() 函數簡短易記,建議總是使用 now() 來替代上面列出的函數。


select sysdate(), sleep(3), sysdate();
可以看到,雖然中途 sleep 3 秒,但 now() 函數兩次的時間值是相同的; sysdate() 函數兩次得到的時間值相差 3 秒。MySQL Manual 中是這樣描述 sysdate() 的:Return the time at which the function executes。

來源:http://fxc86.blog.hexun.com.tw/44003036_d.html




[git][merge]實際操作,合併流程,包含處理conflict

branch介紹:
*master是主支  (預設branch停在這條)
develop是master的分支,所以檔案與master一模一樣
測試檔案:
test.php
test2.php

先分為兩種情況

第一種情況:master都沒修改過
  1. git checkout develop                               切到develop
  2. 修改test、test2及新增test3                   做些修改
  3. git add .                                                   新增進stage
  4. git commit -m "develop commit"               commit
  5. git checkout master                                  切到master
  6. git merge develop                                     合併develop
  7. 這時候master的資料就和develop一模一樣了 ^^
  8. git branch -d develop                               刪除develop
  9. git checkout -b develop                            新增剛合併完的master分支,所以這條develop是最新的資料,並且將線切換過去了,因為(checkout語法)
  10. 接下來可以繼續以develop 開發,重覆著2~9的動作
第二種情況:master被修改過(合併就會出現conflict)
   檔案一樣先回到最上面的假設
  1. 修改test test2 新增了test3 test4            (目前是在master)
  2. git add .                                                  新增進stage      
  3. git commit -m "master commit"                commit      
  4. git checkout develop                               切到develop
  5. 修改了test test2 新增了test3                不增加test4
  6. git add .                                                  新增進stage  
  7. git commit -m "develop commit"              commit      
  8. git checkout master                                  切到master準備合併
  9. git merge develop                                    因為master與develop檔案不同(不同的狀況與情況一不一樣)所以會產生conflict
  10. 因為master有develop沒有的test4,所以test4沒有conflict,但其餘三個有,各別開檔案進去裡面修改
  11. git add .                                                  將修改完的檔案add進stage
  12. git commit -m "merge done"                     commit
  13. git branch -d develop                               刪除develop,目的是建一個最新版的develop
  14. git checkout -b develop                            新增develop並且將線切到develop(其實這一行等於git branch develop + git checkout develop)
  15. 繼續開發你的develop
情況二的9. (conflict)



注意 : 如果只有自己一個人開發的話,建議主線就是master,並且每當合併完後,新增一條develop繼續開發(master那邊不要動),否則master那邊做一點,又跑到develop那做一點,合併時會產生情況2的conflict問題,處理起來也挺麻煩的。每當功能完成後要合併時,合併完後,一樣master不要理它,開一條develop繼續做,一直重覆這個循環開發就對了^^

2012年12月9日 星期日

[php][mysql]取得最後一筆INSERT(新增)的ID

mysql sql語法裡:LAST_INSERT_ID()
PHP:
 $pr_id= mysql_insert_id ();
PDO:
$pr_id= $edm->lastInsertId();

[git][reset] 回覆上一個動作

git reset HEAD^ --soft 取消剛剛的commit但保留修改過的檔案

  1. 修改一份.php檔加上隨意字串,例如:"QQQ"
  2. git commit -a -m "edited"
  3. 我後悔了,我要回復上一動,但又希望剛剛輸入的"QQQ"還在
    git reset HEAD^ --soft
  4. git log 查看commit紀錄,剛剛commit的真的不見了,且"QQQ"也還在

git reset HEAD^ --hard 取消剛剛的 commit,回到再上一次 commit的 乾淨狀態

兩種情形:

  • 接續剛剛上面的情形,假如已經git reset HEAD^ --soft後,但又後悔不想保留"QQQ":
    輸入:git reset
    HEAD --hard  回覆到最近的一次commit,並且已修改的檔案還原到原始狀態,
    注意:如果你想還原全部修改過的檔案才使用此操作
  • 正常情況:
  1. 修改一份.php檔加上隨意字串,例如:"QQQ"
  2. git commit -a -m "edited"
  3. 我後悔了,我要回復上一動,但希望還原到上一個commit的原始狀態,也就是修改過的資料不保留
    輸入:git reset HEAD^ --hard
  4. git log 查看commit紀錄,剛剛commit不但不見了,也還原此commit的原始資料狀態
可以參考另外這篇有指令的集合:http://gogojimmy.net/2012/02/2...


$ git reset HEAD <file>:將剛剛add的檔案還原成untracked(unstage)
  1. 新增ddd.txt   (形態為unstracked)
  2. git add ddd.txt (形態變為 Changed to be commit)(stage)
  3. git reset HEAD ddd.txt (形態變為unstracked)








2012年12月7日 星期五

[git] gitk 指令,顯示樹狀圖形化介面

$ gitk         顯示
$ gitk --all  也是顯示(不知道與沒加--all的差別)
$gitk &    背景執行,但不會reload

2012年11月29日 星期四

[轉][MYSQL]日期/時間函數


這裡是一個使用日期函數的例子。下面的查詢選擇了所有記錄,其date_col的值是在最後30天以內:  
mysql> SELECT something FROM table WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;  

[php][pdo]顯示錯誤訊息 errorCode() 及 errorInfo()

errorCode() 及 errorInfo()

[php][pdo]取得總筆數、FROM DUAL WHERE NOT EXISTS

*取得select跟insert、update、delete的總筆數方法是不一樣的

*rowCount無法返回SELECT的行數。
*rowCount可以返回DELETE, INSERT, 或者UPDATE語句的影響行數
               記住,是影響行數,不是執行成功的SQL語句的行數↑

[php][WWW-Authenticate]輸入帳密作權限驗證


在網頁最上方加入:

header('Content-Type: text/html; charset=utf-8');
$user='test';
$pwd='test';
if($_SERVER['PHP_AUTH_USER']==$user AND $_SERVER['PHP_AUTH_PW']==$pwd){
echo "您剛輸入的帳號:".$user.'</br>';
echo "您剛輸入的密碼:".$pwd;
}else{
Header("WWW-Authenticate: Basic realm='login'");
Header("HTTP/1.0 401 Unauthorized");
die('帳號或密碼錯誤');
exit;
}

[php][防駭]雙引號括起來的變數要特別注意


話不多說,請執行(非病毒):
<?php
$x="{${eval(chr(112).chr(104).chr(112).chr(105).chr(110).chr(102).chr(111).chr(40).chr(41).chr(59))}}";
echo "$x";
?>

[html][table]表格框線不分開(沒空隙)

1.將table的CSS設定
border-collapse:collapse; //表格沒空隙
2.再將td的CSS設定
border:1px solid #666666;

接下來顯示的表格就是你想要的

[html/css]!important與強迫換行

1.假設做一個留言版,但是一連串不中斷的英文容易造成跑版,所以使用CSS強迫斷行
word-wrap:break-word;
word-break:break-all;

[php][pdo]bindParam bindValue 差別

bindParam會將一個PHP變數與SQL綁定,當變數變化時,SQL也會變動

bindValue則不會,只會執行最初綁定的值

[php]curl


[轉][mysql][foreign key外來鍵]mysql InnoDB

*mysql儲存引擎是預設MyISAM,但不支援外來鍵
*而InnoDB支援外來鍵,

[mysql][transaction交易] 簡單介紹

transaction(交易):就是當有兩段要執行的SQL語法,希望要嘛就兩個SQL語句都執行成功,如果其中一行出現錯誤就恢復原始資料,這時候就要使用transaction。

[html][php]顯示/還原資料庫的空白及換行

1.從資料庫撈出來的資料前後分別加上<pre></pre>,但是即使CSS設定換行它也不會換行
(有空測試,textarea wrap=on打開後,有沒有用)

2012年11月4日 星期日

[jquery][鍵盤事件]左右鍵觸發事件

在頁面上按鍵盤上的左、右鍵,就會觸發指定的事件

$('body').keydown(function(event){
 if (event.which == 37) { //左鍵的代碼
  $('#img_last').click();
 }
 if (event.which == 39) { //右鍵的代碼
  $('#img_next').click();
 }
});


[jQuery]選取器

當點擊ID開頭為trigger_S的元素
$('[id^=trigger_S]').click(function(){

ID開頭為QQ_2[]的checkbox陣列中的第3個是否為選取
if($('input[name^="QQ_2[]"][type=checkbox]:eq(2).prop("checked")==true)
註:eq(0)為第一個

2012年10月31日 星期三

[jQuery]神奇的on事件,重新指定事件給元素(ex:按鈕)

我遇到一個問題,當元素被動態新增後,即使名稱例如(class)取得一樣,
但這個class名稱的事件就是不執行!
原因就是因為這個元素是動態新增的,事件沒有被綁定在元素上面
於是我就上PTT問問題,被前輩指點了on這個事件
這個事件真的是簡潔有力,幾乎不會改太多就可以解決了
先來看看on事件解決問題demo
從上面那個網頁看的出來,on事件能增能刪,一般的click事件後來新增的不能刪
所以on事件做的就是重新指派事件給元素

2012年10月30日 星期二

[php][字串]substr、strlen應用

substr(原字串,從第幾個開始取,取到第幾個結束)
strlen() 取得字串長度

4個簡單的例子:
  1. 刪除第一個字元
  2. 刪除最後一個字元
  3. 取得第一個字元
  4. 取得最後一個字元

[php][檔案讀取]讀取資料夾底下的檔案,中文不會亂碼

話不多說,直接看程式碼

$dir ='update_image/';//設定路徑
if(is_dir($dir)){//檢查是否是目錄
 if($dh=opendir($dir)){//打開目錄
  while(($file=readdir($dh))!==false){
   //$file = 檔名+副檔名
   //第一個跟第二個檔名是 .. 及 . 
   if($file!='..' && $file!='.'){
       $file=iconv("BIG5", "UTF-8",$file); //必要,否則中文會亂碼
       echo $file."</br>";
   }
  }
  
 }
}
clearstatcache();//清除檔案狀態快取

2012年10月25日 星期四

[php][javascript]php及js轉換json語法

廢話不囉嗦,先來看看這兩個語言的json語法:
PHP:
json_encode();
json_decode();
javascript:
JSON.stringify();
JSON.parse();

[php][javascript]以ajax傳送json物件,還原陣列(物件)並執行

將javascript陣列轉換成json物件,以ajax傳送到PHP,再由PHP解析javascript陣列並且顯示出來

[php][javascript]AJAX簡易範例(GET、POST傳送)

做一個小範例,就可以發現ajax的威力無窮阿!

首先要做:
以ajax實現頁面不刷新,從前端將值傳送到後端處理,並且回傳給前端顯示
(先做GET傳值、等等再介紹由POST傳值,兩個程式碼幾乎一樣,只改小地方)

[html]網頁原始副本(包含doctype、meta、jQuery)

直接複製就可以開始寫網頁囉!
最主要可以省時間,不用每次要寫新頁又要開始剪剪貼貼的...@_@
包含了 doctype宣告
及以utf-8編碼、jQuery連結引入

2012年10月15日 星期一

[php][exception例外]擲出錯誤訊息 throw new exception

當用於表單驗證可以用最簡單的 if else方法

然而當想要一有錯誤就直接跳開產生錯誤訊息可以使用try catch,並且預先設定好 throw new exception(要擲出的錯誤訊息)

2012年10月8日 星期一

[javascript][正則RegExp]檢查變數是否符合字串,並全部取代(replace)

1.有一個字串str
str="abc?del helloabc?del world!";

2.是否符合str2這個字串(我們可以想像他其實是個變數,組成為字串,只是為了方便)
   如果符合就取代
str2="abc\\?del";

[javascript][正則RegExp]檢查含有脫逸字元的字串是否符合

1.假設有一個變數str
str="abc?del";

2.我要用str去檢查另一個變數str2,它們都長的一樣!照理來說,沒問題才對...
str2="abc?del";
alert(str.match(str2));
但是結果卻為null

2012年10月7日 星期日

[php]serialize將陣列.物件以字串存進資料庫

1.要轉換的陣列(物件的方法也一樣):
$qq=array('0'=>'第一個','1'=>array('0'=>'第二個的第一個','1'=>'第二個的第二個'),'3'=>'第三個','4'=>'第四個');

2.利用PHP本身提供的函數serialize()將陣列/物件轉換為字串
$aa=serialize($qq);

[php]頁面以utf-8編碼

header('Content-Type: text/html; charset=utf-8');