1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Uke 8, Fortsatt] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Harvard University] 3 00:00:04,000 --> 00:00:08,000 [Dette er CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:13,000 >> Dette er CS50, så dette er slutten av uke 8 her. 5 00:00:13,000 --> 00:00:16,000 Vi selvfølgelig hadde litt av en orkan tidligere denne uken, 6 00:00:16,000 --> 00:00:19,000 så akkurat nå er det egentlig bare deg og meg i denne forelesningssal 7 00:00:19,000 --> 00:00:22,000 men i dag fortsetter vi vår samtale om PHP 8 00:00:22,000 --> 00:00:25,000 og om webprogrammering mer generelt, og vi har også introdusere ideen 9 00:00:25,000 --> 00:00:29,000 av databaser, kalt spesielt en MySQL, som er ganske populær i disse dager, 10 00:00:29,000 --> 00:00:34,000 i stor grad på grunn av sin skalerbarhet samt fordi det blir gratis og åpen kildekode. 11 00:00:34,000 --> 00:00:37,000 >> Men først en titt på hvor vi slapp forrige gang. 12 00:00:37,000 --> 00:00:40,000 Husker at vi var ute på flere Frosh direktemeldinger eksempler, 13 00:00:40,000 --> 00:00:44,000 og dette var det heslig form at jeg kom opp med noen 15 + år siden 14 00:00:44,000 --> 00:00:49,000 for å ha studenter på campus register for freshman egenutført idrett 15 00:00:49,000 --> 00:00:52,000 uten egentlig å måtte trek lenger over tunet til Wigglesworth 16 00:00:52,000 --> 00:00:56,000 å skyve en fysisk stykke papir under noen Proctor dør. 17 00:00:56,000 --> 00:00:59,000 I stedet har vi flyttet alt på nettet, men å gjøre det vi trengte å gjøre bruk 18 00:00:59,000 --> 00:01:03,000 av noen få teknologier, slik at en, vi trengte HTML, HyperText Markup Language, 19 00:01:03,000 --> 00:01:07,000 som er igjen denne markup language som du gjør websider strukturelt. 20 00:01:07,000 --> 00:01:10,000 >> Ved hjelp av en bit av CSS i disse dager, stilark, 21 00:01:10,000 --> 00:01:16,000 der vi bruker stiliseringer av websiden ved hjelp av en litt annen syntaks, 22 00:01:16,000 --> 00:01:19,000 mens HTML var alt om strukturen av disse. 23 00:01:19,000 --> 00:01:21,000 Vi trenger også å innføre en web-programmeringsspråk. 24 00:01:21,000 --> 00:01:25,000 I dette tilfellet vil vi bruke PHP og PHP kommer til å tillate oss 25 00:01:25,000 --> 00:01:28,000 til dynamisk effekt innhold samt gjøre programmatiske ting som 26 00:01:28,000 --> 00:01:33,000 sende e-post, slik tilfellet var på lappen vi forlot forrige uke. 27 00:01:33,000 --> 00:01:35,000 >> Husker at koden for dette var i 2 deler. 28 00:01:35,000 --> 00:01:38,000 En, hadde vi froshims3.php, 29 00:01:38,000 --> 00:01:42,000 og dette var i stor grad markup med et HTML-skjema på innsiden av det, 30 00:01:42,000 --> 00:01:45,000 en liten bit av CSS her oppe i malattributtene 31 00:01:45,000 --> 00:01:48,000 slik at selve skjemaet ville være sentrert på siden, men utover det 32 00:01:48,000 --> 00:01:51,000 Vi hadde noen representative skjema innganger, et tekstfelt, en avmerkingsboks, 33 00:01:51,000 --> 00:01:55,000 noen radio knapper, en utvalgt meny, og en send-knappen. 34 00:01:55,000 --> 00:02:01,000 Og via dette skjemaet, sendte vi til en fil som ble tilsynelatende kalt register3.php, 35 00:02:01,000 --> 00:02:04,000 som selv så litt noe sånt som dette. 36 00:02:04,000 --> 00:02:08,000 Nå var det meste av koden i register3.php, husker, om e-post. 37 00:02:08,000 --> 00:02:11,000 Det gjorde litt av validering av skjemaet som ble sendt for å sikre at 38 00:02:11,000 --> 00:02:14,000 at feltene ble faktisk gitt som ble forventet. 39 00:02:14,000 --> 00:02:18,000 Så vi kalte noen PHP-funksjoner ved hjelp av litt ny syntaks, 40 00:02:18,000 --> 00:02:20,000 selv om det er lånt fra C. 41 00:02:20,000 --> 00:02:24,000 >> Denne pilen operatør tillater oss å gjøre bruk av noe som kalles objektorientert programmering. 42 00:02:24,000 --> 00:02:27,000 Vi vil ikke gå inn på det i detalj her, men vet for nå 43 00:02:27,000 --> 00:02:31,000 det er en måte å ha funksjoner knyttet til objekter, 44 00:02:31,000 --> 00:02:34,000 som er en spesiell type struktur, som vi så i C. 45 00:02:34,000 --> 00:02:37,000 Men for nå, bare ta på tro at dette er riktig syntaks å bruke 46 00:02:37,000 --> 00:02:41,000 når du bruker et bibliotek som dette PHPMailer biblioteket. 47 00:02:41,000 --> 00:02:44,000 Og deretter ved utgangen av denne filen hadde vi dynamisk generert en e-post 48 00:02:44,000 --> 00:02:47,000 som fikk sendt til min jharvard@cs50.net konto 49 00:02:47,000 --> 00:02:50,000 fra min jharvard@cs50.net konto, 50 00:02:50,000 --> 00:02:54,000 og vi informert brukeren derfor at de hadde blitt registrert for denne sporten. 51 00:02:54,000 --> 00:02:57,000 Det er ganske mye hva Frosh direktemeldinger området gjorde alle disse år siden 52 00:02:57,000 --> 00:03:00,000 når jeg implementert det, gitt, på et annet språk, 53 00:03:00,000 --> 00:03:02,000 men det viser deg kanskje den kraften du har 54 00:03:02,000 --> 00:03:05,000 nå som du kan uttrykke deg selv, ikke bare programmatisk 55 00:03:05,000 --> 00:03:08,000 på et lavt nivå på et språk som C, men på et mye høyere nivå 56 00:03:08,000 --> 00:03:11,000 med disse svært virkelige verden programmer som e-post til å faktisk løse 57 00:03:11,000 --> 00:03:13,000 noen reelle problemstillinger. 58 00:03:13,000 --> 00:03:16,000 >> Nå, selvfølgelig, selv om jeg bruker dette skriptet til å generere noen 59 00:03:16,000 --> 00:03:20,000 e-post dynamisk fra jharvard@cs50.net, som faktisk er en konto 60 00:03:20,000 --> 00:03:23,000 at jeg har tilgang til, vær ganske forsiktig med å sende 61 00:03:23,000 --> 00:03:26,000 post bare fra kontoer som er faktisk din egen, 62 00:03:26,000 --> 00:03:30,000 lest ting får du i litt varmt vann i livet. 63 00:03:30,000 --> 00:03:35,000 Med det sagt, la oss nå gjøre overgangen til å løse et annet problem helt, 64 00:03:35,000 --> 00:03:37,000 at av støttemurer stater. 65 00:03:37,000 --> 00:03:39,000 Nå, hva dette egentlig betyr? 66 00:03:39,000 --> 00:03:42,000 HTTP, dette HyperText Transfer Protocol, 67 00:03:42,000 --> 00:03:45,000 er faktisk en statsløs protokoll, og hva dette betyr er at 68 00:03:45,000 --> 00:03:48,000 når du trekker opp noe som Google.com og trykk enter 69 00:03:48,000 --> 00:03:51,000 vanligvis din nettleser har en slags spinne ikonet som da 70 00:03:51,000 --> 00:03:54,000 resulterer i noen nettside lastes ned, 71 00:03:54,000 --> 00:03:57,000 og deretter det lille ikonet slutter å spinne, og som faktisk antyder 72 00:03:57,000 --> 00:04:02,000 at HTTP har gjennomført noen form for tilkobling til serveren og det er det. 73 00:04:02,000 --> 00:04:05,000 HTTP er statsløs i den forstand at det ikke holder 74 00:04:05,000 --> 00:04:08,000 en vedvarende tilkobling til serveren på samme måte Skype gjør 75 00:04:08,000 --> 00:04:11,000 eller Gchat gjør fordi med HTTP 76 00:04:11,000 --> 00:04:15,000 antagelsen er at når du har hentet en nettside som er det. 77 00:04:15,000 --> 00:04:18,000 >> Nå i realiteten i disse dager på nettsteder som Facebook og Google Maps 78 00:04:18,000 --> 00:04:21,000 og Twitter og lignende det er mye mer dynamikk der 79 00:04:21,000 --> 00:04:25,000 selv etter at ikonet slutter å spinne du kan faktisk få flere oppdateringer 80 00:04:25,000 --> 00:04:29,000 fra serveren, flere tweets, flere statusoppdateringer på Facebook og lignende. 81 00:04:29,000 --> 00:04:33,000 Men selv det er ved hjelp av en teknikk som vi skal snakke om i en uke eller to 82 00:04:33,000 --> 00:04:36,000 kjent som Ajax bruker et språk som kalles JavaScript, 83 00:04:36,000 --> 00:04:38,000 men på slutten av dagen, er HTTP fortsatt statsløs. 84 00:04:38,000 --> 00:04:42,000 Og likevel hvis du ønsker å liksom huske ting om en bruker 85 00:04:42,000 --> 00:04:44,000 selv etter at de har koblet fra serveren din 86 00:04:44,000 --> 00:04:47,000 PHP gjør gi deg et redskap til å gjøre dette 87 00:04:47,000 --> 00:04:52,000 fordi, som vi så forrige gang, har PHP en rekke superglobals, 88 00:04:52,000 --> 00:04:55,000 og en superglobal er, igjen, en spesiell global variabel 89 00:04:55,000 --> 00:04:59,000 som er levert til deg av webserveren og PHP selv. 90 00:04:59,000 --> 00:05:02,000 >> Du trenger ikke å gjøre noe for å sette verdier i det, 91 00:05:02,000 --> 00:05:05,000 og blant de superglobals vi har sett så langt er få og legge ut, 92 00:05:05,000 --> 00:05:08,000 som er der skjemafelt settes automatisk for deg, 93 00:05:08,000 --> 00:05:11,000 samt et par andre som vi ikke har sett ennå. 94 00:05:11,000 --> 00:05:17,000 Innsiden av $ _SERVER er noen spesielle variabler knyttet til selve serveren. 95 00:05:17,000 --> 00:05:22,000 Hva er IP-adressen, hvilken protokoll, HTTP eller HTTPS brukte du, 96 00:05:22,000 --> 00:05:25,000 hva forespørsel metode brukte du og lignende, så det er litt interessant, 97 00:05:25,000 --> 00:05:29,000 saftige detaljer om serveren, og faktisk bruker der også. 98 00:05:29,000 --> 00:05:33,000 Det er $ _cookie, som er der disse tingene kalles cookies lagres. 99 00:05:33,000 --> 00:05:36,000 Vi vil ikke bruke tid på cookies selv i dag, 100 00:05:36,000 --> 00:05:40,000 men vet nå at en cookie er bare en liten del av informasjonen 101 00:05:40,000 --> 00:05:43,000 at en web-server kan plante i en nettleser 102 00:05:43,000 --> 00:05:46,000 og i sin tur RAM eller dets datamaskinens harddisk 103 00:05:46,000 --> 00:05:49,000 å lagre informasjon om en bruker, for eksempel, brukernavn 104 00:05:49,000 --> 00:05:52,000 slik at de ikke behøver å skrive det hver gang de logger seg eller noen 105 00:05:52,000 --> 00:05:55,000 unikt nummer eller identifikator for denne brukeren 106 00:05:55,000 --> 00:05:58,000 slik at du ikke trenger å plage dem med de samme typer spørsmål om 107 00:05:58,000 --> 00:06:00,000 preferanser i fremtiden, men de fleste av interesse 108 00:06:00,000 --> 00:06:02,000 akkurat nå er $ _SESSION. 109 00:06:02,000 --> 00:06:07,000 >> Dette superglobal, som i likhet med andre, er levert til deg automatisk av PHP 110 00:06:07,000 --> 00:06:10,000 når du skriver PHP-baserte nettsteder 111 00:06:10,000 --> 00:06:13,000 kan lagre alt du vil, strenger, heltall, 112 00:06:13,000 --> 00:06:16,000 flytende punkter, verdier, matriser, gjenstander, 113 00:06:16,000 --> 00:06:20,000 virkelig noe som du ønsker, og det tillater deg å lagre det på en slik måte 114 00:06:20,000 --> 00:06:23,000 at selv om brukeren besøker du nå og da 115 00:06:23,000 --> 00:06:26,000 kommer tilbake et minutt fra nå eller 5 minutter fra nå fordi 116 00:06:26,000 --> 00:06:28,000 de tar sin tid før du klikker noen annen link 117 00:06:28,000 --> 00:06:32,000 PHP vil sikre at det du putter i den økten superglobal 118 00:06:32,000 --> 00:06:37,000 et minutt eller 5 minutter siden vil fortsatt være der når brukeren er tilbake. 119 00:06:37,000 --> 00:06:40,000 Og under panseret denne superglobal er implementert ved hjelp av 120 00:06:40,000 --> 00:06:44,000 disse tingene kalles cookies, men for nå, det er bare en abstraksjon 121 00:06:44,000 --> 00:06:47,000 der det er liksom den programmatiske tilsvarer en handlevogn. 122 00:06:47,000 --> 00:06:50,000 Uansett hva du, programmerer, satt i at 123 00:06:50,000 --> 00:06:53,000 superglobal assosiativ array vil være der et antall minutter senere 124 00:06:53,000 --> 00:06:59,000 til du sletter den, eller til brukeren avslutter sin nettleser helt. 125 00:06:59,000 --> 00:07:02,000 >> La oss ta en titt på et eksempel på hvordan denne saken er faktisk brukes. 126 00:07:02,000 --> 00:07:07,000 I counter.php blant dagens deler av koden 127 00:07:07,000 --> 00:07:09,000 Vi har følgende linje. 128 00:07:09,000 --> 00:07:13,000 Ved starten av denne filen har vi en haug med blå kommentarer, som uinteressante for nå. 129 00:07:13,000 --> 00:07:15,000 Men i linje 13 har vi en ny linje, 130 00:07:15,000 --> 00:07:18,000 session_start, og som faktisk gjør akkurat det den sier. 131 00:07:18,000 --> 00:07:20,000 Det begynner økter. 132 00:07:20,000 --> 00:07:25,000 Det gjør at du kan bruke den store superglobal $ _SESSION, og det er så enkelt som det. 133 00:07:25,000 --> 00:07:30,000 Nå, hvis vi fortsetter å se på linje 16, la oss prøve å finne ut hva denne nettsiden kommer til å gjøre. 134 00:07:30,000 --> 00:07:35,000 If (isset ($ _SESSION ["counter"]) og deretter gå videre 135 00:07:35,000 --> 00:07:39,000 og butikk i tellervariabelen, små bokstaver teller, 136 00:07:39,000 --> 00:07:42,000 $ _SESSION ["Counter"]. 137 00:07:42,000 --> 00:07:45,000 Dette synes å være å erklære en lokal variabel kalt teller 138 00:07:45,000 --> 00:07:48,000 innsiden av som det er å sette en kopi av det som er på innsiden av den superglobal 139 00:07:48,000 --> 00:07:52,000 kalt session på stedet "teller". 140 00:07:52,000 --> 00:07:56,000 Else, tilsynelatende, denne lille lokale variable telleren, er initialisert til 0. 141 00:07:56,000 --> 00:08:01,000 >> Men da noen linjer senere i 26 varsel om at økten kopi av disken, 142 00:08:01,000 --> 00:08:06,000 styringsrenten, har en ny verdi som er tilordnet som er dens nåværende verdi pluss en. 143 00:08:06,000 --> 00:08:09,000 Kort sagt, synes denne filen til å oppdatere 144 00:08:09,000 --> 00:08:13,000 en teller som er lagret inne i økten superglobal 145 00:08:13,000 --> 00:08:16,000 ved å øke den med 1, men beholder det først en kopi av den forrige verdien 146 00:08:16,000 --> 00:08:20,000 ved å oppbevare det i en lokal variabel kalt $ teller, 147 00:08:20,000 --> 00:08:22,000 og deretter ned her la oss se hva som gjenstår. 148 00:08:22,000 --> 00:08:24,000 Det viser seg at det er ganske mye bare HTML. 149 00:08:24,000 --> 00:08:29,000 Nederst på denne siden ser vi på linje 37 som jeg har besøkt dette nettstedet 150 00:08:29,000 --> 00:08:33,000 teller antall ganger, så det er et par interessante funksjoner her. 151 00:08:33,000 --> 00:08:36,000 En, er dette helt klart en variabel, men det er nok ikke å bare sette 152 00:08:36,000 --> 00:08:39,000 $ Teller i kroppen i HTML fordi selvfølgelig 153 00:08:39,000 --> 00:08:43,000 hvis det er bare der blant HTML PHP kommer til å anta det er bare HTML. 154 00:08:43,000 --> 00:08:48,000 Du bokstavelig talt ønsker $ teller skal skrives ut på skjermen. 155 00:08:48,000 --> 00:08:51,000 >> Men i stedet ved å slippe inn PHP-modus 156 00:08:51,000 --> 00:08:55,000 med dette stykke syntaks kan vi dynamisk sette en verdi her 157 00:08:55,000 --> 00:08:58,000 svært lik i ånden til hva vi gjorde sist gang med 158 00:08:58,000 --> 00:09:00,000 sette verdier inn strenger. 159 00:09:00,000 --> 00:09:04,000 Faktisk er dette bare en forkortelse notasjon for å si noe sånt som dette bokstavelig, 160 00:09:04,000 --> 00:09:12,000 print ($ teller) eller noe sånt printf (% s, counter), 161 00:09:12,000 --> 00:09:14,000 eller, som du kanskje har sett på nettet eller i lærebøker, 162 00:09:14,000 --> 00:09:17,000 det er en funksjon i PHP kalles ekko 163 00:09:17,000 --> 00:09:20,000 som gjør det samme, og alle av dem er bare lengre winded måter 164 00:09:20,000 --> 00:09:25,000 for å si 00:09:28,000 I dette ene tilfellet trenger du ikke å sette 166 00:09:28,000 --> 00:09:30,000 ordet PHP etter spørsmålstegnet. 167 00:09:30,000 --> 00:09:34,000 Dette er stenografi notasjon for, igjen, det vi nettopp så et øyeblikk siden 168 00:09:34,000 --> 00:09:37,000 som ekko noen verdi. 169 00:09:37,000 --> 00:09:39,000 >> La oss se hva sluttresultatet av dette faktisk er. 170 00:09:39,000 --> 00:09:43,000 La meg gå over i vår counter.php fil, 171 00:09:43,000 --> 00:09:47,000 og vi vil se at David bare gjort en feil ved å spille med koden der. 172 00:09:47,000 --> 00:09:50,000 La oss gå fix hva han skrudd opp, 173 00:09:50,000 --> 00:09:54,000 og feilen ser ut til å være der, borte, på linje 37. 174 00:09:54,000 --> 00:09:59,000 Ifølge toppen av denne siden har jeg besøkt dette nettstedet 0 ganger. 175 00:09:59,000 --> 00:10:02,000 Vel, la oss gå videre nå, og på toppen av nettleseren klikke på 176 00:10:02,000 --> 00:10:05,000 reload ikonet, og jeg klikker laste, 177 00:10:05,000 --> 00:10:12,000 og nå har jeg besøkt nettstedet 1, 2, 3, 4, 5, 6, 7, 8. 178 00:10:12,000 --> 00:10:16,000 Og ja, hvis vi ser på kilden til denne siden selve kildekoden er i endring, 179 00:10:16,000 --> 00:10:19,000 og legge merke til fullstendig fravær av enhver PHP, og det er fordi 180 00:10:19,000 --> 00:10:23,000 PHP-koden er evaluert eller tolkes server side, 181 00:10:23,000 --> 00:10:27,000 og så det betyr at produksjonen av PHP script er hva til slutt sendes til nettleseren, 182 00:10:27,000 --> 00:10:31,000 som i dette tilfellet er noen rå HTML og noen rå tekst. 183 00:10:31,000 --> 00:10:33,000 Hva skjer her? 184 00:10:33,000 --> 00:10:37,000 >> Vel, med relativt få linjer med kode jeg kunne lagre 185 00:10:37,000 --> 00:10:40,000 vedvarende løpet av noen sekunder, eller hvis vi ventet lenge nok, 186 00:10:40,000 --> 00:10:44,000 minutter, selv timer, noen verdi på en måte som gjør HTTP 187 00:10:44,000 --> 00:10:47,000 synes stateful som om vi har beholdt 188 00:10:47,000 --> 00:10:51,000 denne forbindelse til serveren, og det er bare å huske hva jeg sa det forrige gang, 189 00:10:51,000 --> 00:10:55,000 men i virkeligheten er det en hel haug av kompleksitet skjer under panseret 190 00:10:55,000 --> 00:10:59,000 involverer cookies som er slik at PHP til å gi meg denne illusjonen 191 00:10:59,000 --> 00:11:02,000 av denne handlekurven-lignende funksjon. 192 00:11:02,000 --> 00:11:05,000 For nå, en triviell eksempel der vi bare lagre et heltall, 193 00:11:05,000 --> 00:11:08,000 men at funksjonen vil komme tilbake til å være av stor verdi 194 00:11:08,000 --> 00:11:10,000 når vi begynner å snakke om mer komplekse prosjekter, 195 00:11:10,000 --> 00:11:12,000 blant dem problemet satt 7. 196 00:11:12,000 --> 00:11:16,000 Dette er din aller siste problemet satt i CS50. 197 00:11:16,000 --> 00:11:19,000 Jeg vet, det er så trist, men hva du finner er at vi kommer til å konkludere 198 00:11:19,000 --> 00:11:22,000 denne delen av semesteret ved å faktisk overgangen 199 00:11:22,000 --> 00:11:25,000 fra sammenheng med C sikkert til konteksten av PHP 200 00:11:25,000 --> 00:11:27,000 men mens du bruker noen av de samme grunnleggende 201 00:11:27,000 --> 00:11:29,000 vi har snakket om en stund. 202 00:11:29,000 --> 00:11:33,000 >> Målet med pset 7 er å gjennomføre CS50 Finance, 203 00:11:33,000 --> 00:11:37,000 som er din egen versjon av Yahoo Finance eller Google Finance 204 00:11:37,000 --> 00:11:40,000 eller Etrade.com der du har muligheten til å 205 00:11:40,000 --> 00:11:43,000 se opp aksjekurser for gitte symboler, men enda mer enn det 206 00:11:43,000 --> 00:11:48,000 du har muligheten til å "kjøpe" og "selge" aksjer 207 00:11:48,000 --> 00:11:51,000 som handles på ulike børser fordi som denne hjemmesiden 208 00:11:51,000 --> 00:11:55,000 her antyder, som er virkelig i hvilken grad vi har begynt 209 00:11:55,000 --> 00:11:59,000 problemet sett for deg, har du en login form som spør etter brukernavn og et passord. 210 00:11:59,000 --> 00:12:03,000 Den har en send-knappen, men etterpå, som vi vil til slutt se, 211 00:12:03,000 --> 00:12:06,000 det er ingenting egentlig skjer under panseret ennå fordi det 212 00:12:06,000 --> 00:12:09,000 gjenstår for deg å implementere muligheten til å registrere nye brukere, 213 00:12:09,000 --> 00:12:12,000 muligheten til å kjøpe aksjer, selge aksjer, 214 00:12:12,000 --> 00:12:14,000 å faktisk slå opp dagens aksjekurser. 215 00:12:14,000 --> 00:12:17,000 >> Og ja, vil dette være så virkelige verden som mulig fordi vi gjorde 216 00:12:17,000 --> 00:12:20,000 inkludere en kode som lar deg med en enkel funksjon 217 00:12:20,000 --> 00:12:25,000 til å spørre Yahoo Finance, som fantastisk gjør tilgjengelig gratis data 218 00:12:25,000 --> 00:12:31,000 for å se opp aksjekurser basert på aksjesymbolet eller ticker symbol, 219 00:12:31,000 --> 00:12:34,000 og du får tilbake den gjeldende aksjekurs på dagen. 220 00:12:34,000 --> 00:12:37,000 Dataene du faktisk ser i denne pset vil være 221 00:12:37,000 --> 00:12:40,000 omtrent like virkelige verden som det kan få, slik at du faktisk grensesnitt 222 00:12:40,000 --> 00:12:43,000 med virkelige verden aksjer, virkelige verden priser, 223 00:12:43,000 --> 00:12:47,000 og vi skal se hvor mye penger du kan gjøre kanskje 224 00:12:47,000 --> 00:12:51,000 i løpet av de neste dagene med å spille med ditt eget problem sett. 225 00:12:51,000 --> 00:12:55,000 >> Men la oss først stille scenen for hvordan å designe noe som er absolutt mer komplisert 226 00:12:55,000 --> 00:12:59,000 enn counter.php, det er mer komplisert enn noen av de Frosh direktemeldinger eksempler så langt, 227 00:12:59,000 --> 00:13:02,000 og la oss prøve å innføre noen paradigmer her som lar oss 228 00:13:02,000 --> 00:13:06,000 både for 7 pset og kanskje for det endelige prosjektet hvis du gjør noe webbasert 229 00:13:06,000 --> 00:13:11,000 å holde koden godt organisert, for å holde deg tilregnelig, 230 00:13:11,000 --> 00:13:15,000 og til å ta et skritt mot å samarbeide, enten i CS50 avsluttende prosjekt 231 00:13:15,000 --> 00:13:18,000 eller utenfor hvis du fortsetter å programmere noe i fremtiden. 232 00:13:18,000 --> 00:13:21,000 Det er denne generelle design paradigmet 233 00:13:21,000 --> 00:13:24,000 i informatikk og i utvikling av programvare mer generelt 234 00:13:24,000 --> 00:13:27,000 kjent som MVC, Model View Controller, 235 00:13:27,000 --> 00:13:30,000 og dette er en dum akronym som beskriver en veldig fin idé, 236 00:13:30,000 --> 00:13:34,000 som er separasjon av ulike aspekter av et program, 237 00:13:34,000 --> 00:13:39,000 spesielt å holde separate logikk eller forretningslogikk av et nettsted 238 00:13:39,000 --> 00:13:42,000 slik at alt som involverer ting som 239 00:13:42,000 --> 00:13:45,000 samtalefunksjoner og spørring databaser og lignende 240 00:13:45,000 --> 00:13:48,000 skjer ikke blant HTML din 241 00:13:48,000 --> 00:13:51,000 men heller i separate filer, og faktisk, det er dette en fil 242 00:13:51,000 --> 00:13:54,000 typisk at du har ringt kontrolleren 243 00:13:54,000 --> 00:13:56,000 det er virkelig hjernen bak operasjonen, og vi vil se et eksempel 244 00:13:56,000 --> 00:13:58,000 av dette i løpet av et øyeblikk. 245 00:13:58,000 --> 00:14:01,000 >> Det er en modell som programmerer kode 246 00:14:01,000 --> 00:14:05,000 som betyr å snakke til databasene, snakker det til Yahoo Finance og lignende, 247 00:14:05,000 --> 00:14:08,000 og så er det V i MVC, visningene, 248 00:14:08,000 --> 00:14:11,000 alle de ting som er relatert til estetikk, filene som faktisk inneholder 249 00:14:11,000 --> 00:14:14,000 HTML, kanskje din CSS og lignende. 250 00:14:14,000 --> 00:14:17,000 Ideen her, som dette bildet antyder, er at kontrolleren 251 00:14:17,000 --> 00:14:21,000 er filen, som vi snart se, og som du vil spesielt se på pset 7, 252 00:14:21,000 --> 00:14:24,000 at verden snakker til via sine nettlesere. 253 00:14:24,000 --> 00:14:27,000 Det er filen som blir besøkt på offentlige internett, 254 00:14:27,000 --> 00:14:30,000 men kontrolleren snakker til potensielt en modell, 255 00:14:30,000 --> 00:14:34,000 som er en eller flere andre filer som inneholder kode relatert til data, 256 00:14:34,000 --> 00:14:37,000 kode knyttet til databaser og lignende, og da er det snakker til 257 00:14:37,000 --> 00:14:40,000 kontrolleren én eller flere andre filer som kalles visninger, 258 00:14:40,000 --> 00:14:43,000 som er estetikk en nettside, maler av former, 259 00:14:43,000 --> 00:14:47,000 som kan ta noen data som inngang, men på slutten av dagen 260 00:14:47,000 --> 00:14:50,000 den eneste logikk innsiden av en visning skal gjengivelsen av disse dataene, 261 00:14:50,000 --> 00:14:53,000 iterating over en løkke og faktisk spytter ut noen 262 00:14:53,000 --> 00:14:56,000 HTML-basert rendition derav eller noe sånt som en PDF-fil. 263 00:14:56,000 --> 00:14:59,000 >> Hva er fint om MVC er at du kan ha forskjellige visninger 264 00:14:59,000 --> 00:15:02,000 basert på den typen enhet, basert på hvilken type filformat som du faktisk 265 00:15:02,000 --> 00:15:04,000 ønsker å vise for brukeren. 266 00:15:04,000 --> 00:15:10,000 La oss ta en titt på noen få stadig mer komplekse og godt utformet eksempler 267 00:15:10,000 --> 00:15:13,000 ved å starte først med versjon 0 her. 268 00:15:13,000 --> 00:15:16,000 La meg gå videre og åpne opp i vår MVC katalogen i dag 269 00:15:16,000 --> 00:15:21,000 en fil som heter index.php i katalogen 0. 270 00:15:21,000 --> 00:15:26,000 Merke dette er en super enkel og veldig underwhelming nettside 271 00:15:26,000 --> 00:15:29,000 det er liksom versjon 0 av en hjemmeside for CS50, 272 00:15:29,000 --> 00:15:32,000 og legge merke til hvordan vi har en link til Forelesninger, har vi en link til pensum, 273 00:15:32,000 --> 00:15:35,000 og hvis jeg følger linken til Forelesninger merke til at nettadressen 274 00:15:35,000 --> 00:15:39,000 opp toppen kommer til å endre til lectures.php. 275 00:15:39,000 --> 00:15:44,000 Hvis jeg da følge linken til uke 1 merke til at URL endres til week1.php. 276 00:15:44,000 --> 00:15:46,000 Det synes å være en ganske enkel hierarkisk struktur her. 277 00:15:46,000 --> 00:15:49,000 >> La oss ta en rask titt under panseret på hvordan dette er lagt ut, 278 00:15:49,000 --> 00:15:53,000 og ja, hvis jeg ser på index.php det er ganske enkel. 279 00:15:53,000 --> 00:15:57,000 Faktisk, selv om jeg kalte dette en PHP-fil er det ingen faktiske programmeringskode. 280 00:15:57,000 --> 00:16:01,000 Det er en kommentar som jeg skrev her i PHP så brukeren ikke ender opp med å se det. 281 00:16:01,000 --> 00:16:05,000 Selvfølgelig, som før, noe som er i mellom PHP-koder 282 00:16:05,000 --> 00:16:08,000 blir tolket, selv om det er en kommentar, og å tolke en kommentar 283 00:16:08,000 --> 00:16:11,000 betyr bare å kaste den bort på slutten av dagen og ikke faktisk 284 00:16:11,000 --> 00:16:15,000 sende den til nettleseren, slik at alt her er bare estetikk. 285 00:16:15,000 --> 00:16:20,000 Hvis jeg åpner opp tilsvarende lectures.php dette er også bare en hard kodet fil. 286 00:16:20,000 --> 00:16:23,000 Det skjer for å bli kalt noe. Php, 287 00:16:23,000 --> 00:16:27,000 men det er egentlig bare. html, og week1.php, week2.php 288 00:16:27,000 --> 00:16:31,000 Tilsvarende er bare markup, så det er en haug med svakhetene ved denne designen. 289 00:16:31,000 --> 00:16:33,000 Ett, er det en enorm mengde kopier / lim. 290 00:16:33,000 --> 00:16:37,000 Selv om det eneste som forandrer seg blant disse filene er sorterte liste, 291 00:16:37,000 --> 00:16:41,000 Li-koder, jeg likevel har doc type, HTML, hode, 292 00:16:41,000 --> 00:16:44,000 tittel, nær kroppen, tett HTML og mer 293 00:16:44,000 --> 00:16:47,000 i hver eneste fil, noe som betyr at hvis jeg noen gang vil restrukturere 294 00:16:47,000 --> 00:16:50,000 denne nettside eller restylize det jeg har å gå inn og endre 295 00:16:50,000 --> 00:16:54,000 alle disse filene manuelt eller med noen massiv finne og erstatte. 296 00:16:54,000 --> 00:17:01,000 >> La oss ta et skritt mot en smartere, lengre tenker design i versjon 1 her 297 00:17:01,000 --> 00:17:04,000 der som per lese meg som vi har inkludert, slik at du kan spille sammen med 298 00:17:04,000 --> 00:17:07,000 disse mer rolig hjemme varsel som vi har her 299 00:17:07,000 --> 00:17:10,000 et sammendrag av filene i versjon 1 av denne siden, 300 00:17:10,000 --> 00:17:13,000 og det synes at jeg har tatt det på meg å faktor ut 301 00:17:13,000 --> 00:17:17,000 noen felles kode, header.php og footer.php. 302 00:17:17,000 --> 00:17:20,000 Vel, la oss ta en titt på hva som er inni den første av disse. 303 00:17:20,000 --> 00:17:23,000 Header.php ser kjent ut, 304 00:17:23,000 --> 00:17:26,000 men merker hvor kommer det få kuttet av? 305 00:17:26,000 --> 00:17:30,000 Rett etter linje 19, så det er alt som var vanlig 306 00:17:30,000 --> 00:17:33,000 fra filene index.php, lectures.php, 307 00:17:33,000 --> 00:17:36,000 week1 og week2.php fra forrige eksempel. 308 00:17:36,000 --> 00:17:40,000 Det jeg gjorde var kopi og kutt alt som var felles for alle disse filene, 309 00:17:40,000 --> 00:17:44,000 legg den i en separat header-fil, og tilsvarende i footer.php 310 00:17:44,000 --> 00:17:48,000 gjorde jeg bruke samme prinsippet der de eneste interessante linjer 311 00:17:48,000 --> 00:17:52,000 i footer.php er disse to, tett kropp og tett HTML. 312 00:17:52,000 --> 00:17:55,000 >> Men hva dette betyr nå er at i den nye versjonen 313 00:17:55,000 --> 00:17:59,000 av index.php varsel hvor mye enklere det kan få. 314 00:17:59,000 --> 00:18:02,000 Gitt, litt mer kryptisk ser, litt mindre intuitivt 315 00:18:02,000 --> 00:18:06,000 å følge topp til bunn, men min Gud, er alle som redundans nå borte. 316 00:18:06,000 --> 00:18:10,000 Vi krever hjelp av en PHP funksjon bokstavelig kalt krever opp toppen, 317 00:18:10,000 --> 00:18:15,000 som er veldig minner, husker, av Cs # include mekanisme. 318 00:18:15,000 --> 00:18:17,000 Vi krever header.php øverst. 319 00:18:17,000 --> 00:18:20,000 Vi krever footer.php nederst, og det eneste som er annerledes 320 00:18:20,000 --> 00:18:25,000 eller spesielt denne filen er innholdet som er ment å være unike for den. 321 00:18:25,000 --> 00:18:29,000 Hvis jeg da går inn i, sier lectures.php, gjelder det samme prinsippet. 322 00:18:29,000 --> 00:18:32,000 Igjen, noen kommentarer opp toppen, men da jeg krever header, krever bunntekst, 323 00:18:32,000 --> 00:18:35,000 og i mellom er det bare innholdet som er endret. 324 00:18:35,000 --> 00:18:38,000 Og hvis vi sett uke 1 og uke 2 vil vi se 325 00:18:38,000 --> 00:18:42,000 at samme prinsipp hadde vært benyttet der. 326 00:18:42,000 --> 00:18:44,000 Vel, vi er ikke helt ferdig der. 327 00:18:44,000 --> 00:18:48,000 >> La oss ta en titt på versjon 2, som har en lignende struktur, 328 00:18:48,000 --> 00:18:50,000 men merker nå har jeg innført noe annet. 329 00:18:50,000 --> 00:18:53,000 I linje 10 har jeg introdusert helpers.php, 330 00:18:53,000 --> 00:18:55,000 som inneholder tilsynelatende hjelper funksjoner. 331 00:18:55,000 --> 00:18:58,000 En hjelper funksjon er generelt en relativt kort funksjon 332 00:18:58,000 --> 00:19:01,000 at du skriver for å hjelpe deg ut på forskjellige steder, 333 00:19:01,000 --> 00:19:04,000 og la oss se hva som er på innsiden av helpers.php. 334 00:19:04,000 --> 00:19:07,000 I dette tilfellet ser det ut som den har 2 funksjoner. 335 00:19:07,000 --> 00:19:10,000 Husker fra den andre dagen med vår kube eksempel 336 00:19:10,000 --> 00:19:13,000 du kan definere dine egne funksjoner i PHP, og hva jeg har gjort nå er at jeg har 337 00:19:13,000 --> 00:19:17,000 definerte funksjoner kalt gjengi bunntekst og gjengi header, 338 00:19:17,000 --> 00:19:21,000 hvorav den første tar en parameter kalt data, 339 00:19:21,000 --> 00:19:25,000 hvis standardverdi er en tom matrise, som foreslått der, 340 00:19:25,000 --> 00:19:29,000 og vi kan faktisk skrive dette enda mer konsist i den nyeste versjonen av PHP 341 00:19:29,000 --> 00:19:32,000 ved å si åpent hakeparentes, lukket hakeparentes. 342 00:19:32,000 --> 00:19:35,000 Det betyr en tom utvalg av størrelse 0, men likevel en matrise. 343 00:19:35,000 --> 00:19:38,000 >> Dette ekstrakt funksjonen er litt spesiell ved at 344 00:19:38,000 --> 00:19:41,000 hva den gjør er det tar som argument sin en assosiativ array 345 00:19:41,000 --> 00:19:45,000 som har 0 eller flere sentrale verdi-par, og hvis du har en nøkkel av foo 346 00:19:45,000 --> 00:19:48,000 og en verdi på bar ekstrakt funksjonen 347 00:19:48,000 --> 00:19:51,000 skaper en situasjon som nå, som på linje 11, 348 00:19:51,000 --> 00:19:57,000 du har en lokal variabel kalt $ foo hvis verdi er bar. 349 00:19:57,000 --> 00:19:59,000 Og hvis du hadde flere nøkler og verdier i data array, 350 00:19:59,000 --> 00:20:03,000 likeledes ville de bli ekstrahert i den lokale omfanget 351 00:20:03,000 --> 00:20:06,000 eller navn plass slik at footer.php og 352 00:20:06,000 --> 00:20:09,000 den samme ideen her nede slik at header.php 353 00:20:09,000 --> 00:20:12,000 har tilgang til disse variablene. 354 00:20:12,000 --> 00:20:15,000 Faktisk, la meg åpne opp igjen header.php 355 00:20:15,000 --> 00:20:18,000 og trekke oppmerksomhet til nå hva det ser ut som i denne versjonen. 356 00:20:18,000 --> 00:20:22,000 >> Snarere enn hardt koding CS50 som tittelen for hver enkelt side 357 00:20:22,000 --> 00:20:24,000 merke dynamikk som er mulig nå. 358 00:20:24,000 --> 00:20:29,000 I linje 5 Jeg ekko en tittel variabel, 359 00:20:29,000 --> 00:20:34,000 men først skal jeg forbifarten at tittelen variabel til en funksjon som heter htmlspecialchars. 360 00:20:34,000 --> 00:20:38,000 En dum navn for en funksjon, lenge det er, men det gjør egentlig hva den sier. 361 00:20:38,000 --> 00:20:41,000 Det sikrer at eventuelle spesialtegn 362 00:20:41,000 --> 00:20:46,000 i strengen som er blitt vedtatt i er riktig rømt HTML. 363 00:20:46,000 --> 00:20:49,000 Dette er faktisk en måte å unngå noe som kalles et kors site scripting angrep 364 00:20:49,000 --> 00:20:52,000 der noen kan skadelig eller utilsiktet 365 00:20:52,000 --> 00:20:55,000 injisere sin egen HTML på nettstedet ditt 366 00:20:55,000 --> 00:20:59,000 ved å lime i noen form, for eksempel, 367 00:20:59,000 --> 00:21:02,000 noe som du ikke var helt ventet, spesielt JavaScript-kode, 368 00:21:02,000 --> 00:21:05,000 som vi skal snakke om i en uke eller to tid. 369 00:21:05,000 --> 00:21:08,000 >> Dette nå header.php, er det en visning 370 00:21:08,000 --> 00:21:12,000 i den forstand at det tillater deg å se estetisk innholdet i noen datasett. 371 00:21:12,000 --> 00:21:14,000 Men mer spesifikt, er det en mal. 372 00:21:14,000 --> 00:21:19,000 Dette er liksom en blåkopi nå av hva vi ønsker overskriften på hver side for å se ut, 373 00:21:19,000 --> 00:21:23,000 men det er noen dynamikk i at vi vil at tittelen skal være dynamisk inn 374 00:21:23,000 --> 00:21:26,000 basert på tittelen variabelen 375 00:21:26,000 --> 00:21:30,000 som ble hentet da vi ringte igjen, 376 00:21:30,000 --> 00:21:33,000 gjengi header funksjonen. 377 00:21:33,000 --> 00:21:36,000 Nå, hvis vi så på render bunntekst, det er faktisk ikke mye bruk av det akkurat nå 378 00:21:36,000 --> 00:21:40,000 fordi i footer.php det er ingen dynamikk overhodet. 379 00:21:40,000 --> 00:21:43,000 Det kan være, men i øyeblikket er det en hardkodet liste over to koder, 380 00:21:43,000 --> 00:21:46,000 men den samme ideen gjelder, slik at faktisk antyder hvorfor 381 00:21:46,000 --> 00:21:49,000 gjorde vi kaste bort tid på å ha en render header og en render bunntekst funksjon? 382 00:21:49,000 --> 00:21:52,000 La meg gå i stedet nå inn versjon 3, 383 00:21:52,000 --> 00:21:56,000 og i versjon 3 i hjelpere jeg besluttet å forenkle det enda mer. 384 00:21:56,000 --> 00:21:58,000 >> La meg få en render funksjon. 385 00:21:58,000 --> 00:22:02,000 La meg få det ta et annet argument, kalt denne gangen mal, 386 00:22:02,000 --> 00:22:05,000 som er ment å være navnet på en mal, 387 00:22:05,000 --> 00:22:11,000 og da vil jeg sette sammen dristet. php til den variabelen verdi, 388 00:22:11,000 --> 00:22:17,000 og hvis den finnes foo.php, bar.php eller header.php og footer.php, 389 00:22:17,000 --> 00:22:20,000 så jeg kommer til å gå videre og trekke ut de variable data 390 00:22:20,000 --> 00:22:23,000 og deretter kreve at banen. 391 00:22:23,000 --> 00:22:29,000 Med andre ord, for å bruke dette nå, hvis jeg åpner opp index.php 392 00:22:29,000 --> 00:22:32,000 merker at jeg ikke kaller render header lenger. 393 00:22:32,000 --> 00:22:36,000 Jeg bare kaller gjengi, men pass jeg i en sitert verdi av header 394 00:22:36,000 --> 00:22:39,000 å gjøre det klart hvilken mal jeg faktisk ønsker å laste. 395 00:22:39,000 --> 00:22:41,000 >> Så over her legge merke til hva jeg gjør. 396 00:22:41,000 --> 00:22:44,000 Jeg passerer dynamisk en nøkkel av tittel, 397 00:22:44,000 --> 00:22:47,000 en verdi på CS50, og dette også, som vi så tidligere, 398 00:22:47,000 --> 00:22:51,000 kunne gjøres mer konsis i den nyeste versjonen av PHP 399 00:22:51,000 --> 00:22:54,000 hvor jeg kan erstatte matrisen funksjon med hakeparenteser, 400 00:22:54,000 --> 00:22:57,000 som jeg foreslår er enda mer lesbart og sikkert 401 00:22:57,000 --> 00:22:59,000 litt lettere å skrive. 402 00:22:59,000 --> 00:23:02,000 Og selvfølgelig, med rendringen bunntekst samtale på bunnen, 403 00:23:02,000 --> 00:23:05,000 vi ikke bry bestått i et annet argument i det hele tatt, ingen assosiativ array, 404 00:23:05,000 --> 00:23:07,000 fordi det er ingenting dynamisk innsiden av det bunntekst. 405 00:23:07,000 --> 00:23:10,000 Det er bare noen nære koder for HTML. 406 00:23:10,000 --> 00:23:14,000 Bra, vi tar skritt mot virkelig rengjøring ting her oppe, 407 00:23:14,000 --> 00:23:17,000 men la meg åpne opp 2 siste eksempler. 408 00:23:17,000 --> 00:23:21,000 Denne, nummer 4, legg merke til at jeg har gjort et bevisst valg nå 409 00:23:21,000 --> 00:23:26,000 å forbedre forrige eksempel ved endelig bruke noen hierarki filene mine. 410 00:23:26,000 --> 00:23:29,000 >> Legg merke til at i dette sammendraget, i dette leser meg, jeg har introdusert 411 00:23:29,000 --> 00:23:32,000 en inkluderer katalog og en maler katalog 412 00:23:32,000 --> 00:23:35,000 der innholdet kommer til å være de tingene jeg ønsker å inkludere 413 00:23:35,000 --> 00:23:38,000 og hvilke maler som jeg ønsker å gjengi, henholdsvis. 414 00:23:38,000 --> 00:23:42,000 Dette er virkelig meg å være anal og prøver å holde ting ryddig, 415 00:23:42,000 --> 00:23:45,000 holde relaterte filer sammen, men sluttresultatet 416 00:23:45,000 --> 00:23:48,000 er at vi nå har en litt ryddigere oppsett, men vi må huske nå 417 00:23:48,000 --> 00:23:51,000 i, for eksempel, index.php 418 00:23:51,000 --> 00:23:55,000 når vi trenger filen helpers.php 419 00:23:55,000 --> 00:24:01,000 vi må nå kreve det via includes / helpers.php 420 00:24:01,000 --> 00:24:06,000 snarere enn å bare si helpers.php fordi nå er det faktisk i en underkatalog. 421 00:24:06,000 --> 00:24:09,000 Nå, som en side, vil du se i disse eksemplene og noen andre 422 00:24:09,000 --> 00:24:11,000 funksjoner som krever, krever en gang. 423 00:24:11,000 --> 00:24:15,000 Det er faktisk en funksjon i seg selv kalte inkludere, og de har alle litt forskjellige atferd. 424 00:24:15,000 --> 00:24:18,000 Her sier jeg krever én gang for å gjøre super klart at jeg bare vil de 425 00:24:18,000 --> 00:24:20,000 hjelpere inngår i prosjektet mitt en gang. 426 00:24:20,000 --> 00:24:24,000 Men hvis jeg er forsiktig, og hvis jeg faktisk tenke gjennom min logikk riktig 427 00:24:24,000 --> 00:24:27,000 Det burde være nok for bare å si kreve opp toppen 428 00:24:27,000 --> 00:24:31,000 så lenge jeg ikke meg selv ved en feil krever at samme filen et annet sted. 429 00:24:31,000 --> 00:24:34,000 Faktisk er dette en litt mer effektiv måte å gjøre ting deretter bruke 430 00:24:34,000 --> 00:24:38,000 krever en gang, så jeg skal trimme den ned til bare kreve. 431 00:24:38,000 --> 00:24:40,000 >> La oss ta ett skritt videre. 432 00:24:40,000 --> 00:24:46,000 Dette siste eksempelet nå, versjon 5, har en enda renere mappehierarki. 433 00:24:46,000 --> 00:24:50,000 Legg merke til hva jeg har gjort her per lese meg i denne endelige versjonen 434 00:24:50,000 --> 00:24:54,000 er nå har jeg mitt HTML katalogen, som jeg har hatt hele denne tiden, 435 00:24:54,000 --> 00:24:58,000 men innsiden av det er nå bare index.php, lectures.php, 436 00:24:58,000 --> 00:25:01,000 week1.php og week2.php. 437 00:25:01,000 --> 00:25:05,000 Den omfatter katalogen nå bor sammen av HTML-katalogen, 438 00:25:05,000 --> 00:25:08,000 så på samme nivå som søsken, så å si. 439 00:25:08,000 --> 00:25:10,000 Så gjør maler-mappen. 440 00:25:10,000 --> 00:25:14,000 Nøkkelen takeaway her er at jeg har introdusert en litt mer struktur, 441 00:25:14,000 --> 00:25:17,000 men nøkkelen funksjonen er nå at bare de filene 442 00:25:17,000 --> 00:25:21,000 som må være tilgjengelig på Internett, offentlig adresserbare 443 00:25:21,000 --> 00:25:25,000 av en URL på offentlige internett er i min HTML katalogen. 444 00:25:25,000 --> 00:25:28,000 >> Imens andre filer, helpers.php, footer.php, 445 00:25:28,000 --> 00:25:32,000 header.php, som er uten tvil kanskje mer sensitiv, 446 00:25:32,000 --> 00:25:35,000 kanskje hjelpere har faktisk noen brukernavn og passord eller noen intellektuelle 447 00:25:35,000 --> 00:25:39,000 eiendom av meg, fungerer jeg virkelig ikke vil at verden skal se, selv om uhell. 448 00:25:39,000 --> 00:25:45,000 Det er god praksis å holde ut av den offentlige HTML-katalogen 449 00:25:45,000 --> 00:25:48,000 noen filer som ikke trenger seg å være offentlig. 450 00:25:48,000 --> 00:25:51,000 Alt du trenger å gjøre i dette tilfellet når man ser på, for eksempel, 451 00:25:51,000 --> 00:25:55,000 HTML katalogens index.php fil, 452 00:25:55,000 --> 00:25:58,000 ser vi bare nødt til å være litt mer forsiktig når som krever 453 00:25:58,000 --> 00:26:00,000 eller kreve en gang denne filen. 454 00:26:00,000 --> 00:26:03,000 Jeg må først gjøre .. for å gå til den overordnede katalogen, 455 00:26:03,000 --> 00:26:06,000 så gjør / includes / helpers.php 456 00:26:06,000 --> 00:26:12,000 å dykke ned i å få filen som jeg bryr meg om. 457 00:26:12,000 --> 00:26:16,000 >> Eventuelle spørsmål da på MVC 458 00:26:16,000 --> 00:26:20,000 eller denne relativt enkle inkarnasjonen av disse? 459 00:26:20,000 --> 00:26:23,000 Og la meg gjøre det klart at vi fokusert mye på 460 00:26:23,000 --> 00:26:27,000 V her, utsikten og factoring ut av disse malene. 461 00:26:27,000 --> 00:26:30,000 Vi har egentlig ikke skilles M fra C ennå. 462 00:26:30,000 --> 00:26:33,000 Faktisk, det er egentlig ingen M her, og selv vår C, 463 00:26:33,000 --> 00:26:36,000 kontrolleren, er egentlig ikke gjør så mye, men du får mye mer 464 00:26:36,000 --> 00:26:39,000 kjent med begge disse to brevene fra MVC, 465 00:26:39,000 --> 00:26:43,000 eller rettere sagt, vil du få mye mer kjent med C 466 00:26:43,000 --> 00:26:49,000 i MVC for oppgavesettet 7, så det er mer av det i horisonten. 467 00:26:49,000 --> 00:26:51,000 Spørsmål? 468 00:26:51,000 --> 00:26:53,000 Det er faktisk ingen her. 469 00:26:53,000 --> 00:26:57,000 >> Ok, la oss nå gå videre til den andre og siste tema for dag. 470 00:26:57,000 --> 00:27:00,000 Det er innføringen av en database. 471 00:27:00,000 --> 00:27:03,000 Frem til dette punktet har vi hatt noen måter å lagre data. 472 00:27:03,000 --> 00:27:05,000 Vi har brukt variabler. 473 00:27:05,000 --> 00:27:08,000 Tilbake i vår C-fil, I / O diskusjon vi begynte å bruke tekstfiler 474 00:27:08,000 --> 00:27:11,000 og bruke filer som fprintf, og da vi selv startet 475 00:27:11,000 --> 00:27:14,000 snakker om CSV-filer litt, kommadelte verdier, 476 00:27:14,000 --> 00:27:17,000 så alle disse tillot oss å ha data lagret 477 00:27:17,000 --> 00:27:19,000 enten ikke-vedvarende eller vedvarende. 478 00:27:19,000 --> 00:27:23,000 Men selv CSVs er egentlig ikke bidrar til å søke 479 00:27:23,000 --> 00:27:25,000 og sette inn og slette. 480 00:27:25,000 --> 00:27:28,000 Det er egentlig bare en dum tekstfil atskilt med komma 481 00:27:28,000 --> 00:27:30,000 rad etter rad for rad for rad, så hvis du ønsker å 482 00:27:30,000 --> 00:27:32,000 søke denne filen det beste du kan gjøre virkelig er lineær søk. 483 00:27:32,000 --> 00:27:34,000 Du må starte på toppen av filen, lese hele greia i, 484 00:27:34,000 --> 00:27:36,000 og se etter noen verdi av interesse. 485 00:27:36,000 --> 00:27:39,000 Hvis du ønsker å sette inn det du trenger å gjøre det samme, 486 00:27:39,000 --> 00:27:41,000 iterating over det og setter det inn i et bestemt sted, 487 00:27:41,000 --> 00:27:45,000 og faktisk, må du gjøre alle de søker logikk selv. 488 00:27:45,000 --> 00:27:49,000 >> Du kan ikke gjøre smarte mønstergjenkjenning på en CSV-fil med mindre du selv skrive inn koden. 489 00:27:49,000 --> 00:27:51,000 Du kan ikke gjøre filtrering av en CSV-fil 490 00:27:51,000 --> 00:27:53,000 med mindre du selv skrive inn koden. 491 00:27:53,000 --> 00:27:56,000 Ville det ikke vært fint hvis noen andre satt i all den innsats 492 00:27:56,000 --> 00:27:59,000 å faktisk gjøre søk enkelt og innsetting lett 493 00:27:59,000 --> 00:28:01,000 og sletting og oppdatering og så videre? 494 00:28:01,000 --> 00:28:04,000 Det er akkurat hva en database er. 495 00:28:04,000 --> 00:28:07,000 SQL, Structured Query Language, er enda et språk 496 00:28:07,000 --> 00:28:10,000 at vi introduserer her i dag, men også dette er ganske tilgjengelig, 497 00:28:10,000 --> 00:28:13,000 og hva vi egentlig skal gjøre er å plukke bare ut av det noen av de mest fremtredende 498 00:28:13,000 --> 00:28:16,000 egenskaper slik at for pset 7, og hvis du gjør noe webbasert, 499 00:28:16,000 --> 00:28:19,000 det endelige prosjektet, har du muligheten til å uttrykke deg selv 500 00:28:19,000 --> 00:28:22,000 i form av data-spørringer. 501 00:28:22,000 --> 00:28:25,000 Du har muligheten til å lagre litt eller mye data 502 00:28:25,000 --> 00:28:28,000 i en mye mer strukturert måte som vil ved slutten av dagen 503 00:28:28,000 --> 00:28:32,000 gjøre livet ditt enklere fordi med SQL kan du uttrykke deg 504 00:28:32,000 --> 00:28:35,000 mye mer presist, mye mer metodisk for å 505 00:28:35,000 --> 00:28:40,000 få tilbake noen delsett av data fra et større korpus av data. 506 00:28:40,000 --> 00:28:45,000 >> Du kan tenke på en database, i dette tilfellet en SQL-database, virkelig liker Excel 507 00:28:45,000 --> 00:28:48,000 eller Numbers hvor det er et regneark, 508 00:28:48,000 --> 00:28:50,000 eller kanskje flere regneark, og et regneark, selvfølgelig, 509 00:28:50,000 --> 00:28:53,000 har rader og kolonner, og det er fordi 510 00:28:53,000 --> 00:28:56,000 SQL databaser er relasjonell, relasjonelle i den forstand 511 00:28:56,000 --> 00:28:59,000 at de lagrer data i form av disse tabellene, 512 00:28:59,000 --> 00:29:01,000 rader og kolonner. 513 00:29:01,000 --> 00:29:03,000 De er høyere ytelse enn noe sånt som et regneark, 514 00:29:03,000 --> 00:29:05,000 og et regneark er ment å bli brukt av et menneske. 515 00:29:05,000 --> 00:29:08,000 En database er ment å bli brukt av en programmerer 516 00:29:08,000 --> 00:29:12,000 skrive kode mot den, så inkarnasjonen av en database 517 00:29:12,000 --> 00:29:14,000 kommer til å være enten kommandolinjen. 518 00:29:14,000 --> 00:29:18,000 >> En av de mest populære relasjonsdatabaser ute er, igjen, MySQL 519 00:29:18,000 --> 00:29:22,000 som er fantastisk gratis, svært høytytende, og dette er hva 520 00:29:22,000 --> 00:29:24,000 Facebook brukes veldig tidlig og til en viss grad fortsatt i dag 521 00:29:24,000 --> 00:29:27,000 å lagre mye av sine data, og vi vil se i et øyeblikk 522 00:29:27,000 --> 00:29:30,000 at bruk relativt enkle kommandoer 523 00:29:30,000 --> 00:29:33,000 vi kan velge data, legge inn data, oppdatere data, 524 00:29:33,000 --> 00:29:37,000 slette data og lignende, men heldigvis er det en mer brukervennlig grensesnitt 525 00:29:37,000 --> 00:29:39,000 enn bare å skrive på en svart og hvit rask her. 526 00:29:39,000 --> 00:29:43,000 Vi vil bruke for pset 7 og utover et gratis verktøy kalt phpMyAdmin. 527 00:29:43,000 --> 00:29:45,000 Navnet er tilfeldig. 528 00:29:45,000 --> 00:29:47,000 Verktøyet skjer for å bli implementert i PHP, 529 00:29:47,000 --> 00:29:49,000 men det er fundamentalt irrelevant. 530 00:29:49,000 --> 00:29:53,000 Hva er nyttig om phpMyAdmin er at det er en web-basert verktøy. 531 00:29:53,000 --> 00:29:55,000 Vi har pre-installert det i apparatet for deg, 532 00:29:55,000 --> 00:29:58,000 og med den kan du lage tabeller i en database, 533 00:29:58,000 --> 00:30:01,000 du kan sette inn data, slette data, og generelt se 534 00:30:01,000 --> 00:30:04,000 dataene i en ganske brukervennlig miljø. 535 00:30:04,000 --> 00:30:07,000 Brukerne ikke kommer til å bruke phpMyAdmin. 536 00:30:07,000 --> 00:30:09,000 >> Dette er egentlig bare en administrativ eller utviklerens verktøy 537 00:30:09,000 --> 00:30:12,000 som å se og rote rundt dine data og finne ut hvordan å strukturere det, 538 00:30:12,000 --> 00:30:15,000 mye som du kanskje selv bruker Excel eller Numbers, 539 00:30:15,000 --> 00:30:19,000 men det kommer til å være en fin måte å visualisere hva som skjer under panseret 540 00:30:19,000 --> 00:30:22,000 slik at du kan fokusere på det interessante problemløsning og ikke så mye 541 00:30:22,000 --> 00:30:25,000 på uforståelige kommandoer. 542 00:30:25,000 --> 00:30:28,000 La oss ta en titt på et eksempel på data som kan lagres tabularly 543 00:30:28,000 --> 00:30:30,000 i en relasjonsdatabase. 544 00:30:30,000 --> 00:30:32,000 Her er et slikt eksempel. 545 00:30:32,000 --> 00:30:35,000 Nå, dessverre, feilet phpMyAdmin på siden av å kaste altfor mange ord 546 00:30:35,000 --> 00:30:38,000 og grafikk med deg, men hvis du hone bare på 547 00:30:38,000 --> 00:30:42,000 ID-kolonnen, brukernavnet stammen, og hash-kolonnen, 548 00:30:42,000 --> 00:30:45,000 Dette er effektivt et regneark, men det skjer for å være en kodebit 549 00:30:45,000 --> 00:30:49,000 av en tabell inne i apparatet 550 00:30:49,000 --> 00:30:53,000 bruker en fil som vi gi deg i oppgavesettet 7. 551 00:30:53,000 --> 00:30:57,000 >> Spesielt gir vi deg en fil som representerer 552 00:30:57,000 --> 00:31:01,000 en brukers bord, så et regneark som inneholder brukere med 3 kolonner, 553 00:31:01,000 --> 00:31:05,000 hvorav den ene er en unik ID starter på en og blir økes deretter. 554 00:31:05,000 --> 00:31:08,000 Den andre kolonnen er et brukernavn, og de av dere som gjorde Hacker, 555 00:31:08,000 --> 00:31:12,000 Hacker utgaven for pset 2, kan gjenkjenne noen av disse brukernavnene minst. 556 00:31:12,000 --> 00:31:16,000 På høyre side er passord, men de er ikke bokstavelig passord. 557 00:31:16,000 --> 00:31:19,000 De er hashes derav, så det viser seg 558 00:31:19,000 --> 00:31:22,000 at lagring passord i en database er en veldig dårlig idé. 559 00:31:22,000 --> 00:31:25,000 Du har vel alle lest på et tidspunkt av noen nettside 560 00:31:25,000 --> 00:31:28,000 eller noen selskapets database blir kompromittert, og deretter må du 561 00:31:28,000 --> 00:31:31,000 endre passordet, må du få refusjon på ting 562 00:31:31,000 --> 00:31:34,000 fordi noen bad guy faktisk brøt inn på kontoen din som et resultat. 563 00:31:34,000 --> 00:31:38,000 >> Lagring passord i klartekst, ukryptert i en database 564 00:31:38,000 --> 00:31:41,000 er helt asinine, og likevel er det sterkt morsomt 565 00:31:41,000 --> 00:31:44,000 deretter å lese om noen svært kjente selskaper 566 00:31:44,000 --> 00:31:47,000 noen ganger i pressen som databaser er kompromittert, 567 00:31:47,000 --> 00:31:50,000 og at en del er ikke morsomt, men det faktum at databasene inneholder ukryptert 568 00:31:50,000 --> 00:31:53,000 passordene er latterlig fordi bokstavelig talt med en linje med kode 569 00:31:53,000 --> 00:31:57,000 du kan beskytte mot en bestemt trussel, og det er det vi har gjort her. 570 00:31:57,000 --> 00:32:00,000 Selv for våre falske liten CS50 Finance versjon 571 00:32:00,000 --> 00:32:03,000 vi kryptere passord bare for godt mål, og det faktum at 572 00:32:03,000 --> 00:32:07,000 alle disse passordene starter med $ 1 $ er bare en konvensjon. 573 00:32:07,000 --> 00:32:10,000 Det betyr bare at de er kryptert eller virkelig hashed, 574 00:32:10,000 --> 00:32:13,000 som er som en enveis kryptering funksjon 575 00:32:13,000 --> 00:32:17,000 der du ikke kan reversere effektene med noe som kalles MD5. 576 00:32:17,000 --> 00:32:21,000 >> Det faktum at 50 er etter det betyr at et salt verdi 577 00:32:21,000 --> 00:32:24,000 av 50 ble brukt for hashing alle disse passordene unntak av én. 578 00:32:24,000 --> 00:32:27,000 Mine, selvfølgelig, som du kan se det, HA, 579 00:32:27,000 --> 00:32:30,000 var med en annen salt, så de av dere som fikk litt tripped opp 580 00:32:30,000 --> 00:32:33,000 kanskje i Hacker 2, som kan ha vært et resultat av at vi har brukt 581 00:32:33,000 --> 00:32:36,000 en annen hash enn de andre fordi passordet mitt er egentlig det samme 582 00:32:36,000 --> 00:32:38,000 som en annen bruker der oppe. 583 00:32:38,000 --> 00:32:41,000 Faktisk, hvis du har ventet alle disse ukene for å finne ut 584 00:32:41,000 --> 00:32:44,000 hva disse passordene var her var de passordene som du ble utfordret 585 00:32:44,000 --> 00:32:48,000 å knekke i Hacker utgaven av oppgavesettet 2, så ingen for vanskelig. 586 00:32:48,000 --> 00:32:50,000 Faktisk var Malan er det samme som jharvard, 587 00:32:50,000 --> 00:32:54,000 men hvis vi går tilbake de så annerledes. 588 00:32:54,000 --> 00:32:58,000 >> Fokus på jharvard i Crimson fordi de ble saltet annerledes. 589 00:32:58,000 --> 00:33:01,000 Algoritmen var perturbed på en måte at den 590 00:33:01,000 --> 00:33:05,000 hash-verdi, ser den krypterte verdien en litt annerledes 591 00:33:05,000 --> 00:33:08,000 fordi inngangene var litt forskjellig, men passord under panseret 592 00:33:08,000 --> 00:33:10,000 var fortsatt til slutt rød. 593 00:33:10,000 --> 00:33:12,000 Nå, hvem bryr seg om dette? 594 00:33:12,000 --> 00:33:15,000 Vel, vi gir deg prøven brukere, prøven brukernavn 595 00:33:15,000 --> 00:33:18,000 og hashes av passordene sine, slik at du faktisk har noen 596 00:33:18,000 --> 00:33:23,000 kunder for CS50 Finance når du først får av bakken med koden din. 597 00:33:23,000 --> 00:33:27,000 Du må gjennomføre flere tabeller innsiden av MySQL, på innsiden av databasen. 598 00:33:27,000 --> 00:33:30,000 Du må opprette flere regneark, effektivt, men vi bestemte oss for å gi deg dette 599 00:33:30,000 --> 00:33:33,000 å komme i gang, og du vil se at oppgavesettet spesifikasjonen 600 00:33:33,000 --> 00:33:37,000 leder deg gjennom prosessen med å importere denne tabellen 601 00:33:37,000 --> 00:33:39,000 og også forklare hva noen av karakteristikkene er, 602 00:33:39,000 --> 00:33:41,000 og du vil også se at vi gir deg koden 603 00:33:41,000 --> 00:33:44,000 å håndtere hashing eller kryptering av passordene 604 00:33:44,000 --> 00:33:49,000 slik at du ikke trenger å bekymre deg for mye om hva MD5 eller lignende er faktisk handler om. 605 00:33:49,000 --> 00:33:53,000 >> Så, SQL, Structured Query Language. 606 00:33:53,000 --> 00:33:56,000 Dette er ganske enkelt, det språket vi er i ferd med å begynne å bruke i pset 7 607 00:33:56,000 --> 00:34:01,000 og kanskje utover å be data fra noen database. 608 00:34:01,000 --> 00:34:06,000 Dataene igjen, lagres tabularly i disse relasjonstabeller, kolonner og rader, 609 00:34:06,000 --> 00:34:09,000 men ved hjelp av noen relativt enkle syntaks som sletting, 610 00:34:09,000 --> 00:34:12,000 sette inn, oppdatere og velg kan vi gjøre akkurat det. 611 00:34:12,000 --> 00:34:15,000 Vi kan slette fra databasen, sette inn, 612 00:34:15,000 --> 00:34:19,000 oppdatere data, samt utvalgte, som henter, data fra databasen. 613 00:34:19,000 --> 00:34:21,000 Hvordan går vi om dette? 614 00:34:21,000 --> 00:34:23,000 La meg gå videre inn i apparatet. 615 00:34:23,000 --> 00:34:28,000 La meg trekke opp http://localhost, 616 00:34:28,000 --> 00:34:30,000 som igjen, er det lokale selve apparatet. 617 00:34:30,000 --> 00:34:32,000 Det er dens standard kallenavn. 618 00:34:32,000 --> 00:34:35,000 Og la meg gå til / phpmyadmin. 619 00:34:35,000 --> 00:34:39,000 Dette skjer for å være en spesiell URL at apparatet er forhåndskonfigurert til å forstå 620 00:34:39,000 --> 00:34:42,000 som ber meg umiddelbart om et brukernavn og passord. 621 00:34:42,000 --> 00:34:46,000 >> Som vanlig, jeg kommer til å skrive jharvard og skarlagen, 622 00:34:46,000 --> 00:34:48,000 men innser det er administratorkonto på datamaskinen. 623 00:34:48,000 --> 00:34:53,000 Det er bare en tilfeldighet at det er også en jharvard registrert for CS50 Finance. 624 00:34:53,000 --> 00:34:56,000 Jharvard, rød, gir Enter meg brukergrensesnittet som vi så 625 00:34:56,000 --> 00:34:59,000 et glimt av et øyeblikk siden, og det er litt overveldende i starten, 626 00:34:59,000 --> 00:35:02,000 men trygg, du aldri kommer til å klikke de fleste av lenkene i dette verktøyet. 627 00:35:02,000 --> 00:35:05,000 Du vil ende opp med å bruke en liten del som er super nyttig, 628 00:35:05,000 --> 00:35:08,000 hvorav den første er databaser opp her. 629 00:35:08,000 --> 00:35:11,000 Hvis jeg går opp til databaser, legge merke til at jeg er bedt om å opprette en database. 630 00:35:11,000 --> 00:35:14,000 Dette er som å lage en ny Excel-fil, effektivt. 631 00:35:14,000 --> 00:35:18,000 Jeg kommer til å gå videre og kaller dette foredraget, og jeg skal bare ignorere feltet der, sortering. 632 00:35:18,000 --> 00:35:20,000 Det har å gjøre med representasjon av data der, 633 00:35:20,000 --> 00:35:24,000 og jeg kommer til å klikke skape, og nå merker som jeg slipper å lage 634 00:35:24,000 --> 00:35:27,000 på venstre side hvor det står ingen databaser 635 00:35:27,000 --> 00:35:30,000 Jeg skal snart se forelesningen database. 636 00:35:30,000 --> 00:35:32,000 >> Hvis jeg nå klikke på venstre side, forelesningen database, 637 00:35:32,000 --> 00:35:34,000 merke mine faner endre litt. 638 00:35:34,000 --> 00:35:38,000 Jeg har struktur, SQL, eksport, import og noen andre ting. 639 00:35:38,000 --> 00:35:40,000 Strukturen er ganske mye tom. 640 00:35:40,000 --> 00:35:43,000 Ingen tabeller funnet i databasen, som det står her, 641 00:35:43,000 --> 00:35:47,000 så la oss lage en tabell, og la oss gå videre og opprette en tabell 642 00:35:47,000 --> 00:35:53,000 liker elevene, og hvor mange kolonner vi ønsker? 643 00:35:53,000 --> 00:35:55,000 La oss holde dette enkelt, og la rekord for hver student 644 00:35:55,000 --> 00:35:58,000 et ID-nummer, et navn og en e-postadresse. 645 00:35:58,000 --> 00:36:02,000 >> Vi vil holde det enkelt sånn, så 3 kolonner, gå. 646 00:36:02,000 --> 00:36:05,000 Skjemaet som du ser her er nå litt rotete og overveldende, 647 00:36:05,000 --> 00:36:08,000 men vi må bare gå gjennom det rad etter rad, så veldig raskt la oss gi 648 00:36:08,000 --> 00:36:14,000 den første kolonnen i denne databasen et navn ID for den unike identifikator. 649 00:36:14,000 --> 00:36:17,000 Det vil være et heltall. Jeg kan faktisk ignorere lengde og verdier. 650 00:36:17,000 --> 00:36:21,000 En int kommer til å være 32 bits uansett hva du skriver der, så la oss la det stå tomt. 651 00:36:21,000 --> 00:36:24,000 Standardverdi, kan jeg gjøre det null, slik det er definert. 652 00:36:24,000 --> 00:36:27,000 Jeg kommer til å forlate det alene. La oss bekymrer seg ikke standardverdier. 653 00:36:27,000 --> 00:36:29,000 La oss rulle over her til høyre, attributter. 654 00:36:29,000 --> 00:36:31,000 Dette er interessant. 655 00:36:31,000 --> 00:36:33,000 La oss gå videre og noe vilkårlig si at IDer må være usignert. 656 00:36:33,000 --> 00:36:35,000 La oss ikke kaste bort noen negative tall. 657 00:36:35,000 --> 00:36:37,000 >> La oss gå 0-4 milliarder, gi eller ta, 658 00:36:37,000 --> 00:36:40,000 og så la oss ikke berøre noen av disse feltene ennå der borte, 659 00:36:40,000 --> 00:36:43,000 men så la meg skrive inn navn her nede, 660 00:36:43,000 --> 00:36:46,000 og deretter den andre var e-post, slik at fangsten er e-post 661 00:36:46,000 --> 00:36:50,000 og navn, åpenbart ikke heltall, så la oss endre disse til et annet felt. 662 00:36:50,000 --> 00:36:53,000 Det viser seg varchar, variabel lengde røye, 663 00:36:53,000 --> 00:36:56,000 er som en streng i en SQL-database 664 00:36:56,000 --> 00:36:59,000 men en variabel lengde, og du faktisk nødt til å fortelle det på forhånd 665 00:36:59,000 --> 00:37:02,000 Maksimal lengde på strengen, så jeg kommer til noe vilkårlig 666 00:37:02,000 --> 00:37:05,000 av konvensjonen typen 255 tegn. 667 00:37:05,000 --> 00:37:08,000 Jeg kunne helt si 32. Jeg kan si 1000. 668 00:37:08,000 --> 00:37:11,000 Du slags behov for å bestemme selv basert på dine demografi hva er 669 00:37:11,000 --> 00:37:14,000 den lengste studentens navn og gå med det nummeret eller litt større, 670 00:37:14,000 --> 00:37:17,000 men hva er fint om en varchar er det ikke kommer til å kaste bort 671 00:37:17,000 --> 00:37:19,000 255 byte på hver elev navn. 672 00:37:19,000 --> 00:37:23,000 Hvis det er DAVID det ikke kommer til å bruke en hel 255 bytes, 673 00:37:23,000 --> 00:37:26,000 men det er en øvre grense, så jeg skal gå med 255 bare ved konvensjonen, 674 00:37:26,000 --> 00:37:30,000 men vi kunne debattere det å være noen lavere verdi, og for e-postadresse 675 00:37:30,000 --> 00:37:34,000 bare for å være konsekvent 255, men igjen, vi kunne ha den samme debatten. 676 00:37:34,000 --> 00:37:36,000 Men jeg kommer til å gjøre en annen ting over her på høyre side. 677 00:37:36,000 --> 00:37:40,000 >> Hva er kraftig om en database er at den kan gjøre mye tunge løft 678 00:37:40,000 --> 00:37:42,000 eller komplekse arbeidet for deg. 679 00:37:42,000 --> 00:37:46,000 Spesielt jeg virkelig ikke bryr seg hva min student ID-nummer er. 680 00:37:46,000 --> 00:37:49,000 Det er bare ment å være en unik identifikator i en database 681 00:37:49,000 --> 00:37:52,000 så jeg har en 32-bit fyndig representasjon av at studenten 682 00:37:52,000 --> 00:37:55,000 slik at jeg har noen måte å unikt identifisere dem 683 00:37:55,000 --> 00:37:58,000 lest det være to Davids, for eksempel i en klasse. 684 00:37:58,000 --> 00:38:01,000 Faktisk, jeg kommer til å sjekke dette AI boksen, auto tilvekst, 685 00:38:01,000 --> 00:38:04,000 slik at databasen, MySQL, finner ut 686 00:38:04,000 --> 00:38:08,000 hva hver nyinnsatte student ID skal være. 687 00:38:08,000 --> 00:38:11,000 Jeg trenger ikke engang å bry seg om det i min kode, 688 00:38:11,000 --> 00:38:13,000 og jeg også kommer til å velge noe under indeksen menyen. 689 00:38:13,000 --> 00:38:17,000 Indeksen faller ned her har grunnskole, unike, 690 00:38:17,000 --> 00:38:19,000 indeks og fulltekst. 691 00:38:19,000 --> 00:38:21,000 Du kan kanskje gjette hva et par av disse tingene er, 692 00:38:21,000 --> 00:38:24,000 men det viser seg i relasjonsdatabaser 693 00:38:24,000 --> 00:38:28,000 du programmerer eller databaseadministrator komme til preemptively 694 00:38:28,000 --> 00:38:32,000 gi hint til databasen på hva felt 695 00:38:32,000 --> 00:38:34,000 i en tabell er litt spesiell. 696 00:38:34,000 --> 00:38:37,000 >> For eksempel, i dette tilfellet kommer jeg til å si at ID 697 00:38:37,000 --> 00:38:42,000 kommer til å være en primær indeks, ellers kjent som en primærnøkkel. 698 00:38:42,000 --> 00:38:44,000 Hva dette betyr per definisjon er at ID heretter 699 00:38:44,000 --> 00:38:48,000 vil identifisere elever i denne tabellen. 700 00:38:48,000 --> 00:38:53,000 Ingen Studenten skal ha samme ID fordi jeg er imponerende denne begrensningen eller denne indeksen. 701 00:38:53,000 --> 00:38:55,000 Dessuten, hva dette kommer til å gjøre for meg er det kommer til å fortelle 702 00:38:55,000 --> 00:38:58,000 MySQL som ID er spesiell. 703 00:38:58,000 --> 00:39:03,000 Jeg bryr særlig om ID, så gå videre og gjøre din fancy datastruktur magi, 704 00:39:03,000 --> 00:39:05,000 bygge opp en slags tre. 705 00:39:05,000 --> 00:39:08,000 Vanligvis er det noe som kalles B-treet, som vi ikke ser på uker siden, 706 00:39:08,000 --> 00:39:11,000 men det er en annen slik data struktur som ligner i ånden til de binære trær 707 00:39:11,000 --> 00:39:15,000 og prøver som vi så på, men det kommer til å si 708 00:39:15,000 --> 00:39:18,000 til databasen dette feltet er så viktig at jeg sannsynligvis 709 00:39:18,000 --> 00:39:22,000 ønsker å være i stand til å søke på det, gå videre og bygge opp noe fancy 710 00:39:22,000 --> 00:39:25,000 datastruktur i minnet for å fremskynde søkene, slik at ideelt 711 00:39:25,000 --> 00:39:28,000 de er konstant tid eller i det minste så nær som mulig 712 00:39:28,000 --> 00:39:32,000 slik at det ikke tilfaller til lineær søk, som ikke kommer til å være 713 00:39:32,000 --> 00:39:34,000 den mest høytytende tilnærming. 714 00:39:34,000 --> 00:39:37,000 Derimot, kunne e-postadresse er stemt en primærnøkkel. 715 00:39:37,000 --> 00:39:41,000 >> I teorien er alles e-postadresse unik, med mindre du deler noen konto, 716 00:39:41,000 --> 00:39:45,000 men det er generelt ikke bra å bruke noe sånt som en streng 717 00:39:45,000 --> 00:39:49,000 som primærnøkkel fordi hvis formålet i livet er å identifisere 718 00:39:49,000 --> 00:39:55,000 rader i tabellen er det ingen grunn til å bruke 255 bytes maksimalt 719 00:39:55,000 --> 00:39:58,000 å identifisere noen hvis du kan komme unna med bare 4 bytes 720 00:39:58,000 --> 00:40:00,000 eller en 32-biters int. 721 00:40:00,000 --> 00:40:03,000 Generelt bør en primærnøkkel være kort og konsis 722 00:40:03,000 --> 00:40:07,000 og ideelt noe som et heltall eller en stor int, som skjer for å være 64 bits. 723 00:40:07,000 --> 00:40:11,000 Men en e-postadresse skal være unike, og en av funksjonene i en database for 724 00:40:11,000 --> 00:40:14,000 er å håndheve unikhet for meg. 725 00:40:14,000 --> 00:40:18,000 Ved å velge unike her ved siden av e-post, selv om e-post selv 726 00:40:18,000 --> 00:40:21,000 er rullet forbi på skjermen, jeg sier til databasen 727 00:40:21,000 --> 00:40:23,000 ikke stol på meg. 728 00:40:23,000 --> 00:40:26,000 Ikke la meg sette inn i databasen 729 00:40:26,000 --> 00:40:29,000 samme e-postadresse to ganger, selv om jeg er en idiot, og jeg er ikke 730 00:40:29,000 --> 00:40:32,000 veldig bra med mine IFS og annet IFS og faktiske PHP-kode 731 00:40:32,000 --> 00:40:37,000 og jeg tilfeldigvis la brukeren registrere seg med en eksisterende e-postadresse 732 00:40:37,000 --> 00:40:40,000 databasen er enda et nivå av forsvar for korrekthet 733 00:40:40,000 --> 00:40:44,000 for å sikre at at duplisert e-postadresse ikke ender opp i tabellen. 734 00:40:44,000 --> 00:40:49,000 >> Nå, derimot, for navnet du sannsynligvis ikke vil gjøre det unike 735 00:40:49,000 --> 00:40:51,000 fordi da det aldri kunne bli to Davids eller to Mike Smiths, for eksempel, 736 00:40:51,000 --> 00:40:55,000 i databasen, slik at vi får bare la være. 737 00:40:55,000 --> 00:40:58,000 Jeg kommer til å gå videre og klikk lagre nederst til høyre, 738 00:40:58,000 --> 00:41:02,000 og alt ser bra ut, men legg merke opp her 739 00:41:02,000 --> 00:41:04,000 Dette er en del som for nå vil vi ikke bruke for mye tid på 740 00:41:04,000 --> 00:41:07,000 fordi syntaksen er litt komplisert, og vi trenger ikke å opprette tabeller 741 00:41:07,000 --> 00:41:10,000 alle som ofte, men SQL seg selv er et språk, 742 00:41:10,000 --> 00:41:13,000 syntaksen som er akkurat her at jeg har uthevet. 743 00:41:13,000 --> 00:41:18,000 Hva phpMyAdmin egentlig gjør er det skaper en web-basert GUI for deg 744 00:41:18,000 --> 00:41:23,000 som du kan spare tid og ikke trenger å manuelt skrive ut 745 00:41:23,000 --> 00:41:26,000 en ganske lang SQL spørring sånn. 746 00:41:26,000 --> 00:41:29,000 >> Med andre ord, hvis du ønsket å manuelt lage denne tabellen, 747 00:41:29,000 --> 00:41:32,000 enten ved at svart og hvitt rask eller i phpMyAdmin 748 00:41:32,000 --> 00:41:35,000 ved hjelp av denne andre kategorien, denne SQL-kategorien hvor du kan skrive inn noen SQL-spørringer 749 00:41:35,000 --> 00:41:38,000 du vil, ærlig, dette ville ha tatt meg et minutt 750 00:41:38,000 --> 00:41:41,000 å faktisk huske hele syntaks, og selv da jeg sannsynligvis ville ha 751 00:41:41,000 --> 00:41:45,000 gjort noen skrivefeil, så dette verktøyet er nyttig for ting som det, og det er også lærerikt. 752 00:41:45,000 --> 00:41:49,000 Du kan begynne å antyde hva syntaksen er 753 00:41:49,000 --> 00:41:52,000 bare ved fin farge koding som phpMyAdmin er å legge 754 00:41:52,000 --> 00:41:54,000 for vår visuelle bekvemmelighet. 755 00:41:54,000 --> 00:41:56,000 Men la oss nå gjøre dette i stedet. 756 00:41:56,000 --> 00:42:00,000 La meg gå til kategorien Sett på toppen, og la meg gå videre og sette for eksempel 757 00:42:00,000 --> 00:42:04,000 en ID for la oss si-faktisk bryr jeg meg ikke. 758 00:42:04,000 --> 00:42:07,000 Det kommer til å auto tilvekst. Jeg kommer til å la databasen håndtere dette. 759 00:42:07,000 --> 00:42:11,000 Men jeg skal være David, og min e-post bør være malan@harvard.edu. 760 00:42:11,000 --> 00:42:16,000 >> La oss gå videre her og satt i Mike Smith som en annen. 761 00:42:16,000 --> 00:42:18,000 Jeg skal gi meg selv et etternavn også, 762 00:42:18,000 --> 00:42:22,000 og vi vil ha ham være smith@example.com, 763 00:42:22,000 --> 00:42:24,000 og deretter hvor går jeg nå? 764 00:42:24,000 --> 00:42:27,000 Vel, det ser ut som go er knappen til å klikke, og voila. 765 00:42:27,000 --> 00:42:30,000 Legg merke til de beste to rader satt. 766 00:42:30,000 --> 00:42:32,000 Dette er den faktiske SQL spørring. 767 00:42:32,000 --> 00:42:36,000 Det er phpMyAdmin verktøy henrettet for meg, 768 00:42:36,000 --> 00:42:40,000 men sluttresultatet, varsel, hvis jeg nå går til bla kategorien 769 00:42:40,000 --> 00:42:43,000 er å se to rader i denne tabellen, veldig minner estetisk 770 00:42:43,000 --> 00:42:46,000 av tabellen så vi tidligere for våre brukere fra pset 7, 771 00:42:46,000 --> 00:42:51,000 en av dem er David Malan, hvorav nå er Mike Smith. 772 00:42:51,000 --> 00:42:54,000 Men bare for å være klar, jeg trenger ikke å bruke phpMyAdmin, 773 00:42:54,000 --> 00:42:56,000 og ja, du kommer til å snart være å skrive kode for pset 7 774 00:42:56,000 --> 00:43:01,000 som automatiserer prosessen med å legge til rader, slette rader, oppdatering rader og lignende, 775 00:43:01,000 --> 00:43:04,000 så la meg i stedet gå til SQL-kategorien her oppe 776 00:43:04,000 --> 00:43:14,000 og skriv inn select * fra studenter der 777 00:43:14,000 --> 00:43:18,000 email = "malan@harvard.edu." 778 00:43:18,000 --> 00:43:21,000 >> Med andre ord anta nå har du 779 00:43:21,000 --> 00:43:26,000 noen HTML-skjema, og brukeren skriver i sin e-postadresse, blant andre felt, 780 00:43:26,000 --> 00:43:29,000 og målet er nå i PHP på baksiden slutten koden 781 00:43:29,000 --> 00:43:31,000 å faktisk slå opp at brukerens andre detaljer. 782 00:43:31,000 --> 00:43:34,000 Hva er ditt fulle navn? Hva er ditt ID-nummer? 783 00:43:34,000 --> 00:43:37,000 Du kan skrive en SQL-spørring som dette, velger du * fra studenter 784 00:43:37,000 --> 00:43:40,000 der email = "malan@harvard.edu." 785 00:43:40,000 --> 00:43:46,000 Og hvis jeg deretter gå, merker at jeg burde, og faktisk jeg får tilbake bare én rad. 786 00:43:46,000 --> 00:43:50,000 Mike er utelatt fra dette resultatet settet, som samlingen rader 787 00:43:50,000 --> 00:43:53,000 vanligvis kalles, fordi han ikke har den samme e-postadresse som meg. 788 00:43:53,000 --> 00:43:57,000 >> Nå, igjen, her for pset 7 vil du bruke phpMyAdmin som et administrativt verktøy 789 00:43:57,000 --> 00:44:00,000 og et pedagogisk verktøy for å lære din vei 790 00:44:00,000 --> 00:44:03,000 verden rundt av SQL, men på slutten av dagen 791 00:44:03,000 --> 00:44:08,000 du kommer til å skrive disse spørringene innsiden av selve PHP-kode, 792 00:44:08,000 --> 00:44:11,000 og så følg i Zamyla sin walkthrough spesielt 793 00:44:11,000 --> 00:44:14,000 der du får en omvisning på distribusjon koden for dette problemet sett 794 00:44:14,000 --> 00:44:18,000 der vi har gitt deg ikke bare estetikk til påloggingssiden 795 00:44:18,000 --> 00:44:21,000 og hyggelig sexy logo som sier CS50 Finance, men vi har også gitt deg 796 00:44:21,000 --> 00:44:24,000 en haug av funksjoner som vil gjøre livet ditt litt enklere. 797 00:44:24,000 --> 00:44:27,000 Vi har også skrevet en del av pset for deg, 798 00:44:27,000 --> 00:44:32,000 login del av det særlig til å gi deg en følelse av et representativt utforming 799 00:44:32,000 --> 00:44:36,000 som bruker faktisk en kontroller, for eksempel, index.php, 800 00:44:36,000 --> 00:44:40,000 login.php og lignende, og da vil du se pset har også en maler katalog 801 00:44:40,000 --> 00:44:43,000 som har alle dine synspunkter, alle estetikk. 802 00:44:43,000 --> 00:44:46,000 Og så generelle arbeidsflyten i pset 7 kommer til å være at 803 00:44:46,000 --> 00:44:49,000 brukerne besøker en kontroller via en URL i en nettleser. 804 00:44:49,000 --> 00:44:53,000 Som controller inneholder PHP-kode som du skrev, og innsiden av PHP-kode 805 00:44:53,000 --> 00:44:57,000 kan noen linjer av SQL nestet i mellom doble anførselstegn 806 00:44:57,000 --> 00:45:00,000 og sendes til en funksjon vi skrev kalt spørring 807 00:45:00,000 --> 00:45:03,000 som vil hjelpe deg å snakke til databasen uten å bruke noe sånt 808 00:45:03,000 --> 00:45:05,000 et administrativt verktøy som phpMyAdmin. 809 00:45:05,000 --> 00:45:08,000 >> Du vil være i stand til å skrive SQL-setninger i PHP-kode 810 00:45:08,000 --> 00:45:11,000 og få tilbake en PHP rekke resultatsettet, 811 00:45:11,000 --> 00:45:14,000 av radene som faktisk passer dette søket. 812 00:45:14,000 --> 00:45:18,000 Og tilsvarende vil du være i stand til å gjøre innstikk eller sletter 813 00:45:18,000 --> 00:45:22,000 eller oppdateringer eller lignende, syntaks som er ganske lik, 814 00:45:22,000 --> 00:45:25,000 og du vil se fra noen online referanser, fra distribusjon koden 815 00:45:25,000 --> 00:45:29,000 og fra pset pakke seg nøyaktig hvordan du skal gå om du gjør det. 816 00:45:29,000 --> 00:45:33,000 Realiser slutt vi egentlig bare toppen av isfjellet av SQL 817 00:45:33,000 --> 00:45:36,000 og MySQL, men kraften av det er egentlig at det frigjør deg 818 00:45:36,000 --> 00:45:40,000 å fokusere på de problemene du ønsker å løse, brukstilfellene du ønsker å implementere 819 00:45:40,000 --> 00:45:43,000 uten å måtte bekymre ganske så mye, i hvert fall tidlig, 820 00:45:43,000 --> 00:45:47,000 om hvor og hvordan du lagrer og søker databasen, 821 00:45:47,000 --> 00:45:50,000 og dette er ganske bokstavelig talt hvor Facebook selv fikk sin start 822 00:45:50,000 --> 00:45:53,000 bruker MySQL og deretter bruke flere MySQL-servere og deretter mer MySQL-servere 823 00:45:53,000 --> 00:45:57,000 før lenge før de deretter måtte virkelig begynne å tenke hardt om hvordan du 824 00:45:57,000 --> 00:46:00,000 lagre data, hvordan du oppbevarer ting enda mer effektivt, 825 00:46:00,000 --> 00:46:04,000 så selv om vi tar for gitt at indekser og unike begrensninger 826 00:46:04,000 --> 00:46:08,000 og så videre bare jobbe der er en veldig interessant samtale 827 00:46:08,000 --> 00:46:12,000 at dette kan alle føre til, så skjønner at vi bare skrape overflaten 828 00:46:12,000 --> 00:46:17,000 av hva som kan til slutt for deg eller dine prosjekter blir ganske mye av store data. 829 00:46:17,000 --> 00:46:22,000 >> Med det sagt, la oss avslutte her, og vi vil se deg neste uke. 830 00:46:28,000 --> 00:46:30,000 [CS50.TV]