php與資訊安全

之前拿到了一本原文電子書,在講php程式設計與資訊安全,一直都沒有空去看它,最近,把這些本當成催眠書,睡覺之前翻一翻,每次看不到10頁,我就非常想睡,當然我想睡的時候都已經半夜一、二點了,回到正題,目前還在讀第一章,還沒有講到php程式設計要怎麼考量安全性,就在第一章就讓我被打了一記悶棍,怎麼說咧?聽我道來。 Read more →

查詢陣列中值所在的位置

為了資料排序的問題,又無法直接抓取資料的序號
所以只好把資料序號都丟進去陣列中
放入陣列中的元素,是按照順序排好了
只要有辦法取得陣列元素的位址
就可以進行相關的操作
使用的指令
array_search(‘字串’,陣列變數)
如果有資料,就會返回位址,如果沒有,就會返回null
解決掉我花了三個小時的order by問題
使用這個方法,就是浪費了一點記憶體
不過,這也是沒有辦法的辦法

網頁流量是真的流量嗎?

最近,開始深入的測試discuz
發現,discuz 7.0版上也有採集文章的插件
也就是說,可以自己把別人的文章複製(克隆)回來
當然,連回覆也不放過

更厲害的是,可以自己產生1000個會員,這些會員會隨機上線
還會自己發文章,營造熱門網站的資訊

可怕了吧!真是一個超猛的外掛,這讓我覺得,還有很多努力的空間
第一:文章採集技術,因為直接抓的也是discuz文章,格式比較不容易跑掉
第二:人數上線瀏覽資料,這是Blog系統所沒有的
第三:隨機發文,這是機器人很重要的功能

當然,discuz也複雜許多,因為html tag/bbcode或是純文字三種模式
比只用html tag的blog簡單許多

當然,1000個會員隨機在線,隨時提供資料,這個手法,還真是先進。

使用UniDAC讀取Mysql資料庫

之前測試過,使用Mysql元件來讀資料,但是失敗,失敗的原因是什麼目前還不知道。所以用了另一套元件(控件)來存取MySQL的資料。

通常來說,要讀取某一筆特定的資料,select的語法如下
select * from tabls where filed1=’abc’ AND field2 =’DEF’;
在php和一般SQL的指令是這麼下的沒有錯
但是,在Delphi的UniDAC卻不是如此
要使用UniQuery的Fileter屬性來撈我們要的資料
Step1 取得輸入的資料
useri:=edit1.Text;
passi:=edit2.Text;

Step2 開啟UniQuery的Filter功能
UniQuery1.Filtered:=true;

Step3 組合我們要的FilterSQL語法
filtertext1:=’USER=”’+useri+”’AND Pass=”’+passi+””;

Step4 把語法指定給 Uniquery1.FilterSQL
Uniquery1.FilterSQL:=filtertext1;

Step5 開啟UniQuery
UniQuery1.open;

這個時候,就可以查到我們要的資料了

說真的,網路上在討論 UniQuery的人不多,因為我想說UniDAC和MyDAC都是devart公司出來,UniQuery提供了多種database的查詢,而MyDAC只是其中的一種,所以MyDAC能用的方法,UniDAC也一樣,所以參考了MyQuery的語法進行測試,最後才測試成功。語法怪的地方在於引號的部份,為什麼要用2次的引號,我就不知道了,不過使用UniDAC來查Mysql,真的花了我很多的時間測試,等一下來測試看看新增修改和刪除的功能。

Delphi函數

數學函數 (Arithmetic Routines)

Unit: System
======================================================================
Abs 傳回參數的絕對值。 function Abs(X);
ArcTan 傳回正切函數的反函數值。 function ArcTan(X: Real): Real;
Cos 傳回餘弦函數值 function Cos(X: Real): Real;
(X 以弧度為單位)。
Exp 傳回自然指數值。 function Cos(X: Real): Real;
Frac 傳回參數的小數部份。 function Frac(X: Real): Real;
Int 傳回參數的整數部份。 function Int(X: Real): Real;
Ln 傳回自然對數值。 function Ln(X: Real): Real;
Pi 傳回圓周率π的值。 function Pi: Real;
Sin 傳回正弦函數值。 function Sin(X: Real): Real;
Sqr 傳回參數的平方。 function Sqr(X: Real): (Real);
Sqrt 傳回參數的平方根。 function Sqrt(X: Real): Real;

Read more →

Delphi的數字類資料型態&函數

數字類的資料型態

Type Storage size Range

Byte 1 0 to 255
ShortInt 1 -127 to 127
Word 2 0 to 65,535
SmallInt 2 -32,768 to 32,767
LongWord 4 0 to 4,294,967,295
Cardinal 4* 0 to 4,294,967,295
LongInt 4 -2,147,483,648 to 2,147,483,647
Integer 4* -2,147,483,648 to 2,147,483,647
Int64 8 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

Single 4 7 significant digits, exponent -38 to +38
Currency 8 50+ significant digits, fixed 4 decimal places
Double 8 15 significant digits, exponent -308 to +308
Extended 10 19 significant digits, exponent -4932 to +4932

* Note : the Integer and Cardinal types are both 4 bytes in size at present (Delphi release 7), but are not guaranteed to be this size in the future. All other type sizes are guaranteed.

Read more →

Delphi的If…then..Else

在條件事選擇的時候,通常可以用幾種選擇性結構進行判斷
在php中 if 條件式是這麼下的

if (a!=0){
做什麼事;}else{
做另一件事;
}

如此一來,完成一個選擇性的結構
在delphi中,法語有一些些的不同,在if..than…else的結構中,不能放;(if條件句結束),如果要放;,只能加在begin…end中
下面是做按鈕的開關sample
If Edit1.Text=” Then
Button1.Enable:=false
Else
Button1.Enable:=true; <—最後要加分號做結束

多內容的If…Then…Else語法
If Edit1.Text=” Then
begin
Button1.Enable:=false;
Button2.Enable:=false;
Button3.Enable:=false;
end <—第1個End 不加 ; 最後一個End 才加;
Else
begin
Button1.Enable:=true;
Button2.Enable:=true;
Button3.Enable:=true;
end
;

Delphi的資料庫連接

1.dbexpress
2.ado
3.myodbc
4.3rd party object(Tmysql/zeros/MyDAC)

Tmysql
http://www.productivity.org/projects/tmysql/
看了介紹,Tmysql沒有使用TDatabase TQuery等,也不是使用BDE/ODBC
最後的版本在2002年的2月12日發佈
我用的是 Delhpi And C++ Builder 2009版的,不知道有沒有支援。

TDatabase是使用BDE(Borland Database Engine)
TQuery則是要設定ODBC資料來源(回想起當初出社會時,安裝軟體設定ODBC的痛苦)

MyDAC元件在網站是這麼介紹的
MySQL Data Aceess Componets,提供的物件蠻多的,請參考下圖
mydac_palette[1].jpg

下載頁在這裡,有免費版的可以下載
http://www.devart.com/mydac/download.html
重點是,有支援Delphi and C++ Builder 2009
而且,還有支援其他多種DB的連線
Oracle
SQL Server
InterBase
Firebird
PostgreSQK
(我又想去網路上找不是試用的版本了…唉宿命)
使用的是ADO.NET data provider, dbExpress drivers(不知道會不會連線成功)
首先,我沒有看到MyDAC的正式版或是破解版,所以咧,先用測試版跑看看。
在安裝的時候,出現了下面的訊息。
竟然找不到Hxds.dll
安裝MyDAC 5.8 for delphi and C++ Builder 2009,遺失Hxds.sll
經檢查,這是一隻微軟Help的元件,不過訊息上面說,這不是一個fatal(致命的錯誤),安裝會繼續完成。
這個錯誤訊息,一共出現了2次,我在想他是不是呼叫這件元件,來顯示他們的說明,anyway,不重要。
執行CodeGear RAD Studio 2009中的delphi 2009,出現了MyDAC的提示訊息,告訴我,我有60天的試用期。

哈哈~裝好了,就一個字爽
而且連接資料庫變的超簡單的

不過,看到他的價目表,嚇到我閃尿了!
標準 1人版 $129.95 USD金 群組版(4U) 299.95USD 網站版(同一間公司不限人數) $549.95 USD
專業 1人版 $199.95 USD金 群組版(4U) 499.95USD 網站版(同一間公司不限人數) $899.95 USD
其他的不敢看下去了(害我又想去找其他的版本了….)

* TMyConnection – lets you set up and control connections to MySQL database server
* TMyQuery – uses SQL statements to retrieve data from MySQL table or tables and supply it to one or more data-aware components through a TDataSource component and provides flexible data update functionality
* TMyTable – allows to retrieve and update data single table without writing SQL statement
* TMyStoredProc – executes stored procedures and functions
* TMyCommand – executes SQL statements and stored procedures, which do not return rowsets
* TMyScript – executes sequence of SQL statements
* TMyUpdateSQL – lets you tune update operations for a DataSet component
* TMyDataSource – provides an interface between a MyDAC dataset components and data-aware controls on a form
* TMySQLMonitor – allows to monitor dynamic SQL executing in MyDAC based applications
* TMyConnectDialog – allows you to build custom prompts for usernames, passwords, and servers
* TCRDBGrid – extends TDBGrid capabilities, provides visual access to filters and incremental search
* TVirtualTable – provides dataset functionality for data that has no real database connection
* MyDataAdapter – .NET component, uses TDataSet as data source for retrieving and saving data to System.Data.DataSet

MyDAC Professional Edition and MyDAC Developer Edition include the following additional components:

* TMyLoader – provides quick loading data to MySQL database
* TMyDump – serves to store a database or its parts as a script and also to restore database from received script
* TMyBackup – serves for backup copying specified tables on the server
* TMyServerControl – serves to control the server and execution of standard service tasks
* TMyEmbConnection – is used to establish connection to MySQL Embedded server
* TMyBuilder – serves to manage SQL Builder for MySQL Add-in
* TMyMetaData – retrieves metadata on specified SQL object
* TCRBatchMove – transfers data between all types of TDataSet descendants

另外,我找不到zeros的資料,網友說的不是很清楚。
The ZeosLib is a set of database components for MySQL, PostgreSQL, Interbase, Firebird, MS SQL, Sybase, Oracle and SQLite for Delphi, FreePascal/Lazarus, Kylix and C++ Builder.
網友寫錯了,是zeos,從zeoslib或sourceforge都可以下載
免費,開源,而且支援的好像也不少
只是不知道好不好用而以
剛才看了官網和下載完package之後
我失望了
因為目前6.X的版本,並不支援delphi 2009(12.0),只支援 Delphi V11
我再找看看其他delphi連接mysql的元件好了

剛才看到有網友用 mysql windows版的元件+dbExpress來連接Mysql,也許操作起來沒有像MyDAC這麼方便,不過,最少是不用錢的,而且MySQL元件,只要去下載Win 32的版本,可以取得,如果要做軟體發佈的時候,只要把libmySQL.dll copy到windows\system32下,就可以了,簡單方便許多。
有興趣的,可以參考這篇文
http://www.jackforfun.com/2008/11/delphi-2009-dbexpress-unicode-mysql-50.html?showComment=1247908318404#c6037813891210543481

Access violation at address in module 'libmysql.dll'. Read of address.
可是我照上面的試來來做
卻是有問題的,之前這台有灌過xampp和apps,不知道是不是元件的問題….唉,先測別的先