머리말: 요즘은 인터넷 곳곳에 포럼이 있지만 이런 상황을 겪어본 적이 있는지 궁금합니다. 지저분한 토론 정보에서 원하는 콘텐츠를 찾는 것은 매우 시간이 많이 걸리고 노동 집약적인 일입니다. 더 이상 어떤 포럼에도 가고 싶지 않습니다. 그렇다면 우리 웹사이트 포럼의 콘텐츠에 감사 기능을 추가할 수 있을까요? 즉, 네티즌이 포럼에 게시한 모든 기사는 즉시 표시되지 않으며, 다른 네티즌에게 추천할 가치가 있다고 판단되면 게시됩니다. 그렇지 않으면 삭제하여 공간을 낭비하지 않고 하이라이트 영역처럼 보이도록 하세요. 이런 식으로 귀하의 포럼은 일반 포럼보다 더 명확하고 유익한 콘텐츠를 제공할 수 있습니다. 이를 웹사이트에 올리면 더 많은 네티즌의 방문을 유도할 수 있습니다. 이 아이디어는 확실히 실현될 수 있으며, 아래에서 만드는 방법을 간략하게 소개하겠습니다.
참고: 이 기사는 ACCESS 데이터베이스, HTML 및 ASP에 대해 어느 정도 이해하고 있는 독자에게 적합합니다.
1. 포럼 구조 분석
위의 기능적 요구사항 분석을 통해 포럼 제작을 네 부분으로 나눌 수 있습니다.
(1) 네티즌 등록 및 관리 모듈: 웹마스터나 중재자가 도입되므로 포럼에서 이를 제어할 수 있어야 합니다. 포럼 인증. 이 모듈의 기능은 등록된 네티즌을 관리하고 관련 쿼리를 제공하는 것입니다. 예를 들어 특정 작성자가 게시한 모든 기사를 쿼리하고, 가장 많은 기사를 게시한 네티즌 10명을 쿼리하는 등의 작업을 수행합니다. 포럼 규모가 그리 크지 않은 경우에는 이 모듈을 생략하여 중재자 인증 기능만 갖고 등록 및 쿼리에 관한 부분을 제거할 수 있습니다.
(2) 기사 표시 모듈: 중재자가 검토하고 추천할 가치가 있다고 판단되는 모든 기사를 표시합니다.
(3) 기사 게시 모듈: 등록된 네티즌이 자신의 의견을 게시하고 게시 후 조정자의 검토를 기다리는 장소를 제공합니다.
(4) 기사 심사 모듈: 홈페이지에 게재되었으나 심사되지 않은 모든 기사를 중재자가 처리하여 게재 여부를 결정합니다.
특정 기능 요구 사항을 이해한 후 모듈에 따라 포럼 디자인을 시작할 수 있습니다. 물론 이들 모듈은 포럼 구조를 기능적으로만 분할할 뿐 실제로 완전히 독립적으로 설계할 수는 없습니다. 이러한 소규모 애플리케이션의 경우 완전한 모듈식 설계가 필요하지 않습니다. 좋은 계획을 통해 프로그램 코드를 직접 작성하는 것이 더 쉬울 수 있습니다.
포럼을 구현하는 방법에는 일반적으로 파일이나 데이터베이스를 사용하는 두 가지 방법이 있습니다. 상대적으로 말하면, 데이터베이스를 사용하는 것이 더 간단하고 효율적이며, 포럼에 대한 더 나은 제어를 제공할 수 있으며, 데이터에 대한 일부 확인 및 보호도 제공할 수 있습니다. 여기서는 ACCESS 데이터베이스를 사용하고 있습니다. 일반적인 중소 규모 애플리케이션의 경우 ACCESS가 해당 작업을 수행할 수 있습니다.
위의 분석을 통해 우리는 4개의 테이블이 있어야 함을 알 수 있습니다. 아래에는 각 테이블의 구조가 나와 있습니다.
(1) 저자 테이블(저자 정보를 저장하기 위해 사용):
ID: 텍스트 유형, 필수. 네티즌의 코드네임입니다.
비밀번호: 텍스트 유형, 필수입니다.
닉네임: 텍스트 유형, 필수입니다.
이메일: 텍스트 유형, 필수입니다.
위치: 숫자 유형, 필수입니다. -1은 일반 네티즌을 나타내고, 0은 웹마스터를 나타냅니다. 0보다 큰 숫자는 중재자를 나타냅니다.
기사 수: 숫자 유형, 필수. 네티즌이 게시한 총 기사 수입니다.
이름: 텍스트 유형, 선택 사항.
성별: 텍스트 유형, 선택 사항.
전화: 텍스트 유형, 선택사항.
(2) 콘텐츠 테이블(특정 기사 내용 및 관련 정보를 저장하는 데 사용):
ID: 자동으로 번호를 부여하고 색인화하여 검색 속도를 높입니다.
칸반 ID: 칸반 목록의 숫자 유형으로, 기사가 속한 칸반 보드를 나타냅니다.
주제 ID: 기사가 속한 주제를 나타내는 주제 테이블의 숫자 유형입니다.
작성자 ID: 작성자 테이블의 텍스트 유형으로 기사 작성자를 나타냅니다.
날짜: 날짜/시간 형식으로 미리 설정된 초기값은 NOW() 함수로, 현재 시스템 시간을 자동으로 값으로 사용합니다.
제목: 텍스트 유형. 기사 제목입니다.
게시: 예/아니요 유형입니다. "True"는 기사가 검토되었으며 게시될 수 있음을 의미하고 "No"는 기사가 아직 검토되지 않았음을 의미합니다.
추천: 숫자 유형, 기사의 추천 정도.
내용: 비고 유형, 기사의 특정 내용입니다.
클릭수 : 숫자형, 기사 클릭수.
(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 콘텐츠 테이블.kanban ID = 칸반 목록.ID) ON 주제 테이블.ID = 콘텐츠 table.topic ID
WHERE (((content table.ID)=[articleid]));
(2) 중재자 비밀번호 쿼리:
SELECT 칸반 목록.보드 소유자, 작성자 테이블.비밀번호
FROM 작성자 테이블 INNER JOIN 칸반 목록 ON 작성자 테이블.ID = 칸반 목록.보드 소유자
WHERE (((kanban list.ID)=[id];
(3) 작성자 쿼리:
SELECT 작성자 테이블.*
작성자 테이블에서
WHERE (((저자 테이블.ID)=[id]));
(4) 게시된 글 목록:
SELECT [콘텐츠 테이블].[ID], [콘텐츠 테이블].[제목], [콘텐츠 테이블].[저자 ID ] AS 작성자, [목차].[날짜], [목차].[추천], [목차].[클릭수] AS 클릭수입니다.
목차에서
WHERE ((([목차].[주제 ID])=[TopicIndex]) And (([목차].[Published])=True));
게시되지 않은 기사 목록:
SELECT Table of Contents.ID AS Article id, topic table.ID AS 주제 id, topic table.title AS topic, content table.title AS title, content table.author ID AS 작성자, content table.date AS 날짜
FROM 주제 테이블 INNER JOIN 콘텐츠 테이블 ON 주제 테이블.ID = 콘텐츠 테이블.주제 ID
WHERE (((Content table. Publish)=False) AND ((Content table. Kanban ID)=[boardid]));
(5) 주제 목록:
SELECT Topic table.*, 이름 AS Kanban 이름.
FROM 칸반 목록 INNER JOIN 주제 테이블 ON 칸반 목록.ID = 주제 테이블.kanban
WHERE (((topic table.kanban)=[boardIndex]));
또한 몇 가지 쿼리가 있는데 대부분 유사하므로 하나씩 나열하지는 않겠습니다.
위 쿼리문에서는 쿼리 매개변수인 "[", "]"로 둘러싸인 내용을 볼 수 있습니다. 실행 중에 매개변수 값을 제공해야 하며, 실행되기 전에 매개변수 값을 쿼리 문으로 가져와야 합니다. 또 다른 주의할 점은 INNER JOIN 쿼리를 설정할 때 테이블 간의 관계를 디자인 뷰에 추가해야 한다는 것입니다. 그렇지 않으면 INNER JOIN 쿼리 문이 자동으로 생성될 수 없습니다.
이제 데이터베이스 설계는 끝났고, 다음 작업은 ASP이다.
2. 구성
1. 기본 양식을 작성하려면
먼저 네티즌이 등록 정보를 입력할 수 있는 양식을 제공해야 합니다. 이는 HTML 컨텐츠이며, 등록을 구현하는 ASP 스크립트를 자세히 살펴보겠습니다.
(1) 정보 중 작은따옴표를 두 개의 작은따옴표로 변경하고 앞뒤에 작은따옴표를 추가합니다.
함수 SqlStr(데이터)
SqlStr = "'" & 바꾸기( data,"'", "''" ) & "'"
End Function
참고: 사용자 입력의 작은따옴표(')를 두 개의 작은따옴표('')로 변환하는 데 사용되는 사용자 정의 함수입니다. ASP에서 문자열은 큰따옴표로 묶여 있으므로 위의 "'"는 작은따옴표 하나만 있는 문자열을 나타냅니다. 하나의 작은따옴표를 두 개의 작은따옴표로 바꿔야 하는 이유는 SQL 문에서 작은따옴표를 사용하여 변수를 나타내기 때문입니다. 혼동을 피하기 위해 문자열의 작은따옴표는 두 개의 작은따옴표로 표시되어야 합니다. 모든 사용자 입력은 SQL 문에 변수로 포함되어야 하므로 이 기능은 필수적입니다.
(2) 보관 준비
id=요청("ID")
비밀번호=요청("비밀번호")
별명=요청("닉네임")
email=요청("이메일")
섹스=요청("섹스")
참고: 사용자 입력 양식의 내용을 변수에 저장할 필요는 없지만 읽고 쓰기가 더 쉽습니다.
if Request("name")=""then name=" " else name=request("name")
if Request("phone")=""thenphone=" " elsephone=request("phone")
이러한 내용은 반드시 입력할 필요가 없으므로 사용자가 아무것도 입력하지 않아 데이터베이스 동작에 오류가 발생하는 것을 방지하기 위함입니다. , 채워지지 않은 필드를 공백으로 대체해야 합니다.
(3) 연결 설정
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()와 같은 기능을 잘 활용하면 웹 애플리케이션의 이식성을 높일 수 있습니다.
Set cmd = Server.CreateObject("ADODB.Command")
(4) 작성자가 이미 존재하는지 쿼리합니다.
cmd.ActiveConnection = conn으로 설정
cmd.CommandText = "쿼리 작성자"
ReDim param(0) '매개변수 배열 선언
param(0) = CStr(id) ' Cint는 무시할 수 없습니다.
Set rs = cmd.Execute(,param)
참고: 이 섹션은 저장된 프로그램을 실행하는 데 사용됩니다. ADO에서 쿼리를 실행하는 방법은 여러 가지가 있지만 저장 프로시저의 경우 Command 개체만 사용할 수 있습니다. 먼저 cmd라는 Command 객체를 생성한 후 cmd 객체의 ActiveConnection 속성에 conn 연결 객체를 설정하고, CommandText 속성에 실행할 쿼리의 이름인 "Query Author"를 설정한 후 해당 쿼리에 값을 할당합니다. 쿼리 매개변수. 매개변수 배열 param(0)을 선언했습니다. 쿼리 "Query Author"에는 매개변수가 하나만 있고 배열에는 구성요소가 하나만 있기 때문입니다. 일반적으로 쿼리에 여러 매개변수가 있는 경우 해당 구성 요소 수를 포함하는 매개변수 배열을 선언해야 합니다. 그리고 매개변수가 나타나는 순서는 배열의 구성요소 순서에 해당합니다. 매개변수 쿼리를 사용하는 과정에서 매개변수의 유형이 엄격하게 일치해야 한다는 사실에 특별한 주의를 기울여야 합니다. 그렇지 않으면 오류가 발생하므로 위의 CStr() 유형 변환 함수는 필수입니다.
그렇지 않은 경우(rs.eof 또는 rs.bof)
response.write "오류입니다. 입력한 ID 번호가 이미 사용 중입니다. 다른 번호를 입력해 주세요!"
또 다른
sql = "작성자 테이블(ID, 닉네임, 이메일, 비밀번호, 이름, 학교, 학과, 성별, 전화번호) 값에 삽입("
sql = sql & SqlStr(id) & ","
sql = sql & SqlStr(별명) & ","
sql = sql & SqlStr(이메일) & ","
sql = sql & SqlStr(비밀번호) & ","
sql = sql & SqlStr(이름) & ",&", "
sql = sql & SqlStr(섹스) & ","
sql = sql & SqlStr(전화) & ")"
conn.Execute sql은
SQL Insert 문을 사용하여 데이터베이스에 데이터를 삽입합니다. 사실 이 쿼리도 미리 저장된 프로그램으로 만들어서 데이터베이스에 넣을 수도 있는데 좀 게을렀어요:-) 그런데 비교해 보면 미리 저장된 프로그램의 장점도 볼 수 있어요. 실행 중에 쿼리를 작성하는 것이 번거롭습니다.
2. 기사 표시 모듈을 구축합니다.
앞서 언급한 것처럼 특정 기사는 게시판과 본문에 속합니다. 따라서 기사를 표시할 때 게시판 목록과 주제 목록의 두 페이지를 거쳐야 특정 주제에 대한 기사 목록을 얻을 수 있습니다.
(1) 보드 목록 표시 페이지:
<html>
<머리>
<title>칸반 목록</title>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</head>
(2) 연결을 열고 칸반 목록을 표시합니다.
< %Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "드라이버={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
sql = "칸반 목록에서 * 선택"
rs=conn.execute(sql) 설정
%>
참고: 간단한 SQL 쿼리는 칸반 보드에 대한 모든 정보를 레코드 세트 RS로 반환합니다. 다음 작업은 녹화된 내용을 표시하고, 해당 보드명에 해당 보드의 주제를 표시할 수 있는 링크를 생성하는 것입니다.
<본체 bgcolor="#FFFFFF">
< h2 align="center">칸반 목록</h2>
<테이블 너비="60%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
< td height="35" width="25%">스캔보드 이름</td>
<td height="35" width="21%">사회자</td>
<td height="35" width="23%">토픽 수</td>
<td height="35" width="31%">관리자 로그인</td>
</tr>
참고: 이 부분은 테이블의 각 열 제목을 표시하기 위한 것입니다. 여기서는 RS 레코드의 내용을 표시하는 통합 기능을 사용하지 않습니다. 이렇게 하면 테이블의 모양과 스타일을 더 많이 제어할 수 있기 때문입니다. . 사용하기는 조금 번거롭긴 하지만 좀 더 유연해졌습니다.
< %
하다
보드ID=rs("id")
보드이름=rs("이름")
Boardmanager=rs("보드 소유자")
response.write "<tr><td><a href=qBoard.asp?boardid="& Boardid& "&boardname=" & Boardname& ">" & Boardname &"< /a>< /td>"
참고: 이 줄은 중요한 점은 각 보드의 이름을 클릭하면 해당 보드의 테마를 보여주는 페이지로 연결된다는 점입니다. 프로그램 코드가 좀 복잡해 보이는데, 분해해서 설명드리면 이해하실 겁니다. 클릭하면 브라우저는 표시할 보드의 ID 번호를 나타내는 매개변수 Boardid를 사용하여 qBoard.asp 페이지를 요청합니다. 요청 페이지와 매개변수를 구분하기 위해 물음표(?)가 사용됩니다. Boardid는 앞서 설정한 변수로, 해당 보드의 ID번호가 들어있습니다. 이 연결에는 보드 이름을 qBoard.asp 페이지에 전달하는 데 사용되는 또 다른 매개변수인 보드 이름도 포함되어 있습니다. 여러 매개변수를 구분하려면 "&"를 사용하세요. 이 매개변수는 qBorad.asp에서 보드 이름을 쿼리하기 위해 Boardid를 다시 사용하지 않기 위해 전달됩니다. 일반적으로 데이터베이스 작업은 가능한 한 적게 사용해야 하며, 이렇게 하면 ASP 페이지의 성능이 향상될 수 있습니다. Response.Write 문은 문자열을 매개변수로 사용하기 때문에 위의 문자열과 변수 사이에는 "&" 연결 문자가 사용됩니다. ASP 페이지 설명의 최종 결과는 다음과 같아야 합니다.
<td>< a href=qBoard.asp?boardid=1&boardname=시스템 보드>시스템 보드</a><td>.
response.write "<td>< a href=qAuthor.asp?author="&boardmanager & ">" &boardmanager & "< /a></td>"
response.write "< td>" &rs("주제 수") & "< /td>"
response.write "< td>< a href=managerlogin.asp?boardid="&boardid & ">보드 처리< /a></td>< /tr>"
참고: 이 표에서는 연결 외에 칸반 테마의 내용에는 모자이크 쿼리 부분과 보드 서비스 처리 부분도 있습니다. 중재자 쿼리는 단순히 데이터베이스에서 작성자 정보를 검색하여 표시하는 부분입니다. 말했다. 보드 처리는 Managerlogin.asp 페이지에서 처리됩니다. 이는 기사 검토 모듈에 속하며 나중에 자세히 설명하겠습니다.
rs.movenext
rs.eof까지 반복
%>
참고: do... 루프를 통해 레코드 세트의 모든 메시지가 표시됩니다.
</테이블>
<div align="center"><br>
보드 이름을 클릭하면 주제 목록을 볼 수 있고, 보드 소유자 이름을 클릭하면 보드 소유자의 메시지를 볼 수 있습니다.
</div>
</본문>
</html>
< %
rs=아무것도 설정하지 않음
연결 닫기
conn=아무것도 설정하지 않음
%>
(3) qBaord.asp 페이지를 생성합니다:
< %
boardid=request("boardid") '이전 페이지에서 전달된 보드 ID 번호를 가져옵니다.
conn = Server.CreateObject("ADODB.Connection") 설정
conn.Open "드라이버={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
cmd = Server.CreateObject("ADODB.Command") 설정
cmd.ActiveConnection = conn으로 설정
cmd.CommandText = "주제 목록"
ReDim param(0) //참고: 매개변수 배열 선언
param(0) = CLng(boardid)//참고: CLng는 무시할 수 없습니다.
rs = cmd.Execute(,param) 설정
%>
<html>
<머리>
<제목>주제 목록</제목>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</머리>
<본체 bgcolor="#FFFFFF">
< h1 align="center"><%=rs("kanban name")%>보드 테마 목록</h1>
<테이블 너비="80%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
<td width="89%" height="21">테마</td>
<td width="11%" height="21">기사 수</td>
</tr>
< %
하다
주제id=rs("id")
주제이름=rs("제목")
sum=rs("기사 개수")
response.write "< tr>< td><a href=qtopic.asp?topicid=" & topicid& "&boardname=" & boardname& ">" & topicname &"< /a>< /td>"
response.write "<td>" &sum & "< /td>< /tr>"
rs.movenext
rs.eof까지 반복
%>
</테이블>
</본문>
</html>
참고: qBoard.asp는 특정 포럼의 모든 주제를 나열합니다. 주제 이름을 클릭하면 해당 주제 기사 목록으로 들어갑니다. 이 목록은 ASP 스크립트 qTopic.asp에 의해 구현됩니다. Qtopic.asp의 프로그램 코드는 본질적으로 qBoard.asp와 거의 동일하지만 각각의 세부 사항에 차이가 있으므로 여기서는 더 자세히 설명하지 않겠습니다.
(4) 기사 목록에서 기사 제목을 클릭한 후 기사 콘텐츠 검색 페이지article.asp를 입력합니다.
< %
기사ID=request("기사ID")
conn = Server.CreateObject("ADODB.Connection") 설정
conn.Open "드라이버={Microsoft AccessDriver(*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
cmd = Server.CreateObject("ADODB.Command") 설정
cmd.ActiveConnection = conn으로 설정
cmd.CommandText = "ID로 기사 쿼리"
ReDim param(0) '선언
param(0) = CLng(articleid) ' Cint는 무시할 수 없습니다.
rs = cmd.Execute(,param) 설정
작성자=rs("작성자")
title=rs("제목")
data=rs("날짜")
rate=rs("권장 학위")
Boardid=rs("칸바니드")
주제ID=rs("주제ID")
보드이름=rs("보드이름")
topicname=rs("주제 이름")
콘텐츠=rs("콘텐츠")
content=replace(content,vbCrlf,"</p><p>")
content="< p>" & content& "< /p>"
참고: 콘텐츠 필드에는 줄 바꿈 문자를 포함할 수 있는 메모 유형 텍스트가 포함되어 있습니다. HTML 표시에서 개행 문자(즉, vbCrlf 상수)는 HTML 단락 기호로 대체되어야 합니다. 이런 방식으로 단락 간의 연결이 원래 입력 형식을 방해하지 않습니다. 더 나은 디자인을 원한다면 CSS를 사용하여 <P> 태그를 재설정하고 test-indent 속성을 설정하여 각 단락 시작 부분에 공백을 확보할 수 있습니다.
(5) 클릭수에 1을 더합니다.
sql="콘텐츠 테이블 업데이트 클릭수 설정=클릭수+1Where ID=" & 기사ID
conn.execute sql
참고: 여기에 SQL 문이 있습니다. 페이지가 표시되면 해당 테이블의 클릭 수 필드가 1씩 증가하므로 기사 조회 수를 순서대로 계산하고 순위를 매길 수 있습니다. 기사 문을 실행해 보니 원래 SQL 문에 내장된 변수 이름은 작은따옴표로 구분해야 하는데 여기서는 기사 ID 변수에 작은따옴표를 추가하지 않고 실제로 통과했고, 이렇게 쓰고 있다는 것을 알게 되었습니다. 예전에는 항상 오류가 발생했는데 ADO의 새 버전 때문인지 궁금합니다.
cmd=아무것도 설정하지 않음
%>
<html>
<머리>
<제목>제목 없는 문서</title>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</머리>
<본체 bgcolor="#E9E9E4">
<테이블 너비="89%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#CCCCCC">
<td>저자:<font color="#FF3366"><a href="qauthor.asp?author=< %=author%>">< %=author%> < /a>< /font>게시일: < 글꼴 색상="#FF3333"><%=data%>< /font>
Kanban 보드:<font color="#FF3333"><a href="qboard.asp?boardid=<%=boardid%>"><%=boardname%>< /a>< /font>보드 소유자 추천:< 글꼴 색상="#FF3333">#rate#</font>< /td>
</tr>
<tr bgcolor="#CCCCCC">
<td>제목:<font color="#FF3333"><%=title%>
주제: <a href="qtopic.asp?topicid=<%=topicid%>"> < %=topicname%>< /a> < /font>< /td>
</tr>
<tr valign="top">
<td>
<시간>
<font color="#FF3366">기사 내용:< /font><br>
<br>
< 글꼴 색상=파란색>< %response.writecontent%>< /font>
<br>
<br>
</td>
</tr>
<tr valign="top">
<td 높이="18">
<테이블 너비="50%" border="0"cellspacing="0" cellpadding="0"align="right" bgcolor="#CCCCCC">
<tr>
< td 너비="0%"> < /td>
<td width="65%">주제에 대하여<a href="submit.asp?topicid=< %=topicid%>&boardid=<%=boardid%>">댓글 남기기< /a></td>
이 연결을 통해 네티즌들은 이 댓글의 주제에 대해 자신의 의견을 표현할 수 있습니다. 이것이 다음 모듈에서 다룰 내용이므로 여기서는 언급하지 않겠습니다.
</tr>
</테이블>
</td>
</tr>
</테이블>
</본문>
</html>
< %
rs=아무것도 설정하지 않음
연결 닫기
conn=아무것도 설정하지 않음
%>
이쯤 되면 기사 표시 부분도 완성됩니다. 기사 게시 부분이 어떻게 구현되는지 살펴보겠습니다.
3. 기사 게시 부분을 구성합니다.
기사 게시 모듈에는 두 개의 페이지만 있습니다. 하나는 앞에서 언급한 입력 양식을 제공하는 데 사용되는 submit.asp이고 다른 하나는 양식을 처리하는 데 사용되는 subresult.asp입니다. 입력. 이전 페이지는 기본적으로 HTML 형식입니다. subresult.asp의 내용을 살펴보겠습니다.
<html>
<머리>
<제목>기사 게재</제목>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</머리>
<본체 bgcolor="#FFFFFF">
< %
작성자=요청("저자")
비밀번호=요청("비밀번호")
topicid=request("주제ID")
보드ID=요청("보드ID")
콘텐츠=요청("콘텐츠")
title=request("title")
참고: 이 섹션에서는 submit.asp에 제출된 테이블 콘텐츠를 가져와 해당 변수에 넣습니다.
<html>
<머리>
<제목>기사 게재</제목>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</머리>
<본체 bgcolor="#FFFFFF">
< %
작성자=요청("저자")
비밀번호=요청("비밀번호")
topicid=request("주제ID")
보드ID=요청("보드ID")
콘텐츠=요청("콘텐츠")
title=request("title")
(1) 저자가 존재하는지 질의
cmd.CommandText = "id='" & 작성자 &"'"인 작성자 테이블에서 *를 선택하세요.
Set rs = cmd.Execute()
(2) 권한 확인
cmd.CommandText = "id='" & 작성자 &"'"인 작성자 테이블에서 *를 선택하세요.
Set rs = cmd.Execute()
참고: 이 섹션에서는 작성자의 권한을 확인하고 계정이 존재하지 않거나 비밀번호가 잘못된 경우 그에 따라 오류를 처리합니다. 여기에서는 현재 ASP 스크립트를 종료하는 데 사용되는 response.end의 사용법을 볼 수 있습니다. if 문과 결합하면 프로그램에서 예상되는 오류를 처리할 수 있습니다. 좋은 웹 애플리케이션에서는 오류 처리가 필수적입니다.
(3) 정보 중 작은따옴표를 작은따옴표 2개로 변경하고, 앞뒤에 작은따옴표를 추가합니다.
함수 SqlStr(데이터)
SqlStr = "'" & 바꾸기( data,"'", "''" ) & "'"
기능 종료
'데이터베이스에 쓰기
sql = "콘텐츠 테이블에 삽입(보드 ID, 주제 ID, 작성자 ID, 제목, 콘텐츠)값( "
sql = sql & SqlStr(topicid) & ","
sql = sql & SqlStr(보드ID) & ","
sql = sql & SqlStr(작성자) & ","
sql = sql & SqlStr(제목) & ","
sql = sql & SqlStr(콘텐츠) & ")"
conn.SQL 실행
%>
<h2>기사가 데이터베이스로 전송되었으며 중재자가 검토한 후 볼 수 있습니다. <h2>
</본문>
</html>
이 시점에서 기사가 데이터베이스에 저장되었습니다. 하지만 즉시 표시할 수 없으며 중재자의 승인이 필요합니다. 다음으로 포럼의 관리 부분을 살펴보겠습니다.
4. 포럼의 관리 부분은
우리 포럼의 핵심이지만 구현에는 특별한 것이 없습니다. 양식 처리, 데이터베이스 쿼리, ASP를 사용하여 유기적으로 결합하는 등 여전히 오래된 작업입니다. 기사 검토 모드(앞서 언급한 게시판 처리)에 들어갈 때 가장 중요한 것은 중재자의 신원을 확인하는 것입니다. 중재자 로그인 페이지를 살펴보겠습니다.
< %
보드ID=요청("보드ID")
(참고: Boardid는 이 페이지에 접속하여 전달되는 것으로, 처리할 보드의 ID입니다. 이를 통해서만 어떤 보드가 처리되고 있는지 알 수 있습니다.)
conn = erver.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb") 설정
cmd = Server.CreateObject("ADODB.Command") 설정
cmd.ActiveConnection = conn으로 설정
cmd.CommandText = "관리자 비밀번호 문의"
ReDim 매개변수(0)
param(0) = CLng(boardid) //참고: CLng는 무시할 수 없습니다.
rs = cmd.Execute(,param) 설정
Boardmanager=rs("보드 소유자")
cmd=아무것도 설정하지 않음
%>
<html>
<머리>
<제목>제목 없는 문서</title>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</머리>
<본체 bgcolor="#FFFFFF">
< p>보드 소유자 < %=boardmanager%>만 이곳에 들어갈 수 있습니다 </p>
<p>인증 비밀번호를 입력하시고, 인증 유지를 위해 브라우저의 쿠키를 활성화해 주시기 바랍니다. </p>
<form method="post" action="managerloginrest.asp">
<입력 유형="비밀번호" 이름="비밀번호">
< 입력 유형="숨김" 이름="보드 ID"값=< %=보드 ID%>>
<입력 유형="제출" 이름="제출"값="확인">
</양식>
참고: 이 페이지는 로그인 전용입니다. Mozhu에서 입력한 비밀번호를 받은 후에는 인증을 수행할 수 없으며 대신 다음 페이지에서 인증 작업이 수행됩니다. 사실 비밀번호 입력과 확인 작업은 한 페이지로 끝낼 수 있지만, 프로그램 코드의 구조적 배열이 좀 번거롭습니다.
</본문>
</html>
< %
rs=아무것도 설정하지 않음
연결 닫기
conn=아무것도 설정하지 않음
%>
이제 중재자 ID와 입력된 비밀번호를 얻었으니 다음은 검증작업managerloginrest.asp 입니다. 위 파일의 폼 내용을 받아 관련 처리를 합니다.
< %
response.buffer=true
참고: 사용을 허용하도록 버퍼를 설정하세요. 일반적으로 이 항목은 각 ASP 페이지의 헤더에 추가되어야 ASP 페이지의 성능을 향상시킬 수 있습니다. 버퍼를 연 후에 ASP에는 그에 상응하는 몇 가지 특별한 사용법이 있는데, 이에 대해서는 나중에 언급하겠습니다.
보드ID=요청("보드ID")
비밀번호=요청("비밀번호")
conn = Server.CreateObject("ADODB.Connection") 설정
conn.Open "드라이버={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
cmd = Server.CreateObject("ADODB.Command") 설정
cmd.ActiveConnection = conn으로 설정
cmd.CommandText = "관리자 비밀번호 문의"
ReDim param(0) '선언
param(0) = CLng(boardid)//참고: CLng는 무시할 수 없습니다.
rs = cmd.Execute(,param) 설정
Boardmanager=rs("보드 소유자")
if 비밀번호<>rs("password")다음 %>
<html>
<머리>
<title>인증</title>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</머리>
<본체 bgcolor="#FFFFFF">
비밀번호가 틀렸습니다</body>
</html>
< %
또 다른
session("beenthere")=boarded
참고: 중재자의 신원을 유지하기 위해 세션을 사용하려면 클라이언트 브라우저의 쿠키가 켜져 있어야 합니다. 세션은 쿠키를 통해 구현되기 때문입니다. 여기서는 Session 변수에 보드 ID를 할당하여 중재자가 신원 인증을 통과했음을 나타냅니다. 각 후속 버전 처리 페이지에서 해당 버전 ID와 일치하는지 확인하세요.
url="boardmanager.asp?boardid="& 보드ID
Response.redirect url
보충: ASP를 처음 배울 때 response.redirect 방법이 항상 헷갈리고 마음에 들지 않았습니다. 이제 몇 가지 기술을 알려드리겠습니다. 이를 사용하기 전에 ASP 페이지가 버퍼를 사용할 수 있도록 response.buffer=true를 전달해야 합니다. 이때 ASP는 HTML 프로그램 코드로 해석되기 전에 버퍼에 위치하며 클라이언트 브라우저로 직접 전송되지 않습니다. 알아야 할 또 다른 사항은 response.redirect를 사용하기 전에는 실제 HTML 프로그램 코드가 클라이언트 브라우저로 전송될 수 없다는 것입니다. 그렇지 않으면 오류가 발생합니다. 물론 해결 방법이 있습니다. HTML 프로그램 코드가 response.redirect 이전에 해석된 경우 response.clear 메서드를 사용하여 버퍼를 지운 다음 이를 사용하여 재설정할 수 있습니다.
종료하면
%>
참고: 다음은 위 인증이 통과된 후 재설정 대상입니다:boardmanager.asp. 처리된 모든 기사가 나열됩니다.
< %
보드ID=요청("보드ID")
if session("beenthere")<>boardidthen response.redirect "forums.asp"
참고: 중재자의 신원을 확인하는 곳입니다. 쿠키를 통해 Bamboo의 브라우저에 표시되었기 때문에 이제 Seesion을 통과할 수 있습니다. 사회자. 태그가 일치하지 않으면 response.redirect를 통해 원래 로그인 페이지로 돌아갑니다. 중재자의 브라우저 쿠키가 켜져 있지 않으면 seesion("beenthere") 값이 비어 있게 되며 이 페이지에도 접근할 수 없게 됩니다.
conn = Server.CreateObject("ADODB.Connection") 설정
conn.Open "드라이버={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
cmd = Server.CreateObject("ADODB.Command") 설정
cmd.ActiveConnection = conn으로 설정
sql="보드 목록에서 이름 선택 whereid=" & 보드ID
rs=conn.execute(sql) 설정
보드이름=rs("이름")
cmd.commandtext="게시되지 않은 기사 목록"
ReDim 매개변수(0)
param(0) = CLng(boardid)//참고: Clng는 무시할 수 없습니다.
rs = cmd.Execute(,param) 설정
cmd=아무것도 설정하지 않음
%>
<html>
<머리>
<제목>출판 처리</제목>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</머리>
<본체 bgcolor="#FFFFFF">
< h1 align = "Center"><%= BoardName%> 공공 관리 < /h1 >
HR >
< %
rs.eof 또는 rs.bof 인 경우 response.write.
응답.끝
%>
참고 : Netizens가 새 기사를 게시하지 않으면 해당 프롬프트를 제공하고 응답을 사용 하여이 페이지의 표시를 종료합니다.
< 테이블 너비 = "90%"테두리 = "0"CellSpacing = "0"CellPadding = "0"align = "Center">
tr bgcolor = "#ffffcc">
< td 너비 = "40%"높이 = "20"> 테마 </td >
< td 너비 = "40%"높이 = "20"> 기사 제목 </td >
< td 너비 = "8%"높이 = "20"> author </td >
< td 너비 = "12%"높이 = "20"> 날짜 </td >
</tr>
< %
하다
topicid = rs ( "topicid")
articleid = rs ( "articleId")
data = rs ( "날짜")
datasts = cstr (Year (data)) & "-"& cstr (month (data)) & "-"& cstr (day (data))
저자 = rs ( "저자")
articlename = rs ( "제목")
TopicName = Rs ( "Topic")
response.write ""tr >< td >< a href = qtopic.asp? topicid = "& topicid &"> "& topicname &"< /a >< /td > "
응답. ""td >< a href = manageearticle.asp? articleid = "& articleid &"& boardid = "& boardid &"> "& articlename &"< /a >< /td > "
response.write ""td >< a href = qauthor.asp? author = "& author &"> "& author &"< /a >< /td > "
response.write ""td > "& datastr &"< /td >< /tr > "
rs.movenext
rs.eof까지 루프
%>
</테이블>
</html >
< %
rs=아무것도 설정하지 않음
연결 닫기
conn=아무것도 설정하지 않음
%>
</body >
해당 기사의 링크를 클릭하면 기사 처리 Page Managearticle.asp를 입력합니다.
< %
articleID = request ( "articleId")
boardid = request ( "boardid")
IF SESSION ( "BEENTHERE") <> BODBIDTHEN RESPOST.REDIRECT "FORMS.ASP"
set conn = server.createobject ( "adodb.connection")
conn.open "driver = {Microsoft AccessDriver (*.mdb)}; dbq ="& server.mappath ( "bbssystem.mdb")
set cmd = server.createobject ( "adodb.command")
cmd.activeconnection = conn을 설정하십시오
cmd.commandtext = "id query articles by id"
REDIM PARAM (0)
param (0) = clng (article) // 참고 : CLNG는 무시할 수 없습니다
set rs = cmd.execute (, param)
author = rs ( "authorid")
제목 = rs ( "제목")
data = rs ( "날짜")
rate = rs ( "권장 학위")
Boardid = Rs ( "Kanbanid")
topicid = rs ( "topicid")
BoardName = Rs ( "보드 이름")
TopicName = rs ( "주제 이름")
content = rs ( "내용")
content = replace (content, vbcrlf, "</p >< p >")
content = "> p <"& content & "< /p >"
CMD = 아무것도 설정하지 않습니다
%>
HTML t
<머리>
< 제목 it 제목없는 문서 </제목 >
Meta http-equiv = "content-type"content = "text/html; charset = gb2312">
</머리>
body body bgcolor = "#e9e9e4">
< 테이블 너비 = "89%"border = "0"CellSpacing = "0"CellPadding = "0"align = "Center">
tr bgcolor = "#cccccc">
< td > 저자 : < font color = "#ff3366">< a href = "qauthor.asp? author = < %= author %>">< %= author %> < /a >< /font > 게시 날짜 : font font color = "#ff3333"><%= data%>< /font >
Kanban Board : : font color = "#ff3333">< a href = "qboard.asp? boardid = < %= boardid %>">< %= boardname %>< /a >< /font > 보드 소유자 권장 사항 : < < font color = "#ff3333">#rate#< /font >< /td >
</tr>
tr bgcolor = "#cccccc">
< td > 제목 : < font color = "#ff3333"><%= 제목%>
주제 : < a href = "qtopic.asp? topicId = <%= topicId%> > <%= topicname%>< /a > < /font >< /td >
</tr>
tr valign = "상단">
< TD >
HR >
font font color = "#ff3366"> 기사 내용 : < /font >< br >
<br>
font font color = blue >< %응답 .WriteContent %>< /font >
<br>
HR >
</td>
</tr>
tr valign = "상단">
< 양식 메소드 = "post"action = "manageresult.asp">
TD 높이 = "18">
< 테이블 너비 = "100%"테두리 = "1"셀 스페이싱 = "1"CellPadding = "1">
<tr>
td 너비 = "29%">
div align = "오른쪽"> >
< 입력 유형 = "hidden"name = "boardid"value = "< %= boardid %>"> >
< 입력 유형 = "hidden"name = "topicid"value = "< %= topicid %>"> >
< 입력 유형 = "hidden"name = "articleId"value = "< %= articleid %>"> >
기사 처리 : < /div >
</td>
< td 너비 = "12%"BorderColor = "#006666"> 삭제 :
< 입력 유형 = "radio"name = "관리"값 = 1 >
</td>
< td width = "30%"BorderColor = "#006666"> 게시자 :
< 입력 유형 = "radio"name = "관리"값 = 2 >
권장 레벨 name 이름 = "선택">를 선택하십시오
옵션 값 = "1"> 1 </옵션 >
옵션 값 = "2"> 2 </옵션 >
< 옵션 값 = "3"선택된 > 3 </옵션 >
옵션 값 = "4"> 4 </옵션 >
< 옵션 값 = "5"> 5 </옵션 >
</선택 >를 선택하십시오
</td>
< td width = "20%"BorderColor = "#006666"> 나중에 프로세스 :
< 입력 유형 = "radio"name = "관리"값 = 3 >
</td>
td 너비 = "9%">
< 입력 유형 = "제출"이름 = "제출"value = "Ok"> >
</td>
</tr>
</테이블>
</td>
</양식>
</tr>
</테이블>
</본문>
</html >
< %
rs=아무것도 설정하지 않음
연결 닫기
conn=아무것도 설정하지 않음
%>
참고 :이 페이지는 기본적으로 기사 디스플레이 모듈의 기사와 동일합니다.
다음으로 중재자의 처리 프로세스에 따라 데이터베이스의 해당 부분을 수정해야합니다.
<%응답 .buffer = true%>
HTML t
<머리>
< 제목 process 기사 처리 </제목 >
Meta http-equiv = "content-type"content = "text/html; charset = gb2312">
</머리>
body body bgcolor = "#e9e9e4">
< %
articleID = request ( "articleId")
boardid = request ( "boardid")
topicid = request ( "topicid")
관리 = 요청 ( "관리")
'양식 내용을 수락하십시오
응답. 쓰기 관리 'Show Buzhu ID
IF SESSION ( "BEENTHERE") <> BODBIDTHEN RESPOST.REDIRECT "FORMS.ASP"
set conn = server.createobject ( "adodb.connection")
conn.open "driver = {Microsoft AccessDriver (*.mdb)}; dbq ="& server.mappath ( "bbssystem.mdb")
이전 페이지의 중재자 작업에 따르면 해당 처리는 아래에서 수행됩니다.
clng (request ( "manage")) = 1 인 경우
SQL = "id ="& articleId
Conn.Execute SQL
response.write ""h1 > 기사가 삭제되었습니다 </h1 > "
response.write ""a href = > back </a> "
elseif clng (요청 ( "관리")) = 2then
SQL = "업데이트 내용 테이블 세트 게시 = true whereid ="& articleId
Conn.Execute SQL
SQL = "주제 테이블 업데이트 기사 수+기사 번호+1 where id ="& topicid
Conn.Execute SQL
Response.write ""H1 > 기사가 게시되었습니다 </h1 > "
response.write ""a href = > back </a> "
또 다른
응답
response.redirect "Boardmanager.asp? boardid ="& 탑승
종료하면
%>
</본문>
</html >
< %
연결 닫기
conn=아무것도 설정하지 않음
%>
위의 단계 후에는 모든 부품이 기본적으로 완료되며,이 시간에 사용하거나 테이블에 넣을 수 없습니다. 사용하려면 레이아웃 설계, 클라이언트 데이터 검증 등에 더 많은 노력을 기울여야합니다. 그러나 이것들은 모두 HTML 컨텐츠이며 ASP와 거의 관련이 없으므로 여기에서 자세히 설명하지 않습니다.