1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [Week 9] 2 00:00:02,570 --> 00:00:04,740 [David J. Malan - Harvard Universiteit] 3 00:00:04,740 --> 00:00:07,170 [Hierdie is CS50. - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 Alles reg. Welkom terug. Dit is CS50, en dit is die begin van die week 9. 5 00:00:12,350 --> 00:00:16,600 Vandag het ons fokus in die besonder op die ontwerp, nie meer in die konteks van die C 6 00:00:16,600 --> 00:00:20,010 maar in die konteks van PHP en 'n bietjie van SQL en 'n bietjie van JavaScript, 7 00:00:20,010 --> 00:00:23,730 veral na 'n einde van beide pset 7 en ook jou finale projek. 8 00:00:23,730 --> 00:00:26,310 In werklikheid, as jy by daardie punt in jou finale projek 9 00:00:26,310 --> 00:00:30,100 waar vermoedelik van 'n uur of so gelede het jy ten minste begin om 'n paar gedagtes te gee 10 00:00:30,100 --> 00:00:33,730 jou finale projek en jy dink jy wil om saam te werk met 1 of 2 klasmaats, 11 00:00:33,730 --> 00:00:36,150 as jy sukkel om met klasmaats, 12 00:00:36,150 --> 00:00:40,570 voel vry om te vul die vorm op cs50.net/partners/form. 13 00:00:40,570 --> 00:00:42,880 Dit vra net wie jy is, watter soort van die projek wat jy dink oor, 14 00:00:42,880 --> 00:00:44,870 waar jy leef net vir logistiese redes. 15 00:00:44,870 --> 00:00:49,510 En dan as jy wil om 'n ogie te hou oor die volgende week of so die spreadsheet URL daar, 16 00:00:49,510 --> 00:00:53,520 jy kan sien 'n slegs-lees-weergawe van die Google doc 17 00:00:53,520 --> 00:00:56,010 wat ons daardie inligting te versamel. 18 00:00:56,010 --> 00:00:58,930 So as jy wil om te werk met iemand, deur al beteken voel vry om uit te reik na mense 19 00:00:58,930 --> 00:01:00,480 via daardie meganisme. 20 00:01:00,480 --> 00:01:02,690 Maar die meerderheid van die mense werk solo. Dit is heeltemal fyn. 21 00:01:02,690 --> 00:01:06,120 So voel nie dat dit op enige manier verplig is. 22 00:01:06,120 --> 00:01:09,680 Op Vrydag was dit net ek en 'n paar van die span hier, 23 00:01:09,680 --> 00:01:11,100 leë teater vir die grootste deel. 24 00:01:11,100 --> 00:01:14,600 Daar is 3 toeriste sit daar, so dit was 'n bietjie ongemaklik. 25 00:01:14,600 --> 00:01:18,970 Wat het ons gepraat oor databasisse en ons gepraat oor pset 7 'n bietjie. 26 00:01:18,970 --> 00:01:22,200 En as jy nie gebeur dat op video op te vang net nog, dit is fyn. 27 00:01:22,200 --> 00:01:26,770 Ek sal probeer om enige terme te definieer wat ons andersins nie sou neem vir toegestaan 28 00:01:26,770 --> 00:01:28,840 gebaseer op Vrydag se lesing. 29 00:01:28,840 --> 00:01:32,550 >> Maar vandag gaan ons probeer om jou te kry tot op die punt 30 00:01:32,550 --> 00:01:34,990 nie net in staat is om iets te doen soos pset 7 31 00:01:34,990 --> 00:01:37,360 maar regtig verstaan ​​wat gaan aan onder die enjinkap, 32 00:01:37,360 --> 00:01:41,910 veral sommige van die abstraksies wat ons in plek in die functions.php lêer 33 00:01:41,910 --> 00:01:45,780 jou lewe 'n bietjie makliker te maak, maar sodat jy uiteindelik verstaan 34 00:01:45,780 --> 00:01:48,760 sodat wanneer die opleiding wiele kom af in 'n paar weke kan jy nog steeds oorleef 35 00:01:48,760 --> 00:01:53,750 in die werklike wêreld en hierdie dinge doen sonder enige CS50 raamwerk onder jou. 36 00:01:53,750 --> 00:01:57,500 Dit $ _SESSION, vir diegene van julle wat vertroud is 37 00:01:57,500 --> 00:02:01,960 of wat reeds gevang die video op Vrydag, wat beteken SESSIE laat ons doen 38 00:02:01,960 --> 00:02:04,330 in 'n PHP-gebaseerde web aansoek? 39 00:02:04,330 --> 00:02:09,650 Dit is 'n superglobal veranderlike, wat beteken dat dit is soortgelyk in die gees te kry en post 40 00:02:09,650 --> 00:02:13,970 en 'n paar ander, maar wat is hierdie ding nuttig? 41 00:02:13,970 --> 00:02:18,320 >> Wat is SESSIE gebruik word vir? Ja. [Student] Teken in 42 00:02:18,320 --> 00:02:21,040 Jammer? [Student] Teken in Teken in Inderdaad. 43 00:02:21,040 --> 00:02:25,100 In pset 7 ons met behulp van hierdie sessie superglobal te fasiliteer jou aan te meld. 44 00:02:25,100 --> 00:02:28,600 En wat is mooi oor hierdie superglobal is dat dit 'n associatieve array. 45 00:02:28,600 --> 00:02:33,190 'N associatieve array, onthou, is net 'n skikking, maar wie se indekse nie meer hoef te wees getalle 46 00:02:33,190 --> 00:02:37,670 soos 012. Hulle kan getalle of hulle kan selfs snare. 47 00:02:37,670 --> 00:02:44,890 En so, as jy duik in pset 7 nie, kan jy onthou dat ons 'n sleutel genoem ID stoor 48 00:02:44,890 --> 00:02:50,330 binnekant van die associatieve array wie se waarde is iets soos 123 - 49 00:02:50,330 --> 00:02:53,780 ongeag die tans aangemeld gebruiker se ID is. 50 00:02:53,780 --> 00:02:59,470 Die motivering hiervoor is dat selfs nadat die gebruiker localhost besoek het 51 00:02:59,470 --> 00:03:02,720 of my webwerf meer algemeen en dan het hulle aangemeld, 52 00:03:02,720 --> 00:03:07,320 selfs as hulle kliek nie 'n skakel of terug te keer na my webwerf vir 5 minute 53 00:03:07,320 --> 00:03:10,730 of selfs 'n uur of selfs 'n dag maar hulle laat hul blaaier venster oop, 54 00:03:10,730 --> 00:03:14,370 via hierdie superglobal kan ek onthou dat hulle in geteken nie. 55 00:03:14,370 --> 00:03:21,140 >> Met ander woorde, dit laat my effens langtermyn enigiets wat ek wil oor 'n gebruiker te stoor. 56 00:03:21,140 --> 00:03:24,390 En jy kan dink dit regtig as die inkarnasie van 'n shopping cart. 57 00:03:24,390 --> 00:03:27,740 Plekke soos Amazon natuurlik laat jy dinge in 'n shopping cart, 58 00:03:27,740 --> 00:03:32,230 maar HTTP, die protokol dat die bevoegdhede wat die Web, is staatloos 59 00:03:32,230 --> 00:03:34,230 in die sin dat wanneer jy 'n webtuiste besoek, 60 00:03:34,230 --> 00:03:37,290 vir die grootste deel jy nie 'n paar konstante netwerkverbinding 61 00:03:37,290 --> 00:03:39,270 tussen jou webleser en die bediener. 62 00:03:39,270 --> 00:03:42,190 Sodra jy die HTML-kode en die JPEG en die GIFs het afgelaai en alles wat, 63 00:03:42,190 --> 00:03:48,200 die verbinding gaan weg en jy het 'n afskrif van die HTML en noem van die bediener. 64 00:03:48,200 --> 00:03:53,000 Maar as die bediener wil iets oor jou te onthou, 65 00:03:53,000 --> 00:03:57,580 die las op die bediener om werklik te teken dat die inligting. 66 00:03:57,580 --> 00:04:00,130 En sodat jy die programmeerder wat beheer oor die bediener 67 00:04:00,130 --> 00:04:04,400 kan die meeste enigiets wat jy wil binne in jou geplaas hierdie superglobal associatieve array 68 00:04:04,400 --> 00:04:06,850 en dit sal daar wees om die volgende keer dat die gebruiker kom terug, 69 00:04:06,850 --> 00:04:12,070 of dit minute of selfs dae later, tensy hulle hul blaaier venster toemaak, 70 00:04:12,070 --> 00:04:14,360 op watter punt SESSIE verdwyn. 71 00:04:14,360 --> 00:04:17,779 So dit is efemere stoor, dit is nie-aanhoudende, en dit is bedoel om weg te gaan 72 00:04:17,779 --> 00:04:22,360 sodra die gebruiker sluit die leser - nie net dat die blad, wat dikwels die hele leser, 73 00:04:22,360 --> 00:04:24,930 sodoende effektief te meld die gebruiker. 74 00:04:24,930 --> 00:04:28,000 So hoe hierdie ding is eintlik geïmplementeer? 75 00:04:28,000 --> 00:04:31,360 Kom ons neem 'n vinnige blik op 'n eenvoudige voorbeeld wat ons het op Vrydag. 76 00:04:31,360 --> 00:04:33,340 Vir diegene wat nie vertroud is, dit was so eenvoudig soos hierdie. 77 00:04:33,340 --> 00:04:35,910 Dit is 'n webblad wie se enigste doel in die lewe is om my te vertel 78 00:04:35,910 --> 00:04:38,000 hoeveel keer ek het hierdie bladsy besoek. 79 00:04:38,000 --> 00:04:41,670 Dit is die eerste keer hier op Maandag dat ek dit besoek het, so dit sê 0 times. 80 00:04:41,670 --> 00:04:46,940 >> Maar as ek begin herlaai van hierdie bladsy, sê dit 1 keer, 2, 3, 4, 5, 81 00:04:46,940 --> 00:04:49,800 en dit sal net uiteindelik hou op toe,,,, tot 82 00:04:49,800 --> 00:04:53,130 vir elke keer wat ek eintlik kliek Reload op dit. 83 00:04:53,130 --> 00:04:58,830 So, hoe is hierdie werk? Laat my binne gaan van hierdie lêer genaamd counter.php. 84 00:04:58,830 --> 00:05:02,490 Die boonste deel van dit alles is blou kommentaar, maar die interessante deel is hier. 85 00:05:02,490 --> 00:05:06,670 On line 13 noem ons hierdie funksie session_start, 86 00:05:06,670 --> 00:05:09,600 en dit is letterlik alles wat jy nodig het om te doen as jy toegang wil hê tot 87 00:05:09,600 --> 00:05:13,610 te noem hierdie spesiale superglobal $ _SESSION. 88 00:05:13,610 --> 00:05:17,430 Dit maak dit alles moontlik gemaak, en ons sal sien in 'n oomblik hoe dit is alles moontlik. 89 00:05:17,430 --> 00:05:20,350 In lyn 16 kennisgewing wat ek doen. 90 00:05:20,350 --> 00:05:25,960 Indien die sleutel, counter genoem - met ander woorde, die indeks waarde - "counter" 91 00:05:25,960 --> 00:05:32,310 bestaan ​​die binnekant van die skikking met die naam SESSIE, dan wat doen ek met dit in die lyn hieronder? 92 00:05:32,310 --> 00:05:36,650 Wat is die lyn 18 te doen? 93 00:05:36,650 --> 00:05:40,360 >> [Onhoorbaar student antwoord] Wat is dit? [Student] Berging van die waarde. Goed. 94 00:05:40,360 --> 00:05:45,800 Dit is die stoor van die waarde wat in sitting is nou in 'n nuwe plaaslike tydelike veranderlike, 95 00:05:45,800 --> 00:05:48,250 $ Toonbank in alle kleinletters. 96 00:05:48,250 --> 00:05:50,770 Let daarop dat PHP is reeds hier 'n bietjie lui. 97 00:05:50,770 --> 00:05:55,550 Kennisgewing ons het nie enige melding van int of float of tou of iets soos dat 98 00:05:55,550 --> 00:06:00,480 want PHP is swak getik, waardeur jy nie die tipe van 'n veranderlike te spesifiseer, 99 00:06:00,480 --> 00:06:03,310 en in hierdie geval hier Ek het nie eens verklaar dit nog nie. 100 00:06:03,310 --> 00:06:08,980 Ek verklaar dat dit binnekant van hierdie kode tussen krulhakies en in teenstelling met C, dit is eintlik okay. 101 00:06:08,980 --> 00:06:13,800 Maak nie saak hoe diep geneste 'n veranderlike se verklaring is in PHP - 102 00:06:13,800 --> 00:06:16,650 binnekant van krullerige brace, binnekant van krullerige stut en die wil - 103 00:06:16,650 --> 00:06:21,230 sal dit op daardie oomblik in die tyd vir die res van die program bestaan, 104 00:06:21,230 --> 00:06:22,680 vir 'n beter of vir slegter. 105 00:06:22,680 --> 00:06:26,930 So word dit onmiddellik globale so gou as jy dit definieer as ons hier doen. 106 00:06:26,930 --> 00:06:31,620 >> Andersins, indien ek nie dat daar iets in die sessie superglobal, 107 00:06:31,620 --> 00:06:34,680 Ek glo die inisialisering van hierdie veranderlike toonbank tot 0, 108 00:06:34,680 --> 00:06:37,580 sodoende net die aanvaarding van die gebruiker nog nooit hier voor. 109 00:06:37,580 --> 00:06:40,030 En dan is dit natuurlik die verhoog van die toonbank hoe? 110 00:06:40,030 --> 00:06:44,480 Ek die opdatering van die waarde wat die binnekant van hierdie associatieve array 111 00:06:44,480 --> 00:06:49,530 deur dit gelyk aan enige toonbank tans + 1. 112 00:06:49,530 --> 00:06:53,520 As ek scroll down hier om die HTML-kode van die bladsy, dit is eintlik eenvoudig. 113 00:06:53,520 --> 00:06:58,920 Al wat ek het in die liggaam van hierdie bladsy is, "Jy het hierdie site besoek so-en-so tye." 114 00:06:58,920 --> 00:07:00,350 En dit is 'n PHP-konstruk. 115 00:07:00,350 --> 00:07:06,080 As jy dit doen <=, dit is gelykstaande doeltreffend aan watter funksie?? 116 00:07:07,920 --> 00:07:12,600 Dit is regtig gelykstaande aan iets soos printf, wat ons baie keer gesien het in C, 117 00:07:12,600 --> 00:07:15,940 alhoewel as jy dalk al weet van die spec in pset 7, 118 00:07:15,940 --> 00:07:20,160 druk is ook 'n funksie wat net iets druk uit, maak dit nie eintlik formaat kodes gebruik, 119 00:07:20,160 --> 00:07:23,270 en jy kan eintlik sê eggo as well. 120 00:07:23,270 --> 00:07:27,460 Hulle is al ooit so effens anders, selfs al is die netto effek is uiteindelik dieselfde. 121 00:07:27,460 --> 00:07:31,270 So het hierdie gebruik van die gelykaanteken is net 'n soort van 'n elegante manier om dit te doen 122 00:07:31,270 --> 00:07:34,910 meer bondig as u sou in staat wees om. 123 00:07:34,910 --> 00:07:38,370 So dit is al hierdie webwerf nie. Dit druk die waarde van die toonbank. 124 00:07:38,370 --> 00:07:40,550 Hoe dit alles eintlik? 125 00:07:40,550 --> 00:07:43,250 Jy kan 'n week onthou of so gelede het ons begin soek onder die kap 126 00:07:43,250 --> 00:07:47,910 hoe om 'n webblad werk deur gebruik te maak van hierdie Inspekteur tab. 127 00:07:47,910 --> 00:07:51,900 >> Chrome het dit beide in die Mac-weergawe, die Windows-weergawe, en selfs die Linux-weergawe, 128 00:07:51,900 --> 00:07:59,510 en Firefox en IE soortgelyke meganismes waardeur jy het hierdie ingeboude in debugger 129 00:07:59,510 --> 00:08:01,400 binnekant van die leser. 130 00:08:01,400 --> 00:08:03,040 Kom ons neem 'n blik op die volgende. 131 00:08:03,040 --> 00:08:06,960 Ons het 'n hele klomp van die tabs hier, en onthou dat die linker een is Elemente, 132 00:08:06,960 --> 00:08:10,700 en maak nie saak hoe godawful die HTML en JavaScript is in 'n bladsy, 133 00:08:10,700 --> 00:08:15,710 onthou dat jy met die blad Elemente kan eintlik navigeer die HTML hiërargies 134 00:08:15,710 --> 00:08:17,050 en mooi en netjies. 135 00:08:17,050 --> 00:08:19,370 So as jy probeer om te leer van 'n webwerf soos Google of Facebook 136 00:08:19,370 --> 00:08:22,370 of eintlik enige webwerf, besef dat jy waarskynlik is beter af 137 00:08:22,370 --> 00:08:26,360 op soek na die bron kode van hierdie manier, in teenstelling met die lees van die rou bron, 138 00:08:26,360 --> 00:08:29,580 wat 'n gemors kan wees, soos ons gesien het veral op die webwerf van Google. 139 00:08:29,580 --> 00:08:32,220 So as ek in plaas kliek op die blad Netwerk hier, 140 00:08:32,220 --> 00:08:34,830 Kom ons kyk wat gaan aan toe ek hierdie bladsy besoek. 141 00:08:34,830 --> 00:08:38,669 Eerste laat my duidelik my kas. 142 00:08:38,669 --> 00:08:43,570 Ek gaan om te gaan na Stellings in Chrome en gaan dan na Geskiedenis 143 00:08:43,570 --> 00:08:46,420 en dan Duidelik dat alle blare data. 144 00:08:46,420 --> 00:08:48,170 Jy kan gebruik word om om dit te doen vir ander doeleindes, [lag] 145 00:08:48,170 --> 00:08:51,990 maar wanneer dit kom by die ontwikkeling van webwerwe, is dit werklik nuttig - 146 00:08:51,990 --> 00:08:55,980 as jy lag jy weet. [Lag] 147 00:08:55,980 --> 00:08:59,310 Dit is eintlik regtig nuttig wanneer die ontwikkeling van webtuistes want die werklikheid is 148 00:08:59,310 --> 00:09:04,100 dinge soos koekies en dinge soos die kas HTML-lêers, cached JavaScript-lêers 149 00:09:04,100 --> 00:09:06,390 kan eintlik 'n groot kopseer, want as vir watter rede ookal 150 00:09:06,390 --> 00:09:11,500 die leser besluit lêer in die kas en nog wat jy gemaak het veranderinge in die lêer op die bediener 151 00:09:11,500 --> 00:09:14,670 maar die leser het regtig nie besef dat die lêer verander 152 00:09:14,670 --> 00:09:19,060 en dus nie eintlik nie weer dit aflaai, selfs wanneer jy kliek op die Reload knop gedruk, 153 00:09:19,060 --> 00:09:23,210 een van die mees betroubaar maniere om te maak net seker dat die fout is nie met jou kode, 154 00:09:23,210 --> 00:09:26,480 dit is met die gedrag van die leser, hier is om te gaan in jou 'browser' 155 00:09:26,480 --> 00:09:29,950 en net duidelik dat die hele geskiedenis, sodat daar geen verwarring. 156 00:09:29,950 --> 00:09:33,210 >> En dan as jy regtig wil wees paranoïes, sluit die leser, open dit weer, 157 00:09:33,210 --> 00:09:35,660 en dan maak seker dat al die werk soos verwag. 158 00:09:35,660 --> 00:09:38,820 Dus, in kort, die cache het skoongemaak is goed wanneer ontwikkeling. 159 00:09:38,820 --> 00:09:40,690 So hier het ons die Netwerk blad. 160 00:09:40,690 --> 00:09:46,020 Ek voorheen besoek het die site 9 keer, maar laat my nou voort te gaan en kliek Reload. 161 00:09:46,020 --> 00:09:47,500 En ek is terug na 0. 162 00:09:47,500 --> 00:09:52,100 Kom ons eintlik sien hoe dit is dat hierdie sessie superglobal geïmplementeer word. 163 00:09:52,100 --> 00:09:55,990 Ek gaan om te klik op die 1 HTTP-versoek wat gemaak is, 164 00:09:55,990 --> 00:09:58,810 en debugging venster laat my binnekant van die kyk. 165 00:09:58,810 --> 00:10:01,970 Hier sien ek net die reaksie van die bediener, wat is nie interessant. 166 00:10:01,970 --> 00:10:04,030 Ek het gesien dat dit in 'n aantal maniere. 167 00:10:04,030 --> 00:10:06,350 Maar wat is tegnies interessant is die headers. 168 00:10:06,350 --> 00:10:11,770 As ek scroll down hier en fokus op die versoek headers en klik Bekyk bronteks, 169 00:10:11,770 --> 00:10:14,400 wat ek gaan om te sien, is letterlik die HTTP-versoek 170 00:10:14,400 --> 00:10:17,250 wat het net van my blaaier na die bediener, 171 00:10:17,250 --> 00:10:21,400 Synde die operatiewe woord en dan / counter.php synde die lêernaam, 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1 net synde die weergawe van HTTP dat my browser gebruik. 173 00:10:25,670 --> 00:10:31,070 Hierdie lyn hier is 'n bietjie herinnering van die leser aan 'n bediener wat die naam van die bediener is 174 00:10:31,070 --> 00:10:33,020 dat dit wil om te praat. 175 00:10:33,020 --> 00:10:38,200 En dan die res van hierdie is soms interessant maar nie relevant right now. 176 00:10:38,200 --> 00:10:40,090 >> Dit is net 'n soort van 'n nuuskierigheid. 177 00:10:40,090 --> 00:10:43,530 Kriptiese al hierdie string is, enige tyd jou blaaier besoek 'n webwerf 178 00:10:43,530 --> 00:10:47,110 dit is die bediener die leser wat jy gebruik 179 00:10:47,110 --> 00:10:50,040 en watter bedryfstelsel jy gebruik en watter weergawe daarvan. 180 00:10:50,040 --> 00:10:52,650 So as jy al ooit gewonder hoe om webwerwe soos CNN en noem maar op 181 00:10:52,650 --> 00:10:56,860 weet wat die persentasies van Mac-gebruikers op die web, PC-gebruikers, 182 00:10:56,860 --> 00:11:00,820 Gebruikers van Internet Explorer, Chrome gebruikers en dies meer, is dit omdat al ons blaaiers 183 00:11:00,820 --> 00:11:04,300 vertel elke enkele webwerf wat daar is wat ons is. 184 00:11:04,300 --> 00:11:07,410 Dit beteken nie noodwendig persoonlik identifiseerbare inligting bevat, 185 00:11:07,410 --> 00:11:13,060 maar dit is nie die bediener vertel wat jou IP-adres is en wat webleser en bedryfstelsel jy gebruik. 186 00:11:13,060 --> 00:11:14,720 So dit is waar hierdie inligting is. 187 00:11:14,720 --> 00:11:19,960 Maar wat is nou meer interessant wanneer dit kom by hierdie sessies word die reaksie kop. 188 00:11:19,960 --> 00:11:22,530 Laat my bron kliek langs reaksie sien. 189 00:11:22,530 --> 00:11:24,590 Wat is interessant hier is 'n paar dinge. 190 00:11:24,590 --> 00:11:27,580 1, het ons 'n status kode van 200 terug. 191 00:11:27,580 --> 00:11:29,840 Ons sien nooit hierdie status kode, want dit beteken dat alles goed gaan. 192 00:11:29,840 --> 00:11:32,920 Dit beteken letterlik okay in teenstelling met iets anders. 193 00:11:32,920 --> 00:11:36,380 Wat is 'n paar wat ons soms sien wat is sleg? [Student] 404. 194 00:11:36,380 --> 00:11:39,860 404, lêer nie gevind nie, kan 403 jy struikel word op reeds 195 00:11:39,860 --> 00:11:43,660 wat is verbode, wat beteken jy het vergeet om te chmod iets, waarskynlik. 196 00:11:43,660 --> 00:11:45,190 En daar is 'n klomp van die ander. 197 00:11:45,190 --> 00:11:47,760 >> Hier, dit is 'n bietjie mal. 198 00:11:47,760 --> 00:11:52,340 Ek het regtig net hierdie lêer geskryf het 'n paar minute gelede plak dit in gedit. 199 00:11:52,340 --> 00:11:57,100 Waarom het hierdie bladsy in 1981 verstryk voordat daar was regtig 'n Web? 200 00:11:58,010 --> 00:12:00,730 Wat gaan daar aan? 201 00:12:00,730 --> 00:12:04,390 >> [Onhoorbaar student reaksie] Die tyd stempel. Maar hoekom? 202 00:12:06,110 --> 00:12:09,120 Dit is ietwat arbitrêre, maar dit is werklik nuttig. 203 00:12:09,120 --> 00:12:15,500 Wat dit sê vir my browser is hierdie PHP lêer wat jy het nou net versoek het reeds verstryk. 204 00:12:15,500 --> 00:12:18,580 In werklikheid is dit 30 jaar gelede verstryk. 205 00:12:18,580 --> 00:12:20,260 Maar wat beteken dit werklik? 206 00:12:20,260 --> 00:12:22,500 Dit beteken net die volgende keer dat die gebruiker hierdie bladsy besoek, 207 00:12:22,500 --> 00:12:25,540 hetsy deur die herlaai of tik die URL in die adres bar, 208 00:12:25,540 --> 00:12:28,010 maak seker dat jy 'n nuwe kopie van dit te gaan haal. 209 00:12:28,010 --> 00:12:30,840 Dit is soort van 'n voorbeeld van die inhoud van die cache breker, 210 00:12:30,840 --> 00:12:33,790 'n dom woord wat beteken net probeer blaaiers te ontmoedig 211 00:12:33,790 --> 00:12:37,260 van eintlik caching HTML wat is gestuur vanaf 'n bediener 212 00:12:37,260 --> 00:12:41,490 sodat jy nie per ongeluk getref herlaai en dan sien die dieselfde weergawe van die lêer. 213 00:12:41,490 --> 00:12:43,730 Jy eintlik wil die bediener om 'n nuwe kopie te stuur. 214 00:12:43,730 --> 00:12:47,440 So is die feit dat dit 1981 beteken net dat dit is wat die toestel is die keuse van 215 00:12:47,440 --> 00:12:50,280 as 'n arbitrêre datum in die verlede. 216 00:12:50,280 --> 00:12:53,380 Maar die werklike sappige lyn is nou hierdie een. 217 00:12:53,380 --> 00:12:57,550 Selfs voor 50 is jy waarskynlik vaagweg bekend met koekies. 218 00:12:57,550 --> 00:13:01,820 As van reg nou, veral onder diegene wat minder gemaklike of tussen 219 00:13:01,820 --> 00:13:04,120 wat is nou 'n koekie in jou verstand 220 00:13:04,120 --> 00:13:06,980 selfs al is ons oor te maak jou begrip meer tegniese? 221 00:13:08,150 --> 00:13:10,070 Wat is 'n koekie? Ja. 222 00:13:10,070 --> 00:13:13,890 [Student] Inligting oor die gebruiker, soos as hulle hul gebruikersnaam of iets geskryf het. 223 00:13:13,890 --> 00:13:17,370 >> Goed. Dit is inligting oor die gebruiker, of hulle het getik in hul gebruikersnaam reeds. 224 00:13:17,370 --> 00:13:21,190 Koekies is 'n manier waardeur bedieners iets oor 'n gebruiker kan onthou. 225 00:13:21,190 --> 00:13:25,810 En wat 'n koekie is regtig is 'n tekslêer of 'n reeks van grepe 226 00:13:25,810 --> 00:13:28,340 wat geplant is deur die bediener binnekant van jou blaaier, 227 00:13:28,340 --> 00:13:31,960 en binnekant van die lêer of onder diegene bytes is 'n soort van identifikasie. 228 00:13:31,960 --> 00:13:35,640 Miskien is dit letterlik jou gebruikersnaam, maar meer dikwels is dit iets meer kriptiese-looking 229 00:13:35,640 --> 00:13:43,700 soos dit vir 'n ding hier bo8dal3ct en so meer - dit regtig groot alfanumeriese string 230 00:13:43,700 --> 00:13:47,050 wat eintlik maar net bedoel om 'n unieke identifiseerder vir jou te wees. 231 00:13:47,050 --> 00:13:49,790 Of jy kan dink aan dit as 'n soort van 'n virtuele hand stamp. 232 00:13:49,790 --> 00:13:53,020 As jy na 'n klub of 'n pretpark, om te onthou dat jy eintlik betaal het 233 00:13:53,020 --> 00:13:55,850 en gegaan, hulle het 'n bietjie rooi plakker op jou hand van een of ander aard, 234 00:13:55,850 --> 00:13:59,270 en wat herinner aan die mense by die toonbank wat jy reeds betaal het 235 00:13:59,270 --> 00:14:01,340 en jy kan kom en gaan soos jy wil. 236 00:14:01,340 --> 00:14:04,250 Koekies is 'n bietjie soortgelyk in die gees op daardie. 237 00:14:04,250 --> 00:14:08,070 Die eerste keer dat ek hierdie webwerf besoek, as ek net na die skoonmaak van my kas, 238 00:14:08,070 --> 00:14:11,620 die web bediener, die toestel in hierdie geval, 'n stempel op my hand 239 00:14:11,620 --> 00:14:15,030 wie se naam is PHPSESSID, sessie-ID, 240 00:14:15,030 --> 00:14:18,260 waarvan die waarde hierdie baie lang alfanumeriese string. 241 00:14:18,260 --> 00:14:22,470 >> So dit is nou soort van vervoerd op my hand, sodat die volgende keer wat ek getref herlaai 242 00:14:22,470 --> 00:14:25,230 of met die hand na hierdie URL in 'n leser, 243 00:14:25,230 --> 00:14:29,230 my browser deur die definisie van HTTP gaan die hand stempel aan te bied 244 00:14:29,230 --> 00:14:31,940 weer en weer en weer. 245 00:14:31,940 --> 00:14:34,550 Dus, selfs al is die bediener nie noodwendig nie weet wie ek is, 246 00:14:34,550 --> 00:14:39,610 hulle ten minste weet dat ek dieselfde gebruiker of ten minste, meer spesifiek, die selfde blaaier. 247 00:14:39,610 --> 00:14:45,660 En so het dit is uiteindelik hoe die sessie superglobal geïmplementeer word. 248 00:14:45,660 --> 00:14:51,200 Die bediener het geen idee wie jy is wanneer jy weer 'n webwerf vir die tweede of die derde keer 249 00:14:51,200 --> 00:14:53,410 tensy jy hierdie hand stempel. 250 00:14:53,410 --> 00:14:55,530 En so gou as wat jy bied dat die hand stamp, 251 00:14:55,530 --> 00:14:59,370 die webbediener gaan in wese in 'n klein databasis van sy eie 252 00:14:59,370 --> 00:15:06,040 word en tjeks, okay, ek het net gesien die hand stempel van die gebruiker bo8dal3ct en so meer. 253 00:15:06,040 --> 00:15:09,850 Laat my sien watter inligting die programmeerder gestoor 254 00:15:09,850 --> 00:15:12,380 binnekant van die superglobal oor hierdie gebruiker, 255 00:15:12,380 --> 00:15:17,000 en dan moet ek seker maak dat data weer binnekant van die sessie superglobal 256 00:15:17,000 --> 00:15:19,830 sodat die programmeerder kan weer toegang tot daardie data 257 00:15:19,830 --> 00:15:23,360 selfs al is dit 'n paar minute of ure gelede. 258 00:15:23,360 --> 00:15:26,150 So met ander woorde, koekies, wat het 'n slegte rap vir 'n geruime tyd 259 00:15:26,150 --> 00:15:29,990 as gevolg van onsekerhede in blaaiers en hulle kan regtig ons privaatheid skend en al hierdie, 260 00:15:29,990 --> 00:15:31,900 hulle eintlik het 'n groot nut want sonder hulle 261 00:15:31,900 --> 00:15:36,110 jy sal voortdurend meld aan elke Facebook-bladsy wat jy besoek 262 00:15:36,110 --> 00:15:40,680 of elke Gmail e-pos wat jy lees indien die leser nie die een of ander manier van onthou 263 00:15:40,680 --> 00:15:43,320 dat jy reeds geverifieer. 264 00:15:43,320 --> 00:15:46,640 >> Dus, op hierdie manier koekies heen en weer gestuur oor die draad. 265 00:15:46,640 --> 00:15:52,470 Nog 'n nuuskierigheid oor koekies, veral hier, is dat dit heeltemal in clear text. 266 00:15:52,470 --> 00:15:54,930 Daar is geen enkripsie gaan hier hoegenaamd, 267 00:15:54,930 --> 00:15:57,240 en inderdaad het ek met behulp van HTTP op die oomblik. 268 00:15:57,240 --> 00:16:00,890 Een van ons gunstelinge oomblikke in CS50, wat nou 2 jaar gelede, 269 00:16:00,890 --> 00:16:04,750 rondom die tyd 'n hulpmiddel genaamd Firesheep uitgekom. 270 00:16:04,750 --> 00:16:08,320 Dit was 'n gratis stukkie van die sagteware wat gemaak is deur 'n sekuriteit navorser 271 00:16:08,320 --> 00:16:13,250 as 'n wake-up call vir die gemeenskap om te sê presies hoe afgrijselijk geïmplementeer 272 00:16:13,250 --> 00:16:17,900 sekere verifikasie meganismes op die web was. 273 00:16:17,900 --> 00:16:22,880 So vir 'n geruime tyd, Facebook is byna geheel en al oor HTTP, geen HTTPS. 274 00:16:22,880 --> 00:16:25,640 En selfs as jy het geen idee hoe om die crypto werk, S is veilig 275 00:16:25,640 --> 00:16:27,950 so dit beteken daar is ten minste 'n paar enkripsie betrokke. 276 00:16:27,950 --> 00:16:30,610 Facebook het wat gebruik word om gebruikers name en wagwoorde te enkripteer, 277 00:16:30,610 --> 00:16:33,560 maar pokes so gou as jy kyk na jou of jou boodskappe of jou news feed, 278 00:16:33,560 --> 00:16:35,360 almal wat ongeënkripteerde. 279 00:16:35,360 --> 00:16:37,870 So was Gmail totdat net 'n jaar of 2 gelede. 280 00:16:37,870 --> 00:16:41,100 Enige tyd as jy aangemeld is, ja, hulle veilige enkripsie gebruik, 281 00:16:41,100 --> 00:16:44,300 maar daarna het hulle nie gedoen nie. En hoekom sou dit wees? 282 00:16:44,300 --> 00:16:49,210 Waarom nie net gebruik kriptografie al van die tyd in gebruik gevalle soos hierdie? 283 00:16:49,210 --> 00:16:53,700 Wat is dit? Ek dink ek het iets gehoor. [Student] Speed. 284 00:16:53,700 --> 00:16:56,250 Spoed, reg? Daar is maniere om hierdie. 285 00:16:56,250 --> 00:16:59,610 Maar as jy net soort van dink oor dit logies, as jy enkripteer iets, 286 00:16:59,610 --> 00:17:01,820 jy het ten minste 'n bietjie meer werk te doen. 287 00:17:01,820 --> 00:17:05,460 In pset 2 wanneer jy geïmplementeer Caesar of Vigenere of selfs Crack, 288 00:17:05,460 --> 00:17:07,760 net die druk van 'n string is relatief maklik. 289 00:17:07,760 --> 00:17:12,040 Enkripteer en dan druk 'n string minimaal vereis 'n bietjie meer werk. 290 00:17:12,040 --> 00:17:14,520 >>  Vir super gewilde webtuistes soos Google en Facebook, 291 00:17:14,520 --> 00:17:18,839 as jy meer werk te doen vir elke gebruiker vir elke enkele web bladsy wat hulle besoek, 292 00:17:18,839 --> 00:17:20,520 Dit neem net meer SVE-tyd. 293 00:17:20,520 --> 00:17:22,920 En as jy meer SVE-tyd nodig het, moet jy dalk meer bedieners, 294 00:17:22,920 --> 00:17:24,270 wat beteken dat jy kan meer geld nodig het. 295 00:17:24,270 --> 00:17:27,579 En so vir baie jare dit net regtig was nie die beste praktyk. 296 00:17:27,579 --> 00:17:31,440 Mense sou SSL enkripsie net wanneer hulle nodig het om te gebruik. 297 00:17:31,440 --> 00:17:34,960 Maar dit blyk, en as hierdie man met Firesheep super duidelike, 298 00:17:34,960 --> 00:17:37,920 wanneer jy ouens wat tans op Facebook right now - 299 00:17:37,920 --> 00:17:39,880 Uit nuuskierigheid, laat ons kyk of jy Gesny up. 300 00:17:39,880 --> 00:17:42,620 As jy nou in sommige blad op Facebook, selfs al is dit nie die voorgrond, 301 00:17:42,620 --> 00:17:46,610 is jou URL HTTP-of HTTPS? 302 00:17:46,610 --> 00:17:50,560 [Verskeie studente] S. S? [Lag] 303 00:17:50,560 --> 00:17:55,510 Okay. Enige HTTP? Net 1? Okay. 304 00:17:55,510 --> 00:17:58,940 So almal van ons kan daardie man se Facebook-rekening nou hack. 305 00:17:58,940 --> 00:18:04,100 Vir die grootste deel dit geword het standaard aangeskakel, ten minste in 'n paar webtuistes. 306 00:18:04,100 --> 00:18:08,120 En 'n lang storie kort te maak, indien jou web verkeer is nie geïnkripteer, 307 00:18:08,120 --> 00:18:12,960 nie alleen die HTML heen en weer oor die WiFis ongeënkripteerde, 308 00:18:12,960 --> 00:18:16,760 so dinge soos koekies dwarsdeur die lug heen en weer 309 00:18:16,760 --> 00:18:18,940 sonder enige vorm van enkripsie. 310 00:18:18,940 --> 00:18:23,540 So as jy net 'n bietjie van programmering vaardig of 'n bietjie van Googlen vaardighede 311 00:18:23,540 --> 00:18:27,410 vrye sagteware te vind wat dit doen, is al wat jy hoef te doen is om in Starbucks sit 312 00:18:27,410 --> 00:18:30,680 of sit in 'n lughawe waar daar is oor die algemeen WiFi ongeënkripteerde 313 00:18:30,680 --> 00:18:36,070 en net kyk vir sleutelwoorde soos Set-Koekie: PHPSESSID 314 00:18:36,070 --> 00:18:39,300 want as jy die tegniese vaardig om net te kyk na die WiFi 315 00:18:39,300 --> 00:18:43,010 vir al die stukkies wat vloei regdeur die lug vir hierdie patroon, 316 00:18:43,010 --> 00:18:50,840 kan jy dan sê dat die man se PHPSESSID gebeur bo8dal en so meer. 317 00:18:50,840 --> 00:18:53,890 En dan weer as jy genoeg tegnies vaardig of die regte gereedskap, 318 00:18:53,890 --> 00:18:58,890 jy kan dan net die funksionaliteit jou eie leser te begin dat die hand stempel 319 00:18:58,890 --> 00:19:05,030 Facebook.com en Facebook is net gaan om te aanvaar dat jy dat die man 320 00:19:05,030 --> 00:19:09,880 want al wat hulle weet is nie wie jy is nie, maar dat jy hierdie unieke identifikasienommer. 321 00:19:09,880 --> 00:19:14,650 So as jy daardie unieke identifikasienommer steel en dit aan die webbediener as jou eie, 322 00:19:14,650 --> 00:19:16,860 hulle is net gaan om te wys jy daardie persoon se news feed 323 00:19:16,860 --> 00:19:18,980 of daardie persoon se boodskappe of steek. 324 00:19:18,980 --> 00:19:23,190 >> En ek wil nou Google hoe HTTPS Facebook miskien te aktiveer. 325 00:19:23,190 --> 00:19:25,150 Maar dit is regtig so eenvoudig soos dit. 326 00:19:25,150 --> 00:19:27,660 En so Facebook en Google en dies meer gekry het regtig 'n goeie by hierdie, 327 00:19:27,660 --> 00:19:31,870 maar hou 'n oog uit al hoe meer vir enige webwerwe wat jy besoek wat nie HTTP gebruik 328 00:19:31,870 --> 00:19:35,020 en het 'n soort van sensitiewe inligting op hulle, 329 00:19:35,020 --> 00:19:37,490 of dit nou finansiële of persoonlike of die wil. 330 00:19:37,490 --> 00:19:43,180 As hulle dit nie gebruik, kan heel moontlik koekies soos hierdie baie maklik gesteel word 331 00:19:43,180 --> 00:19:46,270 en dan vervals is, en dit is presies wat Firesheep het. 332 00:19:46,270 --> 00:19:48,250 Jy het nie 'n programmeerder te wees. 333 00:19:48,250 --> 00:19:51,680 Al wat jy moes doen, was om 'n internet konneksie, laai hierdie gratis hulpmiddel, 334 00:19:51,680 --> 00:19:56,490 en wat dit sou doen, is jy inteken en dan sal dit wys jy die Facebook-name 335 00:19:56,490 --> 00:20:00,170 van almal in Sanders, in hierdie spesifieke demonstrasie, rondom jou 336 00:20:00,170 --> 00:20:03,260 en alles wat jy het om te doen is kliek op sy naam en die sagteware geoutomatiseer die proses 337 00:20:03,260 --> 00:20:05,970 snuif die koekie, om dit as jou eie op Facebook, 338 00:20:05,970 --> 00:20:07,990 , en voila, jy ingeteken 339 00:20:07,990 --> 00:20:11,190 So, dit is nog een van daardie "dit nie doen nie" amptelik. 340 00:20:11,190 --> 00:20:14,660 As jy jou eie huis netwerk en jy wil geknoei, deur al beteken, 341 00:20:14,660 --> 00:20:17,530 maar besef dit nie oor die lyn op 'n universiteit-omgewing. 342 00:20:17,530 --> 00:20:20,030 >> Maar die doel hier is regtig te beklemtoon nie hoe om dit te doen 343 00:20:20,030 --> 00:20:22,320 maar hoe om te verdedig teen hierdie soort van dinge. 344 00:20:22,320 --> 00:20:26,180 En die triviale oplossing hier, selfs al is dit self is gebrekkig, 345 00:20:26,180 --> 00:20:31,360 is om werklik die gebruik van enige webwerwe wat nie HTTPS gebruik van voortdurend verminder. 346 00:20:31,360 --> 00:20:34,520 So webwerwe soos Facebook en Google toenemend blok 347 00:20:34,520 --> 00:20:36,200 waar jy kan kies in hierdie soort van ding, 348 00:20:36,200 --> 00:20:40,000 en banke het dit vir jare vir soortgelyke redes. 349 00:20:40,000 --> 00:20:43,580 So net 'n bietjie van 'n vrees faktor as wat ons kan. Maar dit is dit in 'n neutedop. 350 00:20:43,580 --> 00:20:46,420 Dit is hoe 'n bediener onthou wie jy is. 351 00:20:46,420 --> 00:20:50,760 En so gou as wat hulle kan onthou wie jy is, kan hulle onthou iets waaroor jy 352 00:20:50,760 --> 00:20:56,140 wat 'n programmeerder binne gestoor van hierdie spesiale superglobal genoem $ _SESSION. 353 00:20:56,140 --> 00:20:59,750 En ons vir pset 7 gebruik dit trivially net 'n int om te onthou, 354 00:20:59,750 --> 00:21:02,260 naamlik die unieke ID van die gebruiker wat aangeteken het, 355 00:21:02,260 --> 00:21:05,880 sodat ons weet hulle het daar tevore. 356 00:21:05,880 --> 00:21:12,450 Enige vrae en dan op sessies of koekies of iets dergeliks? 357 00:21:12,450 --> 00:21:15,130 Firesheep nie so goed werk nie, 358 00:21:15,130 --> 00:21:18,310 en jy het om jou rekenaar te sit in 'n spesiale gemengde modus 359 00:21:18,310 --> 00:21:20,700 sodat jy werklik luister vir verkeer behalwe julleself. 360 00:21:20,700 --> 00:21:23,940 So as jy tans Firesheep aflaai, besef dit is nie heeltemal so maklik 361 00:21:23,940 --> 00:21:26,850 soos dit eens was om te demonstreer. 362 00:21:26,850 --> 00:21:29,070 Alles reg. En doen nie dit in Sanders. Doen dit by die huis. 363 00:21:29,070 --> 00:21:30,890 Databasisse. 364 00:21:30,890 --> 00:21:33,580 Een van die dinge wat ons gedoen het in pset 7 baie doelbewus 365 00:21:33,580 --> 00:21:37,780 is ons gee jou 'n voorbeeld van 'n databasistabel vir gebruikers wat het 'n paar gebruikers-ID's, 366 00:21:37,780 --> 00:21:41,020 sommige gebruikers name, en 'n paar geïnkripteer wagwoorde daarin. 367 00:21:41,020 --> 00:21:44,520 En soos u sal sien, as jy nog nie het nie, jy gaan te hê aan die tafel 'n bietjie verander. 368 00:21:44,520 --> 00:21:47,710 Jy gaan 'n kas te voeg aan elk van die gebruikers in daardie tafel, 369 00:21:47,710 --> 00:21:51,130 en jy gaan 'n ander geskiedenis tafel, 'n portefeuljes tabel te voeg, 370 00:21:51,130 --> 00:21:53,310 of dalk noem dit iets anders. 371 00:21:53,310 --> 00:21:56,740 Maar in terme van dink oor hoe om dit te doen, laat ons hierdie hulpmiddel 372 00:21:56,740 --> 00:22:00,570 wat ons gebruik op Vrydag, maar indien onbekende, die toestel kom met 'n instrument 373 00:22:00,570 --> 00:22:04,680 genoem phpMyAdmin wat toevallig in PHP geskryf is, 374 00:22:04,680 --> 00:22:07,950 maar sy doel in die lewe, nadat ek hier inloggen as jharvard met karmosyn, 375 00:22:07,950 --> 00:22:15,160 is om te gee vir my 'n gebruiker-vriendelike manier van kyk en die verandering van my databasis. 376 00:22:15,160 --> 00:22:18,040 >> Die databasis wat ek hardloop op die toestel genoem MySQL. 377 00:22:18,040 --> 00:22:23,420 Dit is baie gewild, en dit is 'n gratis open source databasis wat is wonderlik maklik om te gebruik, 378 00:22:23,420 --> 00:22:25,620 veral met die voorkant eindig soos hierdie. 379 00:22:25,620 --> 00:22:29,350 Wat hierdie hulpmiddel kan my te doen, byvoorbeeld, is poke om tafels. 380 00:22:29,350 --> 00:22:30,890 Laat my gaan voort en doen dit. 381 00:22:30,890 --> 00:22:36,580 Op Vrydag het ons 'n tabel genaamd studente wat was super eenvoudige. 382 00:22:36,580 --> 00:22:41,680 Dit het 3 kolomme - id, naam, en e-pos - en ek handmatig plaas 'n paar rye 383 00:22:41,680 --> 00:22:44,420 soos Dawid en Mike in hierdie spesifieke voorbeeld. 384 00:22:44,420 --> 00:22:47,290 Laat dit 'n bietjie verder te neem, en laat ons aanneem dat ons wil meer om te onthou 385 00:22:47,290 --> 00:22:49,660 as net die naam en e-pos oor 'n gebruiker. 386 00:22:49,660 --> 00:22:53,090 Laat my Struktuur kliek hier aan die bokant. 387 00:22:53,090 --> 00:22:55,440 En weer, die pset loop jy deur middel van die nodige stappe hier, 388 00:22:55,440 --> 00:22:58,150 so moenie bekommerd wees as sommige van hierdie is 'n bietjie vinnig. 389 00:22:58,150 --> 00:22:59,690 Dan gaan ek te kliek op hier. 390 00:22:59,690 --> 00:23:02,270 Ek gaan 'n aantal van die kolomme na die e-pos te voeg 391 00:23:02,270 --> 00:23:04,130 want ek wil iets huis toe te voeg. 392 00:23:04,130 --> 00:23:06,640 Ek het vergeet om 'n student se huis aan te teken. 393 00:23:06,640 --> 00:23:11,400 Laat my klik op Go, en nou het ons hierdie vorm wat ongelukkig 'n bietjie wyd van links na regs, 394 00:23:11,400 --> 00:23:13,710 maar ek gaan die naam van hierdie gebied huis te roep, 395 00:23:13,710 --> 00:23:16,050 en dan die tipe wat ek nou moet kies. 396 00:23:16,050 --> 00:23:18,870 So laat ons het 'n kort gesprek oor die verskillende tipes in MySQL 397 00:23:18,870 --> 00:23:24,590 want terwyl PHP is swak getik en dit soort van speel vinnig en los met tipes, 398 00:23:24,590 --> 00:23:29,430 in 'n databasis, veral dit is super belangrik om werklik tot jou voordeel gebruik tik 399 00:23:29,430 --> 00:23:33,260 want een van die dinge wat MySQL en ander databasis enjins vir jou kan doen 400 00:23:33,260 --> 00:23:37,910 is om seker te maak dat jy nie bogus data in jou databasis. 401 00:23:37,910 --> 00:23:41,850 Dit is soort van gratis foutopsporing tot jou beskikking. 402 00:23:41,850 --> 00:23:46,250 >> Vir die huis wat ons natuurlik nie wil hê om dit te 'n int, wat is 'n 32-bis waarde in MySQL. 403 00:23:46,250 --> 00:23:49,810 Ons het praat kortliks op Vrydag oor varchar, wat staan ​​vir veranderlike lengte char. 404 00:23:49,810 --> 00:23:54,720 Wat is dit? Dit laat jou toe om te spesifiseer dat jy dit wil 'n string van een of ander aard te wees. 405 00:23:54,720 --> 00:23:56,840 Jy nie regtig weet vooraf hoe lank dit is, 406 00:23:56,840 --> 00:24:00,100 so ons sal arbitrêr sê 'n huis se naam kan 255 karakters, 407 00:24:00,100 --> 00:24:04,190 maar jy kan gaan met 32, 64 - enige getal regtig. 408 00:24:04,190 --> 00:24:10,700 Maar die voordeel van die gebruik van 'n varchar oor 'n veld met die naam kar is wat? 409 00:24:10,700 --> 00:24:15,110 Net intuïtief as ek scroll down hier, merk daar is 'n char en daar is varchar. 410 00:24:15,110 --> 00:24:19,520 Varchar veranderlike lengte char char is 'n vaste lengte char. 411 00:24:19,520 --> 00:24:24,730 So wat slegs gebaseer is op daardie omskrywing, wat is die voordeel of nadeel van elk van hierdie? 412 00:24:24,730 --> 00:24:30,490 Met ander woorde, wat omgee oor die onderskeid, of hoekom moet jy omgee? 413 00:24:31,660 --> 00:24:35,750 >> Ja. [Student] varchar meer buigsaamheid, maar neem meer geheue. 414 00:24:35,750 --> 00:24:40,730 Goed. Varchar neem meer - Kom ons kyk. Ek is nie seker of ek dit reg gehoor. 415 00:24:40,730 --> 00:24:42,360 Kan jy sê dat weer? 416 00:24:42,360 --> 00:24:45,850 [Student] Ek sê varchar waarskynlik meer flexibiliteit, maar dit neem meer geheue. 417 00:24:45,850 --> 00:24:51,170 Interessant. Okay. Varchar gee jy waarskynlik meer buigsaamheid, maar neem meer geheue. 418 00:24:51,170 --> 00:24:53,220 Laasgenoemde is nie noodwendig waar nie. 419 00:24:53,220 --> 00:24:56,290 Dit hang af van die konteks, maar kom ons kom terug na daardie. 420 00:24:56,290 --> 00:25:03,230 >> [Onhoorbaar student reaksie] Presies. 421 00:25:03,230 --> 00:25:06,900 Dit is eintlik die geval dat die kar sal tipies gebruik meer geheue 422 00:25:06,900 --> 00:25:10,950 omdat 'n char, soos in C, is soos 'n string, dit is 'n verskeidenheid van die karakters. 423 00:25:10,950 --> 00:25:13,690 So as jy sê 'n char gebied van lengte 255, 424 00:25:13,690 --> 00:25:16,910 die databasis is letterlik gaan gee jou 255 karakters. 425 00:25:16,910 --> 00:25:22,290 En as die huis beland MATHER en 6 karakters in totaal, 426 00:25:22,290 --> 00:25:25,090 jy mors meer as 200 karakters. 427 00:25:25,090 --> 00:25:29,640 >> So 'n varchar doeltreffend gebruik slegs as baie karakters as wat nodig is 428 00:25:29,640 --> 00:25:31,590 tot 'n maksimum bedrag. 429 00:25:31,590 --> 00:25:35,470 Maar die prys wat jy betaal is eintlik prestasie, potensieel. 430 00:25:35,470 --> 00:25:39,740 As jy vooraf weet dat al jou snare gaan wees 8 karakters - 431 00:25:39,740 --> 00:25:43,090 byvoorbeeld, veronderstel dat jy nodig het wagwoorde van lengte 8 - 432 00:25:43,090 --> 00:25:47,350 die positiewe kant van die gebruik van 'n char veld op die geleentheid, maar nie dikwels, 433 00:25:47,350 --> 00:25:51,100 is 'n vaste lengte vir iets soos 'n wagwoord te spesifiseer 434 00:25:51,100 --> 00:25:53,300 want nou is die databasis kan selfs slimmer wees. 435 00:25:53,300 --> 00:25:58,160 As dit weet dat elke char veld, elke string in 'n kolom is dieselfde lengte, 436 00:25:58,160 --> 00:26:00,780 jy terug die funksie van die random access. 437 00:26:00,780 --> 00:26:05,110 Jy kan spring rond tussen die verskillende char velde in jou databasis tabel 438 00:26:05,110 --> 00:26:07,940 want dink van 'n databasis as rye en kolomme. 439 00:26:07,940 --> 00:26:11,670 So as elke een van die snare is dieselfde lengte, 440 00:26:11,670 --> 00:26:17,820 jy weet dat die eerste een is op byte 0, die volgende een is op byte 8 441 00:26:17,820 --> 00:26:20,240 en dan 16 en dan 24 en so meer. 442 00:26:20,240 --> 00:26:24,500 So as al die snare van dieselfde lengte, kan jy spring rond baie meer doeltreffend. 443 00:26:24,500 --> 00:26:26,710 So wat kan 'n voordeel in terme van die prestasie, 444 00:26:26,710 --> 00:26:29,420 maar tipies jy het nie die luukse om te weet by voorbaat, 445 00:26:29,420 --> 00:26:32,170 so 'n varchar is die pad om te gaan. 446 00:26:32,170 --> 00:26:36,030 Hier is 'n ander detail dat selfs Facebook in uiteindelik gehardloop. 447 00:26:36,030 --> 00:26:39,670 Ints is groot, en ons soort van gebruik dit by verstek enige tyd wat ons wil 'n nommer, 448 00:26:39,670 --> 00:26:41,750 maar dit is slegs 32 stukkies. 449 00:26:41,750 --> 00:26:46,210 >> En alhoewel Facebook nie heeltemal nie 4 miljard gebruikers nou, 450 00:26:46,210 --> 00:26:48,680 daar is beslis 'n paar mense daar buite met verskeie rekeninge 451 00:26:48,680 --> 00:26:50,960 of rekeninge wat geopen is en dan gesluit word, 452 00:26:50,960 --> 00:26:55,130 en so Facebook self glo ek 'n paar jaar gelede gehad het om die oorgang van int 453 00:26:55,130 --> 00:27:00,010 om, soos gepas genoem, bigint, wat net 64 bisse plaas. 454 00:27:00,010 --> 00:27:02,230 So, dit is ook 'n ontwerp-besluit. 455 00:27:02,230 --> 00:27:06,570 Jy sal ongelooflik gelukkig wees as jou finale projek draai opstart, 456 00:27:06,570 --> 00:27:10,010 het 4 miljard en nie 1 gebruikers, gee of neem, 457 00:27:10,010 --> 00:27:13,200 in welke geval die gebruik van ints dalk 'n bietjie kortsigtig. 458 00:27:13,200 --> 00:27:16,230 Maar in werklikheid, jou gebruikers tabel is waarskynlik fyn met ints. 459 00:27:16,230 --> 00:27:19,340 Maar vir iets soos pset 7, soos jou geskiedenis tafel, 460 00:27:19,340 --> 00:27:23,700 jy dalk duisende, miljoene gebruikers as jy ontwikkel in etrade.com. 461 00:27:23,700 --> 00:27:26,020 So terwyl jy kan nie meer as 4 miljard gebruikers, 462 00:27:26,020 --> 00:27:30,070 die gebruikers jy het meer as 4 miljard transaksies met verloop van tyd kan hê - 463 00:27:30,070 --> 00:27:33,200 koop en verkoop en dinge in hul geskiedenis. 464 00:27:33,200 --> 00:27:38,090 So as jy verwag - weer, dit is 'n goeie probleme te hê as jy het hierdie baie data - 465 00:27:38,090 --> 00:27:40,920 as jy verwag data van meer as die grootte van 'n int, 466 00:27:40,920 --> 00:27:47,740 gaan met iets soos bigint is 'n rigting nie dikwels genoeg Goedkeuring deur ontwerpers 467 00:27:47,740 --> 00:27:49,710 omdat mense figuur wat nie gaan om 'n probleem te wees, 468 00:27:49,710 --> 00:27:51,930 maar dit is so maklik om iets groter as dit te kies. 469 00:27:51,930 --> 00:27:55,380 Desimale ons gebruik in pset 7, wat bepaal vaste presisie 470 00:27:55,380 --> 00:27:59,840 sodat jy kan verhoed dat die kwessies wat dryf en dubbelspel en reals en dies meer. 471 00:27:59,840 --> 00:28:02,440 >> En dan is daar 'n ander velde hier. Ons sal beweeg ons hande op hulle tot 'n sekere mate. 472 00:28:02,440 --> 00:28:07,270 Maar datums, tye het almal 'n voorgeskrewe formaat in MySQL, 473 00:28:07,270 --> 00:28:10,830 en die voordeel van die stoor datums as datums en nie varchars 474 00:28:10,830 --> 00:28:15,730 beteken dat die databasis kan herformateer hulle in verskillende formate, 475 00:28:15,730 --> 00:28:18,800 of 'n US-formaat of Europese formaat of dies meer - maar jy wil dit - 476 00:28:18,800 --> 00:28:22,700 baie meer doeltreffend as al was dit net 'n paar generiese varchar. 477 00:28:22,700 --> 00:28:25,150 En dan is daar 'n ander binêre, varbinary, druppels. 478 00:28:25,150 --> 00:28:28,580 Hierdie is 'n binêre groot voorwerpe, en jy kan ook binêre data stoor 479 00:28:28,580 --> 00:28:30,750 sowel as geometriese data in 'n databasis. 480 00:28:30,750 --> 00:28:34,350 Maar vir ons sal tipies omgee ints en varchars en dies meer. 481 00:28:34,350 --> 00:28:36,230 Kom ons klaarmaak hierdie voorbeeld met die huis. 482 00:28:36,230 --> 00:28:40,030 Huis ek gaan na willekeur te sê 255 karakters. 483 00:28:40,030 --> 00:28:42,850 Toe het standaard waarde wat ons kan doen. 484 00:28:42,850 --> 00:28:47,440 Ons kon by verstek sit almal in Mather House, byvoorbeeld. 485 00:28:47,440 --> 00:28:49,710 Dit is hoe ons kan spesifiseer dat die databasis 486 00:28:49,710 --> 00:28:52,460 moet seker maak dat iemand altyd 'n waarde. Maar ek sal laat wees. 487 00:28:52,460 --> 00:28:55,270 Om die waarheid te sê, vir die mense wat daar woon buite die kampus, en nie in 'n huis, 488 00:28:55,270 --> 00:28:59,590 miskien is ek eintlik wil om te spesifiseer dat die standaard waarde vir die huis is NULL, 489 00:28:59,590 --> 00:29:04,890 en dan moet ek hierdie boks en die databasis dis okay as die gebruiker se huis is NULL vertel. 490 00:29:04,890 --> 00:29:07,270 >> Weereens, dit is 'n verdedigingsmeganisme wat jy kan in plek gestel 491 00:29:07,270 --> 00:29:10,590 so jy hoef nie eens om dit te sit in jou PHP-kode noodwendig. 492 00:29:10,590 --> 00:29:14,630 Die databasis sal verseker dat dinge is of nie NULL. 493 00:29:14,630 --> 00:29:17,310 En dan laastens, attribute. 494 00:29:17,310 --> 00:29:18,920 Nie een van hierdie is regtig relevant. 495 00:29:18,920 --> 00:29:22,880 Binêre, unsigned - nie een van daardie is wat relevant is tot 'n varchar. 496 00:29:22,880 --> 00:29:24,220 Indeks. 497 00:29:24,220 --> 00:29:27,320 Is daar iemand weet of onthou of 'n raaiskoot wat 'n indeks is 498 00:29:27,320 --> 00:29:29,510 vir iets soos die huis? 499 00:29:29,510 --> 00:29:35,240 Dit is ook eintlik 'n belangrike en relatief maklik ontwerp besluit. 500 00:29:35,240 --> 00:29:39,200 Vir diegene wat dit nog nie gesien het, op Vrydag ons gesels kortliks oor primêre sleutels. 501 00:29:39,200 --> 00:29:43,240 'N primêre sleutel in 'n databasistabel, is die veld of kolom 502 00:29:43,240 --> 00:29:46,270 wat as unieke identifikasie van rye in die tabel. 503 00:29:46,270 --> 00:29:49,150 So, ons het in die huidige tabel het ons IDs name en e-pos. 504 00:29:49,150 --> 00:29:52,050 Watter een van hierdie is die beste kandidaat om 'n primêre sleutel, 505 00:29:52,050 --> 00:29:55,810 wie se rol is om te identifiseer rye? 506 00:29:55,810 --> 00:29:57,530 Waarskynlik ID. 507 00:29:57,530 --> 00:29:59,930 Argumentsonthalwe, kan ons ook gebruik wat al? 508 00:29:59,930 --> 00:30:02,860 Miskien het jy kan gebruik e-pos, want in teorie is dit uniek 509 00:30:02,860 --> 00:30:05,380 tensy mense is deel van e-pos rekeninge. 510 00:30:05,380 --> 00:30:09,980 Maar die werklikheid is dat as jy die gebruik van 'n numeriese ID soos 1234, 511 00:30:09,980 --> 00:30:14,170 dit is net 32 ​​bisse, terwyl 'n e-pos adres kan dit baie bytes of hierdie baie bytes. 512 00:30:14,170 --> 00:30:16,610 Dus, in terme van doeltreffendheid vir unieke identifiseerders nie, 513 00:30:16,610 --> 00:30:19,270 dit is geneig om goeie praktyk wees om net 'n int te gebruik 514 00:30:19,270 --> 00:30:23,090 selfs as jy het 'n paar string kandidaat wat jy kan waarskynlik gebruik. 515 00:30:23,090 --> 00:30:26,760 >> Vir iets soos die huis, moet dit nie wees om 'n primêre sleutel 516 00:30:26,760 --> 00:30:30,770 want dan slegs 1 persoon kan lewe in Mather en 1 persoon in die Currier en dies meer. 517 00:30:30,770 --> 00:30:32,790 Net so, moet dit nie uniek wees. 518 00:30:32,790 --> 00:30:37,830 Die verskil tussen primêre en unieke, is dat in die geval van ons huidige tafel, 519 00:30:37,830 --> 00:30:42,620 ID sou wees primêre maar e-pos is nie vir die rede waarom ons nou net genoem primêre - 520 00:30:42,620 --> 00:30:44,740 prestasie - maar dit moet nog steeds uniek wees. 521 00:30:44,740 --> 00:30:47,200 So jy kan nog steeds uniekheid sonder om die eis afdwing 522 00:30:47,200 --> 00:30:49,520 dat dit 'n super belangrik primêre veld. 523 00:30:49,520 --> 00:30:52,610 Maar hierdie een is baie nuttig: Index. 524 00:30:52,610 --> 00:30:56,180 As jy weet by voorbaat vir jou finale projek vir pset 7, of in die algemeen, 525 00:30:56,180 --> 00:30:59,480 dat hierdie veld huis gaan om iets wat jy soek op 'n baie 526 00:30:59,480 --> 00:31:01,910 deur gebruik te maak van die Gekose navraag of iets anders, 527 00:31:01,910 --> 00:31:05,180 dan kan jy preemptively die databasis vertel sy magie te werk 528 00:31:05,180 --> 00:31:10,510 en maak seker dat dit in die geheue skep enige fancy datastrukture wat nodig is 529 00:31:10,510 --> 00:31:13,770 soektogte wat gebaseer is op die huis te bespoedig. 530 00:31:13,770 --> 00:31:17,860 Miskien is dit 'n hash tafel gebruik, miskien is dit sal gebruik om 'n geskakelde lys. 531 00:31:17,860 --> 00:31:21,260 In werklikheid, is dit geneig om 'n boom te gebruik, wat dikwels 'n struktuur genaamd 'n B-boom - 532 00:31:21,260 --> 00:31:24,090 nie 'n binêre boom, maar 'n B-boom - wat is 'n baie wye boom 533 00:31:24,090 --> 00:31:27,370 wat jy kan sien in 'n klas soos CS124, die data strukture klas. 534 00:31:27,370 --> 00:31:31,800 Maar in kort, het jy nie hoef te bekommer oor dat wanneer die gebruik van smart databasis sagteware. 535 00:31:31,800 --> 00:31:35,890 Jy kan net sê dit, "Index hierdie veld, sodat ek dit meer doeltreffend te kan soek." 536 00:31:35,890 --> 00:31:40,250 >> As jy laat dit af, en jy probeer om te soek vir almal in die databasis wat woon in Mather, 537 00:31:40,250 --> 00:31:42,710 dit sal oorgaan in 'n lineêre soek. 538 00:31:42,710 --> 00:31:45,360 En as jy het 6000 voorgraads waar al wat lewe, saamkom in 'n huis, 539 00:31:45,360 --> 00:31:47,900 jy gaan die hele tabel te soek die Matherites te vind, 540 00:31:47,900 --> 00:31:52,190 terwyl as jy sê Index, hopelik sal dit iets naby aan 'n logaritmiese soektog 541 00:31:52,190 --> 00:31:54,510 daardie soorte van studente te vind. 542 00:31:54,510 --> 00:31:56,750 Dit is net 'n gratis funksie om te draai op, 543 00:31:56,750 --> 00:31:59,530 selfs al is dit kom teen 'n prys van 'n paar bedrag van die ruimte. 544 00:31:59,530 --> 00:32:02,690 Ten slotte, motor-inkrement hierdie AI veld, 545 00:32:02,690 --> 00:32:05,830 wat beteken dat net as dit is 'n int en jy nie wil hê om te sorg om dit self te inkrementeer 546 00:32:05,830 --> 00:32:07,570 elke keer as daar is 'n nuwe gebruiker is, maak seker dat, 547 00:32:07,570 --> 00:32:11,910 en elke gebruiker wat kry ingevoeg sal outomaties 'n nuwe ID. 548 00:32:11,910 --> 00:32:15,620 Kom ons kliek op Stoor en nou laat ons fout vind met hierdie ontwerp. 549 00:32:15,620 --> 00:32:20,200 As ek gaan in Dadaïsten, kennis dat beide Mike en my huis is NULL. 550 00:32:20,200 --> 00:32:22,420 Ek kan gebruik phpMyAdmin dit handmatig te wysig. 551 00:32:22,420 --> 00:32:25,110 Ek kan gaan in hier en tik Mather en dan druk Enter 552 00:32:25,110 --> 00:32:27,740 en nou op die tafel is anders. 553 00:32:27,740 --> 00:32:29,270 Maar let ek kon iets anders as goed te doen. 554 00:32:29,270 --> 00:32:33,530 Dawid se ID is 1, so phpMyAdmin weer is net 'n administratiewe hulpmiddel; 555 00:32:33,530 --> 00:32:35,970 dit is nie iets wat jou gebruikers ooit gaan om te sien. 556 00:32:35,970 --> 00:32:38,810 So as ek kliek op die SQL-blad plaas tot bo - 557 00:32:38,810 --> 00:32:41,450 en weer, sal pset 7 stel om jou te meer van hierdie navrae - 558 00:32:41,450 --> 00:32:45,260 Ek kan met die hand voer die SQL-gestruktureerde navraagtaal opdrag 559 00:32:45,260 --> 00:32:56,410 UPDATE gebruikers SET huis = 'Pfoho' WHERE id = 1. 560 00:32:56,410 --> 00:33:00,830 Hierdie SQL queries, mooi genoeg, mooi leesbare van links na regs. 561 00:33:00,830 --> 00:33:04,350 Werk die gebruikers-tabel, stel die veld genaamd huis Pfoho 562 00:33:04,350 --> 00:33:06,830 waar die gebruiker se ID is 1. 563 00:33:06,830 --> 00:33:11,480 Of ek kan selfs waar e-pos = 'malan@harvard.edu'. 564 00:33:11,480 --> 00:33:14,860 So lank as wat my uniek identifiseer, sou dit so goed werk. 565 00:33:14,860 --> 00:33:18,810 Maar ID is geneig om hoër prestasie, so laat doen. 566 00:33:18,810 --> 00:33:22,950 Kom se klik op Go. Okay, lecture.users nie bestaan ​​nie. Wat is my fout? 567 00:33:22,950 --> 00:33:26,220 Wat is die tafel eintlik genoem hier? 568 00:33:26,220 --> 00:33:28,770 Dit is genoem studente net omdat dit is wat ons gedoen het hier op links bo. 569 00:33:28,770 --> 00:33:31,860 Dit is genoem studente, nie-gebruikers. So kliek Gaan nou. 570 00:33:31,860 --> 00:33:34,330 1 ry geraak. Query het 0,01 sekondes. 571 00:33:34,330 --> 00:33:38,010 As ek kliek nou Blaai nou Malan lewens in Pfoho. 572 00:33:38,010 --> 00:33:42,070 So dit is 'n ander smaak van SQL, maar die pset sal loop jy deur middel van 'n bietjie meer van daardie. 573 00:33:42,070 --> 00:33:44,710 >> Daar is 'n dom besluit wat ek reeds hier gemaak. 574 00:33:44,710 --> 00:33:47,820 Ek sou argumenteer dat hierdie databasis ontwerp is ondoeltreffend 575 00:33:47,820 --> 00:33:51,650 want hoe meer mense ek by die studente-tabel, 576 00:33:51,650 --> 00:33:54,730 die meer van ons begin ek byvoeg, die meer van die TFS ek begin te voeg, 577 00:33:54,730 --> 00:33:58,320 ons gaan begin om te sien wat in hierdie tabel ontslag? 578 00:34:00,840 --> 00:34:06,020 >> Ja. [Student] Aangesien dit is in studente, is ons met behulp van dieselfde [onhoorbaar] 579 00:34:06,020 --> 00:34:07,360 Dieselfde reg, presies. 580 00:34:07,360 --> 00:34:10,400 So as 400 mense woon in Mather, gee of neem, 581 00:34:10,400 --> 00:34:15,000 uiteindelik hierdie tabel 400 rye wat sê: "Mather," "Mather, gaan te hê" 582 00:34:15,000 --> 00:34:16,590 "Mather," "Mather," "Mather." 583 00:34:16,590 --> 00:34:19,820 Ons mors van hierdie grepe, en daar is daar 'n paar van die wegneemetes. 584 00:34:19,820 --> 00:34:23,080 1, daar is die gek hoek geval waar as iemand 'n klomp geld betaal 585 00:34:23,080 --> 00:34:25,949 en hernoemt Mather, ons het nou ons hele databasis tabel te verander. 586 00:34:25,949 --> 00:34:29,730 Dit gaan nie dikwels gebeur, maar Pfoho was eens bekend as Noord-House 15 jaar gelede, 587 00:34:29,730 --> 00:34:32,310 dit gebeur ook. Maar dit is nie al wat dwingende. 588 00:34:32,310 --> 00:34:36,000 Meer oortuigend as 'n hoek geval soos dié van die behoefte om die data in grootmaat te werk 589 00:34:36,000 --> 00:34:41,150 vir 'n databasis is die rede waarom jy die stoor MATHER weer en weer en weer en weer? 590 00:34:41,150 --> 00:34:43,020 Dit is 'n baie van karakters, 6 karakters. 591 00:34:43,020 --> 00:34:45,500 Kan ons nie doen selfs beter as dit, veral vir Pforzheimer? 592 00:34:45,500 --> 00:34:48,320 Waarlik, ons kan beter doen as wat baie karakters. 593 00:34:48,320 --> 00:34:51,790 Waarom nie net 'n unieke identifikasienommer assosieer met elke huis 594 00:34:51,790 --> 00:34:55,020 en die winkel wat vir elke gebruiker? Kom ons probeer dit. 595 00:34:55,020 --> 00:35:00,610 Eerder as om net die studente-tabel gebruik, laat my gaan na my lesing databasis up hier links bo. 596 00:35:00,610 --> 00:35:02,600 Kennisgewing hier is dit sê Skep tabel. 597 00:35:02,600 --> 00:35:04,550 Laat my 'n nuwe tabel genaamd huise. 598 00:35:04,550 --> 00:35:08,880 Die getal kolomme gaan wees 2. Enter. 599 00:35:08,880 --> 00:35:11,200 Nou het ek het 2 velde. 600 00:35:11,200 --> 00:35:14,600 Ek gaan om te noem dit die naam, en dit gaan 'n varchar van lengte 255, 601 00:35:14,600 --> 00:35:18,770 >> maar dit is redelik arbitrêre. Laat my hier deur konvensie sit. 602 00:35:18,770 --> 00:35:22,840 So sit 'n ID hier. Kom ons gee elke huis 'n unieke identifikasienommer. 603 00:35:22,840 --> 00:35:25,360 Kom ons gee elke huis 'n naam. 604 00:35:25,360 --> 00:35:30,980 Kom ons spesifiseer dat die identifikasie sal unsigned net deur konvensie om slegs positiewe getalle. 605 00:35:30,980 --> 00:35:35,020 Kom ons gaan voort en gee dit 'n outo-inkrement veld vir nou. 606 00:35:35,020 --> 00:35:38,160 En doen ons moet iets anders? 607 00:35:38,160 --> 00:35:41,010 Kom ons gaan voort en klik op Save. 608 00:35:41,010 --> 00:35:42,480 Nou het ek 'n tweede tabel. 609 00:35:42,480 --> 00:35:45,860 Let op as 'n eenkant is die effens kriptiese SQL opdrag 610 00:35:45,860 --> 00:35:50,280 dat jy sou gehad het met die hand te tik as dit nie 'n administratiewe hulpmiddel soos phpMyAdmin gebruik. 611 00:35:50,280 --> 00:35:51,990 Sodat 'n ander rede waarom ons dit gebruik. 612 00:35:51,990 --> 00:35:55,480 Dit is wonderlik nuttige soort van pedagogies, want jy kan kliek om 613 00:35:55,480 --> 00:36:01,050 en uitvind hoe dinge werk deur net kopieer en plak wat phpMyAdmin het. 614 00:36:01,050 --> 00:36:04,150 Maar die CREATE TABLE opdrag is wat was net uitgevoer word, en hier is my tafel. 615 00:36:04,150 --> 00:36:11,370 Laat my nou voort te gaan en gebruik rou SQL eerder as om eenvoudig deur te kliek op die Voeg in-oortjie. 616 00:36:11,370 --> 00:36:15,040 Laat my INSERT INTO huise, 617 00:36:15,040 --> 00:36:22,230 en ek gaan om te sê die naam van die huis gaan om 'n waarde te hê van 'Mather'. 618 00:36:22,230 --> 00:36:24,790 Dit is dit. Hierdie syntax is 'n bietjie meer kripties. 619 00:36:24,790 --> 00:36:26,660 Dit is die naam van die velde wat ons wil voeg. 620 00:36:26,660 --> 00:36:30,390 Dit is die waardes wat ons wil in te voeg in daardie velde. Laat my klik op Go. 621 00:36:30,390 --> 00:36:34,410 1 ry ingevoeg het 0,02 sekondes. Laat my nou klik op Blaai. 622 00:36:34,410 --> 00:36:42,020 >> Kennisgewing as ek klik op Blaai, daar is Mather, wie se ID is deur automatisering die aantal 1. 623 00:36:42,020 --> 00:36:45,000 Laat my doen die ander een. Laat my gaan in die SQL-blad. 624 00:36:45,000 --> 00:36:52,950 INSERT INTO huise. Die naam van die huis is gaan 'n waarde van Pfoho te hê en so meer. 625 00:36:52,950 --> 00:36:56,350 Gaan. En ek doen dit weer en weer en weer kan hou. 626 00:36:56,350 --> 00:36:59,470 Of as jy verveeld met behulp van phpMyAdmin, kan jy net gebruik die Voeg in-oortjie 627 00:36:59,470 --> 00:37:01,000 en nie die rou SQL te tik. 628 00:37:01,000 --> 00:37:04,690 Jy kan net bang dit vinniger deur te tik, byvoorbeeld, Currier, Enter, 629 00:37:04,690 --> 00:37:07,610 en nou as ons klik op Blaai, daar is Currier met 'n ID van 3. 630 00:37:07,610 --> 00:37:09,920 So, dit is wat ons bedoel met auto-inkrement. 631 00:37:09,920 --> 00:37:12,280 Maar nou moet ons iets op te los in studente. 632 00:37:12,280 --> 00:37:16,240 In studente wat die data tipe van die huis veld moet nou wees? 633 00:37:16,240 --> 00:37:19,450 Dit moet 'n int wees, reg? 634 00:37:19,450 --> 00:37:23,950 Dus is die doel hier is om aan 'n faktorontleding, andersins bekend as normaliseer, die tafels 635 00:37:23,950 --> 00:37:27,940 sodat ons stoor nie inligting kere in enige van my tafels. 636 00:37:27,940 --> 00:37:31,130 En weer, is die pad wat ons hier gaan om te sê Mather, Mather, 637 00:37:31,130 --> 00:37:34,220 Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, wat is baie oorbodige 638 00:37:34,220 --> 00:37:36,240 in terme van die verkwisting van die karakters. 639 00:37:36,240 --> 00:37:40,820 So laat ek gaan voort en verander deur te kliek Struktuur, 640 00:37:40,820 --> 00:37:44,620 en laat my voort te gaan en maak seker van die huis af veld en klik op failed, 641 00:37:44,620 --> 00:37:46,990 en nou is ek gaan om dit te verander na 'n int te wees. 642 00:37:46,990 --> 00:37:49,490 255 is nie meer relevant nie. 643 00:37:49,490 --> 00:37:54,010 Laat my gaan voort en sê dit is goed as dit is nog steeds NULL. Red. 644 00:37:54,010 --> 00:37:55,870 Nou tafel studente is suksesvol verander, 645 00:37:55,870 --> 00:37:59,090 en weer oplet huis is 'n int. 646 00:37:59,090 --> 00:38:02,220 As 'n eenkant, die nommer in hakies ignoreer wanneer dit kom by ints. 647 00:38:02,220 --> 00:38:03,770 >> Dit is vir nalatenskap redes. 648 00:38:03,770 --> 00:38:06,920 Terug in die dag wanneer jy nie het GUIs, jy plaas 'n command line omgewing, 649 00:38:06,920 --> 00:38:11,580 die 10 en 11 onderskeidelik gespesifiseer hoeveel karakters wat jy moet wys 650 00:38:11,580 --> 00:38:13,950 in die terminale venster om werklik te vertoon velde. 651 00:38:13,950 --> 00:38:19,150 Dit het niks te doen het met die bietjie lengte van die veld, so ons sal net ignoreer dat vir nou. 652 00:38:19,150 --> 00:38:20,990 Nou ek het om te gaan in hierdie tabel. 653 00:38:20,990 --> 00:38:24,610 En as Dawid in Mather woon, moet die huis nie 0, 654 00:38:24,610 --> 00:38:27,350 wat is 'n standaard int waarde naaste aan VRYGEMAAK. 655 00:38:27,350 --> 00:38:29,810 Hy moet lewe in die huis 1. 656 00:38:29,810 --> 00:38:36,870 Kom ons arbitrêr sê dat Mike lewens in Pfoho, so huis nommer 2. 657 00:38:36,870 --> 00:38:40,160 Nou is my tafel lyk 'n bietjie meer kripties. 658 00:38:40,160 --> 00:38:41,960 Maar die doeltreffendheid oorweeg. 659 00:38:41,960 --> 00:38:44,860 Ek is nou met behulp van slegs 32 stukkies om die huis te identifiseer, 660 00:38:44,860 --> 00:38:49,530 wat beteken daar is net 1 kanoniese definisie van my huis Mather en Pfoho 661 00:38:49,530 --> 00:38:52,090 en dit is in die huise-tabel. 662 00:38:52,090 --> 00:38:55,880 So as ek wil nou weer by hierdie tabelle, dink dit op hierdie manier. 663 00:38:55,880 --> 00:39:01,980 Hier het ek my studente tafel, en op die regterkant is daar hierdie getalle, 1 en 2. 664 00:39:01,980 --> 00:39:04,180 1 is Mather, 2 is Pfoho. 665 00:39:04,180 --> 00:39:08,580 Ons het daardie getalle in hierdie ander tabel, wat genoem word huise, 666 00:39:08,580 --> 00:39:11,020 1 en 2 en 3 vir die 3 huise. 667 00:39:11,020 --> 00:39:14,990 Wat ons nou wil doen is het die vermoë om in die kode, PHP en SQL, 668 00:39:14,990 --> 00:39:18,800 te sorteer weer by hierdie tabelle, waar as dit is die studente en dit is die huise, 669 00:39:18,800 --> 00:39:22,050 ons wil kombineer hulle op een of ander manier, sodat 1 lyne met 1, 670 00:39:22,050 --> 00:39:25,670 2 lyne met 2, en sodat ons kan uitvind waar Dawid 671 00:39:25,670 --> 00:39:28,000 en waar Mike en waar almal woon. 672 00:39:28,000 --> 00:39:31,850 Om dit te doen, kan ons 'n SQL query soos die volgende uit te voer. 673 00:39:31,850 --> 00:39:40,470 SELECT * FROM sluit studente aan by huise op - 674 00:39:40,470 --> 00:39:43,000 En nou wat velde wil ons aan te sluit? 675 00:39:43,000 --> 00:39:49,520 So students.house = houses.id. 676 00:39:49,520 --> 00:39:54,150 >> 'N bietjie kripties, maar hierdie deel beteken letterlik 'n nuwe tydelike tabel 677 00:39:54,150 --> 00:39:56,690 dit is die gevolg van die deelname van studente en huise. 678 00:39:56,690 --> 00:40:00,340 En hoe wil jy die punte van my vingers om hier te kombineer? 679 00:40:00,340 --> 00:40:05,280 Stel die studente se huis veld gelyk aan die huise se ID-veld. 680 00:40:05,280 --> 00:40:10,220 En as ek nou kliek Gaan ek terug te kry presies wat ek gehoop het. 681 00:40:10,220 --> 00:40:15,890 Dawid is in Mather, Mike is in Pfoho, en ek sien ook die unieke identifiseerders nie. 682 00:40:15,890 --> 00:40:18,640 Maar die punt is nou het ek 'n volledige tabel. 683 00:40:18,640 --> 00:40:23,020 En so het die afhaal hier vir pset 7 of werklik vir die finale projek: 684 00:40:23,020 --> 00:40:25,830 As jy vind dat jy 'n stuk van inligting stoor kere, 685 00:40:25,830 --> 00:40:28,850 of dit is 'n huis, miskien is dit 'n stad, provinsie, en zip 686 00:40:28,850 --> 00:40:32,050 waar zip kan altyd gewoonlik, maar nie gebruik word as 'n unieke identifikasie, 687 00:40:32,050 --> 00:40:35,810 gaan deur die oefening geestelik en dan met iets soos phpMyAdmin 688 00:40:35,810 --> 00:40:40,660 factoring daarop dat gemeenskaplike data, want veral as jou webwerf kry meer goed gebruik 689 00:40:40,660 --> 00:40:45,440 en meer gewild, dit is hoe jy seker maak dat alles is super vinnig, 690 00:40:45,440 --> 00:40:51,930 deur die gee van die databasis soveel wenke te uniekheid as moontlik. 691 00:40:51,930 --> 00:40:53,860 Dit was 'n baie. 692 00:40:53,860 --> 00:40:59,010 Enige vrae? Alles reg. Kom ons neem 'n 5-minute breek daar en hergroepeer. 693 00:41:01,600 --> 00:41:03,540 Alles reg. 694 00:41:03,540 --> 00:41:08,680 Die volgende is 'n voorbeeld wat 'n paar jaar gelede, toe ek CS161, 695 00:41:08,680 --> 00:41:10,960 wat is die bedryfstelsels klas by die kollege 696 00:41:10,960 --> 00:41:15,160 wat is bekend vir sy ongelooflike, maar 'n gek bedrag van die werk, 697 00:41:15,160 --> 00:41:19,810 en dit fokus regtig op 'n paar van die lae-vlak probleme wat ontstaan ​​in bedryfstelsels 698 00:41:19,810 --> 00:41:22,700 en ook selfs in die wêreld van databasisse. 699 00:41:22,700 --> 00:41:27,040 >> Die storie wat vertel is deur my professor, Margo Seltzer, daardie jaar was soos volg. 700 00:41:27,040 --> 00:41:30,990 Veronderstel dat jy 'n bietjie dorm yskas vir jou en jou kamermaat 701 00:41:30,990 --> 00:41:34,030 en beide van julle het regtig soos melk. 702 00:41:34,030 --> 00:41:36,360 So jy tuis kom van klas een dag, jou kamermaat is nog nie daar nie, 703 00:41:36,360 --> 00:41:39,650 jy die yskas oopmaak, en jy besef: "Ag damn, ons is uit melk." 704 00:41:39,650 --> 00:41:42,070 So sluit jy die yskas, jy loop oor die straat na CVS 705 00:41:42,070 --> 00:41:45,830 en kry in die toenemend lang lyne om melk te koop by CVS. 706 00:41:45,830 --> 00:41:48,470 Intussen, jou kamermaat by die huis kom van sy of haar klas, 707 00:41:48,470 --> 00:41:51,690 kom in die kamer, maak die yskas wat regtig wil 'n paar melk, 708 00:41:51,690 --> 00:41:54,130 maak die yskas oop en "Damn, geen melk." 709 00:41:54,130 --> 00:41:57,890 Sodat hy of sy die yskas sluit, loop uit die deur, en gaan na ABP 710 00:41:57,890 --> 00:42:00,910 of iewers anders as CVS waar jy is nie van plan om te stamp in mekaar 711 00:42:00,910 --> 00:42:02,790 om te gaan kry 'n paar melk. 712 00:42:02,790 --> 00:42:04,820 Natuurlik 'n paar minute later, albei van julle kry terug by die huis 713 00:42:04,820 --> 00:42:07,740 en nou het jy twee keer soveel melk as jy eintlik wou. 714 00:42:07,740 --> 00:42:10,670 En synde melk, nou is dit gaan sleg gaan, want jy wil melk 715 00:42:10,670 --> 00:42:14,200 maar jy doen nie regtig soos melk, so nou het jy te veel melk, so dit gaan versuur. 716 00:42:14,200 --> 00:42:16,830 Dit is 'n aaklige, aaklige situasie. 717 00:42:16,830 --> 00:42:22,920 Wat kan opgelos het hierdie penarie as jy was die eerste kamermaat huis? Ja. 718 00:42:22,920 --> 00:42:25,970 [Student] Jy moet 'n nota gelos het. [Lag] 719 00:42:25,970 --> 00:42:28,090 Goed. Jy moet 'n nota gelos het. 720 00:42:28,090 --> 00:42:32,320 Jy moet 'n Post-it nota of die soos om te sê, "Gone vir melk," 721 00:42:32,320 --> 00:42:36,830 en dan is jou kamermaat konseptueel sou gewees het gesluit uit eintlik om dit te doen. 722 00:42:36,830 --> 00:42:38,010 Of jy kan 1 stap verder gaan. 723 00:42:38,010 --> 00:42:41,060 Jy kan letterlik sluit die yskas met 'n soort van die slot, 724 00:42:41,060 --> 00:42:44,870 en nou is jou kamermaat sal letterlik toegesluit word uit die yskas. 725 00:42:44,870 --> 00:42:48,520 As ons terug te veralgemeen tot programmering, 726 00:42:48,520 --> 00:42:51,610 jy kan amper dink die yskas as 'n soort van 'n veranderlike of 'n struct, 727 00:42:51,610 --> 00:42:53,500 'n soort van die houer vir meer inligting. 728 00:42:53,500 --> 00:42:58,290 Die probleem is fundamenteel hier is dat beide van julle is toegelaat om te inspekteer 729 00:42:58,290 --> 00:43:02,370 of lees die toestand van hierdie data struktuur, 730 00:43:02,370 --> 00:43:08,050 maar jy het dit gesien op verskillende tye en tog is albei van julle het 'n besluit gemaak 731 00:43:08,050 --> 00:43:11,920 gebaseer op die toestand van die wêreld op daardie verskillende oomblikke in tyd. 732 00:43:11,920 --> 00:43:15,570 So het jy die yskas gesluit, sou jy ten minste jou kamermaat vermy 733 00:43:15,570 --> 00:43:19,070 in staat was om die toestand van die wêreld te inspekteer, 734 00:43:19,070 --> 00:43:22,530 sodat hy of sy kon nie daardie besluit gemaak het. 735 00:43:22,530 --> 00:43:25,780 So databasisse, soos dit blyk, het hierdie probleem voortdurend. 736 00:43:25,780 --> 00:43:31,050 >> Kom ons kyk of ons kan 'n scenario te bou. 737 00:43:31,050 --> 00:43:34,310 Veronderstel dat jy soort van 'n slegte man, en jy gaan na die Bank van Amerika 738 00:43:34,310 --> 00:43:37,950 of een van die ander plekke in die vierkant wat het 'n paar OTM langs mekaar, 739 00:43:37,950 --> 00:43:41,200 en op een of ander manier het jy uitgepluis het hoe om 'n OTM-kaart te dupliseer - nie almal wat hard. 740 00:43:41,200 --> 00:43:42,730 Dit is net 'n magnetiese strook. 741 00:43:42,730 --> 00:43:45,180 En so wat jy wil om te probeer om dit te doen is speel die spel 742 00:43:45,180 --> 00:43:49,060 waardeur jy 1 kaart in 1 masjien, 'n ander kaart in die ander masjien, 743 00:43:49,060 --> 00:43:51,980 en jy in wese wil om te probeer om geld te gelyktydig onttrek, 744 00:43:51,980 --> 00:43:54,930 want dink dat die storie gaan soos volg. 745 00:43:54,930 --> 00:43:57,350 Die masjien aan die linkerkant neem jou kaart en jou PIN, 746 00:43:57,350 --> 00:44:00,240 en dan sê jy, "Gee my $ 100." 747 00:44:00,240 --> 00:44:04,790 Die OTM is geprogrammeer om eerste te doen op die databasis of die ekwivalent daarvan 'n uitgesoekte - 748 00:44:04,790 --> 00:44:10,780 watter databasis gebruik - om te sien nie hierdie gebruiker ten minste $ 100 in sy of haar rekening? 749 00:44:10,780 --> 00:44:16,180 As dit so is, dan spoeg uit die $ 100 en aftrek $ 100 uit hul balans. 750 00:44:16,180 --> 00:44:20,470 Maar natuurlik as daar is veelvuldige masjiene hier of verskeie maniere te inspekteer 751 00:44:20,470 --> 00:44:23,560 die toestand van daardie wêreld, die bank kluis, om te sien hoeveel geld jy het, 752 00:44:23,560 --> 00:44:26,780 veronderstel dat net deur kans om die masjien aan die linkerkant en die reg 753 00:44:26,780 --> 00:44:30,140 beide daardie vraag vra op min of meer dieselfde oomblik in tyd. 754 00:44:30,140 --> 00:44:34,160 >> En dit kan seker gebeur. OTM'e is rekenaars hierdie dae. 755 00:44:34,160 --> 00:44:37,670 So as die masjien aan die linkerkant sê: "Ja, jy het ten minste $ 100," 756 00:44:37,670 --> 00:44:42,150 Intussen het die masjien aan die regterkant sê: "Ja, jy het ten minste $ 100," 757 00:44:42,150 --> 00:44:47,420 dan beide van hulle voortgaan om hul programme te voltooi en eintlik spoeg uit die $ 100 758 00:44:47,420 --> 00:44:50,820 en sê: "Voorheen moes jy $ 200." 759 00:44:50,820 --> 00:44:54,890 "Laat my die veranderlike bywerk nou $ 100 in die rekening." 760 00:44:54,890 --> 00:44:58,780 Maar as albei van hulle het die saldo van u rekening nagegaan en gevind dat dit is $ 200 761 00:44:58,780 --> 00:45:02,000 en beide van hulle dan doen die wiskunde en sê 200 - 100, 762 00:45:02,000 --> 00:45:06,990 die masjiene spoeg potensieel twee $ 100 wetsontwerpe in elke masjien, 763 00:45:06,990 --> 00:45:11,360 maar hulle het net by jou som rekening balans te wees 100 $. 764 00:45:11,360 --> 00:45:15,130 Met ander woorde, het jy geneem uit $ 200, maar omdat hulle van die toestand van die wêreld 765 00:45:15,130 --> 00:45:18,840 gelyktydig en dan 'n besluit op grond van daardie waarde, 766 00:45:18,840 --> 00:45:21,930 hulle kan dit nie doen die wiskunde uiteindelik korrek. 767 00:45:21,930 --> 00:45:25,520 So ook in 'n bank wat jy regtig wil 'n soort van uitsluiting te hê 768 00:45:25,520 --> 00:45:28,450 sodat so gou as jy die toestand van sommige veranderlike nagegaan 769 00:45:28,450 --> 00:45:31,220 wat is werklik belangrik, soos die saldo van u rekening, 770 00:45:31,220 --> 00:45:36,070 moenie toelaat dat iemand anders besluite te neem op grond van dat, totdat jy klaar is om jou ding te doen, 771 00:45:36,070 --> 00:45:38,920 waar in hierdie geval jy is die OTM op die linkerkant. 772 00:45:38,920 --> 00:45:41,160 Sluit almal anders uit. 773 00:45:41,160 --> 00:45:44,650 Jy kan hierdie effek te bereik in 'n paar verskillende maniere. 774 00:45:44,650 --> 00:45:48,660 >> Die eenvoudigste manier om in MySQL is 'n lyn van SQL dat ons julle gegee het 775 00:45:48,660 --> 00:45:52,030 die probleem stel spesifikasie wat lyk presies soos hierdie. 776 00:45:52,030 --> 00:45:57,420 INSERT INTO die tafel - wat dit ookal genoem - 'n ID, 'n simbool en 'n aandeel, 'n aantal van die aandele, 777 00:45:57,420 --> 00:45:59,660 die volgende waardes, byvoorbeeld. 778 00:45:59,660 --> 00:46:03,370 As jy nog nie die spec te lees nie, dit is 'n voorbeeld met betrekking tot hoe gaan jy oor 779 00:46:03,370 --> 00:46:07,340 10 aandele van die pennie voorraad te koop vir president Skroob, 780 00:46:07,340 --> 00:46:10,340 wie se gebruiker ID gebeur met die getal 7? 781 00:46:10,340 --> 00:46:14,070 Dit sê INSERT INTO tabel die volgende id, simbool, en die getal aandele 782 00:46:14,070 --> 00:46:18,200 van 7, DVN.V ", en 10. 783 00:46:18,200 --> 00:46:21,510 Maar - maar, maar, maar - die tweede reël is die belangrike een. 784 00:46:21,510 --> 00:46:26,310 Duplikaatsleutel UPDATE aandele = aandele + WAARDES (aandele). 785 00:46:26,310 --> 00:46:28,350 So heeltemal kriptiese-soek met die eerste oogopslag. 786 00:46:28,350 --> 00:46:31,990 Maar die feit dat hierdie SQL-navraag, selfs al is dit op die 2 lyne vou, 787 00:46:31,990 --> 00:46:35,920 1 lang navraag, beteken dit dit is atoom 788 00:46:35,920 --> 00:46:41,000 in die sin dat hierdie navraag sal óf almal saam of nie uitgevoer word op alle. 789 00:46:41,000 --> 00:46:45,100 En deur definisie van MySQL, dit is hoe dit geïmplementeer hierdie navraag. 790 00:46:45,100 --> 00:46:51,010 Dit is per definisie in die handleiding wat gewaarborg is om almal op een slag of nie uitvoer nie op alle. 791 00:46:51,010 --> 00:46:54,020 Die motivering hiervoor is soos volg. 792 00:46:54,020 --> 00:46:58,540 As jy in hierdie geval jy probeer om 10 aandele van voorraad te koop, 793 00:46:58,540 --> 00:47:02,260 dit is soort van dieselfde storie as die melk, dit is soort van dieselfde storie as die OTM. 794 00:47:02,260 --> 00:47:04,970 >> As jy die fout maak nie gebruik van hierdie sintaksis 795 00:47:04,970 --> 00:47:09,610 maar in plaas daarvan kies uit die databasis te sien hoeveel aandele van die pennie voorraad 796 00:47:09,610 --> 00:47:13,750 Voorsitter Skroob, en dink hy het 10 aandele, 797 00:47:13,750 --> 00:47:19,330 en dan n paar breukdeel van 'n sekonde later julle dan doen 'n UPDATE verklaring, 798 00:47:19,330 --> 00:47:24,810 wat is 'n ander verklaring in SQL wat sê gaan voort en voeg 10 meer aandele 799 00:47:24,810 --> 00:47:28,700 tot sy huidige 10 sodat ideaal die totaal is 20, 800 00:47:28,700 --> 00:47:33,490 die probleem is, want in vandag se databasis stelsels en omdat in vandag se rekenaars 801 00:47:33,490 --> 00:47:35,990 jy het verskeie verwerkers, verskeie cores - 802 00:47:35,990 --> 00:47:38,920 met ander woorde, rekenaars kan letterlik doen verskeie dinge op een slag - 803 00:47:38,920 --> 00:47:44,270 daar is geen waarborg dat jou SELECT en jou UPDATE in hierdie geval 804 00:47:44,270 --> 00:47:46,150 gaan gebeur rug aan rug. 805 00:47:46,150 --> 00:47:49,140 So 'n slegte scenario sou wees jy die SELECT 806 00:47:49,140 --> 00:47:51,670 om te sien hoeveel aandele van hierdie pennie voorraad Skroob het, 807 00:47:51,670 --> 00:47:54,710 en dan net deur kans om 'n ander databasis navraag uitgevoer word - 808 00:47:54,710 --> 00:47:57,740 miskien sy Skroob in 'n ander blaaier venster probeer om 10 aandele te koop 809 00:47:57,740 --> 00:48:00,700 heeltemal in 'n ander venster, baie soos die ATM - 810 00:48:00,700 --> 00:48:05,410 en veronderstel dat 'n ander navraag tussen SELECT en die update kry. 811 00:48:05,410 --> 00:48:10,210 Dit kan die geval dat Skroob nou sekere aantal aandele verloor 812 00:48:10,210 --> 00:48:14,340 omdat 'n ander proses is om die toestand van sy wêreld te inspekteer, 813 00:48:14,340 --> 00:48:17,800 of hy kry meer aandele as wat hy behoort te hê. 814 00:48:17,800 --> 00:48:23,250 Ons sal nie in die besonderhede van presies wat daardie spesifieke storie lyne sou wees, 815 00:48:23,250 --> 00:48:28,380 maar die punt is as jy het 'n veranderlikes waarde om te kyk en dan 'n besluit neem, 816 00:48:28,380 --> 00:48:32,500 indien daar is 'n risiko van iemand anders om iets te doen in tussen die 2 state, 817 00:48:32,500 --> 00:48:36,220 kan gebeur in multiprocessor stelsels, in multicore stelsels, 818 00:48:36,220 --> 00:48:41,220 rekenaars met die vermoë om verskeie dinge om te doen in 'n keer, kan slegte dinge gebeur 819 00:48:41,220 --> 00:48:44,530 soos bankrekeninge verkeerdelik gedebiteer, twee keer soveel melk te koop, 820 00:48:44,530 --> 00:48:46,730 of in hierdie geval die verkeerde aantal aandele. 821 00:48:46,730 --> 00:48:48,370 Maar daar is 'n makliker manier om te dink oor hierdie. 822 00:48:48,370 --> 00:48:53,290 >> Dit blyk dat SQL ondersteun ook, as jy konfigureer jou tafel korrek, 823 00:48:53,290 --> 00:48:56,920 iets genoem transaksies, wat ek sou argumenteer is selfs makliker om te verstaan 824 00:48:56,920 --> 00:49:00,650 as dit nie, maar dit is nie 'n 1-liner, so dit is eintlik 'n bietjie meer betrokke te raak. 825 00:49:00,650 --> 00:49:04,960 Daar is letterlik 'n verklaring in SQL BEGIN TRANSAKSIE genoem. 826 00:49:04,960 --> 00:49:08,300 Net soos daar kies, UPDATE, INSERT, verwyder, en daarby aan te sluit en 'n klomp van die ander, 827 00:49:08,300 --> 00:49:10,970 daar sleutelwoorde soos BEGIN transaksie. 828 00:49:10,970 --> 00:49:13,560 En wat jy dan doen in die konteks van pset 7 - 829 00:49:13,560 --> 00:49:17,270 jy hoef nie dit te doen vir pset 7; dit uitdruklik ontken nie nodig nie, 830 00:49:17,270 --> 00:49:18,830 maar vir finale projekte kan dit nuttig wees - 831 00:49:18,830 --> 00:49:22,820 indien u 'n navraag van die begin transaksie en dan 'n ander navraag 832 00:49:22,820 --> 00:49:25,620 en dan 'n ander navraag en dan 'n ander, 'n ander, en 'n ander, 833 00:49:25,620 --> 00:49:31,860 die navrae sal eintlik nie uitgevoer word totdat jy die SQL-stelling te noem PLEEG, 834 00:49:31,860 --> 00:49:37,220 op watter punt, of dit nou 2 state of 20 state, sal alles wat hulle uitgevoer word in 'n keer, 835 00:49:37,220 --> 00:49:42,770 wat beteken dat niemand anders per ongeluk te veel melk of debietorder te veel geld kan koop 836 00:49:42,770 --> 00:49:46,340 of te veel aandele koop omdat al jou vrae sal strafgerigte 837 00:49:46,340 --> 00:49:48,410 rug aan rug Terug na. 838 00:49:48,410 --> 00:49:51,580 En dit is super belangrik, veral wanneer jy iets soos hierdie doen. 839 00:49:51,580 --> 00:49:54,900 Dit is 'n arbitrêre voorbeeld wat sê laat se werk die bankrekening 840 00:49:54,900 --> 00:50:00,200 deur die oprigting van 'n balans gelyk aan balans - $ 1000 waar die rekening nommer 2. 841 00:50:00,200 --> 00:50:04,260 En dan die tweede stelling is nou laat deponeer dat $ 1000 842 00:50:04,260 --> 00:50:07,310 in iemand anders se bankrekening wie se rekening nommer is 1. 843 00:50:07,310 --> 00:50:10,400 >> Met ander woorde, dit is 'n perfekte voorbeeld van waar jy wil om seker te maak 844 00:50:10,400 --> 00:50:13,590 dat beide van hierdie stellings gebeur of glad nie 845 00:50:13,590 --> 00:50:15,450 want anders sal die kliënt gaan kry geskroef 846 00:50:15,450 --> 00:50:17,670 en jy gaan om hul geld te neem en dit nie deponeer elders, 847 00:50:17,670 --> 00:50:20,470 of die bank gaan kry geskroef waar jy gaan om die geld te deponeer 848 00:50:20,470 --> 00:50:23,140 maar nie eintlik aftrek van die gebruiker se rekening. 849 00:50:23,140 --> 00:50:25,810 So jy wil hê dat beide van hulle saam te voer. 850 00:50:25,810 --> 00:50:29,140 Dus gaan in die wêreld transaksies. 851 00:50:29,140 --> 00:50:31,360 So dit is iets om te hou in die agterkant van jou gees, 852 00:50:31,360 --> 00:50:34,710 nie soseer vir die doeleindes van net 'n finale projek, 853 00:50:34,710 --> 00:50:36,700 maar as jy jou finale projek om iewers te neem, 854 00:50:36,700 --> 00:50:39,040 as jy wil om te begin 'n paar maatskappy rondom dit, 855 00:50:39,040 --> 00:50:41,270 as jy wil sommige student se probleem op te los op die kampus 856 00:50:41,270 --> 00:50:45,210 en eintlik het 'n lewendige, aktiewe webwerf, dit is die soort van subtiele foute wat kan ontstaan 857 00:50:45,210 --> 00:50:49,480 as jy nie heeltemal dink deur middel van wat kan gebeur as 2 mense 858 00:50:49,480 --> 00:50:54,190 probeer om toegang tot jou webwerf letterlik dieselfde oomblik in tyd, 859 00:50:54,190 --> 00:50:56,890 waardeur hul navrae anders kan verweef raak. 860 00:50:58,840 --> 00:51:01,420 >> Gereed vir 'n paar JavaScript, 'n teaser daarvan? 861 00:51:01,420 --> 00:51:04,320 Dit is ons laaste taal vir die semester. Alles reg. 862 00:51:04,320 --> 00:51:09,940 Gelukkig, JavaScript lyk baie, baie, baie soortgelyk aan die 2 tale, C en PHP, 863 00:51:09,940 --> 00:51:11,140 het ons tot dusver gedoen het. 864 00:51:11,140 --> 00:51:14,340 Daar is geen JavaScript in pset 7, maar dit is 'n baie nuttige instrument 865 00:51:14,340 --> 00:51:18,840 wanneer dit kom by die web-gebaseerde finale projekte te doen of werklik net webprogrammeren meer algemeen. 866 00:51:18,840 --> 00:51:20,950 So 'n vinnige oorsig van iets genoem DOM. 867 00:51:20,950 --> 00:51:23,600 Hier is 'n super eenvoudige webblad wat eintlik net sê hello, wêreld 868 00:51:23,600 --> 00:51:25,970 beide in die titel en in die liggaam. 869 00:51:25,970 --> 00:51:29,270 Soos die inkeping is wat daarop dui vir 'n geruime tyd, 870 00:51:29,270 --> 00:51:31,380 daar is inderdaad 'n hiërargie webblaaie. 871 00:51:31,380 --> 00:51:34,220 Ek kan hierdie HTML-trek soos 'n boom, 872 00:51:34,220 --> 00:51:37,470 dink terug aan ons besprekings van datastrukture in C, soos volg. 873 00:51:37,470 --> 00:51:40,710 Ek het 'n paar spesiale wortel node het die dokument node, 874 00:51:40,710 --> 00:51:43,650 en ons sal die analoog van hierdie in JavaScript sien in net 'n oomblik. 875 00:51:43,650 --> 00:51:48,330 Die eerste kind en enigste kind van daardie in hierdie geval is die HTML-tag. 876 00:51:48,330 --> 00:51:49,880 Daar is geen direkte kartering van die DOCTYPE. 877 00:51:49,880 --> 00:51:53,170 Dit is 'n spesiale ding, so ons moet net dit ignoreer wanneer dit kom by hierdie DOM, 878 00:51:53,170 --> 00:51:55,810 hierdie Document Object Model boom. 879 00:51:55,810 --> 00:51:59,530 Let daarop dat die HTML-tag, wat ek arbitrêr uitgebeeld as 'n reghoek, 880 00:51:59,530 --> 00:52:02,890 het 2 kinders: die kop en lyf. 881 00:52:02,890 --> 00:52:04,840 >> Dit is insgelyks as reghoeke geteken. 882 00:52:04,840 --> 00:52:08,970 Dit is betekenisvol picturaal dat die kop is aan die linkerkant van die liggaam. 883 00:52:08,970 --> 00:52:11,960 Die implikasie is dat kop kom eerste in die boom. 884 00:52:11,960 --> 00:52:14,910 So daar is eintlik 'n bestel aan 'n boom wanneer jy trek dit soos hierdie, 885 00:52:14,910 --> 00:52:17,460 selfs al is die vorms en noem maar op is arbitrêr. 886 00:52:17,460 --> 00:52:20,360 Kop het intussen 'n enkele kind genoem title, 887 00:52:20,360 --> 00:52:25,170 en die titel het eintlik sy eie kind, wat is "Hello, world", 888 00:52:25,170 --> 00:52:32,210 wat ek doelbewus as 'n ovaal hier om te maak dit effens verskil van die reghoek getrek het. 889 00:52:32,210 --> 00:52:37,420 Hierdie reghoeke is elemente, terwyl hello, wêreld is regtig 'n teks node. 890 00:52:37,420 --> 00:52:39,850 So dit is 'n nodus in die boom, maar dit is 'n ander tipe van die node 891 00:52:39,850 --> 00:52:41,730 so ek het dit arbitrêr anders. 892 00:52:41,730 --> 00:52:45,000 Net so het die liggaam 'n kind genoem hello, wêreld, sowel 893 00:52:45,000 --> 00:52:47,910 so anders node selfs al is hulle is toevallig dieselfde teks, 894 00:52:47,910 --> 00:52:52,100 maar ek het dit opgestel deur gebruik te maak van die dieselfde vorm. So wat omgee? 895 00:52:52,100 --> 00:52:56,820 Wel, wat is mooi oor HTML is dat dit nie hierdie hiërargiese aard. 896 00:52:56,820 --> 00:53:01,010 En wat is mooi oor JavaScript en veral biblioteke wat vrylik beskikbaar is 897 00:53:01,010 --> 00:53:07,120 en populêre soos jQuery, kan jy navigeer die boom struktuur so ongelooflik maklik. 898 00:53:07,120 --> 00:53:11,790 Enige van die dinge wat ons gedoen het in C met wysers en polygonisatie bome en recursing op nodes 899 00:53:11,790 --> 00:53:15,300 links kind na regs kind, almal van 'n skielike ons kan sorteer as vanselfsprekend aanvaar 900 00:53:15,300 --> 00:53:19,450 ongelooflik insiggewend indien nie 'n bietjie frustrerend 901 00:53:19,450 --> 00:53:22,470 maar nie naastenby 'n doeltreffende manier om te gaan oor programmering. 902 00:53:22,470 --> 00:53:24,470 En so met hierdie hoër vlak tale soos JavaScript 903 00:53:24,470 --> 00:53:28,340 sal ons in staat wees om hierdie boom baie meer intuïtief navigeer. 904 00:53:28,340 --> 00:53:30,430 >> En inderdaad die sintaks is redelik vertroud te wees. 905 00:53:30,430 --> 00:53:32,950 As jy nog nooit JavaScript gesien het, dit is 'n baie mooi verwysing 906 00:53:32,950 --> 00:53:35,910 van die Mozilla mense, die mense wat maak Firefox, 907 00:53:35,910 --> 00:53:38,370 so voel vry om te blaai op jou gemak. 908 00:53:38,370 --> 00:53:41,590 Wat jy sal vind - en hierdie skyfies is identies aan wat ons gebruik om die ander dag - 909 00:53:41,590 --> 00:53:44,030 insgelyks, hoof weg. 910 00:53:44,030 --> 00:53:47,010 So wanneer jy skryf 'n program in JavaScript, is daar geen hooffunksie. 911 00:53:47,010 --> 00:53:48,690 Jy moet net begin kode skryf. 912 00:53:48,690 --> 00:53:51,660 Maar 'n belangrike onderskeid tussen JavaScript en C en PHP 913 00:53:51,660 --> 00:53:55,890 is dat terwyl C en PHP tot dusver uitgevoer is bediener kant 914 00:53:55,890 --> 00:53:59,180 deur die toestel in hierdie geval of meer in die algemeen deur 'n bediener, 915 00:53:59,180 --> 00:54:04,270 JavaScript deur die ontwerp word gewoonlik uitgevoer deur 'n leser. 916 00:54:04,270 --> 00:54:08,440 Met ander woorde, kan jy JavaScript-kode skryf, as ons is om te 917 00:54:08,440 --> 00:54:13,080 op 'n bediener in die toestel, maar jy sluit dit onder jou HTML, onder jou CSS, 918 00:54:13,080 --> 00:54:16,100 onder jou GIFs en jou PNGs en jou JPEG 919 00:54:16,100 --> 00:54:19,170 sodat wanneer die gebruiker besoek jou web bladsy, as jy JavaScript gebruik, 920 00:54:19,170 --> 00:54:21,770 dat die JavaScript-kode kom vanaf bediener browser, 921 00:54:21,770 --> 00:54:24,540 en dit is die leser wat dit werklik voer. 922 00:54:24,540 --> 00:54:27,960 So, dit het betekenisvolle implikasies vir selfs intellektuele eiendom. 923 00:54:27,960 --> 00:54:32,600 Dit is soort van dom om selfs te dink oor die beskerming van jou IP wanneer dit kom by die JavaScript-kode 924 00:54:32,600 --> 00:54:37,560 want deur die aard van die taal kry dit gewoonlik uitgevoer browser kant. 925 00:54:37,560 --> 00:54:40,360 >> Jy kan verduisteren, wat beteken dat jy kan maak dat dit lyk mal en lelik 926 00:54:40,360 --> 00:54:45,400 met geen spasie, verskriklike veranderlike name, maak dit moeiliker vir mense om jou IP te steel, 927 00:54:45,400 --> 00:54:48,120 maar die sleutel is dat dit die leser kant is uitgevoer. 928 00:54:48,120 --> 00:54:51,790 Selfs al as 'n eenkant JavaScript gebruik kan word bediener-kant, 929 00:54:51,790 --> 00:54:54,480 die mees algemene gebruik geval is nou nog op die leser. 930 00:54:54,480 --> 00:54:59,800 En hier is hoe dit lyk. Hier is 'n if-else if-else bou net soos C, net soos PHP. 931 00:54:59,800 --> 00:55:02,420 Hier is 'n Boole-uitdrukking wanneer jy "of" 2 dinge saam. 932 00:55:02,420 --> 00:55:04,330 Hier is wanneer jy "en" 2 dinge saam. 933 00:55:04,330 --> 00:55:08,300 Hier is 'n skakelaar verklaring, wat is soortgelyk aan PHP 934 00:55:08,300 --> 00:55:10,810 dat jy kan skakel oor die verskillende tipes van waardes. 935 00:55:10,810 --> 00:55:15,180 Loops insgelyks hier vir loops, wat identies gestruktureer om wat ons nog nooit gesien nie. 936 00:55:15,180 --> 00:55:18,110 Terwyl loops, ons het te doen terwyl loops. 937 00:55:18,110 --> 00:55:20,290 Veranderlikes, ooit so effens anders. 938 00:55:20,290 --> 00:55:24,560 Jy het verklaar veranderlikes soos jy doen in PHP en C, 939 00:55:24,560 --> 00:55:27,860 maar soortgelyk is swak JavaScript getik. 940 00:55:27,860 --> 00:55:32,730 Jy spesifiseer nie int of float of tou of iets wat gewoonlik. 941 00:55:32,730 --> 00:55:34,240 Jy kan spesifiseer var. 942 00:55:34,240 --> 00:55:38,040 Jy het nie var te spesifiseer, maar dit het implikasies as jy dit nie doen nie. 943 00:55:38,040 --> 00:55:42,000 Gewoonlik as jy weglaat var, het jy per ongeluk 'n globale veranderlike in plaas van die plaaslike. 944 00:55:42,000 --> 00:55:46,420 So laat ek stel voor dat jy net sê byna altyd var en dan die naam van die veranderlike. 945 00:55:46,420 --> 00:55:48,740 Dit is nie 'n tipe, dit is net var vir veranderlike. 946 00:55:48,740 --> 00:55:52,930 Dit sou 'n voorbeeld te wees, of dit nou 123 of "Hello, world". 947 00:55:52,930 --> 00:55:58,910 Skikkings is teenwoordig en sintakties soortgelyk aan PHP. 948 00:55:58,910 --> 00:56:03,690 Ek sal sê var getalle en dan het ek weer tussen vierkantige hakies gebruik om 'n veranderlike te verklaar 949 00:56:03,690 --> 00:56:08,870 wie se tipe is verskeidenheid wat hierdie spesifieke getalle in, geskei deur kommas. 950 00:56:08,870 --> 00:56:11,740 En dan laastens, dit is die enigste een wat werklik anders lyk. 951 00:56:11,740 --> 00:56:16,700 Onthou dat ons in PHP geïmplementeer het 'n assosiatiewe skikking vir 'n student 952 00:56:16,700 --> 00:56:20,220 soos Zamyla wat kan lyk soos hierdie, waar die veranderlike genoem student. 953 00:56:20,220 --> 00:56:23,370 Die vierkantige hakies beteken hier kom 'n skikking. 954 00:56:23,370 --> 00:56:28,500 >> Die feit dat ek nie met behulp van numeriese indekse maar snare - id, huis, en die naam - 955 00:56:28,500 --> 00:56:30,990 beteken dat hierdie is 'n assosiatiewe skikking, 956 00:56:30,990 --> 00:56:34,490 en hierdie pyle met die gelykaan teken en die reghoekige hakie 957 00:56:34,490 --> 00:56:37,310 beteken dat die sleutel is "id", die waarde is 1; 958 00:56:37,310 --> 00:56:39,310 die sleutel is "huis", die waarde is Winthrop House; 959 00:56:39,310 --> 00:56:41,800 die sleutel is "Naam", die waarde is Zamyla Chan. 960 00:56:41,800 --> 00:56:47,110 So daar is 3 sleutels binnekant van hierdie assosiatiewe skikking, wat elkeen het sy eie waarde. 961 00:56:47,110 --> 00:56:52,880 Ons het gesien dat in pset 7, of jy sal binnekort in JavaScript dieselfde idee, 962 00:56:52,880 --> 00:56:55,220 maar dit gaan om te kyk soos hierdie. 963 00:56:55,220 --> 00:57:00,070 So var student - nie 'n dollar-teken, en geen melding gemaak van die tipe nog maar var - 964 00:57:00,070 --> 00:57:05,860 gelyk is aan en maak dan krullerige draadjies omdat in JavaScript wanneer jy 'n sleutel waarde pare, 965 00:57:05,860 --> 00:57:08,900 gebruik jy eintlik iets wat 'n voorwerp genoem word. 966 00:57:08,900 --> 00:57:13,490 En dié van julle kan onthou wat het APCS of soortgelyke voorwerpe uit Java 967 00:57:13,490 --> 00:57:15,140 of soortgelyke tale. 968 00:57:15,140 --> 00:57:17,880 JavaScript is nie Java, die eerste van alles. 969 00:57:17,880 --> 00:57:21,600 Dit was 'n doelbewuste ontwerp besluit jaar gelede af te klop iets anders wat gewild was, 970 00:57:21,600 --> 00:57:25,640 sy naam, al is dit het geen fundamentele verhouding om homself te Java. 971 00:57:25,640 --> 00:57:31,490 JavaScript voorwerpe, en jy kan dit deur middel van die krullerige brace notasie. 972 00:57:31,490 --> 00:57:36,710 Voorwerpe in JavaScript is pretty much gelykstaande aan assosiatiewe skikkings in PHP 973 00:57:36,710 --> 00:57:40,030 wanneer dit kom by die stoor van data binne hulle. 974 00:57:40,030 --> 00:57:44,100 >> Maar selfs meer kragtig in JavaScript kan jy baie maklik assosieer funksies 975 00:57:44,100 --> 00:57:48,040 binnekant van 'n voorwerp, en al wat jy kan doen in ander tale, 976 00:57:48,040 --> 00:57:50,040 dit is nogal 'n algemene paradigma, soos ons sal sien. 977 00:57:50,040 --> 00:57:54,380 In kort, hierdie voorwerp 'n student, wat is veral Zamyla, 978 00:57:54,380 --> 00:58:00,380 en dit is soortgelyk konseptueel, net sintakties verskillende van hierdie. 979 00:58:00,380 --> 00:58:03,840 Kom ons eintlik gebruik JavaScript in 'n lêer. 980 00:58:03,840 --> 00:58:05,570 Dit blyk uit daar is 'n script tag. 981 00:58:05,570 --> 00:58:08,180 Ons het gesien hoe 'n styl-tag en ons het gesien ander HTML tags. 982 00:58:08,180 --> 00:58:11,510 Die script tag eintlik sal sommige JavaScript-kode bevat. 983 00:58:11,510 --> 00:58:15,500 Laat my gaan in die toestel, waar ons 'n paar bronkode pre-made. 984 00:58:15,500 --> 00:58:18,700 Ek het nie gepos dit nog op die webwerf, maar ek sal dit na die klas. 985 00:58:18,700 --> 00:58:21,770 Kom ons hierdie een, blink.html. 986 00:58:21,770 --> 00:58:27,560 Terug in die 1990's, was daar letterlik 'n HTML-tag wat die knip genoem tag, 987 00:58:27,560 --> 00:58:30,340 en dit was een van die mees wonderlike oorbenut tags op die Internet 988 00:58:30,340 --> 00:58:36,140 waardeur jy sowat 1990's styl webblad besoek en begin sien teks flikker jy soos hierdie, 989 00:58:36,140 --> 00:58:39,810 die resultate van die markies tag, wat die teks soos hierdie. 990 00:58:39,810 --> 00:58:45,070 Een van die min kere waar die wêreld het eintlik op 'n web standaard ooreengekom, 991 00:58:45,070 --> 00:58:48,250 almal oor die hele linie n paar jaar gelede vermoor die knip tag. 992 00:58:48,250 --> 00:58:52,860 Maar ons kan wek dit as 'n demonstrasie van die krag wat jy het met JavaScript 993 00:58:52,860 --> 00:58:56,660 as jy 'n program skryf binnekant van 'n web bladsy. 994 00:58:56,660 --> 00:59:00,240 Eers laat slaan oor die nuwe dinge en fokus net op die ou. 995 00:59:00,240 --> 00:59:01,780 >> Hier is die ou dinge in hierdie voorbeeld. 996 00:59:01,780 --> 00:59:06,350 Ek het 'n HTML-tag, 'n kop-tag, en 'n titel tag. 997 00:59:06,350 --> 00:59:11,210 Dan het ek 'n liggaam tag hier met 'n div, wat herroep is net 'n reghoekige afdeling van die bladsy 998 00:59:11,210 --> 00:59:14,720 dat ek 'n unieke ID wat arbitrêr "groet" na, 999 00:59:14,720 --> 00:59:18,320 Ek het net so 'n manier van 'n unieke verwys na dit, wat het 'n paar baie eenvoudige teks: 1000 00:59:18,320 --> 00:59:20,220 hello, wêreld. 1001 00:59:20,220 --> 00:59:23,940 Nou laat my blaai na die top van hierdie lêer en sien wat is nuut. 1002 00:59:23,940 --> 00:59:27,710 Die eerste ding wat is nuut op die top is die script tag, 1003 00:59:27,710 --> 00:59:31,280 en binnekant van die script tag kennisgewing Ek het 'n funksie verklaar. 1004 00:59:31,280 --> 00:59:34,610 'N funksie in JavaScript, redelik soortgelyk aan PHP te verklaar, 1005 00:59:34,610 --> 00:59:37,930 jy letterlik funksie dan skryf die naam van die funksie, hakies, 1006 00:59:37,930 --> 00:59:40,400 en miskien 'n paar argumente as wat dit neem nie. 1007 00:59:40,400 --> 00:59:43,510 Toe het ek het my krullerige stut soos gewoonlik, en nou is ons het 'n paar effens nuwe kode, 1008 00:59:43,510 --> 00:59:45,230 maar laat ons sien wat dit beteken. 1009 00:59:45,230 --> 00:59:48,670 So var div, beteken dit gee my net 'n veranderlike genoem div. 1010 00:59:48,670 --> 00:59:50,530 Ek kon genoem het cat, maar ek wou dit genoem word div 1011 00:59:50,530 --> 00:59:52,620 vir redes wat duidelik sal wees in 'n tweede. 1012 00:59:52,620 --> 00:59:57,480 Toe dit blyk uit in JavaScript - en dit is 'n JavaScript-kode ingebed in my web bladsy - 1013 00:59:57,480 --> 01:00:01,760 daar is 'n spesiale globale veranderlike van die spesies genoem dokument. 1014 01:00:01,760 --> 01:00:04,780 JavaScript is in werklikheid 'n objek-georiënteerde taal. 1015 01:00:04,780 --> 01:00:07,230 Ons sal nie in detail in 50 wat dit beteken, 1016 01:00:07,230 --> 01:00:11,180 maar vir nou weet dat 'n voorwerp is pretty much soos 'n struct. 1017 01:00:11,180 --> 01:00:14,740 Soos ons gesien pad terug toe in een van die vroegste probleem sit 1018 01:00:14,740 --> 01:00:17,150 waar ons 'n baie inligting in 'n struct 1019 01:00:17,150 --> 01:00:21,330 insgelyks is dokumenteer 'n spesiale struct wat kom met die leser, 1020 01:00:21,330 --> 01:00:24,810 kom met 'n web bladsy. Dit is nie iets wat ek geskep het. 1021 01:00:24,810 --> 01:00:28,210 Binnekant van hierdie dokument struktuur, maar jy het nie net data 1022 01:00:28,210 --> 01:00:30,010 maar jy moet ook funksies. 1023 01:00:30,010 --> 01:00:34,090 >> En enige tyd wat jy het 'n funksie binnekant van 'n struktuur, binnekant van 'n voorwerp, 1024 01:00:34,090 --> 01:00:36,490 dit is 'n metode genoem. Maar dit is dieselfde ding. 1025 01:00:36,490 --> 01:00:40,110 'N metode is 'n funksie wat net so gebeur binnekant van iets anders te wees. 1026 01:00:40,110 --> 01:00:42,990 So dit beteken dat hierdie spesiale globale veranderlike genaamd dokument 1027 01:00:42,990 --> 01:00:47,690 het 'n funksie genoem getElementById wat letterlik wat dit doen. 1028 01:00:47,690 --> 01:00:52,460 Dit sal kry jy 'n element van die DOM, Document Object Model boom, 1029 01:00:52,460 --> 01:00:55,520 wie se ID is in hierdie geval groet. 1030 01:00:55,520 --> 01:00:59,200 Met ander woorde, al daardie tyd wat ons spandeer op data strukture kom in die spel hier. 1031 01:00:59,200 --> 01:01:01,400 Hierdie beeld van 'n DOM dat ons het 'n oomblik gelede, 1032 01:01:01,400 --> 01:01:06,100 selfs al is die bladsy is 'n bietjie anders, as ek 'n div in hierdie prentjie, 1033 01:01:06,100 --> 01:01:11,180 watter document.getElementById sou na my toe terugkom, sal effektief wees om 'n wyser 1034 01:01:11,180 --> 01:01:15,440 die reghoek in die boom, 'n verwysing na die reghoek in die boom. 1035 01:01:15,440 --> 01:01:18,410 So dit is wat dit beteken om werklik te bel een van daardie funksies. 1036 01:01:18,410 --> 01:01:21,960 Weer in hierdie geval is dit 'n div. Dit is nie 'n liggaam of 'n titel. 1037 01:01:21,960 --> 01:01:26,480 So laat ons sien wat ek dan doen met hierdie div nou dat ek dit binnekant van hierdie veranderlike genoem div. 1038 01:01:26,480 --> 01:01:32,580 Dit blyk uit met JavaScript, jy het die vermoë om die CSS van jou bladsy te dinamies aanpas. 1039 01:01:32,580 --> 01:01:39,060 Tot nou toe, al van die CSS ons gedoen het, al is dit beperk, is in styl eienskappe, 1040 01:01:39,060 --> 01:01:41,730 of waar anders sit ons CSS? 1041 01:01:42,730 --> 01:01:45,810 Ek soort van bederf dat 'n mens. In die styl tag op die top van die lêer. 1042 01:01:45,810 --> 01:01:49,180 Of 'n derde plek is? 1043 01:01:50,710 --> 01:01:54,590 >> 'N eksterne lêer, iets. Css. 1044 01:01:54,590 --> 01:01:56,730 So dit is die 3 plekke het ons CSS tot dusver gedoen het, 1045 01:01:56,730 --> 01:01:59,310 maar die vangs is dat ons hard gekodeer het dit alles. 1046 01:01:59,310 --> 01:02:04,060 Jy besluit om as jy duik in pset 7, het ons besluit om voor die lesings wat ons CSS sou wees. 1047 01:02:04,060 --> 01:02:07,380 Maar as jy wil jou CSS te verander, kan jy eintlik doen nie 1048 01:02:07,380 --> 01:02:09,370 wanneer jy 'n werklike programmeertaal. 1049 01:02:09,370 --> 01:02:13,910 CSS, HTML - nie programmeringstale. JavaScript is. 1050 01:02:13,910 --> 01:02:18,200 So dit blyk dat sodra jy een van daardie reghoeke uit die boom 1051 01:02:18,200 --> 01:02:23,050 genoem die DOM, dit het self n paar data binnekant van dit. 1052 01:02:23,050 --> 01:02:27,820 So het die div dat ek net uit die boom gegryp het wat ons sal noem 'n eiendom binnekant van dit 1053 01:02:27,820 --> 01:02:34,390 genoem styl, en die styl eiendom het self 'n eiendom met die naam van sigbaarheid. 1054 01:02:34,390 --> 01:02:37,330 Ek wil weet dit net deur na 'n CSS gebruiker se handleiding. 1055 01:02:37,330 --> 01:02:41,160 Dit blyk uit daar is 'n sigbaarheid CSS eiendom wat doen wat dit sê. 1056 01:02:41,160 --> 01:02:44,530 Dit maak iets sigbaar of nie, sigbaar is of nie. 1057 01:02:44,530 --> 01:02:46,810 En hoe jy dit doen is dit. 1058 01:02:46,810 --> 01:02:50,510 Ek programmaties vra of die sigbaarheid van hierdie div weggesteek is, 1059 01:02:50,510 --> 01:02:53,390 wat kan ek dit verander? Sigbaar is. 1060 01:02:53,390 --> 01:02:58,840 Anders as die sigbaarheid van hierdie bladsy is nie verborge, logies ek maak dit verborge. 1061 01:02:58,840 --> 01:03:04,070 Ek het geen idee waarom dit is sigbare en verborge en nie sigbare en onsigbare. 1062 01:03:04,070 --> 01:03:06,000 Dit was 'n swak ontwerp besluit langs die pad. 1063 01:03:06,000 --> 01:03:09,530 Maar dit is inderdaad teenoorgesteldes in CSS: sigbare en verborge. 1064 01:03:09,530 --> 01:03:15,520 Dit alles is, beteken dit die CSS van my lêer verander op en af, op en af 1065 01:03:15,520 --> 01:03:16,870 vir daardie spesifieke div. 1066 01:03:16,870 --> 01:03:20,630 Maar weer, dit is 'n funksie genoem knip. Wanneer is die knip funksie genoem? 1067 01:03:20,630 --> 01:03:24,080 Dit blyk dat daar is 'n ander spesiale globale veranderlike genoem venster, 1068 01:03:24,080 --> 01:03:28,220 soortgelyke in gees na 'n dokument, maar terwyl die dokument verwys na jou web bladsy, 1069 01:03:28,220 --> 01:03:31,700 soos die DOM boom, die HTML-kode van die bediener gestuur, 1070 01:03:31,700 --> 01:03:35,250 venster verwys na die chroom rondom dit, die adres bar, die titel bar, 1071 01:03:35,250 --> 01:03:37,880 en al die van daardie dinge rondom jou web bladsy. 1072 01:03:37,880 --> 01:03:42,800 >> En dit blyk dat die venster voorwerp het 'n spesiale funksie binnekant van dit genoem setInterval 1073 01:03:42,800 --> 01:03:44,360 dit beteken wat dit sê. 1074 01:03:44,360 --> 01:03:48,600 Dit sal 'n interval te stel - in hierdie geval elke 500 millisekondes - 1075 01:03:48,600 --> 01:03:52,270 en neem 'n raaiskoot, wat dit gaan elke 500 millisekondes om te doen? 1076 01:03:52,270 --> 01:03:55,240 Dit gaan daardie funksie knip uit te voer. 1077 01:03:55,240 --> 01:03:58,560 En wat is lekker hier, is dat ons kon gedoen het in C, selfs al het ons nooit gedoen het nie. 1078 01:03:58,560 --> 01:04:01,580 C het iets genoem funksie pointers waar jy funksies kan slaag om 1079 01:04:01,580 --> 01:04:03,140 as argumente. 1080 01:04:03,140 --> 01:04:07,620 Net so kan jy in JavaScript slaag die naam van 'n funksie in 'n ander funksie. 1081 01:04:07,620 --> 01:04:10,630 En let op wat ek doen. Ek is nie om dit te doen. 1082 01:04:10,630 --> 01:04:14,380 As ek tussen hakies na die knip, sou dit beteken die knip-funksie te roep. 1083 01:04:14,380 --> 01:04:17,430 As ek dit weglaat, wat beteken hier is die knip funksie 1084 01:04:17,430 --> 01:04:21,330 so dat setInterval kan noem dit elke 500 millisekondes. 1085 01:04:21,330 --> 01:04:28,200 Sodat die eindresultaat, gruwelike alhoewel dit is, is dat as ek kom in die local host en gaan na blink.html, 1086 01:04:28,200 --> 01:04:32,120 Ek nou het dit gebeur weer en weer. 1087 01:04:32,120 --> 01:04:34,950 En as ek eintlik Element Inspekteer, laat ons kyk of ons kan sien. 1088 01:04:34,950 --> 01:04:38,550 Laat my Inspekteer Element, laat my net 'n bietjie scroll down, 1089 01:04:38,550 --> 01:04:44,320 laat my kies Elements hier, en let op die DOM binnekant van Chrome se inspekteur. 1090 01:04:44,320 --> 01:04:48,840 Dit is letterlik verander heen en weer elke 500 millisekondes. 1091 01:04:48,840 --> 01:04:55,660 As ons na ons vriend Nate, 1092 01:04:55,660 --> 01:05:00,020 As jy al ooit gewonder hoe dit werk, soortgelyke idee met 'n interval, 1093 01:05:00,020 --> 01:05:04,810 maar Nate is eintlik baie effektiewe gebruik van kleur in hierdie spesifieke geval hier. 1094 01:05:04,810 --> 01:05:07,350 So, wat meer kan ons werklik te doen met dit? 1095 01:05:07,350 --> 01:05:09,990 Kom ons oopmaak nog 'n voorbeeld en probeer om iets 1096 01:05:09,990 --> 01:05:12,940 dit is programmaties selfs meer bruikbaar as die maak van dinge knip. 1097 01:05:12,940 --> 01:05:17,990 Laat my gaan vandag in ons vorms en gaan in form0. 1098 01:05:17,990 --> 01:05:20,820 Dit was die lelikste moontlike vorm wat ek kon kom met, 1099 01:05:20,820 --> 01:05:23,290 en laat my net wys hoe dit lyk in 'n leser. 1100 01:05:23,290 --> 01:05:28,960 >> Laat my gaan in localhost / vorms, en dit is form0. 1101 01:05:28,960 --> 01:05:33,400 Dit is 'n super lelik HTML vorm wat het 'n paar velde vir e-pos, vir die wagwoord, 1102 01:05:33,400 --> 01:05:37,190 wagwoord, en dan 'n klein boks te stem tot 'n paar terme en voorwaardes. 1103 01:05:37,190 --> 01:05:41,350 Die vangs is as ek hierdie vorm besoek en ek wil nie op te gee jy my e-pos adres, 1104 01:05:41,350 --> 01:05:44,730 Ek wil nie in te stem tot die terme en voorwaardes miskien kan ek kliek Registreer 1105 01:05:44,730 --> 01:05:46,920 en dit laat my deur in elk geval. 1106 01:05:46,920 --> 01:05:50,800 Dit gebeur voor te lê aan 'n dom PHP lêer genaamd dump.php. 1107 01:05:50,800 --> 01:05:58,420 Al wat dit doen is om die druk van die inhoud van $ _GET net vir diagnostiese doeleindes. 1108 01:05:58,420 --> 01:06:01,580 Dit was wat ingedien is nou net deur die gebruiker. 1109 01:06:01,580 --> 01:06:05,010 Maar veronderstel ons eintlik wil hê dat die gebruiker se vorm voorlegging te valideer. 1110 01:06:05,010 --> 01:06:06,530 Laat my gaan in weergawe 1. 1111 01:06:06,530 --> 01:06:11,420 Dit is form1.html. Dit lyk esteties net so sleg, maar let hoe fancy dit is. 1112 01:06:11,420 --> 01:06:15,450 As ek kliek op registreer sonder saam, kry ek geskree. 1113 01:06:15,450 --> 01:06:17,320 "Jy moet jou e-pos adres verskaf." 1114 01:06:17,320 --> 01:06:21,670 Alles reg. So laat ek probeer. So malan@harvard.edu. Ek hoef nie 'n wagwoord. 1115 01:06:21,670 --> 01:06:25,100 Registreer. Msgstr "U moet 'n wagwoord verskaf nie." Alles reg. 1116 01:06:25,100 --> 01:06:28,470 So ek sal 'n wagwoord van karmosyn. Registreer. 1117 01:06:28,470 --> 01:06:32,300 "Wagwoorde stem nie ooreen nie." Ek het nou tik in bloedrooi hier. 1118 01:06:32,300 --> 01:06:35,710 Ek het per ongeluk nagegaan. Registreer. 1119 01:06:35,710 --> 01:06:39,860 "Jy moet toestem tot die terme en voorwaardes." Alles reg. Saamstem dat daar. Registreer. 1120 01:06:39,860 --> 01:06:43,700 En nou is dit wys vir my die diagnostiese opbrengs daar. 1121 01:06:43,700 --> 01:06:45,630 >> So, wat het gebeur? 1122 01:06:45,630 --> 01:06:48,330 Ons het hierdie vermoë om vorm voorleggings te valideer. 1123 01:06:48,330 --> 01:06:51,420 In werklikheid, as jy gedoen het duik in pset 7, daar is 'n verskoning te vra funksie 1124 01:06:51,420 --> 01:06:54,620 wat maak dit redelik maklik om te skreeu op die gebruiker met 'n boodskap op die skerm. 1125 01:06:54,620 --> 01:06:57,580 Ek gebruik 'n effens ander meganisme, die waarskuwing funksie, 1126 01:06:57,580 --> 01:07:03,690 wat nie 'n funksie wat goedgunstelik op, aangesien dit baie lelik gebruiker boodskappe. 1127 01:07:03,690 --> 01:07:05,710 Maar laat ons sien wat ek hier doen. 1128 01:07:05,710 --> 01:07:09,620 Dit is form1.html, en let op dat ek het 'n paar mooi vertroud sintaksis: 1129 01:07:09,620 --> 01:07:12,920 liggaam tag, vorm tag, optrede kenmerk, metode kenmerk. 1130 01:07:12,920 --> 01:07:17,050 Maar let ek my vorm 'n unieke ID vir gerief. 1131 01:07:17,050 --> 01:07:19,190 Dan het ek het 'n e-pos veld wie se soort is teks, 1132 01:07:19,190 --> 01:07:23,780 'n wagwoord veld waarvan die tipe wagwoord bevestiging gebied waarvan die tipe met 'n wagwoord, 1133 01:07:23,780 --> 01:07:28,070 en dan 'n boks wie se naam is ooreenkoms hier, tipe boks. 1134 01:07:28,070 --> 01:07:30,380 En dan het ek 'n submit-knoppie. 1135 01:07:30,380 --> 01:07:33,050 Maar let op die top wat meer Ek het. 1136 01:07:33,050 --> 01:07:35,810 Eerste van alles, daar is 'n ander gebruik van die script tag. 1137 01:07:35,810 --> 01:07:40,520 As jy 'n JavaScript-kode in 'n ander lêer, jy kan dit net soos met CSS. 1138 01:07:40,520 --> 01:07:44,530 En jy doen dit met script bron, en dan sien ek blykbaar is die koppeling van 1139 01:07:44,530 --> 01:07:50,349 googleapis.com na 'n baie lang pad, maar waarvan die lêernaam eindig in jquery.min 1140 01:07:50,349 --> 01:07:52,420 minimum js. 1141 01:07:52,420 --> 01:07:55,969 jQuery is 'n super gewilde biblioteek vir JavaScript wat net JavaScript maak 1142 01:07:55,969 --> 01:07:58,230 al die meer gebruiker-vriendelik te gebruik. 1143 01:07:58,230 --> 01:08:00,610 Dit is effektief 'n de facto standaard. 1144 01:08:00,610 --> 01:08:04,090 So selfs al wat jy oor om te sien nie suiwer is nie JavaScript per se, 1145 01:08:04,090 --> 01:08:09,340 dit is 'n biblioteek op die top van JavaScript baie soos die CS50 biblioteek is 'n laag 1146 01:08:09,340 --> 01:08:13,670 op die top van lae-vlak C-kode, die werklikheid is byna almal op die Internet gebruik. 1147 01:08:13,670 --> 01:08:18,030 So dit is nie opleiding wiele. Dit is net die beste oefen hierdie dae. 1148 01:08:18,030 --> 01:08:22,830 Nou onder sien dat dit my eie script tag, en let op wat ek hier gedoen het. 1149 01:08:22,830 --> 01:08:27,450 Dit blyk dat die jQuery iets 'n bietjie fancy. 1150 01:08:27,450 --> 01:08:29,660 JavaScript dollar tekens, maar hulle is betekenisloos. 1151 01:08:29,660 --> 01:08:32,870 >> Hulle is soos die letter A of B of C. 1152 01:08:32,870 --> 01:08:36,670 jQuery het eenvoudig die konvensie aanvaar of soort van laid eis aan die feit 1153 01:08:36,670 --> 01:08:40,280 dat $ hul spesiale simbool. 1154 01:08:40,280 --> 01:08:44,950 So gou as wat jy hierdie globale JavaScript-lêer laai hier met die script tag, 1155 01:08:44,950 --> 01:08:49,080 jy het toegang tot 'n spesiale globale veranderlike wat genoem $. 1156 01:08:49,080 --> 01:08:53,009 Dit is meer behoorlik genoem jQuery, maar dit lyk nie naastenby so sexy as $. 1157 01:08:53,009 --> 01:08:56,250 Maar $ het geen spesiale betekenis. In PHP spesiale betekenis gehad het. 1158 01:08:56,250 --> 01:08:58,440 Jy het om dit te hê in die voorkant van 'n veranderlike. 1159 01:08:58,440 --> 01:09:01,670 Dit is net 'n sexy ding wat hulle het. 1160 01:09:01,670 --> 01:09:03,389 Wat gaan hier aan? 1161 01:09:03,389 --> 01:09:08,830 Kennisgewing ek verby my globale veranderlike dokument aan die jQuery funksie 1162 01:09:08,830 --> 01:09:10,860 en toe ek vra gereed. 1163 01:09:10,860 --> 01:09:15,480 Watter jQuery nie in wese is dit kan jou 'n paar vanielje JavaScript dinge te neem 1164 01:09:15,480 --> 01:09:17,889 soos die dokument voorwerp, die venster voorwerp, 1165 01:09:17,889 --> 01:09:20,790 en as jy dit in die jQuery funksie slaag - 1166 01:09:20,790 --> 01:09:24,429 en weer, om duidelik te wees, dit is 'n funksie genoem jQuery - 1167 01:09:24,429 --> 01:09:28,240 wat dit doen, is dit terug na jou 'n spesiale weergawe van die dokument 1168 01:09:28,240 --> 01:09:30,700 wat meer funksionaliteit wat verband hou met dit. 1169 01:09:30,700 --> 01:09:34,760 So in rou JavaScript daar is geen gereed funksie, 1170 01:09:34,760 --> 01:09:37,810 maar as jy slaag dokument eers na die jQuery funksie, 1171 01:09:37,810 --> 01:09:40,960 dit terug na jou 'n spesiale weergawe van die dokument voorwerp 1172 01:09:40,960 --> 01:09:43,030 wat meer fancy funksies. 1173 01:09:43,030 --> 01:09:48,230 En dit is hoekom mense dit wil hê. Dit maak net dinge makliker om te doen, as ons oor om te sien. 1174 01:09:48,230 --> 01:09:49,820 So, wat beteken hierdie reël van die kode? 1175 01:09:49,820 --> 01:09:52,690 Hierdie lyn van die kode hier beteken wanneer die dokument is gereed - 1176 01:09:52,690 --> 01:09:56,830 met ander woorde, wanneer die leser is die lees van hierdie lêer bo na onder - 1177 01:09:56,830 --> 01:09:59,200 gaan voort en voer die volgende funksie. 1178 01:09:59,200 --> 01:10:03,540 Wat is regtig interessant in JavaScript en PHP het dit so goed - 1179 01:10:03,540 --> 01:10:05,450 is anoniem funksies. 1180 01:10:05,450 --> 01:10:10,560 In JavaScript jy kan verklaar funksies wat geen naam nie, maar hulle het 'n liggaam. 1181 01:10:10,560 --> 01:10:12,570 Let op wat hier gebeur. 1182 01:10:12,570 --> 01:10:16,220 >> Dit is 'n funksie genoem gereed, en dit beteken net doen die volgende 1183 01:10:16,220 --> 01:10:20,220 wanneer die hele web bladsy is gereed om, wanneer dit al gelees van die bediener. 1184 01:10:20,220 --> 01:10:23,090 Wat wil jy doen? Ek wil 'n stuk van die kode uit te voer. 1185 01:10:23,090 --> 01:10:27,120 Let daarop dat ons nie wil hê dat hierdie kode na regs weg te voer. 1186 01:10:27,120 --> 01:10:34,350 As ek weggelaat is hierdie, sou dit onmiddellik beteken begin met die uitvoering van hierdie reëls van die kode. 1187 01:10:34,350 --> 01:10:39,040 Maar die feit dat ek sê nee, nee, nee, draai dit in 'n anonieme funksie soos hierdie 1188 01:10:39,040 --> 01:10:43,000 middel voer nie dit nog, noem dit uiteindelik. 1189 01:10:43,000 --> 01:10:45,430 Ons het dit 'n oomblik gelede in ons vorige voorbeeld. 1190 01:10:45,430 --> 01:10:49,990 Watter funksie het ons uiteindelik bel, 500 millisekondes later? Knip. 1191 01:10:49,990 --> 01:10:51,480 So het die dieselfde idee. 1192 01:10:51,480 --> 01:10:53,950 Weereens, selfs as dit lyk 'n bietjie vreemd, net vir nou oor geloof 1193 01:10:53,950 --> 01:10:57,060 dat 'n anonieme funksie wat uiteindelik genoem, te verklaar, 1194 01:10:57,060 --> 01:11:01,720 skryf jy bloot funksie () { 1195 01:11:01,720 --> 01:11:05,380 So watter kode is ons gaan om uiteindelik uit te voer? Die volgende. 1196 01:11:05,380 --> 01:11:10,460 Dit lyk ook 'n bietjie nuut nie, maar dit beteken hier is die jQuery funksie, 1197 01:11:10,460 --> 01:11:13,430 en dit is nou 'n kortpad. 1198 01:11:13,430 --> 01:11:18,830 Hierdie HTML-aan die onderkant van die skerm van die kursus het 'n paar boom verteenwoordiging. 1199 01:11:18,830 --> 01:11:21,730 Dit is nie. Hierdie bladsy is meer interessant as hierdie Hello, world voorbeeld. 1200 01:11:21,730 --> 01:11:25,210 Maar daar is 'n paar boom wat ooreenstem met hierdie HTML. 1201 01:11:25,210 --> 01:11:28,910 Dit sou 'n pyn in die nek te hê om 'n soort van rekursiewe funksie te implementeer 1202 01:11:28,910 --> 01:11:34,380 om te begin by die wortel node en dan vind die node wie se ID is registrasie. 1203 01:11:34,380 --> 01:11:38,340 So, wat jQuery super maklik maak vir ons is letterlik. 1204 01:11:38,340 --> 01:11:43,000 Gaan voort en kry my wat div of watter vorm ookal, watter HTML element 1205 01:11:43,000 --> 01:11:45,820 het 'n ID van registrasie. 1206 01:11:45,820 --> 01:11:52,440 Dit is gelykstaande aan document.getElementById ("registrasie"). 1207 01:11:52,440 --> 01:11:54,170 >> Waarom doen mense soos jQuery? 1208 01:11:54,170 --> 01:12:00,110 Want dit is korter te tik. Maar dis al wat dit is. Dit is dieselfde idee. 1209 01:12:00,110 --> 01:12:02,630 Kry vir my die tag wie se ID is registrasie. 1210 01:12:02,630 --> 01:12:06,300 En wanneer daardie tag, wat gebeur om 'n vorm te wees, ingedien word, 1211 01:12:06,300 --> 01:12:08,300 voort te gaan en uit te voer hierdie kode. 1212 01:12:08,300 --> 01:12:11,320 So laat ons neem 'n mens nou kyk hoe ons dit doen vorm validering. 1213 01:12:11,320 --> 01:12:15,950 Die sintaksis is weliswaar kriptiese op die eerste, maar wat gaan aan? 1214 01:12:15,950 --> 01:12:21,050 Indien hierdie lyn van die kode is waar, ek gaan om te skreeu op die gebruiker sy of haar e-pos adres te verskaf. 1215 01:12:21,050 --> 01:12:22,970 So, wat is hierdie lyn van die kode? 1216 01:12:22,970 --> 01:12:25,560 $ Beteken jQuery. Let nou op. 1217 01:12:25,560 --> 01:12:27,920 Dit is soort van soos CSS. 1218 01:12:27,920 --> 01:12:33,370 As jy duik in CSS nie, sal jy weet dat dit beteken dat die element wie se ID is registrasie. 1219 01:12:33,370 --> 01:12:39,840 Die ruimte beteken 'n kind of 'n afstammeling van registrasie wie se naam is insette. 1220 01:12:39,840 --> 01:12:42,970 En dan hierdie ding in vierkantige hakies is 'n klein filter. 1221 01:12:42,970 --> 01:12:47,010 En selfs as dit lyk kriptiese, dit beteken net gaan na die vorm wie se ID is registrasie, 1222 01:12:47,010 --> 01:12:51,230 gaan na die inset element binnekant van daardie wie se naam is e-pos, 1223 01:12:51,230 --> 01:12:55,440 en dan kry sy waarde, ongeag die waarde daarvan gebeur om te wees - 1224 01:12:55,440 --> 01:12:59,670 asdf as dit is al wat ek getikte of malan@harvard.edu as dit is wat ek getik. 1225 01:12:59,670 --> 01:13:05,250 Dus, as die waarde van die vorm se e-pos veld == niks, skreeu op die gebruiker. 1226 01:13:05,250 --> 01:13:09,700 Anders as die waarde van die wagwoord veld == niks, skreeu op die gebruiker. 1227 01:13:09,700 --> 01:13:19,520 >> Anders as die waarde van die wagwoord veld is nie gelyk aan die waarde van die bevestiging veld, 1228 01:13:19,520 --> 01:13:22,850 wat was die ander vorm element, skreeu op die gebruiker. 1229 01:13:22,850 --> 01:13:25,680 En dan laastens - en hierdie een het ook 'n paar nuwe sintaksis van sy eie, 1230 01:13:25,680 --> 01:13:29,270 maar sodra jy dit gesien het, dit is ten minste 'n bietjie meer redelike - 1231 01:13:29,270 --> 01:13:34,060 anders as die vorm wie se ID is registrasie het 'n inset element wie se naam is ooreenkoms 1232 01:13:34,060 --> 01:13:39,720 en dit is nagegaan, gaan voort en skree op die gebruiker. 1233 01:13:39,720 --> 01:13:42,520 So het ek dit heeltemal erken dit is heeltemal oorweldigend op die eerste oogopslag. 1234 01:13:42,520 --> 01:13:46,530 Dit is 'n baie van die nuwe sintaksis. Maar almal van jQuery volg hierdie soort van patrone. 1235 01:13:46,530 --> 01:13:49,880 En eerlik, ek het nie eens weet dit bestaan ​​tot 'n paar minute gelede. 1236 01:13:49,880 --> 01:13:53,640 Ek Googled, "Hoe gaan jy as 'n boks is nagegaan in jQuery?" 1237 01:13:53,640 --> 01:13:55,680 en dit is die sintaksis, want daar is verskillende maniere om dit te doen 1238 01:13:55,680 --> 01:13:58,010 met werklike rou JavaScript-kode. 1239 01:13:58,010 --> 01:14:01,030 So as die heel eerste bladsy van Problem Set 7 beklemtoon, 1240 01:14:01,030 --> 01:14:04,500 pset 7 is baie 'n oefening in Opstarten jouself 1241 01:14:04,500 --> 01:14:08,650 waar ons vir ons gegee het, hopelik, 'n konseptuele raamwerk waarmee die pset aan te pak. 1242 01:14:08,650 --> 01:14:12,280 >> Maar soos dikwels die geval is met die web design, dit is regtig aan jou om rond te steek, 1243 01:14:12,280 --> 01:14:16,680 inkorporeer brokkies van die kode en voorbeelde van die web, so lank as wat jy dit noem 1244 01:14:16,680 --> 01:14:17,960 volgens die bepalings op die eerste bladsy, 1245 01:14:17,960 --> 01:14:21,460 en besef dat leer HTML, CSS, JavaScript, en selfs SQL 1246 01:14:21,460 --> 01:14:26,020 is regtig bedoel om te at-home oefening as ons begin om hierdie opleiding wiele af te neem. 1247 01:14:26,020 --> 01:14:29,150 En besef ook daar is so baie meer dinge wat jy kan doen met 'n leser. 1248 01:14:29,150 --> 01:14:33,790 Binnekant van die meeste van hierdie elemente is daar ander dinge genoem gebeurtenis hanteerders. 1249 01:14:33,790 --> 01:14:37,140 En selfs al het ons net kyk na wat genoem onsubmit en onready, 1250 01:14:37,140 --> 01:14:40,310 wat jy kan doen dinge soos onkeydown, onkeyup, 1251 01:14:40,310 --> 01:14:43,410 soos wanneer die gebruiker 'n sleutel raak, kan jy luister vir daardie en sleutel up. 1252 01:14:43,410 --> 01:14:45,940 Gmail het sleutelbord kortpaaie. 1253 01:14:45,940 --> 01:14:49,490 Hoe Google implementeer sleutelbord kortpaaie soos C vir komponeer? 1254 01:14:49,490 --> 01:14:54,120 Hulle luister vir die gebeure, soos hulle genoem word, soos onkeypress of onkeyup en onkeydown. 1255 01:14:54,120 --> 01:14:56,360 As jy al ooit hovered jou muis oor 'n paar kieslys opsie 1256 01:14:56,360 --> 01:15:00,180 en al van 'n skielike, voila, 'n spyskaart verskyn of die grafiese verander van kleur, 1257 01:15:00,180 --> 01:15:01,920 hoe doen hulle dit? 1258 01:15:01,920 --> 01:15:06,940 Eerder as om te luister vir onready of onsubmit, jy luister vir onMouseOver of onmouseout. 1259 01:15:06,940 --> 01:15:10,920 >> Dus, in kort, met hierdie baie eenvoudige basiese beginsels wat ons het begin om te krap die oppervlak van vandag 1260 01:15:10,920 --> 01:15:13,940 en ons sal verder te duik op Woensdag, jy het, hoe meer, 1261 01:15:13,940 --> 01:15:17,530 mag die soort van dinge wat jy reeds vertroud is met te implementeer. 1262 01:15:17,530 --> 01:15:21,620 So laat ons daar te beëindig, en ons sal voortgaan op Woensdag. 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]