1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Setmana 8, continuació] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Harvard University] 3 00:00:04,000 --> 00:00:08,000 [Aquesta és CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:13,000 >> Això és CS50, de manera que aquest és el final de la setmana 8 aquí. 5 00:00:13,000 --> 00:00:16,000 Nosaltres, per descomptat, tenia una mica d'un huracà a principis d'aquesta setmana, 6 00:00:16,000 --> 00:00:19,000 de manera que ara és realment només tu i jo en aquesta sala de conferències, 7 00:00:19,000 --> 00:00:22,000 però avui en dia continuem la nostra conversa sobre PHP 8 00:00:22,000 --> 00:00:25,000 i sobre la programació web en general, i també introduir la idea 9 00:00:25,000 --> 00:00:29,000 de bases de dades, especialment un anomenat MySQL, que és molt popular en aquests dies, 10 00:00:29,000 --> 00:00:34,000 en gran part a causa de la seva escalabilitat, així com per la seva ser lliure i de codi obert. 11 00:00:34,000 --> 00:00:37,000 >> Però primer, una mirada a on el deixem l'última vegada. 12 00:00:37,000 --> 00:00:40,000 Recordem que estàvem buscant en els diversos exemples Frosh missatges instantanis, 13 00:00:40,000 --> 00:00:44,000 i aquesta era la manera horrible en què va ocórrer amb uns 15 + anys 14 00:00:44,000 --> 00:00:49,000 amb la finalitat que els estudiants al campus de registre per als esports intramurs de primer any 15 00:00:49,000 --> 00:00:52,000 sense haver de caminar més pel pati a Wigglesworth 16 00:00:52,000 --> 00:00:56,000 la caiguda d'una peça física de paper sota la porta una mica de Proctor. 17 00:00:56,000 --> 00:00:59,000 En el seu lloc ens vam traslladar tot en línia, però per això és necessari fer un ús 18 00:00:59,000 --> 00:01:03,000 d'unes poques tecnologies, de manera que un, necessitàvem HTML, HyperText Markup Language, 19 00:01:03,000 --> 00:01:07,000 que al seu torn és aquest llenguatge de marcat amb la qual fer pàgines web estructuralment. 20 00:01:07,000 --> 00:01:10,000 >> Amb una mica de CSS en aquests dies, els fulls d'estil en cascada, 21 00:01:10,000 --> 00:01:16,000 en què puguem utilitzar estilitzacions de la pàgina web utilitzant una sintaxi lleugerament diferent, 22 00:01:16,000 --> 00:01:19,000 mentre que l'HTML és tot sobre l'estructura del mateix. 23 00:01:19,000 --> 00:01:21,000 També hem d'introduir un llenguatge de programació web. 24 00:01:21,000 --> 00:01:25,000 En aquest cas, utilitzarem PHP, PHP i ens permetrà 25 00:01:25,000 --> 00:01:28,000 al contingut de la sortida de forma dinàmica, així com fer les coses com programàtiques 26 00:01:28,000 --> 00:01:33,000 l'enviament de correus electrònics, com va ser el cas en la nota que va deixar la setmana passada. 27 00:01:33,000 --> 00:01:35,000 >> Recordem que el codi per això va ser en 2 parts. 28 00:01:35,000 --> 00:01:38,000 Un d'ells, vam tenir froshims3.php, 29 00:01:38,000 --> 00:01:42,000 i això va ser en gran mesura el marcat amb un formulari HTML dins d'ella, 30 00:01:42,000 --> 00:01:45,000 una mica de CSS aquí en els atributs d'estil 31 00:01:45,000 --> 00:01:48,000 de manera que la forma en si es centra en la pàgina, però més enllà 32 00:01:48,000 --> 00:01:51,000 vam tenir alguns insums forma representativa, un camp de text, una casella de verificació, 33 00:01:51,000 --> 00:01:55,000 Alguns botons de ràdio, un selecte menú i un botó submit. 34 00:01:55,000 --> 00:02:01,000 I a través d'aquest formulari, ens va presentar a un arxiu que es diu pel que sembla register3.php, 35 00:02:01,000 --> 00:02:04,000 que al seu torn es veia una mica d'alguna cosa com això. 36 00:02:04,000 --> 00:02:08,000 Ara, la major part del codi en register3.php, recordar, tractava de correu electrònic. 37 00:02:08,000 --> 00:02:11,000 Ho va fer una mica de la validació de la manera que es va presentar per assegurar-se que 38 00:02:11,000 --> 00:02:14,000 que els camps van ser realment que s'esperava. 39 00:02:14,000 --> 00:02:18,000 Després fem una crida a algunes funcions de PHP usant una mica nova sintaxi, 40 00:02:18,000 --> 00:02:20,000 tot i que està pres de C. 41 00:02:20,000 --> 00:02:24,000 >> Aquest operador de fletxa ens permet fer ús d'alguna cosa que es diu programació orientada a objectes. 42 00:02:24,000 --> 00:02:27,000 No entrarem en això en detall aquí, però sabem per ara 43 00:02:27,000 --> 00:02:31,000 que és una manera de tenir funcions associades amb els objectes, 44 00:02:31,000 --> 00:02:34,000 que són un tipus especial d'estructura, com vam veure en C. 45 00:02:34,000 --> 00:02:37,000 Però per ara, només té fe que aquesta és la sintaxi correcta per utilitzar 46 00:02:37,000 --> 00:02:41,000 quan s'utilitza una biblioteca com aquesta biblioteca PHPMailer. 47 00:02:41,000 --> 00:02:44,000 I després, al final d'aquest arxiu que havíem generat dinàmicament un correu electrònic 48 00:02:44,000 --> 00:02:47,000 que va ser enviat al meu compte jharvard@cs50.net 49 00:02:47,000 --> 00:02:50,000 del meu compte jharvard@cs50.net, 50 00:02:50,000 --> 00:02:54,000 i ens van informar a l'usuari en conseqüència que s'havien registrat per aquest esport. 51 00:02:54,000 --> 00:02:57,000 Això és més o menys el que el lloc Frosh IMS va fer fa tants anys 52 00:02:57,000 --> 00:03:00,000 quan la munta, és cert, en un idioma diferent, 53 00:03:00,000 --> 00:03:02,000 però potser et mostra el poder que té 54 00:03:02,000 --> 00:03:05,000 ara que vostè pot expressar-se no només mitjançant programació 55 00:03:05,000 --> 00:03:08,000 a un nivell baix en un llenguatge com C, però a un nivell molt més alt 56 00:03:08,000 --> 00:03:11,000 amb aquestes aplicacions en el món molt reals com el correu electrònic per resoldre realment 57 00:03:11,000 --> 00:03:13,000 alguns dels problemes del món real. 58 00:03:13,000 --> 00:03:16,000 >> Ara, és clar, encara que jo faig servir aquest script per generar algun 59 00:03:16,000 --> 00:03:20,000 correus electrònics de forma dinàmica jharvard@cs50.net, que és en realitat un compte 60 00:03:20,000 --> 00:03:23,000 que tinc accés, siguis molt acurat en enviar 61 00:03:23,000 --> 00:03:26,000 Missatges només dels comptes que estan en realitat el seu compte, 62 00:03:26,000 --> 00:03:30,000 no fos cas que les coses que et donen en una mica d'aigua calenta a la vida. 63 00:03:30,000 --> 00:03:35,000 Dit això, anem ara la transició a la solució d'un problema totalment diferent, 64 00:03:35,000 --> 00:03:37,000 la dels estats de retenció. 65 00:03:37,000 --> 00:03:39,000 Ara, què significa això realment? 66 00:03:39,000 --> 00:03:42,000 HTTP, el protocol de transferència d'hipertext, 67 00:03:42,000 --> 00:03:45,000 en realitat és un protocol sense estat, i el que això significa és que 68 00:03:45,000 --> 00:03:48,000 quan acabes d'arribar alguna cosa com Google.com i després prem enter 69 00:03:48,000 --> 00:03:51,000 en general el seu navegador té algun tipus d'icona volador que després 70 00:03:51,000 --> 00:03:54,000 resulta en alguna pàgina web que la descàrrega, 71 00:03:54,000 --> 00:03:57,000 i tan bon punt petita icona deixa de girar, i que en realitat suggereix 72 00:03:57,000 --> 00:04:02,000 HTTP que ha completat algun tipus de connexió amb el servidor i ja està. 73 00:04:02,000 --> 00:04:05,000 HTTP és l'estat en el sentit que no manté 74 00:04:05,000 --> 00:04:08,000 una connexió permanent amb el servidor de la mateixa manera que ho fa Skype 75 00:04:08,000 --> 00:04:11,000 o Gchat fa perquè amb HTTP 76 00:04:11,000 --> 00:04:15,000 el cas és que una vegada que va anar a buscar una pàgina web que ja està. 77 00:04:15,000 --> 00:04:18,000 >> Ara bé, en la realitat aquests dies en llocs com Facebook i Google Maps 78 00:04:18,000 --> 00:04:21,000 i Twitter i similars hi ha molt més dinamisme pel qual 79 00:04:21,000 --> 00:04:25,000 fins i tot després que la icona deixa de girar pot de fet tenir més actualitzacions 80 00:04:25,000 --> 00:04:29,000 des del servidor, més tweets, més actualitzacions d'estat a Facebook i similars. 81 00:04:29,000 --> 00:04:33,000 Però fins i tot això està utilitzant una tècnica que parlarem en una setmana o dues 82 00:04:33,000 --> 00:04:36,000 coneguda com Ajax usant un llenguatge anomenat JavaScript 83 00:04:36,000 --> 00:04:38,000 però al final de la dia, HTTP és encara sense estat. 84 00:04:38,000 --> 00:04:42,000 I no obstant això, si vostè vol recordar alguna manera les coses sobre un usuari 85 00:04:42,000 --> 00:04:44,000 fins i tot després d'haver desconnectat del servidor 86 00:04:44,000 --> 00:04:47,000 PHP fa permetre que un mitjà de fer això 87 00:04:47,000 --> 00:04:52,000 perquè, com vam veure per última vegada, PHP té una sèrie de superglobales, 88 00:04:52,000 --> 00:04:55,000 i un superglobal és, de nou, una variable global especial 89 00:04:55,000 --> 00:04:59,000 que és lliurat a vostè pel servidor web i PHP per si mateix. 90 00:04:59,000 --> 00:05:02,000 >> No ha de fer res per posar els valors en ella, 91 00:05:02,000 --> 00:05:05,000 i entre les superglobales que hem vist fins ara són GET i POST, 92 00:05:05,000 --> 00:05:08,000 que és on es col · loquen els camps de formulari de forma automàtica, 93 00:05:08,000 --> 00:05:11,000 així com un parell d'altres que no hem vist encara. 94 00:05:11,000 --> 00:05:17,000 Dins de $ _SERVER algunes variables especials relacionades amb el propi servidor. 95 00:05:17,000 --> 00:05:22,000 Quina és l'adreça IP, quin protocol, HTTP o HTTPS vas usar, 96 00:05:22,000 --> 00:05:25,000 quin mètode vas usar sol · licitud i similars, de manera que hi ha alguns interessants, 97 00:05:25,000 --> 00:05:29,000 sucosos detalls sobre el servidor, i de fet, l'usuari així com a allà. 98 00:05:29,000 --> 00:05:33,000 Hi ha $ _COOKIE, que és on aquestes coses anomenades cookies s'emmagatzemen. 99 00:05:33,000 --> 00:05:36,000 No anem a dedicar temps a si mateixes galetes avui, 100 00:05:36,000 --> 00:05:40,000 però sabem per ara que una galeta és una petita peça d'informació 101 00:05:40,000 --> 00:05:43,000 que un servidor web es pot plantar en un navegador web 102 00:05:43,000 --> 00:05:46,000 i al seu torn la seva memòria RAM o el disc dur del seu ordinador 103 00:05:46,000 --> 00:05:49,000 per emmagatzemar informació sobre un usuari, per exemple, nom d'usuari 104 00:05:49,000 --> 00:05:52,000 de manera que no hagi de escriure-cada vegada que inicien sessió en o alguns 105 00:05:52,000 --> 00:05:55,000 nombre únic o identificador per aquest usuari 106 00:05:55,000 --> 00:05:58,000 de manera que vostè no ha de molestar amb el mateix tipus de preguntes sobre 107 00:05:58,000 --> 00:06:00,000 preferències en el futur, però la majoria dels interessos 108 00:06:00,000 --> 00:06:02,000 en aquests moments és de $ _SESSION. 109 00:06:02,000 --> 00:06:07,000 >> Aquesta superglobal, que, com els altres, es lliura de forma automàtica per PHP 110 00:06:07,000 --> 00:06:10,000 quan escrius llocs web basats en PHP 111 00:06:10,000 --> 00:06:13,000 pot emmagatzemar el que vulguis, cadenes, enters, 112 00:06:13,000 --> 00:06:16,000 punts flotants, valors, matrius, objectes, 113 00:06:16,000 --> 00:06:20,000 Realment qualsevol cosa que desitgi, i li permet emmagatzemar de forma 114 00:06:20,000 --> 00:06:23,000 que fins i tot si l'usuari el visita de tant en tant 115 00:06:23,000 --> 00:06:26,000 torna un minut a partir d'ara o 5 minuts a partir d'ara, perquè 116 00:06:26,000 --> 00:06:28,000 es prenen el seu temps abans de prémer algun altre enllaç 117 00:06:28,000 --> 00:06:32,000 PHP s'assegurarà que el que poses en aquesta sessió superglobal 118 00:06:32,000 --> 00:06:37,000 minuts o 5 minuts fa encara estarà allà quan torni l'usuari. 119 00:06:37,000 --> 00:06:40,000 I sota la caputxa aquesta superglobal sigui implementada a través de 120 00:06:40,000 --> 00:06:44,000 aquestes coses anomenades galetes, però per ara, és només una abstracció 121 00:06:44,000 --> 00:06:47,000 per la qual cosa és una espècie d'equivalent programàtic d'un carret de compres. 122 00:06:47,000 --> 00:06:50,000 El que vostè, el programador, ja que en 123 00:06:50,000 --> 00:06:53,000 matriu associativa superglobal hi serà cert nombre de minuts més tard 124 00:06:53,000 --> 00:06:59,000 fins que l'elimini, o fins que l'usuari surt del seu navegador complet. 125 00:06:59,000 --> 00:07:02,000 >> Fem una ullada a un exemple de com això s'utilitza realment. 126 00:07:02,000 --> 00:07:07,000 En counter.php entre peces actuals de codi 127 00:07:07,000 --> 00:07:09,000 tenim la següent línia. 128 00:07:09,000 --> 00:07:13,000 A l'inici d'aquest arxiu tenim un munt d'observacions blaus, que són poc interessants per ara. 129 00:07:13,000 --> 00:07:15,000 No obstant això, en la línia 13 tenim una nova línia, 130 00:07:15,000 --> 00:07:18,000 session_start, i que en realitat fa exactament el que diu. 131 00:07:18,000 --> 00:07:20,000 S'inicia sessions. 132 00:07:20,000 --> 00:07:25,000 Permet utilitzar aquesta gran superglobal $ _SESSION, i és tan simple com això. 133 00:07:25,000 --> 00:07:30,000 Ara bé, si es procedeix a observar la línia 16, intentarem esbrinar el que aquesta pàgina web es farà. 134 00:07:30,000 --> 00:07:35,000 If (isset ($ _SESSION ["comptador"]) i després seguir endavant 135 00:07:35,000 --> 00:07:39,000 i guardar a la variable de comptador, comptador minúscules, 136 00:07:39,000 --> 00:07:42,000 $ _SESSION ["Comptador"]. 137 00:07:42,000 --> 00:07:45,000 Això sembla que es declara una variable local anomenada comptador 138 00:07:45,000 --> 00:07:48,000 dins dels quals es tracta de posar una còpia de tot el que està dins de la superglobal 139 00:07:48,000 --> 00:07:52,000 anomenat període de sessions a la ubicació "comptador". 140 00:07:52,000 --> 00:07:56,000 Si no, pel que sembla, aquest petit taulell variable local, s'inicialitza a 0. 141 00:07:56,000 --> 00:08:01,000 >> Però llavors, unes línies més endavant en el 26 avís que còpia de la sessió de taulell, 142 00:08:01,000 --> 00:08:06,000 seva clau, té un valor assignat nou que és el seu valor actual més 1. 143 00:08:06,000 --> 00:08:09,000 En resum, aquest arxiu sembla estar actualitzant 144 00:08:09,000 --> 00:08:13,000 un comptador que està emmagatzemat a l'interior de la superglobal sessió 145 00:08:13,000 --> 00:08:16,000 en un increment d'1, però primer conserva una còpia del valor anterior 146 00:08:16,000 --> 00:08:20,000 emmagatzemant en una variable local anomenada $ taulell, 147 00:08:20,000 --> 00:08:22,000 i llavors aquí veurem el que queda. 148 00:08:22,000 --> 00:08:24,000 Resulta que és més o menys només HTML. 149 00:08:24,000 --> 00:08:29,000 A la part inferior d'aquesta pàgina podem veure en la línia 37 que he visitat aquest lloc 150 00:08:29,000 --> 00:08:33,000 nombre del comptador de temps, així que hi ha un parell de característiques interessants. 151 00:08:33,000 --> 00:08:36,000 Un d'ells, es tracta clarament d'una variable, però no és suficient per posar només 152 00:08:36,000 --> 00:08:39,000 $ Contador al cos de l'HTML perquè clar 153 00:08:39,000 --> 00:08:43,000 si només hi ha entre la seva PHP HTML es suposarà que és només HTML. 154 00:08:43,000 --> 00:08:48,000 Vostè, literalment, vol $ comptador que s'imprimirà a la pantalla. 155 00:08:48,000 --> 00:08:51,000 >> Però en comptes de caure en la manera PHP 156 00:08:51,000 --> 00:08:55,000 amb aquest tros de sintaxi que dinàmicament es pot inserir un valor aquí 157 00:08:55,000 --> 00:08:58,000 molt similars en esperit al que vam fer l'última vegada amb 158 00:08:58,000 --> 00:09:00,000 inserir valors en cadenes. 159 00:09:00,000 --> 00:09:04,000 De fet, això és només una notació abreujada per dir alguna cosa com això en forma literal, 160 00:09:04,000 --> 00:09:12,000 print ($ comptador) o fins i tot alguna cosa com printf (% s, comptador), 161 00:09:12,000 --> 00:09:14,000 o fins i tot, com vostè va poder haver vist a Internet o en llibres de text, 162 00:09:14,000 --> 00:09:17,000 hi ha una funció en PHP anomenada ressò 163 00:09:17,000 --> 00:09:20,000 que fa el mateix, i tots aquests són només formes més prolixes 164 00:09:20,000 --> 00:09:25,000 de dir: 00:09:28,000 En aquest cas un que no és necessari posar 166 00:09:28,000 --> 00:09:30,000 el PHP paraula després del signe d'interrogació. 167 00:09:30,000 --> 00:09:34,000 Aquesta és la notació abreujada per, de nou, el que acabem de veure fa un moment 168 00:09:34,000 --> 00:09:37,000 que es fa ressò d'algun valor. 169 00:09:37,000 --> 00:09:39,000 >> Anem a veure el que el resultat final d'això és en realitat. 170 00:09:39,000 --> 00:09:43,000 Permetin-me repassar en el nostre fitxer counter.php, 171 00:09:43,000 --> 00:09:47,000 i anem a veure que David va cometre un error en jugar amb el codi allà. 172 00:09:47,000 --> 00:09:50,000 Anem a arreglar el que sigui que la pota, 173 00:09:50,000 --> 00:09:54,000 i l'error sembla ser-hi, anat, en la línia 37. 174 00:09:54,000 --> 00:09:59,000 D'acord amb la part superior d'aquesta pàgina que ha visitat aquest lloc 0 vegades. 175 00:09:59,000 --> 00:10:02,000 Bé, seguirem endavant, ara i en la part superior del navegador, feu clic al 176 00:10:02,000 --> 00:10:05,000 tornar a carregar icona, i feu clic a recarregar, 177 00:10:05,000 --> 00:10:12,000 i ara he visitat el lloc 1 vegada, 2, 3, 4, 5, 6, 7, 8. 178 00:10:12,000 --> 00:10:16,000 I de fet, si ens fixem en la font d'aquesta pàgina el codi font actual està canviant, 179 00:10:16,000 --> 00:10:19,000 i notarà l'absència total de PHP, i això és perquè 180 00:10:19,000 --> 00:10:23,000 Codi PHP s'avalua o interpretats del costat del servidor, 181 00:10:23,000 --> 00:10:27,000 i pel que significa que la sortida de la seqüència de comandaments PHP és el que en última instància s'envia al navegador, 182 00:10:27,000 --> 00:10:31,000 que en aquest cas és un HTML crua i alguns caràcters en brut. 183 00:10:31,000 --> 00:10:33,000 Què està passant aquí? 184 00:10:33,000 --> 00:10:37,000 >> Bé, amb relativament poques línies de codi que sóc capaç d'emmagatzemar 185 00:10:37,000 --> 00:10:40,000 persistentment en el transcurs de diversos segons, o si esperar prou, 186 00:10:40,000 --> 00:10:44,000 minuts, fins i tot hores, un valor d'una manera que fa HTTP 187 00:10:44,000 --> 00:10:47,000 sembla amb estat com si ja haguéssim retingut 188 00:10:47,000 --> 00:10:51,000 aquesta connexió amb el servidor, i és només recordar el que li vaig dir l'última vegada, 189 00:10:51,000 --> 00:10:55,000 però en realitat hi ha un munt de complexitat passant sota la caputxa 190 00:10:55,000 --> 00:10:59,000 participació de les galetes que permetin PHP per donar-me aquesta il · lusió 191 00:10:59,000 --> 00:11:02,000 de la cistella de la compra-com a característica. 192 00:11:02,000 --> 00:11:05,000 Per ara, un exemple trivial, on només estem emmagatzemant un nombre enter, 193 00:11:05,000 --> 00:11:08,000 però aquesta característica tornarà a ser de gran valor 194 00:11:08,000 --> 00:11:10,000 quan vam començar a parlar sobre els projectes més complexos, 195 00:11:10,000 --> 00:11:12,000 entre ells Problema 7. 196 00:11:12,000 --> 00:11:16,000 Aquesta és el teu problema últim lloc en CS50. 197 00:11:16,000 --> 00:11:19,000 Ho sé, és molt trist, però el que trobarà és que anem a concloure 198 00:11:19,000 --> 00:11:22,000 aquesta part del semestre per fet la transició 199 00:11:22,000 --> 00:11:25,000 a partir del context de C certament per al context de PHP 200 00:11:25,000 --> 00:11:27,000 però durant l'ús d'alguns dels fonaments mateixos 201 00:11:27,000 --> 00:11:29,000 hem parlat fa algun temps. 202 00:11:29,000 --> 00:11:33,000 >> L'objectiu conjunt de processadors amb 7 és implementar CS50 Finances, 203 00:11:33,000 --> 00:11:37,000 que és la seva pròpia versió de Yahoo Finance o Google Finance 204 00:11:37,000 --> 00:11:40,000 o fins i tot Etrade.com pel que vostè té la capacitat de 205 00:11:40,000 --> 00:11:43,000 consultar preus de les accions dels símbols donats, però encara més que això 206 00:11:43,000 --> 00:11:48,000 vostè té la possibilitat de "comprar" i "vendre" accions 207 00:11:48,000 --> 00:11:51,000 que es negocien en les borses de valors diferents, perquè com aquesta teva pàgina d'inici 208 00:11:51,000 --> 00:11:55,000 aquí suggereix, que és realment la mesura que hem començat 209 00:11:55,000 --> 00:11:59,000 el conjunt de problemes per a vostè, vostè té un formulari d'accés que està demanant un nom d'usuari i una contrasenya. 210 00:11:59,000 --> 00:12:03,000 Disposa d'un botó d'enviament, però a partir de llavors, a mesura que el temps ho veuràs, 211 00:12:03,000 --> 00:12:06,000 no hi ha res que realment està passant sota la caputxa encara, ja que 212 00:12:06,000 --> 00:12:09,000 queda per implementar la possibilitat de registrar nous usuaris, 213 00:12:09,000 --> 00:12:12,000 la possibilitat de comprar accions, la venda d'accions, 214 00:12:12,000 --> 00:12:14,000 mirar realment els preus actuals de les accions. 215 00:12:14,000 --> 00:12:17,000 >> I de fet, aquesta serà com a món real com sigui possible perquè vam 216 00:12:17,000 --> 00:12:20,000 incloure una mica de codi que li permetrà amb una sola funció 217 00:12:20,000 --> 00:12:25,000 per consultar Yahoo Finances, que meravellosament posa a disposició de les dades lliures 218 00:12:25,000 --> 00:12:31,000 per buscar preus de les accions basades en el símbol de l'acció o símbol ticker, 219 00:12:31,000 --> 00:12:34,000 i obté novament el preu actual de les accions del dia. 220 00:12:34,000 --> 00:12:37,000 Les dades que en realitat estàs veient en aquest conjunt de processadors en particular serà 221 00:12:37,000 --> 00:12:40,000 sobre com el món real, ja que es pot obtenir de manera que en realitat estàs interfície 222 00:12:40,000 --> 00:12:43,000 amb les accions del món real, els preus del món real, 223 00:12:43,000 --> 00:12:47,000 i anem a veure quants diners vostè pot fer potser 224 00:12:47,000 --> 00:12:51,000 llarg dels següents dies de jugar amb el seu conjunt propi problema. 225 00:12:51,000 --> 00:12:55,000 >> Però primer anem a establir les bases per a la forma de dissenyar una cosa que és certament més complicat 226 00:12:55,000 --> 00:12:59,000 que counter.php, que és més complicat que qualsevol dels exemples Frosh IMS fins ara, 227 00:12:59,000 --> 00:13:02,000 i tractarem d'introduir uns pocs paradigmes aquí que ens permeten 228 00:13:02,000 --> 00:13:06,000 tant per al conjunt de processadors 7 i potser per al seu projecte final, si vostè fa alguna cosa basat web 229 00:13:06,000 --> 00:13:11,000 per mantenir el seu codi ben organitzat, per mantenir-se sa, 230 00:13:11,000 --> 00:13:15,000 i fer un pas cap a la col · laboració, ja sigui en el projecte final CS50 231 00:13:15,000 --> 00:13:18,000 o més enllà de si continua programar alguna cosa en el futur. 232 00:13:18,000 --> 00:13:21,000 Hi ha un paradigma de disseny en general 233 00:13:21,000 --> 00:13:24,000 en la informàtica i en el desenvolupament de programari en general, més 234 00:13:24,000 --> 00:13:27,000 conegut com MVC, model vista controlador, 235 00:13:27,000 --> 00:13:30,000 i això és un acrònim que descriu una tonta idea molt bonica, 236 00:13:30,000 --> 00:13:34,000 que és la separació dels diferents aspectes d'un programa, 237 00:13:34,000 --> 00:13:39,000 específicament mantenir separada la lògica o la lògica empresarial d'un lloc web 238 00:13:39,000 --> 00:13:42,000 de manera que tot el que implica coses com 239 00:13:42,000 --> 00:13:45,000 trucar a les funcions i consultar bases de dades i similars 240 00:13:45,000 --> 00:13:48,000 no succeeix entre l'HTML 241 00:13:48,000 --> 00:13:51,000 sinó més aviat en arxius separats i, de fet, hi ha un arxiu d'un 242 00:13:51,000 --> 00:13:54,000 típicament que vostè ha anomenat el controlador 243 00:13:54,000 --> 00:13:56,000 això és realment el cervell darrere de l'operació, i anem a veure un exemple 244 00:13:56,000 --> 00:13:58,000 d'això en un moment. 245 00:13:58,000 --> 00:14:01,000 >> Hi ha un model que està programant codi 246 00:14:01,000 --> 00:14:05,000 que fa parlar a les seves bases de dades, que es refereix a Yahoo Finance i similars, 247 00:14:05,000 --> 00:14:08,000 i després hi ha la V en MVC, les vistes, 248 00:14:08,000 --> 00:14:11,000 totes les coses que està relacionat amb l'estètica, els arxius que en realitat contenen 249 00:14:11,000 --> 00:14:14,000 el codi HTML, CSS potser tu i similars. 250 00:14:14,000 --> 00:14:17,000 La idea, com suggereix aquesta imatge, és que el controlador 251 00:14:17,000 --> 00:14:21,000 és l'arxiu, com aviat veurem com es veurà en particular pset 7, 252 00:14:21,000 --> 00:14:24,000 que el món parla a través dels seus navegadors web. 253 00:14:24,000 --> 00:14:27,000 Aquest és l'arxiu que es van visitar a l'Internet públic, 254 00:14:27,000 --> 00:14:30,000 però el controlador parla potencialment un model, 255 00:14:30,000 --> 00:14:34,000 que és un o més d'altres arxius que contenen codi relacionada amb dades, 256 00:14:34,000 --> 00:14:37,000 codi relacionat amb bases de dades i similars, i llavors es parla 257 00:14:37,000 --> 00:14:40,000 el controlador d'un o més arxius d'altres coneguts com a punts de vista, 258 00:14:40,000 --> 00:14:43,000 que són l'estètica d'una pàgina web, plantilles de classes, 259 00:14:43,000 --> 00:14:47,000 que podria prendre algunes dades com a entrada, però al final de la dia 260 00:14:47,000 --> 00:14:50,000 l'única lògica dins d'una vista ha de ser la representació de les dades, 261 00:14:50,000 --> 00:14:53,000 iteració en un bucle i realment escopint una mica de 262 00:14:53,000 --> 00:14:56,000 Basat en HTML interpretació d'aquest o fins i tot una mena PDF. 263 00:14:56,000 --> 00:14:59,000 >> El millor de MVC és que vostè pot tenir diferents punts de vista 264 00:14:59,000 --> 00:15:02,000 basant-se en el tipus de dispositiu, basant-se en el tipus de format d'arxiu que en realitat 265 00:15:02,000 --> 00:15:04,000 volem mostrar a l'usuari. 266 00:15:04,000 --> 00:15:10,000 Fem una ullada a alguns exemples cada vegada més complexos i ben dissenyat 267 00:15:10,000 --> 00:15:13,000 començant primer amb la versió 0 aquí. 268 00:15:13,000 --> 00:15:16,000 Deixin-me seguir endavant i obrir en el nostre directori MVC avui 269 00:15:16,000 --> 00:15:21,000 un arxiu anomenat index.php al directori de 0. 270 00:15:21,000 --> 00:15:26,000 Tingueu en compte aquest és un lloc molt simples i molt decebedor 271 00:15:26,000 --> 00:15:29,000 que és una espècie de versió 0 de una pàgina d'inici per CS50, 272 00:15:29,000 --> 00:15:32,000 i observi com tenim un enllaç a conferències, comptem amb un enllaç a Syllabus, 273 00:15:32,000 --> 00:15:35,000 i si segueix l'enllaç a l'avís Lectures que la direcció URL 274 00:15:35,000 --> 00:15:39,000 sobre de la tapa canviarà a lectures.php. 275 00:15:39,000 --> 00:15:44,000 Si seguiu l'enllaç a la Setmana 1 avís que els canvis d'URL a week1.php. 276 00:15:44,000 --> 00:15:46,000 Sembla que hi ha una estructura jeràrquica bastant simple aquí. 277 00:15:46,000 --> 00:15:49,000 >> Anem a fer una ullada sota el capó com això es presenta, 278 00:15:49,000 --> 00:15:53,000 i de fet, si miro index.php és bastant simple. 279 00:15:53,000 --> 00:15:57,000 De fet, tot i que es diu a aquesta imatge PHP no hi ha codi de programació real. 280 00:15:57,000 --> 00:16:01,000 Hi ha un comentari que he escrit en PHP aquí només perquè l'usuari no arriba a veure-ho. 281 00:16:01,000 --> 00:16:05,000 Per descomptat, com abans, tot el que hi ha entre les etiquetes PHP 282 00:16:05,000 --> 00:16:08,000 s'interpreta, fins i tot si es tracta d'un comentari, i per interpretar un comentari 283 00:16:08,000 --> 00:16:11,000 significa simplement llençar-la al final del dia i en realitat no 284 00:16:11,000 --> 00:16:15,000 enviar-lo al navegador, de manera que tot aquí és només estètica. 285 00:16:15,000 --> 00:16:20,000 Si obro de manera similar lectures.php això també és només un arxiu codificat dur. 286 00:16:20,000 --> 00:16:23,000 Li passa a anomenar alguna cosa així. Php, 287 00:16:23,000 --> 00:16:27,000 però el que realment és just. html, i week1.php, week2.php 288 00:16:27,000 --> 00:16:31,000 igualment són només marcat, així que hi ha un munt d'inconvenients d'aquest disseny. 289 00:16:31,000 --> 00:16:33,000 Un, que és una quantitat enorme de copiar / enganxar. 290 00:16:33,000 --> 00:16:37,000 Tot i que l'únic que canvia entre aquests arxius és la llista desordenada, 291 00:16:37,000 --> 00:16:41,000 les etiquetes li, que no obstant això tenen el tipus doc, html, head, 292 00:16:41,000 --> 00:16:44,000 títol, el cos de tancament, HTML i més 293 00:16:44,000 --> 00:16:47,000 a cada arxiu, el que significa que si mai vol reestructurar 294 00:16:47,000 --> 00:16:50,000 aquesta pàgina web o restylize el que he d'entrar i canviar 295 00:16:50,000 --> 00:16:54,000 tots aquests arxius manualment o amb una mica de recerca i reemplaçament massiu. 296 00:16:54,000 --> 00:17:01,000 >> Anem a fer un pas cap a un disseny més elegant, més temps pensant en la versió 1 aquí 297 00:17:01,000 --> 00:17:04,000 de manera que segons la lectura que m'ho he inclòs perquè pugui jugar juntament amb 298 00:17:04,000 --> 00:17:07,000 aquests més tranquil · lament a casa avís que tenim aquí 299 00:17:07,000 --> 00:17:10,000 un resum dels arxius en la versió 1 d'aquest lloc, 300 00:17:10,000 --> 00:17:13,000 i sembla que he pres sobre mi mateix per excloure 301 00:17:13,000 --> 00:17:17,000 un codi comú, header.php i footer.php. 302 00:17:17,000 --> 00:17:20,000 Bé, donem una ullada al que hi ha dins de la primera. 303 00:17:20,000 --> 00:17:23,000 Header.php sembla familiar, 304 00:17:23,000 --> 00:17:26,000 notar, d'on es talli? 305 00:17:26,000 --> 00:17:30,000 Just després de la línia 19, així que això és tot el que era comú 306 00:17:30,000 --> 00:17:33,000 des del index.php arxius, lectures.php, 307 00:17:33,000 --> 00:17:36,000 semana1 i week2.php de l'exemple anterior. 308 00:17:36,000 --> 00:17:40,000 El que vaig fer va ser copiar i tallar tot el que era comú a tots els arxius, 309 00:17:40,000 --> 00:17:44,000 posar-lo en un arxiu de capçalera per separat i de manera similar a footer.php 310 00:17:44,000 --> 00:17:48,000 es va aplicar el mateix principi pel qual les úniques línies interessants 311 00:17:48,000 --> 00:17:52,000 en footer.php són aquests dos cossos, propera i estreta HTML. 312 00:17:52,000 --> 00:17:55,000 >> Però el que això significa és que en la nova versió 313 00:17:55,000 --> 00:17:59,000 de notificació index.php quant més simple que pugui aconseguir. 314 00:17:59,000 --> 00:18:02,000 Per descomptat, una mica més críptic buscant, una mica menys intuïtiu 315 00:18:02,000 --> 00:18:06,000 per seguir a dalt a baix, però el meu Déu, tot això ha desaparegut ara redundància. 316 00:18:06,000 --> 00:18:10,000 Cal d'una funció de PHP anomenada literalment requerir fins a dalt, 317 00:18:10,000 --> 00:18:15,000 que recorda molt, record, de C # include mecanisme. 318 00:18:15,000 --> 00:18:17,000 Requerim header.php a la part superior. 319 00:18:17,000 --> 00:18:20,000 Es requereix footer.php a la part inferior, i l'única cosa que és diferent 320 00:18:20,000 --> 00:18:25,000 o especial quant a aquest fitxer és el contingut que està destinat a ser únic per a ella. 321 00:18:25,000 --> 00:18:29,000 Doncs, jo entrar a, diguem, lectures.php, el mateix principi s'aplica. 322 00:18:29,000 --> 00:18:32,000 Un cop més, alguns comentaris a la part alta, però després em exigeixen, requereixen encapçalat peu de pàgina, 323 00:18:32,000 --> 00:18:35,000 i en el medi és només el contingut que ha canviat realment. 324 00:18:35,000 --> 00:18:38,000 I si ens fixem en la Setmana 1 i Setmana 2 veuríem 325 00:18:38,000 --> 00:18:42,000 que el mateix principi s'havia aplicat allà. 326 00:18:42,000 --> 00:18:44,000 Bé, no estem molt fet allà. 327 00:18:44,000 --> 00:18:48,000 >> Anem a fer una ullada a la versió 2, que té una estructura similar, 328 00:18:48,000 --> 00:18:50,000 però noto ara que he introduït alguna cosa més. 329 00:18:50,000 --> 00:18:53,000 En la línia 10 que he introduït helpers.php, 330 00:18:53,000 --> 00:18:55,000 que aparentment conté funcions auxiliars. 331 00:18:55,000 --> 00:18:58,000 Una funció auxiliar és generalment una funció relativament curt 332 00:18:58,000 --> 00:19:01,000 que s'escriu per ajudar-lo en diversos llocs, 333 00:19:01,000 --> 00:19:04,000 i anem a veure el que hi ha dins de helpers.php. 334 00:19:04,000 --> 00:19:07,000 En aquest cas, sembla que té 2 funcions. 335 00:19:07,000 --> 00:19:10,000 Recordeu que a l'altre dia amb el nostre exemple de la galleda 336 00:19:10,000 --> 00:19:13,000 pot definir les seves pròpies funcions en PHP, i el que he fet ara és que he 337 00:19:13,000 --> 00:19:17,000 funcions definides per l'anomenat peu de pàgina i fer rendir capçalera, 338 00:19:17,000 --> 00:19:21,000 la primera de les quals té un paràmetre anomenat dades, 339 00:19:21,000 --> 00:19:25,000 el valor predeterminat és una matriu buida, com es suggereix allà, 340 00:19:25,000 --> 00:19:29,000 i que en realitat pot escriure això encara més succinta en l'última versió de PHP 341 00:19:29,000 --> 00:19:32,000 dient claudàtor obert, tancat claudàtor. 342 00:19:32,000 --> 00:19:35,000 Això significa que una matriu buida de mida 0, però no obstant això una matriu. 343 00:19:35,000 --> 00:19:38,000 >> Aquesta funció extracte és una mica especial en què 344 00:19:38,000 --> 00:19:41,000 el que fa és que pren com a argument una matriu associativa 345 00:19:41,000 --> 00:19:45,000 que té 0 o més parells de valors clau, i si té una clau de foo 346 00:19:45,000 --> 00:19:48,000 i un valor de la barra de la funció d'extracció 347 00:19:48,000 --> 00:19:51,000 crea una situació en què ara, a partir de la línia 11, 348 00:19:51,000 --> 00:19:57,000 té una variable local anomenada $ foo el valor és bar. 349 00:19:57,000 --> 00:19:59,000 I si tinguessis més claus i valors en la matriu de dades, 350 00:19:59,000 --> 00:20:03,000 De la mateixa manera que es pot extreure en l'àmbit local 351 00:20:03,000 --> 00:20:06,000 o el nom d'espai de manera que footer.php i 352 00:20:06,000 --> 00:20:09,000 la mateixa idea aquí sota perquè header.php 353 00:20:09,000 --> 00:20:12,000 tenen accés a aquestes variables. 354 00:20:12,000 --> 00:20:15,000 De fet, obrirem de nou header.php 355 00:20:15,000 --> 00:20:18,000 i cridar l'atenció ara el que sembla en aquesta versió. 356 00:20:18,000 --> 00:20:22,000 >> En lloc de codificar dur CS50 com títol per a cada pàgina 357 00:20:22,000 --> 00:20:24,000 observar el dinamisme que és possible ara. 358 00:20:24,000 --> 00:20:29,000 En la línia 5 que estic repetint una variable title, 359 00:20:29,000 --> 00:20:34,000 però primer em vaig a passar aquesta variable títol a una funció anomenada htmlspecialchars. 360 00:20:34,000 --> 00:20:38,000 Un nom estúpid per a una funció, sempre que ho és, però el que realment fa el que diu. 361 00:20:38,000 --> 00:20:41,000 S'assegura que tots els caràcters especials 362 00:20:41,000 --> 00:20:46,000 en la cadena que es passa en els caràcters d'escapament HTML. 363 00:20:46,000 --> 00:20:49,000 Això és en realitat una forma d'evitar el que es diu un cross site scripting atac 364 00:20:49,000 --> 00:20:52,000 pel qual algú pot maliciosa o accidental 365 00:20:52,000 --> 00:20:55,000 injectar el seu propi codi HTML al seu lloc web 366 00:20:55,000 --> 00:20:59,000 perquè colpeja alguna manera, per exemple, 367 00:20:59,000 --> 00:21:02,000 cosa que no s'esperava bastant, sobretot el codi JavaScript, 368 00:21:02,000 --> 00:21:05,000 com parlarem en una setmana o dues de temps. 369 00:21:05,000 --> 00:21:08,000 >> Això header.php ara, és una visió 370 00:21:08,000 --> 00:21:12,000 en el sentit que permet veure estèticament el contingut d'un conjunt de dades. 371 00:21:12,000 --> 00:21:14,000 Però més específicament, és una plantilla. 372 00:21:14,000 --> 00:21:19,000 Aquesta és una espècie de model del que ara volem que l'encapçalament de cada pàgina perquè sembli, 373 00:21:19,000 --> 00:21:23,000 però hi ha una mica de dinamisme en què volem que el títol que s'insereixen dinàmicament 374 00:21:23,000 --> 00:21:26,000 sobre la base de la variable de títol 375 00:21:26,000 --> 00:21:30,000 que s'extreu quan diem, de nou, 376 00:21:30,000 --> 00:21:33,000 la funció del cap de render. 377 00:21:33,000 --> 00:21:36,000 Ara bé, si ens fixem en peu de render, hi ha realment no serveix de molt d'això en aquest moment 378 00:21:36,000 --> 00:21:40,000 perquè en footer.php no hi ha dinamisme en absolut. 379 00:21:40,000 --> 00:21:43,000 No pot ser, però de moment es tracta d'una llista codificada dur de 2 etiquetes, 380 00:21:43,000 --> 00:21:46,000 però la mateixa idea s'aplica, de manera que en realitat suggereix per què 381 00:21:46,000 --> 00:21:49,000 vam perdre el temps amb una capçalera i una funció render render peu de pàgina? 382 00:21:49,000 --> 00:21:52,000 Deixa anar al seu lloc, ara a la versió 3, 383 00:21:52,000 --> 00:21:56,000 i en la versió 3 d'ajudants que em vaig decidir a simplificar encara més. 384 00:21:56,000 --> 00:21:58,000 >> Deixa tenir una funció de representació. 385 00:21:58,000 --> 00:22:02,000 Deixa haver de prendre un altre argument, aquesta vegada anomenat plantilla, 386 00:22:02,000 --> 00:22:05,000 que està destinat a ser el nom d'una plantilla, 387 00:22:05,000 --> 00:22:11,000 i després vaig a concatenar amb presumpció. php al valor d'aquesta variable, 388 00:22:11,000 --> 00:22:17,000 i després, si és que existeix, o Bar.php foo.php header.php i footer.php, 389 00:22:17,000 --> 00:22:20,000 llavors jo seguiré endavant i extreure les dades variables 390 00:22:20,000 --> 00:22:23,000 i després requerir aquest camí. 391 00:22:23,000 --> 00:22:29,000 En altres paraules, per utilitzar això ara, si obro index.php 392 00:22:29,000 --> 00:22:32,000 adonar que jo no en dic encapçalat rendeixen més. 393 00:22:32,000 --> 00:22:36,000 Acabo de trucar a retre, però em passa un valor de cotització de la capçalera 394 00:22:36,000 --> 00:22:39,000 per deixar en clar que la plantilla que en realitat vol carregar. 395 00:22:39,000 --> 00:22:41,000 >> Llavors aquí adonar del que estic fent. 396 00:22:41,000 --> 00:22:44,000 Estic de pas en una dinàmica clau del títol, 397 00:22:44,000 --> 00:22:47,000 un valor de CS50, i això també, com vam veure abans, 398 00:22:47,000 --> 00:22:51,000 podria ser més breu en l'última versió de PHP 399 00:22:51,000 --> 00:22:54,000 on puc reemplaçar la funció de matriu amb claudàtors, 400 00:22:54,000 --> 00:22:57,000 que proposo és encara més fàcil de llegir i, certament, 401 00:22:57,000 --> 00:22:59,000 una mica més fàcil d'escriure. 402 00:22:59,000 --> 00:23:02,000 I, per descomptat, amb l'anomenada render peu de pàgina a la part inferior, 403 00:23:02,000 --> 00:23:05,000 no ens preocupem passant un segon argument en absolut, cap conjunt associatiu, 404 00:23:05,000 --> 00:23:07,000 perquè no hi ha res dins d'aquesta dinàmica peu de pàgina. 405 00:23:07,000 --> 00:23:10,000 Són només algunes etiquetes de tancament per a HTML. 406 00:23:10,000 --> 00:23:14,000 Bé, estem fent passos cap realment netejant les coses aquí, 407 00:23:14,000 --> 00:23:17,000 però m'ho dius a mi obrir dos últims exemples. 408 00:23:17,000 --> 00:23:21,000 Aquest, número 4, observi que he pres una decisió conscient ara 409 00:23:21,000 --> 00:23:26,000 per millorar l'exemple anterior finalment utilitzant alguna jerarquia per als meus arxius. 410 00:23:26,000 --> 00:23:29,000 >> Noteu que en aquest resum, en aquest llegir-me, m'he introduït 411 00:23:29,000 --> 00:23:32,000 inclou un directori i un directori de plantilles 412 00:23:32,000 --> 00:23:35,000 els continguts seran les coses que voleu incloure 413 00:23:35,000 --> 00:23:38,000 i les plantilles que vull fer, respectivament. 414 00:23:38,000 --> 00:23:42,000 Això és realment ser jo anal i tractant de mantenir les coses ordenades, 415 00:23:42,000 --> 00:23:45,000 mantenir els arxius relacionats entre si, però el resultat final 416 00:23:45,000 --> 00:23:48,000 és que ara té una configuració una mica més ordenat, però hem de recordar ara 417 00:23:48,000 --> 00:23:51,000 a, per exemple, index.php 418 00:23:51,000 --> 00:23:55,000 quan es requereix l'arxiu helpers.php 419 00:23:55,000 --> 00:24:01,000 tenim que ara ho requereixin a través includes / helpers.php 420 00:24:01,000 --> 00:24:06,000 en comptes de dir helpers.php perquè ara és realitat en un subdirectori. 421 00:24:06,000 --> 00:24:09,000 Ara, en un apart, podràs veure en aquests exemples i alguns altres 422 00:24:09,000 --> 00:24:11,000 funcions com requereixen, requereixen una vegada. 423 00:24:11,000 --> 00:24:15,000 De fet, hi ha una funció es va cridar inclouen, i tots ells tenen un comportament lleugerament diferent. 424 00:24:15,000 --> 00:24:18,000 Aquí em diuen necessitar un cop per fer súper clar que jo només vull que aquells 425 00:24:18,000 --> 00:24:20,000 ajudants inclòs en el meu projecte un cop. 426 00:24:20,000 --> 00:24:24,000 Però si sóc acurat i si realment estic pensant en la meva lògica correctament 427 00:24:24,000 --> 00:24:27,000 hauria de ser suficient també per dir requerir fins a dalt 428 00:24:27,000 --> 00:24:31,000 sempre que jo mateix no voler exigir aquest mateix arxiu en un altre lloc. 429 00:24:31,000 --> 00:24:34,000 De fet, aquesta és una forma lleugerament més eficient de fer les coses a continuació, utilitzant 430 00:24:34,000 --> 00:24:38,000 exigir una vegada, així que vaig a retallar a només requereixen. 431 00:24:38,000 --> 00:24:40,000 >> Anem a fer un pas més. 432 00:24:40,000 --> 00:24:46,000 Aquest últim exemple ara, la versió 5, té una jerarquia de carpetes encara més net. 433 00:24:46,000 --> 00:24:50,000 Noti el que he fet aquí per la llegir-me en aquesta versió final 434 00:24:50,000 --> 00:24:54,000 Ara tinc el meu directori HTML, que he tingut tot aquest temps, 435 00:24:54,000 --> 00:24:58,000 però dins d'allí ara és només lectures.php index.php, 436 00:24:58,000 --> 00:25:01,000 week1.php i week2.php. 437 00:25:01,000 --> 00:25:05,000 El directori inclou ara conviu amb el directori d'HTML, 438 00:25:05,000 --> 00:25:08,000 almenys el mateix nivell com un germà, per dir-ho. 439 00:25:08,000 --> 00:25:10,000 El mateix succeeix amb la carpeta de plantilles. 440 00:25:10,000 --> 00:25:14,000 El punt clau aquí és que he introduït estructura una mica més, 441 00:25:14,000 --> 00:25:17,000 però la característica principal ara és que només els arxius 442 00:25:17,000 --> 00:25:21,000 que necessiten estar web accessible públicament direccionable 443 00:25:21,000 --> 00:25:25,000 per una direcció URL al Internet estan en el meu directori HTML. 444 00:25:25,000 --> 00:25:28,000 >> Arxius Mentrestant, altres, helpers.php, footer.php, 445 00:25:28,000 --> 00:25:32,000 header.php, que són sens dubte potser més sensibles, 446 00:25:32,000 --> 00:25:35,000 potser ajudants en realitat té alguns noms d'usuari i contrasenyes o algun intel · lectual 447 00:25:35,000 --> 00:25:39,000 propietat de la mina, funciona de veritat no volen que el món vegi, encara que accidentalment. 448 00:25:39,000 --> 00:25:45,000 És una bona pràctica per mantenir fora del directori públic d'HTML 449 00:25:45,000 --> 00:25:48,000 tots els arxius que no siguin necessaris per ser públic. 450 00:25:48,000 --> 00:25:51,000 Tot el que has de fer en aquest cas, en mirar, per exemple, 451 00:25:51,000 --> 00:25:55,000 arxiu index.php del directori en HTML, 452 00:25:55,000 --> 00:25:58,000 compte que només hem de ser una mica més curosos quan es requereix 453 00:25:58,000 --> 00:26:00,000 o requereixen un cop aquest arxiu. 454 00:26:00,000 --> 00:26:03,000 Que he de fer primer .. anar al directori pare, 455 00:26:03,000 --> 00:26:06,000 Llavors, / includes / helpers.php 456 00:26:06,000 --> 00:26:12,000 per submergir-se de nou en descarregar el fitxer que m'importa. 457 00:26:12,000 --> 00:26:16,000 >> Qualsevol pregunta llavors sobre MVC 458 00:26:16,000 --> 00:26:20,000 o aquesta encarnació relativament senzilla d'aquests? 459 00:26:20,000 --> 00:26:23,000 I vull deixar clar que ens centrem una mica en el 460 00:26:23,000 --> 00:26:27,000 V aquí, les vistes i el factoring fora d'aquestes plantilles. 461 00:26:27,000 --> 00:26:30,000 No hem realment distingeix M de C encara. 462 00:26:30,000 --> 00:26:33,000 De fet, realment no hi ha M aquí i fins i tot el nostre C, 463 00:26:33,000 --> 00:26:36,000 controlador, no està realment fent gairebé res, però vostè aconseguirà molt més 464 00:26:36,000 --> 00:26:39,000 familiaritzats amb aquests dos 2 cartes de MVC, 465 00:26:39,000 --> 00:26:43,000 o millor dit, vostè obtindrà molt més familiaritzats amb la C 466 00:26:43,000 --> 00:26:49,000 MVC en conjunt per al problema 7, així que hi ha més d'això a l'horitzó. 467 00:26:49,000 --> 00:26:51,000 Preguntes? 468 00:26:51,000 --> 00:26:53,000 En realitat hi ha ningú aquí. 469 00:26:53,000 --> 00:26:57,000 >> Bé, passarem ara al segon tema i última per avui. 470 00:26:57,000 --> 00:27:00,000 Que és la introducció d'una base de dades. 471 00:27:00,000 --> 00:27:03,000 Fins aquest punt hem tingut algunes maneres d'emmagatzemar dades. 472 00:27:03,000 --> 00:27:05,000 Hem utilitzat variables. 473 00:27:05,000 --> 00:27:08,000 De tornada al nostre arxiu de C, I / O discussió que vam començar a utilitzar arxius de text 474 00:27:08,000 --> 00:27:11,000 i de l'ús de com fprintf, i després va començar fins i tot 475 00:27:11,000 --> 00:27:14,000 parlant csv una mica, valors separats per comes, 476 00:27:14,000 --> 00:27:17,000 pel que tots ells ens ha permès disposar de dades emmagatzemades 477 00:27:17,000 --> 00:27:19,000 o bé no persistent o persistent. 478 00:27:19,000 --> 00:27:23,000 Però fins i tot CSV en realitat no són propícies per a la recerca 479 00:27:23,000 --> 00:27:25,000 i la inserció i eliminació. 480 00:27:25,000 --> 00:27:28,000 En realitat és un arxiu de text separat per comes estúpid 481 00:27:28,000 --> 00:27:30,000 fila per fila a fila per fila, de manera que si voleu 482 00:27:30,000 --> 00:27:32,000 buscar aquest arxiu el millor que pots fer realment és la recerca lineal. 483 00:27:32,000 --> 00:27:34,000 Vostè ha de començar a la part superior de l'arxiu, llegir-ho tot en, 484 00:27:34,000 --> 00:27:36,000 i buscar algun valor d'interès. 485 00:27:36,000 --> 00:27:39,000 Per inserir-hi que ha de fer la mateixa cosa, 486 00:27:39,000 --> 00:27:41,000 iterar sobre ella i la inserció en un determinat lloc, 487 00:27:41,000 --> 00:27:45,000 i de fet, vostè ha de fer tota la lògica de la recerca vostè mateix. 488 00:27:45,000 --> 00:27:49,000 >> No es pot fer disseny intel · ligent corresponent en un arxiu CSV si no s'escriu el codi. 489 00:27:49,000 --> 00:27:51,000 No es pot fer la filtració d'un arxiu CSV 490 00:27:51,000 --> 00:27:53,000 llevat que s'escriu el codi. 491 00:27:53,000 --> 00:27:56,000 No seria bo si algú va posar tot l'esforç 492 00:27:56,000 --> 00:27:59,000 per fer realitat la recerca senzilla i una fàcil inserció 493 00:27:59,000 --> 00:28:01,000 i eliminació i actualització i així successivament? 494 00:28:01,000 --> 00:28:04,000 Això és exactament el que és una base de dades. 495 00:28:04,000 --> 00:28:07,000 SQL, llenguatge de consulta estructurat, és un altre idioma 496 00:28:07,000 --> 00:28:10,000 que estem presentant aquí avui, però això també és bastant accessible, 497 00:28:10,000 --> 00:28:13,000 i el que realment farem és simplement arrencar d'ella alguns dels més destacats 498 00:28:13,000 --> 00:28:16,000 característiques de manera que per pset 7, i si ho fa alguna cosa basat web, 499 00:28:16,000 --> 00:28:19,000 seu projecte final, vostè té la capacitat d'expressar- 500 00:28:19,000 --> 00:28:22,000 en termes de consultes de dades. 501 00:28:22,000 --> 00:28:25,000 Vostè té la capacitat d'emmagatzemar una petita o una gran quantitat de dades 502 00:28:25,000 --> 00:28:28,000 d'una manera molt més estructurat que al final de la dia 503 00:28:28,000 --> 00:28:32,000 fer la seva vida més fàcil, perquè amb SQL pot expressar 504 00:28:32,000 --> 00:28:35,000 amb molta més precisió, molt més metòdica per tal de 505 00:28:35,000 --> 00:28:40,000 tornar algun subconjunt de dades d'un corpus més gran de dades. 506 00:28:40,000 --> 00:28:45,000 >> Vostè pot pensar en una base de dades, en aquest cas, una base de dades SQL, realment com Excel 507 00:28:45,000 --> 00:28:48,000 o Els nombres en què és un full de càlcul, 508 00:28:48,000 --> 00:28:50,000 o potser múltiples fulls de càlcul, i un full de càlcul, per descomptat, 509 00:28:50,000 --> 00:28:53,000 té files i columnes, i això és perquè 510 00:28:53,000 --> 00:28:56,000 Bases de dades SQL són relacionals, relacionals, en el sentit 511 00:28:56,000 --> 00:28:59,000 que emmagatzemen les dades en termes d'aquestes taules, 512 00:28:59,000 --> 00:29:01,000 files i columnes. 513 00:29:01,000 --> 00:29:03,000 Són de major rendiment que alguna cosa així com un full de càlcul, 514 00:29:03,000 --> 00:29:05,000 i un full de càlcul està destinat a ser usat per un humà. 515 00:29:05,000 --> 00:29:08,000 Una base de dades està destinada a ser utilitzada pel programador 516 00:29:08,000 --> 00:29:12,000 escriure codi en contra, de manera que l'encarnació d'una base de dades 517 00:29:12,000 --> 00:29:14,000 serà la línia d'ordres. 518 00:29:14,000 --> 00:29:18,000 >> Una de les bases de dades relacionals més populars que hi ha és, de nou, MySQL, 519 00:29:18,000 --> 00:29:22,000 que és meravellosament lliure, rendiment molt alt, i això és el 520 00:29:22,000 --> 00:29:24,000 Facebook utilitza molt d'hora i fins a cert punt encara avui 521 00:29:24,000 --> 00:29:27,000 per emmagatzemar una gran quantitat de les seves dades, i ens veurem en un moment 522 00:29:27,000 --> 00:29:30,000 que l'ús de comandaments relativament simples 523 00:29:30,000 --> 00:29:33,000 podem seleccionar les dades, les dades d'inserció, actualització de dades, 524 00:29:33,000 --> 00:29:37,000 supressió de les dades i similars, però per sort, hi ha una més fàcil d'usar interfície 525 00:29:37,000 --> 00:29:39,000 que simplement escrivint en l'intèrpret de negre i blanc. 526 00:29:39,000 --> 00:29:43,000 Farem servir per pset 7 i més enllà d'una eina gratuïta anomenada phpMyAdmin. 527 00:29:43,000 --> 00:29:45,000 El nom és una coincidència. 528 00:29:45,000 --> 00:29:47,000 L'eina passa a ser implementat en PHP, 529 00:29:47,000 --> 00:29:49,000 però això és bàsicament irrellevant. 530 00:29:49,000 --> 00:29:53,000 Quina és important sobre phpMyAdmin és que és una utilitat basada en web. 531 00:29:53,000 --> 00:29:55,000 L'hem pre-instal · lat al dispositiu per a vostè, 532 00:29:55,000 --> 00:29:58,000 i amb ell es poden crear taules en una base de dades, 533 00:29:58,000 --> 00:30:01,000 pot inserir dades, eliminar dades, i vegeu en general 534 00:30:01,000 --> 00:30:04,000 seves dades d'una manera bastant fàcil d'usar entorn. 535 00:30:04,000 --> 00:30:07,000 Els usuaris no podran utilitzar phpMyAdmin. 536 00:30:07,000 --> 00:30:09,000 >> Això és realment només una eina administrativa o desenvolupador 537 00:30:09,000 --> 00:30:12,000 amb la qual veure i furgar seves dades i trobar la manera d'estructurar, 538 00:30:12,000 --> 00:30:15,000 igual que vostè podria utilitzar Excel o Numbers, 539 00:30:15,000 --> 00:30:19,000 però serà una gran manera de visualitzar el que està passant sota la caputxa 540 00:30:19,000 --> 00:30:22,000 de manera que vostè pugui centrar-se en resoldre el problema interessant i no tant 541 00:30:22,000 --> 00:30:25,000 relativa a les ordres arcans. 542 00:30:25,000 --> 00:30:28,000 Fem una ullada a un exemple de les dades que puguin ser emmagatzemats tabularly 543 00:30:28,000 --> 00:30:30,000 en una base de dades relacional. 544 00:30:30,000 --> 00:30:32,000 Heus aquí un exemple. 545 00:30:32,000 --> 00:30:35,000 Ara, per desgràcia, phpMyAdmin va cometre un error en el costat de manera que llança massa moltes paraules 546 00:30:35,000 --> 00:30:38,000 i gràfics en vostè, però si vostè acaba d'afinar en la 547 00:30:38,000 --> 00:30:42,000 Columna ID, la columna de nom d'usuari i la columna de hash, 548 00:30:42,000 --> 00:30:45,000 això és en realitat un full de càlcul, sinó que passa a ser un fragment 549 00:30:45,000 --> 00:30:49,000 d'una taula dins de l'aparell 550 00:30:49,000 --> 00:30:53,000 Un fitxer que posem a la seva disposició en conjunt de problemes 7. 551 00:30:53,000 --> 00:30:57,000 >> En particular, li donem un arxiu que representa 552 00:30:57,000 --> 00:31:01,000 taula d'un usuari, de manera que un full de càlcul que conté els usuaris amb 3 columnes, 553 00:31:01,000 --> 00:31:05,000 un dels quals és un identificador únic a partir de l'1 i s'incrementa a partir de llavors. 554 00:31:05,000 --> 00:31:08,000 La segona columna és un nom d'usuari i aquells de vostès que van fer Hacker, 555 00:31:08,000 --> 00:31:12,000 l'edició de Hacker per pset 2, podria reconèixer alguns d'aquests noms d'usuari com a mínim. 556 00:31:12,000 --> 00:31:16,000 Pel costat de la dreta són les contrasenyes, però no són contrasenyes literals. 557 00:31:16,000 --> 00:31:19,000 Són els hashes dels mateixos, de manera que resulta 558 00:31:19,000 --> 00:31:22,000 que l'emmagatzematge de contrasenyes en una base de dades és una idea realment dolenta. 559 00:31:22,000 --> 00:31:25,000 Tots vostès han llegit probablement en algun moment d'un lloc web 560 00:31:25,000 --> 00:31:28,000 base de dades o alguna empresa es vegi compromesa, i llavors vostè ha de 561 00:31:28,000 --> 00:31:31,000 canviar la contrasenya, vostè necessita per obtenir reemborsaments en les coses 562 00:31:31,000 --> 00:31:34,000 perquè un tipus dolent en realitat es va trencar en el seu compte com a resultat. 563 00:31:34,000 --> 00:31:38,000 >> Emmagatzemar les contrasenyes en text clar, sense xifrar en una base de dades 564 00:31:38,000 --> 00:31:41,000 és completament estúpid, i no obstant això és molt divertit 565 00:31:41,000 --> 00:31:44,000 després de llegir sobre algunes companyies molt conegudes 566 00:31:44,000 --> 00:31:47,000 de vegades en la premsa les bases de dades estan en perill, 567 00:31:47,000 --> 00:31:50,000 i aquesta part no és graciós, però sense encriptar el fet que les bases de dades contenen 568 00:31:50,000 --> 00:31:53,000 contrasenyes és ridícul, perquè, literalment, amb una línia de codi 569 00:31:53,000 --> 00:31:57,000 vostè pot protegir contra aquesta amenaça en particular, i això és el que hem fet aquí. 570 00:31:57,000 --> 00:32:00,000 Fins i tot per a la nostra petita versió falsa Finances CS50 571 00:32:00,000 --> 00:32:03,000 estem encriptar contrasenyes només per si de cas, i que el fet de 572 00:32:03,000 --> 00:32:07,000 totes aquestes contrasenyes començar amb $ 1 $ és només una convenció. 573 00:32:07,000 --> 00:32:10,000 Això només vol dir que estan encriptats o hash en realitat, 574 00:32:10,000 --> 00:32:13,000 que és com una funció d'encriptació d'un sol sentit 575 00:32:13,000 --> 00:32:17,000 per la qual cosa no es pot revertir els seus efectes amb una cosa anomenada MD5. 576 00:32:17,000 --> 00:32:21,000 >> El fet que és 50 després que significa que un valor de la sal 577 00:32:21,000 --> 00:32:24,000 de 50 es va utilitzar per hash totes aquestes contrasenyes a excepció d'una. 578 00:32:24,000 --> 00:32:27,000 Mines, per descomptat, com vostè pot veure que hi ha, HA, 579 00:32:27,000 --> 00:32:30,000 estava usant una sal diferent, de manera que aquells de vostès que he disparat lleugerament cap amunt 580 00:32:30,000 --> 00:32:33,000 potser en Hacker 2, que podria haver estat el resultat d'haver utilitzat 581 00:32:33,000 --> 00:32:36,000 un hash diferent als altres, perquè la contrasenya és en realitat la mateixa 582 00:32:36,000 --> 00:32:38,000 com algun altre usuari-hi. 583 00:32:38,000 --> 00:32:41,000 De fet, si vostè ha estat esperant totes aquestes setmanes per esbrinar 584 00:32:41,000 --> 00:32:44,000 el que les contrasenyes estaven aquí eren les contrasenyes que van ser impugnats 585 00:32:44,000 --> 00:32:48,000 per acabar en l'edició del butlletí de problemes Hacker 2, així que no és massa difícil. 586 00:32:48,000 --> 00:32:50,000 De fet, de Malan era el mateix que jharvard, 587 00:32:50,000 --> 00:32:54,000 però si ens remuntem es veia diferent. 588 00:32:54,000 --> 00:32:58,000 >> Centrar-se en jharvard a carmesí, ja que van ser salades diferent. 589 00:32:58,000 --> 00:33:01,000 L'algorisme va ser pertorbat de manera que la 590 00:33:01,000 --> 00:33:05,000 hash de valor, el valor xifrat es veu una mica diferent 591 00:33:05,000 --> 00:33:08,000 perquè les entrades eren lleugerament diferents, però la contrasenya sota el capó 592 00:33:08,000 --> 00:33:10,000 seguia sent en última instància carmesí. 593 00:33:10,000 --> 00:33:12,000 Ara, qui es preocupa per això? 594 00:33:12,000 --> 00:33:15,000 Bé, nosaltres estem proporcionant als usuaris de la mostra, els noms d'usuari de mostra 595 00:33:15,000 --> 00:33:18,000 i els hashes de les contrasenyes perquè vostè realment té alguna cosa de 596 00:33:18,000 --> 00:33:23,000 clients per CS50 Finances quan vostè arriba fora de la terra amb el seu codi. 597 00:33:23,000 --> 00:33:27,000 Vas a haver d'implementar més taules a l'interior de MySQL, a l'interior de la base de dades. 598 00:33:27,000 --> 00:33:30,000 Vas a haver de crear més fulls de càlcul, de manera efectiva, però vam decidir que donar a aquest un 599 00:33:30,000 --> 00:33:33,000 per començar, i veuràs que l'especificació conjunt de problemes 600 00:33:33,000 --> 00:33:37,000 el guia durant el procés d'importació d'aquesta taula 601 00:33:37,000 --> 00:33:39,000 i també explicar quins són algunes de les característiques són, 602 00:33:39,000 --> 00:33:41,000 i vostè també veurà que posem a la seva disposició el codi 603 00:33:41,000 --> 00:33:44,000 per manejar el hashing o el xifrat d'aquestes contrasenyes, 604 00:33:44,000 --> 00:33:49,000 de manera que no cal preocupar-se massa sobre el MD5 o similars és realment tot. 605 00:33:49,000 --> 00:33:53,000 >> Per tant, SQL, llenguatge de consulta estructurat. 606 00:33:53,000 --> 00:33:56,000 Això és, simplement, el llenguatge que està a punt de començar a utilitzar en pset 7 607 00:33:56,000 --> 00:34:01,000 i potser més enllà per sol · licitar dades d'alguna base de dades. 608 00:34:01,000 --> 00:34:06,000 Les dades són, de nou, emmagatzemada tabularly en aquestes taules relacionals, columnes i files, 609 00:34:06,000 --> 00:34:09,000 però utilitzant una sintaxi relativament simple com esborrar, 610 00:34:09,000 --> 00:34:12,000 inserir, actualitzar i seleccioneu podem fer exactament això. 611 00:34:12,000 --> 00:34:15,000 Podem eliminar de la base de dades, inserir, 612 00:34:15,000 --> 00:34:19,000 actualitzar les dades, així com seleccionar, és a dir, recuperar dades de la base de dades. 613 00:34:19,000 --> 00:34:21,000 Com podem fer això? 614 00:34:21,000 --> 00:34:23,000 Deixa anar per davant en l'aparell. 615 00:34:23,000 --> 00:34:28,000 Deixa aixecar http://localhost, 616 00:34:28,000 --> 00:34:30,000 que, de nou, és l'aparell local en si. 617 00:34:30,000 --> 00:34:32,000 Aquesta és el seu sobrenom per defecte. 618 00:34:32,000 --> 00:34:35,000 I m'ho dius a mi anar a / phpmyadmin. 619 00:34:35,000 --> 00:34:39,000 Això passa a ser una URL especial que el dispositiu està preconfigurat per entendre 620 00:34:39,000 --> 00:34:42,000 que immediatament em demana un nom d'usuari i contrasenya. 621 00:34:42,000 --> 00:34:46,000 >> Com de costum, vaig a escriure jharvard i carmesí, 622 00:34:46,000 --> 00:34:48,000 però s'adonen que aquest compte d'administrador a l'ordinador. 623 00:34:48,000 --> 00:34:53,000 És només una coincidència que també hi ha una jharvard registrat per CS50 Finances. 624 00:34:53,000 --> 00:34:56,000 Jharvard, carmesí, enter em dóna la interfície d'usuari que hem vist 625 00:34:56,000 --> 00:34:59,000 una idea de fa un moment, i és una mica aclaparador al principi, 626 00:34:59,000 --> 00:35:02,000 però pot estar segur, mai hauràs de fer clic a la majoria dels enllaços en aquesta eina. 627 00:35:02,000 --> 00:35:05,000 Vostè va a acabar amb un petit subconjunt que és super útil, 628 00:35:05,000 --> 00:35:08,000 la primera de les quals és bases de dades fins aquí. 629 00:35:08,000 --> 00:35:11,000 Si pujo a bases de dades, observi que estic demanarà que creï una base de dades. 630 00:35:11,000 --> 00:35:14,000 Això és com crear un nou arxiu d'Excel, amb eficàcia. 631 00:35:14,000 --> 00:35:18,000 Vaig a seguir endavant i anomenar aquesta conferència, i jo només vaig a ignorar el camp allà, la confrontació. 632 00:35:18,000 --> 00:35:20,000 Té a veure amb la representació de dades en el mateix, 633 00:35:20,000 --> 00:35:24,000 i jo vaig a crear, feu clic a, i ara adonar que em deixo portar per crear 634 00:35:24,000 --> 00:35:27,000 a la banda esquerra on diu sense bases de dades 635 00:35:27,000 --> 00:35:30,000 Aviat hauria de veure la base de dades de lectura. 636 00:35:30,000 --> 00:35:32,000 >> Si jo ara feu clic al costat esquerre, la base de dades de conferències, 637 00:35:32,000 --> 00:35:34,000 compte dels meus pestanyes canvien una mica. 638 00:35:34,000 --> 00:35:38,000 Tinc estructura, SQL, exportació, importació i algunes altres coses. 639 00:35:38,000 --> 00:35:40,000 L'estructura és gairebé blanc. 640 00:35:40,000 --> 00:35:43,000 No hi ha taules es troben a la base de dades, com es diu aquí, 641 00:35:43,000 --> 00:35:47,000 així que crearem una taula, i seguirem endavant i crear una taula 642 00:35:47,000 --> 00:35:53,000 com els estudiants, i el nombre de columnes que volem? 643 00:35:53,000 --> 00:35:55,000 Anem a mantenir aquest senzill, i ens va deixar registre de cada estudiant 644 00:35:55,000 --> 00:35:58,000 un número d'identificació, un nom i una adreça de correu electrònic. 645 00:35:58,000 --> 00:36:02,000 >> Anem a mantenir simple com això, així que 3 columnes, vaja. 646 00:36:02,000 --> 00:36:05,000 La manera com vostè veu aquí és ara una mica més complicat i aclaparador, 647 00:36:05,000 --> 00:36:08,000 però només hem d'anar a través d'ell fila per fila, de manera molt ràpid donarem 648 00:36:08,000 --> 00:36:14,000 la primera columna d'aquesta base de dades un nom de ID per l'identificador únic. 649 00:36:14,000 --> 00:36:17,000 Serà un nombre enter. De fet, em pot passar per alt la longitud i els valors. 650 00:36:17,000 --> 00:36:21,000 Un String que serà de 32 bits no importa el que escrigui en allà, així que anem a deixar-ho en blanc. 651 00:36:21,000 --> 00:36:24,000 El valor per defecte, jo podria fer nul, com es defineix. 652 00:36:24,000 --> 00:36:27,000 Vaig a deixar que sol. No cal preocupar-se pels valors per defecte. 653 00:36:27,000 --> 00:36:29,000 Anem a desplaçar-se cap aquí als atributs correctes,. 654 00:36:29,000 --> 00:36:31,000 Això és interessant. 655 00:36:31,000 --> 00:36:33,000 Seguirem endavant i dir que alguna cosa arbitràriament ID han de ser signats. 656 00:36:33,000 --> 00:36:35,000 No perdem els nombres negatius. 657 00:36:35,000 --> 00:36:37,000 >> Anirem des 0-4000000000, més o menys, 658 00:36:37,000 --> 00:36:40,000 i llavors no tocarem qualsevol d'aquests camps encara per allà, 659 00:36:40,000 --> 00:36:43,000 però després em deixa escriure el nom aquí baix, 660 00:36:43,000 --> 00:36:46,000 i després l'altre era el correu electrònic, de manera que la captura és el correu electrònic 661 00:36:46,000 --> 00:36:50,000 i el nom, òbviament no sencers, així que anem a canviar aquests termes en un camp diferent. 662 00:36:50,000 --> 00:36:53,000 Resulta VARCHAR, longitud variable char, 663 00:36:53,000 --> 00:36:56,000 És com una cadena en una base de dades SQL 664 00:36:56,000 --> 00:36:59,000 però una longitud variable, i que realment ha de saber per endavant el 665 00:36:59,000 --> 00:37:02,000 longitud màxima de la cadena, així que vaig a un tant arbitràriament 666 00:37:02,000 --> 00:37:05,000 per tipus de convencions de 255 caràcters. 667 00:37:05,000 --> 00:37:08,000 Estic totalment d'pot dir 32. Podria dir 1.000. 668 00:37:08,000 --> 00:37:11,000 D'alguna manera la necessitat de decidir per si mateix sobre la base del que és la seva demografia 669 00:37:11,000 --> 00:37:14,000 el més llarg el nom de l'estudiant i vagi amb aquest nombre o una mica més gran, 670 00:37:14,000 --> 00:37:17,000 però el que és bo d'un VARCHAR és que no perdrà 671 00:37:17,000 --> 00:37:19,000 255 bytes en el nom de cada estudiant. 672 00:37:19,000 --> 00:37:23,000 Si es tracta d'DAVID no va a utilitzar en el seu conjunt 255 bytes, 673 00:37:23,000 --> 00:37:26,000 però això és un límit superior, així que vaig a anar amb 255 només per convenció, 674 00:37:26,000 --> 00:37:30,000 però podria debatre que per ser un valor més baix, i per adreça de correu electrònic 675 00:37:30,000 --> 00:37:34,000 només per ser coherent 255, però de nou, podríem tenir el mateix debat. 676 00:37:34,000 --> 00:37:36,000 Però jo vaig a fer una altra cosa aquí al costat dret. 677 00:37:36,000 --> 00:37:40,000 >> Què és poderós sobre una base de dades és que es pot fer un munt de treball pesat 678 00:37:40,000 --> 00:37:42,000 o el treball complex per a tu. 679 00:37:42,000 --> 00:37:46,000 En particular, realment no m'importa el que el meu número d'identificació de l'estudiant són. 680 00:37:46,000 --> 00:37:49,000 És només pretén ser un identificador únic en una base de dades 681 00:37:49,000 --> 00:37:52,000 així que tinc una representació concisa de 32-bit d'aquest estudiant 682 00:37:52,000 --> 00:37:55,000 així que tinc alguna forma d'identificació de manera única els 683 00:37:55,000 --> 00:37:58,000 que no hi hagi 2 Davids, per exemple, en una classe. 684 00:37:58,000 --> 00:38:01,000 De fet, vaig a marcar aquesta casella AI, increment automàtic, 685 00:38:01,000 --> 00:38:04,000 de manera que la base de dades MySQL, es dóna compte de 686 00:38:04,000 --> 00:38:08,000 què ID de cada estudiant recentment inserit serà. 687 00:38:08,000 --> 00:38:11,000 Ni tan sols ha de preocupar-se perquè en el meu codi, 688 00:38:11,000 --> 00:38:13,000 i jo també vaig a triar alguna cosa del menú d'índex. 689 00:38:13,000 --> 00:38:17,000 L'índex de caure per aquí ha primari, únic, 690 00:38:17,000 --> 00:38:19,000 índex i text complet. 691 00:38:19,000 --> 00:38:21,000 Vostè potser pot endevinar el que un parell d'aquestes coses, 692 00:38:21,000 --> 00:38:24,000 però resulta que en les bases de dades relacionals 693 00:38:24,000 --> 00:38:28,000 que el programador o l'administrador de base de dades per obtenir preventivament 694 00:38:28,000 --> 00:38:32,000 donar pistes a la base de dades pel que fa a quins camps 695 00:38:32,000 --> 00:38:34,000 en una taula són una mica especial. 696 00:38:34,000 --> 00:38:37,000 >> Per exemple, en aquest cas, jo vaig a dir que el DI 697 00:38:37,000 --> 00:38:42,000 serà un índex principal, també coneguda com a clau principal. 698 00:38:42,000 --> 00:38:44,000 El que això significa és que, per definició, d'ara endavant ID 699 00:38:44,000 --> 00:38:48,000 identificarà de manera única als estudiants en aquesta taula. 700 00:38:48,000 --> 00:38:53,000 Cap estudiant tindrà la mateixa identificació perquè estic imposar aquesta restricció o índex d'això. 701 00:38:53,000 --> 00:38:55,000 A més, el que això farà per mi és el que dirà 702 00:38:55,000 --> 00:38:58,000 MySQL ID que és especial. 703 00:38:58,000 --> 00:39:03,000 Em preocupo especialment sobre identificació, així que endavant i fer màgia a la seva estructura de dades de la fantasia, 704 00:39:03,000 --> 00:39:05,000 construir una espècie d'arbre. 705 00:39:05,000 --> 00:39:08,000 En general es tracta d'una cosa anomenada el B-tree, cosa que no ens fixem en setmanes, 706 00:39:08,000 --> 00:39:11,000 però és una altra estructura de dades similar en esperit als arbres binaris 707 00:39:11,000 --> 00:39:15,000 i tracta que ens mirem, però que dirà 708 00:39:15,000 --> 00:39:18,000 a la base de dades d'aquest camp és tan important que probablement 709 00:39:18,000 --> 00:39:22,000 Vull ser capaç de cercar-hi, seguir endavant i construir una mica de fantasia 710 00:39:22,000 --> 00:39:25,000 estructura de dades en la memòria per agilitzar les recerques de manera que idealment 711 00:39:25,000 --> 00:39:28,000 són la constant de temps o almenys el més a prop possible a la qual 712 00:39:28,000 --> 00:39:32,000 de manera que no delegar en recerca lineal, que no serà 713 00:39:32,000 --> 00:39:34,000 el més alt rendiment enfocament. 714 00:39:34,000 --> 00:39:37,000 Per contra, l'adreça de correu electrònic podria haver estat una clau principal. 715 00:39:37,000 --> 00:39:41,000 >> En teoria, l'adreça de correu electrònic de cada un és únic, llevat que vostè està compartint una mica de consideració, 716 00:39:41,000 --> 00:39:45,000 però no és generalment bona per utilitzar alguna cosa com una cadena 717 00:39:45,000 --> 00:39:49,000 com clau principal, perquè si el seu propòsit en la vida és la identificació exclusiva 718 00:39:49,000 --> 00:39:55,000 files de la taula no hi ha cap raó per utilitzar al màxim 255 bytes 719 00:39:55,000 --> 00:39:58,000 per identificar algú si vostè pot aconseguir lluny amb només 4 bytes 720 00:39:58,000 --> 00:40:00,000 o un int de 32-bit. 721 00:40:00,000 --> 00:40:03,000 En general, una clau principal ha de ser curt i concís 722 00:40:03,000 --> 00:40:07,000 i l'ideal seria com un nombre enter o un int gran, que passa a ser de 64 bits. 723 00:40:07,000 --> 00:40:11,000 No obstant això, una adreça de correu electrònic ha de ser únic, i una de les característiques d'una base de dades molt 724 00:40:11,000 --> 00:40:14,000 és per exigir l'exclusivitat per a mi. 725 00:40:14,000 --> 00:40:18,000 En seleccionar únic aquí al costat del correu electrònic, tot de si mateix per correu electrònic 726 00:40:18,000 --> 00:40:21,000 es desplaça fora de la pantalla, el que dic a la base de dades 727 00:40:21,000 --> 00:40:23,000 no confia en mi. 728 00:40:23,000 --> 00:40:26,000 No em deixis inserir a la base de dades 729 00:40:26,000 --> 00:40:29,000 la mateixa direcció dues vegades, encara que jo sóc un idiota i no sóc 730 00:40:29,000 --> 00:40:32,000 molt bé amb els meus IFS i IFS altre lloc i el codi PHP real 731 00:40:32,000 --> 00:40:37,000 i accidentalment deixa que l'usuari es registra en una adreça de correu electrònic existent 732 00:40:37,000 --> 00:40:40,000 la base de dades és un altre nivell de defensa per a la correcció 733 00:40:40,000 --> 00:40:44,000 per garantir que aquesta adreça de correu electrònic duplicats no acabi a la taula. 734 00:40:44,000 --> 00:40:49,000 >> Ara, per contra, per al nom és probable que no volen fer aquest únic 735 00:40:49,000 --> 00:40:51,000 perquè llavors no podria ser de 2 o 2 Davids Mike Smith, per exemple, 736 00:40:51,000 --> 00:40:55,000 a la base de dades, de manera que un de sol haurem de deixar-lo sol. 737 00:40:55,000 --> 00:40:58,000 Vaig a seguir endavant i feu clic a Desa a la part inferior dreta, 738 00:40:58,000 --> 00:41:02,000 i tot es veu bé, però noti aquí 739 00:41:02,000 --> 00:41:04,000 aquesta és una part que per ara no passarà molt de temps en 740 00:41:04,000 --> 00:41:07,000 perquè la sintaxi és una mica complex, i no és necessari crear taules 741 00:41:07,000 --> 00:41:10,000 molt sovint, però el propi SQL és un llenguatge, 742 00:41:10,000 --> 00:41:13,000 la sintaxi que aquí que he ressaltat. 743 00:41:13,000 --> 00:41:18,000 Què phpMyAdmin realment fa és que crea una interfície gràfica d'usuari basada en web per a vostè 744 00:41:18,000 --> 00:41:23,000 amb la qual es pot estalviar temps i no haver d'escriure manualment fora 745 00:41:23,000 --> 00:41:26,000 una consulta SQL bastant llarg així. 746 00:41:26,000 --> 00:41:29,000 >> En altres paraules, si voleu crear manualment aquesta taula, 747 00:41:29,000 --> 00:41:32,000 ja sigui en aquest phpMyAdmin en blanc i negre del sistema o fins i tot en 748 00:41:32,000 --> 00:41:35,000 mitjançant l'ús d'aquesta altra pestanya, aquesta pestanya SQL on pot escriure en qualsevol de les consultes SQL 749 00:41:35,000 --> 00:41:38,000 que desitja, francament, això m'hauria portat un minut 750 00:41:38,000 --> 00:41:41,000 per recordar en realitat la sintaxi completa, i fins i tot llavors probablement seria 751 00:41:41,000 --> 00:41:45,000 va fer alguns errors tipogràfics, pel que aquesta eina és molt útil per a coses com aquestes, i és també instructiu. 752 00:41:45,000 --> 00:41:49,000 Vostè pot començar a inferir el que la sintaxi és 753 00:41:49,000 --> 00:41:52,000 només pel color bonic de codificació que phpMyAdmin és l'addició de 754 00:41:52,000 --> 00:41:54,000 per a la nostra comoditat visual. 755 00:41:54,000 --> 00:41:56,000 Però ara anem a fer això al seu lloc. 756 00:41:56,000 --> 00:42:00,000 Deixa anar a la pestanya Inserir en la part superior, i m'ho dius a mi seguir endavant i introduir, per exemple, 757 00:42:00,000 --> 00:42:04,000 una identificació de, diguem, la veritat és que no m'importa. 758 00:42:04,000 --> 00:42:07,000 Va a increment automàtic. Vaig a deixar que la base de dades d'acord amb això. 759 00:42:07,000 --> 00:42:11,000 Però seré David, i el meu correu electrònic ha de ser malan@harvard.edu. 760 00:42:11,000 --> 00:42:16,000 >> Seguirem endavant i posar aquí a Mike Smith com un altre. 761 00:42:16,000 --> 00:42:18,000 Me'n vaig a donar un cognom al seu torn, 762 00:42:18,000 --> 00:42:22,000 i haurem ell sigui smith@example.com, 763 00:42:22,000 --> 00:42:24,000 i llavors, on puc anar ara? 764 00:42:24,000 --> 00:42:27,000 Bé, sembla que va és el botó per fer clic, i llest. 765 00:42:27,000 --> 00:42:30,000 Observeu en les 2 primeres files inserides. 766 00:42:30,000 --> 00:42:32,000 Aquesta és l'actual consulta SQL. 767 00:42:32,000 --> 00:42:36,000 Aquesta és l'eina phpMyAdmin executat per mi, 768 00:42:36,000 --> 00:42:40,000 però el resultat final, avís, si ara anem a la pestanya de navegació, 769 00:42:40,000 --> 00:42:43,000 és veure dues files en aquesta taula, recorda molt estèticament 770 00:42:43,000 --> 00:42:46,000 de la taula que vam veure anteriorment per als nostres usuaris de pset 7, 771 00:42:46,000 --> 00:42:51,000 un d'ells és David Malan, un dels quals ara és Mike Smith. 772 00:42:51,000 --> 00:42:54,000 Però per ser clars, no cal utilitzar phpMyAdmin, 773 00:42:54,000 --> 00:42:56,000 i, de fet, serà aviat l'escriptura de codi per pset 7 774 00:42:56,000 --> 00:43:01,000 que automatitza el procés d'agregar files, eliminació de files, l'actualització de files i similars, 775 00:43:01,000 --> 00:43:04,000 així que permetin-me en lloc d'anar a la pestanya SQL aquí 776 00:43:04,000 --> 00:43:14,000 i escriviu select * from on els estudiants 777 00:43:14,000 --> 00:43:18,000 email = "malan@harvard.edu". 778 00:43:18,000 --> 00:43:21,000 >> En altres paraules, suposem que ara té 779 00:43:21,000 --> 00:43:26,000 algun tipus HTML, i l'usuari tecleja la seva adreça de correu electrònic, entre d'altres camps, 780 00:43:26,000 --> 00:43:29,000 i l'objectiu ara és en el codi PHP en part posterior 781 00:43:29,000 --> 00:43:31,000 mirar realment fins altres detalls d'aquest usuari. 782 00:43:31,000 --> 00:43:34,000 Quin és el seu nom complet? Quin és el número d'identificació? 783 00:43:34,000 --> 00:43:37,000 Es pot escriure una consulta SQL com això, select * from estudiants 784 00:43:37,000 --> 00:43:40,000 on el correu electrònic = "malan@harvard.edu". 785 00:43:40,000 --> 00:43:46,000 I si jo faci clic a GO, nota que jo, i de fet ho fan, tornar una sola fila. 786 00:43:46,000 --> 00:43:50,000 Mike s'omet d'aquest conjunt de resultats, com la col · lecció de files 787 00:43:50,000 --> 00:43:53,000 que generalment es diu, perquè ell no té la mateixa adreça electrònica que jo. 788 00:43:53,000 --> 00:43:57,000 >> Ara, de nou, aquí per pset 7 farem servir phpMyAdmin com eina administrativa 789 00:43:57,000 --> 00:44:00,000 i una eina pedagògica per aprendre la seva manera 790 00:44:00,000 --> 00:44:03,000 a tot el món de SQL, però al final de la dia 791 00:44:03,000 --> 00:44:08,000 vostè estarà escrivint aquestes consultes dins de l'actual codi PHP, 792 00:44:08,000 --> 00:44:11,000 i així que estigueu atents a Zamyla tutorial en particular, 793 00:44:11,000 --> 00:44:14,000 on obtindrà un recorregut pel codi de distribució d'aquest butlletí de problemes 794 00:44:14,000 --> 00:44:18,000 on ens hem donat no només l'estètica de la pàgina d'inici de sessió 795 00:44:18,000 --> 00:44:21,000 i el bonic logo sexy que diu CS50 Finances, però també hem donat 796 00:44:21,000 --> 00:44:24,000 un munt de funcions que faran de la seva vida una mica més fàcil. 797 00:44:24,000 --> 00:44:27,000 També hem escrit part del conjunt de processadors per a vostè, 798 00:44:27,000 --> 00:44:32,000 la porció d'entrada d'aquest, en particular, per donar-li un sentit d'un disseny representatiu 799 00:44:32,000 --> 00:44:36,000 que utilitza realment un controlador, per exemple, index.php, 800 00:44:36,000 --> 00:44:40,000 login.php i similars, i llavors podràs veure el conjunt de processadors també té un directori de plantilles 801 00:44:40,000 --> 00:44:43,000 que té tots els seus punts de vista, totes les estètiques. 802 00:44:43,000 --> 00:44:46,000 I així, el flux de treball general en pset 7 va a ser que 803 00:44:46,000 --> 00:44:49,000 els usuaris visiten un controlador a través d'una URL en un navegador. 804 00:44:49,000 --> 00:44:53,000 Aquest controlador conté codi PHP que vostè va escriure, i dins del seu codi PHP 805 00:44:53,000 --> 00:44:57,000 podrien ser algunes línies de SQL niat entre cometes dobles 806 00:44:57,000 --> 00:45:00,000 i es passa a una funció que escrivim consulta denominat 807 00:45:00,000 --> 00:45:03,000 que l'ajudarà a parlar amb la base de dades sense necessitat d'utilitzar alguna cosa com 808 00:45:03,000 --> 00:45:05,000 una eina administrativa com phpMyAdmin. 809 00:45:05,000 --> 00:45:08,000 >> Vostè serà capaç d'escriure sentències SQL en codi PHP 810 00:45:08,000 --> 00:45:11,000 i recuperar una matriu de PHP del conjunt de resultats, 811 00:45:11,000 --> 00:45:14,000 de les files que en realitat responen a aquesta consulta. 812 00:45:14,000 --> 00:45:18,000 I de la mateixa manera serà capaç de fer insercions o eliminacions 813 00:45:18,000 --> 00:45:22,000 o actualitzacions o similars, la sintaxi per a això és bastant similar, 814 00:45:22,000 --> 00:45:25,000 i veuràs algunes de les referències en línia, des del codi de distribució 815 00:45:25,000 --> 00:45:29,000 i des del mateix conjunt de processadors empacar exactament com fer per fer això. 816 00:45:29,000 --> 00:45:33,000 Adonar-se que realment estem en última instància, només esgarrapant la superfície de SQL 817 00:45:33,000 --> 00:45:36,000 i de MySQL, però el poder de la veritat és que t'allibera 818 00:45:36,000 --> 00:45:40,000 per centrar-se en els problemes que vol resoldre, els casos d'ús que desitja implementar 819 00:45:40,000 --> 00:45:43,000 sense haver de preocupar absolutament tant, si més no al principi, 820 00:45:43,000 --> 00:45:47,000 sobre on i com emmagatzemar i buscar a la base de dades, 821 00:45:47,000 --> 00:45:50,000 i això és literalment el mateix Facebook, on té el seu inici 822 00:45:50,000 --> 00:45:53,000 usant MySQL i utilitzant més servidors MySQL i després més servidors MySQL 823 00:45:53,000 --> 00:45:57,000 en poc temps, fins que va haver de començar a pensar realment dur sobre com 824 00:45:57,000 --> 00:46:00,000 emmagatzemen les dades, la forma d'emmagatzemar les coses encara més eficient, 825 00:46:00,000 --> 00:46:04,000 així que, encara que donarem per fet el fet que els índexs i restriccions únics 826 00:46:04,000 --> 00:46:08,000 i així successivament només el treball hi ha una conversa molt interessant 827 00:46:08,000 --> 00:46:12,000 que tot això pot eventualment conduir a, així que adonar-se que només estem esgarrapant la superfície 828 00:46:12,000 --> 00:46:17,000 del que podria arribar per ell i els seus projectes siguin una mica de dades grans. 829 00:46:17,000 --> 00:46:22,000 >> Dit això, anem a acabar aquí, i ens veiem la setmana que ve. 830 00:46:28,000 --> 00:46:30,000 [CS50.TV]