2

ユーザー情報を含むユーザーテーブルを表示するページがあります。各行の最後にあるボタンをクリックして、テーブルの行を更新できるようにしたい。私はコーディングにまったく慣れていないので、誰かが私を助けて、彼らの答えを少し「馬鹿にする」ことができれば、私は本当に感謝しています。

ありがとう!

これは私が試したコードですが、動作させることができないようです。

<html>
<body>

<%
Dim conn, oRs, ID, sql
Set Conn=Server.CreateObject("ADODB.Connection")
ID = Request.Form("ID")

If Request.Form("ID")="" then
  Set oRs=Server.CreateObject("ADODB.Recordset")
  oRs.open "SELECT * FROM tICTStaff WHERE ID ='" & ID & "'",Conn
  %>
  <form method="post" action="employeeUpdate.asp">
  <table>
  <%for each x in oRs.Fields%>
  <tr>
  <td><%=x.name%></td>
  <td><input name="<%=x.name%>" value="<%=x.value%>"></td>
  <%next%>
  </tr>
  </table>
  <br /><br />
  </form>
<%
Else
  sql="UPDATE table_name SET "
  sql=sql & "Forename ='" & Request.Form("Forename") & "',"
  sql=sql & "Surname ='" & Request.Form("Surname") & "',"
  sql=sql & "Active ='" & Request.Form("Active") & "',"
  sql=sql & "Address ='" & Request.Form("Address") & "',"
  sql=sql & "DOB ='" & Request.Form("DOB") & "',"
  sql=sql & " WHERE ID ='" & ID & "'"
  on error resume next
  Conn.Execute sql
  If err<>0 then
        Response.Write("Error updating Record!")
  Else
        Response.Write("Record " & ID & " was updated!")
  End If
End if
Conn.close
%>
<meta HTTP-EQUIV="REFRESH" content="0; url=Page.index.asp?msg=The record has been updated!">
</body>
</html>
4

1 に答える 1

0

スクリプトにいくつかの問題があります。

  1. SQLインジェクション!SQLインジェクションについて自分に知らせ、それを避けるためにスクリプト全体を書き直してください。あなたが何かをする前に、最初にそれをしてください。
  2. であるかどうかをテストしてRequest.Form("ID")""ます。しかし、あなたの選択では、それは空の文字列ですが、それを使用しています。
  3. 従来のASPで使用on error resume nextする場合は、を使用してエラー処理を「オフ」にする必要がありますon error goto 0。それ以外の場合はon error resume next、スクリプトの残りの部分でが使用されます。
  4. refreshそのメタタグで何を達成しようとしていますか?

あなたへの私の提案は次のとおりです。

  1. SQLインジェクションについて読んでください
  2. からのレコードを一覧表示するだけのページを作成してみてくださいtICTStaff
  3. 次に、それらのレコードを編集するための2番目のページを作成します。最初のページの編集ボタンをクリックしたら、編集ページに移動して、からその特定のレコードをロードしますtICTStaff
  4. 編集ページで、快適なフォームを作成し、その特定のレコードの更新ルーチンを実装します。

概要サイトで、次のようなリンクを作成します。

<%
Set oRs = Server.CreateObject("ADODB.Recordset")
oRs.open "SELECT * FROM tICTStaff", Conn
do while not oRS.eof %>
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td><a href="update.asp?id=<%=oRS.fields("ID").value%>">link to detail/update page</a></td>
  </tr>
  <% oRS.movenext
loop %>

update.aspページで、クエリ文字列からIDを含むレコードを読み込み、次のようなフォームを表示します。

<%
dim myID : myID = request.querystring("ID")
if myID = "" then myID = request.form("ID")

' update record
if request.form("submit01") = "update" then
  sql = "update tICTStaff set fieldName1 = ? WHERE ID = ?"
  set cmd = server.createobject("adodb.command")
  cmd.activeconnection = Conn
  cmd.CommandType = adCmdText
  cmd.commandtext = sql

  cmd.parameters.append cmd.createparameter("fieldName1", adVarchar, , 512, request.form("fieldName1") )
  cmd.parameters.append cmd.createparameter("id", adInteger, , , myID )
  set oRS = cmd.execute
end if


' load record
sql = "select * from tICTStaff where id = ?"

set cmd = server.createobject("adodb.command")
cmd.activeconnection = Conn
cmd.CommandType = adCmdText
cmd.commandtext = sql
cmd.parameters.append cmd.createparameter("id", adInteger, , , myID )
set oRS = cmd.execute

' now you have a recordset with the record from tICTStaff with the ID
%>
<!-- display the form -->
<form name="" method="post">
<input type="hidden" name="id" value="<%=myID%>">

<!-- more fields to be edited -->
<input type="text" name="fieldName1" value="<%=oRS.fields("fieldName1").value%>">

<input type="submit" name="submit01" value="update">
</form>

完全に異なるソリューション(ajaxベース):

テーブル全体に対して何らかの「一括更新」関数が必要な場合は、AJAX呼び出しを使用してjQueryを試してください。したがって、各行の最後にあるボタンをクリックすると、入力フィールドの値とレコードのID(テーブルの主キー)を使用してAJAXリクエストをASPサイトに送信tICTStaffます。

ASPページで、AJAXリクエストを処理し、次のtICTStaffようにテーブルを更新するUPDATEステートメントを生成します。

UPDATE tICTStaff
SET fldname1 = fldVal1, fldname2 = fldVal2
WHERE ID = postedID

jQuery AJAXについて読むには、こちらをご覧ください。

于 2012-12-18T11:24:09.177 に答える