[מדריך] PHP - מערכת תגובות (*מומלץ!)
מערכת תגובות לבקשת נריה, החלטתי לכתוב מדריך לבניית מערכת תגובות, ואסביר שלב שלב, על:
החלק הראשון, הוא תכנון מסד הנתונים, בעצם, מה אנו רוצים להכניס ולשמור כנתונים שנוכל לשלוף ולעשות בהם שימוש בעתיד?
שם השולח: שם שולח התגובה כותרת התגובה: נושא התגובה עליו יבחר הגולש כתובת אייפי: על מנת שנוכל לזהות את המשתמש בכל כניסה לדף זמן השליחה: על מנת חסימת הצפות, בין תגובה לתגובה יהיה זמן על המשתמש לחכות אימייל: במידה ומנהל האתר ירצה ליצור קשר תוכן התגובה: אני באמת צריך לפרט? :) צעד ראשון - כתיבת הטבלה על מנת ליצור את המערכת, עלינו להבין, שהיא מבוססת מסד נתונים, כל תגובה, תכנס אל המסד, ותשמר בו, על מנת שלאחר מכן, נוכל לשלוף את הנתונים. נא פתחו את Phpmyadmin הנמצא על השרת, במידה ואינכם יודעים היכן הוא נמצא, שאלו את מנהל השרת שלכם, במידה ואתם עובדים על שרת ביתי, לרוב הוא נמצא ב: localhost/phpmyadmin. בחרו במסד נתונים מן המסדים, או צרו אחד חדש, לאחר מכן, הוסיפו טבלה חדשה, בשם: comments. כמו שציינתי לעיל, השדות הן: ID, author, title, content, IP, time_sent, email לכל אחת מן השדות, תנו את המאפיינים: http://www.webproject.co.il/codes/images/comments_1.GIF במידה ואינכם רואים את התמונה לחצו כאן על מנת לגרום לID להיות מספר אוטומטי שיעלה אוטומטית בכל הוספת נתונים, תנו לו את המאפיינים הבאים: http://www.webproject.co.il/codes/images/comments_2.GIF במידה ואינכם רואים את התמונה לחצו כאן שלב שני - בחירת מסד הנתונים והטבלה הנכונה השלב השני כמובן הוא, התחברות אל מסד הנתונים, על מנת להתחבר אל המסד, אתם צריכים ארבעה פרמטרים, והם:
על מנת להתחבר למסד, עלינו להשתמש בשני פונקציות, mysql_connect, mysql_select_db ברגע זה, אנו מתחילים את מערכת התגובות, כצעד ראשון נכתוב קוד HTML בסיסי (ולא תקין, אני לא מלמד פה תיקניות =]): HTML קוד:
<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) תהנו לכם, אני השקעתי הרבה זמן בכתיבת המדריך =] אני חייב לציין שעוד לא בדקתי, אם יש שגיאות, תודיעו לי, ואסדר :) תהנו =] |
ואו טל המדריך הכי מושקע פה בפורום =] כל הכבוד, תמשיך להביא לנו מדריכים טובים.
מדריך מושקע מאוד, עוזר למתחילים כמוני :|, מפורט, עם תמונות וכמו שצריך. אני אנסה עוד כמה דקות להפעיל את המערכת בעצמי =] |
תודה =]
אני חייב לציין... אחרי כתיבה של שעתיים רצופות, האצבעות שלי כבר מדממות :P |
טל . מישהו פעם אמר לך שאתה תותח אש ? [אולי פבל :) ]
אז עכשיו גם אני |
תודה לך דור :)
|
פשש, לא קראתי הכל, אבל קבל חח =]
|
תודה רבה על ההשקעה.
|
יפה אחי
מצאתי בעיה קטנה בהצגת התגובות עשית שתיהיה טבלה חדשה לכל תגובה לדעתי כדאי שתיהיה טבלה אחת לכל התגובות |
מדהים טל... תודה רבה
|
ציטוט:
|
ציטוט:
ממ ובחלק האחרון, אם יש שגיאה שמוצגת כ-HTML, ההידר לא אמור להשלח לפני זה ואז לא יראו את השגיאה שם? |
ציטוט:
|
ציטוט:
בתוך הלולאה עשית טבלה לכל תגובה שם, יכולת פשוט לעשות את הכל בתוך אותה טבלה עריכה: שים לב שהוא רשם ציטוט:
|
התכוונתי לטבלה <table>
לא לטבלה במסד |
טוב אז ככה, את האמת לא קראתי את כל המדריך...רק עברתי עליו בריפרוף
בשביל לראות את הדרך שאתה משתמש בה בשביל להגן מפריצות להלן : PHP קוד:
אני מחר רוצה לבוא ולהוסיף מעיין מודול שמאפשר למנהל מערכת לערוך תגובות של משתמשים אז אני מושך את התגובה עם ה ID (השאר לא ממש חשוב) ומציג אותה אבל בשביל להציג אותה אני מציג אותה כמו הטופס בדיוק אם INPUT ו TEXTAREA עכשיו כשאתה מציג את המידע מחדש ב TEXTAREA הוא כבר אחרי ESCAPE מה שאומר שבתוך ה TEXTAREA אתה תראה את כל התווים של ה ESCAPE מה שיגרום לבלגן בתוכן למי שרואה את הדף לא מאמין ? אתה מוזמן לנסות... מניסיון בכל מקרה, כל הכבוד על ההשקעה, ניכר כי השקעת הרבה (אפילו תמונות והכל..) ישר כוח. ד"א אני מקווה שזאת לא הדרך שאתה מתכנת בה באמת אלה רק בשביל הדוגמא למתחילים. יום נעים. |
ציטוט:
|
האמת היא שלא בדיוק.... ניסיתי גם את זה
ההגדרה של הפונקציה mysql_real_escape_string PHP קוד:
כולכם מוזמנים לנסות... |
ציטוט:
בקשר לתיבת טקסט, ניתן פשוט להחליף את התווים המסוכנים ידנית (str_replace), לא בדקתי עדיין, אתם מוזמנים לנסות:) |
כל הכבוד על ההקשעה!!
|
תראה קראתי את המדריך ועשיתי אותו טוב, אבל זה נותן לי שגיאה אחת,
PHP קוד:
PHP קוד:
ודרך אגב, אם תוכל לעשות שכל אחד יוכל גם ליפתוח Post, משהו והיה אפשר להגיב לו היה יותר נחמד בהצלחה, אחלה מדריך. |
מדריך מצויין!, בעיקר למתחילים שרוצים עוד לדעת על מערכות שונות.
ישר כוח!, בהצלחה:) |
Nati_Man
תשנה את השורה לשורה: PHP קוד:
|
חברים, דבר ראשון, המדריך אינו כדי שתעתיקו, שנית, השגיאה, היא בגלל טעות כתיב, תשנה את הפונקציה ל: htmlspecialchars.
:) |
אתה כזה תותח!! יראבי חחח אחי אתה ענקק
|
ציטוט:
|
חח בשבילי איזה כבוד
ממש תודה י'תותח |
גם לי בכיתה ט' היה זמן לכתוב שעתיים מול המחשב..
אחלה מדריך. |
ענק!!!
תודה מכל הלב!!!! |
ציטוט:
פשוט מצאתם אותי בין פרויקטים =] בכל מקרה, תודה לכם, מקווה להמשיך לכתוב :D |
תודה רבה , מדריך מובן ומפורט !
|
גבר, התמונות לא עובדות ואני חושב שבגלל זה לא הצלחתי.
אודה לךאם תוכל לעלות את התמונות שנמחקו אחי ! |
ציטוט:
נעול! |
כל הזמנים הם GMT +2. הזמן כעת הוא 01:32. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ