顯示具有 PHP語法 標籤的文章。 顯示所有文章
顯示具有 PHP語法 標籤的文章。 顯示所有文章

2014年4月4日

tcpdf 教學

http://www.tad0616.net/modules/tad_book3/index.php?op=list_docs&tbsn=26

2013年1月28日

PHP fgetcsv函式與中文的問題

使用fgetcsv取得csv檔資料時,中文首字元會有被截掉的問題,上PHP官網翻了一下,原來加上setlocale即可解決。

原本用PHP4沒出現這問題,大概是PHP5才會這樣吧...

// utf-8
setlocale(LC_ALL, 'en_US.UTF-8');
// big5
setlocale(LC_ALL, 'zh_TW.BIG5');

不然就是匯出csv時選項中要選括住所有中文

2012年11月12日

顯示當週日期

echo date("Y-m-d",mktime(0, 0, 0,date("m"),date("d")-date("w")+1));
echo "~";
echo date("Y-m-d",mktime(0, 0, 0,date("m"),date("d")-date("w")+7))."
";
echo "d(  日?)=".date("d")."
";
echo "w(星期?)=".date("w")."
"

取得日期中每週的日期

簡單的函數, 用來指定一個日期, 直到停止日期的所有每週的日期
http://calos-tw.blogspot.tw/2010/11/php-getweek.html

2012年5月27日

檢測email格式

用這個方式比正規表示式好懂多了
$email = "abc@gmail.com";
if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {
 echo "這是正確的 E-mail";
else
 echo "這是不正確的 E-mail";
}
參考來源: http://ianjung1974.blogspot.com/2009/02/php-filter-functions.html#links

2011年4月12日

匯出儲存為CSV檔

$main="\"name\",\"agclass\",\"sdate\",\"edate\",\"agcate\",\"agday\",\"agrem\"\n";//欄位名
$query="SELECT agent_tbl.*,tbase_tbl.name FROM agent_tbl,tbase_tbl WHERE agent_tbl.pid=tbase_tbl.pid ORDER BY agent_tbl.sdate ASC";
$sql=pg_query($query) or die($query);
while($rows=pg_fetch_array($sql)){
 $main.="\"{$rows[name]}\",\"{$rows[agclass]}\",\"{$rows[sdate]}\",\"{$rows[edate]}\",\"{$rows[agcate]}\",\"{$rows[agday]}\",\"{$rows[agrem]}\"\n";
}

$filename=date("YmdHis");
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename={$filename}.csv");

echo $main;

2011年4月10日

PostgreSQL--UPDATE

這樣可以將tagday欄位中的值更新為:原有的tagday值加上變數$liqday值
$query="UPDATE tbase_tbl SET tagday=tagday+'$liqday' WHERE jobid='6'";
$sql =pg_query($query) or die($query);

2011年3月30日

利用PHP產生writer odt檔

之前使用過學務系統中的函數產生odt文書報表,但之前的報表中都只有文字內容一直以來都可以順利產生所要的報表。從來也沒想過要在報表上加上相片…總算被我碰到了,要怎樣在odt檔中加入相片?

試了好幾天沒有進度,好吧聯絡請教了hami老師。hami 老師二話不說馬上幫忙解惑幫我改寫了相關程式碼,不但讓我可以解決我的需求也讓我多學了幾招。這兩天自已好好研究了hami老師修改的程式碼我發現又有新的解法,我的解決方法可以跳脫樣板的限制,改用外部相片插入報表。

我現在的做法是這樣的:
  1. 使用libreoffice設計好使用的樣板,在文件中安排的相片上快點兩下,在類型 / 圖定標記 項目中將其設定為當做字元。
  2. 將設計好的odt檔解壓縮,修改解壓縮後META-INF資料匣中的manifest.xml檔,將其中記錄圖檔路徑的那一行(manifest:file-entry manifest:media-type="image/jpeg" manifest:full-path="Pictures/10000000000000660000006A129905F2.jpg"/)刪掉,這一行是用來記錄圖檔儲存位置。
  3. 將解壓後的Pictures資料匣中的圖檔刪除,因為之後我們要用的是外部資料匣中的圖片所以留著也沒用。
  4. 修改content.xml,搜尋Pictures字串將Pictures/1…006A129905F2.jpg取代為變數 {photo}
  5. 有關圖檔的部份就準備就緒了,剩下來的就是組合我們要的{photo}變數,弄個圖片的url給{photo}變數,這樣在產生odt檔時就會把圖檔帶進去了。
  6. 這樣做有個風險就是下載下來的odt檔的圖片會採用連結的方式連到遠方的網站,如果網路有問題圖片也就跟著出不來。我變通的做法是,如果要永久保存這個檔案的話就把他另存為pdf一勞永逸。

2011年3月29日

PHP函數 str_replace

string str_replace (string needle, string str, string haystack)
回傳字串
將字串haystack中的needle字串取代為str字串

$bodytag = str_replace ("body", "black", "body text=body");
echo '$bodytag='.$bodytag;
輸出結果:$bodytag=black text=black

2011年3月9日

Postgresql中的sum函數

在sql中看似簡單的sum函數到了Postgresql卻發生了一些狀況,而且到現在我還沒發現到底那邊出了問題,怎麼看都覺得原來不能執行的句子跟現行可運作的句子都是一樣的,後來我是這樣決解的
$query="SELECT sum(agday) AS day FROM agent_tbl GROUP BY pid HAVING pid='$_GET[pid]'";
$sql =pg_query($query) or die($query);
$row =pg_fetch_array($sql);
echo $row[agday];
後來我發現了在AS day的地方改為AS DAY大寫就會出錯算不出來,這大概是我自已觀念不清楚造成的

2011年3月7日

在phppgadmin中匯入CSV資料

在phppgadmin可以很方便使用匯入的功能將CSV格式的資料匯進資料表,但我發現他不會同步更新主鍵的序列數,當我新增資料表並匯入800筆資料後,主鍵的序列數還是停在1的位置,並沒有跟著新增到800,這樣會造成後續資料表讀寫錯誤。
目前我不知道怎麼同步解決這個問題,只能在匯入資料後到序列數選項選取對應主鍵設定其序列數值,這樣資料表就可以正確運作。

2011年2月25日

Postgresql的時間處理 2

使用DATE函數來進行時間欄位的加減,可找出今天是否在某個時間日期中
$query="SELECT * FROM date_tbl WHERE DATE(edate)-DATE(now()) >=0 AND DATE(now())-DATE(sdate) >=0 ORDER BY daid DESC";
$sql=pg_query($query) or die($query);
 while($rows=pg_fetch_array($sql)){
 echo $rows[daid]." | ".$rows[sdate]." - ".$rows[edate]." ".$rem1."
";}

Postgresql的時間處理 1

找出資料庫中的時間做加減,可以這樣做
$query  ="SELECT DATE (sdate + 7) date1 FROM date_tbl WHERE daid='1'";
$sql =pg_query($query) or die($query);
$row =pg_fetch_array($sql);
echo $row[date1];
結果:原先sdate欄中的時間是2011-02-23,會變為2011-03-02。
更多的說明在http://www.postgresql.org/docs/8.4/static/functions-datetime.html

2011年2月18日

代理導師輪值程式

根據校務會議的討論,代理導師的基數計算方式已有修改,目前要將前兩年的代理任務做一個結算,2011/02/15已經將目前資料庫中所有代理事件整理匯出交給郭老師核算。目前我要做的事是寫一個介面給郭老師讓他可以根據核算結果來更新每一位老師的代理基數 ,已有的想法是
  1. 先列出一張大表,裏面有全部曾擔任代理任務的人,每一個人可以連結到結算單。
  2. 在結算單中可看出每人的代理任務,並設計結算欄位給予輸入進行結算。
  3. 在結算單中除了提供上述功能以外還要為每位被結算者產生一筆結算紀錄,並更新個人代理總天數。
  4. 資料庫中代理總天數欄位必需更改為小數Decimal(5,2)。
理想中這個想法是可行的,希望確實是如此。

2011年1月15日

算出資料排序

以下可將陣列輸出為班級-名次,結果分別是(前提是要先將陣列的值做降冪排序,很簡單加上 arsort() 函數處理一下就可以有降冪的效果)
901-1,902-2,903-3,904-4,905-4,906-4,907-7,908-8
$all_gsco=array(
  "901" => "90",
  "902" => "80",
  "903" => "70",
  "904" => "65",
  "905" => "65",
  "906" => "65",
  "907" => "50",
  "908" => "40");
foreach($all_gsco as $key => $value){//計算成績排名,並寫入陣列
 if($preval==$value){
  $preval=$value;
  $rank=$rank;
  $trank[$key]=$rank;
  echo "班級=".$key."成績=".$value."排名=".$rank." add=".$add."
";
  $add++;
 }else{
  $preval=$value;
  $rank=$rank+$add+1;
  $trank[$key]=$rank;
  $add=0;
  echo "班級=".$key."成績=".$value."排名=".$rank." add=".$add."
";
 }
}

我搞定了競賽錦標

學校運動會管理程式已經可以處理競賽錦標的問題,工作人員接收決賽成績後只要按名次輸入得分即可,其他分數加總、排序交給電腦去算就好。
比起之前的紙筆作業,起碼不會班級、項目左右上下對的眼花撩亂,但這個競賽綿標以我的實力…他實在不好搞,包含了單項加總,總分加總、排序及表格輸出讓我花了不少時間、腦力但是看到畫面上乖乖的顯示了我要的輸出表格,哇真是高興

2010年12月31日

使用PHP產生libreoffice的文書檔

這個使用PHP產生odt文書檔的方法一開始是在台南縣網的資料中看到的應用,後來經台中縣網螢光老師指導,讓我可以使用UTF8格式。整個動作方法幫我順利的在運動會程式中產生我要的報表。今年正逢 libreoffice 新生,重新使用 libreoffice 製作樣版(其實用現有的OpenOffice.org來做也是一樣啦)。在這裏把主要的動作記錄下來免得以後要用又要東找西找的翻找資料。
使用libreoffice編輯範本樣版。






將樣版檔案解壓縮。
 刪除Configuration2資料匣中的所有資料。
 編輯content.xml中的資料,將其中表格字樣取代為table,將其中符號 " 取代為符號 ' 。
整理即將替換的列,將該列剪下並取為變數{listr},剪下的列保留下來先貼在新的空白檔案,接下來要將剪下的資料整理到php程式碼中。


被替換出來的文字列要轉貼到ooo_paper.php檔中,例如:
整理改造ooo_paper.php檔。




我是用這些sql找出我要的數據,重點在於那句 $array[ ]=array("a","b"…)要怎麼找出其中你要的數據。
 整理產生$array陣列。