程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> 用文本+ASP打造新聞發布系統

用文本+ASP打造新聞發布系統

編輯:ASP技巧

介紹

  我們總是會遇到這樣的情況,需要將數值從一個網頁傳遞到另一個網頁。在這篇文章中,向你展示了幾種從一個網頁向另一個網頁傳遞數值的幾種方法。在此例子中,創建的網頁由一個文本控件和幾個按鈕控件組成。在文本框中輸入的數據通過被標識在按鈕控件中的不同方法從一個網頁傳遞到另一個網頁。

  Response.Redirect

  讓我們首先看一看如何使用Response.Redirect方法傳遞數據。這是它們之中最簡單的方法。在文本框中輸入一些數據,並且當你輸入完成數據後,按下“Respose.Redirect”按鈕。我們會得到一個提示,有時我們想在catch程序中傳遞另一個網頁,意味著捕捉到例外程序並且向另一個網頁傳遞。如果你試圖這樣做,它會給你一個System.Threading例外程序。因為你想遺留下一個線程向另一個網頁傳遞數據,所以這個例外程序就會被拋出。

  Response.Redirect("WebForm5.ASPx",false);

  這個語句告訴編譯器定位到“WebForm5.aspx”,這裡的“false”意味著在當前網頁不能結束你正在做的事情。應該看一看線程發布命令的System.Threading類。在下面,看一看按鈕事件的C#代碼。“txtName”文本控件的名字,文本框的內的值傳遞到一個叫做“WebForm5.ASPx”的網頁。在“?”之後的“Name”符號只是一個臨時的響應變量,這個變量保持著文本的數值。

  private void Button1_Click(object sender, System.EventArgs e)

  {

  // Value sent using HttpResponse

  Response.Redirect("WebForm5.ASPx?Name="+txtName.Text);

  }

  好的,到這種觀點為止,你使用Response發送了數值。剛剛,在此我收集到了這些數值,所以在“WebForm5.ASPx”page_Load事件中,寫入這些代碼。首先,我們檢查到輸入的值不為null。如果不是這樣,我們只是簡單地在網頁上使用Label控件顯示數值。注意:如果你使用Response.Redirect方法來傳遞這些數值,所有這些數值在浏覽器的URL中都是不可見的。你絕不能使用Response.Redirect來傳遞信用證號碼和機密信息。

  if (Request.QueryString["Name"]!= null)

  Label3.Text = Request.QueryString["Name"];

  CookIEs

  接下來使用Cookies。CookIEs在服務器端創建,但是客戶端省略。在此 “CookIEs” 按鈕的click事件中,寫入以下代碼:

  HttpCookie cName = new HttpCookIE("Name");

  cName.Value = txtName.Text;

  Response.CookIEs.Add(cName);

  Response.Redirect("WebForm5.ASPx");

  首先,創建一個cookie命名為“cName”。既然一個cookie實例可以擁有許多數值,告訴編譯器這個cookIE持有“Name”數值。我們將它賦值給TextBox並且最結後將它加入Response流,再使用Response.Redirect方法傳遞給其它網頁。

  讓我們看一看如何得到被另一個網頁傳遞的cookIE數值。

  if (Request.CookIEs["Name"] != null )

  Label3.Text = Request.CookIEs["Name"].Value;

  如你所看到的,象我們以前做一的一樣正是使用同一種方法,剛剛我們在Request.QueryString之內,使用了Request.CookIEs。記注一些浏覽器不接收cookIEs。

  

  //圖片上傳

  〈SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT〉

  Function GetUpload(FormData)

  Dim DataStart,DivStr,DivLen,DataSize,FormFIEldData

  '分隔標志串(+CRLF)

  DivStr = LeftB(FormData,InStrB(FormData,str2bin(VbCrLf)) + 1)

  '分隔標志串長度

  DivLen = LenB(DivStr)

  PosOpenBoundary = InStrB(FormData,DivStr)

  PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr)

  Set FIElds = CreateObject("Scripting.Dictionary")

  While PosOpenBoundary 〉 0 And PosCloseBoundary 〉 0

  'name起始位置(name="xxxxx"),加6是因為[name="]長度為6

  FIEldNameStart = InStrB(PosOpenBoundary,FormData,str2bin("name=")) + 6

  FieldNameSize = InStrB(FieldNameStart,FormData,ChrB(34)) - FIEldNameStart '(")的ASC值=34

  FormFieldName = bin2str(MidB(FormData,FieldNameStart,FIEldNameSize))

  'filename起始位置(filename="xxxxx")

  FIEldFileNameStart = InStrB(PosOpenBoundary,FormData,str2bin("filename=")) + 10

  If FieldFileNameStart 〈 PosCloseBoundary And FIEldFileNameStart 〉 PosopenBoundary Then

  FieldFileNameSize = InStrB(FieldFileNameStart,FormData,ChrB(34)) - FIEldFileNameStart '(")的ASC值=34

  FormFileName = bin2str(MidB(FormData,FieldFileNameStart,FIEldFileNameSize))

  Else

  FormFileName = ""

  End If

  'Content-Type起始位置(Content-Type: xxxxx)

  FIEldFileCTStart = InStrB(PosOpenBoundary,FormData,str2bin("Content-Type:")) + 14

  If FieldFileCTStart 〈 PosCloseBoundary And FIEldFileCTStart 〉 PosOpenBoundary Then

  FieldFileCTSize = InStrB(FieldFileCTStart,FormData,str2bin(VbCrLf & VbCrLf)) - FIEldFileCTStart

  FormFileCT = bin2str(MidB(FormData,FieldFileCTStart,FIEldFileCTSize))

  Else

  FormFileCT = ""

  End If

  '數據起始位置:2個CRLF開始

  DataStart = InStrB(PosOpenBoundary,FormData,str2bin(VbCrLf & VbCrLf)) + 4

  If FormFileName 〈〉 "" Then

  '數據長度,減1是因為數據文件的存取字節數問題(可能是AppendChunk方法的問題):

  '由於字節數為奇數的圖象存到數據庫時會去掉最後一個字符導致圖象不能正確顯示,

  '字節數為偶數的數據文件就不會出現這個問題,因此必須保持字節數為偶數。

  DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 1

  FormFIEldData = MidB(FormData,DataStart,DataSize)

  Else

  '數據長度,減2是因為分隔標志串前有一個CRLF

  DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 2

  FormFIEldData = bin2str(MidB(FormData,DataStart,DataSize))

  End If

  '建立一個Dictionary集存儲Form中各個FIEld的相關數據

  Set Field = CreateUploadFIEld()

  Field.Name = FormFIEldName

  FIEld.FilePath = FormFileName

  FIEld.FileName = GetFileName(FormFileName)

  FIEld.ContentType = FormFileCT

  Field.Length = LenB(FormFIEldData)

  Field.Value = FormFIEldData

  Fields.Add FormFieldName, FIEld

  PosOpenBoundary = PosCloseBoundary

  PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr)

  Wend

  Set GetUpload = FIElds

  End Function

  '把二進制字符串轉換成普通字符串函數

  Function bin2str(binstr)

  Dim varlen,clow,ccc,skipflag

  '中文字符Skip標志

  skipflag=0

  ccc = ""

  If Not IsNull(binstr) Then

  varlen=LenB(binstr)

  For i=1 To varlen

  If skipflag=0 Then

  clow = MidB(binstr,i,1)

  '判斷是否中文的字符

  If AscB(clow) 〉 127 Then

  'AscW會把二進制的中文雙字節字符高位和低位反轉,所以要先把中文的高低位反轉

  ccc =ccc & Chr(AscW(MidB(binstr,i+1,1) & clow))

  skipflag=1

  Else

  ccc = ccc & Chr(AscB(clow))

  End If

  Else

  skipflag=0

  End If

  Next

  End If

  bin2str = ccc

  End Function

  '把普通字符串轉成二進制字符串函數

  Function str2bin(varstr)

  str2bin=""

  For i=1 To Len(varstr)

  varchar=mid(varstr,i,1)

  varasc = Asc(varchar)

  ' asc對中文字符求出來的值可能為負數,

  ' 加上65536就可求出它的無符號數值

  ' -1在機器內是用補碼表示的0xffff,

  ' 其無符號值為65535,65535=-1+65536

  ' 其他負數依次類推。

  If varasc〈0 Then

  varasc = varasc + 65535

  End If

  '對中文的處理:把雙字節低位和高位分開

  If varasc〉255 Then

  varlow = Left(Hex(Asc(varchar)),2)

  varhigh = right(Hex(Asc(varchar)),2)

  str2bin = str2bin & chrB("&H" & varlow) & chrB("&H" & varhigh)

  Else

  str2bin = str2bin & chrB(AscB(varchar))

  End If

  Next

  End Function

  '取得文件名(去掉Path)

  Function GetFileName(FullPath)

  If FullPath 〈〉 "" Then

  FullPath = StrReverse(FullPath)

  FullPath = Left(FullPath, InStr(1, FullPath, "\") - 1)

  GetFileName = StrReverse(FullPath)

  Else

  GetFileName = ""

  End If

  End Function

  〈/SCRIPT〉

  〈SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT〉

  function CreateUploadFIEld(){ return new uf_Init() }

  function uf_Init(){

  this.Name = null

  this.FileName = null

  this.FilePath = null

  this.ContentType = null

  this.Value = null

  this.Length = null

  }

  〈/SCRIPT〉

  //新聞添加

  〈!--#include file="news_session.ASP"--〉

  〈Html〉

  〈head〉

  〈meta http-equiv="Content-Language" content="zh-cn"〉

  〈meta http-equiv="Content-Type" content="text/Html; charset=gb2312"〉

  〈style type="text/CSS"〉

  .buttonface {

  BACKGROUND-COLOR: #0079F2; BORDER-BOTTOM: #333333 1px outset; 、

  BORDER-LEFT: #333333 1px outset; BORDER-RIGHT: #ffffff 1px outset; BORDER-TOP: #ffffff 1px outset; COLOR: #ffffff; FONT-SIZE: 9pta { color: #000000; text-decoration: none}

  〈/style〉

  〈SCRIPT ID=clIEntEventHandlersJS LANGUAGE=Javascript〉

  〈!--

  function clIEnt_onblur(ii) {

  server=eval("form1.server"+ii)

  if(server.value==""){

  client=eval("form1.clIEnt"+ii)

  clientvalue=clIEnt.value+""

  varlen=clIEntvalue.length

  a=clIEntvalue.lastIndexOf('\')

  clientvalue=clIEntvalue.substring(a+1)

  //alert(clIEntvalue);

  server.value=clIEntvalue

  }

  }

  function form1_onsubmit() {

  for(i=1;i〈1;i++){

  client=eval("form1.clIEnt"+i)

  server=eval("form1.server"+i)

  if(clIEnt.value!="" && server.value==""){alert("上傳後的文件名不能空!");server.focus();return false}

  }

  }

  //--〉

  〈/SCRIPT〉

  〈title〉新聞發布系統〈/title〉

  〈/head〉

  〈body bgcolor=#EDF0F5 topmargin=10 marginheight=5 leftmargin=4 marginwidth=0〉

  〈form method="POST" action="news_input.ASP" name="form1" enctype="multipart/form-data" LANGUAGE=Javascript onsubmit="return form1_onsubmit()"〉

  〈div align="left"〉

  〈table border="1" width="754" height="404"〉

  〈tr align="center"〉

  〈td width="754" height="28" colspan="3" 〉〈strong〉新聞發布系統後台管理--新聞添加〈/strong〉〈/td〉

  〈/tr〉

  〈tr〉

  〈td width="121" height="16" align="center" 〉新聞標題〈/td〉

  〈td width="617" height="16" colspan="2"〉

  〈input type="text" name="news_title" size="87"〉〈/td〉

  〈/tr〉

  〈tr〉

  〈td width="121" height="165" align="center" 〉新聞內容〈/td〉

  〈td width="617" height="165" colspan="2"〉〈textarea rows="11" name="news_content" cols="85"〉〈/textarea〉〈/td〉

  〈/tr〉

  〈tr〉

  〈td width="121" height="21" align="center" 〉新聞來源〈/td〉

  〈td width="617" height="21" colspan="2"〉

  〈input type="text" name="news_src" size="87"〉〈/td〉

  〈/tr〉

  〈tr〉

  〈td width="121" height="20" align="center" 〉圖片上傳〈/td〉

  〈td width="617" height="20" colspan="2"〉

  〈input type="file" name="clIEnt1" size="20" readonly LANGUAGE=Javascript onblur="return clIEnt_onblur(1)" 〉

  〈span 〉〈/span〉 〈INPUT type="hidden" name="server1"〉 〈input type="hidden" value="mysession" name="mysession"〉 〈/td〉

  〈/tr〉

  〈/table〉

  〈/div〉

  〈p〉

  〈input type="submit" value="遞交" name="B1" class="buttonface"〉 〈input type="reset" value="全部重寫" name="B2" class="buttonface"〉

  〈input type="button" value="帳號修改" onclick="location.href='admin/news_chadmin.ASP'" name="B2" class="buttonface"〉

  〈input type="button" value="新聞修改" onclick="location.href='news_admin1.ASP'" name="B2" class="buttonface"〉〈/p〉

  〈/form〉

  〈/body〉

  〈/Html〉

  '###################

  news_input.ASP

  〈!--#include file="upload.inc"--〉

  〈%

  'FIElds("xxx").Name 取得Form中xxx(Form Object)的名字

  'FIElds("xxx").FilePath 如果是file Object 取得文件的完整路徑

  'FIElds("xxx").FileName 如果是file Object 取得文件名

  'FIElds("xxx").ContentType 如果是file Object 取得文件的類型

  'FIElds("xxx").Length 取得Form中xxx(Form Object)的數據長度

  'FIElds("xxx").Value 取得Form中xxx(Form Object)的數據內容

  Dim FormData,FormSize,gnote,bnote,notes,binlen,binstr

  FormSize=Request.TotalBytes

  FormData=Request.BinaryRead(FormSize)

  Set FIElds = GetUpload(FormData)

  '############判斷輸入錯誤

  dim news_title,news_content,news_src,mysession

  mysession=FIElds("mysession").value

  if len(mysession)=0 then

  Response.Write "非法登陸或超時請重新登陸"

  Response.End

  end if

  news_title=FIElds("news_title").value

  news_title=replace(news_title,"|","|")

  news_content=FIElds("news_content").value

  news_src=FIElds("news_src").value

  news_src=replace(news_src,"|","|")

  if len(news_title)=0 then%〉

  〈script〉

  alert("出錯!新聞標題不能為空");

  history.go(-1);

  //window.location="news_add.ASP";

  〈/script〉

  〈%Response.end

  end if

  if len(news_content)=0 then%〉

  〈script〉

  alert("出錯!新聞內容不能為空");

  history.go(-1);

  〈/script〉

  〈%end if

  if len(news_src)=0 then%〉

  〈script〉

  alert("出錯!新聞來源不能為空");

  history.go(-1);

  〈/script〉

  〈%Response.end

  end if

  dim varchar

  varchar=right(FIElds("server1").value,3)

  if len(varchar)〈〉0 then

  if varchar〈〉"gif" and varchar〈〉"jpg" then

  %〉

  〈script〉

  alert("出錯!不能上傳該圖片類型");

  history.go(-1);

  〈/script〉

  〈% Response.end

  else

  end if

  end if

  '###########將圖片寫入文件夾

  set file_O=Server.CreateObject("Scripting.FileSystemObject")

  '##########當前時間做圖片名

  dim newname,mytime,newfile,filename,id,image

  endname=right(fIElds("server1").value,4)

  mytime=now()

  id=Year(mytime)&Month(mytime)&Day(mytime)&Hour(mytime)&Minute(MyTime)&Second(MyTime)

  imageid=id&endname

  '#############寫入圖片

  newfile="clIEnt1"

  filename=FIElds("server1").value

  If FIElds(newfile).FileName〈〉"" Then

  file_name=Server.MapPath("./images/"&imageid&"")

  set outstream=file_O.CreateTextFile(file_name,true,false)

  binstr=FIElds(newfile).Value

  binlen=1

  varlen=lenb(binstr)

  for i=1 to varlen

  clow = MidB(binstr,i,1)

  If AscB(clow) = 255 then

  outstream.write chr(255)

  binlen=binlen+1

  if (i mod 2)=0 then

  notes=gnote

  exit for

  end if

  elseif AscB(clow) 〉 128 then

  clow1=MidB(binstr,i+1,1)

  if AscB(clow1) 〈64 or AscB(clow1) =127 or AscB(clow1) = 255 then

  binlen=binlen+1

  'if (binlen mod 2)=0 then

  binlen=binlen+1

  outstream.write Chr(AscW(ChrB(128)&clow))

  'end if

  notes=bnote

  exit for

  else

  outstream.write Chr(AscW(clow1&clow))

  binlen=binlen+2

  i=i+1

  if (i mod 2)=0 then

  notes=gnote

  exit for

  end if

  end if

  else

  outstream.write chr(AscB(clow))

  binlen=binlen+1

  if (i mod 2)=0 then

  notes=gnote

  exit for

  end if

  end if

  next

  outstream.close

  set outstream=file_O.OpenTextFile(file_name,8,false,-1)

  outstream.write midb(FIElds(newfile).Value,binlen)

  outstream.close

  if notes=bnote then notes=notes&(binlen-1)&"字節處。"

  End If

  把新聞數據結構寫入newslist文件

  dim mappath,mytext,myfso,contenttext,news_addtime,news_point

  news_point=1

  news_addtime=mytime

  set myfso=createobject("scripting.filesystemobject")

  mappath=server.mappath("./")

  set mytext=myfso.opentextfile(mappath&" ew_list.ASP",8,-1)

  dim mytext2

  if len(varchar)〈〉0 then

  mytext2=trim(id&","&news_title&","&id&".txt"&","&news_src&","&news_point&","&news_addtime&","&imageid&"|")

  else

  mytext2=trim(id&","&news_title&","&id&".txt"&","&news_src&","&news_point&","&news_addtime&"|")

  end if

  mytext.writeline(mytext2)

  mytext.close

  '##############把新聞內容寫入相應的文件中

  set contenttext=myfso.OpenTextFile(mappath&" ews_content\"&id&".txt",8,-1)

  function Htmlencode2(str) '#############字符處理函數

  dim result

  dim l

  l=len(str)

  result=""

  dim i

  for i = 1 to l

  select case mid(str,i,1)

  case chr(34)

  result=result+"''"

  case "&"

  result=result+"&"

  case chr(13)

  result=result+"〈br〉"

  case " "

  result=result+" "

  case chr(9)

  result=result+" "

  case chr(32)

  if i+1〈=l and i-1〉0 then

  if mid(str,i+1,1)=chr(32) or mid(str,i+1,1)=chr(9) or mid(str,i-1,1)=chr(32) or mid(str,i-1,1)=chr(9) then

  result=result+" "

  else

  result=result+" "

  end if

  else

  result=result+" "

  end if

  case else

  result=result+mid(str,i,1)

  end select

  next

  Htmlencode2=result

  end function

  contenttext.write Htmlencode2(news_content)

  contenttext.close

  set myfso=nothing

  %〉

  〈script〉

  alert("發布成功");

  window.location="news_add.ASP";

  〈/script〉

  //新聞列表顯示

  〈%

  dim myfso,myread

  set myfso=createobject("scripting.filesystemobject")

  set myread=myfso.opentextfile(server.mappath("./new_list.ASP"),1,0)

  if myread.atendofstream then

  Response.Write "目前沒有添加新聞"

  Response.End

  else

  dim mytext,listarray

  mytext=myread.readall

  listarray=split(mytext,"|") '#######把所有記錄分割成一個數組a

  dim recordcount,pagecount, pagesize, pagenum

  recordcount=ubound(listarray)'############記錄條數

  pagesize=2

  pagecount=recordcount/pagesize '#######取得頁面數

  if instr(1,pagecount,".")=null or instr(1,pagecount,".")=0 then

  pagenum=pagecount

  else

  pagenum=int(pagecount)+1

  end if

  dim topage

  topage=cint(Request.QueryString ("topage")) '########取得要顯示的頁面

  if topage〈=0 then

  topage=1

  end if

  if topage〉pagenum then

  topage=pagenum

  end if

  

  dim i,j,n

  b=listarray

  for i=0 to recordcount-1 '########把每一條記錄組成一個數組

  j=split(listarray(i),",")

  if ubound(j)=6 then

  b(i)="〈SPAN style='COLOR: #ffbd00; FONT-SIZE: 7px'〉〈li〉〈/SPAN〉〈span style='font-size:10pt'〉〈a href='news_vIEw.ASP?id=" & j(0) & "' target=blank〉" & j(1) & "(圖)〈/a〉 點擊:" & j(4)&"次 最後發布

    No
  1. 下一頁:
Copyright © 程式師世界 All Rights Reserved