מערכת ד"שים

‏ • 24 במאי, 2003



מכיוון שראיתי שיש הרבה בקשות למערכת ד"שים החלטתי לבנות אחת כזו. המערכת מאוד פשוטה וכדאי להוסיף לה עוד שכלולים, אך אפשר להשתמש בה בתור בסיס. היא בנויה בASP, ונוסיף גם קצת JavaScript ו CSS.
המערכת יכולה לשמש גם בתור ספר אורחים, או כל דבר אחר בסגנון.

איך זה יפעל?

במערכת הד"שים שלושה דפים: showmsg.asp, שתפקידו להציג את כל הד"שים, והדפים addmsg.html ו-addmsg.asp שתפקידם להוסיף ד"ש (אחר-כך נראה מה ההבדלים ביניהם). במסד הנתונים msg.mdb ישנה רק טבלה אחת: messages, היא נראית כך:

שםתפקידסוג
msg_idמספר הד"שמספור אוטומטי
senderשם השולחטקסט
emailדוא"ל השולחטקסט
bodyגוף הד"שתזכיר

addmsg.html

הדף addmsg.html בנוי כולו HTML ואת אימות הטפסים נעשה באמצעות JS:



1
2
3
4
5
6
7
8  

<html>
<head>
<title>
הוספת ד"ש
</title>
</head>
<body>
<p align="right">

עד כאן התחלה רגילה של דף HTML + יישור לימין.



1  

<form name="addform" method="post" action="addmsg.asp" onsubmit="return CheckForm()">

כאן אנחנו מגדירים את ה form. שימו לקטע הזה: onsubmit="return CheckForm()"
שבתרגום חופשי זה: בלחיצה תפעיל את הפונקציה CheckForm. אם היא מחזירה true שלח את הטופס ואם לא אז אל תשלח.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15  

שם
<br>
<input type="text" name="sender"><br><br>
דואר אלקטרוני
<br>
<input type="text" name="email"><br><br>
נושא
<br>
<input type="text" name="subject"><br><br>
הד"ש
<br>
<textarea name="msg" rows="7" cols="40">
</textarea><br><br>
<input type="submit" value="הוסף את ההודעה">
</form>

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



1
2
3
4  

<script language="javascript">
function CheckForm()
{
var frm = document.addform;


כאן אנחנו פותחים בחלק ה-JS, מגדירים את הפונקציה CheckForm ומגדירים את המשתנה frm שיכיל את הטופס addform.



1
2
3
4
5
6  

if(frm.sender.value=="")
{
  alert(' חובה להקליד שם');
  frm.sender.focus();
  return false;
}


ופה מתחיל אימות הטופס: אם שדה השם sender ריק אז תודיע שחובה להקליד שם, תעביר את הסמן לשדה הזה, ואל תשלח את הטופס. (זוכרים מתי קוראים לפונקציה הזאת?)



1
2
3
4
5
6
7
8
9
10
11
12
13  

if(frm.subject.value=="")
{
  alert(' חובה להקליד נושא');
  frm.subject.focus();
  return false;
}

if(frm.msg.value=="")
{
  alert(' חובה להקליד ד"ש');
  frm.msg.focus();
  return false;
}

עכשיו עושים את אותו הדבר גם לגוף ההודעה ולנושא (הדוא"ל לא חובה).
ורק במידה שהטופס עבר את כל הבדיקות שליחתו מאושרת



1
2
3
4
5
6  

return true;
}
</script>
</p>
</body>
</html>

ואז סוגרים את הפונקציה, את הסקריפט, את ה body ואת הדף.

לקחת הרבה אוויר, עוברים לדף הבא: addmsg.asp.

addmsg.asp

תפקידו של הדף הוא להוסיף את ההודעה, הוא מקבל את נתוני ההודעה מהדף addmsg.html.
לדף הזה אין חלק ויזואלי! הגולש לא יראה אותו, הוא יגיע לדף, וממנו יעבור לדף showmsg.asp.

אנחנו מגדירים את המשתנים, אחר-כך נראה למה הם משמשים.



1
2
3
4
5
6
7  

<%
Dim sender, subject, email, msg
Dim conn, dsn, sql
sender = Request.Form("sender")
email = Request.Form("email")
subject = Request.Form("subject")
msg = Request.Form("msg")

המשתנים sender, email, subject וmsg מקבלים את הערכים מהעמוד הקודם



1
2  

msg = Replace(msg,VBCRlf,"<br>")

ירידות השורה ב textarea נרשמות בתור VBCRlf ואנחנו מחליפים אותן ב
.



1
2  

subject = "<b>" & subject & "</b>"

את הנושא אנחנו מדגישים – שמים אותו בין תגי <b&עt;.



1
2
3
4
5
6  

If email="" Then
   sender = "<u>" & sender & "</u>"
Else
    sender = "<a href='mailto:" & email & "'>" & sender & "</a>"
End If

אם ה email ריק אנחנו מוסיפים ל sender קו תחתון ואם לא אנחנו הופכים אותו לקישור לemail.



1
2
3
4  

Set conn = Server.CreateObject("ADODB.Connection")
dsn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("msg.mdb") & ";"
conn.Open dsn

אני מקווה שאת זה אין צורך להסביר (אם יש, לכו למדריך ה ASP)



1
2
3  

sql = "INSERT INTO messages (sender,email,subject,body) VALUES ('"
sql = sql & sender & "','" & email & "','" & subject & "','" & msg & "')"

זה קצת מסובך: במשתנה sql אנחנו שמים את משפט ה sql להוספת הד"ש. אנחנו מכניסים את המשתנים שקיבלנו מהדף הקודם לשורה חדשה בטבלה messages. את msg_id אנחנו לא מוסיפים, מפני שהוא מסוג מספור אוטומטי.



1
2  

conn.Execute sql

וזה החלק החשוב: אנחנו מפעילים את משפט ה sql, ומוסיפים את ההודעה



1
2
3  

conn.Close
Set conn = nothing

סוגרים ומאפסים את האובייקט conn (למה?)



1
2
3  

Response.Redirect "showmsg.asp"
%>

ואחרי שהוספנו את הד"ש עוברים לדף showmsg.asp וסוגרים את הדף.

showmsg.asp

בדף הזה נציג את כל ההודעות, הישנות ביותר בסוף העמוד.



1
2
3
4
5
6
7
8
9
10
11
12
13
14  

<html>
<head>
<title> מערכת הד"שים </title>
<style>
  body
  {
     fontfamily:arial;
  }
  a:visited
  {
     color:blue;
  }
</style>
</head>

זה קצת הרבה בבת-אחת, אבל אם נסתכל נראה שזה מאוד פשוט: התחלה פשוטה של html וב CSS אנחנו מגדירים שהכתב יהיה בגופן arial ואחרי שלוחצים על קישור הוא יישאר בצבע כחול.



1
2
3
4
5
6
7
8
9  

<body>
<center>
<b>
<big>
<h1>
מערכת הד"שים
</h1>
</big>
</b>

פותחים את ה body ועושים כותרת מודגשת גדולה וממורכזת של מערכת הד"שים.
שימו לב שה <center> לא סגור



1
2  

<a href="addmsg.html">הוסף ד"ש</a>
</center>

כאן אנחנו מוסיפים קישור להוספת ד"ש וסוגרים את ה <center>



1
2
3
4
5
6  

<%
Dim conn, rs, dsn
Set conn = Server.CreateObject("ADODB.Connection")
dsn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("msg.mdb") & ";"
conn.Open dsn
Set rs = Server.CreateObject("ADODB.Recordset")

יוצרים recordset ואובייקט חיבור.



1
2
3  

rs.Open "SELECT * FROM messages ORDER BY msg_id DESC",conn
%>

אנחנו פותחים את ה recordset, מוציאים את כל המידע מהטבלה, מסודר לפי msg_id בסדר יורד וסוגרים את חלק הASP.



1  

<p align="right">



1  

<% do until rs.EOF %>

תמשיך את הלולאה עד שתגיע לסוף ה recordset.
נציג את ההודעות בתוך טבלה אחת לכל הודעה, בכל טבלה תהיה שורה אחת, כדי שהכל יהיה בדיוק איפה אנחנו רוצים שהוא יהיה.



1
2
3
4
5
6
7
8
9  

<table>
<tr>
<td align="right">
<%=rs("sender")%>
</td>
<td align="left">
נשלח מאת
&nbsp;&nbsp
</td>

פותחים את הטבלה והשורה
התא הראשון (משמאל) יכיל את שם השולח, יוצמד לימין
התא השני יכיל "נשלח מאת" ומכיוון שהוא מוצמד שמאלה הוא יהיה סמוך לשם השולח, וקצת מרוחק מהנושא:   זה רווח.



1
2
3
4  

<td align="right">
<%=rs("subject")%>
</td>
</tr></table>

התא האחרון יכיל את הנושא
סוגרים את הטבלה והשורה



1
2  

<%=rs("body")%>
<br><br><br>

כותבים את תוכן ההודעה, ויורדים שלוש שורות: צריך מרווח בין ד"ש לד"ש!



1
2
3  

<%
rs.MoveNext
loop

כל הקטע שבין ה do until ולבין ה loop יתבצע עד שהרשימה תיגמר, וכל פעם ד"ש אחר – כי אנחנו מעבירים את ה recordset קדימה על-ידי rs.MoveNext.



1
2
3
4
5
6
7
8
9  

rs.Close
Set rs = nothing
conn.Close
Set conn = nothing
%>
</p>
</body>
</html>

סוגרים ומאפסים את אובייקט ה recordset ואת אובייקט החיבור, וזהו. זה הסוף…

הקוד המלא של שלושת הדפים

לא היה כל-כך מסובך, נכון?
בהצלחה…!

תגיות:

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