For example, the following script displays several images in a row by retrieving the URL of each image from a database table named myImages: How Can I Dynamically Generate a Graph or
Trang 1Answers for Day 19 Quiz
1 What is the difference between a hit, a page view and a unique user? For what is each useful?
A hit is a browser’s request for a file from a Web server A page view is the ery to the user of an entire Web page, including graphics elements A unique user
deliv-is a different person who vdeliv-isited a site within a specific period Hits are the most useful measurement for estimating the technical requirements of a site, whereas page views and unique users are useful for marketing and strategic planning pur- poses.
2 What are the different log file formats that IIS 4.0 supports? Which ones are you likely to want to use? Why?
IIS 4.0 can write log files in one of four different formats: NCSA Common Log File Format, ODBC Logging Format, Microsoft IIS Log File Format, or W3C Extended Log File Format The most useful of these are ODBC Logging and W3C Extended Log File Format ODBC Logging Format allows multiple Web sites to log information to the same database table, and allows you to report on Web site statistics in real-time W3C Extended Log File Format allows you to record the most information, and allows you to save space by recording only the information that you are interested in.
3 Why is log file analysis an unreliable way to measure site traffic?
Log files are an inexact way to measure site traffic because browsers, proxy servers, and firewalls tend to make traffic seem lower, whereas bots and Web spi- ders tend to make traffic seem higher Still, log file analysis is more useful than not having any information at all.
Answers for Day 20 Quiz
1 What is the difference between a client-side wallet and a server-side wallet?
A client-side wallet is a relatively large piece of software that must be downloaded onto a computer The software stores a customer’s credit card and other personal information in an encrypted file on that computer’s hard disk, and submits the information to electronic stores upon the customer’s request.
Trang 2Quiz Answers 543
A
A server-side wallet has little or no software to be downloaded onto a computer.
Instead, the wallet vendor provides a Web site where the customer can enter his information, which is then stored encrypted on the wallet vendor’s servers The wallet vendor submits the customer’s information upon the customer’s request.
2 What is the difference between a SmartCard and a wallet?
A SmartCard is a computer that is the size of a credit card, whereas a wallet is a piece of software SmartCards can be used instead of (or in addition to) usernames and passwords to help secure client-side or server-side wallets They can also run client-side wallets or “electronic purse” software Electronic purse software enables consumers to download small amounts of electronic money directly into the SmartCard, and transfer the electronic money to merchants or other electronic purse users without involving a bank or other clearing company.
3 What is the ECML standard?
The ECML standard is a defined set of names for the <INPUT>fields on an tronic order form It facilitates the compatibility of electronic wallets with E- Commerce sites.
elec-Answers for Day 21
Quiz
1 What is a “spider”?
There is no central index to the Web A spider is the part of a search engine that tries to finds as many Web sites as it can, by starting with a group of known Web pages and following all the links it can find.
2 What is a relevance metric?
A relevance metric computes how well a particular page answers a query string It takes into account the structure and contents of the page, sometimes including
<TITLE>,<META name=”keywords”>,and <META name=”description”>tags.
3 What is a Web ring?
A Web ring is an alternative to search engines and Web directories that makes browsing the Web on particular topics easier A particular Web ring is an informal association of Web sites on a single topic that enables a surfer to navigate between all the sites in the ring.
Trang 34 What is a link exchange?
A link exchange enables Web site owners to cross-promote their sites with banner advertisements For each banner ad the Web site owner displays, he gets a fraction-
al credit toward displaying his own banner on another exchange member’s Web site.
Trang 4ed information, please visit http://www.aspsite.com/answers.
Trang 5Using Chili!Soft’s Chili!ASP (see http://www.chilisoft.com), you also can use Active Server Pages with SUN Solaris and IBM AIX Chili!ASP enables Active Server Pages to run on Apache servers, Netscape Enterprise and FastTrack servers, the Lotus Domino Go Webserver, and O’Reilly Website Pro.
How Do I Get the Latest Version of Internet Information Server and Active Server Pages?
You can download the latest version of Active Server Pages and Internet Information Server at the Microsoft Web site Go to http://www.microsoft.com/iisand select Downloads Download the Windows NT Server 4.0 Option Pack You will be provided with the option of downloading either the Windows NT or Windows 95/98 version of the Option Pack.
How Do I Get the Latest Version of the ActiveX Data Objects (ADO)?
The latest version of the ActiveX Data Objects (ADO) is available at the Microsoft Web site Go to http://www.microsoft.com/dataand download the Microsoft Data Access Components (MDAC).
General Scripting Questions How Do I Add a Quotation Mark to a VBScript String?
There are two ways to add a quotation mark to a VBScript string:
myVar = “He said, “”Hello!”” “myVar = “He said, “ & CHR( 34 ) & “Hello!” & CHR( 34 )
The first method uses two quotation marks in a row to create a single quotation mark The second method uses the ASCII value of the quotation mark character.
How Can I Break a Single VBScript Statement into Multiple Lines?
You can break a single VBScript statement into multiple lines by using the _ underscore character For example, the string in the following statement is broken into several lines
of code by using the &_ character combination:
myVar = “When in the Course of human events, “ &_
“it becomes necessary for one people to “ &_
“dissolve the political bands which have “ &_
Trang 6Frequently Asked Questions About Active Server Pages 547
B
“connected them with another, and to assume “ &_
“among the powers of the earth, the separate “ &_
“and equal station to which the Laws of “ &_
“Nature and of Nature’s God entitle them, “ &_
“a decent respect to the opinions of “ &_
“mankind requires that they should declare “ &_
“the causes which impel them to the separation “
What Is the Proper Method of Comparing Strings in VBScript?
When you compare two strings with the identity operator, the comparison is case tive For example, the following statement returns the value false:
sensi-<%= “apple” = “APPLE” %>
There are two methods of performing a case-insensitive comparison of two strings:
<%= StrComp( “apple”, “APPLE”, vbTextCompare )%>
<%= UCASE( “apple” ) = UCASE( “APPLE” ) %>
The first method uses the VBScript StrComp function with the vbTextCompareconstant.
The second method forces both strings into uppercase.
You should be aware that several other VBScript string functions, such as the InStrand
Replacefunctions, are also case sensitive To perform case-insensitive comparisons with these functions, you must use the vbTextCompareconstant.
The VBScript ON ERROR RESUME NEXTstatement suppresses errors in your script If you include the statement outside any functions or subroutines, the statement will apply to every statement that follows it (otherwise, it will apply only within the function or sub- routine) To re-enable the reporting of errors, use the ON ERROR GOTO 0statement like this:
<%
ON ERROR RESUME NEXT
‘ The following error is ignoredfakeOBJ.Blah
ON ERROR GOTO 0
‘ The following error is reportedfakeOBJ2.Blah
%>
Trang 7How Can I Prevent My Script from Timing Out?
By default, an Active Server Page script will stop executing and time out after 90 onds If you have a long running script, the script may stop executing too early You can extend the amount of time a script is allowed to run by using the ScriptTimeoutproper-
sec-ty of the Serverobject Here’s an example:
<% Server.ScriptTimeout = 200 %>
This statement changes the timeout period to 200 seconds.
When Do I Need to Explicitly Convert a Variable to a Particular Data Type?
If you are comparing numbers or dates and times and there is a danger that VBScript might interpret the values as strings, you should use one of the VBScript conversion functions For example, suppose an HTML form contains two input boxes for two num- bers, and you execute the following script:
The CInt function converts a value to the Integer subtype (also see the CDate,CCur,
IsNumeric, and IsDatefunctions)
When Should I Pass a Variable by Value and When by Reference?
When you pass a variable by value to a subroutine or function, a new instance of the able is created Any changes made to the value of the variable do not affect the value of the original variable On the other hand, when you pass a variable by reference, changes made to the variable do affect the value of the original variable Here’s an example:
Trang 8Frequently Asked Questions About Active Server Pages 549
firstvar = 0secondvar = 0addOne firstvar, secondvar
<%=fname & “ “ & lname%>
Does Active Server Pages Support Dynamic Includes?
Some server-side scripting environments, such as Cold Fusion, support dynamic includes A dynamic include enables you to use a variable for the name of the file to include in a page Active Server Pages does not support dynamic includes The following script will not work:
Trang 9include different pages within an Active Server Page, consider using a script like the lowing:
Active Server Page?
The Option Explicitstatement forces you to declare all your variables Using this statement can make it easier to program complicated Active Server Pages because mis- spelled variable names will generate errors.
You must use the Option Explicitstatement before any other VBScript statement or HTML content in a script If you don’t, you’ll receive an error like the following:
Microsoft VBScript compilation error ‘800a0400’
Expected statement/test.asp, line 5Option Explicit
Trang 10Frequently Asked Questions About Active Server Pages 551
B
DIM myVarmyVar = “Hello!”
%>
</body>
<html>
Session and Application Variables Questions
Why Do Session Variables Sometimes Fail to Work?
Session variables depend on browser cookies If a browser does not support cookies, or a user has turned off cookies or the user’s cookie file is corrupted, Session variables will not work.
How Can I Remove an Application Variable?
The current version of Active Server Pages, included with IIS 4.0, does not contain a method for removing Application variables After you create one, it remains in memory until the Internet Service is stopped, the Global.asa file is changed, or the current appli- cation is unloaded.
The version of Active Server Pages included with IIS 5.0, on the other hand, includes two new methods for removing Application variables: the Removeand RemoveAll
methods
File Questions
How Do I Detect Whether a File Exists?
You can check whether a file exists by using the FileExistsmethod of the
FileSystemObject The following script detects whether a file named test.txt exists:
<%
Set fs = Server.CreateObject( “Scripting.FileSystemObject” )
if fs.FileExists( “c:\test.txt” ) thenResponse.Write “File Exists!”
elseResponse.Write “No File!”
end if
%>
Trang 11How Can I Automatically Display a List of Files in a Directory?
You can display a list of files in a folder by using the FileSystemObjectand the Folder
object like this:
Although you can store an image in a SQL Server BLOB column, it is almost always better to store the URL of an image in a database table rather than the image itself (Storing an image in a database table places unnecessary work on your database server.) For example, the following script displays several images in a row by retrieving the URL
of each image from a database table named myImages:
<%
Set Con = Server.CreateObject( “ADODB.Connection” )Con.Open “FILE NAME=c:\myDataLink.UDL”
mySQL = “SELECT image_URL from myImages”
Set RS = Con.Execute( mySQL )While Not RS.EOF
%>
<img src=”<%=RS( “image_URL” )%>”>
<%
RS.MoveNextWend
%>
How Can I Dynamically Generate a Graph or Image in
an Active Server Page?
Several third-party Active Server Pages components enable you to dynamically create custom images
Trang 12Frequently Asked Questions About Active Server Pages 553
<%
browserType = Request.ServerVariables( “HTTP_REFERER” )Response.WRite browserType
%>
ActiveX Data Objects Questions
Why Do I Sometimes Receive an Error When Using the
Consider the following script It retrieves a user’s first name from an HTML form and inserts it into a database table:
<%
firstname = Request( “firstname” )mySQL = “INSERT myTable ( firstname ) VALUES “mySQL = mySQL & “(‘“ & firstname & “‘)”
Set Con = Server.CreateObject( “ADODB.Connection” )Con.Open “FILE NAME=c:\myDataLink.UDL”
Con.Execute mySQL
%>
Suppose, however, that the user entered a single quote when entering a first name For example, the user entered the name O’Reilly Because SQL uses a single quote to mark the beginning and end of a string value, the single quote would generate an error.
Trang 13Before entering a string into a database table with the Connectionobject, you must first translate any single quotes into two quotes in a row The following script avoids errors caused by a quotation mark:
<%
FUNCTION fixQuotes( theVar )fixQuotes = REPLACE( theVar, “‘“, “‘’” )END FUNCTION
firstname = Request( “firstname” )firstname = fixQuotes( firstname )mySQL = “INSERT myTable ( firstname ) VALUES “mySQL = mySQL & “(‘“ & firstname & “‘)”
Set Con = Server.CreateObject( “ADODB.Connection” )Con.Open “FILE NAME=c:\myDataLink.UDL”
a TEXT field The following script will correctly retrieve and display a TEXT field:
The RecordCountproperty returns the number of rows in a Recordset after it has been opened You cannot use this property with a forward-only cursor when using SQL Server (it will always return -1) To use this property, open a Recordset with a richer cursor type like this:
<! #INCLUDE VIRTUAL=”/adovbs.inc” >
<%
mySQL = “SELECT * FROM WebUsers”
Trang 14Frequently Asked Questions About Active Server Pages 555
RS( “username” ) = “Andrew Jones”
RS( “password” ) = “won’t say”
%>
Trang 15How Do I Retrieve the Value from a SQL Statement That Uses COUNT(*) , MAX , MIN , or @@IDENTITY ?
There are two methods that you can use to retrieve the value from a SQL function or a SQL global variable You can either use an alias for the value or refer to the value by its ordinal position in the Recordset The following example displays the value returned from SQL COUNT(*)using both methods:
<%
mySQL = “SELECT COUNT(*) theCount from Authors”
Set Con = Server.CreateObject( “ADODB.Connection” )Con.Open “FILE NAME=c:\myDataLink.UDL;DATABASE=pubs”
SET RS = Con.Execute( mySQL )Response.Write RS( “theCount” )Response.Write RS( 0 )
%>
The first Response.Writestatement uses the alias theCount The second
Response.Writestatement uses the ordinal position of the value
How Do I Retrieve an Output Parameter from a SQL Stored Procedure Within an Active Server Page Script?
To retrieve an output parameter or a return code, you must use the ADO Command and Parameter objects.
Form and Query String Questions What Causes the Value of a Form Field to Become Truncated?
HTML uses quotation marks to mark the beginning and end of a value So, if a variable contains quotation marks in its value, the value of the variable will be truncated when displayed For example, the HTML form in the following script will not display correctly:
<%
myVar = “He said, “”Hello!”””
%>
<form method=”post” action=”page.asp”>
<input name=”myfield” type=”text”
value=”<%=myVar%>”>
Trang 16Frequently Asked Questions About Active Server Pages 557
<%
myVar = Server.HTMLEncode( “He said, “”Hello!””” )
%>
<form method=”post” action=”page.asp”>
<input name=”myfield” type=”text”
Trang 17What Good Web Sites Have Information on Active Server Pages?
The number of good Web sites that have information on Active Server Pages is growing quickly Here is a list of some of the Web sites that I visit on a weekly basis:
www.aspsite.com The companion Web site to this book.
www.15seconds.com This Web site has thousands of pages of information
on Active Server Pages.
www.activeserverpages.com This Web site has a great component section and
sev-eral interesting articles.
www.asphole.com This Web site contains lists of components and
arti-cles related to Active Server Pages.
www.swynk.com Good site for information on Active Server Pages and
SQL Server.
www.microsoft.com/iis Microsoft’s Internet Information Server site
Trang 18A PPENDIX C
SQL Reference
This appendix provides a brief reference for the Microsoft SQL Server ments and stored procedures that you will find yourself using most often while programming Active Server Pages However, SQL is a complicated language, and this appendix cannot even begin to cover all its nuances The syntax of many of the SQL statements and functions has been simplified in this appendix.
state-To learn everything you’d ever need to know about using SQL with Microsoft
SQL Server, rush to your local bookstore and buy Microsoft SQL Server 7.0 Unleashed by Greg Mable, et al (1999, Sams Publishing, ISBN 0-672-31227-1).
SQL Statements
The following SQL statements enable you to create and remove database tables and stored procedures, retrieve data from a database table, modify table data, and grant permissions on database objects.
Trang 19The SELECTstatement is used to retrieve one or more rows from a database table Instead
of listing particular column names in the select_list, you can also use *as a wildcard character to represent all columns.
Examples
• Using SELECTto retrieve all the columns and all the rows from the Authorstable:
SELECT * FROM Authors
• Using SELECTto retrieve the last name of the author who has the first name
Andrew:
SELECT au_lnameFROM AuthorsWHERE au_fname = ‘Andrew’
• Using SELECTto retrieve a list of publishers and book titles The results are ordered
by the name of the publisher:
SELECT pub_name, titleFROM publishers,titlesWHERE publishers.pub_id = titles.pub_idORDER BY pub_name
• Using SELECTto retrieve the names of the first 10 authors from the Authorstable
in order of the last name.
SELECT TOP 10 au_fname, au_lnameFROM Authors
• Using INSERTto add a new usernameand passwordto a Passwordstable.
INSERT Passwords ( username, password )VALUES ( ‘Andrew’, ‘Jones’ )
• Using INSERTwith SELECTto insert multiple rows into the newPasswordstable from the oldPasswordstable:
INSERT newPassword ( username, password )SELECT username, password
FROM oldPasswords
Trang 20SQL Reference 561
C
UPDATE
UPDATE table_name SET column_name = value
WHERE search_condition
The UPDATEstatement is used to update one or more rows in a database table.
Examples
• Using UPDATEto change the password in every row in a table named Passwords
where the username column has the value Andrew Jones:
UPDATE PasswordsSET password = ‘secret’
WHERE username = ‘Andrew Jones’
• Using UPDATEto change the values of multiple columns all at once:
UPDATE PasswordsSET username = ‘Bill Gates’,password = ‘Billions’
WHERE username = ‘Andrew Jones’
TRUNCATE TABLE
TRUNCATE TABLE table_name
This statement efficiently removes all the rows from a table.
Example
• Using TRUNCATE TABLEto remove all the rows from the Passwordstable:
TRUNCATE TABLE Passwords
Trang 21CREATE TABLE
CREATE TABLE table_name
( column_name data_type [, n] )
The CREATE TABLEstatement is used to create a new database table See the later section,
“SQL Server Data Types,” for a list of data types that you can use when defining the columns for a table.
• Using CREATE TABLEto create a table with an IDENTITY column:
CREATE TABLE WebUsers( user_id INT IDENTITY, username VARCHAR( 50 ) )
• Using CREATE TABLEto create a table with a column with a default value of the current data and time:
CREATE TABLE WebUsers(
username VARCHAR( 50 ),entrydate DATETIME DEFAULT GETDATE())
CREATE PROCEDURE
CREATE PROCEDURE procedure_name [ @parameter_name data_type [OUTPUT] ] [, n]
ASsql_statement [, n]
The CREATE PROCEDUREstatement is used to create a new SQL Server stored procedure.
SELECT * FROM Passwords
• Using CREATE PROCEDUREto create a new stored procedure that accepts an input parameter and returns an output parameter:
Trang 22WHERE password = @password
GRANT SELECT ON Passwords TO WebUser
• Granting all permissions on a table named Passwordsto the publicrole.
GRANT ALL ON Passwords TO public
DROP TABLE
DROP TABLE table_name
This statement permanently removes a database table.
Example
• Using DROP TABLEto permanently remove a table named Passwords:
DROP TABLE Passwords
DROP PROCEDURE
DROP PROCEDURE procedure_name
This statement permanently removes a stored procedure.
Trang 23EXECUTE
[@return_code = ] procedure_name [@parameter = value | @variable [OUTPUT] ] [, n]
The EXECUTEstatement is used to run a SQL stored procedure.
• Using EXECUTEto execute a stored procedure that has both an input parameter and
an output parameter:
DECLARE @password VARCHAR( 20 )EXECUTE getPassword ‘Andrew Jones’, @password OUTPUTSELECT @password
SQL Functions
All the following functions can be used with the SELECTstatement The majority of these functions can be used to retrieve summary information about the data stored in a table column.
Trang 24• Using COUNTto return the number of rows in a table named WebUserswhere the username column does not have a NULLvalue:
SELECT COUNT( username )FROM WebUsers
MAX
MAX( column_name )
The MAXfunction is used to retrieve the maximum value for a table column.
Trang 25• Using SUM to return total number of times that a Web site has been visited:
SELECT SUM( user_numvisits )FROM WebUsers
Trang 26WHERE password = ‘Billions’
SELECT @@ROWCOUNT
SQL Server Stored Procedures
The following two system stored procedures can be used to retrieve information about the objects in a database.
sp_help
sp_help [table_name | procedure_name ]
The sp_helpsystem stored procedure is used to display information on database objects.
When used without a table or procedure name, it lists the properties of all the objects in the current database.
Examples
• Using sp_helpto display information about the WebUserstable (Returns tion including the table columns, indexes and constraints):
informa-sp_help WebUsers
• Using sp_helpto display information about the stored procedure named
getAuthors(Returns information including the date and time the procedure was created):
Trang 27SQL Server Data Types
You can use any of the data types in Tables D.1–D.6 when defining table columns or local variables:
TABLEC.1 Character Data Types
Data Type Description
CHAR Fixed-length character data with a maximum size of 8,000 characters
VARCHAR Variable-length character data with a maximum size of 8,000 characters
TEXT Variable-length character data with a maximum size of 2,147,483,647 characters
NCHAR Unicode fixed-length character data with a maximum size of 4,000 characters
NVARCHAR Unicode variable-length character data with a maximum size of 4,000 characters
NTEXT Unicode Variable-length character data with a maximum size of 1,073,741,823
char-acters
TABLEC.2 Numeric Data Types
Data Type Description
BIT Has the value 0or 1
INTEGER Integer data between –2,147,483,648 and 2,147,483,647
SMALLINT Integer data between –32,768 and 32,767
NUMERIC Fixed precision and scale numeric data between –10^38 –1 and 10^38 –1
DECIMAL Same as NUMERIC
FLOAT Floating precision data type between –1.79E + 308 through 1.79E + 308
Floating precision data type between –3.40E + 38 through 3.40E + 38
Trang 28SQL Reference 569
C
TABLEC.3 Date and Time Data Types
Data Type Description
DATETIME Can have a value between January 1, 1753, and December 31, 9999 (accurate
to 3.33 milliseconds)
SMALLDATETIME Can have a value between January 1, 1900, through June 6, 2079 (accurate to
one minute)
TABLEC.4 Money Data Types
Data Type Description
MONEY Can have a value between –922,337,203,685,477.5808 and
922,337,203,685,477.5807
SMALLMONEY Can have a value between –214,748.3648 and 214,748.3647
TABLEC.5 Binary Data Types
Data Type Description
BINARY Fixed-length binary data with a maximum size of 8,000 bytes
VARBINARY Variable-length binary data with a maximum size of 8,000 bytes
IMAGE Variable-length binary data with a maximum size of 2,147,483,647 bytes
TABLEC.6 Miscellaneous Data Types
Data Type Description
CURSOR Used with stored procedures that have a reference to a cursor as an OUTPUT
parameter
TIMESTAMP Provides a database-wide unique identifier
UNIQUEIDENTIFIER Provides a Globally Unique Identifier (GUID)
Trang 30AbsolutePage property (Recordset object), 134 abstracts, 499
Access, 11
disadvantages, 118product catalog databasesconnecting to, 93-95creating, 89-90manageproducts.asppage, 100-102,113-117Products table, 91-93records, adding, 95-100retrieving informationfrom, 106-108updating, 104-105,109-112upgrading to SQLServer, 90quotation marks, 102-104starting, 90
access control, Internet Service Manager, 379-384
Account page (order ing), 260
track-account.asp page, 260-261showorders.asp page,262-263
showOrderStatus method,263-264
accounts
Administrator, 331-332CyberCash, 241-242
ACID test, 214 acquiring financial institu- tions (CyberCash), 241 active customers, display- ing, 64-65
Active Data Objects See
ADOs
Active Server Pages See
ASPs
Ad Rotator component, 16, 514-515
implementing, 516-517redirection files, 515schedule files, 515-516
Trang 31ad targeting, 513 Add User script (database authentication), 281-282 addCart.asp page, 206-211 addCookie method, 181 addForm method, 247 AddNew method, 201-202 addProduct.asp page, 97-100, 396-397 addresses (IP)
retrieving, 41-42second IP addresses,347-349
addUser method, 176-178, 488-489
administration
Administrator accounts,331-332
ASP (Active Server Page)administrative pages,389
addProduct.asp,396-397adminPage.asp,405-406donePost.asp, 401-405passwords, 390Posting Acceptor,391-395storeFuncs.asp, 393updateProduct.asp,398-401upload.asp, 393-394FTP (File TransportProtocol) Service, 385anonymous access, 386configuring, 386-387CuteFTP, 389file uploads, 387-389installing, 385-386
Internet Service Manager(HTML), 377-378access restrictions,379-384installing, 378-379remote administrationtasks, 384
Administrator accounts, 331-332
adminPage.asp page, 405-406
ADO (Active Data Objects)
database updates, 200adding records,201-202deleting records,203-204editing records,202-203Recordset object, 119displaying records in,119-121
methods, 148-149,201-203opening, 121-122properties, 122-123,
134, 200-201transactions, 218-219, 234example of, 218-219marking end of, 218stopping, 218
Advanced Server (Windows 2000), 11
advertising, 495-496
Ad Rotator component,514-515
implementing, 516-517redirection files, 515schedule files, 515-516
ad targeting, 513affiliate programs, 514
banner ads, 510link exchanges,510-512purchasing, 513bulk mailings, 428marketing, 438message composition,432-435
recipients, 429-432sending messages,435-437Children’s AdvertisingReview Unit, 342-343favorite product categories(customized ads), 307default.asp page modi-fications, 315-316displaying featuredproducts, 313-315retrieving, 310-311saving, 311-312selecting, 308-310storing, 307updating, 312reward/loyalty programs,513-514
search engines, 496listing sites with,496-508spidering process, 496Web rings, 508-510
affiliate programs, 514 algorithms
Luhn check, 189popularity algorithms,507-508
alreadyUser method, 180 analyzing site usage logs, 455
ASPs (Active ServerPages), 462-464commercial log-analysistools, 464