2016年7月25日 星期一

[jquery]產生新標籤

在撰寫網頁系統時,有時會需要彈性增加一些東西給使用者使用。
一般常見的就是多檔上傳,有種作法是一次可以上傳的檔案數一起產生出來,之後再使用者使用。
但這種方式就是會有一堆上傳欄位。
當然也是有人會用JS去產生這些標籤,讓他動態產生即可。
一般JS會用的函數是innerhtml這個標籤使用。
現在的jquery的方式則是使用append這個函數標籤。
使用方式如下

<div id="more_update"></div>
<script>
$("#more_update).append("<div>我是動態產生的</div>");
</script>

2016年7月19日 星期二

[SQL]複製資料表

最近剛好在做一些新功能時發現需要開新的資料表來用。
再加上想直接引用就程式來使用就好就突發奇想的要來個無痛複製。(似乎不是甚麼可取的方案,特別注意此方法常常犯的錯就是不懂得程式碼直接使用造成錯誤無法排除。)

小弟偏偏就是那個懶人,只是還是有一點點道德,先分析程式碼都看懂了再來複製。
以下就是直接複製資料表的SQL語法。
在這邊留作紀錄方便大家需要時可以領用。

這邊是將舊的資料表欄位及資料一同複製備份出來。
select * into new_table from old_table where 1=1

這邊是將舊的資料表複製出來而不複製其資料行
select * into new_table from old_table where 1=2

2016年6月1日 星期三

[php]檢查Funcation是否已存在 function_exists

設計function時,有時會可能因為是維護別人的系統因此不知道名稱是否已經有被使用過了或是在已經使用了自己卻不知道。
造成出現錯誤,當然找出原本的function是一個比較根源的修正。
此外為了避免這種錯誤發生,畢竟有時是在不同程式宣告使用的。
所以在賺寫function前可以先加上一個判斷

function_exists

這個方法可以幫我們判斷function是否已存在。
我個人的基礎使用反例如下

if(!function_exists('myfunction')){
    function myfunction(){
         alert('自訂方法');
    }
}


如此依來可以先判斷是否存在再去寫新的方法。
如有相同名稱,就不會產生我們新寫的function了。

2016年5月18日 星期三

[SQL]指定排序

一般使用SQL在進行查詢時的固定用法
select * from table
但有常常會需要排序,一班的用的就是利用某個欄位進行排序
select * from table order by name asc
排序故名思義就是要做一下資料整理,因此固定用法中又有順排逆排
分別是"asc" 、 "desc" 這兩種排序方法。
當然偶爾會遇到一些排序需求是無法直接靠這樣固定排函數排法來實現。
因此若確定查詢出來的結果是固定的,其實我們可以在排序的地方改寫一下,就能讓她固定的排序方式了。
select * from table
order  by (case name
when "dion"  then "01"
when "Allen" then "02"
when "Zero" then "03"
End)

利用這樣的寫法下來,其實就可以達到強迫順序指定的效果了。

2016年5月11日 星期三

[Jquery]逐題顯示的測驗系統寫作技巧

雲端測驗是系統的製作時,常常會需要逐題顯示。
較舊的方式利用參數重新查詢題目來顯示。
這種方式已較為單純的方式,純粹靠著後端程式語言即可完成。
當然相對地每次換題都有重新存取資料庫的效能問題。
在雲端測驗系統實在不太適合。
畢竟"測驗",當然是分秒必爭的情境。

因此我在這部分突發奇想(這種方式相信已經很多高手想到並大量使用),
第一次的存取資料庫取的題目時就先將所有的題目一次取出,並排列好的顯示於頁面上。

此時每一筆都放在某個標籤底下如。
<table>
    <tr>
           <td>第一題</td>
    </tr>
    <tr>
           <td>第二題</td>
    </tr>
    <tr>
           <td>第三題</td>
    </tr>
</table>
這樣排列下來,當然為了讓他可以被我們控制自然需要一些命名。
<table>
    <tr class="ltem">
           <td>第一題</td>
    </tr>
    <tr class="ltem">
           <td>第二題</td>
    </tr>
    <tr class="ltem">
           <td>第三題</td>
    </tr>
</table>
像這樣加入了Class標籤後我們利用Class來控制全部,
但這樣還是無法達到竹題顯示的要求。畢竟大家都是一樣的,因此我又加入了ID的標籤
<table>
    <tr class="ltem" id="ltem_1">
           <td>第一題</td>
    </tr>
    <tr class="ltem" id="ltem_2">
           <td>第二題</td>
    </tr>
    <tr class="ltem" id="ltem_3">
           <td>第三題</td>
    </tr>
</table>
如此一來每題的標籤就都不一樣了
此時可以引入jquery或直接使用javasscript。
我就用jquery來調整。
<script>
$(document).ready(function(){
    $(".ltem").toggle();          //將class="ltem" 的標籤轉為隱藏
    $("#ltem_1").toggle();    //將id="ltem_1" 的標籤轉為顯示
});
</script>

至於換題的按鈕就下次再作解釋了。
這算是我在玩toggle時發現的一個小技巧,相信已有人大量使用了。
感謝指教。

2016年4月19日 星期二

[生命分享]觀念的窘竟

開發是一份充滿未知與探索的工作。
雖說現在是一個資訊爆炸的時代。
程式開發的工作雖然都可以在網路上找到相關程式碼或套件等等。
我們擔任開發的技術人員常常可以使用這些套件工具進行開發新功能。
而在此時卻會造成一個嚴重的問題。
就是只要系統會動而不在乎他的真正用意。

或許開發人員會認為我開發完成的程式是可以正常運作的,原則上不會有任何的問題。
但卻忽略了系統使用者的觀感與習慣。

這段時間不斷的在看UI相關的技術時,發現了UX的觀念才是真正可以解決這個問題的關鍵。

有好的UI就相當於始有一件光鮮亮麗的衣服,但有好的UX引入後,反正就成為一個不只看起來光鮮亮麗,更加是一個有能力有內涵的傑出人才。

其中感覺很奇妙吧!

其實就是工程單位最常出現的問題,就是沒有與使用者進行良好的溝通。
當然其中一的原因是,尚未成形的東西,在溝通上往往都是紙上談兵、天馬星空。
這部份想當然而的會成為工程的一個窘境。


2016年1月28日 星期四

[PHP] 程式暫停

很多人在做上傳檔案時會避免檔案彼此覆蓋,而將上傳的檔案進行更名的動作。
最常見的就是利用當時的系統時間進行檔案名稱更新。
當然一次一個檔案這樣做當然是沒有問題的。
但是若系統大量複製的話,有一定機率會在同一秒完成多份檔案的複製(設備總是要越來越快)。
個人在此時會利用到sleep這個指令。
他可以讓系統強制等待。
sleep(1); //強制等待一秒。
等待一秒後可能有機會再次降低檔案覆蓋問題。
等待勇者測試。

[SQL] 資料表大量更新作法



在資料搬移或是大量更新時,
偶爾會出現直接資料表內容搬移的動作,
一般單純的作法可能會用程式語言配合資料庫將資料讀取出來再做寫入的動作。
單然也可以直接透過資料庫語法完成。
使用範例如下:

update table1 set table1.col1=talbe2.col1,table1.col2=table2.col2...
from tabl2
where table1.keyid=table2.keyid

資料表不一定是某一張資料表,也可以是一個查詢多表查詢的結果。
只是在更新欄位上需要特別注意即可。

[資安]社交工程

 社交工程 在資訊安全領域中所提出的"社交工程"議題,其實也可以說"溝通"一詞的另一個說詞。 人在討論交換訊息時的行為,正是所謂的社交工程的過程一模一樣,主要差異在於行為與意圖。 有心人士預計要蒐集他人的各種資訊使用的對話溝通方式,其中我們...