1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Uge 8, Fortsat] 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 >> Det er CS50, så dette er slutningen af ​​uge 8 her. 5 00:00:13,000 --> 00:00:16,000 Vi havde naturligvis lidt af en orkan tidligere på ugen, 6 00:00:16,000 --> 00:00:19,000 så lige nu er det virkelig bare dig og mig i denne auditoriet, 7 00:00:19,000 --> 00:00:22,000 men i dag fortsætter vi vores samtale om PHP 8 00:00:22,000 --> 00:00:25,000 og om webprogrammering mere generelt, og vi også indføre idéen 9 00:00:25,000 --> 00:00:29,000 af databaser, der kaldes især én MySQL, som er meget populære i disse dage, 10 00:00:29,000 --> 00:00:34,000 en stor del på grund af sin skalerbarhed samt fordi det er gratis og open source. 11 00:00:34,000 --> 00:00:37,000 >> Men først et kig på, hvor vi slap sidste gang. 12 00:00:37,000 --> 00:00:40,000 Husk på, at vi ledte på de mange Frosh IMs eksempler, 13 00:00:40,000 --> 00:00:44,000 og dette var den hæslige form, jeg kom op med nogle 15 + år siden 14 00:00:44,000 --> 00:00:49,000 med henblik på at få studerende på campus register for freshman intramurale sportsgrene 15 00:00:49,000 --> 00:00:52,000 uden egentlig at skulle trek længere på tværs af værftet til Wigglesworth 16 00:00:52,000 --> 00:00:56,000 at glide en fysisk stykke papir nedenunder nogle Proctor dør. 17 00:00:56,000 --> 00:00:59,000 I stedet flyttede vi alt online, men at gøre det vi behov for at gøre brug 18 00:00:59,000 --> 00:01:03,000 af nogle få teknologier, så man vi havde brug for HTML, Hypertext Markup Language, 19 00:01:03,000 --> 00:01:07,000 som igen er dette kodesprog, som du gøre websider strukturelt. 20 00:01:07,000 --> 00:01:10,000 >> Ved hjælp af en smule af CSS i disse dage, cascading style sheets, 21 00:01:10,000 --> 00:01:16,000 hvorved vi bruger stylizations på websiden ved hjælp af en lidt anden syntaks, 22 00:01:16,000 --> 00:01:19,000 mens HTML var alt om struktur. 23 00:01:19,000 --> 00:01:21,000 Vi er også nødt til at indføre en web programmeringssprog. 24 00:01:21,000 --> 00:01:25,000 I dette tilfælde vil vi bruge PHP, og PHP vil give os 25 00:01:25,000 --> 00:01:28,000 til dynamisk output indhold samt gøre programmatiske ting som 26 00:01:28,000 --> 00:01:33,000 sende e-mails, som det var tilfældet på den note, vi forlod i sidste uge. 27 00:01:33,000 --> 00:01:35,000 >> Husk på, at koden for dette var i 2 dele. 28 00:01:35,000 --> 00:01:38,000 Én, vi havde froshims3.php, 29 00:01:38,000 --> 00:01:42,000 og dette var stort set markup med en HTML-formular inde i det, 30 00:01:42,000 --> 00:01:45,000 en lille smule af CSS heroppe i attributter 31 00:01:45,000 --> 00:01:48,000 således at formen i sig selv ville være centreret på siden, men ud over det 32 00:01:48,000 --> 00:01:51,000 vi havde nogle repræsentative danner indgange, et tekstfelt, et afkrydsningsfelt, 33 00:01:51,000 --> 00:01:55,000 nogle radio knapper, en udsøgt menu, og en submit knap. 34 00:01:55,000 --> 00:02:01,000 Og via denne formular, forelagde vi for en fil, der tilsyneladende var kaldt register3.php, 35 00:02:01,000 --> 00:02:04,000 der selv kiggede lidt noget som dette. 36 00:02:04,000 --> 00:02:08,000 Nu er de fleste af koden i register3.php, recall, handlede om e-mail. 37 00:02:08,000 --> 00:02:11,000 Det gjorde en lille smule af validering af den formular, der blev forelagt for at sikre, 38 00:02:11,000 --> 00:02:14,000 at felterne faktisk er afholdt, som blev forventet. 39 00:02:14,000 --> 00:02:18,000 Så vi kaldte nogle PHP funktioner ved hjælp af lidt 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 pil operatør giver os mulighed for at gøre brug af noget, der hedder objektorienteret programmering. 42 00:02:24,000 --> 00:02:27,000 Vi vil ikke gå ind i det i detaljer her, men kender for nu 43 00:02:27,000 --> 00:02:31,000 det er en måde at have funktioner knyttet til objekter, 44 00:02:31,000 --> 00:02:34,000 der er en særlig form for struktur, som vi så i C. 45 00:02:34,000 --> 00:02:37,000 Men for nu, tager bare på tro, at dette er den korrekte syntaks for at bruge 46 00:02:37,000 --> 00:02:41,000 når der anvendes et bibliotek som denne PHPMailer bibliotek. 47 00:02:41,000 --> 00:02:44,000 Og så i slutningen af ​​denne fil, vi havde dynamisk genereret en e-mail 48 00:02:44,000 --> 00:02:47,000 der blev 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 informeret brugeren derfor, at de var blevet registreret for denne sport. 51 00:02:54,000 --> 00:02:57,000 Det er temmelig meget, hvad det Frosh IM stedet gjorde alle de år siden 52 00:02:57,000 --> 00:03:00,000 når jeg gennemført det, indrømmet, på et andet sprog, 53 00:03:00,000 --> 00:03:02,000 men det viser dig måske den magt, som du har 54 00:03:02,000 --> 00:03:05,000 nu, at du kan udtrykke dig ikke kun programmatisk 55 00:03:05,000 --> 00:03:08,000 på et lavt niveau i et sprog, som C, men på et meget højere niveau 56 00:03:08,000 --> 00:03:11,000 med disse meget virkelige verden applikationer som e-mail til rent faktisk at løse 57 00:03:11,000 --> 00:03:13,000 nogle virkelige verdens problemer. 58 00:03:13,000 --> 00:03:16,000 >> Nu, selvfølgelig, selvom jeg bruger dette script til at generere nogle 59 00:03:16,000 --> 00:03:20,000 emails dynamisk fra jharvard@cs50.net, der er faktisk en konto 60 00:03:20,000 --> 00:03:23,000 at jeg har adgang til, skal du være ganske omhyggelig med at sende 61 00:03:23,000 --> 00:03:26,000 mail kun fra konti, der faktisk din egen, 62 00:03:26,000 --> 00:03:30,000 lest tingene bliver du i en smule varmt vand i livet. 63 00:03:30,000 --> 00:03:35,000 Med det sagt, lad os nu overgang til at løse et andet problem helt, 64 00:03:35,000 --> 00:03:37,000 der af støttekonstruktioner stater. 65 00:03:37,000 --> 00:03:39,000 Nu, hvad det egentlig? 66 00:03:39,000 --> 00:03:42,000 HTTP, denne Hypertext Transfer Protocol, 67 00:03:42,000 --> 00:03:45,000 er faktisk en statsløs protokol, og hvad dette betyder, at 68 00:03:45,000 --> 00:03:48,000 når du trækker op noget som Google.com og derefter tryk enter 69 00:03:48,000 --> 00:03:51,000 normalt din browser har en slags spinning ikonet, der så 70 00:03:51,000 --> 00:03:54,000 resulterer i nogle webside bliver downloadet, 71 00:03:54,000 --> 00:03:57,000 og så den lille ikon stopper spinning, og som faktisk tyder 72 00:03:57,000 --> 00:04:02,000 at HTTP har gennemført en eller anden form for forbindelse til serveren og det er det. 73 00:04:02,000 --> 00:04:05,000 HTTP er statsløs i den forstand, at den ikke opretholder 74 00:04:05,000 --> 00:04:08,000 en vedvarende forbindelse til serveren på samme måde, Skype gør 75 00:04:08,000 --> 00:04:11,000 eller Gchat gør, fordi med HTTP 76 00:04:11,000 --> 00:04:15,000 antagelsen er, at når du har hentet en webside, der er det. 77 00:04:15,000 --> 00:04:18,000 >> Nu, i virkeligheden i disse dage på websteder som Facebook og Google Maps 78 00:04:18,000 --> 00:04:21,000 og Twitter og lignende der er en masse mere dynamik, hvorved 79 00:04:21,000 --> 00:04:25,000 selv efter dette ikon stopper spinding du kan faktisk få flere opdateringer 80 00:04:25,000 --> 00:04:29,000 fra serveren, flere tweets, flere statusopdateringer på Facebook og lignende. 81 00:04:29,000 --> 00:04:33,000 Men selv det er ved hjælp af en teknik, som vi vil tale om i en uge eller to 82 00:04:33,000 --> 00:04:36,000 kendt som Ajax bruge et sprog kaldet JavaScript, 83 00:04:36,000 --> 00:04:38,000 men i slutningen af ​​dagen, er HTTP stadig statsløs. 84 00:04:38,000 --> 00:04:42,000 Og dog, hvis du vil en eller anden måde at huske ting om en bruger 85 00:04:42,000 --> 00:04:44,000 selv efter at de har koblet fra din server 86 00:04:44,000 --> 00:04:47,000 PHP gør give dig et middel til at gøre dette 87 00:04:47,000 --> 00:04:52,000 fordi, som vi så sidste gang, PHP har en række superglobals, 88 00:04:52,000 --> 00:04:55,000 og en superglobal er, igen, en særlig global variabel 89 00:04:55,000 --> 00:04:59,000 der er udleveret til dig af webserveren og PHP selv. 90 00:04:59,000 --> 00:05:02,000 >> Du behøver ikke at gøre noget for at sætte værdier i det, 91 00:05:02,000 --> 00:05:05,000 og blandt de superglobals vi har set indtil nu, er få og sende, 92 00:05:05,000 --> 00:05:08,000 som er hvor formularfelter sættes automatisk for dig, 93 00:05:08,000 --> 00:05:11,000 samt et par andre, som vi ikke har set endnu. 94 00:05:11,000 --> 00:05:17,000 Inde på $ _SERVER er nogle særlige variabler i relation til selve serveren. 95 00:05:17,000 --> 00:05:22,000 Hvad er den IP-adresse, hvilken protokol, HTTP eller HTTPS brugte du, 96 00:05:22,000 --> 00:05:25,000 hvad anmodning metode brugte du og lignende, så der er nogle interessante, 97 00:05:25,000 --> 00:05:29,000 saftige detaljer om serveren, og i virkeligheden, brugeren i der. 98 00:05:29,000 --> 00:05:33,000 Der er $ _cookie, som er der, hvor disse ting kaldet cookies gemmes. 99 00:05:33,000 --> 00:05:36,000 Vi vil ikke bruge tid på cookies selv i dag, 100 00:05:36,000 --> 00:05:40,000 men kender til nu, at en cookie er bare et lille stykke information 101 00:05:40,000 --> 00:05:43,000 at en web-server kan plante på en web browser 102 00:05:43,000 --> 00:05:46,000 og til gengæld sin RAM eller dens computers harddisk 103 00:05:46,000 --> 00:05:49,000 at gemme oplysninger om en bruger, for eksempel, deres brugernavn 104 00:05:49,000 --> 00:05:52,000 således at de ikke behøver at skrive det hver gang de logger på eller nogle 105 00:05:52,000 --> 00:05:55,000 entydigt nummer eller identifikator for den pågældende bruger 106 00:05:55,000 --> 00:05:58,000 så du ikke behøver at forpeste dem med de samme slags spørgsmål om 107 00:05:58,000 --> 00:06:00,000 præferencer i fremtiden, men de fleste af interesse 108 00:06:00,000 --> 00:06:02,000 lige nu er $ _SESSION. 109 00:06:02,000 --> 00:06:07,000 >> Denne superglobal, der ligesom de andre, er afleveret til dig automatisk via PHP 110 00:06:07,000 --> 00:06:10,000 når du skriver PHP-baserede websites 111 00:06:10,000 --> 00:06:13,000 kan gemme noget, du vil, strygere, heltal, 112 00:06:13,000 --> 00:06:16,000 flydende punkter, værdier, arrays, objekter, 113 00:06:16,000 --> 00:06:20,000 virkelig noget, du ønsker, og det giver dig mulighed for at gemme det på en sådan måde, 114 00:06:20,000 --> 00:06:23,000 at selv hvis brugeren besøger dig nu og da 115 00:06:23,000 --> 00:06:26,000 kommer tilbage et minut fra nu eller 5 minutter fra nu, fordi 116 00:06:26,000 --> 00:06:28,000 de tager deres tid, før du klikker nogle andre link 117 00:06:28,000 --> 00:06:32,000 PHP vil sikre, at uanset hvad du lægger i denne session superglobal 118 00:06:32,000 --> 00:06:37,000 et minut eller 5 minutter siden vil stadig være der, når brugeren kommer tilbage. 119 00:06:37,000 --> 00:06:40,000 Og nedenunder hætten denne superglobal er gennemført ved hjælp af 120 00:06:40,000 --> 00:06:44,000 disse ting kaldet cookies, men for nu er det bare en abstraktion 121 00:06:44,000 --> 00:06:47,000 hvorved det er slags den programmæssige svarer til en indkøbsvogn. 122 00:06:47,000 --> 00:06:50,000 Uanset hvad du, programmøren, kan du sætte det 123 00:06:50,000 --> 00:06:53,000 superglobal associative array vil være der et bestemt antal minutter senere 124 00:06:53,000 --> 00:06:59,000 indtil du sletter den, eller indtil brugeren afslutter sin browser helt. 125 00:06:59,000 --> 00:07:02,000 >> Lad os tage et kig på et eksempel på, hvordan denne ting er faktisk bruges. 126 00:07:02,000 --> 00:07:07,000 I counter.php blandt dagens stykker kode 127 00:07:07,000 --> 00:07:09,000 har vi følgende linje. 128 00:07:09,000 --> 00:07:13,000 I starten af ​​denne fil, vi har en flok blå kommentarer, som er uinteressante for nu. 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 det faktisk gør præcis hvad den siger. 131 00:07:18,000 --> 00:07:20,000 Det starter sessioner. 132 00:07:20,000 --> 00:07:25,000 Det giver dig mulighed for at bruge den store superglobal $ _SESSION, og det er så simpelt er det. 133 00:07:25,000 --> 00:07:30,000 Nu, hvis vi går over til at se på linie 16, lad os prøve at regne ud, hvad denne webside kommer til at gøre. 134 00:07:30,000 --> 00:07:35,000 Hvis (isset ($ _SESSION ["counter"]) og derefter gå videre 135 00:07:35,000 --> 00:07:39,000 og butik i tællervariablen, små bogstaver tæller, 136 00:07:39,000 --> 00:07:42,000 $ _SESSION ["Counter"]. 137 00:07:42,000 --> 00:07:45,000 Dette synes at være at erklære en lokal variabel kaldet counter 138 00:07:45,000 --> 00:07:48,000 inden i hvilken det er at sætte en kopi af det, der er inde i superglobal 139 00:07:48,000 --> 00:07:52,000 kaldet session på location "tæller". 140 00:07:52,000 --> 00:07:56,000 Else, tilsyneladende, denne lille lokal variabel tæller, er initialiseret til 0. 141 00:07:56,000 --> 00:08:01,000 >> Men derefter et par linjer senere i 26 meddelelse om, at mødet eksemplar af tælleren, 142 00:08:01,000 --> 00:08:06,000 sin nøgle, har en ny værdi er tildelt som er den aktuelle værdi plus 1. 143 00:08:06,000 --> 00:08:09,000 Kort sagt, synes denne fil, der skal ajourføre 144 00:08:09,000 --> 00:08:13,000 en tæller, der er gemt inde i sessionen superglobal 145 00:08:13,000 --> 00:08:16,000 ved at forøge det med 1, men den først har en kopi af den tidligere værdi 146 00:08:16,000 --> 00:08:20,000 ved at opbevare den i en lokal variabel kaldet $ counter, 147 00:08:20,000 --> 00:08:22,000 og derefter ned her lad os se hvad der er tilbage. 148 00:08:22,000 --> 00:08:24,000 Det viser sig, at det er stort set bare HTML. 149 00:08:24,000 --> 00:08:29,000 Nederst på denne side ser vi på linje 37, at jeg har besøgt dette websted 150 00:08:29,000 --> 00:08:33,000 tæller antal gange, så der er et par interessante funktioner her. 151 00:08:33,000 --> 00:08:36,000 One, dette er tydeligvis en variabel, men det er ikke tilstrækkeligt bare at sætte 152 00:08:36,000 --> 00:08:39,000 $ Tæller i kroppen af ​​din HTML, fordi selvfølgelig 153 00:08:39,000 --> 00:08:43,000 hvis det er bare der blandt din HTML PHP vil antage det er bare HTML. 154 00:08:43,000 --> 00:08:48,000 Du bogstaveligt talt ønsker $ tæller skal udskrives på skærmen. 155 00:08:48,000 --> 00:08:51,000 >> Men i stedet ved at slippe ind i PHP mode 156 00:08:51,000 --> 00:08:55,000 med dette stykke syntaks vi kan dynamisk indsætte en værdi her 157 00:08:55,000 --> 00:08:58,000 meget ens i ånden til, hvad vi gjorde sidste gang med 158 00:08:58,000 --> 00:09:00,000 indsætte værdier i strenge. 159 00:09:00,000 --> 00:09:04,000 I virkeligheden er dette blot en forkortelse notation for at sige noget som dette bogstaveligt, 160 00:09:04,000 --> 00:09:12,000 print ($ counter) eller endda noget lignende printf (% s, counter), 161 00:09:12,000 --> 00:09:14,000 eller endda, som du måske har set på nettet eller i lærebøger, 162 00:09:14,000 --> 00:09:17,000 der er en funktion i PHP kaldet echo 163 00:09:17,000 --> 00:09:20,000 der gør det samme, og alle af dem er bare længere endeløse måder 164 00:09:20,000 --> 00:09:25,000 at sige 00:09:28,000 I dette ene tilfælde behøver du ikke at sætte 166 00:09:28,000 --> 00:09:30,000 ordet PHP efter spørgsmålstegnet. 167 00:09:30,000 --> 00:09:34,000 Dette er en forkortelse notation for, igen, hvad vi lige har set et øjeblik siden 168 00:09:34,000 --> 00:09:37,000 som ekko vis værdi. 169 00:09:37,000 --> 00:09:39,000 >> Lad os se hvad det endelige resultat af dette faktisk er. 170 00:09:39,000 --> 00:09:43,000 Lad mig gå over i vores counter.php fil, 171 00:09:43,000 --> 00:09:47,000 og vi vil se, at David bare lavet en fejl ved at lege med den kode der. 172 00:09:47,000 --> 00:09:50,000 Lad os gå fix, hvad han skruet op, 173 00:09:50,000 --> 00:09:54,000 og fejlen synes at være der, væk, på ledningen 37. 174 00:09:54,000 --> 00:09:59,000 Ifølge toppen af ​​denne side jeg har besøgt dette websted 0 gange. 175 00:09:59,000 --> 00:10:02,000 Nå, lad os gå videre nu, og på toppen af ​​browseren klikke på 176 00:10:02,000 --> 00:10:05,000 reload ikon, og jeg klikker genindlæse, 177 00:10:05,000 --> 00:10:12,000 og nu har jeg besøgte stedet 1 gang, 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 side den faktiske kildekoden er under forandring, 179 00:10:16,000 --> 00:10:19,000 og bemærk den fuldstændige mangel på enhver PHP, og det er fordi 180 00:10:19,000 --> 00:10:23,000 PHP koden er evalueret eller fortolkes server side, 181 00:10:23,000 --> 00:10:27,000 og så betyder, at produktionen af ​​PHP scriptet er, hvad der i sidste ende sendes til browseren, 182 00:10:27,000 --> 00:10:31,000 som i dette tilfælde er nogle rå HTML og nogle rå tekst. 183 00:10:31,000 --> 00:10:33,000 Hvad sker der her? 184 00:10:33,000 --> 00:10:37,000 >> Nå, med forholdsvis få linjer kode jeg kunne gemme 185 00:10:37,000 --> 00:10:40,000 vedholdende i løbet af nogle sekunder, eller hvis vi ventet længe nok, 186 00:10:40,000 --> 00:10:44,000 minutter, selv timer, nogle værdier på en måde, der gør HTTP 187 00:10:44,000 --> 00:10:47,000 synes stateful som om vi har bevaret 188 00:10:47,000 --> 00:10:51,000 denne forbindelse til serveren, og det er bare at huske, hvad jeg fortalte det sidste gang, 189 00:10:51,000 --> 00:10:55,000 men i virkeligheden er der en hel masse af kompleksitet foregår under kølerhjelmen 190 00:10:55,000 --> 00:10:59,000 involverer cookies, der er gør det muligt PHP at give mig denne illusion 191 00:10:59,000 --> 00:11:02,000 af denne shopping cart-lignende funktion. 192 00:11:02,000 --> 00:11:05,000 For nu, en triviel eksempel, hvor vi bare opbevaring et heltal 193 00:11:05,000 --> 00:11:08,000 men denne funktion vil vende tilbage til at være af stor værdi 194 00:11:08,000 --> 00:11:10,000 når vi begynder at tale om mere komplekse projekter, 195 00:11:10,000 --> 00:11:12,000 blandt dem problem indstille 7. 196 00:11:12,000 --> 00:11:16,000 Dette er din sidste problem ligger i CS50. 197 00:11:16,000 --> 00:11:19,000 Jeg ved, det er så trist, men hvad du vil finde, er, at vi kommer til at indgå 198 00:11:19,000 --> 00:11:22,000 denne del af semestret ved faktisk skifter 199 00:11:22,000 --> 00:11:25,000 af den sammenhæng, C, bestemt til forbindelse med PHP 200 00:11:25,000 --> 00:11:27,000 men mens du bruger nogle af de samme fundamentale 201 00:11:27,000 --> 00:11:29,000 vi har talt om i nogen tid. 202 00:11:29,000 --> 00:11:33,000 >> Målet med Pset 7 er at gennemføre CS50 Finans, 203 00:11:33,000 --> 00:11:37,000 som er din egen version af Yahoo Finance eller Google Finance 204 00:11:37,000 --> 00:11:40,000 eller endda Etrade.com hvorved du har evnen til at 205 00:11:40,000 --> 00:11:43,000 se op aktiekurserne for givne symboler, men endnu mere end det 206 00:11:43,000 --> 00:11:48,000 du har evnen til at "købe" og "sælge" aktier 207 00:11:48,000 --> 00:11:51,000 som handles på forskellige børser, fordi som denne hjemme side 208 00:11:51,000 --> 00:11:55,000 her antyder, som er virkelig, i hvilket omfang vi er begyndt 209 00:11:55,000 --> 00:11:59,000 problemet sæt til dig, har du en login-formular, der beder om et brugernavn og en adgangskode. 210 00:11:59,000 --> 00:12:03,000 Det har en submit knap, men derefter, da vi til sidst vil se, 211 00:12:03,000 --> 00:12:06,000 der er ikke noget egentlig foregår under kølerhjelmen endnu, fordi det 212 00:12:06,000 --> 00:12:09,000 tilbage for dig at implementere muligheden for at registrere nye brugere, 213 00:12:09,000 --> 00:12:12,000 evnen til at købe aktier, til at sælge lagre, 214 00:12:12,000 --> 00:12:14,000 til rent faktisk at se op aktuelle aktiekurser. 215 00:12:14,000 --> 00:12:17,000 >> Og ja, vil dette være så virkelige verden som muligt, fordi vi gjorde 216 00:12:17,000 --> 00:12:20,000 indeholde en smule kode, der vil give dig med en enkelt funktion 217 00:12:20,000 --> 00:12:25,000 at søge Yahoo Finance, som vidunderligt stiller gratis data 218 00:12:25,000 --> 00:12:31,000 for at kigge op aktiekurserne baseret på aktiesymbol eller ticker symbol, 219 00:12:31,000 --> 00:12:34,000 og du kommer tilbage den aktuelle aktiekurs på dagen. 220 00:12:34,000 --> 00:12:37,000 De data, du faktisk ser i denne særlige Pset vil være 221 00:12:37,000 --> 00:12:40,000 omtrent lige så virkelige verden som det kan få, så du rent faktisk er grænseflade 222 00:12:40,000 --> 00:12:43,000 med virkelige verden lagre, virkelige verden priser, 223 00:12:43,000 --> 00:12:47,000 og vi skal se, hvor mange penge du kan tjene måske 224 00:12:47,000 --> 00:12:51,000 over de næste mange dage ved at spille med din egen problem sæt. 225 00:12:51,000 --> 00:12:55,000 >> Men lad os først indstille scenen for hvordan man designer noget, der er helt sikkert mere kompliceret 226 00:12:55,000 --> 00:12:59,000 end counter.php, er det mere kompliceret end nogen af ​​de Frosh IM eksempler hidtil, 227 00:12:59,000 --> 00:13:02,000 og lad os prøve at indføre nogle paradigmer her at give os 228 00:13:02,000 --> 00:13:06,000 både for Pset 7 og måske til dit afsluttende projekt, hvis du gør noget webbaseret 229 00:13:06,000 --> 00:13:11,000 at holde din kode velorganiseret, til at holde dig rask, 230 00:13:11,000 --> 00:13:15,000 og til at tage et skridt i retning samarbejde, uanset om CS50 endelige projekt 231 00:13:15,000 --> 00:13:18,000 eller ud over hvis du fortsætter med at programmere noget i fremtiden. 232 00:13:18,000 --> 00:13:21,000 Der er denne generelle design paradigme 233 00:13:21,000 --> 00:13:24,000 i datalogi og i softwareudvikling mere generelt 234 00:13:24,000 --> 00:13:27,000 kendt som MVC, model view controller, 235 00:13:27,000 --> 00:13:30,000 og dette er en dum forkortelse, der beskriver en meget god idé, 236 00:13:30,000 --> 00:13:34,000 som er adskillelsen af ​​forskellige aspekter af et program, 237 00:13:34,000 --> 00:13:39,000 specifikt at holde separate logikken eller forretningslogikken af ​​en hjemmeside 238 00:13:39,000 --> 00:13:42,000 så noget, der involverer ting som 239 00:13:42,000 --> 00:13:45,000 kalde funktioner og forespørge databaser og lignende 240 00:13:45,000 --> 00:13:48,000 sker ikke blandt din HTML 241 00:13:48,000 --> 00:13:51,000 men snarere i separate filer, og ja, der er denne ene fil 242 00:13:51,000 --> 00:13:54,000 typisk, at du har ringet til controlleren 243 00:13:54,000 --> 00:13:56,000 det er virkelig hjernen bag operationen, og vi vil se et eksempel 244 00:13:56,000 --> 00:13:58,000 af dette på bare et øjeblik. 245 00:13:58,000 --> 00:14:01,000 >> Der er en model, der er programmering kode 246 00:14:01,000 --> 00:14:05,000 , der taler til dine databaser, der taler til Yahoo Finance og lignende, 247 00:14:05,000 --> 00:14:08,000 og så er der V i MVC, synspunkter, 248 00:14:08,000 --> 00:14:11,000 alle de ting, der er relateret til æstetik, de filer, der faktisk indeholder 249 00:14:11,000 --> 00:14:14,000 din HTML, måske din CSS og lignende. 250 00:14:14,000 --> 00:14:17,000 Ideen her, da denne situation tyder på, er, at controlleren 251 00:14:17,000 --> 00:14:21,000 er den fil, som vi snart vil se og som du særligt vil se i Pset 7, 252 00:14:21,000 --> 00:14:24,000 at verden taler med via deres web-browsere. 253 00:14:24,000 --> 00:14:27,000 Det er den fil, der bliver besøgt på det offentlige Internet, 254 00:14:27,000 --> 00:14:30,000 men controlleren taler til potentielt en model, 255 00:14:30,000 --> 00:14:34,000 der er en eller flere andre filer, der indeholder kode relateret til data, 256 00:14:34,000 --> 00:14:37,000 kode relateret til databaser og lignende, og så det taler til 257 00:14:37,000 --> 00:14:40,000 kontrolleren en eller flere andre filer, kendt som visninger, 258 00:14:40,000 --> 00:14:43,000 som er de æstetik en webside, skabeloner slags, 259 00:14:43,000 --> 00:14:47,000 der kan tage nogle data som input, men ved slutningen af ​​dagen 260 00:14:47,000 --> 00:14:50,000 den eneste logik inde i en visning bør være gengivelse af disse oplysninger, 261 00:14:50,000 --> 00:14:53,000 iteration over en løkke og faktisk spytte nogle 262 00:14:53,000 --> 00:14:56,000 HTML-baseret overførsel deraf eller endog noget som en PDF-fil. 263 00:14:56,000 --> 00:14:59,000 >> Hvad er rart om MVC er, at du kan have forskellige synspunkter 264 00:14:59,000 --> 00:15:02,000 baseret på den type enhed, der er baseret på den type filformat, som du rent faktisk 265 00:15:02,000 --> 00:15:04,000 ønsker at vise til brugeren. 266 00:15:04,000 --> 00:15:10,000 Lad os tage et kig på et par gradvist mere komplekse og godt designet eksempler 267 00:15:10,000 --> 00:15:13,000 ved at starte først med version 0 her. 268 00:15:13,000 --> 00:15:16,000 Lad mig gå videre og åbne op i vores MVC bibliotek i dag 269 00:15:16,000 --> 00:15:21,000 en fil kaldet index.php i mappen 0. 270 00:15:21,000 --> 00:15:26,000 Bemærk dette er en super enkel og meget underwhelming website 271 00:15:26,000 --> 00:15:29,000 Det er slags version 0 af en hjemmeside til CS50, 272 00:15:29,000 --> 00:15:32,000 og læg mærke til, hvordan vi har et link til Forelæsninger, har vi et link til Syllabus, 273 00:15:32,000 --> 00:15:35,000 og hvis jeg følger linket til Foredrag varsel at webadressen 274 00:15:35,000 --> 00:15:39,000 up top vil skifte til lectures.php. 275 00:15:39,000 --> 00:15:44,000 Hvis jeg så følg linket til Uge 1 bemærk, at URL skifter til week1.php. 276 00:15:44,000 --> 00:15:46,000 Der synes at være en forholdsvis simpel hierarkisk struktur her. 277 00:15:46,000 --> 00:15:49,000 >> Lad os tage et hurtigt kig under motorhjelmen på, hvordan denne er lagt ud, 278 00:15:49,000 --> 00:15:53,000 og ja, hvis jeg ser på index.php det er ret simpelt. 279 00:15:53,000 --> 00:15:57,000 Faktisk er der selvom jeg kaldte dette en PHP fil er ingen egentlige programmering kode. 280 00:15:57,000 --> 00:16:01,000 Der er en kommentar, som jeg skrev her i PHP bare så brugeren ikke ender med at se det. 281 00:16:01,000 --> 00:16:05,000 Selvfølgelig, som før, noget, der er i mellem PHP tags 282 00:16:05,000 --> 00:16:08,000 bliver fortolket, selvom det er en kommentar, og at fortolke en kommentar 283 00:16:08,000 --> 00:16:11,000 betyder bare at smide det væk i slutningen af ​​dagen og ikke faktisk 284 00:16:11,000 --> 00:16:15,000 sende den til browseren, så alt i her er kun æstetik. 285 00:16:15,000 --> 00:16:20,000 Hvis jeg åbner ligeledes lectures.php også dette er blot en hård kodet fil. 286 00:16:20,000 --> 00:16:23,000 Det sker at blive kaldt noget. Php, 287 00:16:23,000 --> 00:16:27,000 men det er virkelig bare. html, og week1.php, week2.php 288 00:16:27,000 --> 00:16:31,000 ligeledes er bare markup, så der er en masse mangler i dette design. 289 00:16:31,000 --> 00:16:33,000 One, det er en enorm mængde af copy / paste. 290 00:16:33,000 --> 00:16:37,000 Selvom det eneste, der ændrer sig blandt disse filer er uordnet liste, 291 00:16:37,000 --> 00:16:41,000 Li-tags, jeg alligevel har doc type, HTML, hoved, 292 00:16:41,000 --> 00:16:44,000 titel, tæt organ, tæt HTML og mere 293 00:16:44,000 --> 00:16:47,000 i hver enkelt fil, betyder der, at hvis jeg nogensinde vil omstrukturere 294 00:16:47,000 --> 00:16:50,000 denne webside eller restylize det jeg nødt til at gå ind og ændre 295 00:16:50,000 --> 00:16:54,000 alle disse filer manuelt eller med nogle massive finde og erstatte. 296 00:16:54,000 --> 00:17:01,000 >> Lad os tage et skridt mod en mere intelligent, længere tænke design i version 1 her 297 00:17:01,000 --> 00:17:04,000 hvorved som pr læse mig, at vi har inkluderet, så du kan spille sammen med 298 00:17:04,000 --> 00:17:07,000 disse mere afslappet derhjemme meddelelse om, at vi har her 299 00:17:07,000 --> 00:17:10,000 et resumé af de filer i version 1 af denne hjemmeside, 300 00:17:10,000 --> 00:17:13,000 og det lader til, at jeg har påtaget mig at faktor ud 301 00:17:13,000 --> 00:17:17,000 nogle fælles kodeks, header.php og footer.php. 302 00:17:17,000 --> 00:17:20,000 Nå, lad os tage et kig på, hvad der er inde i den første af dem. 303 00:17:20,000 --> 00:17:23,000 Header.php ser bekendt ud, 304 00:17:23,000 --> 00:17:26,000 men bemærk hvor kommer det bliver afbrudt? 305 00:17:26,000 --> 00:17:30,000 Lige efter linje 19, så det er alt, hvad der var fælles 306 00:17:30,000 --> 00:17:33,000 fra filer index.php, lectures.php, 307 00:17:33,000 --> 00:17:36,000 week1 og week2.php fra det foregående eksempel. 308 00:17:36,000 --> 00:17:40,000 Hvad jeg gjorde var kopi og klippe alt, hvad der var fælles for alle disse filer, 309 00:17:40,000 --> 00:17:44,000 sætte det i en separat header fil, og på samme måde i footer.php 310 00:17:44,000 --> 00:17:48,000 jeg anvende det samme princip, hvorefter de eneste interessante linjer 311 00:17:48,000 --> 00:17:52,000 i footer.php er disse to, tæt krop og tæt HTML. 312 00:17:52,000 --> 00:17:55,000 >> Men hvad det betyder nu, er, at i den nye version 313 00:17:55,000 --> 00:17:59,000 af index.php varsel hvor meget enklere det kan få. 314 00:17:59,000 --> 00:18:02,000 Indrømmet, en lidt mere kryptisk leder, en lidt mindre intuitiv 315 00:18:02,000 --> 00:18:06,000 at følge top til bund, men min Gud, er alt dette redundans nu væk. 316 00:18:06,000 --> 00:18:10,000 Vi kræver bruger en PHP funktion bogstaveligt kaldet kræve op top, 317 00:18:10,000 --> 00:18:15,000 som er meget minder, husker af C'er # include mekanisme. 318 00:18:15,000 --> 00:18:17,000 Vi kræver header.php øverst. 319 00:18:17,000 --> 00:18:20,000 Vi kræver footer.php i bunden, og det eneste, der er anderledes 320 00:18:20,000 --> 00:18:25,000 eller særlige ved denne fil er det indhold, der er beregnet til at være unik for det. 321 00:18:25,000 --> 00:18:29,000 Hvis jeg så gå ind i, siger, lectures.php, det samme princip gælder. 322 00:18:29,000 --> 00:18:32,000 Igen, nogle bemærkninger op øverst, men så jeg kræver header, kræver footer, 323 00:18:32,000 --> 00:18:35,000 og i mellem det er kun det indhold, der er faktisk ændret. 324 00:18:35,000 --> 00:18:38,000 Og hvis vi så ind i uge 1 og uge 2 ville vi se 325 00:18:38,000 --> 00:18:42,000 at det samme princip er blevet anvendt i denne region. 326 00:18:42,000 --> 00:18:44,000 Tja, vi er ikke helt færdig der. 327 00:18:44,000 --> 00:18:48,000 >> Lad os tage et kig på version 2, der har en lignende struktur, 328 00:18:48,000 --> 00:18:50,000 men bemærk nu jeg har introduceret noget andet. 329 00:18:50,000 --> 00:18:53,000 I linje 10 jeg har introduceret helpers.php, 330 00:18:53,000 --> 00:18:55,000 som tilsyneladende indeholder hjælperfunktioner. 331 00:18:55,000 --> 00:18:58,000 En hjælpefunktion er generelt en relativt kort funktion 332 00:18:58,000 --> 00:19:01,000 at du skriver at hjælpe dig ud på forskellige steder, 333 00:19:01,000 --> 00:19:04,000 og lad os se hvad der er inde i helpers.php. 334 00:19:04,000 --> 00:19:07,000 I dette tilfælde ser det ud som det har 2 funktioner. 335 00:19:07,000 --> 00:19:10,000 Genkald fra den anden dag med vores terning eksempel 336 00:19:10,000 --> 00:19:13,000 du kan definere dine egne funktioner i PHP, og hvad jeg har gjort nu, er jeg har 337 00:19:13,000 --> 00:19:17,000 definerede funktioner kaldet gøre sidefod og gøre header, 338 00:19:17,000 --> 00:19:21,000 hvoraf den første tager en parameter kaldet data, 339 00:19:21,000 --> 00:19:25,000 hvis standardværdi er en tom array, som foreslået her, 340 00:19:25,000 --> 00:19:29,000 og vi kan faktisk skrive dette endnu mere rammende i den nyeste version af PHP 341 00:19:29,000 --> 00:19:32,000 ved at sige åbent firkantet beslag, lukket firkantet beslag. 342 00:19:32,000 --> 00:19:35,000 Det betyder et tomt array af størrelse 0, men ikke desto mindre et array. 343 00:19:35,000 --> 00:19:38,000 >> Denne ekstrakt funktion er lidt speciel, da 344 00:19:38,000 --> 00:19:41,000 hvad det gør, er det tager som sit argument et associativt array 345 00:19:41,000 --> 00:19:45,000 der har 0 eller flere centrale værdipar, og hvis du har en nøgle af Foo 346 00:19:45,000 --> 00:19:48,000 og en værdi på bar ekstrakt funktion 347 00:19:48,000 --> 00:19:51,000 skaber en situation, som nu, som i ledningen 11, 348 00:19:51,000 --> 00:19:57,000 du har en lokal variabel kaldet $ foo hvis værdi er bar. 349 00:19:57,000 --> 00:19:59,000 Og hvis du havde flere nøgler og værdier i data array, 350 00:19:59,000 --> 00:20:03,000 Tilsvarende vil de blive ekstraheret over i den lokale anvendelsesområde 351 00:20:03,000 --> 00:20:06,000 eller navn plads, så footer.php og 352 00:20:06,000 --> 00:20:09,000 den samme idé hernede, så header.php 353 00:20:09,000 --> 00:20:12,000 have adgang til disse variabler. 354 00:20:12,000 --> 00:20:15,000 Faktisk, lad mig åbne op igen header.php 355 00:20:15,000 --> 00:20:18,000 og gøre opmærksom på nu, hvad det ser ud i denne version. 356 00:20:18,000 --> 00:20:22,000 >> Snarere end hård kodning CS50 som titlen for hver enkelt side 357 00:20:22,000 --> 00:20:24,000 mærke til den dynamik, der er muligt nu. 358 00:20:24,000 --> 00:20:29,000 I linie 5 Jeg ekko en titel variabel, 359 00:20:29,000 --> 00:20:34,000 men først jeg passerer denne titel variabel til en funktion kaldet htmlspecialchars. 360 00:20:34,000 --> 00:20:38,000 En dum navn for en funktion, lang som den er, men det virkelig gør, hvad den siger. 361 00:20:38,000 --> 00:20:41,000 Det sikrer, at eventuelle specialtegn 362 00:20:41,000 --> 00:20:46,000 i strengen, der er blevet vedtaget i korrekt undsluppet HTML. 363 00:20:46,000 --> 00:20:49,000 Dette er faktisk en måde at undgå noget, der hedder et cross site scripting angreb 364 00:20:49,000 --> 00:20:52,000 hvorved en person kan ondskabsfuldt eller ved et uheld 365 00:20:52,000 --> 00:20:55,000 injicere deres egen HTML ind på din hjemmeside 366 00:20:55,000 --> 00:20:59,000 ved at indsætte i en form, for eksempel 367 00:20:59,000 --> 00:21:02,000 noget, som du ikke var helt ventet, især JavaScript-kode, 368 00:21:02,000 --> 00:21:05,000 som vi vil tale om i en uge eller to tid. 369 00:21:05,000 --> 00:21:08,000 >> Dette nu header.php, det er en visning 370 00:21:08,000 --> 00:21:12,000 i den forstand, at det giver dig mulighed for at se æstetisk indholdet af nogle datasæt. 371 00:21:12,000 --> 00:21:14,000 Men mere specifikt, det er en skabelon. 372 00:21:14,000 --> 00:21:19,000 Det er en slags blueprint nu, hvad vi ønsker, at overskriften på hver side til at ligne, 373 00:21:19,000 --> 00:21:23,000 men der er en vis dynamik i at vi ønsker titlen, der skal dynamisk indsat 374 00:21:23,000 --> 00:21:26,000 baseret på Titelvariablen 375 00:21:26,000 --> 00:21:30,000 der blev udvundet da vi ringede igen, 376 00:21:30,000 --> 00:21:33,000 Render header funktionen. 377 00:21:33,000 --> 00:21:36,000 Nu, hvis vi kiggede på Render footer, er der faktisk ikke meget brug af det lige nu 378 00:21:36,000 --> 00:21:40,000 fordi der i footer.php der er ingen dynamik overhovedet. 379 00:21:40,000 --> 00:21:43,000 Der kunne være, men i det øjeblik, det er en hård kodet liste over 2 tags, 380 00:21:43,000 --> 00:21:46,000 men den samme idé gælder, så der rent faktisk tyder på, hvorfor 381 00:21:46,000 --> 00:21:49,000 gjorde vi spilde tid med en render overskrift og en render footer funktion? 382 00:21:49,000 --> 00:21:52,000 Lad mig gå i stedet nu ind i version 3, 383 00:21:52,000 --> 00:21:56,000 og i version 3 i hjælpere jeg besluttet at forenkle det endnu mere. 384 00:21:56,000 --> 00:21:58,000 >> Lad mig få en Render funktion. 385 00:21:58,000 --> 00:22:02,000 Lad mig få det tage endnu et argument, denne gang kaldet skabelon, 386 00:22:02,000 --> 00:22:05,000 som menes at være navnet på en skabelon, 387 00:22:05,000 --> 00:22:11,000 og så vil jeg sammenkæde formasteligt. php til at variablens værdi, 388 00:22:11,000 --> 00:22:17,000 og derefter, hvis det findes foo.php, bar.php eller header.php og footer.php, 389 00:22:17,000 --> 00:22:20,000 så jeg har tænkt mig at gå videre og udtrække de variable data 390 00:22:20,000 --> 00:22:23,000 og derefter kræve, at sti. 391 00:22:23,000 --> 00:22:29,000 Med andre ord, brug for det nu, hvis jeg åbner index.php 392 00:22:29,000 --> 00:22:32,000 bemærke, at jeg ikke kalder Render header længere. 393 00:22:32,000 --> 00:22:36,000 Jeg bare kalde gøre, men jeg passere i en noteret værdi på header 394 00:22:36,000 --> 00:22:39,000 at gøre det klart, hvilken skabelon jeg faktisk ønsker at indlæse. 395 00:22:39,000 --> 00:22:41,000 >> Så herovre mærke til, hvad jeg laver. 396 00:22:41,000 --> 00:22:44,000 Jeg passerer i dynamisk en nøgle titel, 397 00:22:44,000 --> 00:22:47,000 en værdi på CS50, og også dette, som vi så før, 398 00:22:47,000 --> 00:22:51,000 kunne gøres mere kortfattet i den nyeste version af PHP 399 00:22:51,000 --> 00:22:54,000 hvor jeg kan erstatte array-funktionen med kantede parenteser, 400 00:22:54,000 --> 00:22:57,000 som jeg foreslår, er endnu mere læsbar og sikkert 401 00:22:57,000 --> 00:22:59,000 lidt nemmere at skrive. 402 00:22:59,000 --> 00:23:02,000 Og selvfølgelig, med render footer opkald i bunden 403 00:23:02,000 --> 00:23:05,000 Vi gider ikke at passere i et andet argument på alle, ingen associative array, 404 00:23:05,000 --> 00:23:07,000 fordi der er intet dynamisk indersiden af ​​denne footer. 405 00:23:07,000 --> 00:23:10,000 Det er blot nogle nære tags til HTML. 406 00:23:10,000 --> 00:23:14,000 Godt, vi tager skridt i retning af virkelig rengøring ting op her, 407 00:23:14,000 --> 00:23:17,000 men lad mig åbne op 2 endelig eksempler. 408 00:23:17,000 --> 00:23:21,000 Denne ene, nummer 4, meddelelse om, at jeg har lavet en bevidst beslutning nu 409 00:23:21,000 --> 00:23:26,000 at forbedre det foregående eksempel ved endelig hjælp af nogle hierarki til mine filer. 410 00:23:26,000 --> 00:23:29,000 >> Bemærk, at i dette resumé, i dette læse mig, jeg har introduceret 411 00:23:29,000 --> 00:23:32,000 en omfatter bibliotek og en skabeloner bibliotek 412 00:23:32,000 --> 00:23:35,000 hvis indhold vil være de ting, jeg ønsker at inkludere 413 00:23:35,000 --> 00:23:38,000 og de skabeloner, jeg ønsker at gøre, hhv. 414 00:23:38,000 --> 00:23:42,000 Dette er virkelig mig bliver anal og forsøger at holde orden, 415 00:23:42,000 --> 00:23:45,000 holde relaterede filer sammen, men det endelige resultat 416 00:23:45,000 --> 00:23:48,000 er, at vi nu har en lidt pænere opsætning, men vi er nødt til at huske nu 417 00:23:48,000 --> 00:23:51,000 i f.eks index.php 418 00:23:51,000 --> 00:23:55,000 når vi kræver filen helpers.php 419 00:23:55,000 --> 00:24:01,000 vi er nødt til nu kræver det via includes / helpers.php 420 00:24:01,000 --> 00:24:06,000 snarere end blot at sige helpers.php fordi nu er det faktisk i en undermappe. 421 00:24:06,000 --> 00:24:09,000 Nu, som en sidebemærkning, vil du se i disse eksempler og nogle andre 422 00:24:09,000 --> 00:24:11,000 funktioner som kræver, kræver én gang. 423 00:24:11,000 --> 00:24:15,000 Der er faktisk en funktion selv kaldte omfatter, og de har alle lidt forskellige adfærd. 424 00:24:15,000 --> 00:24:18,000 Her vil jeg sige kræve en gang at gøre super klart, at jeg kun ønsker dem 425 00:24:18,000 --> 00:24:20,000 hjælpere indgår i mit projekt en gang. 426 00:24:20,000 --> 00:24:24,000 Men hvis jeg er forsigtig, og hvis jeg faktisk tænker gennem min logik korrekt 427 00:24:24,000 --> 00:24:27,000 bør det være tilstrækkeligt for bare at sige kræve op top 428 00:24:27,000 --> 00:24:31,000 så længe jeg selv ikke ved et uheld kræve, at samme fil andetsteds. 429 00:24:31,000 --> 00:24:34,000 Faktisk er det en lidt mere effektiv måde at gøre tingene derefter bruge 430 00:24:34,000 --> 00:24:38,000 kræve en gang, så jeg vil trimme det ned til bare kræve. 431 00:24:38,000 --> 00:24:40,000 >> Lad os tage et skridt videre. 432 00:24:40,000 --> 00:24:46,000 Dette sidste eksempel nu, version 5, har en endnu renere mappehierarki. 433 00:24:46,000 --> 00:24:50,000 Læg mærke til, hvad jeg har gjort her pr læse mig i denne endelige udgave 434 00:24:50,000 --> 00:24:54,000 er nu har jeg min HTML mappen, som jeg har haft al den tid, 435 00:24:54,000 --> 00:24:58,000 men inde i der nu kun er 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 biblioteket nu bor sammen af ​​HTML bibliotek, 438 00:25:05,000 --> 00:25:08,000 således på samme niveau som en søskende, så at sige. 439 00:25:08,000 --> 00:25:10,000 Så gør mappen Skabeloner. 440 00:25:10,000 --> 00:25:14,000 Det centrale takeaway her er, jeg har introduceret en lille smule mere struktur, 441 00:25:14,000 --> 00:25:17,000 men den vigtigste funktion nu, er, at kun de filer 442 00:25:17,000 --> 00:25:21,000 der skal være tilgængeligt på internettet, offentligt adresserbare 443 00:25:21,000 --> 00:25:25,000 af en URL på det offentlige internet er i min HTML bibliotek. 444 00:25:25,000 --> 00:25:28,000 >> Samtidig har andre filer, helpers.php, footer.php, 445 00:25:28,000 --> 00:25:32,000 header.php, som er velsagtens måske mere følsomme, 446 00:25:32,000 --> 00:25:35,000 måske hjælpere faktisk har nogle brugernavne og adgangskoder eller nogle intellektuelle 447 00:25:35,000 --> 00:25:39,000 ejendom af mine, fungerer jeg virkelig ikke ønsker, at verden at se, selvom et uheld. 448 00:25:39,000 --> 00:25:45,000 Det er god praksis at holde sig ude af det offentlige HTML directory 449 00:25:45,000 --> 00:25:48,000 alle filer, som ikke behøver selv at være offentlig. 450 00:25:48,000 --> 00:25:51,000 Alt du skal gøre i dette tilfælde, når man ser på, for eksempel, 451 00:25:51,000 --> 00:25:55,000 HTML mappes index.php fil, 452 00:25:55,000 --> 00:25:58,000 bemærker vi bare nødt til at være lidt mere forsigtig, når der kræves 453 00:25:58,000 --> 00:26:00,000 eller kræve en gang denne fil. 454 00:26:00,000 --> 00:26:03,000 Jeg skal først gøre .. at gå til det overordnede bibliotek, 455 00:26:03,000 --> 00:26:06,000 så skal du / includes / helpers.php 456 00:26:06,000 --> 00:26:12,000 at dykke ned i for at få den fil, jeg holder af. 457 00:26:12,000 --> 00:26:16,000 >> Eventuelle spørgsmål derefter på MVC 458 00:26:16,000 --> 00:26:20,000 eller denne relativt simple inkarnation deraf? 459 00:26:20,000 --> 00:26:23,000 Og lad mig gøre det klart, at vi fokuserede ganske lidt om 460 00:26:23,000 --> 00:26:27,000 V her, synspunkter og factoring ud af disse skabeloner. 461 00:26:27,000 --> 00:26:30,000 Vi har ikke rigtig skelnes M fra C endnu. 462 00:26:30,000 --> 00:26:33,000 I virkeligheden er der virkelig ingen M her, og selv vores C, 463 00:26:33,000 --> 00:26:36,000 controller, er ikke virkelig gør så meget, men du får meget mere 464 00:26:36,000 --> 00:26:39,000 bekendt med begge disse 2 breve fra MVC, 465 00:26:39,000 --> 00:26:43,000 eller rettere, vil du få meget mere fortrolig med C 466 00:26:43,000 --> 00:26:49,000 i MVC for problem set 7, så der er mere af det i horisonten. 467 00:26:49,000 --> 00:26:51,000 Spørgsmål? 468 00:26:51,000 --> 00:26:53,000 Der er faktisk ingen her. 469 00:26:53,000 --> 00:26:57,000 >> Okay, lad os nu gå videre til den anden og sidste emne for i dag. 470 00:26:57,000 --> 00:27:00,000 Det er indførelsen af ​​en database. 471 00:27:00,000 --> 00:27:03,000 Indtil dette punkt, vi har haft et par metoder til at lagre data. 472 00:27:03,000 --> 00:27:05,000 Vi har brugt variabler. 473 00:27:05,000 --> 00:27:08,000 Tilbage i vores C-fil, I / O diskussion, vi begyndte at bruge tekstfiler 474 00:27:08,000 --> 00:27:11,000 og bruge filer som fprintf, og så har vi endda begyndt 475 00:27:11,000 --> 00:27:14,000 taler om csv-filer en lille smule, kommaseparerede værdier, 476 00:27:14,000 --> 00:27:17,000 så alle disse tilladt os at have 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 ikke rigtig befordrende for at søge 479 00:27:23,000 --> 00:27:25,000 og indsætning og sletning. 480 00:27:25,000 --> 00:27:28,000 Det er egentlig bare en dum tekstfil adskilt af kommaer 481 00:27:28,000 --> 00:27:30,000 række for række efter række for række, så hvis du ønsker at 482 00:27:30,000 --> 00:27:32,000 søge at file det bedste du kan gøre virkelig er lineær søgning. 483 00:27:32,000 --> 00:27:34,000 Du er nødt til at starte i toppen af ​​filen, kan du læse det hele i, 484 00:27:34,000 --> 00:27:36,000 og kigge efter nogle værdi af interesse. 485 00:27:36,000 --> 00:27:39,000 Hvis du ønsker at indsætte i det du skal gøre det samme, 486 00:27:39,000 --> 00:27:41,000 iteration over det og indsætte i et bestemt sted, 487 00:27:41,000 --> 00:27:45,000 og i virkeligheden, er du nødt til at gøre alle de søge logik selv. 488 00:27:45,000 --> 00:27:49,000 >> Du kan ikke gøre klog mønstertilpasning på en CSV-fil, medmindre du selv skriver koden. 489 00:27:49,000 --> 00:27:51,000 Du kan ikke gøre filtrering af en CSV-fil 490 00:27:51,000 --> 00:27:53,000 medmindre du selv skriver koden. 491 00:27:53,000 --> 00:27:56,000 Ville det ikke være rart hvis en anden sætter i alt af indsatsen 492 00:27:56,000 --> 00:27:59,000 til rent faktisk at gøre søgningen let og indsættelse let 493 00:27:59,000 --> 00:28:01,000 og sletning og opdatering og så videre? 494 00:28:01,000 --> 00:28:04,000 Det er præcis, hvad en database er. 495 00:28:04,000 --> 00:28:07,000 SQL, Structured Query Language, er endnu et sprog 496 00:28:07,000 --> 00:28:10,000 at vi indfører her i dag, men dette er også temmelig tilgængelig, 497 00:28:10,000 --> 00:28:13,000 og hvad vi virkelig vil gøre, er bare plukke ud af det nogle af de mest fremtrædende 498 00:28:13,000 --> 00:28:16,000 egenskaber, så der for Pset 7, hvis og du gør noget, der bygger web, 499 00:28:16,000 --> 00:28:19,000 dit afsluttende projekt, du har evnen til at udtrykke dig 500 00:28:19,000 --> 00:28:22,000 i form af data-forespørgsler. 501 00:28:22,000 --> 00:28:25,000 Du har evnen til at gemme en lille eller en masse data 502 00:28:25,000 --> 00:28:28,000 på en meget mere struktureret måde, der vil ved udgangen af ​​dagen 503 00:28:28,000 --> 00:28:32,000 gøre dit liv lettere, fordi med SQL du kan udtrykke dig selv 504 00:28:32,000 --> 00:28:35,000 langt mere præcist, meget mere metodisk for at 505 00:28:35,000 --> 00:28:40,000 komme tilbage nogle delmængde af data fra en større samling af data. 506 00:28:40,000 --> 00:28:45,000 >> Du kan tænke på en database, i dette tilfælde, en SQL-database, kan virkelig godt lide 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 måske flere regneark, samt et regneark, naturligvis, 509 00:28:50,000 --> 00:28:53,000 har rækker og kolonner, og det er fordi 510 00:28:53,000 --> 00:28:56,000 SQL-databaser er relationel, relationelle i den forstand, 511 00:28:56,000 --> 00:28:59,000 at de gemmer data i form af disse tabeller, 512 00:28:59,000 --> 00:29:01,000 rækker og kolonner. 513 00:29:01,000 --> 00:29:03,000 De er højere ydende end noget som et regneark, 514 00:29:03,000 --> 00:29:05,000 og et regneark er beregnet til at blive brugt af et menneske. 515 00:29:05,000 --> 00:29:08,000 En database er beregnet til at blive brugt af en programmør 516 00:29:08,000 --> 00:29:12,000 skrive kode imod det, så inkarnationen af ​​en database 517 00:29:12,000 --> 00:29:14,000 vil være enten kommandolinjen. 518 00:29:14,000 --> 00:29:18,000 >> En af de mest populære relationelle databaser derude er, igen, MySQL, 519 00:29:18,000 --> 00:29:22,000 som er vidunderligt fri, meget højt ydende, og det er det 520 00:29:22,000 --> 00:29:24,000 Facebook bruges meget tidligt og til en vis grad stadig i dag 521 00:29:24,000 --> 00:29:27,000 til at gemme en masse af sine data, og vi vil se om et øjeblik 522 00:29:27,000 --> 00:29:30,000 at anvende relativt simple kommandoer 523 00:29:30,000 --> 00:29:33,000 vi kan vælge data, indsætte data, opdatere data, 524 00:29:33,000 --> 00:29:37,000 slette data og lignende, men heldigvis er der en mere brugervenlig grænseflade 525 00:29:37,000 --> 00:29:39,000 end bare at skrive på en sort og hvid prompt her. 526 00:29:39,000 --> 00:29:43,000 Vi vil bruge til Pset 7 og ud over et gratis værktøj kaldet phpMyAdmin. 527 00:29:43,000 --> 00:29:45,000 Navnet er tilfældig. 528 00:29:45,000 --> 00:29:47,000 Værktøjet sker for at være implementeret 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 Hvad er nyttigt om phpMyAdmin er, at det er en web-baseret værktøj. 531 00:29:53,000 --> 00:29:55,000 Vi har forudinstalleret det i apparatet for dig, 532 00:29:55,000 --> 00:29:58,000 og med det kan du oprette tabeller i en database, 533 00:29:58,000 --> 00:30:01,000 du kan indsætte data, slette data, og generelt se 534 00:30:01,000 --> 00:30:04,000 dine data i en temmelig brugervenligt miljø. 535 00:30:04,000 --> 00:30:07,000 Dine brugere vil ikke bruge phpMyAdmin. 536 00:30:07,000 --> 00:30:09,000 >> Dette er egentlig bare en administrativ eller udviklerens værktøj 537 00:30:09,000 --> 00:30:12,000 med til at se og stikke omkring dine data og finde ud af hvordan man skal strukturere det, 538 00:30:12,000 --> 00:30:15,000 ligesom du selv kan bruge Excel eller Numbers, 539 00:30:15,000 --> 00:30:19,000 men det vil være en fantastisk måde at visualisere, hvad der foregår under kølerhjelmen 540 00:30:19,000 --> 00:30:22,000 så du kan fokusere på det interessante problemløsning og ikke så meget 541 00:30:22,000 --> 00:30:25,000 de uforståelige kommandoer. 542 00:30:25,000 --> 00:30:28,000 Lad os tage et kig på et eksempel på data, der kan lagres tabularly 543 00:30:28,000 --> 00:30:30,000 i en relationel database. 544 00:30:30,000 --> 00:30:32,000 Her er et sådant eksempel. 545 00:30:32,000 --> 00:30:35,000 Nu desværre phpMyAdmin begået en fejl på siden af ​​at smide alt for mange ord 546 00:30:35,000 --> 00:30:38,000 og grafik på dig, men hvis du slibe lige på 547 00:30:38,000 --> 00:30:42,000 ID kolonne, brugernavnet kolonnen, og den hash kolonne, 548 00:30:42,000 --> 00:30:45,000 Dette er faktisk et regneark, men det sker for at være et uddrag 549 00:30:45,000 --> 00:30:49,000 af en tabel inde i apparatet 550 00:30:49,000 --> 00:30:53,000 ved hjælp af en fil, som vi giver dig i problemet sæt 7. 551 00:30:53,000 --> 00:30:57,000 >> I særdeleshed giver vi dig en fil, der repræsenterer 552 00:30:57,000 --> 00:31:01,000 en brugers bord, så et regneark med brugere med 3 kolonner, 553 00:31:01,000 --> 00:31:05,000 hvoraf den ene er et unikt ID begynder med 1, og de øges derefter. 554 00:31:05,000 --> 00:31:08,000 Den anden kolonne er et brugernavn, og de af jer, der gjorde Hacker, 555 00:31:08,000 --> 00:31:12,000 Hacker udgave for Pset 2, kan genkende nogle af disse brugernavne mindst. 556 00:31:12,000 --> 00:31:16,000 På højre side er passwords, men de er ikke bogstavelige passwords. 557 00:31:16,000 --> 00:31:19,000 De er hashes deraf, så det viser sig 558 00:31:19,000 --> 00:31:22,000 at gemme adgangskoder i en database er en rigtig dårlig idé. 559 00:31:22,000 --> 00:31:25,000 I har alle sikkert læst på et tidspunkt af nogle hjemmeside 560 00:31:25,000 --> 00:31:28,000 eller nogle virksomhedens database bliver kompromitteret, og så er du nødt til 561 00:31:28,000 --> 00:31:31,000 ændre din adgangskode, skal du få restitutioner på ting 562 00:31:31,000 --> 00:31:34,000 fordi nogle dårlige fyr faktisk brød ind på din konto som følge heraf. 563 00:31:34,000 --> 00:31:38,000 >> Gemme adgangskoder i klar tekst, ukrypteret i en database 564 00:31:38,000 --> 00:31:41,000 er helt tåbelige, og alligevel er det meget morsomt 565 00:31:41,000 --> 00:31:44,000 derefter at læse om nogle meget kendte virksomheder 566 00:31:44,000 --> 00:31:47,000 undertiden i pressen hvis databaser er kompromitteret, 567 00:31:47,000 --> 00:31:50,000 og den del er ikke sjovt, men det faktum, at databaser indeholder ukrypteret 568 00:31:50,000 --> 00:31:53,000 passwords er latterligt, fordi bogstaveligt talt med én linje kode 569 00:31:53,000 --> 00:31:57,000 du kan beskytte mod denne særlige trussel, og det er hvad vi har gjort her. 570 00:31:57,000 --> 00:32:00,000 Selv for vores falske lille CS50 Finans udgave 571 00:32:00,000 --> 00:32:03,000 vi kryptere adgangskoder bare for god foranstaltning, og det faktum, at 572 00:32:03,000 --> 00:32:07,000 alle disse passwords starter med $ 1 $ er bare en konvention. 573 00:32:07,000 --> 00:32:10,000 Det betyder bare, at de er krypteret eller virkelig hashet, 574 00:32:10,000 --> 00:32:13,000 der er som en en-vejs krypteringsfunktion 575 00:32:13,000 --> 00:32:17,000 hvorved du kan ikke vende dens virkninger med noget, der hedder MD5. 576 00:32:17,000 --> 00:32:21,000 >> At 50 er efter det betyder, at et salt værdi 577 00:32:21,000 --> 00:32:24,000 50 blev anvendt til hashing alle disse kodeord undtagen en. 578 00:32:24,000 --> 00:32:27,000 Mine, selvfølgelig, som du kan se der, HA, 579 00:32:27,000 --> 00:32:30,000 var med et andet salt, så de af jer, der fik lidt udløst op 580 00:32:30,000 --> 00:32:33,000 måske i Hacker 2, kunne der have været resultatet af vores have brugt 581 00:32:33,000 --> 00:32:36,000 en anden hash end de andre, fordi mit password er faktisk det samme 582 00:32:36,000 --> 00:32:38,000 som en anden bruger deroppe. 583 00:32:38,000 --> 00:32:41,000 Faktisk alle disse uger, hvis du har ventet at finde ud af 584 00:32:41,000 --> 00:32:44,000 hvad disse passwords var her var de adgangskoder, du blev udfordret 585 00:32:44,000 --> 00:32:48,000 at knække i Hacker udgave af problemet sæt 2, så ikke alt for tricky. 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 tilbage de så anderledes. 588 00:32:54,000 --> 00:32:58,000 >> Fokus på jharvard i purpur, fordi de blev saltet forskelligt. 589 00:32:58,000 --> 00:33:01,000 Algoritmen blev rystet på en sådan måde, at 590 00:33:01,000 --> 00:33:05,000 hashværdi, den krypterede værdi ser lidt anderledes 591 00:33:05,000 --> 00:33:08,000 fordi indgangene var lidt anderledes, men adgangskoden under hætten 592 00:33:08,000 --> 00:33:10,000 var stadig i sidste ende blodrød. 593 00:33:10,000 --> 00:33:12,000 Nu, hvem bekymrer sig om det? 594 00:33:12,000 --> 00:33:15,000 Nå, vi giver dig prøven brugere, prøvens brugernavne 595 00:33:15,000 --> 00:33:18,000 og hashes af deres passwords, så du faktisk har nogle 596 00:33:18,000 --> 00:33:23,000 kunder for CS50 Finans når du først får fra jorden med din kode. 597 00:33:23,000 --> 00:33:27,000 Du bliver nødt til at gennemføre flere tabeller inde i MySQL, inde i databasen. 598 00:33:27,000 --> 00:33:30,000 Du bliver nødt til at skabe flere regneark, effektivt, men vi besluttede at give dig denne ene 599 00:33:30,000 --> 00:33:33,000 at få dig i gang, og du vil se, at problemet indstillede specifikation 600 00:33:33,000 --> 00:33:37,000 fører dig gennem processen med at importere denne tabel 601 00:33:37,000 --> 00:33:39,000 og også forklare hvad nogle af de kendetegn, 602 00:33:39,000 --> 00:33:41,000 og du vil også se, at vi giver dig koden 603 00:33:41,000 --> 00:33:44,000 at håndtere hashing eller kryptering af disse adgangskoder 604 00:33:44,000 --> 00:33:49,000 så du behøver ikke at bekymre dig for meget om, hvad 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 Det er ganske enkelt det sprog, vi er ved at begynde at bruge i Pset 7 607 00:33:56,000 --> 00:34:01,000 og måske ud over at anmode om data fra nogle database. 608 00:34:01,000 --> 00:34:06,000 Dataene er, igen, lagres tabularly i disse relationelle tabeller, kolonner og rækker, 609 00:34:06,000 --> 00:34:09,000 men ved hjælp af nogle relativt simple syntaks som slette, 610 00:34:09,000 --> 00:34:12,000 indsætte, opdatere og vælge kan vi gøre netop det. 611 00:34:12,000 --> 00:34:15,000 Vi kan slette fra databasen, indsætte, 612 00:34:15,000 --> 00:34:19,000 opdatere data, såvel som udvalgte, som er, henter data fra databasen. 613 00:34:19,000 --> 00:34:21,000 Hvordan får vi gå om at gøre dette? 614 00:34:21,000 --> 00:34:23,000 Lad mig gå videre ind i apparatet. 615 00:34:23,000 --> 00:34:28,000 Lad mig trække op http://localhost, 616 00:34:28,000 --> 00:34:30,000 , som igen er den lokale selve apparatet. 617 00:34:30,000 --> 00:34:32,000 Det er sin standard kaldenavn. 618 00:34:32,000 --> 00:34:35,000 Og lad mig gå til / phpmyadmin. 619 00:34:35,000 --> 00:34:39,000 Dette sker for at være en speciel URL, at apparatet er forudkonfigureret til at forstå 620 00:34:39,000 --> 00:34:42,000 der straks beder mig om et brugernavn og en adgangskode. 621 00:34:42,000 --> 00:34:46,000 >> Som sædvanlig vil jeg skrive jharvard og purpur, 622 00:34:46,000 --> 00:34:48,000 men indse at det er administrator på computeren. 623 00:34:48,000 --> 00:34:53,000 Det er bare en tilfældighed, at der er også en jharvard registreret for CS50 Finance. 624 00:34:53,000 --> 00:34:56,000 Jharvard, crimson, enter giver mig brugergrænsefladen, som vi oplevede 625 00:34:56,000 --> 00:34:59,000 et glimt af et øjeblik siden, og det er lidt overvældende i starten, 626 00:34:59,000 --> 00:35:02,000 men bare rolig, du aldrig nødt til at klikke på de fleste af de links i dette værktøj. 627 00:35:02,000 --> 00:35:05,000 Du vil ende med at bruge en lille delmængde, der er super hjælpsom, 628 00:35:05,000 --> 00:35:08,000 hvoraf den første er databaser op her. 629 00:35:08,000 --> 00:35:11,000 Hvis jeg går op til databaser, bemærke, at jeg er bedt om at oprette en database. 630 00:35:11,000 --> 00:35:14,000 Det er som at skabe en ny Excel-fil, effektivt. 631 00:35:14,000 --> 00:35:18,000 Jeg har tænkt mig at gå videre og kalde denne forelæsning, og jeg vil bare at ignorere feltet der, sortering. 632 00:35:18,000 --> 00:35:20,000 Det har at gøre med repræsentationen af ​​data deri, 633 00:35:20,000 --> 00:35:24,000 og jeg har tænkt mig at klikke skabe, og nu mærke til, da jeg giver slip på at skabe 634 00:35:24,000 --> 00:35:27,000 på venstre side, hvor der står ingen databaser 635 00:35:27,000 --> 00:35:30,000 Jeg burde snart se forelæsningen databasen. 636 00:35:30,000 --> 00:35:32,000 >> Hvis jeg nu klikke på den venstre side, forelæsningen database, 637 00:35:32,000 --> 00:35:34,000 mærke mine faner ændre en lille smule. 638 00:35:34,000 --> 00:35:38,000 Jeg har struktur, SQL, eksport, import og nogle andre ting. 639 00:35:38,000 --> 00:35:40,000 Struktur er temmelig meget blank. 640 00:35:40,000 --> 00:35:43,000 Ingen tabeller fundet i databasen, som der står her, 641 00:35:43,000 --> 00:35:47,000 så lad os oprette en tabel, og lad os gå videre og oprette en tabel 642 00:35:47,000 --> 00:35:53,000 gerne studerende, og hvor mange kolonner ønsker vi? 643 00:35:53,000 --> 00:35:55,000 Lad os holde det simpelt, og lad os rekord for alle elever 644 00:35:55,000 --> 00:35:58,000 et id-nummer, et navn og en e-mailadresse. 645 00:35:58,000 --> 00:36:02,000 >> Vi vil holde det simpelt sådan, så 3 kolonner, gå. 646 00:36:02,000 --> 00:36:05,000 Den form, som du kan se her er nu en lille smule rodet og overvældende, 647 00:36:05,000 --> 00:36:08,000 men vi bare nødt til at gå igennem det rækkevis, så virkelig hurtigt lad os give 648 00:36:08,000 --> 00:36:14,000 den første kolonne i denne database et navn på ID for den entydige identifikator. 649 00:36:14,000 --> 00:36:17,000 Det vil være et heltal. Jeg kan faktisk ignorere længde og værdier. 650 00:36:17,000 --> 00:36:21,000 En int bliver 32 bit uanset hvad du skriver derinde, så lad os lade det stå tomt. 651 00:36:21,000 --> 00:36:24,000 Standard værdi, kunne jeg gøre det null, som defineret. 652 00:36:24,000 --> 00:36:27,000 Jeg har tænkt mig at forlade det alene. Lad os ikke bekymre dig om standardværdier. 653 00:36:27,000 --> 00:36:29,000 Lad os rulle herovre til højre attributter. 654 00:36:29,000 --> 00:36:31,000 Dette er interessant. 655 00:36:31,000 --> 00:36:33,000 Lad os gå videre og lidt vilkårligt sige, at ID'er skal være usigneret. 656 00:36:33,000 --> 00:36:35,000 Lad os ikke spilde nogen negative tal. 657 00:36:35,000 --> 00:36:37,000 >> Lad os gå fra 0 til 4000000000, give eller tage, 658 00:36:37,000 --> 00:36:40,000 og så lad os ikke røre nogen af ​​disse felter bare endnu derovre, 659 00:36:40,000 --> 00:36:43,000 men så lad mig skrive navn hernede, 660 00:36:43,000 --> 00:36:46,000 og så den anden var e-mail, så fangsten er e-mail 661 00:36:46,000 --> 00:36:50,000 og navn, naturligvis ikke heltal, så lad os ændre disse til et andet felt. 662 00:36:50,000 --> 00:36:53,000 Det viser sig, varchar, variabel længde char, 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 længde, og du faktisk nødt til at fortælle det på forhånd 665 00:36:59,000 --> 00:37:02,000 maksimale længde af strengen, så jeg har tænkt mig at noget vilkårligt 666 00:37:02,000 --> 00:37:05,000 efter sædvane typen 255 karakterer. 667 00:37:05,000 --> 00:37:08,000 Jeg kunne helt sige 32. Jeg kunne sige 1.000. 668 00:37:08,000 --> 00:37:11,000 Du slags behov for at beslutte for dig selv baseret på dine demografi hvad er 669 00:37:11,000 --> 00:37:14,000 den længste studerendes navn og gå med det pågældende nummer eller lidt større, 670 00:37:14,000 --> 00:37:17,000 men hvad er rart om en varchar er det kommer ikke til at spilde 671 00:37:17,000 --> 00:37:19,000 255 byte på hver elevs navn. 672 00:37:19,000 --> 00:37:23,000 Hvis det er DAVID det kommer ikke til at bruge en hel 255 bytes, 673 00:37:23,000 --> 00:37:26,000 men det er en øvre grænse, så jeg vil gå med 255 lige ved konvention, 674 00:37:26,000 --> 00:37:30,000 men vi kunne drøfte det at være nogle lavere værdi, og for e-mail-adresse 675 00:37:30,000 --> 00:37:34,000 bare for at være konsekvent 255, men igen, vi kunne have den samme debat. 676 00:37:34,000 --> 00:37:36,000 Men jeg har tænkt mig at gøre en ting herovre på den højre side. 677 00:37:36,000 --> 00:37:40,000 >> Hvad er stærkt om en database er, at det kan gøre en masse tunge løft 678 00:37:40,000 --> 00:37:42,000 eller komplekse arbejde for dig. 679 00:37:42,000 --> 00:37:46,000 I særdeleshed, jeg virkelig ligeglad med, hvad min studerendes ID-numre er. 680 00:37:46,000 --> 00:37:49,000 Det er bare ment som en entydig identifikator i en database 681 00:37:49,000 --> 00:37:52,000 så jeg har en 32-bit kortfattet gengivelse af, at studerende 682 00:37:52,000 --> 00:37:55,000 så jeg har en måde at entydigt identificerer dem 683 00:37:55,000 --> 00:37:58,000 for at der være 2 Davids, for eksempel i en klasse. 684 00:37:58,000 --> 00:38:01,000 Faktisk vil jeg tjekke denne AI boks, auto tilvækst, 685 00:38:01,000 --> 00:38:04,000 så databasen, MySQL, finder ud 686 00:38:04,000 --> 00:38:08,000 hvad enhver nyindsatte studerendes ID bliver. 687 00:38:08,000 --> 00:38:11,000 Jeg behøver ikke engang at bekymre sig om det i min kode, 688 00:38:11,000 --> 00:38:13,000 og jeg vil også vælge noget under indeks menuen. 689 00:38:13,000 --> 00:38:17,000 Indekset falde ned her har primær, unikke, 690 00:38:17,000 --> 00:38:19,000 indeks og fuld tekst. 691 00:38:19,000 --> 00:38:21,000 Du kan måske gætte, hvad et par af disse ting er, 692 00:38:21,000 --> 00:38:24,000 men det viser sig i relationsdatabaser 693 00:38:24,000 --> 00:38:28,000 du programmør eller databasen administrator komme til forebyggende 694 00:38:28,000 --> 00:38:32,000 giver hints til databasen om, hvilke felter 695 00:38:32,000 --> 00:38:34,000 i en tabel er lidt speciel. 696 00:38:34,000 --> 00:38:37,000 >> For eksempel, jeg i dette tilfælde har tænkt mig at sige, at ID 697 00:38:37,000 --> 00:38:42,000 vil være en primær indeks, ellers kendt som en primær nøgle. 698 00:38:42,000 --> 00:38:44,000 Hvad dette betyder per definition er, at id fremover 699 00:38:44,000 --> 00:38:48,000 vil entydigt identificere de studerende i denne tabel. 700 00:38:48,000 --> 00:38:53,000 Ingen studerende vil have samme ID, fordi jeg indføre denne begrænsning eller dette indeks. 701 00:38:53,000 --> 00:38:55,000 Desuden, hvad det vil gøre for mig er det kommer til at fortælle 702 00:38:55,000 --> 00:38:58,000 MySQL, at ID er speciel. 703 00:38:58,000 --> 00:39:03,000 Jeg holder især om ID, så gå videre og gøre din smarte datastruktur magi, 704 00:39:03,000 --> 00:39:05,000 opbygge en slags træ. 705 00:39:05,000 --> 00:39:08,000 Typisk det er noget, der hedder B-træet, som vi ikke ser på uger siden, 706 00:39:08,000 --> 00:39:11,000 men det er en anden sådan datastruktur samme ånd til de binære træer 707 00:39:11,000 --> 00:39:15,000 og forsøger at vi kiggede på, men det kommer til at sige 708 00:39:15,000 --> 00:39:18,000 til databasen dette felt er så vigtigt, at jeg nok 709 00:39:18,000 --> 00:39:22,000 ønsker at være i stand til at søge på det, gå videre og opbygge nogle fancy 710 00:39:22,000 --> 00:39:25,000 datastruktur i hukommelsen til at fremskynde søgninger, så ideelt set 711 00:39:25,000 --> 00:39:28,000 de er konstant tid eller i det mindste så tæt som muligt 712 00:39:28,000 --> 00:39:32,000 så det ikke udvikle sig til lineær søgning, hvilket ikke vil være 713 00:39:32,000 --> 00:39:34,000 den mest højtydende tilgang. 714 00:39:34,000 --> 00:39:37,000 I modsætning hertil kunne e-mailadresse have været en primær nøgle. 715 00:39:37,000 --> 00:39:41,000 >> I teorien er alles e-mailadresse unik, medmindre du deler nogle konto, 716 00:39:41,000 --> 00:39:45,000 men det er generelt ikke godt at bruge noget som en streng 717 00:39:45,000 --> 00:39:49,000 som en primær nøgle, fordi hvis dens formål i livet er til entydigt at identificere 718 00:39:49,000 --> 00:39:55,000 rækker i din tabel er der ingen grund til at bruge 255 bytes maksimalt 719 00:39:55,000 --> 00:39:58,000 til entydigt at identificere en person, hvis du kan slippe af sted med kun 4 bytes 720 00:39:58,000 --> 00:40:00,000 eller en 32-bit int. 721 00:40:00,000 --> 00:40:03,000 Generelt bør en primær nøgle være korte og koncise 722 00:40:03,000 --> 00:40:07,000 og ideelt set noget lignende et heltal eller en stor int, hvilket sker for at være 64 bit. 723 00:40:07,000 --> 00:40:11,000 Men en e-mailadresse skal være unikt, og en af ​​funktionerne i en database for 724 00:40:11,000 --> 00:40:14,000 er at håndhæve unikke for mig. 725 00:40:14,000 --> 00:40:18,000 Ved at vælge unik her ved siden af ​​e-mail, selvom e-mail selv 726 00:40:18,000 --> 00:40:21,000 er rullet ud af skærmbilledet, Jeg siger til databasen 727 00:40:21,000 --> 00:40:23,000 ikke har tillid til mig. 728 00:40:23,000 --> 00:40:26,000 Lad mig ikke indsætte i databasen 729 00:40:26,000 --> 00:40:29,000 den samme e-mailadresse to gange, selvom jeg er en idiot, og jeg er ikke 730 00:40:29,000 --> 00:40:32,000 meget godt med mine hvis'er og ellers IFs og faktiske PHP-kode 731 00:40:32,000 --> 00:40:37,000 og jeg ved et uheld lade brugeren registrere med en eksisterende e-mail-adresse 732 00:40:37,000 --> 00:40:40,000 databasen er endnu et niveau i forsvaret for korrekthed 733 00:40:40,000 --> 00:40:44,000 at sikre, at denne kopi e-mail-adresse ikke ender i tabellen. 734 00:40:44,000 --> 00:40:49,000 >> Nu, derimod, for navn, du sandsynligvis ikke ønsker at gøre dette unikke 735 00:40:49,000 --> 00:40:51,000 fordi så der kunne aldrig være 2 Davids eller 2 Mike Smiths, for eksempel, 736 00:40:51,000 --> 00:40:55,000 i din database, så vi, at man vil bare lade alene. 737 00:40:55,000 --> 00:40:58,000 Jeg har tænkt mig at gå videre og klik på Gem nederst til højre, 738 00:40:58,000 --> 00:41:02,000 og alt ser godt ud, men opsigelsesvarsel op her 739 00:41:02,000 --> 00:41:04,000 dette er en del, der for nu vil vi ikke bruge for meget tid på 740 00:41:04,000 --> 00:41:07,000 fordi syntaksen er en lidt kompliceret, og vi behøver ikke at oprette tabeller 741 00:41:07,000 --> 00:41:10,000 så ofte, men SQL selv er et sprog, 742 00:41:10,000 --> 00:41:13,000 syntaksen for der er lige her, at jeg har fremhævet. 743 00:41:13,000 --> 00:41:18,000 Hvilke phpMyAdmin egentlig gør, er det skaber en web-baseret GUI til dig 744 00:41:18,000 --> 00:41:23,000 som du kan spare tid og ikke nødt til manuelt at skrive ud 745 00:41:23,000 --> 00:41:26,000 en temmelig lang SQL-forespørgsel sådan. 746 00:41:26,000 --> 00:41:29,000 >> Med andre ord, manuelt, hvis du ønskede at skabe denne tabel, 747 00:41:29,000 --> 00:41:32,000 enten ved at sorte og hvide hurtig eller endog i phpMyAdmin 748 00:41:32,000 --> 00:41:35,000 ved hjælp af denne anden fane, hvor denne SQL fanebladet kan du indtaste alle SQL-forespørgsler 749 00:41:35,000 --> 00:41:38,000 du ønsker, helt ærligt, det ville have taget mig et minut 750 00:41:38,000 --> 00:41:41,000 til rent faktisk at huske hele syntaksen, og selv da jeg sandsynligvis ville have 751 00:41:41,000 --> 00:41:45,000 lavet nogle stavefejl, så dette værktøj er brugbar for ting som det, og det er også lærerigt. 752 00:41:45,000 --> 00:41:49,000 Du kan begynde at udlede, hvad er syntaksen 753 00:41:49,000 --> 00:41:52,000 lige ved flot farvekodning at phpMyAdmin tilføjer 754 00:41:52,000 --> 00:41:54,000 for vores visuelle komfort. 755 00:41:54,000 --> 00:41:56,000 Men lad os nu gøre det i stedet. 756 00:41:56,000 --> 00:42:00,000 Lad mig gå til fanen Indsæt i top, og lad mig gå videre og indsætte for eksempel 757 00:42:00,000 --> 00:42:04,000 et id på lad os sige-jeg faktisk ligeglad. 758 00:42:04,000 --> 00:42:07,000 Det kommer til at auto tilvækst. Jeg har tænkt mig at lade databasen beskæftige sig med dette. 759 00:42:07,000 --> 00:42:11,000 Men jeg skal være David, og min e-mail skal være malan@harvard.edu. 760 00:42:11,000 --> 00:42:16,000 >> Lad os gå videre her og sat i Mike Smith som en anden. 761 00:42:16,000 --> 00:42:18,000 Jeg vil give mig selv en sidste navn så godt, 762 00:42:18,000 --> 00:42:22,000 og vi vil have ham være smith@example.com, 763 00:42:22,000 --> 00:42:24,000 og så hvor skal jeg hen? 764 00:42:24,000 --> 00:42:27,000 Tja, det ligner go er knappen til at klikke, og voila. 765 00:42:27,000 --> 00:42:30,000 Bemærk på de øverste 2 indsatte rækker. 766 00:42:30,000 --> 00:42:32,000 Dette er den egentlige SQL-forespørgsel. 767 00:42:32,000 --> 00:42:36,000 Det er phpMyAdmin værktøj henrettet for mig, 768 00:42:36,000 --> 00:42:40,000 men det endelige resultat, varsel, hvis jeg nu gå til gennemse fanen, 769 00:42:40,000 --> 00:42:43,000 er at se 2 rækker i denne tabel, minder meget om æstetisk 770 00:42:43,000 --> 00:42:46,000 af bordet vi så tidligere for vores brugere fra Pset 7, 771 00:42:46,000 --> 00:42:51,000 hvoraf den ene er David Malan, hvoraf den ene nu er Mike Smith. 772 00:42:51,000 --> 00:42:54,000 Men bare for at være klar, behøver jeg ikke at bruge phpMyAdmin, 773 00:42:54,000 --> 00:42:56,000 og ja, er du nødt til snart at skrive kode til Pset 7 774 00:42:56,000 --> 00:43:01,000 der automatiserer processen med at tilføje rækker, slette rækker, opdatering rækker og lignende, 775 00:43:01,000 --> 00:43:04,000 så lad mig i stedet gå til SQL fane op her 776 00:43:04,000 --> 00:43:14,000 og skriv select * fra elever, hvor 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 formoder nu har du 779 00:43:21,000 --> 00:43:26,000 nogle HTML-formular, og brugeren skriver i deres e-mailadresse, blandt andre områder, 780 00:43:26,000 --> 00:43:29,000 og målet er nu i PHP på bagsiden ende kode 781 00:43:29,000 --> 00:43:31,000 til rent faktisk at kigge op, at brugerens andre detaljer. 782 00:43:31,000 --> 00:43:34,000 Hvad er dit fulde navn? Hvad er dit ID-nummer? 783 00:43:34,000 --> 00:43:37,000 Du kan skrive en SQL-forespørgsel som denne, skal du vælge * fra studerende 784 00:43:37,000 --> 00:43:40,000 hvor e-mail = "malan@harvard.edu." 785 00:43:40,000 --> 00:43:46,000 Og hvis jeg så klikker gå, bemærke, at jeg skulle, og ja, jeg gør, kommer tilbage bare én række. 786 00:43:46,000 --> 00:43:50,000 Mike er udeladt fra dette resultat sæt, som indsamling af rækker 787 00:43:50,000 --> 00:43:53,000 kaldes generelt, fordi han ikke har den samme e-mail adresse som mig. 788 00:43:53,000 --> 00:43:57,000 >> Nu, igen, her til Pset 7 du vil bruge phpMyAdmin som et administrativt værktøj 789 00:43:57,000 --> 00:44:00,000 og et pædagogisk redskab til at lære din vej 790 00:44:00,000 --> 00:44:03,000 rundt om i verden i SQL, ved men slutningen af ​​dagen 791 00:44:03,000 --> 00:44:08,000 du kommer til at skrive disse forespørgsler inde i selve PHP-kode, 792 00:44:08,000 --> 00:44:11,000 og så stay tuned i Zamyla s walkthrough i særdeleshed 793 00:44:11,000 --> 00:44:14,000 hvor du får en rundvisning af distributionen koden til dette problem sæt 794 00:44:14,000 --> 00:44:18,000 hvor vi har givet dig ikke kun æstetik for loginsiden 795 00:44:18,000 --> 00:44:21,000 og nice sexet logo, siger CS50 Finans, men vi har også givet dig 796 00:44:21,000 --> 00:44:24,000 en flok af funktioner, der vil gøre dit liv lidt lettere. 797 00:44:24,000 --> 00:44:27,000 Vi har også skrevet en del af Pset for dig, 798 00:44:27,000 --> 00:44:32,000 login del af det i særdeleshed, for at give dig en fornemmelse af et repræsentativt design 799 00:44:32,000 --> 00:44:36,000 der faktisk anvender en styreenhed, f.eks index.php, 800 00:44:36,000 --> 00:44:40,000 login.php og lignende, og så vil du se Pset har også en skabeloner bibliotek 801 00:44:40,000 --> 00:44:43,000 der har alle dine synspunkter, alle æstetik. 802 00:44:43,000 --> 00:44:46,000 Og så den samlede arbejdsgang i Pset 7 vil være at 803 00:44:46,000 --> 00:44:49,000 dine brugere besøger en controller via en URL i en browser. 804 00:44:49,000 --> 00:44:53,000 Denne controller indeholder PHP-kode, du skrev, og indersiden af ​​din PHP-kode 805 00:44:53,000 --> 00:44:57,000 kan være nogle linjer af SQL indlejret i mellem dobbelte anførselstegn 806 00:44:57,000 --> 00:45:00,000 og ledes til en funktion vi skrev kaldet forespørgsel 807 00:45:00,000 --> 00:45:03,000 som vil hjælpe dig tale til databasen uden at bruge noget lignende 808 00:45:03,000 --> 00:45:05,000 et administrativt værktøj som phpMyAdmin. 809 00:45:05,000 --> 00:45:08,000 >> Du vil være i stand til at skrive SQL-sætninger i PHP-kode 810 00:45:08,000 --> 00:45:11,000 og komme tilbage en PHP array af resultatet sæt, 811 00:45:11,000 --> 00:45:14,000 af de rækker, der faktisk matcher denne forespørgsel. 812 00:45:14,000 --> 00:45:18,000 Og tilsvarende vil du være i stand til at gøre indsætter eller sletter 813 00:45:18,000 --> 00:45:22,000 eller opdateringer eller lignende, syntaks, som er nogenlunde ens, 814 00:45:22,000 --> 00:45:25,000 og du vil se fra nogle online referencer, fra distributionen kode 815 00:45:25,000 --> 00:45:29,000 og fra Pset pakke sig præcis, hvordan man kan gå om at gøre det. 816 00:45:29,000 --> 00:45:33,000 Indse i sidste ende er vi virkelig bare skrabe overfladen af ​​SQL 817 00:45:33,000 --> 00:45:36,000 og af MySQL, men kraften i det virkelig er, at det frigør dig 818 00:45:36,000 --> 00:45:40,000 at fokusere på de problemer, du ønsker at løse, de use cases, du ønsker at gennemføre 819 00:45:40,000 --> 00:45:43,000 uden at skulle bekymre sig helt så meget, i det mindste tidligt, 820 00:45:43,000 --> 00:45:47,000 om, hvor og hvordan man kan gemme og søge din database, 821 00:45:47,000 --> 00:45:50,000 og det er helt bogstaveligt, hvor Facebook selv fik sin start 822 00:45:50,000 --> 00:45:53,000 bruger MySQL og derefter bruge flere MySQL-servere og derefter mere MySQL servere 823 00:45:53,000 --> 00:45:57,000 inden længe, ​​indtil de havde derefter virkelig begynde at tænke hårdt om, hvordan du 824 00:45:57,000 --> 00:46:00,000 gemme data, hvordan man kan gemme ting endnu mere effektivt, 825 00:46:00,000 --> 00:46:04,000 så selvom vi tager for givet, at indekser og unikke begrænsninger 826 00:46:04,000 --> 00:46:08,000 og så videre bare arbejde der er en meget interessant samtale 827 00:46:08,000 --> 00:46:12,000 at alt dette kan i sidste ende føre til, så indse, at vi er lige ridse overfladen 828 00:46:12,000 --> 00:46:17,000 af, hvad der i sidste ende kan for dig eller dine projekter bliver en hel del store data. 829 00:46:17,000 --> 00:46:22,000 >> Med det sagt, lad os slutte her, og vi vil se dig næste uge. 830 00:46:28,000 --> 00:46:30,000 [CS50.TV]