1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Vecka 8, Fortsättning] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Harvard University] 3 00:00:04,000 --> 00:00:08,000 [Detta är CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:13,000 >> Detta är CS50, så detta är slutet av vecka 8 här. 5 00:00:13,000 --> 00:00:16,000 Vi hade naturligtvis lite av en orkan tidigare i veckan, 6 00:00:16,000 --> 00:00:19,000 så just nu är det egentligen bara du och jag i denna sal, 7 00:00:19,000 --> 00:00:22,000 men idag fortsätter vi vårt samtal om PHP 8 00:00:22,000 --> 00:00:25,000 och om webbprogrammering mer allmänt, och vi introducerar också idén 9 00:00:25,000 --> 00:00:29,000 av databaser, som kallas särskilt en MySQL, vilket är ganska populär i dessa dagar, 10 00:00:29,000 --> 00:00:34,000 till stor del på grund av dess skalbarhet samt eftersom dess vara fri och öppen källkod. 11 00:00:34,000 --> 00:00:37,000 >> Men först, en titt på där vi slutade förra gången. 12 00:00:37,000 --> 00:00:40,000 Minns att vi tittar på de olika Frosh snabbmeddelanden exempel, 13 00:00:40,000 --> 00:00:44,000 och detta var den ohyggliga form som jag kom med några 15 + år sedan 14 00:00:44,000 --> 00:00:49,000 för att få studenter på campus register för recentior intramural sport 15 00:00:49,000 --> 00:00:52,000 utan att behöva vandra längre över gården till Wigglesworth 16 00:00:52,000 --> 00:00:56,000 att glida en fysisk papper under några proctor dörr. 17 00:00:56,000 --> 00:00:59,000 Istället flyttade vi allt på nätet, men att göra det vi behövde utnyttja 18 00:00:59,000 --> 00:01:03,000 av några tekniker, så en, vi behövde HTML, Hypertext Markup Language, 19 00:01:03,000 --> 00:01:07,000 vilket är igen denna märkningsspråk som du gör webbsidor strukturellt. 20 00:01:07,000 --> 00:01:10,000 >> Med hjälp av en bit av CSS dessa dagar, CSS, 21 00:01:10,000 --> 00:01:16,000 där vi använder stylizations av webbsidan med hjälp av en något annorlunda syntax, 22 00:01:16,000 --> 00:01:19,000 medan HTML handlade om dess struktur. 23 00:01:19,000 --> 00:01:21,000 Vi måste också införa ett språk webbprogrammering. 24 00:01:21,000 --> 00:01:25,000 I det här fallet använder vi PHP och PHP kommer att ge oss 25 00:01:25,000 --> 00:01:28,000 dynamiskt utgång innehåll samt göra programmatiska saker som 26 00:01:28,000 --> 00:01:33,000 skicka e-post, vilket var fallet på sedeln vi lämnade förra veckan. 27 00:01:33,000 --> 00:01:35,000 >> Minns att koden för detta var 2 delar. 28 00:01:35,000 --> 00:01:38,000 En hade vi froshims3.php, 29 00:01:38,000 --> 00:01:42,000 och detta var i stort sett uppmärkning med ett HTML-formulär inuti den, 30 00:01:42,000 --> 00:01:45,000 en liten bit av CSS upp här i stil attribut 31 00:01:45,000 --> 00:01:48,000 så att själva formuläret skulle vara centrerad på sidan, men utöver det 32 00:01:48,000 --> 00:01:51,000 Vi hade några representativa bildar ingångar, ett textfält en kryssruta, 33 00:01:51,000 --> 00:01:55,000 vissa radio-knappar, en utvald meny, och en submit-knapp. 34 00:01:55,000 --> 00:02:01,000 Och via detta formulär, lämnade vi till en fil som tydligen hette register3.php, 35 00:02:01,000 --> 00:02:04,000 som själv såg lite ut så här. 36 00:02:04,000 --> 00:02:08,000 Nu var mest av koden i register3.php, minns, allt om e-post. 37 00:02:08,000 --> 00:02:11,000 Det gjorde lite validering av formulär som lämnades för att se 38 00:02:11,000 --> 00:02:14,000 att fälten faktiskt förutsatt att förväntades. 39 00:02:14,000 --> 00:02:18,000 Då vi kallade några PHP funktioner med något nytt syntax, 40 00:02:18,000 --> 00:02:20,000 även om det är lånat från C. 41 00:02:20,000 --> 00:02:24,000 >> Denna pil operatör tillåter oss att använda något som kallas objektorienterad programmering. 42 00:02:24,000 --> 00:02:27,000 Vi kommer inte att gå in på det i detalj här, men vet nu 43 00:02:27,000 --> 00:02:31,000 det är ett sätt att ha funktioner som är associerade med objekt, 44 00:02:31,000 --> 00:02:34,000 som är en särskild typ av struktur, som vi såg i C. 45 00:02:34,000 --> 00:02:37,000 Men för nu, bara ta på tron ​​att detta är rätt syntax för att använda 46 00:02:37,000 --> 00:02:41,000 när du använder ett bibliotek som denna PHPMailer bibliotek. 47 00:02:41,000 --> 00:02:44,000 Och sedan i slutet av den här filen hade vi dynamiskt ett mail 48 00:02:44,000 --> 00:02:47,000 som fick skickade till min jharvard@cs50.net konto 49 00:02:47,000 --> 00:02:50,000 från mitt jharvard@cs50.net konto, 50 00:02:50,000 --> 00:02:54,000 och vi informerade användaren därför att de hade registrerats för denna sport. 51 00:02:54,000 --> 00:02:57,000 Det är ganska mycket vad Frosh snabbmeddelanden platsen gjorde alla dessa år sedan 52 00:02:57,000 --> 00:03:00,000 När jag genomfört det, beviljas på ett annat språk, 53 00:03:00,000 --> 00:03:02,000 men det visar kanske den makt som du har 54 00:03:02,000 --> 00:03:05,000 nu när du kan uttrycka dig inte bara programmatiskt 55 00:03:05,000 --> 00:03:08,000 på en låg nivå i ett språk som C, men på en mycket högre nivå 56 00:03:08,000 --> 00:03:11,000 med dessa mycket verkliga applikationer som e-post att faktiskt lösa 57 00:03:11,000 --> 00:03:13,000 några verkliga problem. 58 00:03:13,000 --> 00:03:16,000 >> Nu, naturligtvis, även om jag använder detta skript för att generera några 59 00:03:16,000 --> 00:03:20,000 e dynamiskt från jharvard@cs50.net, som verkligen ett konto 60 00:03:20,000 --> 00:03:23,000 att jag har tillgång till, var ganska noga med att skicka 61 00:03:23,000 --> 00:03:26,000 post bara från konton som är faktiskt din egen, 62 00:03:26,000 --> 00:03:30,000 så att det blir du i lite hett vatten i livet. 63 00:03:30,000 --> 00:03:35,000 Med det sagt, låt oss nu övergå till att lösa ett annat problem helt och hållet, 64 00:03:35,000 --> 00:03:37,000 som behåller stater. 65 00:03:37,000 --> 00:03:39,000 Nu, vad betyder egentligen? 66 00:03:39,000 --> 00:03:42,000 HTTP, denna hypertext transfer protocol, 67 00:03:42,000 --> 00:03:45,000 är faktiskt en statslös protokoll, och vad detta innebär är att 68 00:03:45,000 --> 00:03:48,000 när du drar upp något som Google.com och sedan slå in 69 00:03:48,000 --> 00:03:51,000 vanligtvis din webbläsare har någon form av spinning ikon som sedan 70 00:03:51,000 --> 00:03:54,000 resulterar i en viss webbsida som hämtas, 71 00:03:54,000 --> 00:03:57,000 och sedan den lilla ikonen slutar snurra, och som faktiskt tyder 72 00:03:57,000 --> 00:04:02,000 att HTTP har slutfört någon form av koppling till servern och det är det. 73 00:04:02,000 --> 00:04:05,000 HTTP är statslöst i den meningen att den inte upprätthåller 74 00:04:05,000 --> 00:04:08,000 en beständig anslutning till servern på samma sätt Skype 75 00:04:08,000 --> 00:04:11,000 eller Gchat gör eftersom med HTTP 76 00:04:11,000 --> 00:04:15,000 antagandet är att när du har hämtat en webbsida som är det. 77 00:04:15,000 --> 00:04:18,000 >> Nu i verkligheten i dessa dagar på sajter som Facebook och Google Maps 78 00:04:18,000 --> 00:04:21,000 och Twitter och liknande finns det mycket mer dynamik där 79 00:04:21,000 --> 00:04:25,000 även efter att ikonen slutar snurra du kan faktiskt få fler uppdateringar 80 00:04:25,000 --> 00:04:29,000 från servern, fler tweets, fler statusuppdateringar på Facebook och liknande. 81 00:04:29,000 --> 00:04:33,000 Men även som använder en teknik som vi pratar om i en vecka eller två 82 00:04:33,000 --> 00:04:36,000 kallas Ajax med ett språk som kallas JavaScript 83 00:04:36,000 --> 00:04:38,000 men i slutet av dagen, är HTTP fortfarande statslösa. 84 00:04:38,000 --> 00:04:42,000 Och ändå om du vill något ihåg saker om en användare 85 00:04:42,000 --> 00:04:44,000 även efter att de har kopplats från servern 86 00:04:44,000 --> 00:04:47,000 PHP gör ger dig ett sätt att göra detta 87 00:04:47,000 --> 00:04:52,000 eftersom, som vi såg förra gången, har PHP ett antal superglobals, 88 00:04:52,000 --> 00:04:55,000 och ett superglobal är, återigen, en särskild global variabel 89 00:04:55,000 --> 00:04:59,000 som är lämnas till dig av webbservern och PHP själv. 90 00:04:59,000 --> 00:05:02,000 >> Du behöver inte göra något för att sätta värden i det, 91 00:05:02,000 --> 00:05:05,000 och bland superglobals vi sett hittills är få och efter, 92 00:05:05,000 --> 00:05:08,000 som är där formulärfält läggs automatiskt för dig, 93 00:05:08,000 --> 00:05:11,000 liksom ett par andra som vi inte har sett ännu. 94 00:05:11,000 --> 00:05:17,000 Inuti $ _SERVER finns några speciella variabler relaterade till själva servern. 95 00:05:17,000 --> 00:05:22,000 Vad är IP-adressen, vilket protokoll, HTTP eller HTTPS använde du, 96 00:05:22,000 --> 00:05:25,000 Vad begär metod använde du och liknande, så det finns några intressanta, 97 00:05:25,000 --> 00:05:29,000 saftiga detaljer om servern, och i själva verket användaren där. 98 00:05:29,000 --> 00:05:33,000 Det är $ _cookie, som är där dessa saker som kallas cookies lagras. 99 00:05:33,000 --> 00:05:36,000 Vi kommer inte att lägga tid på kakor själva idag, 100 00:05:36,000 --> 00:05:40,000 men vet nu att en cookie är bara en liten bit av information 101 00:05:40,000 --> 00:05:43,000 att en webbserver kan plantera på en webbläsare 102 00:05:43,000 --> 00:05:46,000 och i sin tur dess RAM eller dess datorns hårddisk 103 00:05:46,000 --> 00:05:49,000 att lagra information om en användare, till exempel, deras användarnamn 104 00:05:49,000 --> 00:05:52,000 så att de inte behöver skriva in det varje gång de loggar in eller någon 105 00:05:52,000 --> 00:05:55,000 unikt nummer eller ID för den användare 106 00:05:55,000 --> 00:05:58,000 så att du inte behöver tjata dem med samma slags frågor om 107 00:05:58,000 --> 00:06:00,000 preferenser i framtiden, men de flesta av intresse 108 00:06:00,000 --> 00:06:02,000 just nu är $ _SESSION. 109 00:06:02,000 --> 00:06:07,000 >> Denna superglobal, som liksom de andra, lämnas till dig automatiskt med PHP 110 00:06:07,000 --> 00:06:10,000 När du skriver PHP-baserade webbplatser 111 00:06:10,000 --> 00:06:13,000 kan lagra vad du vill, strängar, heltal, 112 00:06:13,000 --> 00:06:16,000 flytande punkter, värderingar, arrayer, objekt, 113 00:06:16,000 --> 00:06:20,000 verkligen något som du vill, och det tillåter dig att lagra den på ett sådant sätt 114 00:06:20,000 --> 00:06:23,000 att även om användaren besöker dig nu och då 115 00:06:23,000 --> 00:06:26,000 kommer tillbaka en minut från nu eller 5 minuter från nu eftersom 116 00:06:26,000 --> 00:06:28,000 de tar sin tid innan du klickar någon annan länk 117 00:06:28,000 --> 00:06:32,000 PHP kommer att säkerställa att vad du sätter i den sessionen superglobal 118 00:06:32,000 --> 00:06:37,000 en minut eller 5 minuter sedan kommer att finnas kvar när användaren återvänder. 119 00:06:37,000 --> 00:06:40,000 Och under huven här superglobal genomförs genom 120 00:06:40,000 --> 00:06:44,000 dessa saker kallade cookies, men nu är det bara en abstraktion 121 00:06:44,000 --> 00:06:47,000 varigenom det är typ av den programmatiska motsvarigheten till en kundvagn. 122 00:06:47,000 --> 00:06:50,000 Oavsett vad du, programmeraren, lägg i den 123 00:06:50,000 --> 00:06:53,000 superglobal associativ array kommer att vara där ett visst antal minuter senare 124 00:06:53,000 --> 00:06:59,000 tills du raderar den eller tills användaren avslutar sin webbläsare helt och hållet. 125 00:06:59,000 --> 00:07:02,000 >> Låt oss ta en titt på ett exempel på hur denna sak faktiskt används. 126 00:07:02,000 --> 00:07:07,000 I counter.php bland dagens delar av kod 127 00:07:07,000 --> 00:07:09,000 Vi har följande rad. 128 00:07:09,000 --> 00:07:13,000 I början av den här filen har vi ett gäng blå kommentarer som ointressanta för 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, och som faktiskt gör exakt vad den säger. 131 00:07:18,000 --> 00:07:20,000 Det börjar sessioner. 132 00:07:20,000 --> 00:07:25,000 Det gör att du kan använda den stora superglobal $ _SESSION, och det är så enkelt är det. 133 00:07:25,000 --> 00:07:30,000 Om vi ​​nu fortsätter att titta på rad 16, låt oss försöka lista ut vad denna webbsida kommer att göra. 134 00:07:30,000 --> 00:07:35,000 Om (isset ($ _SESSION ["räknare"]) sedan gå vidare 135 00:07:35,000 --> 00:07:39,000 och förvara i räknarvariabeln, gemener disk, 136 00:07:39,000 --> 00:07:42,000 $ _SESSION ["Räknare"]. 137 00:07:42,000 --> 00:07:45,000 Detta verkar vara att förklara en lokal variabel som heter disk 138 00:07:45,000 --> 00:07:48,000 inuti vilket det sätta en kopia av det som finns inuti superglobal 139 00:07:48,000 --> 00:07:52,000 kallas session på platsen "disk". 140 00:07:52,000 --> 00:07:56,000 Annars tydligen, denna lilla lokal variabel räknare initieras till 0. 141 00:07:56,000 --> 00:08:01,000 >> Men sedan några rader senare 26 Observera att sessionen exemplar av räknare, 142 00:08:01,000 --> 00:08:06,000 sin nyckel, har en ny värde som tilldelats som är dess nuvarande värde plus 1. 143 00:08:06,000 --> 00:08:09,000 Kort sagt, verkar denna fil som ska uppdateras 144 00:08:09,000 --> 00:08:13,000 en räknare som lagras inuti sessionen superglobal 145 00:08:13,000 --> 00:08:16,000 genom inkrementering det med 1, men det behåller först en kopia av det tidigare värdet 146 00:08:16,000 --> 00:08:20,000 genom att lagra den i en lokal variabel som heter $ räknare, 147 00:08:20,000 --> 00:08:22,000 och sedan ner här låt oss se vad som återstår. 148 00:08:22,000 --> 00:08:24,000 Det visar sig att det är ganska mycket bara HTML. 149 00:08:24,000 --> 00:08:29,000 Längst ner på denna sida ser vi i linje 37 som jag har besökt den här webbplatsen 150 00:08:29,000 --> 00:08:33,000 räknare antal gånger, så det finns ett par intressanta funktioner här. 151 00:08:33,000 --> 00:08:36,000 Ett, är detta helt klart en variabel, men det räcker inte att bara sätta 152 00:08:36,000 --> 00:08:39,000 $ Räknare i kroppen av HTML grund naturligtvis 153 00:08:39,000 --> 00:08:43,000 om det bara finns bland HTML PHP kommer att anta att det bara HTML. 154 00:08:43,000 --> 00:08:48,000 Du vill bokstavligen $ mot att skrivas ut på skärmen. 155 00:08:48,000 --> 00:08:51,000 >> Men istället genom att släppa in PHP-läge 156 00:08:51,000 --> 00:08:55,000 med denna del av syntaxen kan vi dynamiskt infoga ett värde här 157 00:08:55,000 --> 00:08:58,000 mycket lik i anden vad vi gjorde förra gången med 158 00:08:58,000 --> 00:09:00,000 sätta värden till strängar. 159 00:09:00,000 --> 00:09:04,000 I själva verket är detta bara en förkortning notation för att säga något sådant bokstavligen, 160 00:09:04,000 --> 00:09:12,000 print ($ räknare) eller något liknande printf (% s, disk), 161 00:09:12,000 --> 00:09:14,000 eller ens, som ni kanske har sett på nätet eller i läroböcker, 162 00:09:14,000 --> 00:09:17,000 Det finns en funktion i PHP som kallas eko 163 00:09:17,000 --> 00:09:20,000 som gör samma sak, och alla de är bara längre lindade sätt 164 00:09:20,000 --> 00:09:25,000 att säga 00:09:28,000 I detta ett fall behöver du inte lägga 166 00:09:28,000 --> 00:09:30,000 Ordet PHP efter frågetecknet. 167 00:09:30,000 --> 00:09:34,000 Detta är en förkortning notation för, återigen, vad vi bara såg en stund sedan 168 00:09:34,000 --> 00:09:37,000 som ekar något värde. 169 00:09:37,000 --> 00:09:39,000 >> Låt oss se vad slutresultatet av denna faktiskt är. 170 00:09:39,000 --> 00:09:43,000 Låt mig gå över till vår counter.php fil, 171 00:09:43,000 --> 00:09:47,000 och vi ser att David bara gjort ett misstag genom att spela med koden där. 172 00:09:47,000 --> 00:09:50,000 Låt oss gå fix vad han klantade, 173 00:09:50,000 --> 00:09:54,000 och felet verkar vara där, borta, på linje 37. 174 00:09:54,000 --> 00:09:59,000 Enligt till toppen av sidan Jag har besökt denna webbplats 0 gånger. 175 00:09:59,000 --> 00:10:02,000 Nåväl, låt oss gå vidare nu och på toppen av webbläsaren klickar du på 176 00:10:02,000 --> 00:10:05,000 ladda ikon och jag klickar ladda, 177 00:10:05,000 --> 00:10:12,000 och nu har jag besökt webbplatsen 1 gång, 2, 3, 4, 5, 6, 7, 8. 178 00:10:12,000 --> 00:10:16,000 Och faktiskt, om vi tittar på källan till denna sida själva källkoden förändras, 179 00:10:16,000 --> 00:10:19,000 och märker den fullständiga avsaknaden av PHP, och det beror på 180 00:10:19,000 --> 00:10:23,000 PHP-kod utvärderas eller tolkas serversidan, 181 00:10:23,000 --> 00:10:27,000 och så det betyder att utsignalen från PHP-skript är vad som i slutändan är skickas till webbläsaren, 182 00:10:27,000 --> 00:10:31,000 vilket i detta fall är en del rå HTML och lite rå text. 183 00:10:31,000 --> 00:10:33,000 Vad händer här? 184 00:10:33,000 --> 00:10:37,000 >> Tja, med relativt få rader kod jag kan lagra 185 00:10:37,000 --> 00:10:40,000 ihärdigt under loppet av några sekunder, eller om vi väntat länge nog, 186 00:10:40,000 --> 00:10:44,000 minuter, även timmar, visst värde på ett sätt som gör att HTTP 187 00:10:44,000 --> 00:10:47,000 verkar stateful som om vi har kvar 188 00:10:47,000 --> 00:10:51,000 detta sammanhang till servern, och det är bara komma ihåg vad jag sa det förra gången, 189 00:10:51,000 --> 00:10:55,000 men i verkligheten finns det en hel del komplexitet pågår under huven 190 00:10:55,000 --> 00:10:59,000 där kakor som är gör det möjligt PHP att ge mig denna illusion 191 00:10:59,000 --> 00:11:02,000 detta kundvagn-liknande funktion. 192 00:11:02,000 --> 00:11:05,000 För nu, en trivial exempel där vi bara lagrar ett heltal, 193 00:11:05,000 --> 00:11:08,000 men den funktionen kommer tillbaka att vara av stort värde 194 00:11:08,000 --> 00:11:10,000 När vi börjar prata om mer komplexa projekt, 195 00:11:10,000 --> 00:11:12,000 bland dem problem som 7. 196 00:11:12,000 --> 00:11:16,000 Det här är din sista problem som i CS50. 197 00:11:16,000 --> 00:11:19,000 Jag vet, det är så sorgligt, men vad du hittar är att vi kommer att sluta 198 00:11:19,000 --> 00:11:22,000 denna del av terminen genom att faktiskt övergå 199 00:11:22,000 --> 00:11:25,000 av sammanhanget C säkerligen inom ramen för PHP 200 00:11:25,000 --> 00:11:27,000 men när du använder några av de mycket samma grundläggande 201 00:11:27,000 --> 00:11:29,000 Vi har pratat om ett tag. 202 00:11:29,000 --> 00:11:33,000 >> Målet med pset 7 är att genomföra CS50 Finans, 203 00:11:33,000 --> 00:11:37,000 vilken är din egen version av Yahoo Finance eller Google Finance 204 00:11:37,000 --> 00:11:40,000 eller ens Etrade.com där du har möjlighet att 205 00:11:40,000 --> 00:11:43,000 leta upp aktiekurserna för givna symboler, men mer än så 206 00:11:43,000 --> 00:11:48,000 du har förmågan att "köpa" och "sälja" aktier 207 00:11:48,000 --> 00:11:51,000 som handlas på olika börser för som denna hemsida 208 00:11:51,000 --> 00:11:55,000 Här antyder, som verkligen är i vilken utsträckning vi har börjat 209 00:11:55,000 --> 00:11:59,000 problemet uppsättning för dig, har du ett inloggningsformulär som ber om ett användarnamn och ett lösenord. 210 00:11:59,000 --> 00:12:03,000 Den har en submit-knapp, men därefter, som vi kommer så småningom se, 211 00:12:03,000 --> 00:12:06,000 det finns inget händer egentligen på under huven ännu eftersom det 212 00:12:06,000 --> 00:12:09,000 återstår för dig att genomföra möjligheten att registrera nya användare, 213 00:12:09,000 --> 00:12:12,000 möjligheten att köpa aktier, att sälja aktier, 214 00:12:12,000 --> 00:12:14,000 att faktiskt leta upp aktuella aktiekurser. 215 00:12:14,000 --> 00:12:17,000 >> Och faktiskt, kommer detta att vara så verkliga världen som möjligt eftersom vi gjorde 216 00:12:17,000 --> 00:12:20,000 omfatta en bit av kod som gör att du med en enda funktion 217 00:12:20,000 --> 00:12:25,000 att söka Yahoo Finance, som underbart gör tillgängliga gratis uppgifter 218 00:12:25,000 --> 00:12:31,000 för att leta upp aktiekurserna baserade på aktiesymbol eller kortnamn, 219 00:12:31,000 --> 00:12:34,000 och du får tillbaka det aktuella aktiekursen på dagen. 220 00:12:34,000 --> 00:12:37,000 De data du faktiskt ser i detta pset blir 221 00:12:37,000 --> 00:12:40,000 ungefär lika verkliga världen som det kan bli så att du faktiskt gränssnitt 222 00:12:40,000 --> 00:12:43,000 med verkliga lager, verkliga priser, 223 00:12:43,000 --> 00:12:47,000 och vi får se hur mycket pengar du kan göra kanske 224 00:12:47,000 --> 00:12:51,000 under de kommande dagarna att spela med din egen problembild. 225 00:12:51,000 --> 00:12:55,000 >> Men låt oss först ange scenen för hur man designar något som är säkert mer komplicerat 226 00:12:55,000 --> 00:12:59,000 än counter.php, det är mer komplicerat än någon av de Frosh snabbmeddelanden exemplen hittills, 227 00:12:59,000 --> 00:13:02,000 och låt oss försöka införa några paradigm här som gör att vi 228 00:13:02,000 --> 00:13:06,000 både för pset 7 och kanske för din slutliga projekt om du gör något webbaserat 229 00:13:06,000 --> 00:13:11,000 att hålla din kod välorganiserad, att hålla dig frisk, 230 00:13:11,000 --> 00:13:15,000 och ta ett steg mot samarbete, vare sig i CS50 slutliga projekt 231 00:13:15,000 --> 00:13:18,000 eller längre om du fortsätter att programmera något i framtiden. 232 00:13:18,000 --> 00:13:21,000 Det är denna allmänna konstruktion paradigm 233 00:13:21,000 --> 00:13:24,000 i datavetenskap och programvaruutveckling mer allmänt 234 00:13:24,000 --> 00:13:27,000 känd som MVC, Model View Controller, 235 00:13:27,000 --> 00:13:30,000 och detta är en dum förkortning som beskriver en mycket trevlig idé, 236 00:13:30,000 --> 00:13:34,000 vilket är separation av olika aspekter av ett program, 237 00:13:34,000 --> 00:13:39,000 specifikt hålla separata logiken eller affärslogik för en webbplats 238 00:13:39,000 --> 00:13:42,000 så att allt som innebär saker som 239 00:13:42,000 --> 00:13:45,000 ringer funktioner och sökfunktionen databaser och liknande 240 00:13:45,000 --> 00:13:48,000 händer inte bland HTML 241 00:13:48,000 --> 00:13:51,000 utan snarare i separata filer, och faktiskt, det finns här en fil 242 00:13:51,000 --> 00:13:54,000 oftast att du har ringt regulatorn 243 00:13:54,000 --> 00:13:56,000 det är verkligen hjärnan bakom operationen, och vi kommer se ett exempel 244 00:13:56,000 --> 00:13:58,000 detta på bara ett ögonblick. 245 00:13:58,000 --> 00:14:01,000 >> Det finns en modell som programmerar kod 246 00:14:01,000 --> 00:14:05,000 som gör att prata med dina databaser, talar det till Yahoo Finance och liknande, 247 00:14:05,000 --> 00:14:08,000 och sedan finns det V i MVC, åsikter, 248 00:14:08,000 --> 00:14:11,000 alla saker som är relaterade till estetik, de filer som faktiskt innehåller 249 00:14:11,000 --> 00:14:14,000 HTML, kanske din CSS och liknande. 250 00:14:14,000 --> 00:14:17,000 Tanken här, eftersom denna bild antyder, är att styrenheten 251 00:14:17,000 --> 00:14:21,000 är filen, som vi snart se och när du framför ser i pset 7, 252 00:14:21,000 --> 00:14:24,000 att världen talar till via sina webbläsare. 253 00:14:24,000 --> 00:14:27,000 Det är den fil som får besökas på det publika Internet, 254 00:14:27,000 --> 00:14:30,000 men regulatorn pratar med potentiellt en modell, 255 00:14:30,000 --> 00:14:34,000 vilket är en eller flera andra filer som innehåller kod relaterat till data, 256 00:14:34,000 --> 00:14:37,000 kod relaterad till databaser och liknande, och sedan talar till 257 00:14:37,000 --> 00:14:40,000 styrenheten en eller flera andra filer kända som vyer, 258 00:14:40,000 --> 00:14:43,000 vilka är estetik en webbsida, mallar för slag, 259 00:14:43,000 --> 00:14:47,000 som kan ta vissa uppgifter som indata, men i slutet av dagen 260 00:14:47,000 --> 00:14:50,000 den enda logik inuti en vy ska vara rendering av dessa uppgifter, 261 00:14:50,000 --> 00:14:53,000 iteration över en slinga och faktiskt spotta ut några 262 00:14:53,000 --> 00:14:56,000 HTML-baserade återgivning därav eller ens något som en PDF-fil. 263 00:14:56,000 --> 00:14:59,000 >> Vad är trevligt om MVC är att du kan ha olika åsikter 264 00:14:59,000 --> 00:15:02,000 baserat på den typ av enhet, baserat på vilken typ av filformat som du faktiskt 265 00:15:02,000 --> 00:15:04,000 vill visa för användaren. 266 00:15:04,000 --> 00:15:10,000 Låt oss ta en titt på några progressivt mer komplexa och väl utformade exempel 267 00:15:10,000 --> 00:15:13,000 genom att starta först med version 0 här. 268 00:15:13,000 --> 00:15:16,000 Låt mig gå vidare och öppna upp i vår MVC katalog idag 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 Notera att detta är en super enkel och mycket underwhelming webbplats 271 00:15:26,000 --> 00:15:29,000 Det är typ av version 0 av en hemsida för CS50, 272 00:15:29,000 --> 00:15:32,000 och märker hur vi har en länk till Föreläsningar, har vi en länk till Kursplan, 273 00:15:32,000 --> 00:15:35,000 och om jag följer länken till Föreläsningar meddelande att webbadressen 274 00:15:35,000 --> 00:15:39,000 uppe kommer att förändras till lectures.php. 275 00:15:39,000 --> 00:15:44,000 Om jag följer sedan länken till vecka 1 meddelande att webbadressen ändras till week1.php. 276 00:15:44,000 --> 00:15:46,000 Det verkar vara en ganska enkel hierarkisk struktur här. 277 00:15:46,000 --> 00:15:49,000 >> Låt oss ta en snabb titt under huven på hur detta läggs ut, 278 00:15:49,000 --> 00:15:53,000 och faktiskt, om jag tittar på index.php det är ganska enkelt. 279 00:15:53,000 --> 00:15:57,000 Faktum är att även om jag kallade detta en PHP-fil finns det ingen verklig programmeringskod. 280 00:15:57,000 --> 00:16:01,000 Det finns en kommentar som jag skrev här i PHP bara så att användaren inte sluta se den. 281 00:16:01,000 --> 00:16:05,000 Naturligtvis, som tidigare, något som är i mellan PHP-taggar 282 00:16:05,000 --> 00:16:08,000 blir tolkas även om det är en kommentar till och tolka en kommentar 283 00:16:08,000 --> 00:16:11,000 betyder bara att kasta bort i slutet av dagen och egentligen inte 284 00:16:11,000 --> 00:16:15,000 skicka den till webbläsaren, så allt här är bara estetik. 285 00:16:15,000 --> 00:16:20,000 Om jag öppnar liknande lectures.php detta är för bara en hård kodad fil. 286 00:16:20,000 --> 00:16:23,000 Det händer att kallas något. Php, 287 00:16:23,000 --> 00:16:27,000 men det är egentligen bara. HTML och week1.php, week2.php 288 00:16:27,000 --> 00:16:31,000 liknande är bara uppmärkning, så det finns en massa brister denna design. 289 00:16:31,000 --> 00:16:33,000 Ett, det är en enorm mängd kopiera / klistra in. 290 00:16:33,000 --> 00:16:37,000 Även om det enda som är byte bland dessa filer är oordnad lista, 291 00:16:37,000 --> 00:16:41,000 Li-taggar har jag ändå doc typ, HTML, huvud, 292 00:16:41,000 --> 00:16:44,000 titel, nära kroppen, nära HTML och mer 293 00:16:44,000 --> 00:16:47,000 i varje enskild fil, vilket innebär att om jag någonsin vill omstrukturera 294 00:16:47,000 --> 00:16:50,000 denna webbsida eller restylize det måste jag gå in och ändra 295 00:16:50,000 --> 00:16:54,000 alla dessa filer manuellt eller med några massiva söka och ersätta. 296 00:16:54,000 --> 00:17:01,000 >> Låt oss ta ett steg mot en smartare, mer tänkande konstruktion i version 1 här 297 00:17:01,000 --> 00:17:04,000 varigenom enligt den läser mig att vi har inkluderat så att du kan spela med 298 00:17:04,000 --> 00:17:07,000 Dessa mer avslappnad hemma märker att vi har här 299 00:17:07,000 --> 00:17:10,000 en sammanfattning av de filerna i version 1 av denna webbplats, 300 00:17:10,000 --> 00:17:13,000 och det verkar som jag har tagit på mig att räkna ut 301 00:17:13,000 --> 00:17:17,000 vissa gemensamma kod header.php och footer.php. 302 00:17:17,000 --> 00:17:20,000 Nåväl, låt oss ta en titt på vad som finns inuti den första av dessa. 303 00:17:20,000 --> 00:17:23,000 Header.php ser bekant, 304 00:17:23,000 --> 00:17:26,000 men märker var kommer det bli avskuren? 305 00:17:26,000 --> 00:17:30,000 Direkt efter linjen 19, så det är allt som var vanlig 306 00:17:30,000 --> 00:17:33,000 från filerna index.php, lectures.php, 307 00:17:33,000 --> 00:17:36,000 week1 och week2.php från föregående exempel. 308 00:17:36,000 --> 00:17:40,000 Vad jag gjorde var Kopiera och klipp allt som var gemensam för alla dessa filer, 309 00:17:40,000 --> 00:17:44,000 lägga den i en separat rubrik fil och likaså i footer.php 310 00:17:44,000 --> 00:17:48,000 har jag tillämpa samma princip som innebär att endast intressanta linjer 311 00:17:48,000 --> 00:17:52,000 i footer.php är dessa två, nära kroppen och stäng HTML. 312 00:17:52,000 --> 00:17:55,000 >> Men vad detta innebär nu är att i den nya versionen 313 00:17:55,000 --> 00:17:59,000 av index.php meddelande hur mycket enklare det kan bli. 314 00:17:59,000 --> 00:18:02,000 Visst, lite mer kryptisk ut, lite mindre intuitivt 315 00:18:02,000 --> 00:18:06,000 att följa upp och ned, men min Gud, allt detta redundans nu borta. 316 00:18:06,000 --> 00:18:10,000 Vi kräver hjälp av en PHP-funktion bokstavligen kallas kräva upp överst, 317 00:18:10,000 --> 00:18:15,000 som är mycket påminner, minns, av C: s # include mekanism. 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 botten, och det enda som skiljer 320 00:18:20,000 --> 00:18:25,000 eller speciellt med den här filen är innehållet som är tänkt att vara unik för det. 321 00:18:25,000 --> 00:18:29,000 Om jag då gå in, säg, lectures.php gäller samma princip. 322 00:18:29,000 --> 00:18:32,000 Återigen några kommentarer upp toppen, men då jag behöver sidhuvud, kräver sidfot, 323 00:18:32,000 --> 00:18:35,000 och mellan det är bara innehållet som faktiskt har förändrats. 324 00:18:35,000 --> 00:18:38,000 Och om vi tittat på vecka 1 och vecka 2 skulle vi se 325 00:18:38,000 --> 00:18:42,000 att samma princip hade tillämpats där. 326 00:18:42,000 --> 00:18:44,000 Tja, vi är inte riktigt gjort det. 327 00:18:44,000 --> 00:18:48,000 >> Låt oss ta en titt på version 2, som har en liknande struktur, 328 00:18:48,000 --> 00:18:50,000 men märker nu har jag infört något annat. 329 00:18:50,000 --> 00:18:53,000 I linje 10 har jag infört helpers.php, 330 00:18:53,000 --> 00:18:55,000 vilken innehåller tydligen hjälpfunktioner. 331 00:18:55,000 --> 00:18:58,000 En hjälparfunktion är vanligen en relativt kort funktion 332 00:18:58,000 --> 00:19:01,000 att du skriver för att hjälpa dig på olika platser, 333 00:19:01,000 --> 00:19:04,000 och låt oss se vad som finns inuti helpers.php. 334 00:19:04,000 --> 00:19:07,000 I det här fallet ser det ut som det har 2 funktioner. 335 00:19:07,000 --> 00:19:10,000 Minns från den andra dagen med vår kub exempel 336 00:19:10,000 --> 00:19:13,000 kan du definiera egna funktioner i PHP, och vad jag har gjort nu är jag har 337 00:19:13,000 --> 00:19:17,000 definierade funktioner kallas göra sidfot och gör sidhuvud, 338 00:19:17,000 --> 00:19:21,000 av vilka den första tar en parameter som kallas uppgifter, 339 00:19:21,000 --> 00:19:25,000 vars standardvärde är en tom array, som föreslås där, 340 00:19:25,000 --> 00:19:29,000 och vi kan faktiskt skriva det ännu mer koncist i den senaste versionen av PHP 341 00:19:29,000 --> 00:19:32,000 genom att säga öppna hakparentes, stängt hakparentes. 342 00:19:32,000 --> 00:19:35,000 Det innebär en tom array av storlek 0 men ändå en matris. 343 00:19:35,000 --> 00:19:38,000 >> Detta extrakt funktionen är lite speciell genom att 344 00:19:38,000 --> 00:19:41,000 vad den gör är det tar som argument en associativ array 345 00:19:41,000 --> 00:19:45,000 som har 0 eller flera nyckelord värdepar, och om du har en nyckel foo 346 00:19:45,000 --> 00:19:48,000 och ett värde på bar extraktet funktionen 347 00:19:48,000 --> 00:19:51,000 skapar en situation som nu, såsom i ledning 11, 348 00:19:51,000 --> 00:19:57,000 du har en lokal variabel som heter $ foo vars värde är bar. 349 00:19:57,000 --> 00:19:59,000 Och om du hade fler nycklar och värden i datauppställningen, 350 00:19:59,000 --> 00:20:03,000 liknande sätt skulle de extraheras i den lokala omfattningen 351 00:20:03,000 --> 00:20:06,000 eller namn utrymme så att footer.php och 352 00:20:06,000 --> 00:20:09,000 samma idé här nere så att header.php 353 00:20:09,000 --> 00:20:12,000 har tillgång till dessa variabler. 354 00:20:12,000 --> 00:20:15,000 I själva verket, låt mig öppna upp igen header.php 355 00:20:15,000 --> 00:20:18,000 och uppmärksamma nu hur det ser ut i denna version. 356 00:20:18,000 --> 00:20:22,000 >> Snarare än hårt kodning CS50 som rubrik för varje enskild sida 357 00:20:22,000 --> 00:20:24,000 märker den dynamik som är möjligt nu. 358 00:20:24,000 --> 00:20:29,000 I linje 5 Jag ekande en titel variabel, 359 00:20:29,000 --> 00:20:34,000 men först jag passerar denna titel variabel till en funktion som kallas htmlspecialchars. 360 00:20:34,000 --> 00:20:38,000 En dum namn för en funktion, länge som det är, men det gör verkligen vad den säger. 361 00:20:38,000 --> 00:20:41,000 Det säkerställer att alla specialtecken 362 00:20:41,000 --> 00:20:46,000 i strängen som har gått i korrekt flydde HTML. 363 00:20:46,000 --> 00:20:49,000 Detta är faktiskt ett sätt att undvika något som kallas en cross site scripting attack 364 00:20:49,000 --> 00:20:52,000 där någon kan uppsåtligt eller oavsiktligt 365 00:20:52,000 --> 00:20:55,000 injicera sin egen HTML på din hemsida 366 00:20:55,000 --> 00:20:59,000 genom att klistra in någon form, till exempel, 367 00:20:59,000 --> 00:21:02,000 något som du inte riktigt väntade, särskilt JavaScript-kod, 368 00:21:02,000 --> 00:21:05,000 som vi pratar om i en vecka eller två tid. 369 00:21:05,000 --> 00:21:08,000 >> Detta är nu header.php, det är en vy 370 00:21:08,000 --> 00:21:12,000 i den meningen att den låter dig se estetiskt innehållet i några datamängd. 371 00:21:12,000 --> 00:21:14,000 Men mer specifikt, är det en mall. 372 00:21:14,000 --> 00:21:19,000 Detta är en slags blåkopia nu av vad vi vill sidhuvudet på varje sida ska se ut, 373 00:21:19,000 --> 00:21:23,000 men det finns en viss dynamik i att vi vill att titeln ska dynamiskt in 374 00:21:23,000 --> 00:21:26,000 baserat på titeln variabeln 375 00:21:26,000 --> 00:21:30,000 som extraherades när vi ringde, igen, 376 00:21:30,000 --> 00:21:33,000 den render header-funktionen. 377 00:21:33,000 --> 00:21:36,000 Om vi ​​nu tittat på render sidfoten, det finns faktiskt inte mycket användning av det just nu 378 00:21:36,000 --> 00:21:40,000 eftersom footer.php finns det ingen dynamik alls. 379 00:21:40,000 --> 00:21:43,000 Det skulle kunna vara, men just nu är det en hård kodad lista på 2 taggar, 380 00:21:43,000 --> 00:21:46,000 men samma idé tillämpas, så som faktiskt antyder varför 381 00:21:46,000 --> 00:21:49,000 har vi slösar tid med en render sidhuvud och en render sidfot funktion? 382 00:21:49,000 --> 00:21:52,000 Låt mig gå i stället nu i version 3, 383 00:21:52,000 --> 00:21:56,000 och i version 3 i hjälpare jag beslutat att förenkla det ännu mer. 384 00:21:56,000 --> 00:21:58,000 >> Låt mig få en render funktion. 385 00:21:58,000 --> 00:22:02,000 Låt mig få det ta ett annat argument, som kallas den här gången mall, 386 00:22:02,000 --> 00:22:05,000 vilket är tänkt att vara namnet på en mall, 387 00:22:05,000 --> 00:22:11,000 och då kommer jag att sammanlänka förmätenhet. php till den variabelns värde, 388 00:22:11,000 --> 00:22:17,000 och sedan om det finns foo.php, bar.php eller header.php och footer.php, 389 00:22:17,000 --> 00:22:20,000 då jag ska gå vidare och extrahera variabeldata 390 00:22:20,000 --> 00:22:23,000 och sedan kräver den vägen. 391 00:22:23,000 --> 00:22:29,000 Med andra ord, för att använda detta nu, om jag öppnar index.php 392 00:22:29,000 --> 00:22:32,000 märker att jag inte ringer render huvudet längre. 393 00:22:32,000 --> 00:22:36,000 Jag kallar bara göra, men jag passera i ett noterat värde på huvudet 394 00:22:36,000 --> 00:22:39,000 att klargöra vilken mall jag vill verkligen att ladda. 395 00:22:39,000 --> 00:22:41,000 >> Sedan hit märker vad jag gör. 396 00:22:41,000 --> 00:22:44,000 Jag passerar i dynamiskt en nyckel titel, 397 00:22:44,000 --> 00:22:47,000 ett värde av CS50 och även detta, som vi såg tidigare, 398 00:22:47,000 --> 00:22:51,000 skulle kunna göras mer kortfattad i den senaste versionen av PHP 399 00:22:51,000 --> 00:22:54,000 där jag kan byta arrayen funktion med hakparenteser, 400 00:22:54,000 --> 00:22:57,000 som jag föreslår är ännu mer lättläst och säkert 401 00:22:57,000 --> 00:22:59,000 lite lättare att skriva. 402 00:22:59,000 --> 00:23:02,000 Och naturligtvis, med render sidfoten samtalet i botten, 403 00:23:02,000 --> 00:23:05,000 Vi behöver inte fundera passerar i ett andra argument alls, utan associativ array, 404 00:23:05,000 --> 00:23:07,000 för det finns inget dynamiskt inuti den sidfot. 405 00:23:07,000 --> 00:23:10,000 Det är bara några nära taggar för HTML. 406 00:23:10,000 --> 00:23:14,000 Bra, vi tar steg mot riktigt städa upp saker här, 407 00:23:14,000 --> 00:23:17,000 men låt mig öppna upp 2 slutlig exempel. 408 00:23:17,000 --> 00:23:21,000 Den här, nummer 4, märker att jag har gjort ett medvetet beslut nu 409 00:23:21,000 --> 00:23:26,000 att förbättra det föregående exemplet genom att slutligen använda en del hierarki med filerna. 410 00:23:26,000 --> 00:23:29,000 >> Observera att i denna sammanfattning, i detta läsa mig, jag har infört 411 00:23:29,000 --> 00:23:32,000 en inkluderar katalog och en mallar katalog 412 00:23:32,000 --> 00:23:35,000 vars innehåll kommer att vara de saker jag vill ha med 413 00:23:35,000 --> 00:23:38,000 och de mallar som jag vill göra, respektive. 414 00:23:38,000 --> 00:23:42,000 Detta är verkligen mig att anal och försöker hålla ordning, 415 00:23:42,000 --> 00:23:45,000 hålla relaterade filer tillsammans, men slutresultatet 416 00:23:45,000 --> 00:23:48,000 är att vi nu har en något snyggare installation, men vi måste komma ihåg nu 417 00:23:48,000 --> 00:23:51,000 i, till exempel, 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 nu kräver det via includes / helpers.php 420 00:24:01,000 --> 00:24:06,000 snarare än att bara säga helpers.php för nu är det faktiskt i en underkatalog. 421 00:24:06,000 --> 00:24:09,000 Nu, som en undan, ser du i dessa exempel och några andra 422 00:24:09,000 --> 00:24:11,000 funktioner som kräver kräver en gång. 423 00:24:11,000 --> 00:24:15,000 Det finns faktiskt en funktion i sig heter omfattar och de har alla lite olika beteenden. 424 00:24:15,000 --> 00:24:18,000 Här säger jag behöver en gång för att göra super klart att jag bara vill att de 425 00:24:18,000 --> 00:24:20,000 medhjälpare som ingår i mitt projekt en gång. 426 00:24:20,000 --> 00:24:24,000 Men om jag är försiktig och om jag verkligen tänka igenom min logik ordentligt 427 00:24:24,000 --> 00:24:27,000 Det bör räcka för bara säga kräva upp topp 428 00:24:27,000 --> 00:24:31,000 så länge jag själv inte oavsiktligt kräver att samma fil någon annanstans. 429 00:24:31,000 --> 00:24:34,000 I själva verket är detta en något mer effektivt sätt att göra saker och sedan använda 430 00:24:34,000 --> 00:24:38,000 kräver en gång, så jag trimma ner det till bara kräva. 431 00:24:38,000 --> 00:24:40,000 >> Låt oss ta ett steg längre. 432 00:24:40,000 --> 00:24:46,000 Det sista exemplet nu version 5, har en ännu renare mapphierarki. 433 00:24:46,000 --> 00:24:50,000 Lägg märke till vad jag har gjort här per läs mig i denna slutliga version 434 00:24:50,000 --> 00:24:54,000 Nu har jag min HTML katalog, som jag har haft hela tiden, 435 00:24:54,000 --> 00:24:58,000 men inuti finns det nu bara index.php, lectures.php, 436 00:24:58,000 --> 00:25:01,000 week1.php och week2.php. 437 00:25:01,000 --> 00:25:05,000 De inkluderar katalogen nu bor tillsammans med HTML katalogen, 438 00:25:05,000 --> 00:25:08,000 så på samma nivå som ett syskon, så att säga. 439 00:25:08,000 --> 00:25:10,000 Det gör mappen Mallar. 440 00:25:10,000 --> 00:25:14,000 Det viktigaste takeaway här är jag infört lite mer struktur, 441 00:25:14,000 --> 00:25:17,000 men det viktigaste inslaget är nu att bara de filer 442 00:25:17,000 --> 00:25:21,000 som behöver vara tillgängligt via nätet, allmänt adresserbara 443 00:25:21,000 --> 00:25:25,000 av en webbadress på det publika Internet är i min HTML-katalog. 444 00:25:25,000 --> 00:25:28,000 >> Samtidigt andra filer, helpers.php, footer.php, 445 00:25:28,000 --> 00:25:32,000 header.php, som är utan tvekan kanske mer känsliga, 446 00:25:32,000 --> 00:25:35,000 kanske hjälpare har faktiskt några användarnamn och lösenord eller någon intellektuell 447 00:25:35,000 --> 00:25:39,000 egendom till mig, fungerar jag verkligen inte vill att världen ska se, även om det av misstag. 448 00:25:39,000 --> 00:25:45,000 Det är god praxis att hålla sig borta från den offentliga HTML katalogen 449 00:25:45,000 --> 00:25:48,000 alla filer som inte behöver sig vara offentliga. 450 00:25:48,000 --> 00:25:51,000 Allt du behöver göra i detta fall när man tittar på, till exempel, 451 00:25:51,000 --> 00:25:55,000 HTML katalogens index.php fil, 452 00:25:55,000 --> 00:25:58,000 märker vi måste bara vara lite mer försiktig när det krävs 453 00:25:58,000 --> 00:26:00,000 eller kräva gång den här filen. 454 00:26:00,000 --> 00:26:03,000 Jag måste först göra .. för att gå till den överordnade katalogen, 455 00:26:03,000 --> 00:26:06,000 gör sedan / includes / helpers.php 456 00:26:06,000 --> 00:26:12,000 att dyka tillbaka in för att hämta filen som jag bryr mig om. 457 00:26:12,000 --> 00:26:16,000 >> Har du frågor så på MVC 458 00:26:16,000 --> 00:26:20,000 eller denna relativt enkla inkarnation detta? 459 00:26:20,000 --> 00:26:23,000 Och låt mig göra klart att vi fokuserade ganska lite på 460 00:26:23,000 --> 00:26:27,000 V här, åsikter och factoring av dessa mallar. 461 00:26:27,000 --> 00:26:30,000 Vi har inte riktigt skiljas M från C ännu. 462 00:26:30,000 --> 00:26:33,000 I själva verket finns det egentligen inget M här, och även vår C 463 00:26:33,000 --> 00:26:36,000 styrenhet, är inte riktigt gör så mycket, men du får mycket mer 464 00:26:36,000 --> 00:26:39,000 bekant med båda dessa 2 brev från MVC, 465 00:26:39,000 --> 00:26:43,000 eller snarare, du får mycket mer bekant med C 466 00:26:43,000 --> 00:26:49,000 i MVC för problembild 7, så det finns mer av den vid horisonten. 467 00:26:49,000 --> 00:26:51,000 Frågor? 468 00:26:51,000 --> 00:26:53,000 Det finns faktiskt ingen här. 469 00:26:53,000 --> 00:26:57,000 >> Okej, låt oss nu gå vidare till den andra och sista frågan för idag. 470 00:26:57,000 --> 00:27:00,000 Det är införandet av en databas. 471 00:27:00,000 --> 00:27:03,000 Fram till denna punkt har vi haft ett par olika sätt att lagra data. 472 00:27:03,000 --> 00:27:05,000 Vi har använt variabler. 473 00:27:05,000 --> 00:27:08,000 Tillbaka i vår C-fil, I / O-diskussion vi började använda textfiler 474 00:27:08,000 --> 00:27:11,000 och använda filer som fprintf, och sedan började vi även 475 00:27:11,000 --> 00:27:14,000 talar om CSV-filer lite, kommaseparerade värden, 476 00:27:14,000 --> 00:27:17,000 så alla dessa tillät oss att ha data som lagras 477 00:27:17,000 --> 00:27:19,000 antingen icke-ihållande eller ständigt. 478 00:27:19,000 --> 00:27:23,000 Men även CSVs är inte riktigt främjar sökning 479 00:27:23,000 --> 00:27:25,000 och infoga och ta bort. 480 00:27:25,000 --> 00:27:28,000 Det är egentligen bara en dum textfil åtskilda med kommatecken 481 00:27:28,000 --> 00:27:30,000 rad för rad för rad för rad, så om du vill 482 00:27:30,000 --> 00:27:32,000 söka den filen det bästa du kan göra är verkligen linjär sökning. 483 00:27:32,000 --> 00:27:34,000 Du måste börja längst upp i filen, läs hela i, 484 00:27:34,000 --> 00:27:36,000 och leta efter ett visst värde av intresse. 485 00:27:36,000 --> 00:27:39,000 Om du vill infoga i det du måste göra samma sak, 486 00:27:39,000 --> 00:27:41,000 iteration över det och sätter på en viss plats, 487 00:27:41,000 --> 00:27:45,000 och i själva verket måste du göra allt för att söka logik själv. 488 00:27:45,000 --> 00:27:49,000 >> Du kan inte göra smart mönstermatchning på en CSV-fil om du själv skriver koden. 489 00:27:49,000 --> 00:27:51,000 Du kan inte göra filtrering av en CSV-fil 490 00:27:51,000 --> 00:27:53,000 om du själv skriver koden. 491 00:27:53,000 --> 00:27:56,000 Skulle det inte vara trevligt om någon annan lägger i alla de ansträngningar 492 00:27:56,000 --> 00:27:59,000 att faktiskt göra sökningen enkel och insättning lätt 493 00:27:59,000 --> 00:28:01,000 och radering och uppdatering och så vidare? 494 00:28:01,000 --> 00:28:04,000 Det är precis vad en databas är. 495 00:28:04,000 --> 00:28:07,000 SQL, Structured Query Language, är ännu ett annat språk 496 00:28:07,000 --> 00:28:10,000 att vi inför här i dag, men det är också ganska tillgänglig, 497 00:28:10,000 --> 00:28:13,000 och vad vi egentligen ska göra är att plocka bara av det några av de mest framträdande 498 00:28:13,000 --> 00:28:16,000 egenskaper så att för pset 7, och om du gör något webbaserat, 499 00:28:16,000 --> 00:28:19,000 din slutliga projekt, har du möjlighet att uttrycka dig 500 00:28:19,000 --> 00:28:22,000 i termer av data frågor. 501 00:28:22,000 --> 00:28:25,000 Du har förmågan att lagra lite eller mycket data 502 00:28:25,000 --> 00:28:28,000 på ett mycket mer strukturerat sätt som kommer i slutet av dagen 503 00:28:28,000 --> 00:28:32,000 göra ditt liv enklare eftersom med SQL kan du uttrycka dig 504 00:28:32,000 --> 00:28:35,000 mycket mer exakt, mycket mer metodiskt för att 505 00:28:35,000 --> 00:28:40,000 få tillbaka lite delmängd av data från en större samling av data. 506 00:28:40,000 --> 00:28:45,000 >> Du kan tänka på en databas, i detta fall, en SQL-databas, verkligen som Excel 507 00:28:45,000 --> 00:28:48,000 eller nummer, om det är ett kalkylblad, 508 00:28:48,000 --> 00:28:50,000 eller kanske flera kalkylprogram, och ett kalkylblad, naturligtvis, 509 00:28:50,000 --> 00:28:53,000 har rader och kolumner, och det beror på 510 00:28:53,000 --> 00:28:56,000 SQL-databaser är relationella, relationella i den meningen 511 00:28:56,000 --> 00:28:59,000 att de lagrar data i form av dessa tabeller, 512 00:28:59,000 --> 00:29:01,000 rader och kolumner. 513 00:29:01,000 --> 00:29:03,000 De är högre prestanda än något som ett kalkylblad, 514 00:29:03,000 --> 00:29:05,000 och en tabell är avsedd att användas av en människa. 515 00:29:05,000 --> 00:29:08,000 En databas är tänkt att användas av en programmerare 516 00:29:08,000 --> 00:29:12,000 skriva kod mot den, så inkarnationen av en databas 517 00:29:12,000 --> 00:29:14,000 kommer att vara antingen kommandoraden. 518 00:29:14,000 --> 00:29:18,000 >> En av de mest populära relationsdatabaser ute är, återigen, MySQL, 519 00:29:18,000 --> 00:29:22,000 vilket är underbart fri, mycket höga prestanda, och detta är vad 520 00:29:22,000 --> 00:29:24,000 Facebook används mycket tidigt och i viss mån än idag 521 00:29:24,000 --> 00:29:27,000 att lagra mycket av sina uppgifter, och vi ser i ett ögonblick 522 00:29:27,000 --> 00:29:30,000 att använda relativt enkla kommandon 523 00:29:30,000 --> 00:29:33,000 Vi kan välja data, infoga data, uppdatera data, 524 00:29:33,000 --> 00:29:37,000 ta bort data och liknande, men tack och lov finns det en mer användarvänligt gränssnitt 525 00:29:37,000 --> 00:29:39,000 än att bara skriva på en svartvit prompt här. 526 00:29:39,000 --> 00:29:43,000 Vi kommer att använda för pset 7 och därefter ett gratis verktyg som heter phpMyAdmin. 527 00:29:43,000 --> 00:29:45,000 Namnet är en tillfällighet. 528 00:29:45,000 --> 00:29:47,000 Verktyget råkar genomföras i PHP, 529 00:29:47,000 --> 00:29:49,000 men det är i grunden irrelevant. 530 00:29:49,000 --> 00:29:53,000 Vad är bra om phpMyAdmin är att det är en webbaserad verktyg. 531 00:29:53,000 --> 00:29:55,000 Vi har redan installerat det i apparaten för dig, 532 00:29:55,000 --> 00:29:58,000 och med det kan du skapa tabeller i en databas, 533 00:29:58,000 --> 00:30:01,000 Du kan infoga data, radera data, och i allmänhet se 534 00:30:01,000 --> 00:30:04,000 dina data i en ganska användarvänlig miljö. 535 00:30:04,000 --> 00:30:07,000 Användarna kommer inte att använda phpMyAdmin. 536 00:30:07,000 --> 00:30:09,000 >> Detta är egentligen bara en administrativ eller utvecklarens verktyg 537 00:30:09,000 --> 00:30:12,000 som att se och rota runt dina data och räkna ut hur man kan strukturera den, 538 00:30:12,000 --> 00:30:15,000 mycket som du själv kan använda Excel eller Numbers, 539 00:30:15,000 --> 00:30:19,000 men det kommer att vara ett bra sätt att visualisera vad som händer under huven 540 00:30:19,000 --> 00:30:22,000 så att du kan fokusera på det intressanta problemlösning och inte så mycket 541 00:30:22,000 --> 00:30:25,000 på svårbegripliga kommandon. 542 00:30:25,000 --> 00:30:28,000 Låt oss ta en titt på ett exempel på data som kan lagras tabularly 543 00:30:28,000 --> 00:30:30,000 i en relationsdatabas. 544 00:30:30,000 --> 00:30:32,000 Här är ett sådant exempel. 545 00:30:32,000 --> 00:30:35,000 Nu tyvärr felaktigt phpMyAdmin på sidan av att kasta alldeles för många ord 546 00:30:35,000 --> 00:30:38,000 och grafik på dig, men om du finslipa in bara på 547 00:30:38,000 --> 00:30:42,000 ID-kolumn, användarnamn kolumnen, och hash kolumnen, 548 00:30:42,000 --> 00:30:45,000 Detta är i praktiken ett kalkylblad, men det råkar vara en sträng 549 00:30:45,000 --> 00:30:49,000 av en tabell inuti apparaten 550 00:30:49,000 --> 00:30:53,000 med hjälp av en fil som vi ger dig i problembild 7. 551 00:30:53,000 --> 00:30:57,000 >> I synnerhet ger vi dig en fil som representerar 552 00:30:57,000 --> 00:31:01,000 en användares bord, så ett kalkylblad som innehåller användare med 3 kolumner, 553 00:31:01,000 --> 00:31:05,000 varav en är ett unikt ID börjar vid 1 och som ökas därefter. 554 00:31:05,000 --> 00:31:08,000 Den andra kolumnen är ett användarnamn och de av er som gjorde Hacker, 555 00:31:08,000 --> 00:31:12,000 det Hacker utgåva för pset 2, kanske känner igen några av dessa användarnamn minst. 556 00:31:12,000 --> 00:31:16,000 På höger sida är lösenord, men de är inte bokstavliga lösenord. 557 00:31:16,000 --> 00:31:19,000 De är hashes därav, så visar det sig 558 00:31:19,000 --> 00:31:22,000 att lagra lösenord i en databas är en riktigt dålig idé. 559 00:31:22,000 --> 00:31:25,000 Du har alla förmodligen läst någon gång av någon webbplats 560 00:31:25,000 --> 00:31:28,000 eller någon företagets databas äventyras och då måste man 561 00:31:28,000 --> 00:31:31,000 ändra ditt lösenord, måste du få bidrag för saker 562 00:31:31,000 --> 00:31:34,000 eftersom vissa onde bröt faktiskt in på ditt konto som följd. 563 00:31:34,000 --> 00:31:38,000 >> Lagra lösenord i klartext, okrypterat i en databas 564 00:31:38,000 --> 00:31:41,000 är helt åsnor, och ändå är det mycket underhållande 565 00:31:41,000 --> 00:31:44,000 sedan läsa om några mycket välkända företag 566 00:31:44,000 --> 00:31:47,000 ibland i pressen vars databaser äventyras, 567 00:31:47,000 --> 00:31:50,000 och att en del är inte roligt, men det faktum att databaserna innehåller okrypterad 568 00:31:50,000 --> 00:31:53,000 lösenord är löjligt eftersom bokstavligen med en rad kod 569 00:31:53,000 --> 00:31:57,000 Du kan skydda mot just hot, och det är vad vi har gjort här. 570 00:31:57,000 --> 00:32:00,000 Även för vår falska lilla CS50 Finans version 571 00:32:00,000 --> 00:32:03,000 Vi krypterar lösenord bara för bra åtgärd, och det faktum att 572 00:32:03,000 --> 00:32:07,000 alla dessa lösenord börjar med $ 1 $ är bara en konvention. 573 00:32:07,000 --> 00:32:10,000 Det betyder bara att de är krypterade eller verkligen hashas, 574 00:32:10,000 --> 00:32:13,000 som är som en enkelriktad kryptering funktion 575 00:32:13,000 --> 00:32:17,000 där du inte kan backa dess effekter med något som kallas MD5. 576 00:32:17,000 --> 00:32:21,000 >> Det faktum att 50 är efter det innebär att ett salt värde 577 00:32:21,000 --> 00:32:24,000 av 50 användes för hashing alla dessa lösenord utom ett. 578 00:32:24,000 --> 00:32:27,000 Mine, naturligtvis, som ni ser det, HA, 579 00:32:27,000 --> 00:32:30,000 var med ett annat salt, så de av er som blev något löst upp 580 00:32:30,000 --> 00:32:33,000 kanske i Hacker 2, kan det ha varit ett resultat av att vi har använt 581 00:32:33,000 --> 00:32:36,000 en annan hash än de andra eftersom mitt lösenord är faktiskt samma 582 00:32:36,000 --> 00:32:38,000 som någon annan användare uppe. 583 00:32:38,000 --> 00:32:41,000 Faktum är att om du har väntat alla dessa veckor för att ta reda 584 00:32:41,000 --> 00:32:44,000 vad dessa lösenord var här var de lösenord som du utmanas 585 00:32:44,000 --> 00:32:48,000 spricka i Hacker upplagan av problembild 2, så inget alltför svårt. 586 00:32:48,000 --> 00:32:50,000 I själva verket var Malan är samma som jharvard, 587 00:32:50,000 --> 00:32:54,000 men om vi går tillbaka de såg annorlunda ut. 588 00:32:54,000 --> 00:32:58,000 >> Fokus på jharvard i purpur eftersom de saltade annorlunda. 589 00:32:58,000 --> 00:33:01,000 Algoritmen var störd på ett sätt som 590 00:33:01,000 --> 00:33:05,000 hashvärde ser den krypterade värdet lite annorlunda 591 00:33:05,000 --> 00:33:08,000 eftersom ingångar var något annorlunda, men lösenordet under huven 592 00:33:08,000 --> 00:33:10,000 var fortfarande ytterst crimson. 593 00:33:10,000 --> 00:33:12,000 Nu, vem bryr sig om det här? 594 00:33:12,000 --> 00:33:15,000 Tja, vi ger dig provet användarna, prov användarnamn 595 00:33:15,000 --> 00:33:18,000 och hashar av sina lösenord så att du faktiskt har en del 596 00:33:18,000 --> 00:33:23,000 kunder för CS50 Finans när du först igång med din kod. 597 00:33:23,000 --> 00:33:27,000 Du måste genomföra fler bord inne i MySQL, inuti databasen. 598 00:33:27,000 --> 00:33:30,000 Du måste skapa fler kalkylblad, effektivt, men vi beslutade att ge dig det här en 599 00:33:30,000 --> 00:33:33,000 för att komma igång, och du kommer att se att problemet inställda specifikationen 600 00:33:33,000 --> 00:33:37,000 leder dig genom processen att importera denna tabell 601 00:33:37,000 --> 00:33:39,000 och även förklara vad några av de egenskaper är, 602 00:33:39,000 --> 00:33:41,000 och du kommer också se till att vi ger dig koden 603 00:33:41,000 --> 00:33:44,000 att hantera hashning eller kryptering av dessa lösenord 604 00:33:44,000 --> 00:33:49,000 så du behöver inte oroa sig alltför mycket om vad MD5 eller liknande är faktiskt handlar om. 605 00:33:49,000 --> 00:33:53,000 >> Så, SQL, Structured Query Language. 606 00:33:53,000 --> 00:33:56,000 Detta är helt enkelt det språk vi är på väg att börja använda i pset 7 607 00:33:56,000 --> 00:34:01,000 och kanske bortom att begära uppgifter från vissa databasen. 608 00:34:01,000 --> 00:34:06,000 Uppgifterna återigen lagras tabularly i dessa relationella tabeller, kolumner och rader, 609 00:34:06,000 --> 00:34:09,000 men med hjälp av några relativt enkla syntax som delete, 610 00:34:09,000 --> 00:34:12,000 infoga, uppdatera och välj kan vi göra just det. 611 00:34:12,000 --> 00:34:15,000 Vi kan ta bort från databasen, infoga, 612 00:34:15,000 --> 00:34:19,000 uppdatera data samt utvalda, dvs hämta data från databasen. 613 00:34:19,000 --> 00:34:21,000 Hur går vi om det här? 614 00:34:21,000 --> 00:34:23,000 Låt mig gå vidare i apparaten. 615 00:34:23,000 --> 00:34:28,000 Låt mig dra upp http://localhost, 616 00:34:28,000 --> 00:34:30,000 vilket, återigen, är den lokala apparaten. 617 00:34:30,000 --> 00:34:32,000 Det är dess standard smeknamn. 618 00:34:32,000 --> 00:34:35,000 Och låt mig gå till / phpmyadmin. 619 00:34:35,000 --> 00:34:39,000 Det råkar vara en speciell webbadress att apparaten är förinställd att förstå 620 00:34:39,000 --> 00:34:42,000 som frågar mig genast för en användare och lösenord. 621 00:34:42,000 --> 00:34:46,000 >> Som vanligt kommer jag att skriva jharvard och karmosinrött, 622 00:34:46,000 --> 00:34:48,000 men inser att det är administratör på datorn. 623 00:34:48,000 --> 00:34:53,000 Det är bara en tillfällighet att det finns också en jharvard registrerad för CS50 Finans. 624 00:34:53,000 --> 00:34:56,000 Jharvard, crimson ger enter mig användargränssnittet som vi såg 625 00:34:56,000 --> 00:34:59,000 en glimt av en stund sedan, och det är lite överväldigande i början, 626 00:34:59,000 --> 00:35:02,000 men lugn, du kommer aldrig att behöva klicka flesta av länkarna i detta verktyg. 627 00:35:02,000 --> 00:35:05,000 Du kommer att sluta med en liten delmängd som är super bra, 628 00:35:05,000 --> 00:35:08,000 den första är databaser här uppe. 629 00:35:08,000 --> 00:35:11,000 Om jag går upp till databaser, märker att jag ombedd att skapa en databas. 630 00:35:11,000 --> 00:35:14,000 Detta är som att skapa en ny Excel-fil, effektivt. 631 00:35:14,000 --> 00:35:18,000 Jag ska gå vidare och kalla denna föreläsning, och jag ska bara ignorera fältet där sortering. 632 00:35:18,000 --> 00:35:20,000 Det har att göra med representation av data däri, 633 00:35:20,000 --> 00:35:24,000 och jag ska klicka skapa, och nu märker när jag släpper skapa 634 00:35:24,000 --> 00:35:27,000 på vänster sida där det står några databaser 635 00:35:27,000 --> 00:35:30,000 Jag skulle snart se föreläsningen databasen. 636 00:35:30,000 --> 00:35:32,000 >> Om jag klickar nu på den vänstra sidan, föreläsningen databasen, 637 00:35:32,000 --> 00:35:34,000 märker mina flikar ändra lite. 638 00:35:34,000 --> 00:35:38,000 Jag har struktur, SQL, export, import och vissa andra saker. 639 00:35:38,000 --> 00:35:40,000 Struktur är ganska mycket tomt. 640 00:35:40,000 --> 00:35:43,000 Inga tabeller finns i databasen, som det står här, 641 00:35:43,000 --> 00:35:47,000 så låt oss skapa en tabell, och låt oss gå vidare och skapa en tabell 642 00:35:47,000 --> 00:35:53,000 liknande eleverna och hur många kolumner vill vi ha? 643 00:35:53,000 --> 00:35:55,000 Låt oss hålla det enkelt och låt rekord för varje elev 644 00:35:55,000 --> 00:35:58,000 ett ID-nummer, ett namn och en e-postadress. 645 00:35:58,000 --> 00:36:02,000 >> Vi ska hålla det enkelt så, så 3 kolumner gå. 646 00:36:02,000 --> 00:36:05,000 Den form som ni ser här är nu lite rörigt och överväldigande, 647 00:36:05,000 --> 00:36:08,000 men vi måste bara gå igenom det rad för rad, så riktigt snabbt låt oss ge 648 00:36:08,000 --> 00:36:14,000 den första kolumnen i databasen ett namn ID för den unika identifierare. 649 00:36:14,000 --> 00:36:17,000 Det kommer att bli ett heltal. Jag kan faktiskt ignorera längd och värderingar. 650 00:36:17,000 --> 00:36:21,000 En int kommer att bli 32 bitar oavsett vad du skriver in det, så låt oss lämna det tomt. 651 00:36:21,000 --> 00:36:24,000 Standardvärde, kunde jag göra det noll, enligt definitionen. 652 00:36:24,000 --> 00:36:27,000 Jag ska lämna det ifred. Låt oss inte oroa standardvärden. 653 00:36:27,000 --> 00:36:29,000 Låt oss rulla över här till höger, attribut. 654 00:36:29,000 --> 00:36:31,000 Detta är intressant. 655 00:36:31,000 --> 00:36:33,000 Låt oss gå vidare och något godtyckligt säga att ID måste vara osignerad. 656 00:36:33,000 --> 00:36:35,000 Låt oss inte slösa några negativa tal. 657 00:36:35,000 --> 00:36:37,000 >> Låt oss gå från 0 till 4000000000, ge eller ta, 658 00:36:37,000 --> 00:36:40,000 och sedan ska vi inte röra något av dessa områden bara ännu borta, 659 00:36:40,000 --> 00:36:43,000 men låt mig skriva namn här nere, 660 00:36:43,000 --> 00:36:46,000 och sedan den andra var e-post, så fångsten är e-post 661 00:36:46,000 --> 00:36:50,000 och namn, uppenbarligen inte heltal, så låt oss ändra dessa till ett annat fält. 662 00:36:50,000 --> 00:36:53,000 Det visar sig varchar, variabel längd röding, 663 00:36:53,000 --> 00:36:56,000 är som en sträng i en SQL-databas 664 00:36:56,000 --> 00:36:59,000 men en variabel längd, och du har faktiskt berätta det i förväg 665 00:36:59,000 --> 00:37:02,000 maximal längd av strängen, så jag ska något godtyckligt 666 00:37:02,000 --> 00:37:05,000 av konvention typ 255 tecken. 667 00:37:05,000 --> 00:37:08,000 Jag kunde helt säga 32. Jag skulle kunna säga 1.000. 668 00:37:08,000 --> 00:37:11,000 Du typ av behov av att bestämma själv utifrån dina demografi vad är 669 00:37:11,000 --> 00:37:14,000 den längsta studentens namn och gå med det numret eller lite större, 670 00:37:14,000 --> 00:37:17,000 men vad är trevligt om ett varchar är det inte kommer att slösa 671 00:37:17,000 --> 00:37:19,000 255 byte på varje elevs namn. 672 00:37:19,000 --> 00:37:23,000 Om det är DAVID det inte kommer att använda en hel 255 byte, 673 00:37:23,000 --> 00:37:26,000 men det är en övre gräns, så jag ska gå med 255 bara genom konventionen, 674 00:37:26,000 --> 00:37:30,000 men vi kunde diskutera det vara något lägre värde, och för e-postadress 675 00:37:30,000 --> 00:37:34,000 bara för att vara konsekvent 255, men återigen, vi kunde ha samma debatt. 676 00:37:34,000 --> 00:37:36,000 Men jag ska göra en annan sak än här på höger sida. 677 00:37:36,000 --> 00:37:40,000 >> Vad är kraftfull om en databas är att det kan göra en hel del tunga lyft 678 00:37:40,000 --> 00:37:42,000 eller komplexa arbete för dig. 679 00:37:42,000 --> 00:37:46,000 I synnerhet jag verkligen bryr mig inte vad min elevs ID-nummer är. 680 00:37:46,000 --> 00:37:49,000 Det är bara tänkt att vara en unik identifierare i en databas 681 00:37:49,000 --> 00:37:52,000 så jag har en 32-bitars kortfattad presentation av den studerandes 682 00:37:52,000 --> 00:37:55,000 så att jag har en bit av unikt identifiera dem 683 00:37:55,000 --> 00:37:58,000 så att det finns 2 Davids, exempelvis, i en klass. 684 00:37:58,000 --> 00:38:01,000 I själva verket kommer jag att kontrollera detta AI-rutan, automatisk ökning, 685 00:38:01,000 --> 00:38:04,000 så att databasen, MySQL, räknar ut 686 00:38:04,000 --> 00:38:08,000 vad varje nyinförda elevs ID kommer att bli. 687 00:38:08,000 --> 00:38:11,000 Jag behöver inte ens bry sig om det i min kod, 688 00:38:11,000 --> 00:38:13,000 och jag kommer också att välja något under index-menyn. 689 00:38:13,000 --> 00:38:17,000 Indexet faller ner här har primära, unika, 690 00:38:17,000 --> 00:38:19,000 index och fulltext. 691 00:38:19,000 --> 00:38:21,000 Du kan kanske gissa vad ett par av dessa saker är, 692 00:38:21,000 --> 00:38:24,000 men det visar sig i relationsdatabaser 693 00:38:24,000 --> 00:38:28,000 Du programmeraren eller databasadministratör få förebyggande syfte 694 00:38:28,000 --> 00:38:32,000 ge tips till databasen om vilka fält 695 00:38:32,000 --> 00:38:34,000 i en tabell är lite speciell. 696 00:38:34,000 --> 00:38:37,000 >> Till exempel, i detta fall ska jag säga att ID- 697 00:38:37,000 --> 00:38:42,000 kommer att vara en primär index, annars känd som en primär nyckel. 698 00:38:42,000 --> 00:38:44,000 Vad detta innebär per definition att ID-hädanefter 699 00:38:44,000 --> 00:38:48,000 kommer identifiera elever i denna tabell. 700 00:38:48,000 --> 00:38:53,000 Ingen student kommer att ha samma ID eftersom jag införa denna begränsning eller detta index. 701 00:38:53,000 --> 00:38:55,000 Dessutom, vad detta kommer att göra för mig är att det kommer att berätta 702 00:38:55,000 --> 00:38:58,000 MySQL som ID är speciell. 703 00:38:58,000 --> 00:39:03,000 Jag bryr särskilt om ID, så gå vidare och göra din fantasi datastruktur magi, 704 00:39:03,000 --> 00:39:05,000 bygga upp någon form av träd. 705 00:39:05,000 --> 00:39:08,000 Vanligtvis är det något som kallas B-trädet, som vi inte titta på veckor sedan, 706 00:39:08,000 --> 00:39:11,000 men det är en annan sådan datastruktur likadana i andemening som de binära träd 707 00:39:11,000 --> 00:39:15,000 och försöker att vi tittat på, men det kommer att säga 708 00:39:15,000 --> 00:39:18,000 till databasen detta område är så viktig att jag förmodligen 709 00:39:18,000 --> 00:39:22,000 vill kunna söka på det, gå vidare och bygga upp några fancy 710 00:39:22,000 --> 00:39:25,000 datastruktur i minnet att påskynda sökningar så att helst 711 00:39:25,000 --> 00:39:28,000 de är konstant tid eller åtminstone så nära det som möjligt 712 00:39:28,000 --> 00:39:32,000 så att den inte överlåta till linjär sökning, vilket kommer inte att vara 713 00:39:32,000 --> 00:39:34,000 den mest högpresterande tillvägagångssätt. 714 00:39:34,000 --> 00:39:37,000 Däremot kunde e-postadress ha varit en primär nyckel. 715 00:39:37,000 --> 00:39:41,000 >> I teorin är allas e-postadress unik, såvida du delar viss hänsyn, 716 00:39:41,000 --> 00:39:45,000 men det är i allmänhet inte bra att använda något som en sträng 717 00:39:45,000 --> 00:39:49,000 som primärnyckel för om dess syfte i livet är att identifiera 718 00:39:49,000 --> 00:39:55,000 rader i tabellen finns det ingen anledning att använda 255 byte maximalt 719 00:39:55,000 --> 00:39:58,000 att identifiera någon om man kan komma undan med bara 4 byte 720 00:39:58,000 --> 00:40:00,000 eller en 32-bitars int. 721 00:40:00,000 --> 00:40:03,000 I allmänhet bör en primärnyckel vara kort och koncis 722 00:40:03,000 --> 00:40:07,000 och helst något liknande ett heltal eller en stor int, som råkar vara 64 bitar. 723 00:40:07,000 --> 00:40:11,000 Men en e-postadress ska vara unik, och en av funktionerna i en databas för 724 00:40:11,000 --> 00:40:14,000 är att upprätthålla unika för mig. 725 00:40:14,000 --> 00:40:18,000 Genom att välja en unik här bredvid e-post, trots att e-posta sig 726 00:40:18,000 --> 00:40:21,000 rullas utanför skärmen, jag säger till databasen 727 00:40:21,000 --> 00:40:23,000 litar inte mig. 728 00:40:23,000 --> 00:40:26,000 Låt mig inte in i databasen 729 00:40:26,000 --> 00:40:29,000 samma e-postadress två gånger, även om jag är en idiot och är inte 730 00:40:29,000 --> 00:40:32,000 mycket bra med mina om och annars IFS och faktisk PHP-kod 731 00:40:32,000 --> 00:40:37,000 och jag lät misstag användaren registrera sig hos en befintlig e-postadress 732 00:40:37,000 --> 00:40:40,000 databasen är ännu en nivå av försvar för korrekthet 733 00:40:40,000 --> 00:40:44,000 att se till att denna kopia e-postadressen inte hamnar i tabellen. 734 00:40:44,000 --> 00:40:49,000 >> Nu däremot, för namn du förmodligen inte vill göra det unika 735 00:40:49,000 --> 00:40:51,000 för då det aldrig kan vara 2 Davids eller 2 Mike Smiths, till exempel, 736 00:40:51,000 --> 00:40:55,000 i din databas, så att en vi ska bara lämna ensam. 737 00:40:55,000 --> 00:40:58,000 Jag ska gå vidare och klicka på Spara längst ned till höger, 738 00:40:58,000 --> 00:41:02,000 och allt ser bra ut, men märker upp här 739 00:41:02,000 --> 00:41:04,000 Detta är en del som för nu kommer vi inte att spendera alltför mycket tid på 740 00:41:04,000 --> 00:41:07,000 eftersom syntaxen är lite komplicerat, och vi behöver inte skapa tabeller 741 00:41:07,000 --> 00:41:10,000 så ofta, men SQL sig är ett språk, 742 00:41:10,000 --> 00:41:13,000 syntaxen som är här som jag har markerat. 743 00:41:13,000 --> 00:41:18,000 Vilka phpMyAdmin verkligen är det skapar en webbaserad GUI för dig 744 00:41:18,000 --> 00:41:23,000 som du kan spara tid och inte behöva manuellt skriva ut 745 00:41:23,000 --> 00:41:26,000 en ganska lång SQL-fråga så. 746 00:41:26,000 --> 00:41:29,000 >> Med andra ord, om du ville manuellt skapa denna tabell, 747 00:41:29,000 --> 00:41:32,000 antingen vid den svarta och vita snabb eller ens i phpMyAdmin 748 00:41:32,000 --> 00:41:35,000 genom att använda denna andra fliken, detta SQL-fliken där du kan skriva in alla SQL-frågor 749 00:41:35,000 --> 00:41:38,000 du vill, uppriktigt sagt, det skulle ha tagit mig en minut 750 00:41:38,000 --> 00:41:41,000 att faktiskt komma ihåg hela syntaxen, och även då jag förmodligen skulle ha 751 00:41:41,000 --> 00:41:45,000 gjort några stavfel, så detta verktyg är användbart för saker, och det är också lärorikt. 752 00:41:45,000 --> 00:41:49,000 Du kan börja att sluta vad syntaxen är 753 00:41:49,000 --> 00:41:52,000 bara genom den fina färgkodning som phpMyAdmin är att lägga 754 00:41:52,000 --> 00:41:54,000 för vår visuella bekvämlighet. 755 00:41:54,000 --> 00:41:56,000 Men nu ska vi göra det här i stället. 756 00:41:56,000 --> 00:42:00,000 Låt mig gå till fliken Infoga uppe, och låt mig gå vidare och sätta till exempel 757 00:42:00,000 --> 00:42:04,000 en ID låt oss säga, egentligen bryr jag mig inte. 758 00:42:04,000 --> 00:42:07,000 Det kommer att automatiskt påslag. Jag ska låta databasen hantera detta. 759 00:42:07,000 --> 00:42:11,000 Men jag ska David och min e-post ska vara malan@harvard.edu. 760 00:42:11,000 --> 00:42:16,000 >> Låt oss gå vidare här och sätta i Mike Smith som en annan. 761 00:42:16,000 --> 00:42:18,000 Jag ska ge mig själv ett efternamn också, 762 00:42:18,000 --> 00:42:22,000 och vi kommer ha honom vara smith@example.com, 763 00:42:22,000 --> 00:42:24,000 och sedan var går jag nu? 764 00:42:24,000 --> 00:42:27,000 Tja, det verkar som gå är för att klicka, och voila. 765 00:42:27,000 --> 00:42:30,000 Kallelse till de bästa insatta 2 rader. 766 00:42:30,000 --> 00:42:32,000 Detta är den faktiska SQL-fråga. 767 00:42:32,000 --> 00:42:36,000 Det är phpMyAdmin verktyget körs för mig, 768 00:42:36,000 --> 00:42:40,000 men slutresultatet, varsel, om jag nu gå till fliken Bläddra, 769 00:42:40,000 --> 00:42:43,000 är att se 2 rader i den här tabellen, mycket påminner estetiskt 770 00:42:43,000 --> 00:42:46,000 i tabellen vi såg tidigare för våra användare från pset 7, 771 00:42:46,000 --> 00:42:51,000 en av dem är David Malan, varav nu är Mike Smith. 772 00:42:51,000 --> 00:42:54,000 Men bara för att vara tydlig, jag behöver inte använda phpMyAdmin, 773 00:42:54,000 --> 00:42:56,000 och faktiskt, du kommer att snart skriva kod för pset 7 774 00:42:56,000 --> 00:43:01,000 som automatiserar processen att lägga rader, ta bort rader, uppdatera rader och liknande, 775 00:43:01,000 --> 00:43:04,000 så låt mig i stället gå till SQL-fliken här uppe 776 00:43:04,000 --> 00:43:14,000 och skriv in SELECT * FROM studenter där 777 00:43:14,000 --> 00:43:18,000 e = "malan@harvard.edu." 778 00:43:18,000 --> 00:43:21,000 >> Med andra ord antar nu har du 779 00:43:21,000 --> 00:43:26,000 någon HTML-formulär, och de typer användaren i sin e-postadress, bland andra områden, 780 00:43:26,000 --> 00:43:29,000 och målet är nu i PHP på bakändan koden 781 00:43:29,000 --> 00:43:31,000 att faktiskt leta upp den användarens övriga detaljer. 782 00:43:31,000 --> 00:43:34,000 Vad är ditt fullständiga namn? Vilket är ditt ID-nummer? 783 00:43:34,000 --> 00:43:37,000 Du kan skriva en SQL-fråga som denna, välj * från studenter 784 00:43:37,000 --> 00:43:40,000 där e = "malan@harvard.edu." 785 00:43:40,000 --> 00:43:46,000 Och om jag klickar på gå, märker att jag skulle, och faktiskt jag, få tillbaka bara en rad. 786 00:43:46,000 --> 00:43:50,000 Mike utelämnas från denna resultat, eftersom insamling av rader 787 00:43:50,000 --> 00:43:53,000 brukar kallas, eftersom han inte har samma e-postadress som jag. 788 00:43:53,000 --> 00:43:57,000 >> Nu, igen, här pset 7 du använder phpMyAdmin som ett administrativt verktyg 789 00:43:57,000 --> 00:44:00,000 och ett pedagogiskt verktyg för att lära dig 790 00:44:00,000 --> 00:44:03,000 runt om i världen av SQL, men i slutet av dagen 791 00:44:03,000 --> 00:44:08,000 du kommer att skriva dessa frågor inom den faktiska PHP-kod, 792 00:44:08,000 --> 00:44:11,000 och så håll ögonen öppna i Zamyla s genomgång i synnerhet 793 00:44:11,000 --> 00:44:14,000 där du får en rundtur i distributionen koden för det här problemet set 794 00:44:14,000 --> 00:44:18,000 där vi har gett dig inte bara estetik för inloggningssidan 795 00:44:18,000 --> 00:44:21,000 och trevlig sexig logotyp som säger CS50 Finans, men vi har också gett dig 796 00:44:21,000 --> 00:44:24,000 ett gäng funktioner som kommer att göra ditt liv lite lättare. 797 00:44:24,000 --> 00:44:27,000 Vi har också skrivit en del av pset för dig, 798 00:44:27,000 --> 00:44:32,000 inloggningen del av den i synnerhet för att ge dig en känsla av en representativ utformning 799 00:44:32,000 --> 00:44:36,000 som använder faktiskt en styrenhet, t.ex. index.php, 800 00:44:36,000 --> 00:44:40,000 login.php och liknande, och sedan ser du pset också en mallar katalog 801 00:44:40,000 --> 00:44:43,000 som har alla dina åsikter, alla estetik. 802 00:44:43,000 --> 00:44:46,000 Och så den totala arbetsflödet i pset 7 kommer att vara att 803 00:44:46,000 --> 00:44:49,000 användarna besöker en regulator via en URL i en webbläsare. 804 00:44:49,000 --> 00:44:53,000 Det Regulatorn innehåller PHP-kod som du skrev, och insidan av din PHP-kod 805 00:44:53,000 --> 00:44:57,000 kan några rader av SQL kapslade i mellan citationstecken 806 00:44:57,000 --> 00:45:00,000 och skickas till en funktion vi skrev kallas fråga 807 00:45:00,000 --> 00:45:03,000 som hjälper dig att prata med databasen utan att använda något som 808 00:45:03,000 --> 00:45:05,000 ett administrativt verktyg som phpMyAdmin. 809 00:45:05,000 --> 00:45:08,000 >> Du kommer att kunna skriva SQL-satser i PHP-kod 810 00:45:08,000 --> 00:45:11,000 och få tillbaka en PHP-array av resultat, 811 00:45:11,000 --> 00:45:14,000 av raderna som faktiskt matchar den frågan. 812 00:45:14,000 --> 00:45:18,000 Och på samma sätt kommer du att kunna göra inlägg eller raderar 813 00:45:18,000 --> 00:45:22,000 eller uppdateringar eller liknande, Syntaxen för som är ganska lika, 814 00:45:22,000 --> 00:45:25,000 och du kommer se från vissa online referenser, från distributionen koden 815 00:45:25,000 --> 00:45:29,000 och från pset packa sig exakt hur man ska göra det. 816 00:45:29,000 --> 00:45:33,000 Inse slutändan vi egentligen bara är skrapat på ytan av SQL 817 00:45:33,000 --> 00:45:36,000 och av MySQL, men kraften i det är verkligen att det befriar dig 818 00:45:36,000 --> 00:45:40,000 att fokusera på de problem du vill lösa de användningsfall som du vill genomföra 819 00:45:40,000 --> 00:45:43,000 utan att behöva oroa lika mycket, åtminstone tidigt, 820 00:45:43,000 --> 00:45:47,000 om var och hur att lagra och söka i databasen, 821 00:45:47,000 --> 00:45:50,000 och det är bokstavligen där Facebook självt fick sin början 822 00:45:50,000 --> 00:45:53,000 använder MySQL och sedan använda fler MySQL-servrar och sedan mer MySQL servrar 823 00:45:53,000 --> 00:45:57,000 snart tills de sedan fick verkligen börja tänka hårt om hur man 824 00:45:57,000 --> 00:46:00,000 lagra data, hur man förvarar saker ännu effektivare, 825 00:46:00,000 --> 00:46:04,000 så även om vi tar för givet att index och unika begränsningar 826 00:46:04,000 --> 00:46:08,000 och så vidare bara arbeta där är en väldigt intressant konversation 827 00:46:08,000 --> 00:46:12,000 att detta kan alla så småningom leda till, så inse att vi bara är att skrapa på ytan 828 00:46:12,000 --> 00:46:17,000 vad kan så småningom för dig eller dina projekt blir en hel del stora uppgifter. 829 00:46:17,000 --> 00:46:22,000 >> Med det sagt, låt oss sluta här, och vi får se nästa vecka. 830 00:46:28,000 --> 00:46:30,000 [CS50.TV]