顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


文章 - ricky

頁: 1 ... 19 20 [21] 22 23
601
看到這真的再認同不過了
常會遇到許多人在問
怎麼程式不能動
沒有畫面
我要怎麼跳頁
諸如此類
卻忽略掉了寫程式最基本的精神
演算法,資料結構,最佳化...
常會看到有人問如何用迴圈作出一個多重選單
這代表的是什麼
這並非單單只是php程式的問題
看到這種問題我的反應通常是不予回應
不是不願意回答
癥結點在於提問者對於演算法一點概念都沒有
這個已經遠遠的超過這個版的成立宗旨了
即使回應了
難保下次把多重選單換成多重表格
他是否還能以一變應萬變
此外也常常看到許多人
會把一些非關php的東西通通丟上來問
像是如何阻擋使用者下載圖片
接著就丟出一陀javascript希望大家幫忙想辦法
什麼是servier side的東西什麼是client side的東西
經常一堆人搞不懂
這些應該是在撰寫php程式之前得先具備有的基本吧
要學php至少對於html有點認知
javascript跟php兩個的差別至少也得分的出來
哪些code是在server端執行哪些是在client端執行
不管是什麼語言他都只是一個"工具"
真正要學習的是程式的邏輯以及解決問題的"方法"
而不是以為精通了php的語法就以為自己寫的出一個xoops
到時候不是漏洞百出就是架構亂到讓人無法了解

602
酷!學園 精華區 / 分享PEAR::DB使用---part2
« 於: 2005-06-17 14:41 »
接下來我們來看看如何從資料庫送出一筆查詢
    <?php
    require_once('DB.php');
    $DSN=".....";
    $dbObj=& DB::connect($DSN);
    if (PEAR::isError($dbObj)) die($dbObj->getMessage());
    $Result=$dbObj->query('select * from test;');
    if (PEAR::isError($Result)) die($Result->getMessage());
    echo "table test has ".$Result->numCols." Columns";
    for($i=0;$i<$Result->numRows();$i++)
    {
      $DataRows=$Result->fetchRow(DB_FETCHMODE_ASSOC);
      print_r($DataRows);
    }
    $Result->free();
    $dbObj->disconnect();
    ?>

當我們成功建立了一個資料庫聯結物件後就可以開始跟資料庫進行查詢或是更動資料
我們可以透過query這個成員函數送出SQL查詢指令
代碼: [選擇]

$Result=$dbObj->query('select c1,c2,c3,c4,c5 from test;');

送出後我們會得到一個$Result的查詢結果
這邊我們使用了PEAR的錯誤機制去偵測我們送出的查詢結果是否成功
如果失敗了就列出錯誤訊息結束
代碼: [選擇]

if (PEAR::isError($Result)) die($Result->getMessage());

接下來我們就把重點擺在$Result物件的幾個相關功能上

DB_result::numCols()
用來取得每列資料欄位的數目

DB_result::numRows()  
用來取得符合條件的資料列數

DB_result::fetchRow()  
從查詢結果中取得一列資料
如果總資料筆數有三筆
第一次呼叫函數就是取得第一筆
再次呼叫就取得下一筆依此類推
所以要把全部三筆資料通通取出就得呼叫三次
fetchRow有一個選擇性的參數
DB_FETCHMODE_ORDERED 將傳回資料依序擺入array (預設方式)
DB_FETCHMODE_ASSOC     將資料擺入associative array
DB_FETCHMODE_OBJECT    將資料封裝成物件
我們先從ORDERED跟ASSOC說起好了
何謂associative array
像這樣array('Ricky' => 'M','Jean' => 'F','John' => 'M')
存取array的索引值使用的是一個"名稱" $a['Rciky'],$a['Jean']
而array('M','F','M');這就是一個ordered array
$a[0],$a[1],$a[2]
OBJECT 則是封裝成物件
像這樣$a->xxx...
以上面程式的例子來說
DB_FETCHMODE_ORDERED 得到結果會像這樣  
代碼: [選擇]

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
)


DB_FETCHMODE_ASSOC 得到結果會像這樣
代碼: [選擇]

Array
(
    [c1] => 0
    [c2] => 1
    [c3] => 2
    [c4] => 3
    [c5] => 4
)


DB_FETCHMODE_OBJECT 得到結果會像這樣
代碼: [選擇]

Object
(
    [c1] => 0
    [c2] => 1
    [c3] => 2
    [c4] => 3
    [c5] => 4
)

至於該怎麼用就看個人需求嘍

最後老話一句
$Result->free();
別忘了資源回收
不用了記得把東西給歸還吧

待續

603
酷!學園 精華區 / 分享PEAR::DB使用---part1
« 於: 2005-06-17 11:14 »
這邊就分享一下PEAR :: DB的使用方式吧
在連線資料庫之前得先提一下DSN
Data Source Name -- 資料來源名稱
PEAR :: DB提供了一個與資料庫獨立的連結介面
如何建立與資料庫的連結靠的就是DSN了
DSN描述如下
dbsyntax://username:password@protocol+hostspec/database?option=value
dbsyntax表示資料庫的類型
以下是目前PEAR :: DB支援的資料庫類型
    dbase  -> dBase
    fbsql  -> FrontBase (functional since DB 1.7.0)
    ibase  -> InterBase (functional since DB 1.7.0)
    ifx    -> Informix
    msql   -> Mini SQL (functional since DB 1.7.0)
    mssql  -> Microsoft SQL Server (NOT for Sybase. Compile PHP --with-mssql)
    mysql  -> MySQL (for MySQL <= 4.0)
    mysqli -> MySQL (for MySQL >= 4.1) (requires PHP 5) (since DB 1.6.3)
    oci8   -> Oracle 7/8/9
    odbc   -> ODBC (Open Database Connectivity)
    pgsql  -> PostgreSQL
    sqlite -> SQLite
    sybase -> Sybase

username:password指的就是資料庫的帳號密碼
例如
帳號:ricky
密碼:rickyspassword
就是ricky:rickyspassword
如果密碼中含有一些特殊的字元例如:+?()請先使用urlencode函數編碼過
protocol+hostspec/database
指的就是連線的協定以及資料庫名稱例如使用的是tcp還是unix socket
這邊我們就以常見的mysql來介紹
所以mysql的DSN就是這樣設定
mysql:://ricky:rickyspassword@localhost/mydb
底下附上一些從pear上擷錄的連線範例
 
    Example 32-1. Connect to database through a socket

    mysql://user@unix(/path/to/socket)/pear
     
     
    Example 32-2. Connect to database on a non standard port

    pgsql://user:pass@tcp(localhost:5555)/pear
     
     
    Example 32-3. Connect to SQLite on a Unix machine using options

    sqlite:////full/unix/path/to/file.db?mode=0666
     
     
    Example 32-4. Connect to SQLite on a Windows machine using options

    sqlite:///c:/full/windows/path/to/file.db?mode=0666
     
     
    Example 32-5. Connect to MySQLi using SSL

    mysqli://user:pass@localhost/pear?key=client-key.pem&cert=client-cert.pem
     
     
    Example 32-6. Connecting to MS Access sometimes requires admin as the user name

    odbc(access)://admin@/datasourcename
     
     
    Example 32-7. Connecting to ODBC with a specific cursor

    odbc(access)://admin@/datasourcename?cursor=SQL_CUR_USE_ODBC

接著就開始連線的第一步嘍
    <?php
    require_once('DB.php'); //預設pear的路徑應該已經包含進去了
    $DSN="....."; //請自行設定DSN
    $dbObj=& DB::connect($DSN);
    if (PEAR::isError($dbObj))  die($dbObj->getMessage());
    $dbObj->disconnect(); //別忘了程式結束後要資源回收喔
    ?>

這樣就建立起DB連線物件$dbObj了
此外DSN也可以使用array的方式
像這樣
    $DSN = array(
        'phptype'  => 'mysql',
        'username' => 'ricky',
        'password' => 'rickyspassword',
        'hostspec' => 'localhost',
        'database' => 'mydb',
    );

待續...

604
PHP程式設計討論區 / PHP 新手入門的建議
« 於: 2005-06-17 10:25 »
不管是adodb或者是pear::DB
這些類別函式庫就是希望提供一個與資料庫獨立的存取介面
既然使用了這些工具就要有個認知
不要去使用一些非標準SQL規範的功能
這樣會造成日後系統轉上的困難
如果日後不會移轉到其他系統
使用adodb或是pear::DB在效能上也佔不到什麼便宜
還不如直接使用內建函數來的直接一些

605
如果是要加密的話有要錢的跟免錢的方案
要錢的可以找zend encoder
免錢的方案就找eaccelerator吧

606
php運作時可以採用兩種方式
一個是透過web端啟動通常是以模組的方式掛在apache底下
另一種則是透過php的直譯器
在unix like的系統上
可以像這樣子
xxx.php

#!/usr/bin/php
<?php
 echo "hello world!";
?>

將屬性設為755可執行
在srver端直接職行
或是寫入crontab定期去執行它

607
通常這種情形應該是
你的php程式一直沒有回應訊息
導致IE以為伺服器沒有回應導致timeout
解決方法還是改成console模式去執行php
而不要透過IE去啟動

608
請自行檢查一下
php.ini
max_execution_time的設定

609
PHP程式設計討論區 / 關於使用SESSION
« 於: 2005-05-23 10:55 »
就我自己寫程式的習慣我會這樣做
將有關登入,登出,以及檢驗密碼的部分寫成一個class
像這樣
//////account.php
class Account
{
  function Auth($id,$password)
  {
    $sql="SELECT * from user where id='$id' and password='$password'";
    $result=mysql_query($sql);
    $num=mysql_num_rows($result);
    if($num!=1) return false;
    $Rows=msql_fetch_array($result);
    if(($Rows['id']!==$id)||($Rows['password']!==$password)) return false;
    return true;  
  }
  function Login($id)
  {
    session_register('id');
    $_SESSION['id']=$id;
  }
  function IsLogin()
  {
    if(isset($_SESSION['id']) return $_SESSION['id'];
    return false;
  }
}

//使用者登入驗證密碼
<?php
require_once('account.php');
session_start();
$Account = new Account;
if(!$Account->Auth($id,$password)) die('帳號或是密碼錯誤');
$Account->Login($id);
?>

//需要驗證登入的部份
<php
require_once('account.php');
session_start();
$Account = new Account;
if($Account->IsLogin()===false) die('尚未登入');
...
?>
參考看看吧

610
PHP程式設計討論區 / PHP 新手入門的建議
« 於: 2005-05-17 09:29 »
我也來推一下吧
事實上資料庫連結的部份
有一個很不錯的東西
pear的db模組
一般人似乎都只知道adodb
可是卻沒啥人知道pear的存在
從php 4.2以後pear預設就是安裝在php裡面的
pear的存在有點像是perl的模組管理
透過一個簡單的pear install xxxx 或是pear upgrade-all
就可以把pear模組更新或是安裝
pear的db模組比起adodb可以說絲毫不遜色
他提供了一個與資料庫獨立的物件介面
有興趣的人可以來玩玩pear吧
pear的網址是http://pear.php.net
改天有空再來詳細介紹pear的db object吧

611
PHP程式設計討論區 / 神奇的MD5
« 於: 2005-05-17 09:16 »
兄弟...
是你沒搞懂php
不是他鬧彆扭
在php的表示法裡面
012 跟12是不同的
在php裡
0開頭後面加數字是表示8進位
不是10進位的數字
弄一個08 跟 09他不是一個合法的8進位數字
php當然只有把它當0來看嘍

612
PHP程式設計討論區 / 該如何計算SHA雜湊?
« 於: 2005-04-25 09:35 »
如果真的要這麼吹毛求疵
那有一個方法保證能夠找到碰撞
md5是採用128位元的運算值
所以他的值域就是從0~2^128-1
找一堆資料連續測試2^128
一定可以找出碰撞值出來
只是耗費的時間可能很長
不過加上一些特殊方法
就像王小云教授所提出的方法
可以縮短這個運算時程
不過依然是使用暴力法
就如同我前面說的
只為了一份價值可能只有10塊錢的交易紀錄
花了上百萬去假造數位簽章
在宣誓意義上大於實質影響力吧

613
PHP程式設計討論區 / 依就是php warning 問題
« 於: 2005-04-21 13:25 »
:o
php.ini不是這樣設滴
不要偷懶
把他拆成兩行

614
php是屬於script型態的語言
因此即使把.php檔案的suid,sgid bit打開也沒用
實際上在運作的是php的interpreter
所以還是得靠外部的一些"輔助"wraper來提升權限

615
用個淺顯的說法好了
當郵差把一封信送到你家收件者寫著是你的名字,地址也沒錯
我們的直覺反應當然是"收下來啦"
郵件主機也是如此
當他看到一封信件收件者帳號存在
同時domain也是這台主機認可的
他就會乖乖的收下
至於誰寄件的他並不理會
郵件主機過濾的驗證的機制只會用在"RELAY"(透過這台主機把郵件寄到不屬於這台主機的郵件信箱)
假如如您所說的對每封收近來的信件都先通過認證手續
那......"別人寄給你的信件怎麼辦"

616
引述: "chih88811"
用ricky的權限去執行xxxx.php,那如果是線上申請會員的,要建立帳號不就又沒權限了。

這是只有在使用cgi模式透過cgiwrap去執行xxxx.php才會套用ricky的權限
如果是平常透過apache php mod啟動的程式套用的還是nobody的權限
致於什麼時候要用什麼權限就看個人程式怎麼設計嘍

617
PHP程式設計討論區 / eAccelerator取代mmcache ??
« 於: 2005-04-19 23:08 »
其實eAccelerator的骨子裡就是mmcache
當初mmcache是採用GPL發行
作者又被挖角了所以整個計劃就停頓下來
後來就改個名成換成eAccelerator繼續延續嘍
不過維護的班底不同就是了

618
這個好像有點太誇張了吧
c:/Inetpub/wwwroot/sessiondata目錄權限是唯讀
都知道是唯讀了還不知道問題出在哪
不准session寫入磁碟那要session幹麻
拿來拜天公嗎

619
這樣做好像還是有點問題吧
一般正常時候php以apache模組在執行時使用的是nobody權限
如果這台server上面還有其他使用者
每個人都去呼叫super那結果還是一樣
在這邊提供大家一個比較安全的解決方法吧
CGIWrap
這個程式可以限定某個目錄底下的的某個程式使用某個權限來執行
舉個例子
/home/ricky/www/xxxx.php
這時候我們可以把cgiwrap放在系統的cgi-bin底下
當我們要執行某個"自己"目錄底下的程式時
http://xxxx.com/cgi-bin/cgiwrap/ricky/xxxx.php
這時候xxx.php是採用cgi模式去執行同時使用的是ricky這個使用者的權限
運作原理是這樣
apache會先去呼叫cgiwrap並且把後面的/ricky/xxxx.php當成是cgiwrap的參數
傳遞給cgiwrap
此時cgiwrap會去檢查ricky這個使用者的home目錄在哪然後套用ricky這位使用者的uid然後去執行xxxx.php
再搭配super模組把使用者限定在ricky這樣就比較安全啦

620
當然使用系統預設的壓縮選項
效能會好一些
不過
你得先確定你的client端真的都支援gzip壓縮後的網頁??
如果不行那最好還是檢查完後再送出吧

621
PHP程式設計討論區 / 該如何計算SHA雜湊?
« 於: 2005-04-17 23:14 »
其實我覺得有些東西不要太因噎廢食
雖然md5被證實是可以破解的
但是另一個角度
要破解md5他所付出的代價
他用的可能是超級電腦級的叢集系統
要租用這種系統可是相當貴的
花了上百萬美金去租用一個超級電腦中心
去破解一個每個月營業額可能不到10萬塊的購物網站
那也太誇張了吧
因此'做什麼系統用什麼工具才是比較好的思考方向吧'

622
PHP程式設計討論區 / 請問有$就無法讀出來
« 於: 2005-04-11 13:37 »
許多人在撰寫PHP程式的時候
只注意到如何去學習語法物件...
卻忽略掉一個最根本的問題"安全"
一個寫的再好,結構再嚴謹的程式如果沒有了"安全"也是惘然
這裡就大致列出幾個"安全缺失"來源的寫作習慣吧

一般最常見的就是使用global變數來處理使用者上傳的資料
就以robbie的程式為例子
echo $PHP_SELF;
原本是要用來取得目前這個php的檔案名稱
可是如果使用者存心要搗蛋
在存取網頁時我使用了這樣的連結
http://xxxx.com/xxx.php?PHP_SELF=balabala
程式就被矇混過去了
這個還是小事
如果今天用的是一個SESSION
假如使用者登入系統後我們就註冊一個SESSION變數
記錄目前使用者的ID
想想看
這不就是個大漏洞了嗎
所以我們在使用這些變數的時候請改用
$_SERVER[PHP_SELF],$_GET[PHP_SELF]
這樣不就很清楚這到底是使用者傳來的GET資料
或是Server的環境變數
因此在撰寫PHP程式的時候請使用
$_GET,$_POST,$_SESSION,$_COOKIE,$_SERVER
這幾個global array來存取而不要直接使用global變數
這樣一來即使php.ini中register_global設為on
還是可以分辨的出來

撰寫PHP程式很重要的一點就是

不要相信使用者的任何資料

怎麼說呢
下面我們用個很簡單的例子來說明
在驗證使用者帳號密碼時我們常會這樣做
$SQL="select * from user where account='$_POST[account]' and password = '$_POST[password]'";
$res=mysql_query($SQL);
if(mysql_num_rows($res)==0) die('Login error!');
乍看之下很合理可是裡面勸暗藏著危機
怎麼說呢
請看
如果使用者密碼欄位特別設計過了
輸入了一個這樣的資料
password===>['; delete from user where '1]
發現了沒...
上面的$SQL將會變成這樣的查詢結果
$SQL="select * from user where account='xxx' and password = ''; delete from user where '1'";
下場就是你的帳號資料庫被清光光嘍
要避免這樣的悲劇產生
切記切記一個原則不要直接把使用者傳來的東西送進資料庫
那要如何避免這樣的危機呢
很簡單有兩個方式
一個是使用addslashes函數把使用者傳進來的東西家上跳脫字元
像這樣
$SQL="select * from user where account='".addslashes($_POST[account])."' and password = '".addslashes($_POST[password])."'";
上面的$SQL變成這樣
$SQL="select * from user where account='xxx' and password = '\'; delete from user where \'1'";
如此一來就可以避免掉SQL Injection的問題
第二個方式就是把php.ini中
magic_quotes_gpc 設為On
如此一來$_GET,$_POST,$_COOKIE裡面的資料php都會自動幫你套用addslashes

另一個是判斷式的安全
像這樣
<?php
$a="123ricky";
if($a==123)  echo '$a=123';
else echo '$a!=123';
?>
輸出結果將會是$a=123
為什麼會造成這樣的結果
很簡單因為php是採用非明確的型態定義
因此遇到$a==123
php會先將$a轉換成數字再做比對
這時候問題就來了'123ricky'轉換成數字會變成什麼呢
最接近的就是123
所以php就會把 $a變成數字123
當要避免這樣的情況時
就得採用另外的條件判斷式
"明確的等於 或是 明確的不等於" ===  or !==
<?php
$a="123ricky";
if($a===123)  echo '$a=123';
else echo '$a!=123';
?>
當使用了明確的布林運算式
這時變數型態就會列入檢查了
php變數型態有下列幾種
array,boolean,int,object,string
$a=false;跟$b=0;
$a跟$b是不同的東西
$a是boolean型態,$b是int型態
使用===時傳回執將會是false

以上是一些容易造成系統安全的地方
供大家做個參考吧

623
PHP程式設計討論區 / 請問有$就無法讀出來
« 於: 2005-04-11 08:10 »
這已經是老到不能再老的老問題了
請自行查詢一下register_global
真搞不懂為啥這個老問題平均每兩個禮拜就會有人來問一次
是現在市面上的php教材都太舊了嗎

624
最近在研究HTTP傳輸資料壓縮
把心得跟大家分享一下吧
壓縮後的資料我測試的結果大概可以省下70%的傳輸量喔
省下了資料的傳輸相對的網頁载入速度也加快了不少
廢話不多說以下就是詳細的說明
HTTP壓縮主要就是把原本text格式的html資料壓縮後再回應給客戶端
所以寫了一個DoCompress的function
存成compress.php
代碼: [選擇]

<?php
function DoCompress&#40;&#41;
&#123;
//檢查瀏覽器是否支援gzip壓縮格式
 
if&#40;strpos&#40;$_SERVER['HTTP_ACCEPT_ENCODING'&#93;,'gzip'&#41;!==false&#41;
 
&#123;
  //取出緩衝區裡的資料
  
$gzip_contents ob_get_contents&#40;&#41;;
  //清空緩衝區
  
ob_end_clean&#40;&#41;;
  //將緩衝區的回傳資料使用gzip壓縮
  
$gzip_contents gzencode&#40;$gzip_contents, 9&#41;;
  //回應瀏覽器資料壓縮格式是使用gzip
  
header&#40;"Content-Encoding&#58; gzip"&#41;;
  //輸出壓縮後的資料
  
echo $gzip_contents;
 &
#125;
&#125;
?>


這邊使用了一個緩衝區
一般php回應給瀏覽器時是直接輸出
不過這邊我們為了要壓縮網頁資料所以啟用了一個緩衝區
在程式最開頭的地方呼叫ob_start();啟用緩衝區
這時輸出的資料就不會直接回應給瀏覽器會先放到緩衝區
等程式結束後再輸出到瀏覽器
以下就是使用的方式
代碼: [選擇]

<?php
 
require_once&#40;'compress.php'&#41;;
 
ob_start&#40;&#41;; //啟用緩衝區
 
...
 ... 
在這邊擺入原本的code
 
...
 
DoCompress&#40;&#41;; //壓縮網頁資料
?>


這樣就ok了

625
PHP程式設計討論區 / 修改一個網頁
« 於: 2005-03-15 08:14 »
應該是unicode的問題吧
之前我是直接抓windows底下的字型去使用
再用iconv轉換成unicode
就沒問題了

626
引述: "knives"
引述: "carloz"
在checkuser.php程式利用$_POST['userid']來接數.

我的checkuser.php是這樣寫
代碼: [選擇]

<?php
$user=$_POST['userid'&#93;;
$checkuser ="SELECT name FROM user WHERE name = '$user'";
if&#40;mysql_query&#40;$checkuser&#41;&#41;
&#123;
echo&#40;$user&#41;;
&#125;
else
echo&#40;"可以正常使用"&#41;;
echo&#40;"<input type='button' onclick='history.back&#40;&#41;' value='回上一頁'>"&#41;;
?>

可是還是不能顯示,到底是那裡要改呢

順便插個嘴
這樣的程式寫法是個很不好的習慣喔
這個程式就隱含著一個大漏洞
一個有心的使用者
只要使用一個特別設計過的文字像這樣
$_POST['userid']="' or '1";
會導致整個SQL查詢變成這樣
SELECT name FROM user WHERE name = '' or '1'
下場就是把整個table的所有資料通通倒出來
如果是用在驗證密碼問題就大了
有心人士可以輕易的逃過密碼驗證的手續登入系統
所以建議您把
$user=$_POST['userid'];
改成
$user=addslashes($_POST['userid']);
把這些有問題的 ' " 字元跳脫才不會留下漏洞
掌握一個原則就是--不要把使用者輸入的文字就直接丟入資料庫查詢
良好的習慣可是寫程式的第一步喔
才不會--凡寫過必留下漏洞

627
PHP程式設計討論區 / 如何計算目錄大小
« 於: 2005-03-01 08:30 »
如果是在linux底下的話
直接下du|tail -n1
就可以取得目前目錄底下的檔案大小的總和

628
Study-Area 公開討論版 / 可否提供RSS功能
« 於: 2005-02-24 11:51 »
我來自問自答好了
花了一早上摸魚的時間把模組改好嘍!!
模組原始碼網址http://ez2.us/~ricky/source/rss_top5.phps
安裝方式
將原始碼存在論壇根目錄底下命名成rss_top5.php
1.修改rss_top5.php根據自己需求修改
$RSSXML_TITLE='酷!學園';                       //RSS feeder的title
$RSSXML_LINK='http://phorum.study-area.org/';   //網站的BaseURL
$RSSXML_GENERATOR='酷!學園';                   //網站內容提供者

// 標題的最大長度
$MAX_STR_LEN = 60;
// 顯示幾筆標題
$MAX_TOPICS = 5;

2.修改templates/[佈景主題]/index_body.tpl (預設佈景是subSilver)
在開頭的地方加上
<link rel="alternate" type="application/rss+xml" title="酷學園" href="http://phorum.study-area.org/rss_top5.php" />
title 以及 href的內容請根據自己網站內容作修改

629
Study-Area 公開討論版 / 可否提供RSS功能
« 於: 2005-02-24 08:38 »
最近發覺RSS feeds功能還蠻好用的
想到如果以後學園跟鳥園也提供這樣的機制
看文章似乎方便多了
在Firfox底下只要拉開書籤就知道有哪些新文章
就不用三不五時點選首頁reload
也方便辛苦耕耘的"FAQ魔人們"灌溉 :D
不知大家意見如何呢

630
database 討論版 / postgre的Bug?
« 於: 2005-02-03 10:59 »
好奇怪的設計
如果要查詢開頭是"\"的資料不就出問題了
這樣不就得like "\\%"
跟包含%的資料查詢不就混淆了
難不成得改用Regular Expressions
這好像不太ANSI吧

頁: 1 ... 19 20 [21] 22 23