|
04-09-06, 20:36 | # 1 |
מ.תיכנות
|
[מדריך] PHP - מערכת תגובות (*מומלץ!)
מערכת תגובות לבקשת נריה, החלטתי לכתוב מדריך לבניית מערכת תגובות, ואסביר שלב שלב, על:
החלק הראשון, הוא תכנון מסד הנתונים, בעצם, מה אנו רוצים להכניס ולשמור כנתונים שנוכל לשלוף ולעשות בהם שימוש בעתיד?
שם השולח: שם שולח התגובה כותרת התגובה: נושא התגובה עליו יבחר הגולש כתובת אייפי: על מנת שנוכל לזהות את המשתמש בכל כניסה לדף זמן השליחה: על מנת חסימת הצפות, בין תגובה לתגובה יהיה זמן על המשתמש לחכות אימייל: במידה ומנהל האתר ירצה ליצור קשר תוכן התגובה: אני באמת צריך לפרט? צעד ראשון - כתיבת הטבלה על מנת ליצור את המערכת, עלינו להבין, שהיא מבוססת מסד נתונים, כל תגובה, תכנס אל המסד, ותשמר בו, על מנת שלאחר מכן, נוכל לשלוף את הנתונים. נא פתחו את Phpmyadmin הנמצא על השרת, במידה ואינכם יודעים היכן הוא נמצא, שאלו את מנהל השרת שלכם, במידה ואתם עובדים על שרת ביתי, לרוב הוא נמצא ב: localhost/phpmyadmin. בחרו במסד נתונים מן המסדים, או צרו אחד חדש, לאחר מכן, הוסיפו טבלה חדשה, בשם: comments. כמו שציינתי לעיל, השדות הן: ID, author, title, content, IP, time_sent, email לכל אחת מן השדות, תנו את המאפיינים: במידה ואינכם רואים את התמונה לחצו כאן על מנת לגרום לID להיות מספר אוטומטי שיעלה אוטומטית בכל הוספת נתונים, תנו לו את המאפיינים הבאים: במידה ואינכם רואים את התמונה לחצו כאן שלב שני - בחירת מסד הנתונים והטבלה הנכונה השלב השני כמובן הוא, התחברות אל מסד הנתונים, על מנת להתחבר אל המסד, אתם צריכים ארבעה פרמטרים, והם:
על מנת להתחבר למסד, עלינו להשתמש בשני פונקציות, mysql_connect, mysql_select_db ברגע זה, אנו מתחילים את מערכת התגובות, כצעד ראשון נכתוב קוד HTML בסיסי (ולא תקין, אני לא מלמד פה תיקניות =]): HTML קוד:
<html> <head> <title>Comments</title> </head> <body> כאן יופיע התגובות + טופס הוספת תגובה </body> </html> עכשיו, ניצור קובץ "config", שבעצם יכיל את ההתחברות למסד, לאחר מכן "נכליל" אותו, בעזרת פונקצית require. קובץ config.php יבנה בצורה הבאה: PHP קוד:
כאשר:
את הקוד הבא: PHP קוד:
שבעצם מכליל את קוד ההתחברות, נכניס בראש הדף הראשון. שלב שלישי - הוצאת התגובות והגנה מפני תגי HTML בשלב זה בעצם נוציא את התגובות הקיימות בטבלה שלנו ונגן על הדף שלנו, בעזרת חסימת תגי HTML. בשלב זה נשתמש במספר פונקציות, ומבני בקרה: mysql_query, mysql_num_rows, mysql_fetch_array, while, if וכמובן, נעבוד עם מערכים. השלב הראשון, עלינו ליצור שאילתה, שתבחר את כל התגובות מן המסד, ולאחר מכן, ניצור תנאי, שיבדוק האם ישנן תגובות במסד. נתחיל עם השאילתה, השאילתה אמורה להיות מורכבת משליפה (SELECT), בחירת הטבלה (FROM), וכמובן השדות (FILEDS) שבמקרה שלנו, הינם כולם (*). נשתמש בפונקציה mysql_query שנועדה לבצע פקודות Mysql PHP קוד:
אבל מה עם אין לנו תגובות במסד? פשוט מאוד, נוכל לבנות תנאי, "שישאל" אם קיימות תגובות במסד. כאן נשתמש בפונקציה mysql_num_rows שנועדה למספר תוצאות, ובמבנה הבקרה if שנועדה לתנאים. PHP קוד:
כאן נשתמש בפונקציה mysql_fetch_array שתוציא לנו מערך של התוצאות, ובמבנה הבקרה while. PHP קוד:
בקוד זה, בעצם כתבנו, קוד שאומר "שלוף את כל התגובות, במידה ולא קיים, תגיד ... במידה וכן, תציג את התגובות בטבלה, ע"י שם הכותב, כותרת ההודעה, ותוכן ההודעה. אבל כאן אנו נתקעים בבעיה..: מה עם מישהו ירצה לגרום בעיות, ויכניס תגובה בעלת תוכן HTML או JS? בעצם הוא יכול לגרום לדף בעיות, מה שאנו לא רוצים, לכן אני יכול להיעזר בפונקציה: htmlspecialchars פונקציה זאת הופכת תגי HTML לתגי חסרי משמעות בדפדפן. הקוד החדש יראה כך: PHP קוד:
PHP קוד:
שלב ארבע - בניית טופס "הוספת תגובה" שלב זה הוא בין הקלים, כל מה שעלינו לעשות, הוא ליצור טופס, שיעביר נתוני POST, בעל שלושה תיבות טקסט ותיבה גדולה יותר לכתיבת התגובה עצמה. הטופס יראה בצורה הבאה: PHP קוד:
קוד זה הינו קוד HTML פשוט, בעצם פה שמנו טופס, שיפנה את הנתונים כנתוני POST (טופס), בעל ארבעה תיבות טקסט: שם, כותרת, אימייל, והתגובה. הaction הוא בעצם מוביל את הנתונים, אל הדף שבחרנו (send.php), לדף זה נגיע בנושא החמישי. לאחר כל העבודה, הגענו אל הסוף, הנושא החמישי. שלב חמישי - אבטחת הנתונים ושליחתם אוקיי חבר'ה, הגענו לשלב האחרון, זה בעצם החלק החשוב, עד עכשיו, הגענו אל הקוד: PHP קוד:
החלק האחרון בקוד האתר, הינו הדף send.php הדף הזה מכיל את שליחת הנתונים ולאחר מכן מעבר חזרה אל דף התגובות אוטומטית, כאן נלמד לאבטח את המידע שאנו שולחים. בחלק הראשון, נעשה מספר בדיקות בעזרת התנאי if, בינהם: האם האייפי של הגולש נמצא במסד, ואם כן, האם עברו 30 שניות מאז התגובה האחרונה שלו? והאם השדות מלאים? או שהגולש השאיר מספר שדות ריקים? מתחילים: נתחיל עם בדיקת השדות, האם הם מולאו? נעזר במערך POST, בו קיבלנו מידע מן הטופס, במבנה הבקרה if, ובפונקציה empty שבודקת האם ערך כלשהו הינו ריק. PHP קוד:
בתנאי זה בדקנו האם הגולש מילא את כל שדות הטופס, במידה וכן , נעבור אל התנאי הבא, שפה נצטרך לעשות בדיקה, האם קיים הIP במסד, ואם כן, האם עבר זמן מספיק מאז תגבתו האחרונה? כאן נשתמש בפונקציות: mysql_query, time, mysql_num_rows. time - זמן לינוקס, שניות שעברו מאז ינואר 1970. PHP קוד:
מה עשינו כאן? במידה והמשתמש אכן מילא את הטופס במלואו, תתבצע שאילתה, שתבדוק במסד, אם נמצא במסד נתונים שמכילים גם את האייפי, וגם, אם לא עברו 30 שניות מתגובתו האחרונה. ".time()." - time > 30 מה שעשיתי פה, הוא חיסור הזמן הנוכחי, בזמן הנמצא במסד, ואם הוא גדול מ30. במידה ותנאי זה אינו מתקיים גם הוא, הגיע זמן להכנסת הנתונים למסד.. כמו שידוע לרובכם, שליחת נתונים דרך כתובת, תיבות טקסט, ובעצם כל מקוםשבו הגולש הממוצע יכול להכניס נתונים, הינה מסוכנת, ומהווה מטרה ל"האקרים" לכן, אנו המתכנתים, צריכים לנסות כמה שיותר לחסום את פרצות האבטחה השונות, עליהן לא אפרט במדריך זה. הדבר הראשון עלינו לעשות, הוא לקחת את המשתנים שקיבלנו דרך הטופס, ולבצע עליהם את פונקצית mysql_real_escape_string, שלפי דעתי תבטל את כל הפריצות מכיוון Mysql injections. הקוד יראה בצורה הבאה: PHP קוד:
כאן הגנו על המידע אשר הגיע מן המשתמש, מן הטופס. אבל זה לא מספיק, עלינו לקבוע משתנים נוספים: זמן שליחת ההודעה, וכתובת IP של המשתמש, עם המערך והפונקציה עשינו הכרות בקוד הקודם, והם נכתבים כך: PHP קוד:
יאללה חברה, הגענו לשני הקטעים האחרונים במדריך, ובמערכת, שליחת הנתונים למסד, והפניית הדפדפן חזרה לדף התגובות. כל מה שעלינו לעשות, לאחר הצבת המשתנים, והגנה על המידע, היא שאילתה פשוטה: PHP קוד:
פשוט וקל והחלק האחרון במדריך, הוא הפניית הדפדפן חזרה אל דף התגובות, בפשטות, ע"י הפונקציה header: PHP קוד:
הערה!: שימוש בפונקציות header לאחר פלט HTML יפלוט שגיאה ולכן אנו מציבים בראש הדף את הפונקציה ob_start שמעכבת את פלט הHTML ומעבדת אותו רק לאחר עיבוד קוד הPHP. לבסוף, קוד העמוד כולו הינו: PHP קוד:
נכתב באהבה לכל השמנים בעולם (או לפחות בפורום :P) תהנו לכם, אני השקעתי הרבה זמן בכתיבת המדריך =] אני חייב לציין שעוד לא בדקתי, אם יש שגיאות, תודיעו לי, ואסדר תהנו =] Last edited by WebProject; 04-09-06 at 21:15.. |
04-09-06, 20:40 | # 2 |
חבר וותיק
|
ואו טל המדריך הכי מושקע פה בפורום =] כל הכבוד, תמשיך להביא לנו מדריכים טובים.
מדריך מושקע מאוד, עוזר למתחילים כמוני :|, מפורט, עם תמונות וכמו שצריך. אני אנסה עוד כמה דקות להפעיל את המערכת בעצמי =] |
04-09-06, 20:45 | # 3 |
חבר וותיק
|
טל . מישהו פעם אמר לך שאתה תותח אש ? [אולי פבל ]
אז עכשיו גם אני
__________________
מסנג'ר:bestman3@walla.co.il |
04-09-06, 20:44 | # 4 |
מ.תיכנות
|
תודה =]
אני חייב לציין... אחרי כתיבה של שעתיים רצופות, האצבעות שלי כבר מדממות :P |
04-09-06, 20:46 | # 5 |
מ.תיכנות
|
תודה לך דור
|
04-09-06, 20:47 | # 6 |
משתמש - היכל התהילה
|
פשש, לא קראתי הכל, אבל קבל חח =]
|
04-09-06, 20:50 | # 7 |
הוסטסניון
|
תודה רבה על ההשקעה.
__________________
|
04-09-06, 21:01 | # 8 |
Winner
|
יפה אחי
מצאתי בעיה קטנה בהצגת התגובות עשית שתיהיה טבלה חדשה לכל תגובה לדעתי כדאי שתיהיה טבלה אחת לכל התגובות
__________________
בברכה, רום. מתכנת אפליקציות אינטרנט. אימייל: Rom.As10@gmail.com מסנג'ר: Rom_as10@hotmail.com |
04-09-06, 21:08 | # 9 | |
מ.תיכנות
|
ציטוט:
|
|
04-09-06, 21:11 | # 10 | |
חבר מתקדם
|
ציטוט:
ממ ובחלק האחרון, אם יש שגיאה שמוצגת כ-HTML, ההידר לא אמור להשלח לפני זה ואז לא יראו את השגיאה שם? |
|
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
Tags |
מדריך למתקדמים, מדריך מומלץ, מדריך php, מדריך sql |
כלים לאשכול | |
תצורת הצגה | |
|
|