1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [Săptămâna 9] 2 00:00:02,570 --> 00:00:04,740 [David J. Malan - Universitatea Harvard] 3 00:00:04,740 --> 00:00:07,170 [Acest lucru este CS50. - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 Bine. Bine ai venit înapoi. Acest lucru este CS50, iar acest lucru este începutul săptămânii 9. 5 00:00:12,350 --> 00:00:16,600 Astazi ne vom concentra în special pe design, nu mai este în contextul C 6 00:00:16,600 --> 00:00:20,010 dar, în contextul PHP și un pic de SQL și un pic de JavaScript, 7 00:00:20,010 --> 00:00:23,730 în special spre un scop atât PSET 7 și, de asemenea, proiectul final. 8 00:00:23,730 --> 00:00:26,310 De fapt, dacă vă aflați la acel moment, în proiectul final 9 00:00:26,310 --> 00:00:30,100 în cazul în care probabil ca de o oră sau cam asa ceva în urmă, ai cel puțin început să dea unele crezut 10 00:00:30,100 --> 00:00:33,730 la proiectul final și te gândești doriți să colaboreze cu colegii de clasă 1 sau 2, 11 00:00:33,730 --> 00:00:36,150 dacă întâmpinați probleme la conectarea cu colegii de clasă a spus, 12 00:00:36,150 --> 00:00:40,570 nu ezitați să completați formularul de la cs50.net/partners/form. 13 00:00:40,570 --> 00:00:42,880 Pur și simplu te întreabă cine ești, ce fel de proiect te gandesti, 14 00:00:42,880 --> 00:00:44,870 în cazul în care locuiți doar pentru motive logistice. 15 00:00:44,870 --> 00:00:49,510 Și apoi, dacă doriți să păstrați un ochi pe deasupra săptămâna viitoare sau cam asa ceva URL-ul de calcul tabelar acolo, 16 00:00:49,510 --> 00:00:53,520 puteți vedea apoi o versiune doar în citire a doc Google 17 00:00:53,520 --> 00:00:56,010 în care suntem colectare a acestor informații. 18 00:00:56,010 --> 00:00:58,930 Deci, dacă doriți să lucrați cu cineva, prin toate mijloacele să nu ezitați să ajungă la oameni 19 00:00:58,930 --> 00:01:00,480 prin acest mecanism. 20 00:01:00,480 --> 00:01:02,690 Dar majoritatea de oameni fac singuri de lucru. Asta e cu totul bine. 21 00:01:02,690 --> 00:01:06,120 Deci, nu simt că acest lucru este în nici un fel obligatorie. 22 00:01:06,120 --> 00:01:09,680 Vineri a fost doar eu și câteva din echipa aici, 23 00:01:09,680 --> 00:01:11,100 teatru gol pentru cea mai mare parte. 24 00:01:11,100 --> 00:01:14,600 Au fost 3 turisti stau acolo, astfel că a fost un pic ciudat. 25 00:01:14,600 --> 00:01:18,970 Ceea ce am vorbit despre baze de date a fost și am vorbit despre PSET 7 un pic. 26 00:01:18,970 --> 00:01:22,200 Și dacă nu sa întâmplat pentru a prinde că pe video doar încă, e în regulă. 27 00:01:22,200 --> 00:01:26,770 Voi încerca să definească orice termeni care ne-ar lua pentru a acordat în caz contrar 28 00:01:26,770 --> 00:01:28,840 bazat pe prelegere de vineri. 29 00:01:28,840 --> 00:01:32,550 >> Dar azi am de gând să încerc să ajungi la punctul de 30 00:01:32,550 --> 00:01:34,990 de a nu fi capabil doar să facă ceva de genul PSET 7 31 00:01:34,990 --> 00:01:37,360 dar de fapt înțelegerea a ceea ce se întâmplă sub capotă, 32 00:01:37,360 --> 00:01:41,910 în special unele dintre abstracțiuni pe care le-am pus în aplicare în fișierul functions.php 33 00:01:41,910 --> 00:01:45,780 pentru a face viața un pic mai ușor, dar în așa fel încât să înțelegeți în cele din urmă 34 00:01:45,780 --> 00:01:48,760 astfel că, atunci când roțile de formare desprinde în câteva săptămâni vă poate supraviețui în continuare 35 00:01:48,760 --> 00:01:53,750 în lumea reală și de a face aceste lucruri fără nici un cadru CS50 sub tine. 36 00:01:53,750 --> 00:01:57,500 Această $ _SESSION, pentru cei dintre voi care sunt familiarizați 37 00:01:57,500 --> 00:02:01,960 sau care deja prins video de vineri, ceea ce face să ne facem SESIUNEA 38 00:02:01,960 --> 00:02:04,330 într-o aplicație bazată pe web PHP? 39 00:02:04,330 --> 00:02:09,650 Aceasta este o variabilă superglobale, ceea ce înseamnă că este similară în spirit pentru a GET si POST 40 00:02:09,650 --> 00:02:13,970 și alte câteva, dar ceea ce este acest lucru util pentru? 41 00:02:13,970 --> 00:02:18,320 >> Ce este SESIUNEA utilizează pentru? Da. [Elev] Logging inch 42 00:02:18,320 --> 00:02:21,040 Ne pare rău? [Elev] Logging inch Logging inch Într-adevăr. 43 00:02:21,040 --> 00:02:25,100 În PSET 7 suntem folosirea acestui superglobale SESIUNEA pentru a facilita logare inch 44 00:02:25,100 --> 00:02:28,600 Și ce e frumos despre acest superglobale este faptul că este un tablou asociativ. 45 00:02:28,600 --> 00:02:33,190 Un tablou asociativ, rechemare, este doar o matrice, dar ale căror indici nu mai trebuie să fie numere 46 00:02:33,190 --> 00:02:37,670 cum ar fi 012. Ele pot fi numere sau pot fi chiar siruri de caractere. 47 00:02:37,670 --> 00:02:44,890 Și așa că, dacă v-ați scufundat în PSET 7 încă, poate iti amintesti ca suntem stocarea un ID cheie numit 48 00:02:44,890 --> 00:02:50,330 în interiorul acestui tablou asociativ a căror valoare este ceva de genul 123 - 49 00:02:50,330 --> 00:02:53,780 indiferent de conectat în prezent ID-ul de utilizator este. 50 00:02:53,780 --> 00:02:59,470 Motivația pentru aceasta este că, chiar și după ce utilizatorul a vizitat localhost 51 00:02:59,470 --> 00:03:02,720 sau site-ul meu mai general și apoi le-am conectat, 52 00:03:02,720 --> 00:03:07,320 chiar dacă acestea nu faceți clic pe un link sau a reveni la site-ul meu timp de 5 minute 53 00:03:07,320 --> 00:03:10,730 sau chiar o oră sau chiar o zi, dar ei lasă fereastra browser-ului lor deschisă, 54 00:03:10,730 --> 00:03:14,370 prin intermediul acestui superglobale-mi pot aminti că acestea sunt logat 55 00:03:14,370 --> 00:03:21,140 >> Cu alte cuvinte, permite-mi să stocheze ceva ușor pe termen lung, vreau despre un utilizator. 56 00:03:21,140 --> 00:03:24,390 Și vă puteți gândi de ea într-adevăr ca o întruchipare a unui coș de cumpărături. 57 00:03:24,390 --> 00:03:27,740 Locuri precum Amazon, evident, să vă puneți lucrurile într-un coș de cumpărături, 58 00:03:27,740 --> 00:03:32,230 dar HTTP, protocolul care alimentează Web, este apatrid 59 00:03:32,230 --> 00:03:34,230 în sensul că, atunci când vizitați un site Web, 60 00:03:34,230 --> 00:03:37,290 pentru cea mai mare parte nu aveți conexiune la rețea unele constante 61 00:03:37,290 --> 00:03:39,270 între browser-ul dvs. și serverul. 62 00:03:39,270 --> 00:03:42,190 De îndată ce ați descărcat HTML și JPEG și GIF-uri și toate cele care, 63 00:03:42,190 --> 00:03:48,200 conexiunea dispare și aveți doar o copie a HTML și fleacuri de la server. 64 00:03:48,200 --> 00:03:53,000 Dar dacă serverul vrea să-și amintească ceva despre tine, 65 00:03:53,000 --> 00:03:57,580 sarcina este pe server pentru a înregistra efectiv aceste informații. 66 00:03:57,580 --> 00:04:00,130 Și așa voi programator care au control asupra serverului 67 00:04:00,130 --> 00:04:04,400 poate pune aproape orice doriți în interiorul acestui tablou asociativ superglobale 68 00:04:04,400 --> 00:04:06,850 și va fi acolo data viitoare utilizatorul revine, 69 00:04:06,850 --> 00:04:12,070 fie că este vorba de minute sau chiar zile mai târziu, cu excepția cazului în care închideți fereastra browser-ului lor, 70 00:04:12,070 --> 00:04:14,360 la care SESIUNEA punctul dispare. 71 00:04:14,360 --> 00:04:17,779 Deci e de depozitare efemer, e non-persistente, si este menit sa plece 72 00:04:17,779 --> 00:04:22,360 de îndată ce utilizatorul închide browser-ul lor - nu doar că fila, de multe ori browser-ului, 73 00:04:22,360 --> 00:04:24,930 astfel de logare în mod eficient de utilizare afară. 74 00:04:24,930 --> 00:04:28,000 Deci, cum este chestia asta, de fapt puse în aplicare? 75 00:04:28,000 --> 00:04:31,360 Să aruncăm o privire rapidă la un exemplu simplu, ne-am uitat putin pe vineri. 76 00:04:31,360 --> 00:04:33,340 Pentru cei nefamiliarizati, a fost la fel de simplu ca asta. 77 00:04:33,340 --> 00:04:35,910 Aceasta este o pagină de web al cărui unic scop în viață este să-mi spui 78 00:04:35,910 --> 00:04:38,000 de câte ori am vizitat această pagină. 79 00:04:38,000 --> 00:04:41,670 Aceasta este prima dată aici, luni, că l-am vizitat, așa se spune de 0 ori. 80 00:04:41,670 --> 00:04:46,940 >> Dar dacă am începe să reîncărcați această pagină, se spune o dată, 2, 3, 4, 5, 81 00:04:46,940 --> 00:04:49,800 și în cele din urmă acest lucru va păstra doar pe numărare sus, sus, sus, sus, sus 82 00:04:49,800 --> 00:04:53,130 pentru fiecare dată când am de fapt, faceți clic pe Reîncarcă pe ea. 83 00:04:53,130 --> 00:04:58,830 Deci, cum este acest lucru? Lasă-mă să merg în interiorul acestui fișier numit counter.php. 84 00:04:58,830 --> 00:05:02,490 Partea de sus a acesteia este toate comentariile albastru, dar partea interesantă este aici. 85 00:05:02,490 --> 00:05:06,670 Pe linia 13 noi numim acest lucru session_start funcție, 86 00:05:06,670 --> 00:05:09,600 și că este literalmente tot ce trebuie să faceți în cazul în care doriți să aveți acces la 87 00:05:09,600 --> 00:05:13,610 în acest superglobale special, numit $ _SESSION. 88 00:05:13,610 --> 00:05:17,430 Asta face totul posibil, și vom vedea într-un moment cum e posibil. 89 00:05:17,430 --> 00:05:20,350 În linia 16 Notă ceea ce fac. 90 00:05:20,350 --> 00:05:25,960 Dacă cheie, numit contra - cu alte cuvinte, valoarea indicelui - "contra" 91 00:05:25,960 --> 00:05:32,310 există în interiorul acestei matrice numită sesiune, atunci ce fac cu el în linia de mai jos? 92 00:05:32,310 --> 00:05:36,650 Ce este linia de 18 faci? 93 00:05:36,650 --> 00:05:40,360 >> [Răspuns studentul nu pot fi auzite] Ce-i asta? [Elev] Depozitarea valoarea. Bine. 94 00:05:40,360 --> 00:05:45,800 Este stocarea valoarea care este în sesiune, chiar acum într-o nouă variabilă locală temporară, 95 00:05:45,800 --> 00:05:48,250 $ Contor în toate litere mici. 96 00:05:48,250 --> 00:05:50,770 Observați că PHP este deja a fi un pic leneș aici. 97 00:05:50,770 --> 00:05:55,550 Observați că nu avem nici o mențiune de int sau float sau string sau ceva de genul asta 98 00:05:55,550 --> 00:06:00,480 deoarece PHP este slab tastat, care nu trebuie să specificați tipul unei variabile, 99 00:06:00,480 --> 00:06:03,310 și, în acest caz, aici, eu nu am nici a declarat încă. 100 00:06:03,310 --> 00:06:08,980 Eu o declara in interiorul acestor acolade și, spre deosebire de C, aceasta este de fapt bine. 101 00:06:08,980 --> 00:06:13,800 Nu contează cât de profund imbricate o declarație de variabilă este în PHP - 102 00:06:13,800 --> 00:06:16,650 interiorul bretele cret, cret interiorul bretele și cum ar fi - 103 00:06:16,650 --> 00:06:21,230 se va în acel moment, în timp exista pentru restul programului, 104 00:06:21,230 --> 00:06:22,680 pentru o mai bună sau mai rău pentru. 105 00:06:22,680 --> 00:06:26,930 Deci, devine imediat la nivel mondial, cât mai curând l-ați defini ca facem noi aici. 106 00:06:26,930 --> 00:06:31,620 >> În caz contrar, dacă nu mi se pare că există ceva în superglobale SESIUNEA, 107 00:06:31,620 --> 00:06:34,680 Sunt inițializare aparent această variabilă contor la 0, 108 00:06:34,680 --> 00:06:37,580 astfel doar presupunând că utilizatorul nu a fost niciodată aici înainte. 109 00:06:37,580 --> 00:06:40,030 Și atunci acest curs este de incrementare contra cum? 110 00:06:40,030 --> 00:06:44,480 Mă actualizarea valorii care este în interiorul acestui tablou asociativ 111 00:06:44,480 --> 00:06:49,530 prin fixarea egal cu orice contor prezent este + 1. 112 00:06:49,530 --> 00:06:53,520 Dacă aș defilați în jos aici pentru a HTML a paginii, este de fapt destul de simplu. 113 00:06:53,520 --> 00:06:58,920 Tot ce am în corpul acestei pagini este: "Ați vizitat acest site ori așa-și-așa." 114 00:06:58,920 --> 00:07:00,350 Și aceasta este o construcție PHP. 115 00:07:00,350 --> 00:07:06,080 Dacă veți face <=, aceasta este echivalentă cu ceea ce efectiv funcția? 116 00:07:07,920 --> 00:07:12,600 E într-adevăr echivalente cu ceva de genul printf, pe care le-am vazut de multe ori în C, 117 00:07:12,600 --> 00:07:15,940 deși, așa cum poate știți deja de spec. în PSET 7, 118 00:07:15,940 --> 00:07:20,160 de imprimare este, de asemenea, o funcție care imprimă doar ceva, nu utilizează efectiv codurile de format, 119 00:07:20,160 --> 00:07:23,270 și vă pot spune de fapt, ecoul, de asemenea. 120 00:07:23,270 --> 00:07:27,460 Toate acestea sunt vreodată atât de ușor diferită, chiar dacă efectul net este în cele din urmă la fel. 121 00:07:27,460 --> 00:07:31,270 Deci, această utilizare a semnului egal este doar un fel de-un mod elegant de a face asta 122 00:07:31,270 --> 00:07:34,910 mai succint decât s-ar putea fi altfel în măsură să. 123 00:07:34,910 --> 00:07:38,370 Deci, asta e tot ce face acest site. Ea imprimă valoarea contorului. 124 00:07:38,370 --> 00:07:40,550 Cum se intampla de fapt toate astea? 125 00:07:40,550 --> 00:07:43,250 Poate vă amintiți o săptămână sau cam asa ceva în urmă, am început să caut sub capota 126 00:07:43,250 --> 00:07:47,910 la modul în care o pagină web funcționează prin folosirea acestui filă inspector. 127 00:07:47,910 --> 00:07:51,900 >> Chrome are acest atât în ​​versiunea pentru Mac, versiune de Windows, și chiar și versiunea Linux, 128 00:07:51,900 --> 00:07:59,510 și Firefox și IE dispun de mecanisme similare, prin care au acest depanatorul built-in 129 00:07:59,510 --> 00:08:01,400 interiorul browser-ului. 130 00:08:01,400 --> 00:08:03,040 Să aruncăm o privire la următorul. 131 00:08:03,040 --> 00:08:06,960 Avem o grămadă de file aici, și reamintesc că cel mai din stânga este Elemente, 132 00:08:06,960 --> 00:08:10,700 și nu contează cât de godawful HTML și JavaScript este într-o pagină, 133 00:08:10,700 --> 00:08:15,710 amintesc că, odată cu fila Elemente puteți naviga, de fapt, HTML ierarhic 134 00:08:15,710 --> 00:08:17,050 și frumos și îngrijit. 135 00:08:17,050 --> 00:08:19,370 Deci, dacă sunteți încercarea de a învăța de la un site web precum Google sau Facebook 136 00:08:19,370 --> 00:08:22,370 sau într-adevăr orice site, dau seama că ești, probabil, mai bine 137 00:08:22,370 --> 00:08:26,360 se uită la codul sursă în acest fel, spre deosebire de vizualizarea sursei prime, 138 00:08:26,360 --> 00:08:29,580 care poate fi un dezastru, așa cum am văzut mai ales pe site-ul Google. 139 00:08:29,580 --> 00:08:32,220 Deci, dacă am clic pe tab-ul în loc de rețea aici, 140 00:08:32,220 --> 00:08:34,830 Să vedem ce se întâmplă atunci când am vizitat această pagină. 141 00:08:34,830 --> 00:08:38,669 În primul rând permiteți-mi să ștergeți cache-ul meu. 142 00:08:38,669 --> 00:08:43,570 Am de gând să meargă în Setări în Chrome și apoi du-te la Istorie 143 00:08:43,570 --> 00:08:46,420 Goliți și apoi toate datele de navigare. 144 00:08:46,420 --> 00:08:48,170 S-ar putea fi folosite pentru a face acest lucru pentru alte scopuri, [râsete] 145 00:08:48,170 --> 00:08:51,990 dar atunci când vine vorba de site-urile în curs de dezvoltare, este de fapt util - 146 00:08:51,990 --> 00:08:55,980 dacă râzi știi. [Râsete] 147 00:08:55,980 --> 00:08:59,310 E de fapt foarte util atunci când în curs de dezvoltare site-uri web, deoarece realitatea este 148 00:08:59,310 --> 00:09:04,100 lucruri cum ar fi cookie-uri și lucruri, cum ar fi fișierele memorate în cache, fișiere HTML JavaScript cache 149 00:09:04,100 --> 00:09:06,390 poate deveni de fapt o mare durere de cap, pentru că, dacă pentru orice motiv 150 00:09:06,390 --> 00:09:11,500 browser-ul decide să cache unele fișiere și totuși ați făcut modificări în acest fișier de pe server 151 00:09:11,500 --> 00:09:14,670 dar browser-ul nu are într-adevăr a dat seama că fișierul a schimbat 152 00:09:14,670 --> 00:09:19,060 și, prin urmare, de fapt, nu-l re-descărcați chiar și atunci când faceți clic pe butonul Reload, 153 00:09:19,060 --> 00:09:23,210 una dintre modalitățile cele mai sigura de a face doar să vă asigurați vina nu este cu codul dvs., 154 00:09:23,210 --> 00:09:26,480 e cu comportamentul browser-ului, este de a merge aici in browser 155 00:09:26,480 --> 00:09:29,950 și șterge doar întreaga istorie, astfel că nu există nici o confuzie. 156 00:09:29,950 --> 00:09:33,210 >> Și apoi, dacă vrei cu adevărat să fie paranoic, demisia browser-ul, il repornesti, 157 00:09:33,210 --> 00:09:35,660 apoi asigurați-vă toate funcționează conform așteptărilor. 158 00:09:35,660 --> 00:09:38,820 Deci, pe scurt, cache de compensare este bun atunci când faci dezvoltare. 159 00:09:38,820 --> 00:09:40,690 Deci, aici avem fila Rețea. 160 00:09:40,690 --> 00:09:46,020 Am avut anterior vizitat site-ul de 9 ori, dar lasă-mă să merg mai departe acum și faceți clic pe Reîncărcare. 161 00:09:46,020 --> 00:09:47,500 Și m-am întors la 0. 162 00:09:47,500 --> 00:09:52,100 Să vedem de fapt cum se face că această superglobale sesiune este în curs de aplicare. 163 00:09:52,100 --> 00:09:55,990 Am de gând să faceți clic pe HTTP cerere 1, care a fost făcut, 164 00:09:55,990 --> 00:09:58,810 și fereastra de depanare permite să mă uit în interiorul acestuia. 165 00:09:58,810 --> 00:10:01,970 Aici am vedea doar răspunsul de la server, ceea ce nu este interesant. 166 00:10:01,970 --> 00:10:04,030 Am văzut acest lucru în orice număr de moduri. 167 00:10:04,030 --> 00:10:06,350 Dar ceea ce este interesant punct de vedere tehnic sunt anteturile. 168 00:10:06,350 --> 00:10:11,770 Dacă aș defilați în jos aici, și să se concentreze asupra anteturile cerere și faceți clic pe sursa de vedere, 169 00:10:11,770 --> 00:10:14,400 ce am de gând să văd este literalmente cererea HTTP 170 00:10:14,400 --> 00:10:17,250 care tocmai a trecut de la browser-ul meu la server, 171 00:10:17,250 --> 00:10:21,400 GET fiind cuvântul operativ și apoi / counter.php fiind numele fișierului, 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1 fiind doar versiunea de HTTP care browser-ul meu este folosind. 173 00:10:25,670 --> 00:10:31,070 Această linie este aici un memento pic din browser-ul la server ceea ce numele serverului este 174 00:10:31,070 --> 00:10:33,020 că vrea să vorbească. 175 00:10:33,020 --> 00:10:38,200 Și apoi restul de acest lucru este, uneori, interesant, dar nu sunt relevante acum. 176 00:10:38,200 --> 00:10:40,090 >> Acesta este doar un fel de curiozitate. 177 00:10:40,090 --> 00:10:43,530 Criptic, deși acest șir este, în orice moment browserul vizitează un site Web 178 00:10:43,530 --> 00:10:47,110 este informarea serverul ceea ce browser-ul pe care îl utilizați 179 00:10:47,110 --> 00:10:50,040 și ceea ce sistem de operare pe care îl utilizați și ce versiune acestora. 180 00:10:50,040 --> 00:10:52,650 Deci, dacă v-ați întrebat vreodată cum site-uri precum CNN și fleacuri 181 00:10:52,650 --> 00:10:56,860 Știi ce procentele sunt de utilizatorii de Mac pe utilizatorii de PC-uri Web,, 182 00:10:56,860 --> 00:11:00,820 Utilizatorii IE, utilizatorii Chrome și cum ar fi, e pentru ca toate browserele noastre 183 00:11:00,820 --> 00:11:04,300 spun fiecare singur site web acolo ceea ce suntem. 184 00:11:04,300 --> 00:11:07,410 Acesta nu conține în mod necesar informații de identificare personală, 185 00:11:07,410 --> 00:11:13,060 dar nu spun ce serverul adresa ta de IP este și ce browser-ul și sistemul de operare pe care îl utilizați. 186 00:11:13,060 --> 00:11:14,720 Deci, asta e în cazul în care această informație este. 187 00:11:14,720 --> 00:11:19,960 Dar ceea ce e mai interesant acum, când vine vorba de aceste sesiuni este antet de răspuns. 188 00:11:19,960 --> 00:11:22,530 Permiteți-mi să faceți clic pe vizualizarea sursă de lângă răspuns. 189 00:11:22,530 --> 00:11:24,590 Ce e interesant aici este câteva lucruri. 190 00:11:24,590 --> 00:11:27,580 1, ne-am întors un cod de stare 200. 191 00:11:27,580 --> 00:11:29,840 Noi nu vedem acest cod de stare, deoarece înseamnă că totul este bine. 192 00:11:29,840 --> 00:11:32,920 Aceasta înseamnă, literal, în contrast cu bine altceva. 193 00:11:32,920 --> 00:11:36,380 Ce este un număr de noi, uneori, vedem că e rău? [Elev] 404. 194 00:11:36,380 --> 00:11:39,860 404, fișier nu a fost găsit, 403 s-ar putea să fie deja la poticnire, 195 00:11:39,860 --> 00:11:43,660 care este interzisă, ceea ce înseamnă că ai uitat la ceva chmod, cel mai probabil. 196 00:11:43,660 --> 00:11:45,190 Și există o grămadă de alte persoane. 197 00:11:45,190 --> 00:11:47,760 >> Aici jos, asta este un pic nebun. 198 00:11:47,760 --> 00:11:52,340 Am scris de fapt doar acest fișier acum câteva minute prin lipirea-l în gedit. 199 00:11:52,340 --> 00:11:57,100 De ce a aceasta pagina expiră în 1981, înainte de a exista într-adevăr a fost o Web? 200 00:11:58,010 --> 00:12:00,730 Ce se întâmplă acolo? 201 00:12:00,730 --> 00:12:04,390 >> [Răspuns studentul nu pot fi auzite] stampila de timp. Dar de ce? 202 00:12:06,110 --> 00:12:09,120 E oarecum arbitrară, dar de fapt e folositor. 203 00:12:09,120 --> 00:12:15,500 Ce spune acest lucru este pentru a browser-ul meu este acest fisier PHP care l-ați solicitat a expirat deja. 204 00:12:15,500 --> 00:12:18,580 De fapt, aceasta a expirat de acum 30 de ani. 205 00:12:18,580 --> 00:12:20,260 Dar ce înseamnă asta cu adevărat? 206 00:12:20,260 --> 00:12:22,500 Aceasta înseamnă doar data viitoare utilizatorul vizitează această pagină, 207 00:12:22,500 --> 00:12:25,540 fie prin reîncărcare sau tastând URL-ul din bara de adrese, 208 00:12:25,540 --> 00:12:28,010 asigurați-vă că du-te și adu-o nouă copie a acestuia. 209 00:12:28,010 --> 00:12:30,840 Aceasta este un fel de exemplu de busting de cache, 210 00:12:30,840 --> 00:12:33,790 un cuvânt stupid care tocmai înseamnă a încerca să descurajeze browsere 211 00:12:33,790 --> 00:12:37,260 de fapt cache-ul HTML care a fost trimis de la un server 212 00:12:37,260 --> 00:12:41,490 astfel încât să nu a lovit accidental de reincarcare si vezi apoi aceeași versiune a fișierului. 213 00:12:41,490 --> 00:12:43,730 Vrei de fapt, server pentru a trimite o copie nouă. 214 00:12:43,730 --> 00:12:47,440 Deci, faptul că e 1981 înseamnă doar că asta e ceea ce aparatul este alegerea 215 00:12:47,440 --> 00:12:50,280 ca o dată arbitrară în trecut. 216 00:12:50,280 --> 00:12:53,380 Dar linia reală suculent este acum asta. 217 00:12:53,380 --> 00:12:57,550 Chiar înainte de a 50 esti, probabil, vag familiar cu cookie-uri. 218 00:12:57,550 --> 00:13:01,820 Ca de acum, în special în rândul celor mai puțin confortabil sau în între, 219 00:13:01,820 --> 00:13:04,120 ceea ce este un cookie in intelegerea ta chiar acum 220 00:13:04,120 --> 00:13:06,980 chiar dacă suntem pe cale de a face înțelegere mai tehnic? 221 00:13:08,150 --> 00:13:10,070 Ce este un cookie? Da. 222 00:13:10,070 --> 00:13:13,890 [Elev] Informatii despre utilizator, cum ar fi în cazul în care le-am scris numele de utilizator sau ceva de genul. 223 00:13:13,890 --> 00:13:17,370 >> Bine. E informații despre utilizator, indiferent dacă le-am scris numele de utilizator lor deja. 224 00:13:17,370 --> 00:13:21,190 Cookie-urile sunt o modalitate prin care serverele pot aminti ceva despre un utilizator. 225 00:13:21,190 --> 00:13:25,810 Și ce este cu adevărat un cookie este un fișier text sau o secvență de octeți 226 00:13:25,810 --> 00:13:28,340 care este plantat de serverul interiorul browser-ului, 227 00:13:28,340 --> 00:13:31,960 și în interiorul acelui fișier sau printre aceste octeți este un fel de identificator. 228 00:13:31,960 --> 00:13:35,640 Poate că e literalmente numele dvs. de utilizator, dar cel mai adesea e ceva mai criptic cu aspect 229 00:13:35,640 --> 00:13:43,700 ca acest lucru aici - bo8dal3ct și așa mai departe - acest șir alfanumeric foarte mare 230 00:13:43,700 --> 00:13:47,050 care este de fapt doar menit să fie un identificator unic pentru tine. 231 00:13:47,050 --> 00:13:49,790 Sau vă puteți gândi la ea ca la un fel de timbru mână virtuală. 232 00:13:49,790 --> 00:13:53,020 Dacă te duci la un club sau un parc de distracții, să vă amintiți că ați plătit efectiv 233 00:13:53,020 --> 00:13:55,850 și a plecat, au pus un autocolant pic de rosu pe mana ta de un anumit fel, 234 00:13:55,850 --> 00:13:59,270 reamintește și că oamenii de la ghișeu care le-ați plătit deja 235 00:13:59,270 --> 00:14:01,340 și puteți veni și pleca după cum te rog. 236 00:14:01,340 --> 00:14:04,250 Cookie-urile sunt un pic similare în spirit la asta. 237 00:14:04,250 --> 00:14:08,070 Prima dată când am vizitat acest site, așa cum am făcut-o doar după golirea memoriei cache mea, 238 00:14:08,070 --> 00:14:11,620 serverul de web, aparatul în acest caz, a pus o stampila pe mana mea 239 00:14:11,620 --> 00:14:15,030 al cărui nume este PHPSESSID, sesiune ID-ul, 240 00:14:15,030 --> 00:14:18,260 a căror valoare este acest șir alfanumeric foarte lung. 241 00:14:18,260 --> 00:14:22,470 >> Deci, asta e acum un fel de inscriptionate pe mâna mea, astfel încât data viitoare când l-am lovit reincarca 242 00:14:22,470 --> 00:14:25,230 sau vizitați manual această adresă URL într-un browser, 243 00:14:25,230 --> 00:14:29,230 browser-ul meu, prin definiție, de HTTP este de gând să prezinte ștampila mână 244 00:14:29,230 --> 00:14:31,940 din nou și din nou și din nou. 245 00:14:31,940 --> 00:14:34,550 Deci, chiar dacă serverul nu știe neapărat cine sunt eu, 246 00:14:34,550 --> 00:14:39,610 ei, cel puțin știu că eu sunt același utilizator sau, cel puțin, mai precis, același browser. 247 00:14:39,610 --> 00:14:45,660 Și astfel încât acesta este în cele din urmă modul în care este pusă în aplicare superglobale SESSION. 248 00:14:45,660 --> 00:14:51,200 Serverul nu are nici o idee cine sunteți atunci când revizitezi un site web pentru a doua sau a treia oară 249 00:14:51,200 --> 00:14:53,410 excepția cazului în care ați prezenta acest timbru mână. 250 00:14:53,410 --> 00:14:55,530 Și, de îndată ce vă prezentam că ștampila mână, 251 00:14:55,530 --> 00:14:59,370 serverul de web în esență, merge într-o bază de date mică proprie 252 00:14:59,370 --> 00:15:06,040 și controale, bine, am văzut doar ștampila mâna bo8dal3ct utilizator și așa mai departe. 253 00:15:06,040 --> 00:15:09,850 Lasă-mă să văd ce informații programator a stocat 254 00:15:09,850 --> 00:15:12,380 interiorul superglobale despre acest utilizator, 255 00:15:12,380 --> 00:15:17,000 și apoi să-mi asigurați-vă că aceste date sunt din nou în interiorul SESIUNEA superglobale 256 00:15:17,000 --> 00:15:19,830 astfel încât programator poate re-accesa datele 257 00:15:19,830 --> 00:15:23,360 chiar dacă acesta a fost stabilit câteva minute sau ore în urmă. 258 00:15:23,360 --> 00:15:26,150 Deci, în alte cuvinte, cookie-uri, care au primit un rap rău de ceva timp 259 00:15:26,150 --> 00:15:29,990 din cauza nesiguranta din browsere și pot încălca într-adevăr de confidențialitate și toate astea, 260 00:15:29,990 --> 00:15:31,900 de fapt, ei au o mare utilitate, deoarece, fără a le 261 00:15:31,900 --> 00:15:36,110 v-ar fi în mod constant să vă conectați la fiecare pagina de Facebook pe care le vizitați 262 00:15:36,110 --> 00:15:40,680 sau fiecare e-mail Gmail-ai citit, dacă browser-ul nu avea un mod de a aminti 263 00:15:40,680 --> 00:15:43,320 care le-ați deja autentificat. 264 00:15:43,320 --> 00:15:46,640 >> Deci, în acest fel, cookie-urile sunt trimise înainte și înapoi pe firul. 265 00:15:46,640 --> 00:15:52,470 O altă curiozitate despre cookie-uri, mai ales aici, este faptul că acest lucru este complet în text clar. 266 00:15:52,470 --> 00:15:54,930 Nu e nici o criptare se întâmplă aici un fel de, 267 00:15:54,930 --> 00:15:57,240 și într-adevăr, eu sunt, folosind HTTP, la acest moment. 268 00:15:57,240 --> 00:16:00,890 Unul din momentele noastre favorite în CS50, care este de acum 2 ani în urmă, 269 00:16:00,890 --> 00:16:04,750 a fost în jurul valorii de timp un instrument numit Firesheep a ieșit. 270 00:16:04,750 --> 00:16:08,320 Aceasta a fost o bucată de software gratuit, care a fost făcută de un cercetator de securitate 271 00:16:08,320 --> 00:16:13,250 ca un apel de trezire pentru comunitatea să spună cât de cumplit de pus în aplicare 272 00:16:13,250 --> 00:16:17,900 anumite mecanisme de autentificare pe Web au fost. 273 00:16:17,900 --> 00:16:22,880 Deci, de ceva timp, Facebook a fost aproape în întregime de peste HTTP, HTTPS nu. 274 00:16:22,880 --> 00:16:25,640 Și chiar dacă nu aveți nici o idee cât de cripto funcționează, S este securizat 275 00:16:25,640 --> 00:16:27,950 așa că înseamnă că e cel puțin unele criptare implicate. 276 00:16:27,950 --> 00:16:30,610 Facebook a folosit pentru a cripta nume de utilizator și parole, 277 00:16:30,610 --> 00:16:33,560 dar de îndată ce te-ai uitat la dumneavoastră sau pokes mesajele dvs. sau furaje de știri, 278 00:16:33,560 --> 00:16:35,360 toate că a fost necriptate. 279 00:16:35,360 --> 00:16:37,870 Deci, a fost până la Gmail doar un an sau 2 în urmă. 280 00:16:37,870 --> 00:16:41,100 Orice moment autentificat, da, au folosit criptare securizată, 281 00:16:41,100 --> 00:16:44,300 dar, ulterior, nu au făcut. Și de ce ar putea fi? 282 00:16:44,300 --> 00:16:49,210 De ce să nu folosim doar criptografia tot timpul în cazuri de utilizare, cum ar fi acest lucru? 283 00:16:49,210 --> 00:16:53,700 Ce-i asta? Cred că am auzit ceva. [Elev] Speed. 284 00:16:53,700 --> 00:16:56,250 Viteza, nu? Există mai multe moduri în jurul acest lucru. 285 00:16:56,250 --> 00:16:59,610 Dar daca ai doar un fel de gândesc logic, dacă ai ceva cripta, 286 00:16:59,610 --> 00:17:01,820 ce trebuie să faci cel puțin un pic de lucru mai mult. 287 00:17:01,820 --> 00:17:05,460 În PSET 2 când ați pus în aplicare Cezar sau Vigenere sau chiar Crack, 288 00:17:05,460 --> 00:17:07,760 imprimați doar un șir este relativ usor. 289 00:17:07,760 --> 00:17:12,040 Criptarea și apoi imprimați un șir de minim necesită un pic mai mult de lucru. 290 00:17:12,040 --> 00:17:14,520 >>  Pentru site-urile super-populare cum ar fi Google și Facebook, 291 00:17:14,520 --> 00:17:18,839 dacă aveți de a face mai mult de lucru pentru fiecare utilizator, pentru fiecare pagina web unice pe care le vizitează, 292 00:17:18,839 --> 00:17:20,520 care ia doar timp CPU mai mult. 293 00:17:20,520 --> 00:17:22,920 Și dacă ai nevoie de timp mai mult CPU, s-ar putea avea nevoie de mai multe servere, 294 00:17:22,920 --> 00:17:24,270 ceea ce înseamnă că s-ar putea avea nevoie de mai mulți bani. 295 00:17:24,270 --> 00:17:27,579 Și așa de mulți ani acest lucru doar într-adevăr nu a fost cea mai bună practică. 296 00:17:27,579 --> 00:17:31,440 Oamenii ar folosi criptarea SSL numai atunci când au nevoie pentru a. 297 00:17:31,440 --> 00:17:34,960 Dar sa dovedit, si ca acest individ cu Firesheep facut super-clar, 298 00:17:34,960 --> 00:17:37,920 atunci când voi, cei care sunt in prezent pe Facebook, chiar acum - 299 00:17:37,920 --> 00:17:39,880 Din curiozitate, să vedem dacă vă veți fess sus. 300 00:17:39,880 --> 00:17:42,620 Daca esti pe Facebook, chiar acum, în unele fila, chiar dacă nu e prim-plan, 301 00:17:42,620 --> 00:17:46,610 este URL HTTP sau HTTPS? 302 00:17:46,610 --> 00:17:50,560 [Mai multe] elevii S. S? [Râsete] 303 00:17:50,560 --> 00:17:55,510 Bine. Orice HTTP? Doar 1? Bine. 304 00:17:55,510 --> 00:17:58,940 Deci, noi toți putem hack cont de faptul că tipul de Facebook chiar acum. 305 00:17:58,940 --> 00:18:04,100 Pentru cea mai mare parte acest lucru a devenit activată în mod implicit, cel puțin în unele site-uri web. 306 00:18:04,100 --> 00:18:08,120 Și poveste lungă scurt, în cazul în care traficul web nu este criptat, 307 00:18:08,120 --> 00:18:12,960 nu numai HTML merge înainte și înapoi de-a lungul WiFis necriptate, 308 00:18:12,960 --> 00:18:16,760 asa ca lucruri cum ar fi cookie-uri du-te înainte și înapoi de-a lungul aer 309 00:18:16,760 --> 00:18:18,940 fără nici o formă de criptare. 310 00:18:18,940 --> 00:18:23,540 Deci, dacă aveți doar un pic de pricepere de programare sau un pic de Googling competențelor 311 00:18:23,540 --> 00:18:27,410 pentru a găsi software-ul gratuit care face acest lucru, tot ce trebuie sa faci este sa stai in Starbucks 312 00:18:27,410 --> 00:18:30,680 sau de a sta într-un aeroport în care există, în general, e necriptat WiFi 313 00:18:30,680 --> 00:18:36,070 și urmăriți doar pentru cuvinte cheie, cum ar fi Set-Cookie: sau PHPSESSID 314 00:18:36,070 --> 00:18:39,300 pentru că dacă aveți savvy tehnică pentru a viziona doar WiFi 315 00:18:39,300 --> 00:18:43,010 pentru toate biți care de-a lungul fluxului de aer pentru acest model, 316 00:18:43,010 --> 00:18:50,840 vă pot spune apoi că PHPSESSID tipului se întâmplă să fie bo8dal și așa mai departe. 317 00:18:50,840 --> 00:18:53,890 Și, apoi, din nou, dacă ești suficient de vedere tehnic savvy sau au instrumentul potrivit, 318 00:18:53,890 --> 00:18:58,890 puteți apoi doar reconfigura propriul browser pentru a începe prezentarea pe care ștampila mână 319 00:18:58,890 --> 00:19:05,030 la Facebook.com, și Facebook este doar de gând să se presupună că ești tipul ăla 320 00:19:05,030 --> 00:19:09,880 pentru că tot ce știu nu este cine sunteți, dar că aveți acest identificator unic. 321 00:19:09,880 --> 00:19:14,650 Deci, dacă ai furat ca identificator unic și îl prezintă la serverul de web ca propriul dvs., 322 00:19:14,650 --> 00:19:16,860 acestea sunt doar de gând să-ți arăt că hrana pentru animale persoană noutăți 323 00:19:16,860 --> 00:19:18,980 sau că persoane mesaje sau pokes. 324 00:19:18,980 --> 00:19:23,190 >> Și aș Google acum cum să activați HTTPS pentru Facebook, probabil. 325 00:19:23,190 --> 00:19:25,150 Dar aceasta este într-adevăr la fel de simplu ca asta. 326 00:19:25,150 --> 00:19:27,660 Și așa Facebook si Google și ca au ajuns foarte bine la acest lucru, 327 00:19:27,660 --> 00:19:31,870 dar ține un ochi tot mai multe site-uri web pentru orice pe care le vizitați, care nu utilizează HTTP 328 00:19:31,870 --> 00:19:35,020 și au un fel de informații sensibile pe ele, 329 00:19:35,020 --> 00:19:37,490 fie că este vorba financiare sau personale sau plac. 330 00:19:37,490 --> 00:19:43,180 În cazul în care nu utilizați acest lucru, destul de posibil ca aceasta poate cookie-urile să fie foarte ușor de furat 331 00:19:43,180 --> 00:19:46,270 și apoi forjate, și că este exact ceea ce a făcut Firesheep. 332 00:19:46,270 --> 00:19:48,250 Tu nu trebuie sa fie un programator. 333 00:19:48,250 --> 00:19:51,680 Tot ce trebuia să faci era au o conexiune la Internet, descarcati acest instrument gratuit, 334 00:19:51,680 --> 00:19:56,490 și ce-ar face este autentifică și apoi vă va arăta numele Facebook 335 00:19:56,490 --> 00:20:00,170 toată lumea de la Sanders, în această demonstrație special, în jurul valorii de tine 336 00:20:00,170 --> 00:20:03,260 și tot ce trebuia să fac era faceți clic pe numele lor și software-ul automatizat procesul 337 00:20:03,260 --> 00:20:05,970 de sniffing că cookie, prezentându-l pe Facebook ca propriul dvs., 338 00:20:05,970 --> 00:20:07,990 și, voila, sunteți logat 339 00:20:07,990 --> 00:20:11,190 Deci, acesta este un alt una dintre cele "nu face asta" oficial. 340 00:20:11,190 --> 00:20:14,660 Dacă aveți rețeaua de propria casă și doriți să drege, prin toate mijloacele, 341 00:20:14,660 --> 00:20:17,530 dar dau seama acest lucru nu trec linia de pe un mediu universitar. 342 00:20:17,530 --> 00:20:20,030 >> Dar obiectivul aici este într-adevăr să subliniez, nu cum să facă acest lucru 343 00:20:20,030 --> 00:20:22,320 dar cum să-și apere împotriva acestor tipuri de lucruri. 344 00:20:22,320 --> 00:20:26,180 Și soluția banală aici, chiar dacă în sine este greșită, 345 00:20:26,180 --> 00:20:31,360 este de a reduce într-adevăr utilizarea oricăror site-uri care nu sunt în mod constant folosind HTTPS. 346 00:20:31,360 --> 00:20:34,520 Deci, site-uri ca Facebook si Google au din ce în ce căsuțele 347 00:20:34,520 --> 00:20:36,200 în cazul în care vă puteți înscrie pentru acest tip de lucru, 348 00:20:36,200 --> 00:20:40,000 și băncile au avut de ani de zile aceasta pentru motive similare. 349 00:20:40,000 --> 00:20:43,580 Deci, doar un pic de un factor de teamă, dacă putem. Dar asta e într-o coajă de nucă. 350 00:20:43,580 --> 00:20:46,420 Acesta este modul în care un server amintește cine ești. 351 00:20:46,420 --> 00:20:50,760 Și, de îndată ce acestea pot aminti cine sunteți, ele pot aminti nimic despre tine 352 00:20:50,760 --> 00:20:56,140 că programatorul a stocat în interiorul acestei superglobale special, numit $ _SESSION. 353 00:20:56,140 --> 00:20:59,750 Și pentru PSET 7 suntem o folosesc doar pentru a trivial aduc aminte de un int, 354 00:20:59,750 --> 00:21:02,260 și anume ID-ul unic al utilizatorului care a autentificat, 355 00:21:02,260 --> 00:21:05,880 astfel încât să știe că am fost acolo înainte. 356 00:21:05,880 --> 00:21:12,450 Orice întrebări, apoi pe sesiuni sau cookie-uri sau similare? 357 00:21:12,450 --> 00:21:15,130 Firesheep nu funcționează la fel de bine mai, 358 00:21:15,130 --> 00:21:18,310 și va trebui să puneți computerul într-un mod special de promiscuitate 359 00:21:18,310 --> 00:21:20,700 deci tu esti de fapt de ascultare pentru traficul în afară de voi înșivă. 360 00:21:20,700 --> 00:21:23,940 Deci, dacă sunteți descărcarea în prezent Firesheep, dat seama că nu e chiar atât de ușor 361 00:21:23,940 --> 00:21:26,850 așa cum a fost odata pentru a demonstra. 362 00:21:26,850 --> 00:21:29,070 Bine. Și nu o fac în Sanders. Fă-o la domiciliu. 363 00:21:29,070 --> 00:21:30,890 Baze de date. 364 00:21:30,890 --> 00:21:33,580 Unul dintre lucrurile pe care le-am făcut în mod deliberat foarte PSET 7 365 00:21:33,580 --> 00:21:37,780 a fost vă oferim un tabel de baza de date eșantion pentru utilizatorii care are unele ID-uri de utilizator, 366 00:21:37,780 --> 00:21:41,020 unele nume de utilizator, parole criptate și unele aceasta. 367 00:21:41,020 --> 00:21:44,520 Și, după cum veți vedea, dacă nu ați făcut deja, ai de gând să aibă de a schimba masa un pic. 368 00:21:44,520 --> 00:21:47,710 Ai de gând să aibă de a adăuga unele cache-ul la fiecare dintre utilizatorii din acel tabel, 369 00:21:47,710 --> 00:21:51,130 și ai de gând să aibă de a adăuga un alt tabel istorie, un tabel de portofolii, 370 00:21:51,130 --> 00:21:53,310 sau sunați-l poate altceva. 371 00:21:53,310 --> 00:21:56,740 Dar, în ceea ce privește gândesc cum să fac asta, hai să deschidem acest instrument 372 00:21:56,740 --> 00:22:00,570 pe care am folosit vineri, dar daca nefamiliare, aparatul vine cu un instrument de 373 00:22:00,570 --> 00:22:04,680 numit phpMyAdmin, care este o coincidență scris în PHP, 374 00:22:04,680 --> 00:22:07,950 dar scopul său în viață, după ce am logați aici jharvard cu Crimson, 375 00:22:07,950 --> 00:22:15,160 este să-mi dea un mod user-friendly a vizualizarea și modificarea baza mea de date. 376 00:22:15,160 --> 00:22:18,040 >> Baza de date pe care am rulează pe aparatul este numit MySQL. 377 00:22:18,040 --> 00:22:23,420 Acest lucru este foarte popular, și este o bază de date open source care este minunat de ușor de utilizat, 378 00:22:23,420 --> 00:22:25,620 mai ales cu fata se termină așa. 379 00:22:25,620 --> 00:22:29,350 Ceea ce acest instrument permite-mi să fac, de exemplu, este de împungere în jurul valorii de mese. 380 00:22:29,350 --> 00:22:30,890 Lasă-mă să mergeți mai departe și de a face acest lucru. 381 00:22:30,890 --> 00:22:36,580 Vineri am creat un tabel numit elevilor că a fost simplu super. 382 00:22:36,580 --> 00:22:41,680 Ea a avut 3 coloane - id, nume, e-mail și - și am introdus manual un cuplu de rânduri 383 00:22:41,680 --> 00:22:44,420 cum ar fi David și Mike în acest exemplu particular. 384 00:22:44,420 --> 00:22:47,290 Sa luam acest bit o mai departe, și să presupunem că vrem să ne amintim mai mult 385 00:22:47,290 --> 00:22:49,660 decât doar numele si e-mailul despre un utilizator. 386 00:22:49,660 --> 00:22:53,090 Lasă-mă să faceți clic pe Structura aici, la partea de sus. 387 00:22:53,090 --> 00:22:55,440 Și din nou, PSET vă îndrumă prin pașii necesare aici, 388 00:22:55,440 --> 00:22:58,150 așa că nu vă faceți griji în cazul în care o parte din aceasta este un pic rapid. 389 00:22:58,150 --> 00:22:59,690 Apoi, am de gând să faceți clic pe aici. 390 00:22:59,690 --> 00:23:02,270 Am de gând să adăugați un numar de coloane, după e-mail 391 00:23:02,270 --> 00:23:04,130 pentru că vreau să adăugați ceva de genul casa. 392 00:23:04,130 --> 00:23:06,640 Am uitat să înregistreze casa unui student. 393 00:23:06,640 --> 00:23:11,400 Lasă-mă să faceți clic pe Du-te, și acum avem acest formular care, din păcate, este un pic largă de la stânga la dreapta, 394 00:23:11,400 --> 00:23:13,710 dar am de gând pentru a apela numele acestei case domeniu, 395 00:23:13,710 --> 00:23:16,050 și apoi de tip I au acum de a alege. 396 00:23:16,050 --> 00:23:18,870 Așa că haideți să avem o discuție scurtă despre diferitele tipuri de MySQL 397 00:23:18,870 --> 00:23:24,590 deoarece întrucât PHP este slab tastat si un fel de joacă rapid și pierde cu tipuri, 398 00:23:24,590 --> 00:23:29,430 într-o bază de date special este important să utilizați de fapt, foarte tastarea in avantajul tau 399 00:23:29,430 --> 00:23:33,260 deoarece unul dintre MySQL lucruri și alte motoare de baze de date se poate face pentru tine 400 00:23:33,260 --> 00:23:37,910 se asigura că nu pune datele în baza de date false. 401 00:23:37,910 --> 00:23:41,850 Aceasta este un fel de eroare de verificare liber disponibil pentru tine. 402 00:23:41,850 --> 00:23:46,250 >> Pentru casa am, evident, nu vreau să fie un int, care este o valoare pe 32 de biți în MySQL. 403 00:23:46,250 --> 00:23:49,810 Am făcut vorbi pe scurt despre VARCHAR vineri, care vine de la o lungime variabila char. 404 00:23:49,810 --> 00:23:54,720 Ce este asta? Acest lucru vă permite să specificați că doriți ca acest lucru să fie un șir de un anumit fel. 405 00:23:54,720 --> 00:23:56,840 Tu nu știi cu adevărat în avans cât timp mai este, 406 00:23:56,840 --> 00:24:00,100 deci vom spune un nume arbitrar casă poate fi de 255 de caractere, 407 00:24:00,100 --> 00:24:04,190 dar ai putea merge cu 32, 64 - orice număr cu adevărat. 408 00:24:04,190 --> 00:24:10,700 Dar avantajul de a folosi un varchar peste un câmp denumit caracter este ceea ce? 409 00:24:10,700 --> 00:24:15,110 Doar intuitiv dacă aș defila în jos aici, observați e char si e varchar. 410 00:24:15,110 --> 00:24:19,520 Varchar este lungimea variabilă char; Char este o lungime fixă ​​char. 411 00:24:19,520 --> 00:24:24,730 Deci, bazat numai pe această definiție, ceea ce e avantaj sau un dezavantaj pentru fiecare dintre acestea? 412 00:24:24,730 --> 00:24:30,490 Cu alte cuvinte, cui îi pasă de distincție, sau de ce ar trebui să-ți pese? 413 00:24:31,660 --> 00:24:35,750 >> Da. [Elev] VARCHAR are o mai mare flexibilitate, dar ocupă mai multă memorie. 414 00:24:35,750 --> 00:24:40,730 Bine. Varchar preia mai mult - Să vedem. Nu sunt sigur dacă am auzit acest drept. 415 00:24:40,730 --> 00:24:42,360 Poți să spui că, o dată mai mult? 416 00:24:42,360 --> 00:24:45,850 [Elev] I-am spus varchar are, probabil, o mai mare flexibilitate, dar este nevoie de mai multa memorie. 417 00:24:45,850 --> 00:24:51,170 Interesant. Bine. Varchar, probabil, vă oferă o flexibilitate mai mare, dar ocupă mai multă memorie. 418 00:24:51,170 --> 00:24:53,220 Acesta din urmă nu este neapărat adevărat. 419 00:24:53,220 --> 00:24:56,290 Aceasta depinde de context, dar haideți să ne întoarcem la asta. 420 00:24:56,290 --> 00:25:03,230 >> [Răspuns studentul neauzit] Exact. 421 00:25:03,230 --> 00:25:06,900 Este de fapt cazul în care char va folosi de obicei mai multă memorie 422 00:25:06,900 --> 00:25:10,950 deoarece un char, la fel ca în C, este ca un șir de caractere, este o matrice de caractere. 423 00:25:10,950 --> 00:25:13,690 Deci, dacă spui un câmp char de lungime 255, 424 00:25:13,690 --> 00:25:16,910 baza de date este literalmente de gând să vă dau 255 de caractere. 425 00:25:16,910 --> 00:25:22,290 Și dacă casa se termină prin a fi caractere Mather și 6 totală, 426 00:25:22,290 --> 00:25:25,090 îți pierzi peste 200 de caractere. 427 00:25:25,090 --> 00:25:29,640 >> Deci, un varchar eficient numai utilizările ca multe personaje în care este necesar, 428 00:25:29,640 --> 00:25:31,590 până la o sumă maximă. 429 00:25:31,590 --> 00:25:35,470 Dar prețul pe care îl plătiți este de fapt performanta, potențial. 430 00:25:35,470 --> 00:25:39,740 Dacă știți dinainte că toate siruri de caractere dvs. vor fi 8 caractere - 431 00:25:39,740 --> 00:25:43,090 de exemplu, să presupunem că aveți nevoie de parole de lungime 8 - 432 00:25:43,090 --> 00:25:47,350 cu capul de a folosi un câmp char ocazia, dar nu de multe ori, 433 00:25:47,350 --> 00:25:51,100 este de a specifica o lungime fixa de ceva de genul o parolă 434 00:25:51,100 --> 00:25:53,300 deoarece acum baza de date poate fi chiar mai inteligent. 435 00:25:53,300 --> 00:25:58,160 În cazul în care știe că fiecare domeniu char, fiecare șir într-o coloană este aceeași lungime, 436 00:25:58,160 --> 00:26:00,780 te întorci caracteristica de acces aleatoriu. 437 00:26:00,780 --> 00:26:05,110 Puteți sări în jurul valorii de între diferitele domenii char în tabelul bazei de date 438 00:26:05,110 --> 00:26:07,940 deoarece cred că o bază de date ca rânduri și coloane. 439 00:26:07,940 --> 00:26:11,670 Deci, dacă fiecare din siruri de caractere este aceeași lungime, 440 00:26:11,670 --> 00:26:17,820 știți că primul octet este la 0, următoarea este la 8 octet 441 00:26:17,820 --> 00:26:20,240 și apoi 16 și apoi 24 și așa mai departe. 442 00:26:20,240 --> 00:26:24,500 Deci, dacă toate siruri de caractere sunt de aceeași lungime, puteți sări în jurul valorii de mult mai eficient. 443 00:26:24,500 --> 00:26:26,710 , Astfel că poate fi un beneficiu în termeni de performanță, 444 00:26:26,710 --> 00:26:29,420 dar de obicei nu aveți luxul de a ști în avans, 445 00:26:29,420 --> 00:26:32,170 deci un varchar este calea de a merge. 446 00:26:32,170 --> 00:26:36,030 Aici e un alt detaliu care chiar a fugit în cele din urmă pe Facebook. 447 00:26:36,030 --> 00:26:39,670 Ints sunt mari, iar noi un fel de ele utilizați în mod implicit în orice moment ne dorim un număr, 448 00:26:39,670 --> 00:26:41,750 dar e doar 32 de biți. 449 00:26:41,750 --> 00:26:46,210 >> Și chiar dacă Facebook nu are destul de 4 miliarde utilizatori acum, 450 00:26:46,210 --> 00:26:48,680 există cu siguranță unele persoane de acolo cu mai multe conturi 451 00:26:48,680 --> 00:26:50,960 sau conturile care au fost deschise și apoi închis, 452 00:26:50,960 --> 00:26:55,130 și așa mai departe Facebook se cred cu câțiva ani în urmă a trebuit să tranziția de la int 453 00:26:55,130 --> 00:27:00,010 la, după cum este numit pe bună dreptate, bigint, care este la doar 64 de biți în loc. 454 00:27:00,010 --> 00:27:02,230 Deci, aceasta este de asemenea o decizie de design. 455 00:27:02,230 --> 00:27:06,570 Te-ar fi uimitor de norocos dacă proiectul dumneavoastră finală se transformă pornire, 456 00:27:06,570 --> 00:27:10,010 are 4 miliarde de euro și 1 utilizatori, da sau de a lua, 457 00:27:10,010 --> 00:27:13,200 caz în care utilizarea Ints ar putea fi un pic miop. 458 00:27:13,200 --> 00:27:16,230 Dar, în realitate, tabelul utilizatorii este, probabil, bine cu Ints. 459 00:27:16,230 --> 00:27:19,340 Dar pentru ceva de genul PSET 7, cum ar fi masa de istorie, 460 00:27:19,340 --> 00:27:23,700 s-ar putea avea mii, milioane de utilizatori, dacă evolua în etrade.com. 461 00:27:23,700 --> 00:27:26,020 Deci, întrucât este posibil să nu aveți mai mult de 4 miliarde de utilizatori, 462 00:27:26,020 --> 00:27:30,070 acei utilizatori aveți ar putea avea mai mult de 4 miliarde de tranzacții în timp - 463 00:27:30,070 --> 00:27:33,200 cumpără și vinde și lucruri din istoria lor. 464 00:27:33,200 --> 00:27:38,090 Deci, dacă tu a face anticipa - din nou, acestea sunt probleme de bun pentru a avea, dacă aveți aceste date de mult - 465 00:27:38,090 --> 00:27:40,920 dacă faci anticipa date care depășesc dimensiunea unui int, 466 00:27:40,920 --> 00:27:47,740 merge cu ceva de genul BIGINT este o direcție care nu suficient de des adoptate de către designeri 467 00:27:47,740 --> 00:27:49,710 pentru că oamenii cifră care nu va fi o problemă, 468 00:27:49,710 --> 00:27:51,930 dar e atat de usor sa alegi ceva mai mare decât atât. 469 00:27:51,930 --> 00:27:55,380 Zecimal suntem folosind în PSET 7, care specifică precizia fixe 470 00:27:55,380 --> 00:27:59,840 astfel încât să puteți evita problemele care implică flotoare și duble și imobile și similare. 471 00:27:59,840 --> 00:28:02,440 >> Și apoi există unele alte domenii aici. Ne vom flutura mâinile noastre la ei într-o anumită măsură. 472 00:28:02,440 --> 00:28:07,270 Dar datele, orele au toate un format stabilit în MySQL, 473 00:28:07,270 --> 00:28:10,830 și avantajul de date de depozitare ca perioadele si nu varchars 474 00:28:10,830 --> 00:28:15,730 înseamnă că baza de date poate reformata de fapt, le în formate diferite, 475 00:28:15,730 --> 00:28:18,800 dacă un format de SUA sau în format european sau ca - oricum doriți - 476 00:28:18,800 --> 00:28:22,700 mult mai eficient decât în ​​cazul în care au fost doar câteva generice varchar. 477 00:28:22,700 --> 00:28:25,150 Și apoi există unele binar altă parte, VARBINARY, blobs. 478 00:28:25,150 --> 00:28:28,580 Acestea sunt obiecte binare mari, și puteți stoca, de asemenea, date binare 479 00:28:28,580 --> 00:28:30,750 precum și a datelor geometrice într-o bază de date. 480 00:28:30,750 --> 00:28:34,350 Dar pentru noi, vom pasa de obicei, despre Ints și varchars și similare. 481 00:28:34,350 --> 00:28:36,230 Să terminăm până acest exemplu cu casa. 482 00:28:36,230 --> 00:28:40,030 Casa-am de gând să spun arbitrar va fi 255 caractere. 483 00:28:40,030 --> 00:28:42,850 Atunci valoarea implicită am putea face acest lucru. 484 00:28:42,850 --> 00:28:47,440 Am putea pune în mod implicit în toată lumea Mather Casa, de exemplu. 485 00:28:47,440 --> 00:28:49,710 Asta e modul în care am putea preciza că baza de date 486 00:28:49,710 --> 00:28:52,460 ar trebui să se asigure că cineva are întotdeauna o valoare. Dar las asta să fie. 487 00:28:52,460 --> 00:28:55,270 De fapt, pentru cei care trăiesc în afara campusului, și nu într-o casă, 488 00:28:55,270 --> 00:28:59,590 Poate că, de fapt vreau să precizeze că valoarea implicită pentru casa este NULL, 489 00:28:59,590 --> 00:29:04,890 și apoi am nevoie pentru a verifica această casetă și spune bazei de date este în regulă dacă casa utilizatorului este NULL. 490 00:29:04,890 --> 00:29:07,270 >> Din nou, acest lucru este un alt mecanism de apărare puteți pune în aplicare 491 00:29:07,270 --> 00:29:10,590 astfel încât să nu trebuie nici măcar să-l pună în codul PHP în mod necesar. 492 00:29:10,590 --> 00:29:14,630 Baza de date va asigura că lucrurile sunt sau nu sunt NULL. 493 00:29:14,630 --> 00:29:17,310 Și apoi în cele din urmă, Atribute. 494 00:29:17,310 --> 00:29:18,920 Niciuna dintre acestea sunt cu adevărat relevante. 495 00:29:18,920 --> 00:29:22,880 Binar, nesemnat - nici unul dintre cei care sunt relevante pentru un varchar. 496 00:29:22,880 --> 00:29:24,220 Index. 497 00:29:24,220 --> 00:29:27,320 Nimeni nu știe sau să vă amintiți sau au o presupunere cu privire la ceea ce este un index 498 00:29:27,320 --> 00:29:29,510 pentru ceva de genul casa? 499 00:29:29,510 --> 00:29:35,240 Acest lucru prea este de fapt o decizie de design importantă și relativ ușor. 500 00:29:35,240 --> 00:29:39,200 Pentru cei care încă nu au văzut-o, vineri, am vorbit pe scurt despre cheile primare. 501 00:29:39,200 --> 00:29:43,240 Într-un tabel de bază de date, o cheie primară este câmpul sau coloana 502 00:29:43,240 --> 00:29:46,270 care identifică în mod unic rânduri în tabel. 503 00:29:46,270 --> 00:29:49,150 Deci, în tabelul actual avem acte de identitate, avem nume și e-mailuri. 504 00:29:49,150 --> 00:29:52,050 Care dintre aceștia este cel mai bun candidat pentru a fi o cheie primară, 505 00:29:52,050 --> 00:29:55,810 Rolul este de a identifica cărui unic rânduri? 506 00:29:55,810 --> 00:29:57,530 Probabil ID-ul. 507 00:29:57,530 --> 00:29:59,930 Se poate argumenta că, am putea folosi, de asemenea, și ce dacă? 508 00:29:59,930 --> 00:30:02,860 Poate ai putea folosi e-mail, deoarece, teoretic, este unic 509 00:30:02,860 --> 00:30:05,380 cu excepția cazului în oameni sunt schimbul de conturi de e-mail. 510 00:30:05,380 --> 00:30:09,980 Dar realitatea este că, dacă utilizați un ID numeric la fel ca 1234, 511 00:30:09,980 --> 00:30:14,170 asta e doar pe 32 de biți, în timp ce o adresă de e-mail ar putea fi acest bytes in mai multe sau acest octeți multe. 512 00:30:14,170 --> 00:30:16,610 Deci, în termeni de eficiență pentru identificatori unici, 513 00:30:16,610 --> 00:30:19,270 acesta tinde să fie bună practică doar de a utiliza un int 514 00:30:19,270 --> 00:30:23,090 chiar dacă aveți unele candidat șir pe care le-ar putea folosi, fără îndoială. 515 00:30:23,090 --> 00:30:26,760 >> Pentru ceva de genul casa, acest lucru nu ar trebui să fie o cheie primară 516 00:30:26,760 --> 00:30:30,770 deoarece atunci numai 1 persoană ar putea trăi în Mather și 1 persoană în Curier și cum ar fi. 517 00:30:30,770 --> 00:30:32,790 În mod similar, acest lucru nu ar trebui să fie unic. 518 00:30:32,790 --> 00:30:37,830 Diferența dintre primar și unic este faptul că, în cazul de masa noastră curentă, 519 00:30:37,830 --> 00:30:42,620 ID-ul ar fi primar, dar de e-mail nu este principal pentru motivul am mentionat - 520 00:30:42,620 --> 00:30:44,740 performanta - dar ar trebui să fie încă unic. 521 00:30:44,740 --> 00:30:47,200 Astfel încât să puteți aplica în continuare unicitatea fără a face cererea 522 00:30:47,200 --> 00:30:49,520 că este un domeniu extrem de important primar. 523 00:30:49,520 --> 00:30:52,610 Dar asta este destul de util: Indicele. 524 00:30:52,610 --> 00:30:56,180 Dacă știți în avans pentru proiectul final, pentru PSET 7, sau, în general, 525 00:30:56,180 --> 00:30:59,480 că această casă domeniu va fi ceva ce căuta pe un lot 526 00:30:59,480 --> 00:31:01,910 folosind cuvântul cheie, selectați sau altceva, 527 00:31:01,910 --> 00:31:05,180 atunci vă pot spune preventiv baza de date pentru a lucra magia 528 00:31:05,180 --> 00:31:10,510 și asigurați-vă că ea creează în memorie toate structurile de date necesare fantezie 529 00:31:10,510 --> 00:31:13,770 să urgenteze căutări bazate pe casa. 530 00:31:13,770 --> 00:31:17,860 Poate că va folosi un tabel hash, poate că va folosi o listă legat. 531 00:31:17,860 --> 00:31:21,260 În realitate, ea tinde să utilizeze un copac, de multe ori o structura numita B-arbore - 532 00:31:21,260 --> 00:31:24,090 nu un arbore binar, dar un B-arbore - care este un copac foarte larg 533 00:31:24,090 --> 00:31:27,370 pe care le-ar putea vedea într-o clasă ca CS124, structuri de date de clasă. 534 00:31:27,370 --> 00:31:31,800 Dar, în scurt, nu trebuie să vă faceți griji cu privire la faptul că atunci când se utilizează software-ul de baze de date inteligente. 535 00:31:31,800 --> 00:31:35,890 Vă pot spune doar, "Indicele acest domeniu, așa că am posibilitatea să căutați pe ea mult mai eficient." 536 00:31:35,890 --> 00:31:40,250 >> Dacă lăsați acest off și să încercați să căutați pentru toată lumea în baza de date, care locuiește în Mather, 537 00:31:40,250 --> 00:31:42,710 acesta va involua într căutare liniară. 538 00:31:42,710 --> 00:31:45,360 Și dacă ai trăi cu toții studenți 6000 în unele casa, 539 00:31:45,360 --> 00:31:47,900 ai de gând să caute întregul tabel pentru a găsi Matherites, 540 00:31:47,900 --> 00:31:52,190 întrucât, dacă spui Index, să sperăm că va fi ceva apropiat de o căutare logaritmică 541 00:31:52,190 --> 00:31:54,510 pentru a găsi acele tipuri de studenți. 542 00:31:54,510 --> 00:31:56,750 Aceasta este doar o caracteristică gratuit pentru a activa, 543 00:31:56,750 --> 00:31:59,530 chiar dacă aceasta nu vine la un pret de o anumită cantitate de spațiu. 544 00:31:59,530 --> 00:32:02,690 În cele din urmă, auto-increment, acest domeniu AI, 545 00:32:02,690 --> 00:32:05,830 ceea ce înseamnă doar daca este un int și nu doriți să aibă grijă pentru a incrementa singur 546 00:32:05,830 --> 00:32:07,570 de fiecare dată când există un utilizator nou, verificați dacă, 547 00:32:07,570 --> 00:32:11,910 și fiecare utilizator care se introduce va primi automat un ID nou. 548 00:32:11,910 --> 00:32:15,620 Să faceți clic pe Salvare, iar acum hai să găsim vina cu acest design. 549 00:32:15,620 --> 00:32:20,200 Dacă mă duc în Navigheaza, anunțul că atât Mike și casa mea este NULL. 550 00:32:20,200 --> 00:32:22,420 Eu pot folosi phpMyAdmin pentru a edita acest manual. 551 00:32:22,420 --> 00:32:25,110 Eu pot merge în aici și tip în Mather și apoi apăsați Enter, 552 00:32:25,110 --> 00:32:27,740 și observați acum tabel este diferită. 553 00:32:27,740 --> 00:32:29,270 Dar observați aș ​​putea face altceva la fel de bine. 554 00:32:29,270 --> 00:32:33,530 ID-ul lui David este 1, deci phpMyAdmin din nou, este doar un instrument administrativ; 555 00:32:33,530 --> 00:32:35,970 acest lucru nu este ceva utilizatorii dvs. sunt niciodată de gând să văd. 556 00:32:35,970 --> 00:32:38,810 Deci, dacă am clic pe tab-ul SQL loc până sus - 557 00:32:38,810 --> 00:32:41,450 și, din nou, PSET 7 va va introduce in mai multe din aceste interogări - 558 00:32:41,450 --> 00:32:45,260 Eu pot executa manual SQL structurat comanda Query Language 559 00:32:45,260 --> 00:32:56,410 Utilizatorii UPDATE SET casa = 'Pfoho' WHERE id = 1. 560 00:32:56,410 --> 00:33:00,830 Aceste interogări SQL sunt, frumos destul, destul de ușor de citit de la stânga la dreapta. 561 00:33:00,830 --> 00:33:04,350 Actualizați tabelul de utilizatori, setați câmpul chemat la casa Pfoho 562 00:33:04,350 --> 00:33:06,830 în cazul în care ID-ul de utilizator este 1. 563 00:33:06,830 --> 00:33:11,480 Sau aș putea face chiar și în cazul în care e-mail = 'malan@harvard.edu'. 564 00:33:11,480 --> 00:33:14,860 Atât timp cât acest unic mă identifică, care ar lucra la fel de bine. 565 00:33:14,860 --> 00:33:18,810 Dar ID-ul tinde să fie mai mare de performanță, așa că hai să facem asta. 566 00:33:18,810 --> 00:33:22,950 Să faceți clic pe Salt. Bine, lecture.users nu există. Care e eroarea mea? 567 00:33:22,950 --> 00:33:26,220 Care este de fapt tabelul chemat aici? 568 00:33:26,220 --> 00:33:28,770 Se numește studenților doar pentru că asta e ceea ce am făcut până aici, la stânga sus. 569 00:33:28,770 --> 00:33:31,860 Se numește studenți, nu utilizatori. Deci, faceți clic pe Du-te acum. 570 00:33:31,860 --> 00:33:34,330 1 rând afectate. Interogare a durat 0.01 secunde. 571 00:33:34,330 --> 00:33:38,010 Dacă aș faceți clic pe Răsfoire acum, acum trăiește în Malan Pfoho. 572 00:33:38,010 --> 00:33:42,070 Deci, asta e un alt gust de SQL, dar va PSET te plimbi printr-un pic mai mult de asta. 573 00:33:42,070 --> 00:33:44,710 >> E o decizie proastă am făcut deja aici. 574 00:33:44,710 --> 00:33:47,820 Aș spune că această bază de date de design este ineficientă 575 00:33:47,820 --> 00:33:51,650 deoarece mai multe persoane am adăuga la masa elevilor, 576 00:33:51,650 --> 00:33:54,730 mai mulți dintre noi am începe să adăugați, mai mult de TFS-am începe să adăugați, 577 00:33:54,730 --> 00:33:58,320 vom începe pentru a vedea ce disponibilizări în acest tabel? 578 00:34:00,840 --> 00:34:06,020 >> Da. [Elev] Văzând că este în studenți, suntem folosind aceeași [neauzit] 579 00:34:06,020 --> 00:34:07,360 Același - Corect, exact. 580 00:34:07,360 --> 00:34:10,400 Deci, dacă 400 de oameni trăiesc în Mather, da sau de a lua, 581 00:34:10,400 --> 00:34:15,000 în cele din urmă acest tabel va avea 400 de rânduri care spun "Mather," "Mather," 582 00:34:15,000 --> 00:34:16,590 "Mather," "Mather," "Mather." 583 00:34:16,590 --> 00:34:19,820 Ne pierdem toate aceste octeți, și există o serie de takeaways acolo. 584 00:34:19,820 --> 00:34:23,080 1, nu e cazul colțul nebun în cazul în care dacă cineva plătește o mulțime de bani 585 00:34:23,080 --> 00:34:25,949 și redenumește Mather, acum avem de a schimba masa noastră întreaga bază de date. 586 00:34:25,949 --> 00:34:29,730 Asta nu se va întâmpla de multe ori, cu toate că a fost o dată Pfoho numit de Nord Casa urmă cu 15 ani, 587 00:34:29,730 --> 00:34:32,310 așa se întâmplă. Dar asta nu e tot ce convingătoare. 588 00:34:32,310 --> 00:34:36,000 Mai convingătoare decât un caz de genul asta colț de care au nevoie pentru a actualiza datele în vrac 589 00:34:36,000 --> 00:34:41,150 pentru o bază de date este de ce stocarea MATHER din nou și din nou și din nou și din nou? 590 00:34:41,150 --> 00:34:43,020 Aceasta este o mulțime de caractere, 6 caractere. 591 00:34:43,020 --> 00:34:45,500 Nu putem face chiar mai mult de atât, în special pentru Pforzheimer? 592 00:34:45,500 --> 00:34:48,320 Desigur, putem face mai bine decât faptul că multe personaje. 593 00:34:48,320 --> 00:34:51,790 De ce nu asociază doar cu un identificator unic pentru fiecare casa 594 00:34:51,790 --> 00:34:55,020 și magazin de faptul că pentru fiecare utilizator? Deci, haideți să încercăm asta. 595 00:34:55,020 --> 00:35:00,610 , Mai degrabă decât doar să utilizați tabelul de studenți, lasă-mă să merg până la baza de date prelegerea mea de până aici, la stânga sus. 596 00:35:00,610 --> 00:35:02,600 Observați aici se spune Creare tabel. 597 00:35:02,600 --> 00:35:04,550 Lasă-mă să creați un tabel nou, denumit de case. 598 00:35:04,550 --> 00:35:08,880 Numărul de coloane va fi 2. Enter. 599 00:35:08,880 --> 00:35:11,200 Acum am 2 domenii. 600 00:35:11,200 --> 00:35:14,600 Am de gând să numim această denumire, și că va fi un varchar de lungime 255, 601 00:35:14,600 --> 00:35:18,770 >> dar asta e destul de arbitrar. Lasă-mă să pun asta aici jos, prin convenție,. 602 00:35:18,770 --> 00:35:22,840 Deci, pune un ID aici. Să-i dăm în fiecare casă un identificator unic. 603 00:35:22,840 --> 00:35:25,360 Să-i dăm în fiecare casă un nume. 604 00:35:25,360 --> 00:35:30,980 Să se precizeze că identificatorul va fi nesemnate doar prin convenție, de a utiliza numai numere pozitive. 605 00:35:30,980 --> 00:35:35,020 Să mergem mai departe și să dea acest un auto-increment câmp pentru acum. 606 00:35:35,020 --> 00:35:38,160 Și nu avem nevoie de nimic altceva? 607 00:35:38,160 --> 00:35:41,010 Să mergem mai departe și faceți clic pe Salvare. 608 00:35:41,010 --> 00:35:42,480 Acum am un al doilea tabel. 609 00:35:42,480 --> 00:35:45,860 Observați ca o parte acest lucru este ușor criptic comandă SQL 610 00:35:45,860 --> 00:35:50,280 care le-ar fi trebuit să tastați manual în cazul în care nu utilizați un instrument administrativ ca phpMyAdmin. 611 00:35:50,280 --> 00:35:51,990 Deci, un alt motiv l-am folosi. 612 00:35:51,990 --> 00:35:55,480 E un fel minunat de util, deoarece pedagogic puteți să faceți clic în jurul valorii de 613 00:35:55,480 --> 00:36:01,050 și dau seama cum merg lucrurile doar prin copierea și lipirea ceea ce a făcut phpMyAdmin. 614 00:36:01,050 --> 00:36:04,150 Dar comanda CREATE TABLE este ceea ce a fost executat doar, și aici este masa mea. 615 00:36:04,150 --> 00:36:11,370 Lasă-mă să mergeți mai departe și de a folosi acum prime SQL, mai degrabă decât simplifica, făcând clic pe fila Inserare. 616 00:36:11,370 --> 00:36:15,040 Lasă-mă să-mi INSERT INTO case, 617 00:36:15,040 --> 00:36:22,230 și am de gând să spun numele casei este de gând să aibă o valoare de "Mather". 618 00:36:22,230 --> 00:36:24,790 Asta e tot. Această sintaxă este un pic mai criptic. 619 00:36:24,790 --> 00:36:26,660 Acesta este numele de domenii pe care vrem să inserați. 620 00:36:26,660 --> 00:36:30,390 Acestea sunt valorile pe care le doriți să le inserați în aceste domenii. Lasă-mă să faceți clic pe Salt. 621 00:36:30,390 --> 00:36:34,410 1 rând inserează a durat 0,02 secunde. Permiteți-mi să faceți clic pe Răsfoire acum. 622 00:36:34,410 --> 00:36:42,020 >> Observați dacă faceți clic pe Răsfoire, nu e Mather, a cărui identitate este de automatizare numărul 1. 623 00:36:42,020 --> 00:36:45,000 Lasă-mă să fac alta. Lasă-mă să intru în tab-ul SQL. 624 00:36:45,000 --> 00:36:52,950 INSERT INTO case. Numele de casa va avea o valoare de Pfoho și așa mai departe. 625 00:36:52,950 --> 00:36:56,350 Du-te. Și eu pot face asta din nou și din nou și din nou. 626 00:36:56,350 --> 00:36:59,470 Sau, dacă te plictisești folosind phpMyAdmin, puteți folosi doar fila Inserare 627 00:36:59,470 --> 00:37:01,000 și nu trebuie să tastați SQL prime. 628 00:37:01,000 --> 00:37:04,690 Puteți să-bang-ului pur și simplu l mai rapid prin dactilografiere, de exemplu, Curier, Enter, 629 00:37:04,690 --> 00:37:07,610 și acum, dacă ne faceți clic pe Răsfoire, există Curier, cu un ID de 3. 630 00:37:07,610 --> 00:37:09,920 Deci, asta este ceea ce înțelegem noi prin auto-increment. 631 00:37:09,920 --> 00:37:12,280 Dar acum trebuie sa repari ceva la elevi. 632 00:37:12,280 --> 00:37:16,240 În ceea ce elevii ar trebui să tipul de date al câmpului casei fi acum? 633 00:37:16,240 --> 00:37:19,450 Ar trebui să fie un int, nu? 634 00:37:19,450 --> 00:37:23,950 Deci, scopul aici este să țină afară, altfel cunoscut sub numele de normalizare, tabelele 635 00:37:23,950 --> 00:37:27,940 astfel încât să nu stocheze informațiile redundant în oricare dintre mesele mele. 636 00:37:27,940 --> 00:37:31,130 Și din nou, am fost pe calea aici este de gând să spun Mather, Mather, 637 00:37:31,130 --> 00:37:34,220 Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, ceea ce este foarte redundante 638 00:37:34,220 --> 00:37:36,240 în ceea ce privește risipa de caractere. 639 00:37:36,240 --> 00:37:40,820 Așa că lasă-mă să merg mai departe și să schimbe acest lucru prin clic pe Structura, 640 00:37:40,820 --> 00:37:44,620 și lasă-mă să mergeți mai departe și să verificați pe teren casa, faceți clic pe Modificare, 641 00:37:44,620 --> 00:37:46,990 și acum am de gând să schimbe acest lucru să fie un int. 642 00:37:46,990 --> 00:37:49,490 255 nu mai este relevant. 643 00:37:49,490 --> 00:37:54,010 Lasă-mă să merg mai departe și spun că e bine, dacă e încă NULL. Salvare. 644 00:37:54,010 --> 00:37:55,870 Acum, elevii de masă a fost modificat cu succes, 645 00:37:55,870 --> 00:37:59,090 și observați din nou, casa este un int. 646 00:37:59,090 --> 00:38:02,220 Ca o paranteza, ignora numărul în paranteze atunci când vine vorba de Ints. 647 00:38:02,220 --> 00:38:03,770 >> Acest lucru este pentru motive moștenite. 648 00:38:03,770 --> 00:38:06,920 Înapoi în ziua în care nu ai avea GUI, ai avut în schimb un mediu de linie de comandă, 649 00:38:06,920 --> 00:38:11,580 de 10 și respectiv 11 de caractere specificate cât de multe ar trebui să arate 650 00:38:11,580 --> 00:38:13,950 în fereastra de terminal pentru a afișa câmpurile de fapt. 651 00:38:13,950 --> 00:38:19,150 Ea nu are nimic de-a face cu o lungime pic de câmp real, asa ca vom ignora doar că pentru moment. 652 00:38:19,150 --> 00:38:20,990 Acum trebuie să merg în acest tabel. 653 00:38:20,990 --> 00:38:24,610 Și dacă David locuieste in Mather, casa nu ar trebui să fie 0, 654 00:38:24,610 --> 00:38:27,350 care este o int valoare implicită cea mai apropiată de NULL. 655 00:38:27,350 --> 00:38:29,810 El ar trebui să trăiască în casă 1. 656 00:38:29,810 --> 00:38:36,870 Să spunem că trăiește arbitrar Mike in Pfoho, astfel încât numărul casei 2. 657 00:38:36,870 --> 00:38:40,160 Acum, masa mea arata un pic mai criptic. 658 00:38:40,160 --> 00:38:41,960 Dar ia în considerare eficiența. 659 00:38:41,960 --> 00:38:44,860 Sunt folosind acum doar 32 de biți pentru a identifica casa, 660 00:38:44,860 --> 00:38:49,530 ceea ce înseamnă că e doar 1 definiția canonică a casa mea Mather si Pfoho 661 00:38:49,530 --> 00:38:52,090 și că e în tabelul case. 662 00:38:52,090 --> 00:38:55,880 Deci, dacă vreau să se alăture acum, aceste tabele, cred că în felul acesta. 663 00:38:55,880 --> 00:39:01,980 Aici am masa mea studenți, precum și pe partea dreaptă există aceste numere, 1 și 2. 664 00:39:01,980 --> 00:39:04,180 1 este Mather, 2 este Pfoho. 665 00:39:04,180 --> 00:39:08,580 Avem acele aceleași numere din acest alt tabel, care este numit de case, 666 00:39:08,580 --> 00:39:11,020 1 și 2 și 3 pentru cele 3 case. 667 00:39:11,020 --> 00:39:14,990 Ceea ce am acum doriți să faceți este să aibă abilitatea de a codul, PHP și SQL, 668 00:39:14,990 --> 00:39:18,800 pentru a sorta din aceste tabele se reunească, în cazul în care în cazul în care acestea sunt studenti, iar acestea sunt casele, 669 00:39:18,800 --> 00:39:22,050 vrem să combine într-un fel, astfel încât, 1 linii cu 1, 670 00:39:22,050 --> 00:39:25,670 2 linii de până la 2, și astfel încât să ne putem da seama unde David 671 00:39:25,670 --> 00:39:28,000 și în cazul în care Mike și în cazul în care toată lumea trăiește. 672 00:39:28,000 --> 00:39:31,850 Pentru a face acest lucru, putem executa o interogare SQL ca următorul. 673 00:39:31,850 --> 00:39:40,470 SELECT * FROM studenti ÎNSCRIEȚI case ON - 674 00:39:40,470 --> 00:39:43,000 Și acum ce domenii vrem să adere la? 675 00:39:43,000 --> 00:39:49,520 Deci, students.house = houses.id. 676 00:39:49,520 --> 00:39:54,150 >> Un pic de criptic, dar această parte înseamnă a crea literalmente un tabel nou temporar 677 00:39:54,150 --> 00:39:56,690 asta e rezultatul de a se alătura studenți și case. 678 00:39:56,690 --> 00:40:00,340 Și cum vrei să combine sfaturi de degetele mele aici? 679 00:40:00,340 --> 00:40:05,280 Setați câmpul "casa egal la casele" studenților câmpul ID. 680 00:40:05,280 --> 00:40:10,220 Și dacă eu acum faceți clic pe Start, mă întorc exact ceea ce am sperat sa. 681 00:40:10,220 --> 00:40:15,890 David este în Mather, Mike este în Pfoho, și văd, de asemenea, identificatorii unici. 682 00:40:15,890 --> 00:40:18,640 Dar ideea e ca acum am un tabel complet. 683 00:40:18,640 --> 00:40:23,020 Și astfel Takeaway aici pentru PSET 7 sau într-adevăr pentru proiectul final: 684 00:40:23,020 --> 00:40:25,830 Dacă găsiți că te stoca orice bucată de informație redundant, 685 00:40:25,830 --> 00:40:28,850 indiferent dacă este o casă, poate e un oraș, de stat, și ZIP 686 00:40:28,850 --> 00:40:32,050 în cazul în care ZIP poate de obicei, dar nu întotdeauna folosit ca un identificator unic, 687 00:40:32,050 --> 00:40:35,810 merg prin exercitarea mental și apoi cu ceva de genul phpMyAdmin 688 00:40:35,810 --> 00:40:40,660 de factoring faptul că datele comune, deoarece mai ales ca site-ul dvs. devine mai bine utilizate 689 00:40:40,660 --> 00:40:45,440 și mai popular, acest lucru este modul în care vă asigurați că totul este super rapid, 690 00:40:45,440 --> 00:40:51,930 prin acordarea baza de date ca indicii mai multe cu privire la unicitatea posibil. 691 00:40:51,930 --> 00:40:53,860 Asta a fost o foarte mult. 692 00:40:53,860 --> 00:40:59,010 Alte întrebări? Bine. Să luăm o pauză de 5 minute acolo și să se regrupeze. 693 00:41:01,600 --> 00:41:03,540 Bine. 694 00:41:03,540 --> 00:41:08,680 Următorul este un exemplu care a fost utilizat câțiva ani în urmă, când am luat CS161, 695 00:41:08,680 --> 00:41:10,960 care este de operare clasa sistemelor de la colegiu 696 00:41:10,960 --> 00:41:15,160 care este cunoscut pentru a fi uimitor, dar o cantitate nebun de muncă, 697 00:41:15,160 --> 00:41:19,810 și se concentrează într-adevăr pe unele dintre problemele de nivel inferior care apar în sistemele de operare 698 00:41:19,810 --> 00:41:22,700 și, de asemenea, chiar și în lumea bazelor de date. 699 00:41:22,700 --> 00:41:27,040 >> Povestea care a fost spus de catre profesorul meu, Margo Seltzer, acest an a fost, după cum urmează. 700 00:41:27,040 --> 00:41:30,990 Să presupunem că aveți un frigider cămin pentru tine si colegul tău de cameră 701 00:41:30,990 --> 00:41:34,030 și atât de vă place foarte mult lapte. 702 00:41:34,030 --> 00:41:36,360 Deci, ai venit acasă de la clasa-o zi, colegul tău de cameră nu este încă acolo, 703 00:41:36,360 --> 00:41:39,650 vă deschideți frigiderul, si iti dai seama, "Oh, la naiba, nu mai avem lapte." 704 00:41:39,650 --> 00:41:42,070 Deci, ce închideți frigider, mergi peste drum la CVS 705 00:41:42,070 --> 00:41:45,830 și de a lua în liniile lungi pentru a cumpăra tot mai mult lapte de la CVS. 706 00:41:45,830 --> 00:41:48,470 Între timp, colegul tău de cameră vine acasă de la clasa lui sau ei, 707 00:41:48,470 --> 00:41:51,690 intră în cameră, se deschide frigiderul care doresc într-adevăr niște lapte, 708 00:41:51,690 --> 00:41:54,130 deschide frigider și, "La naiba, nici lapte." 709 00:41:54,130 --> 00:41:57,890 Deci, el sau ea se închide frigider, iese pe ușă, și se duce la SOA 710 00:41:57,890 --> 00:42:00,910 sau în altă parte decât în ​​cazul în care CVS nu sunteți de gând să ciocniți unul de altul 711 00:42:00,910 --> 00:42:02,790 să-mi iau niște lapte. 712 00:42:02,790 --> 00:42:04,820 Desigur, câteva minute mai târziu, amândoi te întorci acasă 713 00:42:04,820 --> 00:42:07,740 și acum aveți lapte de două ori la fel de mult ca tine, de fapt vrut. 714 00:42:07,740 --> 00:42:10,670 Și fiind lapte, acum o să meargă prost, deoarece iti place laptele 715 00:42:10,670 --> 00:42:14,200 dar tu nu place foarte mult lapte, așa că acum ai prea mult lapte, asa ca va acru. 716 00:42:14,200 --> 00:42:16,830 Aceasta este o situație îngrozitoare, îngrozitoare. 717 00:42:16,830 --> 00:42:22,920 Ce ar fi putut rezolva această situație dificilă, dacă erai acasă colega de camera mai întâi? Da. 718 00:42:22,920 --> 00:42:25,970 [Elev] Tu ar trebui să fi lăsat o notă. [Râsete] 719 00:42:25,970 --> 00:42:28,090 Bine. Tu ar trebui să au lăsat o notă. 720 00:42:28,090 --> 00:42:32,320 Tu ar fi trebuit să o notă post-it sau cum ai spune, "Gone pentru lapte," 721 00:42:32,320 --> 00:42:36,830 și apoi colegul tău de cameră conceptual ar fi fost blocat de a face, de fapt asta. 722 00:42:36,830 --> 00:42:38,010 Sau ai putea merge 1 pas mai departe. 723 00:42:38,010 --> 00:42:41,060 Ai putea bloca literalmente frigider cu un fel de lacăt, 724 00:42:41,060 --> 00:42:44,870 și acum colegul tău de cameră va fi literalmente blocat din frigider. 725 00:42:44,870 --> 00:42:48,520 Dacă ne generaliza înapoi la programare, 726 00:42:48,520 --> 00:42:51,610 vă puteți gândi aproape de frigider, un fel de variabilă sau o struct, 727 00:42:51,610 --> 00:42:53,500 un fel de containere de informații. 728 00:42:53,500 --> 00:42:58,290 Problema fundamental aici este că amândoi au fost permis să inspecteze 729 00:42:58,290 --> 00:43:02,370 sau de a citi starea de această structură de date, 730 00:43:02,370 --> 00:43:08,050 dar l-ați văzut și în momente diferite și totuși atât de tine luat o decizie 731 00:43:08,050 --> 00:43:11,920 bazată pe starea lumii de la acele momente diferite în timp. 732 00:43:11,920 --> 00:43:15,570 Deci, v-au blocat frigider, v-ar fi de cel puțin evitat colegul tău de cameră 733 00:43:15,570 --> 00:43:19,070 de a fi fost în măsură să inspecteze starea lumii, 734 00:43:19,070 --> 00:43:22,530 astfel încât el sau ea nu ar fi putut face aceeași decizie. 735 00:43:22,530 --> 00:43:25,780 Deci baze de date, după cum se vede, au această problemă în mod constant. 736 00:43:25,780 --> 00:43:31,050 >> Să vedem dacă putem construi un scenariu. 737 00:43:31,050 --> 00:43:34,310 Să presupunem că ești un fel de un tip rău și te duci la Bank of America 738 00:43:34,310 --> 00:43:37,950 sau unul dintre celelalte locuri în pătrat, care au o latură tânăr ATM-uri de o parte, 739 00:43:37,950 --> 00:43:41,200 și cumva ai dat seama cum a duplica un card de ATM-uri - nu tot atât de greu. 740 00:43:41,200 --> 00:43:42,730 E doar o bandă magnetică. 741 00:43:42,730 --> 00:43:45,180 Și ce doriți să încercați să faceți este să joci acest joc 742 00:43:45,180 --> 00:43:49,060 prin care ai pus 1 carte în 1 masina, o altă carte în altă mașină, 743 00:43:49,060 --> 00:43:51,980 și tu în esență, doriți să încercați pentru a retrage bani în același timp, 744 00:43:51,980 --> 00:43:54,930 deoarece ne imaginăm că povestea merge, după cum urmează. 745 00:43:54,930 --> 00:43:57,350 Mașina pe partea stângă ia cardul dvs. și PIN-ul, 746 00:43:57,350 --> 00:44:00,240 si apoi spui, "Dă-mi 100 de dolari." 747 00:44:00,240 --> 00:44:04,790 ATM este programat să facă mai întâi o selectați în baza de date sau echivalent - 748 00:44:04,790 --> 00:44:10,780 orice bază de date este folosirea - pentru a vedea acest utilizator are cel puțin 100 de dolari in contul lui sau a ei? 749 00:44:10,780 --> 00:44:16,180 Dacă este așa, atunci scuipe afară 100 dolari și 100 dolari scade de la echilibrul lor. 750 00:44:16,180 --> 00:44:20,470 Dar, desigur, în cazul în care există mai multe masini aici sau mai multe moduri de control al 751 00:44:20,470 --> 00:44:23,560 starea de acea lume, seif bancar, pentru a vedea cât de mult bani ai, 752 00:44:23,560 --> 00:44:26,780 să presupunem că doar din întâmplare mașina pe stânga și dreapta 753 00:44:26,780 --> 00:44:30,140 ambele cere această întrebare, la aproximativ același moment în timp. 754 00:44:30,140 --> 00:44:34,160 >> Și acest lucru se poate întâmpla cu siguranță. ATM-urile sunt computere aceste zile. 755 00:44:34,160 --> 00:44:37,670 Deci, dacă mașina pe partea stângă spune, "Da, ai cel puțin $ 100," 756 00:44:37,670 --> 00:44:42,150 Între timp mașina pe dreapta spune, "Da, ai cel puțin $ 100," 757 00:44:42,150 --> 00:44:47,420 apoi amândoi proceda pentru a termina programele lor și de fapt scuipa 100 dolari 758 00:44:47,420 --> 00:44:50,820 și spun, "ai avut Anterior 200 de dolari." 759 00:44:50,820 --> 00:44:54,890 "Lasă-mă să actualizeze variabila a fi acum 100 dolari rămas în cont." 760 00:44:54,890 --> 00:44:58,780 Dar dacă amândoi au verificat soldul contului dvs. și am constatat că e 200 dolari 761 00:44:58,780 --> 00:45:02,000 și ambele le fac, atunci matematica si spun 200 la 100, 762 00:45:02,000 --> 00:45:06,990 mașinile au scuipat potențial în două proiecte de lege 100 $ in fiecare mașină, 763 00:45:06,990 --> 00:45:11,360 dar le-am actualizat numai soldul contului suma intre a fi de $ 100. 764 00:45:11,360 --> 00:45:15,130 Cu alte cuvinte, ați scos 200 de dolari, dar pentru că inspectat starea lumii 765 00:45:15,130 --> 00:45:18,840 simultan și apoi a luat o decizie bazată pe această valoare, 766 00:45:18,840 --> 00:45:21,930 ei nu s-ar putea face în cele din urmă matematica corect. 767 00:45:21,930 --> 00:45:25,520 Deci, într-o situație prea bancă într-adevăr doriți să aveți un fel de blocare 768 00:45:25,520 --> 00:45:28,450 astfel încât, imediat ce v-ați verificat starea unor variabile 769 00:45:28,450 --> 00:45:31,220 asta e foarte important, la fel ca soldul contului dvs., 770 00:45:31,220 --> 00:45:36,070 nu lasa pe nimeni altcineva să ia decizii bazate pe faptul că până când se realizează faci lucrul tău, 771 00:45:36,070 --> 00:45:38,920 în cazul în care, în acest caz, vă aflați ATM pe partea stângă. 772 00:45:38,920 --> 00:45:41,160 Bloca toată lumea afară. 773 00:45:41,160 --> 00:45:44,650 Puteți obține de fapt, acest efect în câteva moduri diferite. 774 00:45:44,650 --> 00:45:48,660 >> Cel mai simplu mod de la MySQL este o linie de SQL care v-am dat 775 00:45:48,660 --> 00:45:52,030 în caietul de sarcini problema set care arata exact ca asta. 776 00:45:52,030 --> 00:45:57,420 Introduceți în tabelul - orice se numește - un id, un simbol, și o cotă de, un număr de acțiuni, 777 00:45:57,420 --> 00:45:59,660 următoarele valori, de exemplu. 778 00:45:59,660 --> 00:46:03,370 Dacă nu ați citit încă spec., acesta este un exemplu care implică cum te duci despre 779 00:46:03,370 --> 00:46:07,340 10 parts cumpararea de acest stoc penny pentru președinte Skroob, 780 00:46:07,340 --> 00:46:10,340 ID-ul de utilizator al cărui întâmplă să fie numărul 7? 781 00:46:10,340 --> 00:46:14,070 Acest lucru spune INSERT INTO tabel id-ul următor, simbol, și numărul de acțiuni 782 00:46:14,070 --> 00:46:18,200 de 7, "DVN.V", și 10. 783 00:46:18,200 --> 00:46:21,510 Dar - dar, dar, dar - a doua linie este unul important. 784 00:46:21,510 --> 00:46:26,310 ON dublu exemplar parts CHEIE UPDATE = parts + VALORI (actiuni). 785 00:46:26,310 --> 00:46:28,350 Deci, totul criptic-se uită la prima vedere. 786 00:46:28,350 --> 00:46:31,990 Dar faptul că această interogare SQL, chiar dacă se încadrează pe 2 linii, 787 00:46:31,990 --> 00:46:35,920 este de 1 interogare lung, aceasta înseamnă că este atomică 788 00:46:35,920 --> 00:46:41,000 în sensul că această interogare va fi fie executat împreună sau deloc. 789 00:46:41,000 --> 00:46:45,100 Și, prin definiție, de MySQL, care este modul în care au pus în aplicare această interogare. 790 00:46:45,100 --> 00:46:51,010 Acesta este, prin definiție, în manualul garantat de a executa toate la o dată sau deloc. 791 00:46:51,010 --> 00:46:54,020 Motivația pentru aceasta este, după cum urmează. 792 00:46:54,020 --> 00:46:58,540 În cazul în care, în acest caz, încercați să cumpere 10 parts de stoc, 793 00:46:58,540 --> 00:47:02,260 e un fel de poveste la fel ca laptele, e un fel de poveste la fel ca ATM-uri. 794 00:47:02,260 --> 00:47:04,970 >> Dacă ați făcut greșeala de a nu folosi acest sintaxă 795 00:47:04,970 --> 00:47:09,610 ci selectarea din baza de date pentru a vedea câte acțiuni ale acestui stoc penny 796 00:47:09,610 --> 00:47:13,750 Președintele are Skroob avea, și să presupunem că el are 10 acțiuni, 797 00:47:13,750 --> 00:47:19,330 și apoi unele fracțiune de secundă mai târziu, ai face apoi o declarație UPDATE, 798 00:47:19,330 --> 00:47:24,810 care este o altă declarație, în SQL care spune merge mai departe si se adauga 10 mai multe acțiuni 799 00:47:24,810 --> 00:47:28,700 la 10 sa actuală, astfel încât în ​​mod ideal, totalul este de 20, 800 00:47:28,700 --> 00:47:33,490 Problema este că în sistemele de baze de date de astăzi și pentru că în computere de astăzi 801 00:47:33,490 --> 00:47:35,990 aveți mai multe procesoare, miezuri multiple - 802 00:47:35,990 --> 00:47:38,920 cu alte cuvinte, computerele pot face literalmente mai multe lucruri în același timp - 803 00:47:38,920 --> 00:47:44,270 nu există nici o garanție că dvs. SELECT și UPDATE dumneavoastră în acest caz, 804 00:47:44,270 --> 00:47:46,150 sunt de gând să se întâmple spate în spate. 805 00:47:46,150 --> 00:47:49,140 Deci, un scenariu rău ar fi să faci SELECT 806 00:47:49,140 --> 00:47:51,670 pentru a vedea cât de multe acțiuni ale acestui stoc Penny are Skroob are, 807 00:47:51,670 --> 00:47:54,710 și apoi doar prin noroc altă interogare bază de date este executat - 808 00:47:54,710 --> 00:47:57,740 Poate Skroob în altă fereastră a browserului încearcă să cumpere 10 parts 809 00:47:57,740 --> 00:48:00,700 într-o altă fereastră cu totul, la fel ca ATM - 810 00:48:00,700 --> 00:48:05,410 și să presupunem că o altă interogare devine între SELECT și UPDATE. 811 00:48:05,410 --> 00:48:10,210 Acesta ar putea fi cazul în care Skroob pierde acum un numar de actiuni 812 00:48:10,210 --> 00:48:14,340 deoarece un alt proces de control este starea lumii sale, 813 00:48:14,340 --> 00:48:17,800 sau el devine mai multe acțiuni decât ar trebui să aibă. 814 00:48:17,800 --> 00:48:23,250 Nu vom intra în detaliile exact ceea ce aceste linii speciale poveste ar fi, 815 00:48:23,250 --> 00:48:28,380 dar ideea este, dacă aveți pentru a verifica o valoare variabile și apoi să ia o decizie, 816 00:48:28,380 --> 00:48:32,500 în cazul în care există un risc de altcineva face ceva în între aceste două situații, 817 00:48:32,500 --> 00:48:36,220 cum se poate întâmpla în sistemele multiprocesor, în sistemele multicore, 818 00:48:36,220 --> 00:48:41,220 calculatoare cu capacitatea de a face mai multe lucruri în același timp, se poate întâmpla lucruri rele 819 00:48:41,220 --> 00:48:44,530 cum ar fi conturile bancare fiind debitată incorect, cumpararea de lapte de două ori la fel de mult, 820 00:48:44,530 --> 00:48:46,730 sau, în acest caz, un număr greșit de acțiuni. 821 00:48:46,730 --> 00:48:48,370 Dar există o cale mai ușoară de a gândi despre asta. 822 00:48:48,370 --> 00:48:53,290 >> Se pare că SQL sprijină, de asemenea, dacă vă configurați tabelul în mod corect, 823 00:48:53,290 --> 00:48:56,920 ceva numit tranzacții, pe care aș argumenta este, de fapt chiar mai ușor de înțeles 824 00:48:56,920 --> 00:49:00,650 decât aceasta, dar nu este un 1-linie, asa ca este de fapt un pic mai implicat. 825 00:49:00,650 --> 00:49:04,960 Există literalmente o declarație, în SQL numit TRANZACTIE START. 826 00:49:04,960 --> 00:49:08,300 Doar ca acolo este SELECT, UPDATE, INSERT, DELETE, și să se alăture și o grămadă de alte persoane, 827 00:49:08,300 --> 00:49:10,970 există cuvinte cheie, cum ar fi TRANZACTIE START. 828 00:49:10,970 --> 00:49:13,560 Și ce-ai făcut, apoi, în contextul PSET 7 - 829 00:49:13,560 --> 00:49:17,270 nu trebuie să faci asta pentru PSET 7; este în mod explicit negat ca nu este necesar, 830 00:49:17,270 --> 00:49:18,830 dar pentru proiectele finale poate fi util - 831 00:49:18,830 --> 00:49:22,820 Dacă apelați o interogare de tranzacție START și apoi altă interogare 832 00:49:22,820 --> 00:49:25,620 și apoi altă interogare și apoi alta, alta, și alta, 833 00:49:25,620 --> 00:49:31,860 aceste interogări nu vor fi de fapt executat până când suna declarația SQL COMMIT, 834 00:49:31,860 --> 00:49:37,220 moment în care, fie că este vorba 2 declarații sau declarații 20, acestea vor fi executate toate dintr-o dată, 835 00:49:37,220 --> 00:49:42,770 ceea ce înseamnă că nimeni altcineva nu poate cumpăra accidental prea mult lapte sau de debit prea multi bani 836 00:49:42,770 --> 00:49:46,340 sau cumpara actiuni prea multe, deoarece toate întrebările dvs. vor executa 837 00:49:46,340 --> 00:49:48,410 spate în spate la spate în spate. 838 00:49:48,410 --> 00:49:51,580 Și acest lucru este extrem de important, mai ales atunci când faci ceva de genul asta. 839 00:49:51,580 --> 00:49:54,900 Acesta este un exemplu arbitrar care spune că haideți să actualizați contul bancar 840 00:49:54,900 --> 00:50:00,200 prin stabilirea unui echilibru egal cu soldul - $ 1000 în cazul în care numărul de cont este 2. 841 00:50:00,200 --> 00:50:04,260 Și apoi a doua declarație este acum să depună că 1000 dolari 842 00:50:04,260 --> 00:50:07,310 în al altcuiva cont bancar al cărui număr de cont este 1. 843 00:50:07,310 --> 00:50:10,400 >> Cu alte cuvinte, acesta este un exemplu perfect de unde doriți să vă asigurați că 844 00:50:10,400 --> 00:50:13,590 faptul că ambele aceste declarații se întâmple sau nu, la toate 845 00:50:13,590 --> 00:50:15,450 deoarece în caz contrar clientul va fi înșurubată 846 00:50:15,450 --> 00:50:17,670 și ai de gând să ia banii lor și să nu-l depună în altă parte, 847 00:50:17,670 --> 00:50:20,470 sau banca urmeaza sa se înșurubează în cazul în care ai de gând să depună banii 848 00:50:20,470 --> 00:50:23,140 dar nu scade de fapt din contul utilizatorului. 849 00:50:23,140 --> 00:50:25,810 Deci, vrei amândoi să execute împreună. 850 00:50:25,810 --> 00:50:29,140 Astfel, intră în tranzacțiile mondiale. 851 00:50:29,140 --> 00:50:31,360 Așa că e ceva de a păstra în partea din spate a mintea ta, 852 00:50:31,360 --> 00:50:34,710 nu atât de mult în scopul de doar un proiect final, 853 00:50:34,710 --> 00:50:36,700 dar dacă doriți să luați proiectul final undeva, 854 00:50:36,700 --> 00:50:39,040 dacă doriți să porniți o companie în jurul valorii de ea, 855 00:50:39,040 --> 00:50:41,270 dacă doriți să rezolvați problema un grup studentului în campus 856 00:50:41,270 --> 00:50:45,210 si de fapt au un site viu, activ, acestea sunt un fel de bug-uri subtile, care pot apărea 857 00:50:45,210 --> 00:50:49,480 daca nu crezi destul prin ceea ce se poate întâmpla în cazul în care 2 persoane 858 00:50:49,480 --> 00:50:54,190 încearcă să acceseze site-ul dvs. la literalmente același moment în timp, 859 00:50:54,190 --> 00:50:56,890 prin care interogările lor ar putea fi altfel întrețesut. 860 00:50:58,840 --> 00:51:01,420 >> Gata pentru unele JavaScript, un teaser al acestuia? 861 00:51:01,420 --> 00:51:04,320 Aceasta este limba noastră pentru ultima semestru. Bine. 862 00:51:04,320 --> 00:51:09,940 Din fericire, JavaScript pare foarte, foarte, foarte asemănătoare cu cele 2 limbi, C și PHP, 863 00:51:09,940 --> 00:51:11,140 am făcut până acum. 864 00:51:11,140 --> 00:51:14,340 Nu e nici JavaScript în PSET 7, dar este un instrument incredibil de util 865 00:51:14,340 --> 00:51:18,840 atunci când vine vorba de a face web-based proiecte finale sau de fapt doar programarea web, în ​​general, mai mult. 866 00:51:18,840 --> 00:51:20,950 Deci, o privire de ansamblu rapidă a ceva numit DOM. 867 00:51:20,950 --> 00:51:23,600 Aici este o pagina de web super-simplu, care de fapt doar spune salut, lume 868 00:51:23,600 --> 00:51:25,970 atât în ​​titlu și în organism. 869 00:51:25,970 --> 00:51:29,270 Așa cum a fost indentarea sugerând de ceva timp, 870 00:51:29,270 --> 00:51:31,380 există într-adevăr o ierarhie a paginilor web. 871 00:51:31,380 --> 00:51:34,220 Aș putea desena acest fragment de aceeași HTML ca un copac, 872 00:51:34,220 --> 00:51:37,470 gândire înapoi la discuțiile noastre de structuri de date în C, după cum urmează. 873 00:51:37,470 --> 00:51:40,710 Am niște nodul rădăcină special numit nod documentului, 874 00:51:40,710 --> 00:51:43,650 și vom vedea analog de acest lucru în JavaScript într-o clipă. 875 00:51:43,650 --> 00:51:48,330 Primul copil și singurul copil al că, în acest caz este tag-ul HTML. 876 00:51:48,330 --> 00:51:49,880 Nu e nici o mapare directă a DOCTYPE. 877 00:51:49,880 --> 00:51:53,170 Asta e un lucru deosebit, așa că ar trebui să ignorăm pur și simplu atunci când vine vorba de acest DOM, 878 00:51:53,170 --> 00:51:55,810 acest Document Object Model de copac. 879 00:51:55,810 --> 00:51:59,530 Observați că tag-ul HTML, pe care l-am descris arbitrar ca un dreptunghi, 880 00:51:59,530 --> 00:52:02,890 are 2 copii: cap și corp. 881 00:52:02,890 --> 00:52:04,840 >> Acestea sunt în mod similar desenate ca dreptunghiuri. 882 00:52:04,840 --> 00:52:08,970 Este semnificativ faptul că pictural capul este la stanga a corpului. 883 00:52:08,970 --> 00:52:11,960 Implicația este că șeful este pe primul loc în copac. 884 00:52:11,960 --> 00:52:14,910 Deci nu e de fapt o comanda pentru un copac, atunci când se desena ca aceasta, 885 00:52:14,910 --> 00:52:17,460 chiar dacă formele și fleacuri sunt arbitrare. 886 00:52:17,460 --> 00:52:20,360 Cap are între timp un singur copil numit titlu, 887 00:52:20,360 --> 00:52:25,170 și titlul de fapt, are copil propriu, care este "Hello, World", 888 00:52:25,170 --> 00:52:32,210 care l-am desenat în mod deliberat ca un oval aici pentru a face ușor diferite de dreptunghi. 889 00:52:32,210 --> 00:52:37,420 Aceste dreptunghiuri sunt elemente, întrucât salut, lumea este într-adevăr un nod de text. 890 00:52:37,420 --> 00:52:39,850 Deci e un nod în arbore, dar e un alt tip de nod 891 00:52:39,850 --> 00:52:41,730 asa ca am desenat arbitrar diferit. 892 00:52:41,730 --> 00:52:45,000 În mod similar are corp au un copil numit salut, lume, ca și, 893 00:52:45,000 --> 00:52:47,910 nod atât de diferite, chiar dacă ele sunt coincidență același text, 894 00:52:47,910 --> 00:52:52,100 dar l-am desenat folosind aceeași formă. Deci, cui îi pasă? 895 00:52:52,100 --> 00:52:56,820 Ei bine, ce e frumos despre HTML este faptul că are această natură ierarhică. 896 00:52:56,820 --> 00:53:01,010 Și ce e frumos despre JavaScript și, în special bibliotecile, care sunt disponibile în mod liber 897 00:53:01,010 --> 00:53:07,120 și populare, precum jQuery, puteți naviga structura de arbore atât de uimitor de ușor. 898 00:53:07,120 --> 00:53:11,790 Oricare dintre lucrurile am făcut în C cu pointeri si copaci care traversează și recursiune pe noduri 899 00:53:11,790 --> 00:53:15,300 copil la copil la stânga dreapta, toate dintr-o dată, putem sorta de lua pentru a acordat 900 00:53:15,300 --> 00:53:19,450 ca fiind uimitor de edificator, dacă nu un pic frustrant 901 00:53:19,450 --> 00:53:22,470 dar nu de aproape un mod eficient de a merge despre programare. 902 00:53:22,470 --> 00:53:24,470 Și astfel, cu aceste limbi de nivel superior, cum ar fi JavaScript 903 00:53:24,470 --> 00:53:28,340 vom fi capabili de a naviga pe acest copac mult mai intuitiv. 904 00:53:28,340 --> 00:53:30,430 >> Și într-adevăr sintaxa va fi destul de familiar. 905 00:53:30,430 --> 00:53:32,950 Dacă nu ați mai văzut înainte de JavaScript, aceasta este o referire foarte frumos 906 00:53:32,950 --> 00:53:35,910 de la cei de Mozilla, oamenii care fac Firefox, 907 00:53:35,910 --> 00:53:38,370 deci nu ezitați să răsfoiți că, la confortul dumneavoastra. 908 00:53:38,370 --> 00:53:41,590 Ce veți găsi - și aceste diapozitive sunt identice cu ceea ce am folosit altă zi - 909 00:53:41,590 --> 00:53:44,030 În mod similar, principal este plecat. 910 00:53:44,030 --> 00:53:47,010 Deci, atunci când scrie un program în JavaScript, nu există nici o funcție principală. 911 00:53:47,010 --> 00:53:48,690 Începi doar scrierea de cod. 912 00:53:48,690 --> 00:53:51,660 Dar o distincție esențială între JavaScript și C și PHP 913 00:53:51,660 --> 00:53:55,890 este faptul că în timp ce C si PHP până în prezent au fost executate partea de server 914 00:53:55,890 --> 00:53:59,180 de aparat, în acest caz, sau mai mult, în general, de către un server, 915 00:53:59,180 --> 00:54:04,270 JavaScript design este, de obicei, executate de un browser. 916 00:54:04,270 --> 00:54:08,440 Cu alte cuvinte, s-ar putea scrie cod JavaScript, ca suntem pe cale de a, 917 00:54:08,440 --> 00:54:13,080 pe un server din aparat, dar îl include, printre HTML, CSS-ul printre, 918 00:54:13,080 --> 00:54:16,100 printre GIF dumneavoastră și PNGs dumneavoastră și JPEG dvs. 919 00:54:16,100 --> 00:54:19,170 astfel încât atunci când utilizatorul vizitează pagina de web, dacă utilizați JavaScript, 920 00:54:19,170 --> 00:54:21,770 cod JavaScript care vine de la server la browser-ul, 921 00:54:21,770 --> 00:54:24,540 și este browser-ul pe care de fapt le execută. 922 00:54:24,540 --> 00:54:27,960 Deci, acest lucru are implicații semnificative pentru proprietatea intelectuală, chiar. 923 00:54:27,960 --> 00:54:32,600 E un fel de prostie să se gândească chiar și despre protejarea IP-ul atunci când vine vorba de cod JavaScript 924 00:54:32,600 --> 00:54:37,560 deoarece prin natura limbajului este executat, de obicei, partea de browser-ul. 925 00:54:37,560 --> 00:54:40,360 >> Puteți să-l eclipsa, ceea ce înseamnă că poate face sa arate nebun și urât 926 00:54:40,360 --> 00:54:45,400 cu nici un spațiu, nume de variabile, oribile pentru a face mai greu pentru oameni să fure IP-ul, 927 00:54:45,400 --> 00:54:48,120 dar cheia este că acesta este executat partea browser-ul. 928 00:54:48,120 --> 00:54:51,790 Chiar dacă în calitate de partea de server deoparte JavaScript poate fi utilizat, 929 00:54:51,790 --> 00:54:54,480 caz de utilizare cel mai frecvent acum este încă în browser-ul. 930 00:54:54,480 --> 00:54:59,800 Și aici e ceea ce pare. Aici este un if-else if-else construi la fel ca C, la fel ca PHP. 931 00:54:59,800 --> 00:55:02,420 Aici este o expresie booleană, atunci când "sau" 2 lucruri împreună. 932 00:55:02,420 --> 00:55:04,330 Aici este atunci când "și" 2 lucruri împreună. 933 00:55:04,330 --> 00:55:08,300 Aici este o declarație comutator, care este similar cu PHP 934 00:55:08,300 --> 00:55:10,810 în care aveți posibilitatea să comutați pe tipuri diferite de valori. 935 00:55:10,810 --> 00:55:15,180 Bucle similar pentru bucle au aici, care sunt structurate identic cu ceea ce am văzut până acum. 936 00:55:15,180 --> 00:55:18,110 În timp ce buclele, ne-am luat în timp ce facem bucle. 937 00:55:18,110 --> 00:55:20,290 Variabile, vreodată atât de ușor diferită. 938 00:55:20,290 --> 00:55:24,560 Tu nu declara variabile, cum faci în PHP și C, 939 00:55:24,560 --> 00:55:27,860 dar în mod similar este JavaScript slab tastat. 940 00:55:27,860 --> 00:55:32,730 Tu nu specifică int sau float sau string sau ceva de genul asta de obicei. 941 00:55:32,730 --> 00:55:34,240 Puteți specifica var. 942 00:55:34,240 --> 00:55:38,040 Nu trebuie să specificați var, dar are implicații dacă nu o faci. 943 00:55:38,040 --> 00:55:42,000 De obicei, în cazul în care se omite var, creați accidental o variabilă globală în loc de locale. 944 00:55:42,000 --> 00:55:46,420 Așa că lasă-mă să propun ca aproape întotdeauna spune doar var și apoi numele variabilei. 945 00:55:46,420 --> 00:55:48,740 Nu e un tip, e doar var pentru variabila. 946 00:55:48,740 --> 00:55:52,930 Acest lucru ar fi un exemplu, fie că este vorba 123 sau "Hello, World". 947 00:55:52,930 --> 00:55:58,910 Matrice sunt prezente și sintactică similar cu PHP. 948 00:55:58,910 --> 00:56:03,690 Eu voi spune numerele de var și apoi am folosi paranteze pătrate din nou pentru a declara o variabila 949 00:56:03,690 --> 00:56:08,870 al cărui tip este matrice care are aceste numere speciale din aceasta separate prin virgule. 950 00:56:08,870 --> 00:56:11,740 Și apoi în cele din urmă, aceasta este singura care într-adevăr arată diferit. 951 00:56:11,740 --> 00:56:16,700 Reamintim că, în PHP ne-ar fi pus în aplicare un tablou asociativ pentru un student 952 00:56:16,700 --> 00:56:20,220 ca Zamyla care ar putea arata ca aceasta, în cazul în care variabila este numit elev. 953 00:56:20,220 --> 00:56:23,370 Parantezele pătrate înseamnă aici vine o matrice. 954 00:56:23,370 --> 00:56:28,500 >> Faptul că eu nu sunt, folosind indici numerici, dar siruri de caractere - id, casa, și numele - 955 00:56:28,500 --> 00:56:30,990 înseamnă că aceasta este o matrice asociativ, 956 00:56:30,990 --> 00:56:34,490 iar aceste săgeți cu semnul egal și suport în unghi 957 00:56:34,490 --> 00:56:37,310 înseamnă că-cheie este "id", valoarea este 1; 958 00:56:37,310 --> 00:56:39,310 cheie este "casa", valoarea este Winthrop Casa; 959 00:56:39,310 --> 00:56:41,800 cheie este "numele", valoarea este Zamyla Chan. 960 00:56:41,800 --> 00:56:47,110 Deci, nu e 3 chei în interiorul acestui tablou asociativ, fiecare dintre care are propria valoare. 961 00:56:47,110 --> 00:56:52,880 Am văzut că, în PSET 7, sau în curând va fi, în aceeași idee JavaScript, 962 00:56:52,880 --> 00:56:55,220 dar o să arate ca asta. 963 00:56:55,220 --> 00:57:00,070 Elev așa var - nici un semn dolar și nici o mențiune de tipul încă, dar var - 964 00:57:00,070 --> 00:57:05,860 egali și apoi deschideți acolade deoarece în JavaScript atunci când aveți perechi cheie valoare, 965 00:57:05,860 --> 00:57:08,900 te folosi de fapt ceva numit un obiect. 966 00:57:08,900 --> 00:57:13,490 Iar cei dintre voi care au luat APCS sau ca s-ar putea aminti obiecte din Java 967 00:57:13,490 --> 00:57:15,140 sau limbile similare. 968 00:57:15,140 --> 00:57:17,880 JavaScript nu este Java, în primul rând. 969 00:57:17,880 --> 00:57:21,600 A fost o decizie deliberată de proiectare ani în urmă pentru a înfiripa ceva care a fost populară, 970 00:57:21,600 --> 00:57:25,640 numele său, chiar dacă nu are nici o legătură fundamentală să se Java. 971 00:57:25,640 --> 00:57:31,490 JavaScript are obiecte, și le creați prin notația bretele cret. 972 00:57:31,490 --> 00:57:36,710 Obiectele din JavaScript sunt destul de mult echivalente cu tablouri asociative în PHP 973 00:57:36,710 --> 00:57:40,030 atunci când vine vorba de stocare a datelor din interiorul ei. 974 00:57:40,030 --> 00:57:44,100 >> Dar chiar și mai puternic în JavaScript se poate asocia foarte ușor funcțiile 975 00:57:44,100 --> 00:57:48,040 în interiorul unui obiect, și deși puteți face acest lucru în alte limbi, 976 00:57:48,040 --> 00:57:50,040 este destul de o paradigmă comună, așa cum vom vedea. 977 00:57:50,040 --> 00:57:54,380 Pe scurt, acest obiect reprezintă un student, care este deosebit de Zamyla, 978 00:57:54,380 --> 00:58:00,380 și este similară conceptual, doar punct de vedere sintactic diferit de aceasta. 979 00:58:00,380 --> 00:58:03,840 Să folosim de fapt, într-un fișier JavaScript. 980 00:58:03,840 --> 00:58:05,570 Se pare că nu e un tag scenariu. 981 00:58:05,570 --> 00:58:08,180 Am văzut o etichetă stil și am văzut alte etichete HTML. 982 00:58:08,180 --> 00:58:11,510 Tag-ul script-ul de fapt, va conține un cod JavaScript. 983 00:58:11,510 --> 00:58:15,500 Lasă-mă să intru în aparatul în cazul în care avem un cod sursă pre-a făcut. 984 00:58:15,500 --> 00:58:18,700 Eu nu l-am postat pe site-ul încă, dar voi face că, după clasă. 985 00:58:18,700 --> 00:58:21,770 Să deschidem asta, blink.html. 986 00:58:21,770 --> 00:58:27,560 Înapoi în anii 1990, a fost literalmente o etichetă HTML tag-ul numit clipi, 987 00:58:27,560 --> 00:58:30,340 iar aceasta a fost una dintre cele mai minunat etichetele Overused pe internet 988 00:58:30,340 --> 00:58:36,140 , prin care te-ai vizita unele 1990 pagina web stilul și începe să vedeți textul intermitent iti place acest lucru, 989 00:58:36,140 --> 00:58:39,810 rezultatele tag marchiz, care a textului merge așa. 990 00:58:39,810 --> 00:58:45,070 Una dintre cele câteva ori în cazul în care lumea a convenit, de fapt pe un standard de web, 991 00:58:45,070 --> 00:58:48,250 toata lumea bord ucis tag-ul clipire câțiva ani în urmă. 992 00:58:48,250 --> 00:58:52,860 Dar putem reînvia cu Javascript ca o demonstrație a puterii aveți 993 00:58:52,860 --> 00:58:56,660 când poți scrie un program în interiorul unei pagini web. 994 00:58:56,660 --> 00:59:00,240 În primul rând haideți să săriți peste lucruri noi și să se concentreze doar pe cea veche. 995 00:59:00,240 --> 00:59:01,780 >> Aici este lucruri vechi, în acest exemplu. 996 00:59:01,780 --> 00:59:06,350 Am o eticheta HTML, un tag cap, și o etichetă titlu. 997 00:59:06,350 --> 00:59:11,210 Atunci am un tag-ul body aici cu un div, care amintesc este doar o divizie dreptunghiulară a paginii 998 00:59:11,210 --> 00:59:14,720 care I-am dat un ID unic arbitrar de "salut" la, 999 00:59:14,720 --> 00:59:18,320 doar ca am un mod de a unic referindu-se la aceasta, care are un text foarte simplu: 1000 00:59:18,320 --> 00:59:20,220 salut, lume. 1001 00:59:20,220 --> 00:59:23,940 Acum, lasă-mă să derulați până la partea de sus a acestui fișier și să vedem ce mai e nou. 1002 00:59:23,940 --> 00:59:27,710 Primul lucru pe care-i partea de sus pana nou este tag-ul script-ul, 1003 00:59:27,710 --> 00:59:31,280 și în interiorul tag-ul script-ul anunțul am declarat o funcție. 1004 00:59:31,280 --> 00:59:34,610 Pentru a declara o funcție în JavaScript, destul de asemănătoare cu PHP, 1005 00:59:34,610 --> 00:59:37,930 se scrie funcția literalmente apoi numele funcției, între paranteze, 1006 00:59:37,930 --> 00:59:40,400 și, poate, unele argumente în cazul în care este nevoie de orice. 1007 00:59:40,400 --> 00:59:43,510 Apoi am bretele meu cret, ca de obicei, iar acum avem un cod ușor nou, 1008 00:59:43,510 --> 00:59:45,230 dar să vedem ce înseamnă acest lucru. 1009 00:59:45,230 --> 00:59:48,670 Deci div var, aceasta înseamnă doar da-mi un div variabilă numită. 1010 00:59:48,670 --> 00:59:50,530 Aș fi putut să-l numit foo, dar am vrut să fie numit div 1011 00:59:50,530 --> 00:59:52,620 pentru motive care vor fi clar într-o secundă. 1012 00:59:52,620 --> 00:59:57,480 Apoi, se pare în JavaScript - și aceasta este codul JavaScript inglobate in pagina mea web - 1013 00:59:57,480 --> 01:00:01,760 există o variabilă specială la nivel mondial de soiuri numite documentului. 1014 01:00:01,760 --> 01:00:04,780 JavaScript este, de fapt, un limbaj orientat pe obiect. 1015 01:00:04,780 --> 01:00:07,230 Nu vom intra în detalii în 50 la ceea ce înseamnă că, 1016 01:00:07,230 --> 01:00:11,180 dar de acum știu că un obiect este destul de mult ca o struct. 1017 01:00:11,180 --> 01:00:14,740 Ca și cum am văzut drumul înapoi, atunci când într-una dintre cele mai vechi probleme stabilește 1018 01:00:14,740 --> 01:00:17,150 în cazul în care am pus o mulțime de informații într-un struct, 1019 01:00:17,150 --> 01:00:21,330 În mod similar se documenteze o struct special care vine cu browser-ul, 1020 01:00:21,330 --> 01:00:24,810 vine cu orice pagină de web. Nu e ceva ce am creat. 1021 01:00:24,810 --> 01:00:28,210 În interiorul acestei structuri document, deși, nu ai numai de date 1022 01:00:28,210 --> 01:00:30,010 dar aveți, de asemenea, funcții. 1023 01:00:30,010 --> 01:00:34,090 >> Și de fiecare dată când aveți o funcție în interiorul unei structuri, în interiorul unui obiect, 1024 01:00:34,090 --> 01:00:36,490 se numește o metodă. Dar e același lucru. 1025 01:00:36,490 --> 01:00:40,110 O metodă este o funcție care se întâmplă să fie în interiorul a altceva. 1026 01:00:40,110 --> 01:00:42,990 Deci, aceasta înseamnă că această variabilă de construcții la nivel mondial numit documentul 1027 01:00:42,990 --> 01:00:47,690 are o funcție numită getElementById care face literalmente asta. 1028 01:00:47,690 --> 01:00:52,460 Acesta te va un element din DOM, Document Object Model de copac, 1029 01:00:52,460 --> 01:00:55,520 căror ID-ul este în acest caz salut. 1030 01:00:55,520 --> 01:00:59,200 Cu alte cuvinte, în tot acest timp ne-am petrecut pe structuri de date intră în joc aici. 1031 01:00:59,200 --> 01:01:01,400 Această imagine a unei DOM pe care am avut-o clipă în urmă, 1032 01:01:01,400 --> 01:01:06,100 chiar dacă pagina este un pic diferit, în cazul în care am avut un div în această imagine, 1033 01:01:06,100 --> 01:01:11,180 document.getElementById ce se va întoarce la mine ar fi efectiv un pointer 1034 01:01:11,180 --> 01:01:15,440 la dreptunghiul în copac, o referire la dreptunghiul în copac. 1035 01:01:15,440 --> 01:01:18,410 Deci, asta e ceea ce inseamna de a apela efectiv una dintre aceste funcții. 1036 01:01:18,410 --> 01:01:21,960 În acest caz, din nou, e un div. Nu e un organism sau un titlu. 1037 01:01:21,960 --> 01:01:26,480 Deci, haideți să vedem ce-am apoi face cu acest div acum că l-am avea în interiorul acestui div variabilă numită. 1038 01:01:26,480 --> 01:01:32,580 Se pare cu JavaScript trebuie abilitatea de a tweak CSS a paginii dvs. de dinamic. 1039 01:01:32,580 --> 01:01:39,060 Până acum, toate CSS le-am făcut, deși limitată, este în atributele de stil, 1040 01:01:39,060 --> 01:01:41,730 sau unde altundeva am pus CSS? 1041 01:01:42,730 --> 01:01:45,810 Am facut un fel de rasfatata că unul. În tag-ul de stil de la partea de sus a fișierului. 1042 01:01:45,810 --> 01:01:49,180 Sau locul al treilea a fost în? 1043 01:01:50,710 --> 01:01:54,590 >> Un fișier extern, ceva. CSS. 1044 01:01:54,590 --> 01:01:56,730 Deci, acestea sunt cele 3 locuri care le-am făcut până acum CSS, 1045 01:01:56,730 --> 01:01:59,310 dar captura este codat greu ne-am tot. 1046 01:01:59,310 --> 01:02:04,060 Te-ai decis ca ai scufundat în PSET 7, ne-am decis înainte de prelegere ce CSS noastră ar fi. 1047 01:02:04,060 --> 01:02:07,380 Dar, dacă doriți să modificați CSS-ul, puteți face de fapt, că 1048 01:02:07,380 --> 01:02:09,370 Odată ce aveți un limbaj de programare actuale. 1049 01:02:09,370 --> 01:02:13,910 CSS, HTML - limbi de programare, nu. JavaScript este. 1050 01:02:13,910 --> 01:02:18,200 Deci, se dovedește că, de îndată ce aveți unul dintre aceste dreptunghiuri din copac 1051 01:02:18,200 --> 01:02:23,050 numit DOM, aceasta are ea însăși unele date conținute de acesta. 1052 01:02:23,050 --> 01:02:27,820 Deci div pe care am apucat din copac a ceea ce vom numi o proprietate în interiorul de ea 1053 01:02:27,820 --> 01:02:34,390 numit și stil, precum și proprietatea stil are în sine o proprietate numită vizibilitate. 1054 01:02:34,390 --> 01:02:37,330 As vrea sa stiu acest lucru numai prin căutarea unui manual de utilizare CSS lui. 1055 01:02:37,330 --> 01:02:41,160 Se pare că nu e o proprietate de vizibilitate CSS care face ceea ce spune. 1056 01:02:41,160 --> 01:02:44,530 Se face ceva vizibil sau nu, vizibile sau nu. 1057 01:02:44,530 --> 01:02:46,810 Și cum faci asta este aceasta. 1058 01:02:46,810 --> 01:02:50,510 Eu cer programatic, dacă vizibilitatea acestui div este ascuns, 1059 01:02:50,510 --> 01:02:53,390 ce am schimba-l la? Vizibil. 1060 01:02:53,390 --> 01:02:58,840 Altfel daca vizibilitatea acestei pagini nu este ascuns, în mod logic eu nu fac ascuns. 1061 01:02:58,840 --> 01:03:04,070 Nu am nici o idee de ce e vizibil și ascuns și nu este vizibil și invizibil. 1062 01:03:04,070 --> 01:03:06,000 Aceasta a fost o decizie proastă de design de-a lungul drum. 1063 01:03:06,000 --> 01:03:09,530 Dar acestea sunt într-adevăr opuse in CSS: vizibil și ascuns. 1064 01:03:09,530 --> 01:03:15,520 Toate acestea nu înseamnă schimbarea este CSS dosarul meu pe și în afara, pe și în afara 1065 01:03:15,520 --> 01:03:16,870 pentru că div special. 1066 01:03:16,870 --> 01:03:20,630 Dar, din nou, aceasta este o funcție numită clipire. Atunci când este funcția de clipire a sunat? 1067 01:03:20,630 --> 01:03:24,080 Se pare că există o altă fereastră de construcții la nivel mondial variabilă numită, 1068 01:03:24,080 --> 01:03:28,220 similare în spirit documentul, dar întrucât documentul se referă la pagina dvs. de internet, 1069 01:03:28,220 --> 01:03:31,700 cum ar fi arborele DOM, HTML pe care a trimis de pe server, 1070 01:03:31,700 --> 01:03:35,250 Fereastra se referă la Chrome jurul lui, bara de adrese, bara de titlu, 1071 01:03:35,250 --> 01:03:37,880 și toate aceste lucruri în jurul valorii de pagina dvs. web. 1072 01:03:37,880 --> 01:03:42,800 >> Și se dovedește că obiectul are o fereastră în interiorul funcție specială a fost numită setInterval 1073 01:03:42,800 --> 01:03:44,360 care face ceea ce spune. 1074 01:03:44,360 --> 01:03:48,600 Acesta va stabili un interval - în acest caz, la fiecare 500 de milisecunde - 1075 01:03:48,600 --> 01:03:52,270 și, să ia o presupunere, ce se va face la fiecare 500 de milisecunde? 1076 01:03:52,270 --> 01:03:55,240 Se va executa funcția pe care clipesc. 1077 01:03:55,240 --> 01:03:58,560 Și ce e frumos aici este că am fi putut face acest lucru în C, chiar dacă n-am făcut-o. 1078 01:03:58,560 --> 01:04:01,580 C are ceva numit pointeri la functii în cazul în care vă puteți trece în jurul valorii de funcții 1079 01:04:01,580 --> 01:04:03,140 ca argumente. 1080 01:04:03,140 --> 01:04:07,620 În mod similar, în JavaScript poate sa treci numele unei funcții într-o altă funcție. 1081 01:04:07,620 --> 01:04:10,630 Și observați ceea ce fac. Eu nu fac asta. 1082 01:04:10,630 --> 01:04:14,380 Dacă am pus între paranteze, după clipire, care ar însemna apela funcția clipire. 1083 01:04:14,380 --> 01:04:17,430 Dacă le-am omis, înseamnă că aici este funcția Reducere ochi 1084 01:04:17,430 --> 01:04:21,330 astfel încât setInterval pot numi fiecare 500 de milisecunde. 1085 01:04:21,330 --> 01:04:28,200 Deci, rezultatul final, deși este atroce, este că, dacă mă duc în localhost și du-te la blink.html, 1086 01:04:28,200 --> 01:04:32,120 Acum am acest lucru se întâmplă din nou și din nou. 1087 01:04:32,120 --> 01:04:34,950 Și dacă am Controlați fapt Element, să vedem dacă putem vedea acest lucru. 1088 01:04:34,950 --> 01:04:38,550 Lasă-mă să Controlați Rezistenta, lasă-mă să defilați în jos doar un pic, 1089 01:04:38,550 --> 01:04:44,320 lasă-mă să aleg Elemente de aici, și observați în interiorul DOM de inspector Chrome. 1090 01:04:44,320 --> 01:04:48,840 Este literalmente schimba înainte și înapoi, la fiecare 500 de milisecunde. 1091 01:04:48,840 --> 01:04:55,660 Dacă mergem la prietenul nostru Nate, 1092 01:04:55,660 --> 01:05:00,020 daca te-ai intrebat vreodata cum se lucrează, idee similară cu un interval, 1093 01:05:00,020 --> 01:05:04,810 dar Nate este de a face de fapt, utilizarea foarte eficientă a culorilor, în acest caz particular aici. 1094 01:05:04,810 --> 01:05:07,350 Deci, ce mai putem face de fapt cu asta? 1095 01:05:07,350 --> 01:05:09,990 Să deschidem un alt exemplu și să încercați ceva 1096 01:05:09,990 --> 01:05:12,940 asta e programatic chiar mai util decât a face lucruri clipi. 1097 01:05:12,940 --> 01:05:17,990 Lasă-mă să intru în directorul nostru forme de astăzi și du-te în form0. 1098 01:05:17,990 --> 01:05:20,820 Aceasta a fost cea mai urâtă formă posibilă pe care am putea veni cu, 1099 01:05:20,820 --> 01:05:23,290 și lasă-mă să arate doar tu cum arată într-un browser. 1100 01:05:23,290 --> 01:05:28,960 >> Lasă-mă să intru în localhost / forme, iar acest lucru este form0. 1101 01:05:28,960 --> 01:05:33,400 Aceasta este o formă super-urat HTML care are câteva domenii pentru e-mail, parola, 1102 01:05:33,400 --> 01:05:37,190 parolă, iar apoi o casetă de selectare putin de acord cu unele termenii și condițiile. 1103 01:05:37,190 --> 01:05:41,350 Captura este dacă am vizita acest formular și nu vreau să-ți dau adresa mea de e-mail, 1104 01:05:41,350 --> 01:05:44,730 Nu vreau să fiți de acord cu termenii și condițiile, poate, am posibilitatea să faceți clic Inregistreaza-te 1105 01:05:44,730 --> 01:05:46,920 si ma lasa sa patrunda oricum. 1106 01:05:46,920 --> 01:05:50,800 Acest lucru se întâmplă să prezinte un dosar prost PHP numit dump.php. 1107 01:05:50,800 --> 01:05:58,420 Tot ce face este imprimați conținutul $ _GET doar pentru scopuri de diagnosticare. 1108 01:05:58,420 --> 01:06:01,580 Asta a fost ceea ce a fost prezentat de catre utilizator chiar acum. 1109 01:06:01,580 --> 01:06:05,010 Dar să presupunem că avem de fapt nevoie pentru a valida depunerea formularului utilizatorului. 1110 01:06:05,010 --> 01:06:06,530 Lasă-mă să intru în versiunea 1. 1111 01:06:06,530 --> 01:06:11,420 Acest lucru este form1.html. Se pare punct de vedere estetic la fel de rau, dar observați cât de fantezie este. 1112 01:06:11,420 --> 01:06:15,450 Dacă aș faceți clic pe Register, fără a cooperat, mă țipat la. 1113 01:06:15,450 --> 01:06:17,320 "Trebuie să furnizați adresa ta de email." 1114 01:06:17,320 --> 01:06:21,670 Bine. Așa că lasă-mă să încerc asta. Deci, malan@harvard.edu. Nu am nevoie de o parolă. 1115 01:06:21,670 --> 01:06:25,100 Inregistreaza-te. "Trebuie să furnizați o parolă." Bine. 1116 01:06:25,100 --> 01:06:28,470 Așa că am va furniza o parolă de purpuriu. Inregistreaza-te. 1117 01:06:28,470 --> 01:06:32,300 "Parolele nu se potrivesc." Trebuie să tastați acum aici Crimson. 1118 01:06:32,300 --> 01:06:35,710 Am verificat asta accidental. Inregistreaza-te. 1119 01:06:35,710 --> 01:06:39,860 "Trebuie să fiți de acord cu termenii și condițiile." Bine. Sunt de acord acolo. Inregistreaza-te. 1120 01:06:39,860 --> 01:06:43,700 Și acum îmi arată de ieșire de diagnosticare acolo. 1121 01:06:43,700 --> 01:06:45,630 >> Deci, ce sa întâmplat? 1122 01:06:45,630 --> 01:06:48,330 Am avut această capacitate de a valida completarea de formulare. 1123 01:06:48,330 --> 01:06:51,420 De fapt, dacă ai făcut-o arunca cu capul în PSET 7, există o funcție cer scuze 1124 01:06:51,420 --> 01:06:54,620 care o face destul de ușor să țipi la utilizator, cu un mesaj pe ecran. 1125 01:06:54,620 --> 01:06:57,580 Sunt folosind un mecanism ușor diferit, funcția de alertă, 1126 01:06:57,580 --> 01:07:03,690 care nu este o funcție care este zambit la, deoarece ea face mesaje foarte urâte de utilizator. 1127 01:07:03,690 --> 01:07:05,710 Dar hai sa vedem ce fac aici. 1128 01:07:05,710 --> 01:07:09,620 Acest lucru este form1.html, și observați că am ceva sintaxa destul de familiare: 1129 01:07:09,620 --> 01:07:12,920 tag-ul body, tag-ul formă, atributul de acțiune, atribut metodă. 1130 01:07:12,920 --> 01:07:17,050 Dar observați I-am dat forma mea un ID unic pentru comfortul. 1131 01:07:17,050 --> 01:07:19,190 Apoi am primit un e-mail câmp al cărui tip este text, 1132 01:07:19,190 --> 01:07:23,780 un câmp al cărui tip parolă este parola, câmpul de confirmare al cărui tip este parola, 1133 01:07:23,780 --> 01:07:28,070 și apoi o casetă de selectare al cărui nume este de acord aici, tip este caseta. 1134 01:07:28,070 --> 01:07:30,380 Și apoi am luat un buton submit. 1135 01:07:30,380 --> 01:07:33,050 Dar observați în partea de sus ce mai am. 1136 01:07:33,050 --> 01:07:35,810 În primul rând, există o altă utilizare a tag-ul script-ul. 1137 01:07:35,810 --> 01:07:40,520 Dacă aveți un cod JavaScript într-un alt dosar, la fel ca și cu CSS îl puteți include. 1138 01:07:40,520 --> 01:07:44,530 Și tu faci asta cu sursa scenariul, iar apoi observați eu sunt conectarea aparent 1139 01:07:44,530 --> 01:07:50,349 pentru a googleapis.com la o cale foarte lungă, dar a cărui nume de fișier se termină în jquery.min 1140 01:07:50,349 --> 01:07:52,420 pentru minim js.. 1141 01:07:52,420 --> 01:07:55,969 jQuery este o bibliotecă super-popular pentru JavaScript, care face tocmai JavaScript 1142 01:07:55,969 --> 01:07:58,230 toate mai user-friendly pentru a utiliza. 1143 01:07:58,230 --> 01:08:00,610 A devenit efectiv un standard de facto. 1144 01:08:00,610 --> 01:08:04,090 Deci, chiar dacă ceea ce sunteți pe cale de a vedea nu este pur JavaScript în sine, 1145 01:08:04,090 --> 01:08:09,340 este o bibliotecă de pe partea de sus a JavaScript mult ca biblioteca CS50 este un strat 1146 01:08:09,340 --> 01:08:13,670 pe partea de sus a scăzut nivel de cod C, realitatea este aproape oricine de pe Internet îl folosește. 1147 01:08:13,670 --> 01:08:18,030 Deci, acestea nu sunt roți de formare. Aceasta este doar cea mai bună practică în aceste zile. 1148 01:08:18,030 --> 01:08:22,830 Acum, observați mai jos, care este tag-ul script-ul meu propriu, și observați ce am făcut aici. 1149 01:08:22,830 --> 01:08:27,450 Se pare că jQuery face ceva un pic de lux. 1150 01:08:27,450 --> 01:08:29,660 JavaScript are semne dolar, dar ele sunt lipsite de sens. 1151 01:08:29,660 --> 01:08:32,870 >> Ele sunt ca litera A sau B sau C. 1152 01:08:32,870 --> 01:08:36,670 jQuery a adoptat pur și simplu convenție sau un fel de cerere pus la faptul 1153 01:08:36,670 --> 01:08:40,280 care va fi simbolul $ lor speciale. 1154 01:08:40,280 --> 01:08:44,950 Asa ca imediat ce vă încărcați acest fișier JavaScript la nivel mondial până aici cu tag-ul script-ul, 1155 01:08:44,950 --> 01:08:49,080 aveți acces la o variabilă globală special care se numește $. 1156 01:08:49,080 --> 01:08:53,009 Se mai corect numit jQuery, dar asta nu arata aproape la fel de sexy ca $. 1157 01:08:53,009 --> 01:08:56,250 Dar nu are sens $ specială. În PHP a avut semnificație specială. 1158 01:08:56,250 --> 01:08:58,440 A trebuit să-l aibă în fața unei variabile. 1159 01:08:58,440 --> 01:09:01,670 Acesta este doar un lucru sexy, care au luat pe. 1160 01:09:01,670 --> 01:09:03,389 Ce se întâmplă aici? 1161 01:09:03,389 --> 01:09:08,830 Observați Sunt trecerea la funcția jQuery mea documentul globală este variabilă 1162 01:09:08,830 --> 01:09:10,860 si apoi am sunat. gata. 1163 01:09:10,860 --> 01:09:15,480 Ce jQuery în esență, nu este că vă permite să luați unele lucruri de vanilie JavaScript 1164 01:09:15,480 --> 01:09:17,889 ca obiect document, obiect fereastră, 1165 01:09:17,889 --> 01:09:20,790 și dacă-l treci in pentru a functiei jQuery - 1166 01:09:20,790 --> 01:09:24,429 și din nou, să fie clar, aceasta este o funcție numită jQuery - 1167 01:09:24,429 --> 01:09:28,240 ceea ce face este să revină la o versiune specială a documentului 1168 01:09:28,240 --> 01:09:30,700 care are o funcționalitate mai mare asociate cu aceasta. 1169 01:09:30,700 --> 01:09:34,760 Deci, în primă JavaScript nu există nici o funcție gata, 1170 01:09:34,760 --> 01:09:37,810 dar dacă treci document la funcția jQuery în primul rând, 1171 01:09:37,810 --> 01:09:40,960 se revine la o versiune specială a obiectului documentului 1172 01:09:40,960 --> 01:09:43,030 care are mai multe caracteristici de lux. 1173 01:09:43,030 --> 01:09:48,230 Și de aceea oamenii place. Ea doar face lucrurile mai ușor de făcut, așa cum suntem pe cale de a vedea. 1174 01:09:48,230 --> 01:09:49,820 Deci, ce înseamnă această linie de cod înseamnă? 1175 01:09:49,820 --> 01:09:52,690 Această linie de cod aici înseamnă că atunci când documentul este gata - 1176 01:09:52,690 --> 01:09:56,830 cu alte cuvinte, odată ce browser-ul este terminat de citit acest top fișier în jos - 1177 01:09:56,830 --> 01:09:59,200 mergeți mai departe și să execute următoarea funcție. 1178 01:09:59,200 --> 01:10:03,540 Ce e cu adevărat interesant în JavaScript - și PHP are acest, precum și - 1179 01:10:03,540 --> 01:10:05,450 este funcții anonime. 1180 01:10:05,450 --> 01:10:10,560 În JavaScript se poate declara functii care nu au nume, dar acestea nu au un corp. 1181 01:10:10,560 --> 01:10:12,570 Observați ce se întâmplă aici. 1182 01:10:12,570 --> 01:10:16,220 >> Aceasta este o funcție numită gata, si inseamna doar procedați în felul următor 1183 01:10:16,220 --> 01:10:20,220 atunci când întreaga pagină web este gata, atunci când totul a fost citit de la server. 1184 01:10:20,220 --> 01:10:23,090 Ce vrei să faci? Vreau să execute o bucată de cod. 1185 01:10:23,090 --> 01:10:27,120 Observați că nu vrem să execute acest cod imediat. 1186 01:10:27,120 --> 01:10:34,350 Dacă am omis acest lucru, aceasta ar însemna imediat începe executare a acestor linii de cod. 1187 01:10:34,350 --> 01:10:39,040 Dar faptul că am spus nu, nu, nu, înveliți într-o funcție această anonim ca aceasta 1188 01:10:39,040 --> 01:10:43,000 mijloace nu o executa încă; numesc în cele din urmă. 1189 01:10:43,000 --> 01:10:45,430 Am văzut acest lucru în urmă cu un moment în exemplul nostru formularul anterior. 1190 01:10:45,430 --> 01:10:49,990 Ce funcție au numim în cele din urmă, 500 milisecunde mai târziu? Clipi. 1191 01:10:49,990 --> 01:10:51,480 Deci, aceeași idee. 1192 01:10:51,480 --> 01:10:53,950 Din nou, chiar dacă acest lucru pare un pic ciudat, ia doar pentru acum pe credință 1193 01:10:53,950 --> 01:10:57,060 care să declare o funcție anonim, care se numește în cele din urmă, 1194 01:10:57,060 --> 01:11:01,720 scrii pur și simplu function () { 1195 01:11:01,720 --> 01:11:05,380 Deci, ce vom cod pentru a executa în cele din urmă? Următor. 1196 01:11:05,380 --> 01:11:10,460 Acest lucru pare un pic prea nou, dar acest lucru înseamnă aici e funcția jQuery, 1197 01:11:10,460 --> 01:11:13,430 și acest lucru este acum o comandă rapidă. 1198 01:11:13,430 --> 01:11:18,830 Acest fragment de HTML la partea de jos a ecranului, desigur, are unele reprezentare copac. 1199 01:11:18,830 --> 01:11:21,730 Nu e asta. Această pagină este mult mai interesant decât acest exemplu salut lume,. 1200 01:11:21,730 --> 01:11:25,210 Dar există unele copac care corespunde acest cod HTML. 1201 01:11:25,210 --> 01:11:28,910 Aceasta ar fi o durere în gât trebui să pună în aplicare un fel de funcție recursivă 1202 01:11:28,910 --> 01:11:34,380 să înceapă de la nodul rădăcină și pentru a găsi apoi nodul al cărui ID-ul este de înregistrare. 1203 01:11:34,380 --> 01:11:38,340 Deci, ceea ce face ca jQuery super usor pentru noi este literalmente acest lucru. 1204 01:11:38,340 --> 01:11:43,000 Du-te și adu-mi orice div sau orice formă, indiferent de elementul HTML 1205 01:11:43,000 --> 01:11:45,820 are un ID de înregistrare. 1206 01:11:45,820 --> 01:11:52,440 Acest lucru este echivalent cu document.getElementById ("înregistrarea"). 1207 01:11:52,440 --> 01:11:54,170 >> De ce oameni ca jQuery? 1208 01:11:54,170 --> 01:12:00,110 Pentru că e mai scurtă de tip. Dar asta e tot ce este. Este aceeași idee. 1209 01:12:00,110 --> 01:12:02,630 Adu-mi ID-ul este tag-ul a cărui înregistrare. 1210 01:12:02,630 --> 01:12:06,300 Și în momentul în care tag-ul, care se întâmplă să fie o forma, este prezentat, 1211 01:12:06,300 --> 01:12:08,300 mergeți mai departe și să execute acest cod. 1212 01:12:08,300 --> 01:12:11,320 Așa că haideți să facem un uita acum la ce facem noi anunturi formular. 1213 01:12:11,320 --> 01:12:15,950 Sintaxa este, desigur, criptic la început, dar ceea ce se întâmplă? 1214 01:12:15,950 --> 01:12:21,050 În cazul în care această linie de cod este adevărat, am de gând să țipi la utilizatorului să furnizeze adresa lui sau a ei de e-mail. 1215 01:12:21,050 --> 01:12:22,970 Deci, ce este această linie de cod? 1216 01:12:22,970 --> 01:12:25,560 $ Înseamnă jQuery. Acum observă acest lucru. 1217 01:12:25,560 --> 01:12:27,920 Aceasta este un fel de CSS. 1218 01:12:27,920 --> 01:12:33,370 Dacă v-ați scufundat în CSS încă, veți ști că aceasta înseamnă elementul al cărui ID-ul este de înregistrare. 1219 01:12:33,370 --> 01:12:39,840 Spațiu înseamnă a găsi un copil sau un descendent de înregistrare al cărui nume este de intrare. 1220 01:12:39,840 --> 01:12:42,970 Și apoi acest lucru în paranteze pătrate este un filtru mic. 1221 01:12:42,970 --> 01:12:47,010 Și chiar dacă acest lucru pare criptic, aceasta înseamnă doar du-te la formularul al cărui ID-ul este de înregistrare, 1222 01:12:47,010 --> 01:12:51,230 du-te în interiorul elementului de intrare a cărui nume este de e-mail, 1223 01:12:51,230 --> 01:12:55,440 și de a lua apoi valoarea sa, indiferent de valoarea sa se întâmplă să fie - 1224 01:12:55,440 --> 01:12:59,670 asdf daca asta e tot ce am scris sau malan@harvard.edu dacă asta e ceea ce am scris. 1225 01:12:59,670 --> 01:13:05,250 Deci, dacă valoarea câmpului de e-mail formularul de == nimic, tipa la utilizator. 1226 01:13:05,250 --> 01:13:09,700 Altfel, dacă valoarea din câmpul parolei == nimic, tipa la utilizator. 1227 01:13:09,700 --> 01:13:19,520 >> Altfel, dacă valoarea câmpului parola nu este egal cu valoarea din câmpul de confirmare, 1228 01:13:19,520 --> 01:13:22,850 care a fost elementul altă formă, țipa la utilizator. 1229 01:13:22,850 --> 01:13:25,680 Și apoi în cele din urmă - și acest lucru are prea unele noua sintaxă proprie, 1230 01:13:25,680 --> 01:13:29,270 dar odată ce l-ai văzut, e cel puțin un pic mai rezonabil - 1231 01:13:29,270 --> 01:13:34,060 altceva dacă formularul al cărui ID-ul este Anul are un element de intrare al cărui nume este de acord 1232 01:13:34,060 --> 01:13:39,720 și se verifică, mergeți mai departe și să strige la utilizator. 1233 01:13:39,720 --> 01:13:42,520 Așa că am recunosc în totalitate acest lucru este complet coplesitoare la prima vedere. 1234 01:13:42,520 --> 01:13:46,530 E o mulțime de noua sintaxă. Dar toate jQuery urmează aceste tipuri de modele. 1235 01:13:46,530 --> 01:13:49,880 Și sincer, eu nici nu stiam asta a existat până acum câteva minute. 1236 01:13:49,880 --> 01:13:53,640 Eu pe Google, "Cum verificați dacă o casetă este bifată în jQuery?" 1237 01:13:53,640 --> 01:13:55,680 și aceasta este sintaxa, deoarece exista diferite moduri de a face aceasta 1238 01:13:55,680 --> 01:13:58,010 cu efective cod JavaScript brut. 1239 01:13:58,010 --> 01:14:01,030 Deci, ca prima pagină a Set Problema 7 subliniază, 1240 01:14:01,030 --> 01:14:04,500 PSET 7 este foarte mult un exercițiu în procesul de bootstrap tine 1241 01:14:04,500 --> 01:14:08,650 în cazul în care le-am furnizat, sperăm, un cadru conceptual cu care să abordeze PSET. 1242 01:14:08,650 --> 01:14:12,280 >> Dar, așa cum este adesea cazul cu web design, e într-adevăr până la tine pentru a scormoni în jurul valorii de, 1243 01:14:12,280 --> 01:14:16,680 includă fragmente de cod și exemple de web, atât timp cât le cita 1244 01:14:16,680 --> 01:14:17,960 conform clauzelor contractuale, la care prima foaie, 1245 01:14:17,960 --> 01:14:21,460 și dau seama că învățarea HTML, CSS, JavaScript și chiar SQL 1246 01:14:21,460 --> 01:14:26,020 este într-adevăr menit să fie acest exercițiu la domiciliu așa cum am începe să luați aceste roți de formare oprit. 1247 01:14:26,020 --> 01:14:29,150 Și dau seama prea există atât de multe lucruri care le puteți face mai mult cu un browser. 1248 01:14:29,150 --> 01:14:33,790 In interiorul cele mai multe dintre aceste elemente sunt alte lucruri numite Stivuitoare eveniment. 1249 01:14:33,790 --> 01:14:37,140 Și chiar dacă ne-am uitat la cele numite onsubmit și onready, 1250 01:14:37,140 --> 01:14:40,310 poti sa faci lucruri cum ar fi onkeydown, onkeyup, 1251 01:14:40,310 --> 01:14:43,410 ca atunci cand utilizatorul atinge o cheie, puteți asculta pentru că și până tasta. 1252 01:14:43,410 --> 01:14:45,940 Gmail are scurtături de la tastatură. 1253 01:14:45,940 --> 01:14:49,490 Cum Google punerea în aplicare a scurtăturilor de la tastatură, cum ar fi C pentru compun? 1254 01:14:49,490 --> 01:14:54,120 Ei ascultă pentru evenimente, așa cum se numesc, cum ar fi onkeypress sau onkeyup și onkeydown. 1255 01:14:54,120 --> 01:14:56,360 Dacă v-ați plutit vreodata cu mouse-ul peste unele opțiunea de meniu 1256 01:14:56,360 --> 01:15:00,180 și dintr-o brusc Voila,, apare un meniu sau grafic își schimbă culoarea, 1257 01:15:00,180 --> 01:15:01,920 cum fac asta? 1258 01:15:01,920 --> 01:15:06,940 Mai degrabă decât să asculte onready sau onsubmit, asculta pentru onmouseover sau onmouseout. 1259 01:15:06,940 --> 01:15:10,920 >> Deci, pe scurt, cu aceste elementele de bază foarte simple pe care le-am început să zgârie suprafața de astăzi 1260 01:15:10,920 --> 01:15:13,940 și vom arunca cu capul în urma miercuri, aveți, din ce în ce, 1261 01:15:13,940 --> 01:15:17,530 puterea de a pune în aplicare felul de lucruri pe care esti deja familiarizat cu. 1262 01:15:17,530 --> 01:15:21,620 Deci, haideți să încheie acolo, și vom continua această miercuri. 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]