אשמח לקבלת עזרה ב- PHP.

עוזבנג

New member
אשמח לקבלת עזרה ב- PHP.

שלום רב, ברצוני לבנות מערכת-יומן שאני יוצר בכל פעם מתוך טופס נושא ( subject ) ותוכן הודעה ( message ), עשיתי זאת ! כיצד ? יצרתי ב- MySQL טבלה חדשה בשם daybook, בתוכה כמובן יש את הרשומות subject ו- message. כעת, יצרתי טבלה חדשה בשם comments שבתוכה יש את הרשומות של הגולש שמגיב, name, family, sex, homesite, email, city, subject, message וכדומה. מובן כי לכל תגובה יש ID משלה, שאלתי היא, כיצד המערכת תדע לאיזה הודעה שייכת כל תגובה שנשמרת ? מישהו יכול לכוון אותי ? שאלה נוספת, סביר להניח שמתישהוא העמוד יתארך ויצרוך פיצול לעמ' - כיצד עושים זאת ? תודה רבה :)
 

זאינאל

New member
עכשיו אתה רק צריך להתחיל לכתוב

את ה-PHP
קרא את מדריך ה-PHP שב il.php.net ותתחיל לכתוב. כדאי לפני כן לעשות תכנון - כמה עמודים יהיו לך באתר ומה הם יכילו. לדוגמה, הנה תכנון פשוט (שלא יתאים לך - תצטרך לשכלל אותו קצת) : שלושה עמודים: 1. עמוד תצוגה. מכיל מנגנון דפדוף שמראה את הנושאים של הרשומות האחרונות ומאפשר לדפדפף קדימה ואחורה בזמן. 2. עמוד הצגת רשומה. מציג רשומה אחת במלואה. 3. עמוד הכנסת הודעה. מכיל טופס עם כל הפרטים שצריך להכניס. נקודה מאוד חשובה - צריך גם לתכנן את הדפים שהמשתמש לא רואה - דפים חסרי תצוגה. הרבה אנשים מחמיצים אותם ומגלים שצריך אותם מאוחר מדי שאז כבר אי אפשר לשנות את התכנון. אתה צריך כאן דף "נסתר" אחד שיקבל את הקלט מהטופס, יכניס אותו למסד הנתונים ויעביר את הדפדפן לאחד משני הדפים האחרים (תלוי מה אתה מעדיף שיקרה לאחר הכנסת רשומה חדשה). מה שאני עושה בד"כ זה להכניס את המנגנון הזה בתוך דף הטופס (שמלבד זאת הוא די פשוט ולא מכיל כמעט כלום מלבד HTML) - לטופס יש action ריק שגורם למידע להשלח לעצמו. יש בטופס שדה נסתר שמכיל איזשהו מידע שמורה לדף שהוא קיבל כרגע טופס ויש לעבד אותו (אני משתמש בד"כ ב- action=new או משהו כזה) - כשהדף מורץ הוא בודק את השדה הנסתר - אם הוא מכיל ערך אז הוא בודק את התוכן של שדות הטופס, מטפל בהם ושולח את הדפדפן לדף ההמשך הרצוי, אחרת הוא פשוט מציג את הטופס עצמו. כמו כן, אני בד"כ מייצר קודם את דפי התצוגה - בעיקר בגלל שהם יותר קלים והרבה יותר קל לכתוב קוד מורכב כשיש לך כבר דברים קיימים להתאים אותו אליו ואתה לא צריך לשחק באוויר. לכן קודם עושים את מה שהכי פשוט וכשאתה מגיע למסובך כבר יש לך דף תצוגה שאפשר לבדוק עליו מייד אם ההכנסה שלך תקינה או לאו. הבעיה היא שאם כותבים את דפי התצוגה קודם אז אין במסד הנתונים מידע שאפשר לבדוק בעזרתו את הדפים. גם זה פתיר - פשוט תשתמש בתוכנת מסד הנתונים שלך בשביל להכניס ידנית רשומה או שתיים, כפי שתכננת שהיא תראה במסד הנתונים, ומולן לבדוק את דפי התצוגה. בהצלחה
 

עוזבנג

New member
תודה על לא קיבלתי מענה מלא :(

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

זאינאל

New member
אההה... ../images/Emo13.gif

יש לך בעיה קלה בתכנון מסד הנתונים. מקובל לשים לכל רשומה זיהוי יחודי אוטומטי כדי שתוכל להתייחס לרשומה מסוימת באופן יחודי. ב-Mysql מגדירים את השדה הראשון כ INT PRIMARY KEY auto_increment )שבד"כ קוראים לו id) שזה אומר שיהיה שדה שיהיה המפתח הראשי של הטבלה (שדה הזיהוי העיקרי) שהוא מספר שיתקדם באופן אוטומטי כל פעם שמוסיפים עוד רשומה. לאחר שעשית את זה אתה לא צריך לשנות את הוראות ה-INSERT שלך - mySql יודע לבד לשייך את הערך המתאים לשדה. עכשיו אתה צריך לשנות גם את טבלת התגובות שלך ולהוסיף שדה נוסף, גם הוא INT, ואולי אפילו איזה אינדקס עליו, שיצביע על הרשומה המתאימה בטבלת היומן. ואז אתה יכול לשאול את הטבלה - הבא לי בבקשה את הודעה 5 מהיומן, ועכשיו הבא לי בבקשה את כל התגובות להודעה 5 ביומן.
 

זאינאל

New member
דפדוף עמודים זה קל !

אתה פשוט מעביר לדף את פרמטר העמוד הדרוש (לדוגמה page) ועושה לולאה קטנה שעוברת על כל הרשומות ביומן בסדר הרצוי שלך. אם אתה יודע כמה רשומות אתה רוצה בכל עמוד, אז בתחילת הלולאה אתה עושה משהו כזה :
if ($page * $max_records_per_page < $current_record_count) continue;​
ובסוף הלולאה אתה עושה
if (($page + 1) * $max_records_per_page >= $current_record_count) break;​
כשבין שניהם אתה פשוט מציג את הרשומה. שים לב שאני מניח ש-page מבוסס אפס , ז"א שהדף הראשון הוא דף 0 ולא דף 1. זה עושה את החיים קצת יותר קלים למרות שזה די טריוויאלי לעשות שהדף הראשון יהיה דף 1. מה שקורה עכשיו זה שהלולאה מתחילה לרוץ ולספור את העמודים. בכל פעם שהיא מגיעה ל-if הראשון הוא מחשב: האם הרשומה הנוכחית כבר צריכה להכנס לעמוד שביקשו ? אם לא אז הוא אומר "המשך" - וותר על הרצת שאר הלולאה ודלג להתחלה של הסיבוב הבא. ביציאה מהלולאה ה-if מחשב: האם הרשומה הנוכחית היתה האחרונה בעמוד שביקשו ? אם כן - שבור את הלולאה ואל תמשיך לסיבובים הבאים. כמובן שצריך לקדם את current_record_count$ לפני ה-if הראשון אחרת תקבל לולאה אין סופית..
 
למעלה