וובמאסטר - תיכנות ובניית אתרים

מחיקת רשומות

entry/‏ 3 אוגוסט, 2002
F+
F-
הרבה פעמים, בעיקר במערכות ניהול, אני רוצים להציג לגולש רשימה של כל הרשומות בטבלה מסויימת, ולתת לו אפשרות למחוק כמה מהן במכה אחת.
זאת ניתן לעשות ע"י יצירת סדרה של תיבות סימון בעלות שם זהה, אך ערך ייחודי לכל אחת מהן.

מבנה הטבלה

לצורך הדוגמא, נשתמש בטבלה בשם myFriends , בעלת השדות הבאים:
  • ID - שדה מסוג מספור אוטומטי
  • Friend_Name - שדה מסוג טקסט המכיל את שם החבר
  • Friend_Age - שדה מסוג מספר המכיל את גילו של החבר
  • Friend_Address - שדה מסוג טקסט המכיל את כתובתו של החבר

הצגת הרשימה

נגדיר את אובייקט החיבור ואת הרקורדסט, ונפתח את החיבור לבסיס הנתונים:

1
2
3
4
5
6  
<%
    Dim conn, rs
    Set conn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    conn.Open connDSN
%>


נשלוף, בעזרת אובייקט חיבור ורקורדסט שהגדרנו קודם, את כל החברים בטבלה:

1
2
3  
<%
    rs.Open "SELECT * FROM myFriends",conn
%>


נפתח טופס ששמו myForm , וכ-action ניתן לו את הדף delete.asp.

1  
<form method="post" action="delete.asp">


בתוך הטופס, נבנה טבלה המכילה את כל פרטי החברים. לצד כל חבר, נציג תיבת סימון, בעלת השם toDel, ובערך, ניתן לה את מספר ה-ID של החבר.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15  
<table>
<%Do While Not rs.EOF%>
<tr>
    <td><%=rs("Friend_Name")%></td>
    <td><%=rs("Friend_Age")%></td>
    <td><%=rs("Friend_Address")%></td>
    <td><input type="checkbox" name="toDel" value="<%=rs("ID")%>"></td>
</tr>
<%    rs.MoveNext
Loop
rs.Close
conn.Close
Set rs=Nothing
Set conn=Nothing%>
</table>


בסופו של דבר, נוסיף כפתור Submit, ונסגור את הטופס.

1
2  
<input type="submit" value="DELETE">
</form>


התוצאה תראה כך (שים לב שזו דוגמא בלבד, והטופס לא פועל) :

משה כהן 13 השקמה 21
מה נחום 45 אליהו 12
משה דוד 67 הנשיא 789
משה לוי 22 עזה 89
משה שמעון 21 יפו 61
משה רחמיאלי 17 ירוחם 99
משה שמוליק 34 תל אביב 56
משה רחל 15 חיפה 45
משה קרקוב 45 ישראל 2000



כדי למחוק רשומות, כל מה שעל הגולש לעשות, הוא לסמן את הרשומות שברצונו למחוק, וללחוץ על הכפתור. לאחר שליחת הטופס, נגיע לדף delete.asp

הדף list.asp בשלמותו:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26  
<%
    Dim conn, rs
    Set conn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    conn.Open connDSN
    rs.Open "SELECT * FROM myFriends",conn
%>
<form method=post action="delete.asp">
<table>
<%Do While Not rs.EOF%>
<tr>
    <td><%=rs("Friend_Name")%></td>
    <td><%=rs("Friend_Age")%></td>
    <td><%=rs("Friend_Address")%></td>
    <td><input type="checkbox" name="toDel" value="<%=rs("ID")%>"></td>
</tr>
<%    rs.MoveNext
Loop
rs.Close
conn.Close
Set rs=Nothing
Set conn=Nothing%>
</table>
<input type="submit" value="DELETE">
</form>



דף המחיקה

כאשר אנו מסמנים יותר מתיבת סימון אחת, ה-Request שלנו מכיל את כל הערכים של התיבות שסומנו (אלו שהן בעלות אותו שם) מופרדים בפסיקים. כלומר, אם סימני את התיבות שהערכים שלהם הם 1,4 ו- 6, אם נכתוב את השורה:


1  
<%=Request.Form("toDel")%>


התוצאה תהיה 1,4,6. קודם כל, נבדוק אם בכלל סומנה תיבה כלשהי (ניתן לעשות זאת גם בצד לקוח, לפני שהטופס נשלח):

1  
<%If Request.Form("toDel")<>"" Then%>


אם הוא לא ריק, נגדיר את אובייקט החיבור, ונפתח את החיבור לבסיס הנתונים.

1
2
3
4
5  
<%
    Dim conn, sql
    Set conn = Server.CreateObject("ADODB.Connection")
    conn.Open connDSN
%>


ניצור משתנה שיכיל את שאילת, המחיקה שלנו. בשאילתה נשתמש באופרטור IN, המקבל מספר ערכים מופרדים בפסיקים (בדיוק מה שה-Request שלנו מכיל):

1
2
3  
<%        
    sql="DELETE FROM myFriends WHERE ID IN (" & Request.Form("toDel") & ")"
%>


אם נדפיס את השאילתה, היא תראה כך:

1  
DELETE FROM myFriends WHERE ID IN (1,4,6)


מה בעצם אומר: "תמחק את כל הרשומות מהטבלה myFriends, שה-ID שלהן הוא 1,4 או 6. נפעיל את השאילתה באמצעות אובייקט החיבור (לאחר ביצוע שורה זו, הרשומות כבר נמחקו מבסיס הנתונים).

1  
<%conn.Execute sql%>


לאחר המחיקה, נעביר את הגולש חזרה לדף list.asp

1  
<%Response.Redirect "list.asp"%>


הקובץ delete.asp בשלמותו:

1
2
3
4
5
6
7
8
9
10
11
12
13
14  
<%
    If Request.Form("toDel")<>"" Then
        Dim conn, sql
        Set conn = Server.CreateObject("ADODB.Connection")
        conn.Open connDSN

        sql="DELETE FROM myFriends WHERE ID IN (" & Request.Form("toDel") & ")"
        conn.Execute sql
        conn.Close
        Set conn=Nothing

    End If
    Response.Redirect "list.asp"
%>


בהצלחה!


entry

סטודיו לבניית אתרים שהוקם בינואר 2005
תגיות: ASP‏  /  ADO‏  /  מחיקה‏  /  SQL‏  

תגובות בפייסבוק

תגובות למאמר



תגיות פופולאריות

X
הצטרף לעמוד שלנו בפייסבוק להישאר מעודכן!
וובמאסטר © כל הזכויות שמורות