作業表登録
作業表登録です。
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を表示しています。ソースの青文字の部分