1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Semana 8, Continuación] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Harvard University] 3 00:00:04,000 --> 00:00:08,000 [Esta é CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:13,000 >> Este é CS50, de xeito que este é o fin da Semana 8 aquí. 5 00:00:13,000 --> 00:00:16,000 Nós, por suposto, tiña un pouco de un furacán no comezo desta semana, 6 00:00:16,000 --> 00:00:19,000 entón agora é realmente só ti e eu nesta aula, 7 00:00:19,000 --> 00:00:22,000 pero hoxe, seguimos a nosa conversa sobre PHP 8 00:00:22,000 --> 00:00:25,000 e sobre a programación web en xeral, e tamén introducir a idea 9 00:00:25,000 --> 00:00:29,000 de bases de datos, especialmente un chamado MySQL, que é moi popular nos días de hoxe, 10 00:00:29,000 --> 00:00:34,000 en gran parte debido á súa escalabilidade, así como porque o seu ser libre e de código aberto. 11 00:00:34,000 --> 00:00:37,000 >> Pero, primeiro, un ollar de onde paramos a última vez. 12 00:00:37,000 --> 00:00:40,000 Lembre que estabamos a mirar para os varios exemplos Frosh mensaxería instantánea, 13 00:00:40,000 --> 00:00:44,000 e esta foi a forma horrible que eu vin cuns 15 + anos 14 00:00:44,000 --> 00:00:49,000 a fin de que os alumnos sobre rexistro campus para deportes Caloiro intramurais 15 00:00:49,000 --> 00:00:52,000 sen realmente ter que percorrer máis en todo o curro para Wigglesworth 16 00:00:52,000 --> 00:00:56,000 a desprazar unha peza físico de papel debaixo da porta algúns Proctor. 17 00:00:56,000 --> 00:00:59,000 En vez diso, cambiou todo en liña, pero para iso é necesario facer uso 18 00:00:59,000 --> 00:01:03,000 dalgunhas tecnoloxías, para un, necesitabamos HTML, linguaxe de marcado de hipertexto, 19 00:01:03,000 --> 00:01:07,000 que unha vez máis é esta linguaxe de marcado co que construír páxinas web estruturalmente. 20 00:01:07,000 --> 00:01:10,000 >> Empregando un pouco de CSS estes días, as follas de estilo en cascada, 21 00:01:10,000 --> 00:01:16,000 polo cal utilizamos estilizações da páxina web usando unha sintaxe un pouco diferente, 22 00:01:16,000 --> 00:01:19,000 mentres que o HTML foi todo sobre a súa estrutura. 23 00:01:19,000 --> 00:01:21,000 Necesitamos tamén de introducir unha linguaxe de programación web. 24 00:01:21,000 --> 00:01:25,000 Neste caso, imos empregar PHP e PHP vai permitir-nos 25 00:01:25,000 --> 00:01:28,000 a saída de contido de forma dinámica, así como facer as cousas como programáticas 26 00:01:28,000 --> 00:01:33,000 envío de e-mails, como foi o caso sobre a nota que saíu a semana pasada. 27 00:01:33,000 --> 00:01:35,000 >> Lembre que o código para iso foi en 2 partes. 28 00:01:35,000 --> 00:01:38,000 Un deles, tivemos froshims3.php, 29 00:01:38,000 --> 00:01:42,000 e este foi en gran parte de traza un formulario HTML dentro del, 30 00:01:42,000 --> 00:01:45,000 un pouco de CSS aquí os atributos de estilo 31 00:01:45,000 --> 00:01:48,000 para que a forma en si sería centrado na páxina, pero ademais 32 00:01:48,000 --> 00:01:51,000 tivemos algunhas entradas forma representativa, un campo de texto, unha caixa de verificación, 33 00:01:51,000 --> 00:01:55,000 botóns de radio, un menú de selección, e un botón de envío. 34 00:01:55,000 --> 00:02:01,000 E a través deste formulario, sometidos a un arquivo que foi aparentemente chamado register3.php, 35 00:02:01,000 --> 00:02:04,000 que por si só parece un pouco algo como isto. 36 00:02:04,000 --> 00:02:08,000 Agora, a maior parte do código register3.php, recall, era todo sobre e-mail. 37 00:02:08,000 --> 00:02:11,000 El fixo un pouco de validación do formulario que foi enviado para asegurar 38 00:02:11,000 --> 00:02:14,000 que os campos foron realmente dende que se esperaba. 39 00:02:14,000 --> 00:02:18,000 A continuación, chamado algunhas funcións PHP usando un pouco nova sintaxe, 40 00:02:18,000 --> 00:02:20,000 aínda que sexa prestado de C. 41 00:02:20,000 --> 00:02:24,000 >> Este operador frecha nos permite facer uso de algo chamado programación orientada a obxectos. 42 00:02:24,000 --> 00:02:27,000 Non imos entrar nese detallados aquí, pero sei que por agora 43 00:02:27,000 --> 00:02:31,000 é un xeito de ter funcións asociadas cos obxectos, 44 00:02:31,000 --> 00:02:34,000 que son un tipo especial de estrutura, como vimos en C. 45 00:02:34,000 --> 00:02:37,000 Pero, por agora, só ter fe en que esta é a sintaxe correcta para usar 46 00:02:37,000 --> 00:02:41,000 ao usar unha biblioteca como esta biblioteca PHPMailer. 47 00:02:41,000 --> 00:02:44,000 E entón, ao final deste ficheiro que xerara dinamicamente un e-mail 48 00:02:44,000 --> 00:02:47,000 que foi enviado para a miña conta jharvard@cs50.net 49 00:02:47,000 --> 00:02:50,000 da miña conta jharvard@cs50.net, 50 00:02:50,000 --> 00:02:54,000 e informado ao usuario, así, que foron rexistrados a este deporte. 51 00:02:54,000 --> 00:02:57,000 Iso é moi fermoso o que o sitio web de mensaxería instantánea Frosh fixo todos estes anos 52 00:02:57,000 --> 00:03:00,000 cando aplicado, concedido, nun idioma diferente, 53 00:03:00,000 --> 00:03:02,000 pero mostra-lle, quizais, o poder que ten 54 00:03:02,000 --> 00:03:05,000 agora que pode expresarse non só programaticamente 55 00:03:05,000 --> 00:03:08,000 a un nivel baixo nunha linguaxe como C, pero a un nivel moito máis elevado 56 00:03:08,000 --> 00:03:11,000 con estas aplicacións do mundo real, como correo electrónico moito para realmente resolver 57 00:03:11,000 --> 00:03:13,000 algúns problemas do mundo real. 58 00:03:13,000 --> 00:03:16,000 >> Agora, por suposto, a pesar de eu usar este script para xerar algún 59 00:03:16,000 --> 00:03:20,000 dinámicamente a partir de correo-e jharvard@cs50.net, o que é de feito unha conta 60 00:03:20,000 --> 00:03:23,000 que eu teño acceso, a non ser moi coidadoso para enviar 61 00:03:23,000 --> 00:03:26,000 correo só de contas que son, en realidade, o seu propio, 62 00:03:26,000 --> 00:03:30,000 para que as cousas se nun pouco de auga quente na vida. 63 00:03:30,000 --> 00:03:35,000 Con iso dito, imos agora transición cara a resolución dun problema completamente distinto, 64 00:03:35,000 --> 00:03:37,000 a de estados de retención. 65 00:03:37,000 --> 00:03:39,000 Agora, o que iso realmente significa? 66 00:03:39,000 --> 00:03:42,000 HTTP, este protocolo de transferencia de hipertexto, 67 00:03:42,000 --> 00:03:45,000 é na verdade un protocolo sen estado, e que isto significa que 68 00:03:45,000 --> 00:03:48,000 cando tira algo Google.com e escriba Intro 69 00:03:48,000 --> 00:03:51,000 normalmente o seu navegador ten algún tipo de icona que, entón, xirando 70 00:03:51,000 --> 00:03:54,000 resulta nalgunha páxina web que está a ser descargado, 71 00:03:54,000 --> 00:03:57,000 e despois que pequeno icono deixar de xirar, e que de feito suxire 72 00:03:57,000 --> 00:04:02,000 HTTP que teña completado algún tipo de conexión co servidor e é iso. 73 00:04:02,000 --> 00:04:05,000 O HTTP é stateless no sentido de que non mantén 74 00:04:05,000 --> 00:04:08,000 unha conexión persistente co servidor no Skype mesmo fai 75 00:04:08,000 --> 00:04:11,000 ou Gchat fai porque con HTTP 76 00:04:11,000 --> 00:04:15,000 o presuposto é que unha vez que foi buscar unha páxina web que é iso. 77 00:04:15,000 --> 00:04:18,000 >> Agora, en realidade estes días en sitios como Facebook e Google Maps 78 00:04:18,000 --> 00:04:21,000 e Twitter e afíns non hai dinamismo moito máis polo que 79 00:04:21,000 --> 00:04:25,000 mesmo despois de que a icona deixar de xirar pode de feito ter máis actualizacións 80 00:04:25,000 --> 00:04:29,000 do servidor, máis tweets máis actualizacións de estado en Facebook e afíns. 81 00:04:29,000 --> 00:04:33,000 Pero aínda que está a usar unha técnica que imos falar nunha ou dúas semanas 82 00:04:33,000 --> 00:04:36,000 coñecido como Ajax usando unha linguaxe chamada JavaScript 83 00:04:36,000 --> 00:04:38,000 pero ao final do día, o HTTP é aínda sen estado. 84 00:04:38,000 --> 00:04:42,000 E aínda se quere algunha maneira lembrar de cousas sobre un usuario 85 00:04:42,000 --> 00:04:44,000 mesmo despois de teren desconectado do servidor 86 00:04:44,000 --> 00:04:47,000 PHP fai darlle un medio de facelo 87 00:04:47,000 --> 00:04:52,000 porque, como vimos por última vez, PHP ten un número de superglobals, 88 00:04:52,000 --> 00:04:55,000 e unha superglobal é, de novo, unha variable global especial 89 00:04:55,000 --> 00:04:59,000 que se entrega a vostede polo servidor web e polo propio PHP. 90 00:04:59,000 --> 00:05:02,000 >> Non ten que facer nada para poñer valores en que, 91 00:05:02,000 --> 00:05:05,000 e entre os superglobals que vimos ata agora son obter e publicar, 92 00:05:05,000 --> 00:05:08,000 que é onde os campos do formulario son feitas automaticamente para ti, 93 00:05:08,000 --> 00:05:11,000 así como un par de outros que non vimos aínda. 94 00:05:11,000 --> 00:05:17,000 Dentro $ _SERVER son algunhas variables especiais relacionados co propio servidor. 95 00:05:17,000 --> 00:05:22,000 Cal é o enderezo IP, o que protocolo, HTTP ou HTTPS que utiliza, 96 00:05:22,000 --> 00:05:25,000 o método de solicitude que usa e afíns, por iso hai algunhas interesantes, 97 00:05:25,000 --> 00:05:29,000 detalles suculentos sobre o servidor, e, de feito, o usuario de alí tamén. 98 00:05:29,000 --> 00:05:33,000 Hai $ _COOKIE, que é onde estas cousas chamados cookies son almacenados. 99 00:05:33,000 --> 00:05:36,000 Non imos gastar tempo cos cookies-se hoxe, 100 00:05:36,000 --> 00:05:40,000 pero sei agora que unha cookie é só un pequeno anaco de información 101 00:05:40,000 --> 00:05:43,000 que un servidor web pode plantar nun navegador 102 00:05:43,000 --> 00:05:46,000 e á súa vez a súa memoria RAM ou disco duro ordenador 103 00:05:46,000 --> 00:05:49,000 para almacenar informacións sobre un usuario, por exemplo, o seu nome de usuario 104 00:05:49,000 --> 00:05:52,000 de xeito que xa non ten que escriba-lo cada vez que entrar ou algún 105 00:05:52,000 --> 00:05:55,000 número exclusivo ou identificador para este usuario 106 00:05:55,000 --> 00:05:58,000 de xeito que non ten que molestar-los cos mesmos tipos de preguntas sobre 107 00:05:58,000 --> 00:06:00,000 preferencias no futuro, pero a maioría de interese 108 00:06:00,000 --> 00:06:02,000 agora é de R $ _SESSION. 109 00:06:02,000 --> 00:06:07,000 >> Este superglobal, que, como os outros, é entrega a vostede automaticamente polo PHP 110 00:06:07,000 --> 00:06:10,000 cando está escribindo baseado en PHP sitios 111 00:06:10,000 --> 00:06:13,000 pode almacenar o que quere, cadeas, enteiros, 112 00:06:13,000 --> 00:06:16,000 puntos flotantes, valores, matrices, obxectos, 113 00:06:16,000 --> 00:06:20,000 realmente calquera cousa que quere, e permite que garde o de tal forma 114 00:06:20,000 --> 00:06:23,000 que, mesmo se o usuario visitar vostede agora e despois 115 00:06:23,000 --> 00:06:26,000 arredor dun minuto a partir de agora ou 5 minutos a partir de agora, porque 116 00:06:26,000 --> 00:06:28,000 eles levan o seu tempo antes de premer nalgún outro enlace 117 00:06:28,000 --> 00:06:32,000 PHP pode garantir que o que poñer na sesión que superglobal 118 00:06:32,000 --> 00:06:37,000 minutos ou 5 minutos aínda estará alí cando o usuario retorna. 119 00:06:37,000 --> 00:06:40,000 E debaixo da capa desta superglobal é aplicado por medio de 120 00:06:40,000 --> 00:06:44,000 isto chamados cookies, pero polo de agora, só unha abstracción 121 00:06:44,000 --> 00:06:47,000 que é unha especie de equivalente a un cesta da compra. 122 00:06:47,000 --> 00:06:50,000 O que queira que, programador, coloque en que 123 00:06:50,000 --> 00:06:53,000 array asociativo superglobal vai estar alí algún número de minutos despois 124 00:06:53,000 --> 00:06:59,000 ata que apaga-lo ou ata que o usuario pecha o seu navegador completo. 125 00:06:59,000 --> 00:07:02,000 >> Imos dar un ollo a un exemplo de como esa cousa é realmente utilizada. 126 00:07:02,000 --> 00:07:07,000 En counter.php entre pezas de hoxe de código 127 00:07:07,000 --> 00:07:09,000 temos a liña a seguir. 128 00:07:09,000 --> 00:07:13,000 A principios deste arquivo, temos unha morea de comentarios azuis, que son desinteressantes para agora. 129 00:07:13,000 --> 00:07:15,000 Pero, na liña 13, temos unha nova liña, 130 00:07:15,000 --> 00:07:18,000 session_start, e que, en realidade, fai exactamente o que di. 131 00:07:18,000 --> 00:07:20,000 Iníciase sesións. 132 00:07:20,000 --> 00:07:25,000 El permite que use ese gran _SESSION superglobal $, e é tan sinxelo coma iso. 133 00:07:25,000 --> 00:07:30,000 Agora, se seguir buscando na liña 16, imos tentar descubrir o que esta páxina web vai facer. 134 00:07:30,000 --> 00:07:35,000 If (isset ($ _SESSION ["contador"]), entón vai adiante 135 00:07:35,000 --> 00:07:39,000 e garde na variable de contador, contador de minúsculas, 136 00:07:39,000 --> 00:07:42,000 $ _SESSION ["Contador"]. 137 00:07:42,000 --> 00:07:45,000 Este semella ser declarar unha variable local chamada contador 138 00:07:45,000 --> 00:07:48,000 dentro da cal está poñendo unha copia de todo o que está dentro da superglobal 139 00:07:48,000 --> 00:07:52,000 chamado sesión no local "contador". 140 00:07:52,000 --> 00:07:56,000 Outra, ao parecer, este contador local pouco variable, é inicializar a 0. 141 00:07:56,000 --> 00:08:01,000 >> Pero, a continuación, algunhas liñas máis tarde, o 26 aviso que a copia da sesión de balcón, 142 00:08:01,000 --> 00:08:06,000 súa clave, ten un valor asignado novo, que é o seu valor actual máis 1. 143 00:08:06,000 --> 00:08:09,000 En suma, este ficheiro parece estar a actualizar 144 00:08:09,000 --> 00:08:13,000 un contador que está almacenado dentro do superglobal sesión 145 00:08:13,000 --> 00:08:16,000 aumentando o de 1, pero retén unha primeira copia do valor anterior 146 00:08:16,000 --> 00:08:20,000 almacenando-o desde unha variable local chamada $ contador, 147 00:08:20,000 --> 00:08:22,000 e aquí imos ver o que permanece. 148 00:08:22,000 --> 00:08:24,000 Acontece que é moi bonito só HTML. 149 00:08:24,000 --> 00:08:29,000 Na parte inferior desta páxina vemos na liña 37 que xa visitaron esta web 150 00:08:29,000 --> 00:08:33,000 número do contador de veces, polo que hai un par de características interesantes aquí. 151 00:08:33,000 --> 00:08:36,000 Un deles, esta é claramente unha variable, pero iso non basta só poñer 152 00:08:36,000 --> 00:08:39,000 $ Contador no corpo do seu HTML porque, por suposto, 153 00:08:39,000 --> 00:08:43,000 se é só alí entre o seu PHP HTML vai asumir que é só HTML. 154 00:08:43,000 --> 00:08:48,000 Vostede literalmente quere US $ contador a ser impreso en pantalla. 155 00:08:48,000 --> 00:08:51,000 >> Pero, en vez de caer en modo PHP 156 00:08:51,000 --> 00:08:55,000 con este anaco de sintaxe que pode introducir dinamicamente un valor aquí 157 00:08:55,000 --> 00:08:58,000 moi semellante en espírito para o que fixemos a última vez con 158 00:08:58,000 --> 00:09:00,000 introducir valores en cordas. 159 00:09:00,000 --> 00:09:04,000 En realidade, esta é só unha notación abreviada para dicir algo como isto literalmente, 160 00:09:04,000 --> 00:09:12,000 print ($ contador) ou mesmo algo así como printf (% s, contador), 161 00:09:12,000 --> 00:09:14,000 ou mesmo, como pode ver en liña ou en libros de texto, 162 00:09:14,000 --> 00:09:17,000 hai unha función en PHP chamado eco 163 00:09:17,000 --> 00:09:20,000 que fai a mesma cousa, e de todos aqueles son só formas máis alento 164 00:09:20,000 --> 00:09:25,000 dicir 00:09:28,000 Neste caso, o que non é preciso poñer 166 00:09:28,000 --> 00:09:30,000 a palabra PHP despois do punto de interrogación. 167 00:09:30,000 --> 00:09:34,000 Este é notación abreviada para, unha vez máis, o que acabamos de ver hai pouco 168 00:09:34,000 --> 00:09:37,000 que está ecoando algún valor. 169 00:09:37,000 --> 00:09:39,000 >> Imos ver o que o resultado final deste realmente é. 170 00:09:39,000 --> 00:09:43,000 Deixe-me pasar no noso arquivo counter.php, 171 00:09:43,000 --> 00:09:47,000 e imos ver o que David só cometeu un erro ao xogar co código alí. 172 00:09:47,000 --> 00:09:50,000 Imos corrixir o que errou, 173 00:09:50,000 --> 00:09:54,000 eo erro parece estar alí, foi na liña 37. 174 00:09:54,000 --> 00:09:59,000 Segundo o principio da páxina que visitei este sitio 0 veces. 175 00:09:59,000 --> 00:10:02,000 Ben, imos adiante, agora e na parte superior do seu navegador prema no 176 00:10:02,000 --> 00:10:05,000 Recargar icona e clic en Recargar, 177 00:10:05,000 --> 00:10:12,000 e agora eu visitei o sitio dunha vez, 2, 3, 4, 5, 6, 7, 8. 178 00:10:12,000 --> 00:10:16,000 E, de feito, se olharmos para a fonte desta páxina o código fonte está cambiando, 179 00:10:16,000 --> 00:10:19,000 e conta a ausencia completa de calquera PHP, e iso é porque 180 00:10:19,000 --> 00:10:23,000 Código PHP é avaliado ou interpretado do lado do servidor, 181 00:10:23,000 --> 00:10:27,000 e así que significa que a saída do script PHP é o que é, en última análise enviado para o navegador, 182 00:10:27,000 --> 00:10:31,000 que neste caso é un código HTML puro e algún texto cru. 183 00:10:31,000 --> 00:10:33,000 O que está a suceder aquí? 184 00:10:33,000 --> 00:10:37,000 >> Ben, con relativamente poucas liñas de código que eu son capaz de almacenar 185 00:10:37,000 --> 00:10:40,000 persistente ao longo de varios segundos, ou se esperou tempo suficiente, 186 00:10:40,000 --> 00:10:44,000 minutos, incluso horas, un valor dun xeito que fai HTTP 187 00:10:44,000 --> 00:10:47,000 parecen stateful como se tivésemos mantido 188 00:10:47,000 --> 00:10:51,000 esa conexión co servidor, e é só lembrar o que eu dixen a última vez, 189 00:10:51,000 --> 00:10:55,000 pero en realidade non hai unha morea de complexidade suceder debaixo do capó 190 00:10:55,000 --> 00:10:59,000 envolvendo cookies que está permitindo PHP para me dar esa ilusión 191 00:10:59,000 --> 00:11:02,000 deste cesta da compra-como recurso. 192 00:11:02,000 --> 00:11:05,000 Por agora, un exemplo trivial onde estamos só almacenar un número enteiro, 193 00:11:05,000 --> 00:11:08,000 pero este recurso vai volver a ser de gran valor 194 00:11:08,000 --> 00:11:10,000 cando comezamos a falar sobre os proxectos máis complexos, 195 00:11:10,000 --> 00:11:12,000 entre eles conxunto de problemas 7. 196 00:11:12,000 --> 00:11:16,000 Este é o seu problema moi último no CS50. 197 00:11:16,000 --> 00:11:19,000 Eu sei, é tan triste, pero o que vai atopar é que imos concluír 198 00:11:19,000 --> 00:11:22,000 Esta parte do semestre, en realidade, a transición 199 00:11:22,000 --> 00:11:25,000 a partir do contexto C certamente ao contexto de PHP 200 00:11:25,000 --> 00:11:27,000 Pero ao usar algúns dos fundamentos mesmos 201 00:11:27,000 --> 00:11:29,000 falamos por algún tempo. 202 00:11:29,000 --> 00:11:33,000 >> O obxectivo con pset 7 é aplicar CS50 Finanzas, 203 00:11:33,000 --> 00:11:37,000 que é a súa propia versión de Yahoo Finance ou Finanzas Google 204 00:11:37,000 --> 00:11:40,000 ou mesmo Etrade.com en que ten a capacidade de 205 00:11:40,000 --> 00:11:43,000 mirar para arriba os prezos das accións para símbolos dadas, pero máis que iso 206 00:11:43,000 --> 00:11:48,000 ten a capacidade de "comprar" e "vender" accións 207 00:11:48,000 --> 00:11:51,000 que son negociados en varias bolsas de valores, porque como esta páxina principal 208 00:11:51,000 --> 00:11:55,000 aquí suxire, que é realmente a medida en que nós comezamos 209 00:11:55,000 --> 00:11:59,000 o conxunto de problemas para ti, ten un formulario de login que está pedindo un nome de usuario e un contrasinal. 210 00:11:59,000 --> 00:12:03,000 El ten un botón de envío, pero despois, como imos ver, finalmente, 211 00:12:03,000 --> 00:12:06,000 non hai nada realmente a suceder debaixo do capó aínda porque 212 00:12:06,000 --> 00:12:09,000 Réstalle aplicar a capacidade de rexistrar novos usuarios, 213 00:12:09,000 --> 00:12:12,000 a capacidade de comprar accións, vender accións, 214 00:12:12,000 --> 00:12:14,000 para realmente ollar para arriba os prezos das accións actuais. 215 00:12:14,000 --> 00:12:17,000 >> E, de feito, este mundo será tan real como posible porque fixemos 216 00:12:17,000 --> 00:12:20,000 incluír un pouco de código que permitirá que cunha única función 217 00:12:20,000 --> 00:12:25,000 para consultar Yahoo Finance, que marabillosas facilita datos libres 218 00:12:25,000 --> 00:12:31,000 para ollar cara arriba os prezos das accións con base no símbolo de acción ou símbolo Ticker, 219 00:12:31,000 --> 00:12:34,000 e terá de volta o prezo actual da acción do día. 220 00:12:34,000 --> 00:12:37,000 Os datos que está realmente a ver neste pset particular será 221 00:12:37,000 --> 00:12:40,000 sobre como o mundo real como pode obter de xeito que está realmente a interfaz 222 00:12:40,000 --> 00:12:43,000 con accións do mundo real, os prezos reais, 223 00:12:43,000 --> 00:12:47,000 e imos ver canto diñeiro pode facer posible 224 00:12:47,000 --> 00:12:51,000 ao longo dos próximos días de xogar co seu conxunto propio problema. 225 00:12:51,000 --> 00:12:55,000 >> Pero imos primeiro definir o escenario para crear algo que seguramente é máis complicado 226 00:12:55,000 --> 00:12:59,000 que counter.php, que é máis complicado do que calquera un dos exemplos Frosh IMS, ata agora, 227 00:12:59,000 --> 00:13:02,000 e imos tentar introducir unha paradigmas poucos aquí que nos permite 228 00:13:02,000 --> 00:13:06,000 tanto para pset 7 e quizais o seu proxecto final, se fai algo baseado na web 229 00:13:06,000 --> 00:13:11,000 manter o seu código ben organizado, para manter-se sa, 230 00:13:11,000 --> 00:13:15,000 e dar un paso en dirección a colaborar, xa sexa en proxecto final do CS50 231 00:13:15,000 --> 00:13:18,000 ou ademais, se continúa a programar algo no futuro. 232 00:13:18,000 --> 00:13:21,000 Hai este paradigma de deseño xeral 233 00:13:21,000 --> 00:13:24,000 en informática e no desenvolvemento de software en xeral 234 00:13:24,000 --> 00:13:27,000 coñecido como MVC, o modelo de controlador de vista, 235 00:13:27,000 --> 00:13:30,000 e este é un acrónimo parvo que describe unha idea moi legal, 236 00:13:30,000 --> 00:13:34,000 que é a separación de distintos aspectos do programa, 237 00:13:34,000 --> 00:13:39,000 especialmente manter a lóxica separada ou a lóxica do negocio de un sitio web 238 00:13:39,000 --> 00:13:42,000 de xeito que todo o que implica cousas como 239 00:13:42,000 --> 00:13:45,000 chamar funcións e consulta de bases de datos e similares 240 00:13:45,000 --> 00:13:48,000 acontece non entre o seu HTML 241 00:13:48,000 --> 00:13:51,000 senón en arquivos separados, e, de feito, hai un ficheiro dun 242 00:13:51,000 --> 00:13:54,000 tipicamente que chamou o controlador 243 00:13:54,000 --> 00:13:56,000 que é realmente o cerebro detrás da operación, e imos ver un exemplo 244 00:13:56,000 --> 00:13:58,000 iso en só un momento. 245 00:13:58,000 --> 00:14:01,000 >> Hai un modelo que é un código de programación 246 00:14:01,000 --> 00:14:05,000 que fai a falar cos seus bancos de datos, que fala con Yahoo Finance e similares, 247 00:14:05,000 --> 00:14:08,000 e despois hai o V en MVC, os puntos de vista, 248 00:14:08,000 --> 00:14:11,000 todo o material que está relacionado coa estética, os ficheiros que realmente conteñen 249 00:14:11,000 --> 00:14:14,000 HTML, CSS e quizais o seu semellante. 250 00:14:14,000 --> 00:14:17,000 A idea aquí, como esta figura indica, é que o controlador 251 00:14:17,000 --> 00:14:21,000 é o arquivo, como veremos en breve e, como podes ver particularmente en pset 7, 252 00:14:21,000 --> 00:14:24,000 que o mundo fala a vía os seus navegadores. 253 00:14:24,000 --> 00:14:27,000 Ese é o arquivo que será visitado en internet pública, 254 00:14:27,000 --> 00:14:30,000 pero o controlador fala potencialmente modelo, 255 00:14:30,000 --> 00:14:34,000 o que é un ou máis ficheiros que conteñan código relacionado aos datos, 256 00:14:34,000 --> 00:14:37,000 código relacionado coa base de datos e similares, e, a continuación, se fala de 257 00:14:37,000 --> 00:14:40,000 o controlador de un ou máis arquivos, coñecidos como puntos de vista, 258 00:14:40,000 --> 00:14:43,000 que son a estética dunha páxina web, modelos de tipos, 259 00:14:43,000 --> 00:14:47,000 que pode levar algúns datos como entrada, pero ao final do día, 260 00:14:47,000 --> 00:14:50,000 a única lóxica dentro dunha visión debe ser a prestación de datos, 261 00:14:50,000 --> 00:14:53,000 iteração sobre un loop e realmente cuspindo algúns 262 00:14:53,000 --> 00:14:56,000 Baseado en HTML Rendition algo do mesmo ou incluso como un PDF. 263 00:14:56,000 --> 00:14:59,000 >> O que é legal sobre o MVC é que pode ter puntos de vista diferentes 264 00:14:59,000 --> 00:15:02,000 con base no tipo de dispositivo, con base no tipo de formato de ficheiro que, en realidade, 265 00:15:02,000 --> 00:15:04,000 queren mostrar para o usuario. 266 00:15:04,000 --> 00:15:10,000 Imos dar un ollo a algúns exemplos progresivamente máis complexas e ben deseñado 267 00:15:10,000 --> 00:15:13,000 comezando primeiro coa versión 0 aquí. 268 00:15:13,000 --> 00:15:16,000 Deixe-me ir adiante e abrir-se no noso directorio MVC hoxe 269 00:15:16,000 --> 00:15:21,000 un arquivo chamado index.php no directorio 0. 270 00:15:21,000 --> 00:15:26,000 Teña en conta que este é un sitio super sinxelo e moi underwhelming 271 00:15:26,000 --> 00:15:29,000 que é unha especie de versión 0 dunha páxina de inicio para CS50, 272 00:15:29,000 --> 00:15:32,000 e perciba como temos unha ligazón a charlas, temos unha ligazón a Syllabus, 273 00:15:32,000 --> 00:15:35,000 e se eu seguir o enlace para notificación conferencias que a URL 274 00:15:35,000 --> 00:15:39,000 encima vai cambiar a lectures.php. 275 00:15:39,000 --> 00:15:44,000 Se eu siga a ligazón para notificación Semana 1 que os cambios de dirección para week1.php. 276 00:15:44,000 --> 00:15:46,000 Parece haber unha estrutura moi simple xerárquica aquí. 277 00:15:46,000 --> 00:15:49,000 >> Imos dar unha rápida ollo debaixo do capo coa forma como iso é colocado para fóra, 278 00:15:49,000 --> 00:15:53,000 e de feito, se eu ollar para index.php é moi sinxelo. 279 00:15:53,000 --> 00:15:57,000 En realidade, a pesar de eu chamei esta imaxe dun PHP non hai ningún código de programación real. 280 00:15:57,000 --> 00:16:01,000 Hai un comentario que escribín aquí en PHP só para que o usuario non acabar vendo isto. 281 00:16:01,000 --> 00:16:05,000 Claro que, como antes de calquera cousa, que está entre etiquetas PHP 282 00:16:05,000 --> 00:16:08,000 é interpretado, aínda que sexa un comentario, e para interpretar un comentario 283 00:16:08,000 --> 00:16:11,000 significa só para xoga-lo fóra no final do día e en realidade non 284 00:16:11,000 --> 00:16:15,000 enviá-lo para o navegador, para que todo aquí é só estética. 285 00:16:15,000 --> 00:16:20,000 Se eu abrir semellante lectures.php iso tamén é só un arquivo codificado. 286 00:16:20,000 --> 00:16:23,000 El pasa a ser chamado de algo. PHP, 287 00:16:23,000 --> 00:16:27,000 pero é realmente xusto. html, e week1.php, week2.php 288 00:16:27,000 --> 00:16:31,000 Do mesmo xeito son só de marcación, non hai unha morea de fallos deste proxecto. 289 00:16:31,000 --> 00:16:33,000 Un, é unha cantidade enorme de copiar / pegar. 290 00:16:33,000 --> 00:16:37,000 Aínda que o único que está cambiando entre estes arquivos é a lista non ordenada, 291 00:16:37,000 --> 00:16:41,000 as etiquetas li, eu aínda así ten doc tipo, HTML, cabeza, 292 00:16:41,000 --> 00:16:44,000 título, corpo preto, preto HTML e máis 293 00:16:44,000 --> 00:16:47,000 en todos os arquivos, o que significa que se eu queira reestruturar 294 00:16:47,000 --> 00:16:50,000 Esta páxina web ou restylize que eu teño que entrar e cambiar 295 00:16:50,000 --> 00:16:54,000 todos eses arquivos manualmente ou con algún gran localizar e substituír. 296 00:16:54,000 --> 00:17:01,000 >> Imos dar un paso cara a un proxecto máis intelixente, máis pensando na versión 1 aquí 297 00:17:01,000 --> 00:17:04,000 que conforme a ler o meu que incluímos para que poida tocar xunto con 298 00:17:04,000 --> 00:17:07,000 estes máis vagaroso na observación de casa que temos aquí 299 00:17:07,000 --> 00:17:10,000 un resumo dos arquivos na versión 1 deste sitio web, 300 00:17:10,000 --> 00:17:13,000 e parece que eu tomei sobre min mesmo para fatorar 301 00:17:13,000 --> 00:17:17,000 un código común, header.php e footer.php. 302 00:17:17,000 --> 00:17:20,000 Ben, imos dar un ollo ao que está dentro do primeiro deles. 303 00:17:20,000 --> 00:17:23,000 Header.php parece familiar, 304 00:17:23,000 --> 00:17:26,000 pero mire onde se cortou? 305 00:17:26,000 --> 00:17:30,000 Logo da liña 19, entón iso é todo o que era común 306 00:17:30,000 --> 00:17:33,000 do index.php arquivos, lectures.php, 307 00:17:33,000 --> 00:17:36,000 Semana1 e week2.php do exemplo anterior. 308 00:17:36,000 --> 00:17:40,000 O que fixen foi copiar e todo corte que era común a todos os arquivos, 309 00:17:40,000 --> 00:17:44,000 poñelas nun arquivo de cabeceira separado, e da mesma forma en footer.php 310 00:17:44,000 --> 00:17:48,000 eu aplicar o mesmo principio polo cal as únicas liñas interesantes 311 00:17:48,000 --> 00:17:52,000 en footer.php son estes corpo, dous preto e HTML preto. 312 00:17:52,000 --> 00:17:55,000 >> Pero o que significa isto agora é que na nova versión 313 00:17:55,000 --> 00:17:59,000 de aviso index.php canto máis simple que pode chegar. 314 00:17:59,000 --> 00:18:02,000 Concedido, un pouco máis enigmático ollar, un pouco menos intuitiva 315 00:18:02,000 --> 00:18:06,000 a continuación de arriba para abaixo, pero, meu Deus, todo o que a redundancia é ir agora. 316 00:18:06,000 --> 00:18:10,000 Nós esixir o uso de unha función PHP chamado literalmente esixir ata superior, 317 00:18:10,000 --> 00:18:15,000 que lembra moito, lembre, C # include mecanismo. 318 00:18:15,000 --> 00:18:17,000 Esiximos header.php na parte superior. 319 00:18:17,000 --> 00:18:20,000 Esiximos footer.php na parte inferior, eo único que é diferente 320 00:18:20,000 --> 00:18:25,000 ou especial sobre este ficheiro é o contido que está destinado a ser única para el. 321 00:18:25,000 --> 00:18:29,000 Se eu entrar na, digamos, lectures.php, o mesmo principio se aplica. 322 00:18:29,000 --> 00:18:32,000 Unha vez máis, algúns comentarios enriba, pero despois eu requiren cabeceira, pé de páxina esixen, 323 00:18:32,000 --> 00:18:35,000 e entre só o contido que está realmente cambiaron. 324 00:18:35,000 --> 00:18:38,000 E se nós miramos para semana 1 e semana 2 veriamos 325 00:18:38,000 --> 00:18:42,000 que o mesmo principio foi aplicado alí. 326 00:18:42,000 --> 00:18:44,000 Ben, nós non estamos completamente feito alí. 327 00:18:44,000 --> 00:18:48,000 >> Imos dar un ollo á versión 2, que ten unha estrutura semellante, 328 00:18:48,000 --> 00:18:50,000 pero mire agora introducido outra cousa. 329 00:18:50,000 --> 00:18:53,000 Na liña 10 eu introducín helpers.php, 330 00:18:53,000 --> 00:18:55,000 que, ao parecer, contén funcións auxiliares. 331 00:18:55,000 --> 00:18:58,000 Unha función auxiliar é xeralmente unha función relativamente curto 332 00:18:58,000 --> 00:19:01,000 que escribe para axudar en varios lugares, 333 00:19:01,000 --> 00:19:04,000 e imos ver o que hai dentro helpers.php. 334 00:19:04,000 --> 00:19:07,000 Neste caso, parece que ten dúas funcións. 335 00:19:07,000 --> 00:19:10,000 Teña en conta que do outro día co noso exemplo cubo 336 00:19:10,000 --> 00:19:13,000 pode definir as súas propias funcións en PHP, e que eu teño feito agora é que eu teño 337 00:19:13,000 --> 00:19:17,000 funcións definidas chamados facer rodapé e facer cabeceira, 338 00:19:17,000 --> 00:19:21,000 a primeira das cales utiliza un parámetro chamado datos, 339 00:19:21,000 --> 00:19:25,000 cuxo valor por defecto é un conxunto baleiro, como suxire alí, 340 00:19:25,000 --> 00:19:29,000 e podemos realmente escribir este aínda máis sucinta na última versión do PHP 341 00:19:29,000 --> 00:19:32,000 dicindo colchete aberto, pechado colchete. 342 00:19:32,000 --> 00:19:35,000 Isto significa que unha matriz baleira de tamaño 0, pero aínda así unha matriz. 343 00:19:35,000 --> 00:19:38,000 >> Esta función extracto é un pouco especial en que 344 00:19:38,000 --> 00:19:41,000 o que fai é que recibe como argumento dunha matriz asociativa 345 00:19:41,000 --> 00:19:45,000 que 0 ou máis pares de valores clave, e se ten unha chave de foo 346 00:19:45,000 --> 00:19:48,000 e un valor de barra a función extracto 347 00:19:48,000 --> 00:19:51,000 crea unha situación na que agora, a partir de liña 11, 348 00:19:51,000 --> 00:19:57,000 ten unha variable local chamada $ foo cuxo valor é bar. 349 00:19:57,000 --> 00:19:59,000 E se tivese máis chaves e valores na matriz de datos, 350 00:19:59,000 --> 00:20:03,000 do mesmo xeito que eles son extraídos para o ámbito local 351 00:20:03,000 --> 00:20:06,000 ou espazo de nome, de modo que footer.php e 352 00:20:06,000 --> 00:20:09,000 a mesma idea aquí para header.php 353 00:20:09,000 --> 00:20:12,000 ter acceso a esas variables. 354 00:20:12,000 --> 00:20:15,000 En realidade, deixe-me abrir de novo header.php 355 00:20:15,000 --> 00:20:18,000 e chamar a atención sobre o que agora parece que nesta versión. 356 00:20:18,000 --> 00:20:22,000 >> En vez de codificar CS50 como título para cada páxina 357 00:20:22,000 --> 00:20:24,000 entender o dinamismo que é posible agora. 358 00:20:24,000 --> 00:20:29,000 Na liña 5 estou ecoando unha variable título, 359 00:20:29,000 --> 00:20:34,000 pero primeiro eu estou pasando esta variable título para unha función chamada htmlspecialchars. 360 00:20:34,000 --> 00:20:38,000 Un nome estúpido para unha función, sempre que sexa, pero o que realmente fai o que di. 361 00:20:38,000 --> 00:20:41,000 El asegura que todos os caracteres especiais 362 00:20:41,000 --> 00:20:46,000 na secuencia que foi aprobada en son debidamente escapou HTML. 363 00:20:46,000 --> 00:20:49,000 Este é, en realidade, unha forma de evitar unha cousa chamada cross-site scripting ataque 364 00:20:49,000 --> 00:20:52,000 en que alguén pode maliciosa ou accidentalmente 365 00:20:52,000 --> 00:20:55,000 inxectar seu propio HTML na súa páxina web 366 00:20:55,000 --> 00:20:59,000 colando en algunha forma, por exemplo, 367 00:20:59,000 --> 00:21:02,000 algo que non espera foron bastante, especialmente código JavaScript, 368 00:21:02,000 --> 00:21:05,000 como imos falar unha semana ou dúas de cada vez. 369 00:21:05,000 --> 00:21:08,000 >> Este header.php agora, é unha visión 370 00:21:08,000 --> 00:21:12,000 no sentido de que permite que vendo esteticamente o contido dun conxunto de datos. 371 00:21:12,000 --> 00:21:14,000 Pero, máis especificamente, é un modelo. 372 00:21:14,000 --> 00:21:19,000 Esta é unha especie de plan agora que queremos na cabeceira de cada páxina para ollar como, 373 00:21:19,000 --> 00:21:23,000 pero hai algún dinamismo que queremos título a ser inserido dinámicamente 374 00:21:23,000 --> 00:21:26,000 con base na variable título 375 00:21:26,000 --> 00:21:30,000 que foi extraído cando chamada, de novo, 376 00:21:30,000 --> 00:21:33,000 a función cabeceira renderse. 377 00:21:33,000 --> 00:21:36,000 Agora, se nós miramos rodapé render, hai realmente non uso moito diso agora 378 00:21:36,000 --> 00:21:40,000 porque footer.php non hai dinamismo calquera. 379 00:21:40,000 --> 00:21:43,000 Non podería ser, pero no momento é unha lista codificado 2 etiquetas, 380 00:21:43,000 --> 00:21:46,000 pero a idea aínda se aplica, de forma que, en realidade, suxire porque 381 00:21:46,000 --> 00:21:49,000 se perdemos tempo tendo unha cabeceira render e unha función de renderización rodapé? 382 00:21:49,000 --> 00:21:52,000 Deixe-me ir en vez agora en versión 3, 383 00:21:52,000 --> 00:21:56,000 e na versión 3 en axudantes decidir simplificar aínda máis. 384 00:21:56,000 --> 00:21:58,000 >> Deixe-me ter unha función renderse. 385 00:21:58,000 --> 00:22:02,000 Deixe-me telo tomar outro argumento, esta vez chamada de modelo, 386 00:22:02,000 --> 00:22:05,000 que se destina a ser o nome dun modelo, 387 00:22:05,000 --> 00:22:11,000 e logo vou concatenar presunçosamente. php para un valor que variable, 388 00:22:11,000 --> 00:22:17,000 e entón, se existe, foo.php bar.php ou header.php e footer.php, 389 00:22:17,000 --> 00:22:20,000 entón eu estou indo a ir adiante e extraer os datos variables 390 00:22:20,000 --> 00:22:23,000 e despois esixir ese camiño. 391 00:22:23,000 --> 00:22:29,000 Noutras palabras, para usar isto agora, se eu abrir index.php 392 00:22:29,000 --> 00:22:32,000 entender que eu non chamo de cabeceira renderización máis. 393 00:22:32,000 --> 00:22:36,000 Eu só chamar render, pero eu pasar un valor de cotización da cabeceira 394 00:22:36,000 --> 00:22:39,000 deixar claro que o modelo que realmente quero para cargar. 395 00:22:39,000 --> 00:22:41,000 >> Entón aquí entender o que estou facendo. 396 00:22:41,000 --> 00:22:44,000 Estou pasando dinamicamente unha clave de título, 397 00:22:44,000 --> 00:22:47,000 un valor de CS50, e iso tamén, como vimos antes, 398 00:22:47,000 --> 00:22:51,000 podería ser máis sucinto na última versión do PHP 399 00:22:51,000 --> 00:22:54,000 onde podo substituír a función array con corchetes, 400 00:22:54,000 --> 00:22:57,000 que eu propoño é aínda máis lexible e, certamente, 401 00:22:57,000 --> 00:22:59,000 un pouco máis fácil de escribir. 402 00:22:59,000 --> 00:23:02,000 E, por suposto, coa chamada render rodapé na parte inferior, 403 00:23:02,000 --> 00:23:05,000 que non se incomodan en pasar un segundo argumento en todo, non matriz asociativa, 404 00:23:05,000 --> 00:23:07,000 porque non hai nada dentro da dinámica que rodapé. 405 00:23:07,000 --> 00:23:10,000 É só a algunhas etiquetas próximos HTML. 406 00:23:10,000 --> 00:23:14,000 Bo, estamos tomando medidas para realmente limpar as cousas aquí, 407 00:23:14,000 --> 00:23:17,000 pero deixe-me abrir dous exemplos finais. 408 00:23:17,000 --> 00:23:21,000 Este, número 4, aviso que eu fixen unha decisión consciente agora 409 00:23:21,000 --> 00:23:26,000 para mellorar o exemplo anterior, finalmente, usando unha xerarquía para os meus arquivos. 410 00:23:26,000 --> 00:23:29,000 >> Teña en conta que, nese resumo, nesta me le, eu introducín 411 00:23:29,000 --> 00:23:32,000 un directorio e inclúe un directorio de modelos 412 00:23:32,000 --> 00:23:35,000 cuxos contidos van ser as cousas que quero incluír 413 00:23:35,000 --> 00:23:38,000 e os modelos que quero facer, respectivamente. 414 00:23:38,000 --> 00:23:42,000 Isto é realmente eu ser anal e tentando manter as cousas arrumadas, 415 00:23:42,000 --> 00:23:45,000 manter arquivos relacionados xuntos, pero o resultado final 416 00:23:45,000 --> 00:23:48,000 é que agora temos unha configuración un pouco máis ordenado, pero temos que lembrar agora 417 00:23:48,000 --> 00:23:51,000 en, por exemplo, index.php 418 00:23:51,000 --> 00:23:55,000 cando esixen o arquivo helpers.php 419 00:23:55,000 --> 00:24:01,000 Temos que agora esixen a través de includes / helpers.php 420 00:24:01,000 --> 00:24:06,000 en vez de só dicir helpers.php porque agora é realmente un sub-directorio. 421 00:24:06,000 --> 00:24:09,000 Agora, como un aparte, vai ver nestes exemplos e algúns outros 422 00:24:09,000 --> 00:24:11,000 funciona como esixen, esixen unha vez. 423 00:24:11,000 --> 00:24:15,000 Hai realmente unha función en si chamado incluír, e todos eles teñen un comportamento un pouco diferente. 424 00:24:15,000 --> 00:24:18,000 Aquí eu digo esixen unha vez para facer super claro que eu só quero aqueles 425 00:24:18,000 --> 00:24:20,000 axudantes incluído no meu proxecto unha vez. 426 00:24:20,000 --> 00:24:24,000 Pero se eu son coidadoso e eu estou realmente a pensar na miña lóxica propiamente 427 00:24:24,000 --> 00:24:27,000 debería bastar tamén só para dicir requirir ata arriba 428 00:24:27,000 --> 00:24:31,000 tanto tempo como eu mesmo non poida esixir o mesmo arquivo en outro lugar. 429 00:24:31,000 --> 00:24:34,000 En realidade, esta é unha maneira un pouco máis eficiente de facer as cousas a continuación, usando 430 00:24:34,000 --> 00:24:38,000 esixen unha vez, entón eu vou reducídela a só esixe. 431 00:24:38,000 --> 00:24:40,000 >> Imos dar un paso adiante. 432 00:24:40,000 --> 00:24:46,000 Este último exemplo, agora, a versión 5, ten unha xerarquía de carpetas aínda máis limpa. 433 00:24:46,000 --> 00:24:50,000 Teña en conta o que eu fixen aquí por ler o meu nesta versión final 434 00:24:50,000 --> 00:24:54,000 e agora eu teño o meu directorio HTML que eu tiven todo este tempo, 435 00:24:54,000 --> 00:24:58,000 pero dentro de alí agora é só lectures.php, index.php, 436 00:24:58,000 --> 00:25:01,000 week1.php e week2.php. 437 00:25:01,000 --> 00:25:05,000 O directorio inclúe agora vive á beira do directorio HTML 438 00:25:05,000 --> 00:25:08,000 de modo que ao mesmo nivel como un irmán, por así dicir. 439 00:25:08,000 --> 00:25:10,000 Así fai o cartafol de modelos. 440 00:25:10,000 --> 00:25:14,000 O takeaway clave aquí é que eu introducido estrutura un pouco máis, 441 00:25:14,000 --> 00:25:17,000 pero o elemento clave agora é que só os arquivos 442 00:25:17,000 --> 00:25:21,000 que precisan estar accesibles na web publicamente endereçável 443 00:25:21,000 --> 00:25:25,000 por unha URL na internet pública están no meu directorio HTML. 444 00:25:25,000 --> 00:25:28,000 >> Arquivos mesmo tempo, outras helpers.php, footer.php, 445 00:25:28,000 --> 00:25:32,000 header.php, que son, sen dúbida, se cadra máis sensible, 446 00:25:32,000 --> 00:25:35,000 quizais axudantes, en realidade, ten algúns nomes de usuario e contrasinais ou algún intelectual 447 00:25:35,000 --> 00:25:39,000 propiedade da mina, funcións que eu realmente non quero que o mundo vexa, aínda que accidentalmente. 448 00:25:39,000 --> 00:25:45,000 É unha boa práctica para manter fóra do directorio HTML pública 449 00:25:45,000 --> 00:25:48,000 todos os ficheiros que non precisan de ser público. 450 00:25:48,000 --> 00:25:51,000 Todo o que tes que facer neste caso cando se mira, por exemplo, 451 00:25:51,000 --> 00:25:55,000 o ficheiro index.php no directorio de HTML, 452 00:25:55,000 --> 00:25:58,000 notar só temos que ser un pouco máis coidadoso cando requirindo 453 00:25:58,000 --> 00:26:00,000 ou esixir unha vez que este arquivo. 454 00:26:00,000 --> 00:26:03,000 Eu teño primeiro facer .. para ir ao directorio pai, 455 00:26:03,000 --> 00:26:06,000 a continuación, facer / includes / helpers.php 456 00:26:06,000 --> 00:26:12,000 a mergullo de volta para o arquivo que eu me importa. 457 00:26:12,000 --> 00:26:16,000 >> Algunha preguntas, entón no MVC 458 00:26:16,000 --> 00:26:20,000 ou esta encarnación relativamente simple mesmo? 459 00:26:20,000 --> 00:26:23,000 E deixe-me deixar claro que nós nos concentrados un pouco sobre a 460 00:26:23,000 --> 00:26:27,000 V aquí, os puntos de vista e do factoring fóra destes modelos. 461 00:26:27,000 --> 00:26:30,000 Nós non temos realmente distingue M C aínda. 462 00:26:30,000 --> 00:26:33,000 En realidade, non hai realmente ningunha M aquí, e mesmo o noso C, 463 00:26:33,000 --> 00:26:36,000 controlador, non está realmente facendo todo o que moito, pero vai ter moito máis 464 00:26:36,000 --> 00:26:39,000 familiarizado con ambas as dúas cartas de MVC, 465 00:26:39,000 --> 00:26:43,000 ou mellor, vai ter moito máis familiarizado co C 466 00:26:43,000 --> 00:26:49,000 en MVC para conxunto de problemas 7, entón non hai máis que iso no horizonte. 467 00:26:49,000 --> 00:26:51,000 Preguntas? 468 00:26:51,000 --> 00:26:53,000 Hai, de feito, ninguén aquí. 469 00:26:53,000 --> 00:26:57,000 >> Ok, imos agora pasar ao segundo e último tema para hoxe. 470 00:26:57,000 --> 00:27:00,000 Que é a introdución dunha base de datos. 471 00:27:00,000 --> 00:27:03,000 Ata este punto, tivemos algunhas formas de almacenar datos. 472 00:27:03,000 --> 00:27:05,000 Usamos variables. 473 00:27:05,000 --> 00:27:08,000 Volver no noso arquivo C, I / O debate que comezamos a usar arquivos de texto 474 00:27:08,000 --> 00:27:11,000 e utilización de ficheiros como fprintf, e entón nós nin comezou 475 00:27:11,000 --> 00:27:14,000 fala de CSV un pouco, valores separados por comas, 476 00:27:14,000 --> 00:27:17,000 para todos estes nos permitiu ter datos almacenados 477 00:27:17,000 --> 00:27:19,000 ou non persistente ou persistente. 478 00:27:19,000 --> 00:27:23,000 Pero aínda CSVs non son realmente propicio para a procura 479 00:27:23,000 --> 00:27:25,000 e inserción e exclusión. 480 00:27:25,000 --> 00:27:28,000 É realmente só un arquivo de texto separado por comas parvo 481 00:27:28,000 --> 00:27:30,000 liña por liña por liña por liña, por iso, se quere 482 00:27:30,000 --> 00:27:32,000 buscar o arquivo o mellor que podes facer é realmente busca lineal. 483 00:27:32,000 --> 00:27:34,000 Ten que comezar na parte superior do ficheiro, ler a cousa toda en, 484 00:27:34,000 --> 00:27:36,000 e ollar para un valor de interese. 485 00:27:36,000 --> 00:27:39,000 Se desexa inserir no que ten que facer a mesma cousa, 486 00:27:39,000 --> 00:27:41,000 Iterando sobre el e escribir nun determinado lugar, 487 00:27:41,000 --> 00:27:45,000 e, de feito, ten que facer toda a lóxica de buscar a si mesmo. 488 00:27:45,000 --> 00:27:49,000 >> Vostede non pode facer estándar intelixente de correspondencia nun ficheiro CSV, salvo que escribir o código. 489 00:27:49,000 --> 00:27:51,000 Vostede non pode facer filtración dun ficheiro CSV 490 00:27:51,000 --> 00:27:53,000 a menos que se escribe o código. 491 00:27:53,000 --> 00:27:56,000 Non sería bo se alguén poñer todo o esforzo 492 00:27:56,000 --> 00:27:59,000 para realmente facer a busca máis fácil e rápida inserción 493 00:27:59,000 --> 00:28:01,000 e exclusión e actualización e así por diante? 494 00:28:01,000 --> 00:28:04,000 Isto é o que unha base de datos é. 495 00:28:04,000 --> 00:28:07,000 SQL, linguaxe de consulta estruturada, é aínda outro idioma 496 00:28:07,000 --> 00:28:10,000 que estamos introducindo aquí hoxe, pero iso tamén é moi accesible, 497 00:28:10,000 --> 00:28:13,000 eo que estamos realmente vai facer é só arrincar del algúns dos máis saíntes 498 00:28:13,000 --> 00:28:16,000 características de xeito que para pset 7, e se fai algo con base na web, 499 00:28:16,000 --> 00:28:19,000 seu proxecto final, ten a capacidade de se expresar 500 00:28:19,000 --> 00:28:22,000 en termos de consultas de datos. 501 00:28:22,000 --> 00:28:25,000 Vostede ten a capacidade de almacenar un pouco ou un moito de datos 502 00:28:25,000 --> 00:28:28,000 dun modo moito máis estructurado que será, ao final do día, 503 00:28:28,000 --> 00:28:32,000 facer a súa vida máis fácil, porque co SQL pode expresar 504 00:28:32,000 --> 00:28:35,000 máis precisamente, moito máis metodicamente a fin de 505 00:28:35,000 --> 00:28:40,000 volver algúns subconxunto de datos dun gran corpus de datos. 506 00:28:40,000 --> 00:28:45,000 >> Podes pensar nunha base de datos, neste caso, unha base de datos SQL, realmente como o Excel 507 00:28:45,000 --> 00:28:48,000 ou números en que é unha folla de cálculo, 508 00:28:48,000 --> 00:28:50,000 ou quizais varias follas de cálculo, e unha folla de cálculo, por suposto, 509 00:28:50,000 --> 00:28:53,000 ten liñas e columnas, e iso é porque 510 00:28:53,000 --> 00:28:56,000 Bancos de datos SQL son relacionais, relacional, no sentido de 511 00:28:56,000 --> 00:28:59,000 que almacenan datos en termos desas táboas, 512 00:28:59,000 --> 00:29:01,000 liñas e columnas. 513 00:29:01,000 --> 00:29:03,000 Son máis rendemento que algo así como unha folla de cálculo, 514 00:29:03,000 --> 00:29:05,000 e unha folla de cálculo está feito para ser usado por un ser humano. 515 00:29:05,000 --> 00:29:08,000 Unha base de datos destínase a ser usado por un programador 516 00:29:08,000 --> 00:29:12,000 escribir código contra el, así que a encarnación dun banco de datos 517 00:29:12,000 --> 00:29:14,000 vai ser unha das liñas de comandos. 518 00:29:14,000 --> 00:29:18,000 >> Unha das bases de datos relacionais máis populares alí fóra, é, unha vez máis, MySQL, 519 00:29:18,000 --> 00:29:22,000 que é marabillosas libre, rendemento moi elevado, e é iso que 520 00:29:22,000 --> 00:29:24,000 Facebook usado moi cedo e ata certo punto aínda hoxe 521 00:29:24,000 --> 00:29:27,000 para almacenar unha gran cantidade dos seus datos, e imos ver en un momento 522 00:29:27,000 --> 00:29:30,000 que a utilización de ordes relativamente simple 523 00:29:30,000 --> 00:29:33,000 podemos seleccionar datos, inserir datos, actualizar datos, 524 00:29:33,000 --> 00:29:37,000 borrar os datos e afíns, pero, afortunadamente, hai unha interface máis agradable 525 00:29:37,000 --> 00:29:39,000 que só escribindo nun ventá de branco e negro aquí. 526 00:29:39,000 --> 00:29:43,000 Nós imos empregar para pset 7 e ademais unha ferramenta gratuíta chamada phpMyAdmin. 527 00:29:43,000 --> 00:29:45,000 O nome é mera coincidencia. 528 00:29:45,000 --> 00:29:47,000 A ferramenta pasa a ser aplicado en PHP, 529 00:29:47,000 --> 00:29:49,000 pero que é fundamentalmente irrelevante. 530 00:29:49,000 --> 00:29:53,000 O que é útil sobre phpMyAdmin é que é unha utilidade baseado na web. 531 00:29:53,000 --> 00:29:55,000 Nós pre-instalado no aparello para ti, 532 00:29:55,000 --> 00:29:58,000 e con el podes crear táboas nunha base de datos, 533 00:29:58,000 --> 00:30:01,000 pode inserir datos, borrar datos, e xeralmente ver 534 00:30:01,000 --> 00:30:04,000 seus datos nun ambiente moi agradable. 535 00:30:04,000 --> 00:30:07,000 Seus usuarios non vai utilizar o phpMyAdmin. 536 00:30:07,000 --> 00:30:09,000 >> Isto é realmente só unha ferramenta administrativa ou creador 537 00:30:09,000 --> 00:30:12,000 que a ver e fuçar seus datos e descubrir como estrutura-lo, 538 00:30:12,000 --> 00:30:15,000 así como vostede mesmo pode utilizar o Excel ou Numbers, 539 00:30:15,000 --> 00:30:19,000 pero que vai ser unha gran forma de ver o que está a suceder debaixo do capó 540 00:30:19,000 --> 00:30:22,000 de modo que vostede poida concentrarse no problema interesante resolver e non tanto 541 00:30:22,000 --> 00:30:25,000 sobre os comandos arcanos. 542 00:30:25,000 --> 00:30:28,000 Imos dar un ollo a un exemplo de datos que poden ser almacenados tabularly 543 00:30:28,000 --> 00:30:30,000 nunha base de datos relacional. 544 00:30:30,000 --> 00:30:32,000 Aquí está un exemplo. 545 00:30:32,000 --> 00:30:35,000 Agora, desgraciadamente, phpMyAdmin erradamente no lado de xeito botando palabras de máis 546 00:30:35,000 --> 00:30:38,000 e gráficos en ti, pero se mellorar en só sobre o 547 00:30:38,000 --> 00:30:42,000 Columna de ID, a columna de nome de usuario, ea columna de hash, 548 00:30:42,000 --> 00:30:45,000 iso é efectivamente unha folla, pero pasa a ser un tramo de 549 00:30:45,000 --> 00:30:49,000 dunha mesa no interior do aparello 550 00:30:49,000 --> 00:30:53,000 usando un ficheiro que nós ofrecemos no conxunto de problemas 7. 551 00:30:53,000 --> 00:30:57,000 >> En particular, nós dámoslle un ficheiro que representa 552 00:30:57,000 --> 00:31:01,000 mesa de usuario, para folla de cálculo que contén os usuarios con 3 columnas, 553 00:31:01,000 --> 00:31:05,000 unha das cales é unha identificación única a partir do 1 e sendo incrementado despois. 554 00:31:05,000 --> 00:31:08,000 A segunda columna é un nome de usuario, e aqueles de vostedes que fixo Hacker, 555 00:31:08,000 --> 00:31:12,000 edición Hacker para pset 2, pode recoñecer algúns destes nomes de usuario, polo menos. 556 00:31:12,000 --> 00:31:16,000 No lado dereito están as claves, pero eles non son claves literais. 557 00:31:16,000 --> 00:31:19,000 Son hashes º, polo que acaba 558 00:31:19,000 --> 00:31:22,000 que o almacenamento de claves nunha base de datos é unha idea moi mala. 559 00:31:22,000 --> 00:31:25,000 Vós todos xa debe ter lido nalgún momento algún sitio 560 00:31:25,000 --> 00:31:28,000 ou base de datos de algunha compañía que está a ser comprometida, e entón ten que 561 00:31:28,000 --> 00:31:31,000 cambiar o seu contrasinal, precisa para obter restituciones para as cousas 562 00:31:31,000 --> 00:31:34,000 porque un cara malo, en realidade rompe na súa conta como resultado. 563 00:31:34,000 --> 00:31:38,000 >> O almacenamento de claves en texto puro, non cifrado nun banco de datos 564 00:31:38,000 --> 00:31:41,000 é completamente estúpido, e aínda é moi divertido 565 00:31:41,000 --> 00:31:44,000 despois de ler sobre algunhas empresas moi coñecidas 566 00:31:44,000 --> 00:31:47,000 ás veces na prensa cuxas bases de datos están comprometidos, 567 00:31:47,000 --> 00:31:50,000 e que parte non é divertido, pero o feito de que os bancos de datos conteñen cifrado 568 00:31:50,000 --> 00:31:53,000 claves é ridículo, porque, literalmente, unha liña de código 569 00:31:53,000 --> 00:31:57,000 pode protexer contra esta ameaza en particular, e iso é o que nós fixemos aquí. 570 00:31:57,000 --> 00:32:00,000 Mesmo para a nosa versión Finanzas pouco fake CS50 571 00:32:00,000 --> 00:32:03,000 estamos cifrar contrasinais só para unha boa medida, e do feito de que 572 00:32:03,000 --> 00:32:07,000 todas esas contrasinais comezan con $ 1 $ é só unha convención. 573 00:32:07,000 --> 00:32:10,000 Isto só significa que son criptografada ou realmente hash, 574 00:32:10,000 --> 00:32:13,000 que é como unha función de encriptación unidirecional 575 00:32:13,000 --> 00:32:17,000 polo cal non pode reverter os seus efectos con algo chamado MD5. 576 00:32:17,000 --> 00:32:21,000 >> O feito de que 50 é despois o que significa que un valor de sal 577 00:32:21,000 --> 00:32:24,000 50 foi usado para hash todas esas contrasinais, excepto un. 578 00:32:24,000 --> 00:32:27,000 Meu, por suposto, como podes ver alí, hai, 579 00:32:27,000 --> 00:32:30,000 estaba usando un sal diferente, para aqueles de vostedes que estean un pouco desarmado 580 00:32:30,000 --> 00:32:33,000 talvez en Hacker 2, que podería ser o resultado de termos usados 581 00:32:33,000 --> 00:32:36,000 un hash diferente do que os outros, porque o meu contrasinal é realmente o mesmo 582 00:32:36,000 --> 00:32:38,000 como algún outro usuario alí enriba. 583 00:32:38,000 --> 00:32:41,000 En realidade, se estaba esperando todas estas semanas para descubrir 584 00:32:41,000 --> 00:32:44,000 o que esas claves foron aquí foron as claves que foi desafiado 585 00:32:44,000 --> 00:32:48,000 de crack na edición de conxunto de problemas Hacker 2, polo tanto, non moi complicado. 586 00:32:48,000 --> 00:32:50,000 En realidade, Malan era o mesmo que jharvard, 587 00:32:50,000 --> 00:32:54,000 pero se volvemos ollaron diferente. 588 00:32:54,000 --> 00:32:58,000 >> Concéntrase en jharvard de vermello porque eran salgados diferente. 589 00:32:58,000 --> 00:33:01,000 O algoritmo foi perturbado de xeito que o 590 00:33:01,000 --> 00:33:05,000 valor de hash, o valor cifrado parece un pouco diferente 591 00:33:05,000 --> 00:33:08,000 porque as entradas eran lixeiramente diferentes, pero o contrasinal debaixo do capó 592 00:33:08,000 --> 00:33:10,000 aínda era, en última análise carmesim. 593 00:33:10,000 --> 00:33:12,000 Agora, quen se importa con iso? 594 00:33:12,000 --> 00:33:15,000 Ben, nós estamos dando-lle os usuarios de exemplo, os nomes de usuario de mostra 595 00:33:15,000 --> 00:33:18,000 e hashes das súas claves, de modo que realmente ten algúns 596 00:33:18,000 --> 00:33:23,000 clientes para CS50 Finanzas cando saír do chan co seu código. 597 00:33:23,000 --> 00:33:27,000 Vai ter que aplicar máis táboas dentro do MySQL, dentro da base de datos. 598 00:33:27,000 --> 00:33:30,000 Vai ter que crear máis follas de cálculo, de forma eficaz, pero decidimos darlle un agasallo 599 00:33:30,000 --> 00:33:33,000 para comezar, e vai ver que a especificación do conxunto de problemas 600 00:33:33,000 --> 00:33:37,000 orienta o proceso de importación esta táboa 601 00:33:37,000 --> 00:33:39,000 e tamén explicando o que algunhas das características son, 602 00:33:39,000 --> 00:33:41,000 e tamén vai ver que lle proporcionar o código 603 00:33:41,000 --> 00:33:44,000 para xestionar a suma ou cifrado desas claves, 604 00:33:44,000 --> 00:33:49,000 así que non se preocupe moito co que MD5 ou similares é realmente todo. 605 00:33:49,000 --> 00:33:53,000 >> Entón, SQL, linguaxe de consulta estruturada. 606 00:33:53,000 --> 00:33:56,000 É dicir, moi simplemente, a linguaxe que está a piques de comezar a usar en pset 7 607 00:33:56,000 --> 00:34:01,000 e, quizais, ademais de solicitar datos dalgún base de datos. 608 00:34:01,000 --> 00:34:06,000 Os datos son, de novo, almacenados tabularly nestas táboas relacionais, columnas e liñas, 609 00:34:06,000 --> 00:34:09,000 pero usando unha sintaxe relativamente simple como apagar, 610 00:34:09,000 --> 00:34:12,000 inserir, actualizar e seleccione podemos facer exactamente isto. 611 00:34:12,000 --> 00:34:15,000 Podemos eliminar da base de datos, inserir, 612 00:34:15,000 --> 00:34:19,000 actualizar datos, así como seleccionar, ou sexa, recuperar datos da base de datos. 613 00:34:19,000 --> 00:34:21,000 Como imos facelo? 614 00:34:21,000 --> 00:34:23,000 Deixe-me ir adiante para o aparello. 615 00:34:23,000 --> 00:34:28,000 Deixe-me puxar arriba http://localhost, 616 00:34:28,000 --> 00:34:30,000 que, de novo, é o lugar propio aparello. 617 00:34:30,000 --> 00:34:32,000 Iso é o seu apelido por defecto. 618 00:34:32,000 --> 00:34:35,000 E deixe-me ir a / phpmyadmin. 619 00:34:35,000 --> 00:34:39,000 Isto acontece por ser unha URL especial que o aparello está configurado previamente para entender 620 00:34:39,000 --> 00:34:42,000 que inmediatamente me pide un nome de usuario e contrasinal. 621 00:34:42,000 --> 00:34:46,000 >> Como de costume, eu vou escribir jharvard e carmesim, 622 00:34:46,000 --> 00:34:48,000 pero enténdese que é a conta de administrador no computador. 623 00:34:48,000 --> 00:34:53,000 É só unha coincidencia que hai tamén un jharvard rexistrado para CS50 Finanzas. 624 00:34:53,000 --> 00:34:56,000 Jharvard, carmesim, enter me dá a interface de usuario que vimos 625 00:34:56,000 --> 00:34:59,000 un reflexo dun momento atrás, e é un pouco esmagadora no primeiro, 626 00:34:59,000 --> 00:35:02,000 pero seguro, vostede non vai ter que premer a maioría dos enlaces nesta ferramenta. 627 00:35:02,000 --> 00:35:05,000 Vai acabar usando un pequeno subconxunto que son super útiles, 628 00:35:05,000 --> 00:35:08,000 o primeiro dos cales é bases de datos aquí. 629 00:35:08,000 --> 00:35:11,000 Se eu subir aos bancos de datos, observe que estou solicitada a crear unha base de datos. 630 00:35:11,000 --> 00:35:14,000 Este é como crear un novo ficheiro de Excel, de forma eficaz. 631 00:35:14,000 --> 00:35:18,000 Eu estou indo a ir adiante e chamar esta charla, e eu só vou ignorar o campo alí, agrupación. 632 00:35:18,000 --> 00:35:20,000 Isto ten que ver coa representación dos datos no mesmo, 633 00:35:20,000 --> 00:35:24,000 e eu vou clic en crear e agora entender como eu deixar de ir crear 634 00:35:24,000 --> 00:35:27,000 na parte esquerda onde di ningún base de datos 635 00:35:27,000 --> 00:35:30,000 Eu debería ver en breve a base de datos de clase. 636 00:35:30,000 --> 00:35:32,000 >> Se eu agora fai clic no lado esquerdo, a base de datos de charla, 637 00:35:32,000 --> 00:35:34,000 entende meus guías cambiar un pouco. 638 00:35:34,000 --> 00:35:38,000 Eu teño estrutura, importación SQL, exportación e algunhas outras cousas. 639 00:35:38,000 --> 00:35:40,000 A estrutura é practicamente en branco. 640 00:35:40,000 --> 00:35:43,000 Sen táboas atopadas na base de datos, como se di aquí, 641 00:35:43,000 --> 00:35:47,000 entón imos crear unha táboa, e imos adiante e crear unha táboa 642 00:35:47,000 --> 00:35:53,000 Como os alumnos, e cantas columnas queremos? 643 00:35:53,000 --> 00:35:55,000 Imos manter isto simple, e imos gravar para cada estudante 644 00:35:55,000 --> 00:35:58,000 un número de identificación, un nome e un enderezo de correo electrónico. 645 00:35:58,000 --> 00:36:02,000 >> Imos mantelo simple así, entón 3 columnas, vai. 646 00:36:02,000 --> 00:36:05,000 A forma que ve aquí é agora un pouco confuso e esmagadora, 647 00:36:05,000 --> 00:36:08,000 pero temos que pasar por iso liña por liña, por iso moi rapidamente imos dar 648 00:36:08,000 --> 00:36:14,000 a primeira columna neste banco de datos un nome de identificación para o identificador único. 649 00:36:14,000 --> 00:36:17,000 Vai ser un enteiro. Eu podo realmente ignorar lonxitude e valores. 650 00:36:17,000 --> 00:36:21,000 Un int vai ser de 32 bits, non importa o que escribe alí, entón imos deixalo en branco. 651 00:36:21,000 --> 00:36:24,000 Valor por defecto, eu podería facelo nulo, conforme definido. 652 00:36:24,000 --> 00:36:27,000 Vou deixar isto quedo. Non imos preocupar sobre os valores por defecto. 653 00:36:27,000 --> 00:36:29,000 Imos cambiar ata aquí para a dereita, atributos. 654 00:36:29,000 --> 00:36:31,000 Isto é interesante. 655 00:36:31,000 --> 00:36:33,000 Imos adiante e un pouco arbitrariamente dicir que as identificacións deben ser asinados. 656 00:36:33,000 --> 00:36:35,000 Non imos perder todos os números negativos. 657 00:36:35,000 --> 00:36:37,000 >> Imos 0-4000000000, máis ou menos, 658 00:36:37,000 --> 00:36:40,000 e entón non imos tocar en calquera destes campos só aínda alí, 659 00:36:40,000 --> 00:36:43,000 pero deixe-me entón escribir o nome aquí, 660 00:36:43,000 --> 00:36:46,000 e despois o outro era o correo electrónico, de modo que o problema é correo-e 661 00:36:46,000 --> 00:36:50,000 e nome, obviamente, non enteiros, entón imos cambiar estes para un campo diferente. 662 00:36:50,000 --> 00:36:53,000 Acontece varchar, lonxitude variable char, 663 00:36:53,000 --> 00:36:56,000 é como unha corda nun banco de datos SQL 664 00:36:56,000 --> 00:36:59,000 pero unha lonxitude variable, e realmente ten que dicir-lle anticipadamente o 665 00:36:59,000 --> 00:37:02,000 lonxitude máxima de cadea, entón eu vou un pouco arbitrariamente 666 00:37:02,000 --> 00:37:05,000 por convención tipo 255 caracteres. 667 00:37:05,000 --> 00:37:08,000 Eu podería perfectamente dicir 32. Eu podería dicir mil. 668 00:37:08,000 --> 00:37:11,000 Vostede tipo de necesidade de decidir por si mesmo en base ás súas características demográficas que é 669 00:37:11,000 --> 00:37:14,000 o nome da máis longa alumno e ir con ese número ou un pouco maior, 670 00:37:14,000 --> 00:37:17,000 pero o que é agradable sobre un varchar é que non vai para o lixo 671 00:37:17,000 --> 00:37:19,000 255 bytes en nome de cada alumno. 672 00:37:19,000 --> 00:37:23,000 Se é David non vai utilizar un todo 255 bytes, 673 00:37:23,000 --> 00:37:26,000 pero iso é un límite superior, entón eu vou con 255 só por convención, 674 00:37:26,000 --> 00:37:30,000 pero podemos debater que ser un valor menor, e para o enderezo de correo electrónico 675 00:37:30,000 --> 00:37:34,000 só a ser coherente 255, pero, de novo, nós poderíamos ter o mesmo debate. 676 00:37:34,000 --> 00:37:36,000 Pero eu vou facer outra cousa aquí no lado dereito. 677 00:37:36,000 --> 00:37:40,000 >> O que é poderosa sobre unha base de datos é que pode facer unha chea de traballo pesado 678 00:37:40,000 --> 00:37:42,000 ou complexo traballo para ti. 679 00:37:42,000 --> 00:37:46,000 En particular, eu realmente non me importa o que os números do meu alumno de identificación son. 680 00:37:46,000 --> 00:37:49,000 É só para ser un identificador único nunha base de datos 681 00:37:49,000 --> 00:37:52,000 entón eu teño unha representación sucinta de 32 bits que o alumno 682 00:37:52,000 --> 00:37:55,000 para que eu teña algunha forma de identificar únicamente a eles 683 00:37:55,000 --> 00:37:58,000 para que non haxa dous Davids, por exemplo, nunha clase. 684 00:37:58,000 --> 00:38:01,000 En realidade, eu estou indo a esta caixa AI, auto incremento, 685 00:38:01,000 --> 00:38:04,000 de xeito que a base de datos MySQL, descobre 686 00:38:04,000 --> 00:38:08,000 ID cada estudante recén inserido é que vai ser. 687 00:38:08,000 --> 00:38:11,000 Eu nin sequera ten que se preocupar con iso no meu código, 688 00:38:11,000 --> 00:38:13,000 e eu tamén vou escoller algo no menú de índices. 689 00:38:13,000 --> 00:38:17,000 O índice caer para abaixo aquí ten primario, único, 690 00:38:17,000 --> 00:38:19,000 índice e texto completo. 691 00:38:19,000 --> 00:38:21,000 Vostede pode adiviñar o que quizais algunhas destas cousas son, 692 00:38:21,000 --> 00:38:24,000 pero acontece que en bases de datos relacionais 693 00:38:24,000 --> 00:38:28,000 vostede o programador ou o administrador de base de chegar ao preventivamente 694 00:38:28,000 --> 00:38:32,000 dar consellos para a base de datos, como o que os campos 695 00:38:32,000 --> 00:38:34,000 nunha táboa son un pouco especial. 696 00:38:34,000 --> 00:38:37,000 >> Por exemplo, neste caso, eu vou dicir que ID 697 00:38:37,000 --> 00:38:42,000 vai ser un índice primario, tamén coñecido como unha chave primaria. 698 00:38:42,000 --> 00:38:44,000 O que isto significa, por definición, é que a partir de agora ID 699 00:38:44,000 --> 00:38:48,000 ha identificar os alumnos nesta táboa. 700 00:38:48,000 --> 00:38:53,000 Ningún estudante terá a mesma identificación, porque eu estou impoñer esa restrición ou ese índice. 701 00:38:53,000 --> 00:38:55,000 Ademais, o que é que isto vai facer por min é que vai dicir 702 00:38:55,000 --> 00:38:58,000 MySQL ID que é especial. 703 00:38:58,000 --> 00:39:03,000 Eu me preocupe especialmente sobre ID, entón vai adiante e facer máxica súa estrutura de datos da fantasía, 704 00:39:03,000 --> 00:39:05,000 construír algún tipo de árbore. 705 00:39:05,000 --> 00:39:08,000 Normalmente é algo chamado de árbore B, que non mirou semanas, 706 00:39:08,000 --> 00:39:11,000 pero é outra estrutura de datos como similar en espírito ás árbores binarias 707 00:39:11,000 --> 00:39:15,000 e intenta que nós miramos, pero vai dicir 708 00:39:15,000 --> 00:39:18,000 á base de datos neste campo é tan importante que eu probablemente 709 00:39:18,000 --> 00:39:22,000 quero ser capaz de investigar sobre el, vai adiante e construír algunha fantasía 710 00:39:22,000 --> 00:39:25,000 estrutura de datos na memoria para acelerar a investigación para que idealmente 711 00:39:25,000 --> 00:39:28,000 son de tempo constante, ou polo menos tan próximo como sexa posible que 712 00:39:28,000 --> 00:39:32,000 de xeito que non transformarse en busca lineal, o cal non será 713 00:39:32,000 --> 00:39:34,000 o máis alto rendemento visión. 714 00:39:34,000 --> 00:39:37,000 Por outra banda, enderezo de correo-e pode ser unha chave primaria. 715 00:39:37,000 --> 00:39:41,000 >> En teoría, enderezo de correo-e de todos é único, a menos que está compartindo algunha conta 716 00:39:41,000 --> 00:39:45,000 pero non é xeralmente bo para usar algo como unha corda 717 00:39:45,000 --> 00:39:49,000 como unha chave primaria, porque o seu propósito na vida é identificar 718 00:39:49,000 --> 00:39:55,000 liñas da táboa non hai ningunha razón para usar como máximo 255 bytes 719 00:39:55,000 --> 00:39:58,000 para identificar alguén, se pode ir lonxe con só 4 bytes 720 00:39:58,000 --> 00:40:00,000 ou int de 32 bits. 721 00:40:00,000 --> 00:40:03,000 En xeral, unha chave primaria debe ser curto e sucinto 722 00:40:03,000 --> 00:40:07,000 e, idealmente, algo así como un enteiro ou un int grande, que pasa a ser de 64 bits. 723 00:40:07,000 --> 00:40:11,000 Pero un enderezo de correo-e debe ser único, e unha das características dun banco de datos moi 724 00:40:11,000 --> 00:40:14,000 é impor exclusiva para min. 725 00:40:14,000 --> 00:40:18,000 Ao seleccionar único aquí preto de correo-e, aínda que enviar correo-e propio 726 00:40:18,000 --> 00:40:21,000 é desprazado para fóra da pantalla, eu estou dicindo para o banco de datos 727 00:40:21,000 --> 00:40:23,000 non confíe en min. 728 00:40:23,000 --> 00:40:26,000 Non deixe-me engadir na base de datos 729 00:40:26,000 --> 00:40:29,000 o mesmo enderezo dúas veces, aínda que eu son un idiota e non estou 730 00:40:29,000 --> 00:40:32,000 moi boa cos meus IFS e IFS persoa e de código PHP real 731 00:40:32,000 --> 00:40:37,000 e eu accidentalmente deixar o usuario rexistrar cun enderezo de correo electrónico existente 732 00:40:37,000 --> 00:40:40,000 a base de datos é un nivel de defensa para corrección 733 00:40:40,000 --> 00:40:44,000 para garantir que este enderezo de correo-e duplicados non acabar na táboa. 734 00:40:44,000 --> 00:40:49,000 >> Agora, pola contra, o nome que probablemente non quere facer ese único 735 00:40:49,000 --> 00:40:51,000 porque, entón, nunca podería haber dous Davids ou dous Smiths Mike, por exemplo, 736 00:40:51,000 --> 00:40:55,000 no seu banco de datos, de xeito que unha soa teremos que saír soa. 737 00:40:55,000 --> 00:40:58,000 Eu estou indo a ir adiante e faga clic en Gardar na parte inferior dereita, 738 00:40:58,000 --> 00:41:02,000 e todo parece bo, pero repare-se aquí 739 00:41:02,000 --> 00:41:04,000 Esta é unha peza que, polo de agora, non vai gastar moito tempo en 740 00:41:04,000 --> 00:41:07,000 porque a sintaxe é un pouco complexa, e non temos para crear táboas 741 00:41:07,000 --> 00:41:10,000 todo o que, moitas veces, pero o SQL en si é unha linguaxe, 742 00:41:10,000 --> 00:41:13,000 a sintaxe para que é aquí que eu destacou. 743 00:41:13,000 --> 00:41:18,000 O phpMyAdmin realmente fai é que crea unha interface gráfica baseada na web para ti 744 00:41:18,000 --> 00:41:23,000 co cal pode aforrar tempo e non ter que escribir manualmente fóra 745 00:41:23,000 --> 00:41:26,000 unha consulta SQL moi longo como este. 746 00:41:26,000 --> 00:41:29,000 >> Noutras palabras, se quere crear manualmente esta táboa, 747 00:41:29,000 --> 00:41:32,000 tanto no que phpMyAdmin branco e negro rápida ou incluso en 748 00:41:32,000 --> 00:41:35,000 Usando este outro guía, esta guía SQL onde podes escribir en calquera SQL consultas 749 00:41:35,000 --> 00:41:38,000 quere, francamente, iso tería me levado un minuto 750 00:41:38,000 --> 00:41:41,000 para realmente lembrar a sintaxe enteiro, e ata entón eu probablemente tería 751 00:41:41,000 --> 00:41:45,000 fixo algúns erros de dixitación, polo que esta ferramenta é útil para cousas como esa, e é tamén instrutivo. 752 00:41:45,000 --> 00:41:49,000 Pode comezar a inferir que a sintaxe é 753 00:41:49,000 --> 00:41:52,000 só pola cor agradable de codificación que está engadindo phpMyAdmin 754 00:41:52,000 --> 00:41:54,000 a nosa conveniencia visual. 755 00:41:54,000 --> 00:41:56,000 Pero agora imos facelo no seu lugar. 756 00:41:56,000 --> 00:42:00,000 Deixe-me ir a guía Inserir na parte superior, e deixe-me ir adiante e introducir, por exemplo, 757 00:42:00,000 --> 00:42:04,000 un ID imos dicir, en realidade eu non me importa. 758 00:42:04,000 --> 00:42:07,000 Vai auto incremento. Vou deixar o negocio de base de datos con iso. 759 00:42:07,000 --> 00:42:11,000 Pero será David, e meu e-mail debe ser malan@harvard.edu. 760 00:42:11,000 --> 00:42:16,000 >> Imos adiante aquí e poñer en Mike Smith como outro. 761 00:42:16,000 --> 00:42:18,000 Eu vou dar un último nome, así como, 762 00:42:18,000 --> 00:42:22,000 e nós imos ter que dicir smith@example.com, 763 00:42:22,000 --> 00:42:24,000 e onde eu vou seguir? 764 00:42:24,000 --> 00:42:27,000 Ben, parece que vai é o boton para premer, e listo. 765 00:42:27,000 --> 00:42:30,000 Observe no top 2 liñas inseridas. 766 00:42:30,000 --> 00:42:32,000 Esta é a consulta SQL real. 767 00:42:32,000 --> 00:42:36,000 Esta é a ferramenta phpMyAdmin executado por min, 768 00:42:36,000 --> 00:42:40,000 pero o resultado final, o aviso previo, se eu agora vaia á pestana de navegación, 769 00:42:40,000 --> 00:42:43,000 é ver dúas liñas nesta táboa, lembra moito esteticamente 770 00:42:43,000 --> 00:42:46,000 da táboa vimos anteriormente para os nosos usuarios de pset 7, 771 00:42:46,000 --> 00:42:51,000 un dos cales é David Malan, un dos cales é agora Mike Smith. 772 00:42:51,000 --> 00:42:54,000 Pero só para quedar claro, eu non teño usar o phpMyAdmin, 773 00:42:54,000 --> 00:42:56,000 e, de feito, vai en breve ser escribir código para pset 7 774 00:42:56,000 --> 00:43:01,000 que automatizar o proceso de adición de liñas, eliminar liñas, actualizar liñas e afíns, 775 00:43:01,000 --> 00:43:04,000 entón deixe-me en vez de ir a pestana SQL-aquí 776 00:43:04,000 --> 00:43:14,000 e escriba SELECT * FROM alumnos onde 777 00:43:14,000 --> 00:43:18,000 e-mail = "malan@harvard.edu". 778 00:43:18,000 --> 00:43:21,000 >> Noutras palabras supoño que agora ten 779 00:43:21,000 --> 00:43:26,000 dalgunha forma HTML, e os tipos de usuario no seu enderezo de correo-e, entre outras áreas, 780 00:43:26,000 --> 00:43:29,000 eo obxectivo agora é en PHP no código de back-end 781 00:43:29,000 --> 00:43:31,000 para realmente ollar para outros detalles do usuario. 782 00:43:31,000 --> 00:43:34,000 Cal é o seu nome completo? Cal é o seu número de identificación? 783 00:43:34,000 --> 00:43:37,000 Podes escribir unha consulta SQL como esta, seleccione * de estudantes 784 00:43:37,000 --> 00:43:40,000 onde e-mail = "malan@harvard.edu". 785 00:43:40,000 --> 00:43:46,000 E se eu prema en ir, teña en conta que eu, e por suposto eu, volver só unha liña. 786 00:43:46,000 --> 00:43:50,000 Mike é omitido este conxunto de resultados, como a colección de liñas 787 00:43:50,000 --> 00:43:53,000 xeralmente é chamado, porque non ten o mesmo enderezo de correo electrónico que eu. 788 00:43:53,000 --> 00:43:57,000 >> Agora, de novo, aquí para pset 7 vai usar o phpMyAdmin como unha ferramenta administrativa 789 00:43:57,000 --> 00:44:00,000 e unha ferramenta pedagóxica para aprender o camiño 790 00:44:00,000 --> 00:44:03,000 en todo o mundo de SQL, pero ao final do día, 791 00:44:03,000 --> 00:44:08,000 vai estar escribindo estas consultas dentro do código PHP actual, 792 00:44:08,000 --> 00:44:11,000 e sexa Nós prestamos moita atención no paso a paso Zamyla, en particular 793 00:44:11,000 --> 00:44:14,000 onde pode obter unha xira de código de distribución para este conxunto de problemas 794 00:44:14,000 --> 00:44:18,000 onde demos-lle non só a estética á páxina de login 795 00:44:18,000 --> 00:44:21,000 eo logotipo agradable sexy que di CS50 Finanzas, pero nós tamén lle deu 796 00:44:21,000 --> 00:44:24,000 unha morea de funcións que van facer a súa vida un pouco máis fácil. 797 00:44:24,000 --> 00:44:27,000 Tamén escribiu parte do pset para ti, 798 00:44:27,000 --> 00:44:32,000 a parte de conexión en particular, para darlle un sentido dun proxecto de representante 799 00:44:32,000 --> 00:44:36,000 que realmente usa un controlador, por exemplo index.php, 800 00:44:36,000 --> 00:44:40,000 login.php e similares, e entón podes ver o pset tamén ten un directorio de modelos 801 00:44:40,000 --> 00:44:43,000 que ten todos os seus puntos de vista, todos os estética. 802 00:44:43,000 --> 00:44:46,000 E así, o fluxo de traballo global en pset 7 vai ser a de que 803 00:44:46,000 --> 00:44:49,000 seus usuarios visitan un controlador través dunha URL nun navegador. 804 00:44:49,000 --> 00:44:53,000 Este controlador contén código PHP que escribiu, e dentro do seu código PHP 805 00:44:53,000 --> 00:44:57,000 pode ser algunhas liñas de SQL aninhada entre comiñas dobres 806 00:44:57,000 --> 00:45:00,000 e pasado para unha función que escribiu consulta chamada 807 00:45:00,000 --> 00:45:03,000 que pode axudar a falar co banco de datos sen usar algo como 808 00:45:03,000 --> 00:45:05,000 unha ferramenta administrativa como phpMyAdmin. 809 00:45:05,000 --> 00:45:08,000 >> Vai ser capaz de escribir instrucións SQL en código PHP 810 00:45:08,000 --> 00:45:11,000 e recibir de volta dunha matriz PHP do conxunto de resultados, 811 00:45:11,000 --> 00:45:14,000 das liñas que corresponde de feito a esa consulta. 812 00:45:14,000 --> 00:45:18,000 E do mesmo xeito que vai ser capaz de facer insercións ou exclusións 813 00:45:18,000 --> 00:45:22,000 ou actualizacións ou similares, a sintaxe para o cal é bastante similar, 814 00:45:22,000 --> 00:45:25,000 e vai ver a partir de algunhas referencias en liña, a partir do código de distribución 815 00:45:25,000 --> 00:45:29,000 e do pset embalar-se exactamente como ir sobre facer isto. 816 00:45:29,000 --> 00:45:33,000 Entender finalmente que estamos realmente só raiar a superficie do SQL 817 00:45:33,000 --> 00:45:36,000 e de MySQL, mais o poder que realmente é que libera 818 00:45:36,000 --> 00:45:40,000 a concentrar-se sobre os problemas que desexa resolver os casos de uso que quere implantar 819 00:45:40,000 --> 00:45:43,000 sen ter que preocuparse tan grande, polo menos en principio, 820 00:45:43,000 --> 00:45:47,000 sobre onde e como almacenar e buscar o seu banco de datos, 821 00:45:47,000 --> 00:45:50,000 e esta é literalmente onde o Facebook en si ten o seu inicio 822 00:45:50,000 --> 00:45:53,000 usando MySQL e en seguida, usando máis servidores MySQL e, a continuación, máis servidores MySQL 823 00:45:53,000 --> 00:45:57,000 antes de tempo, ata que, a continuación, tivo que realmente comezar a pensar seriamente en como 824 00:45:57,000 --> 00:46:00,000 almacenamento de datos, como almacenar as cousas aínda máis eficiente, 825 00:46:00,000 --> 00:46:04,000 por iso mesmo que imos ter concedido o feito de que os índices e restricións exclusivas 826 00:46:04,000 --> 00:46:08,000 e así por diante só traballar hai unha conversa moi interesante 827 00:46:08,000 --> 00:46:12,000 que todo iso pode, eventualmente, levar a, así que entender que estamos só rabuñando a superficie 828 00:46:12,000 --> 00:46:17,000 do que podería, finalmente, para vostede ou os seus proxectos fan-se un pouco de datos grandes. 829 00:46:17,000 --> 00:46:22,000 >> Con iso dito, imos terminar aquí, e imos ver a próxima semana. 830 00:46:28,000 --> 00:46:30,000 [CS50.TV]