td height=25>파일</td>
<td height=25><input type=file name=imagefile size=50 maxlength=50 style="border:1 solid black"></td>
</tr>
여기서 파일을 업로드하는데 중요한 부분은
<input type=file name=imagefile size=50 maxlength=50 style="border:1 solid black">
입니다.
여기까지는 아주 간단하니까 별 어려움이 없으리라 봅니다.
이번에 할 부분은 글을 쓴 후의 처리 문제입니다.
여기서 처리할 것은 두부분인데...
하나는 답변했을 경우와
다른 하나는 글을 새로 썼을 경우입니다.
그래도 이 강좌의 핵심은 파일을 올리는데 있으므로 먼저 이부분을 설명하겠습니다.
write_ok.asp
--------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "board", "sa", ""
'업로드용 객체를 생성하는 부분입니다.
Set uploadform = Server.CreateObject("SiteGalaxyUpload.Form")
'모든 폼의 request된 값은 사이트갤럭시에선 아래와 같이 받아야 합니다.
idx = uploadform("idx")
srch = uploadform("srch")
srchopt = uploadform("srchopt")
page = uploadform("page")
name = uploadform("name")
email = uploadform("email")
homepage = uploadform("homepage")
title = uploadform("title")
title = replace(title, "'", "''")
passwd = uploadform("passwd")
ipaddr = Request.ServerVariables("remote_addr")
content = uploadform("content")
content = replace(content, "'", "''")
fileattach = uploadform("imagefile")
' 저장할 디렉토리입니다. nt계정이라면 당근 everyone 계정에 write 퍼미션이 있어야 겠죠...^^
upd = "E:\InetPub\wwwroot\upload\"
if name = "" or title = "" or passwd = "" or content = "" Then
%>
<Script language="JavaScript">
alert ("정상적인 접속을 해주세요!");
history.back();
</Script>
<%
else
' 파일을 업로드했을 경우입니다.
If fileattach <> "" then
attach_file = uploadform("imagefile").FilePath
' 올리는 파일이름만 뽑아내는 부분입니다. 이유야 뻔히 중복파일을 처리를 위해서죠...^^
filename = Mid(attach_file, instrRev(attach_file, "\") + 1)
' 파일 이름만 구합니다.
file = Mid(filename, 1, instr(filename, ".") - 1)
' 파일 확장자를 구합니다.
ext = Mid(filename, instr(filename, ".") + 1)
' 파일 관련 기본 콤포넌트를 생성하는 부분입니다.
Set fso = CreateObject("Scripting.FileSystemObject")
' 저장할 파일의 완전한 이름을 임시 변수에 저장합니다.
fileNameTemp = upd & filename
bExist = True
' 파일이 존재할 경우, 이름 뒤에 붙일 것입니다. 단순히 0부터 1씩 증가합니다.
countfilename = 0
While bExist
' 파일이 있으면, 여기로 들어 와서 파일 이름에 숫자를 붙인 새로운 파일 이름 생성합니다.
If (fso.FileExists(fileNameTemp)) Then
countfilename = countfilename + 1
fileNameTemp = upd & file & countfilename & "." & ext
filename = file & countfilename & "." & ext
' 파일이 존재하지 않을 경우
Else
bExist = False
End if
Wend
' FileSystemObject를 닫아줍니다.
Set fso = nothing
' 위에서 구한 파일의 크기를 구합니다.
filesize = uploadform("imagefile").Size
' 파일을 실제로 업로드 받습니다.
uploadform("imagefile").SaveAs fileNameTemp
' 파일 업로드를 안했을 경우입니다.
Else
filesize = 0
filename = ""
End if
If idx <> "" Then
ref = Cint(uploadform("ref"))
re_step = Cint(uploadform("re_step"))
re_level = Cint(uploadform("re_level"))
sql = "Update board set re_step = re_step + 1 where ref = " & ref & " and re_step > " & re_step
conn.Execute(sql)
re_step = re_step + 1
re_level = re_level + 1
Else
sql = "Select max(ref) ref from board"
Set Rs = conn.Execute(sql)
ref = Rs("ref") + 1
Rs.Close
Set Rs = Nothing
re_step = 0
re_level = 0
End if
sql = "Insert Into board (name, email, homepage, title, passwd, ref, re_step, re_level, content, ipaddr, filename, filesize) Values ('"
sql = sql & name & "', '"
sql = sql & email & "', '"
sql = sql & homepage & "', '"
sql = sql & title & "', '"
sql = sql & passwd & "', '"
sql = sql & ref & "', '"
sql = sql & re_step & "', '"
sql = sql & re_level & "', '"
sql = sql & content & "', '"
sql = sql & ipaddr & "', '"
sql = sql & filename & "', "
sql = sql & filesize & ")"
Conn.Execute(sql)
'Response.Write(sql)
Conn.Close
Set Conn = Nothing
Response.Redirect ("list.asp?page=" & page & "&srch=" & srch & "&srchopt=" & srchopt)
end if
%>
--------------------------------------------------------------------------
여기까지가 파일을 올리는데 필요한 부분입니다.
사실 초보분들을 위해선 조금 더 자세한 설명이 필요하지만, 업로드만 우선 설명했습니다.
아래 제가 쓴 글을 보니, 정말 서두에 횡수가 많군요...
오타에... 뭔말인지 모를.....-_-;;;
하여간 3-1은 업로드 부분에 대해서 설명했습니다.
나머지 답변했을 부분과 기타 등등 모두 설명해드리고 싶지만 너무 배가 아픈 관계로 혹시 저한테 아주 많은 분들이 요청을 하시면(그럴리야 없지만....ㅜㅜ), 아주 확실히 소스를 분석해드리겠습니다.
이번엔 소스를 보여주는 부분을 다루겠습니다.
content.asp
----------------------------------------------------------------------------
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>Board Content</TITLE>
<style type="text/css">
A {text-decoration: none; color:navy}
A:hover {text-decoration: underline; color:red}
.asp { color:#224509; background:yellow}
.count { background: rgb(238,239,211)}
TD
{
font size:12; color:#092D00;
}
TABLE
{
BORDER-BOTTOM: single;
BORDER-LEFT: single;
BORDER-RIGHT: single;
BORDER-TOP: single;
}
</style>
</HEAD>
<%
srch = Request("srch")
srchopt = Request("srchopt")
page = Request("page")
idx = Request("idx")
ref = Request("ref")
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "board", "sa", ""
sql = "update board set readnum = readnum +1 where idx = " & idx
conn.Execute(sql)
sql = "Select * From board where idx = " & idx
Set Rs = Conn.Execute(sql)
email = Rs("email")
homepage = Rs("homepage")
content = Rs("content")
%>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<table border=0 width="600" cellpadding="0" cellspacing="0" bordercolor="#408080">
<tr>
<td><font size=1 face="Arial">작성일 : <%=Rs("writeday")%> from <%=Rs("ipaddr")%></td>
<td align=right><font size=1 face="Arial">조회수 : <%=Rs("readnum")%></td>
</tr>
<tr>
<td colspan=2><font size=1 face="Arial">글쓴이 :
<%
If email <> "" Then
%>
<a href="mailto:<%=email%>"><%=Rs("name")%></a>
<%
Else
%>
<%=Rs("name")%>
<%
end if
If len(homepage) <> 7 Then
%>
(<a href="<%=homepage%>"><%=homepage%></a>)
<%
end if
%>
</td>
</tr>
<tr height=25 colspan=2>
<td bgcolor="Lavender" colspan=2 align=center><b><%=Rs("title")%></b></td>
</tr>
<tr bgcolor="FloralWhite" height=25>
<td colspan=2 align=center>
<table border=0 width="540" cellpadding="0" cellspacing="0" bordercolor="#408080">
<tr>
<td>
<br><pre><%=content%></pre>
</td>
</tr>
</table>
</td>
</tr>
<%
If Rs("filename") <> "" Then
%>
<tr>
'이 부분이 파일을 표시해주는 부분입니다. 너무 간단하죠...^^ 참 그림은 없습니다...-_-;;; 걍 아무거나 쓰세요... 여기 그림도 좋구요...^^
<td align=left colspan=2>
<a href="/upload/<%=Rs("filename")%>" title="<%=Rs("filename")%> 다운받기"><img src=/images/library.gif> <%=Rs("filename")%></a>
</td>
</tr>
<%
End if
%>
<tr>
<td align=center colspan=2>
<br>
<font size=2>
[ <a href="answer.asp?idx=<%=idx%>&page=<%=page%>&srch=<%=srch%>&srchopt=<%=srchopt%>&ref=<%=Rs("ref")%>&re_step=<%=Rs("re_step")%>&re_level=<%=Rs("re_level")%>">답 변</a> |
<a href="edit.asp?idx=<%=idx%>&page=<%=page%>&srch=<%=srch%>&srchopt=<%=srchopt%>">수 정</a> |
<a href="del.asp?idx=<%=idx%>&page=<%=page%>&srch=<%=srch%>&srchopt=<%=srchopt%>">삭 제</a> |
<a href="list.asp?idx=<%=idx%>&page=<%=page%>&srch=<%=srch%>&srchopt=<%=srchopt%>">리스트</a> ]
</font>
</td>
</tr>
</table>
</form>
<%
Rs.close
Set RS = Nothing
sql = "Select * From board where ref = '" & ref & "' order by ref desc, re_step asc"
Set Rs = Conn.Execute(sql)
If Not rs.Eof then
%>
<br>
<table border=0 width="600" cellpadding="0" cellspacing="0" bordercolor="#408080">
<tr bgcolor="#CBDDB5">
<td align="center" height="25" width="5%"><font size="2"> </td>
<td align="center" height="25" width="55%"><font size="2"><b>제 목</td>
<td align="center" height="25" width="15%"><font size="2"><b>글쓴이</td>
<td align="center" height="25" width="15%"><font size="2"><b>작성일</td>
<td align="center" height="25" width="10%"><font size="2"><b>조회</td>
</tr>
<%
Do Until Rs.EOF
%>
<tr onmouseover="this.style.background='#F3F7E7'" onmouseout="this.style.background='white'">
<%
If datediff("h", rs("writeday"), now()) < 24 then
%>
<td align="center" height="25" width="5%"><img src="/images/new.gif"></td>
<%
else
%>
<td align="center" height="25" width="5%"><font size="2"> </td>
<%
end if
%>
<td align="left" height="23">
<%
level = Cint(Rs("re_level"))
If level > 0 Then
for j = 1 to level
wid = wid + " "
next
%>
<%=wid%><img src="/images/step.gif">
<%
end if
title = Rs("title")
If Len(title) > 45 Then
title = Mid(title, 1, 45) & "..."
End if
email = Rs("email")
%>
<a href="content.asp?idx=<%=Rs("idx")%>&page=<%=page%>&srch=<%=srch%>&srchopt=<%=srchopt%>&ref=<%=Rs("ref")%>"><%=title%></a>
</td>
<td align="center" height="23">
<%
If email <> "" Then
%>
<a href="mailto:<%=email%>"><%=Rs("name")%></a>
<%
Else
%>
<%=Rs("name")%>
<%
end if
%>
</td>
<td align="center" height="23"><%=Left(Rs("writeday"), 10)%></td>
<td align="center" height="23"><%=Rs("readnum")%></td>
</tr>
<%
wid = ""
Rs.MoveNext
Loop
%>
</table>
<%
End if
%>
</body>
</html>
------------------------------------------------------------------------
좀 복잡하죠...
여기선 파일 내용을 보여줄 뿐만 아니라 관련글도 보여주기 땜시 그렇습니다.
좀더 자세히 해부해 드리고 싶지만(혹시 요청하시는 분이 많으시면,,, 그럴리야 없지만) 그때 하기로 하고, 여기서 자세히 보실 부분은
<a href="/upload/<%=Rs("filename")%>" title="<%=Rs("filename")%> 다운받기"><img src=/images/library.gif> <%=Rs("filename")%>
입니다. 단순히 DB 내용을 뿌려줍니다. 그림은 비사모 그림 사용하시면 됩니다...^^
' IF strRet="" THEN '파일저장이 실패했다면
' upsucc= 0
' Response.redirect "error.asp?kind=file"
' ELSE
' upsucc = 1
' END IF
END IF
IF upsucc = 1 THEN '파일저장에 성공하면 데이터에 글을 입력합니다.
'쿼리에 '가 들어가면 에러가 나기에 그것을 replace 처리해준다.
title = replace(title,"'","''")
content = replace(content,"'","''")
content = replace(content,"|","chr(124)_pipe")
title = replace(title, "&", "&")
title = replace(title, "<", "<")
title = replace(title, ">", ">")
content = replace(content, "&", "&")
content = replace(content, "<", "<")
content = replace(content, ">", ">")
ipaddress = Request.ServerVariables("remote_addr")
Set db = Server.CreateObject("ADODB.Connection") '데아타베이스 연결을 위한connection 개책의 인스턴트이 생성
db.Open "caerangdb", "bbs", "bbs"
SQL = "Select MAX(num) from pds"
'가저올 데이타이 쿼리 생성
Set rs = Server.CreateObject("ADODB.Recordset")
'레코드셑 개첵의 인스턴트를 생성
rs.Open SQL, db
'지정된 쿼리문으로 데이타베이스 연결에서 레코드셑 개체에 결과 데이타를 저장한다.
if IsNULL(rs(0)) Then
number = 1 '현재 글 번호 1
else
number = rs(0) + 1 ' 글의 넘버 세팅
End if
'답변형 게시판 추가 부분
if Trim(upload("idx"))<> "" Then ' 답변쓰기
ref = upload("ref")
re_level = upload("re_level")
re_count = upload("re_count")
SQL = "Update pds Set re_count = re_count + 1 where ref ="
SQL = SQL & ref
SQL = SQL & " AND re_count > " & upload("re_count")
db.Execute SQL '여기가 실제로 데이타베이스에 insert 시키는 시점이다.
re_count = re_count + 1
re_level = re_level + 1
else
ref = num
re_count = 0
re_level = 0
end if
SQL = "INSERT INTO pds (name,email,title,content, filename, filesize, ipaddress, pds_num"
SQL = SQL & " readnum, writeday, ref, re_level, re_count) VALUES "
SQL = SQL & "('" & name & "'"
SQL = SQL & ",'" & email & "'"
SQL = SQL & ",'" & title & "'"
SQL = SQL & ",'" & content & "'"
SQL = SQL & ",'" & filename & "'"
SQL = SQL & ",'" & filesize & "'"
SQL = SQL & ",'" & ipaddress & "'"
SQL = SQL & "," & number
SQL = SQL & ",0,'" & now() & "'"
SQL = SQL & "," & ref
SQL = SQL & "," & re_level
SQL = SQL & "," & re_count & ")"
db.Execute SQL '여기가 실제로 데이타베이스에 insert 시키는 시점이다.
end if
db.Close
Set db = Nothing
Set result = Nothing
%>
<html>
<body>
<body onLoad="document.myform.submit();">
<form name="myform" action="list.asp">
</form>
</body>
</html>
카페 게시글
ASP | JSCRIPT
사이트 갤럭시 사용법 입니다.
심재운
추천 0
조회 278
02.01.08 11:35
댓글 2
북마크
번역하기
공유하기
기능 더보기
다음검색
첫댓글 와. 이건 너므 어렵다 ㅠ.ㅠ
초보자로써는...도저히 이해를 할수가 없는부분인거 같네요...