2012-12-18 5 views
2

사용자 정보가있는 사용자 테이블을 표시하는 페이지가 있습니다. 각 행의 끝에있는 단추를 클릭하여 테이블의 행을 업데이트 할 수 있기를 원합니다. 나는 코딩에 완전히 새로운 사람이 나를 도울 수 있고 그들의 대답을 조금 벙어리로 말할 수 있다면 정말 고맙겠습니다.ADO를 사용하여 SQL 테이블에서 행을 업데이트하는 방법

감사합니다.

이것은 시도한 코드이지만 작동시키지 못하는 것 같습니다.

<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> 
+0

당신은 ADO를 언급하고 있지만 "asp-classic"으로 질문을 태그했습니다. 고전 ASP에서이 작업을 수행하고 있습니까? – ulluoink

+0

@ulluoink - 당신이 내 코드를 쓰지 않기를 바랄뿐입니다.하지만 그 일을 통해 아무 것도 배우지 않을 것입니다. 시도한 코드를 원래 게시물에 복사하고 초기 질문을 할 때 잊어 버렸습니다. 나는 ASP에서 그것을 쓰고 있는데 왜 ASP Classic을 사용했는지 모르겠다. 나는 틀린 일을해야만했다. – CodingNewbie

+0

ok asp-classic을 사용하고 있습니다. – ulluoink

답변

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 주입 약 : 당신

    나의 제안은 다음과 같다.

  5. tICTStaff에서 레코드를 나열하는 페이지를 만드십시오.
  6. 그런 다음 해당 레코드를 편집 할 수있는 두 번째 페이지를 만드십시오. 첫 번째 페이지에서 수정 버튼을 클릭하면 수정 페이지로 이동하여 tICTStaff에서 해당 레코드를로드합니다.
  7. 편집 페이지에서 편안한 양식을 만들고 해당 레코드에 대한 업데이트 루틴을 구현하십시오.

    당신의 update.asp 페이지
    <% 
    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 %> 
    

    는 쿼리 문자열에서 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> 

완전히 다른 솔루션 (아약스 기반) :

원하는대로 전체 테이블에 대해 "대량 업데이트"기능을 사용하려면 jQuery를 AJAX 호출로 시도하십시오. 따라서 각 행의 끝에있는 버튼을 클릭하면 입력 필드 의 값 (레코드 tICTStaff 테이블의 기본 키)을 사용하여 ASP 사이트에 AJAX 요청을 보냅니다.보고 here을 가지고

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

jQuery를 AJAX에 대해 읽으려면 : ASP 페이지에

, 당신은 AJAX 요청을 처리하고 그래서 같이 tICTStaff 테이블을 업데이트하는 UPDATE 문을 생성합니다.

+0

Ok, 나는 SQL Injection을 읽고 코드를 다시 작성하겠습니다. 나는 이미 다른 모든 것을 가지고 있으며 정보를 표시하는 페이지를 가지고 있으며 업데이트 링크가 있지만 사용 가능한 코드가없는 업데이트 페이지가 있습니다. 내가 고심하는 것은 데이터 행을 편집 할 수 있다는 것입니다. – CodingNewbie

+0

당신은 SQL update 절 또는 일부 레코드로 html 테이블을 "대량 편집"할 수 있다는 것을 의미합니까? – ulluoink

+0

현재 데이터가 가득 찬 테이블을 보여주고 있는데, 예를 들어 사용자 이름이나 DOB를 편집 할 수 있기를 원합니다. 따라서 버튼을 클릭하고 행의 일부 정보를 편집 할 수 있기를 원하지만 작동하도록 고심하고 있습니다. 이전에 업데이트 기능을 사용하여 특정 항목을 업데이트했지만 업데이트 할 행의 고유 ID를 허용하는 업데이트 기능을 작성한 적이 없습니다. – CodingNewbie

관련 문제