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 es CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:13,000 >> Esto es CS50, por lo que este es el final de la semana 8 aquí. 5 00:00:13,000 --> 00:00:16,000 Nosotros, por supuesto, tenía un poco de un huracán a principios de esta semana, 6 00:00:16,000 --> 00:00:19,000 por lo que ahora es realmente sólo tú y yo en esta sala de conferencias, 7 00:00:19,000 --> 00:00:22,000 pero hoy en día continuamos nuestra conversación sobre PHP 8 00:00:22,000 --> 00:00:25,000 y acerca de la programación web en general, y también introducir la idea 9 00:00:25,000 --> 00:00:29,000 de bases de datos, especialmente uno llamado MySQL, que es muy popular en estos días, 10 00:00:29,000 --> 00:00:34,000 en gran parte debido a su escalabilidad, así como por su ser libre y de código abierto. 11 00:00:34,000 --> 00:00:37,000 >> Pero primero, una mirada a donde lo dejamos la última vez. 12 00:00:37,000 --> 00:00:40,000 Recordemos que estábamos buscando en los varios ejemplos Frosh mensajes instantáneos, 13 00:00:40,000 --> 00:00:44,000 y ésta era la forma horrible en que me ocurrió con unos 15 + años 14 00:00:44,000 --> 00:00:49,000 con el fin de que los estudiantes en el campus de registro para los deportes intramuros de primer año 15 00:00:49,000 --> 00:00:52,000 sin tener que caminar más por el patio a Wigglesworth 16 00:00:52,000 --> 00:00:56,000 la caída de una pieza física de papel debajo de la puerta un poco de Proctor. 17 00:00:56,000 --> 00:00:59,000 En su lugar nos trasladamos todo en línea, pero para eso es necesario hacer un uso 18 00:00:59,000 --> 00:01:03,000 de unas pocas tecnologías, por lo que uno, necesitábamos HTML, HyperText Markup Language, 19 00:01:03,000 --> 00:01:07,000 que a su vez es este lenguaje de marcado con la que hacer paginas web estructuralmente. 20 00:01:07,000 --> 00:01:10,000 >> Con un poco de CSS en estos días, las hojas de estilo en cascada, 21 00:01:10,000 --> 00:01:16,000 en que podamos utilizar estilizaciones de la página web utilizando una sintaxis ligeramente diferente, 22 00:01:16,000 --> 00:01:19,000 mientras que el HTML es todo acerca de la estructura del mismo. 23 00:01:19,000 --> 00:01:21,000 También tenemos que introducir un lenguaje de programación web. 24 00:01:21,000 --> 00:01:25,000 En este caso, vamos a utilizar PHP, PHP y nos va a permitir 25 00:01:25,000 --> 00:01:28,000 al contenido de la salida de forma dinámica, así como hacer las cosas como programáticas 26 00:01:28,000 --> 00:01:33,000 el envío de correos electrónicos, como fue el caso en la nota que dejó la semana pasada. 27 00:01:33,000 --> 00:01:35,000 >> Recordemos que el código para esto fue en 2 partes. 28 00:01:35,000 --> 00:01:38,000 Uno de ellos, tuvimos froshims3.php, 29 00:01:38,000 --> 00:01:42,000 y esto fue en gran medida el marcado con un formulario HTML dentro de ella, 30 00:01:42,000 --> 00:01:45,000 un poco de CSS aquí en los atributos de estilo 31 00:01:45,000 --> 00:01:48,000 de modo que la forma en sí se centra en la página, pero más allá 32 00:01:48,000 --> 00:01:51,000 tuvimos algunos insumos forma representativa, un campo de texto, una casilla de verificación, 33 00:01:51,000 --> 00:01:55,000 Algunos botones de radio, un selecto menú y un botón submit. 34 00:01:55,000 --> 00:02:01,000 Y a través de este formulario, nos presentó a un archivo que se llama al parecer register3.php, 35 00:02:01,000 --> 00:02:04,000 que a su vez se veía un poco de algo como esto. 36 00:02:04,000 --> 00:02:08,000 Ahora, la mayor parte del código en register3.php, recordar, trataba de correo electrónico. 37 00:02:08,000 --> 00:02:11,000 Lo hizo un poco de la validación de la forma que se presentó para asegurarse de que 38 00:02:11,000 --> 00:02:14,000 que los campos fueron realmente que se esperaba. 39 00:02:14,000 --> 00:02:18,000 Luego llamamos a algunas funciones de PHP usando un poco nueva sintaxis, 40 00:02:18,000 --> 00:02:20,000 a pesar de que está tomado de C. 41 00:02:20,000 --> 00:02:24,000 >> Este operador de flecha nos permite hacer uso de algo que se llama programación orientada a objetos. 42 00:02:24,000 --> 00:02:27,000 No vamos a entrar en eso en detalle aquí, pero sabemos por ahora 43 00:02:27,000 --> 00:02:31,000 que es una manera de tener funciones asociadas con los objetos, 44 00:02:31,000 --> 00:02:34,000 que son un tipo especial de estructura, como vimos en C. 45 00:02:34,000 --> 00:02:37,000 Pero por ahora, sólo tener fe en que esta es la sintaxis correcta para utilizar 46 00:02:37,000 --> 00:02:41,000 cuando se utiliza una biblioteca como esta biblioteca PHPMailer. 47 00:02:41,000 --> 00:02:44,000 Y luego, al final de este archivo que habíamos generado dinámicamente un e-mail 48 00:02:44,000 --> 00:02:47,000 que fue enviado a mi cuenta jharvard@cs50.net 49 00:02:47,000 --> 00:02:50,000 de mi cuenta jharvard@cs50.net, 50 00:02:50,000 --> 00:02:54,000 y nos informaron al usuario en consecuencia que se habían registrado para este deporte. 51 00:02:54,000 --> 00:02:57,000 Eso es más o menos lo que el sitio Frosh IMs hizo hace tantos años 52 00:02:57,000 --> 00:03:00,000 cuando lo implementa, es cierto, en un idioma diferente, 53 00:03:00,000 --> 00:03:02,000 pero quizás te muestra el poder que tiene 54 00:03:02,000 --> 00:03:05,000 ahora que usted puede expresarse no sólo mediante programación 55 00:03:05,000 --> 00:03:08,000 a un nivel bajo en un lenguaje como C, pero a un nivel mucho más alto 56 00:03:08,000 --> 00:03:11,000 con estas aplicaciones en el mundo muy reales como el correo electrónico para resolver realmente 57 00:03:11,000 --> 00:03:13,000 algunos de los problemas del mundo real. 58 00:03:13,000 --> 00:03:16,000 >> Ahora, por supuesto, aunque yo uso este script para generar algún 59 00:03:16,000 --> 00:03:20,000 correos electrónicos de forma dinámica jharvard@cs50.net, que es en realidad una cuenta 60 00:03:20,000 --> 00:03:23,000 que tengo acceso, seas muy cuidadoso al enviar 61 00:03:23,000 --> 00:03:26,000 Mensajes sólo de las cuentas que están en realidad su cuenta, 62 00:03:26,000 --> 00:03:30,000 no sea que las cosas que te dan en un poco de agua caliente en la vida. 63 00:03:30,000 --> 00:03:35,000 Dicho esto, vamos ahora la transición a la solución de un problema totalmente diferente, 64 00:03:35,000 --> 00:03:37,000 la de los estados de retención. 65 00:03:37,000 --> 00:03:39,000 Ahora, ¿qué significa esto realmente? 66 00:03:39,000 --> 00:03:42,000 HTTP, el protocolo de transferencia de hipertexto, 67 00:03:42,000 --> 00:03:45,000 en realidad es un protocolo sin estado, y lo que esto significa es que 68 00:03:45,000 --> 00:03:48,000 cuando acabas de llegar algo como Google.com y luego pulsa enter 69 00:03:48,000 --> 00:03:51,000 por lo general su navegador tiene algún tipo de icono volador que luego 70 00:03:51,000 --> 00:03:54,000 resulta en alguna página web que se está descargando, 71 00:03:54,000 --> 00:03:57,000 y luego que pequeño icono deja de girar, y que en realidad sugiere 72 00:03:57,000 --> 00:04:02,000 HTTP que ha completado algún tipo de conexión con el servidor y ya está. 73 00:04:02,000 --> 00:04:05,000 HTTP es el estado en el sentido de que no mantiene 74 00:04:05,000 --> 00:04:08,000 una conexión permanente con el servidor de la misma manera que lo hace Skype 75 00:04:08,000 --> 00:04:11,000 o Gchat hace porque con HTTP 76 00:04:11,000 --> 00:04:15,000 el supuesto es que una vez que fue a buscar una página web que ya está. 77 00:04:15,000 --> 00:04:18,000 >> Ahora bien, en la realidad estos días en sitios como Facebook y Google Maps 78 00:04:18,000 --> 00:04:21,000 y Twitter y similares hay mucho más dinamismo por el cual 79 00:04:21,000 --> 00:04:25,000 incluso después de que el icono deja de girar puede de hecho tener más actualizaciones 80 00:04:25,000 --> 00:04:29,000 desde el servidor, más tweets, más actualizaciones de estado en Facebook y similares. 81 00:04:29,000 --> 00:04:33,000 Pero incluso eso está utilizando una técnica que vamos a hablar en una semana o dos 82 00:04:33,000 --> 00:04:36,000 conocida como Ajax usando un lenguaje llamado JavaScript 83 00:04:36,000 --> 00:04:38,000 pero al final de la día, HTTP es todavía sin estado. 84 00:04:38,000 --> 00:04:42,000 Y sin embargo, si usted quiere recordar alguna manera las cosas acerca de un usuario 85 00:04:42,000 --> 00:04:44,000 incluso después de haber desconectado del servidor 86 00:04:44,000 --> 00:04:47,000 PHP hace permitirse que un medio de hacer esto 87 00:04:47,000 --> 00:04:52,000 porque, como vimos por última vez, PHP tiene una serie de superglobales, 88 00:04:52,000 --> 00:04:55,000 y un superglobal es, de nuevo, una variable global especial 89 00:04:55,000 --> 00:04:59,000 que es entregado a usted por el servidor web y PHP por sí mismo. 90 00:04:59,000 --> 00:05:02,000 >> Usted no tiene que hacer nada para poner los valores en ella, 91 00:05:02,000 --> 00:05:05,000 y entre las superglobales que hemos visto hasta ahora son GET y POST, 92 00:05:05,000 --> 00:05:08,000 que es donde se colocan los campos de formulario de forma automática, 93 00:05:08,000 --> 00:05:11,000 así como un par de otros que no hemos visto todavía. 94 00:05:11,000 --> 00:05:17,000 Dentro de $ _SERVER algunas variables especiales relacionadas con el propio servidor. 95 00:05:17,000 --> 00:05:22,000 ¿Cuál es la dirección IP, qué protocolo, HTTP o HTTPS usaste, 96 00:05:22,000 --> 00:05:25,000 qué método usaste solicitud y similares, por lo que hay algunos interesantes, 97 00:05:25,000 --> 00:05:29,000 jugosos detalles sobre el servidor, y de hecho, el usuario así como en allí. 98 00:05:29,000 --> 00:05:33,000 Hay $ _COOKIE, que es donde estas cosas llamadas cookies se almacenan. 99 00:05:33,000 --> 00:05:36,000 No vamos a dedicar tiempo a sí mismas galletas hoy, 100 00:05:36,000 --> 00:05:40,000 pero sabemos por ahora que una cookie es una pequeña pieza de información 101 00:05:40,000 --> 00:05:43,000 que un servidor web se puede plantar en un navegador web 102 00:05:43,000 --> 00:05:46,000 ya su vez su memoria RAM o el disco duro de su ordenador 103 00:05:46,000 --> 00:05:49,000 para almacenar información acerca de un usuario, por ejemplo, su nombre de usuario 104 00:05:49,000 --> 00:05:52,000 de modo que no tenga que escribirla cada vez que inician sesión en o algunos 105 00:05:52,000 --> 00:05:55,000 número único o identificador para ese usuario 106 00:05:55,000 --> 00:05:58,000 de modo que usted no tiene que molestar con el mismo tipo de preguntas sobre 107 00:05:58,000 --> 00:06:00,000 preferencias en el futuro, pero la mayoría de los intereses 108 00:06:00,000 --> 00:06:02,000 en estos momentos es de $ _SESSION. 109 00:06:02,000 --> 00:06:07,000 >> Esta superglobal, que, como los demás, se entrega de forma automática por PHP 110 00:06:07,000 --> 00:06:10,000 cuando escribes sitios web basados ​​en PHP 111 00:06:10,000 --> 00:06:13,000 puede almacenar lo que quieras, cadenas, enteros, 112 00:06:13,000 --> 00:06:16,000 puntos flotantes, valores, matrices, objetos, 113 00:06:16,000 --> 00:06:20,000 Realmente cualquier cosa que desee, y le permite almacenar de forma 114 00:06:20,000 --> 00:06:23,000 que incluso si el usuario lo visita de vez en cuando 115 00:06:23,000 --> 00:06:26,000 regresa un minuto a partir de ahora o 5 minutos a partir de ahora, porque 116 00:06:26,000 --> 00:06:28,000 se toman su tiempo antes de pulsar algún otro enlace 117 00:06:28,000 --> 00:06:32,000 PHP se asegurará de que lo que pones en esa sesión superglobal 118 00:06:32,000 --> 00:06:37,000 minutos o 5 minutos hace todavía estará allí cuando regrese el usuario. 119 00:06:37,000 --> 00:06:40,000 Y debajo de la capucha esta superglobal sea implementada a través de 120 00:06:40,000 --> 00:06:44,000 esas cosas llamadas cookies, pero por ahora, es sólo una abstracción 121 00:06:44,000 --> 00:06:47,000 por lo cual es una especie de equivalente programático de un carrito de compras. 122 00:06:47,000 --> 00:06:50,000 Lo que usted, el programador, puesto que en 123 00:06:50,000 --> 00:06:53,000 matriz asociativa superglobal estará allí cierto número de minutos más tarde 124 00:06:53,000 --> 00:06:59,000 hasta que lo elimine, o hasta que el usuario sale de su navegador completo. 125 00:06:59,000 --> 00:07:02,000 >> Echemos un vistazo a un ejemplo de cómo esto se utiliza realmente. 126 00:07:02,000 --> 00:07:07,000 En counter.php entre piezas actuales de código 127 00:07:07,000 --> 00:07:09,000 tenemos la siguiente línea. 128 00:07:09,000 --> 00:07:13,000 Al inicio de este archivo tenemos un montón de observaciones azules, que son poco interesantes por ahora. 129 00:07:13,000 --> 00:07:15,000 Sin embargo, en la línea 13 tenemos una nueva línea, 130 00:07:15,000 --> 00:07:18,000 session_start, y que en realidad hace exactamente lo que dice. 131 00:07:18,000 --> 00:07:20,000 Se inicia sesiones. 132 00:07:20,000 --> 00:07:25,000 Le permite usar esa gran superglobal $ _SESSION, y es tan simple como eso. 133 00:07:25,000 --> 00:07:30,000 Ahora bien, si se procede a observar la línea 16, vamos a tratar de averiguar lo que esta página web se va a hacer. 134 00:07:30,000 --> 00:07:35,000 If (isset ($ _SESSION ["contador"]) y luego seguir adelante 135 00:07:35,000 --> 00:07:39,000 y guardar en la variable de contador, contador minúsculas, 136 00:07:39,000 --> 00:07:42,000 $ _SESSION ["Contador"]. 137 00:07:42,000 --> 00:07:45,000 Esto parece que se declara una variable local llamada contador 138 00:07:45,000 --> 00:07:48,000 dentro de los cuales se trata de poner una copia de todo lo que está dentro de la superglobal 139 00:07:48,000 --> 00:07:52,000 llamado período de sesiones en la ubicación "contador". 140 00:07:52,000 --> 00:07:56,000 Si no, al parecer, este pequeño mostrador variable local, se inicializa a 0. 141 00:07:56,000 --> 00:08:01,000 >> Pero entonces, unas líneas más adelante en el 26 aviso de que copia de la sesión de mostrador, 142 00:08:01,000 --> 00:08:06,000 su llave, tiene un valor asignado nuevo que es su valor actual más 1. 143 00:08:06,000 --> 00:08:09,000 En resumen, este archivo parece estar actualizando 144 00:08:09,000 --> 00:08:13,000 un contador que está almacenado en el interior de la superglobal sesión 145 00:08:13,000 --> 00:08:16,000 en un incremento de 1, pero primero conserva una copia del valor anterior 146 00:08:16,000 --> 00:08:20,000 almacenándolo en una variable local llamada $ mostrador, 147 00:08:20,000 --> 00:08:22,000 y entonces aquí vamos a ver lo que queda. 148 00:08:22,000 --> 00:08:24,000 Resulta que es más o menos sólo HTML. 149 00:08:24,000 --> 00:08:29,000 En la parte inferior de esta página podemos ver en la línea 37 que he visitado este sitio 150 00:08:29,000 --> 00:08:33,000 número del contador de tiempo, así que hay un par de características interesantes. 151 00:08:33,000 --> 00:08:36,000 Uno de ellos, se trata claramente de una variable, pero no es suficiente para poner sólo 152 00:08:36,000 --> 00:08:39,000 $ Contador en el cuerpo del HTML porque claro 153 00:08:39,000 --> 00:08:43,000 si sólo hay entre su PHP HTML se va a suponer que es sólo HTML. 154 00:08:43,000 --> 00:08:48,000 Usted, literalmente, quiere $ contador que se imprimirá en la pantalla. 155 00:08:48,000 --> 00:08:51,000 >> Pero en vez de caer en el modo PHP 156 00:08:51,000 --> 00:08:55,000 con este pedazo de sintaxis que dinámicamente se puede insertar un valor aquí 157 00:08:55,000 --> 00:08:58,000 muy similares en espíritu a lo que hicimos la última vez con 158 00:08:58,000 --> 00:09:00,000 insertar valores en cadenas. 159 00:09:00,000 --> 00:09:04,000 De hecho, esto es sólo una notación abreviada para decir algo como esto en forma literal, 160 00:09:04,000 --> 00:09:12,000 print ($ contador) o incluso algo como printf (% s, contador), 161 00:09:12,000 --> 00:09:14,000 o incluso, como usted pudo haber visto en Internet o en libros de texto, 162 00:09:14,000 --> 00:09:17,000 hay una función en PHP llamada eco 163 00:09:17,000 --> 00:09:20,000 que hace lo mismo, y todos esos son sólo formas más prolijas 164 00:09:20,000 --> 00:09:25,000 de decir: 00:09:28,000 En este caso uno que no es necesario poner 166 00:09:28,000 --> 00:09:30,000 el PHP palabra después del signo de interrogación. 167 00:09:30,000 --> 00:09:34,000 Esta es la notación abreviada para, de nuevo, lo que acabamos de ver hace un momento 168 00:09:34,000 --> 00:09:37,000 que se hace eco de algún valor. 169 00:09:37,000 --> 00:09:39,000 >> Vamos a ver lo que el resultado final de esto es en realidad. 170 00:09:39,000 --> 00:09:43,000 Permítanme repasar en nuestro fichero counter.php, 171 00:09:43,000 --> 00:09:47,000 y vamos a ver que David cometió un error al jugar con el código allí. 172 00:09:47,000 --> 00:09:50,000 Vamos a arreglar lo que sea que la pata, 173 00:09:50,000 --> 00:09:54,000 y el error parece estar allí, ido, en la línea 37. 174 00:09:54,000 --> 00:09:59,000 De acuerdo con la parte superior de esta página que ha visitado este sitio 0 veces. 175 00:09:59,000 --> 00:10:02,000 Bueno, vamos a seguir adelante, ahora y en la parte superior del navegador, haga clic en el 176 00:10:02,000 --> 00:10:05,000 volver a cargar icono, y haga clic en recargar, 177 00:10:05,000 --> 00:10:12,000 y ahora he visitado el lugar 1 vez, 2, 3, 4, 5, 6, 7, 8. 178 00:10:12,000 --> 00:10:16,000 Y de hecho, si nos fijamos en la fuente de esta página el código fuente actual está cambiando, 179 00:10:16,000 --> 00:10:19,000 y notará la ausencia total de PHP, y eso es porque 180 00:10:19,000 --> 00:10:23,000 Código PHP se evalúa o interpretados del lado del servidor, 181 00:10:23,000 --> 00:10:27,000 y por lo que significa que la salida de la secuencia de comandos PHP es lo que en última instancia se envía al navegador, 182 00:10:27,000 --> 00:10:31,000 que en este caso es un HTML cruda y algo de texto en bruto. 183 00:10:31,000 --> 00:10:33,000 ¿Qué está pasando aquí? 184 00:10:33,000 --> 00:10:37,000 >> Bueno, con relativamente pocas líneas de código que soy capaz de almacenar 185 00:10:37,000 --> 00:10:40,000 persistentemente en el transcurso de varios segundos, o si esperar lo suficiente, 186 00:10:40,000 --> 00:10:44,000 minutos, incluso horas, un valor de una manera que hace HTTP 187 00:10:44,000 --> 00:10:47,000 parecer con estado como si ya hubiéramos retenido 188 00:10:47,000 --> 00:10:51,000 esta conexión con el servidor, y es sólo recordar lo que le dije la última vez, 189 00:10:51,000 --> 00:10:55,000 pero en realidad hay un montón de complejidad pasando debajo de la capucha 190 00:10:55,000 --> 00:10:59,000 participación de las cookies que se permitan PHP para darme esta ilusión 191 00:10:59,000 --> 00:11:02,000 de la cesta de la compra-como característica. 192 00:11:02,000 --> 00:11:05,000 Por ahora, un ejemplo trivial, donde sólo estamos almacenando un número entero, 193 00:11:05,000 --> 00:11:08,000 pero esa característica volverá a ser de gran valor 194 00:11:08,000 --> 00:11:10,000 cuando empezamos a hablar acerca de los proyectos más complejos, 195 00:11:10,000 --> 00:11:12,000 entre ellos Problema 7. 196 00:11:12,000 --> 00:11:16,000 Esta es tu problema último puesto en CS50. 197 00:11:16,000 --> 00:11:19,000 Lo sé, es muy triste, pero lo que encontrará es que vamos a concluir 198 00:11:19,000 --> 00:11:22,000 esta parte del semestre por hecho la transición 199 00:11:22,000 --> 00:11:25,000 a partir del contexto de C ciertamente para el contexto de PHP 200 00:11:25,000 --> 00:11:27,000 pero durante el uso de algunos de los fundamentos mismos 201 00:11:27,000 --> 00:11:29,000 hemos hablado hace algún tiempo. 202 00:11:29,000 --> 00:11:33,000 >> El objetivo conjunto de procesadores con 7 es implementar CS50 Finanzas, 203 00:11:33,000 --> 00:11:37,000 que es su propia versión de Yahoo Finance o Google Finance 204 00:11:37,000 --> 00:11:40,000 o incluso Etrade.com por el que usted tiene la capacidad de 205 00:11:40,000 --> 00:11:43,000 consultar precios de las acciones de los símbolos dados, pero aún más que eso 206 00:11:43,000 --> 00:11:48,000 usted tiene la posibilidad de "comprar" y "vender" acciones 207 00:11:48,000 --> 00:11:51,000 que se negocian en las bolsas de valores diferentes, porque como esta tu página de inicio 208 00:11:51,000 --> 00:11:55,000 aquí sugiere, que es realmente la medida en que hemos comenzado 209 00:11:55,000 --> 00:11:59,000 el conjunto de problemas para usted, usted tiene un formulario de acceso que está pidiendo un nombre de usuario y una contraseña. 210 00:11:59,000 --> 00:12:03,000 Dispone de un botón de envío, pero a partir de entonces, a medida que el tiempo lo verás, 211 00:12:03,000 --> 00:12:06,000 no hay nada que realmente está pasando debajo de la capucha todavía, ya que 212 00:12:06,000 --> 00:12:09,000 queda por implementar la posibilidad de registrar nuevos usuarios, 213 00:12:09,000 --> 00:12:12,000 la posibilidad de comprar acciones, la venta de acciones, 214 00:12:12,000 --> 00:12:14,000 mirar realmente los precios actuales de las acciones. 215 00:12:14,000 --> 00:12:17,000 >> Y de hecho, esta será como mundo real como sea posible porque hicimos 216 00:12:17,000 --> 00:12:20,000 incluir un poco de código que le permitirá con una sola función 217 00:12:20,000 --> 00:12:25,000 para consultar Yahoo Finanzas, que maravillosamente pone a disposición de los datos libres 218 00:12:25,000 --> 00:12:31,000 para buscar precios de las acciones basadas en el símbolo de la acción o símbolo ticker, 219 00:12:31,000 --> 00:12:34,000 y obtiene nuevamente el precio actual de las acciones del día. 220 00:12:34,000 --> 00:12:37,000 Los datos que en realidad estás viendo en este conjunto de procesadores en particular será 221 00:12:37,000 --> 00:12:40,000 acerca de como el mundo real, ya que se puede obtener de modo que en realidad estás interfaz 222 00:12:40,000 --> 00:12:43,000 con las acciones del mundo real, los precios del mundo real, 223 00:12:43,000 --> 00:12:47,000 y vamos a ver cuánto dinero usted puede hacer tal vez 224 00:12:47,000 --> 00:12:51,000 lo largo de los siguientes días de jugar con su conjunto propio problema. 225 00:12:51,000 --> 00:12:55,000 >> Pero primero vamos a sentar las bases para la forma de diseñar algo que es ciertamente más complicado 226 00:12:55,000 --> 00:12:59,000 que counter.php, que es más complicado que cualquiera de los ejemplos Frosh IMs hasta ahora, 227 00:12:59,000 --> 00:13:02,000 y vamos a tratar de introducir unos pocos paradigmas aquí que nos permiten 228 00:13:02,000 --> 00:13:06,000 tanto para el conjunto de procesadores 7 y tal vez para su proyecto final, si usted hace algo basado web 229 00:13:06,000 --> 00:13:11,000 para mantener su código bien organizado, para mantenerse sano, 230 00:13:11,000 --> 00:13:15,000 y dar un paso hacia la colaboración, ya sea en el proyecto final CS50 231 00:13:15,000 --> 00:13:18,000 o más allá de si continúa programar algo en el futuro. 232 00:13:18,000 --> 00:13:21,000 Hay un paradigma de diseño en general 233 00:13:21,000 --> 00:13:24,000 en la informática y en el desarrollo de software en general, más 234 00:13:24,000 --> 00:13:27,000 conocido como MVC, modelo vista controlador, 235 00:13:27,000 --> 00:13:30,000 y esto es un acrónimo que describe una tonta idea muy bonita, 236 00:13:30,000 --> 00:13:34,000 que es la separación de los diferentes aspectos de un programa, 237 00:13:34,000 --> 00:13:39,000 específicamente mantener separada la lógica o la lógica empresarial de un sitio web 238 00:13:39,000 --> 00:13:42,000 de modo que todo lo que implica cosas como 239 00:13:42,000 --> 00:13:45,000 llamar a las funciones y consultar bases de datos y similares 240 00:13:45,000 --> 00:13:48,000 no sucede entre tu HTML 241 00:13:48,000 --> 00:13:51,000 sino más bien en archivos separados y, de hecho, hay un archivo de un 242 00:13:51,000 --> 00:13:54,000 típicamente que usted ha llamado el controlador 243 00:13:54,000 --> 00:13:56,000 eso es realmente el cerebro detrás de la operación, y vamos a ver un ejemplo 244 00:13:56,000 --> 00:13:58,000 de esto en un momento. 245 00:13:58,000 --> 00:14:01,000 >> Hay un modelo que está programando código 246 00:14:01,000 --> 00:14:05,000 que hace hablar a sus bases de datos, que se refiere a Yahoo Finance y similares, 247 00:14:05,000 --> 00:14:08,000 y luego está la V en MVC, las vistas, 248 00:14:08,000 --> 00:14:11,000 todas las cosas que está relacionado con la estética, los archivos que en realidad contienen 249 00:14:11,000 --> 00:14:14,000 el código HTML, CSS tal vez tu y similares. 250 00:14:14,000 --> 00:14:17,000 La idea aquí, como sugiere esta imagen, es que el controlador 251 00:14:17,000 --> 00:14:21,000 es el archivo, como pronto veremos y como se verá en particular pset 7, 252 00:14:21,000 --> 00:14:24,000 que el mundo habla a través de sus navegadores web. 253 00:14:24,000 --> 00:14:27,000 Ese es el archivo que se visitaron en el Internet público, 254 00:14:27,000 --> 00:14:30,000 pero el controlador habla potencialmente un modelo, 255 00:14:30,000 --> 00:14:34,000 que es uno o más de otros archivos que contienen código relacionada con datos, 256 00:14:34,000 --> 00:14:37,000 código relacionado con bases de datos y similares, y entonces se habla 257 00:14:37,000 --> 00:14:40,000 el controlador de uno o más archivos de otros conocidos como puntos de vista, 258 00:14:40,000 --> 00:14:43,000 que son la estética de una página web, plantillas de clases, 259 00:14:43,000 --> 00:14:47,000 que podría tomar algunos datos como entrada, pero al final de la día 260 00:14:47,000 --> 00:14:50,000 la única lógica dentro de una vista debe ser la representación de los datos, 261 00:14:50,000 --> 00:14:53,000 iteración en un bucle y realmente escupiendo un poco de 262 00:14:53,000 --> 00:14:56,000 Basado en HTML interpretación del mismo o incluso algo así como un PDF. 263 00:14:56,000 --> 00:14:59,000 >> Lo bueno de MVC es que usted puede tener diferentes puntos de vista 264 00:14:59,000 --> 00:15:02,000 basándose en el tipo de dispositivo, basándose en el tipo de formato de archivo que en realidad 265 00:15:02,000 --> 00:15:04,000 queremos mostrar al usuario. 266 00:15:04,000 --> 00:15:10,000 Echemos un vistazo a algunos ejemplos cada vez más complejos y bien diseñado 267 00:15:10,000 --> 00:15:13,000 comenzando primero con la versión 0 aquí. 268 00:15:13,000 --> 00:15:16,000 Déjenme seguir adelante y abrir en nuestro directorio MVC hoy 269 00:15:16,000 --> 00:15:21,000 un archivo llamado index.php en el directorio de 0. 270 00:15:21,000 --> 00:15:26,000 Tenga en cuenta este es un sitio muy simples y muy decepcionante 271 00:15:26,000 --> 00:15:29,000 que es una especie de versión 0 de una página de inicio para CS50, 272 00:15:29,000 --> 00:15:32,000 y observe cómo tenemos un enlace a conferencias, contamos con un enlace a Syllabus, 273 00:15:32,000 --> 00:15:35,000 y si sigue el enlace al aviso Lectures que la dirección URL 274 00:15:35,000 --> 00:15:39,000 encima de la tapa va a cambiar a lectures.php. 275 00:15:39,000 --> 00:15:44,000 Si a continuación, siga el enlace a la Semana 1 aviso de que los cambios de URL a week1.php. 276 00:15:44,000 --> 00:15:46,000 Parece que hay una estructura jerárquica bastante simple aquí. 277 00:15:46,000 --> 00:15:49,000 >> Vamos a echar un vistazo debajo del capó como esto se presenta, 278 00:15:49,000 --> 00:15:53,000 y de hecho, si miro index.php es bastante simple. 279 00:15:53,000 --> 00:15:57,000 De hecho, a pesar de que se llama a este archivo PHP no hay código de programación real. 280 00:15:57,000 --> 00:16:01,000 Hay un comentario que he escrito en PHP aquí sólo para que el usuario no llega a verlo. 281 00:16:01,000 --> 00:16:05,000 Por supuesto, como antes, todo lo que hay entre las etiquetas PHP 282 00:16:05,000 --> 00:16:08,000 se interpreta, incluso si se trata de un comentario, y para interpretar un comentario 283 00:16:08,000 --> 00:16:11,000 significa simplemente tirarlo a la basura al final del día y en realidad no 284 00:16:11,000 --> 00:16:15,000 enviarlo al navegador, por lo que todo aquí es sólo estética. 285 00:16:15,000 --> 00:16:20,000 Si abro de manera similar lectures.php esto también es sólo un archivo codificado duro. 286 00:16:20,000 --> 00:16:23,000 Le pasa a llamarse algo así. Php, 287 00:16:23,000 --> 00:16:27,000 pero lo que realmente es justo. html, y week1.php, week2.php 288 00:16:27,000 --> 00:16:31,000 igualmente son sólo marcado, así que hay un montón de inconvenientes de este diseño. 289 00:16:31,000 --> 00:16:33,000 Uno, que es una cantidad enorme de copiar / pegar. 290 00:16:33,000 --> 00:16:37,000 A pesar de que lo único que cambia entre estos archivos es la lista desordenada, 291 00:16:37,000 --> 00:16:41,000 las etiquetas li, que sin embargo tienen el tipo doc, html, head, 292 00:16:41,000 --> 00:16:44,000 título, el cuerpo de cierre, HTML y más 293 00:16:44,000 --> 00:16:47,000 en cada archivo, lo que significa que si alguna vez quiere reestructurar 294 00:16:47,000 --> 00:16:50,000 esta página web o restylize lo que tengo que entrar y cambiar 295 00:16:50,000 --> 00:16:54,000 todos estos archivos manualmente o con un poco de búsqueda y reemplazo masivo. 296 00:16:54,000 --> 00:17:01,000 >> Vamos a dar un paso hacia un diseño más elegante, más tiempo pensando en la versión 1 aquí 297 00:17:01,000 --> 00:17:04,000 por lo que según la lectura que me lo he incluido para que pueda jugar junto con 298 00:17:04,000 --> 00:17:07,000 estos más tranquilamente en casa aviso que tenemos aquí 299 00:17:07,000 --> 00:17:10,000 un resumen de los archivos en la versión 1 de este sitio, 300 00:17:10,000 --> 00:17:13,000 y parece que he tomado sobre mí mismo para excluir 301 00:17:13,000 --> 00:17:17,000 un código común, header.php y footer.php. 302 00:17:17,000 --> 00:17:20,000 Bueno, echemos un vistazo a lo que hay dentro de la primera de ellas. 303 00:17:20,000 --> 00:17:23,000 Header.php parece familiar, 304 00:17:23,000 --> 00:17:26,000 notar, ¿de dónde se corte? 305 00:17:26,000 --> 00:17:30,000 Justo después de la línea 19, así que eso es todo lo que era común 306 00:17:30,000 --> 00:17:33,000 desde el index.php archivos, lectures.php, 307 00:17:33,000 --> 00:17:36,000 semana1 y week2.php del ejemplo anterior. 308 00:17:36,000 --> 00:17:40,000 Lo que hice fue copiar y cortar todo lo que era común a todos los archivos, 309 00:17:40,000 --> 00:17:44,000 ponerlo en un archivo de cabecera por separado y de manera similar en footer.php 310 00:17:44,000 --> 00:17:48,000 se aplico el mismo principio por el que las únicas líneas interesantes 311 00:17:48,000 --> 00:17:52,000 en footer.php son estos dos cuerpos, cercana y estrecha HTML. 312 00:17:52,000 --> 00:17:55,000 >> Pero lo que esto significa es que en la nueva versión 313 00:17:55,000 --> 00:17:59,000 de notificación index.php cuánto más simple que pueda conseguir. 314 00:17:59,000 --> 00:18:02,000 Por supuesto, un poco más críptico buscando, un poco menos intuitivo 315 00:18:02,000 --> 00:18:06,000 para seguir arriba a abajo, pero mi Dios, todo eso ha desaparecido ahora redundancia. 316 00:18:06,000 --> 00:18:10,000 Se requiere el uso de una función de PHP llamada literalmente requerir hasta arriba, 317 00:18:10,000 --> 00:18:15,000 que recuerda mucho, recuerdo, de C # include mecanismo. 318 00:18:15,000 --> 00:18:17,000 Requerimos header.php en la parte superior. 319 00:18:17,000 --> 00:18:20,000 Se requiere footer.php en la parte inferior, y la única cosa que es diferente 320 00:18:20,000 --> 00:18:25,000 o especial acerca de este archivo es el contenido que está destinado a ser único para ella. 321 00:18:25,000 --> 00:18:29,000 Pues si yo entrar en, digamos, lectures.php, el mismo principio se aplica. 322 00:18:29,000 --> 00:18:32,000 Una vez más, algunos comentarios en lo alto, pero luego me exigen, requieren encabezado pie de página, 323 00:18:32,000 --> 00:18:35,000 y en el medio es sólo el contenido que ha cambiado realmente. 324 00:18:35,000 --> 00:18:38,000 Y si nos fijamos en la Semana 1 y Semana 2 veríamos 325 00:18:38,000 --> 00:18:42,000 que el mismo principio se había aplicado allí. 326 00:18:42,000 --> 00:18:44,000 Bueno, no estamos muy hecho allí. 327 00:18:44,000 --> 00:18:48,000 >> Vamos a echar un vistazo a la versión 2, que tiene una estructura similar, 328 00:18:48,000 --> 00:18:50,000 pero noto ahora que he introducido algo más. 329 00:18:50,000 --> 00:18:53,000 En la línea 10 que he introducido helpers.php, 330 00:18:53,000 --> 00:18:55,000 que aparentemente contiene funciones auxiliares. 331 00:18:55,000 --> 00:18:58,000 Una función auxiliar es generalmente una función relativamente corto 332 00:18:58,000 --> 00:19:01,000 que se escribe para ayudarle en varios lugares, 333 00:19:01,000 --> 00:19:04,000 y vamos a ver lo que hay dentro de helpers.php. 334 00:19:04,000 --> 00:19:07,000 En este caso, parece que tiene 2 funciones. 335 00:19:07,000 --> 00:19:10,000 Recuerde que en el otro día con nuestro ejemplo del cubo 336 00:19:10,000 --> 00:19:13,000 puede definir sus propias funciones en PHP, y lo que he hecho ahora es que he 337 00:19:13,000 --> 00:19:17,000 funciones definidas por el llamado pie de página y hacer rendir cabecera, 338 00:19:17,000 --> 00:19:21,000 la primera de las cuales tiene un parámetro llamado datos, 339 00:19:21,000 --> 00:19:25,000 cuyo valor predeterminado es una matriz vacía, como se sugiere allí, 340 00:19:25,000 --> 00:19:29,000 y que en realidad puede escribir esto aún más sucinta en la última versión de PHP 341 00:19:29,000 --> 00:19:32,000 diciendo corchete abierto, cerrado corchete. 342 00:19:32,000 --> 00:19:35,000 Eso significa que una matriz vacía de tamaño 0, pero sin embargo una matriz. 343 00:19:35,000 --> 00:19:38,000 >> Esta función extracto es un poco especial en que 344 00:19:38,000 --> 00:19:41,000 lo que hace es que toma como argumento una matriz asociativa 345 00:19:41,000 --> 00:19:45,000 que tiene 0 o más pares de valores clave, y si tiene una clave de foo 346 00:19:45,000 --> 00:19:48,000 y un valor de la barra de la función de extracción 347 00:19:48,000 --> 00:19:51,000 crea una situación en la que ahora, a partir de la línea 11, 348 00:19:51,000 --> 00:19:57,000 tiene una variable local llamada $ foo cuyo valor es bar. 349 00:19:57,000 --> 00:19:59,000 Y si tuvieras más claves y valores en la matriz de datos, 350 00:19:59,000 --> 00:20:03,000 Del mismo modo que se puede extraer en el ámbito local 351 00:20:03,000 --> 00:20:06,000 o el nombre de espacio de modo que footer.php y 352 00:20:06,000 --> 00:20:09,000 la misma idea aquí abajo para que header.php 353 00:20:09,000 --> 00:20:12,000 tienen acceso a esas variables. 354 00:20:12,000 --> 00:20:15,000 De hecho, vamos a abrir de nuevo header.php 355 00:20:15,000 --> 00:20:18,000 y llamar la atención ahora lo que parece en esta versión. 356 00:20:18,000 --> 00:20:22,000 >> En lugar de codificar duro CS50 como título para cada página 357 00:20:22,000 --> 00:20:24,000 observar el dinamismo que es posible ahora. 358 00:20:24,000 --> 00:20:29,000 En la línea 5 que estoy repitiendo una variable title, 359 00:20:29,000 --> 00:20:34,000 pero primero me voy a pasar esa variable titulo a una función llamada htmlspecialchars. 360 00:20:34,000 --> 00:20:38,000 Un nombre estúpido para una función, siempre y cuando lo es, pero lo que realmente hace lo que dice. 361 00:20:38,000 --> 00:20:41,000 Se asegura de que todos los caracteres especiales 362 00:20:41,000 --> 00:20:46,000 en la cadena que se pasa en los caracteres de escape HTML. 363 00:20:46,000 --> 00:20:49,000 Esto es en realidad una forma de evitar algo que se llama un cross site scripting ataque 364 00:20:49,000 --> 00:20:52,000 por el cual alguien puede maliciosa o accidentalmente 365 00:20:52,000 --> 00:20:55,000 inyectar su propio código HTML en su sitio web 366 00:20:55,000 --> 00:20:59,000 por pegar en alguna forma, por ejemplo, 367 00:20:59,000 --> 00:21:02,000 algo que no se esperaba bastante, sobre todo el código JavaScript, 368 00:21:02,000 --> 00:21:05,000 como vamos a hablar en una semana o dos de tiempo. 369 00:21:05,000 --> 00:21:08,000 >> Esto header.php ahora, es una visión 370 00:21:08,000 --> 00:21:12,000 en el sentido de que permite ver estéticamente el contenido de un conjunto de datos. 371 00:21:12,000 --> 00:21:14,000 Pero más específicamente, es una plantilla. 372 00:21:14,000 --> 00:21:19,000 Esta es una especie de modelo de lo que ahora queremos que el encabezamiento de cada página para que parezca, 373 00:21:19,000 --> 00:21:23,000 pero hay un poco de dinamismo en la que queremos que el título que se insertan dinámicamente 374 00:21:23,000 --> 00:21:26,000 sobre la base de la variable de título 375 00:21:26,000 --> 00:21:30,000 que se extrae cuando llamamos, de nuevo, 376 00:21:30,000 --> 00:21:33,000 la función del jefe de render. 377 00:21:33,000 --> 00:21:36,000 Ahora bien, si nos fijamos en pie de render, hay realmente no sirve de mucho de eso en este momento 378 00:21:36,000 --> 00:21:40,000 porque en footer.php no hay dinamismo en absoluto. 379 00:21:40,000 --> 00:21:43,000 No puede ser, pero por el momento se trata de una lista codificada duro de 2 etiquetas, 380 00:21:43,000 --> 00:21:46,000 pero la misma idea se aplica, de modo que en realidad sugiere por qué 381 00:21:46,000 --> 00:21:49,000 hicimos perder el tiempo con una cabecera y una función render render pie de página? 382 00:21:49,000 --> 00:21:52,000 Déjame ir a su lugar, ahora en la versión 3, 383 00:21:52,000 --> 00:21:56,000 y en la versión 3 de ayudantes que me decidí a simplificar aún más. 384 00:21:56,000 --> 00:21:58,000 >> Déjame tener una función de representación. 385 00:21:58,000 --> 00:22:02,000 Déjame tener que tomar otro argumento, esta vez llamado plantilla, 386 00:22:02,000 --> 00:22:05,000 que está destinado a ser el nombre de una plantilla, 387 00:22:05,000 --> 00:22:11,000 y luego voy a concatenar con presunción. php al valor de esa variable, 388 00:22:11,000 --> 00:22:17,000 y luego, si es que existe, o Bar.php foo.php header.php y footer.php, 389 00:22:17,000 --> 00:22:20,000 entonces yo voy a seguir adelante y extraer los datos variables 390 00:22:20,000 --> 00:22:23,000 y después requerir ese camino. 391 00:22:23,000 --> 00:22:29,000 En otras palabras, para usar esto ahora, si abro index.php 392 00:22:29,000 --> 00:22:32,000 cuenta de que yo no lo llamo encabezado rinden más. 393 00:22:32,000 --> 00:22:36,000 Acabo de llamar a rendir, pero me pasa un valor de cotización de la cabecera 394 00:22:36,000 --> 00:22:39,000 para dejar en claro que la plantilla que en realidad desea cargar. 395 00:22:39,000 --> 00:22:41,000 >> Entonces acá cuenta de lo que estoy haciendo. 396 00:22:41,000 --> 00:22:44,000 Estoy de paso en una dinámica clave del título, 397 00:22:44,000 --> 00:22:47,000 un valor de CS50, y esto también, como vimos antes, 398 00:22:47,000 --> 00:22:51,000 podría ser más breve en la última versión de PHP 399 00:22:51,000 --> 00:22:54,000 donde puedo reemplazar la función de matriz con corchetes, 400 00:22:54,000 --> 00:22:57,000 que propongo es aún más fácil de leer y, ciertamente, 401 00:22:57,000 --> 00:22:59,000 un poco más fácil de escribir. 402 00:22:59,000 --> 00:23:02,000 Y, por supuesto, con la llamada render pie de página en la parte inferior, 403 00:23:02,000 --> 00:23:05,000 no nos preocupamos pasando un segundo argumento en absoluto, ningún conjunto asociativo, 404 00:23:05,000 --> 00:23:07,000 porque no hay nada dentro de esa dinámica pie de página. 405 00:23:07,000 --> 00:23:10,000 Son sólo algunas etiquetas de cierre para HTML. 406 00:23:10,000 --> 00:23:14,000 Bueno, estamos dando pasos hacia realmente limpiando las cosas aquí, 407 00:23:14,000 --> 00:23:17,000 pero déjame abrir dos últimos ejemplos. 408 00:23:17,000 --> 00:23:21,000 Éste, número 4, observe que he tomado una decisión consciente ahora 409 00:23:21,000 --> 00:23:26,000 para mejorar el ejemplo anterior finalmente utilizando alguna jerarquía para mis archivos. 410 00:23:26,000 --> 00:23:29,000 >> Nótese que en este resumen, en este leerme, me he introducido 411 00:23:29,000 --> 00:23:32,000 incluye un directorio y un directorio de plantillas 412 00:23:32,000 --> 00:23:35,000 cuyos contenidos van a ser las cosas que desea incluir 413 00:23:35,000 --> 00:23:38,000 y las plantillas que quiero hacer, respectivamente. 414 00:23:38,000 --> 00:23:42,000 Esto es realmente ser yo anal y tratando de mantener las cosas ordenadas, 415 00:23:42,000 --> 00:23:45,000 mantener los archivos relacionados entre sí, pero el resultado final 416 00:23:45,000 --> 00:23:48,000 es que ahora tiene una configuración un poco más ordenado, pero tenemos que recordar ahora 417 00:23:48,000 --> 00:23:51,000 en, por ejemplo, index.php 418 00:23:51,000 --> 00:23:55,000 cuando se requiere el archivo helpers.php 419 00:23:55,000 --> 00:24:01,000 tenemos que ahora lo requieran a través includes / helpers.php 420 00:24:01,000 --> 00:24:06,000 en lugar de simplemente decir helpers.php porque ahora es realidad en un subdirectorio. 421 00:24:06,000 --> 00:24:09,000 Ahora, en un aparte, podrás ver en estos ejemplos y algunos otros 422 00:24:09,000 --> 00:24:11,000 funciones como requieren, requieren una vez. 423 00:24:11,000 --> 00:24:15,000 De hecho, hay una función se llamó incluyen, y todos ellos tienen un comportamiento ligeramente diferente. 424 00:24:15,000 --> 00:24:18,000 Aquí me dicen necesitar una vez para hacer súper claro que yo sólo quiero que aquellos 425 00:24:18,000 --> 00:24:20,000 ayudantes incluido en mi proyecto una vez. 426 00:24:20,000 --> 00:24:24,000 Pero si soy cuidadoso y si realmente estoy pensando en mi lógica correctamente 427 00:24:24,000 --> 00:24:27,000 debería ser suficiente también para decir requerir hasta arriba 428 00:24:27,000 --> 00:24:31,000 siempre y cuando yo mismo no querer exigir ese mismo archivo en otro lugar. 429 00:24:31,000 --> 00:24:34,000 De hecho, esta es una forma ligeramente más eficiente de hacer las cosas a continuación, utilizando 430 00:24:34,000 --> 00:24:38,000 exigir una vez, así que voy a recortar a sólo requieren. 431 00:24:38,000 --> 00:24:40,000 >> Vamos a dar un paso más. 432 00:24:40,000 --> 00:24:46,000 Este último ejemplo ahora, la versión 5, tiene una jerarquía de carpetas aún más limpio. 433 00:24:46,000 --> 00:24:50,000 Note lo que he hecho aquí por la leerme en esta versión final 434 00:24:50,000 --> 00:24:54,000 Ahora tengo mi directorio HTML, que he tenido todo este tiempo, 435 00:24:54,000 --> 00:24:58,000 pero dentro de allí ahora es sólo lectures.php index.php, 436 00:24:58,000 --> 00:25:01,000 week1.php y week2.php. 437 00:25:01,000 --> 00:25:05,000 El directorio incluye ahora convive con el directorio de HTML, 438 00:25:05,000 --> 00:25:08,000 por lo menos el mismo nivel como un hermano, por así decirlo. 439 00:25:08,000 --> 00:25:10,000 Lo mismo sucede con la carpeta de plantillas. 440 00:25:10,000 --> 00:25:14,000 El punto clave aquí es que he introducido estructura un poco más, 441 00:25:14,000 --> 00:25:17,000 pero la característica principal ahora es que sólo los archivos 442 00:25:17,000 --> 00:25:21,000 que necesitan estar web accesible públicamente direccionable 443 00:25:21,000 --> 00:25:25,000 por una dirección URL en el Internet público están en mi directorio HTML. 444 00:25:25,000 --> 00:25:28,000 >> Archivos Mientras tanto, otros, helpers.php, footer.php, 445 00:25:28,000 --> 00:25:32,000 header.php, que son sin duda tal vez más sensibles, 446 00:25:32,000 --> 00:25:35,000 quizás ayudantes en realidad tiene algunos nombres de usuario y contraseñas o algún intelectual 447 00:25:35,000 --> 00:25:39,000 propiedad de la mina, funciona de verdad no quieren que el mundo vea, aunque accidentalmente. 448 00:25:39,000 --> 00:25:45,000 Es una buena práctica para mantener fuera del directorio público de HTML 449 00:25:45,000 --> 00:25:48,000 todos los archivos que no se necesitan para ser público. 450 00:25:48,000 --> 00:25:51,000 Todo lo que tienes que hacer en este caso, al mirar, por ejemplo, 451 00:25:51,000 --> 00:25:55,000 archivo index.php del directorio en HTML, 452 00:25:55,000 --> 00:25:58,000 cuenta de que sólo tenemos que ser un poco más cuidadosos cuando se requiere 453 00:25:58,000 --> 00:26:00,000 o requieren una vez este archivo. 454 00:26:00,000 --> 00:26:03,000 Que tengo que hacer primero .. ir al directorio padre, 455 00:26:03,000 --> 00:26:06,000 Entonces, ¿/ includes / helpers.php 456 00:26:06,000 --> 00:26:12,000 para sumergirse de nuevo en obtener el archivo que me importa. 457 00:26:12,000 --> 00:26:16,000 >> Cualquier pregunta entonces sobre MVC 458 00:26:16,000 --> 00:26:20,000 o esta encarnación relativamente sencilla de los mismos? 459 00:26:20,000 --> 00:26:23,000 Y quiero dejar claro que nos centramos un poco en el 460 00:26:23,000 --> 00:26:27,000 V aquí, las vistas y el factoring fuera de estas plantillas. 461 00:26:27,000 --> 00:26:30,000 No hemos realmente distingue M de C todavía. 462 00:26:30,000 --> 00:26:33,000 De hecho, realmente no hay M aquí, e incluso nuestro C, 463 00:26:33,000 --> 00:26:36,000 controlador, no está realmente haciendo casi nada, pero usted conseguirá mucho más 464 00:26:36,000 --> 00:26:39,000 familiarizados con esos dos 2 cartas de MVC, 465 00:26:39,000 --> 00:26:43,000 o mejor dicho, usted obtendrá mucho más familiarizados con la C 466 00:26:43,000 --> 00:26:49,000 MVC en conjunto para el problema 7, así que hay más de eso en el horizonte. 467 00:26:49,000 --> 00:26:51,000 ¿Preguntas? 468 00:26:51,000 --> 00:26:53,000 En realidad hay nadie aquí. 469 00:26:53,000 --> 00:26:57,000 >> Bueno, vamos a pasar ahora al segundo tema y última por hoy. 470 00:26:57,000 --> 00:27:00,000 Que es la introducción de una base de datos. 471 00:27:00,000 --> 00:27:03,000 Hasta este punto hemos tenido algunas maneras de almacenar datos. 472 00:27:03,000 --> 00:27:05,000 Hemos utilizado variables. 473 00:27:05,000 --> 00:27:08,000 De vuelta en nuestro archivo de C, I / O discusión que empezamos a utilizar archivos de texto 474 00:27:08,000 --> 00:27:11,000 y el uso de archivos como fprintf, y luego comenzó incluso 475 00:27:11,000 --> 00:27:14,000 hablando csv un poco, valores separados por comas, 476 00:27:14,000 --> 00:27:17,000 por lo que todos ellos nos ha permitido disponer de datos almacenados 477 00:27:17,000 --> 00:27:19,000 o bien no persistente o persistente. 478 00:27:19,000 --> 00:27:23,000 Pero incluso CSV en realidad no son propicias para la búsqueda 479 00:27:23,000 --> 00:27:25,000 y la inserción y eliminación. 480 00:27:25,000 --> 00:27:28,000 En realidad es un archivo de texto separado por comas estúpido 481 00:27:28,000 --> 00:27:30,000 fila por fila a fila por fila, por lo que si desea 482 00:27:30,000 --> 00:27:32,000 buscar ese archivo lo mejor que puedes hacer realmente es la búsqueda lineal. 483 00:27:32,000 --> 00:27:34,000 Usted tiene que comenzar en la parte superior del archivo, leerlo todo en, 484 00:27:34,000 --> 00:27:36,000 y buscar algún valor de interés. 485 00:27:36,000 --> 00:27:39,000 Si desea insertar en ella que tiene que hacer la misma cosa, 486 00:27:39,000 --> 00:27:41,000 iterar sobre ella y la inserción en un determinado lugar, 487 00:27:41,000 --> 00:27:45,000 y de hecho, usted tiene que hacer toda la lógica de la búsqueda usted mismo. 488 00:27:45,000 --> 00:27:49,000 >> No se puede hacer diseño inteligente correspondiente en un archivo CSV a menos que se escribe el código. 489 00:27:49,000 --> 00:27:51,000 No se puede hacer la filtración de un archivo CSV 490 00:27:51,000 --> 00:27:53,000 a menos que se escribe el código. 491 00:27:53,000 --> 00:27:56,000 ¿No sería bueno si alguien puso todo el esfuerzo 492 00:27:56,000 --> 00:27:59,000 para hacer realidad la búsqueda sencilla y una fácil inserción 493 00:27:59,000 --> 00:28:01,000 y eliminación y actualización y así sucesivamente? 494 00:28:01,000 --> 00:28:04,000 Eso es exactamente lo que es una base de datos. 495 00:28:04,000 --> 00:28:07,000 SQL, lenguaje de consulta estructurado, es otro idioma 496 00:28:07,000 --> 00:28:10,000 que estamos presentando aquí hoy, pero esto también es bastante accesible, 497 00:28:10,000 --> 00:28:13,000 y lo que realmente vamos a hacer es simplemente arrancar de ella algunos de los más destacados 498 00:28:13,000 --> 00:28:16,000 características de manera que para pset 7, y si lo hace algo basado web, 499 00:28:16,000 --> 00:28:19,000 su proyecto final, usted tiene la capacidad de expresarse 500 00:28:19,000 --> 00:28:22,000 en términos de consultas de datos. 501 00:28:22,000 --> 00:28:25,000 Usted tiene la capacidad de almacenar una pequeña o una gran cantidad de datos 502 00:28:25,000 --> 00:28:28,000 de una manera mucho más estructurado que al final de la día 503 00:28:28,000 --> 00:28:32,000 hacer su vida más fácil, porque con SQL puede expresarse 504 00:28:32,000 --> 00:28:35,000 con mucha mayor precisión, mucho más metódica con el fin de 505 00:28:35,000 --> 00:28:40,000 volver algún subconjunto de datos de un corpus mayor de datos. 506 00:28:40,000 --> 00:28:45,000 >> Usted puede pensar en una base de datos, en este caso, una base de datos SQL, realmente como Excel 507 00:28:45,000 --> 00:28:48,000 o Los números en los que es una hoja de cálculo, 508 00:28:48,000 --> 00:28:50,000 o tal vez múltiples hojas de cálculo, y una hoja de cálculo, por supuesto, 509 00:28:50,000 --> 00:28:53,000 tiene filas y columnas, y eso es porque 510 00:28:53,000 --> 00:28:56,000 Bases de datos SQL son relacionales, relacionales, en el sentido 511 00:28:56,000 --> 00:28:59,000 que almacenan los datos en términos de estas tablas, 512 00:28:59,000 --> 00:29:01,000 filas y columnas. 513 00:29:01,000 --> 00:29:03,000 Son de mayor rendimiento que algo así como una hoja de cálculo, 514 00:29:03,000 --> 00:29:05,000 y una hoja de cálculo está destinado a ser usado por un humano. 515 00:29:05,000 --> 00:29:08,000 Una base de datos está destinada a ser utilizada por el programador 516 00:29:08,000 --> 00:29:12,000 escribir código en su contra, por lo que la encarnación de una base de datos 517 00:29:12,000 --> 00:29:14,000 va a ser la línea de comandos. 518 00:29:14,000 --> 00:29:18,000 >> Una de las bases de datos relacionales más populares que hay es, de nuevo, MySQL, 519 00:29:18,000 --> 00:29:22,000 que es maravillosamente libre, rendimiento muy alto, y esto es lo 520 00:29:22,000 --> 00:29:24,000 Facebook utiliza muy temprano y hasta cierto punto aún hoy 521 00:29:24,000 --> 00:29:27,000 para almacenar una gran cantidad de sus datos, y nos veremos en un momento 522 00:29:27,000 --> 00:29:30,000 que el uso de comandos relativamente simples 523 00:29:30,000 --> 00:29:33,000 podemos seleccionar los datos, los datos de inserción, actualización de datos, 524 00:29:33,000 --> 00:29:37,000 supresión de los datos y similares, pero por suerte, hay una más fácil de usar interfaz 525 00:29:37,000 --> 00:29:39,000 que simplemente escribiendo en el intérprete de negro y blanco. 526 00:29:39,000 --> 00:29:43,000 Usaremos para pset 7 y más allá de una herramienta gratuita llamada phpMyAdmin. 527 00:29:43,000 --> 00:29:45,000 El nombre es una coincidencia. 528 00:29:45,000 --> 00:29:47,000 La herramienta pasa a ser implementado en PHP, 529 00:29:47,000 --> 00:29:49,000 pero eso es básicamente irrelevante. 530 00:29:49,000 --> 00:29:53,000 ¿Cuál es importante sobre phpMyAdmin es que es una utilidad basada en web. 531 00:29:53,000 --> 00:29:55,000 Lo hemos pre-instalado en el dispositivo para usted, 532 00:29:55,000 --> 00:29:58,000 y con él se pueden crear tablas en una base de datos, 533 00:29:58,000 --> 00:30:01,000 puede insertar datos, eliminar datos, y véase en general 534 00:30:01,000 --> 00:30:04,000 sus datos de una manera bastante fácil de usar entorno. 535 00:30:04,000 --> 00:30:07,000 Los usuarios no van a utilizar phpMyAdmin. 536 00:30:07,000 --> 00:30:09,000 >> Esto es realmente sólo una herramienta administrativa o desarrollador 537 00:30:09,000 --> 00:30:12,000 con la que ver y hurgar sus datos y encontrar la manera de estructurarlo, 538 00:30:12,000 --> 00:30:15,000 al igual que usted podría usar Excel o Numbers, 539 00:30:15,000 --> 00:30:19,000 pero va a ser una gran manera de visualizar lo que está pasando debajo de la capucha 540 00:30:19,000 --> 00:30:22,000 de modo que usted pueda centrarse en resolver el problema interesante y no tanto 541 00:30:22,000 --> 00:30:25,000 sobre los comandos arcanos. 542 00:30:25,000 --> 00:30:28,000 Echemos un vistazo a un ejemplo de los datos que puedan ser almacenados tabularly 543 00:30:28,000 --> 00:30:30,000 en una base de datos relacional. 544 00:30:30,000 --> 00:30:32,000 He aquí un ejemplo de ello. 545 00:30:32,000 --> 00:30:35,000 Ahora, por desgracia, phpMyAdmin cometió un error en el lado de manera que lanza demasiado muchas palabras 546 00:30:35,000 --> 00:30:38,000 y gráficos en usted, pero si usted acaba de afinar en la 547 00:30:38,000 --> 00:30:42,000 Columna ID, la columna de nombre de usuario y la columna de hash, 548 00:30:42,000 --> 00:30:45,000 esto es en realidad una hoja de cálculo, sino que pasa a ser un fragmento 549 00:30:45,000 --> 00:30:49,000 de una mesa dentro del aparato 550 00:30:49,000 --> 00:30:53,000 utilizando un archivo que ponemos a su disposición en conjunto de problemas 7. 551 00:30:53,000 --> 00:30:57,000 >> En particular, le damos un archivo que representa 552 00:30:57,000 --> 00:31:01,000 mesa de un usuario, por lo que una hoja de cálculo que contiene los usuarios con 3 columnas, 553 00:31:01,000 --> 00:31:05,000 uno de los cuales es un identificador único a partir de 1 y se incrementa a partir de entonces. 554 00:31:05,000 --> 00:31:08,000 La segunda columna es un nombre de usuario y aquellos de ustedes que hicieron Hacker, 555 00:31:08,000 --> 00:31:12,000 la edición de Hacker para pset 2, podría reconocer algunos de estos nombres de usuario por lo menos. 556 00:31:12,000 --> 00:31:16,000 Por el lado de la derecha son las contraseñas, pero no son contraseñas literales. 557 00:31:16,000 --> 00:31:19,000 Son los hashes de los mismos, por lo que resulta 558 00:31:19,000 --> 00:31:22,000 que el almacenamiento de contraseñas en una base de datos es una idea realmente mala. 559 00:31:22,000 --> 00:31:25,000 Todos ustedes han leído probablemente en algún momento de un sitio web 560 00:31:25,000 --> 00:31:28,000 base de datos o alguna empresa se vea comprometida, y entonces usted tiene que 561 00:31:28,000 --> 00:31:31,000 cambiar su contraseña, usted necesita para obtener reembolsos en las cosas 562 00:31:31,000 --> 00:31:34,000 porque un tipo malo en realidad se rompió en su cuenta como resultado. 563 00:31:34,000 --> 00:31:38,000 >> Almacenar las contraseñas en texto claro, sin cifrar en una base de datos 564 00:31:38,000 --> 00:31:41,000 es completamente estúpido, y sin embargo es muy divertido 565 00:31:41,000 --> 00:31:44,000 después de leer acerca de algunas compañías muy conocidas 566 00:31:44,000 --> 00:31:47,000 a veces en la prensa cuyas bases de datos están en peligro, 567 00:31:47,000 --> 00:31:50,000 y esa parte no es gracioso, pero sin encriptar el hecho de que las bases de datos contienen 568 00:31:50,000 --> 00:31:53,000 contraseñas es ridículo, porque, literalmente, con una línea de código 569 00:31:53,000 --> 00:31:57,000 usted puede proteger contra esta amenaza en particular, y eso es lo que hemos hecho aquí. 570 00:31:57,000 --> 00:32:00,000 Incluso para nuestra pequeña versión falsa Finanzas CS50 571 00:32:00,000 --> 00:32:03,000 estamos encriptar contraseñas sólo por si acaso, y que el hecho de 572 00:32:03,000 --> 00:32:07,000 todas estas contraseñas comenzar con $ 1 $ es sólo una convención. 573 00:32:07,000 --> 00:32:10,000 Eso sólo significa que están encriptados o hash en realidad, 574 00:32:10,000 --> 00:32:13,000 que es como una función de encriptación de un solo sentido 575 00:32:13,000 --> 00:32:17,000 por lo cual no se puede revertir sus efectos con algo llamado MD5. 576 00:32:17,000 --> 00:32:21,000 >> El hecho de que es 50 después de que significa que un valor de la sal 577 00:32:21,000 --> 00:32:24,000 de 50 se utilizó para hash todas estas contraseñas a excepción de una. 578 00:32:24,000 --> 00:32:27,000 Minas, por supuesto, como usted puede ver que hay, HA, 579 00:32:27,000 --> 00:32:30,000 estaba usando una sal diferente, por lo que aquellos de ustedes que he disparado ligeramente hacia arriba 580 00:32:30,000 --> 00:32:33,000 tal vez en Hacker 2, que podría haber sido el resultado de haber utilizado 581 00:32:33,000 --> 00:32:36,000 un hash diferente a los demás, porque mi contraseña es en realidad la misma 582 00:32:36,000 --> 00:32:38,000 como algún otro usuario hasta allí. 583 00:32:38,000 --> 00:32:41,000 De hecho, si usted ha estado esperando todas estas semanas para averiguar 584 00:32:41,000 --> 00:32:44,000 lo que las contraseñas estaban aquí eran las contraseñas que fueron impugnados 585 00:32:44,000 --> 00:32:48,000 para acabar en la edición del boletín de problemas Hacker 2, así que no es demasiado difícil. 586 00:32:48,000 --> 00:32:50,000 De hecho, de Malan era el mismo que jharvard, 587 00:32:50,000 --> 00:32:54,000 pero si nos remontamos se veía diferente. 588 00:32:54,000 --> 00:32:58,000 >> Centrarse en jharvard en carmesí, ya que fueron saladas diferente. 589 00:32:58,000 --> 00:33:01,000 El algoritmo fue perturbado de manera que la 590 00:33:01,000 --> 00:33:05,000 hash de valor, el valor cifrado se ve un poco diferente 591 00:33:05,000 --> 00:33:08,000 porque las entradas eran ligeramente diferentes, pero la contraseña debajo del capó 592 00:33:08,000 --> 00:33:10,000 seguía siendo en última instancia carmesí. 593 00:33:10,000 --> 00:33:12,000 Ahora, ¿quién se preocupa por esto? 594 00:33:12,000 --> 00:33:15,000 Bueno, nosotros estamos proporcionando a los usuarios de la muestra, los nombres de usuario de muestra 595 00:33:15,000 --> 00:33:18,000 y los hashes de las contraseñas para que usted realmente tiene algo de 596 00:33:18,000 --> 00:33:23,000 clientes para CS50 Finanzas cuando usted llega fuera de la tierra con su código. 597 00:33:23,000 --> 00:33:27,000 Vas a tener que implementar más mesas en el interior de MySQL, en el interior de la base de datos. 598 00:33:27,000 --> 00:33:30,000 Vas a tener que crear más hojas de cálculo, de manera efectiva, pero decidimos que dar a este un 599 00:33:30,000 --> 00:33:33,000 para empezar, y verás que la especificación conjunto de problemas 600 00:33:33,000 --> 00:33:37,000 le guía a través del proceso de importación de esta tabla 601 00:33:37,000 --> 00:33:39,000 y también explicar cuáles son algunas de las características son, 602 00:33:39,000 --> 00:33:41,000 y usted también verá que ponemos a su disposición el código 603 00:33:41,000 --> 00:33:44,000 para manejar el hashing o el cifrado de estas contraseñas, 604 00:33:44,000 --> 00:33:49,000 por lo que no hay que preocuparse demasiado acerca de lo MD5 o similares es realmente todo. 605 00:33:49,000 --> 00:33:53,000 >> Por lo tanto, SQL, lenguaje de consulta estructurado. 606 00:33:53,000 --> 00:33:56,000 Esto es, simplemente, el lenguaje que está a punto de empezar a utilizar en pset 7 607 00:33:56,000 --> 00:34:01,000 y quizás más allá para solicitar datos de alguna base de datos. 608 00:34:01,000 --> 00:34:06,000 Los datos son, de nuevo, almacenada tabularly en estas tablas relacionales, columnas y filas, 609 00:34:06,000 --> 00:34:09,000 pero utilizando una sintaxis relativamente simple como borrar, 610 00:34:09,000 --> 00:34:12,000 insertar, actualizar y seleccione podemos hacer exactamente eso. 611 00:34:12,000 --> 00:34:15,000 Podemos eliminar de la base de datos, insertar, 612 00:34:15,000 --> 00:34:19,000 actualizar los datos, así como seleccionar, es decir, recuperar datos de la base de datos. 613 00:34:19,000 --> 00:34:21,000 ¿Cómo podemos hacer esto? 614 00:34:21,000 --> 00:34:23,000 Déjame ir por delante en el aparato. 615 00:34:23,000 --> 00:34:28,000 Déjame levantar http://localhost, 616 00:34:28,000 --> 00:34:30,000 que, de nuevo, es el aparato local en sí. 617 00:34:30,000 --> 00:34:32,000 Esa es su apodo por defecto. 618 00:34:32,000 --> 00:34:35,000 Y déjame ir a / phpmyadmin. 619 00:34:35,000 --> 00:34:39,000 Esto pasa a ser una URL especial que el dispositivo está preconfigurado para entender 620 00:34:39,000 --> 00:34:42,000 que inmediatamente me pide un nombre de usuario y contraseña. 621 00:34:42,000 --> 00:34:46,000 >> Como de costumbre, voy a escribir jharvard y carmesí, 622 00:34:46,000 --> 00:34:48,000 pero se dan cuenta que es la cuenta de administrador en el ordenador. 623 00:34:48,000 --> 00:34:53,000 Es sólo una coincidencia que también hay una jharvard registrado para CS50 Finanzas. 624 00:34:53,000 --> 00:34:56,000 Jharvard, carmesí, enter me da la interfaz de usuario que hemos visto 625 00:34:56,000 --> 00:34:59,000 una idea de hace un momento, y es un poco abrumador al principio, 626 00:34:59,000 --> 00:35:02,000 pero puede estar seguro, nunca vas a tener que hacer clic en la mayoría de los enlaces en esta herramienta. 627 00:35:02,000 --> 00:35:05,000 Usted va a terminar con un pequeño subconjunto que es super útil, 628 00:35:05,000 --> 00:35:08,000 la primera de las cuales es bases de datos hasta aquí. 629 00:35:08,000 --> 00:35:11,000 Si subo a bases de datos, observe que estoy pedirá que cree una base de datos. 630 00:35:11,000 --> 00:35:14,000 Esto es como crear un nuevo archivo de Excel, con eficacia. 631 00:35:14,000 --> 00:35:18,000 Voy a seguir adelante y llamar a esta conferencia, y yo sólo voy a ignorar el campo allí, el cotejo. 632 00:35:18,000 --> 00:35:20,000 Tiene que ver con la representación de datos en el mismo, 633 00:35:20,000 --> 00:35:24,000 y yo voy a crear, haga clic en, y ahora cuenta de que me dejo llevar por crear 634 00:35:24,000 --> 00:35:27,000 en el lado izquierdo donde dice sin bases de datos 635 00:35:27,000 --> 00:35:30,000 Pronto debería ver la base de datos de lectura. 636 00:35:30,000 --> 00:35:32,000 >> Si yo ahora haga clic en el lado izquierdo, la base de datos de conferencias, 637 00:35:32,000 --> 00:35:34,000 cuenta de mis pestañas cambian un poco. 638 00:35:34,000 --> 00:35:38,000 Tengo estructura, SQL, exportación, importación y algunas otras cosas. 639 00:35:38,000 --> 00:35:40,000 La estructura es casi blanco. 640 00:35:40,000 --> 00:35:43,000 No hay mesas se encuentran en la base de datos, como se dice aquí, 641 00:35:43,000 --> 00:35:47,000 así que vamos a crear una tabla, y vamos a seguir adelante y crear una tabla 642 00:35:47,000 --> 00:35:53,000 como los estudiantes, y el número de columnas que queremos? 643 00:35:53,000 --> 00:35:55,000 Vamos a mantener este sencillo, y nos dejó registro de cada estudiante 644 00:35:55,000 --> 00:35:58,000 un número de identificación, un nombre y una dirección de correo electrónico. 645 00:35:58,000 --> 00:36:02,000 >> Vamos a mantenerlo simple como eso, así que 3 columnas, vaya. 646 00:36:02,000 --> 00:36:05,000 La forma en que usted ve aquí es ahora un poco más complicado y abrumador, 647 00:36:05,000 --> 00:36:08,000 pero sólo tenemos que ir a través de él fila por fila, de modo muy rápido vamos a dar 648 00:36:08,000 --> 00:36:14,000 la primera columna de esta base de datos un nombre de ID para el identificador único. 649 00:36:14,000 --> 00:36:17,000 Será un número entero. De hecho, me puede pasar por alto la longitud y los valores. 650 00:36:17,000 --> 00:36:21,000 Un String que va a ser de 32 bits no importa lo que escriba en allí, así que vamos a dejarlo en blanco. 651 00:36:21,000 --> 00:36:24,000 El valor por defecto, yo podría hacer nulo, como se define. 652 00:36:24,000 --> 00:36:27,000 Voy a dejar que solo. No hay que preocuparse por los valores por defecto. 653 00:36:27,000 --> 00:36:29,000 Vamos a desplazarse hacia aquí a los atributos correctos,. 654 00:36:29,000 --> 00:36:31,000 Esto es interesante. 655 00:36:31,000 --> 00:36:33,000 Vamos a seguir adelante y decir que algo arbitrariamente ID deben ser firmados. 656 00:36:33,000 --> 00:36:35,000 No perdamos los números negativos. 657 00:36:35,000 --> 00:36:37,000 >> Vamos a ir desde 0 hasta 4000000000, más o menos, 658 00:36:37,000 --> 00:36:40,000 y entonces no vamos a tocar cualquiera de estos campos todavía por allí, 659 00:36:40,000 --> 00:36:43,000 pero luego me deja escribir el nombre aquí abajo, 660 00:36:43,000 --> 00:36:46,000 y luego el otro era el correo electrónico, por lo que la captura es el correo electrónico 661 00:36:46,000 --> 00:36:50,000 y el nombre, obviamente no enteros, así que vamos a cambiar estos términos en un campo diferente. 662 00:36:50,000 --> 00:36:53,000 Resulta varchar, longitud variable char, 663 00:36:53,000 --> 00:36:56,000 Es como una cadena en una base de datos SQL 664 00:36:56,000 --> 00:36:59,000 pero una longitud variable, y que realmente tiene que saber de antemano el 665 00:36:59,000 --> 00:37:02,000 longitud máxima de la cadena, así que voy a un tanto arbitrariamente 666 00:37:02,000 --> 00:37:05,000 por tipo de convenciones de 255 caracteres. 667 00:37:05,000 --> 00:37:08,000 Estoy totalmente de puede decir 32. Podría decir 1.000. 668 00:37:08,000 --> 00:37:11,000 De alguna manera la necesidad de decidir por sí mismo sobre la base de lo que es su demografía 669 00:37:11,000 --> 00:37:14,000 el más largo el nombre del estudiante y vaya con ese número o un poco más grande, 670 00:37:14,000 --> 00:37:17,000 pero lo que es bueno de un varchar es que no va a perder 671 00:37:17,000 --> 00:37:19,000 255 bytes en el nombre de cada estudiante. 672 00:37:19,000 --> 00:37:23,000 Si se trata de DAVID no va a utilizar en su conjunto 255 bytes, 673 00:37:23,000 --> 00:37:26,000 pero eso es un límite superior, así que voy a ir con 255 sólo por convención, 674 00:37:26,000 --> 00:37:30,000 pero podría debatir que para ser un valor más bajo, y por dirección de correo electrónico 675 00:37:30,000 --> 00:37:34,000 sólo para ser coherente 255, pero de nuevo, podríamos tener el mismo debate. 676 00:37:34,000 --> 00:37:36,000 Pero yo voy a hacer otra cosa aquí en el lado derecho. 677 00:37:36,000 --> 00:37:40,000 >> ¿Qué es poderoso sobre una base de datos es que se puede hacer un montón de trabajo pesado 678 00:37:40,000 --> 00:37:42,000 o el trabajo complejo para ti. 679 00:37:42,000 --> 00:37:46,000 En particular, realmente no me importa lo que mi número de identificación del estudiante son. 680 00:37:46,000 --> 00:37:49,000 Es sólo pretende ser un identificador único en una base de datos 681 00:37:49,000 --> 00:37:52,000 así que tengo una representación concisa de 32-bit de ese estudiante 682 00:37:52,000 --> 00:37:55,000 así que tengo alguna forma de identificación de forma única los 683 00:37:55,000 --> 00:37:58,000 que no haya 2 Davids, por ejemplo, en una clase. 684 00:37:58,000 --> 00:38:01,000 De hecho, voy a marcar esta casilla AI, incremento automático, 685 00:38:01,000 --> 00:38:04,000 de modo que la base de datos MySQL, se da cuenta de 686 00:38:04,000 --> 00:38:08,000 qué ID de cada estudiante recién insertado va a ser. 687 00:38:08,000 --> 00:38:11,000 Ni siquiera tiene que preocuparse por que en mi código, 688 00:38:11,000 --> 00:38:13,000 y yo también voy a elegir algo del menú de índice. 689 00:38:13,000 --> 00:38:17,000 El índice de caer por aquí ha primario, único, 690 00:38:17,000 --> 00:38:19,000 índice y texto completo. 691 00:38:19,000 --> 00:38:21,000 Usted tal vez puede adivinar lo que un par de estas cosas, 692 00:38:21,000 --> 00:38:24,000 pero resulta que en las bases de datos relacionales 693 00:38:24,000 --> 00:38:28,000 que el programador o el administrador de base de datos para obtener preventivamente 694 00:38:28,000 --> 00:38:32,000 dar pistas a la base de datos en cuanto a qué campos 695 00:38:32,000 --> 00:38:34,000 en una mesa son un poco especial. 696 00:38:34,000 --> 00:38:37,000 >> Por ejemplo, en este caso, yo voy a decir que el DI 697 00:38:37,000 --> 00:38:42,000 va a ser un índice principal, también conocida como clave principal. 698 00:38:42,000 --> 00:38:44,000 Lo que esto significa es que, por definición, en adelante ID 699 00:38:44,000 --> 00:38:48,000 identificará de forma única a los estudiantes en esta tabla. 700 00:38:48,000 --> 00:38:53,000 Ningún estudiante tendrá la misma identificación porque estoy imponer esta restricción o índice de esto. 701 00:38:53,000 --> 00:38:55,000 Además, lo que esto va a hacer por mí es lo que va a decir 702 00:38:55,000 --> 00:38:58,000 MySQL ID que es especial. 703 00:38:58,000 --> 00:39:03,000 Me preocupo especialmente sobre identificación, así que adelante y hacer magia a su estructura de datos de la fantasía, 704 00:39:03,000 --> 00:39:05,000 construir una especie de árbol. 705 00:39:05,000 --> 00:39:08,000 Por lo general se trata de algo llamado el B-tree, cosa que no nos fijamos en semanas, 706 00:39:08,000 --> 00:39:11,000 pero es otra estructura de datos similar en espíritu a los árboles binarios 707 00:39:11,000 --> 00:39:15,000 y trata de que nos miramos, pero que va a decir 708 00:39:15,000 --> 00:39:18,000 a la base de datos de este campo es tan importante que probablemente 709 00:39:18,000 --> 00:39:22,000 Quiero ser capaz de buscar en él, seguir adelante y construir un poco de fantasía 710 00:39:22,000 --> 00:39:25,000 estructura de datos en la memoria para agilizar las búsquedas de modo que idealmente 711 00:39:25,000 --> 00:39:28,000 son la constante de tiempo o por lo menos lo más cerca posible a la que 712 00:39:28,000 --> 00:39:32,000 de modo que no delegar en búsqueda lineal, que no va a ser 713 00:39:32,000 --> 00:39:34,000 el más alto rendimiento enfoque. 714 00:39:34,000 --> 00:39:37,000 Por el contrario, la dirección de correo electrónico podría haber sido una clave principal. 715 00:39:37,000 --> 00:39:41,000 >> En teoría, la dirección de correo electrónico de cada uno es único, a menos que usted está compartiendo un poco de consideración, 716 00:39:41,000 --> 00:39:45,000 pero no es generalmente buena para usar algo como una cadena 717 00:39:45,000 --> 00:39:49,000 como clave principal, porque si su propósito en la vida es la identificación exclusiva 718 00:39:49,000 --> 00:39:55,000 filas de la tabla no hay ninguna razón para utilizar al máximo 255 bytes 719 00:39:55,000 --> 00:39:58,000 para identificar a alguien si usted puede conseguir lejos con sólo 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 clave principal debe ser corto y conciso 722 00:40:03,000 --> 00:40:07,000 y lo ideal sería algo así como un número entero o un int grande, que pasa a ser de 64 bits. 723 00:40:07,000 --> 00:40:11,000 Sin embargo, una dirección de correo electrónico debe ser único, y una de las características de una base de datos muy 724 00:40:11,000 --> 00:40:14,000 es para exigir la exclusividad para mí. 725 00:40:14,000 --> 00:40:18,000 Al seleccionar único aquí junto al correo electrónico, a pesar de sí mismo por correo electrónico 726 00:40:18,000 --> 00:40:21,000 se desplaza fuera de la pantalla, lo que digo a la base de datos 727 00:40:21,000 --> 00:40:23,000 no confía en mí. 728 00:40:23,000 --> 00:40:26,000 No me dejes insertar en la base de datos 729 00:40:26,000 --> 00:40:29,000 la misma dirección dos veces, aunque yo soy un idiota y no soy 730 00:40:29,000 --> 00:40:32,000 muy bien con mis ifs e IFS otro lugar y el código PHP real 731 00:40:32,000 --> 00:40:37,000 y accidentalmente deja que el usuario se registra en una dirección de correo electrónico existente 732 00:40:37,000 --> 00:40:40,000 la base de datos es otro nivel de defensa para la corrección 733 00:40:40,000 --> 00:40:44,000 para garantizar que esa dirección de correo electrónico duplicados no acabe en la mesa. 734 00:40:44,000 --> 00:40:49,000 >> Ahora, por el contrario, para el nombre es probable que no quieren hacer ese único 735 00:40:49,000 --> 00:40:51,000 porque entonces no podría ser de 2 o 2 Davids Mike Smith, por ejemplo, 736 00:40:51,000 --> 00:40:55,000 en su base de datos, de modo que uno sólo tendremos que dejarlo solo. 737 00:40:55,000 --> 00:40:58,000 Voy a seguir adelante y haga clic en Guardar en la parte inferior derecha, 738 00:40:58,000 --> 00:41:02,000 y todo se ve bien, pero note aquí 739 00:41:02,000 --> 00:41:04,000 esta es una parte que por ahora no va a pasar mucho tiempo en 740 00:41:04,000 --> 00:41:07,000 porque la sintaxis es un poco complejo, y no es necesario crear tablas 741 00:41:07,000 --> 00:41:10,000 muy a menudo, pero el propio SQL es un lenguaje, 742 00:41:10,000 --> 00:41:13,000 la sintaxis que está aquí que he resaltado. 743 00:41:13,000 --> 00:41:18,000 ¿Qué phpMyAdmin realmente hace es que crea una interfaz gráfica de usuario basada en la web para usted 744 00:41:18,000 --> 00:41:23,000 con la que se puede ahorrar tiempo y no tener que escribir manualmente fuera 745 00:41:23,000 --> 00:41:26,000 una consulta SQL bastante largo así. 746 00:41:26,000 --> 00:41:29,000 >> En otras palabras, si desea crear manualmente esta tabla, 747 00:41:29,000 --> 00:41:32,000 ya sea en ese phpMyAdmin en blanco y negro del sistema o incluso en 748 00:41:32,000 --> 00:41:35,000 mediante el uso de esta otra pestaña, esta pestaña SQL donde puede escribir en cualquiera de las consultas SQL 749 00:41:35,000 --> 00:41:38,000 que desea, francamente, esto me habría llevado un minuto 750 00:41:38,000 --> 00:41:41,000 para recordar en realidad la sintaxis completa, e incluso entonces probablemente sería 751 00:41:41,000 --> 00:41:45,000 hizo algunos errores tipográficos, por lo que esta herramienta es muy útil para cosas como esas, y es también instructivo. 752 00:41:45,000 --> 00:41:49,000 Usted puede comenzar a inferir lo que la sintaxis es 753 00:41:49,000 --> 00:41:52,000 sólo por el color bonito de codificación que phpMyAdmin es la adición de 754 00:41:52,000 --> 00:41:54,000 para nuestra comodidad visual. 755 00:41:54,000 --> 00:41:56,000 Pero ahora vamos a hacer esto en su lugar. 756 00:41:56,000 --> 00:42:00,000 Déjame ir a la pestaña Insertar en la parte superior, y déjame seguir adelante e introducir, por ejemplo, 757 00:42:00,000 --> 00:42:04,000 una identificación de, digamos, la verdad es que no me importa. 758 00:42:04,000 --> 00:42:07,000 Va a incremento automático. Voy a dejar que la base de datos de acuerdo con esto. 759 00:42:07,000 --> 00:42:11,000 Pero voy a ser David, y mi correo electrónico debe ser malan@harvard.edu. 760 00:42:11,000 --> 00:42:16,000 >> Vamos a seguir adelante y poner aquí en Mike Smith como otro. 761 00:42:16,000 --> 00:42:18,000 Me voy a dar un apellido a su vez, 762 00:42:18,000 --> 00:42:22,000 y habremos él sea smith@example.com, 763 00:42:22,000 --> 00:42:24,000 y entonces, ¿dónde puedo ir ahora? 764 00:42:24,000 --> 00:42:27,000 Bueno, parece que va es el botón para hacer clic, y listo. 765 00:42:27,000 --> 00:42:30,000 Observe en las 2 primeras filas insertadas. 766 00:42:30,000 --> 00:42:32,000 Esta es la actual consulta SQL. 767 00:42:32,000 --> 00:42:36,000 Esa es la herramienta phpMyAdmin ejecutado por mí, 768 00:42:36,000 --> 00:42:40,000 pero el resultado final, aviso, si ahora vamos a la pestaña de navegación, 769 00:42:40,000 --> 00:42:43,000 es ver dos filas en esta tabla, recuerda mucho estéticamente 770 00:42:43,000 --> 00:42:46,000 de la tabla que vimos anteriormente para nuestros usuarios de pset 7, 771 00:42:46,000 --> 00:42:51,000 uno de ellos es David Malan, uno de los cuales ahora es Mike Smith. 772 00:42:51,000 --> 00:42:54,000 Pero para ser claros, no es necesario utilizar phpMyAdmin, 773 00:42:54,000 --> 00:42:56,000 y, de hecho, va a ser pronto la escritura de código para pset 7 774 00:42:56,000 --> 00:43:01,000 que automatiza el proceso de agregar filas, eliminación de filas, la actualización de filas y similares, 775 00:43:01,000 --> 00:43:04,000 así que déjame en lugar de ir a la pestaña SQL aquí 776 00:43:04,000 --> 00:43:14,000 y escriba select * from donde los estudiantes 777 00:43:14,000 --> 00:43:18,000 email = "malan@harvard.edu". 778 00:43:18,000 --> 00:43:21,000 >> En otras palabras, supongamos que ahora tiene 779 00:43:21,000 --> 00:43:26,000 algún tipo HTML, y el usuario teclea su dirección de correo electrónico, entre otros campos, 780 00:43:26,000 --> 00:43:29,000 y el objetivo ahora es en el código PHP en parte trasera 781 00:43:29,000 --> 00:43:31,000 mirar realmente hasta otros detalles de ese usuario. 782 00:43:31,000 --> 00:43:34,000 ¿Cuál es su nombre completo? ¿Cuál es su número de identificación? 783 00:43:34,000 --> 00:43:37,000 Se puede escribir una consulta SQL como esto, select * from estudiantes 784 00:43:37,000 --> 00:43:40,000 donde el correo electrónico = "malan@harvard.edu". 785 00:43:40,000 --> 00:43:46,000 Y si yo haga clic en GO, nota que yo, y de hecho lo hacen, volver una sola fila. 786 00:43:46,000 --> 00:43:50,000 Mike se omite de este conjunto de resultados, como la colección de filas 787 00:43:50,000 --> 00:43:53,000 que generalmente se llama, porque él no tiene la misma dirección de email que yo. 788 00:43:53,000 --> 00:43:57,000 >> Ahora, de nuevo, aquí para pset 7 vamos a usar phpMyAdmin como herramienta administrativa 789 00:43:57,000 --> 00:44:00,000 y una herramienta pedagógica para aprender su manera 790 00:44:00,000 --> 00:44:03,000 en todo el mundo de SQL, pero al final de la día 791 00:44:03,000 --> 00:44:08,000 usted va a estar escribiendo estas consultas dentro del actual código PHP, 792 00:44:08,000 --> 00:44:11,000 y así que estad atentos en Zamyla tutorial en particular, 793 00:44:11,000 --> 00:44:14,000 donde obtendrá un recorrido por el código de distribución de este boletín de problemas 794 00:44:14,000 --> 00:44:18,000 donde nos hemos dado no sólo la estética de la página de inicio de sesión 795 00:44:18,000 --> 00:44:21,000 y el bonito logo sexy que dice CS50 Finanzas, pero también hemos dado 796 00:44:21,000 --> 00:44:24,000 un montón de funciones que harán de su vida un poco más fácil. 797 00:44:24,000 --> 00:44:27,000 También hemos escrito parte del conjunto de procesadores para usted, 798 00:44:27,000 --> 00:44:32,000 la porción de entrada del mismo, en particular, para darle un sentido de un diseño representativo 799 00:44:32,000 --> 00:44:36,000 que utiliza realmente un controlador, por ejemplo, index.php, 800 00:44:36,000 --> 00:44:40,000 login.php y similares, y entonces podrás ver el conjunto de procesadores también tiene un directorio de plantillas 801 00:44:40,000 --> 00:44:43,000 que tiene todos sus puntos de vista, todas las estéticas. 802 00:44:43,000 --> 00:44:46,000 Y así, el flujo de trabajo general en pset 7 va a ser que 803 00:44:46,000 --> 00:44:49,000 los usuarios visitan un controlador a través de una URL en un navegador. 804 00:44:49,000 --> 00:44:53,000 Ese controlador contiene código PHP que usted escribió, y dentro de su código PHP 805 00:44:53,000 --> 00:44:57,000 podrían ser algunas líneas de SQL anidado entre comillas dobles 806 00:44:57,000 --> 00:45:00,000 y se pasa a una función que escribimos consulta denominado 807 00:45:00,000 --> 00:45:03,000 que le ayudará a hablar con la base de datos sin necesidad de utilizar algo como 808 00:45:03,000 --> 00:45:05,000 una herramienta administrativa como phpMyAdmin. 809 00:45:05,000 --> 00:45:08,000 >> Usted será capaz de escribir sentencias SQL en código PHP 810 00:45:08,000 --> 00:45:11,000 y recuperar una matriz de PHP del conjunto de resultados, 811 00:45:11,000 --> 00:45:14,000 de las filas que en realidad responden a esa consulta. 812 00:45:14,000 --> 00:45:18,000 Y del mismo modo va a ser capaz de hacer inserciones o eliminaciones 813 00:45:18,000 --> 00:45:22,000 o actualizaciones o similares, la sintaxis para lo cual es bastante similar, 814 00:45:22,000 --> 00:45:25,000 y verás algunas de las referencias en línea, desde el código de distribución 815 00:45:25,000 --> 00:45:29,000 y desde el mismo conjunto de procesadores empacar exactamente cómo hacer para hacer eso. 816 00:45:29,000 --> 00:45:33,000 Darse cuenta de que realmente estamos en última instancia, sólo arañando la superficie de SQL 817 00:45:33,000 --> 00:45:36,000 y de MySQL, pero el poder de la verdad es que te libera 818 00:45:36,000 --> 00:45:40,000 para centrarse en los problemas que desea resolver, los casos de uso que desea implementar 819 00:45:40,000 --> 00:45:43,000 sin tener que preocuparse absolutamente tanto, al menos al principio, 820 00:45:43,000 --> 00:45:47,000 acerca de dónde y cómo almacenar y buscar en su base de datos, 821 00:45:47,000 --> 00:45:50,000 y esto es literalmente el mismo Facebook, donde tiene su inicio 822 00:45:50,000 --> 00:45:53,000 usando MySQL y utilizando más servidores MySQL y luego más servidores MySQL 823 00:45:53,000 --> 00:45:57,000 en poco tiempo, hasta que tuvo que empezar a pensar realmente duro acerca de cómo 824 00:45:57,000 --> 00:46:00,000 almacenan los datos, la forma de almacenar las cosas aún más eficiente, 825 00:46:00,000 --> 00:46:04,000 así que, aunque vamos a dar por sentado el hecho de que los índices y restricciones únicos 826 00:46:04,000 --> 00:46:08,000 y así sucesivamente sólo el trabajo hay una conversación muy interesante 827 00:46:08,000 --> 00:46:12,000 que todo esto puede eventualmente conducir a, así que darse cuenta de que sólo estamos arañando la superficie 828 00:46:12,000 --> 00:46:17,000 de lo que podría llegar para usted o sus proyectos sean un poco de datos grandes. 829 00:46:17,000 --> 00:46:22,000 >> Dicho esto, vamos a terminar aquí, y nos vemos la próxima semana. 830 00:46:28,000 --> 00:46:30,000 [CS50.TV]