1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [שבוע 9] 2 00:00:02,570 --> 00:00:04,740 [דוד י מלאן - אוניברסיטת הרווארד] 3 00:00:04,740 --> 00:00:07,170 [זה CS50. - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 בסדר. ברוך שובך. זה CS50, וזהו תחילתו של שבוע 9. 5 00:00:12,350 --> 00:00:16,600 היום אנחנו מתמקדים בייחוד בתכנון, כבר לא בהקשר של ג 6 00:00:16,600 --> 00:00:20,010 אבל בהקשר של PHP וקצת SQL וקצת JavaScript, 7 00:00:20,010 --> 00:00:23,730 בייחוד לקראת סוף הוא 7 pset וגם פרויקט הגמר שלך. 8 00:00:23,730 --> 00:00:26,310 למעשה, אם אתה נמצא בשלב זה בפרויקט הגמר שלך 9 00:00:26,310 --> 00:00:30,100 שם כנראה החל משעה בערך לפני שהתחלת לפחות לתת קצת מחשבה 10 00:00:30,100 --> 00:00:33,730 לפרויקט הגמר שלך ואתה חושב שאתה רוצה לשתף פעולה עם חבריו לכיתה 1 או 2, 11 00:00:33,730 --> 00:00:36,150 אם אתה נתקלת בבעיות בהתחברות עם חברים לכיתה אמרה, 12 00:00:36,150 --> 00:00:40,570 תרגיש חופשי למלא את הטופס בcs50.net/partners/form. 13 00:00:40,570 --> 00:00:42,880 זה פשוט שואל אותך מי אתה, איזה סוג של פרויקט אתה חושב על, 14 00:00:42,880 --> 00:00:44,870 איפה אתה גר רק מסיבות לוגיסטיות. 15 00:00:44,870 --> 00:00:49,510 ואז, אם אתה רוצה לשמור על עין על בשבוע הבא או כך את כתובת אתר הגיליון האלקטרוני לשם, 16 00:00:49,510 --> 00:00:53,520 אז אתה יכול לראות גרסה לקריאה בלבד של Google Doc 17 00:00:53,520 --> 00:00:56,010 שבה אנו אוספים את המידע הזה. 18 00:00:56,010 --> 00:00:58,930 אז אם אתה רוצה לעבוד עם מישהו, בכל האמצעים יהססו להושיט יד לאנשים 19 00:00:58,930 --> 00:01:00,480 באמצעות מנגנון זה. 20 00:01:00,480 --> 00:01:02,690 אבל רוב האנשים מבצעים את הסולו עבודה. זה בסדר גמור. 21 00:01:02,690 --> 00:01:06,120 אז אל תרגיש שזה בכל דרך מחייבת. 22 00:01:06,120 --> 00:01:09,680 ביום שישי זה היה רק ​​אני ועוד כמה מצוות בפה, 23 00:01:09,680 --> 00:01:11,100 תיאטרון ריק ברובו. 24 00:01:11,100 --> 00:01:14,600 3 תיירים יש יושבים שם למעלה, וזה היה קצת מביך. 25 00:01:14,600 --> 00:01:18,970 מה שדברנו עליו היה מסדי נתונים ודברנו על 7 קצת pset. 26 00:01:18,970 --> 00:01:22,200 ואם אתה לא במקרה העכבר שבוידאו עדיין, זה בסדר. 27 00:01:22,200 --> 00:01:26,770 אני אנסה להגדיר את כל תנאים שאנחנו אחרת היו לוקחים כמובן מאליו 28 00:01:26,770 --> 00:01:28,840 המבוסס על הרצאתו של יום שישי. 29 00:01:28,840 --> 00:01:32,550 >> אבל היום אנחנו הולכים לנסות להשיג אותך לנקודה 30 00:01:32,550 --> 00:01:34,990 של לא רק להיות מסוגל לעשות משהו כמו 7 pset 31 00:01:34,990 --> 00:01:37,360 אבל באמת להבין מה קורה מתחת למכסת המנוע, 32 00:01:37,360 --> 00:01:41,910 במיוחד כמה מההפשטות שאנחנו מכניסים למקום בקובץ functions.php 33 00:01:41,910 --> 00:01:45,780 כדי להפוך את חייך קצת יותר קלים, אלא כדי שסופו של הדבר מבין 34 00:01:45,780 --> 00:01:48,760 כך שכאשר את גלגלי העזר יורדים בכמה שבועות אתה עדיין יכול לשרוד 35 00:01:48,760 --> 00:01:53,750 בעולם האמיתי ולעשות את הדברים האלה בלי שום CS50 מסגרת מתחתיך. 36 00:01:53,750 --> 00:01:57,500 זה _SESSION $, לאלה מכם שאינם מכירים 37 00:01:57,500 --> 00:02:01,960 או שכבר תפס את הסרטון ביום שישי, מה SESSION נותן לנו לעשות 38 00:02:01,960 --> 00:02:04,330 ביישום אינטרנט PHP מבוסס? 39 00:02:04,330 --> 00:02:09,650 זה משתנה superglobal, מה שאומר שזה דומה ברוח ולGET POST 40 00:02:09,650 --> 00:02:13,970 ועוד כמה אחר, אבל מה זה דבר הזה שימושי ל? 41 00:02:13,970 --> 00:02:18,320 >> מה הוא משמש למושב? כן. [תלמיד] להיכנס פנימה 42 00:02:18,320 --> 00:02:21,040 סליחה? [תלמיד] להיכנס פנימה התחברות פנימה ואכן. 43 00:02:21,040 --> 00:02:25,100 ב7 pset אנו משתמשים superglobal מושב זה כדי להקל על כניסה פנימה 44 00:02:25,100 --> 00:02:28,600 ומה שיפה superglobal זה הוא שזה מערך אסוציאטיבי. 45 00:02:28,600 --> 00:02:33,190 מערך אסוציאטיבי, כזכור, הוא רק מערך אבל מדדים שכבר לא צריך להיות מספרים 46 00:02:33,190 --> 00:02:37,670 כמו 012. הם יכולים להיות מספרים או שהם יכולים להיות אפילו מייתרים. 47 00:02:37,670 --> 00:02:44,890 ולכן אם כבר צללת לתוך 7 pset עדיין, אם אתה זוכר שאנחנו מאחסנים זיהוי שם מפתח 48 00:02:44,890 --> 00:02:50,330 בתוך מערך אסוציאטיבי זה ששוויו הוא משהו כמו 123 - 49 00:02:50,330 --> 00:02:53,780 כל מה שמחובר כעת בזהותו של המשתמש הוא. 50 00:02:53,780 --> 00:02:59,470 המוטיבציה לכך היא שגם לאחר שהמשתמש בקר localhost 51 00:02:59,470 --> 00:03:02,720 או באתר האינטרנט שלי באופן כללי יותר, ואז הם כבר מחובר, 52 00:03:02,720 --> 00:03:07,320 גם אם הם לא לוחצים על קישור או לחזור לאתר שלי במשך 5 דקות 53 00:03:07,320 --> 00:03:10,730 או אפילו שעות או אפילו יום, אבל הם עוזבים את חלון הדפדפן שלהם פתוחים, 54 00:03:10,730 --> 00:03:14,370 דרך superglobal זה אני יכול לזכור שהם מחוברים פנימה 55 00:03:14,370 --> 00:03:21,140 >> במילים אחרות, זה מאפשר לי לאחסן כל דבר לטווח ארוך במקצת אני רוצה על משתמש. 56 00:03:21,140 --> 00:03:24,390 ואתה יכול לחשוב על זה באמת כהתגלמות של עגלת קניות. 57 00:03:24,390 --> 00:03:27,740 מקומות כמו אמזון ברור לך לשים דברים לתוך עגלת קניות, 58 00:03:27,740 --> 00:03:32,230 אבל HTTP, הפרוטוקול כי סמכויות האינטרנט, הוא חסר מדינה 59 00:03:32,230 --> 00:03:34,230 במובן זה שכאשר אתה מבקר באתר אינטרנט, 60 00:03:34,230 --> 00:03:37,290 על פי רוב אין לך קשר כלשהו לרשת קבוע 61 00:03:37,290 --> 00:03:39,270 בין הדפדפן שלך לבין השרת. 62 00:03:39,270 --> 00:03:42,190 ברגע שהורדת את ה-HTML ואת התמונות JPEG וקבצי GIF וכל זה, 63 00:03:42,190 --> 00:03:48,200 החיבור נעלם ואתה רק צריך עותק של HTML ומה לא מהשרת. 64 00:03:48,200 --> 00:03:53,000 אבל אם השרת רוצה לזכור משהו עליך, 65 00:03:53,000 --> 00:03:57,580 הניטל הוא על השרת ממש להקליט את המידע הזה. 66 00:03:57,580 --> 00:04:00,130 ואז אתה מתכנת שיש להם שליטה על השרת 67 00:04:00,130 --> 00:04:04,400 יכול לשים את כל מה שאתה רוצה בתוך המערך האסוציאטיבי superglobal זה 68 00:04:04,400 --> 00:04:06,850 וזה יהיה שם בפעם הבאה שהמשתמש חוזר, 69 00:04:06,850 --> 00:04:12,070 אם זה דקות או אפילו כעבור ימים, אלא אם כן הם יסגרו את חלון הדפדפן שלהם, 70 00:04:12,070 --> 00:04:14,360 במושב שהנקודה נעלם. 71 00:04:14,360 --> 00:04:17,779 אז זה אחסון ארעי, זה שאינו מתמשך, וזה אמור להיעלם 72 00:04:17,779 --> 00:04:22,360 ברגע שהמשתמש סוגר את הדפדפן שלהם - לא רק שהכרטיסייה, לעתים קרובות כל הדפדפן, 73 00:04:22,360 --> 00:04:24,930 כך למעשה להתנתק המשתמש. 74 00:04:24,930 --> 00:04:28,000 אז איך הדבר הזה למעשה מיושם? 75 00:04:28,000 --> 00:04:31,360 בואו נעיף מבט מהיר בדוגמה פשוטה הסתכלנו ביום שישי. 76 00:04:31,360 --> 00:04:33,340 עבור אלה שלא הכיר, זה היה פשוט כמו זה. 77 00:04:33,340 --> 00:04:35,910 זהו דף אינטרנט שכל מטרתם בחיים הוא להגיד לי 78 00:04:35,910 --> 00:04:38,000 כמה פעמים בקרו בדף זה. 79 00:04:38,000 --> 00:04:41,670 זוהי הפעם הראשונה כאן ביום שני שבו בקר אותו, כך שזה אומר 0 פעמים. 80 00:04:41,670 --> 00:04:46,940 >> אבל אם אני מתחיל מחדש דף זה, זה אומר שהגיע זמן 1, 2, 3, 4, 5, 81 00:04:46,940 --> 00:04:49,800 וזה יהיה סופו של דבר רק לשמור על ספירה מעלה, מעלה, מעלה, מעלה, מעלה 82 00:04:49,800 --> 00:04:53,130 עבור כל פעם שאני לוחץ בפועל טענתי על זה. 83 00:04:53,130 --> 00:04:58,830 אז איך זה עובד? תן לי ללכת בתוך הקובץ הזה שנקרא counter.php. 84 00:04:58,830 --> 00:05:02,490 החלק העליון שלו הוא כל ההערות הכחולות, אבל חלק המעניין הוא כאן. 85 00:05:02,490 --> 00:05:06,670 בקו 13 שאנו מכנים session_start פונקציה זו, 86 00:05:06,670 --> 00:05:09,600 וזה ממש כל מה שאתה צריך לעשות אם אתה רוצה לקבל גישה 87 00:05:09,600 --> 00:05:13,610 לsuperglobal המיוחד הזה שנקרא $ _SESSION. 88 00:05:13,610 --> 00:05:17,430 זה הופך את זה לאפשרי, ואנו רואים ברגע איך זה בכלל אפשרי. 89 00:05:17,430 --> 00:05:20,350 בהודעת הקו 16 מה אני עושה. 90 00:05:20,350 --> 00:05:25,960 אם המפתח, הנקרא להתמודד - במילים אחרות, ערך המדד - "נגד" 91 00:05:25,960 --> 00:05:32,310 קיים בתוך המערך הזה שנקרא מושב, אז מה אני עושה עם זה בשורה מתחת? 92 00:05:32,310 --> 00:05:36,650 מהו קו 18 עושים? 93 00:05:36,650 --> 00:05:40,360 >> [תגובת תלמיד לא נשמעה] מה זה? [תלמיד] אחסון הערך. טוב. 94 00:05:40,360 --> 00:05:45,800 זה אחסון הערך זה במושב עכשיו במשתנה זמנית מקומית חדשה, 95 00:05:45,800 --> 00:05:48,250 דלפק $ בכל האותיות קטנות. 96 00:05:48,250 --> 00:05:50,770 שים לב שPHP כבר להיות קצת עצלן כאן. 97 00:05:50,770 --> 00:05:55,550 שים לב שאין לנו כל אזכור של int או float או מחרוזת או משהו כזה 98 00:05:55,550 --> 00:06:00,480 כי PHP היא הקלדה חלושה, שבה אתה לא צריך לציין את הסוג משתנה, 99 00:06:00,480 --> 00:06:03,310 ובמקרה הזה כאן אני אפילו לא הכרזתי עליו עדיין. 100 00:06:03,310 --> 00:06:08,980 אני מצהיר על זה בתוך הסוגריים המסולסלים האלה ושלא כמו C, זה דווקא בסדר. 101 00:06:08,980 --> 00:06:13,800 לא משנה כמה מקונן הכרזה של משתנה עמוקה הוא ב-PHP - 102 00:06:13,800 --> 00:06:16,650 בתוך סד מתולתל, בתוך סד מתולתל וכמו - 103 00:06:16,650 --> 00:06:21,230 זה יהיה באותו הרגע בזמן קיים לשארית התכנית, 104 00:06:21,230 --> 00:06:22,680 לטוב או לרע. 105 00:06:22,680 --> 00:06:26,930 אז זה מייד הופך גלובלי ברגע שאתה מגדיר את זה כמו שאנחנו עושים כאן. 106 00:06:26,930 --> 00:06:31,620 >> אחרת, אם אני לא מוצא שיש משהו בsuperglobal המושב, 107 00:06:31,620 --> 00:06:34,680 אני כנראה אני מאתחל נגדי משתנה זה 0, 108 00:06:34,680 --> 00:06:37,580 וכך רק בהנחה שהמשתמש מעולם לא היה כאן בעבר. 109 00:06:37,580 --> 00:06:40,030 ואז זה כמובן הוא להגדיל כל זמן את המונה איך? 110 00:06:40,030 --> 00:06:44,480 אני מעדכן את הערך שיש בפנים של מערך אסוציאטיבי זה 111 00:06:44,480 --> 00:06:49,530 על ידי הגדרתה שווה לכל דלפק הוא כרגע + 1. 112 00:06:49,530 --> 00:06:53,520 אם אני כאן כדי לגלול מטה ה-HTML של הדף, זה בעצם די פשוט. 113 00:06:53,520 --> 00:06:58,920 כל מה שיש בגופו של דף זה, "יש לך בקר באתר זה פעמים כה וכה." 114 00:06:58,920 --> 00:07:00,350 וזו היא מבנה של PHP. 115 00:07:00,350 --> 00:07:06,080 אם אתה עושה 00:07:12,600 זה באמת שווה ערך למשהו כמו printf, שראינו פעמים רבות ב-C, 117 00:07:12,600 --> 00:07:15,940 אם כי, כפי שאתה ודאי יודע כבר מהמפרט ב7 pset, 118 00:07:15,940 --> 00:07:20,160 הדפסה היא גם פונקציה שרק מדפיסה משהו, זה לא ממש להשתמש בקודים בפורמט, 119 00:07:20,160 --> 00:07:23,270 ואתה באמת יכול להגיד הד גם כן. 120 00:07:23,270 --> 00:07:27,460 הם כולם לא היה בצורה למרות שהתוצאה הסופית היא סופו של דבר את אותו הדבר. 121 00:07:27,460 --> 00:07:31,270 אז השימוש הזה של סימן שווה הוא רק סוג של דרך אלגנטית לעשות את זה 122 00:07:31,270 --> 00:07:34,910 באופן תמציתי יותר ממה שאתה יוכל אולי ל. 123 00:07:34,910 --> 00:07:38,370 אז זה כל מה שהאתר הזה עושה. זה מדפיס את ערכו של נגד. 124 00:07:38,370 --> 00:07:40,550 איך כל זה באמת קורה? 125 00:07:40,550 --> 00:07:43,250 אולי אתה זוכר לפני שבוע בערך התחלנו לחפש מתחת למכסת המנוע 126 00:07:43,250 --> 00:07:47,910 כיצד דף אינטרנט עובד באמצעות כרטיסיית מפקח זה. 127 00:07:47,910 --> 00:07:51,900 >> כרום יש גם את זה בגרסת המק, הגרסה של Windows, ואפילו גרסה של לינוקס, 128 00:07:51,900 --> 00:07:59,510 ופיירפוקס ואקספלורר יש מנגנונים דומים לפיה יש לך הבאגים מובנים זה 129 00:07:59,510 --> 00:08:01,400 בתוך הדפדפן. 130 00:08:01,400 --> 00:08:03,040 בואו נסתכל על הבא. 131 00:08:03,040 --> 00:08:06,960 יש לנו חבורה שלמה של כרטיסיות כאן, וזוכרים שהאחד השמאלי ביותר הוא אלמנטים, 132 00:08:06,960 --> 00:08:10,700 ולא משנה כמה איום ונורא הוא HTML ו-JavaScript בדף, 133 00:08:10,700 --> 00:08:15,710 זוכר שעם כרטיסיית האלמנטים למעשה אתה יכול לנווט את ה-HTML היררכי 134 00:08:15,710 --> 00:08:17,050 ונחמד ויפה. 135 00:08:17,050 --> 00:08:19,370 אז אם אתה מנסה ללמוד מאתר אינטרנט כמו גוגל או פייסבוק 136 00:08:19,370 --> 00:08:22,370 או בעצם כל אתר אינטרנט, מבין שאתה כנראה יותר טוב 137 00:08:22,370 --> 00:08:26,360 מסתכל על קוד המקור בדרך זו, בניגוד לצפייה במקור הגלם, 138 00:08:26,360 --> 00:08:29,580 מה שיכול להיות בלגן, כפי שראינו במיוחד באתר של גוגל. 139 00:08:29,580 --> 00:08:32,220 אז אם אני במקום לוחץ על כרטיסיית הרשת כאן, 140 00:08:32,220 --> 00:08:34,830 בואו לראות מה קורה כשאני מבקר בדף זה. 141 00:08:34,830 --> 00:08:38,669 ראשית הרשה לי לנקות את המטמון שלי. 142 00:08:38,669 --> 00:08:43,570 אני הולך להיכנס להגדרות ב-Chrome ואז ללכת להיסטוריה 143 00:08:43,570 --> 00:08:46,420 ולאחר מכן נקה את כל נתוני הגלישה. 144 00:08:46,420 --> 00:08:48,170 ייתכן שאתה רגיל לעשות את זה למטרות אחרות, [שחוק] 145 00:08:48,170 --> 00:08:51,990 אבל כשזה מגיע לאתרים מתפתחים, זה בעצם שימושי - 146 00:08:51,990 --> 00:08:55,980 אם אתה צוחק, אתה יודע. [שחוק] 147 00:08:55,980 --> 00:08:59,310 זה ממש ממש שימושי בעת פיתוח אתרי אינטרנט כי המציאות היא 148 00:08:59,310 --> 00:09:04,100 דברים כמו עוגיות ודברים כאלה קבצי HTML, קבצי מטמון JavaScript מטמון 149 00:09:04,100 --> 00:09:06,390 באמת יכול להיות כאב ראש גדול, כי אם מסיבה כלשהי 150 00:09:06,390 --> 00:09:11,500 הדפדפן מחליט מטמון חלק קובץ ועדיין אתה בצעת שינויים בקובץ בשרת 151 00:09:11,500 --> 00:09:14,670 אבל הדפדפן לא באמת הבין שהקובץ השתנה 152 00:09:14,670 --> 00:09:19,060 ולכן לא ממש מחדש להוריד אותו גם כשאתה לוחץ על הכפתור הרענן, 153 00:09:19,060 --> 00:09:23,210 אחת הדרכים הבטוחות ביותר רק כדי לוודא שהאשמה היא לא בקוד שלך, 154 00:09:23,210 --> 00:09:26,480 זה עם ההתנהגות של הדפדפן, הוא ללכת לכאן בדפדפן שלך 155 00:09:26,480 --> 00:09:29,950 ורק לנקות את כל ההיסטוריה כך שאין שום בלבול. 156 00:09:29,950 --> 00:09:33,210 >> ואז, אם אתה באמת רוצה להיות פרנואידית, להפסיק דפדפן, הפעל אותו מחדש, 157 00:09:33,210 --> 00:09:35,660 ואז לוודא שהכל עובד כצפוי. 158 00:09:35,660 --> 00:09:38,820 אז בקיצור, מטמון הסליקה הוא טוב כשעושים פיתוח. 159 00:09:38,820 --> 00:09:40,690 אז הנה יש לנו את כרטיסיית הרשת. 160 00:09:40,690 --> 00:09:46,020 אני קודם לכן בקרתי באתר 9 פעמים, אבל תן לי ללכת קדימה עכשיו ולחץ על רענן. 161 00:09:46,020 --> 00:09:47,500 ואני מחזיר עד 0. 162 00:09:47,500 --> 00:09:52,100 בואו לראות איך זה בעצם הוא שsuperglobal מושב זה מיושם. 163 00:09:52,100 --> 00:09:55,990 אני הולך ללחוץ על בקשת 1 HTTP שנעשה, 164 00:09:55,990 --> 00:09:58,810 וחלון ניפוי זה מאפשר לי להסתכל בתוך זה. 165 00:09:58,810 --> 00:10:01,970 כאן אני רואה רק תגובה מהשרת, וזה לא מעניין. 166 00:10:01,970 --> 00:10:04,030 אני ראיתי את זה בכל מיני דרכים. 167 00:10:04,030 --> 00:10:06,350 אבל מה מעניין מבחינה טכנית הם את הכותרות. 168 00:10:06,350 --> 00:10:11,770 אם אני לגלול למטה כאן ולהתמקד בכותרות הבקשה ולחץ על צג מקור, 169 00:10:11,770 --> 00:10:14,400 מה שאני הולך לראות אותו, פשוטו כמשמעו, בקשת HTTP 170 00:10:14,400 --> 00:10:17,250 שרק עבר מהדפדפן שלי לשרת, 171 00:10:17,250 --> 00:10:21,400 GET להיות הפעיל Word ולאחר מכן / counter.php להיות שם הקובץ, 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1 פשוט להיות הגרסה של HTTP שהדפדפן שלי משתמש. 173 00:10:25,670 --> 00:10:31,070 קו זה הנה תזכורת קטנה מדפדפן לשרת מה השם של השרת הוא 174 00:10:31,070 --> 00:10:33,020 שהיא רוצה לדבר איתו. 175 00:10:33,020 --> 00:10:38,200 ולאחר מכן את שאר לפעמים זה מעניין אבל זה לא רלוונטי כרגע. 176 00:10:38,200 --> 00:10:40,090 >> זה פשוט סוג של סקרנות. 177 00:10:40,090 --> 00:10:43,530 Cryptic שמחרוזת זו היא, בכל פעם הדפדפן שלך מבקרת באתר 178 00:10:43,530 --> 00:10:47,110 הוא הודיע ​​השרת מה דפדפן שאתה משתמש 179 00:10:47,110 --> 00:10:50,040 ואיזו מערכת הפעלה אתה משתמש ומה הגרסה. 180 00:10:50,040 --> 00:10:52,650 אז אם אי פעם תהו איך אתרים כמו CNN ומה לא 181 00:10:52,650 --> 00:10:56,860 יודע מה האחוזים של משתמשי מקינטוש באינטרנט, משתמשי ה-PC, 182 00:10:56,860 --> 00:11:00,820 משתמשי IE, משתמשי כרום וכדומה, זה בגלל שכל הדפדפנים שלנו 183 00:11:00,820 --> 00:11:04,300 מספרים בכל אתר אינטרנט אחד בחוץ מה שאנחנו. 184 00:11:04,300 --> 00:11:07,410 זה לא בהכרח מכיל מידע אישי, 185 00:11:07,410 --> 00:11:13,060 אבל זה כן אומר שרת מה כתובת ה-IP שלך היא ומה דפדפן ומערכת הפעלה אתה משתמש. 186 00:11:13,060 --> 00:11:14,720 אז זה שבו מידע זה. 187 00:11:14,720 --> 00:11:19,960 אבל מה שיותר מעניין עכשיו כשזה מגיע למפגשים האלה הוא בכותרת התגובה. 188 00:11:19,960 --> 00:11:22,530 תן לי לחצו על צג מקור לצד תגובה. 189 00:11:22,530 --> 00:11:24,590 מה שמעניין כאן הוא כמה דברים. 190 00:11:24,590 --> 00:11:27,580 1, שחזרנו קוד מצב של 200. 191 00:11:27,580 --> 00:11:29,840 אנחנו אף פעם לא רואים את קוד המצב הזה כי זה אומר שמכיל בסדר. 192 00:11:29,840 --> 00:11:32,920 זה אומר פשוטו כמשמעו בסדר בניגוד למשהו אחר. 193 00:11:32,920 --> 00:11:36,380 מה מספר לפעמים אנחנו רואים שזה רע? [תלמיד] 404. 194 00:11:36,380 --> 00:11:39,860 404, קובץ לא נמצא, 403 ייתכן שתקלעו לכבר, 195 00:11:39,860 --> 00:11:43,660 שאסור, מה שאומר ששכחת משהו chmod, ככל הנראה. 196 00:11:43,660 --> 00:11:45,190 ויש חבורה של אחרים. 197 00:11:45,190 --> 00:11:47,760 >> כאן למטה, זה קצת מטורף. 198 00:11:47,760 --> 00:11:52,340 אני באמת פשוט כתבתי את הקובץ הזה לפני כמה דקות על ידי הדבקתו לgedit. 199 00:11:52,340 --> 00:11:57,100 למה דף זה יפוג בשנת 1981 לפני שבאמת לא היה אינטרנט? 200 00:11:58,010 --> 00:12:00,730 מה קורה שם? 201 00:12:00,730 --> 00:12:04,390 >> [תגובה בלתי נשמעת תלמיד] חותמת הזמן. אבל למה? 202 00:12:06,110 --> 00:12:09,120 זה קצת שרירותי, אבל זה באמת שימושי. 203 00:12:09,120 --> 00:12:15,500 מה שזה אומר לדפדפן שלי הוא קובץ PHP זה פשוט שבקשת כבר פג. 204 00:12:15,500 --> 00:12:18,580 למעשה, זה פג לפני 30 שנים. 205 00:12:18,580 --> 00:12:20,260 אבל מה זה באמת אומר? 206 00:12:20,260 --> 00:12:22,500 זה רק אומר שהפעם הבאה שהמשתמש מבקר בדף זה, 207 00:12:22,500 --> 00:12:25,540 אם על ידי טעינה מחדש או להקליד את כתובת האתר בשורת הכתובת, 208 00:12:25,540 --> 00:12:28,010 הקפד ללכת ולהביא עותק חדש שלו. 209 00:12:28,010 --> 00:12:30,840 זה סוג של דוגמה של קורע מטמון, 210 00:12:30,840 --> 00:12:33,790 מילה מטופשת שרק אומרת שמנסה לרפות דפדפנים 211 00:12:33,790 --> 00:12:37,260 למעשה מHTML מטמון שכבר נשלחו מהשרת 212 00:12:37,260 --> 00:12:41,490 כדי שלא פגע בטעות רעננה ולאחר מכן תראה את אותה הגרסה של הקובץ. 213 00:12:41,490 --> 00:12:43,730 למעשה אתה רוצה לשרת לשלוח עותק חדש. 214 00:12:43,730 --> 00:12:47,440 אז העובדה שזה 1981 רק אומרת שזה מה שהמכשיר הוא בחירה 215 00:12:47,440 --> 00:12:50,280 כתאריך שרירותי בעבר. 216 00:12:50,280 --> 00:12:53,380 אבל השורה העסיסית האמיתית היא עכשיו זה אחד. 217 00:12:53,380 --> 00:12:57,550 גם לפני 50 אתה כנראה מוכר לו עוגיות. 218 00:12:57,550 --> 00:13:01,820 נכון לעכשיו, ובמיוחד בקרב פחות נוח או בין לבין, 219 00:13:01,820 --> 00:13:04,120 מה היא עוגייה בהבנה שלך עכשיו 220 00:13:04,120 --> 00:13:06,980 למרות שאנו עומדים להפוך את ההבנה שלך יותר טכנית? 221 00:13:08,150 --> 00:13:10,070 מה עוגייה? כן. 222 00:13:10,070 --> 00:13:13,890 [תלמיד] מידע על המשתמש, כמו אם הם רשמו את שמו או משהו המשתמש שלהם. 223 00:13:13,890 --> 00:13:17,370 >> טוב. זה מידע על המשתמש, בין אם הם הקלידו את שם המשתמש שלהם כבר. 224 00:13:17,370 --> 00:13:21,190 עוגיות הן דרך שבי שרתים יכולים לזכור משהו על משתמש. 225 00:13:21,190 --> 00:13:25,810 ומה באמת היא עוגייה הוא קובץ טקסט או רצף כלשהו של בתים 226 00:13:25,810 --> 00:13:28,340 השתול על השרת הפנימי של הדפדפן שלך, 227 00:13:28,340 --> 00:13:31,960 ובתוך שהקובץ או בין הבתים האלה הם סוג כלשהו של מזהה. 228 00:13:31,960 --> 00:13:35,640 אולי זה פשוטו כמשמעו, שם המשתמש שלך, אבל לעתים קרובות יותר זה משהו יותר מסתורי למראה 229 00:13:35,640 --> 00:13:43,700 כמו הדבר הזה כאן - bo8dal3ct וכן הלאה - מחרוזת אלפאנומרי גדול באמת זה 230 00:13:43,700 --> 00:13:47,050 זה באמת פשוט נועד להיות מזהה ייחודי עבורך. 231 00:13:47,050 --> 00:13:49,790 או שאתה יכול לחשוב על זה כסוג של חותמת יד וירטואלית. 232 00:13:49,790 --> 00:13:53,020 אם אתה הולך למועדון כלשהו או פרק שעשועים, לזכור, כי אתה כבר שולמת בפועל 233 00:13:53,020 --> 00:13:55,850 ונעלם ב, הם שמים את מדבקה אדומה קטנה על היד מסוג כלשהו שלך, 234 00:13:55,850 --> 00:13:59,270 וזה מזכיר את האנשים בדלפק שכבר שלם 235 00:13:59,270 --> 00:14:01,340 ואתה יכול לבוא וללכת כרצונך. 236 00:14:01,340 --> 00:14:04,250 עוגיות הן קצת דומות בהרוח לזה. 237 00:14:04,250 --> 00:14:08,070 בפעם הראשונה שבקרתי באתר אינטרנט זה, כפי שעשיתי אני רק לאחר ניקוי המטמון שלי, 238 00:14:08,070 --> 00:14:11,620 שרת האינטרנט, המכשיר במקרה זה, לשים חותמת על היד שלי 239 00:14:11,620 --> 00:14:15,030 ששם PHPSESSID, מזהה הפעלה, 240 00:14:15,030 --> 00:14:18,260 הערך שלו היא מחרוזת אלפאנומרי באמת הארוכה הזה. 241 00:14:18,260 --> 00:14:22,470 >> אז זה סוג של מתנוסס עכשיו ביד שלי כל כך שבפעם הבאה אני מכה מחדש 242 00:14:22,470 --> 00:14:25,230 או ידני לבקר URL זה בדפדפן, 243 00:14:25,230 --> 00:14:29,230 הדפדפן שלי על ידי הגדרת HTTP הולך להציג חותמת היד 244 00:14:29,230 --> 00:14:31,940 שוב ושוב ושוב. 245 00:14:31,940 --> 00:14:34,550 אז למרות שהשרת לא בהכרח יודע מי אני, 246 00:14:34,550 --> 00:14:39,610 הם לפחות יודעים שאני אותו המשתמש, או לפחות, באופן ספציפי יותר, אותו הדפדפן. 247 00:14:39,610 --> 00:14:45,660 ואז זה הסוף של דבר איך superglobal המושב מיושם. 248 00:14:45,660 --> 00:14:51,200 השרת אין לו מושג מי אתה כאשר תבקר שוב באתר לשני או בפעם השלישית 249 00:14:51,200 --> 00:14:53,410 אלא אם אתה מציג את חותמת יד הזאת. 250 00:14:53,410 --> 00:14:55,530 וברגע שאתה מציג אותו בול יד, 251 00:14:55,530 --> 00:14:59,370 שרת האינטרנט בעצם הולך לבסיס נתונים קטנים משלו 252 00:14:59,370 --> 00:15:06,040 והמחאות, בסדר, יש לי רק לראות את חותמת ידו של bo8dal3ct משתמש וכן הלאה. 253 00:15:06,040 --> 00:15:09,850 תן לי לראות איזה מידע יש לאחסן המתכנת 254 00:15:09,850 --> 00:15:12,380 בתוך superglobal על משתמש זה, 255 00:15:12,380 --> 00:15:17,000 ולאחר מכן אפשר לוודא שנתונים שהם שוב בתוך מושב superglobal 256 00:15:17,000 --> 00:15:19,830 כך שהמתכנת יכול מחדש לגשת לנתונים 257 00:15:19,830 --> 00:15:23,360 גם אם היא הוקמה לפני כמה דקות או שעות. 258 00:15:23,360 --> 00:15:26,150 אז במילים אחרות, עוגיות, אשר קבלו ראפ רע במשך זמן מה 259 00:15:26,150 --> 00:15:29,990 בגלל חוסר ביטחון בדפדפנים והם יכולים באמת מפרים את הפרטיות שלנו וכל זה, 260 00:15:29,990 --> 00:15:31,900 הם למעשה יש תועלת גדולה כי בלעדיהם 261 00:15:31,900 --> 00:15:36,110 אתה כל זמן יהיה בכניסה לכל דף בפייסבוק שאתה מבקר 262 00:15:36,110 --> 00:15:40,680 או כל הדוא"ל Gmail שלך לקרוא אם הדפדפן לא היה לי איזו דרך לזכור 263 00:15:40,680 --> 00:15:43,320 שכבר מאומת. 264 00:15:43,320 --> 00:15:46,640 >> אז בדרך זו cookie נשלח הלוך ושוב מעבר לגדר. 265 00:15:46,640 --> 00:15:52,470 סקרנות נוספת על עוגיות, במיוחד כאן, היא שזה לחלוטין בטקסט. 266 00:15:52,470 --> 00:15:54,930 אין הצפנה קורית כאן בכלל, 267 00:15:54,930 --> 00:15:57,240 ואכן אני משתמש HTTP באותו הרגע. 268 00:15:57,240 --> 00:16:00,890 אחד הרגעים האהובים עלינו בCS50, שנמצא כעת לפני 2 שנים, 269 00:16:00,890 --> 00:16:04,750 היה בערך בזמן כלי בשם Firesheep יצא. 270 00:16:04,750 --> 00:16:08,320 זה היה חתיכה חינם של תוכנה שנעשתה על ידי חוקר אבטחה 271 00:16:08,320 --> 00:16:13,250 כקריאת השכמה לקהילה להגיד בדיוק איך מיושם אכזרי 272 00:16:13,250 --> 00:16:17,900 מנגנוני אימות מסוימים באינטרנט היו. 273 00:16:17,900 --> 00:16:22,880 אז לכמה זמן, פייסבוק היה כמעט כולו על HTTP, HTTPS לא. 274 00:16:22,880 --> 00:16:25,640 וגם אם אין לך מושג איך עובדים האנוסים, S הוא מאובטח 275 00:16:25,640 --> 00:16:27,950 אז זה אומר שיש לפחות כמה מעורב בהצפנה. 276 00:16:27,950 --> 00:16:30,610 פייסבוק לא משמש להצפנת שמות משתמש וסיסמות, 277 00:16:30,610 --> 00:16:33,560 אבל ברגע שאתה הסתכלת עליך דוקר או ההודעות שלך או בעדכון החדשות שלך, 278 00:16:33,560 --> 00:16:35,360 כל זה לא היה מוצפן. 279 00:16:35,360 --> 00:16:37,870 אז היה פשוט Gmail עד שנה או 2 לפני. 280 00:16:37,870 --> 00:16:41,100 כל פעם שאתה מחובר, כן, הם השתמשו בהצפנה מאובטחת, 281 00:16:41,100 --> 00:16:44,300 אבל לאחר מכן הם לא עשו זאת. ולמה זה יכול להיות? 282 00:16:44,300 --> 00:16:49,210 למה לא פשוט להשתמש בהצפנה כל הזמן במקרי שימוש כמו זה? 283 00:16:49,210 --> 00:16:53,700 מה זה? אני חושב ששמעתי משהו. [תלמיד] מהירות. 284 00:16:53,700 --> 00:16:56,250 מהירות, נכון? יש דרכים לעקוף את זה. 285 00:16:56,250 --> 00:16:59,610 אבל אם אתה רק סוג של חושב על זה בהיגיון, אם אתה מצפין משהו, 286 00:16:59,610 --> 00:17:01,820 אתה צריך לעשות לפחות עוד קצת עבודה. 287 00:17:01,820 --> 00:17:05,460 בpset 2 כאשר אתה יישמת קיסר או Vigenere או אפילו סדק, 288 00:17:05,460 --> 00:17:07,760 פשוט להדפיס מחרוזת הוא קל יחסית. 289 00:17:07,760 --> 00:17:12,040 הצפנה ולאחר מכן מדפיס מחרוזת מינימאלית דורשת קצת יותר עבודה. 290 00:17:12,040 --> 00:17:14,520 >>  לאתרים פופולריים סופר כמו גוגל ופייסבוק, 291 00:17:14,520 --> 00:17:18,839 אם אתה צריך לעשות יותר עבודה עבור כל משתמש לכל דף אינטרנט יחיד שהם מבקרים, 292 00:17:18,839 --> 00:17:20,520 שפשוט לוקח זמן CPU יותר. 293 00:17:20,520 --> 00:17:22,920 ואם אתה צריך יותר זמן מעבד, ייתכן שתצטרך יותר שרתים, 294 00:17:22,920 --> 00:17:24,270 מה שאומר שאולי אתה צריך עוד כסף. 295 00:17:24,270 --> 00:17:27,579 וכך במשך שנים רבות זה פשוט ממש לא היה התרגול הטוב ביותר. 296 00:17:27,579 --> 00:17:31,440 אנשים היו משתמשים בהצפנת SSL רק כאשר הם זקוקים לכך. 297 00:17:31,440 --> 00:17:34,960 אבל התברר, וכבחור הזה עם Firesheep עשה סופר ברור, 298 00:17:34,960 --> 00:17:37,920 כאשר אתם בחורים שנמצאים כרגע בפייסבוק עכשיו - 299 00:17:37,920 --> 00:17:39,880 מתוך סקרנות, בואו נראים אם אתה fess למעלה. 300 00:17:39,880 --> 00:17:42,620 אם אתה בפייסבוק עכשיו בלשונית כלשהי, גם אם זה לא הקווירית, 301 00:17:42,620 --> 00:17:46,610 הוא כתובת האתר שלך HTTP או HTTPS? 302 00:17:46,610 --> 00:17:50,560 [סטודנטים] מרובים ס S? [שחוק] 303 00:17:50,560 --> 00:17:55,510 אוקיי. כל HTTP? רק 1? אוקיי. 304 00:17:55,510 --> 00:17:58,940 אז כולנו יכול לפרוץ לחשבון פייסבוק של הבחור שעכשיו. 305 00:17:58,940 --> 00:18:04,100 ברוב המקרים זה הפך מופעל כברירת מחדל, לפחות באתרים מסוימים. 306 00:18:04,100 --> 00:18:08,120 ובקיצור, אם את תעבורת האינטרנט שלך היא לא מוצפנת, 307 00:18:08,120 --> 00:18:12,960 לא רק את ה-HTML ללכת הלוך ושוב על פני WiFis לא מוצפן, 308 00:18:12,960 --> 00:18:16,760 אז אל דברים כמו עוגיות ללכת הלוך ושוב לאורך האוויר 309 00:18:16,760 --> 00:18:18,940 ללא כל צורה של הצפנה. 310 00:18:18,940 --> 00:18:23,540 אז אם יש לך רק קצת מתמצא בתכנות או קצת Googling כישורים 311 00:18:23,540 --> 00:18:27,410 כדי למצוא תוכנה חופשיה שעושה את זה, כל מה שאתה צריך לעשות זה לשבת בסטארבקס 312 00:18:27,410 --> 00:18:30,680 או לשבת בשדה תעופה שבו יש בדרך כלל הוא לא מוצפן WiFi 313 00:18:30,680 --> 00:18:36,070 ורק לצפות למילות מפתח כמו הגדרת קוקי: או PHPSESSID 314 00:18:36,070 --> 00:18:39,300 כי אם יש לך הבנה הטכנית לרק לצפות WiFi 315 00:18:39,300 --> 00:18:43,010 לכל הקטעים שזרימת האוויר לאורך לדפוס זה, 316 00:18:43,010 --> 00:18:50,840 אז אתה יכול לומר שPHPSESSID של הבחור קורה להיות bo8dal וכן הלאה. 317 00:18:50,840 --> 00:18:53,890 ואז שוב, אם אתה מספיק הבנה טכנית או יש את הכלי הנכון, 318 00:18:53,890 --> 00:18:58,890 אז אתה יכול פשוט להגדיר מחדש את הדפדפן שלך כדי להתחיל להציג את חותמת יד 319 00:18:58,890 --> 00:19:05,030 לFacebook.com, ופייסבוק הוא רק הולך להניח שאתה הבחור 320 00:19:05,030 --> 00:19:09,880 בגלל כל מה שהם יודעים הוא לא מי אתה, אלא שיש לך מזהה ייחודי זה. 321 00:19:09,880 --> 00:19:14,650 אז אם אתה גונב שמזהה ייחודי ולהציג אותו לשרת האינטרנט כמו שלך, 322 00:19:14,650 --> 00:19:16,860 הם רק הולכים להראות לכם להאכיל החדשות של אותו האדם 323 00:19:16,860 --> 00:19:18,980 או ההודעות של אותו האדם או הדוקר. 324 00:19:18,980 --> 00:19:23,190 >> והייתי גוגל עכשיו איך להפעיל HTTPS לפייסבוק אולי. 325 00:19:23,190 --> 00:19:25,150 אבל זה באמת פשוט כמו זה. 326 00:19:25,150 --> 00:19:27,660 וכך בפייסבוק וגוגל וכמו מקבלים ממש טוב בזה, 327 00:19:27,660 --> 00:19:31,870 אבל לפקוח עין כל יותר לכל אתרי אינטרנט שאתה מבקר שאינו משתמש HTTP 328 00:19:31,870 --> 00:19:35,020 ויש סוג כלשהו של מידע רגיש עליהם, 329 00:19:35,020 --> 00:19:37,490 בין אם זה כספי או אישי או משהו דומה. 330 00:19:37,490 --> 00:19:43,180 אם הם לא משתמשים בזה, ייתכן מאוד יכול עוגיות כמו זה תהיינה מאוד בקלות נגנבה 331 00:19:43,180 --> 00:19:46,270 ולאחר מכן זייף, וזה בדיוק מה שעשה Firesheep. 332 00:19:46,270 --> 00:19:48,250 אתה לא צריך להיות מתכנת. 333 00:19:48,250 --> 00:19:51,680 כל שהיית צריך לעשות היה לך חיבור לאינטרנט, להוריד את הכלי הזה בחינם, 334 00:19:51,680 --> 00:19:56,490 ומה הוא יעשה לך הוא להיכנס ואז זה ייראה לך את השמות של פייסבוק 335 00:19:56,490 --> 00:20:00,170 של כולם בסנדרס, בהפגנה המסוימת הזה, סביבך 336 00:20:00,170 --> 00:20:03,260 וכל מה שאתה צריך לעשות, זה ללחוץ על השם שלהם ואת התוכנה באופן אוטומטי את התהליך 337 00:20:03,260 --> 00:20:05,970 של עוגייה שמרחרחת, הצגתו לפייסבוק כמו שלך, 338 00:20:05,970 --> 00:20:07,990 ו, וזהו, אתה מחובר פנימה 339 00:20:07,990 --> 00:20:11,190 אז זה עוד אחד מאותם "לא עושה את זה" באופן רשמי. 340 00:20:11,190 --> 00:20:14,660 אם יש לך רשת הביתית שלך ואתה רוצה להתעסק, בכל האמצעים, 341 00:20:14,660 --> 00:20:17,530 אבל מבין שזה עושה לחצות את הקו בסביבת אוניברסיטה. 342 00:20:17,530 --> 00:20:20,030 >> אבל המטרה כאן היא באמת להדגיש לא איך לעשות את זה 343 00:20:20,030 --> 00:20:22,320 אך כיצד להתגונן מפני דברים כאלה. 344 00:20:22,320 --> 00:20:26,180 והפתרון טריוויאלי כאן, אפילו שזה עצמו הוא פגום, 345 00:20:26,180 --> 00:20:31,360 באמת כדי להפחית את השימוש של אתרים שאינם בשימוש HTTPS כל זמן. 346 00:20:31,360 --> 00:20:34,520 אז אתרים כמו פייסבוק וגוגל יותר ויותר יש לי תיבות 347 00:20:34,520 --> 00:20:36,200 שבו אתה יכול להצטרף לדברים מהסוג הזה, 348 00:20:36,200 --> 00:20:40,000 ובנקים היו זה במשך שנתי מסיבות דומות. 349 00:20:40,000 --> 00:20:43,580 אז רק קצת גורם פחד אם אנחנו יכולים. אבל זהו זה על קצה מזלג. 350 00:20:43,580 --> 00:20:46,420 כך שרת זוכר מי אתה. 351 00:20:46,420 --> 00:20:50,760 וברגע שהם יכולים לזכור מי אתה, הם יכולים לזכור שום דבר עליך 352 00:20:50,760 --> 00:20:56,140 שהמתכנת יש לאחסן בתוך superglobal המיוחד הזה שנקרא $ _SESSION. 353 00:20:56,140 --> 00:20:59,750 ועבור 7 pset אנחנו משתמשים בו רק כדי לזכור trivially int, 354 00:20:59,750 --> 00:21:02,260 כלומר את המזהה הייחודית של המשתמש שמחובר, 355 00:21:02,260 --> 00:21:05,880 כך שאנחנו יודעים שהם היינו שם קודם. 356 00:21:05,880 --> 00:21:12,450 כל שאלות ואז על מפגשים או עוגיות או כמו? 357 00:21:12,450 --> 00:21:15,130 Firesheep לא עובד כמו גם יותר, 358 00:21:15,130 --> 00:21:18,310 ואתה צריך להעביר את המחשב למצב מופקר מיוחד 359 00:21:18,310 --> 00:21:20,700 אז אתה בעצם מקשיב לתנועה מלבד עצמכם. 360 00:21:20,700 --> 00:21:23,940 אז אם אתה כרגע הורדת Firesheep, מבין שזה לא ממש קל 361 00:21:23,940 --> 00:21:26,850 כמו שהיה פעם להפגין. 362 00:21:26,850 --> 00:21:29,070 בסדר. ולא עושה את זה בסנדרס. לעשות את זה בבית. 363 00:21:29,070 --> 00:21:30,890 מאגרי מידע. 364 00:21:30,890 --> 00:21:33,580 אחד מהדברים שעשינו ב7 pset מאוד במכוון 365 00:21:33,580 --> 00:21:37,780 היה אנחנו נותנים לך טבלה במסד נתוני מדגם עבור משתמשים שיש כמה שמות משתמש, 366 00:21:37,780 --> 00:21:41,020 כמה שמות משתמש, ועוד כמה סיסמות מוצפנות המפורטת בן. 367 00:21:41,020 --> 00:21:44,520 וכפי שתראה, אם יש לך כבר לא, אתה הולך לעשות כדי לשנות את הטבלה קצת. 368 00:21:44,520 --> 00:21:47,710 אתה תצטרך להוסיף קצת מטמון לכל אחד מהמשתמשים שבטבלה, 369 00:21:47,710 --> 00:21:51,130 ואתה תצטרך להוסיף שולחן היסטוריה, שולחן תיקים, 370 00:21:51,130 --> 00:21:53,310 או אולי קוראים לזה משהו אחר. 371 00:21:53,310 --> 00:21:56,740 אבל במונחים של חשיבה על איך לעשות את זה, בואו לפתוח את הכלי הזה 372 00:21:56,740 --> 00:22:00,570 שבו הייתי ביום שישי, אבל אם לא מוכר, המכשיר מגיע עם כלי 373 00:22:00,570 --> 00:22:04,680 שם phpMyAdmin שכתוב במקרה ב-PHP, 374 00:22:04,680 --> 00:22:07,950 אבל את מטרתו בחיים, אחרי שאכנס לכאן כjharvard עם ארגמן, 375 00:22:07,950 --> 00:22:15,160 הוא לתת לי דרך ידידותית למשתמש של צפייה ושינוי מסד הנתונים שלי. 376 00:22:15,160 --> 00:22:18,040 >> מסד הנתונים שאני מפעיל את המכשיר נקרא MySQL. 377 00:22:18,040 --> 00:22:23,420 זה פופולרי מאוד, וזה בסיס נתונים בקוד פתוח בחינם זה נפלא וקל לשימוש, 378 00:22:23,420 --> 00:22:25,620 במיוחד עם החזית נגמרה כך. 379 00:22:25,620 --> 00:22:29,350 מה כלי זה מאפשר לי לעשות, למשל, הוא לתקוע סביב שולחנות. 380 00:22:29,350 --> 00:22:30,890 תן לי ללכת קדימה ולעשות את זה. 381 00:22:30,890 --> 00:22:36,580 ביום שישי יצרנו טבלה בשם תלמידים שהיו פשוט מעולה. 382 00:22:36,580 --> 00:22:41,680 היה לו 3 עמודות - id, שם, ודואר אלקטרוני - ואני באופן ידני הוספתי כמה שורות 383 00:22:41,680 --> 00:22:44,420 כמו דוד ומייק בדוגמה זו בפרט. 384 00:22:44,420 --> 00:22:47,290 בואו ניקח את זה עוד קצת, ובואו אניח שאנו רוצים לזכור יותר 385 00:22:47,290 --> 00:22:49,660 משם ודואר אלקטרוני על משתמש. 386 00:22:49,660 --> 00:22:53,090 בואו לחצו עליי מבנה כאן בחלק העליון. 387 00:22:53,090 --> 00:22:55,440 ושוב, pset הולך אותך באמצעים המתחייבים כאן, 388 00:22:55,440 --> 00:22:58,150 אז אל תדאג אם חלק מזה הוא קצת מהיר. 389 00:22:58,150 --> 00:22:59,690 ואז אני הולך לחץ כאן. 390 00:22:59,690 --> 00:23:02,270 אני הולך להוסיף קצת מספר העמודות לאחר דוא"ל 391 00:23:02,270 --> 00:23:04,130 כי אני רוצה להוסיף משהו כמו בית. 392 00:23:04,130 --> 00:23:06,640 שכחתי לרשום את ביתו של תלמיד. 393 00:23:06,640 --> 00:23:11,400 תן לי לחצו על Go, ועכשיו יש לנו בטופס זה, כי למרבה הצער הוא קצת רחב משמאל לימין, 394 00:23:11,400 --> 00:23:13,710 אבל אני הולך לקרוא את שמו של בית תחום זה, 395 00:23:13,710 --> 00:23:16,050 ולאחר מכן את הסוג עכשיו יש לי לבחור. 396 00:23:16,050 --> 00:23:18,870 אז בואו יש שיחה קצרה על הסוגים השונים ב-MySQL 397 00:23:18,870 --> 00:23:24,590 כי אילו PHP הוא הקלדה בחולשה וזה סוג של משחק מהיר ומשוחרר עם סוגים, 398 00:23:24,590 --> 00:23:29,430 באתר במיוחד שזה סופר חשוב באמת להשתמש הקלדה לטובתך 399 00:23:29,430 --> 00:23:33,260 משום שאחד מהדברים MySQL ומנועי מסד נתונים אחרים יכול לעשות בשבילך 400 00:23:33,260 --> 00:23:37,910 הוא לוודא שאתה לא שמת את נתונים מזויפים לתוך מסד הנתונים שלך. 401 00:23:37,910 --> 00:23:41,850 זה סוג של שגיאה בחינם בדיקה זמינה עבורך. 402 00:23:41,850 --> 00:23:46,250 >> לבית, ברור שאנחנו לא רוצים שזה יהיה int, שהוא ערך 32-bit ב-MySQL. 403 00:23:46,250 --> 00:23:49,810 עשינו לדבר בקצרה ביום שישי על varchar, אשר עומד על אורך char משתנה. 404 00:23:49,810 --> 00:23:54,720 מה זה? זה מאפשר לך לציין כי אתה רוצה שזה יהיה מחרוזת מסוג כלשהו. 405 00:23:54,720 --> 00:23:56,840 אתה לא באמת יודע מראש כמה זמן זה הוא, 406 00:23:56,840 --> 00:24:00,100 ולכן אנחנו באופן שרירותי נגיד את שם בית יכול להיות 255 תווים, 407 00:24:00,100 --> 00:24:04,190 אבל אתה יכול ללכת עם 32, 64 - כל מספר באמת. 408 00:24:04,190 --> 00:24:10,700 אבל היתרון של שימוש varchar מעל שדה נקרא char הוא מה? 409 00:24:10,700 --> 00:24:15,110 רק אם אני באופן אינטואיטיבי לגלול למטה כאן, שים לב שיש char ויש varchar. 410 00:24:15,110 --> 00:24:19,520 Varchar הוא אורך משתנה char; char הוא באורך קבוע char. 411 00:24:19,520 --> 00:24:24,730 לכן, בהתבסס רק על הגדרה זו, מה יתרון או חסרון של כל אחד מאלה? 412 00:24:24,730 --> 00:24:30,490 במילים אחרות, למי אכפת ההבחנה, או מה איכפת לך? 413 00:24:31,660 --> 00:24:35,750 >> כן. [תלמיד] varchar יש יותר גמישות, אבל תופס יותר זיכרון. 414 00:24:35,750 --> 00:24:40,730 טוב. Varchar תופס יותר - בואו לראות. אני לא בטוח שאם הייתי שומע את זה נכון. 415 00:24:40,730 --> 00:24:42,360 האם אתה יכול להגיד את זה שוב? 416 00:24:42,360 --> 00:24:45,850 [תלמיד] אמרתי varchar כנראה יש יותר גמישות, אבל זה לוקח יותר זיכרון. 417 00:24:45,850 --> 00:24:51,170 מעניין. אוקיי. Varchar בוודאי נותן לך גמישות רבה יותר, אך תופס יותר זיכרון. 418 00:24:51,170 --> 00:24:53,220 האחרון הוא לא בהכרח נכון. 419 00:24:53,220 --> 00:24:56,290 זה תלוי בהקשר, אבל בואו נחזור לזה. 420 00:24:56,290 --> 00:25:03,230 >> [תגובה בלתי נשמעת תלמיד] בדיוק. 421 00:25:03,230 --> 00:25:06,900 זה ממש המקרה שchar יהיה בדרך כלל משתמש יותר בזיכרון 422 00:25:06,900 --> 00:25:10,950 כי char, כמו ב-C, כמו מייתר, זה מערך של תווים. 423 00:25:10,950 --> 00:25:13,690 אז אם אתה אומר שדה char באורך 255, 424 00:25:13,690 --> 00:25:16,910 מסד הנתונים הוא ממש הולך לתת לך 255 תווים. 425 00:25:16,910 --> 00:25:22,290 אם הבית סופו להיות Mather ו 6 תווים בסה"כ ו, 426 00:25:22,290 --> 00:25:25,090 אתה מבזבז מעל 200 תווים. 427 00:25:25,090 --> 00:25:29,640 >> אז varchar יעילות משתמש רק כדמויות רבות ככל שיידרש 428 00:25:29,640 --> 00:25:31,590 עד לסכום מקסימאלי. 429 00:25:31,590 --> 00:25:35,470 אבל המחיר שאתה משלם הוא למעשה ביצועים, באופן פוטנציאלי. 430 00:25:35,470 --> 00:25:39,740 אם אתה יודע מראש שכל המחרוזות שלך הולכים להיות 8 תווים - 431 00:25:39,740 --> 00:25:43,090 לדוגמה, תניח שאתה דורש סיסמות באורך 8 - 432 00:25:43,090 --> 00:25:47,350 היתרון של שימוש בשדה char בהזדמנות, אם כי לא לעתים קרובות, 433 00:25:47,350 --> 00:25:51,100 הוא לציין אורך קבוע למשהו כמו סיסמא 434 00:25:51,100 --> 00:25:53,300 כי עכשיו מסד הנתונים יכול להיות אפילו יותר חכם. 435 00:25:53,300 --> 00:25:58,160 אם הוא יודע שכל שדה char, כל מחרוזת בעמודה היא באותו האורך, 436 00:25:58,160 --> 00:26:00,780 אתה מקבל בחזרה את התכונה של גישה אקראית. 437 00:26:00,780 --> 00:26:05,110 אתה יכול לקפוץ כבין שדות char השונים בטבלת מסד הנתונים שלך 438 00:26:05,110 --> 00:26:07,940 כי תחשוב על מסד נתונים כשורות ועמודות. 439 00:26:07,940 --> 00:26:11,670 אז אם כל אחד מהחוטים הוא באותו האורך, 440 00:26:11,670 --> 00:26:17,820 אתה יודע שראשון הוא בייט 0, הבא הוא בבית 8 441 00:26:17,820 --> 00:26:20,240 ואז 16 ואז 24 וכך הלאה. 442 00:26:20,240 --> 00:26:24,500 אז אם כל המחרוזות הן באותו האורך, אתה יכול לקפוץ הרבה יותר יעיל. 443 00:26:24,500 --> 00:26:26,710 כך שיכול להיות יתרון במונחים של ביצועים, 444 00:26:26,710 --> 00:26:29,420 אבל בדרך כלל אין לך את המותרות של ידיעה מראש, 445 00:26:29,420 --> 00:26:32,170 כך varchar הוא הדרך ללכת. 446 00:26:32,170 --> 00:26:36,030 הנה עוד פרט אחד שאפילו פייסבוק נתקל בסופו של דבר. 447 00:26:36,030 --> 00:26:39,670 Ints הם גדול, ואנחנו פחות או להשתמש בם כברירת מחדל בכל פעם שאנחנו רוצים מספר, 448 00:26:39,670 --> 00:26:41,750 אבל זה רק 32 חתיכות. 449 00:26:41,750 --> 00:26:46,210 >> ולמרות שפייסבוק לא די לנו 4 מליארד משתמשים כיום, 450 00:26:46,210 --> 00:26:48,680 בהחלט יש בו כמה אנשים שהיו שם איתי חשבונות מרובים 451 00:26:48,680 --> 00:26:50,960 או חשבונות שנפתחו ולאחר מכן נסגרו, 452 00:26:50,960 --> 00:26:55,130 ולכן אני מאמין שפייסבוק עצם לפני כמה שנים הייתה למעבר מint 453 00:26:55,130 --> 00:27:00,010 ל, כפי שנקרא בצדק, bigint, שהוא רק 64 ביטים במקום. 454 00:27:00,010 --> 00:27:02,230 אז גם את זה הוא החלטה עיצובית. 455 00:27:02,230 --> 00:27:06,570 אתה יהיה ממש בר מזל אם פרויקט הגמר שלך הופך אתחול, 456 00:27:06,570 --> 00:27:10,010 יש 4 מיליארדים ו1 משתמשים, פחות או יותר, 457 00:27:10,010 --> 00:27:13,200 ובמקרה זה באמצעות ints יכול להיות קצת קצר רואי. 458 00:27:13,200 --> 00:27:16,230 אבל במציאות, טבלת המשתמשים שלך היא כנראה בסדר עם ints. 459 00:27:16,230 --> 00:27:19,340 אבל למשהו כמו 7 pset, כמו טבלת ההיסטוריה שלך, 460 00:27:19,340 --> 00:27:23,700 ייתכן שיש אלף, מ'של משתמשים אם תתפתח etrade.com. 461 00:27:23,700 --> 00:27:26,020 אז בעוד שייתכן שאין לו מעל 4 מליארד משתמשים, 462 00:27:26,020 --> 00:27:30,070 משתמשים אלה יש לך אולי יש יותר מ 4 מיליארדים עסקות לאורך זמן - 463 00:27:30,070 --> 00:27:33,200 קונה ומוכר ודברים בהיסטוריה שלהם. 464 00:27:33,200 --> 00:27:38,090 אז אם אתה מצפה - שוב, אלה הם בעיות טובות להיות אם יש לך הרבה נתונים זה - 465 00:27:38,090 --> 00:27:40,920 אם אתה עושה את צופה נתונים העולים על הגודל של int, 466 00:27:40,920 --> 00:27:47,740 הולך עם משהו כמו bigint הוא כיוון שלא אמץ מספיק פעמים על ידי מעצבים 467 00:27:47,740 --> 00:27:49,710 כי אנשים שדמות לא הולכת להיות בעיה, 468 00:27:49,710 --> 00:27:51,930 אבל ככה זה קל לבחור משהו יותר גדול מזה. 469 00:27:51,930 --> 00:27:55,380 עשרוני אנו משתמשים ב7 pset, אשר מציין דיוק קבוע 470 00:27:55,380 --> 00:27:59,840 כך שאתה יכול למנוע את הבעיות כרוכות בצופו זוגות וריאל וכדומה. 471 00:27:59,840 --> 00:28:02,440 >> ואז יש כמה תחומים אחרים כאן. אנחנו נניף את ידינו עליהם במידה מסוימת. 472 00:28:02,440 --> 00:28:07,270 אבל תאריכים, שעות כולם יש פורמט שנקבע ב-MySQL, 473 00:28:07,270 --> 00:28:10,830 והיתרון של אחסון תאריכים כתאריכים ולא varchars 474 00:28:10,830 --> 00:28:15,730 משמעות הדבר הוא שהאתר באמת יכול לפרמט אותם לפורמטים שונים, 475 00:28:15,730 --> 00:28:18,800 אם פורמט אמריקאי או אירופי או בפורמט כמו - איך שלא תרצה אותו - 476 00:28:18,800 --> 00:28:22,700 ביעילות רבה יותר מאשר לו היו רק חלק varchar הגנרית. 477 00:28:22,700 --> 00:28:25,150 ויש גם את החלק השני בינארי, VARBINARY, כתמים. 478 00:28:25,150 --> 00:28:28,580 אלה הם גופים גדולים בינארי, ואתה יכול גם לאחסן נתונים בינאריים 479 00:28:28,580 --> 00:28:30,750 כמו גם נתונים גיאומטריים במסד נתונים. 480 00:28:30,750 --> 00:28:34,350 אבל עבורנו אנחנו בדרך כלל אכפת ints וvarchars וכדומה. 481 00:28:34,350 --> 00:28:36,230 בואו נסיים את זה למשל עם הבית. 482 00:28:36,230 --> 00:28:40,030 הבית שאני הולך לומר באופן שרירותי יהיה 255 תווים. 483 00:28:40,030 --> 00:28:42,850 אז ערך ברירת מחדל שאנחנו יכולים לעשות את זה. 484 00:28:42,850 --> 00:28:47,440 כברירת מחדל אנחנו יכולים לשים את כולם במאת'ר הבית, למשל. 485 00:28:47,440 --> 00:28:49,710 ככה אנחנו יכולים לציין שהמאגר 486 00:28:49,710 --> 00:28:52,460 צריך לוודא שמישהו תמיד יש לו ערך. אבל אני אשאיר את זה להיות. 487 00:28:52,460 --> 00:28:55,270 למעשה, לאנשים שגרים מחוץ לקמפוס ולא בבית, 488 00:28:55,270 --> 00:28:59,590 אולי אני בעצם רוצה לציין שערך ברירת המחדל עבור הבית הוא NULL, 489 00:28:59,590 --> 00:29:04,890 ואז אני צריך לבדוק את התיבה הזאת ולהגיד אתר זה בסדר אם הבית של המשתמש הוא NULL. 490 00:29:04,890 --> 00:29:07,270 >> שוב, זה עוד מנגנון הגנה שאתה יכול לשים במקום 491 00:29:07,270 --> 00:29:10,590 כך שאתה אפילו לא צריך לשים את זה בקוד PHP שלך בהכרח. 492 00:29:10,590 --> 00:29:14,630 מסד הנתונים יבטיח שדברים או שהם לא ריקים. 493 00:29:14,630 --> 00:29:17,310 ואז לבסוף, תכונות. 494 00:29:17,310 --> 00:29:18,920 אף אחד מאלה הם באמת רלוונטיים. 495 00:29:18,920 --> 00:29:22,880 בינארי, לא חתום - אף אחד מאלה הם רלוונטיים לvarchar. 496 00:29:22,880 --> 00:29:24,220 מדד. 497 00:29:24,220 --> 00:29:27,320 האם מישהו יודע או זוכר או שיש לי לנחש למה מדד הוא 498 00:29:27,320 --> 00:29:29,510 למשהו כמו בית? 499 00:29:29,510 --> 00:29:35,240 גם זו בעצם החלטה חשובת עיצוב וקלה יחסית. 500 00:29:35,240 --> 00:29:39,200 למי שעוד לא ראה אותו, ביום שישי שדברנו בקצרה על מפתחות הראשיים. 501 00:29:39,200 --> 00:29:43,240 בטבלת מסד נתונים, מפתח ראשי הוא שדה או עמודה 502 00:29:43,240 --> 00:29:46,270 שמזהה באופן ייחודי שורות בטבלה. 503 00:29:46,270 --> 00:29:49,150 אז בטבלה הנוכחית יש לנו תעודות זהות, יש לנו שמות ודואר אלקטרוניים. 504 00:29:49,150 --> 00:29:52,050 מבין כל אלה הוא המועמד הטוב ביותר להיות מפתח ראשי, 505 00:29:52,050 --> 00:29:55,810 שתפקידיו הם ייחודיים לזיהוי שורות? 506 00:29:55,810 --> 00:29:57,530 כנראה מזהה. 507 00:29:57,530 --> 00:29:59,930 ניתן לטעון, שאנחנו יכולים גם להשתמש במה ש? 508 00:29:59,930 --> 00:30:02,860 אולי אתה יכול להשתמש בדואר אלקטרוני, כי בתאוריה זה ייחודי 509 00:30:02,860 --> 00:30:05,380 אלא אם כן אנשים משתפים חשבונות דוא"ל. 510 00:30:05,380 --> 00:30:09,980 אבל המציאות היא שאם אתה משתמש בזיהוי מספרים כמו 1234, 511 00:30:09,980 --> 00:30:14,170 זה רק 32 סיבי, ואילו כתובת הדוא"ל יכולה להיות זה בתים רבים או בתים זה הרבה. 512 00:30:14,170 --> 00:30:16,610 אז במונחים של יעילות למזהים ייחודיים, 513 00:30:16,610 --> 00:30:19,270 הוא נוטה להיות תרגול טוב רק כדי להשתמש int 514 00:30:19,270 --> 00:30:23,090 גם אם יש לך קצת מועמד מחרוזת שללא ספק היה יכול להשתמש בו. 515 00:30:23,090 --> 00:30:26,760 >> למשהו כמו בית, זה לא צריך להיות מפתח ראשי 516 00:30:26,760 --> 00:30:30,770 כי אז רק 1 אדם יכול לחיות במאת'ר ואדם 1 בקורייר וכמו. 517 00:30:30,770 --> 00:30:32,790 בדומה לכך, זה לא צריך להיות ייחודי. 518 00:30:32,790 --> 00:30:37,830 ההבדל בין ראשוני וייחודיים הוא כי במקרה של הטבלה הנוכחית שלנו, 519 00:30:37,830 --> 00:30:42,620 זיהוי יהיה עיקרי אך הדוא"ל אינו הסיבה עיקרי שלהזכרנו זה עתה - 520 00:30:42,620 --> 00:30:44,740 ביצועים - אבל זה עדיין צריך להיות ייחודי. 521 00:30:44,740 --> 00:30:47,200 אז אתה עדיין יכול לאכוף ייחוד בלי הטענה 522 00:30:47,200 --> 00:30:49,520 שזה שדה ראשי חשוב סופר. 523 00:30:49,520 --> 00:30:52,610 אבל זה אחד הוא מועיל למדי: מדד. 524 00:30:52,610 --> 00:30:56,180 אם אתה יודע מראש לפרויקט הגמר שלך, ל7 pset, או באופן כללי, 525 00:30:56,180 --> 00:30:59,480 בית שתחום זה הולך להיות משהו שאתה מחפש בהרבה 526 00:30:59,480 --> 00:31:01,910 באמצעות מילת מפתח או משהו אחר לבחור, 527 00:31:01,910 --> 00:31:05,180 אז אתה יכול להגיד לי מנע האתר יפעיל את קסמיה 528 00:31:05,180 --> 00:31:10,510 ולוודא שהוא יוצר בזיכרון כל מבני נתונים מהודרים נחוץ 529 00:31:10,510 --> 00:31:13,770 כדי לזרז את חיפושים המבוססים על הבית. 530 00:31:13,770 --> 00:31:17,860 אולי זה יהיה להשתמש בשולחן חשיש, אולי זה יהיה להשתמש ברשימה מקושרת. 531 00:31:17,860 --> 00:31:21,260 במציאות, הוא נוטה להשתמש בעץ, לעתים מבנה שנקרא B-עץ - 532 00:31:21,260 --> 00:31:24,090 לא עץ בינארי אלא B-עץ - שהוא עץ רחב מאוד 533 00:31:24,090 --> 00:31:27,370 שאתה עשוי לראות בכיתה כמו CS124, כיתת מבני נתונים. 534 00:31:27,370 --> 00:31:31,800 אבל בקיצור, אין לך מה לדאוג כי בעת שימוש תוכנת מסד נתונים חכמה. 535 00:31:31,800 --> 00:31:35,890 אתה פשוט יכול להגיד לו, "מדד תחום זה ולכן אני יכול לחפש עליו בצורה יעילה יותר". 536 00:31:35,890 --> 00:31:40,250 >> אם תשאיר את זה ואתה מנסה לחפש כולם במסד הנתונים המתגורר במאת'ר, 537 00:31:40,250 --> 00:31:42,710 זה יתפתח לחיפוש ליניארי. 538 00:31:42,710 --> 00:31:45,360 ואם יש לך 6000 undergrads כל החיים באיזה בית, 539 00:31:45,360 --> 00:31:47,900 אתה הולך לחפש את השולחן כולו כדי למצוא את Matherites, 540 00:31:47,900 --> 00:31:52,190 בעוד שאם אתה אומר אינדקס, אני מקווה שזה יהיה משהו קרוב לחיפוש לוגריתמים 541 00:31:52,190 --> 00:31:54,510 למצוא סוגים אלו של תלמידים. 542 00:31:54,510 --> 00:31:56,750 זוהי רק תכונה חופשיה להפעיל, 543 00:31:56,750 --> 00:31:59,530 למרות שזה בא במחיר של כמות מסוימת של שטח. 544 00:31:59,530 --> 00:32:02,690 לבסוף, תוספת אוטומטית, תחום בינה מלאכותי זה, 545 00:32:02,690 --> 00:32:05,830 רק אומר שאם זה int ואתה לא רוצה לדאוג לזה בעצמך להגדיל 546 00:32:05,830 --> 00:32:07,570 כל פעם שיש משתמש חדש, תבדוק את זה, 547 00:32:07,570 --> 00:32:11,910 וכל משתמש שמקבל מוכנס באופן אוטומטי לקבל תעודת זהות חדשה. 548 00:32:11,910 --> 00:32:15,620 בואו לחצו על שמור, ועכשיו בואו למצוא פגם בעיצוב זה. 549 00:32:15,620 --> 00:32:20,200 אם אני נכנסתי לעיון, שים לב שגם מייק והבית שלי הוא NULL. 550 00:32:20,200 --> 00:32:22,420 אני יכול להשתמש phpMyAdmin לערוך זאת באופן ידני. 551 00:32:22,420 --> 00:32:25,110 אני יכול ללכת לכאן וסוג ב 'ר ולאחר מכן על Enter, 552 00:32:25,110 --> 00:32:27,740 ועכשיו שים לב לטבלה היא שונה. 553 00:32:27,740 --> 00:32:29,270 אבל שם לב שאני יכול לעשות משהו אחר גם כן. 554 00:32:29,270 --> 00:32:33,530 זהותו של הדוד היא 1, אז phpMyAdmin שוב הוא רק כלי ניהולי; 555 00:32:33,530 --> 00:32:35,970 זה לא משהו שהמשתמשים שלך תמיד הולכים לראות. 556 00:32:35,970 --> 00:32:38,810 אז אם אני במקום לוחץ על כרטיסיית SQL למעלה - 557 00:32:38,810 --> 00:32:41,450 ושוב, 7 pset יכיר לך יותר של שאילתות אלה - 558 00:32:41,450 --> 00:32:45,260 אני באופן ידני יכול לבצע את פקודת שפת SQL מובנהית השאילתה 559 00:32:45,260 --> 00:32:56,410 משתמשי UPDATE SET הבית = 'Pfoho "איפה id = 1. 560 00:32:56,410 --> 00:33:00,830 שאילתות SQL אלה, די יפים, די קריאות משמאל לימין. 561 00:33:00,830 --> 00:33:04,350 לעדכן את טבלת המשתמשים, הגדר את השדה התקשר לבית לPfoho 562 00:33:04,350 --> 00:33:06,830 שם זיהוי של המשתמש הוא 1. 563 00:33:06,830 --> 00:33:11,480 או אפילו שאני יכול לעשות בי דוא"ל = 'malan@harvard.edu'. 564 00:33:11,480 --> 00:33:14,860 כל עוד שמזהה באופן ייחודי לי, שהיה עובד גם כן. 565 00:33:14,860 --> 00:33:18,810 אבל זהות נוטה להיות ביצועים גבוהים יותר, אז בואו נעשה את זה. 566 00:33:18,810 --> 00:33:22,950 בואו לחצו על Go. אוקיי, lecture.users לא קיים. מה הטעות שלי? 567 00:33:22,950 --> 00:33:26,220 מה שנקרא השולחן דווקא כאן? 568 00:33:26,220 --> 00:33:28,770 זה נקרא תלמידים רק בגלל שזה מה שעשינו עד כאן בפינה שמאלית עליונה. 569 00:33:28,770 --> 00:33:31,860 זה נקרא תלמידים, לא ממשתמשים. אז לחץ על חפש כעת. 570 00:33:31,860 --> 00:33:34,330 השורה 1 מושפעת. שאילתא ארכה 0.01 שניות. 571 00:33:34,330 --> 00:33:38,010 אם אני לוחץ על עיון עכשיו, עכשיו חיי Malan בPfoho. 572 00:33:38,010 --> 00:33:42,070 אז זה טעם אחר של SQL, אבל pset יעבור קצת יותר מזה. 573 00:33:42,070 --> 00:33:44,710 >> יש החלטה טיפשית אני כבר עשיתי כאן. 574 00:33:44,710 --> 00:33:47,820 ברצוני לטעון שעיצוב מסד נתונים זה לא יעיל 575 00:33:47,820 --> 00:33:51,650 משום שיותר אנשים שאוסיף לשולחן התלמידים, 576 00:33:51,650 --> 00:33:54,730 יותר מאיתנו אני מתחיל להוסיף, יותר מTFS אני מתחיל להוסיף, 577 00:33:54,730 --> 00:33:58,320 אנחנו הולכים להתחיל לראות מה כפילויות בטבלה זו? 578 00:34:00,840 --> 00:34:06,020 >> כן. [תלמיד] בראותם שזה בתלמידים, אנחנו משתמשים באותה [לא ברור] 579 00:34:06,020 --> 00:34:07,360 אותו הדבר - בדיוק. 580 00:34:07,360 --> 00:34:10,400 אז אם 400 אנשים חיים במאת'ר, פחות או יותר, 581 00:34:10,400 --> 00:34:15,000 סופו של דבר לוח זה הולך יש 400 שורות שאומרות "ר", "ר", 582 00:34:15,000 --> 00:34:16,590 "ר", "ר", "ר". 583 00:34:16,590 --> 00:34:19,820 אנחנו מבזבזים את כל הבתים הללו, ויש כמה מזנונים שם. 584 00:34:19,820 --> 00:34:23,080 1, יש מקרה שבו הפינה המטורף אם מישהו משלם הרבה כסף 585 00:34:23,080 --> 00:34:25,949 שינוי השמות ומאת'ר, עכשיו אנחנו צריכים לשנות את הנתונים בטבלה השלמה שלנו. 586 00:34:25,949 --> 00:34:29,730 זה לא יקרה לעתים קרובות, אם כי Pfoho נקרא פעם צפון בית לפני 15 שנה, 587 00:34:29,730 --> 00:34:32,310 כך זה קורה. אבל זה לא כל כך משכנע. 588 00:34:32,310 --> 00:34:36,000 יותר משכנע מאשר מקרה פינה כמו זה של צורך לעדכן את הנתונים בתפזורת 589 00:34:36,000 --> 00:34:41,150 עבור מסד נתונים למה אתה אחסון מאת'ר שוב ושוב ושוב ושוב? 590 00:34:41,150 --> 00:34:43,020 זה הרבה תווים, 6 תווים. 591 00:34:43,020 --> 00:34:45,500 אנחנו לא יכולים לעשות אפילו יותר טוב מזה, במיוחד לPforzheimer? 592 00:34:45,500 --> 00:34:48,320 אין ספק שאנחנו יכולים לעשות יותר טוב מזה דמויות רבות. 593 00:34:48,320 --> 00:34:51,790 למה לא פשוט לשייך את מזהה ייחודית של כל בית 594 00:34:51,790 --> 00:34:55,020 וחנות שעבור כל משתמש? אז בואו ננסה את זה. 595 00:34:55,020 --> 00:35:00,610 במקום פשוט להשתמש בטבלת התלמידים, נתן לי ללכת עד למסד נתוני ההרצאה שלי כאן למעלה בצד שמאל למעלה. 596 00:35:00,610 --> 00:35:02,600 שים לב כאן זה אומר יצירת טבלה. 597 00:35:02,600 --> 00:35:04,550 תן לי ליצור טבלה חדשה בשם בתים. 598 00:35:04,550 --> 00:35:08,880 מספר העמודות הולך להיות 2. Enter. 599 00:35:08,880 --> 00:35:11,200 עכשיו יש לי 2 שדות. 600 00:35:11,200 --> 00:35:14,600 אני הולך לקרוא לזה בשם, וזה הולך להיות varchar באורך 255, 601 00:35:14,600 --> 00:35:18,770 >> אבל זה די שרירותי. אני רוצה לשים את זה כאן על ידי ועידה. 602 00:35:18,770 --> 00:35:22,840 אז שים את זהות עד כאן. בואו לתת את כל בית מזהה ייחודי. 603 00:35:22,840 --> 00:35:25,360 בואו לתת את כל בית שם. 604 00:35:25,360 --> 00:35:30,980 בואו לציין שהמזהה תהיה חתומה רק על ידי אמנה לשימוש מספרים חיוביים בלבד. 605 00:35:30,980 --> 00:35:35,020 בואו נלך קדימה ותיתן לי תחום זה אוטומטי תוספת לעת עתה. 606 00:35:35,020 --> 00:35:38,160 ואנחנו לא צריכים שום דבר אחר? 607 00:35:38,160 --> 00:35:41,010 בואו נלך קדימה ולחץ על שמור. 608 00:35:41,010 --> 00:35:42,480 עכשיו יש לי טבלה שנייה. 609 00:35:42,480 --> 00:35:45,860 שימו לב שמלבד זה הוא פקודת SQL הסתומה במקצת 610 00:35:45,860 --> 00:35:50,280 שהיית צריך להקליד באופן ידני אם לא באמצעות כלי ניהולי כמו phpMyAdmin. 611 00:35:50,280 --> 00:35:51,990 אז סיבה נוספת שאנו משתמשים בו. 612 00:35:51,990 --> 00:35:55,480 זה סוג של בחינה פדגוגית להפליא שימושי, כי אתה יכול ללחוץ סביב 613 00:35:55,480 --> 00:36:01,050 ולהבין איך דברים עובדים רק על ידי העתקה והדבקה של מה phpMyAdmin עשה. 614 00:36:01,050 --> 00:36:04,150 אבל פקודת שולחן היצירה היא מה שהוצא להורג, וכאן הוא השולחן שלי. 615 00:36:04,150 --> 00:36:11,370 תן לי ללכת קדימה עכשיו ולהשתמש ב-SQL גרידא ולא מפשטנות על ידי לחיצה על כרטיסיית ההוספה. 616 00:36:11,370 --> 00:36:15,040 תן לי לנהל INSERT INTO בתים, 617 00:36:15,040 --> 00:36:22,230 ואני הולך להגיד את שמו של הבית הולך להיות בעל ערך של 'ר'. 618 00:36:22,230 --> 00:36:24,790 זה הכל. תחביר זה קצת יותר מסתורי. 619 00:36:24,790 --> 00:36:26,660 זה השם של השדות שברצוננו להוסיף. 620 00:36:26,660 --> 00:36:30,390 אלה הערכים שאנחנו רוצים להכניס לתוך התחומים אלה. תן לי לחצו על Go. 621 00:36:30,390 --> 00:36:34,410 השורה 1 הוכנסה לקחה 0.02 שניות. תן לי עכשיו לחצו על עיון. 622 00:36:34,410 --> 00:36:42,020 >> שים לב אם אלחץ על עיון, יש מאת'ר, מזהה שהוא על ידי אוטומצית המספר 1. 623 00:36:42,020 --> 00:36:45,000 תן לי לעשות עוד אחד. תן לי ללכת ללשונית SQL. 624 00:36:45,000 --> 00:36:52,950 INSERT INTO בתים. שמו של הבית הולך להיות ערך של Pfoho וכן הלאה. 625 00:36:52,950 --> 00:36:56,350 עבור. ואני יכול להמשיך לעשות את זה שוב ושוב ושוב. 626 00:36:56,350 --> 00:36:59,470 או אם אתה משתעמם בעזרת phpMyAdmin, אתה יכול פשוט להשתמש בכרטיסיית ההוספה 627 00:36:59,470 --> 00:37:01,000 ולא יצטרכו להקליד SQL הגלם. 628 00:37:01,000 --> 00:37:04,690 אתה פשוט יכול לדפוק אותו במהירות רבה יותר על ידי הקלדה, למשל, קורייר, זן, 629 00:37:04,690 --> 00:37:07,610 ועכשיו אם אנחנו לוחצים על עיון, יש קורייר עם זיהוי של 3. 630 00:37:07,610 --> 00:37:09,920 אז זה מה שאנחנו מתכוונים באופן אוטומטי תוספת. 631 00:37:09,920 --> 00:37:12,280 אבל עכשיו אנחנו צריכים לתקן משהו בתלמידים. 632 00:37:12,280 --> 00:37:16,240 בתלמידים מה צריך את סוג הנתונים של שדה הבית עכשיו יהיה? 633 00:37:16,240 --> 00:37:19,450 זה צריך להיות int, נכון? 634 00:37:19,450 --> 00:37:23,950 אז המטרה כאן היא גורם החוצה, הידוע גם בנורמליזציה, שולחנות 635 00:37:23,950 --> 00:37:27,940 כך שאנו לא שומרים את המידע מיותר בכל השולחנות שלי. 636 00:37:27,940 --> 00:37:31,130 ושוב, בדרך שהיינו כאן לא תגיד 'ר, ר, 637 00:37:31,130 --> 00:37:34,220 מאת'ר, מאת'ר, Pfoho, Pfoho, Pfoho, Pfoho, וזה מאוד מיותר 638 00:37:34,220 --> 00:37:36,240 במונחים של הבזבזנות של התווים. 639 00:37:36,240 --> 00:37:40,820 אז תן לי ללכת קדימה ולשנות את זה על ידי לחיצה על מבנה, 640 00:37:40,820 --> 00:37:44,620 ותנו לי להמשיך ולבדוק את שטח הבית, לחץ על שינוי, 641 00:37:44,620 --> 00:37:46,990 ועכשיו אני הולך לשנות את זה כדי להיות int. 642 00:37:46,990 --> 00:37:49,490 255 הם כבר לא רלוונטי. 643 00:37:49,490 --> 00:37:54,010 תן לי ללכת קדימה ואומרים שזה בסדר אם זה עדיין NULL. שמור. 644 00:37:54,010 --> 00:37:55,870 עכשיו תלמידי טבלה השתנו בהצלחה, 645 00:37:55,870 --> 00:37:59,090 ושים לב שוב הבית הוא int. 646 00:37:59,090 --> 00:38:02,220 במאמר מוסגר, להתעלם מהמספר בסוגריים כשמדובר ints. 647 00:38:02,220 --> 00:38:03,770 >> זה מסיבות מדור קודם. 648 00:38:03,770 --> 00:38:06,920 חזרה ביום שבו לא היה לך GUIs, שהייתה במקום בסביבת שורת פקודה, 649 00:38:06,920 --> 00:38:11,580 את כמה 10 ו 11 בהתאמה תווים שצוין אתה צריך להראות 650 00:38:11,580 --> 00:38:13,950 בחלון המסוף כדי בעצם להציג שדות. 651 00:38:13,950 --> 00:38:19,150 אין לזה שום קשר עם האורך של קצת השדה בפועל, ולכן אנחנו פשוט להתעלם מזה לעת עתה. 652 00:38:19,150 --> 00:38:20,990 עכשיו אני צריך להיכנס לטבלה זו. 653 00:38:20,990 --> 00:38:24,610 ואם הדוד חי במאת'ר, הבית לא צריך להיות 0, 654 00:38:24,610 --> 00:38:27,350 שהוא ערך ברירת מחדל int הקרוב ל NULL. 655 00:38:27,350 --> 00:38:29,810 הוא צריך לחיות בבית 1. 656 00:38:29,810 --> 00:38:36,870 בואו שרירותי לומר שחיי מייק בPfoho, כך מספר בית 2. 657 00:38:36,870 --> 00:38:40,160 עכשיו השולחן שלי נראה קצת יותר מסתורי. 658 00:38:40,160 --> 00:38:41,960 אלא לשקול את היעילות. 659 00:38:41,960 --> 00:38:44,860 עכשיו אני משתמש רק 32 חתיכות כדי לזהות את הבית, 660 00:38:44,860 --> 00:38:49,530 מה שאומר שיש רק 1 הגדרה הקנונית של בית מאת'ר וPfoho 661 00:38:49,530 --> 00:38:52,090 וזה בטבלת הבתים. 662 00:38:52,090 --> 00:38:55,880 אז אם אני רוצה עכשיו להצטרף טבלאות אלה, חושבים על זה ככה. 663 00:38:55,880 --> 00:39:01,980 כאן יש לי שולחן התלמידים שלי, ועל צד ימין יש מספרים אלה, 1 ו 2. 664 00:39:01,980 --> 00:39:04,180 1 הוא מאת'ר, 2 הם Pfoho. 665 00:39:04,180 --> 00:39:08,580 יש לנו את אותם מספרים בטבלה אחרת זה, אשר נקרא בתים, 666 00:39:08,580 --> 00:39:11,020 1 ו 2 ו 3 למשך 3 הבתים הללו. 667 00:39:11,020 --> 00:39:14,990 מה עכשיו אנחנו רוצים לעשות זה יש את היכולת בקוד, PHP ו-SQL, 668 00:39:14,990 --> 00:39:18,800 כדי למיין מלהצטרף טבלאות אלה, שבו אם אלה הם תלמידים ואלה הם בתים, 669 00:39:18,800 --> 00:39:22,050 אנחנו רוצים איכשהו לשלב אותם כך שעד 1 שורות עם 1, 670 00:39:22,050 --> 00:39:25,670 2 שורות עם 2, וכדי שנוכל להבין איפה דוד 671 00:39:25,670 --> 00:39:28,000 ושבו מייק ואיפה כולם חיים. 672 00:39:28,000 --> 00:39:31,850 לשם כך אנו יכולים לבצע שאילתא SQL כמו הבא. 673 00:39:31,850 --> 00:39:40,470 SELECT * FROM תלמידי בתי JOIN ON - 674 00:39:40,470 --> 00:39:43,000 ועכשיו מה שדות שאנו רוצים להצטרף ב? 675 00:39:43,000 --> 00:39:49,520 אז students.house = houses.id. 676 00:39:49,520 --> 00:39:54,150 >> לא ברור מספיק, אך חלק זה פירושו מילולי ליצור טבלה זמנית חדשה 677 00:39:54,150 --> 00:39:56,690 זה התוצאה של הצטרפות תלמידים ובתים. 678 00:39:56,690 --> 00:40:00,340 ואיך אתה רוצה לשלב את קצות האצבעות שלי כאן? 679 00:40:00,340 --> 00:40:05,280 הגדרה 'שדה הבית השווה לבתים של תלמידי שדה מזהה. 680 00:40:05,280 --> 00:40:10,220 ואם אני עכשיו אלחץ על Go, אני חוזר בדיוק מה שקיוויתי. 681 00:40:10,220 --> 00:40:15,890 דוד הוא במאת'ר, מייק הוא בPfoho, ואני גם רואה את המזהים הייחודיים. 682 00:40:15,890 --> 00:40:18,640 אבל הנקודה היא שעכשיו יש לי שולחן מלא. 683 00:40:18,640 --> 00:40:23,020 וכך ממסעדה כאן ל7 pset או באמת לפרויקט הגמר: 684 00:40:23,020 --> 00:40:25,830 אם אתה מוצא שאתה אחסון כל פיסת המידע מיותר, 685 00:40:25,830 --> 00:40:28,850 בין אם מדובר בבית, אולי זה עיר, מדינה ומיקוד 686 00:40:28,850 --> 00:40:32,050 בי ZIP תמיד יכול לשמש בדרך כלל אך לא כמזהה ייחודית, 687 00:40:32,050 --> 00:40:35,810 אין לעבור את התרגיל נפשי ולאחר מכן עם משהו כמו phpMyAdmin 688 00:40:35,810 --> 00:40:40,660 של הפקטורינג מתוך נתונים אלה נפוצים במיוחד משום שהאתר שלך אהיה יותר טוב בשימוש 689 00:40:40,660 --> 00:40:45,440 ויותר פופולריים, זה איך אתה לוודא שהכל הוא סופר מהיר, 690 00:40:45,440 --> 00:40:51,930 על ידי מתן את מסד הנתונים כרמזים רבים באשר לייחוד ככל האפשר. 691 00:40:51,930 --> 00:40:53,860 זה היה הרבה. 692 00:40:53,860 --> 00:40:59,010 יש שאלות? בסדר. בואו לקחת הפסקה של 5 דקות ויש להיערך מחדש. 693 00:41:01,600 --> 00:41:03,540 בסדר. 694 00:41:03,540 --> 00:41:08,680 להלן דוגמה ששמשה לפני כמה שנים כשלקחתי CS161, 695 00:41:08,680 --> 00:41:10,960 אשר היא מחלקת מערכות ההפעלה במכללה 696 00:41:10,960 --> 00:41:15,160 אשר ידוע להיות מדהים, אבל כמות מטורפת של עבודה, 697 00:41:15,160 --> 00:41:19,810 והיא מתמקדת באמת בחלק מהבעיות ברמה הנמוכה שעולות במערכות הפעלה 698 00:41:19,810 --> 00:41:22,700 וגם אפילו בעולם של מסדי נתונים. 699 00:41:22,700 --> 00:41:27,040 >> הסיפור שספר לי הפרוף שלי, מרגו זלצר, שהשנה היה כדלקמן. 700 00:41:27,040 --> 00:41:30,990 תניח שיש לך מקרר מעונות קטנה בשבילך והשותף שלך 701 00:41:30,990 --> 00:41:34,030 ושניכם באמת אוהבים חלב. 702 00:41:34,030 --> 00:41:36,360 אז אתה חוזר הביתה מיום אחד בכיתה, שותף לדירה שלך הוא עדיין לא שם, 703 00:41:36,360 --> 00:41:39,650 אתה פותח את המקרר, ואתה מבין, "לכל הרוחות, אנחנו יוצאים מחלב." 704 00:41:39,650 --> 00:41:42,070 אז אתה סוגר את המקרר, שתחצה את הכביש לCVS 705 00:41:42,070 --> 00:41:45,830 ולקבל בשורות יותר ארוכות כדי לקנות חלב בCVS. 706 00:41:45,830 --> 00:41:48,470 בינתיים, השותף שלך חוזר מהבית שלו או שלה בכיתה, 707 00:41:48,470 --> 00:41:51,690 נכנס לחדר, פותח את המקרר באמת רוצה קצת חלב, 708 00:41:51,690 --> 00:41:54,130 פותח את המקרר ו, "לעזאזל, לא חלב." 709 00:41:54,130 --> 00:41:57,890 אז הוא או היא סוגר את המקרר, יוצא מהבית, והולך לABP 710 00:41:57,890 --> 00:42:00,910 או במקום אחר מאשר CVS שבו אתה לא הולך להיתקל אחד בשני 711 00:42:00,910 --> 00:42:02,790 ללכת לקבל קצת חלב. 712 00:42:02,790 --> 00:42:04,820 כמובן שכמה דקות מאוחר יותר, שניכם לחזור הביתה 713 00:42:04,820 --> 00:42:07,740 ועכשיו יש לך כפליים חלב כמו שאתה רוצה בעצם. 714 00:42:07,740 --> 00:42:10,670 ולהיות חלב, עכשיו זה הולך לא רע, כי אתה אוהב חלב 715 00:42:10,670 --> 00:42:14,200 אבל אתה לא באמת אוהב את החלב, אז עכשיו יש לך יותר מדי חלב, כך שזה הולך חמוץ. 716 00:42:14,200 --> 00:42:16,830 זה מצב נורא ואיום. 717 00:42:16,830 --> 00:42:22,920 מה יכול היה לפתור את המצב הקשה הזה אם היית שותפה בבית הראשון? כן. 718 00:42:22,920 --> 00:42:25,970 [תלמיד] היית צריך להשאיר פתק. [שחוק] 719 00:42:25,970 --> 00:42:28,090 טוב. היית צריך להשאיר פתק. 720 00:42:28,090 --> 00:42:32,320 היית צריך לשים פתקאות או כמו להגיד, "יצא לחלב", 721 00:42:32,320 --> 00:42:36,830 ואז השותפה שלך מושגית הייתה נעולה מחוץ לעושה את זה בפועל. 722 00:42:36,830 --> 00:42:38,010 או שאתה יכול ללכת צעד נוסף 1. 723 00:42:38,010 --> 00:42:41,060 אתה ממש יכול לנעול את המקרר עם איזה סוג של מנעול, 724 00:42:41,060 --> 00:42:44,870 ועכשיו השותף שלך יהיה ממש להיות נעול מחוץ למקרר. 725 00:42:44,870 --> 00:42:48,520 אם להכליל בחזרה לתכנות, 726 00:42:48,520 --> 00:42:51,610 אתה כמעט יכול לחשוב על המקרר כמו איזה סוג של משתנה או struct, 727 00:42:51,610 --> 00:42:53,500 איזה סוג של מכולה למידע. 728 00:42:53,500 --> 00:42:58,290 הבעיה מהותית כאן היא ששניכם הורשו לבדוק 729 00:42:58,290 --> 00:43:02,370 או לקרוא את המצב של מבנה נתונים זה, 730 00:43:02,370 --> 00:43:08,050 אבל אתה צופה בה בזמנים שונים, ובכל זאת שניכם קבלו החלטה 731 00:43:08,050 --> 00:43:11,920 המבוסס על מצבו של העולם ברגעים השונים הללו בזמן. 732 00:43:11,920 --> 00:43:15,570 אז שנעלת את המקרר, היית לפחות נמנע מהשותף שלך 733 00:43:15,570 --> 00:43:19,070 שהיא יכולה לבדוק את מצבו של העולם, 734 00:43:19,070 --> 00:43:22,530 כך הוא או היא לא היה מסוגלת לבצע את ההחלטה. 735 00:43:22,530 --> 00:43:25,780 אז מסדי נתונים, כפי שמתברר, יש את הבעיה הזאת כל זמן. 736 00:43:25,780 --> 00:43:31,050 >> בואו נראה אם ​​אנחנו יכולים לבנות תרחיש. 737 00:43:31,050 --> 00:43:34,310 תניח שאתה סוג של בחור רע ואתה הולך לבנק אוף אמריקה 738 00:43:34,310 --> 00:43:37,950 או אחד מהמקומות האחרים בכיכר שיש להם זוג צד כספומטים בצד, 739 00:43:37,950 --> 00:43:41,200 ואיכשהו מצאת את הפיתרון לשכפול כרטיס כספומט - לא כל כך קשה. 740 00:43:41,200 --> 00:43:42,730 זה רק פס מגנטי. 741 00:43:42,730 --> 00:43:45,180 וכך מה שאתה רוצה לנסות לעשות הוא לשחק את המשחק הזה 742 00:43:45,180 --> 00:43:49,060 לפי אתה מכניס כרטיס 1 למכונה 1, כרטיס נוסף למכונה האחרת, 743 00:43:49,060 --> 00:43:51,980 ואתה בעצם רוצה לנסות למשוך את הכסף בו זמנית, 744 00:43:51,980 --> 00:43:54,930 בגלל לדמיין סיפור שהולך כדלקמן. 745 00:43:54,930 --> 00:43:57,350 המכונה בצד השמאל לוקחת את הכרטיס שלך ואת הקוד הסודי שלך, 746 00:43:57,350 --> 00:44:00,240 ואז אתה אומר, "תן לי 100 דולרים". 747 00:44:00,240 --> 00:44:04,790 הכספומט מתוכן לעשות בחירה ראשונה במסד הנתונים שלה או שווה הערך - 748 00:44:04,790 --> 00:44:10,780 כל מסד נתונים זה באמצעות - כדי לראות האם משתמש זה יש לפחות 100 דולרים בחשבון שלו? 749 00:44:10,780 --> 00:44:16,180 אם כן, אז לירוק את 100 $ 100 $ ולחסר משיווי המשקל שלהם. 750 00:44:16,180 --> 00:44:20,470 אבל כמובן שאם יש מספר מחשבים כאן או במגוון דרכים לבדיקה 751 00:44:20,470 --> 00:44:23,560 המדינה שהעולם, כספת הבנק, כדי לראות כמה כסף יש לך, 752 00:44:23,560 --> 00:44:26,780 תניח שרק במקרה את המכונה בצד השמאל והימין 753 00:44:26,780 --> 00:44:30,140 גם לשאול את השאלה הזאת בערך באותו הרגע בזמן. 754 00:44:30,140 --> 00:44:34,160 >> וזה בהחלט יכול לקרות. כספומטים הם מחשבים בימים אלה. 755 00:44:34,160 --> 00:44:37,670 אז אם המכונה בצד השמאל אומרת, "כן, יש לך לפחות 100 $," 756 00:44:37,670 --> 00:44:42,150 בינתיים המכונה בצד ימין אומרת, "כן, יש לך לפחות 100 $," 757 00:44:42,150 --> 00:44:47,420 אז שניהם להמשיך כדי לסיים את התוכניות שלהם ובעצם לירוק 100 $ 758 00:44:47,420 --> 00:44:50,820 ואומר, "בעבר הייתה לך 200 דולרים". 759 00:44:50,820 --> 00:44:54,890 "תן לי לעדכן את המשתנה עכשיו להיות 100 $ נשארו בחשבון." 760 00:44:54,890 --> 00:44:58,780 אבל אם שניהם בדקו את יתרת החשבון ומצא שזה 200 דולרים 761 00:44:58,780 --> 00:45:02,000 ושניהם אז תעשו את החשבון ואומרים 200-100, 762 00:45:02,000 --> 00:45:06,990 את המכונות באופן פוטנציאלי לירוק שני שטרות של 100 $ בכל מכונה, 763 00:45:06,990 --> 00:45:11,360 אבל הם עדכנו את יתרת חשבון הסכום שלך רק כדי להיות 100 $. 764 00:45:11,360 --> 00:45:15,130 במילים אחרות, שהוצאת 200 דולרים, אבל בגלל שהם בדקו את מצבו של העולם 765 00:45:15,130 --> 00:45:18,840 החלטה המבוססת על הערך שבו זמנית, ואז, 766 00:45:18,840 --> 00:45:21,930 הם אולי לא יעשו את החשבון בסופו כראוי. 767 00:45:21,930 --> 00:45:25,520 אז במצב בנק מדי אתה באמת רוצה לקבל קצת סוג של השבתה 768 00:45:25,520 --> 00:45:28,450 כך שברגע שאתה כבר בדקת את מצבו של משתנה מסוים 769 00:45:28,450 --> 00:45:31,220 שבאמת חשוב, כמו יתרת חשבונך, 770 00:45:31,220 --> 00:45:36,070 לא תנתנו לאף אחד לקבל החלטות המבוססות על שעד שתסיימו לעשות את הדבר שלך, 771 00:45:36,070 --> 00:45:38,920 במקרה הזה שבו אתה נמצא כספומט בצד השמאל. 772 00:45:38,920 --> 00:45:41,160 לנעול את כולם. 773 00:45:41,160 --> 00:45:44,650 למעשה אתה יכול להשיג את האפקט הזה בכמה דרכים שונות. 774 00:45:44,650 --> 00:45:48,660 >> הדרך הפשוטה ביותר בMySQL היא קו של SQL שנתנו לך 775 00:45:48,660 --> 00:45:52,030 במפרט סט הבעיה שנראה בדיוק כמו זה. 776 00:45:52,030 --> 00:45:57,420 הכנס את התקליטור לשולחן - איך שקורא - איד, סמל, ומניה, מספר המניות, 777 00:45:57,420 --> 00:45:59,660 הערכים הבאים, למשל. 778 00:45:59,660 --> 00:46:03,370 אם לא קראת את המפרט עדיין, זוהי דוגמה המעורבת איך אתה הולך על 779 00:46:03,370 --> 00:46:07,340 קונה 10 מניות פרוטות זו לנשיא Skroob, 780 00:46:07,340 --> 00:46:10,340 זיהוי המשתמש שקורה להיות המספר 7? 781 00:46:10,340 --> 00:46:14,070 זה אומר INSERT INTO שולחן id הבא, סמל, ומספר המניות 782 00:46:14,070 --> 00:46:18,200 מתוך 7, 'DVN.V', ו10. 783 00:46:18,200 --> 00:46:21,510 אבל - אבל, אבל, אבל - הקו השני הוא אחד החשוב. 784 00:46:21,510 --> 00:46:26,310 על מניות UPDATE מפתח משוכפלות = מניות + VALUES (מניות). 785 00:46:26,310 --> 00:46:28,350 אז לחלוטין מסתורי למראה במבט הראשון. 786 00:46:28,350 --> 00:46:31,990 אבל העובדה ששאילתא SQL זו, למרות שהיא עוטפת על 2 קווים, 787 00:46:31,990 --> 00:46:35,920 שאילתא היא ארוכה 1, זה אומר שזה אטומי 788 00:46:35,920 --> 00:46:41,000 במובן זה ששאילתא זו תהיה גם תבוצע כולם יחד או בכלל לא. 789 00:46:41,000 --> 00:46:45,100 ולפי הגדרה של MySQL, זה איך הם יישמו שאילתא זו. 790 00:46:45,100 --> 00:46:51,010 זה בהגדרה במדריך המובטח לבצע בבת אחת או בכלל לא. 791 00:46:51,010 --> 00:46:54,020 המוטיבציה לכך היא כדלקמן. 792 00:46:54,020 --> 00:46:58,540 אם במקרה הזה אתה מנסה לקנות 10 מניות, 793 00:46:58,540 --> 00:47:02,260 זה סוג של הסיפור הזהה לחלב, שזה סוג של הסיפור הזהה לכספומט. 794 00:47:02,260 --> 00:47:04,970 >> אם אתה עושה את הטעות של שימוש לא תחביר זה 795 00:47:04,970 --> 00:47:09,610 אך במקום בחירה מתוך מסד הנתונים לראות כמה מניות פרוטות זה 796 00:47:09,610 --> 00:47:13,750 אין הנשיא Skroob יש, ומניח שיש לו 10 מניות, 797 00:47:13,750 --> 00:47:19,330 ועוד קצת שבריר שני מאוחר יותר אז אתה עושה משפט UPDATE, 798 00:47:19,330 --> 00:47:24,810 וזה עוד הצהרה ב-SQL שאומר להמשיך ולהוסיף עוד 10 מניות 799 00:47:24,810 --> 00:47:28,700 עד 10 הנוכחיים, כך שאופן אידיאלי הכולל הוא 20, 800 00:47:28,700 --> 00:47:33,490 הבעיה היא כי במערכות מסדי הנתונים של היום וכי במחשבים של היום 801 00:47:33,490 --> 00:47:35,990 יש לך במעבדים מרובים ליבות, מרובות - 802 00:47:35,990 --> 00:47:38,920 במילים אחרות, מחשבים יכולים ממש לעשות דברים מרובים בבת אחת - 803 00:47:38,920 --> 00:47:44,270 אין שום ערובה שSELECT שלך ולעדכנך במקרה זה 804 00:47:44,270 --> 00:47:46,150 הולכים לקרות גב אל גב. 805 00:47:46,150 --> 00:47:49,140 אז תרחיש גרוע היה שאתה עושה SELECT 806 00:47:49,140 --> 00:47:51,670 כדי לראות כמה מניות פרוטות זה אינו Skroob יש, 807 00:47:51,670 --> 00:47:54,710 ואז פשוט במקרה אחר שאילתא מסד נתונים מתבצעת - 808 00:47:54,710 --> 00:47:57,740 אולי Skroob שלו בחלון דפדפן אחר מנסה לקנות 10 מניות 809 00:47:57,740 --> 00:48:00,700 בחלון אחר לגמרי, ממש כמו הכספומט - 810 00:48:00,700 --> 00:48:05,410 ותניח ששאילתא אחרת מקבלת בין SELECT והעדכון. 811 00:48:05,410 --> 00:48:10,210 זה יכול להיות המקרה שSkroob עכשיו מאבד חלק מספר המניות 812 00:48:10,210 --> 00:48:14,340 מכיוון שתהליך אחר בדיקת המצב של עולמו, 813 00:48:14,340 --> 00:48:17,800 או שהוא מקבל יותר מניות ממה שהוא צריך. 814 00:48:17,800 --> 00:48:23,250 אנחנו לא נכנסנו לפרטים של מה בדיוק קווי עלילה מסוימים האלה יהיו, 815 00:48:23,250 --> 00:48:28,380 אבל הנקודה היא שאם יש לך כדי לבדוק את ערך משתנים ולאחר מכן לקבל החלטה, 816 00:48:28,380 --> 00:48:32,500 אם יש סיכון למישהו אחר לעשות משהו בבין 2 האמירות האלה, 817 00:48:32,500 --> 00:48:36,220 כמו שיכול לקרות במערכות מרובות מעבד, מערכות מרובות ליבה ב, 818 00:48:36,220 --> 00:48:41,220 מחשבים עם היכולת לעשות דברים רבים בבת אחת, דברים רעים יכולים לקרות 819 00:48:41,220 --> 00:48:44,530 חשבונות הבנק כמו שחויבו באופן שגוי, קנייה כפליים חלב, 820 00:48:44,530 --> 00:48:46,730 או במקרה זה המספר הלא הנכון של מניות. 821 00:48:46,730 --> 00:48:48,370 אבל יש דרך קלה יותר לחשוב על זה. 822 00:48:48,370 --> 00:48:53,290 >> מתברר שגם תומך SQL, אם תגדיר את הטבלה בצורה נכונה, 823 00:48:53,290 --> 00:48:56,920 משהו שנקרא עסקות, שאני טוען הוא למעשה גם קל יותר להבנה 824 00:48:56,920 --> 00:49:00,650 מזה, אבל זה לא 1-אונייה, אז זה באמת קצת יותר מעורב. 825 00:49:00,650 --> 00:49:04,960 יש ממש בהצהרת SQL נקראת עסקת START. 826 00:49:04,960 --> 00:49:08,300 בדיוק כמו שיש SELECT, UPDATE, INSERT, DELETE, ולהצטרף וחבורה של אחרים, 827 00:49:08,300 --> 00:49:10,970 יש מילות מפתח כמו עסקת START. 828 00:49:10,970 --> 00:49:13,560 ומה שאתה עושה אז בהקשר של 7 pset - 829 00:49:13,560 --> 00:49:17,270 אתה לא צריך לעשות את זה בשביל 7 pset; הוא הכחיש באופן מפורש שלא הכרחי, 830 00:49:17,270 --> 00:49:18,830 אבל לעבודות גמר שהוא יכול להיות שימושי - 831 00:49:18,830 --> 00:49:22,820 אם אתה קורא לשאילתא של עסקת START ואז שאילתא אחרת 832 00:49:22,820 --> 00:49:25,620 ואז שאילתא אחרת ואז עוד אחד, עוד אחד ועוד, 833 00:49:25,620 --> 00:49:31,860 שאילתות אלה לא תבוצענה בפועל עד שאתה קורא את משפט SQL להתחייב, 834 00:49:31,860 --> 00:49:37,220 ובשלב זה, בין אם זה 2 הצהרות או 20 הצהרות, הם יהיו כולם מבוצעים בפעם אחת, 835 00:49:37,220 --> 00:49:42,770 מה שאומר שאף אחד אחר לא יכול לקנות יותר מדי חלב או חיוב יותר מדי כסף בטעות 836 00:49:42,770 --> 00:49:46,340 או לקנות מניות רבות מדי, משום שכל השאילתות שלך יהיה לבצע 837 00:49:46,340 --> 00:49:48,410 גב אל גב אל הגב אל גב. 838 00:49:48,410 --> 00:49:51,580 וזה סופר חשוב, במיוחד כשאתה עושה משהו כזה. 839 00:49:51,580 --> 00:49:54,900 זוהי דוגמה שרירותית, שאומרת בואו לעדכן את חשבון הבנק 840 00:49:54,900 --> 00:50:00,200 על ידי קביעת איזון שווה לאיזון - 1000 $ שבו מספר החשבון הוא 2. 841 00:50:00,200 --> 00:50:04,260 ואז המשפט השני עכשיו בואו להפקיד ש1000 $ 842 00:50:04,260 --> 00:50:07,310 למישהו אחר בחשבון הבנק שחשבונו מספר 1. 843 00:50:07,310 --> 00:50:10,400 >> במילים אחרות, זו היא דוגמה מושלמת למקום בו אתה רוצה לוודא 844 00:50:10,400 --> 00:50:13,590 כי שתי ההצהרות אלה יקרו, או בכלל לא 845 00:50:13,590 --> 00:50:15,450 כי אחר הלקוח הולך לזיין 846 00:50:15,450 --> 00:50:17,670 ואתה הולך לקחת את הכסף שלהם ולא להפקיד אותו במקום אחר, 847 00:50:17,670 --> 00:50:20,470 או הבנק הולך לזיין לאן אתה הולך להפקיד את הכסף 848 00:50:20,470 --> 00:50:23,140 אבל לא ממש לחסר אותו מהחשבון של המשתמש. 849 00:50:23,140 --> 00:50:25,810 אז אתה רוצה את שניהם לבצע יחד. 850 00:50:25,810 --> 00:50:29,140 כך נכנס לעסקות בעולם. 851 00:50:29,140 --> 00:50:31,360 אז זה משהו שצריך לשמור בחלק האחורי של המוח שלך, 852 00:50:31,360 --> 00:50:34,710 לא כל כך לעניין פשוט פרויקט גמר, 853 00:50:34,710 --> 00:50:36,700 אם אתה רוצה לקחת את פרויקט הגמר שלך במקום כלשהו, ​​אבל, 854 00:50:36,700 --> 00:50:39,040 אם אתה רוצה להתחיל את חלק החברה סביבו, 855 00:50:39,040 --> 00:50:41,270 אם אתה רוצה לפתור בעיה כלשהי של קבוצת סטודנטים בקמפוס 856 00:50:41,270 --> 00:50:45,210 ובאמת יש חית אתר אינטרנט, פעיל, אלה הם הסוג של חרקים עדינים שיכול להתעורר 857 00:50:45,210 --> 00:50:49,480 אם אתה לא ממש חושב דרך מה שיכול לקרות אם 2 אנשים 858 00:50:49,480 --> 00:50:54,190 מנסים לגשת לאתר האינטרנט שלך, פשוטו כמשמעו, באותו הרגע בזמן, 859 00:50:54,190 --> 00:50:56,890 לפי השאילתות שלהם אחרות עלולות לקבל בערבוביה. 860 00:50:58,840 --> 00:51:01,420 >> מוכן לקצת JavaScript, טיזר? 861 00:51:01,420 --> 00:51:04,320 זוהי שפתנו האחרונה לסמסטר. בסדר. 862 00:51:04,320 --> 00:51:09,940 למרבה המזל, JavaScript נראה מאוד, מאוד, מאוד דומה ל2 השפות, C ו-PHP, 863 00:51:09,940 --> 00:51:11,140 שעשינו עד כה. 864 00:51:11,140 --> 00:51:14,340 אין JavaScript ב7 pset, אבל זה כלי שימושי להפליא 865 00:51:14,340 --> 00:51:18,840 כשזה מגיע לביצוע עבודות גמר מבוסס אינטרנט או באמת רק תכנות האינטרנט באופן כללי יותר. 866 00:51:18,840 --> 00:51:20,950 אז סקירה מהירה של משהו שנקרא DOM. 867 00:51:20,950 --> 00:51:23,600 הנה דף אינטרנט פשוט סופר כי באמת רק אומר שלום, עולם 868 00:51:23,600 --> 00:51:25,970 הן בכותרת ובגוף. 869 00:51:25,970 --> 00:51:29,270 ככניסה כבר הציעה לכמה זמן, 870 00:51:29,270 --> 00:51:31,380 אכן יש היררכיה לדפי אינטרנט. 871 00:51:31,380 --> 00:51:34,220 אני יכול לצייר אותו קטע HTML זה כמו עץ, 872 00:51:34,220 --> 00:51:37,470 חשבתי לחזור לדיונים שלנו של מבני נתונים ב C, כדלקמן. 873 00:51:37,470 --> 00:51:40,710 יש לי קצת צומת שורש מיוחד הנקרא צומת המסמך, 874 00:51:40,710 --> 00:51:43,650 ואנו רואים בזה אנלוגי של JavaScript ברגע. 875 00:51:43,650 --> 00:51:48,330 הילד הראשון והילד היחיד של אותו במקרה זה הוא תג HTML. 876 00:51:48,330 --> 00:51:49,880 אין מיפוי ישיר של doctype. 877 00:51:49,880 --> 00:51:53,170 זה דבר מיוחד, אז אנחנו צריכים פשוט להתעלם מזה כשזה מגיע לDOM זה, 878 00:51:53,170 --> 00:51:55,810 העץ הזה מסמכי אובייקט הדגם. 879 00:51:55,810 --> 00:51:59,530 שים לב שתג HTML, שאני כבר תארתי באופן שרירותי כמלבן, 880 00:51:59,530 --> 00:52:02,890 יש 2 ילדים: בראש ובגוף. 881 00:52:02,890 --> 00:52:04,840 >> אלה נמשכים באופן דומה כמו מלבנים. 882 00:52:04,840 --> 00:52:08,970 זה משמעותי ציורי שהראש הוא בצד השמאל של גוף. 883 00:52:08,970 --> 00:52:11,960 המשמעות היא שהראש מגיע ראשון בעץ. 884 00:52:11,960 --> 00:52:14,910 אז יש בעצם הזמנה לעץ כשאתה מצייר את זה ככה, 885 00:52:14,910 --> 00:52:17,460 למרות הצורות ומה לא הן שרירותיות. 886 00:52:17,460 --> 00:52:20,360 ראש בינתיים יש ילד אחד בשם הכותרת, 887 00:52:20,360 --> 00:52:25,170 וכותרת באמת יש ילד משלה, שהוא "שלום, העולם", 888 00:52:25,170 --> 00:52:32,210 שאני בכוונה משכתי כסגלגל כאן כדי לעשות את זה מעט שונה מהמלבן. 889 00:52:32,210 --> 00:52:37,420 מלבנים אלו הם אלמנטים, ואילו שלום, העולם הוא באמת צומת טקסט. 890 00:52:37,420 --> 00:52:39,850 אז זה צומת בעץ, אבל זה סוג אחר של צומת 891 00:52:39,850 --> 00:52:41,730 אז ציירתי אותו באופן שרירותי בצורה שונה. 892 00:52:41,730 --> 00:52:45,000 כמו כן אין גוף יש לי ילד בשם שלום, עולם, כמו גם, 893 00:52:45,000 --> 00:52:47,910 צומת כל כך שונה למרות שהם במקרה את אותו הטקסט, 894 00:52:47,910 --> 00:52:52,100 אבל אני ציירתי אותו תוך שימוש באותה הצורה. אז למי אכפת? 895 00:52:52,100 --> 00:52:56,820 ובכן, מה שיפה הוא שHTML זה צריך אופי היררכי זה. 896 00:52:56,820 --> 00:53:01,010 ומה שיפה במיוחד JavaScript וספריות שהם זמינים באופן חופשי 897 00:53:01,010 --> 00:53:07,120 ופופולרי כמו jQuery, תוכל לנווט את מבנה העץ כל כך קל להפליא. 898 00:53:07,120 --> 00:53:11,790 כל אחד מהדברים שעשינו בC עם מצביעים ועצים חוצים וrecursing בצומת 899 00:53:11,790 --> 00:53:15,300 ילד שמאל לימין ילד, פתאום אנחנו יכולים כאילו לוקחים כמובן מאליו 900 00:53:15,300 --> 00:53:19,450 כלהפליא מאיר עיניים, אם לא קצת מתסכל 901 00:53:19,450 --> 00:53:22,470 אבל לא כל דרך יעילה ללכת על תכנות. 902 00:53:22,470 --> 00:53:24,470 וכך, בשפות ברמה גבוהות האלה כמו JavaScript 903 00:53:24,470 --> 00:53:28,340 נהיה מסוגל לנווט את העץ הזה הרבה יותר אינטואיטיבית. 904 00:53:28,340 --> 00:53:30,430 >> ואכן התחביר הולך להיות די מוכר. 905 00:53:30,430 --> 00:53:32,950 אם מעולם לא ראית לפני JavaScript, זו התייחסות ממש נחמדה 906 00:53:32,950 --> 00:53:35,910 מאנשי מוזילה, את האנשים שעושים את פיירפוקס, 907 00:53:35,910 --> 00:53:38,370 אז אל תהסס לגלוש שבנוח לך. 908 00:53:38,370 --> 00:53:41,590 מה שתגלה - והשקופיות האלה הן זהות למה שהיינו לפני כמה הימים - 909 00:53:41,590 --> 00:53:44,030 באופן דומה, העיקרי הוא נעלם. 910 00:53:44,030 --> 00:53:47,010 לכן, כאשר אתה כותב תכנית ב-JavaScript, אין פונקציה עיקרית. 911 00:53:47,010 --> 00:53:48,690 אתה פשוט תתחיל לכתוב קוד. 912 00:53:48,690 --> 00:53:51,660 אבל הבחנה עיקרית בין JavaScript ו-C ו-PHP 913 00:53:51,660 --> 00:53:55,890 הוא שבעוד שC ו-PHP עד כה הוצאו להורג בצד השרת 914 00:53:55,890 --> 00:53:59,180 על ידי המכשיר במקרה הזה או באופן כללי יותר על ידי שרת, 915 00:53:59,180 --> 00:54:04,270 JavaScript על ידי עיצוב בדרך כלל מבוצע על ידי דפדפן. 916 00:54:04,270 --> 00:54:08,440 במילים אחרות, אתה יכול לכתוב קוד JavaScript, כמו שאנחנו עומדים, 917 00:54:08,440 --> 00:54:13,080 בשרת במכשיר, אבל אתה לכלול אותו בין ה-HTML, CSS בקרבך, 918 00:54:13,080 --> 00:54:16,100 בין GIFs וPNGs ותמונות JPEG שלך 919 00:54:16,100 --> 00:54:19,170 כך שכאשר המשתמש מבקר בדף האינטרנט שלך, אם אתה משתמש ב-JavaScript, 920 00:54:19,170 --> 00:54:21,770 קוד JavaScript שמגיע משרת לדפדפן, 921 00:54:21,770 --> 00:54:24,540 וזה דפדפן שלמעשה מבצע אותה. 922 00:54:24,540 --> 00:54:27,960 אז יש לכך השלכות משמעותיות על רכוש ואפילו רוחני. 923 00:54:27,960 --> 00:54:32,600 זה סוג של מטופש אפילו לחשוב על הגנה על ה-IP שלך כאשר זה מגיע לקוד JavaScript 924 00:54:32,600 --> 00:54:37,560 כי על ידי טבעה של השפה שהיא תקבל להורג צד דפדפן בדרך כלל. 925 00:54:37,560 --> 00:54:40,360 >> אתה יכול לטשטש את זה, מה שאומר שאתה יכול לעשות את זה נראה מטורף ומכוער 926 00:54:40,360 --> 00:54:45,400 ללא רווחים, שמות משתנים איומים, כדי לעשות את זה קשה יותר עבור אנשים כדי לגנוב IP שלך, 927 00:54:45,400 --> 00:54:48,120 אבל המפתח הוא שהוא מבוצע בצד דפדפן. 928 00:54:48,120 --> 00:54:51,790 למרות כצד שרת צד ניתן להשתמש ב-JavaScript, 929 00:54:51,790 --> 00:54:54,480 השימוש הנפוץ ביותר ברגע זה הוא עדיין בדפדפן. 930 00:54:54,480 --> 00:54:59,800 והנה מה שזה נראה. הנה אם-אחר אם אחר, לבנות בדיוק כמו C, בדיוק כמו PHP. 931 00:54:59,800 --> 00:55:02,420 הנה ביטוי בוליאני כאשר אתה "או" 2 דברים ביחד. 932 00:55:02,420 --> 00:55:04,330 כאן הוא כאשר אתה "ו" 2 דברים ביחד. 933 00:55:04,330 --> 00:55:08,300 הנה הצהרה בוררת, אשר דומה ל-PHP 934 00:55:08,300 --> 00:55:10,810 בכך שתוכלו לעבור על סוגים שונים של ערכים. 935 00:55:10,810 --> 00:55:15,180 הלולאות באופן דומה יש ללולאות כאן, שבנויות בצורה זהה למה שראינו בעבר. 936 00:55:15,180 --> 00:55:18,110 בעוד לולאות; יש לנו לעשות בזמן לולאות. 937 00:55:18,110 --> 00:55:20,290 משתנה, לא הייתה בצורה. 938 00:55:20,290 --> 00:55:24,560 אתה להצהיר על משתנה כמו שאתה עושה ב-PHP ו-C, 939 00:55:24,560 --> 00:55:27,860 אבל דומה JavaScript הקלדה בחולשה. 940 00:55:27,860 --> 00:55:32,730 לא תציין int או float או מחרוזת או משהו כזה בדרך כלל. 941 00:55:32,730 --> 00:55:34,240 ניתן לציין var. 942 00:55:34,240 --> 00:55:38,040 אתה לא צריך לציין var, אבל יש לו השלכות, אם אתה לא יודע. 943 00:55:38,040 --> 00:55:42,000 בדרך כלל אם אתה משמיט var, אתה יוצר בטעות משתנה גלובלי במקום מקומי. 944 00:55:42,000 --> 00:55:46,420 אז תרשה לי להציע לך שכמעט תמיד רק לומר var ואז את השם של המשתנה. 945 00:55:46,420 --> 00:55:48,740 זה לא סוג, זה רק var למשתנה. 946 00:55:48,740 --> 00:55:52,930 זו תהיה דוגמה, אם זה 123 או "שלום, עולם". 947 00:55:52,930 --> 00:55:58,910 מערכים הם הווה ותחבירי דומים ל-PHP. 948 00:55:58,910 --> 00:56:03,690 אני אגיד את מספרי var ואז אני משתמש בסוגריים מרובעים שוב כדי להצהיר על משתנה 949 00:56:03,690 --> 00:56:08,870 הסוג שלו הוא מערך שיש המספרים הללו מסוימים בזה המופרד בפסיקים. 950 00:56:08,870 --> 00:56:11,740 ואז לבסוף, זה הוא היחיד שבאמת נראה שונים. 951 00:56:11,740 --> 00:56:16,700 תזכיר כי ב-PHP היינו יישמתי מערך אסוציאטיבי לתלמיד 952 00:56:16,700 --> 00:56:20,220 כמו Zamyla שעשוי להיראות כך, כאשר המשתנה נקרא תלמיד. 953 00:56:20,220 --> 00:56:23,370 הסוגריים המרובעים אומרים כאן מגיע מערך. 954 00:56:23,370 --> 00:56:28,500 >> העובדה שאני לא משתמש במדדים אלא מחרוזות מספריים - האיד, בית, ושם - 955 00:56:28,500 --> 00:56:30,990 משמעות דבר הוא כי זה מערך אסוציאטיבי, 956 00:56:30,990 --> 00:56:34,490 וחיצים אלה עם סימן השוויון והסוגר זוויתי 957 00:56:34,490 --> 00:56:37,310 משמעות דבר הוא שהמפתח הוא "ID", הערך הוא 1; 958 00:56:37,310 --> 00:56:39,310 המפתח הוא "בית", הערך הוא ינתרופ הבית; 959 00:56:39,310 --> 00:56:41,800 המפתח הוא "שם", הערך הוא Zamyla צ'אן. 960 00:56:41,800 --> 00:56:47,110 אז יש 3 מפתחות בפנים של מערך זה אסוציאטיבי, כל אחד מהם יש לו הערך בפני עצמו. 961 00:56:47,110 --> 00:56:52,880 אנו רואים כי ב7 pset, או שבקרוב, באותו הרעיון JavaScript, 962 00:56:52,880 --> 00:56:55,220 אבל זה הולך להיראות כך. 963 00:56:55,220 --> 00:57:00,070 סטודנט אז var - שום סימן של דולר ושום אזכור לסוג עדיין אבל var - 964 00:57:00,070 --> 00:57:05,860 שווה ולאחר מכן פתח סוגריים מסולסלים, כי ב-JavaScript כאשר יש לך זוגות ערך מפתח, 965 00:57:05,860 --> 00:57:08,900 אתה בעצם משתמש במשהו שנקרא אובייקט. 966 00:57:08,900 --> 00:57:13,490 ואלה מכם שלא לקחת נגמ"שים או כמו שתארו את האובייקטים מג'אווה 967 00:57:13,490 --> 00:57:15,140 או שפות דומות. 968 00:57:15,140 --> 00:57:17,880 JavaScript היא לא ג'אווה, קודם כל. 969 00:57:17,880 --> 00:57:21,600 זה היה לפני שנים והחלטות עיצוב מכוונות לדפוק את משהו אחר שהיה פופולרי, 970 00:57:21,600 --> 00:57:25,640 שמו, למרות שאין לה שום קשר מהותי לג'אווה עצם. 971 00:57:25,640 --> 00:57:31,490 JavaScript יש אובייקטים, ואתה יוצר אותם בדרך של סימון הסד המתולתל. 972 00:57:31,490 --> 00:57:36,710 אובייקטים ב-JavaScript הם פחות או יותר שווים ערך למערכים אסוציאטיביים ב-PHP 973 00:57:36,710 --> 00:57:40,030 כשזה מגיע לאחסון נתונים בתוכם. 974 00:57:40,030 --> 00:57:44,100 >> אבל אפילו בעצמה חזקה יותר ב-JavaScript, תוכל לשייך פונקציות מאוד בקלות 975 00:57:44,100 --> 00:57:48,040 פנימי של אובייקט, ולמרות שאתה יכול לעשות את זה גם בשפות אחרות, 976 00:57:48,040 --> 00:57:50,040 זה די פרדיגמה משותפת, כפי שנראה. 977 00:57:50,040 --> 00:57:54,380 בקיצור, אובייקט זה מייצג תלמיד, שבמיוחד Zamyla, 978 00:57:54,380 --> 00:58:00,380 וזה דומה רעיוני, פשוט תחבירי שונה מזה. 979 00:58:00,380 --> 00:58:03,840 בואו בעצם להשתמש ב-JavaScript בקובץ. 980 00:58:03,840 --> 00:58:05,570 מתברר שיש תג תסריט. 981 00:58:05,570 --> 00:58:08,180 ראינו תג וסגנון שראינו תגי HTML אחרים. 982 00:58:08,180 --> 00:58:11,510 תג סקריפט למעשה יכיל קצת קוד JavaScript. 983 00:58:11,510 --> 00:58:15,500 תן לי ללכת למכשיר שבו יש לנו קצת קוד מקור מראש את התוצרת. 984 00:58:15,500 --> 00:58:18,700 אני לא פרסמתי את זה עדיין באתר, אבל אני אעשה את זה אחרי השיעור. 985 00:58:18,700 --> 00:58:21,770 בואו נפתח את זה, blink.html. 986 00:58:21,770 --> 00:58:27,560 חזרה בשנת 1990, היה, פשוטו כמשמעו, תג HTML בשם תג ההרף, 987 00:58:27,560 --> 00:58:30,340 וזה היה אחד מהתגים להפליא השחוקים ביותר באינטרנט 988 00:58:30,340 --> 00:58:36,140 לפי שהיית בקר בדף אינטרנט מסוים בסגנון 1990, ותתחיל לראות את הטקסט המהבהב ככה, 989 00:58:36,140 --> 00:58:39,810 את התוצאות של תג המרקיז, שטקסט הולכות ככה. 990 00:58:39,810 --> 00:58:45,070 אחת הפעמים הבודדות שבו העולם כבר הסכים למעשה על אינטרנט רגיל, 991 00:58:45,070 --> 00:58:48,250 כולם על פני הלוח נהרג התג למצמץ לפני כמה שנים. 992 00:58:48,250 --> 00:58:52,860 אבל אנחנו יכולים להחיות אותו עם JavaScript כהפגנה של הכח שיש לך 993 00:58:52,860 --> 00:58:56,660 כאשר אתה יכול לכתוב תכנית פנימית של דף אינטרנט. 994 00:58:56,660 --> 00:59:00,240 ראשית בואו נדלג על הדברים החדשים ולהתמקד רק בזקן. 995 00:59:00,240 --> 00:59:01,780 >> הנה הדברים הישנים בדוגמה זו. 996 00:59:01,780 --> 00:59:06,350 יש לי תג HTML, תגית ראש, ותג כותרת. 997 00:59:06,350 --> 00:59:11,210 אז יש לי כאן עם תג גוף div, שההיזכרות היא רק חלוקה מלבנית של הדף 998 00:59:11,210 --> 00:59:14,720 שנתתי לו מזהה ייחודי שרירותי של "ברכה" ל, 999 00:59:14,720 --> 00:59:18,320 רק אז יש לי דרך של התייחסות ייחודית לזה, שיש לו חלק מטקסט פשוט מאוד: 1000 00:59:18,320 --> 00:59:20,220 שלום, עולם. 1001 00:59:20,220 --> 00:59:23,940 עכשיו בואו לגלול אותי לחלק העליון של קובץ זה ולראות מה חדש. 1002 00:59:23,940 --> 00:59:27,710 הדבר הראשון זה למעלה חדש הוא תג התסריט, 1003 00:59:27,710 --> 00:59:31,280 ובתוך תג סקריפט ההודעה שהכרזתי זה עתה פונקציה. 1004 00:59:31,280 --> 00:59:34,610 להכריז על פונקציה ב-JavaScript, די דומה ל-PHP, 1005 00:59:34,610 --> 00:59:37,930 אתה ממש לכתוב פונקציה אז את השם של הפונקציה, סוגריים, 1006 00:59:37,930 --> 00:59:40,400 ואולי כמה טיעונים אם זה לוקח כל. 1007 00:59:40,400 --> 00:59:43,510 אז יש לי סד המתולתל שלי כרגיל, ועכשיו יש לנו קצת קוד חדש במקצת, 1008 00:59:43,510 --> 00:59:45,230 אבל בואו נראה מה זה אומר. 1009 00:59:45,230 --> 00:59:48,670 אז div var, זה רק אומר שייתן לי div שנקרא משתנה. 1010 00:59:48,670 --> 00:59:50,530 אני יכול לקרוא לה foo, אבל רצה שזה ייקרא div 1011 00:59:50,530 --> 00:59:52,620 מסיבות שתהיינה ברורים בשני. 1012 00:59:52,620 --> 00:59:57,480 אז מתברר בJavaScript - וזה קוד JavaScript המוטבע בדף האינטרנט שלי - 1013 00:59:57,480 --> 01:00:01,760 יש משתנה גלובלי מיוחד של מינים הנקראים מסמך. 1014 01:00:01,760 --> 01:00:04,780 JavaScript היא למעשה שפה מונחה עצמים. 1015 01:00:04,780 --> 01:00:07,230 אנחנו לא נכנסנו לפרטים ב50 על מה זה אומר, 1016 01:00:07,230 --> 01:00:11,180 אך לעת עתה יודע שמטרה היא פחות או יותר כמו struct. 1017 01:00:11,180 --> 01:00:14,740 כמו שראינו בדרך חזרה, כאשר אחד של הבעיה המוקדמת קובע 1018 01:00:14,740 --> 01:00:17,150 בו אנחנו שמים הרבה מידע בstruct, 1019 01:00:17,150 --> 01:00:21,330 דומה הוא לתעד struct מיוחד שמגיע עם הדפדפן, 1020 01:00:21,330 --> 01:00:24,810 מגיע עם כל דף אינטרנט. זה לא משהו שאני יצרתי. 1021 01:00:24,810 --> 01:00:28,210 בתוך מבנה מסמך זה, אם כי, יש לך לא רק נתונים 1022 01:00:28,210 --> 01:00:30,010 אבל יש לך גם פונקציות. 1023 01:00:30,010 --> 01:00:34,090 >> וכל זמן יש לך תפקוד פנימי של מבנה, בתוך אובייקט, 1024 01:00:34,090 --> 01:00:36,490 זה נקרא שיטה. אבל זה אותו הדבר. 1025 01:00:36,490 --> 01:00:40,110 שיטה היא פונקציה שפשוט קורה כל כך להיות בתוך משהו אחר. 1026 01:00:40,110 --> 01:00:42,990 אז זה אומר שהמשתנה הגלובלי המיוחד הזה שנקרא מסמך 1027 01:00:42,990 --> 01:00:47,690 יש פונקציה שנקראת getElementById שממש עושה את זה. 1028 01:00:47,690 --> 01:00:52,460 כך לא יגיע לאלמנט מDOM, עץ מודל אובייקטים של מסמך, 1029 01:00:52,460 --> 01:00:55,520 זהות שלו הוא במקרה ברכה זו. 1030 01:00:55,520 --> 01:00:59,200 במילים אחרות, כל הזמן שבילינו במבני נתונים נכנס לשחק כאן. 1031 01:00:59,200 --> 01:01:01,400 תמונה זו של DOM שהיה לנו לפני רגע, 1032 01:01:01,400 --> 01:01:06,100 למרות שהדף הוא קצת שונה, אם יש לי div בתמונה הזאת, 1033 01:01:06,100 --> 01:01:11,180 מה document.getElementById היה חוזר אליי הייתי יעיל יהיה מצביע 1034 01:01:11,180 --> 01:01:15,440 למלבן בעץ, התייחסות למלבן בעץ. 1035 01:01:15,440 --> 01:01:18,410 אז זה מה שזה אומר בעצם לקרוא לאחת מהפונקציות הללו. 1036 01:01:18,410 --> 01:01:21,960 במקרה זה שוב זה div. זה לא גוף או כותרת. 1037 01:01:21,960 --> 01:01:26,480 אז בואו לראות מה אני עושה אז עם div זה עכשיו כי יש לי את זה בפנים של div זה משתנה בשם. 1038 01:01:26,480 --> 01:01:32,580 מתברר שיש לך עם JavaScript היכולת לצבוט CSS של הדף שלך באופן דינמי. 1039 01:01:32,580 --> 01:01:39,060 עד עתה, כל CSS שעשינו, אף כי מוגבל, הוא בתכונות סגנון, 1040 01:01:39,060 --> 01:01:41,730 או אחר שבו יש לנו לשים CSS? 1041 01:01:42,730 --> 01:01:45,810 אני סוג של שאחד מפונק. בתגית הסגנון בחלק העליון של הקובץ. 1042 01:01:45,810 --> 01:01:49,180 או מקום שלישי כבר ב? 1043 01:01:50,710 --> 01:01:54,590 >> קובץ חיצוני, משהו. CSS. 1044 01:01:54,590 --> 01:01:56,730 אז אלה הם 3 המקומות שעשו CSS עד כה, 1045 01:01:56,730 --> 01:01:59,310 אבל המלכוד הוא שאנחנו מקודדים קשים כל זה. 1046 01:01:59,310 --> 01:02:04,060 החלטת שכצללת ל7 pset, החליט לפני להרצות מה CSS שלנו יהיה. 1047 01:02:04,060 --> 01:02:07,380 אבל אם אתה רוצה לשנות CSS שלך, למעשה אתה יכול לעשות את זה 1048 01:02:07,380 --> 01:02:09,370 פעם אחת יש לך שפת תכנות בפועל. 1049 01:02:09,370 --> 01:02:13,910 CSS, HTML - שפות תכנות לא. JavaScript היא. 1050 01:02:13,910 --> 01:02:18,200 אז מתברר שברגע שיש לך אחד מהמלבנים האלה מהעץ 1051 01:02:18,200 --> 01:02:23,050 שם DOM, יש לו את עצמו חלק ממידע שבתוכה. 1052 01:02:23,050 --> 01:02:27,820 אז div שאני פשוט תפסתי מהעץ יש את מה שנכנה מאפיין בתוכו 1053 01:02:27,820 --> 01:02:34,390 כינה את הסגנון, ויש מאפיין הסגנון עצמו רכוש בשם שקיפות. 1054 01:02:34,390 --> 01:02:37,330 אני יודע שזה רק על ידי מחפש את המדריך למשתמש ב-CSS. 1055 01:02:37,330 --> 01:02:41,160 מתברר שיש מאפיין תצוגת CSS שעושה מה שהוא אומר. 1056 01:02:41,160 --> 01:02:44,530 זה עושה משהו גלוי או לא, גלוי או לא. 1057 01:02:44,530 --> 01:02:46,810 ואיך אתה עושה את זה. 1058 01:02:46,810 --> 01:02:50,510 אני שואל אם תכנותי הנראות של div הזה נסתר, 1059 01:02:50,510 --> 01:02:53,390 מה אני יכול לשנות את זה? גלוי לעין. 1060 01:02:53,390 --> 01:02:58,840 אחר אם את הנראות של דף זה אינה מוסתר, באופן הגיוני אני עושה את זה מוסתר. 1061 01:02:58,840 --> 01:03:04,070 אין לי מושג למה זה גלוי ונסתר ולא נראה ובלתי נראה. 1062 01:03:04,070 --> 01:03:06,000 זו הייתה החלטת תכנון לקויה לאורך הדרך. 1063 01:03:06,000 --> 01:03:09,530 אבל אלה הם אכן ניגודים בCSS: גלויים ונסתרים. 1064 01:03:09,530 --> 01:03:15,520 כל זה לא הוא זה אומר לשנות את ה-CSS של הקובץ שלי וכיבוי, וכיבוי 1065 01:03:15,520 --> 01:03:16,870 שלdiv מסוים. 1066 01:03:16,870 --> 01:03:20,630 אבל שוב, זו פונקציה שנקראת הרף. כאשר פונקצית ההרף נקראת? 1067 01:03:20,630 --> 01:03:24,080 מתברר שיש עוד חלון משתנה גלובלי מיוחד שנקרא, 1068 01:03:24,080 --> 01:03:28,220 דומה ברוח מסמך, אך בעוד שהמסמך מתייחס לדף האינטרנט שלך, 1069 01:03:28,220 --> 01:03:31,700 כמו עץ ​​DOM, HTML שנשלח מהשרת, 1070 01:03:31,700 --> 01:03:35,250 חלון מתייחס לכרום סביבו, בשורת הכתובת, שורת הכותרת, 1071 01:03:35,250 --> 01:03:37,880 וכל הדברים האלה מסביב דף האינטרנט שלך. 1072 01:03:37,880 --> 01:03:42,800 >> ומתברר שיש חלון האובייקט בתוך פונקציה מיוחדת שלו שנקרא setInterval 1073 01:03:42,800 --> 01:03:44,360 שעושה מה שהוא אומר. 1074 01:03:44,360 --> 01:03:48,600 זה יהיה להגדיר את מרווח זמן - במקרה זה כל 500 אלפיות שני - 1075 01:03:48,600 --> 01:03:52,270 ו, ינחש, מה זה הולך לעשות כל 500 אלפיות שני? 1076 01:03:52,270 --> 01:03:55,240 זה הולך לבצע שמצמוץ הפונקציה. 1077 01:03:55,240 --> 01:03:58,560 ומה שיפה כאן הוא שאנחנו יכולים לעשות את זה ב-C למרות שמעולם לא עשינו. 1078 01:03:58,560 --> 01:04:01,580 C האם יש משהו שנקרא מצביעי פונקציות שבו אתה יכול להעביר פונקציות סביב 1079 01:04:01,580 --> 01:04:03,140 כטיעונים. 1080 01:04:03,140 --> 01:04:07,620 כמו כן ב-JavaScript אתה יכול להעביר את השם של פונקציה לפונקציה אחרת. 1081 01:04:07,620 --> 01:04:10,630 ושים לב למה שאני עושה. אני לא עושה את זה. 1082 01:04:10,630 --> 01:04:14,380 אם אני שם סוגריים לאחר המצמוץ, זה אומר לקרוא את פונקצית ההרף. 1083 01:04:14,380 --> 01:04:17,430 אם אני פוסח עליהם, זאת אומרת כאן היא פונקצית המצמוץ 1084 01:04:17,430 --> 01:04:21,330 כך setInterval שאפשר לקרוא לזה כל 500 אלפיות שני. 1085 01:04:21,330 --> 01:04:28,200 אז התוצאה הסופית, אכזרי ככל שיהיה, היא שאם אני נכנסתי localhost וללכת לblink.html, 1086 01:04:28,200 --> 01:04:32,120 עכשיו יש לי את זה קורה שוב ושוב. 1087 01:04:32,120 --> 01:04:34,950 ואם אני באמת בודק אלמנט, בואו נראה אם ​​אנחנו יכולים לראות את זה. 1088 01:04:34,950 --> 01:04:38,550 תנו לי לבדוק אלמנט, בואו לגלול למטה רק קצת, 1089 01:04:38,550 --> 01:04:44,320 תן לי לבחור אלמנטים לכאן, ומבחין בתוך DOM של המפקח של הכרום. 1090 01:04:44,320 --> 01:04:48,840 זה ממש משתנה הלוך ושוב כל 500 אלפיות שני. 1091 01:04:48,840 --> 01:04:55,660 אם תלכו לידידנו נייט, 1092 01:04:55,660 --> 01:05:00,020 אם אי פעם תהה איך זה עובד רעיון, דומה עם מרווח, 1093 01:05:00,020 --> 01:05:04,810 אבל נייט למעשה עושה שימוש יעיל מאוד של צבע במקרה ספציפי זה כאן. 1094 01:05:04,810 --> 01:05:07,350 אז מה עוד יכולים בעצם אנחנו עושים עם זה? 1095 01:05:07,350 --> 01:05:09,990 בואו לפתוח את דוגמה נוספת ולנסות משהו 1096 01:05:09,990 --> 01:05:12,940 זה תכנותי אפילו יותר מועיל מביצוע מצמוץ דברים. 1097 01:05:12,940 --> 01:05:17,990 תן לי ללכת לספריית הטפסים שלנו היום ולהיכנס לform0. 1098 01:05:17,990 --> 01:05:20,820 זו הייתה הצורה המכוערת ביותר האפשרית שאני יכול לבוא עם, 1099 01:05:20,820 --> 01:05:23,290 ותרשו לי להראות לך איך זה נראה בדפדפן. 1100 01:05:23,290 --> 01:05:28,960 >> תן לי ללכת לlocalhost / צורות, וזה form0. 1101 01:05:28,960 --> 01:05:33,400 זהו טופס HTML מכוער סופר שיש לו כמה שדות לדוא"ל, לסיסמא, 1102 01:05:33,400 --> 01:05:37,190 סיסמא, ולאחר מכן תיבה קטנה להסכים לתנאים מסוימים. 1103 01:05:37,190 --> 01:05:41,350 המלכוד הוא אם אני מבקר בטופס זה, ואני לא רוצה לתת לך את כתובת הדוא"ל שלי, 1104 01:05:41,350 --> 01:05:44,730 אני לא רוצה להסכים לתנאים ולהתניות אולי, אני יכול ללחוץ על הרשמה 1105 01:05:44,730 --> 01:05:46,920 וזה מאפשר לי לעבור בכל מקרה. 1106 01:05:46,920 --> 01:05:50,800 זה קורה להגיש לקובץ PHP טיפש נקרא dump.php. 1107 01:05:50,800 --> 01:05:58,420 כל שהוא עושה הוא להדפיס את התוכן של _GET $ רק למטרות אבחון. 1108 01:05:58,420 --> 01:06:01,580 זה מה שהוגש על ידי המשתמש זה עתה. 1109 01:06:01,580 --> 01:06:05,010 אבל תניח שבאמת אנחנו רוצים לאמת את צורת ההגשה של המשתמש. 1110 01:06:05,010 --> 01:06:06,530 תן לי ללכת לגרסה 1. 1111 01:06:06,530 --> 01:06:11,420 זה form1.html. זה נראה אסתטי גרוע באותה מידה, אבל שים לב כמה מפואר זה. 1112 01:06:11,420 --> 01:06:15,450 אם אני לוחץ על הרשמה ללא שיתוף פעולה, צועק עליי. 1113 01:06:15,450 --> 01:06:17,320 "עליך לספק את כתובת הדוא"ל שלך." 1114 01:06:17,320 --> 01:06:21,670 בסדר. אז בואו ננסה את זה לי. אז malan@harvard.edu. אני לא צריך סיסמא. 1115 01:06:21,670 --> 01:06:25,100 הרשמה. "עליך לספק את סיסמא." בסדר. 1116 01:06:25,100 --> 01:06:28,470 אז אני אספק את הסיסמה של ארגמן. הרשמה. 1117 01:06:28,470 --> 01:06:32,300 "סיסמות לא תואמות." יש לי עכשיו להקליד כאן ארגמן. 1118 01:06:32,300 --> 01:06:35,710 בדקתי בטעות ש. הרשמה. 1119 01:06:35,710 --> 01:06:39,860 "עליך להסכים לתנאים." בסדר. מסכים שם. הרשמה. 1120 01:06:39,860 --> 01:06:43,700 ועכשיו זה מראה לי את פלט האבחון שם. 1121 01:06:43,700 --> 01:06:45,630 >> אז מה בדיוק קרה? 1122 01:06:45,630 --> 01:06:48,330 היה לנו את היכולת הזו כדי לאמת להגיש את הטופס. 1123 01:06:48,330 --> 01:06:51,420 למעשה, אם אתה לא צולל לתוך 7 pset, יש פונקציה להתנצל 1124 01:06:51,420 --> 01:06:54,620 זה עושה את זה די קל לצעוק על המשתמש עם הודעה על המסך. 1125 01:06:54,620 --> 01:06:57,580 אני משתמש במנגנון מעט שונה, פונקצית ההתראה, 1126 01:06:57,580 --> 01:07:03,690 וזה לא פונקציה זה חייך על שכן הוא הופך את הודעות משתמש מאוד מכוערות. 1127 01:07:03,690 --> 01:07:05,710 אבל בואו נראים מה אני עושה כאן. 1128 01:07:05,710 --> 01:07:09,620 זה form1.html, ושם לב שיש לי קצת תחביר די מוכר: 1129 01:07:09,620 --> 01:07:12,920 תג גוף, צורת תג, מאפיין פעולה, תכונת שיטה. 1130 01:07:12,920 --> 01:07:17,050 אבל שם לב שנתתי לי טופס זיהוי ייחודי לנוחות. 1131 01:07:17,050 --> 01:07:19,190 אז יש לי שדה הדוא"ל סוגו הוא טקסט, 1132 01:07:19,190 --> 01:07:23,780 שדה סיסמא סוגו הוא סיסמא, שדה אישור סוגו הוא סיסמא, 1133 01:07:23,780 --> 01:07:28,070 ולאחר מכן תיבה ששמה הוא הסכם לכאן, היא סוג התיבה סימון. 1134 01:07:28,070 --> 01:07:30,380 ואז יש לי כפתור שליחה. 1135 01:07:30,380 --> 01:07:33,050 אבל שם לב שבחלק העליון מה עוד יש לי. 1136 01:07:33,050 --> 01:07:35,810 קודם כל, יש שימוש נוסף של תג סקריפט. 1137 01:07:35,810 --> 01:07:40,520 אם יש לך קצת קוד JavaScript בקובץ אחר, בדיוק כמו עם CSS אתה יכול לכלול אותו. 1138 01:07:40,520 --> 01:07:44,530 ואתה עושה את זה עם מקור תסריט, ואז שמת לב שאני מתחבר כנראה 1139 01:07:44,530 --> 01:07:50,349 לgoogleapis.com לדרך ארוכה מאוד אבל שם קובץ שמסתיים בjquery.min 1140 01:07:50,349 --> 01:07:52,420 למינימום. js. 1141 01:07:52,420 --> 01:07:55,969 jQuery היא ספרייה פופולרית ביותר לJavaScript שרק גורמת JavaScript 1142 01:07:55,969 --> 01:07:58,230 עוד יותר ידידותי למשתמש לשימוש. 1143 01:07:58,230 --> 01:08:00,610 זה הפך ביעילות סטנדרט דה פקטו. 1144 01:08:00,610 --> 01:08:04,090 אז למרות מה לראות שאתה אינו טהור JavaScript כשלעצמה, 1145 01:08:04,090 --> 01:08:09,340 זה ספרייה על גבי JavaScript כמו ספריית CS50 היא שכבה 1146 01:08:09,340 --> 01:08:13,670 על גבי קוד C ברמה נמוכה; המציאות היא כמעט כולם באינטרנט משתמש בו. 1147 01:08:13,670 --> 01:08:18,030 אז אלה לא גלגלי עזר. זה פשוט הכי טוב להתאמן בימים אלה. 1148 01:08:18,030 --> 01:08:22,830 עכשיו שם לב שמתחת הוא תג התסריט שלי, ושם לב למה שעשיתי כאן. 1149 01:08:22,830 --> 01:08:27,450 מתברר כי jQuery עושה משהו מפואר קטנה. 1150 01:08:27,450 --> 01:08:29,660 JavaScript יש סימני דולר, אבל הם חסרי משמעות. 1151 01:08:29,660 --> 01:08:32,870 >> הם כמו אותיות A או B או C. 1152 01:08:32,870 --> 01:08:36,670 jQuery פשוט אמץ את האמנה או הסוג של טענה שפוטרה לעובדה 1153 01:08:36,670 --> 01:08:40,280 ש$ יהיו הסמל המיוחד שלהם. 1154 01:08:40,280 --> 01:08:44,950 אז ברגע שאתה לטעון קובץ JavaScript הגלובלי זה כאן עם תג התסריט, 1155 01:08:44,950 --> 01:08:49,080 יש לך גישה למשתנה גלובלית מיוחדת שנקראת $. 1156 01:08:49,080 --> 01:08:53,009 זה נקרא יותר כראוי jQuery, אבל זה לא נראה כמעט סקסי כמו $. 1157 01:08:53,009 --> 01:08:56,250 אבל $ אין שום משמעות מיוחדת. ב PHP היה לו משמעות מיוחדת. 1158 01:08:56,250 --> 01:08:58,440 היה לך לעשות את זה מול משתנה. 1159 01:08:58,440 --> 01:09:01,670 זה פשוט דבר סקסי שהם לקחו על. 1160 01:09:01,670 --> 01:09:03,389 מה קורה כאן? 1161 01:09:03,389 --> 01:09:08,830 שים לב אני מעביר לפונקצית jQuery המסמך משתנה הגלובלי שלי 1162 01:09:08,830 --> 01:09:10,860 ואז אני מתקשר. מוכן. 1163 01:09:10,860 --> 01:09:15,480 מה jQuery למעשה אין זה מאפשר לך לקחת כמה דברי JavaScript וניל 1164 01:09:15,480 --> 01:09:17,889 כמו אובייקט המסמך, אובייקט החלון, 1165 01:09:17,889 --> 01:09:20,790 ואם אתה עובר אותו לפונקצית jQuery - 1166 01:09:20,790 --> 01:09:24,429 ושוב, כדי שיהיו ברור, זו פונקציה שנקראת jQuery - 1167 01:09:24,429 --> 01:09:28,240 מה שהיא עושה היא שהיא תחזיר לך גרסה מיוחדת של מסמך 1168 01:09:28,240 --> 01:09:30,700 שיש לו יותר פונקציונלי הקשורים אליו. 1169 01:09:30,700 --> 01:09:34,760 אז ב-JavaScript גלם אין פונקציה מוכנה, 1170 01:09:34,760 --> 01:09:37,810 אבל אם אתה עובר מסמך לפונקצית jQuery ראשון, 1171 01:09:37,810 --> 01:09:40,960 היא מחזירה לך גרסה מיוחדת של אובייקט המסמך 1172 01:09:40,960 --> 01:09:43,030 שיש לו תכונות מיוחדות נוספות. 1173 01:09:43,030 --> 01:09:48,230 ובגלל זה אנשים אוהבים את זה. זה פשוט עושה את הדברים קלים יותר לעשות, כמו שאנחנו עומדים לראות. 1174 01:09:48,230 --> 01:09:49,820 אז מה שורת קוד הזאת אומרת? 1175 01:09:49,820 --> 01:09:52,690 שורת הקוד כאן פירושו כאשר המסמך מוכן - 1176 01:09:52,690 --> 01:09:56,830 במילים אחרות, ברגע שהדפדפן מתבצע קריאת קובץ זה למעלה עד למטה - 1177 01:09:56,830 --> 01:09:59,200 ללכת קדימה ולבצע את הפונקציה הבאה. 1178 01:09:59,200 --> 01:10:03,540 מה באמת מעניין ב-JavaScript - וPHP יש גם את זה - 1179 01:10:03,540 --> 01:10:05,450 הוא פונקציות אנונימיות. 1180 01:10:05,450 --> 01:10:10,560 ב-JavaScript אפשר להכריז פונקציות שאין להם שם אבל יש להם גוף. 1181 01:10:10,560 --> 01:10:12,570 שים לב מה קורה כאן. 1182 01:10:12,570 --> 01:10:16,220 >> זו פונקציה שנקראת מוכן, וזה רק אומר שבצע את הפעולות הבאות 1183 01:10:16,220 --> 01:10:20,220 כאשר כל דף האינטרנט הוא מוכן, כאשר הכל כבר קראו בשרת. 1184 01:10:20,220 --> 01:10:23,090 מה אתה רוצה לעשות? אני רוצה לבצע את הנתח של קוד. 1185 01:10:23,090 --> 01:10:27,120 שים לב שאנו לא רוצים לבצע קוד זה מייד. 1186 01:10:27,120 --> 01:10:34,350 אם אני משמיט את זה, זה אומר מייד יתחיל להוציא להורג את השורות האלה של קוד. 1187 01:10:34,350 --> 01:10:39,040 אבל עובדה שאני אומר לא, לא, לא, עטוף את זה בפונקציה אנונימית כמו זה 1188 01:10:39,040 --> 01:10:43,000 אמצעים לא מבצעים את זה עדיין, קורא לזה בסוף. 1189 01:10:43,000 --> 01:10:45,430 ראינו את זה לפני רגע בדוגמא הטופס הקודמת שלנו. 1190 01:10:45,430 --> 01:10:49,990 איזה תפקיד אנו קוראים סופו של דבר, 500 אלפיות שניים? למצמץ. 1191 01:10:49,990 --> 01:10:51,480 אז אותו הרעיון. 1192 01:10:51,480 --> 01:10:53,950 שוב, גם אם זה נראה קצת מוזר, פשוט לקחת לעת עתה על אמונה 1193 01:10:53,950 --> 01:10:57,060 להכריז שפונקציה אנונימית שנקראת סופו של דבר, 1194 01:10:57,060 --> 01:11:01,720 אתה פשוט לכתוב פונקציה () { 1195 01:11:01,720 --> 01:11:05,380 אז מה קוד אנחנו הולכים לבצע סופו של דבר? הבא. 1196 01:11:05,380 --> 01:11:10,460 זה גם נראה קצת חדש, אבל זה אומר שהנה פונקצית jQuery, 1197 01:11:10,460 --> 01:11:13,430 וזה עכשיו הוא קיצור. 1198 01:11:13,430 --> 01:11:18,830 קטע HTML זה בתחתית המסך יש כמובן כמה ייצוג עץ. 1199 01:11:18,830 --> 01:11:21,730 זה לא זה. דף זה הוא יותר מעניין מ, למשל שלום העולם הזה. 1200 01:11:21,730 --> 01:11:25,210 אבל יש איזה עץ מתאים ל-HTML. 1201 01:11:25,210 --> 01:11:28,910 זה יהיה כאב בצוואר יש ליישם איזה פונקציה רקורסיבית 1202 01:11:28,910 --> 01:11:34,380 כדי להתחיל בצומת השורש ולאחר מכן למצוא את הצומת שמזהה רישום. 1203 01:11:34,380 --> 01:11:38,340 אז מה עושה jQuery סופר קל עבורנו, פשוטו כמשמעו, הוא זו. 1204 01:11:38,340 --> 01:11:43,000 קדימה ותתפוס אותי מה div או צורה כלשהי, מה אלמנט HTML 1205 01:11:43,000 --> 01:11:45,820 יש זיהוי של רישום. 1206 01:11:45,820 --> 01:11:52,440 זה שווה document.getElementById ('רישום'). 1207 01:11:52,440 --> 01:11:54,170 >> מדוע אנשים כמו jQuery? 1208 01:11:54,170 --> 01:12:00,110 כי זה קצר יותר להקלדה. אבל זה כל מה שזה. זה אותו הרעיון. 1209 01:12:00,110 --> 01:12:02,630 תשיג לי את תג זיהוי שלו הוא רישום. 1210 01:12:02,630 --> 01:12:06,300 וכאשר זה תג, אשר קורה להיות טופס, הוא הגיש, 1211 01:12:06,300 --> 01:12:08,300 ללכת קדימה ולבצע קוד זה. 1212 01:12:08,300 --> 01:12:11,320 אז בואו לקחת מבט אחד עכשיו באופן שאנחנו עושים טופס אימות. 1213 01:12:11,320 --> 01:12:15,950 התחביר הוא אמנם סתום בהתחלה, אבל מה קורה? 1214 01:12:15,950 --> 01:12:21,050 אם הקו הזה של קוד נכון, אני הולך לצעוק על המשתמש לספק את כתובת הדוא"ל שלו או שלה. 1215 01:12:21,050 --> 01:12:22,970 אז מהו הקו הזה של קוד? 1216 01:12:22,970 --> 01:12:25,560 $ פירוש jQuery. עכשיו שם לב לכך. 1217 01:12:25,560 --> 01:12:27,920 זה כמו סוג של CSS. 1218 01:12:27,920 --> 01:12:33,370 אם כבר צללת לתוך CSS עדיין, אתה יודע שזה אומר שהאלמנט מזהה רישום. 1219 01:12:33,370 --> 01:12:39,840 המרחב אומר למצוא ילד או צאצא של רישום השם הוא קלט. 1220 01:12:39,840 --> 01:12:42,970 ואז הדבר הזה בסוגריים מרובעים הוא מסננת קטנה. 1221 01:12:42,970 --> 01:12:47,010 וגם אם זה נראה סתום, זה רק אומר לעבור לטופס רישום תעודת זהות שלו, 1222 01:12:47,010 --> 01:12:51,230 ללכת בתוך אלמנט קלט שמשמה הוא דואר אלקטרוני, 1223 01:12:51,230 --> 01:12:55,440 ולאחר מכן לקבל את הערך שלו, לא משנה מה הערך שלו במקרה - 1224 01:12:55,440 --> 01:12:59,670 asdf אם זה כל מה שהוקלד או malan@harvard.edu אם זה מה שהקלדתי. 1225 01:12:59,670 --> 01:13:05,250 אז אם הערך של השדה של טופס הדוא"ל == כלום, צועק על המשתמש. 1226 01:13:05,250 --> 01:13:09,700 אחר אם הערך של שדה הסיסמה כלום ==, לצעוק על המשתמש. 1227 01:13:09,700 --> 01:13:19,520 >> אחר אם הערך של שדה הסיסמה אינו שווה הערך של שדה האישור, 1228 01:13:19,520 --> 01:13:22,850 שהיה מרכיב צורה האחרת, לצעוק על המשתמש. 1229 01:13:22,850 --> 01:13:25,680 ואז לבסוף - וגם את זה יש כמה תחביר חדש משלו, 1230 01:13:25,680 --> 01:13:29,270 אבל ברגע שראית את זה, זה לפחות קצת יותר סביר - 1231 01:13:29,270 --> 01:13:34,060 אחר אם הטופס מזהה שהרישום יש אלמנט קלט ששם הסכם 1232 01:13:34,060 --> 01:13:39,720 והיא מסומנת, קדימה וצועק על המשתמש. 1233 01:13:39,720 --> 01:13:42,520 אז אני לגמרי מודה שזה קשה מדי במבט הראשון. 1234 01:13:42,520 --> 01:13:46,530 זה הרבה תחביר חדש. אבל כל jQuery כדלקמן אלו סוגים של תבניות. 1235 01:13:46,530 --> 01:13:49,880 ובכנות, אני לא יודע אפילו את זה לא היה קיים עד לפני כמה דקות. 1236 01:13:49,880 --> 01:13:53,640 אני בגוגל, "איך אתה יכול לבדוק אם תיבה מסומנת בjQuery?" 1237 01:13:53,640 --> 01:13:55,680 וזה התחביר, כי יש דרכים שונות לעשות את זה 1238 01:13:55,680 --> 01:13:58,010 עם קוד JavaScript גלם בפועל. 1239 01:13:58,010 --> 01:14:01,030 אז כפי שכבר בעמוד הראשון של סט בעיה 7 מדגיש, 1240 01:14:01,030 --> 01:14:04,500 7 pset מאוד תרגיל במנוף עצמך 1241 01:14:04,500 --> 01:14:08,650 שם אנו מספקים, בתקווה, שבמסגרת מושגית להתמודדות pset. 1242 01:14:08,650 --> 01:14:12,280 >> אבל כפי שקורה לעתים קרובות בעיצוב אתרים, זה תלוי בך באמת לחטט, 1243 01:14:12,280 --> 01:14:16,680 לשלב קטעי קוד ודוגמאות מהאינטרנט כל כך הרבה זמן כמו שאתה מצטט אותם 1244 01:14:16,680 --> 01:14:17,960 לפי תנאים שבגיליון הראשון 1245 01:14:17,960 --> 01:14:21,460 ומבין שלימוד HTML, CSS, JavaScript וגם SQL 1246 01:14:21,460 --> 01:14:26,020 באמת אמור להיות התרגיל הזה ב-Home כאשר אנו מתחילים לקחת את גלגלי העזר הללו. 1247 01:14:26,020 --> 01:14:29,150 ומבין גם שיש כל כך הרבה דברים שאתה יכול לעשות עם דפדפן. 1248 01:14:29,150 --> 01:14:33,790 בפנים של רוב האלמנטים האלה יש דברים אחרים שנקראים טפל באירועים. 1249 01:14:33,790 --> 01:14:37,140 ולמרות שאנחנו רק הבטנו באלה שקוראים לי onsubmit וonready, 1250 01:14:37,140 --> 01:14:40,310 אתה יכול לעשות דברים כמו onkeydown, onkeyup, 1251 01:14:40,310 --> 01:14:43,410 כמו כאשר המשתמש נוגע מפתח, אתה יכול להקשיב לזה ואת המפתח. 1252 01:14:43,410 --> 01:14:45,940 Gmail יש קיצורי מקשים. 1253 01:14:45,940 --> 01:14:49,490 כיצד Google ליישם קיצורי מקלדת כמו C ללהלחין? 1254 01:14:49,490 --> 01:14:54,120 הם מקשיבים לאירועים, כפי שהם נקראים, כמו onkeypress או onkeyup וonkeydown. 1255 01:14:54,120 --> 01:14:56,360 אם אי פעם רחפת עם העכבר מעל חלק אפשרות תפריט 1256 01:14:56,360 --> 01:15:00,180 ופתאום, זהו, מופיע תפריט או צבע שינויים הגרפי, 1257 01:15:00,180 --> 01:15:01,920 איך הם עושים את זה? 1258 01:15:01,920 --> 01:15:06,940 במקום להקשיב לonready או onsubmit, אתה מקשיב לonMouseOver או onmouseout. 1259 01:15:06,940 --> 01:15:10,920 >> אז בקיצור, עם היסודות פשוטים האלה שאנחנו כבר התחלנו לגרד את פני השטח של היום 1260 01:15:10,920 --> 01:15:13,940 ואנו לצלול בהמשך ליום רביעי, יש לך, יותר ויותר, 1261 01:15:13,940 --> 01:15:17,530 כוח ליישם את מיני דברים שאתה כבר מכיר. 1262 01:15:17,530 --> 01:15:21,620 אז בואו נגמרנו שם, ואנחנו נמשיך את זה ביום רביעי. 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]