[Powered by Google Translate] [Problema Paso a paso de Set 7] [Zamyla Chan] [Harvard University] [Esta é CS50] [CS50.TV] Hola a todos, e ben benvida ao Paso a paso 7, CS50 Finanzas. Agora estamos oficialmente feito con todos os serie de exercicios en CS50, e nós estamos só saíu con unha que vai ser unha aplicación divertido un sitio onde os usuarios poden facer sesión para CS50 Finanzas e mercar e vender accións. Hoxe, nós imos ter algunhas ferramentas á nosa disposición. Nós imos falar sobre permisos. Sempre que ten un cartafol web vai querer para permitir aos usuarios executar determinados ficheiros pero tamén acaba de ler os outros, entón imos ollar para os permisos e como pode definir aqueles. Entón, imos ollar en PHP, HTML e código SQL. En primeiro lugar, permisos. Cando estás no terminal dun determinado directorio, entón o que quere facer é que quere executar o comando chmod. Isto é seguido por letras ou números correspondente ao que basicamente quere que o mundo vexa, vostede mesmo a ver, etc Por exemplo, sempre que ten un cartafol, Entón quere que o cartafol sexa executábel por todos que o ve, Entón, o que faría se pode executar o comando chmod a + x e logo o nome da carpeta. Cando ten un arquivo, como arquivos CSS ou arquivos de imaxe - como JPEGs e bitmaps, cousas así, ou calquera outro código JavaScript - quere que sexa lexible por todos, Entón o que fai é que pode utilizar o comodín - que é un asterisco - basicamente para indicar o cartafol CSS - todo en que cartafol -  Eu vou dicir que iso vai ser lido por todos. Coas permisos, cando usamos as letras, Tamén podemos utilizar números en vez. Entón, vostede ve que finalmente cando quere algo para ser executábel - que é representado polo número 1 - algo para ler é o número 4 e despois - gravábel é o número 2 - e así, esencialmente, cando quere unha combinación destes, entón engade-los. Se queres algo para ler, escribir nel, executable e, entón quere engadir-se 4, 2 e 1, e que lle daría 7, entón cada vez que ten un cartafol que quere que sexa executábel por todos - así como lectura e gravación - entón fai que 7, 1, 1. Iso sería 7 para vostede, entón un para as outras persoas. Cando ten a especificación, que vai realmente especificar que cartafoles e cales arquivos Debe ser chmod-ed especificamente. Por exemplo, cando ten cartafoles - son 7-1-1 - cando ten imaxes ou HTML, CSS, JavaScript, entón os van ser de 6, 0, 4 - ou 6, 4, 4 - e entón os arquivos PHP van ser 6, 0, 0. A idea detrás diso é que os usuarios non deben realmente ver o seu código PHP, pero só ser capaz de ver a saída. Gran! Movéndose para o PHP. Simplemente, sempre que sexa un arquivo PHP, o sufixo do ficheiro é. PHP. Tamén pode mesturar HTML con código PHP. Se ten un ficheiro HTML, por exemplo, entón podes poñelas co ángulo esquerdo, punto de interrogación, php - poñer o seu código PHP - e pecha con outro que punto de interrogación e un ángulo recto. As variables no PHP son moito máis fáciles de tratar que as variables en C. Calquera variable só comeza cun cifrão na fronte del, e eles están feblemente ingresaran. Isto significa que non se preocupe en definir algo igual a unha cadea ou un enteiro. Pode simplemente dicir: este é o meu nome da variable e entón que é o seu valor, polo que vai ser máis fácil de xestionar a existencia. Outra cousa é que o PHP permite que use arrays asociativos. Pode simplemente establecer unha matriz, como faría en C dicindo, cifrão no nome da súa matriz é igual, e, a continuación, entre parénteses rectos ten basicamente só a lista de valores de todos os elementos da matriz. Pero, en PHP que tamén pode facer é basicamente a especificar - É como unha especie de función hash. Vostede pode especificar o índice - o que vai chamalo - e, a continuación, que corresponde a un valor. Se realmente pasar a = 1, b = 2, C = 3, entón a súa matriz no índice sería darlle un. Este pset vai quecelo con algún PHP nunha sección de preguntas, e, entón, mergullo CS50 Finanzas. Temos un par de - temos algunhas funcionalidades, basicamente, para aplicar neste sitio web. Queremos permitir que os usuarios se rexistren no noso sitio con un nome de usuario e un contrasinal. Queremos facer que buscar unha cotización, e entón nós imprimir o nome do marcador, así como o prezo actual, que está. Queremos permitir-lles ver un Cartafol de todas as accións que compraron ata agora. Queremos tamén que lles permitan comprar accións, así como venda-los. E entón, finalmente, queremos permitir que vexan a historia de todas as operacións que fixeron. Entón, finalmente, despois de aplicado de todo isto, entón é libre para aplicar un recurso extra. Imos para aqueles. Aqueles poden ser tanto permitindo aos usuarios obter diñeiro extra, depositando o diñeiro extra, ou podería permitir-lles cambiar o seu contrasinal, ou algo así, envialas un recibo cando comprar ou vender unha acción. Hai unha lista limitada de recursos que pode aplicar-se, de xeito que é a última. Unha vez que este é un sitio web, vostedes tamén teñen moita liberdade para personalizar-lo. Nós fornecen un código CSS, pero está sempre libre para axusta-lo, facela máis agradable, pero que lle está subxacente é unha función básica por iso sempre consulte a especificación sobre o que realmente precisa incluír alí. Tras a especificación, imos estar usando o dispositivo como tamén un servidor. Estará hospedando noso sitio para nós, no seu servidor local. Se seguir estas instrucións e descompactá o código pset 7 de distribución na súa carpeta de servidor virtual host / local,  entón podes só visitar http://localhost/ en Google Chrome no aparello, e entón alcanzar o código que escribiu pset 7. Pset 7 vén con unha morea de código, distribución e espero que we've - a través de todos os serie de exercicios antes deste - habituouse-nos a lectura a través de código de distribución, comprender que as funcións xa son proporcionados, e como podemos ser capaces de utilizar aqueles e as outras funcións que imos estar aplicando. Neste caso, temos tres carpetas. Temos un cartafol HTML, un inclúe carpeta, e un cartafol de modelos. O que imos facer con este tipo de pset é separar o pensamento - o pensamento de programación - do código PHP co aspecto visual real. Nós imos ter un ficheiro PHP que fai todo o pensamento, le na base de datos, imprime cousas, tense declaracións - cousas así - e despois que vou pasar os datos para o noso arquivo de modelo - ou ficheiro template.php. O que vai facer é ler os datos e, a continuación, que vai imprimir lo. Podemos tratar modelos como "burro" en que nós realmente non quero que eles estar facendo unha morea de traballo para calcular as cousas. Queremos que os nosos controladores para facelo. Un pouco sobre iso - imos dar un ollo a algúns dos códigos de distribución. Aquí temos o noso arquivo index.html, e é moi baleiro. Esencialmente, o que fai - di, ben, eu vou esixir que o arquivo configuration.php. Nós non vemos que aí, pero é basicamente chamando o arquivo configuration.php, e realizar iso. Despois de que el fai iso, el vai facer a carteira. Escoitar é unha función, entón sempre que estamos en un controlador, imos chamar renderse, nós imos dar-lle o ficheiro e, a continuación, os datos que estamos pasando, de xeito que vai chamar en especie portfolio.php-de paso en que os datos, de xeito que a bolsa pode tratar con isto. E agora, aquí, temos a nosa forma login.php.  Este é o controlador que basicamente coida da explotación madeireira dentro Aquí, el verifica se un formulario foi enviado a este ficheiro e trata sobre a validación do envío. Nós imos ollar para esa función desculparse. Cando queremos imprimir unha mensaxe de erro, usan desculpas e que pode redireccionar ao usuario a unha páxina específica que pode imprimir a mensaxe de erro específico que indicamos. Continuando, el ha consultar a base de datos - nós entrar en máis do que máis tarde. Entón ve que aquí se un formulario non foi presentado, a continuación, el procesa un formulario. Isto significa que vai login_form.php, entón imos ollar para iso. Login.php é realmente onde vemos o tráfico de HTML co aspecto visual real. Aquí temos unha etiqueta de entrada para o nome do usuario, unha entrada para o contrasinal, así como un botón de envío. Isto é realmente onde o aspecto visual eo formulario HTML vai ser realizada. Aquí, el di que vai ser presentada por un método chamado post. Nós imos para as diferenzas entre os métodos - publicar contra obter, tamén hai algo chamado poñer - imos entrar neses métodos máis tarde, pero para o interese deste pset, Eu altamente incentivos-lo a usar post. Sabemos que, basicamente, unha vez que este formulario é enviado - de login_form.php - a continuación, vai para a acción - login.php - basicamente, pasar todos eses parámetros deses formularios en login.php. Os resultados de forma que están contidos dentro desa matriz asociativa de post. Os índices dos diferentes elementos na matriz post son exactamente o que se especifica aquí. Vostede di que o nome da entrada é de nome de usuario. O nome desta é unha contrasinal. Do mesmo xeito, ve o nome de usuario como o índice do array asociativo alí. Ou tamén a carpeta inclúe, temos este ficheiro funcións que vai ser moi útil. Todas estas funcións son aplicadas para ti. Non precisa especialmente aplicar calquera destes mesmo, pero eles van moi útil. Temos desculpas, que, como eu dixo antes, será, basicamente, imprimir unha mensaxe de erro para unha páxina específica - apology.php. Entón, temos de despejo, por iso, se acaba de chamar de despejo e, a continuación, pasar a variable, a continuación, o levará a unha páxina que ha amosar esta variable para ti. Entón temos logout, que, basicamente, acabar coa sesión de un determinado usuario. Busca vai ser útil. Como estamos lidando con citas e accións, nós imos ser capaces - e é esencialmente tempo real. Necesitamos saber o que estes valores das accións son, por iso temos a función de busca que trata sobre a documentación do Yahoo stocks. Unha vez que ollar para un determinado símbolo dunha acción, el ha voltar a vostede o símbolo de accións así como o nome eo prezo actual do stock. Esa é a función de procura. Entón estamos lidando con MySQL, entón nós imos estar querendo realizar determinadas consultas no noso banco de datos SQL. Temos consulta para tratar - a especie de resumo de algúns isto. Nós imos estar pasando na secuencia de toda a nosa consulta SQL - e todas as variables que van nel - eo que este fai realmente executar iso por nós. En vez de ter que escribir todo isto cada vez que quere consultar - por obter todos os resultados que a consulta - entón podes só chamar a función de consulta, e el vai voltar a vostede - dependendo do que está a usar para a súa consulta - probablemente unha fileira de todos os resultados que corresponden á consulta ou similar. Máis sobre iso máis tarde, porén. Finalmente, debemos páxina, que, como o seu nome suxire, redirecciona a unha páxina diferente. E entón temos render, que nós imos estar chamando un par de veces. Cando está en un controlador, chama facer na páxina do modelo e, a continuación, pasar os valores que o modelo pode tratar con eles. Estes valores son, probablemente, vai ser xestione o tipo de saída que quere para ser amosado na súa páxina do modelo. Okay. Aqueles son as funcións, e hai moito máis a este código de distribución. Convida vostede a pasar por iso e explora-lo vostede mesmo. Ademais, a especificación probablemente leva-lo a través de algúns outros elementos do código de distribución. Aquí está un resumo das funcións atopadas en functions.php. Okay. A primeira tarefa é facer que os usuarios se rexistren no sitio web. Agora, hai un formulario de login no sitio, e é subministrado con algúns usuarios con contrasinal. Pode empregar os nomes de usuario e login, pero quere permitir que as persoas fagan as súas propias usernames e engade-se ao sitio. O esquema de rexistro é moi semellante ao formulario de login, excepto o nome de usuario non é pre-existente, eo usuario tamén debe proporcionar un novo contrasinal, e en seguida, normalmente temos unha confirmación de contrasinal. Unha vez que todas as entradas do usuario que a información, queremos engadila los ao noso banco de datos de usuarios. Nós imos ter unha base de datos - unha base de datos SQL - que imos referenciar. Nese base de datos, nós imos ter unha táboa con todos os usuarios contendo o seu nome de usuario, contrasinal, e tamén canto diñeiro eles teñen. No rexistro, queremos permitir que introduce o. Queremos mostrar que o formulario. Queremos estar seguro de que o seu contrasinal - que entraron un, e despois tamén que os contrasinais coinciden cando entraren dúas veces. Despois de todo isto está feito - asumindo que estes erros son verificados - entón queremos engadir os usuarios para o noso banco de datos. Finalmente, despois de rexistrado, é moi cómodo se non se logar novo Unha vez rexistrado, por iso estamos indo a rexistro-los na web se rexistraron con éxito. A primeira tarefa é para amosar o formulario, e iso é realmente vai ser - este proceso de rexistro enteiro vai ser modelado ben de preto despois do login excepto en vez de login.php pode ter register.php. En vez de login_form.php-que é o modelo - terá rexistrar formulario. Vai querer engadir un campo - un campo de confirmación de contrasinal - no canto de só un nome de usuario eo contrasinal dun. A continuación, queremos comprobar as claves coinciden ou están en branco. Temos o controlador - register.php-que vai coidar de facer esas comprobacións. Cando un formulario é enviado a través do método post, a continuación, todas as variables son contidos dentro da matriz de posto. Quere estar seguro de que o valor da matriz posto no índice de contrasinal corresponde ao elemento de confirmación. Quere estar seguro de que eles non están en branco, e quere estar seguro de que son a mesma cousa. Unha cousa conveniente sobre o PHP é que non precisa usar cadea compare máis. Podemos usar o operador igual é igual  para comprobar que as cadeas son iguais un ó outro. Para o tratamento de erros, vai querer se desculpar. Para desculparse, simplemente chamar a función  e seleccione un tipo de mensaxe que quere para a saída. Vostede, entón, quere engadir o usuario para a base de datos. Ata agora, todo o que teño feito é só tratar localmente cos resultados do formulario. Agora, nós realmente quere engadila los para o noso banco de datos. Para iso, primeiro quere estar seguro de que o usuario non está en branco. Entender que un sitio web, vostede non pode ter varios usuarios co mesmo nome, así que vai querer estar seguro de que cando inserir algo no seu banco de datos - introducir un novo usuario - entón non obtén unha colisión entre un nome de usuario pre-existente eo nome do usuario que o usuario está a tentar enviar. Para iso, unha vez que realizar unha consulta - inserción dun determinado usuario con contrasinal e un importe inicial de diñeiro - unha vez que chama iso de consulta, entón MySQL ha realmente voltar false se falla. A estrutura de usuarios é tal que o nome de usuario é un valor único, entón non pode ter máis dun. Cando tentar introducir unha nova liña con un nome que xa existe, que vai voltar teito - como un falso valor booleano. Unha cousa complicada aquí é que vai querer comprobar que o resultado é o resultado da súa consulta. Se falla, entón vai querer comprobar co seu fornecedor triple-iguais. Iso está realmente a suceder para comprobar se hai un fallo ou non, Considerando que, en só un simple iguala-iguais, sería certo se a liña estaba baleiro. O resultado dun fallo, se hai unha colisión entre nomes de usuario é o valor real falso. Aquí está como ía introducir nun banco de datos. Aquí é a consulta que ten que executar estrictamente en SQL. Unha cousa é que realmente pode ir ao sitio web que xestiona a base de datos SQL e xogar alí escribindo manualmente valores ou liñas. El ha amosar o que a saída SQL é. Tamén pode executar comandos SQL dentro do seu banco de datos  e despois ver o que a sintaxe pode ser, e despois traducir iso en función de consulta que temos en pset 7, que vai ser moi semellante ao das consultas que realmente executados. Se eu quería introducir unha nova liña na miña táboa de usuarios, entón quere especificar inserción en usuarios, que é o nome da miña mesa. Entón quere especificar os nomes das columnas. Entón eu ía ofrecer os valores xunto con o meu contrasinal. Contrasinais na nosa táboa de usuarios non son almacenados só como secuencia de caracteres. Eles son almacenados como a versión cifrada, de forma que quere executar a función crypt na contrasinal real, e que lle vai dar o tipo correcta de almacenamento para a matriz usuarios. Executar este ha inserir unha nova liña na súa táboa de usuarios. Para xestionar a función de consulta, antes en C usan o sinal de porcentaxe como un espazo reservado. Do mesmo xeito, o mesmo concepto de un espazo reservado se aplica aquí. Con consulta, se especifica a consulta enteira, excepto cando está lidando con variables como a súa contribución para a consulta, a continuación, en vez de realmente poñer-los dentro - como cando tivemos declaracións printf en C. Queremos poñer a corda e despois ter un espazo reservado, e entón despois de cada coma, especificar cal variable que tiñamos. Aquí, nós estamos indo a usar o sinal de interrogación como o noso espazo reservado e, a continuación, pasar cada variable, respectivamente, para os espazos reservados - onde estas variables deben ir. Entón, aquí, o primeiro punto de interrogación sería substituído polo nome de usuario real a continuación, o punto de interrogación segunda pola contrasinal. Entón, finalmente, unha vez que rexistrou e engadido á base de datos, Entón quere rexistro-los no sitio web. Temos unha especie de super-sesión global variable chamada. Session leva un certo número de identificación, e que se corresponde coa ID do usuario que está actualmente conectado Pol O que quere facer é atopar o seu ID de usuario é e defina o ID da sesión como ID de que determinado usuario. Unha función que vai querer usar aquí é un comando SQL que pode recuperar o número de identificación último inserido na súa mesa. Entón vai chamar liñas - isto chamar o ID - isto asignar un nome para o número que retorna. El vai chamar iso de id. Agora que xa rematou rexistrar, e podemos pasar por citar. Cita permite que un usuario introduza o nome de unha determinada acción, e entón el vai volver as calidades deste stock. O que vai querer facer aquí é ter un controlador e algúns modelos. Neste caso, nós imos ter un controlador que vai facer todo o pensamento para nós. Vai buscar o símbolo e, a continuación, pasar valores para os modelos que ha imprimir. Nós imos ter dous modelos aquí. Nós imos ter un modelo que ofrece a forma en que os usuarios están indo para nome de entrada do stock - o nome da acción. Entón nós tamén imos querer outro modelo que exhibe estes valores. Podes ollar para entrar un exemplo de como tería un formulario que acepta entrada, excepto aquí, nós só queremos un campo. Nós non queremos un nome de usuario e un campo de contrasinal. Nós só queremos un campo de texto que permite ó usuario inserir o nome dun determinado. Entón quere enviar os datos - unha vez que mirou para que o stock - para quote_form.php. Lookup devolverá o símbolo dunha acción, o nome, e un prezo. Aqueles están contidos dentro dun array asociativo. Olle-se a función de busca dentro do functions.php para máis información sobre os tipos de retorno daqueles. Gran! Entón, finalmente, vai querer amosar a información de stock. Probablemente vai querer amosar - queres acceder estas variables. Despois de ter o prezo nunha variable - , Así como o nome e símbolo - entón vai querer amosar os na súa páxina do modelo. Ese modelo de páxina podería ser chamado show_quote.php ou algo así. A súa páxina quote.php tornaría cita concerto e despois pasar todos eses valores. Entón, na súa páxina php, realmente imprimir eses valores para o aspecto HTML da páxina. É só usar a función de impresión e pasar o prezo. Hai 2 xeitos - pode concatenar co operador punto, ou usar un espazo reservado. Os usuarios, finalmente, van ser de compra e venda de accións. Queremos permitir-lles algunha forma de ver todas as accións que teñen actualmente. Imos chamar iso da súa carteira. Bolsa sería, presuntamente, para cada usuario, pode ter un monte de liñas list tipo de acción que teñen e, entón, como moitos dos que teñen. Nosa mesa existente - agora temos unha táboa de usuarios na nosa base de datos. Que contén o nome de usuario, así como a súa contrasinal e canto diñeiro eles teñen. Non hai ningunha maneira real de almacenar todas as súas accións dentro diso. Non é como podemos inserir novas columnas para cada stock. Iso sería unha liña moito, moito tempo, porque temos unha cantidade infinita de tipos de accións que poderían. Así, en vez que imos facer é dentro do mesmo banco de datos, imos ter unha táboa de usuarios, pero a continuación, tamén teremos unha táboa carteira. A táboa a carteira será definitivamente ligada á táboa de usuarios, pero a estrutura da táboa carteira terá a información sobre accións, cantas partes de que o stock o usuario ten, , Así como un número de identificación de usuario particular. Ten a táboa de usuarios que ten o id, así como o nome de usuario, a suma - cal é o contrasinal, o contrasinal criptografada - e, a continuación, a cantidade de diñeiro que eles teñen. O número de identificación estaría ligado ao número de identificación da carteira. A carteira tería só o símbolo do stock, así como as accións - o número de accións que o stock que o usuario ten. Nesta táboa carteira que tería basicamente todas as accións posuídas por todos os usuarios do seu sitio. Máis tarde, especifica partes dun determinado usuario - só a súa carteira - vostede recuperar os valores da táboa do seu Cartafol de tal xeito que o número de identificación é específico para ese usuario. Cando mostrar o carné, quere denunciar cada unha das accións en carteira do usuario. Vai querer saber o número de accións eo valor actual das accións. Que o valor actual das referidas accións non son almacenados na táboa de carteira porque iso vai estar a actualizar - como mínimo - cada día polo Yahoo. Para obter esa información, non pode facer referencia que a partir da súa consulta SQL. Cal é a función que ofrece para nós? Que función terá o prezo? Isto é pescuda, polo tanto, usando investigación nun símbolo particular vai dar unha morea de información. El lle vai dar tres pezas de información - o nome, o símbolo, así como o prezo. Despois de buscar un determinado símbolo, entón podes obter o prezo, e entón pode utilizar o prezo a ser exhibido no seu Cartafol. A carteira tamén debe amosar saldo do usuario de caixa actual. Este campo é almacenada dentro da súa táboa de usuarios. Entón lembrando como estamos, basicamente, ter que - Estamos tendo distintos tipos de arquivos PHP. Nós imos ter un controlador que basicamente fai todo o pensamento para ti. E entón temos un modelo no que o modelo traballa con saída de datos. Ten que pensar sobre o que as variables do controlador necesitará tomar polgadas Se estamos lidando con un Cartafol que xera todo o nome, símbolo e número de partes, así como o prezo actual dunha acción, a continuación, vai querer atopar unha forma de, basicamente, pasando - pode pasar nunha matriz de valores que corresponden a ese. Imos a un exemplo de como pode recuperar todas as accións propiedade dun usuario en particular. Isto non está lidando - aínda - o prezo das accións. O que isto ía facer é realizar unha consulta. Sería obter o símbolo, así como as partes - Eu estou chamando esta táboa, pero, neste caso, o que sería? Cal é o nome da táboa que estamos lidando con que símbolo e partes para un usuario específico? É usuarios ou carteira. Bolsa. O que isto faría é portfolio de consulta para os símbolos e as partes para un usuario específico. Aquí, eu digo, (símbolo SELECT, accións de tbl - pero en vez de mesa, vostede vai substituír aquel con carteira. "Onde" é basicamente a miña condición. Eu estou dicindo que eu só quero obter esas matrices asociativas que corresponden  a esta condición seguinte - Id iguais.  Entón eu estou poñendo un espazo reservado alí e despois ID da sesión. O que isto ía facer é dicir para cada liña en liñas. Esta é unha maneira elegante no canto de realmente ter que crear un loop que itera sobre todos os índices, a continuación, en PHP pode ter un para-cada loop. Se vostede ten unha determinada matriz, entón podes dicir que eu vou chamar a cada elemento sucesivo - Vou chamar a cada elemento este nome. Así, para cada un destes elementos, eu vou chamalos de agasallo, entón eu podo facer iso. Neste para cada un, ten liñas como a súa matriz real, e cada liña que vai conectar liña. Cada vez que executa o corpo, vai subir e vai actualizar a liña para o seguinte elemento liñas. Agora, en termos de compra de stocks, o que queremos facer é obter o stock que o usuario quere comprar ea cantidade de accións que o usuario quere mercar, e despois - se quixeren - engadir que accións para a súa carteira. Obviamente, se eles están a mercar algo, entón iso vai diminuír a cantidade de diñeiro que eles teñen, a fin de que vai diminuír o seu diñeiro. Nós imos estar lidando coa actualización da carteira, así como a táboa de usuarios, o cal contén o diñeiro. Pero, primeiro, ten que para obter o stock real ea cantidade de accións que o usuario quere. Para iso, vai ter un formulario HTML que vai pedir para o símbolo do stock que quere mercar, así como o número de accións. Entón quere engadir. Vai querer escoller valores. Pasamos por iso un pouco xa, pero cando está intentando obter determinadas liñas - recuperar determinadas liñas da táboa SQL, esta é a seguinte sintaxe. Seleccionar, e en seguida, se especificar unha estrela, que vai basicamente voltar a liña, todo enteiro para ti. Entón, de novo, ten a condición en que, e entón se especifica - Eu só quero o nome de usuario para ser igual-e, por iso só vai recuperar a liña usuarios que corresponde ao correo-in. Cando un usuario quere engadir un intercambio de unha carteira, Debe comprobar algúns erros. Quere estar seguro de que o usuario realmente pode ter recursos para as accións, así que vai querer comprobar o seu diñeiro. Antes, costumávamos estrela para recuperar unha liña enteira dunha táboa SQL. Pero aquí, podemos realmente só especificar que eu só quero un valor - Eu só quero o diñeiro. Entón, aquí, sería devolver o diñeiro para o usuario ID de número 1. Se un usuario xa comprou unha determinada acción, pero despois compra máis que o stock, a continuación, na súa carteira - non quere unha liña separada, outra liña que contén esa nova transacción. Realmente quere actualizar a cantidade. Todo o que está cambiando é realmente a cantidade de accións que o usuario ten. Se usar a consulta INSERT INTO - Entón é só introducir o seu Cartafol todos estes valores - o número de ID de usuario, así como o símbolo da acción que está a mercar e as partes, entón tamén vai querer especificar, así, se eu me deparou con unha copia da chave - neste caso, a clave duplicada non é só o ID de usuario, pero tamén o símbolo stock - porque só pode ter - a nosa premisa é que pode ter só unha liña  que corresponde a un símbolo en particular. Entón, en clave duplicada - se ten unha colisión alí - está indo só para actualizar partes do seu novo valor. Accións iguala todo o que tiña antes de máis o número de accións que o usuario está a mercar. Agora que nós actualizamos a táboa de Cartafol, imos querer actualizar cartos do usuario. Que está na táboa de usuarios, polo que estamos indo a ser subtraindo unha certa cantidade de diñeiro. Presuntamente, que vai ser diñeiro é igual a menos diñeiro - e despois dun determinado importe. Para actualizar o diñeiro, faría - se eu quería facer diñeiro correo-e, entón quere realizar esta consulta - «Usuarios de actualización" e defina a columna de caixa de diñeiro - Quere eliminar dólares 9.999 só o nome de usuario é igual ao correo-in. Pero, neste caso, non queremos restar 9.999 especificamente. Queremos indicar, tamén, queremos restar o prezo actual da acción multiplicado polo número de accións que están a mercar. Agora lles permitiu ver todas as accións que teñen, así como comprar máis accións. Tamén xa lles permitiu mirar para arriba o prezo actual de un stock. Aquí, queremos permitir que venden. Primeiro queremos amosar basicamente - queremos permitir que vexan todas as accións que teñen, Entón, aquí queremos mostrar todas as liñas do Cartafol. Se decide vender unha determinada acción, entón imos supor que eles queren vender de todo. Eles non son só vai vender un 50% das súas accións, eles van vender 100% del. Podemos simplemente borrar a liña enteira da carteira. Podemos borrar partes do usuario do símbolo correcto. Non é a sintaxe para iso. Entón queremos actualizar o diñeiro. Nós imos estar engadindo o diñeiro igual á cantidade de accións que están a ver multiplicado polo prezo actual da acción - non o prezo a que comprou, pero o prezo a que son - o prezo actual cando eles están a ver. Para referenciar o prezo actual dunha acción, vai querer usar de investigación, o que lle dará o prezo dunha acción no momento actual. Agora ficamos coa historia, que desexa permitir que un usuario para manter o control de todas as súas operacións - quere ver sempre que vendeu algo, sempre que compraron un stock. Queremos indicar o momento en que eles fixeron iso, así como cantos eles compraron eo que era stock. Non temos ningún estrutura, actual existente, que especifica que? Ben, temos carteira que exhibe os stocks número que un usuario ten por unha parte determinada. Pero estamos estruturando carteira de xeito que actualiza cando compramos múltiple, mentres que a historia debe - se mercar de Apple, 10 partes do mesmo, e, posteriormente, vender 5, entón desexa ver os separadamente como accións separadas, liñas separadas. Considerando que a acción de ver que na nosa mesa portfolio sería só unha actualización para que determinada liña,  por iso estamos probablemente vai querer outra táboa. No noso banco de datos, temos a nosa táboa de usuarios, temos a nosa táboa de Cartafol, e agora probablemente vai querer unha táboa de histórico. Esta táboa de histórico pode seguir a data actual, así como o símbolo de acción particular, así como cantas accións, e entón o que é acción - se fose mercar esas accións ou se estaba a ver. Para tratar con data, hai un par de formas que pode facelo. PHP ten unha forma de manter o control de data, o que pode ollar-se a si mesmo. En SQL tamén pode usar agora ou timestamp actual. Isto é con vostede. Só asegúrese de que cada vez que un usuario compra ou vende, vai estar a actualizar o seu diñeiro na táboa de usuarios, vai estar a actualizar as liñas na táboa de carteiras, entón tamén vai estar a actualizar a historia, entón non van ser separados 3 consultas SQL que estará chamando alí. Temos unha morea de funcionalidade agora. Só un par de recordatorios de que no seu ficheiro de índice, vai querer obrigar a polo menos o - pero vai querer permitir que un usuario de conexión para a páxina buy.php. Isto vai permitir que un usuario - buy.php é o controlador, polo que vai, quere Enviar a - que vai mandalo para a forma que lle permite ollar as cousas. Temos historia. Temos a sesión, obter unha cotización e despois vender. Estas son, como mínimo, o que quere amosar. En termos de carteira, a carteira é realmente mostra na páxina de índice. Ou tamén ao índice, aquí vemos que fai portfolio.php e pasa a matriz asociativa - basicamente o título é igual a carteira. Entón, este é o controlador. Ou tamén para o modelo de portfolio.php, entón todo o que ten é - basicamente exhibe unha imaxe que di, oh, este sitio está en construcción. Máis tarde, unha vez que pasar - vostede estar pasando información basicamente máis específico. En vez de só o título, probablemente vai estar pasando en máis cousas. Unha vez que ten eses valores, entón portfolio.php pode tratar con eses valores e imprimir-los en calquera tipo de orde. Despois de aplicar todo isto, tamén precisa implementar unha característica máis. Isto pode ser permitir que un usuario cambiar o seu contrasinal, para axustar o teu contrasinal se esqueceron que - así a redefinición de contrasinal, a continuación, Probablemente tamén quere editar rexistrar para que lles permite especificar un correo electrónico, así que asegúrese o seu contrasinal, entón eles poden conseguir isto. Eles probablemente pode entrar no seu nome de usuario e, a continuación, un correo electrónico será enviado a eles con un link para poder axustar o teu contrasinal. Pode ter algo que permite aos usuarios obter recibos cada vez que comprar ou vender algo, e, finalmente, permitir-lles para engadir diñeiro para o seu sitio. Así que volver para o concepto de controladores e modelos un pouco. Vai ter algo así como un - así vai ter un controlador aquí. Agora, nós estamos mirando para o exemplo login.php. Cando temos un controlador, basicamente iso vai levar dous casos. Cando temos controladores, estamos nesa parte que somos tamén unha especie de xestionar cando temos formas tamén. O controlador ten basicamente accións separadas - unha un formulario xa foi presentado, e despois dous, se o usuario está chegando a esta páxina , Por primeira vez e aínda que de entrada que forma. Eu estou indo a ir a ese primeiro caso antes de subir ao primeiro caso de ter a forma dentro Aquí nós dicimos, o formulario foi sometido o post método - non se preocupe con iso un pouco. Non te preocupes moito sobre iso, pero entender que esta función, basicamente, trátase un formulario foi sometido ou non. Esta condición é verdadeira se o usuario ten presentado o formulario. Se non, entón imos querer chamar login_form.php renderse, e despois pasar no título. Este título é basicamente só vai aparecer na cabeceira. O que isto fai é basicamente di, ok - ben, se un usuario vai para login.php e non ten realmente conectado, entón eu quero mandalos para a páxina que ten que forman o que lles permite introducir o nome de usuario e contrasinal. Entón eu vou para login_form e que ten a forma real. Entón, unha vez que o usuario alega que forma, eles van enviá-lo para login.php co método de post. Entón eu estou indo realmente para entrar nesta sección do meu loop se else. Entón é aquí que lidamos cos valores inseridos no formulario. É aquí que temos que tratar con isto. Entón, despois de tratar con estes valores - se está lidando con - dicir que estamos lidando coa páxina quote.php onde alguén pode introducir un stock que eles queren mirar para arriba, e despois ver que a exhibición - ese é o tipo de semellante aquí. Aquí temos un formulario de login - you'd probablemente ten un formulario de cotización - pero, a continuación, unha vez que o usuario teña realmente presentado esta información, entón vai querer o controlador pasar a outro modelo que debería amosar-lles que a información real. Entón seguro por aquí, entón probablemente vai - todo o final da súa condición aquí - se o método é igual a post - entón probablemente vai querer facer outra páxina - a cita concerto - que lle envía a esta páxina - show_quote.php - e despois no arquivo que ha referenciar eses valores. Isto ten sentido? Temos un controlador que trata basicamente cos dous casos - se introduciu unha forma ou non. Se non ten inserido un formulario, el ha redireccionándoos para esa forma, que, entón, poñer-lo de volta para aquela páxina. Entón, unha vez que tes a información no controlador, o corpo vai tratar con isto información necesaria - ou busca-valores para o stock, e, a continuación, unha vez que é mirou eses valores e los nunha matriz cun formato, entón pode pasar ese array para a páxina do modelo  que trata sobre a saída desa información. Unha vez máis, unha vez que en Internet, que vai ser divertido. Estamos fóra do C de xeito que non está limitado ao ASCII e que a saída da terminal, para divertirse con iso. Podes facelo tan visual como quere. Pode permitir que os usuarios de entrada de millóns de dólares en un momento, ou limitalos los e ser realmente significa e permitir-lles só para entrar nunha moeda de un centavo de cada vez ou algo así. Definitivamente non se esqueza de divertirse con iso. PHP código é un pouco máis simple, que é un pouco máis fácil de trazar o seu pseudocódigo para a implantación real. Así, con certeza divertirse con iso, porque é realmente a nosa última peza no CS50. Con iso, este foi Paso a paso 7. Unha vez que termine de asistir o paso a paso e terminou a súa pset, a continuación, estes foron tamén serie de exercicios, e agora estamos no o produto final - despois de pasar por exame 1. Entón, espero que pode usar as ferramentas que aprendeu coas serie de exercicios - non só a sintaxe, pero máis a noción abstracta de como tomar un certo - gusto, quero facer iso e entón realmente implementar isto. Aprender a loitar pola sintaxe e código de distribución. Lectura de código de outras persoas, e entón interpretar que o uso de pre-existentes funcións. Entón, boa sorte co pset pasado. Foi un pracer levar as orientacións. Espero que sexan útiles para ti. Estes foron paso a paso, e moitas grazas. [CS50.TV]