```php
function SQLCreator($params, $type = 'insert')
{
$type = strtolower($type);
if (! in_array($type, ['insert', 'update'])) {
die('errors');
}
$data = [];
$result = '';
foreach ($params['value'] as $key => $value) {
if (in_array($key, $params['field'])) {
$field = sprintf('`%s`', $key);
$value = sprintf("'%s'", (! get_magic_quotes_gpc()) ? addslashes($value) : $value);
$data[$field] = $value;
}
}
switch ($type) {
case 'insert':
$table = $params['table'];
$fields = implode(',', array_keys($data));
$values = implode(',', array_values($data));
$result = sprintf('INSERT INTO `%s` (%s) VALUES (%s)', $table, $fields, $values);
break;
case 'update':
$table = $params['table'];
$fields = [];
foreach ($data as $key => $value) {
$fields[] = sprintf('%s=%s', $key, $value);
}
$fields = implode(',', $fields);
$result = sprintf('UPDATE SET `%s` (%s)', $table, $fields);
if ($params['condition']) {
$result .= ' '.$params['condition'];
}
break;
}
return $result;
}
$params = [
//定義資料表名
'table' => 'test',
//定義資料表欄位
'field' => ['field'],
//定義欄位的值array('欄位'=>'值');
'value' => [
'field' => 'test',
],
//在使用UPDATE時所需的條件
'condition' => 'WHERE s_id = 1',
];
// 第一個參數是傳入insert或者是update
echo SQLCreator($params, 'update');
/*
* PS.無法在值裡面定義MySQL的函式喔,這一點要注意,如果要在欄位裡面用成MySQL的函式就要再修正一下傳入值的方法,
* 有要用的人就自行修改,不夠這個目前足以應付很多的INSERT或是UPDATE了
*/
```
2010年7月20日 星期二
2010年7月6日 星期二
php 大量發送email的小技巧
相信許多人在寫大量發信的時候,
都會要求使用者不能關閉正在發信的視窗,
因為關閉視窗發email的機制就會中斷,
或者也有人提出另外一種作法就是利用cli的方式執行
在linux上丟到background處理,在windows內用at的指令下排程!
不過事實上不必那麼麻煩!
只要利用php的ignore-user-abort加上set_time_limit來執行即可
這樣處理即使user關掉電腦,php還是會繼續執行下去的
寫個簡單的範例好了
```php
//讓程式執行到結束為止
set_time_limit(0);
//瀏覽器關閉後繼續執行
ignore_user_abort(true);
sleep(15);
touch("/test.txt");
```
執行後15秒可以到根目錄下看是否建立test.txt這個檔案(記得要開放寫入權限)
※利用這個方式,可能會發現Browser無法再瀏覽該網站的任何一個頁面,
這個在之前有提過Session的問題,記得執行session_commit就可以避免此問題了
標籤:
php
2010年7月5日 星期一
PHP Session的使用注意事項
不知道大家有沒有發現AJAX號稱是非同步作業,
所以正常來說同時間執行三個AJAX,
三個AJAX執行完後的順序應該會不同,
但實際在測時,有用到Session的話,
AJAX絕大部份都會照先後順序執行結束,
其實這個問題就是Session在作怪,
這個問題應該怎麼說呢?
一般在主機的設定Session是存在檔案系統內
Session開啟時,該檔案的資源就會被佔用
所以同時使用AJAX時,程式必須等到Session的檔案資源被釋放
Session才會再次被讀取。才會造成AJAX一點都不順
講了這堆廢話!當然重點是有解法囉!
下一行指令即可!
```php
session_commit();
```
記得commit之後再直接修改$_SESSION的值是沒用的喔!
不過有需要修改到Session還是有辦法處理的
```php
session_commit();
//要執行的程式
session_start();
$_SESSION["test"] = "test";
//再次commit即可!
session_commit();
```
標籤:
php
2010年6月21日 星期一
php utf8中文正規表示式
```php
preg_match_all('~[\x{4e00}-\x{9fa5}]+~u', $string, $matches);
var_dump($matches);
```
php取得副檔名的寫法
php取得副檔名有許多做法
```php
//example1
function file_extension($filename) {
return substr(strrchr($filename,'.'),1);
}
//example2
function file_extension($filename) {
return end(explode(".", $filename));
}
//但實際上這樣寫就夠了
echo pathinfo($filename, PATHINFO_EXTENSION);
```
pathinfo在檔案的處理上十分的好用, 其實不加入第二個參數它會回傳陣列, 至於回傳什麼值大家請用var_dump看就知道了
標籤:
file extension,
php
2010年6月17日 星期四
javascript事件event之target
這篇的話!就直接來看範例好了!
span的部分利用position:absolute;並給z-index讓span壓在div之上!
原本預定的結果是只點擊span只會觸發span的onclcik,
可是實驗證明了在這個狀態之下會觸發div及span的click
大家可以點上面的div及span就可以看到所述描的情形!
為了避免這種情形,可以利用event的target來做規避!
onclick的程式碼修正如下
結果:
不過這個解決方法在android的browser就破功了!
因為android的browser沒有target或者是srcElement的屬性啊~~~
click
click
var click = function(e){
alert(this.tagName);
}
document.getElementById("div").onclick = click;
document.getElementById("span").onclick = click;
在此範例內用了一個div包覆了一個span並給予click事件,span的部分利用position:absolute;並給z-index讓span壓在div之上!
原本預定的結果是只點擊span只會觸發span的onclcik,
可是實驗證明了在這個狀態之下會觸發div及span的click
大家可以點上面的div及span就可以看到所述描的情形!
為了避免這種情形,可以利用event的target來做規避!
onclick的程式碼修正如下
結果:
click
click
這樣就不會重覆觸發事件了!
不過這個解決方法在android的browser就破功了!
因為android的browser沒有target或者是srcElement的屬性啊~~~
標籤:
javascript
2010年6月7日 星期一
PHP之Deprecated: Assigning the return value of new by reference is deprecated問題
會發生這個問題大部份都是在php升級後發生,
尤其是用了別人的套件或者是framework的人最容易會發生,
會發生這個錯誤的原因是php5.3版本大幅修改reference的bug...
解決的方法不是升級framework或是將display_error設為off
標籤:
php
訂閱:
文章 (Atom)