[转载]在ASP中优化数据库处理

2008-02-17

2006-3-2 17:45:37

  ASP是一个Web服务器端的开发环境,它提供了一种简单易学的脚本(VBScript或Jscript),并带有许多内置的对象,从而提供了一条简捷的编程之路。更为重要的是,ASP中提供了ADO对象,让程序员可以轻松操作各种数据库,从而可以产生和运行动态的、交互的Web服务应用程序。
  目前,国内很多电子商务站点都采用了ASP技术来与数据库交互,为用户提供各类服务。
  由于电子商务站点的大部分信息都存放在数据库中,要提高Web的响应速度、建立高性能的电子商务站点,很大一部分取决于ASP与数据库之间的处理性能,本文将具体介绍一些优化数据库处理的方法。
  使用Connection Pool机制
  在数据库处理中,资源花销最大的是建立数据库连接,而且用户还会有一个较长的连接等待时间。若每一个用户访问时,都重新建立连接,不仅用户要长时间等待,而且系统有可能会由于资源消耗过大而停止响应。如果能够重用以前建立的数据库连接,而不是每次访问时都重新建立连接,则可以很好地解决这些问题,从而提高整个系统的性能。在IIS+ASP处理体系中,采用了Connection Pool机制来保证这一点。
  Connection Pool的原理是:IIS+ASP体系中维持了一个连接缓冲池,建立好的数据库连接在ASP程序中的断开都是逻辑断开,而实际的物理连接被存储在池中并被加以维护。这样,当下一个用户访问时,直接从连接缓冲池中取得一个数据库连接,而不需重新连接数据库,因此,可以大大地提高系统的响应速度。

  为了正确使用Connection Pool机制,必须注意以下几点:
  1.在MDAC2.0以前的版本中,必须经过数据库驱动程序的配置才能使用Connection Pool;在以后的版本中(比如MDAC2.1),缺省是使用Connection Pool机制。具体配置情况可以参见微软公司的站点(www.microsoft.com/data/)。顺便提一句,在使用Oracle数据库时,最好使用微软提供的驱动程序。
  2.每次数据库连接串参数必须相同,否则会被认为是不同的连接而重新去连接数据库,而不是使用缓冲池中的连接。最好的做法是将连接串存储在Application变量中,所有的程序在建立连接时使用Application变量的值。
  3.为了更好地使用和维护连接缓冲池,建议在程序中使用以下的方法对数据库连接进行操作,因为隐式使用数据库连接时不能利用缓冲池的机制:
  显式创建连接对象: Set conn=Server.CreateObject(“Adodb.connection”)
  建立数据库连接:conn.open Application(“connection_string”)
  显式关闭连接对象:conn.close

  利用直接的OLE DB驱动程序
  在ASP中,通过ADO可以使用两种方式连接数据库,一种是传统的ODBC方式,一种是OLE DB方式。由于ADO是建立在OLE DB技术上的,为了支持ODBC,必须建立相应的OLE DB到ODBC的调用转换(如MS OLEDB provider for ODBC)。而使用直接的OLE DB方式(如MS OLEDB provider for SQL, Oracle),则不需转换,从而提高处理速度,同时,还能利用OLE DB的新特性。

  在内存中缓存ADO对象或其内容
  通常,在ASP程序中,都会涉及到一些存储在数据库中的常用信息,如省份列表、商品分类等,这些信息对于每一个访问用户都是相同的。若每一个用户访问时,都要去数据库里取出来,然后显示给用户,不仅会使数据库服务器负载加重,无法快速服务于更重要的事务处理,而且Web服务器也必须不停地创建ADO对象,从而消耗大量资源,导致了当用户很多时几乎失去响应。若能把一些常用信息事先存储在内存中,当用户访问时,直接从内存中取出,显示给用户,则可以大大减小系统的压力,提高响应速度。
  比如,我们可以把已经取得了数据的RecordSet对象存储在Application变量中,当用户访问时,从Application变量中取得RecordSet对象,而不需再次建立数据库连接;也可以将RecordSet对象里的数据以其他方式存储,比如存储在数组中,然后再将数组存储在Application变量中,使用时用数组的方式读取。
  需要注意的是,一个对象要存储在Application变量中,线程模式必须是Both;对于不满足该条件的对象,必须以其他方式,比如转换成数组的方式存储在Application变量中,这也是上面所说的将内容存储在数组中的原因。

  使用数字序列
  在ASP程序中,从诸如RecordSet中读取数据时,为了方便,常使用数据库列名的方式进行:
  Response.write rs(“fieldnameN”)
  而很少采用该数据库列名所在的数字序列来读取,即:
  Response.write rs(N)
  其实,为了从RecordSet得到列值,ADO必须将列名转化为数字序列,因此,若直接使用数字序列,则可以提高读取速度。若感觉使用数字序列后,程序可读性不直观,可以采用建立常量的方法,如定义:
  const FIELDNAME1 1
  这样就保证了程序的可读性和读取速度。

  使用数据库过程
  在电子商务站点中,尤其是要进行交易的站点,为了完成交易,可能需要多次查询大量的信息,用于判定是非,然后更新入库。若在编写ASP时,直接在一个程序中作多次数据库操作,不仅IIS要创建很多的ADO对象,消耗大量资源,而且加重了数据库服务器的负担,增大了网络流量。若把多次数据库操作流程定义为一个数据库过程,用如下方式调用:
  connection.execute“{call procedurename(..)}”
  这样可以利用数据库的强大性能,大大减轻Web系统的压力,而且由于页面内容与业务分开,管理维护也变得方便。

  利用数据库的特性
  ADO是一套通用的对象控件,本身没有利用数据库的任何特性。但若在ASP程序编写时,有意识地考虑结合数据库的特性,往往可以有很好的效果。
  比如,Oracle数据库服务器对于执行过的SQL语句,通常都经过了分析优化,并存储在一个SQL内存缓冲区中,当下次同样的SQL语句请求时,直接从内存缓冲区取出执行,不再进行分析优化,从而可以大幅度提高性能。这就要求在ASP程序编写时,尽量使用相同的SQL语句,或者参数化的SQL语句:
  Set cmd=Server.createobject(“adodb.command”)
  cmd.CommandText=”select * from productswheresproductcode=?”

  用时创建用完释放
  在前面也提到过,ADO对象是非常消耗资源的,因此一定要牢牢记住,只在用到ADO对象时才创建,用完后马上释放,程序如下:
  set rs=Server.createobject(“adodb.recordset”)
  ….
  rs.close
  set rs=nothing

  使用优化过的SQL语句
  对于电子商务网站,最主要的就是要保证不论访问用户的多少,系统都要有足够快的响应速度。由于在ASP技术中,ADO对象消耗的资源是非常大的,若一个SQL语句要执行很长的一段时间,对整个资源也将一直占用,使系统没有足够的资源服务于其它用户。因此,尽量使用优化过的SQL语句,减少执行时间。比如,不使用在in语句中包含子查询的语句,充分利用索引。

  只要在我们的电子商务网站的建设中充分考虑到效率问题,并利用上述介绍的解决方法,会极大地提高网站的响应速度。


[转载]ASP与数据库应用

2008-02-17

  一般来说,一个真正的、完整的站点是离不开数据库的,因为实际应用中,需要保存的数据很多,而且这些数据之间往往还有关联,利用数据库来管理这些数据,可以很方便的查询和更新。数据库有很多种,如:Fox 数据库(.dbf)、Access 数据库(.mdb)、Informix、Oracle 和 SQL Server 等等,在这里,我将以 Microsoft Access 数据库为例来说明ASP是如何访问数据库的。
  常用数据库语句
  1.SELECT 语句:命令数据库引擎从数据库里返回信息,作为一组记录。
    2.INSERT INTO 语句:添加一个或多个记录至一个表。
    3.UPDATE 语句:创建更新查询来改变基于特定准则的指定表中的字段值。
    4.DELETE 语句:创建一个删除查询把记录从 FROM 子句列出并符合 WHERE 子句的一个或更多的表中清除。
    5.EXECUTE 语句:用于激活 PROCEDURE(过程)

  用 ASP 来做一个自己的通讯录练练手吧……
  一、建立数据库:
  用 Microsoft Access 建立一个名为 data.mdb 的空数据库,使用设计器创建一个新表。输入以下几个字段:
  字段名称  数据类型  说明      其它
   ID  自动编号  数据标识    字段大小:长整型 新值:递增 索引:有(无重复)
   username  文本    姓名      缺省值
   usermail  文本    E-mail     缺省值
   view    数字    查看次数    字段大小:长整型 默认值:0 索引:无
   indate   时间日期  加入时间    缺省值
  保存为 data.mdb 文件,为了便于说明,只是做了一个比较简单的库。

  二、连接数据库
  方法1:
    Set conn = Server.CreateObject(”ADODB.Connection”)
    conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=”&Server.MapPath(”data.mdb”)
  方法2:
    Set conn = Server.CreateObject(”ADODB.Connection”)
    conn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=”&Server.MapPath(”data.mdb”)
  注意:一个页面中,只要连接一次就可以了,数据库使用完后要及时关闭连接。
    conn.Close
    Set conn = Nothing

  三、添加新记录到数据库
  Set conn = Server.CreateObject(”ADODB.Connection”)
    conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=”&Server.MapPath(”data.mdb”)
  username = “风云突变”
    usermail = “fytb [Email address: fytb #AT# 163.com - replace #AT# with @ ]
    indate = Now()
  sql = “insert into data (username,usermail,indata) values(’”&username&”‘,’”&usermail&”‘,’”&indate&”‘)”
    conn.Execute(sql)
  conn.Close
    Set conn = Nothing
  说明:建立数据库连接;通过表单获取姓名、E-mail 字符串,Now()获取当前时间日期;使用 insert into 语句添加新记录;conn.Execute 来执行;最后关闭。

  四、选择数据库里的记录
  1.选择所有记录的字段(按记录倒序排序):sql = “select * from data order by ID desc”
  2.选择所有记录的姓名和E-mail字段(不排序):sql = “select username,usermail from data”
  3.选择姓名为“风云突变”的所有记录:sql = “select * from data where username=’”风云突变”‘”
  4.选择使用 163 信箱的所有记录(按查看次数排序):sql = “select * from data where usermail like ‘ %”@163.com”%’ order by view desc”
 5.选择最新的10个记录:sql = “select top 10 * from data order by ID desc”
  SQL 语句已经知道了,不过在Web应用时,还得创建一个 RecordSet 对象得到记录集,才能把从数据库里取出的值应用在网页上,如果现在将所有的记录显示在网页上就这样:
  Set conn = Server.CreateObject(”ADODB.Connection”)
  conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=”&Server.MapPath(”data.mdb”)
  sql = “select * from data”
  Set rs = Server.CreateObject(”ADODB.RecordSet”)
  rs.Open sql,conn,1,1

  Do While Not rs.Eof
    Response.Write “姓名:”& rs(”username”) &” E-mail:”& rs(”usermail”) &” 查看:”& rs(”view”) &”次 ”& rs(”indate”) &”加入”
  rs.MoveNext
  Loop
  rs.Close
  Set rs = Nothing
 conn.Close
  Set conn = Nothing
  说明:建立数据库连接;创建 rs 得到记录集;循环显示记录,rs.Eof 表示记录末,rs.MoveNext 表示移到下一个记录;最后关闭。

  五、修改(更新)数据库记录
  修改记录的E-mail:
  Set conn = Server.CreateObject(”ADODB.Connection”)
  conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=”&Server.MapPath(”data.mdb”)
  ID = 1
  usermail = “fytb [Email address: fytb #AT# 163.com - replace #AT# with @ ]
  sql = “update data set usermail=’”&usermail&”‘ where ID=”&CInt(ID)
  conn.Execute(sql)
  conn.Close
  Set conn = Nothing
  说明:建立数据库连接;获取记录ID、新 E-mail 字符串;使用 update 语句修改记录;conn.Execute 来执行;最后关闭。
  如果使记录的查看值加1,则:sql = “update data set view=view+1 where ID=”&CInt(ID)

  六、删除数据库记录
  删除某一条记录:
  Set conn = Server.CreateObject(”ADODB.Connection”)
  conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=”&Server.MapPath(”data.mdb”)
  ID = 1
  sql = “delete from data where ID=”&CInt(ID)
  conn.Execute(sql)
  conn.Close
  Set conn = Nothing
  说明:建立数据库连接;获取记录ID;使用 delete 语句删除记录;conn.Execute 来执行;最后关闭。
  删除多条记录为:sql = “delete from data where ID in (ID1,ID2,ID3)”
  删除所有记录为:sql = “delete from data”


[转载]用ASP编程实现图形计数器

2008-02-17

[转载]用ASP编程实现图形计数器
  许多主页都用到计数器,而且一般使用的都是网上提供的免费的CGI计数器。用人家的计数器总显得不太方便。其实用ASP编写基于数据库的图形计数器非常简单。
  首先用Access 97建立只含有一个字段的数据库aspcount.mdb,负责计数器的访问累加。用ASP对后台数据库进行读写,再根据要显示的数字调用图形文件。具体实现方法如下:
  1.建立计数器数据库结构
  字段:acounts
  数据类型:长整型
  宽度:20
  2.连接odbc数据库源
  在“控制面板”中选择“odbc data source…”,在对话框中选择“system dsn”,单击“add”按钮选择数据库驱动程序“microsoft access driver(*.mdb) 4.0”,在新弹出的对话框中data source name栏里输入“userdbs”,单击“select”按钮选择aspcount.mdb数据库即可。
  3.asp对数据库对象操作的语句
  1)从数据库字段中读取内容:
  set rs=server.createobject(”adodb.recordset”)
  rs.open “select * from aspcount”,”dsn=userdbs”,3,3
  rs.movefirst
  counter=rs(0)
  2)向数据库字段中写入内容:
  rs.open “update aspcount set countss=countss+1″,”dsn=userdbs”,3,3
  4.程序清单
  〈html〉
  〈head〉
  ……
  〈/head〉
  〈body〉
  〈%dim tms,counter,countlen
  dim images(20)
  h1=”〈p〉〈font color=’#8000ff’〉这是一个asp计数器〈/font〉〈/p〉”
  set rs=server.createobject(”adodb.recordset”)
  application.lock
  rs.open “update aspcount set countss=countss+1″,”dsn=userdbs”,3,3
  application.unlock
  set rs=server.createobject(”adodb.recordset”)
  rs.open “select * from aspcount”,”dsn=userdbs”,3,3
  rs.movefirst
  counter=rs(0)
  countlen=len(counter)
  tms=”〈h1〉〈font color=’#8000ff’〉您是第〈/font〉”&&counter&&”〈font color=’#8000ff’〉位访问者!〈/font〉〈/h1〉”
  response.write(tms)
  for i=1 to countlen
 images(i)=”〈img src=” && mid(counter,i,1) && “.gif〉〈/img〉”
  next
  response.write images(1)&&images(2)&&images(3)&&images(4)&&images(5)&&images(6)&&images(7)
  rs.close
  %〉
 〈/body〉
 〈/html〉
  以上程序在Frontpage 2000、Access 97、Windows 98软件环境下运行通过。


[转载]用ASP让用户访问指定页面

2008-02-17

2006-3-2 17:22:26

  一个网站有许多页面,如果用户知道某个页面的链接,可以在浏览器中直接输入url访问它。但这在一个要求有安全性的站点上是不允许的。我们要求用户必须登录以后才能访问各级页面,有时也确实希望用户总是先看到站点的主页。这两种要求可以通过在asp的global.asa中对session对象编程来实现。

  1.用户必须从主页开始浏览

  如果仅希望用户每次上站都先访问站点主页,可以在session的session_onstart事件中加入response.redirect“url”来实现。例如在global.asa中有如下代码:

  sub session—onstart

  response.redirect″netdoctor.yeah.net″

  end sub

  由于用户在访问站点时,一连接就会激发session的onstart事件,所以不管用户在浏览器中输入的是本站点上的何url,都会由于onstart事件中重定向命令的作用而转向指定页面。

  2.必须是经过验证的用户才能浏览

  对于有安全性要求的站点,如果是intranet用户,可以把验证与nt的用户验证结合起来,只要给指定目录设定ntfs用户权限,用户访问时就会自动弹出验证窗口。这种验证不需要使用asp编程实现。

  实际情况是,我们不会把大量的internet用户加入域用户中,一般是用一个数据库来管理用户名和口令,由asp程序把从web页面上取得的用户名和口令到库中进行查找验证。如果一个用户知道站点的目录结构,有可能直接输入某个页面的url,从而避过登录验证界面。这样,登录安全形同虚设。

  如前所述,用户与站点一连接,就会引发一个session—onstart事件,所以我们可以在这里强制它转向登录页面。global.asa中的代码如下:

  sub session—onstart

  response.redirect″login.asp″

  end sub

  3.辨析说明

  朋友们可以注意到,以上两段代码实际上是一样的。但是,对于2中的情况,虽然一访问就转向了登录页面,可是此时session的onstart事件已经结束,如果再输入指定的url,就可以避过安全检测了。

  我现在的解决方法是在每个asp页面前加上下面一段代码,来实现上面的功能:

  〈%

  if session(″userid″)=″″then

  response.redirect″login.asp″

  end if

  %〉

  其中,session变量是在用户通过登录后建立的一个在整个过程中都生效的变量,如在login.asp中,使用以下代码:

  if checkpwdok() then

  session(″userid″)=request(″userid″)

  end if

  不过这种办法对站点的每个页面都要如此处理。对asp页面这么办还可以,对html页面文件就无能为力了。

用ASP为你的站点加密

  正在学习建设web站点的读者,可能正在为站点的安全性而担忧;也许你正在建设一个非公开性网站,只有系统用户才可以访问你的站点。如果你编制的是ASP网页,那么你可以通过本文轻松达到这一目的。

  首先,你需要制作登录页面,在html中加入form,并设为自发送页

  〈form name=″login″action=″default.ASP″method=″post″target=″—top″〉

  action后接本页url,这样即使用户登录错误,在本页即获提示,而无须再返回前一页登录。在表单中加入

  〈input name=″uid″size=″10″maxlength=″10″style=″height: 21px; width: 101px″〉

  〈input name=″pwd″type=″password″size=″10″maxlength=″10″〉

  完成html后,在页首填加程序代码如下:

  〈%′send customer direct to main page if already logged in

  if not isempty(session(″cust—id″)) and len(session(″cust—id″))〉0 then response.redirect(″navigation/dashbrd.ASP″)

  ′在此添入你真正的主页url

  end if

  ′set flags

  blogin = false

  berro* = **lse

  ′check blank entries

  if isempty(request(″uid″)) or len(request(″uid″)) = 0 or isempty(request(″pwd″)) or len(request(″pwd″)) = 0 then

  ′need to log in

  blogin = true

  else

  ′check user credentials against db

  …′检验你的数据库保存密码表中是否有该用户

  ′此处放入连接数据库代码

  ′其sql如下″select*from customerswherescust—id=′″&request(″uid″)&″′and′cust—pwd=′″&request(″pwd″)&″′″

  ′其中request(″uid″)和request(″pwd″)为本页html中表单中的用户名和密码的text

  gbfound = false

  if not rscust.bof and not rscust.eof then

  gbfound = true

  end if

  if gbfound then

  ′record useful customer info in session variables

  session(″cust—id″) = rscust.fields(″cust—id″)

  ′此项为数据库中用户名

  session(″cust—pwd″) = rscust.fields(″cust—pwd″)′此项为数据库中用户密码

  session(″power″) = rscust.fields(″power″)′此项为数据库中用户权限[可选]

  ′update last login time [可选]

  ′rscust.activeconnection.execute (″update customer set cust—login =′″&now&″′where cust_id =″&session(″cust—id″)&″″)

  response.redirect(″navigation/dashbrd.ASP″)′真正主页url

  else

  ′uid and password not found

  berror = true blogin = true

  end if

  rscust.close

  ′close recordset

  mycn—login.close

  set mycn—login=nothing

  ′get all policy numbers held by customer

  end if

  %〉

  最后,你要做的就是在你的每一个页面的开头,加入以下代码:

  〈% if isempty(session(″cust—id″)) or len(trim(session(″cust—id″)) = 0 then %〉

  〈script language=″javascript″runat=client〉

  〈!——

  top.location.href =″../default.ASP″

  //——〉

  〈script〉

  〈% response.end

  end if %〉

  其中,session(″cust—id″)为注册的用户名。

  top.location.href =″../default.ASP″将自动导航到你的登录界面。

  在这样处理之后,恭喜你,你的web站点就有了安全登录的功能。即使别人知道了你的站点的地址,在不进行合法登录的情况下,也无法访问其他网页。并且,在你的网页超时后,需要用户重新登录,这样即便操作者临时离开,也不必担心非法者的恶意操作。

ASP实现简单的网页保护功能

  说到安全,大家肯定会不由自主地想起类似防火墙之类的专业安全保障软件,难到非要有软件才能达到安全防范的目的吗?不,这里我们使用ASP,同样也能实现简单地防范网页安全的功能。下面笔者就举例来说明如何实现一个简单的页面安全防范功能,此页面只允许本单位内部网的用户访问,如果是单位外部用户进行访问则要求输入访问密码。

  在此主要使用request对象的ServerVariables属性,通过它来获得环境变量的值。使
用的语法为:Request.ServerVariables(variable),“variable”表示环境变量的名称,如服务器主机名称、WEB服务器软件名等等,若“variable”为“REMOTE_ADDR”则表示访问者的IP地址,通过它就可以实现IP地址的过滤。

  源程序如下:(文件名:demo.asp)

  <html>
  <head>
  <meta http-equiv=“Content-Type” content=“text/html; charset=gb_2312-80”>
  <meta name=“GENERATOR” content=“Microsoft FrontPage Express 2.0”>

  <style>
  <!--
  .as{ line-height: 15px; font-size: 9pt }
  a:hover {color: rgb(0,51,240);text-decoration:underline}
  .p9 { font-family: “宋体”; font-size: 9pt; line-height: 15pt}
  .p12 { font-family: “宋体”; font-size: 12pt; line-height: 18pt}
  a:link { text-decoration: none;}
  a:visited { text-decoration:none;}
  a:hover {text-decoration: underline;font-size: 125%;color:blue}
  -->
  </style>

  <title>ASP页面防火墙功能演示</title>
  </head>

  <body background=“back.jpg”>
  <%
  ′使用Request.ServerVariables(“REMOTE_ADDR”)得到IP地址并保存在变量rip中
  rip=Request.ServerVariables(“REMOTE_ADDR”)
  strip=cstr(rip)
  ′取得IP地址第三个段的值并保存到strip中

  for i=1 to 2
  strip=right(strip,len(strip)-instr(1,strip,“.”))
  next

  strip=left(strip,instr(1,strip,“.”)-1)
  ′IP地址有效性检验及密码验证,包括两方面的内容:
  ′如果IP地址符合则通过验证;如果IP地址不符合则检验输入的密码是否正确(此处密码为“asp”)
  if (left(rip,5) <> “127.1” or strip<“1” or strip>“50”) and request(“Passwd”)<>“asp” then
  %>
  <p><font color=“#FF0000”>对不起,你的IP是<%=rip%>,本页面可以访问的IP是127.1.1.*到127.1.50.*之间,如果你是本单位内部网的用户,请确认你的浏览器没有使用代理!<BR></font></p>

  <form action=“demo.asp” method=“POST” id=form1 name=form1>
  <p>请输入访问密码:<input type=“password” name=“Passwd” > <input type=“submit” value=“确认” name=“B1”>;
  </p>
  </form>

  <%else %>
  ′合法用户可以访问的页面,在此可以加入任何信息
  祝贺您,您已经顺利通过了页面的安全认证,可以直接使用本站点的资源!
  <%end if%>
  </body>
  </html>

  实际使用只要稍微修改上面的程序(如IP地址等信息)就可以了,当然这只是在一个页面中实现了安全防范功能,如果一个网站有多个页面的话,可以设置一个session变量来对用户进行标志,以在后面的页面中进行判断。

  上面只是ASP的一个很简单的应用,其实使用ASP可以实现许多动态或者其他交互形式的功能,如果您想详细了解ASP的用法,可以到具体的ASP网站上去参考相关内容。


[转载]利用ASP打造个性化论坛

2008-02-17

2006-3-2 17:0:21

前言:现在网上的论坛到处都有,但不知您是否遇到过这样的情况:在杂乱无章的讨论信息中来寻找自己想要的内容,是一件很费费时费力的事情,到后来,您就都不想去看什么论坛了。那么我们能不能对自己网站论坛的内容增加审核功能呢?即所有网友发到论坛的文章,并不立即被显示出来,必须经过站长或者版主审阅之后,认为有价值,有必要推荐给其它网友的,就发表出来。否则就删掉了,免得浪费空间,搞得有点像精华区的意味,这样你的论坛比起一般的论坛来,能够提供给为明确有益的内容。放到你的网站上,应该能够吸引更多的网友来访问。这个设想当然可以实现,下面我就简单介绍如何制作。
  注:由于本文适用于对ACCESS数据库、HTML、ASP有一定了解的读者。
  一、论坛结构分析
  通过上面的功能需求分析,我们可以将论坛的制作分为四大部分:
  (1) 网友注册和管理模块:因为引入了站长或者版主,在论坛中就必须能够对其进行身份验证。这个模块的功能,就是管理注册的网友,并能够提供相关的查询。比如,查询指定作者的所有发表的文章,查询当前发表文章最多的十个网友,等等。如果你的论坛不是很大,这个模块可以省略为只带有版主身份验证的功能,而去掉那些关于注册,查询的部分。
  (2) 文章显示模块:显示所有版主审核过的,觉得值得推荐的文章。
  (3) 发表文章模块:为注册网友提供发表见地的地方,发表后等待版主审阅。
  (4) 文章审阅模块:版主对所有网又发表但未经审阅的文章进行处理,已决定是发表还是删除。
  了解了具体的功能需求后,就可以按模块的开始论坛的设计了。当然,这些模块的只是在功能上对论坛结构的划分,实际上并不能够完全的把他们独立出来进行设计。对于这种较小的应用,也没有必要进行完全的模块化设计,在良好的规划下直接写程序代码或许来的更为简单一些。
 对于论坛实现起来有一般两种方法:用文件或者数据库。相对而言,用数据库要简单高效一些,能够对论坛进行更好的控制,也能够对资料提供一些验证和保护。这儿我使用的是ACCESS数据库,对于一般的中小型的应用,ACCESS应该是能够胜任的。
 从上面的分析可以知道应该有四个表,下面我给出每个表的结构。
  (1)作者表(用来存放作者讯息):
  ID:文本类型,必填。是网友代号。
  密码:文本类型,必填。
  昵称:文本类型,必填。
  EMAIL:文本类型,必填。
  职务:数字类型,必填。-1代表普通网友,0代表站长。大于0的数字代表版主,并且号码是相应的看板表中某个板的ID,表示是那个板的版主。
 文章数:数字类型,必填。网友发表的文章总数。
  姓名:文本类型,可选。
  性别:文本类型,可选。
  电话:文本类型,可选。
  (2)内容表(用来存放具体文章内容和相关讯息):
  ID:自动编号,并为其设置索引,以加快搜寻的速度。
  看板ID:数字类型,来自看板列表,表示文章所属看板。
  主题ID:数字类型,来自主题表,表示文章所属主题。
  作者ID:文本类型,来自作者表,表示文章的作者。
  日期:日期/时间类型,预置初值为函数NOW(),系统在添加这一条字段时,将自动取系统当前时间为其值。
  标题:文本类型。文章的标题。
  发表:是/否类型,为”真”时表示文章已经通过审阅,可以发表;为”否”表示文章尚待审阅。
  推荐度:数字类型,文章的推荐程度。
  内容:备注类型,文章的具体内容。
  点击次数:数字类型,文章的点击次数。
  (3)看板列表(用来存放有关看板的讯息):
  ID:自动编号,同样的,也为其设置了索引。
  名称:文本类型,看板的名称。
  板主:文本类型,看板版主的ID。
  主题数:数字类型,看板中包含的主题数。
  (4)主题表(用来存放有关主题的讯息):
  ID:自动编号,并为其设置索引。
  标题:文本类型,表示主题名。
 看板:数字类型,来自看板列表,表示主题所属的看板。
  文章数:数字类型,主题中包含的文章数。
  所有的表是设计完了,但是数据库的设计并没有完,所以我们还需要建立表间关系,这样就能够让数据库执行一些相关性检查,避免资料出错。建立表间关系的另外的一个好处,就是通过它能够很容易的建立出复杂的JOIN查询。
  通常我们在ASP中操作数据库的时候,都是使用的执行时生成的查询,然后由传递给数据库解释执行。而在这儿我们要用的是存贮查询。与执行时查询比较而言,预存程序具有更多的优点。
  它保存在数据库中,独立于ASP程序代码,使得他更容易建立和修改,并且查询的效率更高,速度更快,可以调试好了以后再放在ASP页面中使用,能避免很多问题。而且使用存贮查询的ASP程序代码更加容易阅读和修改。可能大家都对在ASP中使用SQL查询感到很烦,特别是那些逗号啊,分号啊什么的,一不小心就会出错。使用存贮查询后,就可以不用顾虑这些问题了。当然,预存程序再使用上也有一些要注意的地方,在后面我会详细的讲解它的使用方法。在ACCESS中建立预存程序是一件很容易的事,这儿我就不再多说了。在这儿我只给出各个查询的SQL语句程序代码。
  我把所有要使用到的查询都作为预存程序保存在了数据库中,主要的有以下的一些:
  (1)按ID查询文章:
  SELECT 主题表.标题 AS 主题名, 看板列表.名称 AS 看板名, 内容表.*
  FROM 主题表 INNER JOIN (内容表 INNER JOIN 看板列表 ON 内容表.看板ID = 看板列表.ID) ON 主题表.ID = 内容表.主题ID
  WHERE (((内容表.ID)=[articleid]));
  (2)版主密码查询:
  SELECT 看板列表.板主, 作者表.密码
  FROM 作者表 INNER JOIN 看板列表 ON 作者表.ID = 看板列表.板主
  WHERE (((看板列表.ID)=[id];
  (3)查询作者:
  SELECT 作者表.*
  FROM 作者表
  WHERE (((作者表.ID)=[id]));
  (4)发表文章列表:
  SELECT [内容表].[ID], [内容表].[标题], [内容表].[作者ID] AS 作者, [内容表].[日期], [内容表].[推荐度], [内容表].[点击次数] AS 点击数。
  FROM 内容表
  WHERE ((([内容表].[主题ID])=[TopicIndex]) And (([内容表].[发表])=True));
  未发表文章列表:
  SELECT 内容表.ID AS 文章id, 主题表.ID AS 主题id, 主题表.标题 AS 主题, 内容表.标题 AS 标题, 内容表.作者ID AS 作者, 内容表.日期 AS 日期
  FROM 主题表 INNER JOIN 内容表 ON 主题表.ID = 内容表.主题ID
  WHERE (((内容表.发表)=False) AND ((内容表.看板ID)=[boardid]));
  (5)主题列表:
  SELECT 主题表.*, 看板列表.名称 AS 看板名
  FROM 看板列表 INNER JOIN 主题表 ON 看板列表.ID = 主题表.看板
  WHERE (((主题表.看板)=[boardIndex]));
  还有一些查询,因为大多类同,我就不一一列出了。
  在上面的查询语句中,可以看到一些由”["和"]“包围起来的东西,那就是查询参数了。需要在执行时给出参数值,然后把参数值带入到查询语句中才能够执行。还有一点要注意的是:在建立那些INNER JOIN查询时,是需要把表间关系添加到设计视图中的,否则是不能够自动生成INNER JOIN查询语句的。
  到这儿,数据库的设计就算完了,以后的工作就是ASP的事了。

二、构建
  1、构建主窗体
  先要给出一个窗体,能够让网友输入注册讯息,这些是HTML的内容,且放在一边,我们来仔细看看具体实现注册的ASP脚本。
  (1)将资料中的单引号改成两个单引号,并且在前后加上单引号
  Function SqlStr( data )
  SqlStr = “‘” & Replace( data,”‘”, “”” ) & “‘”
  End Function
  注:这是一个自定义的函数,用来把用户输入中的单引号(’)转换成两个单引号(”)。在ASP中,用双引号围着的是字符串,因而上面的”‘”代表的就是只有一个单引号的字符串。之所以要把一个单引号换成两个单引号,这是因为在SQL语句中,用单引号围起来是用来代表变量的。为了不至于混淆,就要把字符串中的单引号用两个单引号来表示。而所有的用户输入都要作为变量嵌入到SQL语句中的,所以这个函数是必不可少的。
  (2)存贮准备
  id=Request(”id”)
  password=Request(”password”)
  nickname=Request(”nickname”)
  email=Request(”email”)
  ***=request(”***”)
  注:把来自用户输入窗体中的内容保存在变量中,这不是必须的,但写了更容易读写。
  if Request(”name”)=”"then name=” ” else name=request(”name”)
  if Request(”phone”)=”"then phone=” ” else phone=request(”phone”)
  因为这些内容不是必须填的,为了防止用户没有输入任何内容,而造成数据库操作上的错误,就必须把没有填入字段用空格来代替。
  (3)建立连接
  Set conn = Server.CreateObject(”ADODB.Connection”)
  conn.Open “driver={Microsoft AccessDriver (*.mdb)};dbq=” & Server.MapPath(”bbssystem.mdb”)
  注:这一段是建立数据库连接,数据库的名称为bbssystem.mdb,这一段中唯一要注意的是Server.MapPath函数的应用。一般来说,凡是涉及到具体的目录的地方,都不要直接使用目录名,而用Server.MapPath函数来代替。善用好Server.MapPath和Request.ServerVariables()等函数,能够让你的WEB应用具有更好的可移植性。
  Set cmd = Server.CreateObject(”ADODB.Command”)
  (4)查询作者是否已存在
  Set cmd.ActiveConnection = conn
  cmd.CommandText = “查询作者”
  ReDim param(0) ‘ 声明参数数组
  param(0) = CStr(id) ‘ Cint 不可忽略
  Set rs = cmd.Execute( ,param )
  注:这一段就是用来执行预存程序的。在ADO中执行查询的方法有很多种,但是对于预存程序就只能使用Command对象了。首先,建立了一个叫做cmd的Command对象,然后把conn连接对象设定给cmd对象的ActiveConnection属性,把要执行的查询名称”查询作者”设定给CommandText属性,然后为查询参数赋值。我们声明了一个参数数组param(0),因为在”查询作者”这个查询中只有一个参数,所以数组就只有一个分量了。一般的,在查询中有几个参数,就要申明有相应分量个数的参数数组。并且参数出现的顺序是个数组中分量的顺序是对应的。在使用参数查询的过程中,尤其要注意的是,参数的类型要严格匹配,否这就会出错,所以上面的CStr()类型转换函数是不可缺少的。
  if not (rs.eof or rs.bof) then
  response.write “错误,你输入的ID号已经被占用,请换一个再试试!”
  else
  sql = “Insertsintos作者表 (id, 昵称,Email, 密码,姓名,学校,系别,性别,电话) Values(”
  sql = sql & SqlStr(id) & “,”
  sql = sql & SqlStr(nickname) & “,”
  sql = sql & SqlStr(email) & “,”
  sql = sql & SqlStr(password) & “,”
  sql = sql & SqlStr(name) & “,&”, ”
  sql = sql & SqlStr(***) & “,”
  sql = sql & SqlStr(phone) & “)”
  conn.Execute sql
  使用一个SQL的Insert语句把资料插入到数据库中。其实这一查询也可以做成预存程序放在数据库中,我偷了点懒:-)不过对比之下也可以看到预存程序的好处,执行时查询写起来实在是太麻烦了。
  2、构建文章显示模块
  前面说过,一片具体的文章是分属在看板和主体之下的。因此显示文章也要经过看板列表和主体列表这两页面后,才能得到特定主题下文章的列表。
  (1)板列表的显示页面:
  
  
  
  
  
  
  注:简单的SQL查询,把所有的看板有关讯息传回到纪录集RS中。下面的任务就是显示纪录记得内容,并在相应的看板名称上建立显示看板主题的连接。
  
  

看板列表

  

  
  

  

  

  

  

  注:这儿一部分是显示出表格中每一列的标题,这儿我没有用一个统一的函数来显示RS纪录记的内容,因为这样可以对表格的外观和风格做更多的控制,使用起来虽然有点麻烦,但是却更为灵活。
  <%
  do
  boardid=rs(”id”)
  boardname=rs(”名称”)
  boardmanager=rs(”板主”)
  response.write “


  注:这一行是重点,当点击了各个板的名称后,可以连接到显示看板主题的页面。程序代码看起来有点麻烦,我分解了给你讲,你就会明白了。在点击之后,浏览器请求使用的是qBoard.asp页面,并带有一个参数boardid,代表要显示看板的ID号,在请求页面和参数之间用问号(?)分隔。Boardid是前面设定了的变量,其中包含的就是对应看板的ID号。这个连接中还带有另外一个参数boardname,用来把看板名称传递给qBoard.asp页面。在多个参数间使用”&”来分隔。这个参数不是必须的,传递过去是为了免得在qBorad.asp中再次用boardid来查询看板名称。一般来说,能够少用数据库操作就应当尽量的少用,这样可以提高ASP页面的性能。因为Response.Write语句使用字符串作为参数的,所以上面的字符串和变量之间使用的是”&”联结符。最后ASP页面解释的结果应该是像这样的
  


  response.write “


  response.write “


  注:在这个表中,除了可以由连接来显示看板主题的内容,还有一个斑竹查询部分和板务处理部分,版主查询可以是通过qAuthor.asp来实现的,它只是简单的从数据库中取出作者讯息,并显示出来,这儿就不多说了。而板务处理是由managerlogin.asp页面来处理的。这属于文章审阅模块,我在后面再详说。
  rs.movenext
  loop until rs.eof
  %>
  注:通过一个do … loop循环,把纪录集中所有的讯息都显示了出来。
  

看板名称 板主 主题数 板主登陆
” & boardname &” 系统板
  response.write “
” &boardmanager & “ ” &rs(”主题数”) & “ 板务处理

  

  点击看板名称可以得到主题列表,点击板主名称可以察看板主讯息

  
  
  
 (3)打造qBaord.asp页面:
  
  
  
  
  
  
  
  

板主题列表

  

  
  

  

  

  <%
  do
  topicid=rs(”id”)
  topicname=rs(”标题”)
  sum=rs(”文章数”)
  response.write “


  response.write “


  rs.movenext
  loop until rs.eof
  %>
  

主题 文章数
” & topicname &” ” &sum & “

  
  
  注:qBoard.asp列出了某个版面下的所有的主题,在点击了主题名称后就会进入相应的主题文章列表。这个列表的是由qTopic.asp这个ASP脚本来实现的。Qtopic.asp的程序代码在本质上几乎和qBoard.asp没有区别,只是在各自的细节上有所区别,这儿也不打算再多讲了。
  (4)在点击了文章列表中的文章标题后,会进入文章内容浏览页article.asp:
  <%
  articleid=request(”articleid”)
  Set conn = Server.CreateObject(”ADODB.Connection”)
  conn.Open “driver={Microsoft AccessDriver(*.mdb)};dbq=” & Server.MapPath(”bbssystem.mdb”)
  Set cmd = Server.CreateObject(”ADODB.Command”)
  Set cmd.ActiveConnection = conn
  cmd.CommandText = “按id查询文章”
  ReDim param(0) ‘ 声明
  param(0) = CLng(articleid) ‘ Cint 不可忽略
  Set rs = cmd.Execute( ,param )
  author=rs(”作者id”)
  title=rs(”标题”)
  data=rs(”日期”)
  rate=rs(”推荐度”)
  boardid=rs(”看板id”)
  topicid=rs(”主题id”)
  boardname=rs(”看板名”)
  topicname=rs(”主题名”)
  content=rs(”内容”)
  content=replace(content,vbCrlf,”

“)
  content=”

” & content& “


  注:这是一个要注意的地方,在内容字段中包含的是备忘类型的文本,其中可以包含换行字符。在HTML的显示中,必须要把换行字符(也就是vbCrlf常数)换成HTML的段落符号。这样在段落与段落的衔接处,就不会打乱原来输入时的格式。如果要设计的更好些,可以通过CSS来复位义

标签,设定其test-indent属性,就可以实现每段开头空格了。
  (5)把点击次数加一
  sql=”Update 内容表 Set 点击次数=点击次数+1Where ID=” & articleid
  conn.execute sql
  注:这儿有一个SQL语句,没当页面被显示的时候,会把相应的表中点击次数字段加一,这样就能够对文章浏览的次数做出统计,并可按顺序排名。在执行条语句的时候,我发现:本来在SQL语句中,嵌入的变量名应该加上单引号以与区别,但在这儿的articleid变量上我并没有加单引号,居然也能够通过,而我以前这样写从来都是会引发错误的,不知是不是由于新版本的ADO的缘故。
  set cmd=nothing
  %>
  
  
  
  
  
  
  

  
  

  

  

  

  

  

  

  

  

  

  

  

作者:<a href=”qauthor.asp?author=”> 发表日期:
  看板:<a href=”qboard.asp?boardid=”>板主推荐:#rate#
标题:
  主题:<a href=”qtopic.asp?topicid=”>
  

 文章内容:
  
  
  
  
  
  
  
  

  

  这个连接允许网友对此评论的话题发表自己的见解,这是下一个模块要讲的内容了,这儿且按下不表。
  

  

关于此话题<a href=”submit.asp?topicid=&boardid=”>发表评论

  

  
  
  
  到此,文章显示部分也完成了。下面再来看看文章发表部分是如何实现的。
  3、构建文章发表部分
  文章发表模块只有两个页面,一个是前面提到的用来提供输入窗体的submit.asp,还有一个是用来处理窗体输入的subresult.asp。前面的那个页面很简单,基本上就是一个HTML窗体,没有什么好讲的,下面来看看subresult.asp的内容:
  
  
  
  
  
  
  <%
 author=request(”author”)
  password=request(”password”)
  topicid=request(”topicid”)
  boardid=request(”boardid”)
  content=request(”content”)
  title=request(”title”)
  注:这一段取出在submit.asp中提交的表但内容,放在相应的变量中。
  
  
  
  
  
  
  
  

文章已经被发送到数据库,当板主审阅后就可以看到了

  
  
  到这儿,文章已经被保存在数据库中了。但是,它并不能够立刻被显示出来,还需要版主的认可才行。下面,就来看看论坛的管理部分的内容。
  4、论坛的管理部分
  这儿是我们这个论坛的核心之所在,但它实现起来也没有什么特别的地方。还是那些老东西:窗体处理,数据库查询,在用ASP把他们有机的结合起来。当进入了文章审阅模式(前面提到的板务处理)之后,最为首要的内容,应该是对版主的身份进行验证了。下面来看看版主登陆页面:
  
  
  
  
  
  
  
  

只有板主才能够进入这个地方

  

请输入验证密码, 并且为了保持身份验证,请打开浏览器的Cookies。

  

  
  <input type=”hidden” name=”boardid”value=>
  
  

  注:这个页面仅仅是用来登陆用的,它得到斑竹输入的密码后,并不能进行验证,而是将验证的工作放到下一个页面中进行。实际上,密码输入和验证的工作是可以放在一个页面中完成的,只不过程序代码的结构安排上有点麻烦。
  
  
  
  现在得到了版主ID和输入的密码,下面就是进行验证的工作managerloginrest.asp了,它接受上面那个文件中窗体的内容,并进行相关处理:
  <%
  response.buffer=true
  注:把缓冲区设置为允许使用。这一条一般来说,是应该加在每个ASP页面的首部的,这样能够提高ASP页面的性能。在打开了缓冲区后,ASP中还有一些相应的特殊用法,在后面会提及。
  boardid=request(”boardid”)
  password=request(”password”)
  Set conn = Server.CreateObject(”ADODB.Connection”)
  conn.Open “driver={Microsoft AccessDriver (*.mdb)};dbq=” & Server.MapPath(”bbssystem.mdb”)
  Set cmd = Server.CreateObject(”ADODB.Command”)
  Set cmd.ActiveConnection = conn
  cmd.CommandText = “板主密码查询”
  ReDim param(0) ‘ 声明
  param(0) = CLng(boardid)//注:CLng不可忽略
  Set rs = cmd.Execute( ,param )
  boardmanager=rs(”板主”)
  if password rs(”密码”)then %>
 
  
  
  
  
  
  密码错误
  
  
  
  注:下面就是在上面身份验证通过后复位向的目标:boardmanager.asp。它将列出了所有别有被处理的文章。
  <%
  boardid=request(”boardid”)
  if session(”beenthere”)boardidthen response.redirect “forums.asp”
  注:这就是检验版主身份的地方,因为前面已经通过cookie在斑竹的浏览器中作了标记,现在我们就能够通过seesion来辨认版主的身份了。如果标示不符,就会通过response.redirect返回到最开始的登陆页面。如果版主浏览器的cookie没有打开,那么seesion(”beenthere”)的值会为空,同样也无法进入这个页面。
  Set conn = Server.CreateObject(”ADODB.Connection”)
  conn.Open “driver={Microsoft AccessDriver (*.mdb)};dbq=” & Server.MapPath(”bbssystem.mdb”)
  Set cmd = Server.CreateObject(”ADODB.Command”)
  Set cmd.ActiveConnection = conn
  sql=”select 名称 from 看板列表 whereid=” & boardid
  set rs=conn.execute(sql)
  boardname=rs(”名称”)
  cmd.commandtext=”未发表文章列表”
  ReDim param(0)
  param(0) = CLng(boardid)//注:Clng 不可忽略
  Set rs = cmd.Execute( ,param )
  set cmd=nothing
  %>
  
  
  
  
  
  
  

版务管理

  


  <%
  if rs.eof or rs.bof then response.write “

现在没有文章要处理


  response.end
  %>
  注:如果没有新文章被网友发布,这给出相应的提示,并用response.end来结束此页的显示。
  

  
  

  

  

  

  

  <%
  do
  topicid=rs(”主题id”)
  articleid=rs(”文章id”)
  data=rs(”日期”)
  datastr=cstr(year(data)) & “-”& cstr(month(data)) &”-”& cstr(day(data))
  author=rs(”作者”)
 articlename=rs(”标题”)
  topicname=rs(”主题”)
  response.write “


  response.write “


  response.write “


  response.write “


 rs.movenext
  loop until rs.eof
  %>
  

主题 文章标题 作者 日期
” & topicname &” ” &articlename & “ ” & author& “ ” &datastr & “

  
  
  
  当点击了相应文章的联结后,就进入此文章的处理页面managearticle.asp:
  <%
 articleid=request(”articleid”)
  boardid=request(”boardid”)
  if session(”beenthere”)boardidthen response.redirect “forums.asp”
  Set conn = Server.CreateObject(”ADODB.Connection”)
  conn.Open “driver={Microsoft AccessDriver (*.mdb)};dbq=” & Server.MapPath(”bbssystem.mdb”)
  Set cmd = Server.CreateObject(”ADODB.Command”)
  Set cmd.ActiveConnection = conn
  cmd.CommandText = “按id查询文章”
  ReDim param(0)
  param(0) = CLng(articleid)//注:Clng 不可忽略
  Set rs = cmd.Execute( ,param )
  author=rs(”作者id”)
  title=rs(”标题”)
  data=rs(”日期”)
  rate=rs(”推荐度”)
  boardid=rs(”看板id”)
  topicid=rs(”主题id”)
  boardname=rs(”看板名”)
  topicname=rs(”主题名”)
  content=rs(”内容”)
  content=replace(content,vbCrlf,”

“)
  content=”

” & content& “


  set cmd=nothing
  %>
  
  
  
  
  
  
  

  
  

  

  

  

  

 

  

  

  

  
 

  

  

  

作者:<a href=”qauthor.asp?author=”> 发表日期:
  看板:<a href=”qboard.asp?boardid=”>板主推荐:#rate#
标题:
  主题:<a href=”qtopic.asp?topicid=”>
  

  文章内容:
  
  
  
  

  
 
  
  

  

  

  

  

  

  

  
  <input type=”hidden” name=”boardid”value=”">
  <input type=”hidden” name=”topicid”value=”">
  <input type=”hidden” name=”articleid”value=”">
  文章处理:

  

删除:
  
  
发表:
  
  推荐等级
  
  1
  2
  3
  4
  5
  
  
以后再处理:
  
  
  
  

  

  
  
  
  注:这一页和文章显示模块中的article.asp基本上是一样的,仅仅是多加入了版主处理的窗体,在这儿就不多讲了。

  下面,要根据版主的处理过程,修该数据库相应部分
  
  
  
  
  
  
  
  <%
  articleid=request(”articleid”)
  boardid=request(”boardid”)
  topicid=request(”topicid”)
  manage=request(”manage”)
  ’接受窗体内容
  response.write manage ‘显示斑竹ID
  if session(”beenthere”)boardidthen response.redirect “forums.asp”
  Set conn = Server.CreateObject(”ADODB.Connection”)
  conn.Open “driver={Microsoft AccessDriver (*.mdb)};dbq=” & Server.MapPath(”bbssystem.mdb”)
  根据上页中版主的操作,下面进行相应的处理。
  if CLng(request(”manage”))=1 then
  sql=”delete from 内容表 where id=”& articleid
  conn.execute sql
  response.write “

文章已经被删除


  response.write “back
  elseif CLng(request(”manage”))=2then
  sql=”update 内容表 set 发表=true whereid=” & articleid
  conn.execute sql
  sql=”update 主题表 set 文章数=文章数+1where id=” & topicid
  conn.execute sql
  response.write “

文章已经发表


  response.write “back
  else
  response.clear
  response.redirect “boardmanager.asp?boardid=”& boarded
 end if
  %>
  
  
  
  经过上面几步,所有的部分就算是基本完成了,当然,这时还不能拿来用,摆不上台面的。如果想要能够拿得出来的话,还要在版面设计,客户端资料验证等方面多下一些功夫。不过那都是HTML的内容了,和ASP没多大的关系,这儿我就不多讲了。


[转载]网站设计的思考

2008-02-17

2006-2-28 16:0:12

确定网站的栏目和版块
经验告诉我们,建立一个网站好比写一篇文章,首先要拟好提纲,文章才能主题明确,层次清晰;也好比造一座高楼,首先要设计好框架图纸,才能使楼房结构合理。

  初学者,最容易犯的错误就是:确定题材后立刻开始制作。当你一页一页制作完毕后才发现:网站结构不清晰,目录庞杂,内容东一块西一块。结果不但浏览者看得糊涂,自己扩充和维护网站也相当困难,您的网站或许就此半途而废,更糟糕的是:你因此失去了制作主页的信心和兴趣!

  所以,我们在动手制作网页前,一定要考虑好以下三方面:
1.确定栏目和版块;
2.确定网站的目录结构和链接结构
3.确定网站的整体风格创意设计

  今天我们首先来讨论“确定网站的栏目和版块”。

  网站的题材确定后,相信你已经收集和****了许多相关的资料内容。你一定认为这些都是最好的,肯定能吸引网友们来浏览网站。但是你有没有将最好的,最吸引人的内容放在最突出的位置呢?有没有让好东西在版面分布上占绝对优势呢?

  我看见许多个人主页的栏目(主菜单)并不是这样的。举个例子:有一个以提供动画素材为主题的站点,它的主栏目是:关于站长,本站导航,动画宝库,本站论坛,本站留言本,联系站长。首页上写着本站网址和版权申明(居然还有将本站设为首页字样)。最主要的,最吸引人的动画素材在主栏目里占1/6,在首页上一字没提。我想即使这个站点的确有大量的,精美的动画素材,也很难吸引浏览者继续挖掘。

  栏目的实质是一个网站的大纲索引,索引应该将网站的主体明确显示出来。在制定栏目的时候,要仔细考虑,合理安排。一般的网站栏目安排要注意以下几方面:

  1.一定记住要紧扣你的主题!
一般的做法是:将你的主题按一定的方法分类并将它们作为网站的主栏目。例如上面的例子,可以将栏目分为动物动画,标志动画,三维动画,卡通动画等,在首页上标明最近更新的动画。记住:主题栏目个数在总栏目中要占绝对优势,这样的网站显的专业,主题突出,容易给人留下深刻印象。

2.设一个最近更新或网站指南栏目
  如果你的首页没有安排版面放置最近更新内容信息,就有必要设立一个“最近更新”的栏目。这样做是为了照顾常来的访客,让你的主页更有人性化。

  如果你的主页内容庞大(超过15MB),层次较多,而又没有站内的搜索引擎,建议您设置“本站指南”栏目。可以帮助初访者快速找到他们想要的内容。

  3.设定一个可以双向交流的栏目
  不需要很多,但一定要有。比如论坛,留言本,邮件列表等,可以让浏览者留下他们的信息。有调查表明,提供双向交流的站点比简单的留一个”Email me”的站点更具有亲和力。

  4.设一个下载或常见问题回答栏目
  网络的特点是信息共享。如果你看到一个站点有大量的优秀的有价值的资料,你肯定希望能一次性下载,而不是一页一页浏览存盘。“将心比心”在你自己的主页上设置一个资料下载栏目,会得到大家的喜欢。有些站点为了广告显示量,一篇文章还要分几页显示,我觉得迟早会因访问量下降而淘汰(个人意见。另外,如果您的站点经常收到网友关于某方面的问题来信,你最好设立一个常见问题回答的栏目,既方便了网友,也可以节约自己更多时间用以学习。

  至于其他的辅助内容,如关于本站,版权信息等可以不放在主栏目里,以免冲淡主题。总结以上几点,我们得出划分栏目需要注意的是:

●尽可能删除与主题无关的栏目
●尽可能将网站最有价值的内容列在栏目上
●尽可能方便访问者的浏览和查询
  
  上面说的是栏目,我们再看看版块设置。版块比栏目的概念要大一些,每个版块都有自己的栏目。举个例子:网易的站点分新闻,体育,财经,娱乐,教育等版块,每个版块下面有各有自己的主栏目。一般的个人站点内容少,只有主栏目(主菜单)就够了,不需要设置版块。如果你觉得的确有必要设置版块的,应该注意1.各版块要有相对独立性。2.各版块要有相互关联。3.版块的内容要围绕站点主题。

确定网站的目录结构和链接结构
我们在动手制作网页前,一定要考虑好以下三方面:
1.确定栏目和版块;
2.确定网站的目录结构和链接结构
3.确定网站的整体风格创意设计

“确定网站的目录结构和链接结构”

  一.网站的目录结构

  网站的目录是指你建立网站时创建的目录。例如:在用frontpage98建立网站时都默认建立了根目录和images子目录。目录的结构是一个容易忽略的问题,大多数站长都是未经规划,随意创建子目录。目录结构的好坏,对浏览者来说并没有什么太大的感觉,但是对于站点本身的上传维护,内容未来的扩充和移植有着重要的影响。下面是建立目录结构的一些建议:

●不要将所有文件都存放在根目录下。
  有网友为了方便,将所有文件都放在根目录下。这样做造成的不利影响在于:
1.文件管理混乱。你常常搞不清哪些文件需要编辑和更新,哪些无用的文件可以删除,哪些是相关联的文件,影响工作效率。
2.上传速度慢。服务器一般都会为根目录建立一个文件索引。当您将所有文件都放在根目录下,那么即使你只上传更新一个文件,服务器也需要将所有文件再检索一遍,建立新的索引文件。很明显,文件量越大,等待的时间也将越长。所以,给您的建议是:尽可能减少根目录的文件存放数。

●按栏目内容建立子目录。
  子目录的建立,首先按主菜单栏目建立。例如:网页教程类站点可以根据技术类别分别建立相应的目录,象Flash,Dhtml,Javascript等;企业站点可以按公司简介,产品介绍,价格,在线定单,反馈联系等建立相应目录。
其他的次要栏目,类似what’s new,友情连接内容较多,需要经常更新的可以建立独立的子目录。而一些相关性强,不需要经常更新的栏目,例如:关于本站,关于站长,站点经历等可以合并放在一个统一目录下。
所有程序一般都存放在特定目录。例如:CGI程序放在cgi-bin目录。便于维护管理。所有需要下载的内容也最好放在一个目录下。

●在每个主目录下都建立独立的images目录。
  默认的,一个站点根目录下都有一个images目录。刚开始学习主页制作时,阿捷习惯将所有图片都存放在这个目录里。可是后来发现很不方便,当我需要将某个主栏目打包供网友下载,或者将某个栏目删除时,图片的管理相当麻烦。经过实践发现:为每个主栏目建立一个独立的images目录是最方便管理的。而根目录下的images目录只是用来放首页和一些次要栏目的图片。

●目录的层次不要太深。
  目录的层次建议不要超过3层。原因很简单,维护管理方便。

  其它需要注意的还有:
1.不要使用中文目录;网络无国界,使用中文目录可能对网址的正确显示造成困难。
2.不要使用过长的目录;尽管服务器支持长文件名,但是太长的目录名不便于记忆。
3.尽量使用意义明确的目录;上面的例子中,你可以用Flash,Dhtml,Javascript来建立目录,也可以用1,2,3建立目录,但是哪一个更明确,更便于记忆和管理呢?显然是前者!

  随着网页技术的不断发展,利用数据库或者其他后台程序自动生成网页越来越普遍,网站的目录结构也必将飞跃到一个新的结构层次。

二.网站的链接结构

  网站的链接结构是指页面之间相互链接的拓扑结构。它建立在目录结构基础之上,但可以跨越目录。形象的说:每个页面都是一个固定点,链接则是在两个固定点之间的连线。一个点可以和一个点连接,也可以和多个点连接。更重要的是,这些点并不是分布在一个平面上,而是存在于一个立体的空间中。

●我们研究网站的链接结构的目的在于:用最少的链接,使得浏览最有效率。

  一般的,建立网站的链接结构有两种基本方式:
  1.树状链接结构(一对一)。类似DOS的目录结构,首页链接指向一级页面,一级页面链接指向二级页面。立体结构看起来就象蒲公英。这样的链接结构浏览时,一级级进入,一级级退出。优点是条理清晰,访问者明确知道自己在什么位置,不会”迷”路。缺点是浏览效率低,一个栏目下的子页面到另一个栏目下的子页面,必须绕经首页。

  2.星状链接结构(一对多)。类似网络服务器的链接,每个页面相互之间都建立有链接。立体结构象东方明珠电视塔上的钢球。这种链接结构的优点是浏览方便,随时可以到达自己喜欢的页面。缺点是链接太多,容易使浏览者迷路,搞不清自己在什么位置,看了多少内容。

  这两种基本结构都只是理想方式,在实际的网站设计中,总是将这两种结构混合起来使用。我们希望浏览者既可以方便快速的达到自己需要的页面,又可以清晰的知道自己的位置。所以,最好的办法是:

●首页和一级页面之间用星状链接结构,一级和二级页面之间用树状链接结构。

  举个例子。一个新闻站点的页面结构如下:
—————————————————

一级页面 二级页面

财经新闻页 — [财经新闻1,财经新闻2...]
/ |
首页 — 娱乐新闻页 — [娱乐新闻1,娱乐新闻2...]
\ |
IT新闻页 — [IT新闻1,IT新闻2...]

—————————————————-
  其中,首页,财经新闻页,娱乐新闻页,IT新闻页之间是星状链接,可以互相点击,直接到达。而财经新闻页和它的子页面之间是树状连接,浏览财经新闻1后,你必须回到财经新闻页,才能浏览IT新闻2。所以,有站点为了免去返回一级页面的麻烦,将二级页面直接用新开窗口(POP up windows)打开,浏览结束后关闭即可。

  注意:以上我们都是用的三级页面举例。如果您的站点内容庞大,分类明细,需要超过三级页面,那么建议你在页面里显示导航条,可以帮助浏览者明确自己所处的位置。就是您经常看到许多网站页面顶部的,类似这样:“您现在的位置是:首页->财经新闻->股市信息->深圳股->深发展”

  关于链接结构的设计,在实际的网页制作中是非常重要一环。采用什么样的链接结构直接影响到版面的布局。例如你的主菜单放在什么位置,是否每页都需要放置,是否需要用分帧框架,是否需要加入返回首页的链接。在连接结构确定后,再开始考虑链接的效果和形式,是采用下拉表单,还是用DHTML动态菜单等等。

  随着电子商务的推广,网站竞争的越来越激烈,对链接结构设计的要求已经不仅仅局限于可以方便快速的浏览,更加注重个性化和相关性。例如,一个爱婴主题网站里,在8个月婴儿的营养问题页面上,你需要加入8个月婴儿的健康问题链接,智力培养链接,或者是有关奶粉宣传的链接,一本图书,一个玩具的链接。因为父母不可能到每个栏目下去寻找关于8个月婴儿的信息,他们可能在找到需要的问题后就离开网站了。如何尽可能留住访问者,是网站设计者未来必须考虑的问题。

  确定网站的整体风格和创意设计

  网站的整体风格及其创意设计是站长们最希望掌握,也是最难以学习的。难就难在没有一个固定的程式可以参照和模仿。给你一个主题,任何两人都不可能设计出完全一样的网站。当我们说:”这个站点很cool,很有个性!”那么,是什么让你觉得很cool呢?它到底和一般的网站有什么区别呢?本文试图用最简明的语言来说明:
1.风格是什么,如何树立网站风格?
2.创意是什么,如何产生创意?

●风格(style)是抽象的。是指站点的整体形象给浏览者的综合感受。
这个“整体形象”包括站点的CI(标志,色彩,字体,标语),版面布局,浏览方式,交互性,文字,语气,内容价值,存在意义,站点荣誉等等诸多因素。举个例子:我们觉得网易是平易近人的,迪斯尼是生动活泼的,IBM是专业严肃的。这些都是网站给人们留下的不同感受。

风格是独特的,是站点不同与其他网站的地方。或者色彩,或者技术,或者是交互方式,能让浏览者明确分辨出这是你的网站独有的。例如新世纪网络(www.century.2000c.net)的黑白色,网易壁纸站的特有框架,即使你只看到其中一页,也可以分辨出是哪个网站的。

风格是有人性的。通过网站的外表,内容,文字,交流可以概括出一个站点的个性,情绪。是温文儒雅,是执著热情,是活泼易变,是放任不羁。象诗词中的“豪放派”和“婉约派”,你可以用人的性格来比喻站点。

有风格的网站与普通网站的区别在于:普通网站你看到的只是堆砌在一起的信息,你只能用理性的感受来描述,比如信息量大小,浏览速度快慢。但你浏览过有风格的网站后你能有更深一层的感性认识,比如站点有品位,和蔼可亲,是老师,是朋友。

看了以上描述,你可能对风格是什么可能依然模糊。其实风格就是一句话:与众不同!

如何树立网站风格呢?我们可以分这样几个步骤:

第一,确信风格是建立在有价值内容之上的。一个网站有风格而没有内容,就好比绣花枕头一包草,好比一个性格傲慢但却目不识丁的人。你首先必须保证内容的质量和价值性。这是最基本的,无须置疑。

第二,你需要彻底搞清楚自己希望站点给人的印象是什么。可以从这几方面来理清思路:

1.如果只用一句话来描述你的站点,应该是:_____________
参考答案:
有创意,专业,有(技术)实力,有美感,有冲击力
2.想到你的站点,可以联想到的色彩是:________________
参考答案:
热情的红色,幻想的天兰色,聪明的金黄色
3.想到你的站点,可以联想到的画面是:________________
参考答案:
一份早报,一辆法拉利跑车,人群拥挤的广场,杂货店
4.如果网站是一个人,他拥有的个性是:________________
参考答案:
思想成熟的中年人,狂野奔放的牛仔,自信憨厚的创业者
5.作为站长,你希望给人的印象是:____________________
参考答案:
敬业,认真投入,有深度,负责,纯真,直爽,淑女
6.用一种动物来比喻,你的网站最象:__________________
参考答案:
猫(神秘高贵),鹰(目光锐利),兔子(聪明敏感),狮子(自信威信)
7.浏览者觉得你和其他网站的不同是:__________________
参考答案:
可以信赖,信息最快,交流方便,
8.浏览者和你交流合作的感受是:______________________
参考答案:
师生,同事,朋友,长幼。

你可以自己先填写一份答案,然后让其他网友填写。比较后的结果会告诉你:你网站现在的差距,弱点及需要改进的地方。

第三,在明确自己的网站印象后,开始努力建立和加强这种印象。
经过第二步印象的的”量化”后,你需要进一步找出其中最有特色特点的东西,就是最能体现网站风格的东西。并以它作为网站的特色加以重点强化,宣传。例如:再次审查网站名称,域名,栏目名称是否符合这种个性,是否易记。审查网站标准色彩是否容易联想到这种特色,是否能体现网站的性格等等。具体的做法,没有定式。我这里提供一些参考:

1.将你的标志logo,尽可能的出现在每个页面上。或者页眉,或者页脚,或则背景。
2.突出你的标准色彩。文字的链接色彩,图片的主色彩,背景色,边框等色彩尽量使用与标准色彩一致的色彩。
3.突出你的标准字体。在关键的标题,菜单,图片里使用统一的标准字体。
4.想一条朗朗上口宣传标语。把它做在你的banner里,或者放在醒目的位置,告诉大家你的网站的特色是…
5.使用统一的语气和人称。即使是多个人合作维护,也要让读者觉得是同一个人写的。
6.使用统一的图片处理效果。比如,阴影效果的方向,厚度,模糊度都必须一样。
7.创造一个你的站点特有的符号或图标。比如在一句链接前的一个点,可以使用,.。☆※○◇□△→(区位码里自己参看)等等。虽然很简单的一个变化,却给人与众不同的感觉,(为什么我没有想到呢?)
8.用自己设计的花边,线条,点
9.展示你网站的荣誉和成功作品。
10.告诉网友关于你的真实的故事和想法。

风格的形成不是一次定位的,你可以在实践中不断强化,调整,修饰,直到有一天,网友们写信告诉你:”我喜欢你的站点,因为它很有风格!”

● 创意(idea)是网站生存的关键。这一点相信大家都已经认同。然而作为网页设计师,最苦恼的就是没有好的创意来源。

注意,这里说的创意是指站点的整体创意,(因为这个创意而产生这个站点,或者相同的内容,推出的创意不同),网页的平面设计创意我将在后面的版面布局窍门里介绍。

创意到底是什么,如何产生创意呢?

创意是引人入胜,精彩万分,出奇不意的;
创意是捕捉出来的点子,是创作出来的奇招….
这些讲法都说出了创意的一些特点,实质上,

○创意是传达信息的一种特别方式。

比如Webdesigner(网页设计师),我们将其中的E字母大写一下: wEbdEsigEr,感觉怎么样,这其实就是一种创意!

创意并不是天才者的灵感,而是思考的结果。根据美国广告学教授詹姆斯的研究,创意思考的过程分五阶段:
1.准备期–研究所搜集的资料,根据旧经验,启发新创意;
2.孵化期–将资料咀嚼消化,使意识自由发展,任意结合;
3.启示期–意识发展并结合,产生创意;
4.验证期–将产生的创意讨论修正;
5.形成期–设计制作网页,将创意具体化。

○创意是将现有的要素重新组合。
比如,网络与电话结合,产生IP电话。从这一点上出发,任何人,包括你和我,都可以创造出不同凡响的创意。而且,资料越丰富,越容易产生创意。就好比万花筒,筒内的玻璃片越多,所呈现的图案越多。你如果有心可以发现,网络上的最多的创意来自与现实生活的结合(或者虚拟现实),例如在线书店,电子社区,在线拍卖。你是否想到了一种更好的创意呢?

创意思考的途径最常用的是联想,这里提供了网站创意的25种联想线索:

1.把它颠倒 2.把它缩小 3.把颜色换一下 4.使它更长
5.使它闪动 6.把它放进音乐里 7.结合文字音乐图画 8.使它成为年轻的
9.使它重复 10.使它变成立体 11.参加竞赛 12.参加打赌
13.变更一部分 14.分裂它 15.使它罗曼蒂克 16.使它速度加快
17.增加香味 18.使它看起来流行 19.使它对称 20.将它向儿童诉求
21.价格更低 22.给它起个绰号 23.把它打包 24.免费提供
25.以上各项延伸组合
——-(转载自樊志育《广告制作》)

需要一提的是:创意的目的是更好的宣传推广网站。如果创意很好,却对网站发展毫无意义,好比给奶牛穿高跟鞋,那么,我们宁可放弃这个创意!

首页的设计

在我们全面考虑好网站的栏目,链接结构和整体风格之后,我们就可以正式动手制作首页了。
有这么一句俗语:”良好的开端是成功的一半”。
在网站设计上也是如此,首页的设计是一个网站成功与否的关键。人们往往看到第一页就已经对你的站点有一个整体的感觉。是不是能够促使浏览者继续点击进入,是否能够吸引浏览者留在站点上,全凭首页设计的”功力”了。
所以,首页的设计和制作是绝对要重视和花心思的。一般首页设计和制作占整个制作时间的40%。你宁可多花些时间在早期,以免出现全部做好以后再修改,那将是最浪费精力的事。

  这里,先插一个“封面”的问题。封面是指没有具体内容,只放一个logo点击进入或者只有简单的图形菜单的首页。
是否需要为站点设计一个“封面”?阿捷的个人观点是:没必要!
除非你是很艺术类的站点,或者可以确信内容独特,可以吸引浏览者进一步点击进入的站点,否则的话,封面式的首页并不会给你的站点带来什么好处。我们上网浏览需要的是快速,有价值的信息,如果等待xx分钟,只显示出一个粗劣的“ENTER”图标,那么相信没有人会再耐心等待进入下一页。

  今天,只是关于首页设计的一个引子。让我们来大致了解一下首页设计的步骤。
首页,从根本上说就是全站内容的目录,是一个索引。但只是罗列目录显然是不够的,如何设计好一个首页呢?一般的步骤是:

●确定首页的功能模块
●设计首页的版面
●处理技术上的细节
  
  一).确定首页的功能模块。
  首页的内容模块是指你需要在首页上实现的主要内容和功能。一般的站点都需要这样一些模块:
网站名称(logo), 广告条(banner), 主菜单(menu),
新闻(what’s new), 搜索(search), 友情链接(links),
邮件列表(maillist),计数器(count), 版权(copyright).
  选择哪些模块,实现哪些功能,是否需要添加其他模块都是首页设计首先需要确定的。
   
  二).设计首页的版面
  在功能模块确定后,开始设计首页的版面。就象搭积木,每个模块是一个单位积木,如何拼搭出一座漂亮的房子,就看你的创意和想象力了。
  设计版面的最好方法是:找一张白纸,一支笔,先将你理想中的草图勾勒出来,然后再用网页制作软件实现。

  三).处理技术上的细节   
  阿捷经常收到的来信问题就是:我制作的主页如何能在不同分辨率下保持不变形,如何能在IE和NC下看起来都不至于太丑陋,如何设置字体和链接颜色….等等,阿捷将在下面几篇文章里为大家详细介绍。

  版面布局的原理

设计首页的第一步是设计版面布局。
就象传统的报刊杂志编辑一样,我们将网页看作一张报纸,一本杂志来进行排版布局。
虽然动态网页技术的发展使得我们开始趋向于学习场景编剧,但是固定的网页版面设计基础
依然是必须学习和掌握的。它们的基本原理是共通的,你可以领会要点,举一反三。

版面指的是浏览器看到的完整的一个页面(可以包含框架和层)。因为每个人的显示器
分辨率不同,所以同一个页面的大小可能出现640*480像素,800*600像素,1024*768像素等不
同尺寸。

布局,就是以最适合浏览的方式将图片和文字排放在页面的不同位置。
你可能注意到:“最适合”是一个不确定的形容词,什么才是最适合的呢?抱歉的是
阿捷不能也不可能给您一个完整的正确的答案。就好比有人希望知道成功的秘诀是什么,
成功者只能建议您用什么方法,什么途径才能最容易获得成功,而不可能有一步成功的
“秘诀”告诉您。

我们在设计思考系列文章第四篇讲过站点整体的创意,版面布局也是一个创意的问题,
但要比站点整体的创意容易,有规律的多。让我们先来了解一下版面布局的步骤:

一.草案

新建页面就象一张白纸,没有任何表格,框架和约定俗成的东西,你可以尽可能的发挥
你的想象力,将你想到的”景象”画上去(我们建议您用一张白纸和一支铅笔,当然用作图
软件photoshop等也可以)。这属于创造阶段,不讲究细腻工整,不必考虑细节功能,只以
粗陋的线条勾画出创意的轮廓即可。尽你的可能多画几张,最后选定一个满意的作为继续
创作的脚本。

二.粗略布局

在草案的基础上,将你确定需要放置的功能模块安排到页面上。(注:功能模块我们在
“首页设计-引子”中提过,主要包含网站标志,主菜单,新闻,搜索,友情链接,广告条,邮件列表,
计数器,版权信息等)。注意,这里我们必须遵循突出重点、平衡谐调的原则,将网站标
志,主菜单等最重要的模块放在最显眼,最突出的位置,然后在考虑次要模块的排放。

三.定案

将粗略布局精细化,具体化。(靠你的智慧和经验,旁敲侧击多方联想,才能作出具
有创意的布局。)

在布局过程中,我们可以遵循的原则有:

1、正常平衡—亦称”匀称”。多指左右、上下对照形式,主要强调秩序,能达到安定
诚实、信赖的效果。
2、异常平衡—即非对照形式,但也要平衡和韵律,当然都是不均整的,此种布局能
达到强调性、不安性、高注目性的效果。
3、对比—所谓对比,不仅利用色彩、色调等技巧来作表现,在内容上也可涉及古与
今、新与旧、贫与富等对比。
4、凝视—所谓凝视是利用页面中人物视线,使浏览者仿照跟随的心理,以达到注视
页面的效果,一般多用明星凝视状。
5、空白—空白有两种作用,一方面对其他网站表示突出卓越,另一方面也表示网页品
位的优越感,这种表现方法对体显网页的格调十分有效。
6、尽量用图片解说—此法对不能用语言说服、或用语言无法表达的情感,特别有效。
图片解说的内容,可以传达给浏览者的更多的心理因素。

以上的设计原则,虽然枯燥,但是我们如果能领会并活用到页面布局里,效果就大不
一样了。比如,
○网页的白色背景太虚,则可以加些色快;
○版面零散,可以用线条和符号串联;
○左面文字过多,右面则可以插一张图片保持平衡;
○表格太规矩,可以改用导角试试。
经过不断的尝试和推敲,你的网页一定会亮丽起来的哦

看看我们经常用到的版面布局形式:

1.”T”结构布局。所谓”T”结构。就是指页面顶部为横条网站标志+广告条,下方左面为主菜单,
右面显示内容的布局,因为菜单条背景教深,整体效果类似英文字母”T”,所以我们称之为”T”形布
局。这是网页设计中用的最广返的一种布局方式。(图略)
这种布局的优点是页面结构清晰,主次分明。是初学者最容易上手的布局方法。缺点是规矩
呆板,如果细节色彩上不注意,很容易让人”看之无味”。

2.”口”型布局。这是一个象形的说法,就是页面一般上下各有一个广告条,左面是主菜单,
右面放友情连接等,中间是主要内容。(图略)
这种布局的优点是充分利用版面,信息量大(我的主页首页即属于这种布局)。缺点是页面拥挤,
不够灵活。也有将四边空出,只用中间的窗口型设计,例如网易壁纸站。

3.”三”型布局。这种布局多用于国外站点,国内用的不多。特点是页面上横向两条色块,将
页面整体分割为四部分,色块中大多放广告条。

4.对称对比布局。顾名思义,采取左右或者上下对称的布局,一半深色,一半浅色,一般用于
设计型站点。优点是视觉冲击力强,缺点是将两部分有机的结合比较困难。

5.POP布局。POP引自广告术语,就是指页面布局象一张宣传海报,以一张精美图片作为页面
的设计中心。常用于时尚类站点,比如ELLE.com。优点显而易见:漂亮吸引人。缺点就是速度慢。
作为版面布局还是值得借鉴的。

以上总结了目前网络上常见的布局,其实还有许许多多别具一格的布局,关键在于你的创意和
设计了。对于版面布局的技巧,这里提供四个建议,您可以自己推敲:

1.加强视觉效果
2.加强文案的可视度和可读性
3.统一感的视觉
4.新鲜和个性是布局的最高境界

色彩的搭配

网页的色彩是树立网站形象的关键之一,色彩搭配却是网友们感到头疼的问题。网页的背景,文字,图标,边框,超链接…,应该采用什么样的色彩,应该搭配什么色彩才能最好的表达出预想的内涵呢?这里谈一些心得,希望对你有所启发。

首先我们先来了解一些色彩的基本知识:

1.颜色是因为光的折射而产生的。
2.红,黄,蓝是三原色,其它的色彩都可以用这三种色彩调和而成。
网页html语言中的色彩表达即是用这三种颜色的数值表示
例如:红色是color(255,0,0)十六进制的表示方法为(FF0000)
白色为(FFFFFF), 我们经常看到的”bgColor=#FFFFFF”就是指背景色为白色。
3.颜色分非彩色和彩色两类。
非彩色是指黑,白,灰系统色。
彩色是指除了非彩色以外的所有色彩。
4.任何色彩都有饱和度和透明度的属性,属性的变化产生不同的色相,所以至少可以制作几百万种色彩。

网页制作用彩色还是非彩色好呢?根据专业的研究机构研究表明:彩色的记忆效果是黑白的3.5倍。也就是说,在一般情况下,彩色页面较完全黑白页面更加吸引人。
我们通常的做法是:主要内容文字用非彩色(黑色),边框,背景,图片用彩色。这样页面整体不单调,看主要内容也不会眼花。

●非彩色的搭配

黑白是最基本和最简单的搭配,白字黑底,黑底白字都非常清晰明了。
灰色是万能色,可以和任何彩色搭配,也可以帮助两种对立的色彩和谐过渡。如果你实在找不出合适的色彩,那么用灰色试试,效果绝对不会太差。

●彩色的搭配

色彩千变万化,彩色的搭配是我们研究的重点。我们依然需要进一步学习一些色彩的知识。

一.色环。我们将色彩按”红->黄->绿->蓝->红”依次过度渐变,就可以得到一个色彩环。
色环的两端是暖色和寒色,当中是中型色。(如下图)

红.橙.橙黄.黄.黄绿.绿.青绿.蓝绿.蓝.蓝紫.紫.紫红.红
|___________| |____| |_________| |_________|
| | | |
暖色系 中性系 寒色系 中性系

二.色彩的心理感觉。不同的颜色会给浏览者不同的心理感受。

红色—是一种激奋的色彩。刺激效果,能使人产生冲动,愤怒,热情,活力的感觉。
绿色—介于冷暖两中色彩的中间,显得和睦,宁静,健康,安全的感觉。
它和金黄,淡白搭配,可以产生优雅,舒适的气氛。
橙色—也是一种激奋的色彩,具有轻快,欢欣,热烈,温馨,时尚的效果。
黄色—具有快乐,希望,智慧和轻快的个性,它的明度最高。
蓝色—是最具凉爽,清新,专业的色彩。
它和白色混合,能体现柔顺,淡雅,浪漫的气氛(象天空的色彩
白色—具有洁白,明快,纯真,清洁的感受。
黑色—具有深沉,神秘,寂静,悲哀,压抑的感受。
灰色—具有中庸,平凡,温和,谦让,中立和高雅的感觉。

每种色彩在饱和度,透明度上略微变化就会产生不同的感觉。以绿色为例,
黄绿色有青春,旺盛的视觉意境,而蓝绿色则显得幽宁,阴深。

○网页色彩搭配的原理

1.色彩的鲜明性。网页的色彩要鲜艳,容易引人注目。
2.色彩的独特性。要有与众不同的色彩,使得大家对你的印象强烈。(参考设计思考第二篇网站CI的标准色彩一节)
3.色彩的合适性。就是说色彩和你表达的内容气氛相适合。如用粉色体现女性站点的柔性。
4.色彩的联想性。不同色彩会产生不同的联想,蓝色想到天空,黑色想到黑夜,红色想到喜事等,选择色彩要和你网页的内涵相关联。

○网页色彩掌握的过程

随着网页制作经验的积累,我们用色有这样的一个趋势:单色->五彩缤纷->标准色->单色。一开始因为技术和知识缺乏,只能制作出简单的网页,色彩单一;在有一定基础和材料后,希望制作一个漂亮的网页,将自己收集的最好的图片,最满意色彩堆砌在页面上;但是时间一长,却发现色彩杂乱,没有个性和风格;第三次重新定位自己的网站,选择好切合自己的色彩,推出的站点往往比较成功;当最后设计理念和技术达到顶峰时,则又返朴归真,用单一色彩甚至非彩色就可以设计出简洁精美的站点。

○网页色彩搭配的技巧
文章写到这里,有心急的网友要问了:“到底用什么色彩搭配好看呢?你能不能推荐几种配色方案?”别急,这里有一点技巧,可以帮助你迅速成为调色大师

1.用一种色彩。这里是指先选定一种色彩,然后调整透明度或者饱和度,(说得通俗些就是将色彩变淡或则加深),产生新的色彩,用于网页。这样的页面看起来色彩统一,有层次感。

2.用两种色彩。先选定一种色彩,然后选择它的对比色(在photoshop里按ctrl+shift+I)。我的主页用蓝色和黄色就是这样确定的。整个页面色彩丰富但不花稍。

3.用一个色系。简单的说就是用一个感觉的色彩,例如淡蓝,淡黄,淡绿;或者土黄,土灰,土蓝。确定色彩的方法各人不同,我是在photoshop里按前景色方框,在跳出的拾色器窗中选择”自定义”,然后在”色库”中选就可以了

4.用黑色和一种彩色。比如大红的字体配黑色的边框感觉很”跳”。

在网页配色中,忌讳的是:
1.不要将所有颜色都用到,尽量控制在三种色彩以内。
2.背景和前文的对比尽量要大,(绝对不要用花纹繁复的图案作背景),以便突出主要文字内容。

  网页字体的设置
  ●字体(Font)的设置是网页制作新手遇到的第一个难点。如何控制字体大小,如何取消超链接字体的下划线是网友来信问得最多的。好,我们来彻底研究一下字体的各个方面:

  ○字符集的设定。
  在查看html文件原代码时,我们经常可以在文件头和之间看到这么一句代码:
  
  这段代码的作用是什么呢?是否可以删除呢?
  其实这是meta标签的设定语句,是给浏览器看的。它的作用就是告诉浏览器:这个HTML文件是采用gb2312字符集制作的。当浏览器读到这一代码,便以gb2312字符集来解释和翻译网页原代码,然后我们就可以看到正确的网页。所以这个meta语句是非常重要的,尽量不要
删除。
  gb2312就是我们最熟悉的GB简体码,英文是iso-8859-1字符集。其它还有BIG5,UTF-8,Shift-JIS,EUC,KOI8-2等字符集,分别用于不同的字体显示。

  ○字体的使用。
  在网页里,字体的定义语句是:显示文字
  其中Arial就是一种字体的名称。
  默认的浏览器定义的标准字体是中文宋体和英文times new Roma字体。也就是说,如果你没有设置任何字体,网页将以这两种标准字体显示。同时,着两种字体也可以在任何操作系统和浏览器里正确显示。

windows另外自带了40多种英文字体和5种中文字体。这些字体,你也可以在网页里自由使用和设置。凡是使用windows操作系统的浏览器都可以正确显示这些字体,但在其它操作系统里,如unix 则不能完全正确显示。

  如果你需要用一种特殊的字体来体现你的风格,那么如何让大家可以真正看到你的设计页面呢?解决的办法是:用图片。
  将需要用这种字体的地方用图片代替,以保证所有人看到的页面是同一效果。

  ○字体的样式(style)。
字体的样式有四种:正常体(regular),斜体(Italic),粗体(Bold),粗斜体(Bold Italic)。设置方法很简单,阿捷就不多罗嗦了。

  ○字体的效果。
  这里指通过html语言设定可以直接显示的效果,在html里的语句设定为:
  显示文字
  其中,overline是指上划线效果。其它常用的效果还有:underline(下划线),uppercase(大写)等等。

  ○字体大小的控制。
  字体大小的控制是本节的重点。

  一般字体默认的大小是12pt(镑).用语句可以将文字增大2pt。这种方法我们都已经掌握了。而现在网络上最流行的小中文字体大小为9pt,是如何设定的呢?有三种方法:

  1.用”显示文字”语句来设定。
  显然这种方法非常麻烦,你必须为每段文字都设定大小。

   2.用CSS层叠样式表。CSS是DHTML的一个组成部分,它可以定义整个页面的字体显示风格和大小。是较为简便的方法。比如,这里需要设定整个页面文字大小为9pt,只要将下面这段代码加入html代码的和之间:

   

其中FONT-SIZE:9pt指字体的大小为9镑

  3.第二种方法已经简化了许多步骤,但是仍然不是最理想的方法,因为你必须在每个页面的head区都放置这么一段代码,扩大了文件的字节。另外这样的做法还有一个重大缺点,就是如果我需要修改整个站点的字体大小,就必须一页一页的改!

  所以推荐给你最终也是目前最好的方法—外部摸板文件调用法。
  “外部摸板调用”就是说你将css的设定作成一个单独的文件,在每个页面里都调用它。一旦你需要修改字体大小,只要修改一个.css文件,几百个页面就同时修改了。(这种方法类似子程序调用编写过程序的网友很容易理解

  调用的具体方法如下:
(1)将上面的css代码copy成一个mycss.txt文件,然后修改后缀名为mycss.css
(2)在html文件的之间插入,
语句调用mycss.css(注意有关路径的设置正确)OK!

  ○字体超链接样式的设定。
  通常在网页的中设置连接的颜色,如:

其中:link — Hyperlink(连接)的颜色
   vlink– visited Hyperlink(已访问过的连接)颜色
   alink– active Hyperlink (当前活动的连接)颜色
   颜色用rgb的16进制码表示如红色是#FF0000。

  同样用CSS可以更简便的设定网页超连接的样式,看下面这段代码

Aink {TEXT-DECORATION: none;COLOR: #0000FF}
Aisited {TEXT-DECORATION: none;COLOR: #000000}
A:active {TEXT-DECORATION: none;COLOR: #FF0000}
A:hover {COLOR: #FF0000}

将它插入html文件的head区就可以了。其中link设定的是有超链接的颜色;visited是访问过的超链接颜色;active是鼠标移上去的颜色;hover是鼠标点击时的颜色。而”text-decoration:none”是指取消超链接的下划线显示。

  关于CSS的设定还有更多的用法和技巧,比如在同一页中设定不同的字体大小和超链接颜色,请学习有关CSS的专门知识,在这里我们不在冗述。

●上面已经介绍了字体在技术上的各个方面。有关字体的设计使用,目前还没有一个成熟的理论,下面是几条网页设计中字体的使用原则,仅供参考:

  1.不要使用超过3种以上的字体。字体太多则显得杂乱,没有主题。
  2.不要用太大的字。因为版面是宝贵,有限的,粗陋的大字体不能带给访问者更多信息。
  3.不要使用不停闪烁的文字。想让浏览者多停留一会儿的话,就不要使用闪烁的文字。
  4.原则上标题的字体较正文大,颜色也应有所区别。

网页中表格的运用

  表格(table)是页面的重要元素,是页面排版的主要手段。尽管DHTML中的层(layer)也可以实现网页元素的自由定位,但是表格显然更加方便编辑与修改。熟练掌握和运用表格的各种属性,可以让您的页面看起来赏心悦目。

  本文将分两部分详细介绍表格在网页设计中的运用。包括表格的基本用法和表格运用的注意点。

  一.表格的基本用法。

  表格的基本用法相信您已经非常熟悉了。但为了保证文章的完整性,阿捷在这里还是再罗列一遍。

  ●表格的HTML基本语法

- 定义表格

- 定义表行

- 定义表头

- 定义表元(表格的具体数据)

例如:

1 2 3
A B C

1 2 3
A B C

  ●table标签的参数。table标签可以含下列参数。
border 表格边框
cellspacing 表元之间的空白距离
cellpadding 表元内部的空白距离
width 表格宽度(可以用%或者具体数据表示)
height 表格高度

例如:

1 2 3
A B C

1 2 3
A B C

  ●表格的对齐方式
1.表格内的文字对齐。
语法: 其中#可以设定的参数有:
left 横向居左
center 横向居中
right 横向居右
top 纵向居顶
middle 纵向居中
bottom 纵向居底
例如:

A B C

A B C

 2.表格在页面内的对齐。
如果你需要与表格并排放一段文字,就需要用到table标签的另一个个参数:

其中#可以设定为left(居左),right(居右)
例如:

1 2 3
A B C

这里的文字

是和表格并排排放的
  1 2 3
A B C
这里的文字
是和表格并排排放的
●表格的嵌套
  表格嵌套就是在表格里插入表格,嵌套的排版方法就是将要插入的表格当做文字来处理
同样使用 语句。
例如:

  ●表格的色彩
表格的色彩也在

标签里设置,参数有:
bgcolor 背景颜色
bordercolor 边框颜色
bordercolorlight 立体边框亮色
bordercolordark 立体边框暗色
语法为:
其中RRGGBB分别为RGB三色的16进制数值
例如:

  以上是表格的基本用法。现在frngtpage,dreamweaver等所见即所得的网页编辑软件都不用编写代码,就可以轻松的实现表格的排版和嵌套,但是掌握一些基本语法,关键时刻还是很有用处的。

二.表格运用的注意点
  表格的嵌套并不是表格处理最困难的地方,无论多复杂的版面,悉心琢磨一番总能找到解决的办法。
我们需要考虑的是:
  ○用什么样的嵌套排版方式使网页的下载速度达到最快。
  我们知道:浏览器在读取网页html原代码时,是读完整一个table再将它显示出来。也就是说从

标签开始,要读到

标签时,才将表格中的内容显示在屏幕上。而且显示也有优先级,先读到的先显示。这样的话,如果一个大表格中含有多个子表格,必须等大表格读完,才能将子表格一起显示出来。
  我们在访问一些站点时,等待多时无结果,按”停止”按钮却一下显示出页面就是这个原因。
  因此,我们在设计页面表格的时候,应该做到:
  1.整个页面不要都套在一个表格里,尽量拆分成多个表格;
2.单一表格的结构尽量整齐;
3.表格嵌套层次尽量要少.
  实验证明:越复杂,嵌套层次越多的表格下载速度越慢。

meat标签的奥妙
  META标签,是HTML语言head区的一个辅助性标签。在几乎所有的page里,我们都可以看到类似下面这段html代码:

这就是meta标签的典型运用。meta标签有多少参数,有什么作用,为什么我们要特别重视它呢?让我们一起来发掘meta标签的奥妙!

根据HTML语言标准注释:meta标签是对网站发展非常重要的标签,它可以用于鉴别作者,设定页面格式,标注内容提要和关键字,以及刷新页面等等。
meta标签分两大部分:HTTP-EQUIV和NAME变量。
●HTTP-EQUIV类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正确和精确地显示网页内容。常用的HTTP-EQUIV类型有:
1.expires(期限)
说明:可以用于设定网页的到期时间。一旦网页过期,必须到服务器上重新调阅。
用法:
注意:必须使用GMT的时间格式。
2.Pragma(cach模式)
说明:禁止浏览器从本地机的缓存中调阅页面内容。
用法:
注意:这样设定,访问者将无法脱机浏览。
3.Refresh(刷新)
说明:需要定时让网页自动链接到其它网页的话,就用这句了。
用法:
注意:其中的5是指停留5秒钟后自动刷新到URL网址。
4.Set-Cookie(cookie设定)
说明:如果网页过期,那么存盘的cookie将被删除。
用法:
注意:必须使用GMT的时间格式。
5.Window-target(显示窗口的设定)
说明:强制页面在当前窗口以独立页面显示。
用法:
注意:用来防止别人在框架里调用你的页面。
5.Content-Type(显示字符集的设定)
说明:设定页面使用的字符集。(我们在前面字体设计中已经介绍过它的作用)
用法:

●meat标签的NAME变量语法格式是:

其中xxx主要有下面几种参数:
1.Keywords(关键字)
说明:keywords用来告诉搜索引擎你网页的关键字是什么。
举例:
2.description(简介)
说明:description用来告诉搜索引擎你的网站主要内容。
举例:
3.robots(机器人向导)
说明:robots用来告诉搜索机器人哪些页面需要索引,哪些页面不需要索引。
CONTENT的参数有all,none,index,noindex,follow,nofollow。默认是all。
举例:
4.author(作者)
说明:标注网页的作者
举例:
以上是meta标签的一些基本用法,其中最重要的就是:Keywords和description的设定。
为什么呢?道理很简单,这两个语句可以让搜索引擎能准确的发现你,吸引更多的人访问你的站点!
根据现在流行搜索引擎(Lycos,AltaVista等)的工作原理,搜索引擎首先派出机器人自动在www上搜索,当发现新的网站时,便检索页面中的keywords和decription,并将其加入到自己的数据库,然后再根据关键词的密度将网站排序。
也就是说:
1. 如果你的页面中根本没有Keywords和description的meta标签,那么机器人是无法将你的站点加入数据库,网友也就不可能搜索到你的站点。
2. 如果你的关键字选的不好,关键字的密度不高,被排列在几十甚至几百万个站点的后面被点击的可能性也是非常小的。
所以,我们必须记住添加keywords和description的meta标签,并尽可能写好关键字和简介。写keywords的禁忌是:
1.不要用常见词汇。例如www,homepage,net,web等。
2.不要用形容词,副词。例如最好的,最大的等。
3.不要用笼统的词汇,要尽量精确。例如不用”摩托罗拉手机”,改用”V998″等
寻找合适的关键词的一个技巧是:到lycos,Alta,infoseek等搜索引擎,搜索与你内容相仿的网站,查看排名前十位的网站的meta关键字,copy下来用到自己的站点上。
这里,我们举一段微软多媒体网站的关键字供你参考:

小资源:人们最常用的一些搜索词(即关键词)可以到
http://www.searchterms.com/
http://eyescream.com/yahootop200.html
两个网址一看,那里有每个月网上最流行搜索词的排行榜.
另外为了提高搜索点击率,这里还有一些”邪门歪道”:
1.为了增加关键词的密度,将关键字隐藏在页面里(将文字颜色定义成与背景颜色一样)。
2.在图象的alt注释语句中加入关键字。
如:keywords
3.利用HTML的注释语句,在页面代码里加入大量关键字。
用法:


[转载]网站推广经验20 法

2008-02-17

2006-3-4 2:7:3

浪子江湖版网站推广20法 (各网站适用!)
浪子江湖 的qq是632590119。

浪子汇集前辈高人以及自己多年的网站推广经验,集天下之大成,精选出网站推广20法 ,望对互联网创业的新手有所启发。

1.搜索引擎推广 登陆搜索引擎,如google,百度,Yahoo等。当然,要想在搜索引擎上有比较好的排名,这首先要你的网站有内容,能及时更新,也要进行SEO(搜索引擎优化)。
2.论坛推广 在目标受众经常浏览的网站、论坛发帖。发贴子不是广告,而是能吸引对方到你的网站上来的有价值信息。比如你可以设置****。
3. Email营销推广 花几百元买一个群发软件系统。针对目标受众,发送信息。注意一点,标题要吸引人、简单明了,不要欺骗别人。
4.导航网站登录 可以登陆导航网站。例如,hao123和265 如果不够资格,花几万元买一个月首页推荐。
5.资源合作推广 通过网站互弹,交换链接、交换广告、内容合作、用户资源合作等方式,在具有类似目标网站之间实现互相推广的目的,其中最常用的方式为网站链接。
6.投放广告 到门户网站或者其它专业网站投放广告宣传。如果实力强还可以在传统****上刊登广告,如电视、报刊等。像公交车、地铁等广告方式也越来越受网站欢迎。
7.信息发布推广 如果你的网站是电子商务网站,那就到分类信息网站、黄页网站等发布信息。
8.博客推广。这是比较新颖的推广方式。注册国内主要博客网站,然后发布吸引人的信息,吸引其它用户链接。同时博客很受搜索引擎欢迎,所以你在博客上推广的网站也会信息推广。
9.获取访问者的e-mail地址,并根据其要求发送信息。可以吸引他下次来访。
10.关键词、竞价排名推广。买几个搜索引擎的的关键词进行推广。这需要比较大的投入。
11.加入广告联盟。目前国内有很多广告联盟可以自行选择加入。
12.病毒式营销。并非篡改浏览者首页,而是通过制作包含有自身网站信息的精美网页、电子书、软件、FLASH作品、贺卡、即时聊天工具等工具和内容。
13.通用网址、网络实名推广。对于习惯于使用中文的用户来说,用户只需输入中文网址就可以访问网站。
14.建立吸引人的特色栏目。比如猫扑的特色栏目就是大杂烩。
15.活动宣传。可以联合其它同类网站搞网络比赛,吸引人气。当然,如果有实力,也可以联合传统****搞活动。
16.有奖参与。通过注册有奖、有奖竞猜、在线优惠卷、有奖调查等方式吸引人。
17.安装插件。安装插件提升网站流量的很好方式。很多知名网站都有安装插件。当然也有霸道的强制安装。
18.制造新闻****点。猫扑和天涯的炒作成长历程是很值得新网站学习的。像最近中了500万大奖的林美眉也使500wan.com一夜成名。
19.制作辅助网站。你可以制作多个关联网站辅助推广主网站。
20.域名指向。如果资源足够,还可以使用域名指向。如www.myqq.com


2007-7-23 22:29:42

2008-02-14

飘过
.飘过
..飘过
…飘过
….飘过
…..飘过
……飘过
…….飘过
……..飘过
……..飘过
……..飘过
…….飘过
……飘过
…..飘过
….飘过
…飘过
..飘过
.飘过
.飘过
.飘过
..飘过
…飘过
….飘过
…..飘过
……飘过
…….飘过
……..飘过
……..飘过
……..飘过
…….飘过
……飘过
…..飘过
….飘过
…飘过
..飘过
.飘过
.飘过
.飘过
..飘过
…飘过
….飘过
…..飘过
……飘过
…….飘过
……..飘过
……..飘过
……..飘过
…….飘过
……飘过
…..飘过
….飘过
…飘过
..飘过
.飘过
.飘

““飘“`过“““路“`过
`踩“““““`踩“““““`踩
踩““““““““““““`踩
踩““““天天开心“““““`踩
`踩“““““““““““`踩
“`踩“““顶顶顶顶顶“““踩
“““踩““““““`踩
““““`踩“““`踩
““““““` 踩


2006-6-16 21:4:46

2008-02-14

[转载]摄影第一课
来自天涯博客

 我记得我刚开始学习摄影的时候,我的老师也是从基础课开始,交给我一些基本的概念和常识,然后就叫我拿着相机去拍,怎么拍呢?给一个石膏的雕像放在房子里,然后就让我去拍,首先给定一个角度,锁定一个快门的值,用不同的光圈去拍,一拍就是一个上午,然后把照片放在一起自己比较,自己评审,在不同的光圈下,同一快门时为什么会有不同的效果,通过这种对比可以非常深刻的了解到光圈值之间的不同;然后又锁定一个光圈值,用不同的快门去拍,了解不同的快门之间的区别、差异;再然后锁定光圈和快门,要我变换不同的角度去拍同一个物体,每一个角度又给不同的构图,去体会画面布局和构图的效果……就是变着方的来用实拍来体会那些最基本的知识,把最最基本的东西刻在脑子里。记得刚开始的时候大概在几百张图片中才能选出一张可以的,后来是在50多张中就可以选出一张合格的,再后来基本上10张左右就可以选一张精彩的了。
室内的死物的学习告一段落后,才开始在室内拍模特和到室外去拍风景。室内的模特就不像室内的死物,她是有情感的——或孤敖、或冷俊,或热情,你怎么样把这种模特的情感通过相机表达出来,这些是之前哪些死物所没有办法体会到的,因为透过死物体现的是自己的想法,随便你拍它没有任何意见,人物就不一样了,你要尊重她——因为不应该把一个悲伤的人物拍成欢天喜地。户外的风景其实并不好拍,因为光线是你没有办法去控制的,而往往是光线的改变你需要做太多的变化——快门、光圈、角度……所有的一切都要随之改变。户外的风景拍摄是对室内拍摄的一次提高和深化。
这些基础的学习完成了就开始训练自己的风格。摄影的题材、范围非常的广,没有人能说他可以拍所有的照片,风景、人物、运动、新闻……等等,就算是摄影大师也会有一个偏重点。这个训练也是很重要的。