1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [Tydzień 9] 2 00:00:02,570 --> 00:00:04,740 [David J. Malan - Harvard University] 3 00:00:04,740 --> 00:00:07,170 [To jest CS50. - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 Dobrze. Witamy z powrotem. To CS50, i jest to początek 9 tygodniu. 5 00:00:12,350 --> 00:00:16,600 Dziś skupia się w szczególności na projektowaniu, nie jest już w związku z C 6 00:00:16,600 --> 00:00:20,010 ale w kontekście PHP i trochę SQL i trochę JavaScriptu, 7 00:00:20,010 --> 00:00:23,730 szczególnie w kierunku końca zarówno Pset 7, a także Twój projekt końcowy. 8 00:00:23,730 --> 00:00:26,310 W rzeczywistości, jeśli jesteś w tym momencie w końcowym projekcie 9 00:00:26,310 --> 00:00:30,100 gdzie przypuszczalnie z jakąś godzinę temu You przynajmniej zaczął zastanowić 10 00:00:30,100 --> 00:00:33,730 do ostatecznego projektu i myślisz chcesz współpracować z 1 lub 2 kolegów, 11 00:00:33,730 --> 00:00:36,150 jeśli masz problemy z podłączeniem z kolegów powiedział, 12 00:00:36,150 --> 00:00:40,570 prosimy o wypełnienie formularza na cs50.net/partners/form. 13 00:00:40,570 --> 00:00:42,880 To po prostu pyta, kim jesteś, jaki rodzaj projektu myślisz o, 14 00:00:42,880 --> 00:00:44,870 gdzie mieszkasz tylko ze względów logistycznych. 15 00:00:44,870 --> 00:00:49,510 A potem, jeśli chcesz mieć na oku w ciągu najbliższych tygodni lub tak adres URL arkusza tam, 16 00:00:49,510 --> 00:00:53,520 następnie można zobaczyć tylko do odczytu wersji Google doc 17 00:00:53,520 --> 00:00:56,010 , w którym mamy do gromadzenia takich informacji. 18 00:00:56,010 --> 00:00:58,930 Więc jeśli chcesz pracować z kimś, na wszelkie sposoby tutaj, aby dotrzeć do ludzi, 19 00:00:58,930 --> 00:01:00,480 za pośrednictwem tego mechanizmu. 20 00:01:00,480 --> 00:01:02,690 Ale większość ludzi zrobić solówkę pracy. To jest całkowicie w porządku. 21 00:01:02,690 --> 00:01:06,120 Więc nie czuję, że jest to w żaden sposób obowiązkowe. 22 00:01:06,120 --> 00:01:09,680 W piątek, że to tylko ja i kilku z zespołu tu, 23 00:01:09,680 --> 00:01:11,100 pusty teatr dla większości. 24 00:01:11,100 --> 00:01:14,600 Były 3 turystów siedzi tam, więc to było trochę niewygodne. 25 00:01:14,600 --> 00:01:18,970 O czym rozmawialiśmy było baz i rozmawialiśmy o Pset 7 trochę. 26 00:01:18,970 --> 00:01:22,200 A jeśli tak się nie stało, aby złapać, że na film jeszcze, że jest w porządku. 27 00:01:22,200 --> 00:01:26,770 Postaram się ustalić żadnych warunków, że będziemy inaczej bierze za pewnik 28 00:01:26,770 --> 00:01:28,840 na podstawie wykładu piątek. 29 00:01:28,840 --> 00:01:32,550 >> Ale dzisiaj mamy zamiar spróbować dostać się do punktu 30 00:01:32,550 --> 00:01:34,990 o nie tylko jest w stanie zrobić coś takiego Pset 7 31 00:01:34,990 --> 00:01:37,360 ale tak naprawdę zrozumieć, co się dzieje pod maską, 32 00:01:37,360 --> 00:01:41,910 zwłaszcza niektóre z abstrakcji, że wprowadzone w pliku functions.php 33 00:01:41,910 --> 00:01:45,780 aby wasze życie trochę łatwiejsze, ale tak, że w końcu zrozumieć 34 00:01:45,780 --> 00:01:48,760 tak, że gdy kółka spaść w ciągu kilku tygodni można jeszcze przeżyć 35 00:01:48,760 --> 00:01:53,750 w rzeczywistym świecie i robić te rzeczy bez CS50 ram pod Ciebie. 36 00:01:53,750 --> 00:01:57,500 To $ _SESSION, dla tych z Was, którzy znają 37 00:01:57,500 --> 00:02:01,960 lub którzy już złapali film w piątek, co to SESJA zróbmy 38 00:02:01,960 --> 00:02:04,330 w PHP na bazie aplikacji sieci web? 39 00:02:04,330 --> 00:02:09,650 To superglobalna zmienne, co oznacza, że ​​jest w duchu podobnym do GET i POST 40 00:02:09,650 --> 00:02:13,970 i kilka innych, ale co to za rzecz przydatna? 41 00:02:13,970 --> 00:02:18,320 >> Co to jest SESJA służy? Tak. [Uczeń] zalogowaniu 42 00:02:18,320 --> 00:02:21,040 Przepraszam? [Uczeń] zalogowaniu zalogowaniu Rzeczywiście. 43 00:02:21,040 --> 00:02:25,100 W Pset 7 używamy tego superglobalna SESSION ułatwić zalogowaniu 44 00:02:25,100 --> 00:02:28,600 A co o tym miło superglobalną jest to, że tablica asocjacyjna. 45 00:02:28,600 --> 00:02:33,190 Asocjacyjna, odzyskanie, jest tylko tablica ale których indeksów nie muszą już być liczbami 46 00:02:33,190 --> 00:02:37,670 jak 012. Numery mogą być lub mogą być one nawet łańcuchy. 47 00:02:37,670 --> 00:02:44,890 I tak, jeśli już zanurkował Pset 7 jeszcze, może pamiętacie, że jesteśmy przechowywania klucza o nazwie ID 48 00:02:44,890 --> 00:02:50,330 wewnątrz tej tablicy asocjacyjnej, której wartość jest czymś w 123 - 49 00:02:50,330 --> 00:02:53,780 co aktualnie zalogowany ID użytkownika jest. 50 00:02:53,780 --> 00:02:59,470 Motywacją jest to, że nawet po użytkownik odwiedził localhost 51 00:02:59,470 --> 00:03:02,720 czy moja strona bardziej ogólnie, a potem już zalogowany, 52 00:03:02,720 --> 00:03:07,320 nawet jeśli nie kliknij link lub powrót na mojej stronie internetowej na 5 minut 53 00:03:07,320 --> 00:03:10,730 lub nawet godzin lub nawet dni, ale zostawić ich okno przeglądarki otwarte, 54 00:03:10,730 --> 00:03:14,370 za pośrednictwem tej superglobalną Pamiętam, że jesteś zalogowany 55 00:03:14,370 --> 00:03:21,140 >> Innymi słowy, nie pozwala mi nieco długoterminowego przechowywania i ma nic o użytkownika. 56 00:03:21,140 --> 00:03:24,390 A może myślisz o tym naprawdę jako wcielenie koszyku. 57 00:03:24,390 --> 00:03:27,740 Miejsca takie jak Amazon, oczywiście pozwala umieścić rzeczy w koszyku, 58 00:03:27,740 --> 00:03:32,230 ale HTTP, protokół, który zasila w sieci, jest bezpaństwowcem 59 00:03:32,230 --> 00:03:34,230 w tym sensie, że po odwiedzeniu strony internetowej, 60 00:03:34,230 --> 00:03:37,290 w przeważającej części nie masz jakieś stałe połączenie sieciowe 61 00:03:37,290 --> 00:03:39,270 pomiędzy przeglądarką a serwerem. 62 00:03:39,270 --> 00:03:42,190 Jak tylko pobrałeś HTML i JPEG oraz GIF i wszystko, 63 00:03:42,190 --> 00:03:48,200 zasilania odchodzi i trzeba tylko kopię HTML i etażerka z serwera. 64 00:03:48,200 --> 00:03:53,000 Ale jeśli serwer chce pamiętać coś o tobie, 65 00:03:53,000 --> 00:03:57,580 ciężar jest na serwerze, aby faktycznie rejestruje te informacje. 66 00:03:57,580 --> 00:04:00,130 I tak programista, który ma kontrolę nad serwerem 67 00:04:00,130 --> 00:04:04,400 można umieścić prawie wszystko chcesz wewnątrz tego superglobalnej asocjacyjnej 68 00:04:04,400 --> 00:04:06,850 i będzie tam następnym razem użytkownik wraca, 69 00:04:06,850 --> 00:04:12,070 czy jest to minuta, a nawet dni później, chyba, że ​​ich zamknięcie okna przeglądarki, 70 00:04:12,070 --> 00:04:14,360 w którym SESJA punkt znika. 71 00:04:14,360 --> 00:04:17,779 Więc to efemeryczna przechowywania, to nie-trwałe, a to oznaczało, odejść 72 00:04:17,779 --> 00:04:22,360 jak tylko użytkownik zamyka przeglądarkę - nie tylko, że karta, często cała przeglądarki 73 00:04:22,360 --> 00:04:24,930 co skutecznie logowania użytkownika z. 74 00:04:24,930 --> 00:04:28,000 Więc jak to jest rzeczą faktycznie realizowane? 75 00:04:28,000 --> 00:04:31,360 Rzućmy okiem na prostym przykładzie przyjrzeliśmy się w piątek. 76 00:04:31,360 --> 00:04:33,340 Dla tych, którzy znają, to było tak proste, jak to. 77 00:04:33,340 --> 00:04:35,910 Jest to strona internetowa, której jedynym celem w życiu jest mi powiedzieć, 78 00:04:35,910 --> 00:04:38,000 ile razy ja odwiedziłem tę stronę. 79 00:04:38,000 --> 00:04:41,670 To jest pierwszy raz tutaj w poniedziałek, że byłem, więc to mówi 0 razy. 80 00:04:41,670 --> 00:04:46,940 >> Ale jeśli zacznę przeładunku tę stronę, to mówi 1 godzinę, 2, 3, 4, 5, 81 00:04:46,940 --> 00:04:49,800 i będzie to w końcu po prostu zachować na zliczanie w górę, w górę, w górę, w górę, w górę 82 00:04:49,800 --> 00:04:53,130 za każdym razem, tak naprawdę kliknij Odśwież na nim. 83 00:04:53,130 --> 00:04:58,830 Więc jak to działa? Pozwól mi wejść do środka tego pliku o nazwie counter.php. 84 00:04:58,830 --> 00:05:02,490 Górna część to wszystko jest niebieskie komentarzy, ale interesujący jest tutaj. 85 00:05:02,490 --> 00:05:06,670 W linii 13 nazywamy to session_start funkcyjnego 86 00:05:06,670 --> 00:05:09,600 i to jest dosłownie wszystko, co musisz zrobić, jeśli chcesz mieć dostęp 87 00:05:09,600 --> 00:05:13,610 do tego specjalny superglobalna nazwie $ _SESSION. 88 00:05:13,610 --> 00:05:17,430 To sprawia, że ​​jest to możliwe, a my zobaczymy za chwilę, jak to wszystko jest możliwe. 89 00:05:17,430 --> 00:05:20,350 W linii 16 zawiadomienia, co robię. 90 00:05:20,350 --> 00:05:25,960 Jeśli klucz, zwana przeciw - innymi słowy, wartość wskaźnika - "przeciw" 91 00:05:25,960 --> 00:05:32,310 istnieje wewnątrz tej tablicy nazywa SESJA, to co robię z nim w linii poniżej? 92 00:05:32,310 --> 00:05:36,650 Co to jest linia 18 robi? 93 00:05:36,650 --> 00:05:40,360 >> [Niesłyszalne odpowiedź uczeń] Co to jest? [Uczeń] Przechowywanie wartości. Good. 94 00:05:40,360 --> 00:05:45,800 To przechowywania wartości, które jest teraz w sesji w nowej zmiennej lokalnej czasowym, 95 00:05:45,800 --> 00:05:48,250 $ Licznik wszystkimi małymi literami. 96 00:05:48,250 --> 00:05:50,770 Zauważ, że PHP jest już trochę leniwy tutaj. 97 00:05:50,770 --> 00:05:55,550 Zauważ, że nie ma żadnej wzmianki na int lub float lub ciąg lub coś podobnego 98 00:05:55,550 --> 00:06:00,480 ponieważ PHP jest słabo maszynie, której nie trzeba określić typ zmiennej, 99 00:06:00,480 --> 00:06:03,310 w tym przypadku tutaj nie byli nawet oświadczył jeszcze. 100 00:06:03,310 --> 00:06:08,980 Jestem deklarowania wewnątrz tych klamrach i w przeciwieństwie do C, to jest rzeczywiście w porządku. 101 00:06:08,980 --> 00:06:13,800 Bez względu na to, jak głęboko zagnieżdżone deklarację zmiennej w PHP - 102 00:06:13,800 --> 00:06:16,650 wewnątrz nawiasem klamrowym, wewnątrz nawiasem klamrowym i podobne - 103 00:06:16,650 --> 00:06:21,230 będzie w tym momencie w czasie istnieje dla pozostałej części programu, 104 00:06:21,230 --> 00:06:22,680 na lepsze lub na gorsze. 105 00:06:22,680 --> 00:06:26,930 Więc natychmiast staje się globalnym jak najszybciej zdefiniować jako robimy tutaj. 106 00:06:26,930 --> 00:06:31,620 >> W przeciwnym razie, jeśli nie okaże się, że jest coś w superglobalną sesji, 107 00:06:31,620 --> 00:06:34,680 Jestem widocznie inicjowania tej zmiennej licznik na 0, 108 00:06:34,680 --> 00:06:37,580 w ten sposób po prostu zakładając użytkownik nigdy nie było tu wcześniej. 109 00:06:37,580 --> 00:06:40,030 I wtedy to oczywiście jest zwiększany licznik jak? 110 00:06:40,030 --> 00:06:44,480 Ja aktualizację wartości, które jest w środku tej tablicy asocjacyjnej 111 00:06:44,480 --> 00:06:49,530 ustawiając go równa co obecnie jest licznik + 1. 112 00:06:49,530 --> 00:06:53,520 Gdybym przewiń tutaj do kodu HTML strony, to jest rzeczywiście bardzo proste. 113 00:06:53,520 --> 00:06:58,920 Wszystko co mam w ciele tej stronie jest "Ty odwiedziły tę witrynę to i tak razy." 114 00:06:58,920 --> 00:07:00,350 I to jest konstruktem PHP. 115 00:07:00,350 --> 00:07:06,080 Jeśli tak 00:07:12,600 To naprawdę odpowiednikiem czegoś printf, które widzieliśmy wiele razy w C, 117 00:07:12,600 --> 00:07:15,940 choć jak wiadomo już od specyfikacji w Pset 7, 118 00:07:15,940 --> 00:07:20,160 druku jest także funkcja, która wypisuje tylko coś, to w rzeczywistości nie używać kodów formatu, 119 00:07:20,160 --> 00:07:23,270 i rzeczywiście można powiedzieć, echo, jak również. 120 00:07:23,270 --> 00:07:27,460 Wszyscy są bardzo nieznacznie różnić nawet netto jest ostatecznie sam. 121 00:07:27,460 --> 00:07:31,270 Więc to użycie znaku równości jest tylko rodzajem eleganckiej drodze robi 122 00:07:31,270 --> 00:07:34,910 bardziej zwięźle niż można byłoby w stanie. 123 00:07:34,910 --> 00:07:38,370 Więc to wszystko, ta strona jest. Wypisze wartość licznika. 124 00:07:38,370 --> 00:07:40,550 Jak to wszystko właściwie się dzieje? 125 00:07:40,550 --> 00:07:43,250 Możesz przypomnieć sobie tydzień temu zaczęliśmy szukać pod maską 126 00:07:43,250 --> 00:07:47,910 w jaki sposób strona internetowa działa przy użyciu tej karty inspektora. 127 00:07:47,910 --> 00:07:51,900 >> Chrome ma to zarówno w wersji MAC, wersji systemu Windows, a nawet wersja Linux, 128 00:07:51,900 --> 00:07:59,510 i Firefox i IE mają podobne mechanizmy w której masz ten wbudowany debugger 129 00:07:59,510 --> 00:08:01,400 wewnątrz przeglądarki. 130 00:08:01,400 --> 00:08:03,040 Rzućmy okiem na następujące. 131 00:08:03,040 --> 00:08:06,960 Mamy całą masę kart tutaj, i przypominają, że od lewej jeden jest Elements, 132 00:08:06,960 --> 00:08:10,700 i nie ważne jak godawful HTML i JavaScript to na stronie, 133 00:08:10,700 --> 00:08:15,710 Przypomnijmy, że w karcie Elementy rzeczywiście można poruszać HTML hierarchicznie 134 00:08:15,710 --> 00:08:17,050 i ładne i starannie. 135 00:08:17,050 --> 00:08:19,370 Więc jeśli próbujesz dowiedzieć ze strony internetowej jak Google czy Facebook 136 00:08:19,370 --> 00:08:22,370 czy naprawdę każda strona internetowa, uświadomić sobie, że jesteś prawdopodobnie lepiej 137 00:08:22,370 --> 00:08:26,360 patrząc na kod źródłowy w ten sposób, w przeciwieństwie do oglądania surowych źródło, 138 00:08:26,360 --> 00:08:29,580 co może być bałagan, jak widzieliśmy, zwłaszcza na stronie Google. 139 00:08:29,580 --> 00:08:32,220 Więc jeśli zamiast kliknąć na zakładce Sieci tutaj 140 00:08:32,220 --> 00:08:34,830 Zobaczmy, co się dzieje, gdy odwiedzam tę stronę. 141 00:08:34,830 --> 00:08:38,669 Pozwól mi najpierw wyczyścić pamięć podręczną. 142 00:08:38,669 --> 00:08:43,570 Mam zamiar iść do Ustawienia w Chrome, a następnie przejść do historii 143 00:08:43,570 --> 00:08:46,420 a następnie wyczyść wszystkie dane przeglądarki. 144 00:08:46,420 --> 00:08:48,170 Może zostać użyty do w ten sposób do innych celów, [śmiech] 145 00:08:48,170 --> 00:08:51,990 ale kiedy przychodzi do stron internetowych rozwijających się, to faktycznie przydatne - 146 00:08:51,990 --> 00:08:55,980 Jeśli śmiejesz wiesz. [Śmiech] 147 00:08:55,980 --> 00:08:59,310 Jest to rzeczywiście bardzo przydatne przy tworzeniu stron internetowych, ponieważ w rzeczywistości jest to 148 00:08:59,310 --> 00:09:04,100 takie rzeczy jak ciasteczka i rzeczy jak buforowane pliki HTML, pliki buforowane JavaScript 149 00:09:04,100 --> 00:09:06,390 może faktycznie stać się duży ból głowy, bo jeśli z jakiegokolwiek powodu 150 00:09:06,390 --> 00:09:11,500 Przeglądarka postanawia buforować jakiś plik, a jednak po dokonaniu zmian w tym pliku na serwerze 151 00:09:11,500 --> 00:09:14,670 ale przeglądarka nie bardzo zrozumiał, że plik został zmieniony 152 00:09:14,670 --> 00:09:19,060 i dlatego nie faktycznie ponownie pobrać go nawet po kliknięciu przycisku Odśwież, 153 00:09:19,060 --> 00:09:23,210 jeden z najbardziej Surefire sposobów, aby tylko mieć pewność, że usterka nie jest z kodem, 154 00:09:23,210 --> 00:09:26,480 to z zachowaniem przeglądarce jest iść tu w swojej przeglądarce 155 00:09:26,480 --> 00:09:29,950 i po prostu wyczyścić całą historię tak, że nie ma nieporozumień. 156 00:09:29,950 --> 00:09:33,210 >> A jeśli naprawdę chcesz być paranoikiem, zamknij przeglądarkę, uruchom ją ponownie, 157 00:09:33,210 --> 00:09:35,660 i upewnij się, wszystko działa zgodnie z oczekiwaniami. 158 00:09:35,660 --> 00:09:38,820 Tak w skrócie, cache rozliczeniowa jest dobre, gdy robi rozwoju. 159 00:09:38,820 --> 00:09:40,690 Więc tutaj mamy zakładkę Network. 160 00:09:40,690 --> 00:09:46,020 I poprzednio odwiedził miejsce 9 razy, ale pozwól mi iść do przodu i kliknąć Wczytaj ponownie. 161 00:09:46,020 --> 00:09:47,500 I jestem z powrotem w dół do 0. 162 00:09:47,500 --> 00:09:52,100 Miejmy rzeczywiście zobaczyć, jak to jest, że ta superglobalna SESJA jest stosowane. 163 00:09:52,100 --> 00:09:55,990 Mam zamiar kliknąć na 1 żądania HTTP, które zostały dokonane, 164 00:09:55,990 --> 00:09:58,810 i okno debugowania pozwala mi zajrzeć do tego. 165 00:09:58,810 --> 00:10:01,970 Tutaj widzę tylko odpowiedzi z serwera, który nie jest ciekawy. 166 00:10:01,970 --> 00:10:04,030 Widziałem to na wiele sposobów. 167 00:10:04,030 --> 00:10:06,350 Ale to, co jest technicznie interesujące są nagłówki. 168 00:10:06,350 --> 00:10:11,770 Gdybym przewiń tutaj i skupić się na nagłówkach żądań i kliknij polecenie Pokaż źródło, 169 00:10:11,770 --> 00:10:14,400 co mam zamiar zobaczyć to dosłownie żądania HTTP 170 00:10:14,400 --> 00:10:17,250 że po prostu poszedł z mojej przeglądarki do serwera, 171 00:10:17,250 --> 00:10:21,400 GET jest operacyjny słowo, a następnie / counter.php będące nazwa pliku, 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1 prostu wersja HTTP, że moja przeglądarka korzysta. 173 00:10:25,670 --> 00:10:31,070 Linia ta tutaj jest trochę przypomnienia z przeglądarki do serwera, co nazwa serwera jest 174 00:10:31,070 --> 00:10:33,020 że chce porozmawiać. 175 00:10:33,020 --> 00:10:38,200 A potem reszta to jest czasami ciekawe, ale nie istotne teraz. 176 00:10:38,200 --> 00:10:40,090 >> To jest po prostu swego rodzaju ciekawostka. 177 00:10:40,090 --> 00:10:43,530 Cryptic chociaż napis jest, za każdym razem przeglądarka odwiedza stronę internetową 178 00:10:43,530 --> 00:10:47,110 jest informowanie serwera jakiej przeglądarki używasz 179 00:10:47,110 --> 00:10:50,040 i jaki system operacyjny używasz i jakie wersji. 180 00:10:50,040 --> 00:10:52,650 Więc jeśli kiedykolwiek zastanawialiście się, jak strony internetowe, takie jak CNN i etażerka 181 00:10:52,650 --> 00:10:56,860 wiedzieć, jakie są procenty użytkowników komputerów Mac w sieci Web, użytkowników komputerów PC, 182 00:10:56,860 --> 00:11:00,820 Użytkownicy IE, użytkownicy Chrome i podobne, to dlatego wszystkie nasze przeglądarek 183 00:11:00,820 --> 00:11:04,300 mówią każdą stronę tam, czym jesteśmy. 184 00:11:04,300 --> 00:11:07,410 Nie musi ona zawierać dane osobowe, 185 00:11:07,410 --> 00:11:13,060 ale ma poinformować serwer, co adres IP jest i jaka przeglądarka i system operacyjny, którego używasz. 186 00:11:13,060 --> 00:11:14,720 Więc to, gdzie ta informacja jest. 187 00:11:14,720 --> 00:11:19,960 Ale co ciekawsze teraz, jeśli chodzi o tych sesjach jest nagłówek odpowiedzi. 188 00:11:19,960 --> 00:11:22,530 Pozwól mi zobaczyć kliknij źródło obok odpowiedzi. 189 00:11:22,530 --> 00:11:24,590 Co ciekawe, o to kilka rzeczy. 190 00:11:24,590 --> 00:11:27,580 1, wróciliśmy kod stanu 200. 191 00:11:27,580 --> 00:11:29,840 Nigdy nie widzimy ten kod stanu, ponieważ to oznacza, że ​​wszystko jest dobrze. 192 00:11:29,840 --> 00:11:32,920 Oznacza to dosłownie w porządku w przeciwieństwie do czegoś innego. 193 00:11:32,920 --> 00:11:36,380 Co znajduje się numer czasami widzimy, że to źle? [Uczeń] 404. 194 00:11:36,380 --> 00:11:39,860 404, nie znaleziono pliku, 403 ty mogą być przeszkodą na już 195 00:11:39,860 --> 00:11:43,660 co jest zabronione, co oznacza, że ​​zapomniałeś coś chmod, najbardziej prawdopodobne. 196 00:11:43,660 --> 00:11:45,190 I jest kilka innych. 197 00:11:45,190 --> 00:11:47,760 >> Tu, to jest trochę szalony. 198 00:11:47,760 --> 00:11:52,340 I tak naprawdę napisał ten plik kilka minut temu, wklejając go w gedit. 199 00:11:52,340 --> 00:11:57,100 Dlaczego ta strona wygasa w 1981 zanim naprawdę WWW? 200 00:11:58,010 --> 00:12:00,730 Co się tam dzieje? 201 00:12:00,730 --> 00:12:04,390 >> [Niesłyszalne odpowiedź uczeń] datownik. Ale dlaczego? 202 00:12:06,110 --> 00:12:09,120 To nieco arbitralny, ale jest rzeczywiście przydatne. 203 00:12:09,120 --> 00:12:15,500 Co to mówi do mojej przeglądarce jest to plik PHP właśnie zwróciła już minął. 204 00:12:15,500 --> 00:12:18,580 W rzeczywistości, to ważność 30 lat temu. 205 00:12:18,580 --> 00:12:20,260 Ale co to tak naprawdę oznacza? 206 00:12:20,260 --> 00:12:22,500 To oznacza tylko następnym razem użytkownik odwiedza tę stronę, 207 00:12:22,500 --> 00:12:25,540 czy to poprzez przeładunek lub wpisać adres URL w pasku adresu 208 00:12:25,540 --> 00:12:28,010 upewnij się, idź i pobrać nową kopię. 209 00:12:28,010 --> 00:12:30,840 Jest to swego rodzaju przykład krach cache, 210 00:12:30,840 --> 00:12:33,790 głupie słowo, które oznacza po prostu stara się zniechęcić przeglądarek 211 00:12:33,790 --> 00:12:37,260 z faktycznie HTML buforowania, które zostało wysłane z serwera 212 00:12:37,260 --> 00:12:41,490 tak, aby przypadkowo nie przeładować, a następnie sprawdzić tę wersję pliku. 213 00:12:41,490 --> 00:12:43,730 Ty naprawdę chcesz, aby serwer wysłać nową kopię. 214 00:12:43,730 --> 00:12:47,440 Tak więc fakt, że to po prostu oznacza, że ​​1981 to właśnie urządzenie wybiera 215 00:12:47,440 --> 00:12:50,280 jako arbitralnej daty w przeszłości. 216 00:12:50,280 --> 00:12:53,380 Ale prawdziwy soczysty linia jest teraz ten. 217 00:12:53,380 --> 00:12:57,550 Jeszcze przed 50 pewnie masz jakieś pojęcie o ciasteczkach. 218 00:12:57,550 --> 00:13:01,820 W tej chwili, szczególnie wśród tych mniej wygodne lub pomiędzy, 219 00:13:01,820 --> 00:13:04,120 co to jest plik cookie w zrozumienie teraz 220 00:13:04,120 --> 00:13:06,980 nawet jeśli mamy zamiar uczynić rozumienie bardziej techniczny? 221 00:13:08,150 --> 00:13:10,070 Co jest cookie? Tak. 222 00:13:10,070 --> 00:13:13,890 [Uczeń] Informacja o użytkowniku, jak wtedy, gdy pisałem swoją nazwę użytkownika lub coś. 223 00:13:13,890 --> 00:13:17,370 >> Good. To informacje o użytkowniku, czy są już wpisane w nazwie użytkownika już. 224 00:13:17,370 --> 00:13:21,190 Cookies to sposób w którym serwery mogą pamiętać coś o użytkowniku. 225 00:13:21,190 --> 00:13:25,810 I co tak naprawdę jest plik cookie jest plikiem tekstowym lub niektórych sekwencji bajtów 226 00:13:25,810 --> 00:13:28,340 który jest obsadzony przez serwer wewnątrz przeglądarki, 227 00:13:28,340 --> 00:13:31,960 i wewnątrz tego pliku lub wśród tych bajtów jest jakiś identyfikator. 228 00:13:31,960 --> 00:13:35,640 Może to dosłownie nazwa użytkownika, ale częściej jest to coś więcej, tajemniczy przystojny 229 00:13:35,640 --> 00:13:43,700 jak to coś tutaj - bo8dal3ct i tak dalej - to naprawdę duży ciąg alfanumeryczny 230 00:13:43,700 --> 00:13:47,050 , który jest tak naprawdę ma być unikalny identyfikator dla Ciebie. 231 00:13:47,050 --> 00:13:49,790 Można też pomyśleć o tym jako rodzaj wirtualnego stempla ręcznego. 232 00:13:49,790 --> 00:13:53,020 Jeśli pójdziesz do jakiegoś klubu lub parku rozrywki, aby pamiętać, że już faktycznie zapłacona 233 00:13:53,020 --> 00:13:55,850 i poszedł w, umieścić czerwoną naklejkę w ręce pewnego rodzaju, 234 00:13:55,850 --> 00:13:59,270 i przypomina ludziom przy kasie że już zapłaconej 235 00:13:59,270 --> 00:14:01,340 i można przyjść i odejść, jak chcesz. 236 00:14:01,340 --> 00:14:04,250 Cookies są trochę w duchu podobnym do tego. 237 00:14:04,250 --> 00:14:08,070 Po raz pierwszy odwiedził tej strony, jak właśnie to zrobiłem po usunięciu pamięć podręczną, 238 00:14:08,070 --> 00:14:11,620 serwer WWW, urządzenie w tym przypadku, należy umieścić pieczątkę na ręce 239 00:14:11,620 --> 00:14:15,030 którego nazwisko PHPSESSID, session ID, 240 00:14:15,030 --> 00:14:18,260 którego wartość jest to naprawdę długi ciąg alfanumeryczny. 241 00:14:18,260 --> 00:14:22,470 >> Tak się to teraz jakby zdobi na mojej dłoni, tak aby następnym razem przeładować 242 00:14:22,470 --> 00:14:25,230 lub ręcznie, odwiedź ten adres URL w przeglądarce 243 00:14:25,230 --> 00:14:29,230 moja przeglądarka z definicji HTTP zaprezentuje piętno ręki 244 00:14:29,230 --> 00:14:31,940 znowu i znowu i znowu. 245 00:14:31,940 --> 00:14:34,550 Więc nawet jeśli serwer nie musi wiedzieć, kim jestem, 246 00:14:34,550 --> 00:14:39,610 oni przynajmniej wiedzą, że jestem sam użytkownik lub przynajmniej bardziej konkretnie, sama przeglądarka. 247 00:14:39,610 --> 00:14:45,660 I tak to jest w końcu jak superglobalna SESJA jest zaimplementowana. 248 00:14:45,660 --> 00:14:51,200 Serwer nie ma pojęcia, kim jesteś, kiedy ponownie witrynę dla sekund lub po raz trzeci 249 00:14:51,200 --> 00:14:53,410 chyba że przedstawi ten znaczek ręki. 250 00:14:53,410 --> 00:14:55,530 I jak najszybciej przedstawić tę pieczęć rąk, 251 00:14:55,530 --> 00:14:59,370 Serwer WWW w istocie idzie do małego bazie własnej 252 00:14:59,370 --> 00:15:06,040 i sprawdza, w porządku, ja właśnie widział znaczek ręki o bo8dal3ct użytkownika i tak dalej. 253 00:15:06,040 --> 00:15:09,850 Pozwól mi zobaczyć, jakie informacje programista przechowywane 254 00:15:09,850 --> 00:15:12,380 wewnątrz superglobalną o tym użytkownika, 255 00:15:12,380 --> 00:15:17,000 i pozwól mi się upewnić, że dane są ponownie wewnątrz superglobalnej SESJI 256 00:15:17,000 --> 00:15:19,830 tak, że programista może ponownie uzyskać dostęp do tych danych 257 00:15:19,830 --> 00:15:23,360 nawet jeśli był ustawiony kilka minut lub godzin temu. 258 00:15:23,360 --> 00:15:26,150 Więc innymi słowy, pliki cookie, które dostał złą reputację na jakiś czas 259 00:15:26,150 --> 00:15:29,990 z powodu niepewności w przeglądarkach i mogą naprawdę naruszać naszą prywatność, a wszystko to, 260 00:15:29,990 --> 00:15:31,900 rzeczywiście mają wielkie narzędzia bo bez nich 261 00:15:31,900 --> 00:15:36,110 chcesz być stale logowania do każdej odwiedzanej stronie Facebook 262 00:15:36,110 --> 00:15:40,680 Gmail email lub co czytasz, jeśli przeglądarka nie ma jakiś sposób na zapamiętywanie 263 00:15:40,680 --> 00:15:43,320 że już potwierdzona. 264 00:15:43,320 --> 00:15:46,640 >> Więc w ten sposób pliki cookie są wysyłane tam iz powrotem po drugiej stronie drutu. 265 00:15:46,640 --> 00:15:52,470 Kolejną ciekawostką na temat cookies, szczególnie tutaj, jest to, że jest całkowicie w postaci zwykłego tekstu. 266 00:15:52,470 --> 00:15:54,930 Nie ma szyfrowania tutaj dzieje, co, 267 00:15:54,930 --> 00:15:57,240 i rzeczywiście używam HTTP w tej chwili. 268 00:15:57,240 --> 00:16:00,890 Jednym z naszych ulubionych momentów w CS50, który jest teraz 2 lata temu, 269 00:16:00,890 --> 00:16:04,750 została na czas narzędzie o nazwie Firesheep wyszedł. 270 00:16:04,750 --> 00:16:08,320 To było wolne oprogramowanie, które zostało dokonane przez badacza bezpieczeństwa 271 00:16:08,320 --> 00:16:13,250 jako pobudkę dla społeczności powiedzieć jak potwornie realizowane 272 00:16:13,250 --> 00:16:17,900 niektóre mechanizmy uwierzytelniania w sieci były. 273 00:16:17,900 --> 00:16:22,880 Więc przez jakiś czas, Facebook był niemal w całości przez HTTP, nie HTTPS. 274 00:16:22,880 --> 00:16:25,640 I nawet jeśli nie masz pojęcia, jak działa crypto, S jest bezpieczne 275 00:16:25,640 --> 00:16:27,950 więc to oznacza, że ​​jest co najmniej niektóre szyfrowanie zaangażowany. 276 00:16:27,950 --> 00:16:30,610 Facebook nie używany do szyfrowania nazw użytkowników i haseł, 277 00:16:30,610 --> 00:16:33,560 ale jak tylko Sprawdziliśmy wyśmiewa lub wiadomości lub swojego kanału wiadomości, 278 00:16:33,560 --> 00:16:35,360 Wszystko to było szyfrowane. 279 00:16:35,360 --> 00:16:37,870 Tak było aż do Gmail tylko rok lub 2 temu. 280 00:16:37,870 --> 00:16:41,100 Za każdym razem, że jesteś zalogowany, tak, kiedyś bezpieczne szyfrowanie 281 00:16:41,100 --> 00:16:44,300 ale potem nie. I dlaczego może być tego przyczyna? 282 00:16:44,300 --> 00:16:49,210 Dlaczego po prostu nie używać kryptografii cały czas w przypadkach użycia takich jak to? 283 00:16:49,210 --> 00:16:53,700 Co to jest? Myślę, że coś słyszałem. [Uczeń] Speed. 284 00:16:53,700 --> 00:16:56,250 Prędkość, prawda? Istnieją sposoby, żeby to ominąć. 285 00:16:56,250 --> 00:16:59,610 Ale jeśli po prostu rodzaj myśleć logicznie, jeśli zaszyfrować coś 286 00:16:59,610 --> 00:17:01,820 musisz zrobić przynajmniej trochę więcej pracy. 287 00:17:01,820 --> 00:17:05,460 W Pset 2 kiedy realizowane Cezara lub Vigenère nawet crack, 288 00:17:05,460 --> 00:17:07,760 tylko drukowanie ciąg jest stosunkowo łatwe. 289 00:17:07,760 --> 00:17:12,040 Szyfrowanie, a następnie wypisujemy napis minimalnie wymaga nieco więcej pracy. 290 00:17:12,040 --> 00:17:14,520 >>  Dla super popularnych stron internetowych takich jak Google i Facebook, 291 00:17:14,520 --> 00:17:18,839 jeśli musisz wykonać więcej pracy dla każdego użytkownika, dla każdej strony odwiedzają, 292 00:17:18,839 --> 00:17:20,520 że po prostu wymaga więcej czasu procesora. 293 00:17:20,520 --> 00:17:22,920 A jeśli potrzebujesz więcej czasu procesora, może być konieczne więcej serwerów, 294 00:17:22,920 --> 00:17:24,270 co oznacza, że ​​może być potrzebne więcej pieniędzy. 295 00:17:24,270 --> 00:17:27,579 I tak przez wiele lat to po prostu naprawdę nie było najlepsze praktyki. 296 00:17:27,579 --> 00:17:31,440 Ludzie będą używać szyfrowania SSL tylko wtedy, gdy potrzebne. 297 00:17:31,440 --> 00:17:34,960 Okazało się jednak, i jak ten facet z Firesheep wykonane super jasne, 298 00:17:34,960 --> 00:17:37,920 kiedy wy, którzy są obecnie na Facebooku już teraz - 299 00:17:37,920 --> 00:17:39,880 Z ciekawości, zobaczymy, czy będziesz FESS up. 300 00:17:39,880 --> 00:17:42,620 Jeśli jesteś na Facebooku już teraz w niektórych karcie, nawet jeśli nie jest przywrócony, 301 00:17:42,620 --> 00:17:46,610 Twój URL HTTP lub HTTPS? 302 00:17:46,610 --> 00:17:50,560 [Wiele studentów] S. S? [Śmiech] 303 00:17:50,560 --> 00:17:55,510 Okay. Wszelkie HTTP? Tylko 1? Okay. 304 00:17:55,510 --> 00:17:58,940 Tak więc każdy z nas może wykraść tego faceta konta Facebook teraz. 305 00:17:58,940 --> 00:18:04,100 W większości stało się domyślnie włączona, co najmniej w niektórych stron. 306 00:18:04,100 --> 00:18:08,120 I długą historię, jeśli ruch internetowy nie jest szyfrowane, 307 00:18:08,120 --> 00:18:12,960 nie tylko HTML tam iz powrotem w poprzek WiFis niekodowane, 308 00:18:12,960 --> 00:18:16,760 więc nie takie rzeczy jak ciasteczka tam iz powrotem w całym powietrzu 309 00:18:16,760 --> 00:18:18,940 bez żadnego szyfrowania. 310 00:18:18,940 --> 00:18:23,540 Więc jeśli masz tylko trochę doświadczonych programowania lub odrobinę Googling umiejętności 311 00:18:23,540 --> 00:18:27,410 znaleźć darmowe oprogramowanie, które wykonuje to, wszystko co musisz zrobić, to siedzieć w Starbucks 312 00:18:27,410 --> 00:18:30,680 lub siedzieć na lotnisku, gdzie jest ogólnie niezaszyfrowane WiFi 313 00:18:30,680 --> 00:18:36,070 i po prostu uważać na słowa kluczowe, jak Set-Cookie: PHPSESSID lub 314 00:18:36,070 --> 00:18:39,300 ponieważ jeśli masz techniczną doświadczonych tylko oglądać WiFi 315 00:18:39,300 --> 00:18:43,010 dla wszystkich bitów w ciągu przepływu powietrza w tym modelu, 316 00:18:43,010 --> 00:18:50,840 można zatem powiedzieć, że facet PHPSESSID bywa bo8dal i tak dalej. 317 00:18:50,840 --> 00:18:53,890 A potem jeszcze raz, jeśli jesteś wystarczająco technicznie doświadczonych lub mieć odpowiednie narzędzie, 318 00:18:53,890 --> 00:18:58,890 możesz po prostu zmienić konfigurację swojej przeglądarki, aby rozpocząć przedstawianie że znaczek ręki 319 00:18:58,890 --> 00:19:05,030 na Facebook.com, a Facebook jest tylko zamiar założyć, że jesteś, że facet 320 00:19:05,030 --> 00:19:09,880 bo wszyscy wiedzą, że nie jest to, kim jesteś, ale to masz ten niepowtarzalny identyfikator. 321 00:19:09,880 --> 00:19:14,650 Więc jeśli kraść to unikatowy identyfikator i przedstawić go do serwera, jako swoją własną, 322 00:19:14,650 --> 00:19:16,860 są one po prostu się pokazać, że osoby kanał wiadomości 323 00:19:16,860 --> 00:19:18,980 lub taka osoba w wiadomości lub wyśmiewa. 324 00:19:18,980 --> 00:19:23,190 >> I chciałbym Google teraz jak włączyć HTTPS dla Facebook może. 325 00:19:23,190 --> 00:19:25,150 Ale to naprawdę jest tak proste. 326 00:19:25,150 --> 00:19:27,660 I tak Facebook i Google oraz jak zdobyć w tym naprawdę dobra, 327 00:19:27,660 --> 00:19:31,870 ale miej oko tym bardziej jakichkolwiek odwiedzanych witryn, które nie używają protokołu HTTP 328 00:19:31,870 --> 00:19:35,020 i mieć jakiś poufnych informacji na ich temat, 329 00:19:35,020 --> 00:19:37,490 czy to finansowe lub osobiste lub podobne. 330 00:19:37,490 --> 00:19:43,180 Jeśli nie korzystasz z tego, całkiem prawdopodobnie może ciasteczka lubi bardzo łatwo skradzione 331 00:19:43,180 --> 00:19:46,270 i kute, a to jest dokładnie to, co Firesheep zrobił. 332 00:19:46,270 --> 00:19:48,250 Nie trzeba być programistą. 333 00:19:48,250 --> 00:19:51,680 Wszystko, co musiałem zrobić, to być połączenie z Internetem, pobrać darmowe narzędzie, 334 00:19:51,680 --> 00:19:56,490 i co by to zrobić, to zalogować się i wtedy byłoby pokazać nazwy Facebook 335 00:19:56,490 --> 00:20:00,170 każdy z w Sanders, w tej konkretnej demonstracji, wokół ciebie 336 00:20:00,170 --> 00:20:03,260 i wszystko, co musiałem zrobić, to kliknąć na ich nazwę i oprogramowanie automatyzacji procesu 337 00:20:03,260 --> 00:20:05,970 z wąchania to ciasteczko, przedstawiając go na Facebook, jak własne, 338 00:20:05,970 --> 00:20:07,990 i, voila, jesteś zalogowany 339 00:20:07,990 --> 00:20:11,190 Więc to jest jedna z tych "nie rób tego" oficjalnie. 340 00:20:11,190 --> 00:20:14,660 Jeśli masz własną sieć domową i chcesz majsterkować, przez wszystkich środków, 341 00:20:14,660 --> 00:20:17,530 ale sobie z tego nie przekroczyć linię na środowisku akademickim. 342 00:20:17,530 --> 00:20:20,030 >> Ale cel tutaj jest naprawdę nie podkreślić, jak to zrobić 343 00:20:20,030 --> 00:20:22,320 ale w jaki sposób bronić się przed tego typu rzeczami. 344 00:20:22,320 --> 00:20:26,180 A rozwiązanie trywialne tutaj, choć sama w sobie jest błędna, 345 00:20:26,180 --> 00:20:31,360 jest naprawdę zmniejszyć użycie wszelkich witryn, które nie są przy użyciu protokołu HTTPS stale. 346 00:20:31,360 --> 00:20:34,520 Więc witryn, takich jak Facebook i Google coraz częściej mają pola wyboru 347 00:20:34,520 --> 00:20:36,200 gdzie można wybrać się na tego typu rzeczy, 348 00:20:36,200 --> 00:20:40,000 i banki miały to od lat z podobnych przyczyn. 349 00:20:40,000 --> 00:20:43,580 Więc po prostu trochę czynnik strachu, jeśli możemy. Ale to wszystko w pigułce. 350 00:20:43,580 --> 00:20:46,420 W ten sposób serwer pamięta, kim jesteś. 351 00:20:46,420 --> 00:20:50,760 I tak szybko jak mogą pamiętać, kim jesteś, może pamiętasz coś o tobie 352 00:20:50,760 --> 00:20:56,140 że programista przechowywane wewnątrz tej specjalnej superglobalną nazwie $ _SESSION. 353 00:20:56,140 --> 00:20:59,750 A dla Pset 7 używamy go trywialnie tylko pamiętać int, 354 00:20:59,750 --> 00:21:02,260 czyli unikalny identyfikator użytkownika, który zalogował się, 355 00:21:02,260 --> 00:21:05,880 tak, że wiemy, że było tam wcześniej. 356 00:21:05,880 --> 00:21:12,450 Wszelkie pytania, a następnie na sesji lub ciasteczka lub podobnych? 357 00:21:12,450 --> 00:21:15,130 Firesheep nie działa tak dobrze już, 358 00:21:15,130 --> 00:21:18,310 i trzeba przełączyć komputer w specjalnym trybie promiscuous 359 00:21:18,310 --> 00:21:20,700 więc jesteś rzeczywiście słuchając ruchu oprócz siebie. 360 00:21:20,700 --> 00:21:23,940 Więc jeśli jesteś obecnie pobieranie Firesheep, sobie sprawę, że nie jest tak łatwo 361 00:21:23,940 --> 00:21:26,850 jak to było kiedyś udowodnić. 362 00:21:26,850 --> 00:21:29,070 Dobrze. I nie rób tego w Sanders. Czy to w domu. 363 00:21:29,070 --> 00:21:30,890 Baz danych. 364 00:21:30,890 --> 00:21:33,580 Jedną z rzeczy, które zrobiliśmy w Pset 7 bardzo świadomie 365 00:21:33,580 --> 00:21:37,780 została dajemy tabeli bazy danych próbek dla użytkowników ma pewne identyfikatory użytkowników, 366 00:21:37,780 --> 00:21:41,020 niektóre nazwy użytkowników i niektóre zaszyfrowane hasła nim. 367 00:21:41,020 --> 00:21:44,520 A jak zobaczysz, jeśli jeszcze go nie masz, będziesz musiał zmienić tabelę trochę. 368 00:21:44,520 --> 00:21:47,710 Będziesz musiał dodać trochę cache dla każdego z użytkowników w tej tabeli, 369 00:21:47,710 --> 00:21:51,130 i będziesz musiał dodać kolejną tabelę historię, stół, portfele 370 00:21:51,130 --> 00:21:53,310 czy może nazwać to coś innego. 371 00:21:53,310 --> 00:21:56,740 Ale jeśli chodzi o myślenie o tym, jak to zrobić, niech otworzy tego narzędzia 372 00:21:56,740 --> 00:22:00,570 którego użyliśmy w piątek, ale jeśli znają, urządzenie dostarczane jest narzędzie 373 00:22:00,570 --> 00:22:04,680 nazywa phpMyAdmin który przypadkowo napisana w PHP, 374 00:22:04,680 --> 00:22:07,950 ale jego celem w życiu, po zalogowaniu się tutaj jako jharvard z purpury, 375 00:22:07,950 --> 00:22:15,160 jest mi przyjazny dla użytkownika sposób wyświetlania i zmiany mojej bazy danych. 376 00:22:15,160 --> 00:22:18,040 >> Bazy danych, który używam na urządzenie nazywa MySQL. 377 00:22:18,040 --> 00:22:23,420 Jest to bardzo popularny, i to za darmo bazy danych open source, że to cudownie łatwy w użyciu, 378 00:22:23,420 --> 00:22:25,620 zwłaszcza z przodu kończy się w ten sposób. 379 00:22:25,620 --> 00:22:29,350 Co to narzędzie pozwala mi robić, na przykład, jest rozejrzyj tabelach. 380 00:22:29,350 --> 00:22:30,890 Pozwólcie mi iść do przodu i robić. 381 00:22:30,890 --> 00:22:36,580 W piątek utworzona tabela o nazwie studenci to było super proste. 382 00:22:36,580 --> 00:22:41,680 Miał 3 kolumny - id, nazwa, i e-mail - i ręcznie dodaje kilka wierszy 383 00:22:41,680 --> 00:22:44,420 jak Dawid i Mike w tym konkretnym przykładzie. 384 00:22:44,420 --> 00:22:47,290 Zróbmy to nieco dalej i załóżmy, że chcemy pamiętać więcej 385 00:22:47,290 --> 00:22:49,660 niż tylko imię i e-mail o użytkownika. 386 00:22:49,660 --> 00:22:53,090 Pozwól mi się tutaj, kliknij Structure na szczycie. 387 00:22:53,090 --> 00:22:55,440 I znowu, pset poprowadzi Cię przez odpowiednie kroki tutaj, 388 00:22:55,440 --> 00:22:58,150 więc nie martw się, jeśli niektóre to trochę szybko. 389 00:22:58,150 --> 00:22:59,690 Wtedy będę kliknij tutaj. 390 00:22:59,690 --> 00:23:02,270 Mam zamiar dodać liczbę kolumn po email 391 00:23:02,270 --> 00:23:04,130 bo chcę dodać coś takiego domu. 392 00:23:04,130 --> 00:23:06,640 Zapomniałem nagrać studenta dom. 393 00:23:06,640 --> 00:23:11,400 Let Me Kliknij Dalej, a teraz mamy tego formularza, który niestety jest trochę szeroki, od lewej do prawej, 394 00:23:11,400 --> 00:23:13,710 ale mam zamiar zadzwonić do nazwy tego domu w terenie, 395 00:23:13,710 --> 00:23:16,050 a następnie wpisz teraz mam do wyboru. 396 00:23:16,050 --> 00:23:18,870 Więc niech mają krótką pogawędkę na temat różnych typów w MySQL 397 00:23:18,870 --> 00:23:24,590 ponieważ podczas gdy PHP jest słabo wpisane i to jakby gra szybko i luźne z typów, 398 00:23:24,590 --> 00:23:29,430 w bazie danych, zwłaszcza, że ​​to bardzo ważne, aby faktycznie korzystać pisania na swoją korzyść 399 00:23:29,430 --> 00:23:33,260 ponieważ jedna z tych rzeczy, MySQL i innych silników baz danych może zrobić dla Ciebie 400 00:23:33,260 --> 00:23:37,910 jest zapewnienie, że nie należy umieszczać fałszywych danych do bazy danych. 401 00:23:37,910 --> 00:23:41,850 To jest coś w rodzaju wolnego sprawdzania błędów dostępne. 402 00:23:41,850 --> 00:23:46,250 >> Do domu mamy oczywiście nie ma to być int, który jest 32-bitowa wartość w MySQL. 403 00:23:46,250 --> 00:23:49,810 Mieliśmy rozmawiać krótko w piątek o varchar, co oznacza zmiennej długości char. 404 00:23:49,810 --> 00:23:54,720 Co to jest? To pozwala określić, że chcesz, że jest to ciąg jakiejś. 405 00:23:54,720 --> 00:23:56,840 Tak naprawdę nie wiemy z góry, jak długo to jest, 406 00:23:56,840 --> 00:24:00,100 więc będziemy arbitralnie powiedzieć nazwa dom może być 255 znaków, 407 00:24:00,100 --> 00:24:04,190 ale można iść z 32, 64 - dowolną liczbę naprawdę. 408 00:24:04,190 --> 00:24:10,700 Ale zaletą korzystania z varchar na polu o nazwie char jest co? 409 00:24:10,700 --> 00:24:15,110 Tylko intuicyjnie jeśli przewiń tu zauważyć że char i jest varchar. 410 00:24:15,110 --> 00:24:19,520 VARCHAR jest zmienna długość char; char jest stała długość char. 411 00:24:19,520 --> 00:24:24,730 Tak więc wyłącznie na podstawie tej definicji, co jest zaletą czy wadą każdego z nich? 412 00:24:24,730 --> 00:24:30,490 Innymi słowy, kto troszczy się o różnicy, ani dlaczego powinno Cię to obchodzić? 413 00:24:31,660 --> 00:24:35,750 >> Tak. [Uczeń] Varchar ma większą elastyczność, ale zajmuje więcej pamięci. 414 00:24:35,750 --> 00:24:40,730 Good. Varchar zajmuje więcej - Zobaczmy. Nie jestem pewien, czy słyszałem, że prawo. 415 00:24:40,730 --> 00:24:42,360 Można powiedzieć, że po raz kolejny? 416 00:24:42,360 --> 00:24:45,850 [Uczeń] powiedziałem varchar prawdopodobnie ma większą elastyczność, ale to zajmuje więcej pamięci. 417 00:24:45,850 --> 00:24:51,170 Ciekawe. Okay. Varchar prawdopodobnie daje większą elastyczność, ale zajmuje więcej pamięci. 418 00:24:51,170 --> 00:24:53,220 Ten ostatni nie jest zawsze prawdziwe. 419 00:24:53,220 --> 00:24:56,290 To zależy od kontekstu, ale wróćmy do tego. 420 00:24:56,290 --> 00:25:03,230 >> [Niesłyszalne odpowiedź uczeń] Dokładnie. 421 00:25:03,230 --> 00:25:06,900 To rzeczywiście jest tak, że char zazwyczaj więcej pamięci 422 00:25:06,900 --> 00:25:10,950 ponieważ char, jak w C, jest jak łańcuch, to jest tablica znaków. 423 00:25:10,950 --> 00:25:13,690 Więc jeśli mówisz char pole długości 255, 424 00:25:13,690 --> 00:25:16,910 Baza jest dosłownie dać ci 255 znaków. 425 00:25:16,910 --> 00:25:22,290 I jeśli dom kończy się Mather i 6 znaków razem, 426 00:25:22,290 --> 00:25:25,090 marnujesz ponad 200 znaków. 427 00:25:25,090 --> 00:25:29,640 >> Więc varchar skutecznie wykorzystuje tylko tyle znaków, jak to jest konieczne 428 00:25:29,640 --> 00:25:31,590 do maksymalnej wartości. 429 00:25:31,590 --> 00:25:35,470 Ale cena, jaką płacisz jest faktycznie wydajność, potencjalnie. 430 00:25:35,470 --> 00:25:39,740 Jeśli wiesz z góry, że wszystkie ciągi będą 8 znaków - 431 00:25:39,740 --> 00:25:43,090 Na przykład załóżmy, że wymagają haseł o długości 8 - 432 00:25:43,090 --> 00:25:47,350 Minusem korzystania char pole przy okazji, choć nie często, 433 00:25:47,350 --> 00:25:51,100 jest określenie, stałą długość za coś jak hasło 434 00:25:51,100 --> 00:25:53,300 bo teraz baza danych może być jeszcze mądrzejszy. 435 00:25:53,300 --> 00:25:58,160 Jeśli wie, że każdy char pole, każdy ciąg w kolumnie jest tej samej długości, 436 00:25:58,160 --> 00:26:00,780 wrócisz z funkcji losowego dostępu. 437 00:26:00,780 --> 00:26:05,110 Można skakać wśród różnych dziedzin char w tabeli bazy danych 438 00:26:05,110 --> 00:26:07,940 bo myślę o bazie danych, wierszach i kolumnach. 439 00:26:07,940 --> 00:26:11,670 Tak więc, jeśli każdy z tych łańcuchów jest tej samej długości, 440 00:26:11,670 --> 00:26:17,820 wiesz, że pierwszy z nich jest w bajcie 0, następny jest w bajcie 8 441 00:26:17,820 --> 00:26:20,240 i 16 i 24 i tak dalej. 442 00:26:20,240 --> 00:26:24,500 Więc jeśli wszystkie struny są tej samej długości, można skakać znacznie wydajniej. 443 00:26:24,500 --> 00:26:26,710 Tak, że może być korzyści w zakresie wydajności, 444 00:26:26,710 --> 00:26:29,420 ale zazwyczaj nie masz na luksus wiedząc z góry, 445 00:26:29,420 --> 00:26:32,170 tak varchar jest droga. 446 00:26:32,170 --> 00:26:36,030 Oto kolejny szczegół, że nawet Facebook wpadł ostatecznie. 447 00:26:36,030 --> 00:26:39,670 Ints są świetne, a my jakby ich używać domyślnie czasu chcemy liczbę, 448 00:26:39,670 --> 00:26:41,750 ale to tylko 32 bity. 449 00:26:41,750 --> 00:26:46,210 >> I mimo, że Facebook nie dość mają 4 miliardy użytkowników teraz, 450 00:26:46,210 --> 00:26:48,680 tam na pewno niektórzy ludzie, z wielu kont 451 00:26:48,680 --> 00:26:50,960 lub rachunków, które zostały otwarte, a następnie zamknięte, 452 00:26:50,960 --> 00:26:55,130 i tak samo uważam Facebook kilka lat temu mieliśmy do przejścia z int 453 00:26:55,130 --> 00:27:00,010 aby, jak to trafnie określił, bigint, która znajduje się zaledwie 64 bity zamiast. 454 00:27:00,010 --> 00:27:02,230 Więc to też jest decyzja projektowa. 455 00:27:02,230 --> 00:27:06,570 Użytkownik będzie niezwykle szczęśliwy, jeśli projekt końcowy okazuje starcie, 456 00:27:06,570 --> 00:27:10,010 ma 4 mld euro i 1 użytkownicy, lub dać, 457 00:27:10,010 --> 00:27:13,200 w takim przypadku za pomocą wskazówki może być trochę krótkowzroczne. 458 00:27:13,200 --> 00:27:16,230 Ale w rzeczywistości, tabela użytkowników jest chyba w porządku z wskazówki. 459 00:27:16,230 --> 00:27:19,340 Ale na coś takiego Pset 7, jak tabeli historii, 460 00:27:19,340 --> 00:27:23,700 możesz mieć tysiące, miliony użytkowników, jeśli przekształci się etrade.com. 461 00:27:23,700 --> 00:27:26,020 Tak więc mając na uwadze, że nie może mieć więcej niż 4 miliardy użytkowników, 462 00:27:26,020 --> 00:27:30,070 tych użytkowników, masz może mieć ponad 4 miliardów transakcji w czasie - 463 00:27:30,070 --> 00:27:33,200 kupuje i sprzedaje i rzeczy w ich historii. 464 00:27:33,200 --> 00:27:38,090 Więc jeśli nie przewidujemy - znowu są to dobre mają problemy, jeśli masz tyle danych - 465 00:27:38,090 --> 00:27:40,920 jeśli nie przewidujemy danych przekraczające rozmiar int, 466 00:27:40,920 --> 00:27:47,740 dzieje z czymś bigint jest kierunek nie tyle często przyjmowane przez projektantów 467 00:27:47,740 --> 00:27:49,710 bo rysunek osób, które nie będzie to problem, 468 00:27:49,710 --> 00:27:51,930 ale to jest łatwo wybrać coś większego niż to. 469 00:27:51,930 --> 00:27:55,380 Decimal używamy w Pset 7, która określa stałą precyzję 470 00:27:55,380 --> 00:27:59,840 dzięki czemu można uniknąć problemów z udziałem pływaków i dwuosobowymi oraz rzeczywistymi i podobne. 471 00:27:59,840 --> 00:28:02,440 >> I jest jeszcze kilka innych pól tutaj. Będziemy machać ręce na nich w pewnym stopniu. 472 00:28:02,440 --> 00:28:07,270 Ale daty, godziny wszyscy mają wymaganego formatu w MySQL, 473 00:28:07,270 --> 00:28:10,830 i zaletą przechowywania dat jako daty, a nie varchars 474 00:28:10,830 --> 00:28:15,730 Oznacza to, że baza danych może faktycznie sformatować je w różnych formatach, 475 00:28:15,730 --> 00:28:18,800 czy format Amerykański lub europejski format lub jak - jednak chcesz - 476 00:28:18,800 --> 00:28:22,700 znacznie skuteczniej, niż gdyby tylko niektóre generic varchar. 477 00:28:22,700 --> 00:28:25,150 I jest jeszcze inny binary, varbinary, bąble. 478 00:28:25,150 --> 00:28:28,580 Są to duże obiekty binarne, a można również przechowywać dane binarne 479 00:28:28,580 --> 00:28:30,750 geometrycznych oraz danych w bazie danych. 480 00:28:30,750 --> 00:28:34,350 Ale dla nas my zazwyczaj dbają o wskazówki i varchars i jak. 481 00:28:34,350 --> 00:28:36,230 Chodźmy dokończyć ten przykład z domu. 482 00:28:36,230 --> 00:28:40,030 Dom zamierzam arbitralnie powiedzieć będzie 255 znakow. 483 00:28:40,030 --> 00:28:42,850 Następnie wartość domyślna moglibyśmy to zrobić. 484 00:28:42,850 --> 00:28:47,440 Moglibyśmy domyślnie wprawiła wszystkich w Mather House, na przykład. 485 00:28:47,440 --> 00:28:49,710 W ten sposób możemy określić, że baza danych 486 00:28:49,710 --> 00:28:52,460 Należy zapewnić, że ktoś zawsze wartość. Ale zostawię to będzie. 487 00:28:52,460 --> 00:28:55,270 W rzeczywistości, dla ludzi, którzy mieszkają poza kampusem, a nie w domu, 488 00:28:55,270 --> 00:28:59,590 Może faktycznie chcę wskazać, że domyślna wartość domu jest NULL, 489 00:28:59,590 --> 00:29:04,890 i wtedy trzeba sprawdzić to pole i powiedzieć bazy jest w porządku jeśli użytkownik dom jest NULL. 490 00:29:04,890 --> 00:29:07,270 >> Ponownie, jest to kolejny mechanizm obronny można umieścić w miejscu 491 00:29:07,270 --> 00:29:10,590 więc nawet nie mam go umieścić w kodzie PHP niekoniecznie. 492 00:29:10,590 --> 00:29:14,630 Baza gwarantuje, że rzeczy są lub nie są NULL. 493 00:29:14,630 --> 00:29:17,310 I wtedy wreszcie, Atrybuty. 494 00:29:17,310 --> 00:29:18,920 Żaden z nich są naprawdę istotne. 495 00:29:18,920 --> 00:29:22,880 Binary, unsigned - żaden z nich nie są istotne do varchar. 496 00:29:22,880 --> 00:29:24,220 Index. 497 00:29:24,220 --> 00:29:27,320 Czy ktoś wie, czy zapamiętać lub masz przypuszczenia co do tego, czym jest indeks 498 00:29:27,320 --> 00:29:29,510 na coś takiego domu? 499 00:29:29,510 --> 00:29:35,240 To też jest rzeczywiście ważne i stosunkowo łatwa decyzja design. 500 00:29:35,240 --> 00:29:39,200 Dla tych, którzy jeszcze tego nie widział, w piątek, rozmawialiśmy krótko o kluczy podstawowych. 501 00:29:39,200 --> 00:29:43,240 W tabeli bazy danych, klucz podstawowy jest polem lub kolumna 502 00:29:43,240 --> 00:29:46,270 , który jednoznacznie identyfikuje wiersze tabeli. 503 00:29:46,270 --> 00:29:49,150 Więc w obecnej tabeli mamy identyfikatory, mamy nazwiska i e-maile. 504 00:29:49,150 --> 00:29:52,050 Które z nich jest najlepszym kandydatem jest kluczem głównym, 505 00:29:52,050 --> 00:29:55,810 którego zadaniem jest identyfikowanie wiersze? 506 00:29:55,810 --> 00:29:57,530 Prawdopodobnie ID. 507 00:29:57,530 --> 00:29:59,930 Zapewne, możemy również użyć, co jednak? 508 00:29:59,930 --> 00:30:02,860 Być może można wykorzystać wiadomość, ponieważ w teorii to wyjątkowy 509 00:30:02,860 --> 00:30:05,380 chyba że ludzie dzielą kont pocztowych. 510 00:30:05,380 --> 00:30:09,980 Ale rzeczywistość jest taka, że ​​jeśli używasz numeryczny identyfikator, jak 1234, 511 00:30:09,980 --> 00:30:14,170 to tylko 32 bity, a adres e-mail może być to wiele bajtów lub to wiele bajtów. 512 00:30:14,170 --> 00:30:16,610 Tak pod względem wydajności dla niepowtarzalnych identyfikatorów, 513 00:30:16,610 --> 00:30:19,270 to wydaje się być po prostu dobra praktyka w obsłudze int 514 00:30:19,270 --> 00:30:23,090 nawet jeśli masz jakieś kandydata ciąg że można zapewne wykorzystać. 515 00:30:23,090 --> 00:30:26,760 >> Na coś takiego domu, to nie powinno być kluczem podstawowym 516 00:30:26,760 --> 00:30:30,770 bo wtedy tylko 1 osoba może żyć w Mather i 1 osoba w Currier i jak. 517 00:30:30,770 --> 00:30:32,790 Podobnie, nie powinny być unikalne. 518 00:30:32,790 --> 00:30:37,830 Różnica pomiędzy podstawowym i jest unikalny w naszym przypadku tabeli 519 00:30:37,830 --> 00:30:42,620 ID będzie głównym, ale e-mail nie jest pierwotny, ze względów właśnie mowa - 520 00:30:42,620 --> 00:30:44,740 wydajność - ale w dalszym ciągu powinno być unikatowe. 521 00:30:44,740 --> 00:30:47,200 Więc nadal można wymuszać unikatowość bez dokonywania roszczenia 522 00:30:47,200 --> 00:30:49,520 , że jest to super ważne pierwotne pole. 523 00:30:49,520 --> 00:30:52,610 Ale to jest bardzo pomocne: Index. 524 00:30:52,610 --> 00:30:56,180 Jeśli wiesz z góry za ostatecznego projektu, na Pset 7, lub w ogóle, 525 00:30:56,180 --> 00:30:59,480 że ten dom, pole to będzie coś, czego szukać na wielu 526 00:30:59,480 --> 00:31:01,910 używając wybierz słowo kluczowe lub coś innego, 527 00:31:01,910 --> 00:31:05,180 następnie można prewencyjnie powiedzieć bazę do pracy jej magii 528 00:31:05,180 --> 00:31:10,510 i upewnić się, że tworzy w pamięci żadnych wymyślnych struktur danych konieczne 529 00:31:10,510 --> 00:31:13,770 aby przyspieszyć wyszukiwanie na podstawie domu. 530 00:31:13,770 --> 00:31:17,860 Być może będzie to użycie tabeli mieszania, może będzie używać połączonej listy. 531 00:31:17,860 --> 00:31:21,260 W rzeczywistości, to ma tendencję do korzystania z drzewa, często struktura zwana B-tree - 532 00:31:21,260 --> 00:31:24,090 nie drzewo binarne, ale B-tree - co jest bardzo szeroki, drzewo 533 00:31:24,090 --> 00:31:27,370 , które można zobaczyć w klasie jak CS124, dane klasy struktur. 534 00:31:27,370 --> 00:31:31,800 Ale w skrócie, nie musisz się martwić, że podczas korzystania z inteligentnego oprogramowania bazy danych. 535 00:31:31,800 --> 00:31:35,890 Można tylko powiedzieć to, "Index to pole, więc można szukać na nim bardziej efektywnie." 536 00:31:35,890 --> 00:31:40,250 >> Jeśli pozostawisz to off i spróbować poszukać dla siebie w bazie danych, która mieszka w Mather, 537 00:31:40,250 --> 00:31:42,710 będzie sprowadzać się do liniowego wyszukiwania. 538 00:31:42,710 --> 00:31:45,360 A jeśli masz 6.000 undergrads wszystkich żywych w pewnym domu, 539 00:31:45,360 --> 00:31:47,900 masz zamiar przeszukać całą tabelę znaleźć Matherites, 540 00:31:47,900 --> 00:31:52,190 natomiast jeśli powiesz Index, miejmy nadzieję, że będzie coś blisko logarytmicznej wyszukiwanie 541 00:31:52,190 --> 00:31:54,510 znaleźć te rodzaje studentów. 542 00:31:54,510 --> 00:31:56,750 To jest po prostu bezpłatna funkcja włączyć, 543 00:31:56,750 --> 00:31:59,530 nawet jeśli nie pochodzi w cenie pewnej ilości przestrzeni. 544 00:31:59,530 --> 00:32:02,690 Wreszcie, auto-increment, pole to AI, 545 00:32:02,690 --> 00:32:05,830 co oznacza po prostu, czy jest to int i nie chcesz, aby zwiększyć dbać samemu 546 00:32:05,830 --> 00:32:07,570 za każdym razem jest nowy użytkownik, sprawdzić, że 547 00:32:07,570 --> 00:32:11,910 i każdy użytkownik, który pobiera automatycznie dodaje się nowy identyfikator. 548 00:32:11,910 --> 00:32:15,620 Załóżmy, kliknij przycisk Zapisz, a teraz niech się przyczepić z tym wzorem. 549 00:32:15,620 --> 00:32:20,200 Jeśli pójdę do przeglądania, można zauważyć, że zarówno Mike i mój dom jest NULL. 550 00:32:20,200 --> 00:32:22,420 Mogę użyć phpMyAdmina edytować ręcznie. 551 00:32:22,420 --> 00:32:25,110 Mogę iść w tutaj i wpisz w Mather, a następnie naciśnij klawisz Enter, 552 00:32:25,110 --> 00:32:27,740 i teraz zauważyć tabela jest inna. 553 00:32:27,740 --> 00:32:29,270 Zauważmy jednak mogłem zrobić coś innego, jak również. 554 00:32:29,270 --> 00:32:33,530 ID Dawida to 1, więc phpMyAdmin ponownie jest tylko narzędziem administracyjnym; 555 00:32:33,530 --> 00:32:35,970 to nie jest coś, użytkownicy są coraz zamiar zobaczyć jest. 556 00:32:35,970 --> 00:32:38,810 Więc jeśli zamiast kliknąć zakładkę SQL do góry - 557 00:32:38,810 --> 00:32:41,450 i znowu, pset 7 wprowadzi Cię w kilka z tych pytań - 558 00:32:41,450 --> 00:32:45,260 Można ręcznie wykonać polecenia SQL zorganizowany Query Language 559 00:32:45,260 --> 00:32:56,410 Użytkownikom UPDATE SET dom = 'Pfoho' WHERE id = 1. 560 00:32:56,410 --> 00:33:00,830 Te zapytania SQL są ładnie tyle, całkiem czytelny, od lewej do prawej. 561 00:33:00,830 --> 00:33:04,350 Aktualizacja tabeli użytkowników, w polu o nazwie dom Pfoho 562 00:33:04,350 --> 00:33:06,830 gdzie identyfikator użytkownika jest 1. 563 00:33:06,830 --> 00:33:11,480 Czy mogę to zrobić nawet jeżeli email = "malan@harvard.edu". 564 00:33:11,480 --> 00:33:14,860 Tak długo, jak jednoznacznie identyfikuje mnie, że będzie działać, jak również. 565 00:33:14,860 --> 00:33:18,810 Ale ID jest wyższa wydajność, więc zróbmy to. 566 00:33:18,810 --> 00:33:22,950 Załóżmy, kliknij przycisk Przejdź. Okay, lecture.users nie istnieje. Jaki jest mój błąd? 567 00:33:22,950 --> 00:33:26,220 Co znajduje się w tabeli w rzeczywistości nazywa się tutaj? 568 00:33:26,220 --> 00:33:28,770 To się nazywa uczniów tylko dlatego, że to, co zrobiliśmy tutaj w lewym górnym rogu. 569 00:33:28,770 --> 00:33:31,860 Nazywa się studenci, nie użytkowników. Więc kliknij przycisk Idź teraz. 570 00:33:31,860 --> 00:33:34,330 1 wiersz dotyczy. Zapytanie trwało 0.01 sekund. 571 00:33:34,330 --> 00:33:38,010 Jeśli kliknę Znajdź teraz, teraz Malan życie w Pfoho. 572 00:33:38,010 --> 00:33:42,070 Więc to jest inny smak SQL, ale pset Cię przez nieco więcej o tym. 573 00:33:42,070 --> 00:33:44,710 >> Jest głupia decyzja ja już tutaj. 574 00:33:44,710 --> 00:33:47,820 Uważam, że ten projekt bazy danych jest nieefektywne 575 00:33:47,820 --> 00:33:51,650 bo im więcej osób dodać do tabeli Studenci, 576 00:33:51,650 --> 00:33:54,730 więcej z nas zaczynam dodając więcej TF zaczynam dodawanie, 577 00:33:54,730 --> 00:33:58,320 mamy zamiar rozpocząć, aby zobaczyć co zwolnień w tej tabeli? 578 00:34:00,840 --> 00:34:06,020 >> Tak. [Uczeń] Widząc, że jest to w studentów, używamy tego samego [niesłyszalne] 579 00:34:06,020 --> 00:34:07,360 Samo - Prawo, dokładnie. 580 00:34:07,360 --> 00:34:10,400 Tak więc, jeśli 400 osób mieszka w Mather, lub dać, 581 00:34:10,400 --> 00:34:15,000 ostatecznie tabela ta będzie mieć 400 wierszy, które mówią "Mather, Mather," "" 582 00:34:15,000 --> 00:34:16,590 "Mather," "Mather," "Mather." 583 00:34:16,590 --> 00:34:19,820 Tracimy wszystkie z tych bajtów, a tam kilka bram tam. 584 00:34:19,820 --> 00:34:23,080 1, jest szalona sprawa róg, gdzie jeśli ktoś płaci dużo pieniędzy 585 00:34:23,080 --> 00:34:25,949 i zmienia nazwę Mather, teraz musimy zmienić naszą całą tabelę bazy danych. 586 00:34:25,949 --> 00:34:29,730 To nie stanie się często, choć Pfoho kiedyś nazywano North House 15 lat temu, 587 00:34:29,730 --> 00:34:32,310 tak to się dzieje. Ale to nie wszystko, co atrakcyjne. 588 00:34:32,310 --> 00:34:36,000 Bardziej przekonujące niż przypadku narożnego podobnego z konieczności aktualizacji danych w dużych ilościach 589 00:34:36,000 --> 00:34:41,150 dla bazy danych jest dlaczego przechowywanie Mather znowu i znowu i znowu i znowu? 590 00:34:41,150 --> 00:34:43,020 To dużo znaków, 6 znaków. 591 00:34:43,020 --> 00:34:45,500 Czy nie możemy zrobić jeszcze lepiej, zwłaszcza dla Pforzheimer? 592 00:34:45,500 --> 00:34:48,320 Oczywiście możemy zrobić lepiej, że wiele znaków. 593 00:34:48,320 --> 00:34:51,790 Dlaczego po prostu nie kojarzy unikalny identyfikator z każdego domu 594 00:34:51,790 --> 00:34:55,020 i sklep, który dla każdego użytkownika? Warto więc spróbować. 595 00:34:55,020 --> 00:35:00,610 Zamiast po prostu skorzystać z tabeli Studenci, pozwól mi iść do mojej bazy danych wykład tu w lewym górnym rogu. 596 00:35:00,610 --> 00:35:02,600 Zauważcie mówi Utwórz tabelę. 597 00:35:02,600 --> 00:35:04,550 Pozwól mi utworzyć nową tabelę o nazwie domy. 598 00:35:04,550 --> 00:35:08,880 Liczba kolumn będzie 2. Enter. 599 00:35:08,880 --> 00:35:11,200 Teraz mam 2 pola. 600 00:35:11,200 --> 00:35:14,600 Mam zamiar zadzwonić to imię, i to będzie varchar długości 255, 601 00:35:14,600 --> 00:35:18,770 >> ale to dość arbitralne. Powiem tu umownie. 602 00:35:18,770 --> 00:35:22,840 Więc umieścić identyfikator tutaj. Dajmy każdy dom unikatowy identyfikator. 603 00:35:22,840 --> 00:35:25,360 Dajmy każdy dom nazwę. 604 00:35:25,360 --> 00:35:30,980 Miejmy określić, że identyfikator będzie unsigned tylko umownie używać tylko liczby dodatnie. 605 00:35:30,980 --> 00:35:35,020 Idziemy do przodu i dać ten automatycznego przyrostu pole do teraz. 606 00:35:35,020 --> 00:35:38,160 A czy trzeba coś jeszcze? 607 00:35:38,160 --> 00:35:41,010 Idziemy dalej i kliknij przycisk Zapisz. 608 00:35:41,010 --> 00:35:42,480 Teraz mam drugą tabelę. 609 00:35:42,480 --> 00:35:45,860 Zauważ, jak na bok to lekko tajemnicze polecenia SQL 610 00:35:45,860 --> 00:35:50,280 że trzeba było wpisywać ręcznie, jeśli nie za pomocą narzędzia administracyjnego jak phpMyAdmin. 611 00:35:50,280 --> 00:35:51,990 Tak więc kolejny powód, dla którego go używać. 612 00:35:51,990 --> 00:35:55,480 To cudownie przydatne rodzaj pedagogicznie, bo można kliknąć ok. 613 00:35:55,480 --> 00:36:01,050 i dowiedzieć się, jak to wszystko działa tylko przez kopiowanie i wklejanie co phpMyAdmin zrobiłem. 614 00:36:01,050 --> 00:36:04,150 Ale polecenie CREATE TABLE, co było po prostu wykonane, i tu jest mój stół. 615 00:36:04,150 --> 00:36:11,370 Pozwól mi iść dalej teraz i używać surowego SQL zamiast oversimplify klikając kartę Wstawianie. 616 00:36:11,370 --> 00:36:15,040 Pozwól mi zrobić INSERT INTO domów 617 00:36:15,040 --> 00:36:22,230 i mam zamiar powiedzieć nazwę domu będzie miał wartość 'Mather'. 618 00:36:22,230 --> 00:36:24,790 To jest to. Ta składnia jest nieco bardziej tajemnicze. 619 00:36:24,790 --> 00:36:26,660 Jest to nazwa pola, które chcemy wstawić. 620 00:36:26,660 --> 00:36:30,390 Są to wartości, które chcemy wstawić do tych pól. Niech kliknij mnie. 621 00:36:30,390 --> 00:36:34,410 1 dodaje się wiersz trwało 0.02 sekund. Let Me Kliknij Znajdź teraz. 622 00:36:34,410 --> 00:36:42,020 >> Zauważ, jeśli kliknę Przeglądaj, tam Mather, którego ID jest przez automatyzację numer 1. 623 00:36:42,020 --> 00:36:45,000 Pozwól mi zrobić kolejne. Pozwól mi iść do zakładki SQL. 624 00:36:45,000 --> 00:36:52,950 INSERT INTO domów. Nazwę domu będzie mieć wartość Pfoho i tak dalej. 625 00:36:52,950 --> 00:36:56,350 Idź. I mogę robić to ponownie i ponownie i ponownie. 626 00:36:56,350 --> 00:36:59,470 Albo jeśli się nudzić pomocą phpMyAdmin, możesz po prostu użyć karty Wstawianie 627 00:36:59,470 --> 00:37:01,000 i nie trzeba wpisywać surowego SQL. 628 00:37:01,000 --> 00:37:04,690 Można po prostu uderzyć go szybciej, wpisując na przykład, Kurier, Enter, 629 00:37:04,690 --> 00:37:07,610 i teraz, jeśli klikamy Przeglądaj, tam Currier z identyfikatorem 3. 630 00:37:07,610 --> 00:37:09,920 Więc to jest to, co mamy na myśli przez auto-przyrostu. 631 00:37:09,920 --> 00:37:12,280 Ale teraz mamy naprawić coś w studentów. 632 00:37:12,280 --> 00:37:16,240 Wśród studentów, co powinno typ danych pola domu teraz? 633 00:37:16,240 --> 00:37:19,450 Powinno być int, prawda? 634 00:37:19,450 --> 00:37:23,950 Tak więc celem jest czynnik poza, inaczej znany jako normalizacja, tabele 635 00:37:23,950 --> 00:37:27,940 tak, że nie przechowujemy informacji nadmiarowo w żadnym z moich tabel. 636 00:37:27,940 --> 00:37:31,130 I znowu droga byliśmy tu powie Mather, Mather, 637 00:37:31,130 --> 00:37:34,220 Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, które jest bardzo zbędne 638 00:37:34,220 --> 00:37:36,240 w odniesieniu do tych znaków marnotrawstwa. 639 00:37:36,240 --> 00:37:40,820 Więc pozwól mi iść do przodu i to zmienić struktury kliknięcie, 640 00:37:40,820 --> 00:37:44,620 i pozwól mi iść dalej i sprawdzić boiska domu, kliknij przycisk Zmień, 641 00:37:44,620 --> 00:37:46,990 i teraz mam zamiar to zmienić być int. 642 00:37:46,990 --> 00:37:49,490 255 nie jest już istotne. 643 00:37:49,490 --> 00:37:54,010 Pozwól mi iść dalej i powiedzieć, że to w porządku, jeśli to nadal NULL. Zapisz. 644 00:37:54,010 --> 00:37:55,870 Teraz studenci tabeli została zmieniona pomyślnie, 645 00:37:55,870 --> 00:37:59,090 i zauważyć ponownie dom jest int. 646 00:37:59,090 --> 00:38:02,220 Tak na marginesie, ignorować liczby w nawiasach, jeśli chodzi o wskazówki. 647 00:38:02,220 --> 00:38:03,770 >> To ze względu na dziedzictwo. 648 00:38:03,770 --> 00:38:06,920 Powrót w dzień, kiedy nie ma GUI, zamiast tego mieliśmy środowisko linii poleceń, 649 00:38:06,920 --> 00:38:11,580 na 10 i 11 określone ile znaków należy pokazać 650 00:38:11,580 --> 00:38:13,950 w oknie terminala, aby faktycznie wyświetlić pola. 651 00:38:13,950 --> 00:38:19,150 To nie ma nic wspólnego z długością bitową rzeczywistej dziedzinie, więc musimy po prostu zignorować, że do teraz. 652 00:38:19,150 --> 00:38:20,990 Teraz muszę iść do tej tabeli. 653 00:38:20,990 --> 00:38:24,610 A jeśli David mieszka w Mather, dom nie powinien być 0, 654 00:38:24,610 --> 00:38:27,350 stanowiąca wartość int domyślna najbliżej NULL. 655 00:38:27,350 --> 00:38:29,810 Powinien żyć w domu 1. 656 00:38:29,810 --> 00:38:36,870 Miejmy arbitralnie powiedzieć, że życie Mike Pfoho, więc numer domu 2. 657 00:38:36,870 --> 00:38:40,160 Teraz moja tabela wygląda nieco bardziej tajemnicze. 658 00:38:40,160 --> 00:38:41,960 Ale pod uwagę skuteczność. 659 00:38:41,960 --> 00:38:44,860 Obecnie używam tylko 32 bitów do identyfikacji domu 660 00:38:44,860 --> 00:38:49,530 co oznacza, że ​​jest tylko 1 kanoniczna definicja mojego domu Mather i Pfoho 661 00:38:49,530 --> 00:38:52,090 i to jest w tabeli domów. 662 00:38:52,090 --> 00:38:55,880 Więc jeśli chcę teraz wrócić do tych tabel, myśleć o tym w ten sposób. 663 00:38:55,880 --> 00:39:01,980 Tutaj mam tabelę studentów, a na prawej stronie nie ma tych numerów, 1 i 2. 664 00:39:01,980 --> 00:39:04,180 1 jest Mather, 2 jest Pfoho. 665 00:39:04,180 --> 00:39:08,580 Mamy te same numery w tej drugiej tabeli, które nazywa się domy, 666 00:39:08,580 --> 00:39:11,020 1, 2 i 3 w tym 3 domów. 667 00:39:11,020 --> 00:39:14,990 Co mamy teraz zrobić jest mieć możliwość w kodzie PHP i SQL, 668 00:39:14,990 --> 00:39:18,800 do rodzaju wrócić do tych tabel, gdzie, jeśli są to uczniowie i są to domy, 669 00:39:18,800 --> 00:39:22,050 chcemy się jakoś połączyć je tak, że 1 linie się z 1, 670 00:39:22,050 --> 00:39:25,670 2 linii z 2 i tak, że możemy dowiedzieć się, gdzie David 671 00:39:25,670 --> 00:39:28,000 i gdzie Mike i gdzie wszyscy mieszka. 672 00:39:28,000 --> 00:39:31,850 Aby to zrobić możemy wykonać zapytanie SQL jak poniżej. 673 00:39:31,850 --> 00:39:40,470 SELECT * FROM studenci DOŁĄCZ domy ON - 674 00:39:40,470 --> 00:39:43,000 A teraz jakie pola chcemy dołączyć na? 675 00:39:43,000 --> 00:39:49,520 Więc students.house = houses.id. 676 00:39:49,520 --> 00:39:54,150 >> Trochę tajemnicze, ale ta część oznacza dosłownie utworzyć nową tabelę tymczasową 677 00:39:54,150 --> 00:39:56,690 to wynikiem łączenia studentów i domów. 678 00:39:56,690 --> 00:40:00,340 I w jaki sposób chcesz połączyć czubki palców tutaj? 679 00:40:00,340 --> 00:40:05,280 Ustaw "Field House równa domów" przez studentów polu ID. 680 00:40:05,280 --> 00:40:10,220 I jeśli teraz kliknij przycisk Idź, mam dokładnie to, czego mam nadzieję. 681 00:40:10,220 --> 00:40:15,890 David jest w Mather, Mike jest Pfoho, a ja także zobaczyć unikalne identyfikatory. 682 00:40:15,890 --> 00:40:18,640 Ale chodzi o to teraz mam pełną tabelę. 683 00:40:18,640 --> 00:40:23,020 I tak na wynos tutaj Pset 7 lub naprawdę do ostatecznego projektu: 684 00:40:23,020 --> 00:40:25,830 Jeśli okaże się, że jesteś przechowywania dowolnej informacji nadmiarowo, 685 00:40:25,830 --> 00:40:28,850 czy to jest dom, może to miasto, stan i ZIP 686 00:40:28,850 --> 00:40:32,050 gdzie zazwyczaj pocztowy, ale nie zawsze są stosowane jako unikalny identyfikator, 687 00:40:32,050 --> 00:40:35,810 przechodzą przez wykonywania psychicznie, a następnie coś jak phpMyAdmin 688 00:40:35,810 --> 00:40:40,660 faktoringu, że wspólnych danych, ponieważ zwłaszcza Twoja strona ma więcej dobrze wykorzystane 689 00:40:40,660 --> 00:40:45,440 bardziej popularne, jest to, jak się upewnić, że wszystko jest super szybki, 690 00:40:45,440 --> 00:40:51,930 dając bazę jak wielu wskazówek co do wyjątkowości, jak to możliwe. 691 00:40:51,930 --> 00:40:53,860 To było dużo. 692 00:40:53,860 --> 00:40:59,010 Masz pytanie? Dobrze. Zróbmy sobie 5-minutową przerwę, tam i przegrupować. 693 00:41:01,600 --> 00:41:03,540 Dobrze. 694 00:41:03,540 --> 00:41:08,680 Oto przykład, który był używany kilka lat temu, kiedy wziąłem CS161, 695 00:41:08,680 --> 00:41:10,960 która działa klasa systemów na uczelni 696 00:41:10,960 --> 00:41:15,160 który znany jest niesamowite, ale szalona ilość pracy, 697 00:41:15,160 --> 00:41:19,810 i koncentruje się tak naprawdę na niektórych niskopoziomowych problemów, które pojawiają się w systemach operacyjnych 698 00:41:19,810 --> 00:41:22,700 oraz także w świecie baz danych. 699 00:41:22,700 --> 00:41:27,040 >> Historia, która została opowiedziana przez mojego profesora, Margo Seltzer, że rok był następujący. 700 00:41:27,040 --> 00:41:30,990 Załóżmy, że masz trochę lodówkę akademiku dla ciebie i twój współlokator 701 00:41:30,990 --> 00:41:34,030 i oboje bardzo lubię mleko. 702 00:41:34,030 --> 00:41:36,360 Więc wróciłem do domu z klasy jednego dnia, twój współlokator nie jest jeszcze tam, 703 00:41:36,360 --> 00:41:39,650 otwierasz lodówkę, i uświadomić sobie, "O cholera, jesteśmy z mleka". 704 00:41:39,650 --> 00:41:42,070 Więc zamknij lodówkę, można przejść przez ulicę do CVS 705 00:41:42,070 --> 00:41:45,830 i uzyskać w liniach coraz długich kupić trochę mleka w CVS. 706 00:41:45,830 --> 00:41:48,470 Tymczasem twój współlokator wraca z jego klasy, 707 00:41:48,470 --> 00:41:51,690 wchodzi do pokoju, otwiera lodówkę naprawdę chce mleko, 708 00:41:51,690 --> 00:41:54,130 otwiera lodówkę i "Cholera, bez mleka." 709 00:41:54,130 --> 00:41:57,890 Więc on zamyka lodówkę, podchodzi do drzwi, i idzie do ABP 710 00:41:57,890 --> 00:42:00,910 lub w innym miejscu niż CVS, gdzie nie będziemy wpadać na siebie 711 00:42:00,910 --> 00:42:02,790 iść po mleko. 712 00:42:02,790 --> 00:42:04,820 Oczywiście kilka minut później, oboje wrócić do domu 713 00:42:04,820 --> 00:42:07,740 i teraz masz dwa razy tyle mleka, ile tak naprawdę chciał. 714 00:42:07,740 --> 00:42:10,670 I jest mleko, teraz pójdzie źle, bo lubisz mleka 715 00:42:10,670 --> 00:42:14,200 ale nie lubię mleka, więc teraz masz za dużo mleka, więc to będzie się psuć. 716 00:42:14,200 --> 00:42:16,830 To jest straszne, straszne sytuacja. 717 00:42:16,830 --> 00:42:22,920 Co mogło rozwiązać tej sytuacji, jeśli były pierwszy dom współlokator? Tak. 718 00:42:22,920 --> 00:42:25,970 [Uczeń] Trzeba pozostawić notatkę. [Śmiech] 719 00:42:25,970 --> 00:42:28,090 Good. Trzeba pozostawić notatkę. 720 00:42:28,090 --> 00:42:32,320 Trzeba położyć karteczek Post-it lub jak mówią, "Gone na mleko" 721 00:42:32,320 --> 00:42:36,830 i twój współlokator koncepcyjnie zostałby zablokowany faktycznie robi. 722 00:42:36,830 --> 00:42:38,010 Albo można iść 1 krok dalej. 723 00:42:38,010 --> 00:42:41,060 Można dosłownie zamknąć lodówkę z pewnego rodzaju kłódki, 724 00:42:41,060 --> 00:42:44,870 a teraz twój współlokator będzie dosłownie zostać zablokowane z lodówki. 725 00:42:44,870 --> 00:42:48,520 Jeśli mamy generalizować powrotem do programowania, 726 00:42:48,520 --> 00:42:51,610 można niemal myśleć o lodówce jako pewnego rodzaju zmienną lub struct, 727 00:42:51,610 --> 00:42:53,500 jakimś pojemniku do informacji. 728 00:42:53,500 --> 00:42:58,290 Problemem jest to, że zasadniczo zarówno z was mogli sprawdzić 729 00:42:58,290 --> 00:43:02,370 lub odczytać stan tej struktury danych, 730 00:43:02,370 --> 00:43:08,050 ale postrzegali ją w różnych czasach i jeszcze oboje podjęli decyzję 731 00:43:08,050 --> 00:43:11,920 w oparciu o stan świata w tych różnych momentach w czasie. 732 00:43:11,920 --> 00:43:15,570 Więc gdybyś zamknął lodówkę, to masz przynajmniej unikać współlokatora 733 00:43:15,570 --> 00:43:19,070 z był w stanie sprawdzić, które stanu świata 734 00:43:19,070 --> 00:43:22,530 więc on nie mógł się z tym rozstrzygnięciem. 735 00:43:22,530 --> 00:43:25,780 Więc baz danych, jak się okazuje, problem ten stale. 736 00:43:25,780 --> 00:43:31,050 >> Zobaczmy, czy uda nam się skonstruować scenariusz. 737 00:43:31,050 --> 00:43:34,310 Załóżmy, że jesteś rodzaju złego faceta, a ty idź do Bank of America 738 00:43:34,310 --> 00:43:37,950 lub w jednym z innych miejsc na placu, które mają dwoje obok bankomatów siebie, 739 00:43:37,950 --> 00:43:41,200 i jakoś zorientowali się, jak powielić karty bankomatowej - nie wszystko, co trudne. 740 00:43:41,200 --> 00:43:42,730 To tylko pasek magnetyczny. 741 00:43:42,730 --> 00:43:45,180 A więc to, co chcesz, aby spróbować zrobić, to grać w tę grę 742 00:43:45,180 --> 00:43:49,060 w którym można umieścić 1 kartę do 1 maszyny, kolejną kartę w innym komputerze 743 00:43:49,060 --> 00:43:51,980 i zasadniczo spróbować wypłacić pieniądze jednocześnie, 744 00:43:51,980 --> 00:43:54,930 bo wyobraź sobie, że historia toczy się dalej w następujący sposób. 745 00:43:54,930 --> 00:43:57,350 Maszyna po lewej ma karty i kodu PIN, 746 00:43:57,350 --> 00:44:00,240 a potem mówi: "Daj mi 100 $." 747 00:44:00,240 --> 00:44:04,790 ATM jest zaprogramowany, aby najpierw zrobić select na bazie danych lub jej równowartość - 748 00:44:04,790 --> 00:44:10,780 niezależnie od bazy danych jest za pomocą - zobaczyć czy to użytkownik ma co najmniej 100 dolarów w jego lub jej konta? 749 00:44:10,780 --> 00:44:16,180 Jeśli tak, to wypluć 100 $ i odejmij $ 100 od ich wagi. 750 00:44:16,180 --> 00:44:20,470 Ale oczywiście, jeśli istnieje wiele komputerów tutaj lub wiele sposobów kontroli 751 00:44:20,470 --> 00:44:23,560 stan tego świata, bank vault, aby zobaczyć, ile masz pieniędzy, 752 00:44:23,560 --> 00:44:26,780 Przypuszczam, że tylko przez przypadek maszynę na lewo i prawo 753 00:44:26,780 --> 00:44:30,140 zarówno zadać to pytanie mniej więcej w tym samym momencie w czasie. 754 00:44:30,140 --> 00:44:34,160 >> A to z pewnością może się zdarzyć. Bankomaty są komputery te dni. 755 00:44:34,160 --> 00:44:37,670 Więc jeśli maszyna po lewej mówi: "Tak, masz co najmniej 100 zł," 756 00:44:37,670 --> 00:44:42,150 Tymczasem maszyna na prawo mówi: "Tak, masz co najmniej 100 zł," 757 00:44:42,150 --> 00:44:47,420 następnie obie postępować, aby zakończyć swoje programy i faktycznie wypluć 100 dolarów 758 00:44:47,420 --> 00:44:50,820 i powiedzieć: "Poprzednio miał 200 $." 759 00:44:50,820 --> 00:44:54,890 "Pozwól mi zaktualizować zmienną być teraz 100 dolarów pozostaną na koncie." 760 00:44:54,890 --> 00:44:58,780 Ale jeśli obaj sprawdzili stan konta i okazało się, że jest to 200 dolarów 761 00:44:58,780 --> 00:45:02,000 i jak z nich następnie do matematyki i powiedzieć 200 - 100, 762 00:45:02,000 --> 00:45:06,990 Maszyny mają potencjalnie wypluć dwa 100 dolarów rachunki w każdej maszyny, 763 00:45:06,990 --> 00:45:11,360 ale oni tylko zaktualizowane saldo konta kwoty do 100 zł. 764 00:45:11,360 --> 00:45:15,130 Innymi słowy, masz wykupione 200 dolarów, ale dlatego, że sprawdził stan świata 765 00:45:15,130 --> 00:45:18,840 jednocześnie, a następnie podjął decyzję w oparciu o tę wartość, 766 00:45:18,840 --> 00:45:21,930 mogą one nie do matematyki ostatecznie prawidłowo. 767 00:45:21,930 --> 00:45:25,520 Tak więc w sytuacji, w banku też naprawdę chcesz mieć jakieś blokady 768 00:45:25,520 --> 00:45:28,450 tak, aby jak najszybciej po sprawdzeniu stanu jakiejś zmiennej 769 00:45:28,450 --> 00:45:31,220 To naprawdę ważne, jak salda konta, 770 00:45:31,220 --> 00:45:36,070 Nie pozwól nikomu podejmowanie decyzji na podstawie, że aż skończysz robi swoje, 771 00:45:36,070 --> 00:45:38,920 gdzie w tym przypadku jesteś ATM na lewo. 772 00:45:38,920 --> 00:45:41,160 Blokowanie wszystkich innych obecnie. 773 00:45:41,160 --> 00:45:44,650 Rzeczywiście można osiągnąć ten efekt w kilka różnych sposobów. 774 00:45:44,650 --> 00:45:48,660 >> Najprostszym sposobem w MySQL to linia SQL, które daliśmy wam 775 00:45:48,660 --> 00:45:52,030 w specyfikacji zestaw problemów, które wygląda dokładnie tak, jak to. 776 00:45:52,030 --> 00:45:57,420 Wstaw do tabeli - cokolwiek to się nazywa - id, symbol, oraz akcji, liczba akcji, 777 00:45:57,420 --> 00:45:59,660 następujące wartości, na przykład. 778 00:45:59,660 --> 00:46:03,370 Jeśli nie masz jeszcze przeczytać specyfikację, to jest przykładów angażowania jak go o 779 00:46:03,370 --> 00:46:07,340 zakupu 10 akcji tej grosza dla prezydenta Skroob, 780 00:46:07,340 --> 00:46:10,340 ID użytkownika, którego akurat jest liczba 7? 781 00:46:10,340 --> 00:46:14,070 To mówi INSERT INTO tabeli dodaje id, symbol i liczba akcji 782 00:46:14,070 --> 00:46:18,200 7, "DVN.V ', i 10. 783 00:46:18,200 --> 00:46:21,510 Ale - ale, ale, ale - druga linia jest ważna. 784 00:46:21,510 --> 00:46:26,310 ON Duplicate key akcji Update = akcja + VALUES (akcji). 785 00:46:26,310 --> 00:46:28,350 Tak całkowicie tajemnicze wyglądające na pierwszy rzut oka. 786 00:46:28,350 --> 00:46:31,990 Ale fakt, że to zapytanie SQL, choć okłady na 2 linie, 787 00:46:31,990 --> 00:46:35,920 jest 1 długi zapytanie, to znaczy, że to atomic 788 00:46:35,920 --> 00:46:41,000 w tym sensie, że zapytanie zostanie albo wykonywany razem albo wcale. 789 00:46:41,000 --> 00:46:45,100 Iz definicji MySQL, to w jaki sposób realizowane tego zapytania. 790 00:46:45,100 --> 00:46:51,010 To jest z definicji w podręczniku gwarantowanej wykonać wszystkie na raz lub w ogóle. 791 00:46:51,010 --> 00:46:54,020 Motywacja jest następujące. 792 00:46:54,020 --> 00:46:58,540 Jeśli w tym przypadku staramy się kupić 10 akcji na magazynie, 793 00:46:58,540 --> 00:47:02,260 to rodzaj tej samej historii, jak mleko, to rodzaj tej samej historii, jak ATM. 794 00:47:02,260 --> 00:47:04,970 >> Jeśli popełnisz błąd, nie używania tej składni 795 00:47:04,970 --> 00:47:09,610 ale zamiast tego wybierając z bazy danych, aby zobaczyć, jak wiele akcji tego grosza 796 00:47:09,610 --> 00:47:13,750 zgadza Prezes Skroob mają, i załóżmy, że ma 10 akcji, 797 00:47:13,750 --> 00:47:19,330 a następnie kilka sekund później podzielone następnie zrobić UPDATE, 798 00:47:19,330 --> 00:47:24,810 który jest inny rachunek w SQL, które mówi śmiało dodać jeszcze 10 akcji 799 00:47:24,810 --> 00:47:28,700 do jego obecnego 10, tak aby idealnie suma wynosi 20, 800 00:47:28,700 --> 00:47:33,490 Problem jest, bo w dzisiejszych systemów baz danych i dlatego, że w dzisiejszych komputerach 801 00:47:33,490 --> 00:47:35,990 masz wielu procesorów wielordzeniowych - 802 00:47:35,990 --> 00:47:38,920 innymi słowy, komputery można dosłownie robić wiele rzeczy na raz - 803 00:47:38,920 --> 00:47:44,270 nie ma gwarancji, że SELECT a UPDATE w tym przypadku 804 00:47:44,270 --> 00:47:46,150 będą się z powrotem do tyłu. 805 00:47:46,150 --> 00:47:49,140 Tak zły scenariusz byłby zrobić SELECT 806 00:47:49,140 --> 00:47:51,670 zobaczyć, jak wiele akcji tego ręki grosza nie Skroob mają 807 00:47:51,670 --> 00:47:54,710 a potem po prostu przez przypadek inny zapytanie do bazy danych jest wykonywane - 808 00:47:54,710 --> 00:47:57,740 może jego Skroob w innym oknie przeglądarki próbuje kupić 10 akcji 809 00:47:57,740 --> 00:48:00,700 w innym oknie w ogóle, podobnie jak w bankomacie - 810 00:48:00,700 --> 00:48:05,410 i załóżmy, że inna kwerenda pobiera między SELECT i UPDATE. 811 00:48:05,410 --> 00:48:10,210 To może być tak, że teraz traci Skroob pewną liczbę akcji 812 00:48:10,210 --> 00:48:14,340 ponieważ inny proces sprawdzania stanu swojego świata, 813 00:48:14,340 --> 00:48:17,800 lub dostaje więcej akcji, niż powinien. 814 00:48:17,800 --> 00:48:23,250 Nie pójdziemy do konkretów, co dokładnie te poszczególne linie historia byłaby, 815 00:48:23,250 --> 00:48:28,380 ale chodzi o to, czy trzeba sprawdzić wartości zmiennych, a następnie podjąć decyzję, 816 00:48:28,380 --> 00:48:32,500 jeśli istnieje ryzyko ktoś robi coś w między tymi 2 oświadczeń, 817 00:48:32,500 --> 00:48:36,220 co może się zdarzyć w systemach wieloprocesorowych, w wielordzeniowych układów, 818 00:48:36,220 --> 00:48:41,220 komputery z możliwością zrobienia wiele rzeczy na raz, złe rzeczy mogą się zdarzyć 819 00:48:41,220 --> 00:48:44,530 takie jak rachunki bankowe zostały nieprawidłowo obciążony, kupując dwa razy tyle mleka, 820 00:48:44,530 --> 00:48:46,730 lub w tym przypadku nieprawidłowa liczba akcji. 821 00:48:46,730 --> 00:48:48,370 Ale jest łatwiejszy sposób, aby o tym pomyśleć. 822 00:48:48,370 --> 00:48:53,290 >> Okazuje się, że SQL wspiera również, jeśli w konfiguracji tabeli poprawnie, 823 00:48:53,290 --> 00:48:56,920 coś takiego jak transakcje, które Uważam faktycznie nawet łatwiej zrozumieć 824 00:48:56,920 --> 00:49:00,650 niż to, ale to nie 1-liner jest, więc jest to rzeczywiście nieco bardziej zaangażowane. 825 00:49:00,650 --> 00:49:04,960 Jest dosłownie oświadczenie w SQL nazywa TRANSAKCJI START. 826 00:49:04,960 --> 00:49:08,300 Podobnie jak tam SELECT, UPDATE, INSERT, DELETE i JOIN i grono innych, 827 00:49:08,300 --> 00:49:10,970 są słowa kluczowe, takie jak start transakcji. 828 00:49:10,970 --> 00:49:13,560 I co wtedy zrobić w kontekście Pset 7 - 829 00:49:13,560 --> 00:49:17,270 nie masz to zrobić dla Pset 7, to wyraźnie zaprzeczył, że nie jest to konieczne, 830 00:49:17,270 --> 00:49:18,830 ale na końcowych projektów mogą być przydatne - 831 00:49:18,830 --> 00:49:22,820 Jeśli wywołanie zapytania transakcji Start, a następnie kolejne zapytanie 832 00:49:22,820 --> 00:49:25,620 i następnie kolejne zapytanie, a następnie kolejny, kolejny i kolejny, 833 00:49:25,620 --> 00:49:31,860 te pytania nie będą faktycznie wykonywane do czasu wywołania SQL COMMIT 834 00:49:31,860 --> 00:49:37,220 w tym momencie, czy to 2 oświadczenia lub 20 oświadczenia, będą one realizowane na raz, 835 00:49:37,220 --> 00:49:42,770 co oznacza, że ​​nikt inny nie może przypadkowo kupić zbyt dużo mleka lub debetową za dużo pieniędzy 836 00:49:42,770 --> 00:49:46,340 lub kupić zbyt wiele akcji, ponieważ wszystkie Twoje pytania wykona 837 00:49:46,340 --> 00:49:48,410 z powrotem do tyłu do tyłu do tyłu. 838 00:49:48,410 --> 00:49:51,580 I to jest bardzo ważne, zwłaszcza, gdy robisz coś takiego. 839 00:49:51,580 --> 00:49:54,900 To jest przykład, który mówi arbitralne Odświeżmy rachunku bankowego 840 00:49:54,900 --> 00:50:00,200 przez ustawienie równowagi równą salda - $ 1000, gdzie numer konta jest 2. 841 00:50:00,200 --> 00:50:04,260 A potem drugie oświadczenie jest teraz niech zdeponować że 1000 dolarów 842 00:50:04,260 --> 00:50:07,310 na cudze konto bankowe, którego numer konta jest 1. 843 00:50:07,310 --> 00:50:10,400 >> Innymi słowy, jest to doskonały przykład, w którym chcesz się upewnić, 844 00:50:10,400 --> 00:50:13,590 że obie te wypowiedzi się lub w ogóle nie 845 00:50:13,590 --> 00:50:15,450 bo inaczej klient będzie ululać 846 00:50:15,450 --> 00:50:17,670 i masz zamiar wziąć swoje pieniądze i nie złożenia go w innym miejscu, 847 00:50:17,670 --> 00:50:20,470 lub bank będzie ululać gdzie idziesz wpłacić pieniądze 848 00:50:20,470 --> 00:50:23,140 ale faktycznie nie odjąć go od konta użytkownika. 849 00:50:23,140 --> 00:50:25,810 Więc chcesz obaj wykonać razem. 850 00:50:25,810 --> 00:50:29,140 Dlatego wchodzi w transakcjach światowych. 851 00:50:29,140 --> 00:50:31,360 Więc to jest coś, aby utrzymać się w głębi swojego umysłu, 852 00:50:31,360 --> 00:50:34,710 nie tyle dla celów tylko projektu końcowego, 853 00:50:34,710 --> 00:50:36,700 ale jeśli chcesz zabrać ostateczny projekt gdzieś, 854 00:50:36,700 --> 00:50:39,040 jeśli chcesz uruchomić jakieś towarzystwo wokół niego, 855 00:50:39,040 --> 00:50:41,270 jeśli chcesz rozwiązać jakiejś grupy studenckiego problemu na kampusie 856 00:50:41,270 --> 00:50:45,210 i rzeczywiście żywą, aktywną stronę internetową, są rodzajem subtelnych błędów, które mogą się pojawić 857 00:50:45,210 --> 00:50:49,480 jeśli nie dość, że przez to, co może się zdarzyć, jeśli 2 osoby 858 00:50:49,480 --> 00:50:54,190 Próbujesz uzyskać dostęp do witryny internetowej w dosłownie w tym samym momencie w czasie, 859 00:50:54,190 --> 00:50:56,890 przy czym ich pytania mogłyby się przeplatają. 860 00:50:58,840 --> 00:51:01,420 >> Przygotuj się na JavaScripcie, teaser tego rozporządzenia? 861 00:51:01,420 --> 00:51:04,320 To nasz ostatni język na semestr. Dobrze. 862 00:51:04,320 --> 00:51:09,940 Na szczęście, JavaScript wygląda bardzo, bardzo, bardzo podobne do tych 2 języków, C i PHP, 863 00:51:09,940 --> 00:51:11,140 zrobiliśmy do tej pory. 864 00:51:11,140 --> 00:51:14,340 Nie ma skryptu Pset 7, ale to bardzo przydatne narzędzie 865 00:51:14,340 --> 00:51:18,840 gdy chodzi o robienie webowych finałowych projektów czy naprawdę tylko web programowanie bardziej ogólnie. 866 00:51:18,840 --> 00:51:20,950 Więc szybki przegląd coś zwane DOM. 867 00:51:20,950 --> 00:51:23,600 Tutaj jest super proste Strona internetowa, która tak naprawdę mówi hello, world 868 00:51:23,600 --> 00:51:25,970 zarówno w tytule, w organizmie. 869 00:51:25,970 --> 00:51:29,270 Jak sugeruje wgłębienie jest od pewnego czasu, 870 00:51:29,270 --> 00:51:31,380 rzeczywiście istnieje hierarchia do stron internetowych. 871 00:51:31,380 --> 00:51:34,220 Mogę narysować ten sam fragment kodu HTML, jak drzewo, 872 00:51:34,220 --> 00:51:37,470 Wracając myślami do naszych dyskusji struktur danych w C, jak następuje. 873 00:51:37,470 --> 00:51:40,710 Mam jakiś specjalny węzeł główny zwany węzeł dokumentu, 874 00:51:40,710 --> 00:51:43,650 i zobaczymy analog tego w JavaScript w chwilę. 875 00:51:43,650 --> 00:51:48,330 Pierwsze dziecko i tylko dziecko, które w tym przypadku jest znacznik HTML. 876 00:51:48,330 --> 00:51:49,880 Nie ma bezpośredniego odwzorowanie doctype. 877 00:51:49,880 --> 00:51:53,170 To jest coś specjalnego, więc należy po prostu zignorować, jeśli chodzi o tego DOM, 878 00:51:53,170 --> 00:51:55,810 to drzewo Document Object Model. 879 00:51:55,810 --> 00:51:59,530 Zauważ, że tag HTML, którym się kiedykolwiek przedstawiono arbitralnie jako prostokąt, 880 00:51:59,530 --> 00:52:02,890 ma 2 dzieci: głowy i ciała. 881 00:52:02,890 --> 00:52:04,840 >> Te, które są podobnie rysowane jako prostokąty. 882 00:52:04,840 --> 00:52:08,970 Jest istotne, że głowica jest obrazowo w lewo ciała. 883 00:52:08,970 --> 00:52:11,960 To oznacza, że ​​szef jest na pierwszym miejscu w drzewie. 884 00:52:11,960 --> 00:52:14,910 Więc jest rzeczywiście zamawiania do drzewa podczas rysowania to tak, 885 00:52:14,910 --> 00:52:17,460 choć kształty i etażerka są arbitralne. 886 00:52:17,460 --> 00:52:20,360 Szef tymczasem ma pojedyncze dziecko nazwie title, 887 00:52:20,360 --> 00:52:25,170 i tytuł faktycznie ma swoje własne dziecko, co jest "hello, world", 888 00:52:25,170 --> 00:52:32,210 która świadomie czerpał jako elipsę tutaj, aby to niewiele różni się od prostokąta. 889 00:52:32,210 --> 00:52:37,420 Prostokąty te są elementami, natomiast cześć, świat jest naprawdę węzłem tekstowym. 890 00:52:37,420 --> 00:52:39,850 Więc to jest węzeł w drzewie, ale to inny typ węzła 891 00:52:39,850 --> 00:52:41,730 więc dobył go dowolnie inaczej. 892 00:52:41,730 --> 00:52:45,000 Podobnie ma ciało mieć dziecko o nazwie hello, world, jak również, 893 00:52:45,000 --> 00:52:47,910 tak różne węzeł chociaż jest to przypadkiem ten sam tekst, 894 00:52:47,910 --> 00:52:52,100 ale muszę wyciągnąć go za pomocą tego samego kształtu. Więc kogo to obchodzi? 895 00:52:52,100 --> 00:52:56,820 No, co jest miłe o HTML jest to, że ma tego hierarchiczny charakter. 896 00:52:56,820 --> 00:53:01,010 A co jest miły o JavaScript i zwłaszcza bibliotek, które są łatwo dostępne 897 00:53:01,010 --> 00:53:07,120 i popularnych takich jak jQuery, można przemieszczać się po strukturze drzewa tak zadziwiająco łatwe. 898 00:53:07,120 --> 00:53:11,790 Każda z tych rzeczy zrobiliśmy w C z wskaźnikami i drzew przecinające i rekurencji na węzłach 899 00:53:11,790 --> 00:53:15,300 lewej do prawej dziecko dziecko, nagle możemy sortować z za oczywiste 900 00:53:15,300 --> 00:53:19,450 jako niezwykle pouczające, jeśli nie nieco frustrujące 901 00:53:19,450 --> 00:53:22,470 ale nie tak skuteczny sposób, aby przejść o programowaniu. 902 00:53:22,470 --> 00:53:24,470 I tak z tych wyższych poziomów języków jak JavaScript 903 00:53:24,470 --> 00:53:28,340 będziemy w stanie poruszać się to drzewo bardziej intuicyjnie. 904 00:53:28,340 --> 00:53:30,430 >> I rzeczywiście składnia będzie dość znajomo. 905 00:53:30,430 --> 00:53:32,950 Jeśli nigdy wcześniej nie widziałem JavaScript wcześniej, jest to naprawdę miłe odniesienie 906 00:53:32,950 --> 00:53:35,910 z Mozilla ludzie, ludzie, którzy uczynić Firefoksa 907 00:53:35,910 --> 00:53:38,370 więc nie krępuj się przeglądać że w Twojej wygody. 908 00:53:38,370 --> 00:53:41,590 Co można znaleźć - i te slajdy są identyczne co kiedyś inny dzień - 909 00:53:41,590 --> 00:53:44,030 podobnie, główny ma. 910 00:53:44,030 --> 00:53:47,010 Więc kiedy piszesz program w JavaScript, nie ma podstawowych funkcji. 911 00:53:47,010 --> 00:53:48,690 Po prostu zacząć pisać kod. 912 00:53:48,690 --> 00:53:51,660 Jednak zasadnicza różnica między JavaScript i C oraz PHP 913 00:53:51,660 --> 00:53:55,890 jest to, że podczas gdy C i PHP dotąd zostały wykonane po stronie serwera 914 00:53:55,890 --> 00:53:59,180 przez urządzenie w tym przypadku, lub bardziej ogólnie przez serwer, 915 00:53:59,180 --> 00:54:04,270 JavaScript przez projekt jest zazwyczaj wykonywany przez przeglądarkę. 916 00:54:04,270 --> 00:54:08,440 Innymi słowy, można pisać kod JavaScript, jak mamy zamiar, 917 00:54:08,440 --> 00:54:13,080 na serwerze w urządzeniu, ale zawierają go między HTML, wśród swojego CSS, 918 00:54:13,080 --> 00:54:16,100 wśród waszych GIF i PNG i Twoich firmy JPEG 919 00:54:16,100 --> 00:54:19,170 tak, że gdy użytkownik odwiedza Twoją stronę, jeśli używasz JavaScript, 920 00:54:19,170 --> 00:54:21,770 że kod JavaScript pochodzi z serwera do przeglądarki, 921 00:54:21,770 --> 00:54:24,540 i jest to przeglądarka, która faktycznie wykonuje go. 922 00:54:24,540 --> 00:54:27,960 Więc to ma znaczące konsekwencje dla nieruchomości nawet intelektualnego. 923 00:54:27,960 --> 00:54:32,600 To trochę głupie, by nawet myśleć o ochronę IP, jeśli chodzi o kod JavaScript 924 00:54:32,600 --> 00:54:37,560 ponieważ z natury języka pobiera wykonywane zazwyczaj stronę przeglądarki. 925 00:54:37,560 --> 00:54:40,360 >> Możesz rozwodnić go, co oznacza, że ​​można sprawić wrażenie szalone i brzydkie 926 00:54:40,360 --> 00:54:45,400 bez spacji, straszne nazwy zmiennych, aby utrudnić ludziom kradzieży IP, 927 00:54:45,400 --> 00:54:48,120 jednak jest to, że klucz jest wykonywany stronę przeglądarki. 928 00:54:48,120 --> 00:54:51,790 Nawet jak na bok JavaScript mogą być używane po stronie serwera, 929 00:54:51,790 --> 00:54:54,480 Najczęstszym przypadkiem użycia teraz jest jeszcze na przeglądarce. 930 00:54:54,480 --> 00:54:59,800 A oto jak to wygląda. Oto if-else if-else skonstruować tak jak C, podobnie jak PHP. 931 00:54:59,800 --> 00:55:02,420 Oto wyrażenie logiczne, kiedy "lub" 2 rzeczy razem. 932 00:55:02,420 --> 00:55:04,330 Oto kiedy "i" 2 rzeczy razem. 933 00:55:04,330 --> 00:55:08,300 Oto instrukcja switch, który jest podobny do PHP 934 00:55:08,300 --> 00:55:10,810 tym, że można włączyć różne rodzaje wartości. 935 00:55:10,810 --> 00:55:15,180 Pętle również mieć pętli tutaj, które są zbudowane identycznie do tego, co widzieliśmy wcześniej. 936 00:55:15,180 --> 00:55:18,110 Choć pętle; mamy zrobić, gdy pętle. 937 00:55:18,110 --> 00:55:20,290 Zmienne, zawsze tak nieco inaczej. 938 00:55:20,290 --> 00:55:24,560 Zdajesz deklarować zmienne jak zrobić w PHP i C, 939 00:55:24,560 --> 00:55:27,860 ale podobnie jest JavaScript słabo wpisane. 940 00:55:27,860 --> 00:55:32,730 Nie podasz int lub float lub ciąg lub coś podobnego zazwyczaj. 941 00:55:32,730 --> 00:55:34,240 Można określić, var. 942 00:55:34,240 --> 00:55:38,040 Nie musisz określić var, ale to ma znaczenie, czy nie. 943 00:55:38,040 --> 00:55:42,000 Zazwyczaj jeśli pominie var, przypadkowo utworzyć zmienną globalną zamiast lokalnego. 944 00:55:42,000 --> 00:55:46,420 Więc pozwól mi zaproponować, że prawie zawsze po prostu powiedzieć, var, a następnie nazwa zmiennej. 945 00:55:46,420 --> 00:55:48,740 To nie jest typ, to tylko var dla zmiennej. 946 00:55:48,740 --> 00:55:52,930 To byłoby na przykład, czy jest to 123 lub "hello, world". 947 00:55:52,930 --> 00:55:58,910 Tablice są obecne i składniowo podobny do PHP. 948 00:55:58,910 --> 00:56:03,690 Powiem var numerów, a następnie użyć nawiasów kwadratowych ponownie zadeklarować zmienną 949 00:56:03,690 --> 00:56:08,870 którego typ jest tablicą, która ma te konkretne numery w nim oddzielone przecinkami. 950 00:56:08,870 --> 00:56:11,740 A potem w końcu, to jest tylko jeden, który naprawdę wygląda inaczej. 951 00:56:11,740 --> 00:56:16,700 Przypomnijmy, że w PHP nie wdrożyliśmy tablicy asocjacyjnej dla studenta 952 00:56:16,700 --> 00:56:20,220 jak Zamyla że może wyglądać tak, gdzie zmienna nazywa się student. 953 00:56:20,220 --> 00:56:23,370 Nawiasy kwadratowe oznaczają tu przychodzi tablicą. 954 00:56:23,370 --> 00:56:28,500 >> Fakt, że nie używam, ale ciągi liczbowe indeksy - id, house, a nazwa - 955 00:56:28,500 --> 00:56:30,990 Oznacza to, że jest to tablica asocjacyjna 956 00:56:30,990 --> 00:56:34,490 i te strzały z znak równości i wspornik kątowy 957 00:56:34,490 --> 00:56:37,310 Oznacza to, że klucz jest "id", wartość 1; 958 00:56:37,310 --> 00:56:39,310 kluczem jest "dom", wartość jest Winthrop House; 959 00:56:39,310 --> 00:56:41,800 kluczem jest "imię", wartość jest Zamyla Chan. 960 00:56:41,800 --> 00:56:47,110 Więc nie ma 3 przyciski wewnątrz tej tablicy asocjacyjnej, z których każdy ma swoją własną wartość. 961 00:56:47,110 --> 00:56:52,880 Widzieliśmy, że w Pset 7, lub wkrótce będą, w JavaScript samej idei, 962 00:56:52,880 --> 00:56:55,220 ale to będzie wyglądać. 963 00:56:55,220 --> 00:57:00,070 Więc var student - nie znak dolara i brak wzmianki o rodzaju nadal jednak var - 964 00:57:00,070 --> 00:57:05,860 taniej, a następnie otworzyć nawiasy klamrowe w JavaScript, ponieważ gdy masz par kluczy wartości, 965 00:57:05,860 --> 00:57:08,900 chcesz użyć czegoś, co nazywa przedmiot. 966 00:57:08,900 --> 00:57:13,490 A ci z was, którzy nie podejmują APC lub jak może przypomnieć obiektów z Java 967 00:57:13,490 --> 00:57:15,140 lub podobnych językach. 968 00:57:15,140 --> 00:57:17,880 JavaScript nie jest Java, po pierwsze. 969 00:57:17,880 --> 00:57:21,600 To było celowe roku decyzja projektowa temu strącać coś innego, co było popularne, 970 00:57:21,600 --> 00:57:25,640 jego nazwa, choć nie ma ona związek z podstawową Java sama. 971 00:57:25,640 --> 00:57:31,490 JavaScript posiada obiekty i ich tworzenia w drodze notacji nawias klamrowy. 972 00:57:31,490 --> 00:57:36,710 Obiekty w JavaScript są prawie równoważne asocjacyjnych w PHP 973 00:57:36,710 --> 00:57:40,030 , jeśli chodzi o przechowywanie danych wewnątrz nich. 974 00:57:40,030 --> 00:57:44,100 >> Ale jeszcze mocniej w JavaScript można skojarzyć funkcje bardzo łatwo 975 00:57:44,100 --> 00:57:48,040 wewnątrz obiektu, i choć można to zrobić w innych językach, 976 00:57:48,040 --> 00:57:50,040 jest to dość powszechny paradygmat, jak zobaczymy. 977 00:57:50,040 --> 00:57:54,380 W skrócie, to obiekt reprezentuje student, który jest szczególnie Zamyla, 978 00:57:54,380 --> 00:58:00,380 jest podobny koncepcyjnie, tylko różnią się składniowo od tego. 979 00:58:00,380 --> 00:58:03,840 Miejmy faktycznie używać JavaScript w pliku. 980 00:58:03,840 --> 00:58:05,570 Okazuje się, że jest tag script. 981 00:58:05,570 --> 00:58:08,180 Widzieliśmy tagu styl i widzieliśmy inne znaczniki HTML. 982 00:58:08,180 --> 00:58:11,510 Tag script rzeczywiście będzie zawierać jakiś kod JavaScript. 983 00:58:11,510 --> 00:58:15,500 Pozwól mi iść do urządzenia, gdzie mamy jakiś kod źródłowy gotowych. 984 00:58:15,500 --> 00:58:18,700 I nie napisali go jeszcze na stronie internetowej, ale zrobię, że po klasie. 985 00:58:18,700 --> 00:58:21,770 Otwórzmy się ten jeden, blink.html. 986 00:58:21,770 --> 00:58:27,560 Powrót w 1990, nie było dosłownie HTML tag zwany tag blink, 987 00:58:27,560 --> 00:58:30,340 i był to jeden z tagów najbardziej cudownie nadużywany w Internecie 988 00:58:30,340 --> 00:58:36,140 której chcesz odwiedzić jakąś stronę internetową 1990 styl i zacząć widzieć tekst miga ci jak to, 989 00:58:36,140 --> 00:58:39,810 wyniki tagu Marquis, który tekst będzie tak. 990 00:58:39,810 --> 00:58:45,070 Jeden z niewielu razy, gdy świat został faktycznie uzgodnionych na standardzie www, 991 00:58:45,070 --> 00:58:48,250 wszyscy na całym pokładzie zginęło tag blink kilka lat temu. 992 00:58:48,250 --> 00:58:52,860 Ale możemy wskrzesić go z JavaScript jako demonstracja siły trzeba 993 00:58:52,860 --> 00:58:56,660 kiedy można napisać program wewnątrz strony. 994 00:58:56,660 --> 00:59:00,240 Zacznijmy pominąć nowej rzeczy i skupić się tylko na stare. 995 00:59:00,240 --> 00:59:01,780 >> Oto stare rzeczy w tym przykładzie. 996 00:59:01,780 --> 00:59:06,350 Mam tag HTML, znacznik głowę, a do tagu tytułu. 997 00:59:06,350 --> 00:59:11,210 Następnie mam tag ciała tutaj z div, który jest po prostu wycofanie prostokątny podział strony 998 00:59:11,210 --> 00:59:14,720 że dałem unikatowy identyfikator arbitralnie o "pozdrowienie", aby, 999 00:59:14,720 --> 00:59:18,320 tak więc mam sposób jednoznacznie odnosi się do niego, że ma kilka bardzo prosty tekst: 1000 00:59:18,320 --> 00:59:20,220 hello, world. 1001 00:59:20,220 --> 00:59:23,940 Teraz pozwól mi przejść do początku tej sprawy i zobaczyć co nowego. 1002 00:59:23,940 --> 00:59:27,710 Pierwszą rzeczą, która nowego doładowania jest znacznik script, 1003 00:59:27,710 --> 00:59:31,280 i wewnątrz ogłoszeniu tagu skrypt mam zadeklarowanych funkcji. 1004 00:59:31,280 --> 00:59:34,610 Aby zadeklarować funkcję w javascript, całkiem podobny do PHP, 1005 00:59:34,610 --> 00:59:37,930 dosłownie napisać funkcję następnie nazwę funkcji, nawiasów 1006 00:59:37,930 --> 00:59:40,400 a może jakieś argumenty, jeśli następuje dowolny. 1007 00:59:40,400 --> 00:59:43,510 Wtedy ja mam nawias klamrowy, jak zwykle, i teraz mamy trochę lekko nowy kod, 1008 00:59:43,510 --> 00:59:45,230 ale zobaczymy, co to oznacza. 1009 00:59:45,230 --> 00:59:48,670 Więc var div, oznacza to po prostu daj mi zmienną div. 1010 00:59:48,670 --> 00:59:50,530 Mógłbym nazwał foo, ale chciałem go nazwać div 1011 00:59:50,530 --> 00:59:52,620 z powodów, które będą jasne, w sekundy. 1012 00:59:52,620 --> 00:59:57,480 Potem okazuje się, w JavaScript - jest to kod JavaScript, osadzone w mojej stronie internetowej - 1013 00:59:57,480 --> 01:00:01,760 istnieje specjalna zmienna globalna z rodzaju zwanych dokumentów. 1014 01:00:01,760 --> 01:00:04,780 JavaScript jest w rzeczywistości, obiektowy język programowania. 1015 01:00:04,780 --> 01:00:07,230 Nie będziemy wchodzić w szczegóły, w 50, co oznacza, 1016 01:00:07,230 --> 01:00:11,180 ale teraz wiem, że obiekt jest bardzo podobne struktury. 1017 01:00:11,180 --> 01:00:14,740 Jak widzieliśmy w drodze powrotnej, gdy w jednym z najwcześniejszych problemu ustawia 1018 01:00:14,740 --> 01:00:17,150 gdzie umieścić wiele informacji w struct, 1019 01:00:17,150 --> 01:00:21,330 Podobnie jest udokumentować specjalny struct, że pochodzi z przeglądarki 1020 01:00:21,330 --> 01:00:24,810 pochodzi z dowolnej strony internetowej. To nie jest coś stworzyłem jest. 1021 01:00:24,810 --> 01:00:28,210 Wewnątrz tej struktury dokumentu, choć, trzeba nie tylko dane 1022 01:00:28,210 --> 01:00:30,010 ale trzeba także funkcje. 1023 01:00:30,010 --> 01:00:34,090 >> I za każdym razem masz funkcji wewnątrz struktury, wewnątrz obiektu, 1024 01:00:34,090 --> 01:00:36,490 to się nazywa metoda. Ale to jest to samo. 1025 01:00:36,490 --> 01:00:40,110 Metoda jest funkcją, która właśnie tak dzieje się wewnątrz czegoś innego. 1026 01:00:40,110 --> 01:00:42,990 Więc to oznacza, że ​​ta specjalna zmienna globalna o nazwie dokumentu 1027 01:00:42,990 --> 01:00:47,690 ma funkcji o nazwie getElementById że dosłownie nie robi. 1028 01:00:47,690 --> 01:00:52,460 Będzie Ci elementu z DOM, Document Object drzewo Model, 1029 01:00:52,460 --> 01:00:55,520 którego ID jest w tym pozdrowieniu przypadku. 1030 01:00:55,520 --> 01:00:59,200 Innymi słowy, cały ten czas spędziliśmy na strukturach danych wchodzi w grę tutaj. 1031 01:00:59,200 --> 01:01:01,400 Ten obraz z DOM, że mieliśmy przed chwilą, 1032 01:01:01,400 --> 01:01:06,100 choć strona jest trochę inaczej, gdybym miał div na tym zdjęciu, 1033 01:01:06,100 --> 01:01:11,180 co document.getElementById wróci do mnie skutecznie być wskaźnikiem 1034 01:01:11,180 --> 01:01:15,440 prostokąta w drzewie, odniesienie do prostokąta w drzewie. 1035 01:01:15,440 --> 01:01:18,410 Więc to, co to znaczy naprawdę zadzwonić pod jeden z tych funkcji. 1036 01:01:18,410 --> 01:01:21,960 W tym przypadku znowu to div. To nie ciało lub tytuł jest. 1037 01:01:21,960 --> 01:01:26,480 Zobaczmy więc, co mam wtedy zrobić z tym div teraz, że mam to w środku tej zmiennej div nazwie. 1038 01:01:26,480 --> 01:01:32,580 Okazuje się z JavaScriptem masz zdolności do dostrojenia CSS swojej strony dynamicznie. 1039 01:01:32,580 --> 01:01:39,060 Do tej pory, wszystkie CSS zrobiliśmy, chociaż ograniczony, jest w atrybuty stylu, 1040 01:01:39,060 --> 01:01:41,730 lub gdzie indziej nie stawiamy CSS? 1041 01:01:42,730 --> 01:01:45,810 I rodzaju odpadami tego. W stylu w znacznik początku pliku. 1042 01:01:45,810 --> 01:01:49,180 Lub trzecie miejsce jest w? 1043 01:01:50,710 --> 01:01:54,590 >> Zewnętrzny plik, coś. Css. 1044 01:01:54,590 --> 01:01:56,730 To są 3 miejsca, zrobiliśmy CSS dotąd 1045 01:01:56,730 --> 01:01:59,310 ale Połów mamy stałe zakodowany wszystko. 1046 01:01:59,310 --> 01:02:04,060 Zdecydowałeś jak wskoczyła Pset 7, zdecydowaliśmy przed pouczać co nasz CSS będzie. 1047 01:02:04,060 --> 01:02:07,380 Ale jeśli chcesz zmienić swój CSS, rzeczywiście można to zrobić 1048 01:02:07,380 --> 01:02:09,370 skoro masz rzeczywistego języka programowania. 1049 01:02:09,370 --> 01:02:13,910 CSS, HTML - nie języków programowania. JavaScript jest. 1050 01:02:13,910 --> 01:02:18,200 Tak więc okazuje się, że tak szybko, jak masz jeden z tych prostokątów z drzewa 1051 01:02:18,200 --> 01:02:23,050 nazywany DOM, sam ma pewne dane znajdujące się wewnątrz niej. 1052 01:02:23,050 --> 01:02:27,820 Więc div, że właśnie złapał z drzewa ma co będziemy nazywać obiekt wewnątrz niego 1053 01:02:27,820 --> 01:02:34,390 nazywa styl i właściwość stylu sama właściwość o nazwie widoczność. 1054 01:02:34,390 --> 01:02:37,330 Chciałbym wiedzieć, to tylko patrząc przez użytkownika CSS obsługi. 1055 01:02:37,330 --> 01:02:41,160 Okazuje się, że jest widoczność właściwości CSS, że robi to, co mówi. 1056 01:02:41,160 --> 01:02:44,530 To sprawia, że ​​coś widoczny, lub nie widoczne. 1057 01:02:44,530 --> 01:02:46,810 A jak to zrobić to jest. 1058 01:02:46,810 --> 01:02:50,510 Pytam programowo jeśli widoczność tego div jest ukryty, 1059 01:02:50,510 --> 01:02:53,390 co mam zmienić go? Widoczne. 1060 01:02:53,390 --> 01:02:58,840 Else if widoczność tej stronie nie jest ukryty, logicznie Mam go ukryć. 1061 01:02:58,840 --> 01:03:04,070 Nie mam pojęcia, dlaczego to jest widoczne i ukryte i nie widoczne i niewidoczne. 1062 01:03:04,070 --> 01:03:06,000 To była słaba projektu decyzji w drodze. 1063 01:03:06,000 --> 01:03:09,530 Ale to są rzeczywiście przeciwieństwa w CSS: widoczne i ukryte. 1064 01:03:09,530 --> 01:03:15,520 Wszystko to nie jest to znaczy zmienić CSS z mojego archiwum i wyłącza się i wyłącza 1065 01:03:15,520 --> 01:03:16,870 dla danej div. 1066 01:03:16,870 --> 01:03:20,630 Ale znowu, jest to funkcja o nazwie blink. Kiedy funkcja blink nazywa? 1067 01:03:20,630 --> 01:03:24,080 Okazuje się, że jest jeszcze jeden specjalny zmienną globalną o nazwie okno, 1068 01:03:24,080 --> 01:03:28,220 w duchu podobnym do dokumentu, ale zważywszy, że dokument odnosi się do strony internetowej, 1069 01:03:28,220 --> 01:03:31,700 jak drzewo DOM, HTML wysłano z serwera, 1070 01:03:31,700 --> 01:03:35,250 Okno oznacza chrom wokół niego, pasek adresu, pasek tytułu, 1071 01:03:35,250 --> 01:03:37,880 i wszystkie z tych rzeczy wokół swojej strony internetowej. 1072 01:03:37,880 --> 01:03:42,800 >> I okazuje się, że obiekt ma specjalne okno wewnątrz jego funkcja nazywa setInterval 1073 01:03:42,800 --> 01:03:44,360 że robi to, co mówi. 1074 01:03:44,360 --> 01:03:48,600 Będzie ustawiony interwał - w tym przypadku co 500 milisekund - 1075 01:03:48,600 --> 01:03:52,270 i zgadywać, co się zrobi to co 500 milisekund? 1076 01:03:52,270 --> 01:03:55,240 To będzie wykonać ten blink funkcji. 1077 01:03:55,240 --> 01:03:58,560 A co jest miłe jest to, że mogliśmy zrobić to w C mimo że nigdy nie zrobił. 1078 01:03:58,560 --> 01:04:01,580 C ma coś, co nazywa wskaźników funkcji, gdzie można przekazać funkcji wokół 1079 01:04:01,580 --> 01:04:03,140 jako argumenty. 1080 01:04:03,140 --> 01:04:07,620 Podobnie w JavaScript można przekazać nazwę funkcji do innej funkcji. 1081 01:04:07,620 --> 01:04:10,630 I zauważyć, co robię. Nie zrobię tego. 1082 01:04:10,630 --> 01:04:14,380 Jeśli mogę umieścić nawiasy po mgnieniu oznaczałoby to wywołać funkcję migania. 1083 01:04:14,380 --> 01:04:17,430 Gdybym je pominąć, to znaczy o to funkcja blink 1084 01:04:17,430 --> 01:04:21,330 tak że setInterval może nazwać to co 500 milisekund. 1085 01:04:21,330 --> 01:04:28,200 Więc wynik końcowy, okropna choć jest to, że jeśli pójdę na localhost i przejdź do blink.html, 1086 01:04:28,200 --> 01:04:32,120 Mam teraz takiej sytuacji ponownie. 1087 01:04:32,120 --> 01:04:34,950 I jeśli faktycznie Sprawdzić element, zobaczmy czy możemy to zobaczyć. 1088 01:04:34,950 --> 01:04:38,550 Pozwól Sprawdzić element, pozwól mi przewijać tylko trochę, 1089 01:04:38,550 --> 01:04:44,320 pozwól mi wybrać elementy tutaj i zwróć uwagę DOM wnętrze inspektora Chrome. 1090 01:04:44,320 --> 01:04:48,840 To dosłownie zmienia iz powrotem co 500 milisekund. 1091 01:04:48,840 --> 01:04:55,660 Jeśli idziemy do naszego znajomego Nate, 1092 01:04:55,660 --> 01:05:00,020 Jeśli kiedykolwiek zastanawialiście się, jak to działa, podobny pomysł z przerwą, 1093 01:05:00,020 --> 01:05:04,810 ale Nate jest faktycznie poczyniła bardzo efektywne wykorzystanie koloru w tym konkretnym przypadku. 1094 01:05:04,810 --> 01:05:07,350 Więc co jeszcze możemy rzeczywiście z tym zrobić? 1095 01:05:07,350 --> 01:05:09,990 Otwórzmy się inny przykład i spróbować czegoś 1096 01:05:09,990 --> 01:05:12,940 to programowo jeszcze bardziej użyteczne niż co mrugnięcie rzeczy. 1097 01:05:12,940 --> 01:05:17,990 Pozwól mi iść do naszego katalogu formularzy dzisiaj i idź do form0. 1098 01:05:17,990 --> 01:05:20,820 To był najbrzydszy możliwą formą, że mogę wymyślić, 1099 01:05:20,820 --> 01:05:23,290 i pozwól mi pokazać, jak to wygląda w przeglądarce. 1100 01:05:23,290 --> 01:05:28,960 >> Pozwólcie mi iść do localhost / formy, a to jest form0. 1101 01:05:28,960 --> 01:05:33,400 To jest super brzydka formularz HTML, który ma kilka pól na e-mail, na hasło, 1102 01:05:33,400 --> 01:05:37,190 hasło, a następnie trochę pole do wyrażenia zgody na niektóre warunki. 1103 01:05:37,190 --> 01:05:41,350 Połów jest, jeśli mogę odwiedzić ten formularz i nie chcę dać ci mój adres e-mail, 1104 01:05:41,350 --> 01:05:44,730 Nie chcę się zgodzić na warunkach może, mogę kliknąć Rejestracja 1105 01:05:44,730 --> 01:05:46,920 i pozwala mi przejść tak. 1106 01:05:46,920 --> 01:05:50,800 Dzieje się tak do przedłożenia głupiego pliku PHP o nazwie dump.php. 1107 01:05:50,800 --> 01:05:58,420 Wszystko robi to wydrukować zawartość $ _GET tylko do celów diagnostycznych. 1108 01:05:58,420 --> 01:06:01,580 To było to, co zostało napisane przez użytkownika tylko teraz. 1109 01:06:01,580 --> 01:06:05,010 Ale załóżmy, że rzeczywiście chcesz sprawdzić użytkownika złożenia formularza. 1110 01:06:05,010 --> 01:06:06,530 Pozwólcie mi iść do wersji 1. 1111 01:06:06,530 --> 01:06:11,420 To form1.html. Wygląda estetycznie tak źle, ale zauważ, jak wyobraźnia jest. 1112 01:06:11,420 --> 01:06:15,450 Jeśli kliknę Rejestracja bez współpracy, mam krzyknął. 1113 01:06:15,450 --> 01:06:17,320 "Musisz podać swój adres e-mail." 1114 01:06:17,320 --> 01:06:21,670 Dobrze. Więc pozwól mi spróbować. Więc malan@harvard.edu. Nie potrzebne jest hasło. 1115 01:06:21,670 --> 01:06:25,100 Zarejestruj. "Musisz podać hasło." Dobrze. 1116 01:06:25,100 --> 01:06:28,470 Tak będzie podać hasło szkarłatu. Zarejestruj. 1117 01:06:28,470 --> 01:06:32,300 "Hasła nie zgadzają się." Muszę teraz wpisać crimson tutaj. 1118 01:06:32,300 --> 01:06:35,710 I przypadkowo sprawdziła tego. Zarejestruj. 1119 01:06:35,710 --> 01:06:39,860 "Musisz zgodzić się na warunki". Dobrze. Zgadzam się tam. Zarejestruj. 1120 01:06:39,860 --> 01:06:43,700 I teraz pokazuje mi wyjście diagnostyczne tam. 1121 01:06:43,700 --> 01:06:45,630 >> Więc co się stało? 1122 01:06:45,630 --> 01:06:48,330 Mieliśmy tę umiejętność, aby zatwierdzić formularz zgłoszenia. 1123 01:06:48,330 --> 01:06:51,420 W rzeczywistości, jeśli nie nurkowania w Pset 7, jest tam funkcja apologize 1124 01:06:51,420 --> 01:06:54,620 które sprawia, że ​​bardzo łatwo krzyczeć na użytkownika z komunikatem na ekranie. 1125 01:06:54,620 --> 01:06:57,580 Używam nieco inny mechanizm, alert funkcji, 1126 01:06:57,580 --> 01:07:03,690 która nie jest funkcją, która jest uśmiechnął się, ponieważ to sprawia, że ​​bardzo brzydkie wiadomości użytkownika jest. 1127 01:07:03,690 --> 01:07:05,710 Ale zobaczmy, co tu robię. 1128 01:07:05,710 --> 01:07:09,620 To form1.html, a zauważysz, że mam trochę dość znajomą składnię: 1129 01:07:09,620 --> 01:07:12,920 tag ciało, tag formularza, atrybut action, atrybut metody. 1130 01:07:12,920 --> 01:07:17,050 Zauważmy jednak, dałem moim formularzu unikatowy identyfikator dla wygody. 1131 01:07:17,050 --> 01:07:19,190 To mam e pole, którego typ jest tekst, 1132 01:07:19,190 --> 01:07:23,780 Pole hasła, którego typ jest hasło, którego pole jest typu potwierdzenie hasła, 1133 01:07:23,780 --> 01:07:28,070 a następnie pole, którego nazwa jest umowa tutaj, typ jest pole wyboru. 1134 01:07:28,070 --> 01:07:30,380 A potem mam przycisk Submit. 1135 01:07:30,380 --> 01:07:33,050 Zauważmy jednak, na górze, co jeszcze mam. 1136 01:07:33,050 --> 01:07:35,810 Po pierwsze, nie jest jeszcze wykorzystanie skryptu znacznika. 1137 01:07:35,810 --> 01:07:40,520 Jeśli masz jakiś kod JavaScript w innym pliku, podobnie jak w CSS można go zawierać. 1138 01:07:40,520 --> 01:07:44,530 A ty wiesz, że w źródle skryptu, a następnie zauważ łączę najwyraźniej 1139 01:07:44,530 --> 01:07:50,349 do googleapis.com na ścieżkę bardzo długi ale którego nazwa pliku kończy się jquery.min 1140 01:07:50,349 --> 01:07:52,420 do minimum. js. 1141 01:07:52,420 --> 01:07:55,969 jQuery jest bardzo popularne biblioteki JavaScript, który po prostu sprawia, JavaScript 1142 01:07:55,969 --> 01:07:58,230 jeszcze bardziej przyjazny dla użytkownika w obsłudze. 1143 01:07:58,230 --> 01:08:00,610 To faktycznie stał się de facto standardem. 1144 01:08:00,610 --> 01:08:04,090 Więc nawet jeśli to, co masz zamiar zobaczyć nie jest czystym JavaScript per se, 1145 01:08:04,090 --> 01:08:09,340 jest to biblioteka na górze JavaScript podobnie jak CS50 biblioteki jest warstwa 1146 01:08:09,340 --> 01:08:13,670 na szczycie niskiego poziomu kodu C; rzeczywistość jest prawie każdy w Internecie używa. 1147 01:08:13,670 --> 01:08:18,030 Więc to nie są kółka. To jest po prostu najlepiej ćwiczyć te dni. 1148 01:08:18,030 --> 01:08:22,830 Zauważcie, poniżej jest mój własny tag script, i zauważyć, co zrobiłem tutaj. 1149 01:08:22,830 --> 01:08:27,450 Okazuje się, że jQuery robi coś trochę fantazji. 1150 01:08:27,450 --> 01:08:29,660 JavaScript ma znaki dolara, ale to bez znaczenia. 1151 01:08:29,660 --> 01:08:32,870 >> Oni są jak litery A, B lub C. 1152 01:08:32,870 --> 01:08:36,670 jQuery po prostu przyjęła Konwencję lub rodzaj określone roszczenia na fakt, 1153 01:08:36,670 --> 01:08:40,280 że $ będzie ich specjalny symbol. 1154 01:08:40,280 --> 01:08:44,950 Tak szybko, jak załadować ten globalny plik JavaScript tu z tagu skryptu, 1155 01:08:44,950 --> 01:08:49,080 masz dostęp do specjalnej zmiennej globalnej, która jest o nazwie $. 1156 01:08:49,080 --> 01:08:53,009 Jest bardziej poprawnie nazywa jQuery, ale to nie wygląda aż tak sexy jak $. 1157 01:08:53,009 --> 01:08:56,250 Ale $ nie ma specjalnego znaczenia. W PHP miał specjalne znaczenie. 1158 01:08:56,250 --> 01:08:58,440 Miałeś go przed zmiennej. 1159 01:08:58,440 --> 01:09:01,670 To jest po prostu sexy rzeczą, że miały one na. 1160 01:09:01,670 --> 01:09:03,389 Co się tutaj dzieje? 1161 01:09:03,389 --> 01:09:08,830 Wskazówka olewam do jQuery funkcji mój zmienną globalną dokument 1162 01:09:08,830 --> 01:09:10,860 a potem dzwonię. gotowy. 1163 01:09:10,860 --> 01:09:15,480 Co w zasadzie nie jest jQuery pozwala na trochę wanilii rzeczy JavaScript 1164 01:09:15,480 --> 01:09:17,889 jak obiektu dokumentu, obiekt okna, 1165 01:09:17,889 --> 01:09:20,790 i jeśli przekażemy go do jQuery funkcji - 1166 01:09:20,790 --> 01:09:24,429 i znowu, było jasne, że jest to funkcja o nazwie jQuery - 1167 01:09:24,429 --> 01:09:28,240 co robi jest powraca do Ciebie specjalną wersję dokumentu 1168 01:09:28,240 --> 01:09:30,700 , że ma więcej funkcji związanych z nim. 1169 01:09:30,700 --> 01:09:34,760 Surowego JavaScript więc nie oczekuje funkcja 1170 01:09:34,760 --> 01:09:37,810 ale jeśli przejdą dokumentu jQuery funkcji najpierw 1171 01:09:37,810 --> 01:09:40,960 powraca do Ciebie specjalną wersję obiektu dokumentu 1172 01:09:40,960 --> 01:09:43,030 który ma więcej fantazyjnych możliwości. 1173 01:09:43,030 --> 01:09:48,230 I dlatego ludzie lubią. To właśnie sprawia, że ​​rzeczy łatwiej zrobić, jak mamy zamiar zobaczyć. 1174 01:09:48,230 --> 01:09:49,820 Więc co to linia kodu oznacza? 1175 01:09:49,820 --> 01:09:52,690 Ten wiersz kodu oznacza tutaj, gdy dokument jest gotowy - 1176 01:09:52,690 --> 01:09:56,830 Innymi słowy, gdy przeglądarka przeczytaniu tego górnego pliku do dołu - 1177 01:09:56,830 --> 01:09:59,200 śmiało wykonać następujące funkcje. 1178 01:09:59,200 --> 01:10:03,540 Co jest naprawdę ciekawe w JavaScript - PHP i ma to, jak również - 1179 01:10:03,540 --> 01:10:05,450 to funkcje anonimowe. 1180 01:10:05,450 --> 01:10:10,560 W JavaScript można deklarować funkcje, które nie mają nazwy, ale mają ciała. 1181 01:10:10,560 --> 01:10:12,570 Zauważ, co się tutaj dzieje. 1182 01:10:12,570 --> 01:10:16,220 >> Ta funkcja nazywa się gotowy, a to po prostu oznacza, wykonaj następujące czynności 1183 01:10:16,220 --> 01:10:20,220 gdy cała strona jest gotowa, kiedy wszystko było odczytywane z serwera. 1184 01:10:20,220 --> 01:10:23,090 Co chcesz zrobić? Chcę wykonać kawałek kodu. 1185 01:10:23,090 --> 01:10:27,120 Zauważ, że nie chcemy, aby wykonać ten kod od razu. 1186 01:10:27,120 --> 01:10:34,350 Jeśli pominąć to, oznaczałoby to natychmiastowe rozpoczęcie wykonywania tych linii kodu. 1187 01:10:34,350 --> 01:10:39,040 Ale fakt, że mówię nie, nie, nie, zawinąć to w anonimowej funkcji, podobnie jak to 1188 01:10:39,040 --> 01:10:43,000 środki nie wykonać go jeszcze; nazwać ostatecznie. 1189 01:10:43,000 --> 01:10:45,430 Przekonaliśmy się o tym przed chwilą w naszym poprzednim przykładzie formularza. 1190 01:10:45,430 --> 01:10:49,990 Jaką funkcję nie wzywamy ostatecznie 500 milisekund później? Migać. 1191 01:10:49,990 --> 01:10:51,480 Tak więc sam pomysł. 1192 01:10:51,480 --> 01:10:53,950 Ponownie, nawet jeśli wygląda to trochę dziwnie, po prostu wziąć teraz na wierze 1193 01:10:53,950 --> 01:10:57,060 że zadeklarować funkcja anonimowa to się nazywa w końcu, 1194 01:10:57,060 --> 01:11:01,720 po prostu napisać function () { 1195 01:11:01,720 --> 01:11:05,380 Więc jaki kod mamy zamiar wykonać w końcu? Następujące. 1196 01:11:05,380 --> 01:11:10,460 To też wygląda trochę nowy, ale oznacza to, tu jest jQuery funkcja, 1197 01:11:10,460 --> 01:11:13,430 i to teraz jest skrót. 1198 01:11:13,430 --> 01:11:18,830 Ten fragment HTML na dole ekranu ma oczywiście pewne reprezentacji drzewa. 1199 01:11:18,830 --> 01:11:21,730 To nie jest to. Ta strona jest bardziej interesujące niż to Hello, World przykład. 1200 01:11:21,730 --> 01:11:25,210 Ale jest pewne drzewo, które odpowiada tej HTML. 1201 01:11:25,210 --> 01:11:28,910 Byłoby ból w szyi, aby wdrożyć jakieś funkcji rekurencyjnej 1202 01:11:28,910 --> 01:11:34,380 zacząć od korzenia, a następnie znaleźć węzeł, którego ID jest rejestracja. 1203 01:11:34,380 --> 01:11:38,340 Więc co sprawia, że ​​bardzo proste jQuery dla nas jest dosłownie to. 1204 01:11:38,340 --> 01:11:43,000 Idź przed siebie i po mnie cokolwiek div lub formularza cokolwiek, cokolwiek element HTML 1205 01:11:43,000 --> 01:11:45,820 ma identyfikator rejestracji. 1206 01:11:45,820 --> 01:11:52,440 Jest to równoważne document.getElementById ("rejestracja"). 1207 01:11:52,440 --> 01:11:54,170 >> Dlaczego ludzie jak jQuery? 1208 01:11:54,170 --> 01:12:00,110 Bo to jest krótsza pisać. Ale to wszystko jest. To ten sam pomysł. 1209 01:12:00,110 --> 01:12:02,630 Daj mi znak, którego ID jest rejestracja. 1210 01:12:02,630 --> 01:12:06,300 A kiedy to tag, który okazuje się być forma, zostanie złożony, 1211 01:12:06,300 --> 01:12:08,300 śmiało wykonać ten kod. 1212 01:12:08,300 --> 01:12:11,320 Weźmy spojrzeć teraz, w jaki sposób robimy walidacji formularza. 1213 01:12:11,320 --> 01:12:15,950 Składnia jest wprawdzie cryptic na początku, ale to, co się dzieje? 1214 01:12:15,950 --> 01:12:21,050 Jeśli ta linia kodu jest prawdziwe, będę krzyczeć na użytkownika w celu zapewnienia swojego adresu email. 1215 01:12:21,050 --> 01:12:22,970 Więc co to jest linia kodu? 1216 01:12:22,970 --> 01:12:25,560 $ Oznacza jQuery. Teraz to zauważyć. 1217 01:12:25,560 --> 01:12:27,920 To jest trochę jak CSS. 1218 01:12:27,920 --> 01:12:33,370 Jeśli zanurkował CSS jeszcze, będziesz wiedzieć, że oznacza to element, którego ID jest rejestracja. 1219 01:12:33,370 --> 01:12:39,840 Przestrzeń oznacza znaleźć dziecko lub potomek rejestracji, którego nazwa jest wejście. 1220 01:12:39,840 --> 01:12:42,970 A potem to coś w nawiasach kwadratowych jest trochę filtr. 1221 01:12:42,970 --> 01:12:47,010 I nawet jeśli wygląda to tajemniczy, oznacza to po prostu przejść do formularza, którego ID jest rejestracja, 1222 01:12:47,010 --> 01:12:51,230 idź do wewnątrz elementu wejściowego to, którego nazwa jest email, 1223 01:12:51,230 --> 01:12:55,440 a następnie uzyskać jej wartość, bez względu na jej wartość bywa - 1224 01:12:55,440 --> 01:12:59,670 asdf jeśli to wszystko, co maszynowo lub malan@harvard.edu jeśli to, co wpisałem. 1225 01:12:59,670 --> 01:13:05,250 Więc jeśli wartość pola formularza email == nic, krzyczeć na użytkownika. 1226 01:13:05,250 --> 01:13:09,700 Inaczej, jeżeli wartość w polu hasła == nic krzyczeć na użytkownika. 1227 01:13:09,700 --> 01:13:19,520 >> Inaczej, jeżeli wartość w polu hasła nie równa wartości polu potwierdzenia 1228 01:13:19,520 --> 01:13:22,850 który był inny element formularza, krzyczeć na użytkownika. 1229 01:13:22,850 --> 01:13:25,680 I wtedy wreszcie - i ten też ma jakąś nową składnię własnej, 1230 01:13:25,680 --> 01:13:29,270 ale raz widziałem go, to przynajmniej trochę bardziej rozsądne - 1231 01:13:29,270 --> 01:13:34,060 else if formularz, którego ID jest rejestracja ma element wejściowy, którego nazwa jest porozumienie 1232 01:13:34,060 --> 01:13:39,720 i to jest zaznaczone, należy iść dalej i krzyczeć na użytkownika. 1233 01:13:39,720 --> 01:13:42,520 Więc całkowicie przyznać jest to całkowicie przytłaczające na pierwszy rzut oka. 1234 01:13:42,520 --> 01:13:46,530 Jest wiele nowych składni. Ale wszystkie jQuery następuje tego rodzaju wzorów. 1235 01:13:46,530 --> 01:13:49,880 I szczerze mówiąc, nawet nie wiem, to istnieje jeszcze kilka minut temu. 1236 01:13:49,880 --> 01:13:53,640 I Googled "Jak sprawdzić, czy pole wyboru jest zaznaczone w jQuery?" 1237 01:13:53,640 --> 01:13:55,680 i to jest składnia, bo jest różnych sposobów jej 1238 01:13:55,680 --> 01:13:58,010 z rzeczywistym surowego kodu JavaScript. 1239 01:13:58,010 --> 01:14:01,030 Tak bardzo pierwsza strona Set Problem 7 podkreśla 1240 01:14:01,030 --> 01:14:04,500 pset 7 jest bardzo dużo ćwiczeń w czasie uruchamiania się 1241 01:14:04,500 --> 01:14:08,650 gdzie zamieściliśmy, miejmy nadzieję, ramy koncepcyjne, z którym do rozwiązania PSET. 1242 01:14:08,650 --> 01:14:12,280 >> Ale, jak to często bywa w przypadku projektowania stron internetowych, to do ciebie naprawdę Kapsa, 1243 01:14:12,280 --> 01:14:16,680 zawierają fragmenty kodu i przykłady z sieci tak długo, jak ich cytować 1244 01:14:16,680 --> 01:14:17,960 na warunkach w tym pierwszym arkuszu, 1245 01:14:17,960 --> 01:14:21,460 i uświadomić sobie, że uczenie się języka HTML, CSS, JavaScript, a nawet SQL 1246 01:14:21,460 --> 01:14:26,020 naprawdę ma być at-home to ćwiczenie jak zaczniemy przyjmować te kółka off. 1247 01:14:26,020 --> 01:14:29,150 I uświadomić sobie też jest tak wiele innych rzeczy można zrobić za pomocą przeglądarki. 1248 01:14:29,150 --> 01:14:33,790 Wewnątrz większości z tych elementów są inne rzeczy, zwane obsługi zdarzeń. 1249 01:14:33,790 --> 01:14:37,140 I mimo, że tylko spojrzał na nich nazywa onsubmit i onReady, 1250 01:14:37,140 --> 01:14:40,310 można robić takie rzeczy jak onkeydown, onKeyUp, 1251 01:14:40,310 --> 01:14:43,410 jak wtedy, gdy użytkownik wciśnie klawisz, można słuchać za to i górę. 1252 01:14:43,410 --> 01:14:45,940 Gmail ma skrótów klawiaturowych. 1253 01:14:45,940 --> 01:14:49,490 Jak Google wdrożenia skrótów klawiaturowych jak C do komponowania? 1254 01:14:49,490 --> 01:14:54,120 Słuchają na imprezy, jak nazywa się je, podobnie jak onkeypress lub onKeyUp i onkeydown. 1255 01:14:54,120 --> 01:14:56,360 Jeśli kiedykolwiek krążył myszkę niektórych opcji menu 1256 01:14:56,360 --> 01:15:00,180 i nagle, voila, pojawi się menu lub grafika zmienia kolor, 1257 01:15:00,180 --> 01:15:01,920 jak oni to robią? 1258 01:15:01,920 --> 01:15:06,940 Zamiast słuchać onReady lub onsubmit, można słuchać onmouseover i onmouseout. 1259 01:15:06,940 --> 01:15:10,920 >> Tak w skrócie, z tymi podstawami bardzo proste, że mamy zaczęły zarysować powierzchnię dziś 1260 01:15:10,920 --> 01:15:13,940 a my dalej do nurkowania w środę, trzeba w coraz większym stopniu 1261 01:15:13,940 --> 01:15:17,530 moc do realizacji różnego rodzaju rzeczy, które już znasz. 1262 01:15:17,530 --> 01:15:21,620 Więc kończy, i będziemy kontynuować to w środę. 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]