作業表登録

作業表登録です。

add.asp ソースはこちら



ここでもセッションに値が入っていない場合はエラーに飛ばしています。

登録ボタンを押した先が add2.asp です。

add2.asp


<% @LANGUAGE="VBScript" %>
<%
if Session ("id") = "" then
Response.Redirect "error.asp?err=session"
end if  
'------------------★カウントファイル★------------------
count_file = Server.MapPath("count.dat")
'------------------★データファイル★------------------
data_file = Server.MapPath("data.dat")
 
'------------------★カウント読み込み★------------------
Set ObjFSO = Server.CreateObject("Scripting.FileSystemObject")
Set ObjTS = ObjFSO.OpenTextFile(count_file,1,True)
count = ObjTS.ReadLine
ObjTS.Close
Set ObjTS = Nothing
Set ObjFSO = Nothing
 
'------------------★カウント書き込み★------------------
count2 = count + 1
Set ObjFSO = Server.CreateObject("Scripting.FileSystemObject")
Set ObjTS = ObjFSO.OpenTextFile(count_file,2,True)
ObjTS.WriteLine count2
ObjTS.Close
Set ObjTS = Nothing
Set ObjFSO = Nothing
 
'------------------★フォーム取得★------------------
name = Request.Form("name")
koumoku = Request.Form("koumoku")
kasyo = Request.Form("kasyo")
naiyo = Request.Form("naiyo")
up_month = Request.Form("up_month")
up_day = Request.Form("up_day")
 
'------------------★ファイルカキコデータ生成★------------------
data = count & Chr(9) &_
Now & Chr(9) &_
name & Chr(9) &_
koumoku & Chr(9) &_
kasyo & Chr(9) &_
naiyo & Chr(9) &_
up_month & Chr(9) &_
up_day
 
'------------------★項目の値が空じゃないときファイルの先頭にデータ追加★------------------
If koumoku <> "" Then
 Set ObjFSO = Server.CreateObject("Scripting.FileSystemObject")
 Set ObjFL = ObjFSO.GetFile(data_file)
 If ObjFL.size <> 0 Then
  Set ObjTS = ObjFSO.OpenTextFile(data_file,1,False)
  moto_data = ObjTS.ReadAll
  ObjTS.Close
  Set ObjTS = Nothing
  flag = 11
 end if

 Set ObjTS = ObjFSO.OpenTextFile(data_file,2,True)
 ObjTS.WriteLine data
 if flag = 11 then
  ObjTS.Write moto_data
 end if
 ObjTS.Close
 Set ObjFL = Nothing
 Set ObjTS = Nothing
 Set ObjFSO = Nothing
End If
 
%>
<html>
<head>
<title>作業管理システム</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<style type="text/css">
<!--
.mozi { font-size: 12px}
-->
</style>
</head>

 
<body bgcolor="#ffffff" text="#000000">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td> <br>
<table width="500" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td bgcolor="#0000CC">
 
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>
<div align="center"><font color="#FFFFFF"><b>作業表登録</b></font></div>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="mozi">
<div align="center">
<p> </p>
<p><br>
登録しました。<br>
 </p>
<p> </p>
</div>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="10" class="mozi">
<div align="right"><a href="menu.asp">メニュー</a></div>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="10" class="mozi">
<div align="right"><a href="logout.asp">ログアウト</a></div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<br>
</td>
</tr>
</table>
</body>
</html>

 

count_file = Server.MapPath("count.dat")
data_file = Server.MapPath("data.dat")


まずカウントファイル(作業表IDファイル)とデータファイルの定義をしています。
カウントがどこで必要かというと、作業表を特定するためのユニークな識別子にするためです。変更や、削除をする場合、どの作業表を変更するのかを特定するのに必要です。作業表IDとして使います。

ここでは同じディレクトリにあるファイルを指定しています。
なので、あらかじめ0を記入したカウントファイルと、0バイトのデータファイルを同じディレクトリに用意する必要があります。

カウントデータからカウントを読み込み、それを count にセットしています。
Set ObjFSO = Server.CreateObject("Scripting.FileSystemObject")
Set ObjTS = ObjFSO.OpenTextFile(count_file,1,True)
count = ObjTS.ReadLine
ObjTS.Close
Set ObjTS = Nothing
Set ObjFSO = Nothing

そしてカウントに1を足して、カウントファイルに書き込んでいます。
count2 = count + 1
Set ObjFSO = Server.CreateObject("Scripting.FileSystemObject")
Set ObjTS = ObjFSO.OpenTextFile(count_file,2,True)
ObjTS.WriteLine count2
ObjTS.Close
Set ObjTS = Nothing
Set ObjFSO = Nothing


次にフォームからデータを受け取り、ファイルに書き込むデータとしてセットしています。

data = count & Chr(9) &_
Now & Chr(9) &_
name & Chr(9) &_
koumoku & Chr(9) &_
kasyo & Chr(9) &_
naiyo & Chr(9) &_
up_month & Chr(9) &_
up_day

上のコードで示す並び順は以下のとおりです。

カウント(作業表ID)、日付、修正者名、修正項目、修正個所、修正内容、サーバーUP月、サーバーUP日

サンプル
1  2003/02/28 2:09:01  kazan  デザイン  トップページ  ボタンのデザイン変更  2  28

Chr(9)とはタブのことです。項目ごとをタブで区切っています。
Nowで現在の日付、時刻が取得できます。

実際に書き込みます。書き込む場合、修正項目の値が空でないかをチェックして、空でない場合書き込みます。

If koumoku <> "" Then
 Set ObjFSO = Server.CreateObject("Scripting.FileSystemObject")
 Set ObjFL = ObjFSO.GetFile(data_file)
 If ObjFL.size <> 0 Then
  Set ObjTS = ObjFSO.OpenTextFile(data_file,1,False)
  moto_data = ObjTS.ReadAll
  ObjTS.Close
  Set ObjTS = Nothing
  flag = 11
 end if

 Set ObjTS = ObjFSO.OpenTextFile(data_file,2,True)
 ObjTS.WriteLine data
 if flag = 11 then
  ObjTS.Write moto_data
 end if
 ObjTS.Close
 Set ObjFL = Nothing
 Set ObjTS = Nothing
 Set ObjFSO = Nothing
End If

書き込む際に、新しい作業表を先頭に書き込みたいので、元の書き込みデータを一度すべて読み出し、書き込むときに新しい作業表データを書き込んでから、元のデータを後ろに書き込んでいます。

上半分のコードが元のデータをすべて読み込んでいます。ただ、元のデータのファイルサイズが0バイトの場合、すなわち、もとのデータが何もない場合は読み込みません。もとのデータがあったかどうかはフラグで判断しています。
下半分が書き込み部分です。
まずObjTS.WriteLine dataでさっき生成した新しいデータを書き込んでいます。WriteLineで書き込むと、改行コードも自動的に付加されます。そのあと、フラグが立っていれば、もとのデータがあるとみなされ、元のデータを書き込んでいます。
if flag = 11 then
 ObjTS.Write moto_data
end if


これでファイルに書き込むことができました。
今回は入力されたフォームの値に対して文字チェックなどはしていません。

ファイルに書き込んだあとは
「登録しました」というHTMLを表示しています。ソースの青文字の部分