Tải bản đầy đủ (.pdf) (8 trang)

Thiết kế trang web độc đáo và hiệu quả phần 2 ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (397.02 KB, 8 trang )


5
ngữ này, SQL Server sẽ tự động chuyển chuỗi dữ liệu sang bảng mã mặc định hiện hành trước khi
sử dụng nó trong các thao tác cập nhật CSDL. Ví dụ, nếu bạn dùng câu lệnh sau: INSERT INTO
SINHVIEN(TEN_SV) VALUES(‘Trần Nam Hải’) thì hằng chuỗi dữ liệu ‘Trần Nam Hải’ sẽ được SQL
Server xem như là chuỗi kí tự thường chứ không phải là chuỗi Unicode. Điều này sẽ dẫn đến hậu
quả là dữ liệu sẽ được lưu trữ không chính xác. Ví dụ như dữ liệu của kí tự “ầ” trong chuỗi trên là
E1 BA A7, sẽ được lưu thành 3 kí tự khác nhau. Trong khi đó nếu dùng câu lệnh INSERT INTO
SINHVIEN(TEN_SV) VALUES(N‘Trần Nam Hải’) thì 3 byte E1 BA A7 sẽ được xem như là một kí tự
khi lưu xuống [9
].
3. Hỗ trợ Unicode của các phần mềm
3.1. Các phần mềm hỗ trợ soạn thảo trang web
- Visual Studio.NET, Notepad, MS FrontPage2002: Hỗ trợ lưu tập tin dưới dạng UTF-8
- Visual InterDev 6.0: Nếu trong trang asp ta sử dụng các hằng chuỗi được gõ vào dưới dạng
Unicode, ví dụ như: Response.Write “Chào mừng bạn “ thì lúc lưu tập tin, chương trình sẽ phát hiện
ra trong trang asp này có xuất hiện kí tự Unicode và yêu cầu lưu xuống dưới dạng Unicode, nếu
không các kí tự Unicode sẽ bị mất. Tuy nhiên, nếu chọn lưu dưới dạng Unicode thì chương trình sẽ
lưu tập tin này dưới dạng mã hóa UCS-2. Hiện nay webserver IIS không thể xử lí được trang asp
này [10
]. Do đó không nên dùng Visual InterDev 6.0 để soạn thảo các trang asp trong các ứng dụng
Unicode tiếng Việt.
- Các phần mềm thông dụng hỗ trợ gõ tiếng Việt Unicode: UniKey, VietKey.
3.2. Các phần mềm hệ thống khác
- SQL Server 7.0/2000 và MS Access 2000 hỗ trợ Unicode. Với mỗi kí tự Unicode, hệ thống sẽ sử
dụng bảng mã UCS-2 để lưu trữ, nghĩa là dùng cố định 2 byte cho một kí tự. SQL 6.5 và MS Access
97 không hỗ trợ Unicode.
- IIS 5.0 không thể đọc được các tập tin lưu dưới dạng UCS-2 [10
], không hỗ trợ CodePage của bảng
mã UTF-16 là 1200 [11
]. IIS 4.0 không hỗ trợ CodePage của bảng mã UTF-8 là 65001 [11].


Tóm lại
Unicode ra đời nhằm khắc phục hạn chế về số lượng kí tự được mã hóa của các bảng mã 8-bit trước đó,
cho phép mọi ngôn ngữ có thể sử dụng chung một bảng mã duy nhất. Do vấn đề tương thích trong lưu trữ
và truyền dữ liệu mà Unicode có các dạng mã hóa khác nhau như UCS-2, UTF-8, UTF-16. UTF-8 là dạng
mã hóa Unicode thông dụng nhất trong các ứng dụng web hiện nay.
Để viết các ứng dụng web dùng tiếng Việt Unicode, cần chọn các phần mềm soạn thảo hỗ trợ lưu trữ tập tin
dưới dạng mã hóa UTF-8 như Visual Studio.NET, MS FrontPage2000, NotePad, … ; sử dụng các hệ quản
trị CSDL hỗ trợ Unicode như SQL Server 7.0/2000, MS Access 2000, …; đặt các đoạn mã chỉ định bảng mã
mà webserver và trình duyệt dùng để mã hóa và giải mã dữ liệu.
Tài liệu trích dẫn
1. />
2. />
3. />
4. />
5. />

6
6.
7. />
8. />
9. />
10. />
11. />

HẾT
KẾT XUẤT DỮ LIỆU RA DẠNG EXCEL TỪ TRANG ASP
Thông thường, các ứng dụng web kết xuất dữ liệu của các báo cáo ra dưới dạng bảng biểu. Sẽ rất
cần thiết nếu người dùng cũng nhận được dữ liệu này dưới dạng Excel để có thể sử dụng cho các
mục đích khác.
Kĩ thuật để đạt được mục đích này khá đơn giản. Ý tưởng chính của kĩ thuật này là sử dụng thuộc

tính ContentType của đối tượng Response trong ASP và thực hiện theo các bước tuần tự sau:
Bước 1: Chỉ định dữ liệu sẽ được chuyển đi theo định dạng Excel
Đơn giản chỉ cần dùng câu lệnh: Response.ContentType = “application/vnd.ms-excel”. Thông
thường, cần phải đặt câu lệnh Response.Buffer = True và Response.Clear trước câu lệnh này để
đảm bảo dữ liệu được chuyển xuống client chính xác.
Bước 2: Kết xuất dữ liệu dưới dạng bảng theo cách làm thông thường.
Dòng đầu tiên của bảng chứa tên của các cột sẽ được hiển thị trong tập tin excel.
Hãy xem ví dụ minh họa sau:
Data2Excel.asp
<%
Response.Buffer = True
Response.Clear
‘ thiết lập định dạng sẽ kết xuất là Excel
Response.ContentType = “application/vnd.ms-excel”

‘ kết nối với CSDL
strDSN = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="
‘ đường dẫn tương đối đến tập tin CSDL
strDSN = strDSN & Server.MapPath("myDB.mdb")
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDSN
strSQL = “SELECT * FROM myTable”
set rs = Conn.Execute(strSQL)
rowstart = “<tr>”
rowend = “</tr>”
cellstart = “<td>”
cellend = “</td>”
Response.Write “<TABLE border=1>”
‘ dòng đầu tiên in tên các cột
Response.Write rowstart

For i = 0 to rs.Fields.Count -1
Response.Write cellstart & "<b>" & rs.Fields(i).name & "</b>" & cellend
Next
Response.Write rowend
‘ in dữ liệu của từng dòng
Do while not rs.EOF
Response.Write rowstart
For i = 0 to rs.Fields.Count –1
Response.Write cellstart & rs.Fields(i)& cellend
Next
Response.Write rowend
rs.MoveNext
Loop
rs.Close
set rs = Nothing
Conn.Close
set Conn = nothing
Response.Write “</TABLE>”
Response.End
%>
Bàn luận:
Ưu điểm của cách làm trên là cho phép bạn sử dụng các đoạn mã sẵn có lúc kết xuất dữ liệu ra dạng
bảng theo cách thông thường để chuyển sang định dạng Excel. Tuy nhiên việc kết xuất dữ liệu theo
định dạng Excel như trong ví dụ trên có thể chiếm tài nguyên của webserver đặc biệt khi dữ liệu lớn
do đó chỉ nên dùng cách này nếu trang này không được sử dụng thường xuyên.
Nếu muốn kết xuất dữ liệu lớn và thực hiện thường xuyên, ta có thể kết xuất thông qua định dạng
CSV (Comma-Separated Values) để tối ưu hơn. Các tập tin theo định dạng CSV là các tập tin văn
bản mà dữ liệu trong các cột được ngăn cách với nhau bởi dấu phẩy “,” (comma), rất thường được
dùng cho việc trao đổi dữ liệu giữa các hệ quản trị CSDL và các chương trình bảng tính như Excel.
Ví dụ, nếu bạn mở một tập tin csv có nội dung như sau trong Excel, ta sẽ nhận được một bảng 3

dòng, 3 cột:
Doe,John,944-7077
Johnson,Mary,370-3920
Smith,Abigail,299-3958
Để chuyển dữ liệu sang định dạng CSV, vẫn với cách làm tương tự bằng cách thay đổi thuộc tính
ContentType về dạng “application/csv” và thêm dòng lệnh sau để yêu cầu trình duyệt hiển thị hộp
thoại tải tập tin về: Response.AddHeader "Content-Disposition", "filename=mydata.csv;". Sau đó,
thay vì định dạng dữ liệu dưới dạng bảng, ta định dạng dữ liệu theo dạng dữ liệu các cột được phân
cách với nhau bằng dấu phẩy “,”. Xem ví dụ minh họa sau:
Data2CSV.asp
<%
Response.Buffer = True
Response.Clear
‘ thiết lập định dạng sẽ kết xuất là Excel
Response.ContentType = “application/csv”
Response.AddHeader "Content-Disposition", "filename=mydata.csv;"

‘ kết nối với CSDL
strDSN = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="
‘ đường dẫn tương đối đến tập tin CSDL
strDSN = strDSN & Server.MapPath("myDB.mdb")
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDSN
strSQL = “SELECT * FROM myTable”
set rs = Conn.Execute(strSQL)
‘ dòng đầu tiên in tên các cột
For i = 0 to rs.Fields.Count -1
Response.Write rs.Fields(i).name & ",”
Next
Response.Write vbNewLine ‘ kết thúc một dòng dữ liệu

‘ in dữ liệu của từng dòng
Do while not rs.EOF
For i = 0 to rs.Fields.Count –1
Response.Write rs.Fields(i)& “, ”
Next
Response.Write vbNewLine ‘ kết thúc một dòng dữ liệu
rs.MoveNext
Loop
rs.Close
set rs = Nothing
Conn.Close
set Conn = nothing
Response.End
%>
Hạn chế của định dạng này là do dữ liệu chỉ là các kí tự ASCII nên sẽ không dùng được trong
trường hợp dữ liệu sử dụng Unicode, ngoài ra cần phải có cách xử lí thích hợp trong trường hợp dữ
liệu trong các cột có dấu phẩy “,”. Excel xử lí trường hợp này bằng cách thay đặt toàn bộ dữ liệu
trong dấu “”. Ví dụ nếu bạn có dữ liệu là Abc, xyz thì dữ liệu sẽ được đổi thành “Abc, xyz”
Tham khảo thêm tại:
/>
/>

Lê Đình Duy –

HIỂN THỊ HÌNH ẢNH TỪ CƠ SỞ DỮ LIỆU
TRONG CÁC ỨNG DỤNG WEB

Lê Đình Duy
Khoa CNTT – ĐHKHTN Tp.HCM


12.2002

1. Giới thiệu
Việc lưu trữ và hiển thị hình ảnh từ CSDL trong các ứng dụng web là cần thiết. Ví dụ như các ứng dụng
quản lí hồ sơ của nhân viên, ngoài thông tin bằng văn bản như Họ tên, địa chỉ, bằng cấp, … sẽ rất cần thiết
nếu có thêm dữ liệu về ảnh của nhân viên. Hay trong các ứng dụng bán hàng, bên cạnh thông tin về sản
phẩm như Tên sản phẩm, phân loại sản phẩm, giá cả, … hình ảnh trực quan về sản phẩm cũng rất cần thiết
để giúp cho người dùng dễ dàng hơn khi chọn lựa, …
Thông thường người ta dùng một trong hai cách để đạt được mục đích này. Cách thứ nhất là lưu trữ tập tin
hình ảnh trên một thư mục riêng, trong CSDL ngoài dữ liệu văn bản chỉ lưu đường dẫn đến tập tin hình ảnh.
Cách thứ hai là lưu trữ cả dữ liệu hình ảnh và văn bản trong cùng một bản ghi trong CSDL.
Cách tiếp cận thứ nhất thường được dùng hơn vì CSDL có kích thước nhỏ và thao tác hiển thị khá đơn giản
thông qua tag IMG với thuộc tính SRC được gán bằng thông tin về đường dẫn đến tập tin hình ảnh đã có
trong CSDL. Hạn chế của cách tiếp cận này là đòi hỏi dữ liệu ảnh phải được lưu trữ trên webserver hoặc ở
một máy tính nào đó mà webserver có thể truy cập được. Trong các ứng dụng mà cơ sở dữ liệu có thể
được sao lưu nhiều bản để phân tán, “rủi ro” sẽ xảy ra nếu các tập tin hình ảnh không được sao lưu theo
đúng đường dẫn sẵn có.
Cách tiếp cận thứ hai do lưu trữ hình ảnh trong CSDL như là dữ liệu nhị phân nên sẽ dẫn đến hạn chế là
làm cho kích thước của CSDL tăng lên đang kể. Nhưng bù lại, dữ liệu hình ảnh và văn bản ở chung một nơi
nên có thể dùng cho các CSDL được sao lưu nhiều nơi. Để lưu trữ dữ liệu hình ảnh trên các hệ quản trị
CSDL ta phải dùng các kiểu dữ liệu dạng nhị phân cho nó. Ví dụ, trong MS SQL Server là kiểu dữ liệu
image, trong MS Access là kiểu dữ liệu OLE Object.
2. Hiển thị hình ảnh có trong CSDL
Nếu dùng cách tiếp cận thứ nhất, ta sẽ tạo ra trong bảng dữ liệu một trường tên chẳng hạn là IMAGE_URL
để lưu trữ đường dẫn đến tập tin hình ảnh, ví dụ như là: images/id1234.gif. Để hiển thị hình ảnh này trong
trang web, đơn giản chỉ cần dùng tag IMG với thuộc tính SRC được gán bằng dữ liệu trong trường
ImageURL như: Response.Write("<IMG SRC="" & rs("IMAGE_URL") & """>").
Nếu dùng cách tiếp cận thứ hai, ta sẽ tạo ra trong bảng dữ liệu một trường có tên chẳng hạn là
APP_IMGDATA để lưu trữ dữ liệu hình ảnh dưới dạng nhị phân. Sau đó, để hiển thị hình ảnh này lên, ta
thực hiện tuần tự các bước sau:

- Đọc dữ liệu hình ảnh lưu trong ImgData vào recordset.
- Gán thuộc tính ContentType của đối tượng Response tương ứng với định dạng ảnh lưu trữ. Nếu lưu
tập tin dưới dạng .gif, ta đặt Response.ContentType=”image/gif”.
- Sử dụng hàm Response.BinaryWrite để ghi nội dung dữ liệu của hình ảnh ra.
Giả sử ta dùng CSDL là MS Access với tập tin CSDL là DB_USERS được lưu trong thư mục APP_DB, bảng
dữ liệu APP_USERS được dùng để lưu thông tin của người dùng và hình ảnh tương ứng. Đoạn mã sau của
tập tin showimage.asp minh họa các bước trên:
showimage.asp
<%
‘ kết nối với CSDL
strDSN = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="
‘ đường dẫn tương đối đến tập tin CSDL
strDSN = strDSN & Server.MapPath("app_db/db_users.mdb")
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDSN
‘ giả sử cần hiển thị hình ảnh lưu trong bản ghi
‘ có trường APP_USERID bằng vUserID
strSQL = “SELECT * FROM APP_USERS WHERE ”
strSQL = strSQL & “ APP_USERID = ” & vUserID
‘ đọc dữ liệu hình ảnh vào recordset
Set rs = Conn.Execute(strSQL)
‘ gán thuộc tính ContentType là image/gif
Response.ContentType = “image/gif”
‘ ghi dữ liệu hình ảnh ra tập tin chuyển xuống client
Response.BinaryWrite(rs(“APP_IMGDATA”))
rs.close
set rs = nothing
Conn.close
set Conn = nothing
%>

Với đoạn mã trên do ta đã đặt nội dung chuyển xuống cho trình duyệt là image/gif nên không thể vừa cùng
hiển thị dữ liệu văn bản vừa hiển thị hình ảnh được.
3. Tải tập tin ảnh lên CSDL
Để có thể tải các tập tin dữ liệu lên server, thông thường ta dùng các component đã được viết sẵn để hỗ trợ
cho việc này. Một trong các component cung cấp miễn phí là aspSmartUpload
( Hai vấn đề cần lưu ý khi sử dụng các component dạng này là
form trong trang dành cho người dùng nhập phải được đặt thuộc tính ENCTYPE là multipart/form-data và
trang xử lí upload phải dùng đối tượng Form của các component để lấy dữ liệu về thay cho Request.Form.
Với aspSmartUpload ta có thể tải đồng thời nhiều tập tin lên server, thậm chí có thể hạn chế kích thước tập
tin, kiểu tập tin, … sẽ được dùng để tải. Ví dụ sau minh họa việc tải dữ liệu lên CSDL bằng cách dùng tập tin
upload.htm cho phép người dùng chỉ định tập tin cần upload, tập tin upload.asp dùng để lưu dữ liệu tập tin
cần upload vào một trường trong bảng CSDL hoặc lưu thành một tập tin trong thư mục nào đó:
upload.htm
<H1>aspSmartUpload : Sample </H1>
<HR>

<FORM method="POST" action="upload.asp" enctype="multipart/form-data">
<input type="FILE" name ="FILE1" ><br>
<input type="submit" value="Upload">
</FORM>


upload.asp
<%
' tạo đối tượng aspSmartUpload
Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
' upload tập tin
mySmartUpload.Upload
‘ kết nối với CSDL
strDSN = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="

‘ đường dẫn tương đối đến tập tin CSDL
strDSN = strDSN & Server.MapPath("app_db/db_users.mdb")
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDSN

set rs = Server.CreateObject(“ADODB.Recordset”)
set rs.ActiveConnection = Conn
rs.Source = “app_users”
rs.LockType = 3
rs.Open
rs.close
For each file In mySmartUpload.Files
If NOT file.IsMissing then ‘ nếu tập tin tồn tại
rs. AddNew
‘ lưu dưới dạng một field trong CSDL
file.FileToField rs.Fields(“APP_IMGDATA”)
‘ lưu dưới dạng một tập tin trên thư mục của server
‘ với đường dẫn tuyệt đối
file.SaveAs("c:\temp\" & file.FileName)
‘ lưu dưới dạng một tập tin trên thư mục của server
‘ với đường dẫn tương đối so với thư mục webroot
file.SaveAs("dbimages/upload" & file.FileName)
‘…
rs.Update
End if
Next
rs.close
set rs = nothing
Conn.close
set Conn = nothing

%>
4. Kết luận
Bài viết vừa trình bày các hai thao tác cơ bản cho việc quản lí hình ảnh trong cơ sở dữ liệu của các ứng
dụng web. Thao tác thứ nhất liên quan đến đến việc chọn hình thức lưu trữ dữ liệu ảnh, thao tác thứ hai liên
quan đến việc tải các hình ảnh lên server. Lưu trữ dữ liệu ảnh dưới dạng là một trường cơ sở dữ liệu sẽ làm
cho kích thước cơ sở dữ liệu lớn, việc xử lí khá phức tạp nhưng có thuận lợi trong trường hợp ứng dụng
được thiết kế cho việc sử dụng phân tán. Đơn giản và thường được dùng hơn cả là lưu trữ các tập tin hình
ảnh trong một thư mục định trước trên server và lưu trữ đường dẫn đến tập tin này trong cơ sở dữ liệu.

×