[השמעת מוסיקה] דוד י מלאן: בסדר. ברוך שובך. זה CS50. זהו סופו של שבוע 8. וכפי שאתם יודעים, יש לנו די שעתי עבודה מקובלת בכמה של חדרי האוכל, כולל אננברג. וחלק מהצוות חביב לקח כמה תמונות בזמן האחרון. ולכבוד ליל כל הקדושים, שחשבנו שאנחנו היינו לשתף אחד שלא תפס אותנו ב הפתעה כאן באננברג אולם רק באותו הלילה. שלך לכיתה יעקב הציבה ל תמונה זו, אבל הייתה משעשע יותר היה בפייסבוק, שהתפתח שיחה שקרתה אחר כך. הפוסט הראשון שלו בתגובה לתמונה שלו היה זה. כמה דקות לאחר מכן, הוא החליט לאחד מהם את עצמו עם זה. זה נמשך אז ללכת לזה, ולאחר מכן, עוד יותר משעשע כאשר האמא שלו צלצלה ב. ולאחר מכן סופו של דבר, נראה זה היה רק תחבולה נפלאה ל לשחק שקורה. לכן, אם אתם רוצים לראות את ג'ייקוב ואחרים, ביניהם סינתיה מנג, מי מאחורי הקלעים של צוות אזור CS50, ראש לכתובת אתר זו והמחזה הזה כאן. אז בלי עיכובים נוספים, אנו היום להמשיך את המראה הזה בתכנות האינטרנט, ויצירת בפועל של תוכניות שלא לרוץ בשורת הפקודה שלך, אבל במקום לרוץ בתוך דפדפן. יש להניח שעכשיו, או מאוד זמן קצר, אתה הולך להיות בעיצומה של הטמעה שרת האינטרנט משלך, ש שונה מתכנות האינטרנט. שרת האינטרנט בpset6 הוא על כל כתיבת תוכנה שיודעת לקחת בקשות HTTP מדפדפן, או אפילו ממך, אדם, עם תוכנה בשם Telnet, ו אז להגיב לבקשות אלה או על ידי לירוק קובץ HTML, או jpeg, gif או, או אפילו קובץ .php. אבל עם שרת אינטרנט, זה לא אמור רק לפתוח קובץ PHP, משהו שהסתיים ב.php ו אז לירוק את התוכן. זה אמור לעשות מה הקובץ שראשון? כביכול. לא תהדרו אותו, שאמרנו ביום שני, אבל rather-- אז, לפרש אותה. PHP זה שפה פירשה, וכך אחד ממאפייני המפתח באתר שלך שרת, אם כי יושם על ידינו, היכולת הזו לשרת האינטרנט שלך לשים לב, הו. זהו קובץ שמסתיים ב.php. תן לי לא רק לשלוח אותו ל משתמש כמו זה תוכן סטטי, אלא נתת לי לקרוא אותו קו על ידי קו, מהשמאל לימין, ולפרש אותו. וכדי לעשות, כי אתה בחורים בעיקרו דוגית לתכנית במכשיר, ועל הרבה מערכות מחשב, רק בשם PHP. שהוא שמו של PHP מתורגמנו של השפה. אז, חתיכה שאנחנו ליישם ל אתה, ומה שנשאר לך, סופו של דבר, הוא מספר חתיכות, וביניהם מיישם תמיכה לתוכן סטטי. אבל עכשיו, ועם בעיה להגדיר שבע, אתה הולך להתחיל למעבר ל בכתיבה של קוד PHP שמקבל פירש בשיחה עם גב סיום מסד נתונים מאחסן מידע. אז בואו טוב יותר של להבין תחילה כמה superglobals אלה ורק כמה כוח אתה לצאת מהקופסה בחינם עם שפה כמו PHP. דברים שאין לך כדי ליישם את עצמך. אז, ראינו ביום שני _GET $, שהוא superglobal, שרק PHP מדבר בעד גלובלי משתנה אתה יכול לגשת לכל מקום. ומה יש בפנים של _GET $? מה יש בפנים של זה superglobal שאנו רואים? אין ספק מבחינה סטטיסטית ב אדם אחד לפחות יודע. מה יש בפנים של _GET $? כן? הקהל: זה משתנה אתה מכניס את מחרוזת השאילתה. דוד י מלאן: מושלם. זה משתנה לך לשים במחרוזת השאילתה. לכן, בדוגמא שלנו ישנה יותר של מחדש של גוגל כאשר היו לנו כתובת URL, ולאחר מכן סימן שאלה, שתוחם את תחילת HTTP פרמטרים, אז היו לנו q שווה משהו, כמו q שווה חתולים, מה יהיה באופן אוטומטי להיכנס פנימה של ש_GET $ סופר גלובלי בשבילך, בגלל PHP, הוא מפתח של Q, ושוויו של חתולים. במילים אחרות, _GET $ וכל הדברים האלה הם מערכים אסוציאטיביים, שולחנות חשיש של מיני, ש מפתחות חנות וערכים. עכשיו, בחזרה בpset5, החשיש שולחן ייתכן שיישם, או לנסות ייתכן ש יישמתי, באמת היה יעיל אסוציאטיבי מערך, מבנה נתונים לפיה ניתן לשייך מפתחות עם ערכים. אבל בpset5, הערכים בם היו זניחים. הערך היה למעשה אמת או שקר. האם המילה במילון? לכן, כאשר אתה hashed מילה כמו תפוח כדי לראות אם תפוח הוא במילון, פונקצית הבדיקה שלך כנראה חזר אמת או שקר. אז, זה ביעילות ערך שאנחנו מקבלים בחזרה. אבל ראינו ביום שני בקצרה, אתה יכול בהחלט לשייך מעניין יותר ערכים מאשר רק אמת או שקר עם מקשים, כמו תפוח. אתה באמת יכול לחזור מחרוזת שרירותית, ואכן, זה מה ש_GET $ ואלה משתנה אחרים שתוכל לעשות. אז _POST $ דומים ברוח, אבל אם אתה שולח טופס באמצעות דואר, שיטת HTTP שונה זה המשמש לדברים כמו כרטיסי אשראי, ומידע פרטי, ואפילו מידע בינארי כמו תמונות, את הדברים האלה בסופו של חלק פנימי של _POST $. ובעצם לקבצים כמו בפורמט JPEG ומה לא, יש אפילו עוד זה לא עד כאן נקרא _FILES $ גם כן. אז, השרת אנחנו לא להתעכב על מדי הרבה, אבל זה נותן לך גישה כדי למיין של פרטים ברמה נמוכים יותר על השרת עצמו שאתה משתמש. קוקי והפעלה, אם כי, אנו יעילות יראו עכשיו. האחרון הוא מה שאנו משתמשים כדי ליישם הרעיון של עגלת קניות. אחד סופר פשוט, אבל זוכר שהיינו לנו דוגמא זו כאן, לספור כמה פעמים אתה ביקר בדף זה לפני. אבל היום, ולא רק להסתכל על ההשפעה של זה, בוא לפתוח את של Chrome המפקח, אשר בדרך כלל שאתה יכול לעשות על ידי לחיצה או בקרה תקין לחיצה בכל מקום בדף אינטרנט, ולאחר מכן בחר בדוק רכיב. או שאתה יכול לעבור את התפריטים שאנחנו מתארים במפרט של pset6. ואני הולך על כרטיסיית הרשת כאן, ובואו לצפות לרגע תנועת HTTP זה הולך הלוך ושוב. תן לי ללכת ראשון קדימה ואת זיכרון המטמון של הכרום ברור. אז כמה מכם יכול להיות מוכר עם טכניקה זו כבר, ואנחנו מתכוונים להשתמש בו למטרת איתור באגים כאן. עכשיו אנחנו כמו מחשב מדענים עומדים להתחיל עושה את זה לצורך איתור באגים מטרות, לפיה אנו לנקות את המטמון, בדרך כלל, כדי ש יכול להיפטר מדברים שנקראים עוגיות. אז אתה כנראה בדרך כלל מוכר עם מה עוגיות, או לפחות שהם קיימים, אבל מה ההבנה שלך שלהם, רק כמשתמש של מחשבים, מה היא עוגייה? כן. קהל: זה ל-- גם קצת, לא קצת בטווח של מדעי מחשב. זה פיסת המידע ש אתר שולח לך כדי כדי להיות מסוגל להקליט נתונים סטטיסטיים עליך. דוד י מלאן: אישור, טוב. אז זה פיסת המידע ש שרת, מעמיד, למחשב שלך ובואו להכליל את זה אפילו יותר, זה מפתח value-- גם, שמתחיל להיות מדויק יותר. זה חתיכה מידע, פיסת המידע, ששרת יכול לשים על המחשב שלך ולעתים קרובות מאוד, השרת עושה זה כדי לזכור מי אתה. כך למשל, סיכויים אתה בטח מחובר לאתרים כמו פייסבוק, או Gmail, או לאחרים לפני, ואתה מתחבר עם שלך שם משתמש וסיסמא, ואז אחרי זה, לחלק המספר דקות או שעות או אפילו ימים, השרת זוכר ש אתה, למעשה, מחובר. עכשיו, איך זה קורה בפועל? כי ודאי שאינך עבודת ההקלדה שם המשתמש שלך וסיסמא בכל פעם אתה מנווט ל דף אחר בפייסבוק. אז מתברר עוגיות הן התשובה. עוגייה שאתה יכול לחשוב כ, סוג של אוהב, יד דיגיטלית חותמת שאתה עלול לקבל בשעשועים פרק או מועדון שבעצם מציין שאתה נמצא כאן לפני, ויש לך כבר הראה תעודת הזהות שלך לסדרן, ל למשל, וכי המועדון או הפרק עכשיו צריך להניח שאתה אימת כבר. אתה כבר זוהה על ידי זה. אז עם זה בחשבון, בואו לפתוח את הדלפק כאן. תן לי ללכת קדימה, אני רק עשיתי, ולנקות את כל העוגיות שלי. ועכשיו מה שאני הולך לעשות הוא החזקתי את מקש Shift, רק למען סדר טוב, וכוח לטעון מחדש את הדף. Shift רק לוודא ש זה דבר יקבל מטמון. והנה הבקשה שהלך הלוך ושוב. אז כאן יש לנו בקשה, ולתת לי שלי להתקרב לכאן, והרבה זה הוא סוג של פרטים לא מעניינים ל עכשיו שהדפדפן יש באופן אוטומטי נשלח, אבל בואו לחצו על צג מקור כדי לראות את כותרות גלם. ואם אתה כבר צלל לתוך pset6 כבר, אתה בוודאי מכיר את הדברים כמו זה, ואולי קצת שורות אלה אחרים כאן, אבל מה שמעניין יותר להיום אם אני לגלול למטה, לא לבקשה אבל לתגובה שנקרא, קו זה כנראה נראה מוכר. זה דבר טוב כשאתה רואה על אישור 200. ככל הנראה, מדובר תאריך ושעה בשרת ויש כל מינים דברים. אה, זה מעניין. מתברר בכל פעם שאתה משתמש ב PHP, לפחות בשרת זה, השרת יורק את מה ש גרסה של PHP שאתה משתמש. אשר, למעשה, לביטחון מטרות, זה לא דבר טוב. אבל, אנחנו נחזור לזה בפעם אחרת אולי. אבל עכשיו זה הקו העסיסי היום, וראינו בקצרה כמה מהם, אני חושב שעם פייסבוק כאשר אנו חיטטנו סביב המפקח באותה העת, עוגיית סט היא מה שנטיעה פיסת המידע שקטנה למחשב שלך. זה כותרת HTTP זה יעיל אומר לי הדפדפן שלך, Chrome, IE, מה, היי חנות דפדפן במשתמש של כונן קשיח, או בזכרון RAM של המשתמש, מפתח בשם PHPSESSID, שהוא סימון מקוצר למזהים הפעלה, ולתת לו ערך של 0vlk8t, נקודה, נקודה, נקודה. פסאודו באמת ארוך מחרוזת אלפאנומריים אקראית. זה רק מספר ממש גדול, אבל זה מקודד עם אותיות ומספרים כך שהגודל שלו יכול להיות אפילו גדול יותר ממספרים בלבד. ולאחר מכן, אגב, Path = /, ש רק אומר שעוגייה זה צריכה להיות הקשורים ל שלמות של האתר, לא רק ספציפי דף את כל העניין. אז זה הוא שיד חותמת וירטואלית. זה כאילו השרת, פייסבוק, או במקרה שלנו במכשיר, יש 0vlk8t, פשוטו כמשמעו, שנכתב וכן הלאה, על היד שלך. שים לב מה השרת של, לא עושה הוא שזה לא אחסון שם המשתמש שלי, בהחלט לא אחסון הסיסמה שלי. במקום זאת, זה נראה אחסון מידע פסאודו אקראי כך שאף אחד לא יכול לנחש מה היא יד החותמת שלי. בצד השרת, בינתיים, השרת הולך לזכור, כנראה במסד נתונים או משהו, שהמשתמש, שגם בעתיד מציג יד חותמת של 0vlk8t, נקודה, נקודה, נקודה, צריך להיות קשור לזה עגלת קניות מסוימת, אם אפשר לומר כך. במילים אחרות, אם עכשיו אני הולך אחזור לכאן ולטעון מחדש את הדף, איך השרת יודע שבקרתי פעם אחת? או אם אני עושה את זה שוב, איך עושה את השרת יודע שאני כבר ביקרתי אותו פעמיים? ובכן, אם אני יורד לזה רוב הבקשה האחרונה, ש הוא שלישי עכשיו אני כבר שלחתי בסך הכל, שם לב לבקשה שלי עכשיו. יש עדיין זה לבקש עד כאן, אותו כמו קודם, עדיין יש כל חבורה דברים שאנחנו כבר התעלמנו כמו קודם, אבל הכותרת האחרון, זו זמן, כי אני כבר היה כאן בעבר, היא הצגת יד החותמת הווירטואלית הזה. עוגייה לפי הקו הזה כאן, לא קבע אבל מעי גס עוגיית PHPSESSI = 0vlk8t, זה רק הדפדפן שלי של אוטומטי מצגת של יד חותמת זו, כך ש עכשיו השרת, ברגע שהוא מבין, אוו, זה הוא dot 0vlk8t משתמש, נקודה, נקודה, עכשיו אני יכול לזכור שהוא או היא היא ולשייך מחדש עם משתמש שכל מה ש מידע שאני רוצה, וכל מידע שניתן לאחסן על ידך, מתכנת, ב_SESSION $. אז כדי שיהיה ברור, אם אני פותח את ממש מהיר בgedit שקובץ עצמו, counter.php, בספרייה הציבורית המארח המקומי שלי כמו קודם, תבחין כי, אכן, אני סופו של דבר אני אחסון ב _SESSION $, במירכאות "נגד" הערך של הדלפק הקודם ש אני מקבל מהקווים האלה כאן ש הסתכל הפעם האחרונה ועוד אחד. אז מתחת למכסת המנוע, זה כל מה שהעוגיות. זה בדיוק מהסוג דיגיטלי יד חותמת הולכת הלוך ושוב, ולמען אמת, אם אתה פותח את Chrome של מפקח בכל אתר אינטרנט אתה מבקר היום, עם סופר הסתברות גבוהה, אתה הולך לראות אולי אחד, אולי חצי תריסר עוגיות זה שהוא יזכור אותך. וגרוע מכך, אם אלה אתר בו אתה מבקר כל מה שיש פרסומות, ש בהחלט די נפוץ היום, ופרסומות אלו באים אם מצד מרכזי, מישהו מסוים כמו גוגל או AdWords כפי שהם לחייג לאחד מהמוצרים שלהם או ספקים אחרים מסוג זה ש למכור מודעות, מה שמעניין, ולמען אמת מה שקצת מדאיג, על איך HTTP עובד, הוא שאם יש לך מודעות מוטבעות בFacebook.com, וGoogle.com, וHarvard.edu, כל מספר של אתרי אינטרנט, כך שזה כזה שיש גבר באמצע שמכהן את מודעות לכל שלושת אתרים אלה, מתברר ש עוגיות לכל תחום. אז אם יש לך מודעות שמגיעות מ שלה חברה באתרי אינטרנט שונה, החברה שיכולה ביעילות לעקוב אחר ש אתה על פני כל אותם אתרים. הרווארד אולי לא יודע אתה מבקר פייסבוק. פייסבוק אולי לא יודע ו אתה מבקר בהרווארד. אבל שירות מודעה מה הם משתמשים אם התחום שהוא נוכחים בשני האינטרנט Harvard.edu דפים ודפי האינטרנט Facebook.com, איש באמצע זה בטח יודע מי אתה בגלל העוגיות האלה להיות משותפים על פני, או לייתר דיוק ל, כי מה שנקרא מתווך. אז אנחנו נחזור לזה ב השלכות ביטחוניות שלה, אבל יש הרבה מידע יאוחסן עליך כל פעם שאתה לבקר ברוב כל דף אינטרנט ב האינטרנט וזה באמת מפחית למנגנון פשוט מאוד זה. מה קורה, ואז, אם אתה סופר פרנואידית ואתה מחליט ללכת ל- Chrome או אינטרנט אקספלורר או מה ושלכבות את העוגיות שלך? מה קורה? כן? אתה אמת-- עשית לך את זה? אישור. לא, קדימה. קהל: אין לי אתרים מסוימים פונקציה בלי זה כמו פייסבוק. דוד י מלאן: כן! אתרים כל כך בטוחים יהיה פשוט להפסיק לעבוד. וברוב אתרים בימים אלה כי ביסודו להסתמך על עוגיות, במיוחד אם הם יש לך להיכנס ב, הם פשוט הולכים לשבור. בגלל לשקול אלטרנטיבה אם האתר, אין דרך לזכור מי אתה, ולכן דפדפן האינטרנט שלך הוא לא מייצג בכל HTTP בקשה של יד חותמת זו, יעילות אתר כמו ללכת של פייסבוק צריך להנחות אותך להתחבר בכל פעם לתקן אתה משנה את הדפים, או ללחוץ על קישור, ש אין ספק שלא משתמשים טוב במיוחד ניסיון. כך שגם שם, הוא בין מחיקות הסחר. אז בלי עיכובים נוספים, הבה מובן מאליו כי עם תכנות אינטרנט, בשפות כמו PHP, אתה יכול לזכור מידע כזה בבעיה להגדיר שבע כאשר אתה מיישם את עצמך אתר כמו-תערוכות E * שעם לקנות ולמכור מניות, אתה זוכר בדיוק מה שהמשתמש קנה ומכרו ומי שהוא או היא היא בדרך של מפגש זה. אבל אנחנו הולכים צריכים דרך מהודרת יותר מדואר אלקטרוני להתחיל לשמור מידע בסביבה. נכון? ביום שני, שדיברנו על IMs הפרוש ואיך בגרסה אחת של אתר ש, לפני שנים, כל מה שעשינו היה דוא"ל פרוקטור מי הממונה על סוגי הספורט תכנית, שם, ואת המין, ואם לא הם קפטן, והמעונות של מישהו ש הרשמה לספורט בין חומות. אז זה לא רע, אבל הוא או היא אז הייתי צריך לחפור בדואר האלקטרוני שלהם, ליצור גיליון אלקטרוני או משהו כזה כי, כדי לשמור על הכל מאורגן. אז בטח שאנחנו כמתכנתים יכול לעשות את זה למשגיח ש. וכך להיכנס ב- SQL, שפת שאילתות מובנית, וזה הולך להיראות יפה שונה לשני C ו- PHP, ואתה תצלול הרבה יותר ידיים על PHP והבעיה להגדיר שבע אלא גם SQL, או SQL, זה הוא שפה ש אתה משתמש כדי לדבר עם מסד הנתונים. אבל מה רע בבסיס נתונים? ובכן אתה חושב על מסד הנתונים, לפחות לעת עתה, כפשוט להיות כמו קובץ Excel, או אם אתה קובץ מספרי משתמש מק, או אם אתה ב- Google Apps משתמשים גיליון אלקטרוני של Google, זה יעיל מסד הנתונים, או באמת במיוחד מסדי נתונים יחסיים. מסדי נתונים יחסיים הוא פשוט משהו שיש שורות ועמודות, ואתה יכול לאחסן כל סוג של מידע בשורות או עמודות אלה. אבל מה שיפה SQL, ו על מסדי נתונים בפועל, לא רק גיליונות אלקטרוניים או גיליונות אלקטרוניים של Google, הוא שאתה יכול להשתמש בשפה לבצע בפועל שאילתות ל להכניס נתונים, כדי להסיר נתונים, לחפש נתונים, אפילו הכי חשוב, ואתה לא צריך להשתמש בו בהגינות באופן ידני כבדרך כלל אתה עלול Google גיליון אלקטרוני כמו זה. אז ב- SQL, יש חבורה של הצהרות או חתיכות בסיסיות פונקציונאלית שנבנה ב. יש הרבה יותר מאלה, אבל אתה יכול ללכת מרחק עצום רק אם אדע ש שפה זו נקראת יש SQL לפחות ארבעה הצהרות תוכל למנף. מחק, להסרת הנתונים, הכנס, להוספת שורות, עדכון, לשינוי שורות, ובחירה, למקבל בחזרה שורות ו זה אכן מה שSQL עושה. היא פועלת אך ורק על שורות כל כך כי כשאתה מכניס, או להסיר, או עדכון, או בחר את מה שאתה מקבל בחזרה כתוצאה להגדיר מה שנקרא, כמו מערך של שורות. חבורה של שורות משולחן. אז בחזרה ביום, ועד עצם היום הזה, אתה יכול לקיים אינטראקציה עם מסד נתונים באמצעות שורת הפקודה, אבל זה לא כיף בעיקר לשימוש חלון בסגנון שחור ולבן זה ובעצם לבצע פקודות ולחטט באתר שלך. ממשק משתמש גרפי, או GUI, הרבה יותר עדיף, ללא ספק, וכך הכלי אנו ממליצים ו מותקן מראש לך על המכשיר נקרא phpMyAdmin. זה צירוף מקרים מוחלט ש שמו של הדבר הזה PHP יש בזה, זה רק אומר שהאנשים שכתב את התכנית בעצמם כתב את זה ב- PHP. אבל זה סופו של דבר על ניהול שרת מסד הנתונים, כמו שרת MYSQL שאולי יש לך, כמו שאתה לעשות, במכשיר CS50. אז יש פירוט רב יותר כאן מאשר אנחנו צריכים לדאוג היום, אבל מה מפתח הוא שעל השמאל צד הוא רשימה של מאגרי המידע שיש לך במחשב שלך, על מכשיר CS50 שלך, או לבוא פרויקטי גמר שאולי יש בצד שלישי, החברה של שרת אתר או אינטרנט, ש ייתכן שאתה משלם עבור שטח. אז בצד השמאל הוא מאגרי מידע, שאחד מהם הוא pset7 ששאלתי מן הבא pset שבועות, ולאחר מכן בחלק העליון יש לשים לב שיש חבורה של כרטיסיות, שאחד מהם הוא מסדי נתונים, SQL, מעמד, משתמשים, יצוא וכן הלאה. אז אתה יכול ללכת דרך ארוכה דרך רק על ידי מימוש שרוב ממשק המשתמש הוא בעמודה השמאלית העליונה ועל פני הדף ישר לשם. אז מה אנחנו יכולים בעצם לעשות עם זה? ובכן, בואו נתחיל יצירת קצת מידע כדלקמן. נניח שלהלן המקרה, כפי שיהיו בימים ספורים, אתה רוצה ליישם אתר, שנקרא CS50 האוצר, ואתר זה מאפשר לך לקנות לצטט סוף ציטוט ולמכור מניות. וזה הולך להבין המחיר של מניות אלה, סופו של דבר כפי שתראה, על ידי מדבר עם Yahoo Finance. אשר, בצורה נפלאה, יש לו שירות ללא תשלום לפיה ניתן לעבור בעדכוני שוק הון כמו GOOG עבור Google, וזה יהיה אתן לך בחזרה את המלאי הקיים של גוגל מחיר בעבר כמה דקות לפחות. אז אתה תשתמש בי, סופו של דבר, להעמיד פן עבור המשתמש לקנות ולמכור בפועל מניות באמצעות כסף וירטואלי, אבל הדבר הראשון ש המשתמש הולך לראות הוא מסך כניסה זה ששואל אותם שם המשתמש והסיסמה שלהם. וכך, אחד הראשונים אתגרים עבורך בpset7 הולך להיות ליישם את הסוף חזרה מסד הנתונים, הגיליון האלקטרוני, אם תרצה, זה הולך לאחסון משתמשי שמות וסיסמאות וסופו של דבר מה במניות שבבעלותם, ו כמה, וכמה מזומנים יש להם, כך חבורה של דברים אחרים ב שולחנות אחרים, או גיליונות אלקטרוניים. אז בואו נסתכל על איך זה אולי נראה במבט ראשון. אני הולך לחזור ל המכשיר ואני הולך לכתובת אתר זו כאן phpMyAdmin localhost / phpmyadmin ואתה תראה שזה לוקח אותי לממשק בדיוק כפי שראינו ב צילום מסך, וכאן אני יש בסיס נתונים נוספים הרצאה קראה להיום ותן לי ללכת קדימה ראשון ולחץ על pset7. נדמה לי שיש לי כמה אפשרויות, אחד לחדש, ליצירת טבלה חדשה, וקישור למשתמשים, ש טבלה שכבר נוצרה. אז מה שולחן? אז אם השתמש Excel לפני, ואם יש לך מספרים משומשים או Google גיליונות אלקטרוניים, אתה פותח את חלון ואתה מקבל כל חבורה שורות ועמודות, אבל אז בדרך כלל יש לך גיליונות עבודה בחלק התחתון, או בלשוניות נפרדות. אתה יכול לחשוב על כל גיליון עבודה כשולחן כך מסד הנתונים שסופו של דבר, הוא שילוב של טבלה אחת או יותר, אחד או יותר גיליונות עבודה, ב עולם של גיליון אלקטרוני רגיל. אז תן לי ללכת קדימה ו לחץ על גיליון עבודה זה כי אני premade, משתמשים בשם, מוכר גם בשם נתונים בטבלה. ואם אני לגלול למטה כאן, תן לי להקטין את התצוגה קצת, זה מה שאומר לי phpMyAdmin שלנו הוא בתוך השולחן הזה עכשיו. זה קצת מבלבל בהתחלה מבט בגלל שממשק המשתמש לא הדבר היפה ביותר בעולם, אבל מה שמעניין הוא חלק זה כאן. זהות, שם משתמש, וחשיש. מראש, ואתה תהיה בידיים זה בבעיה להגדיר שבע, אנחנו נותנים לך קובץ המכיל סופר טבלת מסד נתונים קטנה, שהושאל למעשה ממהדורת ההאקר בעיה להגדיר שתי, בתוכה יש שש שורות. אחת עבור לינדה כל הדרך למטה לאחד לZamyla, ושים לב בצד השמאל של אלה שמות משתמשים הם מזהים ייחודיים כמו אחד, שתיים, שלוש, ארבעה, חמש, שש, מספרים שלמים, ולאחר מכן ימינה הם אלגוריתמים Hash. ואם, רוב הסיכויים הם, אתה לא עשית הבעיה מהדורת ההאקר להגדיר שתי, אבל חשיש הוא בדיוק כמו מוצפן סיסמא עם כמה אזהרות. וכך, מה שאתה רואה כאן הם הגרסאות מוצפנות של כל שש סיסמאות שלנו מבעיה להגדיר של שתי מהדורת האקר. עכשיו בצד השמאל הוא רק כמה דברים GUI, עריכת שורה זו, העתקת שורה זו, מחיקת שורה זו. אבל מה שמעניין עכשיו הוא הבא. אני יכול בעצם להתחיל ניסויים בטבלה זו. אז אם אני הולך ולחץ על SQL כרטיסייה, אני מקבל תיבת טקסט הגדולה הזה. וזה לא איך אנחנו הולכים ל עושה את זה כאשר בעצם כתיבת קוד. כדי להיות ברור, phpMyAdmin הוא רק כלי זה הולך לתת לנו לחטט בבסיס הנתונים ולתת לנו להתנסות בשאילתות. כך למשל, תניח ש אני לבצע בדיוק את זה. בחר, שהוא אחד מאותם מילות מפתח שציינתי קודם לכן, כוכב, המייצג את כל העמודות בטבלה. ממה ששולחן? ובכן, משתמשים. והודעה שיש זה כנס מוזר בSQL שבו אתה משתמש בפועל בחזרה קרציות, בדרך כלל, ציטוטים לא יחידים וציטוטים לא כפולים כשאתה מדבר על שולחנות שמות, כך חזרה הציטוט הוא הדבר ב יד השמאלית עליונה של המקלדת שלך ביותר סביר להניח. אז תן לי ללכת קדימה עכשיו ופשוט להשאיר את זה לבד ולגלול למטה ולחץ על חפש, ואנחנו באמת הולך לראות את אותו הדבר. יש לנו רק להורג שאילתא SQL אומר כוכב הכל בחר מטבלה בשם משתמשים, ו מה שאתה מקבל בחזרה הוא זו. סופו של דבר, נהיה מסוגל לעשות אותו דבר בקוד, אך לעת עתה כל מה שרציתי אל היה לראות את זה בדפדפן שלי. ובכן בואו נעשה משהו קצת שונה. תן לי לחזור לכרטיסיית SQL, ובואו נגיד שמה? Zamyla איבד את כולה כסף, ולכן זה זמן עבורנו כדי למחוק אותה כמשתמש. היא כבר לא מתחבר. אז אני הולך להגיד למחוק from-- גם, לשמור על היוון לעקביות, למחוק ממשתמשים בי. וכך, אנחנו יכולים להיות אלה פרדיקטים, או אלה מוקדמות, בסוף המסר שלי איפה ואיך אני יכול למחוק Zamyla? בשמה Zamyla, כך טור, אחד מהעמודים היה שם, אז איפה name = "Zamyla". וכאן אני משתמש כפול ציטוטים או ציטוטים בודדים, אתה משתמש רק בחלק האחורי קרציות כאשר מדבר על השמות, למשל, שולחנות או שדות. ותן לי לחץ עבור כאן. ועכשיו, בדף האינטרנט הוא להיות קצת לחוץ. או, האם אתה באמת רוצה לבצע מחיקה ממשתמשים בו שמו שווה Zamyla? כן. אז עכשיו, אם נחזור לשולחן שלי על ידי משתמשי לחיצה, שמו לב שהממ. אני פשלתי. ולמעשה, אני סוג של לחצתי משם כל כך מהר אתה אפילו לא ראית הודעת שגיאה אדומה, אולי. מה עשה לא בסדר? קהל: אתה לא צריך כדי לנצל את שמה. דוד י מלאן: כן אני הוון את שמה, אבל בעצם שם משתמש לא אני עשה כמה טעויות, נכון? אחד, את שם המשתמש שלה הוא zamyla, Z אותיות קטנות, ושם העמודה הוא שם משתמש, לא שם, אז בואו נעשה את זה שוב. תן לי ללכת קדימה ו למחוק ממשתמשים בי שם משתמש שווה סוף ציטוט ציטוט "Zamyla". בסדר? אז זה נראה קצת יותר טוב, תן לי לי ללכת לגלול למטה ולחץ על חפש. זה עדיין הולך ל לצעוק עליי כדי להיות בטוח. אני לוחץ כן, ועכשיו אנחנו רואים, בכנות זה קרה, באמת מהיר, פחות מאחד שני בהחלט, זה הוא בדיוק את השאילתה שקבל להורג. כדי לאשר, תן לי לחץ על משתמשים ואכן עכשיו Zamyla נעלם. עכשיו בואו לעשות את ההפך. נניח שגייב רוצה להירשם לאתר. מה שאילתא SQL, מה הפקודה שאני יכול להקליד כדי להוסיף גייב? ובכן, זה די פשוט. הכנס למשתמשים, ועכשיו זה נעשה קצת נסתר. אני צריך לציין, לשרת, מה התחומים שאני רוצה להקצות. באמת לא אכפת לי מה הזהות של גייב מספר הוא, אז אני הולך לדלג על זה. אני במקום שאני מתכוון לומר שם משתמש, חשיש, ולאחר מכן הערכים שאני רוצה לשים יש הולך להיות גייב. ולאחר מכן החשיש, אני לא יודע. אז לעת עתה, אני הולך תשאיר את זה כגדול לעשות. אנחנו נחזור ל כי בלהגדיר את הבעיה מפרט לגבי איך אתה בעצם עושה את זה. אז שם לב, שוב, את התחביר. הכנס לשם טבלה, אז רשימת סוגריים של השדות, העמודות שברצונך להוסיף ערכים ל, ולאחר מכן פשוט אותו הזמנה מדויקת שמאל ל זכותם של הערכים שברצונך להוסיף, וזה רק עטיפה כי הטקסט הוא קצת ארוך. אז עכשיו תן לי לחץ על Go. שורה אחת מוכנסת. ועכשיו אם אני חוזר ל משתמשים, מה שמעניין הוא שלא רק שגייב עכשיו ב מסד הנתונים, מה הוא, ככל הנראה, תעודת הזהות שלו? ובכן זה שבע. למה זה שבע כשלא להוסיף אותו? אז זה, גם הוא אחד מ תכונות שאתה מקבל מבסיס הנתונים. הרבה בנו פונקציונליות. מתברר שכאשר נוצר טבלה זו, אני מוגדר מראש זה באופן אוטומטי להקצות מזהה באופן כזה כי זה מגדיל. אז אם אתה אי פעם חטטת בם, והביט בפייסבוק מזהה מה שלך מספר הוא, בימים אלה זה לא באמת דבר נכון לעשות, אבל בפייסבוק כAPI, ממשק תכנות יישומים, שבו אתה יכול לחזור חבורה שלמה של נתונים על את עצמך, על החברים שלך, והקשרים שלך. ומה היה אמורים להיות סוג מגניב, חזרה ביום, היה להסתכל על מה ששלך מספר חשבון הפייסבוק היה. מארק צוקרברג, למשל, הוא שלוש מאז שהוא היה המחבר של האתר. וכפי שהסיפור הולך, הוא יצר שני חשבונות הבדיקה, משתמש אחד ושני, שהוא לאחר מכן נמחק. וכך, צוק, כפי שהוא את שם המשתמש שלו בפייסבוק, הוא מספר תעודת זהות של שלוש, וכל אחד מאיתנו מספרים הרבה גדול יותר משלושה הימים האלה. למעשה, בשלב מסוים פייסבוק התרחק מאפילו באמצעות int, ש הוא ערך 32 סיביות, לשימוש ב השלב הבא, במהותו ארוכה ארוכה כל כך שהם יכולים להכיל אפילו יותר משתמשי רישום. אז עובדה היסטורית קצת כיף. אז זה פשוט תחביר בסיסי שבי אנו עשויים לבצע כמה שאילתות, אבל אנחנו באמת יכולים לעשות חבורה יותר דברים עם SQL. ואתה תראה, בסופו, בבעיה להגדיר שבע שאתה צריך לעשות מספר החלטות עיצוב, ביניהם הולך להיות מה נתוני סוגים לשימוש. אז בדיוק כמו ב- C, יש נתונים סוגים במסד נתונים, כמו MySQL, וסוגי נתונים אתה צריך לבחור מכולל תחומים אלה כאן. תו, varchar, Int, int הגדול, עשרוני ותאריך שעה, ועוד רבים אחרים. אז בואו באמת לעשות את זה. בואו נעמיד פנים שלא שולחן ידך למשתמש זה ותן לי להמשיך וליצור, ל את עצמי, בהרצאות database-- פשוט נתת לי ללכת קדימה ולמחוק השולחן שיש לי כאן כבר כך שלמעשה אנו יכולים ליצור את זה. אופס. אני הולך לרדת זה שולחן, ועכשיו אני הולך שוב ל להרצות מסד הנתונים לכאן, אני הולך ליצור טבלה משתמשים התקשרו ובואו פשוט לעשות את שלוש עמודות בתחילה ולחץ על חפש. עכשיו, על פי רוב, שוב, זו רק באמצעות הכלי הגרפי הזה שנקרא phpMyAdmin, ומה שאנחנו עושים עכשיו יוצר שולחן. אז זה כמו ללכת על קובץ, חדש, ויצירת קובץ Excel חדש. אז זה שואל אותי כמה שאלות, משמאל לימין, מה שמו של הטור הראשון, ולאחר מכן את השם של העמודה השנייה, ושמו של השלישי. אז בואו לשחזר את זה. זהות, ולאחר מכן את שם המשתמש היה אחד, ולאחר מכן חשיש היה אחר. אז מה צריך את סוג הנתונים להיות עכשיו לשדה כמו זהות? הנה הרשימה של סוגי נתונים השלמה עומד לרשותך במסד נתונים, ועכשיו בואו פשוט ללכת עם int. ערך 32 סיביות, אני לא חושב באופן מציאותי אני הולך להיות יותר מ -4 מליארד משתמשים בחשבון שלי, בשירות שלי, אז אני הולך להמשיך לנוע לשאלה הבאה. אני לא הולך לפרט אורך או ערכים, זה לא ישים כאן int, כשלעצמו. ועכשיו אני יכול לציין, ככל הנראה, ברירת מחדל ערך, שאני לא הולך לפרט. איסוף, אני לא יודע מה זה. תכונה. עכשיו אנחנו עושים בפועל יש החלטת עיצוב. אז יש כמה תחומים כאן, לא כל שחל, אבל לא חתום רק אומר מה? שint חייב להיות? לא שלילי פשוט. אז זה חייב להיות 0 בעד. לא, אני לא הולך לבדוק כי אני רוצה שכל משתמש יש זהות, זה לא יכול להיות null. ולאחר מכן, אנחנו מגיעים לעוד קצת החלטות עיצוב מעניינות כמו זה. אנחנו נחזור לזה ברגע, אבל מה מאפיין נוסף של מסד הנתונים הוא, הוא שאתה יכול לספר לי שרת מסד הנתונים קדימה ולייעל את עצמך, שלך זיכרון RAM והמקום בדיסק הקשיח שלך, כך שבוחר, ומוסיף, ו מוחק, ועדכונים ממש מהר. השווה את זה עם pset5. אם אתה רוצה לחפש משהו בטבלת החשיש שלך, ש אתה חושב על מסד נתונים, שהייתי צריך לעשות את כל עובד להכנת טבלת החשיש שלך מהר. זה כמו, כמובן, אתה. נכון? אתה צריך לשים את כל קנס הזמן כוונון דברים, מקבל פונקצית חשיש נכון, להבין איך דליים רבים שיש. אבל מה שיפה, שוב, על בסיס הנתונים הוא אתה פשוט דוגית כל זה לאנשים אחרים שחשב שזה דרך בשבילך, ומה ש אני הולך לומר כאן תחת מדד הוא ששדה תעודת הזהות שלי הולך להיות הדרך העיקרית ל זיהוי משתמשים באתר זה. אני לא הולך לחשוב של Zamyla כZamyla, אני הולך לחשוב על שלה כמספר 6. למה זה, אולי, טוב יותר באופן אינטואיטיבי לחשוב על מודל כל אחד משורות בודדות שלך באמצעות מספר במקום משהו כמו מחרוזת, כמו Zamyla או גייב או מחרוזת ארוכה יותר עדיין? כן? קהל: זיהוי ייחודי? דוד י מלאן: תגיד שוב? קהל: זיהוי ייחודי? דוד י מלאן: ID הוא ייחודי, אבל suppose-- לפי העניין באופן כללי עם שמות משתמש, מניח אני גם אמרתי שיש יכול להיות רק אחד Zamyla בעולם, ורק אחד גייב. אני יכול להטיל את הייחוד אילוץ על מיתרים, מדי, אם אני רוצה. אז לא מחשבה רעה. קהל: מאובטח יותר. דוד י מלאן: יותר מאובטח, מדוע? קהל: אתה לא יכול לדעת מ הוא ש, כמו במשתמש. דוד י מלאן: בסדר, אתה לא יכול להגיד לי שבו משתמש הוא שכל כך יש היבט פרטיות אליו, במיוחד אם את תעודות הזהות של אולי המופיע בכתובות. כל כך בטוח, שגם יכול סוג של עבודה,. מחשבות אחרות? כן? קהל: קל יותר לבצע פעולות על int. דוד י מלאן: זה תמרוץ האמיתי. זה פשוט יותר יעיל, או קל יותר למחשב, כדי לבצע פעולות על מספר שלם. נכון? Int מובטח להיות 32 סיביות, ואילו Zamyla ארוך כמה תווים, גבריאל הוא ארוך עוד כמה דמויות, דבנפורט הוא באמת ארוך, ואז זה לא יעיל במיוחד לשימוש מחרוזות כדי להשוות ערכים ולחפש לשדות, ושדות עדכון, אם אתה יכול לברוח עם רק מספר שלם אחד. רק 32 סיביות. אז שמות משתמש, גם, בדרך זו, לא צריך להיות ייחודי, למרות שהם כנראה צריכים להיות, וגם אפילו בדרך זו משתמש יכול לאפשר ל לשנות את שם המשתמש שלו או שלה. אז בואו עכשיו נשאיר את זה כ אמצעי עיקרי של זיהוי המשתמש. זה אומר לי בסיס הנתונים קדימה, לייעל את עצמך כך שעליות המבט בתעודת הזהות שלהם סופר מהירים. AI, בשם נורא, פשוט משמעות הדבר היא אוטומטי תוספת, ואת זה הוא לבדוק תיבה אנחנו צריכים לבדוק כדי לציין שהשדה מזהה ל תתעדכן באופן אוטומטי בשבילי, ואז אני הולך ל לגלול בצד הימין כאן ולמען אמת אני לא ממש מתעניין בכל יותר מתחומים אלה. בוודאי לא היום. אז אני הולך לחזור לכאן, לעמודה הראשונה, שבו אני צריך לציין את שם משתמש של וחשיש, ובוא במוקד לפחות ב שנייה אחת לעת עתה. Int הוא כנראה לא הבחירה הנכונה, אז מה הגיוני יותר אולי? קהל: טקסט. דוד י מלאן: תגיד שוב? קהל: טקסט. דוד י מלאן: טקסט? אישור, שמעתי את טקסט. מה עוד? סוג של יש לנו חבורה של בחירות כי הם טקסטואלי בטבע. לכן, כאשר, ולמה, לעשות אתה משתמש בחלק מהם? ובכן char, בניגוד למה שאולי חושבים, הוא לא דמות אחת. זה מספר מסוים של תווים. אז אם אנחנו יודעים שכל שמות המשתמש חייב להיות כמו שמונה תווים, כפי שהיה נפוץ במבוגרים מערכות מחשב, אני יכול לומר char ואז אני יכול לומר 8 כאן. זה היה רגע שהעמודה השלישית הופכת החלים בעת יצירת טבלה. אבל זה סוג של מעצבן משום שייתכן שחלק מאנשים רוצה להיות שם משתמש כבר משמונה תווים, יש אנשים שאולי רוצים יש את שם משתמש של קצר יותר, אז למה להתחייב למספר מסוים? למה אין לי משתנה מספר התווים ורק אומרים שהאורך המרבי של שם הוא, אני לא יודע, כמו 64 תווים. אני לא יכול לחשוב על שום חברים ש יש שמות ארוכים יותר מ -64 תווים, ואפילו אם זה קצר מדי שאתה יכול בהחלט להקפיץ אותו באופן שרירותי. אז varchar הוא משתנה מספר התווים. טקסט הוא לא אינסטינקט רע, ו בכנות כי זה סוג של עושה מה שהוא אומר, אבל שדה טקסט יכול להיות כמו 65,000 בתים לפחות. זה כנראה מוגזם עבור שדה, ולמעשה, כן, 65,535. זה כנראה מוגזם עבור שם, כדי שנישאר תמיד ב, בדרך כלל, עם varchars לטקסטואלית שדה וחשיש, גם. חשיש, מתברר, אנחנו יכולים לעשות varchar, כמו גם, או משהו כזה, אבל אנחנו לא נתמקד היום ב הצפנה שם והמספרים כי בעצם אנחנו אולי רוצה להשתמש לאורכו. אבל תן לי לגלול למטה בצד הימין. אתה יכול להיות אחד בלבד מדד עיקרי לשולחן, אבל אני רוצה להחיל את כל אלה, עכשיו, לשם משתמש, היית אומר? מה צריך להיות מבוסס על שם משתמש מעורפל הבנה של ארבע האופציות האלה? רק בשמות שלהם? קהל: ייחודי. דוד י מלאן: אז ייחודי, נכון? אז מתברר שלא רק יכול אתה אומר לי מסד הנתונים, מראש, זו הדרך העיקרית זיהוי שדות. גם אתה יכול להגיד את זה הוא הולך להיות תחום ייחודי. זה לא הולך להיות הדבר אני סומך על, אבל אני רוצה את מסד הנתונים ל בעצם יש לי שאם מצב, כך שאם אי פעם ניסיתי לרשום שני משתמשים עם אותו שם, מתוך שטוח מסד הנתונים הוא לא הולך לתת לי. אולי יש לי איזה קוד נוסף ב- PHP שמונע כל כך הרבה, אבל את מסד הנתונים, מדי, יכול להבטיח שאף פעם לא יקרה. עכשיו, במאמר מוסגר, במיוחד כ אתה חושב על פרויקטי גמר, לשמור במדד זה ונפש מלא טקסט הוא בעצם די שימושי. אם יש לך מסד נתונים גדולים יותר, לא עם עשרות, אבל עם מאות או אלפים או אפילו מיליון של שדות, אתה יכול גם לספר את מסד הנתונים מראש מדובר בתחום שאני הולך לחיפוש בהרבה. אולי את שם המשתמש שלו, אולי זה ביו, אם אתה מה שהופך את אתר אינטרנט כמו פייסבוק ש יש סעיפים שהמשתמש של מותר כדי לחסוך, ואם אתה רוצה לספר את מסד הנתונים מראש אני הולך להיות חיפוש בתחום זה הרבה, אבל זה לא בהכרח ייחודי, באפשרותך לציין ליצור לי מדד. או, שאתה יכול להגיד גם מאפשר לי לעשות סוג של חיפושים שרירותיים כמו פיקוד או הבקרה F, כמוך אולי במעבד תמלילים, כך שאתה יכול להסתכל מחרוזות שרירותיות או מחרוזות בתחום זה. במילים אחרות, אנחנו מקבלים עד לנקודה בסמסטר שבו אתה לא צריך לדאוג כיצד ליישם את הדברים ביעילות. אתה פשוט צריך לדעת על מה החלטות עיצוב לעשות, כך שאתה שימוש בכלים הנכונים ל סחר על מנת למנף את התכונות שאנשים אחרים שנבנו עבורך. אז כדי לסכם, עיקרי רק צריך יש אחד, אתה יכול להיות רק אחד, וזה הדבר שאתה מתחייב ל באמצעות זיהוי שדות ייחודי. הייחודי הוא רק דומה ברוח, אבל ייתכן שרק מדי פעם להשתמש בו, אבל אתה רוצה מסד נתונים כדי לכפות אותה. מדד רק אומר מנע לזרז את עניינים בעתיד כך שאני יכול לחפש דברים בתחום זה. ולאחר מכן טקסט מלא הוא בדרך כלל ל סעיפים, או מאמרים, או גופים גדולים טקסט שבו אתה גם ייתכן שתרצה יש לי קלפים פראיים כמו המקבילה של כוכב. תקין. אז זה היה סוג של הרבה בבת אחת. בואו תראו אם אנחנו לא יכולים לזקק כמה תכונות אלה ולאחר מכן לבנות משהו פשוט למדי, אך רב עוצמה. אז בין אחר החלטות עיצוב שאתה סופו של הדבר יצטרך הוא לאורך הקווים של מנועי אחסון. ותן לי רק לעשות אזכור של זה בציפייה לפרויקט גמר, ובואו לקראת say-- אין בואו נעשיתי את זה. בואו לבנות את זה קצת היישום ראשון. אני הולך להיכנס למסוף שלי חלון, וכאן הוא לא רק counter.php, שאנחנו הולכים עכשיו להיפטר כמכבר לא מקורן, אבל יש לנו כל חבורה מדריכים וזה הולך להיות דומה מאוד ברוחו למה שאתה רואה בעיה להגדיר שבע. אז יש לנו שלושה מדריכים כולל ציבורי ותבניות, ש זה בדיוק איפה שהפסקנו ב יום שני עם הפרדיגמה MVC כולנו. וכדי לסכם, בציבור הוא הולך כל קובץ שאני רוצה שלמשתמשים למעשה v תוכל לבקר ב הדפדפן שלהם באמצעות כתובת URL. תבנית. מה עשה שם בתבניות? איזה סוג של דברים? לא היה הרבה, אבל בני זוג קבצים לפחות ביום שני. כן. קהל: כותרת עליונה ותחתונה? דוד י מלאן: כותרת עליונה ותחתונה. אז יש לנו משהו היום דומה, מדי. יש לנו עוד כמה קבצים אבל תחתונה אני רואה, אני רואה כותרת, ולאחר מכן חבורה של קבצים אחרים. אז זה שווה הערך של תצוגת V MVC, אשר, שוב, יהיה קצת יותר ברור בבעיה להגדיר שבע, אבל זה רק תיקייה אני לשים הרבה אסתטיקה שלי. הרבה HTML שלי, הרבה צורות שלי. בינתיים, כולל, הוא עוד ספרייה שיש לו שלושת קבצים אלה ובואו ניקח מבט מהיר על אלה. אני הולך קדימה ולפתוח config.php. כפי שמתברר, הרבה כמו קודם לכן בטווח, אתה חד כלול h נקודת CS50 עם pset7. בדוגמא של היום, אתה הולך לעשות את המקבילה של ש עם הצהרה מחייב שיעילות יש כמה שורות אלה. אז כדי שיהיה ברור, זה הוא קובץ בשם config.php. ושים לב מה הוא עושה. זה כנראה עושה משהו הודעות נסתרות, הפעלת שגיאה כך שאתה יכול לראות אותם בדפדפן. זה, ולאחר מכן, ככל הנראה, נדרש שני קבצים אחרים אז זה כמו #include בC, ואז זה אחד שאנחנו לא רואים, ואנחנו כבר הסתמכנו על, זה מדליק שעגלה כמו פונקציונלי קניות. משמעות דבר היא רצון עוגייה יישלח הלוך ושוב. אז למה זה מעניין? ובכן, אם נחזור לזה ספרייה ולפתוח, למשל, constance.php. שים לב ש- PHP עושה קבועי תמיכה, זה לא בדיוק כמו define # ב C. במקום זאת, אתה ממש אומר שהוגדר, והודעה כי אני כבר מאוחסן מראש ארבעה קבועים בקובץ זה. אחת עבור מסד הנתונים של היום, ל הסיסמה שלי, לשם המשתמש שלי, ואת שמו של השרת. אז אלה הם למעשה הולכים להיות די דומה בבעיה להגדיר שבע. ולבסוף, וזה שבו אני הולך לקבל חלק מהפונקציונליות נחמדה מהצוות, בfunctions.php היא חבורה של קוד שכתבנו, ואני גנבתי כמה מזה מהבעיה להגדיר שבע להיום, שעושה המון דברים ובואו רק להסתכל על אחד מהם בפרט. פונקציה זו כאן, שאילתא, הוא הולכת להיות פונקצית PHP אנו קוראים על מנת לבצע SQL. לפני רגע היינו משתמש ב phpMyAdmin, אבל זה רק לסוג של מטרות למידה ומטרות אבחון ושוכח סט מסד הנתונים שלך. כאשר אתה בעצם להשתמש מסד הנתונים, אתה, האדם, הם כמובן לא הולכים למשייכת אינטרנט דף כל פעם שמישהו רושם. אתה הולך לכתוב קוד ש הכנסה ומחיקת משתמשים על פי דרישה, ואנחנו הולכים לעשות את זה בדרך של פונקצית השאילתה. אם אני עכשיו לגלול למטה, יש הולך להיות תכונות עוד כמה. הפניה הולכת להיות פונקציה שכתבנו בשבילך שמאפשר לך לשלוח את המשתמש לכתובת אתר אחר, ולהבהיר הוא פונקציה, ממש כמו ראינו ביום שני, שהופך למעשה תבנית, אלא יותר על אלה ב צורת הליכתו של pset7 דרך. לעת עתה, בואו נלך קדימה ולעשות את זה. תן לי ללכת לשולחן ההרצאות שלי ו רואה שיש כרגע שום דבר כאן עדיין, ולתת גם לי ללכת לספרייה הציבורית שלי, שבו יש רק קובץ אחד, index.php. קובץ זה מופיע להיות סופר פשוט באותו הרגע, זה נראה בדיוק כמו זה. דומה מאוד לאופן בו אנו הפסיק ביום שני. אני דורש בקובץ זה, config.php, הנמצא ב כולל ספרייה, ש הוא בנקודת נקודה, ההורים שלי, ואז זה פשוט הופך את הקובץ הזה. אז מה הוא קובץ זה? בואו לפתוח את בתבניות שלי form.php, ואנו רואים את זה. סופר פשוט, ככל הנראה צורה זו היא הולך להגיש על ידי _GET $ או _POST $. בדיקת שפיות מהירה. פשוטו כמשמעו לחפש באופן חזותי את הקובץ. שיטה שווה פוסט. אז זה לא הולך להשתמש בכתובת האתר, כמו גוגל עושה, זה הולך למיין וסביבה; המידע מאחורי הקלעים וזה נכנע ל קובץ בשם register.php, וזה הקובץ עוד לא נכתב אבל מה זה הולך להיראות כמו זה. אם אני הולך לדף נפרד זה מה localhost / index.php נראה כמו. ושוב, השרת של רק בהנחת index.php. הזן. אז זה שבו אנחנו נמצאים ב, ומה שאני רוצה לעשות הוא להיות מסוגל להקליד דברים כמו דוד, ולאחר מכן מספר הטלפון שלי, שיגיד 617-555-1212 לעת עתה, לרשום ועכשיו register.php לא נמצא. אז אני צריך ליישם את זה. אז בואו שוט במהירות משהו כמו את זה. תן לי ללכת לספרייה הציבורית שלי ולעשות gedit של register.php, ועכשיו אני הולך קדימה ו להתחיל מצב PHP, כמו שעשינו ביום שני, והתג של קרוב PHP, ו בואו נעשה כמה דברים. אז אחת, אני יודע, מ שכתב צורה ש, כי אני רוצה לבדוק את הדברים הבאים. אם הוא ריק, כל מה שהמשתמש הקלדה לשם השדה, ולאחר מכן אני הולך להגיד משהו כמו להתנצל חסר שם. מתנצל, בינתיים, הוא לא נבנה בדבר PHP, זה פונקציה שכתבנו בfunctions.php לpset7 כך יש לך גישה אליו. אחר אם תחום האחר הוא מספר ריק, ולאחר מכן אני הולך להתנצל בפני משתמש ואומר מספר חסר. שמור קובץ זה. עכשיו בואו נחזור לדפדפן שלי, לחזור לפורום נסה שוב. הרשם. אישור. שום דבר לא קרה, וזה טוב. אני לא מקבל הודעת שגיאה. אבל אם במקום, בואו רענן דף, ולא מספק שום דבר. לעזאזל. לעשות את זה. הרשם. מה עשה לא בסדר? אם ריק, שם _POST $. אומר שוב? אה, כמובן. שכחתי את החלק החשוב ביותר, ש הוא דורש ("../ כולל / config.php."). אני צריך גישה ל מתנצל פונקציה, ש לכן שום דבר לא קורה. הפונקציה אינה קיימת למעשה. אז בואו ננסה את זה שוב. בואו לטעון מחדש את הדף, לחץ על רישום. אישור. זה מה שיש. אז, הפלט אנחנו רואה כאן היא התוצאה לקרוא להתנצל פונקציה, סופר פשוט, וזה פשוט מדפיס את כל מה ש אני נותן לה כטיעון. בסדר, אז בואו נשתף פעולה. בואו לספק את השם שלי כמו דוד, להירשם, חסר המספר בואו אישור לספק גם את זה. 617-555-1212. הרשם. אישור. אז הכל טוב עכשיו, רק דבר מעניין שקורה. אז עכשיו בואו נעשה משהו יותר מעניין קורה ככה. תן לי ללכת לphpMyAdmin, ובואו למעשה ליצור טבלה בשם משתמשים, אני הולך לתת לו שלוש עמודות, ואני במהירות ימצא ליצור זהות, ולאחר מכן שם, ולאחר מכן מספר, והשדה מזהה אני הולך לעזוב כint. שם השדה אני הולך לעזוב בvarchar, ואנחנו אומרים 64, באופן שרירותי למדי. המספר שאני הולך לעשות, אתה יודע מה? אנחנו הולכים ל לתמוך במספרים בארה"ב כאן, אז אני הולך לעשות משהו כמו char ולאחר מכן 10 תווים מקסימום לאזור חיוג ולאחר מכן שבע ספרות. ואז כאן, אני הולך לציין תוספת אוטומטית תחום זה, להפוך את זה למפתח ראשי, ו אני הולך קדימה, לא לבדוק כל תיבות אחרות אלה. לכן, כאשר אני עכשיו סוף סוף לחץ על שמור, ואני חוזר לשולחן המשתמשים שלי, זה מה שזה נראה אם ​​אני עכשיו לחץ על מבנה כרטיסייה חדשה. אז זה, שיהיה ברור, זוהי רק הדרך של phpMyAdmin לומר הטבלה במסד הנתונים שלך יש תעודת זהות, שם, ומספר עם תצורות מסוימות אלה ואנו להתעלם משאר השדות יש לעת עתה. אז עכשיו מה שאני רוצה לעשות? אז אם אני הולך עכשיו לשלי קוד מקור, אם הכל טוב אני רוצה לבצע את השאילתה הבאה. הכנס ל, ורק אני יכול אומרים שלמשתמשים שאני עושה לא ממש צריך לחזור אלו קרציות אם זה לא מילה מסוכנת כמו משתמשים. אני הולך להגיד את שם, מספר, ולאחר מכן כאן אני לא הולך לקוד קשה ספרה של הערכים עדיין. אני מתכוון להעלות את שני סימני שאלה. ואת זה הוא אמנה בשפות רבות לפיו במקרה שאתה רוצה להיות מציין מיקום של מחרוזת אתה הולך להשתמש בשאלה סימנים, מסיבות שנציע ב אחזור לשוחח על ביטחון, וכאן אני הולך לעבור באלה שני שדות לפרסם שם, ולאחר מכן לפרסם את המספר, ועכשיו לשמור את הקובץ. ועכשיו אני הולך יורד כאן הוא סופר פשוט לומר rendersuccess.php, ש הולך להיות תבנית אחרת. אני הולך ליצור ממש מהר. Geditsuccess.php ואני רק הולך לומר הצלחת H1 בקובץ ש. בְּסֵדֶר. אז עכשיו, בואו נחזור ל דפדפן, שבו ביקרתי לפני. בואו נלך קדימה ולאשר שכתבתי בדוד, שכתבתי במספר טלפון, להירשם. לעזאזל. מה עשה לא בסדר? אז אני רואה שגיאה כאן, אתה יש שגיאה בתחביר SQL שלך. תן לי לקפוץ לראש gedit, תן לי לי לחזור לregister.php, ומה אני להשמיט ש הייתה הפעם האחרונה חשובה? אני צריך את זה. אתה רוצה לדעת כי מלבד מ יש לב לפני, אבל אני צריך את זה. אז עכשיו בואו נחזור, וזה היה מועיל לראות בדפדפן ולכן בconfig.php אנחנו יורקים את שגיאות. בואו נלך קדימה וטען מחדש, לחץ על המשך, הצלחה. אז עכשיו תן לי ללכת אליי מסד הנתונים כאן ולחץ על משתמשים, ולגלוש, ושים לב אני עכשיו יש דוד במסד הנתונים שלי כאן. עכשיו מבחינה טכנית אתר זה עדיין לא על רשת האינטרנט הציבורי, אז אני לא יכול להיות אחר אנשים לשים כאן, אבל אם אני עכשיו רציתי, ל למשל, לשלוח את עצמי הודעת טקסט. בואו נצא על ענף כאן ולראות אם זה באמת עובד. אני הולך קדימה ולמחוק את השורה ואנו לטשטש את זה בווידאו בהמשך ולכן אין לנו את כל אינטרנט הודעות SMS, ואנחנו עכשיו עולים ל דפדפן ונעבור על להרצות ואנחנו סוג ב שונה מספר כאן, להירשם, הצלחה. אז עכשיו, המספר שלי הוא ככל הנראה ב מסד הנתונים, ועכשיו לחלק הכיפי. בואו באמת להשתמש PHP לעשות משהו תיכנותי, או מהפיקוד קו או ממקום אחר, ועכשיו אני רק הולך לשמור את זה פשוט ואני הולך להיכנס לשלי ספרייה כאן ולבצע את הפעולות הבאות. Gedit תסריט נניח, שנציע ב קורא לזה טקסט, #! / משתמש / PHP bin / env, כמו שראינו בפעם האחרונה. PHP. עכשיו אני הולך לדורש כולל config.php, למרות שאולי זה לגרום לשגיאה קלה. ועכשיו אני הולך קדימה ואומר שורות, שאילתא, כוכב בחר ממשתמשים, ועכשיו כאן אני הולך לעשות טכניקה מעת האחרונה לכל שורות ששורה. ואני הולך לעשות משהו פשוט. Printf נניח שם הוא זה, והמספר הוא, n קו נטוי זה. ועכשיו אני הולך לעבור בשורה לצטט שם סוף ציטוט, ומספר סוף ציטוט ציטוט שורה, ועכשיו בואו נלך קדימה וחלון המסוף שלי chmod + x זה לעשות התסריט הזה שנקרא הפעלה טקסט. ועכשיו בואו נרוץ טקסט. אוקיי, אז תתקדם. אז עכשיו שכתבתי קו תסריט פקודה, בשפה בשם PHP, ש, בגלל שדורש קו, יש לו גישה לכל תצורה אלה קבועים שצוינתי. שמו של בסיס הנתונים וכן הלאה. למעשה, רק שיהיה ברור שזה לא היה מקרי, תן לי ללכת קדימה ולהירשם, ממש מהר, מישהו אחר כמו רוב ואתן לו את המספר 555-1212. ועכשיו, אם אני מריץ את התסריט שוב, שים לב לכח של מה שאנחנו עושים עם מסד הנתונים. מה עכשיו ראיתי מייד שתי שורות אחרות נמצאות במסד הנתונים שלי. אז עכשיו בואו ננסה לעשות משהו אפילו מהודר יותר בתוך, וזה חלק שיש לנו לא נבדק מראש, אז בפעם האחרונה שעשתה את זה דברים הלכו בצורה נוראה השתבש, יש לנו וידאו על כך. למעשה, כן, מצחיק בצד. אז בפעם האחרונה, ב להרצות כמו לפני שנתיים, החלטנו, אני החלטתי, להיות כל זה יהיה רעיון נהדר כדי ליצור באופן דינמי מיילים ב כיתה, תוך שימוש בכל CS50 בסיס הנתונים תלמידים, שנתנו לנו את מספרם וספקי הסלולר שלהם שבו אתה אולי זוכר מpset0, איך לנמק, מתברר היה לי באגים קטנים בתכנית שלי ו עשיתי כמה טעויות בשנת 2012, אני חושב. לפי, שהייתי לי ללולאה ש עשה דבר כזה בדיוק, iterating על בסיס הנתונים, מקבל שם מבסיס הנתונים, שם מבסיס הנתונים, ולאחר מכן על כל אחד איטרציה של לולאה ששלחתי דוא"ל. אבל במקום לשלוח דואר אלקטרוני אחת, אני שלח דוא"ל אחד איטרציה הראשונה, ושני מיילים חזרה השניה, שנשלחו שלושה מיילים חזרה השניה, ש כפי שאתה אולי זוכר משלנו דיון בסימון אסימפטוטי O זה גדול של רע, כמו n בריבוע הוא כמה הודעות ששלחתי, אבל זה לא היה אפילו מיילים זה היה הודעות טקסט. וכמו שאתה יודע, נוכחות היא לא סופר גבוה לקראת סוף הסמסטר ואז חשבתי שזה יהיה חמוד ב הזמן לומר, "למה לא בכיתה אתה?" בי הודעת הטקסט נשלח לכל הכיתה, וזה היה מצחיק לרוצה 50% מ כיתה, אבל 50% האחרים, שחלקם נבהל, שלחתי להפליא הערות מתוקות מתנצלת לצוות להתנצל על שהחמיץ את ההרצאה פשוט זה פעם אחת, נכון? כך שהיית נורא השתבש. וברוח התקופה, בואו ננסה את זה שוב, אבל עם המספר שלי. מראש, בfunctions.php, שכתבתי בפונקציה זו כאן. זה נקרא טקסט, וזה לוקח בשלוש טענות. מספר, ספק, והודעה. אני משתמש בהצהרה בורר, ש הנפלא PHP לקחת מחרוזות, לא רק מספרים שלמים, ואני לא יישמנו כל התמיכה לכך עדיין, רק שעשיתי AT & T ו- Verizon. כי מתברר כי עם ספקים אלה יש להם דואר אלקטרוני לשערי SMS, שבו אתה באמת יכול לשלוח דוא"ל לכתובת כמו מספר הטלפון בvtext.com ואם המשתמש אינו חסום ההודעות, זה יעברו היא הודעת טקסט. עכשיו לעשות את זה, אני הולך צריך להוסיף תחום אחד ממש מהר לבסיס הנתונים שלי. אני הולך להיכנס המבנה שלי, ואני הולך קדימה ולהוסיף שדה בקצה השולחן. בואו לחצו על Go, ואני הולך להתקשר ספק זה ועכשיו אני הולך תשאיר את זה כטקסט בר, אבל אנחנו יכולים להיות מפוארים יותר בעתיד. אני הולך לעבור במהירות לשולחן שלי, ואני הולך להיפטר מרוב, כי זה מספר מזויף, אני הולך להיכנס לעריכה פה ואני הולך לשנות הספק שלי באופן ידני להיות Verizon, שבו הוא, ועכשיו כאן. בואו לעשות בדיקת שפיות מהירה. בואו לפתוח את תסריט הטקסט שלנו, ש נראה כך, מוביל הוא% s. אנחנו עושים שגיאה הרבה יותר בדיקה ממה שעשיתי בשנת 2012, ספק. ועכשיו, אני הולך ללכת קדימה ולהפעיל מחדש את התסריט. אישור. מוביל הוא Verizon, מה שאומר ש עכשיו אני מקווה שאני יכול לעשות בדיוק את זה. כראוי השנה, בתקווה, הנה זה באנו. אז בתוך זה ללולאה, אני הולך להיות printf זה לא רק, אני גם הולך לקרוא טקסט ו השימוש בזיכרון בפונקציה זו היה לוקח מספר, מוביל, והודעה. אז בואו נראה, מספר הולך להיות סוף ציטוט ציטוט שורה "מספר," ציטוט שורה "מוביל," סוף ציטוט והאחרון הייתה הודעה. אל תדפוק את זה שנה, פסיק. אישור. אני מחזיק אצבעות. בואו אראה אם ​​זה עובד. בסדר, כל כך. הנה אנחנו מתחילים. בואו לפתוח את הטלפון, תחזיק האצבעות, לעזאזל. may-- משתנה לא מוגדר הו חכה, חכה, חכה, ממש מהר. ממש מהר, ממש מהר. זה לגמרי שווה את זה. תן לי לתפוס, תנו לי לתפוס, אה-אה. תודה לך, יש לי הטקסטים התחיל ממישהו אחר. תנו לי ללכת קדימה, לפתוח את אמת מהיר, dropbox.php / דואר כאן. המתנה. לגמרי שווה את זה. הורדות. אישור, src8m המקור. אישור. צריך קו אחד נוסף כאן. אה זה מה שיש, זה בפרוש IMs, זה בקופה בשלוש. הלו, מרגו, תודה רבה לך. אישור, והיה חסר לי הקו הזה כאן. אז תן לי לתפוס במהירות הקו הזה של קוד, הכולל את הדואר או בספרייה כי אני ממש רוצה להשתמש, אני הולך במהירות לחזור לפונקציות, אני מתכוון ללכת לחלק העליון של זה להגיש ודורש בקובץ זה, כמו גם, ועכשיו אני הולך באמת לחצותי אצבעות כשאני חוזר לפקודה קו תסריט, שהוא חלק פנימי של ספריית המארח המקומית של היום. טקסט הפעלה. הזן. דואר. המתנה. המתנה. דואר. אה, בסדר. הנה אנחנו מתחילים. דואר מקבל דיוור PHP חדש. האם אני עושה את זה נכון? לעזאזל. To-- הו, חכה, חכה, חכה. Stand by. אני מבטיח, זה הוא הולך להיות כל כך שווה את זה. כתובת. זו הסיבה שאני לא עושה דוגמאות ממש לפני הכיתה. איכס. הנמענים הבאים נכשלו. בואו ננסה עוד דבר אחד אחרון. SMTP מוגדר מ, להוסיף את כתובת, הכתובת היא אכן ש. בואו ננסה חלק האחרון בכתובת. אה, אני באמת עצוב עכשיו. תודה לך. אבל אני באמת מעריך את כל הטקסטים שאתה כבר שולח. יש לך דוד זה. אתה מעיף אותה. בואו נשאיר את זה שם ו אנחנו נתקן ביום שני. אז נתראה. להתפלל פארנהאם: ועכשיו עמוק מחשבות על ידי בדייבן פארנהאם. אם עץ בינארי נופל ביער ו אף אחד לא בסביבה כדי C [מצחקק] it--.