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 Днес ще се съсредоточи по-специално върху дизайна, вече не в контекста на C 6 00:00:16,600 --> 00:00:20,010 но в контекста на PHP, както и малко на SQL и малко JavaScript, 7 00:00:20,010 --> 00:00:23,730 особено към края на двете pset 7, а също и на окончателния проект. 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 своя окончателен проект и си мислят, че искате да си сътрудничат с една или две съученици, 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 И тогава, ако искате да държите под око през следващата седмица или така URL електронна таблица, 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 не просто е в състояние да направя нещо подобно pset 7 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 или които вече хвана видео в петък, какво СЕСИЯ нека направим 38 00:02:01,960 --> 00:02:04,330 в PHP-базирани уеб приложение? 39 00:02:04,330 --> 00:02:09,650 Това е супер променлива, което означава, че е подобен дух 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 Pset 7 използвате тази сесия свръхглобална да се улесни влезете в профила си. 44 00:02:25,100 --> 00:02:28,600 И това, което е хубаво за този супер е, че е асоциативен масив. 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 И така, ако сте се гмурна в pset 7, може да си припомним, че ние сме съхраняване на ключ, наречен ID 48 00:02:44,890 --> 00:02:50,330 в рамките на този асоциативен масив, чиято стойност е нещо като 123 - 49 00:02:50,330 --> 00:02:53,780 независимо от момента сте влезли във ID на потребителя. 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 чрез този супер мога да си спомня, че те са влезли в системата. 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 Места като Amazon очевидно ви позволяват да постави нещата в количката, 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 може да сложи почти всичко, което искате в рамките на този супер асоциативен масив 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 този специален супер наречен $ _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 Забележете, ние нямаме всяко споменаване на вътр или плувка или низ или нещо подобно, че 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 >> В противен случай, ако не откриете, че има нещо в сесията супер, 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 Ако го направите <=, това е еквивалентно ефективно каква функция? 116 00:07:07,920 --> 00:07:12,600 Това е наистина еквивалентни на нещо като ФОРМАТ, което сме виждали много пъти в C, 117 00:07:12,600 --> 00:07:15,940 въпреки че, както може би знаете вече от спец. в pset 7, 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 >> Chrome има това, както в Mac версията, версията на Windows, и дори Linux версия, 128 00:07:51,900 --> 00:07:59,510 и Firefox и IE имат сходни механизми, чрез които имате вграден дебъгер 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 и няма значение как godawful 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 Така че, ако се опитвате да научите от интернет сайт, като Google или Facebook 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 което може да е бъркотия, както сме виждали особено на сайта на Google. 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 Преди това са посетили сайта девет пъти, но нека вървим напред и кликнете Презареждане. 161 00:09:46,020 --> 00:09:47,500 И аз съм обратно на 0. 162 00:09:47,500 --> 00:09:52,100 Нека всъщност да видим как е, че се прилага тази сесия свръхглобална. 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 Да е дума и / 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 знам какво процентите са от Mac потребителите в интернет, потребителите на персонални компютри, 182 00:10:56,860 --> 00:11:00,820 IE потребители, Chrome потребители и други подобни, това е, защото всички на нашите браузъри 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 които е забранено, което означава, че сте забравили да коригира нещо, най-вероятно. 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 дали от претоварване или въведете URL в адресната лента, 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, сесия ID, 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 или ръчно, посетете този адрес в браузъра, 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 И така, това е в крайна сметка как се изпълнява сесията супер. 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 вътрешността на свръхглобална за този потребител, 255 00:15:12,380 --> 00:15:17,000 и тогава нека се уверете, че тези данни отново е в рамките на сесията свръхглобална 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 ще бъде постоянно да влезете в Facebook всяка страница, която посещавате 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 >> Така че по този начин "бисквитките" са изпратени напред-назад по жицата. 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 Така че за известно време, Facebook е почти изцяло през 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 Facebook се използва за криптиране на потребителски имена и пароли, 277 00:16:30,610 --> 00:16:33,560 но веднага след като си погледна си мушвания вашите съобщения или вашия News Feed, 278 00:16:33,560 --> 00:16:35,360 всичко това е некриптиран. 279 00:16:35,360 --> 00:16:37,870 Така беше Gmail, докато само година или две по-рано. 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 или дори Crack, 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 >>  За супер популярни сайтове като Google и Facebook, 291 00:17:14,520 --> 00:17:18,839 ако трябва да се свърши повече работа за всеки потребител за всяка една уеб страница, която посещавате, 292 00:17:18,839 --> 00:17:20,520 че просто отнема повече процесорно време. 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 , когато вие, които в момента са на Facebook в момента - 299 00:17:37,920 --> 00:17:39,880 От любопитство, да видим дали ще призная. 300 00:17:39,880 --> 00:17:42,620 Ако сте на Facebook в момента в някои раздела, дори и ако той не е на преден план, 301 00:17:42,620 --> 00:17:46,610 URL HTTP или HTTPS? 302 00:17:46,610 --> 00:17:50,560 [Множество студенти] S. S? [Смях] 303 00:17:50,560 --> 00:17:55,510 Добре. Всяко HTTP? Само 1? Добре. 304 00:17:55,510 --> 00:17:58,940 Така че всички ние можем да проникна Facebook сметка, че човек точно сега. 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 да намерите свободен софтуер, който прави това, всичко, което трябва да направите е да седнете в Starbucks 312 00:18:27,410 --> 00:18:30,680 или да седите на летището, където има обикновено некриптиран WiFi 313 00:18:30,680 --> 00:18:36,070 и просто гледам за ключови думи като Set-Cookie: или 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, и Facebook е просто ще приемем, че вие ​​сте този човек 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 >> И аз бих Google сега как да активирате HTTPS за Facebook може би. 325 00:19:23,190 --> 00:19:25,150 Но това наистина е толкова просто. 326 00:19:25,150 --> 00:19:27,660 И така, Facebook и Google, както и други подобни са придобили наистина добри в това, 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 и това, което ще направим, е да влезете и след това тя ще ви покаже Facebook имена 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 душеше бисквитката, представяне на Facebook като свои собствени, 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 Така че сайтове като Facebook и Google трябва все повече квадратчетата 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 , че програмистът е складирала в рамките на тази специална супер наречен $ _SESSION. 353 00:20:56,140 --> 00:20:59,750 И за pset 7 сме го използвате тривиално само да се помни, вътр, 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 Едно от нещата, които направихме в pset 7 умишлено 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 Той имаше три колони - 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 Нека кликнете върху Старт, а сега имаме тази форма, която за съжаление е малко по-широк от ляво на дясно, 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 >> Къщата, която очевидно не искате тя да бъде едно цяло число, което е с 32-битова стойност в MySQL. 403 00:23:46,250 --> 00:23:49,810 Ние говорим за кратко в петък за VARCHAR, което е съкращение от променлива дължина Чар. 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 над полето, наречено Чар е какво? 409 00:24:10,700 --> 00:24:15,110 Просто интуитивно ако превъртете надолу, забележите, има Чар и има VARCHAR. 410 00:24:15,110 --> 00:24:19,520 VARCHAR е с променлива дължина Чар Чар е с фиксирана дължина Чар. 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 Това всъщност е случай, че Чар обикновено използва повече памет 422 00:25:06,900 --> 00:25:10,950 защото Чар, като в C, е като низ, това е за масив от знаци. 423 00:25:10,950 --> 00:25:13,690 Така че, ако ти кажа Чар областта на дължина 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 Укротяване на знак поле от време на време, макар и не често, 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 Ако знае, че всеки Чар поле, всеки стринг в колона е със същата дължина, 436 00:25:58,160 --> 00:26:00,780 се върнеш функцията на случаен достъп. 437 00:26:00,780 --> 00:26:05,110 Можете да скачат наоколо сред различните характе полета в вашата база данни таблица 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 Ето още един детайл, който се блъсна в крайна сметка дори Facebook. 447 00:26:36,030 --> 00:26:39,670 Интеджър са големи, и ние някак ги използва по подразбиране всеки път, когато искате редица, 448 00:26:39,670 --> 00:26:41,750 но това е само на 32 бита. 449 00:26:41,750 --> 00:26:46,210 >> И въпреки че Facebook не съвсем има 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 и така Facebook себе си, че преди няколко години трябваше да прехода от 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 в този случай с помощта на цели числа може да е малко късогледо. 458 00:27:13,200 --> 00:27:16,230 Но в действителност, потребителите си маса вероятно е добре с цели числа. 459 00:27:16,230 --> 00:27:19,340 Но за нещо подобно pset 7, като вашата история маса, 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 ако го направите предвиждане на данни, надвишаващи размера на вътр 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 Decimal ние използваме в pset 7, който определя фиксирана точност 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 И след това има някаква друга BINARY, 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 Но за нас обикновено ще се грижи за цели числа и 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 Бихме могли по подразбиране, всички в Mather House, например. 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 Базата данни ще гарантират, че нещата са или не са NULL. 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 Binary, неподписан - нито един от тези, които са от значение за VARCHAR. 496 00:29:22,880 --> 00:29:24,220 Index. 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 Вероятно ID. 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 човек може да живее в Mather, а 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 ID ще бъде първично, но електронната поща не е първичен за причината, поради която току-що споменах - 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 Ако знаете предварително за своя окончателен проект за pset 7, или като цяло, 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 >> Ако оставите тази опция изключена и се опитате да търсите за всички в базата данни, който живее в Mather, 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 Накрая, автоматично нарастване, AI тази област, 545 00:32:02,690 --> 00:32:05,830 , което просто означава, че ако това е вътр и не искаме да се грижим сами да я увеличите 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 Ако отида в Browse, обърнете внимание, че Майк и моят дом е NULL. 550 00:32:20,200 --> 00:32:22,420 Мога да използвам PhpMyAdmin да редактирате това ръчно. 551 00:32:22,420 --> 00:32:25,110 Мога да отида тук и вид в Mather и след това натиснете 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 ID на Давид е 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 и отново, pset 7 ще ви запознае с повече от тези въпроси - 558 00:32:41,450 --> 00:32:45,260 Можете ръчно да изпълни командата SQL структуриран език за заявки 559 00:32:45,260 --> 00:32:56,410 UPDATE потребителите да настроят къща = '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 ID на потребителя е 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 Но ID тенденция да бъде по-висока производителност, така че нека го направим. 566 00:33:18,810 --> 00:33:22,950 Нека да щракнете върху Почни. Добре, 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 Ако Сега щракнете върху Преглед, сега Малан живота в 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 души живеят в Mather, или да даде, 581 00:34:10,400 --> 00:34:15,000 в крайна сметка тази таблица ще има 400 реда, които казват "Mather", "Mather," 582 00:34:15,000 --> 00:34:16,590 "Mather," Mather "Mather." 583 00:34:16,590 --> 00:34:19,820 Губим всички тези байтове, а има и няколко takeaways там. 584 00:34:19,820 --> 00:34:23,080 1, там е луд случай ъгъл, където, ако някой плаща много пари 585 00:34:23,080 --> 00:34:25,949 и преименува Mather, сега ние трябва да променим цялата таблица на база данни. 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 за една база данни е защо се съхраняване Mather отново и отново и отново и отново? 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 Сега имам две полета. 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 Така се сложи ID тук. Нека дадем всяка къща уникален идентификатор. 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 Позволете ми да се вмъкнете в къщи, 617 00:36:15,040 --> 00:36:22,230 и аз щях да кажа името на къщата ще има стойност на "Mather". 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 Това са ценностите, които искате да вмъкнете в тези области. Позволете ми да щракнете върху Отиди. 621 00:36:30,390 --> 00:36:34,410 1 вмъкнат ред отне 0,02 секунди. Нека сега щракнете върху Преглед. 622 00:36:34,410 --> 00:36:42,020 >> Предизвестие, ако щракнете върху Преглед, има Mather, чието ID е чрез автоматизация номер 1. 623 00:36:42,020 --> 00:36:45,000 Позволете ми да направя още един. Нека отида в раздела SQL. 624 00:36:45,000 --> 00:36:52,950 Вмъкнете в къщи. Името на къщата ще има на стойност Pfoho и така нататък. 625 00:36:52,950 --> 00:36:56,350 Go. И аз мога да продължаваш да правиш това отново и отново и отново. 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 Можете просто да го взриви по-бързо пишете, например, куриер, Enter, 629 00:37:04,690 --> 00:37:07,610 и сега, ако щракнете върху Преглед, има куриер с ID от 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 Вътр Тя трябва да бъде, нали? 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 И отново, по пътя бяхме тук ще каже Mather, Mather, 637 00:37:31,130 --> 00:37:34,220 Mather, Mather, 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 и сега няма да се промени това да бъде едно цяло число. 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 и забележи, отново Къщата е вътр. 646 00:37:59,090 --> 00:38:02,220 Като настрана, игнорирайте Числото в скоби, когато става въпрос за цели числа. 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 И ако Давид живее в Mather, къщата не трябва да бъде 0, 654 00:38:24,610 --> 00:38:27,350 което е стойност по подразбиране вътр най-близо до 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 което означава, че има само една канонично определение на къщата ми Mather и 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 е Mather, 2 Pfoho. 665 00:39:04,180 --> 00:39:08,580 Имаме същите номера в тази друга таблица, който се нарича къщи, 666 00:39:08,580 --> 00:39:11,020 1 и 2 и 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 изравни с две, така че да можем мога да разбера къде Дейвид 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 къщи на 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 Задайте на учениците къща област, равна на къщите ID областта. 680 00:40:05,280 --> 00:40:10,220 И ако сега кликнете върху Старт, се върна точно това, което се надявах да. 681 00:40:10,220 --> 00:40:15,890 Дейвид е в Mather, Майк е в Pfoho, и аз също да видите уникални идентификатори. 682 00:40:15,890 --> 00:40:18,640 Но въпросът е сега имам пълна таблица. 683 00:40:18,640 --> 00:40:23,020 И така, храна за вкъщи тук за pset 7 или наистина за окончателен проект: 684 00:40:23,020 --> 00:40:25,830 Ако установите, че сте съхраняване на всяка част от информацията досадно, 685 00:40:25,830 --> 00:40:28,850 независимо дали това е къща, може би това е град, държава, и ZIP 686 00:40:28,850 --> 00:40:32,050 където пощенски обикновено, но не може винаги да се използва като уникален идентификатор, 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 Така той или тя се затваря хладилника, излиза на вратата, и отива на СЖП 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 Трябва да са поставили Post-бележка или като да кажеш, "Да изчезнеш за мляко" 721 00:42:32,320 --> 00:42:36,830 и след това си съквартирант концептуално би била заключена действително това, че. 722 00:42:36,830 --> 00:42:38,010 Или можете да отидете една стъпка по-нататък. 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 почти може да мисля за хладилника някаква променлива или структура, 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 , което ще ви постави една карта в една машина, още една карта в друга машина, 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 Машината на ляво отнема карта и PIN, 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 Това казва вмъкнете в таблицата по следния идентификационен номер, символ, и броя на акциите 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 = акция + стойности (акции). 785 00:46:26,310 --> 00:46:28,350 Така че напълно загадъчен изглеждащи на пръв поглед. 786 00:46:28,350 --> 00:46:31,990 Но фактът, че тази заявка SQL, въпреки че тайна върху две линии, 787 00:46:31,990 --> 00:46:35,920 е едно дълго заявка, това означава, че е атомен 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 и след това някаква частица от секундата по-късно след това направете актуализацията на информацията, 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 и UPDATE. 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 ако има риск от някой друг прави нещо между тези две твърдения, 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 от това, но това не е една лайнер, така че това е всъщност малко по-голямо участие. 825 00:49:00,650 --> 00:49:04,960 Има буквално изявление в SQL започване на транзакцията. 826 00:49:04,960 --> 00:49:08,300 Точно както има SELECT, UPDATE, INSERT, DELETE, и да се присъедини и един куп други, 827 00:49:08,300 --> 00:49:10,970 има ключови думи, като за започване на транзакцията. 828 00:49:10,970 --> 00:49:13,560 И това, което след това направете в контекста на pset 7 - 829 00:49:13,560 --> 00:49:17,270 не е нужно да правите това за pset 7 изрично е отречена като не е необходимо, 830 00:49:17,270 --> 00:49:18,830 но за крайните проекти може да бъде полезно - 831 00:49:18,830 --> 00:49:22,820 ако ти се обадя заявка за започване на транзакцията, а след това друга заявка 832 00:49:22,820 --> 00:49:25,620 и тогава друга заявка и после още една, друга, и друга, 833 00:49:25,620 --> 00:49:31,860 тези заявки всъщност няма да бъде изпълнена, докато ти се обадя SQL изявление COMMIT, 834 00:49:31,860 --> 00:49:37,220 в този момент, независимо дали е две изявления или 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 изглежда много, много, много подобен на два езика, C и PHP, 863 00:51:09,940 --> 00:51:11,140 сме правили до този момент. 864 00:51:11,140 --> 00:51:14,340 Не е JavaScript в pset 7, но е изключително полезен инструмент 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 Този документ Object Model дърво. 879 00:51:55,810 --> 00:51:59,530 Забележете, че HTML тагове, които съм изобразени произволно като правоъгълник, 880 00:51:59,530 --> 00:52:02,890 има две деца: главата и тялото. 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 от Mozilla хора, хората, които правят Firefox, 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 сред вашите GIF файлове и PNGs и JPEGs 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 Тук е булев израз, когато вие "или" две неща заедно. 932 00:55:02,420 --> 00:55:04,330 Ето, когато "и" две неща заедно. 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 Loops подобно за вериги, които са структурирани по същия начин на това, което сме виждали преди. 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 или плувка или низ или нещо, което обикновено. 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 Аз ще кажа реактивна номера и след това използваме квадратни скоби отново, за да декларирате променлива 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 >> Фактът, че аз не съм с числови индекси, но струнни - ID, къща, и името - 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 ключът е "къща", стойността е Winthrop House; 959 00:56:39,310 --> 00:56:41,800 ключът е "име", стойността е Zamyla Чан. 960 00:56:41,800 --> 00:56:47,110 Така че има три ключовете вътре в този асоциативен масив, всяка от които има своя собствена стойност. 961 00:56:47,110 --> 00:56:52,880 Видяхме, че в pset 7, или скоро ще 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 И тези от вас, които са взели бронетранспортьори или да си спомним обекти от Java 967 00:57:13,490 --> 00:57:15,140 или други подобни езици. 968 00:57:15,140 --> 00:57:17,880 JavaScript не е Java, на първо място. 969 00:57:17,880 --> 00:57:21,600 Това беше умишлено дизайн решения години преди да свалям нещо друго, което е популярен, 970 00:57:21,600 --> 00:57:25,640 името му, макар и да не е основна връзка с Java. 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 Така че VaR дивизия, това просто означава, дайте ми променлива наречена дивизия. 1010 00:59:48,670 --> 00:59:50,530 Можех да го наричат ​​Foo, но аз исках тя да се нарича дивизия 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 но за сега се знае, че един обект е почти като структура. 1017 01:00:11,180 --> 01:00:14,740 Както видяхме обратния път, когато в един от най-ранните проблем, 1018 01:00:14,740 --> 01:00:17,150 , където ще се постави много информация в структурата, 1019 01:00:17,150 --> 01:00:21,330 по подобен начин се документира специална структура, която идва с браузъра, 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, Document Object Model дърво, 1029 01:00:52,460 --> 01:00:55,520 чието ID е в този случай поздрав. 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 въпреки че страницата е малко по-различно, ако имах дивизия в тази картина, 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 В този случай отново е дивизия. Това не е орган или заглавие. 1037 01:01:21,960 --> 01:01:26,480 Така че нека да видим това, което след това направете с тази дивизия, сега, че я имам в рамките на тази променлива дивизия. 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 Така че тези, които са на три места сме правили CSS до този момент, 1045 01:01:56,730 --> 01:01:59,310 но Уловката тук е, че ние трудно кодирани всичко. 1046 01:01:59,310 --> 01:02:04,060 Реши, като се гмурна в pset 7, решихме преди лекция какво ще бъде нашата 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 Питам програмно ако видимостта на тази дивизия е скрита, 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 за тази дивизия. 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 И ако аз всъщност Огледайте Element, да видим дали ще може да види това. 1088 01:04:34,950 --> 01:04:38,550 Нека Огледайте елемент, позволете ми да превъртите надолу, само малко, 1089 01:04:38,550 --> 01:04:44,320 Нека аз да избера Елементи над тук, и ще забележите, че DOM вътрешността на инспектор Chrome. 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 В действителност, ако сте се потопите в pset 7, има извиня функция 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 >> Те са като буквата А или 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 милисекунди по-късно? Blink. 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 да започне в основата възел и след това намерете възел, чието ID е регистрация. 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 има ID на регистрация. 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 Свържете ме с етикет, чието ID е регистрация. 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, вие ще знаете, че това означава елемент, чието ID е регистрация. 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 И дори ако това изглежда загадъчно, това просто означава, отидете на формата, чието ID е регистрацията, 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 иначе, ако формата, чието ID е регистрация има входен елемент, чието име е споразумение 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 pset 7 е много упражнение в себе си зареждане на операционна 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 наистина е трябвало да бъде това начинание, тъй като в дома ние започваме да се вземат тези обучения колела. 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, вие слушате за поставяне на показалеца или 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]