[REPRODUCCIÓN DE MÚSICA] DAVID J. MALAN: De acuerdo. Bienvenido / a. Esto es CS50. Este es el final de la semana 8. Y como usted sabe, tenemos bastante las horas de oficina en unos pocos de los comedores, incluyendo Annenberg. Y algunos de los equipo de la amabilidad tomó algunas fotos últimamente. Y en honor a Halloween, pensamos que sería mejor compartir un lugar que nos pilló por sorpresa aquí en Annenberg Salón justo la otra noche. Su compañero Jacob posó para esta foto, pero era más divertido estaba en Facebook, el siguiente conversación que ocurrió después. Su primer mensaje en respuesta a su foto fue esto. Unos minutos más tarde, decidió a uno a sí mismo con este. Continuó luego ir a este, y luego, aún más divertida es cuando su madre intervino. Y a continuación, en última instancia, parece que esto era sólo un truco maravilloso para una obra de teatro que está pasando. Por lo tanto, si desea a ver a Jacob y los demás, entre ellos Cynthia Meng, quien es detrás de las escenas de personal zona CS50, dirigirse a esta dirección URL y aquí esta obra. Así que sin más preámbulos, hoy continuar con esta mirada a la programación web, y la creación real de los programas que no se ejecutan en su línea de comandos, pero en lugar de ejecutarse dentro de un navegador. Presumiblemente ahora, o muy poco, vas para estar en el medio de la implementación su propio servidor web, que es diferente de la programación web. El servidor web en pset6 se trata software que sabe escribir cómo tomar Peticiones HTTP de un navegador, o incluso de usted, un ser humano, con un programa llamado Telnet, y a continuación, responder a esas peticiones, ya sea por escupir un archivo HTML, o un jpeg, gif o una, o incluso un archivo .php. Pero con un servidor web, no es supone que basta con abrir un archivo PHP, algo que termina en .php, y luego escupir el contenido. Se supone que debe hacer lo que a ese archivo por primera vez? Por así decirlo. No compilarlo, dijimos el lunes, pero rather-- Así, interpretarlo. PHP es un lenguaje interpretado, y así una de las características clave en su web servidor, aunque implementado por nosotros, Es esta capacidad de su servidor web a notar, oh. Este es un archivo con la extensión .php. No me dejes solo envío a la usuario como si fuera contenido estático, sino más bien déjame leer línea por línea, de izquierda a derecha, y de interpretarlo. Y para hacerlo, que chicos harán esencialmente punt a un programa en el aparato, y en muchos de los sistemas informáticos, simplemente llamado PHP. Ese es el nombre de la PHP propio intérprete del lenguaje. Por lo tanto, esa pieza que implementamos para usted, y lo que queda para usted, en última instancia, es un número de piezas, entre las que se está implementando apoyo para contenido estático. Pero ahora, y con problema establece siete, eres va a empezar a hacer la transición a realmente escribir el código PHP que consigue interpretarse al hablar con un back-end base de datos que almacena la información. Así que vamos a mejor entender primero un par de estos superglobals y sólo la cantidad de energía que salir de la caja de forma gratuita con un lenguaje como PHP. Cosas que usted no tiene para aplicar a ti mismo. Así, vimos el lunes $ _GET, que es un superglobal, que se acaba de hablar de PHP para un mundial variable que puede acceder en cualquier lugar. Y lo que hay dentro de $ _GET? ¿Qué hay dentro de este superglobal que vemos? Seguramente estadísticamente en menos una persona sabe. ¿Qué hay dentro de $ _GET? ¿Sí? AUDIENCIA: Es las variables se pone en la cadena de consulta. DAVID J. MALAN: Perfecto. Son las variables que puesto en la cadena de consulta. Por lo tanto, en nuestro ejemplo anterior de reimplementar Google cuando tuvimos una URL, y luego el signo de interrogación, que demarca el comienzo de HTTP parámetros, entonces tuvimos q igual algo, como q es igual a los gatos, lo que iría automáticamente dentro de que $ _GET súper mundial para usted, porque de PHP, es una clave de Q, y de valor de los mismos de los gatos. En otras palabras, $ _GET y todos estas cosas son matrices asociativas, tablas hash de clase, que almacenar claves y valores. Ahora, de vuelta en pset5, el hash mesa en la que podría haber aplicado, o el que usted podría intentar han puesto en marcha, de verdad era efectivamente un asociativa array, una estructura de datos mediante el cual se puede asociar claves con valores. Pero en pset5, los valores fueron trivial. El valor era esencialmente verdaderas o falsas. ¿Es la palabra en el diccionario? Así que, cuando usted HASHED una palabra como manzana para ver si la manzana está en el diccionario, su función de comprobación presumiblemente devuelto verdadero o falso. Entonces, eso es efectivamente el valor que está recibiendo de vuelta. Pero vimos el lunes brevemente, que sin duda puede asociar más interesante valores que sólo verdadero o falso con teclas, como la manzana. Usted podría devolver un cadena arbitraria, y de hecho, eso es lo que $ _GET y estos otras variables le permiten hacer. Así que $ _POST es similar en espíritu, pero si usted envía un formulario a través de correos, un método HTTP que es diferente usado para cosas como tarjetas de crédito, y la información privada, e incluso información binaria como fotos, esas cosas terminan dentro de $ _POST. Y en realidad los archivos como jpeg y todo eso, incluso hay otro que no es aquí llamado $ _FILES también. Por lo tanto, el servidor no vamos a detenernos en demasiado mucho, pero te da acceso para ordenar los detalles de bajo nivel sobre el propio servidor que está utilizando. Cookies y reunión, sin embargo, veremos efectivamente ahora. El último es lo que utilizamos para implementar la noción de un carrito de la compra. A un super simple, pero el recuerdo que tuvimos este ejemplo aquí, contando cuántas veces había visitado esta página antes. Pero hoy en día, en lugar de sólo mirar el efecto de esto, vamos a abrir hasta Inspector de Chrome, que por lo general puede hacer haciendo clic derecho o control al hacer clic en cualquier parte de una página web, y luego elegir inspeccionar elemento. O usted puede ir a través de los menús que se describen en las especificaciones de pset6. Y yo voy a la pestaña Red aquí, y vamos a ver por un momento el tráfico HTTP que es yendo y viniendo. Déjame primero ir por delante y borrar caché de Chrome. Así que algunos de ustedes podrían estar familiarizados con esta técnica ya, y vamos a utilizarlo para propósitos de depuración aquí. Ahora nosotros, como equipo los científicos van a empezar haciendo esto para la depuración fines, con lo cual vamos a borrar la caché, normalmente, por lo que puede deshacerse de cosas llamadas cookies. Así que es probable que estés familiarizado general con lo que las cookies son, o al menos que existen, pero lo que es su comprensión de ellos, como sólo un usuario de ordenadores, lo que es una cookie? Sí. AUDIENCIA: Es un poco de-- así, no bit en un plazo de ciencias de la computación. Es una pieza de datos que un sitio web envía a usted con el fin ser capaz de registrar las estadísticas en usted. DAVID J. MALAN: OK, bueno. Así que es una pieza de datos que un servidor, pone en su ordenador, y vamos a generalizar aún más, es una clave value-- bien, eso es cada vez más precisa. Se trata de una pieza de información, una pieza de datos, que un servidor es capaz para poner en su computadora y muy a menudo, el servidor hace esto con el fin de recordar quién eres. Así, por ejemplo, las probabilidades es probablemente estás iniciado sesión en sitios como Facebook, o Gmail, o otros antes, y que se conecte con su nombre de usuario y contraseña, y después de eso, para algún número de minutos, horas o incluso días, el servidor recuerda que que son, de hecho, ha identificado. Ahora, ¿cómo es que realmente está sucediendo? Porque ciertamente no está volver a escribir su nombre de usuario y contraseña cada vez que se desplaza a un página diferente en Facebook. Así resulta que el las galletas son la respuesta. Una cookie que se pueda imaginar como, Algo así como, una mano digitales sello que usted puede conseguir en una diversión parque o un club que en esencia Indica que usted ha estado aquí antes, y que ya ha muestra su identificación con el gorila, para instancia, y que el club o el parque ahora debe asumir que usted ya se han autenticado. Usted ya ha sido identificado por el mismo. Así que con eso en mente, vamos a abrir hasta contador aquí. Déjame ir por delante, que acabo de hacer, y borrar todos mis galletas. Y ahora lo que voy a hacer es mantenga Mayús, sólo por si acaso, y volver a cargar la página por la fuerza. Shift sólo asegúrese que nada se almacena en caché. Y aquí está la petición que iba y venía. Así que aquí tenemos una solicitud, y vamos mí el zoom aquí abajo, y mucho de esto es una especie de detalles poco interesantes para ahora que el navegador tiene automáticamente envió, pero vamos a haga clic en Ver Fuente para ver los encabezados de primas. Y si usted ha zambullido en pset6 ya, que sin duda va a reconocer las cosas de esta manera, y tal vez algunos de estas otras líneas aquí, pero lo que es más interesante para hoy si me desplazo hacia abajo, no a la solicitud pero a la respuesta de la llamada, esta línea probablemente parece familiar. Eso es una buena cosa cuando ves a un 200 OK. Al parecer este es el fecha y hora en el servidor y hay un montón de cosas. Oh, esto es interesante. Resulta que cada vez que utilice PHP, al menos en este servidor, el servidor escupe lo versión de PHP que está utilizando. Lo cual, en realidad, para la seguridad propósitos, no es una buena cosa. Pero, vamos a volver a eso en otro momento, tal vez. Pero ahora se trata de la línea jugosa hoy, y vimos brevemente algunos de estos, Creo que con esto cuando nos clavaban alrededor del inspector en ese momento, conjunto cookie es lo que está plantando esa pequeña pieza de información en su ordenador. Este es un encabezado HTTP eso es efectivamente decirle a su navegador, Chrome, IE, lo que sea, Hey tienda navegador en el usuario de disco duro o en la memoria RAM del usuario, una clave llamada PHPSESSID, que es una notación abreviada para el ID de sesión, y darle un valor de 0vlk8t, punto, punto, punto. Una muy larga seudo cadena alfanumérica aleatoria. Es sólo un número muy grande, pero que está codificado con letras y números de modo que el tamaño de la misma puede ser incluso más grande que números por sí solos. Y luego, por cierto, Path = /, que Sólo significa que la cookie debería ser asociado con el totalidad de la página web, no sólo una específica La página de todo el asunto. Así que este es el sello que la mano virtual. Es como si el servidor, Facebook, o en nuestro caso el aparato, tiene 0vlk8t literalmente escrito y así sucesivamente, en su mano. Note lo del servidor, no hacerlo es que no es almacenar mi nombre de usuario, sin duda no almacenar la contraseña. En lugar de ello, parece ser almacenar información pseudoaleatoria de modo que nadie puede adivinar lo que mi sello en la mano es. En el lado del servidor, Mientras tanto, el servidor va a recordar, probablemente en una base de datos o algo así, que el usuario, que en el futuro presenta un sello de mano de 0vlk8t, punto, dot, dot, debe ser asociado con esta particular, carrito de compras, por así decirlo. En otras palabras, si me voy ahora volver aquí y volver a cargar esta página, ¿cómo sabe el servidor que visité una vez? O si lo hago de nuevo, ¿cómo funciona el servidor Sé que he visitado que dos veces? Bueno, si voy a esta más reciente solicitud, que ahora es la tercera que he enviado en total, cuenta mi petición ahora. Todavía hay esta solicitar hasta aquí, mismo como antes, todavía hay un montón de cosas que hemos ignorado como antes, pero el último encabezado, este tiempo, porque he estado aquí antes, es una presentación de este sello virtual de la mano. Por lo cual esta línea de galletas aquí, no se establece pero dos puntos de galletas PHPSESSI = 0vlk8t, eso es de automático sólo mi navegador presentación de este sello en la mano para que Ahora el servidor, tan pronto como se da cuenta, ooh, ésta es punto 0vlk8t usuario, punto, punto, Ahora puedo recordar que él o ella es y volver a asociar con lo que el usuario información Marcar, y todos que la información se puede almacenar por usted, el programador, en $ _SESSION. Así que para ser claros, si abro muy rápido en gedit ese archivo real, counter.php, en mi directorio público host local como antes, observe que, de hecho, Estoy en última instancia, el almacenamiento en $ _SESSION Comillas "contador" el valor del contador anterior, que Que recibo de estas líneas hasta aquí que nosotros mirado tiempo pasado más uno. Así que debajo de la capilla, eso es todas las cookies son. Es justo el tipo de la tecnología digital sello en la mano que van y vienen, y, francamente, si abre Chrome Inspector en cualquier sitio web usted visita hoy, con super alta probabilidad, usted va a ver tal vez uno, tal vez media docena de galletas ser recordado por usted. Y peor aún, si los sitio web que está visitando todas tienen anuncios, el cual es ciertamente muy común hoy en día, y si esos anuncios están llegando de algún partido central, alguien como Google o AdWords, ya que llame a uno de sus productos u otros proveedores que vender anuncios, lo que es interesante, y, francamente, lo que es un poco preocupante, sobre el funcionamiento de HTTP, es que si usted tiene un anuncio embebido en Facebook.com y Google.com, y Harvard.edu, cualquier número de sitios web, por lo que es tal que hay un intermediario que está cumpliendo hasta los anuncios para los tres de esos sitios web, resulta que la las cookies son por dominio. Así que si usted tiene un anuncio que viene de la misma empresa en diferentes sitios web, que la empresa puede realizar un seguimiento eficaz que usted es a través de todos los sitios web. Harvard podría no saber usted está visitando Facebook. Facebook podría no saber y usted está visitando Harvard. Pero cualquiera que sea el servicio de anuncios Están usando si ese dominio es presente tanto en Harvard.edu web páginas y páginas web Facebook.com, este hombre de mediana seguramente sabe quién es usted porque de estas cookies se comparten a través de, o en vez de, que los llamados intermediarios. Así que vamos a volver a esto en implicaciones para la seguridad de los mismos, pero hay una gran cantidad de información siendo almacenado sobre usted en cualquier momento que visitar la mayoría de cualquier página web en internet y lo que realmente reduce a este mecanismo muy simple. ¿Qué sucede, entonces, si eres muy paranoico y usted decide ir en Chrome o IE o lo que sea y desactivar las cookies? Lo que sucede? ¿Sí? Usted realmente-- que has hecho este derecho? Okay. No, adelante. AUDIENCIA: Algunos sitios web no tienen una función sin ella como Facebook. DAVID J. MALAN: ¡Sí! Así que algunos sitios web se acaba de dejar de trabajar. Y en la mayoría de los sitios web de estos días que fundamentalmente se basan en cookies, especialmente si tienen que inicie sesión en, sólo lo van a romper. Debido a considerar la alternativa, si el sitio no tiene manera de recordar quién eres, y, por tanto, su navegador web no es representa con cada HTTP solicitud de este sello en la mano, efectivamente un sitio web como ir de Facebook a tener que le pedirá que conectarse cada vez maldito que cambie de página, o haga clic en un enlace, que No es sin duda una particularmente buena de usuario experiencia. Así que allí, también, es entre las compensaciones. Así que sin más preámbulos, vamos a echar por supuesto que con la programación web, en lenguajes como PHP, usted puede recordar información como la que en el problema establecido siete al implementar su propio Sitio web de E * Trade-como con los que comprar y vender acciones, usted recordará exactamente lo que el usuario ha comprado y vendido y que él o ella es a través de este período de sesiones. Pero vamos a necesitar una manera más elegante que el correo electrónico para comenzar a mantener la información alrededor. Derecha? El lunes, hablamos sobre Frosh mensajes instantáneos y cómo en la versión uno de ese sitio web, Hace años, todo lo que hicimos fue correo electrónico el Proctor quién es a cargo de los deportes intramuros programa, el nombre y el género, y si son o no son un capitán, y el dormitorio de alguien que es inscribirse en un deporte intramural. Así que no es malo, pero él o ella entonces tenía para recorrer a través de su correo electrónico, hacer una hoja de cálculo o algo así que, para mantener todo organizado. Así que seguramente nosotros como programadores puede hacer esto para que Proctor. Y así entrar en SQL, Structured Query Language, que se va a parecer bastante diferente a ambos C y PHP, y te sumerjas en mucho más manos en PHP y establecieron siete problema sino también de SQL, o SQL, este es un lenguaje que que se utiliza para hablar con una base de datos. Pero lo que es una base de datos? Bueno usted piensa en un base de datos, al menos por ahora, como acaba de ser como un archivo de Excel, o si usted es un archivo de números de usuario de un Mac, o si usted es una de Google Apps usuario una hoja de cálculo Google, es efectivamente una base de datos, o realmente específicamente una base de datos relacional. Una base de datos relacional es sólo algo que tiene filas y columnas, y usted puede almacenar cualquier tipo de información en estas filas o columnas. Pero lo que es bueno de SQL, y sobre bases de datos reales, no sólo hojas de cálculo o Google hojas de cálculo, es que se puede utilizar un lenguaje para ejecutar realmente las consultas para insertar datos, para eliminar los datos, para buscar los datos, incluso lo más importante, y que no tienen que usarlo bastante manualmente como usted puede ser típicamente un Google hoja de cálculo como éste. Así que en SQL, hay un montón de declaraciones o piezas fundamentales de funcionalidad incorporada. Hay muchos más que éstos, pero usted puede ir a una enorme distancia con sólo saber que este lenguaje llamado SQL tiene al menos cuatro declaraciones que usted puede aprovechar. Eliminar, para la eliminación de los datos, Inserte, para añadir filas, Actualización, para cambiar filas, y Selección, para volver a las filas y eso es precisamente lo que hace SQL. Se opera por completo en filas de modo que al insertar o quitar, o actualización, o seleccionar lo que eres volver a estar como un conjunto de resultados de la llamada, como un conjunto de filas. Un montón de filas de una tabla. Así que de vuelta en el día, y aún hoy en día, se puede interactuar con el base de datos mediante una línea de comandos, pero no es particularmente divertido de usar esta ventana de estilo en blanco y negro y, de hecho ejecutar comandos y meter alrededor de su base de datos. Una interfaz gráfica de usuario o GUI, es mucho más preferible, sin duda, y por lo que la herramienta se recomienda y preinstalado para usted en el aparato se llama phpMyAdmin. Es una coincidencia total que el nombre de esta cosa tiene PHP en el mismo, sólo significa que las personas quien escribió este programa ellos mismos escribió en PHP. Pero es en última instancia acerca de la administración un servidor de base de datos, como un servidor MySQL que usted puede ser que tenga, como usted hacer, en el aparato CS50. Así que no hay más detalle aquí que tenemos que cuidar lo de hoy, pero lo que es clave es la de la izquierda lado es una lista de las bases de datos que usted tiene en su computadora, en su electrodoméstico CS50, o venir proyectos finales que te pueden tener a un tercero, una empresa de sitio web o servidor web, que usted podría estar pagando por el espacio. Así que a la izquierda es el bases de datos, uno de los cuales es pset7 que pedí prestado a partir del próximo pset semanas, y luego en la parte superior no notan que hay una montón de pestañas, una de las cuales es las bases de datos, SQL, estado, usuarios, exportación y así sucesivamente. Así que usted puede recorrer un largo camino sólo por darse cuenta que la mayoría de la interfaz de usuario está en la columna superior izquierda y en la parte superior a la altura. Entonces, ¿qué podemos hacer realmente con esto? Bueno, vamos a empezar la creación de un bit de información de la siguiente manera. Supongamos que el siguiente es el caso, como será en pocos días, desea implementar un sitio web, llamado CS50 Finanzas, y este sitio web le permite comprar entre comillas y vender acciones. Y que va a averiguar el precio de esas acciones, en última instancia, como se verá, hablando con Yahoo Finance. Lo cual, maravillosamente, tiene un servicio gratuito por lo que puede pasar en un tablero de cotizaciones como GOOG para Google, y lo hará darle de nuevo stock actual de Google precio en el pasado pocos minutos por lo menos. Así que vamos a usar que, en última instancia, fingir para el usuario para comprar y vender real stocks utilizando dinero virtual, pero la primera cosa el usuario va a ver es esta pantalla de inicio de sesión que les pide por su nombre de usuario y contraseña. Y así, uno de los primeros desafíos para usted en pset7 va a ser la implementación de la parte de atrás base de datos, la hoja de cálculo si se quiere, eso va a almacenar nombres de usuarios y contraseñas y en última instancia, lo que las existencias que poseen, y cuántos, y cuánto dinero tienen, por lo que un montón de otras cosas en otras tablas u hojas de cálculo. Así que echemos un vistazo a cómo esta podría parecer a primera vista. Voy a volver a el aparato y estoy va a ir a esta URL aquí phpMyAdmin localhost / phpmyadmin y verás que me lleva a una interfaz exactamente como lo vimos en el captura de pantalla, y aquí tener una base de datos adicional llamada conferencia para hoy y déjame ir por delante primera y haga clic en pset7. Me parece que tienen un par de opciones, uno para nueva, para la creación de una nueva tabla, y un enlace a los usuarios, que es una mesa que ya creado. Entonces, ¿qué es una mesa? Así que si usted utilizó Excel antes, y si usted tiene números usados ​​o Google Las hojas de cálculo, que abren una ventana y te dan un montón de filas y columnas, pero por lo general tienen hojas de trabajo a lo largo de la parte inferior, o pestañas separadas. Usted puede pensar en cada hoja de cálculo como una tabla de manera que la base de datos, en última instancia, es una combinación de una o más tablas, uno o más hojas de trabajo, en el mundo de una hoja de cálculo normal. Así que déjame ir por delante y haga clic en esta hoja de trabajo que premade, llamados usuarios, alias Tabla de base de datos. Y si me desplazo hasta aquí, déjame Alejar un poco, esto es lo que está diciendo phpMyAdmin nosotros es dentro de esta tabla en este momento. Es un poco confuso al principio mirada porque la interfaz de usuario no es la cosa más bonita del mundo, pero lo interesante es esta parte aquí. Identificación, nombre de usuario y hash. De antemano, y podrás mano esto en un problema establecido siete, te damos un archivo que contiene un super pequeña tabla de base de datos, prestado en realidad de la edición pirata del problema fijó dos, dentro de los cuales hay seis filas. Uno de Belinda toda la hasta llegar a uno de Zamyla, y notar a la izquierda de los nombres de usuarios son identificadores únicos como uno, dos, tres, cuatro, cinco, seis, números enteros, y luego a la derecha son los hashes. Y si, las probabilidades son, usted no hizo el problema edición pirata informático fijó dos, pero un hash es igual que un cifrado contraseña con algunas advertencias. Y así, lo que se ve aquí son las versiones cifradas de los seis de nuestras contraseñas de problema configurar la edición de dos piratas cibernéticos. Ahora a la izquierda es sólo un poco de materia GUI, edición de esta fila, copiar esta fila, la supresión de esta fila. Pero lo que es interesante ahora es el siguiente. Puedo empezar en realidad experimentar con esta tabla. Así que si me fuere y haga clic en el SQL ficha, me sale este cuadro de texto grande. Y esta no es la forma en que vamos a hacerlo cuando en realidad la escritura de código. Para ser claros, phpMyAdmin es sólo una herramienta que es va a dejar que nos hurgar la base de datos y vamos a experimentar con las consultas. Así, por ejemplo, supongamos que Ejecuto exactamente esto. Select, que es uno de los palabras clave que he mencionado antes, estrella, que representa a todos las columnas de una tabla. Por lo que la tabla? Bueno, los usuarios. Y aviso no es esto convención raro en SQL donde realmente se utiliza volver garrapatas, por lo general, cotizaciones no individuales y dobles comillas no cuando se habla de mesas de nombres, por lo que la cotización de espalda es la cosa en la superior izquierda de su teclado más probable. Así que déjame ir por delante ahora y simplemente dejar que solos y desplácese hacia abajo y haga clic en Ir, y estamos en realidad va a ver lo mismo. Acabamos de ejecutar una consulta SQL diciendo seleccione todo estrella de mesa llamado a los usuarios, y lo que recibe es esto. En última instancia, vamos a ser capaces de hacer eso mismo en código, pero por ahora todo lo que quería no era verla en mi navegador. Bueno vamos a hacer algo un poco diferente. Permítanme volver a la pestaña SQL, y vamos a decir que lo que? Zamyla ha perdido toda su dinero, y por lo tanto es tiempo para nosotros para borrar ella como un usuario. Ella ya no está en sesión. Así que voy a decir eliminar de-- así, mantener la capitalización por coherencia, eliminar desde donde los usuarios. Y así, podemos tener estos predicados, o éstos calificadores, al final de mi declaración dónde y cómo podría eliminar Zamyla? Por su nombre Zamyla, por lo que el columna, una de las columnas fue nombrado, por lo que donde nombre = "Zamyla". Y aquí yo uso doble frases o citas individuales, sólo utiliza la parte de atrás, cuando las garrapatas hablando de los nombres, por ejemplo, de tablas o campos. Y permítanme haga clic en Ir aquí. Y ahora, la página web es siendo un poco tenso. O, lo que realmente quieres para ejecutar delete de los usuarios donde nombre es igual Zamyla? Sí. Así que ahora, si nos remontamos a mi mesa los usuarios hacen clic, observe que Hm. Me equivoqué. Y, de hecho, que tipo de hecho clic de distancia tan rápido que ni siquiera ve el mensaje de error de color rojo, tal vez. ¿Qué hice mal? AUDIENCIA: Usted no necesita para capitalizar su nombre. DAVID J. MALAN: Sí yo capitalizado su nombre, pero su username-- realidad yo hizo un par de errores, ¿no? Uno de ellos, su nombre de usuario es zamyla, Z minúscula, y el nombre de la columna es nombre de usuario, no el nombre, por lo que vamos a hacer esto de nuevo. Déjame ir por delante y eliminar de los usuarios en su nombre de usuario es igual entre comillas "Zamyla". Bien? Así que esto se ve un poco mejor, vamos me voy desplácese hacia abajo y haga clic en Ir. Todavía va a gritarme para estar seguro. Hago clic en Sí, y ahora veo, Francamente esto sucedió, realmente rápido, menos de una segundo, sin duda, esta es exactamente la pregunta que quedó ejecutado. Para confirmar, déjame haga clic en Usuarios y de hecho ahora Zamyla se ha ido. Ahora vamos a hacer lo contrario. Supongamos que quiere Gabe registrarse en el sitio web. ¿Cuál es la consulta SQL, ¿cuál es la comando que podía escribir para agregar Gabe? Bueno, es bastante sencillo. Insertar en los usuarios, y ahora se pone un poco críptico. Tengo que especificar, en el servidor, lo que los campos que desea asignar. Realmente no me importa lo de Gabe ID número, así que voy a omitir eso. Estoy en vez de ir a decir nombre de usuario, hachís, y luego los valores que quieren poner no va a ser Gabe. Y entonces su hachís, no sé. Así que por ahora, voy a dejar que como un grande para hacer. Volveremos a que en el conjunto del problema especificación de cómo en realidad se hace eso. Así notar, de nuevo, la sintaxis. Insertar en el nombre de la tabla, a continuación, un lista entre paréntesis de los campos, las columnas que desea añadir valores a, y luego sólo el mismo orden exacto de izquierda a derecha de los valores que desea añadir, Y es sólo porque envolver el texto es un poco largo. Así que ahora déjame haga clic en Ir. Inserta una fila. Y ahora si me voy de nuevo a los usuarios, lo que es interesante es que no sólo es Gabe ahora en el base de datos, lo que aparentemente es su Identificación? Bueno, es de siete. ¿Por qué es siete años cuando yo no agregarlo? Así que esto, también, es una de las características se obtiene de la base de datos. Un montón de construido en la funcionalidad. Resulta que cuando creado esta tabla, Yo preconfigurado es automáticamente asignar una ID de tal manera que se incrementa. Así que si alguna vez has hurgó, y visto lo que tu Facebook ID número es, en estos días no es realmente una cosa que hacer, pero Facebook como una API, Interfaz de programación de aplicaciones, por el que usted pueda volver un montón de datos sobre a ti mismo, de tus amigos, y sus conexiones. Y lo que solía ser amable de fresco, de nuevo en el día, fue a buscar lo que su Facebook fue el número de identificación. Mark Zuckerberg, de, por ejemplo, es tres ya que fue el autor del sitio. Y como dice la historia, que él creó dos cuentas de prueba, los usuarios de uno y dos, que luego se elimina. Y así, Zuck, como es su nombre de usuario en Facebook, es ID número tres, y todos nosotros tenemos un número mucho más grande que estos tres días. De hecho, en algún momento Facebook se alejó desde incluso utilizando un int, que es un valor de 32 bits, a la utilización de el siguiente paso, esencialmente un largo tiempo por lo que que podían acomodar incluso más usuarios se registren. Así que un poco de diversión hecho histórico. Así que eso es sólo el sintaxis básica con la que podríamos ejecutar un par de consultas, pero en realidad lo que podamos hacer un montón más cosas con SQL. Y verás, en última instancia, en el conjunto de problemas de siete que usted tiene que hacer una número de decisiones de diseño, entre ellos va a ser qué tipos de datos a utilizar. Así que al igual que en C, hay datos tipos en una base de datos, como MySQL, y los tipos de datos que tienen que elegir de estos campos incluyen aquí. Char, varchar, int, int grande, decimal y de fecha y hora, y muchos otros. Así que vamos a hacer esto realidad. Hagamos de cuenta que no lo hicimos mano que la mesa de este usuario y déjame seguir adelante y crear, para yo mismo, en las conferencias database-- en realidad me dejó ir adelante y elimino la mesa que tengo aquí ya por lo que en realidad podemos crear esto. ¡Vaya. Voy a dejar esto mesa, y ahora estoy va a ir de nuevo a la dar una conferencia sobre la base de datos aquí, Voy a crear una tabla llamados usuarios y vamos a sólo hacer tres columnas inicialmente y haga clic en Ir. Ahora, en su mayor parte, de nuevo, esto es sólo el uso de esta herramienta gráfica llamada phpMyAdmin, y lo que estamos haciendo ahora es la creación de una mesa. Así que esto es como ir en Archivo, Nuevo, y la creación de un nuevo archivo de Excel. Así que me está pidiendo unos pocos preguntas, de izquierda a derecha, ¿cuál es el nombre de la primera columna, y luego el nombre de la segunda columna, y el nombre de la tercera. Así que vamos a recrear este. Identificación, nombre de usuario y luego fue uno, y luego de hash era otro. Entonces, ¿qué si el tipo de datos ahora para ser un campo como el ID? Aquí está la lista completa de tipos de datos disponibles para usted en una base de datos, y por ahora vamos a ir con int. Valor de 32 bits, no lo hago creo que soy realista va a tener más de 4 mil millones usuarios en mi cuenta, en mi servicio, así que voy a mantener en movimiento a la siguiente pregunta. Yo no voy a especificar una longitud o valores, que no es aplicable aquí por un int, per se. Y ahora puedo especificar, al parecer, un defecto valor, que no voy a especificar. A colación, no sé lo que es eso. Un atributo. Ahora que realmente hacemos tener una decisión de diseño. Así que hay un par de campos de aquí, no todos de los cuales son aplicables, pero sin signo sólo significa qué? Que el int debe ser? Simplemente no negativo. Así que tiene que ser 0 en adelante. No, yo no voy a comprobar porque Quiero que cada usuario tenga una identificación, no puede ser nulo. Y entonces, llegamos a algo más de interesantes decisiones de diseño como este. Volveremos a esto en un momento, pero lo que otra de las características de la base de datos Es decir, es que se puede decir el servidor de base de datos que adelante y optimizar a ti mismo, tu RAM y espacio en disco duro, de manera que selecciona, y se inserta, y borra, y las actualizaciones son muy rápido. Contraste esto con pset5. Si usted quería buscar algo en su tabla hash, que que piensan como una base de datos, quien tuvo que hacer todo el trabajar para hacer su tabla hash rápido. Es como, obviamente, usted. Derecha? Había que poner en todo momento la multa tuning cosas, conseguir una función hash derecho, encontrar la manera muchos cucharones tengan. Pero lo que es bueno, de nuevo, sobre una base de datos es que acaba de Punt todos esto a otras personas quienes han pensado que esto a través de usted, y lo que Yo voy a decir aquí bajo índice es que mi campo ID va a ser la forma principal de la identificación de los usuarios en esta base de datos. No voy a pensar de Zamyla como Zamyla, Voy a pensar en ella como el número 6. ¿Por qué es, tal vez, mejor intuitivamente a pensar y modelo cada una de sus filas individuales utilizando un número en lugar de algo como una cuerda, como el Zamyla o Gabe o cadena más larga todavía? ¿Sí? AUDIENCIA: Un ID es único? DAVID J. MALAN: Diga otra vez? AUDIENCIA: Un ID es único? DAVID J. MALAN: Un ID es único, pero suppose-- según sea el caso en general con los nombres de usuario, supongamos También dije que sólo puede haber uno Zamyla en el mundo, y sólo uno Gabe. Yo podría imponer la unicidad restricción en las cadenas, también, si quería. Así que no es una mala idea. AUDIENCIA: Más seguro. DAVID J. MALAN: Más seguro, ¿por qué? AUDIENCIA: Usted no puede decir que es que, como en el usuario. DAVID J. MALAN: OK, no se puede saber qué usuario es que lo que hay una privacidad aspecto a ella, especialmente si los ID quizás que aparece en las URL. Tan seguro, que pudiera tipo de trabajo, también. Otros pensamientos? ¿Sí? AUDIENCIA: Es más fácil realizar operaciones en un int. DAVID J. MALAN: Ese es el verdadero truco. Es sólo más eficiente, o más fácil para el equipo, para realizar operaciones en un número entero. Derecha? Un int está garantizado para ser de 32 bits, mientras que Zamyla es un par de caracteres, Gabriel es un poco más caracteres de longitud, Davenport es muy largo, y por lo que es no es particularmente eficiente de usar cuerdas para comparar valores y buscan para los campos, y los campos de actualización, si usted puede conseguir lejos con un solo número entero. A tan sólo 32 bits. Así que los nombres de usuario, también, de esta manera, no tiene que ser único, a pesar de que probablemente debería ser, e incluso en esta manera también un usuario podría permitir que cambiar su nombre de usuario. Así que vamos a dejar ahora esta como la medios primarios de identificar al usuario. Esto le está diciendo a la base de datos seguir adelante y optimizar a ti mismo por lo que se ven ups en ID son super rápido. AI, horriblemente llamado, simplemente significa Incremento automático, y este es el cheque Box nosotros necesitamos comprobar para especificar que el campo ID de se actualizará automáticamente para mí, y luego me voy a desplazarse a la derecha aquí y, francamente, no estoy realmente interesado en más de estos campos. Ciertamente, hoy no. Así que me voy a volver aquí, a la primera columna, donde Tengo que especificar nombre de usuario y hachís, y vamos a al menos enfoque en el segundo por ahora. Int probablemente no es la decisión correcta, así que lo que tiene más sentido, tal vez? AUDIENCIA: Texto. DAVID J. MALAN: Diga otra vez? AUDIENCIA: Texto. DAVID J. MALAN: Texto? OK, yo escuché texto. Qué otra cosa? Es como que tenemos un montón de opciones que son textual en la naturaleza. Por eso, cuando, y por qué, hacer utiliza algunos de estos? Bueno char, al contrario de lo que te pueden pensar, no es un solo personaje. Es un número específico de caracteres. Así que si sabemos que todos los nombres de usuario debe ser como de ocho caracteres, como solía ser común en los mayores sistemas informáticos, podría decir Char y entonces yo podría decir 8 aquí. Fue entonces cuando se convierte en la tercera columna aplicable al crear una tabla. Pero eso es un poco molesto porque algunas personas podrían quiero tener un nombre de usuario ya de ocho caracteres, algunas personas podrían querer tener un nombre de usuario más corto, así que por qué comprometerme a un número específico? ¿Por qué no tener una variable número de caracteres y sólo decir que la longitud máxima de un nombre es, no sé, como 64 caracteres. No puedo pensar en ninguna amigos que tener nombres más de 64 caracteres, e incluso si eso es demasiado corto pudieras ciertamente topar para arriba arbitrariamente. Así varchar es una variable número de caracteres. El texto no es un mal instinto, y francamente que tipo de hace lo que dice, pero un campo de texto puede ser como 65.000 bytes, por lo menos. Eso es algo excesivo para un campo, y de hecho, yup, 65.535. Eso es algo excesivo para un nombre, así que me quedo, por lo general, con varchars para Pruebas campo y hachís, también. Hash, resulta que, podríamos hacer un varchar tan bien o algo por el estilo, pero no vamos a centrar hoy en la criptografía allí y los números para que podamos realmente que desee utilizar para su longitud. Pero permítanme desplácese hacia abajo a la derecha. Sólo puede tener una índice principal de una tabla, pero es lo que quiero para aplicar cualquiera de estos, ahora, a nombre de usuario, qué le dirías? ¿Cuál debe username basarse en una vaga comprensión de estas cuatro opciones? Sólo por sus nombres? AUDIENCIA: Único. DAVID J. MALAN: Tan único, ¿verdad? Así que resulta que no sólo podría le dices a una base de datos, de antemano, esta es la forma primaria de identificar los campos. También se puede decir que esto es va a ser un campo único. No va a ser la cosa Confío en que, pero me gustaría que la base de datos para esencialmente tiene que si la condición, por lo que que si alguna vez intenté dar de alta dos usuarios con el mismo nombre, la base de datos a toda máquina no me va a dejar. Puede que tenga algo de código adicional en PHP que impide tanto, pero la base de datos, también puede asegurar que eso nunca va a suceder. Ahora, como un aparte, especialmente en lo que se piensa en los proyectos finales, tener en cuenta que el índice y el pleno texto son en realidad muy útil. Si usted tiene una base de datos más grande, no con decenas, pero con cientos o miles o incluso millones de campos, puede También dígale a la base de datos con antelación este es un campo que voy estar buscando en un terreno. Tal vez su nombre de usuario, tal vez es bio, si estás hacer un sitio web de Facebook-como que tiene párrafos que el usuario que está permitido para ahorrar, y si quieres decir la base de datos con antelación Voy a estar buscando en este campo mucho, pero no es necesariamente único, puede especificar mí crear un índice. O bien, se puede decir también que me permita hacer tipo de registros arbitrarios como Comando o Control F, como tú podría en un procesador de textos, por lo que podría buscar cadenas arbitrarias o subseries de caracteres en este campo. En otras palabras, estamos recibiendo hasta el punto en el semestre donde usted no tiene que preocuparse acerca de cómo poner en práctica las cosas de manera eficiente. Usted sólo tiene que saber acerca de lo que las decisiones de diseño para hacer de modo que usted es utilizando las herramientas adecuadas para el el comercio con el fin de aprovechar las características que otras personas han construido para usted. Así que para recapitular, primaria sólo debe tener uno, sólo se puede tener uno, y que es lo que usted está cometiendo a utilizando a la identificación de campos de forma única. Steam es similar en espíritu, pero usted puede ser que sólo de vez en cuando usarlo, pero desea que la base de datos para imponerla. Índice sólo significa preventivamente acelerar las cosas en el futuro para que yo pueda buscar las cosas en este campo. Y a continuación, el texto completo es generalmente para párrafos, o ensayos, o grandes cuerpos de texto en el que También puede ser que desee tener comodines como el equivalente de la estrella. Derecha. Así que era una especie de mucho para todos a la vez. Vamos a ver si no podemos destilar un par de estas características y luego construir algo bastante simple, pero de gran alcance. Así que entre el otro las decisiones de diseño que usted está en última instancia, va a tener es a lo largo de las líneas de motores de almacenamiento. Y permítanme hacer mención de esto en previsión de proyectos fin de carrera, y la anticipación de la let de decir-- no vamos a hacer esto. Vamos a construir este pequeño primera aplicación. Voy a entrar en mi terminal ventana, y aquí no es sólo counter.php, que ahora vamos para deshacerse de como ya no pertinente, pero tenemos un montón de directorios y este va a ser muy similar en espíritu a lo que usted verá en el problema creado siete. Así que tenemos tres directorios incluye pública y las plantillas, que es exactamente donde lo dejamos en Lunes con todo nuestro paradigma MVC. Y para recapitular, en público se va a ir cualquier archivo que desea que los usuarios realmente v la posibilidad de visitar en su navegador a través de la URL. Plantilla. ¿Qué hemos puesto en las plantillas? ¿Qué tipo de cosas? No había mucho, pero un par archivos, por lo menos el lunes. Sí. AUDIENCIA: Encabezado y pie de página? DAVID J. MALAN: Encabezado y pie de página. Así que tenemos algo similar hoy en día, también. Tenemos unos pocos archivos más pero Pie de página Veo, veo Cabecera, y luego un montón de otros archivos. Así que este es el equivalente de la vista V MVC, que, de nuevo, será un poco más claro en siete de problemas, pero esto es sólo una carpeta que soy poner un montón de mi estética. Una gran parte de mi HTML, muchos de mis formas. Mientras tanto, incluye, es otra directorio que tiene estos tres archivos y vamos a echar un vistazo rápido a los mismos. Voy a seguir adelante y abrir config.php. Como resultado, gran parte como antes en el término, usted agudo incluido CS50 dot h con pset7. En el ejemplo de hoy, vas hacer que el equivalente de con una declaración requerir que efectivamente incluye estas varias líneas. Así que para ser claros, esto es un archivo llamado config.php. Y note lo que está haciendo. Es aparentemente haciendo algo que dan vuelta en los mensajes crípticos, de error de modo que usted puede ver en el navegador. Es, pues, al parecer, que requiere otros dos archivos así que esto es como # include en C, y entonces éste nos vimos, y nosotros hemos confiado en, esta se enciende que la cesta de compras como la funcionalidad. Esto significa una voluntad de cookies ser enviado de vuelta y vuelta. ¿Por qué es interesante? Bueno, si nos remontamos a esta directorio y abrir, por ejemplo, constance.php. Tenga en cuenta que PHP hace constantes de apoyo, no es absolutamente como #define en C. En su lugar, literalmente decir definido, y previo aviso que ha almacenado con antelación cuatro constantes en este archivo. Uno para la base de datos de hoy en día, para mi contraseña, por mi nombre de usuario, y para el nombre del servidor. Así que estos son en realidad va a ser bastante similar en siete de problemas. Y por último, y aquí es donde estoy va a conseguir algo de funcionalidad agradable desde el personal, en functions.php es un montón de código que hemos escrito, y yo robé algo de esto del problema establece siete para hoy, que hace un montón de cosas y vamos a ver a uno de ellos En particular. Esta función aquí, consulta, va a ser la función de PHP que llamamos a fin de ejecutar SQL. Hace un momento estábamos usando phpMyAdmin, pero eso es sólo para suerte de los propósitos de aprendizaje y con fines de diagnóstico y olvidando su conjunto de bases de datos. Cuando usted utiliza realmente su base de datos, usted, el ser humano, son, obviamente, no va para ser tirando hacia arriba de una web página cada vez que una persona se registra. Vas a escribir código que inserciones y eliminaciones usuarios en la demanda, y vamos a hacer esto por medio de la función de consulta. Si ahora me desplazo hacia abajo, hay va a ser un poco más características. Redireccionamiento va a ser una función que escribimos para usted que le permite enviar al usuario a otra URL, y hacer que es una función, que se le parezca vimos el lunes, que en realidad hace una plantilla, pero más sobre estos en el forma de propio paseo de pset7 través. Por ahora, vamos a seguir adelante y hacer esto. Déjame ir a mi mesa de conferencias y ver que hay actualmente nada aquí todavía, y déjame ir también en mi directorio público, donde hay sólo un archivo, index.php. Este archivo parece ser super simple por el momento, que se parece a esto. Muy parecido a la forma en que dejado el lunes. Estoy requiriendo este archivo, config.php, que está en un directorio incluye, que está en punto punto, mis padres, y entonces es sólo la representación este archivo. Entonces, ¿qué es este archivo? Vamos a abrir en mis plantillas form.php, y vamos a ver esto. Súper simple, aparentemente este formulario es va a presentar por un $ _GET o $ _POST. Comprobación de validez rápida. Literalmente buscar visualmente el archivo. Método es igual puesto. Así que no va a utilizar la dirección URL, como Google lo hace, va a ordenar de piel la información detrás de las escenas y que es va a someterse a una archivo llamado register.php, y eso es el archivo todavía no hemos escrito pero ¿qué va esto para que parezca es esto. Si voy a una página separada Esta es lo localhost / index.php se parece. Y de nuevo, el servidor de sólo asumiendo index.php. Intro. Así que ahí es donde estamos a, y lo que quiero hacer es ser capaz de escribir cosas como David, y luego mi número de teléfono, lo que va a decir 617-555-1212 por ahora, regístrese y ahora no se ha encontrado register.php. Así que necesito para implementar esto. Así que vamos a látigo rápidamente algo como esto. Déjame ir a mi directorio público y hacer gedit de register.php, y ahora voy a seguir adelante y iniciar el modo PHP, como lo hicimos el lunes, y la etiqueta de cierre de PHP, y vamos a hacer un par de cosas. Así que uno, lo sé, desde haber escrito esa forma, que quiero comprobar lo siguiente. Si está vacío, lo que el usuario escrito en el campo de nombre, a continuación, Voy a decir algo como pedir disculpas faltante nombre. Pedir disculpas, por su parte, es no una cosa construida en PHP, es una función que escribimos en functions.php para pset7 para que usted tenga acceso a ella. Porque si el otro campo está vacío, número, entonces estoy va a pedir disculpas a la usuario y diga el número que falta. Guarde este archivo. Ahora vamos a volver a mi navegador, volver al foro vuelva a intentarlo. Registrar. Okay. No pasó nada, lo cual es bueno. No recibí un mensaje de error. Pero si por el contrario, vamos a Recargar página, y no proporciona nada. Maldita sea. Haz eso. Registrar. ¿Qué hice mal? Si está vacío, el nombre $ _POST. Diga otra vez? Oh, por supuesto. Me olvidé de la parte más importante, que es require ("../ includes / config.php."). Es necesario disponer de acceso a la función de pedir disculpas, que Es por eso que no pasaba nada. La función en realidad no existe. Así que vamos a intentarlo de nuevo. Vamos a recargar la página, haga clic en Registro. Okay. Ahí está. Así, la salida que estamos viendo aquí es el resultado de llamar a un disculparse función, super sencillo, y que sólo se imprime lo que sea Le doy como argumento. Muy bien, así que vamos a cooperar. Vamos a proporcionar mi nombre como David, regístrese, faltante número Aceptar let de disponer que, demasiado. 617-555-1212. Registrar. Okay. Así que todo está bien ahora, nada interesante está ocurriendo. Así que ahora vamos a hacer algo más interesante suceda así. Déjame ir a phpMyAdmin, y vamos a en realidad crear una tabla llamada usuarios, Voy a darle tres columnas, y me da gusto crear ID, y luego nombrar, y luego el número, y el campo ID estoy va a dejar como un int. El campo de nombre que voy a dejar como un varchar, y vamos a decir 64, un tanto arbitrariamente. El número que voy para hacer, ¿sabes qué? Vamos a apoyar a los números de Estados Unidos aquí, así que voy a hacer algo como carbón y luego 10 caracteres max para un código de área y luego siete dígitos. Y luego por aquí, voy a especificar incremento automático este campo, hacer de esto una clave principal, y Voy a seguir adelante y no revisar cualquiera de estas otras cajas. Así que cuando por fin haga clic en Guardar, y vuelvo a mi mesa a los usuarios, esto es lo que se ve como si yo Ahora haga clic en una estructura nueva pestaña. Así que esto, que quede claro, es simplemente la manera de phpMyAdmin de decir su tabla de base de datos tiene un ID, un nombre, y un número con esas configuraciones particulares y vamos a ignorar el resto de los campos hay por ahora. ¿Y ahora qué es lo que quiero hacer? Así que si me voy ahora a mi código fuente, si todo está bien Quiero ejecutar la siguiente consulta. Insertar en, y puedo sólo dicen los usuarios no hacen estrictamente necesitan los de vuelta garrapatas si es no es una palabra peligrosa como usuarios. Yo voy a decir el nombre, número, y entonces aquí estoy no va a codificar la dígitos de los valores todavía. Voy a poner dos signos de interrogación. Y esto es una convención en muchos idiomas por lo que si usted quiere tener un marcador de posición para una cadena usted va a utilizar la cuestión marcas, por razones que vamos a volver a charlar sobre seguridad, y aquí Voy a pasar en los dos campos de publicar el nombre, y luego publicar el número, y ahora guardar el archivo. Y ahora voy a bajar aquí es un super simplemente decir rendersuccess.php, que va a ser otra plantilla. Voy a crear muy rápido. Geditsuccess.php y yo sólo voy decir éxito H1 en ese archivo. Bien. Así que ahora, vamos a volver a la navegador, donde visité antes. Vamos a seguir adelante y confirme que escribí en David, que escribí en un número de teléfono, regístrese. Maldita sea. ¿Qué hice mal? Así que estoy viendo un error aquí, tener un error en su sintaxis SQL. Déjame saltar de nuevo a gedit, dejo me vuelvo a register.php, y ¿qué Omito que Fue importante la última vez? Necesito esto. ¿Quieres saber que, aparte de habiendo notado antes, pero necesito esto. Así que ahora vamos a volver, y este fue útil para ver en el navegador y es por eso que en config.php nos escupimos errores. Vamos a seguir adelante y volver a cargar, haga clic en Continuar, el éxito. Así que ahora me dejes ir a mi base de datos de aquí y haga clic en Usuarios, y navegar, y cuenta ahora tener a David en mi base de datos aquí. Ahora técnicamente esta página web es sin embargo, no en el Internet público, así que no puedo tener otra personas en poner aquí, pero si yo ahora quería, para ejemplo, enviar un mensaje de texto a mí mismo. Vamos a salir a un miembro aquí y ver si esto realmente funciona. Voy a seguir adelante y borrar esta fila y vamos a difuminamos este en el vídeo más tarde así que no tenemos la Internet me entero de mensajes de texto, y ahora vamos a ir hasta el navegador y vamos a ir a dar una conferencia y nosotros escribimos en diferente número aquí, registro, el éxito. Así que ahora, mi número es presumiblemente en la base de datos, y ahora la parte divertida. Vamos a realmente usar PHP para hacer algo mediante programación, ya sea desde el comando línea o de algún otro lugar, y por ahora estoy solo va a mantener la sencillez y yo voy a ir a mi directorio de aquí y haga lo siguiente. Guión Gedit digamos, vamos a llamarlo texto, #! / usuario / bin / env PHP, como vimos por última vez. PHP. Ahora me voy a hacer requerir incluye config.php, a pesar de que esto podría inducir un ligero error. Y ahora voy a seguir adelante y decir filas, consulta, seleccione la estrella de los usuarios, y ahora aquí me voy a hacer una técnica desde la última vez para cada fila como fila. Y yo voy a hacer algo simple. Printf digamos nombre es este, y el número es esta, la barra invertida n. Y ahora voy a pasar en la fila citar nombre fin de la cita, y el número de fila entre comillas, y ahora vamos a seguir adelante y la ventana de mi terminal chmod este a + x para hacer este script ejecutable llamado texto. Y ahora vamos a correr texto. OK, así progresar. Una Así que ahora que he escrito script de línea de comandos, en un lenguaje llamado PHP, que, debido a que requieren de línea, tiene acceso a todos los de configuración constantes que ha especificado. El nombre de la base de datos y así sucesivamente. De hecho, sólo para ser claros que esto no es una casualidad, déjame ir por delante y registro, muy rápido, alguien más como Rob y le dará el número 555-1212. Y ahora, si me quedo el guión de nuevo, observe el poder de lo que estamos haciendo con la base de datos. Ahora que he visto de inmediato lo que el otras dos filas están en mi base de datos. Así que ahora vamos a tratar de hacer algo incluso más elegante en el interior de, y esta es la parte que hemos no probado de antemano, por lo que la última vez que hizo esto las cosas fueron horriblemente mal, tenemos vídeo a tal efecto. En realidad, sí, divertido a un lado. Así que la última vez, en una dar una conferencia al igual que hace dos años, decidimos, decidí, para ser todo esto sería una gran idea para generar dinámicamente los correos electrónicos en clase, utilizando la totalidad de la base de datos CS50 estudiantes, que nos había dado sus números y sus compañías de telefonía móvil que usted podría recordar de pset0, cómo razonar, resulta Tuve un pequeño error en mi programa y hizo un par de errores en 2012, creo. Por lo cual, uno que tenía para bucle que hizo exactamente este tipo de cosas, iterar sobre la base de datos, conseguir un nombre de la base de datos, nombre de la base de datos, y luego en cada iteración del bucle que me envió un correo electrónico. Pero en lugar de enviar un correo electrónico, enviado un correo electrónico la primera iteración, y dos mensajes de correo electrónico una segunda iteración, enviados tres mensajes de correo electrónico una segunda iteración, que como se puede recordar de nuestro discusión de la notación asintótica este gran O de la mala, como n al cuadrado es la cantidad de mensajes que envié, pero no fue incluso mensajes de correo electrónico era mensajes de texto. Y como usted sabe, la asistencia no es super alta hacia el final del semestre y así que pensé que sería lindo en el tiempo para decir: "¿Por qué no es usted la clase?" En el mensaje de texto que enviado a toda la clase, y que era gracioso que gustar el 50% de la clase, pero el otro 50%, algunos de los cuales asustado, yo envié increíblemente dulces notas apologéticas para el personal pidiendo disculpas por habiendo perdido la conferencia sólo esta vez, ¿verdad? Así que sería horriblemente mal. Así que en ese espíritu, vamos a tratar este de nuevo, pero sólo con mi número. De antemano, en functions.php, He escrito esta función aquí. Se llama el texto, y toma en tres argumentos. Un número, un portador, y un mensaje. Estoy usando una sentencia switch, que maravillosamente PHP tome cuerdas, no sólo números enteros, y yo no implementan todo el apoyo para esto todavía, Yo sólo he hecho AT & T y Verizon. Debido a que resulta que con estos transportistas tienen correo electrónico a gateways SMS, por lo que en realidad se puede enviar un correo electrónico a una dirección como el número de teléfono en vtext.com y si el usuario no ha bloqueado los mensajes, que irán a través de es un mensaje de texto. Ahora, para hacer esto, voy a tener que añadir un campo muy rápido a mi base de datos. Voy a entrar en mi estructura, y yo soy va a seguir adelante y añadir un de campo en el extremo de la mesa. Vamos haga clic en Ir, y estoy va a llamar a este portador y por ahora me voy a dejar esto como un texto de la barra, pero podemos ser más elegante en el futuro. Voy a ir rápidamente en mi mesa, y yo soy va a deshacerse de Rob, porque eso es un número falso, Voy a ir a editar aquí y estoy va a cambiar mi carrera manualmente ser Verizon, que se es, y ahora aquí. Vamos a hacer una comprobación de validez rápida. Vamos a abrir nuestra escritura de texto, que se parece a esto, portador es% s. Estamos haciendo mucho más error la comprobación de lo que hice en 2012, portador. Y ahora, me voy a ir por delante y volver a ejecutar el script. Okay. Carrier es Verizon, lo que significa ahora espero que pueda hacer precisamente esto. Correctamente este año, con suerte, aquí vamos. Así que dentro de este bucle, estoy va a no sólo tener este printf, Yo también voy a llamar texto y el uso de esta función de recuperación fue que se necesita un número, un portador, y un mensaje. Así que vamos a ver, el número va a ser fila entre comillas "número" cita fila "portador", fin de la cita y el último fue el mensaje. No atornille hasta este año, punto y coma. Okay. Crucemos los dedos. Vamos a ver si esto funciona. Muy bien, así. Aquí vamos. Vamos a desbloquear el teléfono, cruzar los dedos, maldita sea. Indefinido may-- variables oh espera, espera, espera, muy rápido. Muy rápido, muy rápido. Esto es totalmente la pena. Permítanme agarro, déjame agarrar, uh-oh. Gracias, los textos tienen iniciado de otra persona. Déjame ir por delante y abrir de verdad rápido, dropbox.php / electrónico aquí. Espera. Merece la pena. Descargas. Aceptar, src8m fuente. Okay. ¿Necesitas una línea más aquí. Oh ahí está, es en Frosh Mensajes instantáneos, es en el registro a las tres. Oh hola, Margo, muchas gracias. Aceptar, y me faltaba esta línea aquí. Así que déjame agarrar rápidamente esta línea de código, que incluye el correo o biblioteca que yo realmente quiero usar, Voy a rápidamente volver a entrar en funciones, Voy a ir a la parte superior de esta presentar y requieren de este archivo, así, y ahora me voy a cruzar realmente mi dedos cuando vuelva a la orden script de línea, que está dentro de directorio de host local de hoy. Texto Ejecutar. Intro. Mail. Espera. Espera. Mail. Oh, OK. Aquí vamos. Correo consigue nuevo gestor de correo de PHP. ¿Hice bien? Maldita sea. A-- oh, espera, espera, espera. Colocarse. Te lo prometo, esto es va a ser tan digno de él. Dirección. Es por esto que yo no hago la ejemplos derecha antes de la clase. Ugh. Los siguientes destinatarios fallaron. Vamos a intentar una última cosa. SMTP fijar de, agregar la dirección, la dirección es de hecho eso. Vamos a probar esta última parte en la dirección. Aw, estoy muy triste en este momento. Gracias. Pero realmente aprecio todo los textos que han estado enviando. Tienes esta David. Usted está soplando. Dejémoslo ahí y vamos a arreglar el lunes. Nos vemos entonces. Daven FARNHAM: Y ahora Profundo Pensamientos de Daven Farnham. Si un árbol binario cae en un bosque y no hay nadie alrededor para C it-- [Riéndose].