[Powered by Google Translate] [שבוע 8, המשך]
[הדוד י מלאן] [אוניברסיטת הרווארד]
[זה CS50.] [CS50.TV]
>> זה CS50, אז זה סוף השבוע 8 כאן.
אנחנו כמובן היו קצת הוריקן בתחילת השבוע,
אז עכשיו זה באמת רק אתה ואני באולם הרצאות זה,
אבל היום אנחנו ממשיכים את השיחה שלנו על PHP
ועל תכנות האינטרנט באופן כללי יותר, ויש לנו גם להציג את הרעיון
של מסדי נתונים, במיוחד אחד בשם MySQL, שהוא די פופולרי בימים אלה,
בחלק גדול הודות ליכולת ההרחבה שלו, כמו גם בגלל היותו חופשי והקוד פתוח.
>> אבל תחילה, יסתכל בו הפסקנו בפעם אחרונה.
תזכיר כי אנחנו מסתכלים על כמה דוגמאות פרוש IMS,
וזה היה בצורה הזוועתית שאני בא עם כ 15 + שנים לפני
כדי שתהיה לי סטודנטים בקמפוס הרשמה לשנת א 'ספורט ביצוע עצמי
מבלי למעשה לטרק יותר מעבר לחצר לWigglesworth
להחליק פיסה פיזית של נייר מתחת לדלת כלשהי של משגיח.
במקום עברנו הכל באינטרנט, אבל כדי לעשות את זה אנחנו צריכים לעשות שימוש
של כמה טכנולוגיות, ולכן אחד, אנחנו צריכים HTML, שפת סימון היפרטקסט,
ששוב הוא שפת סימון זה שבחר לביצוע דפי אינטרנט מבני.
>> שימוש קצת של CSS בימים אלה, גיליונות סגנון מדורג,
לפיו אנו משתמשים stylizations של דף האינטרנט באמצעות תחביר שונה מעט,
ואילו את ה-HTML היה כל העניין במבנה ממנו.
גם אנחנו צריכים להציג את שפת תכנות אינטרנט.
במקרה זה, ישתמש PHP, וPHP הולך לאפשר לנו
תפוקה לתוכן באופן דינמי כמו גם לעשות דברים כמו תכנות
שליחת מיילים, כפי שהיה במקרה על הפתק שהשארנו בשבוע שעבר.
>> יזכיר כי הקוד לכך היה ב 2 חלקים.
אחד, שהיינו לנו froshims3.php,
וזה היה במידה רבה עם סימון טופס HTML בתוכו,
טיפה של CSS כאן בתכונות הסגנון
כך שהטופס עצמו היה מרוכז בדף, אבל מעבר לזה
היו לנו כמה תשומות יציגות טופס, שדה טקסט, תיבת סימון,
כמה כפתורי רדיו, בחר תפריט, וכפתור שליחה.
ובאמצעות טופס זה, הגשנו לקובץ שנקרא כנראה register3.php,
שנראה הוא עצם משהו קטן כזה.
עכשיו, את רוב הקוד בregister3.php, כזכור, היה כל עניין בדוא"ל.
זה עשה קצת אימות של הטופס שהוגש כדי לוודא
שהשדות בפועל ובלבד שהיו צפויים.
אז קראו לכמה פונקציות PHP באמצעות תחביר חדש במקצת,
למרות שזה שאול מג
>> מפעיל חץ זה מאפשר לנו לעשות שימוש במשהו שנקרא תכנות מונחה עצמים.
אנחנו לא נכנסנו לזה בכל פרט כאן, אבל יודעים לעת עתה
זה דרכו של בעל פונקציות הקשורות לאובייקטים,
שהם סוג מיוחד של מבנה, כפי שראינו ב C.
אבל לעת עתה, רק לקחת על אמונה שזה התחביר הנכון להשתמש
בעת שימוש בספרייה כספריית PHPMailer זה.
ואז בסוף הקובץ זה אנחנו שנוצרנו באופן דינמי דוא"ל
שקבל בדואר לחשבון jharvard@cs50.net
מחשבון jharvard@cs50.net,
ואנחנו הודענו למשתמש בהתאם כי הם היו רשומים לספורט הזה.
זה פחות או יותר מה שאתר IMs הפרוש עשה לפני השנים רבות כל
כשיישמתי אותו, מובן מאליו, בשפה אחרת,
אבל זה מראה לך אולי את הכח שיש לך
עכשיו שאתה יכול לבטא את עצמך, לא רק תכנותי
ברמה נמוכה בשפה כמו C, אבל ברמה הרבה יותר גבוהה
עם יישומים אלה מאוד בעולם אמיתיים כמו דואר האלקטרוני למעשה לפתרון
כמה בעיות בעולם אמיתית.
>> עכשיו, כמובן, למרות שאני משתמש בסקריפט זה כדי לייצר כמה
מיילים באופן דינמי מjharvard@cs50.net, שהוא אכן חשבון
שיש לי גישה אליו, אין די זהיר כדי לשלוח
לשלוח רק מחשבונות שהם למעשה שלך,
שמא דברים מקבלים אותך בקצת מים חמים בחיים.
עם זאת אמרה, בואו עכשיו מעבר לפתרון בעיה אחרת לגמרי,
זה של מדינות תומכות.
עכשיו, מה זה בעצם אומר?
HTTP, פרוטוקול העברת היפרטקסט זה,
הוא למעשה פרוטוקול חסר מדינה, ומה שזה אומר זה ש
כאשר אתה מושך משהו כמו Google.com ואז הקש על Enter
בדרך כלל הדפדפן שלך יש איזשהו סמל שמסתובב אז
תוצאות בדף אינטרנט כלשהו שהורידו,
ואז שהסמל הקטן מפסיק להסתובב, וזה אכן מצביע על
HTTP שהשלים איזשהו חיבור לשרת וזהו.
HTTP הוא חסר מדינה במובן זה שהיא אינו מקיימת
חיבור מתמיד לשרת באותה הדרך סקייפ עושה
או Gchat עושה כי עם HTTP
ההנחה היא שברגע שהביא בדף אינטרנט שזהו זה.
>> עכשיו, במציאות בימים אלה באתרים כמו פייסבוק וגוגל מפות
וטוויטר וכמו שיש הרבה יותר דינמי לפי
גם לאחר שהסמל מפסיק להסתובב אתה יכול למעשה לקבל יותר עדכונים
מהשרת, יותר ציוצים, עדכוני סטטוס בפייסבוק וכדומה.
אבל אפילו שהוא משתמש בטכניקה שנדברנו עליו בשבוע או שבועות
מכונה אייאקס באמצעות שפת JavaScript נקראת,
אבל בסופו של היום, HTTP הוא עדיין חסר מדינה.
ובכל זאת, אם אתה רוצה איכשהו לזכור דברים על משתמש
גם לאחר שנותקו מהשרת שלך
PHP עושה להרשות לך אמצעים לעשות את זה
כי, כפי שראינו בפעם שעברה, PHP יש מספר superglobals,
וsuperglobal הוא, שוב, משתנה גלובלי מיוחד
זה נתן לך על ידי שרת האינטרנט ועל ידי PHP עצמו.
>> אתה לא צריך לעשות שום דבר כדי לשים ערכים בו,
ובין superglobals שראינו עד כה הם מקבלים ולפרסם,
מקום שבו שדות בטופס מועברים באופן אוטומטי עבורך,
כמו גם כמה אחרים שלא ראו עדיין.
בתוך $ _SERVER כמה משתנים מיוחדים הקשורים לשרת עצמו.
מה כתובת ה-IP, מה הפרוטוקול, HTTP או HTTPS השתמש אתה,
מה שיטת בקשה האם השתמש וכדומה, ולכן יש קצת מעניין,
פרטים עסיסיים על השרת, ולמעשה, המשתמש בגם שם.
יש _cookie דולרים, שהמקום שבו הדברים האלה נקראים עוגיות נשמרות.
אנחנו לא לבזבז זמן על עוגיות עצמם היום,
אך אני יודע עכשיו שעוגייה היא רק פיסה קטנה של מידע
ששרת אינטרנט יכול לשתול בדפדפן אינטרנט
וזכרון RAM בתורו או בכונן הקשיח של המחשב שלו
כדי לאחסן מידע אודות משתמש, לדוגמה, שם המשתמש שלהם
כדי שהם לא יצטרכו להקליד אותה בכל פעם שהם נכנסים או איזה
מספר או מזהים שלמשתמש ייחודי
כך שאתה לא צריך להציק להם עם אותם מיני שאלות על
העדפות בעתיד, אבל רוב העניין
עכשיו הוא _session $.
>> superglobal זו, אשר, כמו האחרים, הוא נתן לך באופן אוטומטי על ידי PHP
כשאתה כותב אתרים מבוססי PHP
ניתן לאחסן כל דבר שאתה רוצה, מחרוזות, מספרים שלמים,
נקודות צפות, ערכים, מערכים, אובייקטים,
באמת כל מה שאתה רוצה, וזה מאפשרים לך לאחסן אותו בצורה כזאת
שגם אם המשתמש מבקר אותך עכשיו ולאחר מכן
חוזרת דקות הליכה מעכשיו או 5 דקות מעתה כי
הם לוקחים את הזמן שלהם לפני הלחיצה על קישור כלשהו אחר
PHP יבטיח כי כל מה שהנחית שsuperglobal המושב
לפני דקה או 5 דקות עדיין יהיה שם כשחוזר למשתמש.
ומתחת למכסת מנוע superglobal זה מיושם בדרך של
הדברים האלה נקראים עוגיות, אך לעת עתה, זה רק הפשטה
לפי זה סוג של המקבילה התכנותית של עגלת קניות.
לא משנה מה אתה, המתכנת, תרשום ש
המערך אסוציאטיבי superglobal יהיה שם איזה מספר דקות מאוחר יותר
עד שתמחק אותו או עד שהמשתמש עוזב או שלה דפדפן לגמרי.
>> בואו נסתכל על דוגמה של איך הדבר הזה מיושם בפועל.
בcounter.php בין החתיכות של היום של קוד
יש לנו את השורה הבאה.
בתחילת קובץ זה יש לנו חבורה של הערות כחולות, אשר חסרות עניין לעת עתה.
אבל בקו 13 שיש לנו בשורה חדשה,
session_start, ושבעצם עושה בדיוק מה זה אומר.
זה מתחיל מפגשים.
זה מאפשר לך להשתמש שב_session הגדול superglobal $, וזה פשוט כמו זה.
עכשיו, אם אנו ממשיכים להסתכל על קו 16, בואו ננסה להבין מה דף אינטרנט זה הוא הולך לעשות.
אם (isset (_SESSION ["נגדי"] $) אז קדימה
וחנות במשתנת הדלפק, דלפק קטן,
_SESSION $ ["נגדי"].
זה נראה שהכרזה על משתנה מקומי נקראים נגדי
אשר לתוך זה לשים עותק של כל מה שבתוך superglobal
כינה את המושב במיקום "הנגדי".
אחר, ככל הנראה, נגד משתנה המקומי הקטן הזה, הוא מאותחל ל 0.
>> אבל אז, כמה שורות מאוחר יותר ב26 הודעה שהעותק של החיבור של דלפק,
המפתח שלה, יש לו הוקצה ערך חדש שהוא ערך הפלוס 1 נוכחי.
בקיצור, קובץ זה נראה שעדכון
דלפק שהוא מאוחסן בתוך superglobal המושב
ידי הגדלתו על ידי 1, אבל היא שומרת עותק של הערך הקודם 1
ידי אחסונו במשתנה מקומית נקרא $ דלפק,
ולאחר מכן כאן בואו לראות מה נשאר.
מתברר שזה די הרבה רק HTML.
בתחתית דף זה אנו רואים בקו 37 שאני מבקר באתר זה
מספר נגדי של פעמים, כך שיש כמה תכונות מעניינות כאן.
אחד, ברור שזה משתנה, אבל זה לא יספיק רק כדי לשים
דלפק $ בגוף של HTML שלך, כי כמובן
אם זה רק שם בין PHP HTML שלך הולך להניח שזה רק ה-HTML.
אתה ממש רוצה $ נגדיים שיודפסו על המסך.
>> אבל במקום על ידי הטלה למצב PHP
בקטע הזה של תחביר אנחנו דינמיים יכולים להוסיף ערך כאן
דומה מאוד בהרוח למה שעשינו בפעם שעברה עם
החדרת ערכים למחרוזות.
למעשה, זה רק סימון מקוצר לאומר משהו כמו זה, פשוטו כמשמעו,
הדפסה ($ נגדיים) או אפילו משהו כמו printf (% s, דלפק),
או אפילו, כפי שאתה יכול לראות באינטרנט או בספרי לימוד,
יש פונקציה ב-PHP נקראת הד
שעושה את אותו הדבר, ואת כל אלה הם דרכים גהקו כבר
לומר <? =.
במקרה אחד זה שאתה לא צריך לשים
המילה PHP אחרי סימן השאלה.
זה סימון מקוצר עבור, שוב, מה שראינו כרגע לפני רגע
המהדהד ערך כלשהו.
>> בואו לראות מה התוצאה הסופית של זה בעצם היא.
בואו תעברו עליי לתוך קובץ counter.php,
ונראה שהדוד פשוט עשה טעות על ידי משחק עם הקוד שם.
בואו נלך לתקן כל מה שהוא פשל,
ונראה שיש שגיאה שם, נעלמה, בקו 37.
לדברי ראש הדף זה אני מבקר באתר זה 0 פעמים.
ובכן, בואו נלך קדימה עכשיו, ובחלק העליון של הדפדפן לחץ על
לטעון מחדש סמל, ואני לוחץ על לטעון מחדש,
ועכשיו אני כבר בקרתי באתר הזמן 1, 2, 3, 4, 5, 6, 7, 8.
ואכן, אם נסתכל על המקור של הדף, קוד המקור הממשי משתנה,
ושים לב להעדר המוחלט של PHP, וזה בגלל
קוד PHP מוערך או מתפרש בצד שרת,
ואז זה אומר שהפלט של סקריפט PHP הוא מה שסופו של הדבר נשלח לדפדפן,
אשר במקרה זה הוא קצת HTML גלם וחלק הטקסט גולמי.
מה קורה פה?
>> ובכן, עם מספר קטנות יחסית של שורות קוד שאני יכול לאחסן
בהתמדה במשך כמה שניות, או אם תחכה מספיק זמן,
דקות, שעות, אפילו קצת ערך באופן שגורם HTTP
נראה stateful כאילו אנחנו שמרנו בזיכרון
חיבור זה לשרת, וזה פשוט זכר את מה שאמרתי לו בפעם האחרונה,
אבל במציאות יש חבורה שלמה של מורכבות קורית מתחת למכסת המנוע
מעורב עוגיות המאפשרות PHP כדי לתת לי את האשליה הזאת
של קניות זה עגלה כמו תכונה.
לעת עתה, דוגמא טריוויאלית בו אנחנו רק אחסון מספר שלם,
אבל התכונה שתחזור להיות בעל ערך רב
כאשר אנחנו מתחילים לדבר על פרויקטים יותר מורכבים,
ביניהם בעיה להגדיר 7.
זו הבעיה האחרונה שלך להגדיר בCS50.
אני יודע, זה כל כך עצוב, אבל מה שתמצא הוא שאנחנו הולכים להגיע למסקנה
חלק זה של הסמסטר על ידי מעבר למעשה
מההקשר של C בוודאי בהקשר של PHP
אך תוך שימוש בחלק מאותם יסודות
שדברנו עליו במשך זמן מה.
>> אובייקטיבי עם 7 pset הוא ליישם CS50 אוצר,
שהוא הגרסה של Yahoo או Google אוצר אוצר שלך
או אפילו Etrade.com לפיה יש לך את היכולת
נראה את מחירי המניות לסמלים שניתנו, אבל אפילו יותר מזה
יש לך את היכולת "לקנות" ו" למכור "מניות
הנסחרים בבורסות שונות, כי זה כדף הבית
כאן עולה, שהוא באמת המידה שבה אנו התחלנו
סט הבעיה בשבילך, יש לך טופס התחברות שמבקש שם משתמש וסיסמא.
יש לו כפתור שליחה, אבל לאחר מכן, כפי שסופו של דבר יראה,
שום דבר לא קיים באמת קורה מתחת למכסת המנוע עדיין משום שהיא
נותר לך ליישם את היכולת לרשום משתמשים חדשים,
היכולת לקנות מניות, למכור את המניות,
בעצם לחפש מחירי המניות נוכחיות.
>> ואכן, זה יהיה כמו בעולם אמיתי ככל האפשר בגלל שעשינו
כולל קצת קוד שיאפשר לך עם פונקציה אחת
לשאילתא יאהו אוצר, שהופך את הנתונים להפליא פנויים
מסתכל למעלה למחירי המניות המבוססים על הסמל של המניה או סמל טיקר,
ואתה מקבל בחזרה את מחיר המנייה הנוכחית של היום.
הנתונים שאתה בעצם רואה בpset המסוים הזה יהיו
בערך כמו עולם אמיתי כפי שהוא יכול לקבל כל כך שאתה בעצם התממשקות
עם מניות בעולם אמיתיות, בעולם אמיתי, מחירים
ונראים כמה כסף אתה יכול לעשות אולי
במשך הימים הבאים של משחק עם קבוצת הבעיה שלך.
>> אבל בואו נגדיר את השלב ראשון לכיצד לעצב משהו שבהחלט יותר מסובך
מcounter.php, זה יותר מסובך מכל דוגמאות פרוש IMs עד כה,
ובואו ננסה להציג כמה פרדיגמות כאן שתאפשרו לנו
הן עבור 7 pset ואולי לפרויקט הגמר שלך, אם אתה עושה משהו מבוסס אינטרנט
כדי לשמור על הקוד שלך מאורגן היטב, כדי לשמור על עצמך שפוי,
ולקחת צעד לקראת שיתוף פעולה, בין אם בפרויקט הגמר של CS50
או מעבר אם תמשיך לתכנת משהו בעתיד.
יש פרדיגמה עיצוב כללית זו
במדעי מחשב ובפיתוח תוכנה באופן כללי יותר
מכונה MVC, בקר נוף במודל,
וזה ראשי תיבות מטופשים שמתארים רעיון נחמד מאוד,
אשר היא ההפרדה של היבטים שונים של תכנית,
במיוחד שמירה הנפרד היגיון או הלוגיקה העסקית של אתר
כך שכל דבר שכרוך בדברים כמו
קורא פונקציות ותשאול מסדי נתונים וכמו
קורה לא בין HTML שלך
אלא בקבצים נפרדים, ואכן, יש קובץ אחד זה
בדרך כלל שיש לך בשם הבקר
זה באמת המוח מאחורי המבצע, ואנו רואים דוגמה
מזה ברגע.
>> יש דגם שתכנות קוד
שעושה את הדיבורים למסדי הנתונים שלך, שמדבר אל יאהו אוצר וכדומה,
ואז יש את V בMVC, את הדעות,
כל הדברים שקשור לאסתטיקה, את הקבצים שבעצם מכילים
HTML שלך, אולי CSS שלך וכדומה.
הרעיון כאן, כמו בתמונה זו מרמזת, הוא שהבקר
הוא הקובץ, כפי שמייד תראו וכמו שאתה תראה במיוחד ב7 pset,
שהעולם מדבר אל דרך דפדפני האינטרנט שלהם.
זה הקובץ שמקבל בקר על רשת האינטרנט הציבורי,
אבל הבקר מדבר אל פוטנציאלי מודל,
אשר הוא קבצים אחרים אחד או יותר המכילים קוד הקשורות לנתונים,
קוד הקשורים למסדי נתונים וכדומה, ולאחר מכן הוא מדבר אל
בקר אחד או יותר קבצים אחרים הידועים בהשקפות,
אשר האסתטיקה של דף אינטרנט, תבניות של מיני,
שעשוי לקחת כמה נתונים כקלט, אבל בסופו של היום
ההיגיון רק בתוך נוף צריך להיות העיבוד של נתונים,
iterating מעל לולאה ובעצם לירוק חלק
בצוע מבוסס HTML משהו ממנו או אפילו כמו PDF.
>> מה שיפה בMVC הוא שאתה יכול יש דעות שונות
בהתבסס על סוג ההתקן, המבוסס על הסוג של תבנית קובץ שאתה בעצם
רוצה להראות למשתמש.
בואו נסתכל על כמה דוגמאות בהדרגה יותר מורכבות והמתוכננות היטב
על ידי ההפעלה הראשונה עם גרסה 0 כאן.
תן לי ללכת קדימה ולפתוח בספרייה שלנו היום MVC
קובץ בשם index.php בספרייה 0.
שים לב זה אתר סופר פשוט ומאוד underwhelming
זה סוג של גרסה 0 מתוך דף בית לCS50,
ושים לב כמה יש לנו קישור להרצאות, יש לנו קישור לסילבוס,
ואם תמשיך עם הקישור להודעת הרצאות שהכתובת
למעלה הולך להשתנות לlectures.php.
אם לאחר מכן בצעתי את הקישור להודעת 1 שבוע כי שינויי URL לweek1.php.
נראה שיש מבנה היררכי פשוט למדי כאן.
>> בואו נעיף מבט מהיר מתחת למכסת המנוע בכיצד זה הניח,
ואכן, אם אני מסתכל על index.php זה די פשוט.
למעשה, למרות שאני קראתי לזה קובץ PHP אין קוד תכנות עצמו.
יש הערה שכתבתי כאן ב-PHP רק כדי שהמשתמש לא יראה בסופו את זה.
כמובן, כמו בעבר, כל דבר שהוא בין תגי PHP
מקבל פרש, גם אם זה תגובה, ולפרש את תגובה
משמעות דבר הוא פשוט לזרוק אותו בסופו של היום ולא ממש
לשלוח אותו לדפדפן, כך שהכל כאן הוא רק אסתטיקה.
אם אני פותח באופן דומה lectures.php גם זה רק קובץ מקודד קשה.
זה קורה שייקרא לי. PHP,
אבל זה באמת פשוט. html, וweek1.php, week2.php
דומה הם רק סימון, כך שיש חבורה של חסרונות של העיצוב הזה.
אחד, זה סכום עצום של העתק / דבק.
למרות שדבר היחיד שמשתנה בין קבצים אלה הוא הרשימה לא מסודרת,
את התגים לי, בכל זאת יש לי סוג doc, HTML, בראש,
כותרת, גוף קרוב, קרוב HTML ועוד
בכל קובץ יחיד, מה שאומר שאם אי פעם ארצה לבנות מחדש
דף זה אינטרנט או restylize זה אני צריך ללכת ולשנות
כל הקבצים הללו באופן ידני או עם כמה מסיבי חיפוש והחלפה.
>> בואו ניקח צעד לקראת עיצוב חכם יותר, כבר חשב בגרסה 1 כאן
לפי לפי לקרוא לי שיש לנו כלל, כך שתוכל לשחק יחד עם
אלה נינוחים יותר בהתראת הבית שיש לנו כאן
סיכום של קבצים בגרסה 1 של האתר הזה,
ונראה שאני כבר לקחתי על עצמי את הגורם
קצת קוד משותף, header.php וfooter.php.
ובכן, בואו נסתכל על מה שבפנים וכמה כאלה.
Header.php נראה מוכר,
שלא להבחין בו זה יתנתק?
מייד אחרי הקו 19, אז זה כל מה שהיה מקובל
מindex.php הקבצים, lectures.php,
week1 וweek2.php מהדוגמא הקודמת.
מה שעשיתי היה להעתיק וכל חתך שהיה משותף לכל הקבצים האלה,
לשים אותו בקובץ כותרת נפרדת, וכך גם בfooter.php
אני לא להחיל את אותו עיקרון לפיו קווים המעניינים רק
בfooter.php הוא שני אלה גוף, קרוב והקרוב HTML.
>> אבל מה זה אומר שעכשיו הוא בגרסה החדשה
מהודעת index.php כמה פשוט זה יכול להגיע.
אמנם, קצת סתום יותר מחפשים, קצת פחות אינטואיטיבית
לעקוב עליון לתחתונים, אבל אלוהים שלי, כל זה יתירות שכבר אינו.
אנו דורשים שימוש בפונקצית PHP שנקראה ממש דורשים למעלה,
שמזכיר מאוד, כזכור, של C # כולל מנגנון של.
אנו דורשים header.php בחלק העליון.
אנו דורשים footer.php בתחתית, והדבר היחיד שהוא שונה
או מיוחד בקובץ זה הוא התוכן שנועד להיות ייחודיים לה.
אם אז אני הולך אליו, אומר, lectures.php, אותו העיקרון חל עליה.
שוב, כמה הערות למעלה, אבל אז אני דורש, דורשות כותרת תחתונות,
ובין בזה רק את התוכן שהשתנה למעשה.
ואם נתבונן בשבוע 1 ושבוע 2 היינו רואה
כי אותו העיקרון שיושם שם.
ובכן, אנחנו לא עשינו די לשם.
>> בואו נסתכל על הגרסה 2, שבו יש מבנה דומה,
אבל שם לב עכשיו אני כבר הצגתי משהו אחר.
בקו 10 שהצגתי helpers.php,
כנראה שמכיל פונקציות עזר.
פונקצית עזר היא בדרך כלל פונקציה קצרה יחסית
שאתה כותב כדי לעזור לך במקומות שונים,
ובואו נראים מה יש בפנים של helpers.php.
במקרה זה, זה נראה כאילו יש לו 2 פונקציות.
זוכר מהיום השני עם דוגמא הקובייה שלנו
באפשרותך להגדיר פונקציות משלך ב-PHP, ומה שעשיתי לי כרגע היא
פונקציות שהוגדרה נקראות לדקלם תחתון ו לדקלם כותרת,
הראשון שלוקח פרמטר בשם נתונים,
ערך ברירת מחדל שלו הוא מערך ריק, כפי שהוצע שם,
ואנחנו באמת יכולים לכתוב את זה עוד יותר בתמציתיות בגרסה האחרונה של PHP
באומרו סוגר מרובע פתוח, סגור סוגריים מרובעים.
כלומר, מערך ריק בגודל 0 אבל בכל זאת מערך.
>> פונקצית תמצית זו היא קטן ומיוחדת שב
מה שהיא עושה הוא שלוקח כטענתו מערך אסוציאטיבי
שיש 0 או יותר זוגות ערך מפתח, ואם יש לך מפתח של foo
וערך של בר פונקצית התמצית
יוצר מצב שבו עכשיו, כמו בשורת 11,
יש לך משתנה מקומי בשם foo $ שהערך שלו הוא בר.
ואם היה לך יותר מפתחות וערכים במערך הנתונים,
דומה היינו שהם יחולצו בהיקף המקומי
או שם חלל כך שfooter.php ו
אותו הרעיון כאן למטה, כך שheader.php
יש גישה למשתנים אלו.
למעשה, תן לי לפתוח שוב header.php
ולמשוך תשומת לב לעכשיו מה שזה נראה בגרסה זו.
>> במקום קשה קידוד CS50 ככותרת לכל דף בודד
שם לב שהדינאמיות אפשרית עכשיו.
בשורת 5 אני מהדהד משתנה כותרת,
אבל קודם אני מעביר שמשתנה הכותרת לפונקציה שנקראת htmlspecialchars.
שם מטופשים לפונקציה, כל עוד זה לא יהיה, אבל זה באמת מה שהיא אומרת.
זה מבטיח כי כל תווים מיוחדים
במחרוזת שכבר עברה בנמלטו כראוי HTML.
זו בעצם דרך של הימנעות ממשהו שנקראת תקיפת Script בין אתרים
לפי מישהו יכול בזדון או בטעות
להזריק HTML משלהם לאתר שלך
על ידי הדבקה בצורה כלשהי, למשל,
משהו שאתה לא ממש מצפה, במיוחד קוד JavaScript,
כפי שאנו נדבר על בשבוע או פעם בשבועות.
>> זה header.php עכשיו, זה נוף
במובן זה שהיא מאפשרת לך להציג את התוכן של חלק ערכת נתונים מבחינה אסתטית.
אבל באופן ספציפי יותר, זה תבנית.
זה סוג של תכנית עכשיו של מה שאנחנו רוצים הכותרת של כל דף להיראות כמו,
אבל יש בו דינמיות בכי אנחנו רוצים את התואר כדי להיות מוכנסים באופן דינמי
בהתבסס על משתנה הכותרת
שהוצא כאשר אנו נקראים, שוב,
פונקצית הכותרת לדקלם.
עכשיו, אם הסתכלנו תחתון לדקלם, יש בעצם לא הרבה להשתמש בזה כרגע
כי בfooter.php אין הדינמיות שהיא.
יכול להיות שיש, אבל ברגע זה רשימה מקודדת קשה של 2 תגים,
אך אותו הרעיון חל, כך שלמעשה מסביר מדוע
לא תבזבז את הזמן שלנו שכותרת לדקלם ולדקלם פונקציה תחתונה?
תן לי ללכת במקום עכשיו לגרסה 3,
ובגרסת 3 בעוזרים החלטתי לפשט את זה עוד יותר.
>> תן לי להבהיר פונקציה אחת.
תן לי אותו לקחת את טיעון נוסף, הפעם בשם תבנית,
שאמור להיות השם של תבנית,
ואז אני יהיה לשרשר בתעוזה. php לערכו של משתנה,
ולאחר מכן, אם הוא קיים, bar.php foo.php או header.php וfooter.php,
אז אני הולך קדימה ולחלץ את המידע משתנה
ולאחר מכן דורש באותו נתיב.
במילים אחרות, כדי להשתמש בזה עכשיו, אם אני פותח את index.php
שם לב שאני לא קורא כותרת לדקלם יותר.
אני פשוט קורא לדקלם, אבל אני עובר בשווי מצוטט של הכותרת
כדי להבהיר באיזו תבנית אני בעצם רוצה לטעון.
>> אז כאן שם לב למה שאני עושה.
אני מעביר באופן דינמי מפתח בכותרת,
ערך של CS50, וגם זה, כפי שראינו קודם,
יכול להתבצע יותר תמציתי בגרסה האחרונה של PHP
איפה אני יכול להחליף את פונקצית המערך עם סוגריים מרובעים,
אני מציע שהוא אפילו יותר קריא ובוודאי
קצת יותר קל להקלדה.
וכמובן, עם קריאת הכותרת התחתונה לדקלם בתחתית,
אנו לא טורחים עוברים בטיעון שני בכלל, שום מערך אסוציאטיבי,
כי יש בתוך דינמיקה של דבר כי תחתון.
זה סתם כמה תגים HTML לקרובים.
טובים, אנחנו נוקטים בצעדים לכיוון באמת לנקות את הדברים כאן,
אבל בואו תפתחו לי 2 דוגמאות אחרונות.
זה אחד, מספר 4, הודעה בכך שעשיתי החלטה מודעת עכשיו
כדי לשפר את הדוגמא הקודמת בסופו של דבר להשתמש בחלק ההיררכיה לקבצים שלי.
>> שימו לב שבסיכום הזה, בזה קורא לי, אני כבר הצגתי
כולל ספרייה וספריית תבניות
תוכן שהולך להיות הדברים שאני רוצה לכלול
ואת התבניות שברצוני להבהיר, בהתאמה.
זה באמת להיות אנאלי ומנסה לשמור על ההסדר,
לשמור קבצים הקשורים יחד, אבל התוצאה הסופית
הוא שעכשיו יש לנו הגדרה מעט מסודרת יותר, אבל אנחנו צריכים לזכור עכשיו
ב, למשל, index.php
כאשר אנו דורשים helpers.php הקובץ
יש לנו עכשיו לחייב אותה דרך כולל / helpers.php
ולא סתם אומר helpers.php כי עכשיו זה ממש בתת ספרייה.
עכשיו, כמו בצד, תוכל לראות בדוגמות הללו ולכמה אחרים
פונקציות כמו דורש, דורשות פעם אחת.
יש למעשה פונקציה עוצמה נקראת כוללת, וכולם יש התנהגות מעט שונה.
הנה אני אומר דורש פעם אחת כדי להפוך סופר ברור שאני רוצה רק את אלה
עוזרים נכללו בפרויקט שלי פעם אחת.
אבל אם אני נזהר ואם למעשה אני חושב בהיגיון שלי כראוי
זה צריך להספיק מדי לומר פשוט דורש למעלה
כל עוד אני בעצמי לא דורש בטעות באותו קובץ במקום אחר.
למעשה, זו דרך מעט יותר יעיל מלעשות דברים ולאחר מכן באמצעות
דורש פעם אחת, ולכן אני גוזר אותו רק כדי לדרוש.
>> בואו ניקח צעד אחד קדימה.
הדוגמא אחרונה זה עכשיו, גרסה 5, יש היררכית תיקייה אפילו נקיה יותר.
שים לב מה שעשיתי כאן לקריאתי בגרסה סופית זה
עכשיו יש לי ספריית ה-HTML שלי, שהיה לי כל הזמן הזה,
אבל בפנים משם כרגע הוא רק, lectures.php index.php,
week1.php וweek2.php.
ספרייה כוללת כרגע מתגוררת לצדה של ספריית ה-HTML,
כך באותה הרמה כמו אח, כמו שאומרים.
אז עושה את תיקיית התבניות.
Takeaway המפתח כאן הוא שהצגתי קצת יותר מבנה,
אבל המאפיין העיקרי כרגע הוא שרק את הקבצים
שצריך להיות אינטרנט נגיש, בפומבי מיעון
על ידי כתובת אתר ברשת האינטרנט הציבורי הם בספריית ה-HTML שלי.
>> קבצים בינתיים, אחרים, helpers.php, footer.php,
header.php, שניתן לטעון שאולי יותר רגישים,
אולי עוזרים למעשה יש כמה שמות משתמש וסיסמות או חלק רוחניים
הרכוש שלי, מתפקד אני באמת לא רוצה שהעולם ראה, גם אם בטעות.
זה תרגול טוב להישאר מחוץ לספרייה הציבורית HTML
כל קבצים שאינם זקוקים לעצמם להיות ציבוריים.
כל מה שצריך לעשות במקרה זה כאשר מסתכל, למשל,
קובץ index.php של ספריית ה-HTML,
שם לב אנחנו רק צריכים להיות קצת יותר זהירים בעת צורך
או לדרוש את הקובץ הזה פעם אחת.
אני צריך לעשות קודם .. ללכת לספריית האב,
אז / אל כולל / helpers.php
לצלול בחזרה למטה כדי לקבל את הקובץ שאכפת לי.
>> כל שאלות אז על MVC
או גלגול פשוט יחסית זה מזה?
ותנו לי לעשות ברור שהתמקדנו לא מעט על
V כאן, בדעות ובפקטורינג מתוך התבניות הללו.
אנחנו לא באמת כבר נבדלנו מM C עדיין.
למעשה, אין באמת שום M כאן, ואפילו C שלנו,
הבקר, לא ממש עושה כל כך הרבה, אבל אתה תקבל הרבה יותר
מכיר את שניהם 2 מכתבים ההם MVC,
או לייתר דיוק, אתה תקבל הרבה יותר מוכר עם C
בMVC לקבוצת הבעיה 7, כך שיש עוד הרבה מזה באופק.
שאלות?
בפועל יש כאן אף אחד.
>> אוקיי, בואו נעבור עתה לנושא השני והאחרון להיום.
זה הוא המבוא של מסד נתונים.
עד לנקודה זו שהיינו לנו כמה דרכים לאחסון נתונים.
אנחנו השתמשנו במשתנים.
חזור בקובץ C שלנו, קלט / פלט דיון התחלנו שימוש בקובצי טקסט
ושימוש בקבצים כמו fprintf, ואז גם התחילו
מדבר על CSV קבצים קצת, ערכים מופרדים בפסיקים,
אז כל אלה אפשרו לנו לקבל נתונים מאוחסנים
או שאינם עקבי או עקבי.
אבל אפילו קובצי CSV הם לא ממש תורמים לחיפוש
והוספה והמחיקה.
זה באמת רק קובץ טקסט מטופש מופרד על ידי פסיקים
שורה אחרת שורה אחרת שורה אחרת שורה, כך שאם אתה רוצה
לחפש קובץ שהכי הטוב שאתה יכול לעשות הוא באמת חיפוש ליניארי.
אתה צריך להתחיל בחלק העליון של הקובץ, לקרוא את כל העניין ב,
ולהסתכל על הערך של חלק מעניין.
אם ברצונך להוסיף לזה שאתה צריך לעשות את אותו דבר,
iterating מעליו ומכניס במקום מסוים,
ולמעשה, מה שאתה צריך לעשות את כל ההיגיון לחפש את עצמך.
>> אתה לא יכול לעשות דפוס חכם התואמים בקובץ CSV אלא אם אתה בעצמך לכתוב את הקוד.
אתה לא יכול לעשות סינון של קובץ CSV
אלא אם כן אתה בעצמך לכתוב את הקוד.
האם לא יהיה זה נחמד אם מישהו אחר לשים את כל המאמץ
למעשה להפוך את החיפוש לקל והחדרה קלה
ומחיקה ועדכון וכן הלאה?
זה בדיוק מה שמסד נתונים הוא.
SQL, שפת שאילתות מובנית, הוא עדיין שפה אחרת
שאנו מציגים כאן היום, אבל גם זה די נגיש,
ומה שאנחנו באמת הולכים לעשות היא פשוט לתלוש מזה חלק הבולט ביותר
מאפיינים כך שעבור 7 pset, ואם אתה עושה משהו מבוסס אינטרנט,
פרויקט הגמר שלך, יש לך את היכולת להביע את עצמך
במונחים של שאילתות בנתונים.
יש לך את היכולת לאחסן מעט או הרבה נתונים
בהרבה יותר מובנה דרך שתוביל, בסופו של היום
להקל על חייך, כי עם SQL אתה יכול להביע את עצמך
הרבה יותר נכון, הרבה יותר באופן שיטתי על מנת
תקבל בחזרה חלק קבוצת המשנה של נתונים מקורפוס גדול יותר של נתונים.
>> אתה יכול לחשוב על מסד נתונים, במקרה זה, מסד נתוני SQL, ממש כמו Excel
או במדבר שבו זה גיליון אלקטרוני,
או אולי גיליונות אלקטרוניים מרובים, וגיליון אלקטרוני, כמובן,
יש שורות ועמודות, וזה בגלל
מסדי נתונים של SQL הם יחסיים, יחסיים, במובן
שהם מאחסנים נתונים במונחים של טבלאות אלה,
שורות ועמודות.
הם גבוהים יותר ביצועים מאשר משהו כמו גיליון אלקטרוני,
וגיליון אלקטרוני נועד לשימושו של אדם.
אתר נועד לשימוש על ידי מתכנת
כתיבת קוד נגד זה, אז הגלגול של מסד נתונים
הולך להיות שורת פקודה.
>> האחד מסדי הנתונים היחסיים הפופולריים ביותר שם הוא, שוב, MySQL,
אשר להפליא חופשי, ביצועים גבוהים מאוד, וזה מה
פייסבוק משמש בשלב מוקדם מאוד ובמידה מסוימת גם היום
כדי לאחסן כמות גדולה של נתוניה, ואנו רואים ברגע
ששימוש בפקודות פשוטות יחסית
אנחנו יכולים לבחור נתונים, נתונים להוסיף, לעדכן נתונים,
למחוק נתונים וכדומה, אבל לשמחתי, יש ממשק ידידותי יותר למשתמש
מסתם להקליד בשורה שחורה ולבן כאן.
אנו נשתמש ל7 pset ומעבר כלי חינמי בשם phpMyAdmin.
השם הוא מקרי בהחלט.
הכלי קורה שייושם ב-PHP,
אבל זה יסודו לא רלוונטי.
מה שימושי על phpMyAdmin הוא שזה שירות מבוסס אינטרנט.
אנחנו כבר מותקנים מראש במכשיר זה בשבילך,
ועם זה אתה יכול ליצור טבלאות במסד נתונים,
באפשרותך להכניס נתונים, מחיקת נתונים, ובאופן כללי רואה
הנתונים שלך בסביבה די ידידותית למשתמש.
המשתמשים שלך לא הולכים להשתמש phpMyAdmin.
>> זה באמת רק כלי ניהולי או של יזם
עם שכדי לראות ולרחרח קצת את הנתונים שלך ולהבין איך לבנות אותו,
ממש כמו שאתה עצמך יכול להשתמש ב-Excel, או במדבר,
אבל זה הולך להיות דרך מצוינת להמחיש מה קורה מתחת למכסת המנוע
כך שתוכל להתמקד בבעיה המעניינת פתרון ולא כל כך הרבה
על הפקודות המסתוריות.
בואו נסתכל על דוגמה של נתונים שעשויים להיות מאוחסנים tabularly
במסדי נתונים יחסיים.
הנה דוגמה אחת כזו.
עכשיו, למרבה הצער, phpMyAdmin גם טעה בצד הדרך לזרוק מילים רבות
וגרפיקה עליך, אבל אם אתה לחדד רק על
עמודה מזהה, שם משתמש העמודה, ועמודת החשיש,
זה הוא למעשה גיליון אלקטרוני, אבל זה קורה להיות קטע
בבתוך טבלה של המכשיר
שימוש בקובץ שאנו מספקים לך בסט הבעיה 7.
>> בפרט, אנחנו נותנים לך קובץ שמייצג
השולחן של משתמש, כך שגיליון אלקטרוני המכיל משתמשים עם 3 עמודות,
אחד מהם הוא זיהוי ייחודי החל משעת 1 ומוגדל שלאחר מכן.
העמודה השנייה היא שם משתמש, ואלו מכם שעשו האקר,
מהדורת ההאקר לpset 2, שתזהה כמה מן שמות משתמש אלה לפחות.
בצד ימין הן סיסמות, אבל הם לא בסיסמות מילוליות.
הם מן hashes, כך מתברר
שאחסון סיסמות במסד נתונים הוא רעיון ממש רע.
כולכם בוודאי קראו בשלב מסוים של אתר אינטרנט כלשהו
או מסד נתונים מסוימים של חברה שנפגע, ואז אתה צריך
לשנות את הסיסמה שלך, אתה צריך לקבל החזרים על דברים
בגלל איזה בחור רע ממש פרץ לחשבון שלך כתוצאה מכך.
>> אחסון סיסמות בטקסט רגיל, לא מוצפן במסד נתונים
הוא לגמרי טיפש, ובכל זאת זה מאוד משעשע
אז לקרוא על כמה חברות ידועות מאוד
לפעמים בעיתונות מסדי נתונים שנמצאים בסכנה,
וחלק שאינו מצחיק, אלא העובדה שמאגרי המידע מכילים לא מוצפנת
סיסמות הן מגוחכות, כי פשוטו כמשמעו, עם שורה אחת של קוד
אתה יכול להגן מפני איום מסוים, וזה מה שעשינו כאן.
אפילו לגרסתנו לזייף קצת CS50 האוצר
אנחנו מצפינים את סיסמות רק למען סדר טוב, והעובדה ש
את כל הסיסמות האלה להתחיל עם 1 $ הם רק מוסכמה.
זה רק אומר שהם באמת מוצפנים או מרוסקים,
שזה כמו פונקצית הצפנה לכיוון אחד
לפיו אתה לא יכול להפוך את השפעותיו עם משהו שנקרא MD5.
>> העובדה כי 50 הן אחרי זה אומרת שערך מלח
של 50 שמשו לליבון כל הסיסמות האלה, פרט לאחד.
שלי, כמובן, כפי שאתה יכול לראות שם, חה,
היה משתמש במלח שונה, אז אלו מכם שקבלו מעד מעט
אולי בהאקר 2, שעשוי היה להיות התוצאה שלנו נתקל בשימוש
חשיש שונה מהאחרים, כי הסיסמה שלי היא בעצם אותה
כמשתמש אחר שם למעלה.
למעשה, אם אתה כבר מחכה כל השבועות האלה כדי לגלות
מה הסיסמות האלה היו כאן היו את הסיסמות שהותקפו
לפצח במהדורת ההאקר של קבוצת הבעיה 2, כך שאף אחד יותר מדי מסובכת.
למעשה, Malan של הייתה זהה jharvard,
אבל אם אחזור הן נראה אחר.
>> התמקד בjharvard בהארגמן כי הם היו מומלחים בצורה שונה.
האלגוריתם היה מוטרד באופן ש
חשיש ערך, הערך המוצפן נראה קצת שונה
מכיוון שהתשומות היו קצת שונות, אבל הסיסמה מתחת למכסת המנוע
היה עדיין בסופו בצבע ארגמן.
עכשיו, למי אכפת על זה?
ובכן, אנו מספקים לך את המשתמשים לדוגמא, את שמות המשתמש לדוגמא
וhashes של הסיסמות שלהם, כך שלמעשה יש לכם חלק
לקוחות לCS50 אוצר כאשר אתה ראשון לקבל את הקרקע עם הקוד שלך.
תצטרך ליישם יותר שולחנות בפנים של MySQL, בתוך מסד הנתונים.
תצטרך ליצור יותר גיליונות אלקטרוניים, ביעילות, אבל החליטו לתת לך את זה
כדי להתחיל, ותראה שמפרט סט הבעיה
הולך אותך בתהליך של יבוא טבלה זו
וגם מסביר מה שחלק ממאפייניו,
ואתה גם תראה שאנו מספקים לך את הקוד
כדי להתמודד עם הגיבוב או ההצפנה של סיסמות אלה,
אז אתה לא צריך לדאוג יותר מדי על מה MD5 או כמו בעצם כל העניין.
>> אז, SQL, שפת שאילתות מובנית.
זה, בפשטות, בשפה שאנחנו עומדים להתחיל להשתמש ב7 pset
ואולי מעבר ללבקש נתונים ממסדים נתונים מסוימים.
הנתונים, שוב, מאוחסן tabularly בטבלאות אלה יחסיים, עמודות ושורות,
אבל בעזרת כמה תחביר פשוט יחסית כמו מחיקה,
להוסיף, לעדכן ובחר באפשרותנו לעשות בדיוק את זה.
אנחנו יכולים למחוק ממאגר המידע, להוסיף,
עדכון נתונים, כמו גם נבחר, שהוא, לאחזר נתונים מבסיס הנתונים.
איך ללכת על עושה את זה?
תן לי ללכת קדימה אל המכשיר.
תן לי להכין את http://localhost,
ששוב, הוא המכשיר המקומי עצם.
זה כינוי ברירת המחדל שלו.
ותן לי ללכת ל/ phpmyadmin.
זה קורה להיות כתובת אתר מיוחדת שהמכשיר מוגדר מראש כדי להבין
שדוחק בי באופן מיידי לשם משתמש וסיסמא.
>> כרגיל, אני הולך הקלד jharvard וארגמן,
אבל מבין שזה חשבון המנהל במחשב.
זה רק צירוף מקרים שיש גם jharvard נרשם לCS50 אוצר.
Jharvard, ארגמן, זן נותן לי את ממשק המשתמש שראו
צצה לפני הרגע, וזה קצת מוחץ בהתחלה,
אבל היה סמוך ובטוח, שאתה אף פעם לא הולך צריך ללחוץ רוב הקישורים בכלי זה.
אתה תקבל בסופו של דבר באמצעות קבוצה קטנה שהן סופר מועילים,
הראשון שבם הוא מאגרי מידע כאן.
אם אני עולה למאגרי מידע, שם לב שאני אתבקש ליצור מסד נתונים.
זה כמו יצירת קובץ Excel חדש, בצורה יעילה.
אני הולך קדימה, קורא להרצאה זו, ואני רק הולך להתעלם מהשדה שם, האיסוף.
זה קשור לייצוג נתונים בו,
ואני הולך ליצור לחץ על, ועכשיו שמתי לב שאני מרפה מליצור
בצד השמאלי שבו אומר שאין לי מסדי נתונים
אני צריך לראות את הנתונים בקרוב הרצאה.
>> אם אני עכשיו לוחץ בצד השמאל, באתר ההרצאה,
מבחין את הכרטיסיות שלי לשנות קצת.
יש לי מבנה, SQL, יצוא, יבוא ועוד כמה דברים אחרים.
מבנה הוא די ריק.
אין שולחנות נמצאים במסד נתונים, כפי שהוא אומר כאן,
אז בואו ליצור טבלה, ובואו נלך קדימה וליצור טבלה
כמו סטודנטים, וכמה טורינו רוצים?
בואו בואו נשמור את זה פשוט, ושיא לכל תלמיד
מספר תעודת זהות, שם, וכתובת דואר אלקטרוני.
>> אנחנו נשמור אותו פשוט כמו זה, אז 3 עמודות, ללכת.
הצורה שאתה רואה כאן היא עכשיו קצת מבולגנת ומבלבל,
אבל אנחנו פשוט צריכים לעבור את זה שורה אחרת שורה, אז בוא באמת מהירות של לתת
הטור הראשון במאגר זה שם זיהוי לזיהוי הייחודי.
זה יהיה מספר שלם. אני בעצם יכול להתעלם מאורך וערכים.
Int הולך להיות 32 ביטים לא משנים מה אתה מקליד שם, אז בוא תשאירו את זה ריק.
ערך ברירת מחדל, אני יכול לעשות את זה ריק, כהגדרתו.
אני הולך לעזוב את זה לבד. בואו לא ידאג לערכי ברירת מחדל.
בואו לכאן כדי לגלול, את התכונות הנכונות.
זה מעניין.
בואו נלך קדימה ושרירותי למדי לומר כי תעודות חייבות להיות חתומות.
בואו לא תבזבזו את כל מספרים שליליים.
>> בואו נלך 0-4000000000, פחות או יותר,
ואז בואו לא לגעת באף אחד מהתחומים הללו עדיין שם,
אבל אז תן לי להקליד בשם כאן למטה,
ולאחר מכן השני היה דואר אלקטרוני, ולכן המלכוד הוא דוא"ל
ושם, כמובן לא שלם, אז בואו לשנות תנאים אלו לשדה אחר.
מתברר varchar, משתנה האורך char,
כמו מייתר במסד נתוני SQL
אבל אורך משתנה, ואתה באמת צריכים להגיד את זה מראש
אורך מקסימאלי של המחרוזת, ולכן אני הולך באופן שרירותי למדי
לפי סוג הכנס 255 תווים.
אני לגמרי יכול להגיד 32. אני יכול לומר 1000.
סוג של צורך להחליט בעצמך על סמך מאפיינים הדמוגרפיים שלך מה הוא
שמו של הסטודנט הארוך וללכת עם זה מספר או קצת יותר גדול,
אבל מה שיפה הוא varchar זה לא הולך לבזבז
255 בתים על שמו של כל תלמיד.
אם זה דוד זה לא הולך להשתמש ב255 בתים שלמים,
אבל זה גבול העליון, אז אני אלך עם 255 רק למוסכמות,
אבל אנחנו יכולים להתווכח שזה יהיה קצת ערך נמוך יותר, ועל כתובת הדוא"ל
רק כדי להיות עקבי 255, אבל שוב, אנחנו יכולים לקבל את אותו דיון.
אבל אני הולך לעשות דבר אחד אחר כאן בצד הימני.
>> מה חזק על מסד נתונים הוא שהוא יכול לעשות הרבה הרמה כבדה
או עבודה מורכבת בשבילך.
בפרט, אני באמת לא אכפת לי מה מספרי תעודות הזהות של התלמיד שלי הם.
זה פשוט נועד להיות מזהה ייחודי באתר
אז יש לי ייצוג תמציתי 32-bit של אותו הסטודנט
כך שיש לי איזו דרך לזהות אותם באופן ייחודי
פן יהיה 2 דווידס, למשל, בכיתה.
למעשה, אני הולך לבדוק את התיבה הזו AI, תוספת אוטומטית,
כך שמסד הנתונים, MySQL, דמוי
מה זהותו של כל תלמיד חדש שנוסף הוא הולך להיות.
אני אפילו לא צריך לדאוג לזה בקוד שלי,
ואני גם הולך לבחור משהו בתפריט המדד.
המדד נפתח כאן עיקרי, ייחודי,
מדד וטקסט מלא.
אתה אולי יכול לנחש מה כמה הדברים האלה הם,
אבל מסתבר במסדי נתונים יחסיים
אתה מתכנת או מנהל מסד הנתונים להגיע למנע
לתת רמזים למסד הנתונים על מה שדות
בטבלה הם מיוחד קטנה.
>> לדוגמה, במקרה הזה אני מתכוון לומר שמזהה
הולך להיות מדד עיקרי, הידוע כמפתח ראשי.
מה זה אומר על פי הגדרה הוא מזהה שמעתה
יהיה לזהות באופן ייחודי לתלמידים בלוח זה.
אף תלמיד לא יהיה את אותו תעודת זהות, כי אני הטלת מגבלה זו או מדד זה.
יתר על כן, מה זה הולך לעשות בשבילי הוא שזה הולך לספר
שמזהה MySQL הוא מיוחד.
אכפת לי בעיקר על זהות, אז קדימה, לעשות קסמיו של מבנה הנתונים המפואר שלך,
לבנות איזה סוג של עץ.
בדרך כלל זה משהו שנקרא B-העץ, שאנו לא מסתכלים לפני שבועות,
אבל זה עוד מבנה נתונים כזה דומה ברוח אל העצים בינאריים
ומנסה שאנו מתבוננים בו, אבל זה הולך לומר
למסד נתוני תחום זה הוא כה חשוב, שאני כנראה
רוצה להיות מסוגל לחפש עליו, קדימה ולבנות איזה מפואר
מבנה נתונים בזיכרון כדי לזרז את החיפושים, כך שאופן אידיאלי
הם זמן קבוע או לפחות הכי קרוב לזה ככל האפשר
כך שזה לא יתפתח לחיפוש ליניארי, שהוא לא הולך להיות
ביצוע הגבוה ביותר גישה.
בניגוד לכך, כתובת דואר אלקטרוני יכולה להיות מפתח ראשי.
>> בתאוריה, את כתובת הדוא"ל של כל אחד היא ייחודית, אלא אם אתה משתף קצת חשבון,
אבל זה בדרך כלל לא טוב להשתמש במשהו כמו מחרוזת
כמפתח ראשי, כי אם מטרתו בחיים היא כדי לזהות
שורות בטבלה שלך אין שום סיבה להשתמש ב255 בתים מקסימאליים
כדי לזהות מישהו אם אתה יכול לברוח עם רק 4 בתים
או int 32-bit.
באופן כללי, מפתח ראשי צריך להיות קצר ותמציתי
באופן אידיאלי, ומשהו כמו שלם או int גדול, אשר קורה להיות 64 סיביות.
אבל כתובת הדוא"ל צריכה להיות ייחודית, והאחת התכונות של מסד נתונים מדי
הוא לאכוף ייחוד בשבילי.
על ידי בחירה ייחודית כאן לצד כתובת הדוא"ל, למרות שההודעה עצם
הוא גלל את המסך, אני אומר למסד הנתונים
לא סומך עליי.
אל תנתנו לי להכניס לתוך מסד הנתונים
אותה כתובת דוא"ל פעמים, גם אם אני אידיוט ואני לא
טוב מאוד עם IFS וIFS אחר וקוד PHP בפועל
ואני נתתי בטעות למשתמש להירשם בכתובת הדוא"ל קיימת
מסד הנתונים הוא רמה נוספת של הגנה לתקינות
כדי לוודא שכתובת הדוא"ל שכפולה לא מסתיימת בטבלה.
>> עכשיו, לעומת זאת, לשם אתה כנראה לא רוצה שזה ייחודי
כי אז לעולם לא יהיה 2 דווידס או 2 Smiths מייק, למשל,
במסד הנתונים שלך, כך שאף אחד פשוט יעזבו לבד.
אני הולך קדימה, ולחץ על שמירה למטה מימין,
והכל נראה טוב, אבל שם לב עד כאן
זה חלק שלעכשיו אנחנו לא מבלים יותר מדי זמן על
כי התחביר הוא קומפלקס קטן, ואנחנו לא צריכים ליצור טבלאות
כל כך קרובות, אבל SQL עצמו הוא שפה,
התחביר שהוא כאן, כי אני כבר מסומן.
מה phpMyAdmin באמת עושה זה יוצר GUI מבוסס אינטרנט עבורך
עם שבו אתה יכול לחסוך זמן ולא צורך להקליד ידני את
שאילתא SQL די ארוכה כזה.
>> במילים אחרות, אם אתה רוצה ליצור באופן ידני בטבלה זו,
גם בשחור ולבן שפקודה או אפילו בphpMyAdmin
באמצעות כרטיסייה אחרת זה, כרטיסיית SQL הזה שבו אתה יכול להקליד כל שאילתא SQL
אתה רוצה, בכנות, זה היה לוקח לי דקה
למעשה לזכור כל התחביר, וגם אז אני כנראה אצטרך
עשה כמה שגיאות הקלדה, לכן כלי זה שימושי לדברים כאלה, וזה גם מאלף.
אתה יכול להתחיל להסיק מה הוא התחביר
רק על ידי הצבע היפה קידוד phpMyAdmin שהוא מוסיף
לנוחיות החזותית שלנו.
אבל עכשיו בואו נעשה את זה במקום.
תן לי ללכת ללשונית Insert בעליון, ונתנו לי ללכת קדימה ולהכניס לדוגמה
זיהוי של, יניח, ממש לא אכפת לי.
זה הולך לתוספת אוטומטית. אני מתכוון לתת לעסקת מסד הנתונים עם זה.
אבל אני אהיה בדוד, והדוא"ל שלי צריך להיות malan@harvard.edu.
>> בואו נמשיך כאן ולשים מייק סמית כאחד אחרת.
אני אתן לעצמי את שם משפחה, כמו גם,
ונדאג שהוא יהיה smith@example.com,
ואז מה אני עושה עכשיו?
ובכן, זה נראה כמו ללכת הכפתור ללחוץ, וזהו.
שימו לב ב2 השורות העליונות שהוכנסו.
זה שאילתא SQL בפועל.
זה כלי phpMyAdmin להורג בשבילי,
אבל תוצאה הסופית, הודעה, אם אני עכשיו הולך לכרטיסיית העיון,
היא לראות 2 שורות בטבלה זו, מזכירה מאוד מבחינה אסתטית
בטבלה שראינו קודם לכן עבור המשתמשים שלנו מ 7 pset,
אחד מהם הוא הדוד מלאן, שאחד מהם כרגע הוא מייק סמית.
אבל רק שיהיה ברור, אני לא צריך להשתמש phpMyAdmin,
ואכן, אתה הולך בקרוב לכתוב קוד עבור 7 pset
הממכן את התהליך של הוספת שורות, מחיקת שורות, עדכון שורות וכדומה,
אז תן לי במקום ללכת ללשונית SQL כאן
וסוג ב* בחר מסטודנטים בי
דוא"ל = "malan@harvard.edu."
>> במילים אחרות יניח עכשיו שיש לך
איזה טופס HTML, והמשתמש מקליד את כתובת הדוא"ל שלהם, בין שדות אחרים,
והמטרה עכשיו היא ב-PHP בקוד העורפי
למעשה לבדוק פרטים האחרים של אותו המשתמש.
מהו שמך המלא? מהו מספר תעודת הזהות שלך?
אתה יכול לכתוב שאילתא SQL כך, בחר * מתלמידים
שם דוא"ל = "malan@harvard.edu."
ואם לאחר מכן לחץ על ללכת, שם לב שאני צריך, ואכן אני, אחזור רק לשורה אחת.
מייק מושמט מסט תוצאה זו, כאוסף של שורות
נקרא בדרך כלל, בגלל שאין לו את אותה כתובת דואר אלקטרונית כמוני.
>> עכשיו, שוב, כאן ל7 pset תוכל להשתמש phpMyAdmin ככלי ניהולי
וכלי פדגוגי ללמוד בדרך שלך
בעולם של SQL, אבל בסופו של היום
אתה הולך להיות כתיבת שאילתות אלו בתוך קוד PHP בפועל,
ואז השארו עמנו בהדרכתו של Zamyla בפרט
שם תוכל לקבל סיור של קוד החלוקה לקבוצת בעיה זו
שם הענקנו לך לא רק את האסתטיקה לדף הכניסה
והלוגו הנחמד הסקסי שאומר CS50 אוצר, אבל אנחנו גם נתנו לכם
חבורה של פונקציות שתהפוכנה את החיים שלך קצת יותר קלים.
אנחנו גם כתבנו חלק מpset בשבילך,
חלק הכניסה שלו בפרט, כדי לתת לך תחושה של עיצוב נציג
כי בעצם משתמש בבקר, למשל, index.php,
login.php וכדומה, ואז תראה pset יש גם ספריית תבניות
כי יש את כל הדעות שלך, את כל האסתטיקה.
וכך זרימת העבודה הכוללת ב7 pset הולכת להיות ש
המשתמשים שלך לבקר בקר באמצעות כתובת URL בדפדפן.
שהבקר מכיל קוד PHP שאתה כתבת, ובתוך קוד ה-PHP
ייתכן שיש כמה שורות של SQL מקוננים בין מרכאות כפולות
והעברתי לפונקציה שכתבנו שאילתא בשם
שיעזרו לך לדבר עם מסד הנתונים ללא שימוש במשהו כמו
כלי ניהולי כמו phpMyAdmin.
>> תוכל לכתוב משפטי SQL בקוד PHP
ותחזור מערך PHP של ערכת התוצאות,
השורות שממש מתאימות לשאילתא ש.
ובאופן דומה תהיה לך להיות מסוגל לעשות מוסיף או מוחק
או עדכונים או כדומה, תחביר שהוא די דומה,
ותראה מכמה הפניות באינטרנט, מקוד ההפצה
ומpset לארוז את עצמו בדיוק איך ללכת על עושה את זה.
סופו של דבר אנחנו מבינים באמת רק מגרדים את פני השטח של SQL
ושל MySQL, אבל הכח שלו באמת הוא שזה משחרר אותך
להתמקד בבעיות שרוצים לפתור, את מקרי שימוש אתה רוצה ליישם
מבלי לדאוג באותה תכיפות, לפחות בשלב מוקדם,
על איפה וכיצד לאחסן ולחפש מסד הנתונים שלך,
וזה ממש ממש שבו פייסבוק עצמו יש להתחיל שלה
באמצעות MySQL ולאחר מכן באמצעות יותר שרתי MySQL ואז עוד שרתי MySQL
לא עבר זמן רב עד שהם אז היו באמת קשים להתחיל לחשוב על אופן
נתונים בחנות, איך לאחסן את הדברים עוד יותר ביעילות,
כך שגם אם אנחנו לוקחים כמובן מאליו את העובדה שמדדים ואילוצים ייחודיים
וכן הלאה רק עבודה שיש שיחה מאוד מעניינת
כי זה יכול להוביל לכל, ולכן מבין שאנחנו רק מגרדים את פני השטח
בסופו של דבר מה שיכל בשבילך או בפרויקטים שלך להיות לא מעט נתונים גדולים.
>> עם זאת אמרה, בואו נפסיק כאן, ואנחנו נראה אותך בשבוע הבא.
[CS50.TV]