2008年12月31日 星期三

php mail寄信-密件副本

$mail_title = 'TEST'; //mail的主旨
$mail_from = "test@gmail.com"; //mail 的 from
$mail_data = '這是測試'; //mail的內文
Bcc => 指密件副本
$customer_email='customer_mail'; //密件副本的mail
receive => 指收件者

mail('receive',$mail_title,$mail_data,"From:$mail_from\nBcc: $customer_email\nContent-Type: text/html; charset=big5" .phpversion(1.0));

2008年12月24日 星期三

連sybase db用ip和port

PHP
$con = sybase_connect("220.220.0.6:4000","account","pass","big5",'');
if(!$con) {
 echo "無法連結資料庫";
 exit;
}

2008年12月21日 星期日

叫出「安全地移除硬體」

開啟->執行
RunDll32.exe shell32.dll,Control_RunDLL hotplug.dll

2008年12月16日 星期二

checkbox全選和取消

JAVASCRIPT:
$("input").filter("[@id=select_all]").click(function(){
  if (this.checked){
   //checked
   $("input[@name='check_[]']").each(function(){
    var d = $(this).attr("disabled");
    if (d == false){
     this.checked = true;
    }
   });
   }else{
    //unchecked
    $("input[@name='check_[]']").each(function(){
    this.checked = false;
    });
  }
 })

HTML:
<input type="checkbox" id="select_all">
<input type="checkbox" name="check_[]" id="check1">
<input type="checkbox" name="check_[]" id="check2">
<input type="checkbox" name="check_[]" id="check3">

讓欄位disabled

JAVASCRIPT:
//欄位名稱開頭為hdis_的所有hidden去跑迴圈
$(":hidden[@name^='hdis_']").each(function(){
  var v = $(this).val();
  var n = $(this).attr('name'); //找出name
  if (v == "Y"){
   var a = n.split("_"); //分割字串
   var num = a[1];
   var c = ["check_1_","check_2_","check_3_"];
   $.each(c,function(){ //把c陣列的資料帶入
    $("#"+this+num).attr("disabled",true);
   });
  }
 });

HTML:
<input type="hidden" name="hdis_0" value="0">
<input type="hidden" name="hdis_1" value="1">
<input type="hidden" name="hdis_2" value="Y">
<input type="text" value="111" name="check_1_1" size="10">
<input type="text" value="111" name="check_2_1" size="10">
<input type="text" value="111" name="check_3_1" size="10">

分割字串(split)

string.split(分割的字串, 分割後各字串的字元數-可不寫)
var n = 'this_is_test';
var a = n.split("_");
alert(a[1]); ==>is

找出名字開頭為hdis_的每個hidden的name

JAVASCRIPT:
$(":hidden[@name^='hdis_']").each(function(){
 var a = $(this).attr('name');
 alert(a);
})

HTML:
<input type="hidden" name="hdis_0" value="0">
<input type="hidden" name="hdis_1" value="1">
<input type="hidden" name="hdis_2" value="Y">

2008年12月12日 星期五

eclipse外掛Aptana和php

  1. Aptan->My Aptan
  2. 選Plugins
  3. Aptana PHP 按下 Get it

eclipse外掛Aptana

eclipse版本為:eclipse-SDK-3.2.2-win32.zip
  1. 下載完後把整個資料夾移到某個地方。如:D:\eclipse
  2. 把eclipse.exe拉到桌面當捷徑
  3. 開啟eclipse
  4. help->Software Updates->Find and Install..
  5. Search for new features to install
  6. New Remote Site
  7. Name:Aptana
    URL:http://update.aptana.com/install/studio/3.2/
  8. Finish

2008年11月27日 星期四

判斷資料表是否存在

判斷 test123 這個資料表是否存在 test 這個資料庫裡
select count(*) as ctable from test..sysobjects where name = 'test123'

2008年11月24日 星期一

清除db的log檔

//把tablename 換成自已資料表的名稱
dump tran tablename with truncate_only

2008年11月21日 星期五

jquery取得span的值和把值填入span

//取得span的值
$("span").html()

//把值填入span
$("span").html("test")

//計算所有span的金額
JavaScript:
function count_data(){
 var total
 $('.class_s').each(function(index){
  total = total+ parseFloat($(this).html()); //把所有class為class_s的內容相加
 });

 $("#sale").html(total); //把值填入span id = sale
}

HTML:
<span class="class_s" id="c1">100<span>
<span class="class_s" id="c2">200<span>
<span class="class_s" id="c3">300<span>
<span class="class_s" id="c4">400<span>
<span id="sale"><span>

去除字串前後空白

str = jQuery.trim(str);

2008年11月20日 星期四

2008年11月13日 星期四

重設identity

流水號會從1開始,需在table內無資料時使用。
sp_chgattribute '[ TABLE NAME ]', 'identity_burn_max', 0, '0'

example:
EXEC sp_chgattribute testtable, 'identity_burn_max', 0, '0';

2008年11月7日 星期五

jQuery table 排序的套件範例

參考網址:http://tablesorter.com/docs/

Include:
  • jquery-1.2.6.min.js
  • jquery-latest.js
  • jquery.tablesorter.js
  • jquery.metadata.js
  • <link rel="stylesheet" href="blue/style.css" type="text/css" id="" media="print, projection, screen" />

Html:
  • 把 table 的 class 設成 tablesorter
  • {sorter: false}:不能排序
<table class="tablesorter" width="100%" border="0" id="tdata">
 <thead>
  <tr id="line">
   <th class="{sorter: false}">欄位1</th>
   <th>欄位2</th>
   <th>欄位3</th>
   <th>欄位4</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>123</td>
   <td>345</td>
   <td>453</td>
   <td>4532</td>
  </tr>
  <tr>
   <td>1232</td>
   <td>3454</td>
   <td>4533</td>
   <td>45</td>
  </tr>
 </tbody>
</table>

Javascript:
$(document).ready(function(){
  //點欄位排序
   $("table").tablesorter();
});

2008年11月4日 星期二

四捨五入

JavaScript:
MathValue = Math.round(3.14); => 3
MathValue = Math.round(5.15); => 5

//小數點兩位四捨五入:先變整數四捨五入後再除100
MathValue = Math.round(3.1412*100)/100; ==>3.14

取得<span>裡的值

Javascript:
 document.getElementById('L').innerHTML;

Html:
 <span id="L">測試_test

2008年10月31日 星期五

用jQuery寫AJAX例子

javascript:
function insert_data(pno,id){
var answer = confirm(txt);
if (answer){
var b = "#button"+id; //button的id
$.ajax({
beforeSend: function(){ //ajax發送前做
$(b).attr('disabled',true);
},
type:"POST", //ajax用POST的方式
url:"test.php", //url
async: false,
data:"no="+pno, //傳到url的值
success: function(msg){ //ajax成功時做
if (msg == ""){         
msg = "更新資料完成!";
}else{
msg = unescape(msg); //把utf-8轉成big5
}
alert(msg);
},
error: function(){ //ajax失敗時做
alert("修改資料發生錯誤,請再試一次!");
},
complete: function(){ //ajax完成時做
$(b).attr('disabled',false);
}
});
}
}

Html:
<input type="button" name="button1" id="button1>" value="更新" onclick="insert_data('123'1);">

PHP:
$no = $_POST["no"];
echo iconv("big5","utf-8","編號為:".$no); //big5轉utf-8

javascrip中文轉碼可參考:http://werdna1222coldcodes.blogspot.com/2008/12/javascriptescape-encodeuri.html

讓網頁的欄位也能使用上、下、左、右鍵來控制

javascript:
function change_field(evt, id, id_name){
 var d = "#"+id_name+(id+1); //下一個欄位
 var u = "#"+id_name+(id-1); //上一個欄位
 var r = "#txt"+id; //右邊欄位
 var l = "#txt_r"+id; //左邊欄位
 var charCode = (evt.which) ? evt.which : event.keyCode

 if (charCode == 40){ //向下鍵
  $(d).focus();
 }else if (charCode == 38){ //向上鍵
  $(u).focus();
 }else if (charCode == 37){ //向左鍵
  $(l).focus();
 }else if (charCode == 39){ //向右鍵
  $(r).focus();
 }
}

Html:
欄位的排列需有規則,欄位給id,用id來控制
<input type="text" name="txt1" id="txt1" onkeydown="change_field(event, 1,'txt')">
<input type="text" name="txt_r1" id="txt_r1" onkeydown="change_field(event, 2,'txt')">


<input type="text" name="txt2" id="txt2" onkeydown="change_field(event, 3,'txt')">
<input type="text" name="txt_r2" id="txt_r2" onkeydown="change_field(event, 1,'txt')">


<input type="text" name="txt3" id="txt3" onkeydown="change_field(event, 2,'txt')">
<input type="text" name="txt_r3" id="txt_r3" onkeydown="change_field(event, 3,'txt')">

2008年10月30日 星期四

另開視窗為全螢幕

javascript:
function open_w(no){
window.open("test.php?flag=f&no="+no,"Wopen2","fullscreen=yes,location=no,toolbar=no,
memubar=no,status=no,directories=no,resizable=yes,scrollbars=yes");
}

HTML:
<input type="button" name="buttons" id="buttons}>" value="更新" onclick="open_w('123')">

2008年10月22日 星期三

讓某個欄位獲得焦點、反白

(1)javascript
焦點
document.getElementById('field1').focus();

反白
document.getElementById('field1').select();

(2)jQuery
//當class為link_column且此欄位focus時,把此欄位反白
$(document).ready(function(){
 $(".link_column").focus(function() {
  $(this).select();
 });
});

//欄位內容反白
function click_data(txt_id){
 $(txt_id).focus(); //焦點
}

<input class="link_column" type="text" name="txt1" id='txt1' onclick="click_data('txt1');>

防止Sql injection和XSS injection

傳入string,傳回string
function checksql($str) {
 $str = @htmlspecialchars($str);

 //過濾單引號成為全形單引號
 $str = str_replace("'","’",$str);

 //過濾雙引號成為全形雙引號
 $str = str_replace('"',"”",$str);
 
 return $str;
}

字串轉成浮點數或整數

將字串轉成浮點數並傳回值:
 parseFloat(字串)

將字串轉成基底的整數並傳回值:
 parseInt(字串,基底)
 基底是指幾進位:如十進位、十六進位…
 parseInt('010',10)

Mouse Over 的效果

Script:
$(document).ready(function(){
 //當id為tdata,tr的id開頭不等於line,當滑鼠移到時加入class,離開時移除class
 $("#tdata tr:not([id^='line'])").hover(
  function () {$(this).addClass("class_01");},
  function () {$(this).removeClass("class_01");}
 );
});

Html:
<table border="1" id="tdata">
 <tr id="line" class="class_02">
  <td>欄位</td>
 </tr>
 <tr>
  <td>資料</td>
 </tr>
</table>

table 基偶列不同顏色

Script:
$(document).ready(function(){
//當id為tdata,tr的id開頭不等於line的加入class
$("#tdata tr:not([id^='line']):even").addClass('class_03');
$("#tdata tr:not([id^='line']):odd").addClass('class_04');

//或id的開頭為tdata,tr的id開頭不等於line的加入class
$("[id^='tdata'] tr:not([id^='line']):even").addClass('td_blue_03');
$("[id^='tdata'] tr:not([id^='line']):odd").addClass('td_green_04');

//或
$("#tdata tr:even").addClass('table_even');
$("#tdata tr:odd").addClass('table_odd');
});

Html:
<table border="1" id="tdata">
<tr id="line" class="class_02">
<td>欄位</td>
</tr>
<tr>
<td>資料</td>
</tr>
</table>

2008年10月20日 星期一

只能填數字和小數點

javascript:
function check_keyPress(e){
 if ($.browser.msie){ //ie
  keycode = event.keyCode;
 }else{ //其它
  keycode = e.which;
 }
 if ((keycode > 57 || keycode < 48) && (keycode != 46) && (keycode != 13)) {
  return false;
 }
}

html:
<input type="text" name="text1" value="" size="5" onkeypress="return check_keyPress(event)">

判斷按下的是鍵盤的哪個鍵

javascript:
function check_keyPress(e){
(1)
 if ($.browser.msie){ //ie
  keycode = event.keyCode;
 }else{ //其它
  keycode = e.which;
 }
 alert(keycode);
 PS.發現無法判斷上、下、左、右鍵

(2)
 var keycode = (e.which) ? e.which : event.keyCode
}



html:
<input type="text" name="text1" value="" size="5" onkeypress="check_keyPress(event)">

判斷瀏灠器是否為IE

if ($.browser.msie){ //ie
  alert("Yes");
}else{ //其它
  alert("No");
}

欄位只能填數字-for IE

<input type="text" name="numberin" size="5" value="" id="numberin" onKeyPress="with(window.event)return(keyCode>47&&keyCode<58)">

2008年10月2日 星期四

Table 中的 TH

TD、TH是欄的意思,每行中若有一個TD、一個TH則會有兩欄。
因為TD和TH其實是同樣的東西,只是TH會將此格中的文字置中且加粗。

2008年10月1日 星期三

HTML的META

瀏覽器或是搜尋引勤擎經由 HTTP 協定,讀取 HTML 檔案時會先對其中有意義的 META 做判讀並執行。META 用於網頁的<head>與</head>中。
META 的內容有兩種:name和http-equiv。name內容主要用於描述網頁,以便於查詢引擎機器人尋找、分類。
  1. <meta name="Generator" content="“>
    用以說明生成工具(如Microsoft FrontPage 4.0)等
  2. <meta name=“keywords" content="“>
    向查詢引擎說明網頁的關鍵詞
  3. <meta name=“description" content="“>
    告訴查詢引擎你的網站台的主要內容
  4. <meta name=“Author” content=““>
    告訴查詢引擎網站的作者
  5. <meta name="Robots" content="all|none|index|noindex|follow|nofollow“>
    設定為all:檔案將被檢索,且頁面上的連結可以被查詢
    設定為none:檔案將不被檢索,且頁面上的連結不可以被查詢
    設定為index:檔案將被檢索
    設定為follow:頁面上的連結可以被查詢
    設定為noindex:檔案將不被檢索,但頁面上的連結可以被查詢
    設定為nofollow:檔案將不被檢索,頁面上的連結可以被查詢

php refresh網頁重讀及網頁導向

header("refresh:5;url=http://www.google.com");

php導到「HTTP 404 - 找不到檔案」的錯誤訊息

header("HTTP/1.0 404 Not Found");
exit;

強迫不要使用cache

欲讓使用者每次都能得到最新的資料,強迫不要使用快取(cache)
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") ."GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

php寫下載excel

可以用Pear套件,下面是比較簡單的方式...

<input type="button" name="B1" value="下載EXCEL" onclick="location.href=download.xls">

\t:指Tab鍵(換欄位)
\n:指換行
$txtFile = "欄位A\t欄位B\t欄位C\t欄位D\n";
while ($row = mssql_fetch_array($result)){
 $txtFile .= "'$row['id']\n"; //在值的前面加上單引號變成字串
}
//開啟EXCEL檔
//若檔案存在,則刪除檔案
if (file_exists("/localhost/download.xls")){
 unlink("/localhost/download.xls");
}
if (!$file = fopen("/localhost/download.xls","w+")){
 echo 開啟文字檔失敗
 exit;
}
fputs($file,$txtFile); //把資料寫入檔案
fclose($file);

PS.若內容四個空格,會被當成tab鍵,所以…需把它替換掉
str_replace(' ',"",$result[$tab])

javascript 截取字串

String.substr(s,e) :從指定的位置(s)取指定長度(e)的字串。
String.substring(s,e) :從指定的位置(s)到指定的位置(e)的字串。
起始位置從0開始

code = 'abcdefghi'
function checkData(){
 //計算字串的長度
 var i = document.getElementById('code').value.length;
 alert(i); // 9
 //從指定位置2,到指定位置4的字串
 var j = document.getElementById('code').value.substring(2,4);
 alert(j); // cd
 //從指定位置2,截取長度4的字串
 var k = document.getElementById('code').value.substr(2,4);
 alert(k); // cdef
}

2008年9月25日 星期四

把「開啟這類檔案之前,一定要先問我」回覆

把開啟這類檔案之前,一定要先問我的checkbox取消,想要再叫回…

到檔案總管的「資料夾選項」設定,將該檔案類型設定中的「下載後開檔時確認」勾起即可。
看你當初是下載哪一類型的檔案,就去恢復那一類型檔案的訊息,依此類推。
以 zip 檔案為例(修改其他檔案類型請依此類推):
  1. 開啟檔案總管,到「工具」>>「資料夾選項」(某些作業系統,如 Windows 98 是「檢視」>>「資料夾選項」)。
  2. 到「檔案類型」頁。
  3. 在「註冊的檔案類型」清單中,找到「WinZip File」,按「進階」(註一),勾「下載後進行開啟確認」,按確定,結束資料夾選項視窗。

2008年9月22日 星期一

PHP呼叫MSSQL的SP

$sql="Declare  @OrderCode varchar(9),
      @RetStr varchar(1000)
    EXEC InsertPresentOrder 'START', @OrderCode OUT, @RetStr OUT
   Select @OrderCode,@RetStr";
$query=mssql_query($sql);

$OrderCode=mssql_result($query,0,0);
$RetStr=mssql_result($query,0,1);

php 呼叫sybase 的sp

sp:
CREATE PROCEDURE dbo.sp_u_test_test
@mult1 int, @mult2 int, @result int output
AS
BEGIN
select @result = @mult1 * @mult2
END

php:
$sql="declare @guess int
select @guess = 0
execute databse..sp_u_test_test 5, 6,
@result = @guess output";

$query=sybase_query($sql);

echo sybase_result($query,0,0);
==>30

參考資料:http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/43833;pt=42621/*

2008年4月2日 星期三

找出資料表的欄位型態、大小、描述…等

找出table_name這個table的欄位名稱、型態(大小)、預設值、描述、isNull
Select C.COLUMN_NAME,
   CASE DATA_TYPE WHEN 'nvarchar' THEN DATA_TYPE+'('+CONVERT(NVARCHAR(1000),CHARACTER_MAXIMUM_LENGTH)+')' ELSE DATA_TYPE END,
   ISNULL(C.COLUMN_DEFAULT, ''), ISNULL(D.value, ''), CASE C.IS_NULLABLE WHEN 'NO' THEN '' ELSE 'Y' END,
   D.NAME, D.object_id, D.minor_id,
   C.DATA_TYPE, C.CHARACTER_MAXIMUM_LENGTH
From (
  Select A.name, A.object_id, B.minor_id, B.value
  From sys.tables A LEFT JOIN sys.extended_properties B
   on A.object_id = B.major_id
) D RIGHT JOIN Information_Schema.Columns C
ON D.name = C.TABLE_NAME AND D.minor_id = C.ORDINAL_POSITION
Where C.TABLE_NAME = 'table_name'
ORDER BY C.ORDINAL_POSITION

2008年2月23日 星期六

脫逸資料庫語法中的特殊字元

mysql_real_escape_string -- 脫逸資料庫語法中的特殊字元.

脫逸資料庫語法中的特殊字元. 所以他可以安全放進mysql_query()執行.

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
$item = "Zak's and Derick's Laptop";
$escaped_item = mysql_real_escape_string($item);
printf ("Escaped string: %s\n", $escaped_item);
?>

Escaped string: Zak\'s and Derick\'s Laptop

注: mysql_real_escape_string() 不脫逸 % 和 _.
See also: mysql_escape_string(), mysql_character_set_name().

資料來源:http://pda.php5.idv.tw/modules.php?mod=books&act=show&shid=477

字串加入斜線

AddSlashes
本函式使需要讓資料庫處理的字串,引號的部份加上斜線,以供資料庫查詢 (query) 能順利運作。這些會被改的字元包括單引號 (')、雙引號 (")、反斜線 backslash (\) 以及空字元 NUL (the null byte)。

語法: string addslashes(string str);

資料來源:http://stock.ettoday.com/book/function.php-AddSlashes.htm

2008年1月29日 星期二

16進制轉成2進制

ALTER FUNCTION [dbo].[16Transfer2] (@Code Nvarchar(20))
RETURNS Nvarchar(100)
AS
BEGIN
 DECLARE @ResultVar Nvarchar(100)
 DECLARE @iLen Int
 DECLARE @I Int
 DECLARE @SingleCode Nvarchar(2)
 DECLARE @Ten INT

 SELECT @iLen = LEN(@Code)
 SET @I = 1
 SET @ResultVar = ''

 While @I <= @iLen
 BEGIN
  SET @SingleCode = SUBSTRING(@Code, @I, 1)

  SET @Ten = CASE @SingleCode
        WHEN 'A' THEN 10
        WHEN 'B' THEN 11
        WHEN 'C' THEN 12
        WHEN 'D' THEN 13
        WHEN 'E' THEN 14
        WHEN 'F' THEN 15
        ELSE CONVERT(INT, @SingleCode)
       END

  SET @ResultVar = @ResultVar + dbo.[10Transfer2_16](@Ten)
  SET @I = @I + 1

 END

 RETURN RTRIM(LTRIM(@ResultVar))
END

EX:Select dbo.[16Transfer2]('F')==>1111

把10進位的數字變成2進位--數字為0-15(16進制轉成2進制用)

ALTER FUNCTION [dbo].[10Transfer2_16] (@Code Int) RETURNS Nvarchar(4)
AS
BEGIN
 DECLARE @Number Int
 DECLARE @I INT
 DECLARE @Two Nvarchar(4)

 SET @Number = @Code
 SET @I = 3 --只除3次
 SET @Two = ''

 WHILE @I <> 0
 BEGIN
  SET @Two = CONVERT(Nvarchar(1), @Number%2) + @Two
  SET @Number = @Number / 2
  SET @I = @I - 1
 END

 IF @I = 0
 BEGIN
  SET @Two = CONVERT(Nvarchar(1), @Number) + @Two
 END

 RETURN LTRIM(RTRIM(@Two))
END

EX:Select dbo.[10Transfer2_16](14)==> 1110

2進制轉成10進制(function)

CREATE FUNCTION [dbo].[2Transfer10] (@Code Nvarchar(100)) RETURNS Int
AS
BEGIN
 DECLARE @ResultVar Int
 DECLARE @iLen Int
 DECLARE @I Int
 DECLARE @J INT
 DECLARE @Number Int
 
 SET @iLen = LEN(@Code)
 SET @I = @iLen-1
 SET @J = 1
 SET @ResultVar = 0

 WHILE (@I >= 0) AND (@iLen >= @J)
 BEGIN
  SET @Number = SUBSTRING(@Code, @J, 1)
  IF @Number = 1
  Begin
   SET @ResultVar = @ResultVar + POWER(2,@I)
  END
  SET @I = @I - 1
  SET @J = @J + 1
 END

 RETURN @ResultVar
END

EX:
  Select [dbo].[2Transfer10](1101) ==>13