[Powered by Google Translate] [Problema Tutorial Set 7] [Zamyla Chan] [Harvard University] [Esta es CS50] [CS50.TV] Hola a todos y bienvenidos a Tutorial 7, CS50 Finanzas. Ahora estamos oficialmente terminado con todos los conjuntos de procesadores en el CS50, y nos acaba de ir con uno más que va a ser una aplicación divertida de un sitio web donde los usuarios pueden iniciar sesión en CS50 Finanzas y comprar y vender acciones. Hoy en día, vamos a tener algunas herramientas a nuestra disposición. Vamos a estar hablando de permisos. Siempre que tenga una carpeta web, usted va a querer que los usuarios puedan ejecutar ciertos archivos pero también acaba de leer los otros, así que vamos a ver en los permisos y cómo se pueden establecer esos. A continuación, vamos a mirar en PHP, HTML y el código SQL. Primero, los permisos. Cuando estás en el terminal en un directorio determinado, entonces lo que quiero hacer es que desea ejecutar el comando chmod. Esto es seguido por letras o números que corresponde a lo que básicamente quiere que el mundo vea, te a ver, etc Por ejemplo, cada vez que tenga una carpeta, entonces usted quiere que la carpeta sea ejecutable por todos que la ve, así que lo que haría es que se podría ejecutar el comando chmod a + x y luego el nombre de la carpeta. Cuando usted tiene un archivo, como archivos CSS o archivos de imagen - como mapas de bits, JPEG y cosas por el estilo, o cualquier otro código JavaScript - desea que pueda ser leído por todos, Entonces lo que haces es que se podría utilizar el comodín - que es un asterisco - para indicar básicamente en la carpeta CSS - todo en esa carpeta -  Voy a decir que eso va a ser leído por todo el mundo. Con los permisos, cuando usamos las letras, también podemos utilizar números. Así, se ve que en última instancia, cuando se quiere que algo sea ejecutable - que está representado por el número 1 - algo que sea legible es el número 4 y, a continuación - escritura es el número 2 - y tan esencialmente cuando se desea una combinación de ellos, luego se agregan. Si quieres algo que leer, escribir y ejecutable, entonces sumaría 4, 2, y 1 y que le daría 7, entonces cada vez que tenga una carpeta que desea que sea ejecutable por todos - así como de lectura y escritura - entonces usted hace que el 7, 1, 1. Ese sería el 7 por ti, entonces 1 para las demás personas. Cuando se tiene la especificación, que en realidad va a especificar qué carpetas y archivos que Tienes que ser chmod-ed específicamente. Por ejemplo, cuando usted tiene carpetas - esos son 7-1-1 - cuando tienes imágenes o HTML, CSS, JavaScript, entonces esos van a ser 6, 0 4, - o 6, 4, 4 - y luego los archivos PHP va a ser de 6, 0, 0. La idea detrás de esto es que los usuarios no realmente debe ver a su código PHP, pero sólo ser capaz de ver la salida. Great! Entrando en PHP. Simplemente, cada vez que desee un archivo PHP, el sufijo de archivo es. Php. También puede mezclar HTML con código PHP. Si usted tiene un archivo HTML, por ejemplo, entonces usted puede presentar junto con el ángulo izquierdo, signo de interrogación, php - poner el código php - y cierre que con otro signo de interrogación y un ángulo recto. Variables en PHP son mucho más fáciles de tratar que las variables en C. Cualquier variable sólo se inicia con un signo de dólar en frente de ella, y están escritos con voz débil. Eso significa que usted no tiene que preocuparse acerca de cómo configurar algo igual a una cadena o un entero. Usted puede simplemente decir que este es mi nombre de la variable y entonces este es su valor, así que va a ser más fácil de tratar allí. Otra cosa es que PHP permite utilizar matrices asociativas. Usted puede simplemente definir un arreglo como lo haría en C diciendo, signo de dólar, el nombre de la matriz-iguales, y, a continuación entre corchetes tienen básicamente sólo la lista de los valores de todos los elementos de la matriz. Pero, en lo que PHP también se puede hacer es especificar básicamente - es algo así como una función hash. Se puede especificar el índice - lo que vamos a llamar - y entonces que corresponde a un valor. Si realmente pasa en a = 1, b = 2, c = 3, entonces su matriz en un índice le pondrías a 1. Este conjunto de procesadores que entrar en calor con un poco de PHP en una sección de preguntas, y luego sumergirse en CS50 Finanzas. Tenemos un par de - tenemos parte de la funcionalidad, en el fondo, de implementar en este sitio web. Queremos que los usuarios puedan registrarse en nuestra página web con un nombre de usuario y una contraseña. Queremos que les permita buscar una cita, y entonces podríamos imprimir el nombre de esa cita, así como el precio que hoy está. Queremos permitirles ver un portafolio de todas las acciones que han comprado hasta el momento. También queremos que les permita comprar acciones y venderlas. Y, por último, queremos que puedan ver la historia de todas las transacciones que se han realizado. Entonces, finalmente, después de haber implementado todo eso, entonces usted es libre de implementar una característica extra. Vamos a entrar en eso. Estos pueden ser o bien permitiendo a los usuarios obtener dinero extra mediante el depósito de dinero extra, o puede permitir que cambien su contraseña, o algo así, enviarlas por correo electrónico un recibo al comprar o vender una acción. Hay una lista limitada de características que usted podría aplicar, así que es el último allí. Como se trata de un sitio web, ustedes también tienen mucha libertad para personalizarlo. Nosotros ofrecemos algo de código CSS, pero definitivamente eres libre de modificar, hacer que se vea más bonito, pero por debajo es una funcionalidad básica por lo que siempre se refieren a la especificación de lo que realmente se necesita para incluir allí. A raíz de la especulación, vamos a utilizar el aparato como también un servidor. Va a ser anfitriones de nuestra página web para nosotros, de su servidor local. Si usted sigue estas instrucciones y descomprimir el código pset 7 Distribución en su carpeta virtual host host / local,  a continuación, puedes visitar http://localhost/ en Google Chrome en el aparato, y luego alcanzaría el código en el que has escrito pset 7. Pset 7 viene con un montón de código de distribución, y es de esperar we've - a través de todos los conjuntos de procesadores antes de esto - nos acostumbró a la lectura a través del código de distribución, entender qué funciones ya están previstas, y cómo podríamos ser capaces de usar esas y las demás funciones que vamos a implementar. En este caso, tenemos 3 carpetas. Tenemos una carpeta HTML, incluye una carpeta, y una carpeta de plantillas. ¿Qué vamos a hacer con este conjunto de procesadores es una especie de separar el pensamiento - el pensamiento de programación - de que el código PHP con el aspecto visual actual. Vamos a tener un archivo PHP que hace todo el pensamiento, se lee en la base de datos, imprime las cosas, tiene las sentencias if - cosas como esas - y luego que va a pasar los datos a nuestro fichero de plantilla - o archivo template.php. Lo que va a hacer es leer los datos y luego lo imprimirá. Podemos tratar plantillas como "tonto", ya que en realidad no los quieren a estar haciendo un montón de trabajo en el cálculo de las cosas. Queremos que nuestros controladores para hacerlo. Un poco sobre eso - vamos a echar un vistazo a algunos de los códigos de distribución. Aquí tenemos nuestro archivo index.html, y es bastante vacía. Básicamente lo que hace - que dice, bueno, voy a necesitar el archivo configuration.php. No vemos que allí mismo, pero es básicamente una llamada al archivo configuration.php, y ejecutar dicho. Después de que lo hace, va a hacer que la cartera. El procesamiento es una función, por lo que cada vez que estamos en un controlador, llamaremos render, vamos a dar al archivo y luego los datos que estamos pasando en, por lo que va a llamar portfolio.php--tipo de pase en esos datos de modo que la cartera puede lidiar con eso. Y ahora, aquí, tenemos nuestra forma login.php.  Este es el controlador que básicamente se encarga de la tala pulg A continuación, comprueba si el formulario se envió a este archivo y se ocupa de la validación de la presentación. Veremos en esta función disculpas. Cuando queremos imprimir un mensaje de error, usamos disculpas y que se redirige al usuario a una página específica que se imprimirá el mensaje de error específico que le indiquemos. Continuando, se consulta la base de datos - nos volveremos a conseguir más de eso más tarde. Entonces usted ve que aquí si un formulario no se presentó, entonces se vuelve un formulario. Eso significa que va a login_form.php, así que echemos un vistazo a eso. Login.php es en realidad donde vemos el trato HTML con el aspecto visual actual. Aquí tenemos una etiqueta de entrada del nombre de usuario, una entrada para la contraseña, así como un botón de envío. Eso es en realidad donde el aspecto visual y la forma HTML se va a celebrar. En este caso, se dice que va a ser presentada por un cierto método, llamado post. Vamos a entrar en las diferencias entre los métodos - frente a publicar conseguir, también hay algo que se llama put - vamos a entrar en esos métodos tarde, pero por el interés de este conjunto de procesadores, Lo recomiendo animamos a usar correos. Sabemos que, básicamente, una vez que este formulario se presenta - de login_form.php-- luego irá a la acción - login.php-- básicamente en pasar todos los parámetros de las formas en login.php. Los resultados de esa forma están contenidos dentro de esta matriz asociativa post. Los índices de los diferentes elementos de la matriz de mensaje son exactamente lo que especifique aquí. Usted dice que el nombre de esta entrada es nombre de usuario. El nombre de éste es password. Del mismo modo, verá el nombre de usuario como el índice de la matriz asociativa allí. Si nos vamos a la carpeta incluye, tenemos este fichero funciones que va a ser muy útil. Todas estas funciones se llevan a cabo para usted. No es necesario el cumplimiento específico de cualquiera de estos usted mismo, pero van a bastante útil. Hemos disculpas, que como he dicho antes, básicamente, se imprimirá un mensaje de error para usted en una página específica - apology.php. Entonces tenemos vertedero, por lo que si usted acaba de llamar dump y luego pasar a la variable, a continuación, le llevará a una página que mostrará esa variable para usted. Luego hemos de cierre de sesión, que básicamente va a terminar la sesión de un usuario determinado de. Lookup va a ser útil. Ya que estamos tratando con citas y acciones, vamos a ser capaces - y es esencialmente tiempo real. Tenemos que saber cuáles son esos valores bursátiles son, así que tenemos la función de búsqueda que trata de documentación de Yahoo de las existencias. Una vez que buscar un cierto símbolo de una acción, se volverá a vosotros el símbolo de cotización así como el nombre y el precio actual de esa población. Esa es la función de búsqueda. Entonces estamos tratando con mySQL, así que vamos a querer ejecutar algunas consultas en la base de datos SQL. Tenemos que tratar de consultas - a algún tipo de resumen de cuenta de eso. Vamos a estar pasando en toda la cadena de nuestra consulta SQL - y todas las variables que van en ella - y lo que hace en realidad es ejecutar eso para nosotros. En lugar de tener que escribir todo esto cada vez que desea consultar - al obtener todos los resultados de esa consulta - entonces usted puede llamar a la función de consulta, y va a volver a usted - dependiendo de lo que usted está utilizando para su consulta - probablemente una fila de todos los resultados que coinciden con la consulta o similar. Más sobre esto más adelante sin embargo. Por último, tenemos que reorientar la cual, como su nombre indica, te redirige a una página diferente. Y entonces tenemos que hacer, que vamos a estar llamando un par de veces. Cuando estás en un controlador, se llama a hacer en la página de la plantilla y luego pasar a los valores que la plantilla y luego se tratan. Esos valores son probablemente va a estar tratando con el tipo de salida que desea que se mostrará en su página de la plantilla. Bien. Esas son las funciones, y hay mucho más en este código distribución. Os animo a pasar por esto y explorar por su cuenta. Además, la especificación probablemente le guiará a través de algunos otros elementos del código de distribución. He aquí un resumen de las funciones que se encuentran en functions.php. Bien. La primera tarea es permitir a los usuarios registrarse en el sitio web. En estos momentos, hay un formulario de acceso en el sitio web, y está provisto de unos pocos usuarios con contraseñas. Puede utilizar los nombres de usuario e inicie sesión, pero desea permitir a la gente hacer sus propios nombres de usuario y se suman a la página web. La disposición para el registro es bastante similar a la forma de acceso, excepto el nombre de usuario no es pre-existente, y el usuario también debe proporcionar una nueva contraseña, y luego por lo general tenemos una confirmación de la contraseña. Una vez que el usuario introduce todos los de esa información, queremos añadir a nuestra base de datos de usuarios. Vamos a tener una base de datos - una base de datos SQL - que vamos a hacer referencia. En esa base de datos, vamos a tener una tabla con todos los usuarios que contiene su nombre de usuario, su contraseña, y también la cantidad de dinero que tienen. En el registro, queremos permitir que introduzca la información. Queremos mostrar que la forma. Queremos asegurarnos de que su contraseña - que entraron en uno, y luego también de que las contraseñas coinciden cuando lo ingrese dos veces. Después de todo lo que se hace - si se asume que los errores son revisados ​​- luego queremos agregar los usuarios a nuestra base de datos. Finalmente, una vez que se haya registrado, es muy conveniente si usted no tiene que conectarse de nuevo una vez que te hayas registrado, así que vamos a iniciar sesión en el sitio web si han registrado con éxito. La primera tarea es mostrar la forma, y ​​esto es en realidad va a ser - este proceso de registro entero va a ser modelado muy de cerca después de anunciarse pero en lugar de login.php es posible que tenga register.php. En lugar de login_form.php--que es la plantilla - habrás formulario de registro. Usted querrá agregar un campo más - un campo de confirmación de contraseña - en lugar de sólo el nombre de usuario y la contraseña de un uno. A continuación, queremos comprobar si las contraseñas coinciden o están en blanco. Tenemos el controlador - register.php--que se va a hacer cargo de hacer estas comprobaciones. Cuando se envía un formulario a través del método post, luego, de esas variables están contenidas dentro de la matriz de entrada. Usted quiere asegurarse de que el valor de la matriz puesto en índice de contraseña coincide con el elemento de confirmación. Usted quiere asegurarse de que no están en blanco, y usted querrá asegurarse de que son lo mismo. Una cosa conveniente sobre PHP es que no es necesario utilizar cadenas comparar más. Podemos utilizar el operador igual a igual-  para comprobar si las cadenas son iguales una a otra. Para el tratamiento de errores, te quiero pedir disculpas. Para disculparse, sólo tiene que llamar a la función  a continuación, especifique un tipo de mensaje que desea enviar el resultado. A continuación, desea agregar el usuario a la base de datos. Hasta ahora, todo lo que he estado haciendo es negociando localmente con los resultados de la forma. Ahora, en realidad quiere añadirlos a nuestra base de datos. Para ello, lo primero que quiere asegurarse de que el nombre de usuario no está en blanco. Entender que en un sitio web, usted no puede tener varios usuarios con el mismo nombre de usuario, por lo que usted quiere asegurarse de que al insertar algo en su base de datos - insertar un nuevo usuario - entonces usted no recibe una colisión entre un nombre de usuario pre-existente y el nombre de usuario que el usuario está tratando de enviar. Para ello, una vez que se ejecuta una consulta - la inserción de un determinado usuario con su contraseña y una cantidad inicial de dinero en efectivo - una vez que se llame a esa consulta, a continuación, en realidad MySQL devolverá false si no. La estructura de los usuarios es tal que el nombre de usuario es un valor único, por lo que no puede tener más de uno. Al tratar de insertar una nueva fila con un nombre que ya existe, que va a devolver falso - como un falso booleano valor. Una cosa difícil aquí es que usted querrá comprobar si el resultado es el resultado de la consulta. Si falla, entonces usted querrá consultar con el operador de triple iguales. Eso es en realidad va a comprobar si se produce un fallo o no, mientras que, en tan sólo un sencillo iguales-iguales, sería cierto si la fila estaba vacía. El resultado de un fallo si hay una colisión entre nombres de usuarios es el valor falso real. Así es como se insertaría en una base de datos. Ésta es la consulta que se ejecuta estrictamente de SQL. Una cosa es que usted puede ir a la página web que administra la base de datos SQL y jugar allí introduciendo manualmente valores o filas. Se dará salida a lo que la salida es SQL. También puede ejecutar comandos SQL en su base de datos  y luego ver lo que la sintaxis sea, y luego traducir eso en la función de consulta que tenemos en pset 7, que va a ser muy similar a las consultas que se ejecutan realmente. Si quisiera insertar una nueva fila en mi tabla de usuarios, entonces me gustaría especificar inserción en los usuarios, que es el nombre de mi mesa. Entonces tuve deseo de especificar los nombres de las columnas. Entonces me proporcionaría los valores junto con mi contraseña. Las contraseñas en nuestra tabla de usuarios no se almacenan como acaba la cuerda. Se almacenan como la versión encriptada, por lo que usted desea ejecutar la cripta función de la contraseña actual, y que le dará el tipo correcto de almacenamiento de la matriz de los usuarios. La ejecución de este insertará una nueva fila en la tabla de usuarios. Para hacer frente a la función de consulta, antes en C que utiliza el signo de porcentaje como un marcador de posición. Del mismo modo, el concepto mismo de un marcador de posición se aplica aquí. Con consulta, se especifica toda la consulta, excepto cuando se trata con variables como su aportación a la consulta, entonces en vez de realmente ponerlas dentro - como cuando teníamos instrucciones printf en C. Nos gustaría poner la cadena y luego tener un marcador de posición de allí, y luego después de cada coma, especificar qué variable que teníamos. Aquí, vamos a utilizar el signo signo de interrogación como nuestro marcador de posición y luego pasar en cada variable, respectivamente, en orden, para los marcadores de posición - donde las variables deben ir. Así que aquí, el signo de interrogación primero se sustituye por el nombre de usuario real entonces el signo de interrogación segundo por la contraseña. Entonces, finalmente, una vez que has registrado y las ha añadido a la base de datos, entonces usted desea para iniciar sesión en el sitio web. Tenemos una especie de súper-global variable de sesión llamada. Sesión toma un identificador determinado, y que corresponde a la ID de usuario que está actualmente conectado Lo que usted querrá hacer es encontrar cuál es su ID de usuario es y después fije ésta identificador de sesión como ese usuario id particular. Una función que usted quiere utilizar aquí es un comando SQL que recuperará el último número introducido id de la tabla. Entonces llamará a filas - it'll llamar al id - it'll asignar un nombre al número que devuelve. Se va a llamar a ese id. Ahora que hemos terminado de registrarse, y podemos pasar a citar. Cita permite a un usuario introducir el nombre de un determinado stock, y entonces va a devolver las cualidades de ese stock. Lo que usted querrá hacer es tener un controlador y algunas plantillas. En este caso, vamos a tener un controlador que se va a hacer todo el pensamiento para nosotros. Va a buscar el símbolo y luego pasar valores al templete que se imprimirá. Vamos a tener dos plantillas aquí. Vamos a tener una plantilla que proporciona la forma en que los usuarios van a introducir el nombre de la población - el nombre del recurso compartido. Entonces también vamos a querer otra plantilla que muestra esos valores. Usted puede mirar en inicio de sesión para un ejemplo de cómo se tiene un formulario que acepta la entrada, salvo aquí, sólo queremos un campo. No queremos un nombre de usuario y un campo de contraseña. Sólo queremos un campo de texto que permite al usuario introducir el nombre de una determinada población. Entonces usted desea enviar los datos - una vez que usted ha mirado hacia arriba de esta población - a quote_form.php. Lookup devuelve el símbolo de una acción, el nombre, y un precio. Los que están contenidos dentro de una matriz asociativa. Busque la función de búsqueda dentro de la functions.php para más información en los tipos de devolución de aquellos. Great! Así que, finalmente, tendrá que mostrar la información. Usted querrá mostrar probable - usted desea tener acceso a esas variables. Una vez que tenga el precio en una variable - así como el nombre y el símbolo - entonces usted querrá mostrar a aquellos en su página de la plantilla. Esa página de la plantilla que se podría llamar show_quote.php o algo así. Su página quote.php haría cita show y luego pasar en todos esos valores. Luego, en su página php, en realidad imprimir esos valores al aspecto HTML de la página. Usted sólo tiene que utilizar la función de impresión y pase el precio. Hay 2 maneras - usted puede o concatenar con el operador punto, o usar un marcador de posición. Los usuarios con el tiempo van a estar comprando y vendiendo acciones. Queremos permitir alguna forma de ver todas las acciones que tienen actualmente. Vamos a llamarlo así su cartera. Portfolio, presumiblemente para cada usuario, contiene un montón de filas enumerando el tipo de participación que tienen y luego cuántos de los que tienen. Nuestra tabla existente - en este momento tenemos una tabla de usuarios en nuestra base de datos. Que contiene nombre de usuario de un usuario así como su contraseña y la cantidad de dinero que tienen. No hay forma real de almacenar la totalidad de sus acciones que incluye. No es como podemos insertar nuevas columnas para cada stock. Eso sería una fila muy, muy largo porque tenemos una cantidad infinita de los tipos de acciones que pudieran tener. Así, en lugar lo que vamos a hacer es dentro de la misma base de datos, vamos a tener una tabla de usuarios, pero también vamos a tener una mesa de cartera. La tabla cartera quedará definitivamente ligado a la tabla de usuarios, sino que la estructura de la tabla cartera tendrá la información, cuántas acciones de esa población tiene el usuario, así como un número de identificación de usuario particular. Usted tiene la tabla de usuarios que tiene una identificación así como el nombre de usuario, el hash - que es la contraseña, la contraseña cifrada - y entonces la cantidad de efectivo que tienen. El número de identificación se vincularían con el número de identificación de la cartera. La cartera sólo tendría el símbolo de las acciones, así como las acciones - el número de acciones de que las acciones que el usuario tiene. En esa mesa cartera tendría que básicamente todas las acciones que posee todos los usuarios de su sitio. Más tarde, para especificar sólo las acciones de un usuario determinado de su cartera - sólo - podrá recuperar los valores de la tabla de su cartera de manera que el número de identificación es específica de ese usuario. Cuando se muestra la cartera, tendrá que reportar cada una de las acciones en cartera de un usuario. Usted querrá informar el número de acciones y el valor actual de esas acciones. Ese valor actual de dichas acciones no se almacena en la tabla de cartera porque eso va a ser la actualización - como mínimo - todos los días por Yahoo. Para obtener esa información, no se puede hacer referencia a que a partir de la consulta SQL. ¿Qué función le importa a nosotros? ¿Qué función tendrá el precio? Eso es de búsqueda, por lo que usar lookup en un símbolo particular le dará una gran cantidad de información. Te dará 3 piezas de información - el nombre, el símbolo, así como el precio. Una vez que buscar un símbolo determinado, entonces usted puede conseguir el precio, y entonces usted puede utilizar el precio que se mostrará en su cartera. La cartera también debe mostrar el equilibrio del usuario efectivo actual. Ese campo se almacena en la tabla de usuarios. Así que recordando cómo estamos, básicamente, tener que - vamos a tener diferentes tipos de archivos PHP. Vamos a tener un controlador que hace, básicamente, todo el pensamiento para ti. Y luego tenemos una plantilla en la que la plantilla se ocupa de los datos de salida. Usted tiene que pensar en lo que las variables del controlador tendrá que tomar pulg Si estamos tratando con una cartera que emite cada nombre, el símbolo y el número de acciones, así como el precio actual de una acción, entonces usted tendrá que encontrar alguna manera de pasar básicamente en - puede pasar una matriz de valores que responden a eso. Vamos a entrar en un ejemplo de cómo se puede recuperar todas las poblaciones propiedad de un usuario particular. Esto no se trata - todavía - con el precio de las acciones. Lo que esto haría es ejecutar una consulta. Sería obtener el símbolo, así como las acciones de - Voy a llamar a esta mesa, pero en este caso, ¿cuál sería? ¿Cuál es el nombre de la tabla que estamos tratando de que tiene un símbolo y acciones para un usuario particular? Es los usuarios o de cartera. Cartera. Lo que esto haría sería cartera de consulta para los símbolos y acciones para un usuario particular. Aquí, digo, (SELECT, símbolo acciones de TBL - pero en lugar de la tabla, usted va a reemplazar que con la cartera. 'Dónde' es básicamente mi condición. Estoy diciendo que sólo quiere conseguir esas matrices asociativas que corresponden  a esta condición siguiente - id iguales.  Entonces me voy a poner un marcador de posición en el acto ID de sesión. Lo que esto haría es decir para cada fila en fila. Esta es una clara forma en lugar de tener que crear un bucle for que se repite en todos los índices, luego en PHP que puede tener una for-each loop. Si usted tiene una matriz determinada, entonces se puede decir que voy a llamar a cada elemento sucesivo - Voy a llamar a cada elemento de este nombre. Así, para cada uno de estos elementos, voy a llamarlos esto, entonces puedo hacer esto. En esto para cada uno, tiene su matriz de filas como real, y cada fila que se va a llamar a filas. Cada vez que se ejecuta el cuerpo, que va a subir y se actualizará la fila al siguiente elemento en filas. Ahora, en términos de la compra de acciones, lo que queremos hacer es conseguir la acción que el usuario quiere comprar y la cantidad de acciones que el usuario quiere comprar, y luego - si se quiere - añadir que las acciones de su cartera. Obviamente, si vas a comprar algo, entonces eso va a disminuir la cantidad de dinero que tienen, por lo que va a disminuir su dinero. Vamos a tener trato con la actualización de la cartera, así como la tabla de usuarios, que contiene la caja. Pero primero, usted necesita para obtener el stock actual y la cantidad de acciones que el usuario desee. Para ello, necesitará un formulario HTML que le pedirá el símbolo de las acciones que desea comprar, así como el número de acciones. Entonces usted desee agregar. Usted tendrá que seleccionar ciertos valores. Hemos pasado por esto un poco ya, pero cuando usted está tratando de obtener ciertas filas - recuperar ciertas filas de la tabla de SQL, esta es la sintaxis siguiente. Has seleccionado, y luego, si se especifica una estrella, que básicamente va a devolver la fila entera, toda para ti. Por otra parte, tiene la condición en la que, a continuación, especifica - Sólo quiero que el nombre de usuario para ser igual a por correo, por lo que sólo se recupera la fila de los usuarios que corresponde al correo. Cuando un usuario desea agregar una acción a una cartera, es necesario comprobar por unos pocos errores. Usted quiere asegurarse de que el usuario realmente puede pagar las acciones, por lo que usted quiere comprobar su efectivo. Antes, solíamos estrella para recuperar toda una fila de una tabla de SQL. Pero aquí, en realidad se puede simplemente especificar que sólo desea un valor - Sólo quiero dinero. Así que aquí, devolvería el dinero en efectivo para el usuario con número de identificación 1. Si un usuario ya ha comprado una acción determinada, pero luego compra más de esa población, entonces en su cartera - que no desea una línea separada, otra fila que contiene esa nueva transacción. Usted realmente quiere actualizar la cantidad. Todo lo que realmente está cambiando es la cantidad de acciones que posee dicho usuario. Si utiliza la consulta INSERT INTO - por lo que acaba de insertar en su cartera todos estos valores - el número de identificación del usuario, así como el símbolo de las acciones que están comprando y las acciones, entonces usted también desea especificar, bueno, si me encuentro con un duplicado de la llave - en este caso, la llave duplicada no es sólo el ID del usuario, sino también el símbolo de la acción - porque sólo se puede tener - nuestra premisa es que sólo se puede tener una fila  que corresponde a 1 símbolo específico. Así, en el duplicado de la llave - si llegas a tener un accidente ahí - te vas a actualizar acciones a su nuevo valor. Acciones igual a lo que teníamos antes, más el número de acciones que el usuario está comprando. Ahora que hemos actualizado la tabla de la cartera, vamos a querer actualizar efectivo del usuario. Eso está en la tabla de usuarios, por lo que vamos a restar una cierta cantidad de dinero en efectivo. Es de suponer que va a ser efectivo es igual a menos dinero en efectivo - y luego de cierta cantidad. Para actualizar el dinero, lo haría - si quería llevarse el dinero de correo, entonces me gustaría ejecutar esta consulta - 'Actualización de los usuarios ya continuación, establezca la columna de efectivo a efectivo - Yo eliminaría 9.999 dólares sólo si el nombre de usuario es igual al correo. Pero, en este caso, no queremos restar 9.999 específicamente. Queremos precisar, además, queremos restar el precio actual de la acción multiplicado por el número de acciones que están comprando. Ahora que hemos permitido que vean todas las acciones que tienen, así como comprar más acciones. También hemos previamente les permitió buscar el precio actual de una acción. Aquí queremos permitir que los venden. En primer lugar queremos mostrar básicamente - queremos que puedan ver todas las acciones que tienen, así que aquí queremos mostrar todas las filas de la cartera. Si optan por vender una acción determinada, entonces vamos a suponer que ellos quieren vender todo. No sólo se va a vender el 50% de sus acciones, que van a vender el 100% de la misma. Sólo puede eliminar la fila completa de la cartera. Podemos eliminar las acciones del usuario en particular del símbolo determinado. Ahí está la sintaxis para eso. Entonces queremos actualizar el efectivo. Vamos a añadir en el efectivo equivalente al importe de las acciones que se están vendiendo multiplicada por el precio actual de la acción - no el precio al que se compró, sino el precio al que están - el precio actual cuando lo están vendiendo. Para hacer referencia al precio actual de una acción, usted tendrá que usar de búsqueda, que le dará el precio de una acción en el momento actual. Ahora nos queda la historia, la que desea permitir a un usuario hacer un seguimiento de todas sus operaciones - quiere ver cada vez que se vende algo, cada vez que compramos una acción. Queremos especificar la hora a la que lo hicieron así como cuántos compraron y qué acciones de la misma era. ¿Tenemos alguna estructura actual, vigente que establece que? Bueno, tenemos cartera que muestra los stocks de números que tiene un usuario una proporción dada. Pero estamos estructurando cartera en la forma en que se actualiza cuando compramos múltiple, mientras que la historia debería - si usted compra 10 acciones de Apple, de la misma, y ​​más tarde vender 5, entonces usted quiere ver a aquellos por separado como acciones separadas, filas separadas. Considerando que la acción de visualizar que en nuestra mesa cartera sólo sería una actualización de esa fila en particular,  por lo que probablemente va a querer otra tabla. En nuestra base de datos, tenemos nuestra tabla de usuarios, tenemos nuestra mesa de la cartera, y ahora es probable que querrá una tabla de historial. Esa tabla de historial puede realizar un seguimiento de la fecha actual, así como el símbolo de la acción particular, así como cuántas acciones, y entonces, ¿qué acción es - si se compra las acciones o si se les vende. Para hacer frente a la fecha, hay un par de maneras que usted puede hacer esto. PHP tiene una manera de hacer el seguimiento de la fecha, que se puede ver a ti mismo. En SQL también se puede utilizar ya sea ahora o indicación de la hora actual. Eso depende de ti. Sólo asegúrese de que cada vez que un usuario compra o vende, se le actualiza su dinero en la tabla de usuarios, se le actualiza las filas en la tabla de carteras, entonces también estaremos actualizando la historia, por lo que van a ser de 3 consultas individuales de SQL que se le llaman allí. Tenemos un montón de funcionalidad ahora. Sólo un par de recordatorios de que en su archivo de índice, usted desea establecer el vínculo por lo menos su - pero usted querrá permitir a un usuario para acceder a la página buy.php. Eso va a permitir a un usuario - buy.php es el controlador, por lo que va a cualquiera de los dos enviar a usted - que va a enviar a la forma que le permite mirar las cosas. Tenemos la historia. Hemos de cerrar la sesión, para conseguir una cita y luego vender. Esos son, como mínimo, lo que quiere mostrar. En términos de la cartera, la cartera se debe mostrar en la página de índice. Si vamos al índice, aquí vemos que se hace portfolio.php y pasa en la matriz asociativa - básicamente el título es igual a la cartera. Por lo tanto, este es el controlador. Si nos vamos a la plantilla de portfolio.php, entonces todo lo que tiene es - básicamente muestra un cuadro que dice, oh, este sitio está en construcción. Más tarde, una vez que pase en - usted puede pasar en la información, básicamente, más específico. En lugar de sólo el título, es probable que se pase en más cosas. Una vez que tenga esos valores, entonces portfolio.php puede hacer frente a esos valores y les imprimir en cualquier tipo de orden. Una vez que haya ejecutado la totalidad de ellos, también es necesario implementar una característica más. Esto se puede permitir que un usuario cambiar su contraseña, para restablecer su contraseña si la ha olvidado - por lo que para el restablecimiento de la contraseña, y luego es probable que también desee editar registrarse para que les permite especificar una dirección de correo electrónico, por lo que si se les olvida su contraseña, entonces se puede conseguir eso. Es probable que pueda entrar en su nombre de usuario, y luego un correo electrónico será enviado a ellos con un enlace para poder restablecer su contraseña. Usted puede tener algo que permite a los usuarios obtener ingresos cada vez que compran o venden algo, y, finalmente, les permiten agregar dinero a su página web. Sólo para ir de nuevo al concepto de los controladores y las plantillas un poco. Vas a tener algo así como un - por lo que tendrá un controlador de aquí. Ahora mismo, estamos viendo el ejemplo login.php. Cuando tenemos un controlador, básicamente se va a tomar 2 casos. Cuando tengamos los controladores, que estamos en esta pieza que también estamos tratando con tipo de cuando tenemos formas también. El controlador tendrá básicamente acciones separadas - uno si un formulario ya ha sido presentada, y luego dos, si el usuario se acerca a esa página por primera vez y todavía necesita de entrada que forma. Voy a ir a ese primer caso antes de subir al primer caso de tener la forma pulg Aquí decimos, si el formulario ha sido enviado con el método post - no te preocupes por eso un poco. No te preocupes por eso mucho, pero entiendo que básicamente se ocupa de esta función si un formulario ha sido enviado o no. Esta condición se cumple si un usuario ha enviado el formulario. Si no, entonces vamos a querer llamar login_form.php render, y luego pasar en el título. Este título sólo está básicamente va a aparecer en la cabecera. Lo que esto hace es, básicamente, dice, está bien - bueno, si un usuario va a login.php y en realidad no ha iniciado sesión, entonces quiero enviar a la página que tiene esa forma lo que les permite introducir el nombre de usuario y la contraseña. Luego voy a login_form, a continuación, que tiene la forma actual. Luego, una vez que el usuario envía esa forma, vamos a presentar a login.php con el método post. Luego de hecho voy a entrar en esta sección de mi if-else bucle. Entonces, es aquí que nos ocupamos de los valores introducidos en el formulario. Es aquí donde nos ocupamos de ellos. Entonces una vez que usted se ocupa de esos valores - si usted está tratando con - decir que estamos tratando con la página quote.php donde alguien puede introducir una acción que que desea buscar, y luego ver que la pantalla - eso es algo similar aquí. Aquí tenemos un formulario de acceso - you'd probablemente tenga un formulario de cotización - pero una vez que el usuario ha hecho que la información presentada, entonces usted desea que el controlador pase a otra plantilla que les mostrará que la información real. Así que por aquí, entonces es probable que - hacia el final de su condición aquí - el si el método es igual post - entonces usted probablemente querrá hacer otra página - la cita show - que le envía a esa página - show_quote.php-- y luego en ese archivo hará referencia a estos valores. ¿Eso tiene sentido? Tenemos un controlador que básicamente se ocupa de los 2 casos - si usted ha entrado en un formulario o no. Si no se ha introducido un formulario, entonces se le redirigirá a ese formulario, que a su vez lo pondrá de nuevo a la página. Luego, una vez que tenga la información en el controlador, ese cuerpo se ocupará de que información si es necesario - ya sea mirando hacia arriba los valores de las acciones, y luego una vez que se levantó la vista y tiene esos valores en una matriz con un formato agradable, A continuación, puede pasar la matriz a la página de la plantilla  que trata de la salida de esa información. Una vez más, desde su web, que va a ser divertido. Estamos fuera de C, así que no está limitado a la ASCII y que la producción terminal, así que se divierte con esto. Puede que sea lo más visual que quieras. Puede permitir a los usuarios a millones de dólares de entrada a la vez, o limitarlos y ser realmente significa y sólo permitirles entrar un centavo a la vez o algo por el estilo. Definitivamente, asegúrese de tener diversión con esto. El código PHP es un poco más simple en que es un poco más fácil de trazar su pseudocódigo en la aplicación real. Así que, definitivamente se divierten con esto porque es realmente nuestra última pieza CS50. Con esto, este fue Tutorial 7. Una vez que haya terminado de ver el tutorial y terminó su conjunto de procesadores, entonces estos también eran conjuntos de procesadores, y ahora estamos en el producto final - después de que recibimos a través de quiz 1. Entonces espero que usted puede utilizar las herramientas que he aprendido de los conjuntos de procesadores - no sólo la sintaxis, pero más la noción abstracta de cómo tomar una cierta - gusta, yo quiero hacer esto y luego implementar realmente eso. Aprender a luchar a través de la sintaxis y el código de distribución. Lectura de código de otras personas, y luego la interpretación de que el uso de las funciones ya existentes. Por lo tanto, buena suerte con el conjunto de procesadores pasado. Ha sido un placer para conducir las visitas guiadas. Espero que haya sido de ayuda para usted. Estos fueron Tutoriales y muchas gracias. [CS50.TV]