1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Week 8, Vervolg] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Harvard University] 3 00:00:04,000 --> 00:00:08,000 [Dit is CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:13,000 >> Dit is CS50, dus dit is het einde van week 8 hier. 5 00:00:13,000 --> 00:00:16,000 We hadden natuurlijk een beetje een orkaan eerder deze week, 6 00:00:16,000 --> 00:00:19,000 dus nu is het eigenlijk alleen maar jij en ik in deze zaal, 7 00:00:19,000 --> 00:00:22,000 maar vandaag blijven we ons gesprek over PHP 8 00:00:22,000 --> 00:00:25,000 en over web programmeren meer in het algemeen, en we introduceren ook het idee 9 00:00:25,000 --> 00:00:29,000 van databases, in het bijzonder een zogenaamde MySQL, dat is heel populair deze dagen, 10 00:00:29,000 --> 00:00:34,000 voor een groot deel vanwege de schaalbaarheid en omdat de vrij en open source. 11 00:00:34,000 --> 00:00:37,000 >> Maar eerst een blik op waar we gebleven vorige keer. 12 00:00:37,000 --> 00:00:40,000 Bedenk dat we kijken naar de verschillende Frosh IM's voorbeelden, 13 00:00:40,000 --> 00:00:44,000 en dit was de afschuwelijke vorm die ik kwam met een aantal 15 + jaar geleden 14 00:00:44,000 --> 00:00:49,000 om studenten op de campus register voor eerstejaars intramurale sport hebben 15 00:00:49,000 --> 00:00:52,000 zonder echt te hoeven tocht meer over het erf naar Wigglesworth 16 00:00:52,000 --> 00:00:56,000 een fysieke stuk papier onder de deur een aantal Proctor's schuiven. 17 00:00:56,000 --> 00:00:59,000 In plaats daarvan zijn we verhuisd alles online, maar om te doen dat we nodig hadden om gebruik te maken 18 00:00:59,000 --> 00:01:03,000 van een paar technologieën, zodat een, we moesten HTML, Hypertext Markup Language, 19 00:01:03,000 --> 00:01:07,000 dat is ook dit opmaaktaal waarmee u webpagina's structureel. 20 00:01:07,000 --> 00:01:10,000 >> Met behulp van een beetje CSS deze dagen, cascading style sheets, 21 00:01:10,000 --> 00:01:16,000 waarbij we gebruik maken van stileringen van de webpagina met behulp van een iets andere syntax, 22 00:01:16,000 --> 00:01:19,000 terwijl de HTML was alles over de structuur ervan. 23 00:01:19,000 --> 00:01:21,000 We moeten ook een web-programmeertaal te introduceren. 24 00:01:21,000 --> 00:01:25,000 In dit geval, zullen we gebruik maken van PHP en PHP zal ons in staat stellen 25 00:01:25,000 --> 00:01:28,000 om dynamisch vermogen zowel inhoudelijk als doen programmatische zaken als 26 00:01:28,000 --> 00:01:33,000 het verzenden van e-mails, zoals het geval was op het briefje we vertrokken vorige week. 27 00:01:33,000 --> 00:01:35,000 >> Bedenk dat de code voor dit was in 2 delen. 28 00:01:35,000 --> 00:01:38,000 Een, hadden we froshims3.php, 29 00:01:38,000 --> 00:01:42,000 en dit was grotendeels opmaak met een HTML-formulier binnenkant van het, 30 00:01:42,000 --> 00:01:45,000 een klein beetje CSS hier in de stijl attributen 31 00:01:45,000 --> 00:01:48,000 zodat het formulier zelf zou worden gecentreerd op de pagina, maar verder dan dat 32 00:01:48,000 --> 00:01:51,000 we hadden een aantal representatieve vorm ingangen, een tekstveld, een checkbox, 33 00:01:51,000 --> 00:01:55,000 sommige keuzerondjes, een select menu, en een submit knop. 34 00:01:55,000 --> 00:02:01,000 En via dit formulier, we voorgelegd aan een bestand dat blijkbaar heette register3.php, 35 00:02:01,000 --> 00:02:04,000 die zelf zag er een beetje iets als dit. 36 00:02:04,000 --> 00:02:08,000 Nu, de meeste van de code in register3.php, recall, was alles over e-mail. 37 00:02:08,000 --> 00:02:11,000 Het deed een beetje validatie van het formulier dat werd ingediend om ervoor te zorgen 38 00:02:11,000 --> 00:02:14,000 dat de velden waren eigenlijk op voorwaarde dat werd verwacht. 39 00:02:14,000 --> 00:02:18,000 Dan hebben we wel een aantal PHP-functies met behulp van een beetje nieuwe syntax, 40 00:02:18,000 --> 00:02:20,000 ook al is het geleend van C. 41 00:02:20,000 --> 00:02:24,000 >> Deze pijl exploitant stelt ons in staat om gebruik te maken van een zogenaamde object-georiënteerd programmeren. 42 00:02:24,000 --> 00:02:27,000 We zullen niet ingaan in detail hier, maar weet voor nu 43 00:02:27,000 --> 00:02:31,000 het is een manier van het hebben van functies gekoppeld aan objecten, 44 00:02:31,000 --> 00:02:34,000 die zijn een speciaal type van structuur, zoals we zagen in C. 45 00:02:34,000 --> 00:02:37,000 Maar voor nu, gewoon op het geloof dat dit de juiste syntax te gebruiken 46 00:02:37,000 --> 00:02:41,000 bij het gebruik van een bibliotheek als deze PHPMailer bibliotheek. 47 00:02:41,000 --> 00:02:44,000 En dan aan het eind van dit bestand hadden we dynamisch gegenereerde een e-mail 48 00:02:44,000 --> 00:02:47,000 die werd verstuurd naar mijn jharvard@cs50.net rekening 49 00:02:47,000 --> 00:02:50,000 van mijn jharvard@cs50.net account, 50 00:02:50,000 --> 00:02:54,000 en we geïnformeerd dat de gebruiker dan ook dat zij zijn ingeschreven voor deze sport. 51 00:02:54,000 --> 00:02:57,000 Dat is zo ongeveer wat de Frosh IM's site heeft al die jaren geleden 52 00:02:57,000 --> 00:03:00,000 toen ik het uitgevoerd, verleend, in een andere taal, 53 00:03:00,000 --> 00:03:02,000 maar het toont je misschien wel de kracht die je hebt 54 00:03:02,000 --> 00:03:05,000 nu dat je jezelf kunt uitdrukken, niet alleen programmatisch 55 00:03:05,000 --> 00:03:08,000 op een laag niveau in een taal zoals C maar op een veel hoger niveau 56 00:03:08,000 --> 00:03:11,000 met deze zeer echte wereld toepassingen zoals e-mail om daadwerkelijk op te lossen 57 00:03:11,000 --> 00:03:13,000 echte wereld problemen. 58 00:03:13,000 --> 00:03:16,000 >> Nu, natuurlijk, hoewel ik dit script gebruiken om een ​​aantal te genereren 59 00:03:16,000 --> 00:03:20,000 e-mails dynamisch uit jharvard@cs50.net, die inderdaad een account 60 00:03:20,000 --> 00:03:23,000 dat ik toegang tot heb, wees heel voorzichtig met het verzenden 61 00:03:23,000 --> 00:03:26,000 mail alleen van accounts die eigenlijk uw eigen, 62 00:03:26,000 --> 00:03:30,000 opdat dingen krijg je in een beetje heet water in het leven. 63 00:03:30,000 --> 00:03:35,000 Met dat gezegd, laten we nu de overgang naar het oplossen van een ander probleem helemaal, 64 00:03:35,000 --> 00:03:37,000 dat het behouden staten. 65 00:03:37,000 --> 00:03:39,000 Nu, dit betekent wat eigenlijk? 66 00:03:39,000 --> 00:03:42,000 HTTP, deze hypertext transfer protocol, 67 00:03:42,000 --> 00:03:45,000 is eigenlijk een staatloze protocol, en wat dit betekent is dat 68 00:03:45,000 --> 00:03:48,000 als je omhoog trekken iets als Google.com en druk op enter 69 00:03:48,000 --> 00:03:51,000 meestal uw browser heeft een soort van spinnen pictogram dat dan 70 00:03:51,000 --> 00:03:54,000 resultaten in sommige webpagina wordt gedownload, 71 00:03:54,000 --> 00:03:57,000 en dan dat kleine icoon niet langer ronddraait, en dat is inderdaad suggereert 72 00:03:57,000 --> 00:04:02,000 dat HTTP heeft afgerond een soort van verbinding met de server en dat is het. 73 00:04:02,000 --> 00:04:05,000 HTTP is stateless in de zin dat het niet te handhaven 74 00:04:05,000 --> 00:04:08,000 een persistente verbinding naar de server op dezelfde manier Skype doet 75 00:04:08,000 --> 00:04:11,000 of Gchat doet, want met HTTP 76 00:04:11,000 --> 00:04:15,000 de veronderstelling is dat als je eenmaal hebt een webpagina dat is het opgehaald. 77 00:04:15,000 --> 00:04:18,000 >> Nu, in werkelijkheid deze dagen op sites als Facebook en Google Maps 78 00:04:18,000 --> 00:04:21,000 en Twitter en dergelijke er is veel meer dynamiek, waarbij 79 00:04:21,000 --> 00:04:25,000 zelfs na die icoon niet langer ronddraait kun je in feite meer updates 80 00:04:25,000 --> 00:04:29,000 van de server, meer tweets, meer status-updates op Facebook en dergelijke. 81 00:04:29,000 --> 00:04:33,000 Maar zelfs dat is met behulp van een techniek die we over praten in een week of twee 82 00:04:33,000 --> 00:04:36,000 bekend als Ajax met een JavaScript taal genaamd, 83 00:04:36,000 --> 00:04:38,000 maar aan het eind van de dag, HTTP nog stateless. 84 00:04:38,000 --> 00:04:42,000 En toch, als je wilt een of andere manier herinneren dingen over een door de gebruiker 85 00:04:42,000 --> 00:04:44,000 zelfs nadat ze losgekoppeld van uw server 86 00:04:44,000 --> 00:04:47,000 PHP doet veroorloven u een middel om dit te doen 87 00:04:47,000 --> 00:04:52,000 omdat, zoals we zagen vorige keer, PHP heeft een aantal superglobals, 88 00:04:52,000 --> 00:04:55,000 en een superglobal is, nogmaals, een speciale globale variabele 89 00:04:55,000 --> 00:04:59,000 dat is overhandigd door de webserver en PHP zelf. 90 00:04:59,000 --> 00:05:02,000 >> Je hoeft niets te doen om de waarden in te doen, 91 00:05:02,000 --> 00:05:05,000 en onder de superglobals we hebben tot nu toe gezien zijn GET en POST, 92 00:05:05,000 --> 00:05:08,000 dat is waar formuliervelden worden automatisch voor u, 93 00:05:08,000 --> 00:05:11,000 evenals een paar anderen die we nog niet hebben gezien. 94 00:05:11,000 --> 00:05:17,000 Binnenkant van $ _SERVER zijn enkele speciale variabelen met betrekking tot de server zelf. 95 00:05:17,000 --> 00:05:22,000 Wat is het IP-adres, welk protocol, HTTP of HTTPS heeft u gebruikt, 96 00:05:22,000 --> 00:05:25,000 Wat de aanvraag methode heb je gebruikt en dergelijke, dus er is een aantal interessante, 97 00:05:25,000 --> 00:05:29,000 sappige details over de server, en in feite de gebruiker daar ook. 98 00:05:29,000 --> 00:05:33,000 Er is $ _COOKIE, dat is waar deze dingen wel cookies worden opgeslagen. 99 00:05:33,000 --> 00:05:36,000 We zullen geen tijd over cookies zichzelf vandaag de dag, 100 00:05:36,000 --> 00:05:40,000 maar weet nu dat een cookie is slechts een klein stukje informatie 101 00:05:40,000 --> 00:05:43,000 die een webserver kunt de plant op een web browser 102 00:05:43,000 --> 00:05:46,000 en op zijn beurt de RAM of haar computer de harde schijf 103 00:05:46,000 --> 00:05:49,000 het opslaan van informatie over een gebruiker, bijvoorbeeld de gebruiker zijn naam 104 00:05:49,000 --> 00:05:52,000 zodat ze niet hoeven te typen elke keer dat ze inloggen of sommige 105 00:05:52,000 --> 00:05:55,000 uniek nummer of identificatienummer voor dat de gebruiker 106 00:05:55,000 --> 00:05:58,000 zodat u niet hoeft te pesten met dezelfde soort vragen over 107 00:05:58,000 --> 00:06:00,000 voorkeuren in de toekomst, maar de meeste plaats 108 00:06:00,000 --> 00:06:02,000 op dit moment is $ _SESSION. 109 00:06:02,000 --> 00:06:07,000 >> Dit superglobal, die net als de anderen, wordt overhandigd automatisch door PHP 110 00:06:07,000 --> 00:06:10,000 als je het schrijven van PHP gebaseerde websites 111 00:06:10,000 --> 00:06:13,000 kunt opslaan wat je maar wilt, strings, integers, 112 00:06:13,000 --> 00:06:16,000 Floating Points, waarden, arrays, objecten, 113 00:06:16,000 --> 00:06:20,000 echt alles wat je wilt, en het u toestaat om het op te slaan op een zodanige wijze 114 00:06:20,000 --> 00:06:23,000 dat zelfs als de gebruiker zo nu en dan 115 00:06:23,000 --> 00:06:26,000 komt terug een minuut vanaf nu of 5 minuten vanaf nu, omdat 116 00:06:26,000 --> 00:06:28,000 zij nemen hun tijd voordat u op andere banden 117 00:06:28,000 --> 00:06:32,000 PHP zal ervoor zorgen dat wat je in die sessie superglobal 118 00:06:32,000 --> 00:06:37,000 een minuut of 5 minuten geleden zal er nog zijn als de gebruiker terugkeert. 119 00:06:37,000 --> 00:06:40,000 En onder de motorkap dit superglobal wordt uitgevoerd door middel van 120 00:06:40,000 --> 00:06:44,000 die dingen geroepen koekjes, maar voor nu, het is gewoon een abstractie 121 00:06:44,000 --> 00:06:47,000 waarbij het is een soort van de programmatische equivalent van een winkelwagentje. 122 00:06:47,000 --> 00:06:50,000 Wat je ook, de programmeur, zet in dat 123 00:06:50,000 --> 00:06:53,000 superglobal associatieve array zal er een bepaald aantal minuten later 124 00:06:53,000 --> 00:06:59,000 totdat u deze verwijdert of totdat de gebruiker stopt met zijn of haar browser helemaal. 125 00:06:59,000 --> 00:07:02,000 >> Laten we eens een kijkje nemen op een voorbeeld van hoe dit ding daadwerkelijk wordt gebruikt. 126 00:07:02,000 --> 00:07:07,000 In counter.php in stukken van vandaag van code 127 00:07:07,000 --> 00:07:09,000 hebben we de volgende regel. 128 00:07:09,000 --> 00:07:13,000 Aan het begin van dit bestand hebben we een heleboel blauwe opmerkingen, die zijn oninteressant voor nu. 129 00:07:13,000 --> 00:07:15,000 Maar in lijn 13 hebben we een nieuwe lijn, 130 00:07:15,000 --> 00:07:18,000 session_start, en dat daadwerkelijk doet precies wat het zegt. 131 00:07:18,000 --> 00:07:20,000 Begint sessies. 132 00:07:20,000 --> 00:07:25,000 Hiermee kunt u gebruik maken van die grote superglobal $ _SESSION, en het is zo simpel als dat. 133 00:07:25,000 --> 00:07:30,000 Nu, als we gaan kijken naar lijn 16, laten we proberen om erachter te komen wat deze webpagina gaat doen. 134 00:07:30,000 --> 00:07:35,000 If (isset ($ _SESSION ["counter"]), dan ga je gang 135 00:07:35,000 --> 00:07:39,000 en op te slaan in de teller variabele, kleine toonbank, 136 00:07:39,000 --> 00:07:42,000 $ _SESSION ["Teller"]. 137 00:07:42,000 --> 00:07:45,000 Dit lijkt te worden waarbij een lokale variabele genaamd teller 138 00:07:45,000 --> 00:07:48,000 binnenkant waarvan het is waardoor een kopie van wat binnenkant van de superglobal 139 00:07:48,000 --> 00:07:52,000 riep sessie op de locatie "teller". 140 00:07:52,000 --> 00:07:56,000 Else, blijkbaar, deze kleine lokale variabele teller, wordt geïnitialiseerd op 0. 141 00:07:56,000 --> 00:08:01,000 >> Maar dan een paar regels later in 26 bericht dat de sessie kopie van de teller, 142 00:08:01,000 --> 00:08:06,000 de belangrijkste, heeft een nieuwe waarde toegewezen die is de huidige waarde plus 1. 143 00:08:06,000 --> 00:08:09,000 In het kort, dit bestand lijkt te updaten 144 00:08:09,000 --> 00:08:13,000 een teller die binnen is opgeslagen van de sessie superglobal 145 00:08:13,000 --> 00:08:16,000 door het verhogen van het door 1, maar behoudt eerst een kopie van de vorige waarde 146 00:08:16,000 --> 00:08:20,000 door te slaan in een lokale variabele met de naam $ teller, 147 00:08:20,000 --> 00:08:22,000 en dan naar beneden hier laten we eens kijken wat er overblijft. 148 00:08:22,000 --> 00:08:24,000 Het blijkt dat het vrijwel alleen HTML. 149 00:08:24,000 --> 00:08:29,000 Aan de onderkant van deze pagina zien we in regel 37 dat ik deze site bezocht 150 00:08:29,000 --> 00:08:33,000 teller aantal keren, dus er is hier een paar interessante eigenschappen. 151 00:08:33,000 --> 00:08:36,000 One, dit is duidelijk een variabele, maar het is niet voldoende om zomaar 152 00:08:36,000 --> 00:08:39,000 $ Teller in het lichaam van uw HTML-want natuurlijk 153 00:08:39,000 --> 00:08:43,000 als het er gewoon onder uw HTML PHP gaat ervan uit dat het gewoon HTML. 154 00:08:43,000 --> 00:08:48,000 Je letterlijk wilt $ teller worden afgedrukt op het scherm. 155 00:08:48,000 --> 00:08:51,000 >> Maar in plaats van te laten vallen in PHP-modus 156 00:08:51,000 --> 00:08:55,000 met dit stukje syntax kunnen we dynamisch hier plaatst u een waarde 157 00:08:55,000 --> 00:08:58,000 zeer vergelijkbaar in de geest van wat we de vorige keer met 158 00:08:58,000 --> 00:09:00,000 het plaatsen van waarden in strings. 159 00:09:00,000 --> 00:09:04,000 In feite is dit gewoon een verkorte schrijfwijze voor te zeggen iets als dit letterlijk, 160 00:09:04,000 --> 00:09:12,000 print ($ teller) of zelfs zoiets als printf (% s, teller), 161 00:09:12,000 --> 00:09:14,000 of zelfs, zoals je misschien al gezien online of in leerboeken, 162 00:09:14,000 --> 00:09:17,000 er is een functie in PHP genaamd echo 163 00:09:17,000 --> 00:09:20,000 die doet hetzelfde, en al die zijn gewoon langer adem manieren 164 00:09:20,000 --> 00:09:25,000 te zeggen 00:09:28,000 In dit ene geval hoeft u niet te zetten 166 00:09:28,000 --> 00:09:30,000 het woord PHP na het vraagteken. 167 00:09:30,000 --> 00:09:34,000 Dit is een afkorting notatie voor, nogmaals, wat we net zagen een moment geleden 168 00:09:34,000 --> 00:09:37,000 die echo enkele waarde. 169 00:09:37,000 --> 00:09:39,000 >> Laten we eens kijken wat het eindresultaat van deze eigenlijk is. 170 00:09:39,000 --> 00:09:43,000 Laat me dan gaan in onze counter.php bestand, 171 00:09:43,000 --> 00:09:47,000 en we zullen zien dat David gewoon een fout heeft gemaakt door te spelen met de code daar. 172 00:09:47,000 --> 00:09:50,000 Laten we fix wat hij verpest te gaan, 173 00:09:50,000 --> 00:09:54,000 en de fout lijkt om daar te zijn, weg, op lijn 37. 174 00:09:54,000 --> 00:09:59,000 Volgens de bovenkant van deze pagina ik heb bezocht deze site 0 keer. 175 00:09:59,000 --> 00:10:02,000 Nou, laten we nu gaan, en aan de bovenkant van de browser klikt u op de 176 00:10:02,000 --> 00:10:05,000 reload icoon, en ik klik op laden, 177 00:10:05,000 --> 00:10:12,000 en nu heb ik een bezoek aan de site 1 keer, 2, 3, 4, 5, 6, 7, 8. 178 00:10:12,000 --> 00:10:16,000 En inderdaad, als we kijken naar de bron van deze pagina het eigenlijke broncode is aan het veranderen, 179 00:10:16,000 --> 00:10:19,000 en let op de volledige afwezigheid van PHP, en dat komt omdat 180 00:10:19,000 --> 00:10:23,000 PHP-code wordt geëvalueerd of geïnterpreteerd server-side, 181 00:10:23,000 --> 00:10:27,000 en dus dat betekent dat de uitgang van de PHP script is wat uiteindelijk naar de browser, 182 00:10:27,000 --> 00:10:31,000 die in dit geval is wat rauwe HTML en kale tekst. 183 00:10:31,000 --> 00:10:33,000 Wat is hier aan de hand? 184 00:10:33,000 --> 00:10:37,000 >> Nou, met relatief weinig regels code kan ik op te slaan 185 00:10:37,000 --> 00:10:40,000 voortdurend in de loop van enkele seconden, of als we lang genoeg gewacht, 186 00:10:40,000 --> 00:10:44,000 minuten, zelfs uren, een bepaalde waarde op een manier die HTTP maakt 187 00:10:44,000 --> 00:10:47,000 lijken stateful alsof we behouden 188 00:10:47,000 --> 00:10:51,000 deze verbinding met de server, en het is gewoon herinneren wat ik het vertelde vorige keer, 189 00:10:51,000 --> 00:10:55,000 maar in werkelijkheid is er een hele hoop van complexiteit aan de hand onder de motorkap 190 00:10:55,000 --> 00:10:59,000 met betrekking tot cookies die is waardoor PHP om mij deze illusie 191 00:10:59,000 --> 00:11:02,000 van deze winkelwagentje-achtige functie. 192 00:11:02,000 --> 00:11:05,000 Voor nu, een triviaal voorbeeld waar we gewoon het opslaan van een geheel getal, 193 00:11:05,000 --> 00:11:08,000 maar die functie zal terugkeren naar zijn van grote waarde 194 00:11:08,000 --> 00:11:10,000 wanneer we beginnen te praten over meer complexe projecten, 195 00:11:10,000 --> 00:11:12,000 onder hen probleem te stellen 7. 196 00:11:12,000 --> 00:11:16,000 Dit is je allerlaatste probleem in CS50. 197 00:11:16,000 --> 00:11:19,000 Ik weet het, het is zo triest, maar wat je vindt is dat we gaan om te concluderen 198 00:11:19,000 --> 00:11:22,000 dit deel van het semester door daadwerkelijk de overgang 199 00:11:22,000 --> 00:11:25,000 uit de context van C zeker naar de context van PHP 200 00:11:25,000 --> 00:11:27,000 maar tijdens het gebruik van een aantal van de zeer dezelfde fundamenten 201 00:11:27,000 --> 00:11:29,000 We hebben gesproken over enige tijd. 202 00:11:29,000 --> 00:11:33,000 >> De doelstelling met PSET 7 is te implementeren CS50 Financiën, 203 00:11:33,000 --> 00:11:37,000 dat is je eigen versie van Yahoo Finance of Google Finance 204 00:11:37,000 --> 00:11:40,000 of zelfs Etrade.com waarbij je de mogelijkheid om 205 00:11:40,000 --> 00:11:43,000 kijk omhoog aandelenkoersen voor bepaalde symbolen, maar zelfs meer dan dat 206 00:11:43,000 --> 00:11:48,000 heb je de mogelijkheid om te "kopen" en "verkopen" voorraden 207 00:11:48,000 --> 00:11:51,000 die worden verhandeld op verschillende beurzen, want als deze home page 208 00:11:51,000 --> 00:11:55,000 hier doet vermoeden, dat is echt de mate waarin we begonnen 209 00:11:55,000 --> 00:11:59,000 het probleem set voor je, heb je een login formulier dat is vragen om een ​​gebruikersnaam en een wachtwoord. 210 00:11:59,000 --> 00:12:03,000 Het heeft een submit knop, maar daarna, zoals we zullen uiteindelijk zien, 211 00:12:03,000 --> 00:12:06,000 er is werkelijk niets aan de hand onder de kap nog, omdat het 212 00:12:06,000 --> 00:12:09,000 blijft voor u uit te voeren de mogelijkheid om nieuwe gebruikers te registreren, 213 00:12:09,000 --> 00:12:12,000 de mogelijkheid om aandelen te kopen, om de voorraden te verkopen, 214 00:12:12,000 --> 00:12:14,000 om daadwerkelijk opzoeken huidige aandelenkoersen. 215 00:12:14,000 --> 00:12:17,000 >> En inderdaad, dit zal zo echte wereld mogelijk, want we deden 216 00:12:17,000 --> 00:12:20,000 voorzien van een stukje code die u zal toestaan ​​met een enkele functie 217 00:12:20,000 --> 00:12:25,000 aan Yahoo Finance, die heerlijk is gratis verkrijgbaar gegevens opgevraagd 218 00:12:25,000 --> 00:12:31,000 voor het opzoeken van de aandelenkoersen op basis van de voorraad symbool of ticker symbool, 219 00:12:31,000 --> 00:12:34,000 en je krijgt weer de actuele koers van de dag. 220 00:12:34,000 --> 00:12:37,000 De gegevens die je eigenlijk ziet in deze specifieke PSET zal zijn 221 00:12:37,000 --> 00:12:40,000 ongeveer net zo echte wereld als het kan krijgen zodat je eigenlijk interfacing 222 00:12:40,000 --> 00:12:43,000 met echte aandelen wereldwijd, echte wereld prijzen, 223 00:12:43,000 --> 00:12:47,000 en we zullen zien hoeveel geld u wellicht kunt maken 224 00:12:47,000 --> 00:12:51,000 in de komende paar dagen van het spelen met uw eigen probleem set. 225 00:12:51,000 --> 00:12:55,000 >> Maar laten we eerst het podium voor hoe je iets dat is zeker ingewikkelder ontwerpen 226 00:12:55,000 --> 00:12:59,000 dan counter.php, dat is ingewikkelder dan een van de Frosh IM voorbeelden tot nu toe, 227 00:12:59,000 --> 00:13:02,000 en laten we hier proberen om een ​​paar paradigma's te introduceren die ons in staat 228 00:13:02,000 --> 00:13:06,000 zowel voor PSET 7 en misschien voor uw afstudeerproject als je op basis iets web 229 00:13:06,000 --> 00:13:11,000 om uw code goed georganiseerd, om jezelf gezond, 230 00:13:11,000 --> 00:13:15,000 en een stap in de richting van samenwerking te nemen, of het nu afstudeerproject CS50's 231 00:13:15,000 --> 00:13:18,000 of voorbij als u doorgaat met iets in de toekomst te programmeren. 232 00:13:18,000 --> 00:13:21,000 Er is een algemene ontwerp paradigma 233 00:13:21,000 --> 00:13:24,000 in de informatica en in software ontwikkeling in het algemeen 234 00:13:24,000 --> 00:13:27,000 bekend als MVC, model view controller, 235 00:13:27,000 --> 00:13:30,000 en dit is een domme acroniem dat een heel leuk idee beschrijft, 236 00:13:30,000 --> 00:13:34,000 dat de scheiding van verschillende aspecten van een programma, 237 00:13:34,000 --> 00:13:39,000 specifiek gescheiden houden van de logica of de business logica van een website 238 00:13:39,000 --> 00:13:42,000 zodat alles wat betreft zaken als 239 00:13:42,000 --> 00:13:45,000 belfuncties en databases te kunnen ondervragen en dergelijke 240 00:13:45,000 --> 00:13:48,000 gebeurt niet bij je HTML 241 00:13:48,000 --> 00:13:51,000 maar in aparte bestanden, en inderdaad, er is dit een bestand 242 00:13:51,000 --> 00:13:54,000 meestal dat u hebt gebeld de controller 243 00:13:54,000 --> 00:13:56,000 dat is echt het brein achter de operatie, en we zullen zien een voorbeeld 244 00:13:56,000 --> 00:13:58,000 van deze in slechts een moment. 245 00:13:58,000 --> 00:14:01,000 >> Er is een model dat het programmeren van code 246 00:14:01,000 --> 00:14:05,000 dat doet de praten met uw databases, die praat met Yahoo Finance en dergelijke, 247 00:14:05,000 --> 00:14:08,000 en dan is er de V in MVC, het uitzicht, 248 00:14:08,000 --> 00:14:11,000 al het spul dat met betrekking tot esthetiek, de bestanden die daadwerkelijk bevatten 249 00:14:11,000 --> 00:14:14,000 uw HTML, misschien je CSS en dergelijke. 250 00:14:14,000 --> 00:14:17,000 Het idee, aangezien dit beeld erop wijst, dat de controller 251 00:14:17,000 --> 00:14:21,000 is het bestand, zoals we zullen snel te zien en als je vooral zien in PSET 7, 252 00:14:21,000 --> 00:14:24,000 dat de wereld praat via hun webbrowsers. 253 00:14:24,000 --> 00:14:27,000 Dat is het bestand dat wordt bezocht op het publieke internet, 254 00:14:27,000 --> 00:14:30,000 maar de controller praat met mogelijk een model, 255 00:14:30,000 --> 00:14:34,000 dat een of meer bestanden die code gerelateerde gegevens bevatten, 256 00:14:34,000 --> 00:14:37,000 code met betrekking tot databases en dergelijke, en dan praat met 257 00:14:37,000 --> 00:14:40,000 de controller een of meer andere bestandjes uitzicht 258 00:14:40,000 --> 00:14:43,000 die de esthetiek van een webpagina, sjablonen van soorten, 259 00:14:43,000 --> 00:14:47,000 mogelijk bepaalde gegevens als invoer nemen, maar aan het eind van de dag 260 00:14:47,000 --> 00:14:50,000 de enige logica binnenkant van het oog moet de weergave van die gegevens zijn, 261 00:14:50,000 --> 00:14:53,000 itereren over een lus en eigenlijk uitspugen van een aantal 262 00:14:53,000 --> 00:14:56,000 HTML-gebaseerde weergave daarvan of zelfs zoiets als een PDF. 263 00:14:56,000 --> 00:14:59,000 >> Wat is er leuk over MVC is dat je kunt hebben verschillende weergaven 264 00:14:59,000 --> 00:15:02,000 op basis van het type apparaat, gebaseerd op het type bestand formaat dat u daadwerkelijk 265 00:15:02,000 --> 00:15:04,000 wil laten zien aan de gebruiker. 266 00:15:04,000 --> 00:15:10,000 Laten we eens een kijkje nemen op een paar geleidelijk meer complexe en goed ontworpen voorbeelden 267 00:15:10,000 --> 00:15:13,000 door te beginnen eerst met versie 0 hier. 268 00:15:13,000 --> 00:15:16,000 Laat me gaan en open te stellen in onze MVC directory vandaag 269 00:15:16,000 --> 00:15:21,000 een bestand met de naam index.php in de map: 0. 270 00:15:21,000 --> 00:15:26,000 Let op dit is een super eenvoudig en zeer underwhelming website 271 00:15:26,000 --> 00:15:29,000 dat is een soort van versie 0 van een homepage voor de CS50, 272 00:15:29,000 --> 00:15:32,000 en merk op hoe we een link naar Lezingen, we hebben een link naar Syllabus, 273 00:15:32,000 --> 00:15:35,000 en als ik volg de link naar Lezingen bericht dat de URL 274 00:15:35,000 --> 00:15:39,000 up top gaat veranderen aan lectures.php. 275 00:15:39,000 --> 00:15:44,000 Als ik dan op de link naar week 1 merk op dat de URL verandert in week1.php. 276 00:15:44,000 --> 00:15:46,000 Er lijkt een vrij eenvoudige hiërarchische structuur hier te zijn. 277 00:15:46,000 --> 00:15:49,000 >> Laten we eens een snelle blik onder de motorkap te nemen op hoe deze is aangelegd, 278 00:15:49,000 --> 00:15:53,000 en inderdaad, als ik kijk naar index.php het is vrij eenvoudig. 279 00:15:53,000 --> 00:15:57,000 In feite, zelfs al heb ik noemde dit een PHP-bestand is er geen werkelijke programmeercode. 280 00:15:57,000 --> 00:16:01,000 Er is een opmerking die ik hier schreef in PHP gewoon zo de gebruiker niet uiteindelijk te zien. 281 00:16:01,000 --> 00:16:05,000 Natuurlijk, als voorheen, alles wat er in tussen PHP-tags 282 00:16:05,000 --> 00:16:08,000 wordt geïnterpreteerd, ook al is het een reactie, en interpreteren een reactie 283 00:16:08,000 --> 00:16:11,000 betekent alleen maar om het weg te gooien aan het eind van de dag en niet echt 284 00:16:11,000 --> 00:16:15,000 stuur het naar de browser, dus alles hier is gewoon esthetiek. 285 00:16:15,000 --> 00:16:20,000 Als ik open net lectures.php ook dit is gewoon een hard gecodeerde bestand. 286 00:16:20,000 --> 00:16:23,000 Het gebeurt te noemen iets. Php, 287 00:16:23,000 --> 00:16:27,000 maar het is eigenlijk gewoon. html, en week1.php, week2.php 288 00:16:27,000 --> 00:16:31,000 vergelijkbaar zijn gewoon opmaak, dus er is een heleboel tekortkomingen van dit ontwerp. 289 00:16:31,000 --> 00:16:33,000 Een, het is een enorme hoeveelheid copy / paste. 290 00:16:33,000 --> 00:16:37,000 Hoewel het enige dat verandert onder deze bestanden is de ongeordende lijst, 291 00:16:37,000 --> 00:16:41,000 de li-tags, ik toch het pakket doc-type, HTML, hoofd, 292 00:16:41,000 --> 00:16:44,000 titel, in de buurt lichaam, in de buurt HTML en meer 293 00:16:44,000 --> 00:16:47,000 in elk bestand, wat betekent dat als ik ooit wil herstructureren om 294 00:16:47,000 --> 00:16:50,000 Deze webpagina of restylize het ik moet gaan en te veranderen 295 00:16:50,000 --> 00:16:54,000 al deze bestanden handmatig of met een massieve zoeken en vervangen. 296 00:16:54,000 --> 00:17:01,000 >> Laten we eens een stap in de richting van een slimmere, meer denken design in versie 1 hier 297 00:17:01,000 --> 00:17:04,000 waarbij volgens de read me dat we zo hebben begrepen dat u kunt meespelen met 298 00:17:04,000 --> 00:17:07,000 deze meer ontspannen thuis merken dat we hier hebben 299 00:17:07,000 --> 00:17:10,000 een overzicht van de bestanden in een versie van deze site, 300 00:17:10,000 --> 00:17:13,000 en het lijkt erop dat ik heb het op mij genomen om factor uit 301 00:17:13,000 --> 00:17:17,000 een aantal gemeenschappelijke code, header.php en footer.php. 302 00:17:17,000 --> 00:17:20,000 Nou, laten we een kijkje nemen op wat er in de eerste van deze. 303 00:17:20,000 --> 00:17:23,000 Header.php ziet er bekend uit, 304 00:17:23,000 --> 00:17:26,000 maar let op waar komt het krijgen afgesneden? 305 00:17:26,000 --> 00:17:30,000 Direct na lijn 19, dus dat is alles wat gebruikelijk was 306 00:17:30,000 --> 00:17:33,000 van de bestanden index.php, lectures.php, 307 00:17:33,000 --> 00:17:36,000 week1 en week2.php uit het vorige voorbeeld. 308 00:17:36,000 --> 00:17:40,000 Wat ik deed was kopiëren en knippen alles wat gebruikelijk was om al die bestanden, 309 00:17:40,000 --> 00:17:44,000 zet het in een apart header-bestand, en evenzo in footer.php 310 00:17:44,000 --> 00:17:48,000 heb ik passen dezelfde beginsel dat de enige interessante lijnen 311 00:17:48,000 --> 00:17:52,000 in footer.php zijn deze twee, dicht lichaam en dicht HTML. 312 00:17:52,000 --> 00:17:55,000 >> Wat dit betekent nu dat in de nieuwe versie 313 00:17:55,000 --> 00:17:59,000 van index.php merk op hoe veel eenvoudiger het kan krijgen. 314 00:17:59,000 --> 00:18:02,000 Toegegeven, een beetje meer cryptische kijken, een beetje minder intuïtief 315 00:18:02,000 --> 00:18:06,000 te volgen boven naar beneden, maar mijn God, dat alles redundantie is nu verdwenen. 316 00:18:06,000 --> 00:18:10,000 Wij eisen het gebruik van een PHP functie letterlijk opgeroepen nodig tot boven, 317 00:18:10,000 --> 00:18:15,000 dat is erg doet denken, herinneren, van C's # mechanisme op te nemen. 318 00:18:15,000 --> 00:18:17,000 Wij eisen dat header.php aan de top. 319 00:18:17,000 --> 00:18:20,000 Wij eisen footer.php aan de onderkant, en het enige dat anders is 320 00:18:20,000 --> 00:18:25,000 of bijzondere van dit bestand is de inhoud die is bedoeld om uniek te zijn om het te. 321 00:18:25,000 --> 00:18:29,000 Als ik ga dan in, zeg, lectures.php, hetzelfde principe geldt. 322 00:18:29,000 --> 00:18:32,000 Nogmaals, een aantal opmerkingen tot boven, maar dan heb ik nodig koptekst, voettekst vereisen, 323 00:18:32,000 --> 00:18:35,000 en tussen het is alleen de inhoud die daadwerkelijk is veranderd. 324 00:18:35,000 --> 00:18:38,000 En als we gekeken naar Week 1 en Week 2 zouden we zien 325 00:18:38,000 --> 00:18:42,000 dat hetzelfde principe was er toegepast. 326 00:18:42,000 --> 00:18:44,000 Nou, we er nog niet helemaal klaar. 327 00:18:44,000 --> 00:18:48,000 >> Laten we eens een kijkje nemen op versie 2, die een soortgelijke structuur heeft, 328 00:18:48,000 --> 00:18:50,000 maar nu merk ik heb iets anders geïntroduceerd. 329 00:18:50,000 --> 00:18:53,000 In regel 10 heb ik geïntroduceerd helpers.php, 330 00:18:53,000 --> 00:18:55,000 die bevat blijkbaar helper functies. 331 00:18:55,000 --> 00:18:58,000 Een helper functie is over het algemeen een relatief korte functie 332 00:18:58,000 --> 00:19:01,000 dat je schrijft om u te helpen op verschillende plaatsen, 333 00:19:01,000 --> 00:19:04,000 en laten we eens kijken wat er in helpers.php. 334 00:19:04,000 --> 00:19:07,000 In dit geval, het lijkt alsof het heeft 2 functies. 335 00:19:07,000 --> 00:19:10,000 Recall van de andere dag met onze kubus voorbeeld 336 00:19:10,000 --> 00:19:13,000 kunt u uw eigen functies in PHP, en wat ik heb nu gedaan is heb ik 337 00:19:13,000 --> 00:19:17,000 gedefinieerde functies genoemd maken footer en maken header, 338 00:19:17,000 --> 00:19:21,000 waarvan de eerste is een parameter data, 339 00:19:21,000 --> 00:19:25,000 waarvan de standaardwaarde is een lege array, omdat er gesuggereerd, 340 00:19:25,000 --> 00:19:29,000 en we kunnen eigenlijk dit schrijven nog beknopter in de nieuwste versie van PHP 341 00:19:29,000 --> 00:19:32,000 door te zeggen open plein beugel, gesloten vierkante haken. 342 00:19:32,000 --> 00:19:35,000 Dat betekent dat een lege array van grootte 0 maar toch een array. 343 00:19:35,000 --> 00:19:38,000 >> Dit extract functie is een beetje speciaal in die 344 00:19:38,000 --> 00:19:41,000 wat het doet is het neemt als argument een associatieve array 345 00:19:41,000 --> 00:19:45,000 dat heeft 0 of meer essentiële waarde-paren, en als je een sleutel van foo 346 00:19:45,000 --> 00:19:48,000 en een waarde van de bar van het extract functie 347 00:19:48,000 --> 00:19:51,000 creëert een situatie die nu als van lijn 11, 348 00:19:51,000 --> 00:19:57,000 u een lokale variabele genaamd $ foo waarvan de waarde bar. 349 00:19:57,000 --> 00:19:59,000 En als u meer sleutels en waarden hadden in de data array, 350 00:19:59,000 --> 00:20:03,000 eveneens zouden ze worden uitgepakt in de lokale scope 351 00:20:03,000 --> 00:20:06,000 of de naam van de ruimte, zodat footer.php en 352 00:20:06,000 --> 00:20:09,000 hetzelfde idee hier beneden, zodat header.php 353 00:20:09,000 --> 00:20:12,000 toegang tot deze variabelen. 354 00:20:12,000 --> 00:20:15,000 In feite, laat me weer open te stellen header.php 355 00:20:15,000 --> 00:20:18,000 en de aandacht vestigen op nu hoe het eruit ziet in deze versie. 356 00:20:18,000 --> 00:20:22,000 >> In plaats van harde codering CS50 als titel voor elke pagina 357 00:20:22,000 --> 00:20:24,000 let op de dynamiek die is nu mogelijk. 358 00:20:24,000 --> 00:20:29,000 In lijn 5 Ik ben echo een titel variabele, 359 00:20:29,000 --> 00:20:34,000 maar eerst ga ik langs die titel variabele naar een functie genaamd htmlspecialchars. 360 00:20:34,000 --> 00:20:38,000 Een domme naam voor een functie, zolang het is, maar het doet echt wat het zegt. 361 00:20:38,000 --> 00:20:41,000 Het zorgt ervoor dat geen speciale tekens 362 00:20:41,000 --> 00:20:46,000 in de string die is doorgegeven in goed escaped HTML. 363 00:20:46,000 --> 00:20:49,000 Dit is eigenlijk een manier om te voorkomen zoiets als een cross site scripting-aanval 364 00:20:49,000 --> 00:20:52,000 waarbij iemand kan kwaadwillig of per ongeluk 365 00:20:52,000 --> 00:20:55,000 injecteren hun eigen HTML in uw website 366 00:20:55,000 --> 00:20:59,000 door plakken in een vorm, bijvoorbeeld 367 00:20:59,000 --> 00:21:02,000 iets dat je niet helemaal verwacht, in het bijzonder JavaScript-code, 368 00:21:02,000 --> 00:21:05,000 zoals we over praten in een week of twee de tijd. 369 00:21:05,000 --> 00:21:08,000 >> Dit nu header.php, het is een uitzicht 370 00:21:08,000 --> 00:21:12,000 in de zin dat het u toestaat om esthetisch de inhoud van bepaalde gegevens set. 371 00:21:12,000 --> 00:21:14,000 Maar meer in het bijzonder, het is een sjabloon. 372 00:21:14,000 --> 00:21:19,000 Dit is een soort van een blauwdruk nu uit wat we willen de header van elke pagina om te kijken als, 373 00:21:19,000 --> 00:21:23,000 maar er is een aantal dynamiek in dat we de titel wilt dynamisch worden ingevoegd 374 00:21:23,000 --> 00:21:26,000 gebaseerd op de titel variabele 375 00:21:26,000 --> 00:21:30,000 dat werd gewonnen als we belden, nogmaals, 376 00:21:30,000 --> 00:21:33,000 de render header functie. 377 00:21:33,000 --> 00:21:36,000 Nu, als we keken naar render voettekst, is er eigenlijk niet veel nu gebruik van dat recht 378 00:21:36,000 --> 00:21:40,000 want in footer.php er geen dynamiek dan ook. 379 00:21:40,000 --> 00:21:43,000 Er kunnen, maar op dit moment is het een hard gecodeerde lijst van 2 tags, 380 00:21:43,000 --> 00:21:46,000 maar hetzelfde idee geldt, zodat in feite suggereert waarom 381 00:21:46,000 --> 00:21:49,000 hebben we tijd verspillen met een render-header en een render voettekst functie? 382 00:21:49,000 --> 00:21:52,000 Laat me nu maar gaan in versie 3, 383 00:21:52,000 --> 00:21:56,000 en in versie 3 in helpers heb ik besloten om het te vereenvoudigen zelfs meer. 384 00:21:56,000 --> 00:21:58,000 >> Laat me nog een render functie. 385 00:21:58,000 --> 00:22:02,000 Laat mij het nog een argument, dit keer genaamd sjabloon, 386 00:22:02,000 --> 00:22:05,000 die bedoeld is om de naam van een sjabloon, 387 00:22:05,000 --> 00:22:11,000 en dan zal ik aanmatigend samenvoegen. php om de waarde van die variabele, 388 00:22:11,000 --> 00:22:17,000 en dan als het bestaat foo.php, bar.php of header.php en footer.php, 389 00:22:17,000 --> 00:22:20,000 dan ga ik om verder te gaan en de variabele gegevens op te halen 390 00:22:20,000 --> 00:22:23,000 en dan moet dat pad. 391 00:22:23,000 --> 00:22:29,000 Met andere woorden, om nu met dit, als ik open index.php 392 00:22:29,000 --> 00:22:32,000 merken dat ik niet render header meer bellen. 393 00:22:32,000 --> 00:22:36,000 Ik noem te maken, maar ik pas in een genoteerde waarde van header 394 00:22:36,000 --> 00:22:39,000 om duidelijk te maken welke sjabloon ik eigenlijk wilt laden. 395 00:22:39,000 --> 00:22:41,000 >> Dan hier op wat ik doe. 396 00:22:41,000 --> 00:22:44,000 Ik passeren in dynamisch een sleutel van de titel, 397 00:22:44,000 --> 00:22:47,000 een waarde van CS50, en ook dit, zoals we eerder zagen, 398 00:22:47,000 --> 00:22:51,000 kunnen worden gemaakt beknopter in de nieuwste versie van PHP 399 00:22:51,000 --> 00:22:54,000 waar ik kan de plaats van de array functie met vierkante haken, 400 00:22:54,000 --> 00:22:57,000 die ik voorstel is nog beter leesbaar en zeker 401 00:22:57,000 --> 00:22:59,000 een beetje makkelijker te typen. 402 00:22:59,000 --> 00:23:02,000 En natuurlijk, met de render voettekst oproep aan de onderkant, 403 00:23:02,000 --> 00:23:05,000 we niet de moeite passeren in een tweede argument helemaal niet, geen associatieve array, 404 00:23:05,000 --> 00:23:07,000 want er is niets dynamische binnenkant van die voettekst. 405 00:23:07,000 --> 00:23:10,000 Het is gewoon een nauwe tags voor HTML. 406 00:23:10,000 --> 00:23:14,000 Goed, we nemen stappen op weg naar echt schoonmaken dingen hier, 407 00:23:14,000 --> 00:23:17,000 maar laat me open te stellen 2 def voorbeelden. 408 00:23:17,000 --> 00:23:21,000 Deze, nummer 4, mede dat ik heb een bewuste keuze nu gemaakt 409 00:23:21,000 --> 00:23:26,000 tot uitwerking van het vorige voorbeeld te verbeteren door eindelijk met behulp van enkele hiërarchie om mijn bestanden. 410 00:23:26,000 --> 00:23:29,000 >> Merk op dat in deze samenvatting, in dit leest mij, ik heb geïntroduceerd 411 00:23:29,000 --> 00:23:32,000 een omvat directory en een templates directory 412 00:23:32,000 --> 00:23:35,000 waarvan de inhoud zullen worden van de dingen die ik wil zijn 413 00:23:35,000 --> 00:23:38,000 en de sjablonen die ik wil, respectievelijk te maken,. 414 00:23:38,000 --> 00:23:42,000 Dit is echt me being anale en proberen om dingen netjes, 415 00:23:42,000 --> 00:23:45,000 bij elkaar te houden gerelateerde bestanden, maar het eindresultaat 416 00:23:45,000 --> 00:23:48,000 is dat we nu een iets netter setup hebben, maar we moeten nu niet vergeten 417 00:23:48,000 --> 00:23:51,000 in bijvoorbeeld index.php 418 00:23:51,000 --> 00:23:55,000 toen hebben we de file helpers.php 419 00:23:55,000 --> 00:24:01,000 moeten we nu nodig hebben via includes / helpers.php 420 00:24:01,000 --> 00:24:06,000 in plaats van alleen maar te zeggen helpers.php want nu is het eigenlijk in een subdirectory. 421 00:24:06,000 --> 00:24:09,000 Nu, als een terzijde, zie je in deze voorbeelden en enkele anderen 422 00:24:09,000 --> 00:24:11,000 functies zoals vereist eenmaal nodig. 423 00:24:11,000 --> 00:24:15,000 Er is eigenlijk een functie zelf heet zijn, en ze hebben allemaal iets anders gedrag. 424 00:24:15,000 --> 00:24:18,000 Hier zeg ik nodig een keer te maken super duidelijk zijn dat ik alleen wil die 425 00:24:18,000 --> 00:24:20,000 helpers in mijn project een keer. 426 00:24:20,000 --> 00:24:24,000 Maar als ik voorzichtig ben en als ik ben eigenlijk denken door mijn logica goed 427 00:24:24,000 --> 00:24:27,000 het moet ook gewoon volstaan ​​met te zeggen tot boven vereisen 428 00:24:27,000 --> 00:24:31,000 zolang ik zelf niet per ongeluk elders vereist dat hetzelfde bestand. 429 00:24:31,000 --> 00:24:34,000 In feite is dit een iets efficiëntere manier van doen dan met behulp van 430 00:24:34,000 --> 00:24:38,000 vereisen een keer, dus ik zal het trimmen tot slechts vereisen. 431 00:24:38,000 --> 00:24:40,000 >> Laten we nog een stap verder. 432 00:24:40,000 --> 00:24:46,000 Dit laatste voorbeeld nu, versie 5, heeft een nog schonere mappenstructuur. 433 00:24:46,000 --> 00:24:50,000 Let op wat ik hier heb gedaan per de mij lezen in deze definitieve versie 434 00:24:50,000 --> 00:24:54,000 is nu heb ik mijn HTML directory, die ik heb al die tijd had, 435 00:24:54,000 --> 00:24:58,000 maar binnen daar is nu alleen index.php, lectures.php, 436 00:24:58,000 --> 00:25:01,000 week1.php en week2.php. 437 00:25:01,000 --> 00:25:05,000 Het omvat directory woont nu samen met de HTML-directory, 438 00:25:05,000 --> 00:25:08,000 dus op hetzelfde niveau als een broer of zus, om zo te zeggen. 439 00:25:08,000 --> 00:25:10,000 Hetzelfde geldt voor de templates map. 440 00:25:10,000 --> 00:25:14,000 De sleutel mee te nemen is hier Ik heb een beetje meer structuur ingevoerd, 441 00:25:14,000 --> 00:25:17,000 maar dat de spil is nu dat alleen de bestanden 442 00:25:17,000 --> 00:25:21,000 die moeten worden web toegankelijk, publiek adresseerbare 443 00:25:21,000 --> 00:25:25,000 door een URL op het openbare internet zijn in mijn HTML-directory. 444 00:25:25,000 --> 00:25:28,000 >> Ondertussen andere bestanden, helpers.php, footer.php, 445 00:25:28,000 --> 00:25:32,000 header.php, dat zijn misschien wel misschien gevoeliger, 446 00:25:32,000 --> 00:25:35,000 misschien helpers heeft eigenlijk een aantal gebruikersnamen en wachtwoorden of andere intellectuele 447 00:25:35,000 --> 00:25:39,000 eigendom van mij, functioneert ik echt niet willen dat de wereld om te zien, zelfs als het per ongeluk. 448 00:25:39,000 --> 00:25:45,000 Het is een goede gewoonte om buiten te houden van het publiek HTML directory 449 00:25:45,000 --> 00:25:48,000 alle bestanden die niet hoeven zichzelf als het publiek. 450 00:25:48,000 --> 00:25:51,000 Het enige wat je hoeft te doen in dit geval als we kijken naar, bijvoorbeeld, 451 00:25:51,000 --> 00:25:55,000 de HTML-directory index.php bestand, 452 00:25:55,000 --> 00:25:58,000 merken we moeten gewoon een beetje meer voorzichtig zijn bij die 453 00:25:58,000 --> 00:26:00,000 of een keer nodig dit bestand. 454 00:26:00,000 --> 00:26:03,000 Ik moet eerst doen .. om naar de bovenliggende directory, 455 00:26:03,000 --> 00:26:06,000 kies dan / includes / helpers.php 456 00:26:06,000 --> 00:26:12,000 om terug naar beneden te duiken om het bestand dat ik de zorg over te krijgen. 457 00:26:12,000 --> 00:26:16,000 >> Hebt u vragen dan op MVC 458 00:26:16,000 --> 00:26:20,000 of deze relatief eenvoudige incarnatie daarvan? 459 00:26:20,000 --> 00:26:23,000 En laat me duidelijk maken dat we wel een beetje op de gerichte 460 00:26:23,000 --> 00:26:27,000 V hier, het uitzicht en de factoring uit deze sjablonen. 461 00:26:27,000 --> 00:26:30,000 We hebben niet echt onderscheiden M van C gewoon nog niet. 462 00:26:30,000 --> 00:26:33,000 In feite, is er echt geen M hier, en zelfs onze C, 463 00:26:33,000 --> 00:26:36,000 controller, is niet echt doen al veel, maar je krijgt veel meer 464 00:26:36,000 --> 00:26:39,000 vertrouwd zijn met deze beide 2 letters van MVC, 465 00:26:39,000 --> 00:26:43,000 of liever gezegd, krijg je veel meer vertrouwd met de C 466 00:26:43,000 --> 00:26:49,000 in MVC voor probleem set 7, dus er is meer van dat aan de horizon. 467 00:26:49,000 --> 00:26:51,000 Vragen? 468 00:26:51,000 --> 00:26:53,000 Er is eigenlijk niemand hier. 469 00:26:53,000 --> 00:26:57,000 >> Oke, laten we nu overgaan tot de tweede en laatste onderwerp voor vandaag. 470 00:26:57,000 --> 00:27:00,000 Dat is de introductie van een database. 471 00:27:00,000 --> 00:27:03,000 Tot op dit punt hebben we een paar manieren van het opslaan van gegevens. 472 00:27:03,000 --> 00:27:05,000 We hebben gebruikte variabelen. 473 00:27:05,000 --> 00:27:08,000 Terug in onze C-bestand, I / O-discussie zijn we begonnen met het gebruik van tekst-bestanden 474 00:27:08,000 --> 00:27:11,000 en het gebruik van bestanden zoals fprintf, en dan hebben we zelfs begonnen 475 00:27:11,000 --> 00:27:14,000 praten over CSV-bestanden een beetje, door komma's gescheiden waarden, 476 00:27:14,000 --> 00:27:17,000 dus al deze konden we hebben opgeslagen 477 00:27:17,000 --> 00:27:19,000 ofwel niet-aanhoudend of voortdurend. 478 00:27:19,000 --> 00:27:23,000 Maar zelfs CSV-bestanden zijn niet echt bevorderlijk voor het zoeken 479 00:27:23,000 --> 00:27:25,000 en het invoegen van en verwijderen. 480 00:27:25,000 --> 00:27:28,000 Het is eigenlijk gewoon een domme tekstbestand gescheiden door komma's 481 00:27:28,000 --> 00:27:30,000 rij voor rij op rij voor rij, dus als je wilt 482 00:27:30,000 --> 00:27:32,000 zoeken dat bestand echt het beste wat je kunt doen is lineair zoeken. 483 00:27:32,000 --> 00:27:34,000 Je moet beginnen aan de top van het bestand, lees het hele ding in, 484 00:27:34,000 --> 00:27:36,000 en zoek naar een zekere waarde van belang. 485 00:27:36,000 --> 00:27:39,000 Als u wilt invoegen in het moet je hetzelfde doen, 486 00:27:39,000 --> 00:27:41,000 itereren over het en het invoegen op een bepaalde plaats, 487 00:27:41,000 --> 00:27:45,000 en in feite, moet u al het zoeken logica zelf doen. 488 00:27:45,000 --> 00:27:49,000 >> Je kunt het niet slim patroon matching op een CSV-bestand, tenzij u zelf de code schrijven. 489 00:27:49,000 --> 00:27:51,000 Je kunt niet doen filtratie van een CSV-bestand 490 00:27:51,000 --> 00:27:53,000 tenzij u zelf de code schrijven. 491 00:27:53,000 --> 00:27:56,000 Zou het niet mooi zijn als iemand anders zetten in alle van de inspanning 492 00:27:56,000 --> 00:27:59,000 om daadwerkelijk het zoeken eenvoudig en gemakkelijk inbrengen 493 00:27:59,000 --> 00:28:01,000 en verwijdering en het bijwerken enzovoort? 494 00:28:01,000 --> 00:28:04,000 Dat is precies wat een database is. 495 00:28:04,000 --> 00:28:07,000 SQL, Structured Query Language, is nog een andere taal 496 00:28:07,000 --> 00:28:10,000 dat we hier introduceren vandaag, maar ook dit is vrij toegankelijk, 497 00:28:10,000 --> 00:28:13,000 en wat we echt gaan doen is gewoon uit rukken van het aantal van de meest opvallende 498 00:28:13,000 --> 00:28:16,000 kenmerken zodat voor PSET 7, en als je dat doet op basis iets web, 499 00:28:16,000 --> 00:28:19,000 je laatste project, heb je de mogelijkheid om jezelf te uiten 500 00:28:19,000 --> 00:28:22,000 op het gebied van data queries. 501 00:28:22,000 --> 00:28:25,000 U de mogelijkheid om een ​​kleine winkel of veel data 502 00:28:25,000 --> 00:28:28,000 in veel meer gestructureerd dat deze aan het eind van de dag 503 00:28:28,000 --> 00:28:32,000 uw leven gemakkelijker maken, want met SQL je jezelf kan uitdrukken 504 00:28:32,000 --> 00:28:35,000 veel nauwkeuriger, veel om methodisch 505 00:28:35,000 --> 00:28:40,000 weer een subset van gegevens van een groter corpus van data. 506 00:28:40,000 --> 00:28:45,000 >> U kunt denken aan een database, in dit geval, een SQL-database, echt als Excel 507 00:28:45,000 --> 00:28:48,000 of getallen waarbij het is een spreadsheet, 508 00:28:48,000 --> 00:28:50,000 of misschien meerdere spreadsheets, en een spreadsheet, natuurlijk, 509 00:28:50,000 --> 00:28:53,000 bestaat uit rijen en kolommen, en dat komt omdat 510 00:28:53,000 --> 00:28:56,000 SQL-databases zijn relationeel, relationeel in de zin 511 00:28:56,000 --> 00:28:59,000 dat ze gegevens opslaan op het gebied van deze tabellen, 512 00:28:59,000 --> 00:29:01,000 rijen en kolommen. 513 00:29:01,000 --> 00:29:03,000 Ze zijn beter presterende dan iets als een spreadsheet, 514 00:29:03,000 --> 00:29:05,000 en een spreadsheet is bedoeld voor gebruik door een mens. 515 00:29:05,000 --> 00:29:08,000 Een database is bedoeld voor gebruik door een programmeur 516 00:29:08,000 --> 00:29:12,000 het schrijven van code tegen, zodat de incarnatie van een database 517 00:29:12,000 --> 00:29:14,000 gaat om ofwel command line zijn. 518 00:29:14,000 --> 00:29:18,000 >> Een van de meest populaire relationele databases die er is, nogmaals, MySQL, 519 00:29:18,000 --> 00:29:22,000 die heerlijk vrij, zeer hoge presterende, en dit is wat 520 00:29:22,000 --> 00:29:24,000 Facebook gebruikt heel vroeg op en tot op zekere hoogte nog steeds 521 00:29:24,000 --> 00:29:27,000 om veel van zijn gegevens op te slaan, en we zullen zien in een ogenblik 522 00:29:27,000 --> 00:29:30,000 dat met relatief eenvoudige commando 523 00:29:30,000 --> 00:29:33,000 kunnen we gegevens selecteren, invoegen van gegevens, update-gegevens, 524 00:29:33,000 --> 00:29:37,000 verwijderen van gegevens en dergelijke, maar gelukkig is er een meer gebruiksvriendelijke interface 525 00:29:37,000 --> 00:29:39,000 dan alleen maar te typen op een zwart-wit prompt hier. 526 00:29:39,000 --> 00:29:43,000 We gebruiken voor PSET 7 en dan een gratis tool genaamd phpMyAdmin. 527 00:29:43,000 --> 00:29:45,000 De naam is toeval. 528 00:29:45,000 --> 00:29:47,000 De tool toevallig worden geïmplementeerd in PHP, 529 00:29:47,000 --> 00:29:49,000 maar dat is fundamenteel niet relevant. 530 00:29:49,000 --> 00:29:53,000 Wat is handig over phpMyAdmin is dat het een web-based programma. 531 00:29:53,000 --> 00:29:55,000 We hebben vooraf geïnstalleerd in het apparaat voor u, 532 00:29:55,000 --> 00:29:58,000 en daarmee kunt u tabellen in een database, 533 00:29:58,000 --> 00:30:01,000 U kunt gegevens, gegevens wissen, en in het algemeen zien 534 00:30:01,000 --> 00:30:04,000 uw gegevens in een vrij gebruiksvriendelijke omgeving. 535 00:30:04,000 --> 00:30:07,000 Uw gebruikers zijn niet van plan om phpMyAdmin te gebruiken. 536 00:30:07,000 --> 00:30:09,000 >> Dit is eigenlijk gewoon een administratieve of ontwikkelaar's tool 537 00:30:09,000 --> 00:30:12,000 waarmee te zien en te porren rond uw gegevens en hoe te om het structureren achterhalen, 538 00:30:12,000 --> 00:30:15,000 net zoals je jezelf zou kunnen gebruiken Excel of Numbers, 539 00:30:15,000 --> 00:30:19,000 maar het gaat om een ​​geweldige manier om te visualiseren wat er onder de motorkap te 540 00:30:19,000 --> 00:30:22,000 zodat u zich kunt concentreren op de interessante problemen op te lossen en niet zozeer 541 00:30:22,000 --> 00:30:25,000 op de mysterieuze opdrachten. 542 00:30:25,000 --> 00:30:28,000 Laten we eens een kijkje nemen op een voorbeeld van gegevens die tabularly kunnen worden opgeslagen 543 00:30:28,000 --> 00:30:30,000 in een relationele database. 544 00:30:30,000 --> 00:30:32,000 Hier is een voorbeeld van. 545 00:30:32,000 --> 00:30:35,000 Nu, helaas, phpMyAdmin gedwaald aan de kant van het gooien van veel te veel woorden 546 00:30:35,000 --> 00:30:38,000 en afbeeldingen naar je, maar als je gewoon slijpen op de 547 00:30:38,000 --> 00:30:42,000 ID-kolom, de gebruikersnaam kolom en de hash kolom, 548 00:30:42,000 --> 00:30:45,000 Dit is in feite een spreadsheet, maar het gebeurt te zijn een fragment 549 00:30:45,000 --> 00:30:49,000 van een tabel binnenkant van het apparaat 550 00:30:49,000 --> 00:30:53,000 met behulp van een bestand dat wij u voorzien van in probleem set 7. 551 00:30:53,000 --> 00:30:57,000 >> In het bijzonder geven we u een bestand dat is 552 00:30:57,000 --> 00:31:01,000 van een gebruiker tafel, dus een spreadsheet met gebruikers met 3 kolommen, 553 00:31:01,000 --> 00:31:05,000 waarvan een unieke ID 1 begint en wordt daarna verhoogd. 554 00:31:05,000 --> 00:31:08,000 De tweede kolom is een gebruikersnaam en degenen onder u die wel Hacker, 555 00:31:08,000 --> 00:31:12,000 de Hacker editie voor PSET 2, Misschien herkent een aantal van deze gebruikersnamen op zijn minst. 556 00:31:12,000 --> 00:31:16,000 Aan de rechterkant zijn wachtwoorden, maar ze zijn niet letterlijk wachtwoorden. 557 00:31:16,000 --> 00:31:19,000 Ze zijn hashes daarvan, zo blijkt 558 00:31:19,000 --> 00:31:22,000 dat het opslaan van wachtwoorden in een database is een heel slecht idee. 559 00:31:22,000 --> 00:31:25,000 Jullie hebben allemaal kunnen lezen op een bepaald punt van een aantal website 560 00:31:25,000 --> 00:31:28,000 of een bedrijf databank in gevaar wordt gebracht, en dan moet je 561 00:31:28,000 --> 00:31:31,000 uw wachtwoord wijzigen, moet u restitutie krijgen op dingen 562 00:31:31,000 --> 00:31:34,000 omdat sommige slechte kerel eigenlijk brak in uw account als gevolg. 563 00:31:34,000 --> 00:31:38,000 >> Het opslaan van wachtwoorden in leesbare tekst, ongecodeerde in een database 564 00:31:38,000 --> 00:31:41,000 is volledig stompzinnige, en toch is het zeer vermakelijk 565 00:31:41,000 --> 00:31:44,000 vervolgens om te lezen over een aantal zeer gerenommeerde bedrijven 566 00:31:44,000 --> 00:31:47,000 soms in de pers waarvan de databanken gecompromitteerd, 567 00:31:47,000 --> 00:31:50,000 en dat deel is niet grappig, maar het feit dat de databases bevatten niet-versleutelde 568 00:31:50,000 --> 00:31:53,000 wachtwoorden is belachelijk, want letterlijk met een regel code 569 00:31:53,000 --> 00:31:57,000 je kan beschermen tegen die bepaalde dreiging, en dat is wat we hier hebben gedaan. 570 00:31:57,000 --> 00:32:00,000 Zelfs voor onze nep kleine CS50 Financiën versie 571 00:32:00,000 --> 00:32:03,000 we zijn het versleutelen van wachtwoorden gewoon voor een goede maatregel, en het feit dat 572 00:32:03,000 --> 00:32:07,000 al deze wachtwoorden te beginnen met $ 1 $ is slechts een conventie. 573 00:32:07,000 --> 00:32:10,000 Dat betekent gewoon dat ze gecodeerd of echt hashed, 574 00:32:10,000 --> 00:32:13,000 die is als een one-way encryptie-functie 575 00:32:13,000 --> 00:32:17,000 waarbij je niet naar achteren kunt de effecten ervan met iets genaamd MD5. 576 00:32:17,000 --> 00:32:21,000 >> Aangezien 50 is daarna betekent dat een zout waarde 577 00:32:21,000 --> 00:32:24,000 van 50 werd gebruikt voor hashing al deze wachtwoorden behalve een. 578 00:32:24,000 --> 00:32:27,000 Mine, natuurlijk, zoals je daar kunt zien, HA, 579 00:32:27,000 --> 00:32:30,000 was het gebruik van een ander zout, zodat degenen onder u die een beetje werd struikelen 580 00:32:30,000 --> 00:32:33,000 misschien in Hacker 2, zou dat geweest zijn het resultaat van onze te hebben gebruikt 581 00:32:33,000 --> 00:32:36,000 een andere hash dan de anderen, want mijn wachtwoord is eigenlijk hetzelfde 582 00:32:36,000 --> 00:32:38,000 als een andere gebruiker daar. 583 00:32:38,000 --> 00:32:41,000 In feite, als je hebt gewacht al die weken om uit te vinden 584 00:32:41,000 --> 00:32:44,000 wat die wachtwoorden werden hier waren de wachtwoorden die u werden uitgedaagd 585 00:32:44,000 --> 00:32:48,000 te kraken in de Hacker editie van het probleem set 2, dus niet al te lastig. 586 00:32:48,000 --> 00:32:50,000 In feite Malans was hetzelfde als jharvard, 587 00:32:50,000 --> 00:32:54,000 maar als we terug gaan ze er anders uitzagen. 588 00:32:54,000 --> 00:32:58,000 >> Focus op jharvard in karmozijnrood, omdat ze anders werden gezouten. 589 00:32:58,000 --> 00:33:01,000 Het algoritme werd verstoord op een manier die de 590 00:33:01,000 --> 00:33:05,000 hash-waarde, de versleutelde waarde gaat een beetje anders 591 00:33:05,000 --> 00:33:08,000 omdat de ingangen waren iets anders, maar het wachtwoord onder de motorkap 592 00:33:08,000 --> 00:33:10,000 was nog steeds uiteindelijk crimson. 593 00:33:10,000 --> 00:33:12,000 Nu, die geeft om dit? 594 00:33:12,000 --> 00:33:15,000 Nou, we zijn u te voorzien van het monster gebruikers, het monster gebruikersnamen 595 00:33:15,000 --> 00:33:18,000 en hashes van hun wachtwoorden, zodat je eigenlijk een aantal 596 00:33:18,000 --> 00:33:23,000 klanten voor CS50 Financiën als u voor het eerst de grond te krijgen met uw code. 597 00:33:23,000 --> 00:33:27,000 Je moet meer tabellen implementeren binnenkant van MySQL, de binnenkant van de database. 598 00:33:27,000 --> 00:33:30,000 Je moet meer spreadsheets te maken, effectief, maar we besloten om u deze 599 00:33:30,000 --> 00:33:33,000 om mee te beginnen, en je zult zien dat het probleem set specificatie 600 00:33:33,000 --> 00:33:37,000 loopt u door het proces van het importeren van deze tabel 601 00:33:37,000 --> 00:33:39,000 en ook uit te leggen wat een aantal van de kenmerken, 602 00:33:39,000 --> 00:33:41,000 en je zult ook zien dat we u voorzien van de code 603 00:33:41,000 --> 00:33:44,000 aan de hashing of de codering van deze wachtwoorden te behandelen, 604 00:33:44,000 --> 00:33:49,000 dus je hoeft niet al te veel zorgen te maken over wat MD5 of iets dergelijks is eigenlijk allemaal om draait. 605 00:33:49,000 --> 00:33:53,000 >> Dus, SQL, Structured Query Language. 606 00:33:53,000 --> 00:33:56,000 Dit is, heel eenvoudig, de taal die we staan ​​op het punt om met behulp van start in PSET 7 607 00:33:56,000 --> 00:34:01,000 en misschien daarbuiten om gegevens uit een database aan te vragen. 608 00:34:01,000 --> 00:34:06,000 De gegevens worden, nogmaals, tabularly opgeslagen in deze relationele tabellen, kolommen en rijen, 609 00:34:06,000 --> 00:34:09,000 maar met behulp van enkele relatief eenvoudige syntax als verwijder, 610 00:34:09,000 --> 00:34:12,000 invoegen, bijwerken en selecteer kunnen we doen precies dat. 611 00:34:12,000 --> 00:34:15,000 We kunnen verwijderen uit de database, invoegen, 612 00:34:15,000 --> 00:34:19,000 gegevens te wijzigen, evenals select, dat wil zeggen, gegevens ophalen uit de database. 613 00:34:19,000 --> 00:34:21,000 Hoe gaan we dat doen? 614 00:34:21,000 --> 00:34:23,000 Laat me gaan in het apparaat. 615 00:34:23,000 --> 00:34:28,000 Laat me pull up http://localhost, 616 00:34:28,000 --> 00:34:30,000 die weer is het lokale apparaat zelf. 617 00:34:30,000 --> 00:34:32,000 Dat is de standaard bijnaam. 618 00:34:32,000 --> 00:34:35,000 En laat mij gaan naar / phpmyadmin. 619 00:34:35,000 --> 00:34:39,000 Dit gebeurt om een ​​speciale URL dat het apparaat is vooraf geconfigureerd om te begrijpen 620 00:34:39,000 --> 00:34:42,000 dat vraagt ​​me meteen voor een gebruikersnaam en wachtwoord. 621 00:34:42,000 --> 00:34:46,000 >> Zoals gewoonlijk, ik ga jharvard en karmozijn typen, 622 00:34:46,000 --> 00:34:48,000 maar beseffen dat is de Administrator-account op de computer. 623 00:34:48,000 --> 00:34:53,000 Het is gewoon toeval dat er ook een jharvard geregistreerd voor CS50 Financiën. 624 00:34:53,000 --> 00:34:56,000 Jharvard, karmozijnrood, enter geeft mij de user interface die we zagen 625 00:34:56,000 --> 00:34:59,000 een glimp van een moment geleden, en het is een beetje overweldigend op het eerste, 626 00:34:59,000 --> 00:35:02,000 maar wees gerust, je bent nooit te hebben om de meeste van de links klikt in deze tool. 627 00:35:02,000 --> 00:35:05,000 Je zult uiteindelijk met behulp van een kleine subset die zijn super vriendelijk, 628 00:35:05,000 --> 00:35:08,000 waarvan de eerste is databases hier. 629 00:35:08,000 --> 00:35:11,000 Als ik tot databanken, merken dat ik gevraagd om een ​​database te maken. 630 00:35:11,000 --> 00:35:14,000 Dit is zoals het maken van een nieuw Excel-bestand, effectief. 631 00:35:14,000 --> 00:35:18,000 Ik ga om verder te gaan en deze lezing te bellen, en ik ga gewoon naar het veld daar, collatie negeren. 632 00:35:18,000 --> 00:35:20,000 Het heeft te maken met daarin het weergeven van gegevens, 633 00:35:20,000 --> 00:35:24,000 en ik ga om te klikken te maken, en nu merk als ik loslaat creëren 634 00:35:24,000 --> 00:35:27,000 aan de linkerkant waar het zegt geen databases 635 00:35:27,000 --> 00:35:30,000 Ik moet binnenkort de lezing database. 636 00:35:30,000 --> 00:35:32,000 >> Als ik nu klik op de linkerkant, de lezing database, 637 00:35:32,000 --> 00:35:34,000 merkt mijn tabbladen veranderen een beetje. 638 00:35:34,000 --> 00:35:38,000 Ik heb structuur, SQL, export, import en enkele andere dingen. 639 00:35:38,000 --> 00:35:40,000 Structuur is vrij veel leeg. 640 00:35:40,000 --> 00:35:43,000 Geen tabellen gevonden in de database, zoals hier staat, 641 00:35:43,000 --> 00:35:47,000 dus laten we een tabel maken, en laten we verder gaan en een tabel maken 642 00:35:47,000 --> 00:35:53,000 zoals studenten, en hoeveel kolommen willen we? 643 00:35:53,000 --> 00:35:55,000 Laten we dit eenvoudig, en laten we record voor elke student 644 00:35:55,000 --> 00:35:58,000 een ID-nummer, een naam, en een e-mailadres. 645 00:35:58,000 --> 00:36:02,000 >> We zullen het simpel te houden als dat, dus 3 kolommen, gaan. 646 00:36:02,000 --> 00:36:05,000 Het formulier dat u hier ziet is nu een beetje rommelig en overweldigend, 647 00:36:05,000 --> 00:36:08,000 maar we moeten er doorheen rij gaan rij, dus echt snel laten we 648 00:36:08,000 --> 00:36:14,000 de eerste kolom in deze database een naam van ID voor de unieke identificatie. 649 00:36:14,000 --> 00:36:17,000 Het een integer is. Ik kan eigenlijk negeren lengte en waarden. 650 00:36:17,000 --> 00:36:21,000 Een int gaat worden 32 bits niet uit wat je typt daar, dus laten we deze leeg laten. 651 00:36:21,000 --> 00:36:24,000 Standaardwaarde, kon ik het null, zoals gedefinieerd. 652 00:36:24,000 --> 00:36:27,000 Ik ga dat met rust te laten. Laten we niet zorgen te maken over de standaardwaarden. 653 00:36:27,000 --> 00:36:29,000 Laten we scrollen hier naar rechts, attributen. 654 00:36:29,000 --> 00:36:31,000 Dit is interessant. 655 00:36:31,000 --> 00:36:33,000 Laten we verder gaan en enigszins willekeurig zeggen dat ID's moeten ondertekend zijn. 656 00:36:33,000 --> 00:36:35,000 Laten we er geen gras over negatieve getallen. 657 00:36:35,000 --> 00:36:37,000 >> Laten we 0 tot 4 miljard, geven of te nemen, 658 00:36:37,000 --> 00:36:40,000 en dan laten we niet een van deze velden te raken gewoon nog niet daar, 659 00:36:40,000 --> 00:36:43,000 maar dan laat ik typ in de naam van hier beneden, 660 00:36:43,000 --> 00:36:46,000 en dan de andere email is, zodat de vangst email is 661 00:36:46,000 --> 00:36:50,000 en naam, natuurlijk niet gehele getallen, dus laten we deze veranderen naar een ander veld. 662 00:36:50,000 --> 00:36:53,000 Het blijkt varchar, variabele lengte char, 663 00:36:53,000 --> 00:36:56,000 is als een string in een SQL-database 664 00:36:56,000 --> 00:36:59,000 maar een variabele lengte, en je eigenlijk moet het hem vertellen van te voren de 665 00:36:59,000 --> 00:37:02,000 maximale lengte van de string, dus ik ga enigszins arbitrair 666 00:37:02,000 --> 00:37:05,000 volgens afspraak soort 255 tekens. 667 00:37:05,000 --> 00:37:08,000 Ik kon helemaal zeggen 32. Ik zou kunnen zeggen 1.000. 668 00:37:08,000 --> 00:37:11,000 Je gebaseerd soort van behoefte om te beslissen voor jezelf op je demografische wat 669 00:37:11,000 --> 00:37:14,000 de langste leerling de naam en ga met dat nummer of een beetje groter, 670 00:37:14,000 --> 00:37:17,000 maar wat er leuk is aan een varchar is dat het niet gaat om afval 671 00:37:17,000 --> 00:37:19,000 255 bytes op de naam van iedere student. 672 00:37:19,000 --> 00:37:23,000 Als het DAVID dat het niet gaat om een ​​hele 255 bytes gebruiken, 673 00:37:23,000 --> 00:37:26,000 maar dat is een bovengrens, dus ik zal met 255 gaan gewoon volgens afspraak, 674 00:37:26,000 --> 00:37:30,000 maar we konden debatteren dat om wat lagere waarde zijn, en voor e-mail adres 675 00:37:30,000 --> 00:37:34,000 alleen maar om consequent 255, maar nogmaals, we kunnen dezelfde debat. 676 00:37:34,000 --> 00:37:36,000 Maar ik ga nog iets doen hier aan de rechter kant. 677 00:37:36,000 --> 00:37:40,000 >> Wat is krachtig over een database is dat het kan doen een heleboel zwaar tillen 678 00:37:40,000 --> 00:37:42,000 of complexe werk voor u. 679 00:37:42,000 --> 00:37:46,000 In het bijzonder, heb ik echt niet schelen wat mijn student ID-nummers zijn. 680 00:37:46,000 --> 00:37:49,000 Het is gewoon bedoeld als een unieke identificatie in een database worden 681 00:37:49,000 --> 00:37:52,000 dus ik heb een 32-bits beknopte weergave van die student 682 00:37:52,000 --> 00:37:55,000 zodat ik een of andere manier van uniek om ze te identificeren 683 00:37:55,000 --> 00:37:58,000 opdat er 2 Davids, bijvoorbeeld in een klas. 684 00:37:58,000 --> 00:38:01,000 In feite, ik ga deze AI box, auto increment controleren, 685 00:38:01,000 --> 00:38:04,000 zodat de database, MySQL, cijfers uit 686 00:38:04,000 --> 00:38:08,000 wat elke nieuw geplaatste student ID gaat worden. 687 00:38:08,000 --> 00:38:11,000 Ik weet niet eens zorgen te maken over die zorg in mijn code, 688 00:38:11,000 --> 00:38:13,000 en ik ga ook iets kiezen onder de index menu. 689 00:38:13,000 --> 00:38:17,000 De index hier drop-down is primair, unieke, 690 00:38:17,000 --> 00:38:19,000 index en de volledige tekst. 691 00:38:19,000 --> 00:38:21,000 U kunt misschien raden wat een paar van deze dingen zijn, 692 00:38:21,000 --> 00:38:24,000 maar het blijkt in relationele databases 693 00:38:24,000 --> 00:38:28,000 u de programmeur of de databasebeheerder krijgen om preventief 694 00:38:28,000 --> 00:38:32,000 geven tips om de database over wat velden 695 00:38:32,000 --> 00:38:34,000 in een tabel zijn een beetje speciaal. 696 00:38:34,000 --> 00:38:37,000 >> Bijvoorbeeld, in dit geval ga ik dat ID zeggen 697 00:38:37,000 --> 00:38:42,000 wordt een primaire index, ook wel bekend als primaire sleutel. 698 00:38:42,000 --> 00:38:44,000 Wat dit betekent per definitie dat ID voortaan 699 00:38:44,000 --> 00:38:48,000 zal uniek te identificeren studenten in deze tabel. 700 00:38:48,000 --> 00:38:53,000 Geen student zal dezelfde ID hebben, want ik ben opleggen van deze beperking of deze index. 701 00:38:53,000 --> 00:38:55,000 Bovendien, wat deze gaat doen voor mij is dat het gaat vertellen 702 00:38:55,000 --> 00:38:58,000 MySQL dat ID is bijzonder. 703 00:38:58,000 --> 00:39:03,000 Ik geef in het bijzonder over ID, dus ga je gang en doe je mooie datastructuur's magie, 704 00:39:03,000 --> 00:39:05,000 bouwen een soort boom. 705 00:39:05,000 --> 00:39:08,000 Typisch het is iets genaamd de B-boom, die we niet geleden te kijken naar weken, 706 00:39:08,000 --> 00:39:11,000 maar het is een andere dergelijke datastructuur in dezelfde geest aan de binaire bomen 707 00:39:11,000 --> 00:39:15,000 en probeert die we bekeken, maar het gaat om te zeggen 708 00:39:15,000 --> 00:39:18,000 aan de database dit veld is zo belangrijk dat ik waarschijnlijk 709 00:39:18,000 --> 00:39:22,000 willen kunnen zoeken op het, ga je gang en bouwen een aantal mooie 710 00:39:22,000 --> 00:39:25,000 datastructuur in het geheugen om zoekopdrachten te versnellen, zodat idealiter 711 00:39:25,000 --> 00:39:28,000 ze zijn constante tijd of in ieder geval zo dicht mogelijk bij die mogelijk 712 00:39:28,000 --> 00:39:32,000 zodat het niet evolueren in lineair zoeken, dat niet zal worden 713 00:39:32,000 --> 00:39:34,000 de meest high performing aanpak. 714 00:39:34,000 --> 00:39:37,000 Daarentegen kan e-mail adres zijn een primaire sleutel. 715 00:39:37,000 --> 00:39:41,000 >> In theorie ieders e-mailadres is uniek, tenzij je enigszins rekening te delen, 716 00:39:41,000 --> 00:39:45,000 maar het is over het algemeen niet goed te gebruiken iets als een string 717 00:39:45,000 --> 00:39:49,000 als primaire sleutel, want als zijn doel in het leven is voor de unieke identificatie 718 00:39:49,000 --> 00:39:55,000 rijen in de tabel is er geen reden om maximaal te gebruiken 255 bytes 719 00:39:55,000 --> 00:39:58,000 voor de unieke identificatie iemand als je weg kan komen met slechts 4 bytes 720 00:39:58,000 --> 00:40:00,000 of een 32-bits int. 721 00:40:00,000 --> 00:40:03,000 In het algemeen moet een primaire sleutel kort en bondig 722 00:40:03,000 --> 00:40:07,000 en idealiter iets als een geheel getal of een grote int, die toevallig ook 64 bits. 723 00:40:07,000 --> 00:40:11,000 Maar een e-mailadres moet uniek zijn, en een van de kenmerken van een database te 724 00:40:11,000 --> 00:40:14,000 is om uniciteit af te dwingen voor mij. 725 00:40:14,000 --> 00:40:18,000 Door het selecteren van unieke hier naast e-mail, ook al is e-mail zelf 726 00:40:18,000 --> 00:40:21,000 wordt het scherm rolde, ik zeg tot de database 727 00:40:21,000 --> 00:40:23,000 vertrouwt me niet. 728 00:40:23,000 --> 00:40:26,000 Laat me niet invoegen in de database 729 00:40:26,000 --> 00:40:29,000 hetzelfde e-mailadres twee keer, ook al ben ik een idioot en ik ben niet 730 00:40:29,000 --> 00:40:32,000 heel goed met mijn mitsen en anders mitsen en werkelijke PHP-code 731 00:40:32,000 --> 00:40:37,000 en ik per ongeluk laat de gebruiker zich registreert bij een bestaand e-mailadres 732 00:40:37,000 --> 00:40:40,000 de database is nog een ander niveau van de verdediging op juistheid 733 00:40:40,000 --> 00:40:44,000 om ervoor te zorgen dat die dubbele e-mailadres niet eindigen in de tabel. 734 00:40:44,000 --> 00:40:49,000 >> Nu, daarentegen, naar de naam van je waarschijnlijk niet wilt dat uniek maken 735 00:40:49,000 --> 00:40:51,000 want dan zou er nooit twee Davids of 2 Mike Smiths, bijvoorbeeld, 736 00:40:51,000 --> 00:40:55,000 in uw database, zodat men we gewoon met rust laten. 737 00:40:55,000 --> 00:40:58,000 Ik ga om verder te gaan en op te slaan onderaan klik met de rechtermuisknop, 738 00:40:58,000 --> 00:41:02,000 en alles ziet er goed uit, maar hier merken up 739 00:41:02,000 --> 00:41:04,000 Dit is een onderdeel dat voor nu zullen we niet te veel tijd te besteden aan 740 00:41:04,000 --> 00:41:07,000 omdat de syntax is een beetje ingewikkeld, en we hebben niet om tabellen te maken 741 00:41:07,000 --> 00:41:10,000 zo vaak, maar SQL zelf is een taal, 742 00:41:10,000 --> 00:41:13,000 de syntaxis voor wat recht is hier dat ik heb gemarkeerd. 743 00:41:13,000 --> 00:41:18,000 Wat phpMyAdmin echt doet is het creëert een web-based GUI voor u 744 00:41:18,000 --> 00:41:23,000 waarmee u tijd besparen en niet handmatig hoeft te typen uit 745 00:41:23,000 --> 00:41:26,000 een vrij lange SQL-query als dat. 746 00:41:26,000 --> 00:41:29,000 >> Met andere woorden, als je wilde het handmatig maken van deze tabel, 747 00:41:29,000 --> 00:41:32,000 hetzij op die zwarte en witte prompt of zelfs in phpMyAdmin 748 00:41:32,000 --> 00:41:35,000 door het gebruik van deze andere tab, deze SQL-tabblad waar u kunt typen in een SQL-query's 749 00:41:35,000 --> 00:41:38,000 je wilt, eerlijk gezegd, dit zou hebben genomen me een minuut 750 00:41:38,000 --> 00:41:41,000 om daadwerkelijk herinner me de hele syntax, en zelfs dan zou ik waarschijnlijk hebben 751 00:41:41,000 --> 00:41:45,000 maakte een aantal typefouten, dus deze tool is handig voor dat soort dingen, en het is ook leerzaam. 752 00:41:45,000 --> 00:41:49,000 U kunt beginnen af ​​te leiden wat de syntax is 753 00:41:49,000 --> 00:41:52,000 alleen door de mooie kleur codering die phpMyAdmin is het toevoegen van 754 00:41:52,000 --> 00:41:54,000 voor onze visuele comfort. 755 00:41:54,000 --> 00:41:56,000 Maar nu laten we dit doen in plaats daarvan. 756 00:41:56,000 --> 00:42:00,000 Laat me naar het tabblad Invoegen boven, en laat mij ga je gang en steek bijvoorbeeld 757 00:42:00,000 --> 00:42:04,000 een ID van laten we zeggen-eigenlijk kan me niet schelen. 758 00:42:04,000 --> 00:42:07,000 Het gaat om auto increment. Ik ga naar de database deal laat met deze. 759 00:42:07,000 --> 00:42:11,000 Maar ik zal David, en mijn e-mail moeten worden malan@harvard.edu. 760 00:42:11,000 --> 00:42:16,000 >> Laten we hier ga je gang en zet in Mike Smith als een andere. 761 00:42:16,000 --> 00:42:18,000 Ik geef mezelf een achternaam als goed, 762 00:42:18,000 --> 00:42:22,000 en we zullen hem hebben zijn smith@example.com, 763 00:42:22,000 --> 00:42:24,000 en dan waar moet ik heen? 764 00:42:24,000 --> 00:42:27,000 Nou, het lijkt erop dat go is de knop te klikken, en voila. 765 00:42:27,000 --> 00:42:30,000 Let op de top geplaatst 2 rijen. 766 00:42:30,000 --> 00:42:32,000 Dit is de daadwerkelijke SQL-query. 767 00:42:32,000 --> 00:42:36,000 Dat is de phpMyAdmin instrument uitgevoerd voor mij, 768 00:42:36,000 --> 00:42:40,000 maar het eindresultaat, let op, als ik nu naar het tabblad Bladeren, 769 00:42:40,000 --> 00:42:43,000 is om 2 rijen te zien in deze tabel, sterk denken esthetisch 770 00:42:43,000 --> 00:42:46,000 van de tafel zagen we eerder voor onze gebruikers uit PSET 7, 771 00:42:46,000 --> 00:42:51,000 een van hen is David Malan, van wie er nu is Mike Smith. 772 00:42:51,000 --> 00:42:54,000 Maar om duidelijk te zijn, ik heb geen phpMyAdmin hoeft te gebruiken, 773 00:42:54,000 --> 00:42:56,000 en inderdaad, je gaat binnenkort schrijven van code voor PSET 7 774 00:42:56,000 --> 00:43:01,000 dat automatiseert het proces van het toevoegen van rijen, verwijderen van rijen, het bijwerken van rijen en dergelijke, 775 00:43:01,000 --> 00:43:04,000 dus laat me in plaats daarvan naar de SQL tab hier 776 00:43:04,000 --> 00:43:14,000 en typ in select * from studenten waar 777 00:43:14,000 --> 00:43:18,000 email = "malan@harvard.edu." 778 00:43:18,000 --> 00:43:21,000 >> Met andere woorden: stel nu heb je 779 00:43:21,000 --> 00:43:26,000 sommige HTML-formulier, en de gebruiker typt in hun e-mail adres, onder andere gebieden, 780 00:43:26,000 --> 00:43:29,000 en het doel is nu in PHP op de back-end code 781 00:43:29,000 --> 00:43:31,000 om daadwerkelijk zoeken van die gebruiker andere details. 782 00:43:31,000 --> 00:43:34,000 Wat is uw volledige naam? Wat is uw ID-nummer? 783 00:43:34,000 --> 00:43:37,000 Je kon een SQL-query als deze schrijven, selecteert u * van studenten 784 00:43:37,000 --> 00:43:40,000 waar e-mail = "malan@harvard.edu." 785 00:43:40,000 --> 00:43:46,000 En als ik klik op ga, merk dat ik inderdaad en ik, terug slechts een rij. 786 00:43:46,000 --> 00:43:50,000 Mike is weggelaten uit dit resultaat set, als de verzameling van rijen 787 00:43:50,000 --> 00:43:53,000 wordt over het algemeen genoemd, omdat hij niet dezelfde e-mail-adres hebben als ik. 788 00:43:53,000 --> 00:43:57,000 >> Nu, nogmaals, hier voor PSET 7 u gebruikt phpMyAdmin als administratief hulpmiddel 789 00:43:57,000 --> 00:44:00,000 en een pedagogisch instrument om je weg te leren 790 00:44:00,000 --> 00:44:03,000 wereldwijd van SQL, maar aan het eind van de dag 791 00:44:03,000 --> 00:44:08,000 je gaat worden het schrijven van deze vragen binnen van de werkelijke PHP-code, 792 00:44:08,000 --> 00:44:11,000 en dus stay tuned in walkthrough Zamyla's in het bijzonder 793 00:44:11,000 --> 00:44:14,000 waar krijg je een rondleiding door de verdeelsleutel voor dit probleem set 794 00:44:14,000 --> 00:44:18,000 waar we hebben u niet alleen de esthetiek voor de login pagina 795 00:44:18,000 --> 00:44:21,000 en de mooie sexy logo dat CS50 Financiën zegt, maar we hebben ook gegeven 796 00:44:21,000 --> 00:44:24,000 een aantal functies die ervoor zorgt dat uw leven een stuk makkelijker. 797 00:44:24,000 --> 00:44:27,000 We hebben ook schriftelijke gedeelte van het PSET voor u, 798 00:44:27,000 --> 00:44:32,000 de login deel ervan in het bijzonder, om u een gevoel van een representatieve vormgeving 799 00:44:32,000 --> 00:44:36,000 dat gebruikt namelijk controller bijvoorbeeld index.php, 800 00:44:36,000 --> 00:44:40,000 login.php en dergelijke, en dan zie je de PSET ook een templates directory 801 00:44:40,000 --> 00:44:43,000 dat alle van de weergaven, alle esthetiek. 802 00:44:43,000 --> 00:44:46,000 En dus is de totale workflow in PSET 7 zal zijn dat 803 00:44:46,000 --> 00:44:49,000 uw gebruikers bezoeken een controller via een URL in een browser. 804 00:44:49,000 --> 00:44:53,000 Die controller bevat PHP-code die je hebt geschreven, en de binnenkant van uw PHP-code 805 00:44:53,000 --> 00:44:57,000 kunnen sommige lijnen van SQL worden genest in tussen dubbele aanhalingstekens 806 00:44:57,000 --> 00:45:00,000 en doorgegeven aan een functie schreven we geroepen vraag 807 00:45:00,000 --> 00:45:03,000 dat zal je praat met de database te helpen zonder het gebruik van iets als 808 00:45:03,000 --> 00:45:05,000 een administratieve tool zoals phpMyAdmin. 809 00:45:05,000 --> 00:45:08,000 >> Je zult in staat zijn om SQL-statements in PHP code te schrijven 810 00:45:08,000 --> 00:45:11,000 en terug te krijgen een PHP array van het resultaat set, 811 00:45:11,000 --> 00:45:14,000 van de rijen die daadwerkelijk overeenkomen met die zoekopdracht. 812 00:45:14,000 --> 00:45:18,000 En evenzo zult u in staat om te inzetstukken of verwijdert te doen 813 00:45:18,000 --> 00:45:22,000 of updates of iets dergelijks, de syntaxis voor die redelijk vergelijkbaar, 814 00:45:22,000 --> 00:45:25,000 en je zult zien van een aantal online referenties, van de verdeelsleutel 815 00:45:25,000 --> 00:45:29,000 en verpakken van de PSET zelf precies hoe om te gaan doen dat. 816 00:45:29,000 --> 00:45:33,000 Realiseer uiteindelijk we echt alleen het oppervlak van SQL krassen 817 00:45:33,000 --> 00:45:36,000 en van MySQL, maar de kracht van het is echt dat het je bevrijdt 818 00:45:36,000 --> 00:45:40,000 zich te richten op de problemen die u wilt oplossen, de use cases u wilt implementeren 819 00:45:40,000 --> 00:45:43,000 zonder dat u net zo veel zorgen te maken, in ieder geval vroeg op, 820 00:45:43,000 --> 00:45:47,000 over waar en hoe op te slaan en zoek uw database, 821 00:45:47,000 --> 00:45:50,000 en dit is letterlijk waar Facebook zelf is begonnen 822 00:45:50,000 --> 00:45:53,000 met behulp van MySQL en vervolgens met behulp van meer MySQL servers en vervolgens meer MySQL servers 823 00:45:53,000 --> 00:45:57,000 het duurde niet lang totdat ze vervolgens moesten echt beginnen hard nadenken over hoe je 824 00:45:57,000 --> 00:46:00,000 opslaan van gegevens, hoe je dingen op te slaan nog efficiënter, 825 00:46:00,000 --> 00:46:04,000 dus ook al nemen we voor lief dat indexen en unieke beperkingen 826 00:46:04,000 --> 00:46:08,000 enzovoort gewoon werken is er een zeer interessant gesprek 827 00:46:08,000 --> 00:46:12,000 dat dit kan allemaal uiteindelijk leiden tot, dus beseffen dat we nog maar net de oppervlakte krabben 828 00:46:12,000 --> 00:46:17,000 van wat zou uiteindelijk voor u of uw projecten worden heel wat grote data. 829 00:46:17,000 --> 00:46:22,000 >> Met dat gezegd, laten we hier stoppen, en we zien jullie volgende week. 830 00:46:28,000 --> 00:46:30,000 [CS50.TV]