09/10/2018, 23:04

Mong các cao thủ ASP chỉ giáo

Chào các bạn, chúc một ngày tốt lành!
Tôi mới học ASP, nhưng việc thiếu thốn tài liệu cũng như sự thiếu chặt chẽ của ASP đang làm tôi thấy nản lòng (hy vọng là nó chặt chẽ!!!)
1)Khi thiết lập kết nối tới cơ sở dữ liệu ta khai báo như sau
dim conn,strconn,rst,SQL
set conn=CreateObject("ADODB.Connection")
set rst=Server.CreateObject("ADODB.Recordset")
Strconn="...."
SQl="...."
Tại sao phải Set conn=... set ở đây là thế nào. Nếu tôi đặt là conn=... thì không được.
Tại sao với chuỗi kết nối cơ sở dữ liệu thì không có set, nếu tôi viết là Set strconn=... thì cũng không được.
2)Ví dụ tôi sử dụng SQL 2000, và tôi có một bảng hscb với trường macb có một record có nội dung là &macb.
Trong trang web tôi viết như sau
<a href="www.abc.com?id=&macb"> thì không hiểu sao khi truyền đến đích thì kết quả lại mất luôn dấu &, nếu không có dấu & thì không sao. Vậy tại sao lại có hiện tượng đó.
3)Khi nào thì dùng Request("txtMacb"), khi nào thì dùng Request.Form("txtMacb"). Chúng có khác gì nhau.
4)Lại còn chỗ này nữa, chỗ này đúng là tính quá không chặt chẽ. Tôi viết window.history.go(-1). Kết quả của nó cũng tương tự history.go(-1). Thế là sao?
5)Đối với một trang html thì "abc" cũng tương tự như 'abc' và cả hai đều là một chuỗi. Nhưng đối với ASP thì "abc" là một chuỗi còn 'abc' là cái gì đây?
6)Nói chung là tôi vẫn còn kiên nhẫn được với ASP khi làm vài trang nho nhỏ nhưng khi định thiết kế thành một ứng dụng thực thụ thì không thể chịu nổi.
6.1. Không có cách để thử nhanh kết quả của đoạn mã của mình, cách mà tôi thực hành là viết, Ctrl+S(lưu), sang internet để thử, rất mất thời gian.
6.2. Đến khi nhúng thêm javascript thì chịu rồi, chẳng hiểu java nó thực hiện thế nào ta chỉ biết là khi sang bên IE nó chạy không như ý muốn, còn mọi biến, mọi câu lệnh chạy ra sao => trời biết đấy. Lập trình mà không có Debug thì nghỉ luôn cho xong. Tiếc là đốt quá nhiều thời gian rồi. Có lẽ đây là vấn đề biên dịch và thông dịch có đúng không?

Mà suy cho cùng thì không học ASP thì học cái gì bây giờ?
squall leonhart viết 01:10 ngày 10/10/2018
Do bạn viết bằng vbscript mà tôi cũng chỉ học sơ về ASP & viết bằng javascript nên biết được cái gì thì nói cái đó thôi.
1. Câu lệnh set conn = Create... của bạn là sai, đúng ra là set conn = Server.Create... mới đúng. Câu lệnh dim -> set là 1 câu khai báo trong vbscript với dim x là 1 lệnh tạo ra 1 biến x, còn set x = ... là gán cho biến x 1 giá trị nào đó. Do x (conn) ở đây là 1 giá trị đặc biệt (Server.CreateObject) nên nó cần phải set, còn strconn chỉ đơn thuần là gán 1 chuỗi connectionstring nào đó mà thôi (strconn = "provider=....") nên ko cần phải set

2. Khi truyền dữ liệu từ trang này sang trang khác trong ASB, các biến được phân cách bằng dấu "&".

3. Request() & Request.Form() & Request.Querystring() gần như ko có sự khác biệt nào. (Tôi dùng Javascript viết thì khi dùng Request() hay Request.Form() kết quả ko thay đổi). Tuy nhiên, Request.Form() & Request.Querystring() khác nhau ở method truyền đi của Form (Get hoặc Post)

4. Javascript có 1 số quy định cho phép bỏ 1 số đối tượng như window, document trong khi 1 số khác thì ko. Còn làm sao biết khi nào bỏ, khi nào ko thì làm nhiều sẽ biết.

5. Tôi cũng ko biết 'abc' là gì vì cho đến giờ chưa thấy ai sử dụng nó.

6. Nếu muốn thử nhanh kết quả mình làm thì bạn đặt các file đã tạo trong 1 thư mục, tạo thư mục ảo cho thư mục đó, sau đó thực thi file đó trên browser.
Nếu khai báo ngôn ngữ <script language=javascript> thì javascript chỉ xử lý kết quả trên client, nên các biến của nó ko tồn tại ngoài trang đã gọi nó.
eh_ici viết 01:15 ngày 10/10/2018
Em có file xemsach.asp truy cập trực tiếp thì nó ra lỗi này:
Error Type:
Provider (0x8002000A)
Out of present range.
/web/code/paging.inc, line 9
File paging.inc kô hề thay đổi gì, kô lỗi.
Nhưng khi thông qua link trong một trang homepage.html thì lại vào được bình thường. Nhưng kô hiển thị font mà lại hiển thị như sau:

Sᣨ h?c C++
Ngôn ngữ: Ti?ng Ph᰼br>Định dạng: doc
Kích thước: 0
Từ khóa: C++ Cpp C
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
76 m?o trong Windows
Ngôn ngữ: Ti?ng Vi?t
Định dạng: pdf
Kích thước: 0
Từ khóa: Windows, m?o v?t, s? d?ng mṠt�
--------------------------------------------------------------------------------

Cᣨ setup BIOS
Ngôn ngữ: Ti?ng Vi?t
Định dạng: doc
Kích thước: 0
Từ khóa: BIOS Setup, c੠d?t
--------------------------------------------------------------------------------

Sau đó đăng nhập vào tài khoản quản trị xong quay lại thì lại hiển thị bình thường :

Sách học C++
Ngôn ngữ: Tiếng Pháp
Định dạng: doc
Kích thước: 0
Từ khóa: C++ Cpp C
--------------------------------------------------------------------------------

76 mẹo trong Windows
Ngôn ngữ: Tiếng Việt
Định dạng: pdf
Kích thước: 0
Từ khóa: Windows, mẹo vặt, sử dụng máy tính
--------------------------------------------------------------------------------

Cách setup BIOS
Ngôn ngữ: Tiếng Việt
Định dạng: doc
Kích thước: 0
Từ khóa: BIOS Setup, cài đặt
--------------------------------------------------------------------------------

Cả hai file themsac.asp và xemsach.asp em đều đã để utf-8:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Khi insert vào CSDL mở ra xem thấy hiển thị bình thường .
Lạ thật. Nghĩa là phải "khởi động" cho Database trước rồi thì nó mới có thể họat động bình thường được ạ???
klasdfe viết 01:20 ngày 10/10/2018
Cám ơn ý kiến của squall leonhart
1. Trang asp của tôi vẫn hoạt động bình thường với câu lệnh
Set conn=CreateObject("ADODB.Connection")
mà không cần phải Server.CreateObject. Đây cũng vẫn là vấn đề mà tôi cũng thắc mắc bởi vì đối với đối tượng Recordset thì bắt buộc phải viết là Set r=Server.CreateObject. Không hiểu lúc nào thì có Server, lúc nào thì không có Server.
2. Nhưng trong trường hợp muốn truyền biến mà nó có chứa dấu & thì sao ? Trong cơ sở dữ liệu vẫn cho phép biến có dấu &, thậm chí cả nếu giá trị của biến có dấu % ở đầu thì cũng mất luôn cả %.
3. Nếu ý nghĩa của chúng là như nhau thì đúng là thiếu chặt chẽ.
6. Ý tôi muốn nói là khi chúng ta muốn làm việc một cách nghiêm túc thì dường như ASP không đáp ứng nổi. Ví dụ đối với các ngôn ngữ lập trình như C, VB, thậm chí là Pascal, tất cả đều có một hệ thống gỡ rối mạnh (Debug). Trong ASP làm sao để Debug đây ? Tôi mới viết được một ít Javascript nhưng chịu không thể kiểm tra nổi là mình làm sai ở chỗ nào. Thế thì sao mà làm nổi một ứng dụng ?

Không biết phải học thằng nào mà nó nghiêm túc hơn đây, chán thằng ASP quá!
chimera viết 01:13 ngày 10/10/2018
To eh_ici:
Bạn thử thêm dòng này vào đầu trang web xem sao
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>

To klasdfe:
1. Mình nghĩ nên viết tường minh trong mọi trường hợp
Set conn = Server.CreateObject("ADODB.Connection")
2. Bạn thử dùng
Server.URLEncode(<tên biến>) khi truyền giá trị bằng URL
Một số ký tự như &, % là ký tự đặc biệt của URL nên phải encode. VD & -> %26
Đây là vấn đề chung của lập trình web chứ không phải chỉ riêng ASP

3.
Request.Form(): khi method của form là POST
Request.QueryString(): khi method của form là GET hay từ lấy giá trị từ URL
Request(): dùng cho cả 2 trường hợp không quan tâm là POST hay GET

ASP có lẽ không hay nhưng không phải là không nghiêm túc đâu. Có lẽ bạn chưa quen lập trình web thôi
eh_ici viết 01:10 ngày 10/10/2018
Mình đã thử rồi nhưng kô được. Báo lỗi:
Error Type:
Active Server Pages, ASP 0141 (0x80004005)
The @ command can only be used once within the Active Server Page.
/web/code/xemsach.asp, line 13

Vì trang này viết = java Script nên bị lỗi.
<%@ language="javascript"%>

<%var strSQL="select * from tblBooks order by id asc";
var owner="xemsach.asp"%>
<!--#include file='paging.inc'-->
<%rs.close();conn.close();%>

Có cách nào hiển thị tiếng Việt khi viết bằng Java Script kô ???

Mình kô thể convert sang VB Script được vì toàn bộ các trang khác đều đã viết bằng Java script rồi mà có rất nhiều thành phần dùng chung với nhau, dùng lẫn lộn bị lỗi ngay lập tức .
Mình xin cảm ơn !
gccom viết 01:10 ngày 10/10/2018
Thật ra các lỗi mà bạn mắc phải là khai báo và truy vần không đúng thôi bạn có thể vào http;//www.kythuatvien.com để tại code N.P.W về tham khảo nhé
Chúc thành công
eh_ici viết 01:19 ngày 10/10/2018
May quá ! Mình đã giải quyết được vấn đề đó rồi. Chỉ cần save file dưới định dạng utf-8 là xong .
Giờ thế này, mình muốn làm một trang thêm sách vào CSDL. CSDL gồm có các trường sau: id/name/lang/format/author/publishing/path/imgpath/keywordss
trong đó path là đường dẫn đến file tài liệu. Đã ổn cả rồi. Nhưng giờ mới thấy là chưa kiểm tra điều kiện để insert. Nghĩa là có thể có 2 bản ghi trùng nhau hoàn toàn mà kô có vấn đề gì. Giờ mình muốn sửa lại, nếu path trùng nhau thì hiện lên thông báo lỗi là "Tài liệu này đã có trong thw viện!" (Thế có ổn kô ạ?? Nếu kô ổn thì nên làm thế nào để kô cho sách trùng nhau được???). Đây là code, mọi người bảo mình nên sửa thế nào bây giờ???

Dây là action khi submit:
<%
if (request.QueryString("act") = "themsach") then
strSQL = "INSERT INTO tblBooks(name,lang,path,format,author,publishing,i mgpath,keywords) values('" & request.Form("Tensach") & "', '" & request.Form("ngonngu") & "','" & request.Form("taifile") & "','" & request.Form("loaifile") & "','" & request.Form("txttg") & "','" & request.Form("txtnxb") & "','" & request.Form("anh") & "','" & request.Form("Tukhoa") & "')"
Set RS = Conn.Execute(strSQL)
set RS = nothing
end if
%>

Còn đây là cái form để submit:


<form action="?act=themsach" method="post" name="form1" onsubmit="if ((document.form1.Tensach.value=='') || (document.form1.anh.value=='')||

(document.form1.taifile.value=='')|| (document.form1.tukhoa.value=='')) {alert('B***7841;n c***7847;n nh***7853;p ***273;***7911; th&#244;ng tin v***7873; s&#225;ch

!!');return false;}">
<table align="center" border="0">
<div align="center">
<center>
<tr>
<h3 align=center>
<font face='times' color="#0000FF">B***7893; sung th&#234;m s&#225;ch m***7899;i v&#224;o th***432; vi***7879;n</font>
</h3>
</tr>
<tr>
<td height="22">Tên sách m***7899;i</td><td height="22">
<input name="Tensach" type="text" id="txtTENSP" size="61" class="form1" maxlength="200"></td>
</tr>
<tr>
<td width="24%" height="21">H&igrave;nh ***7843;nh sách</td><td width="76%" height="21">
<input name="anh" type="text" id="txtHINH0" size="60" class="form1"><a

href="JavaScript:openWindow2('admin_upload2.asp?di r=luutru&win=pop&targetis=anh')">[Upload]</a></td>
</tr>
<tr>
<td height="21">T***7843;i t&#224;i li***7879;u lên</td><td height="21">
<input name="taifile" type="text" id="txtHINH1" size="60" class="form1"><a

href="JavaScript:openWindow2('admin_upload1.asp?di r=luutru&win=pop&targetis=taifile')">[Upload]</a></td>
</tr>
<tr>
<td height="22">Ngôn ng***7919;</td><td height="22">
<select name="ngonngu">
<option selected>Ti***7871;ng Anh </option>
<option>Ti***7871;ng Vi***7879;t</option>
<option>Ti***7871;ng Pháp</option>
<option>Ti***7871;ng Nga</option>
</select>&nbsp; </td>
</tr>
<tr>
<td height="22">Lo***7841;i t&#224;i li***7879;u</td><td height="22">
<select name="loaifile">
<option selected>doc</option>
<option>pdf</option>
<option>chm</option>
<option>ps</option>
<option>txt</option>
<option>rtf</option>
<option>html</option>
</select>&nbsp; </td>
</tr>
<tr>
<td height="21">T&#225;c gi***7843;:</td><td height="21">
<input name="Txttg" type="text" id="txtTENSACH" size="61" class="form1" maxlength="200"></td>
</tr>
<tr>
<td height="21">Nh&#224; xu***7845;t b***7843;n:</td><td height="21">
<input name="Txtnxb" type="text" id="txtTENSACH" size="61" class="form1" maxlength="200"></td>
</tr>
<tr>
<td height="21">T***7915; khoá t&igrave;m ki***7871;m</td><td height="21">
<input name="Tukhoa" type="text" id="txtTENSACH" size="61" class="form1" maxlength="200"></td>
</tr>
<tr>
<td height="41">&nbsp;</td><td height="41">&nbsp;
<input type="submit" name="Submit" value="G***7917;i lên"><td width="456" align="left" bordercolor="#A9A9D3" height="41" bgcolor="#FFFFFF" >
</td>
</td>
</tr>
</center>
</div>
</table>
</form>

Xin cảm ơn mọi người nhiều !!
klasdfe viết 01:12 ngày 10/10/2018
Các bạn ơi, mình muốn viết một ứng dụng web có kết nối cơ sở dữ liệu mà có debug thì dùng ngôn ngữ gì ?
chimera viết 01:06 ngày 10/10/2018
ASP 3.0 có IDE là Visual Studio InterDev hình như có debug theo ý bạn nói đó. Hay là bạn xài ASP.Net đi
Bài liên quan
0