[Powered by Google Translate] [Problema Passo a passo Set 7] [Zamyla Chan] [Harvard University] [Esta é CS50] [CS50.TV] Olá a todos, e bem vindo ao Passo a passo 7, CS50 Finanças. Agora estamos oficialmente feito com todos os Série de Exercícios em CS50, e nós estamos apenas saiu com mais uma que vai ser uma implementação divertido de um site onde os usuários podem fazer login para CS50 Finanças e comprar e vender ações. Hoje, nós vamos ter algumas ferramentas à nossa disposição. Nós vamos falar sobre permissões. Sempre que você tem uma pasta web, você vai querer para permitir aos usuários executar determinados arquivos mas também acabou de ler os outros, então vamos olhar para as permissões e como você pode definir aqueles. Então, vamos olhar em PHP, HTML e código SQL. Primeiro, permissões. Quando você está no terminal de um determinado diretório, então o que você quer fazer é que você quer executar o comando chmod. Isso é seguido por letras ou números correspondente ao que você basicamente quer que o mundo veja, você mesmo a ver, etc Por exemplo, sempre que você tem uma pasta, então você quer que a pasta seja executável por todos que o vê, Então, o que você faria se você pode executar o comando chmod a + x e em seguida o nome da sua pasta. Quando você tem um arquivo, como arquivos CSS ou arquivos de imagem - como JPEGs e bitmaps, coisas assim, ou qualquer outro código JavaScript - você quer que seja legível por todos, Então o que você faz é que você pode usar o curinga - que é um asterisco - basicamente para indicar a pasta CSS - tudo em que pasta -  Eu vou dizer que isso vai ser lido por todos. Com as permissões, quando usamos as letras, também podemos usar números em vez. Então, você vê que, finalmente, quando você quer algo para ser executável - que é representado pelo número 1 - algo para ser lido é o número 4 e depois - gravável é o número 2 - e assim, essencialmente, quando você quer uma combinação desses, então você adiciona-los. Se você quer algo para ser lido, gravável, executável e, então você gostaria de acrescentar-se 4, 2 e 1 e que lhe daria 7, então sempre que você tem uma pasta que você quer que seja executável por todos - bem como leitura e gravação - então você faz que 7, 1, 1. Isso seria 7 para você, então um para as outras pessoas. Quando você tem a especificação, ele vai realmente especificar quais pastas e quais arquivos precisa ser chmod-ed especificamente. Por exemplo, quando você tiver pastas - são 7-1-1 - quando você tem imagens ou HTML, CSS, JavaScript, então aqueles vão ser de 6, 0, 4 - ou 6, 4, 4 - e então os arquivos PHP vão ser 6, 0, 0. A idéia por trás disso é que os usuários não devem realmente ver o seu código PHP, mas apenas ser capaz de ver a saída. Ótimo! Movendo-se para o PHP. Simplesmente, sempre que você quiser um arquivo PHP, o sufixo do arquivo é. Php. Você também pode misturar HTML com código PHP. Se você tem um arquivo HTML, por exemplo, então você pode colocá-lo com o ângulo esquerdo, ponto de interrogação, php - colocar o seu código php - e feche com outro que ponto de interrogação e um ângulo reto. As variáveis ​​no PHP são muito mais fáceis de lidar do que as variáveis ​​em C. Qualquer variável só começa com um cifrão na frente dele, e eles estão fracamente digitado. Isso significa que você não precisa se preocupar em definir algo igual a uma string ou um inteiro. Você pode simplesmente dizer: este é o meu nome da variável e então este é o seu valor, por isso vai ser mais fácil de lidar com a existência. Outra coisa é que o PHP permite que você use arrays associativos. Você pode simplesmente definir uma matriz, como você faria em C dizendo, cifrão no nome de sua matriz é igual, e, em seguida, entre parênteses rectos tem basicamente apenas a lista de valores de todos os elementos da matriz. Mas, em PHP que você também pode fazer é basicamente a especificar - É como uma espécie de função hash. Você pode especificar o índice - o que você vai chamá-lo - e, em seguida, que corresponde a um valor. Se realmente passar a = 1, b = 2, c = 3, então a sua matriz no índice seria dar-lhe um. Este pset vai aquecê-lo com algum PHP em uma seção de perguntas, e, então, mergulhar CS50 Finanças. Nós temos um par de - temos algumas funcionalidades, basicamente, para implementar neste site. Queremos permitir que os usuários se registrem no nosso site com um nome de usuário e uma senha. Queremos permitir que procurar uma cotação, e então nós imprimir o nome da citação, bem como o preço atual, que está. Queremos permitir-lhes ver um portfólio de todas as ações que eles compraram até agora. Queremos também que lhes permitam comprar ações, bem como vendê-los. E então, finalmente, queremos permitir que eles vejam a história de todas as operações que eles fizeram. Então, finalmente, depois de ter implementado de tudo isso, então você é livre para implementar um recurso extra. Vamos para aqueles. Aqueles podem ser tanto permitindo aos usuários obter dinheiro extra, depositando o dinheiro extra, ou você poderia permitir-lhes alterar sua senha, ou algo assim, enviá-las um recibo quando comprar ou vender uma ação. Há uma lista limitada de recursos que você pode implementar-se, de modo que é a última. Uma vez que este é um site, vocês também têm muita liberdade para personalizá-lo. Nós fornecemos um código CSS, mas você está definitivamente livre para ajustá-lo, torná-la mais agradável, mas que lhe está subjacente é uma funcionalidade básica por isso sempre consulte a especificação sobre o que você realmente precisa incluir lá. Após a especificação, vamos estar usando o aparelho como também um servidor. Vai estar hospedando nosso site para nós, em seu servidor local. Se você seguir estas instruções e descompacte o código pset 7 de distribuição em sua pasta de host virtual host / local,  então você pode apenas visitar http://localhost/ no Google Chrome no aparelho, e então você atingir o código em que você escreveu pset 7. Pset 7 vem com um monte de código, distribuição e espero que we've - através de todos os Série de Exercícios antes deste - habituou-nos a leitura através de código de distribuição, compreender quais as funções já são fornecidos, e como podemos ser capazes de usar aqueles e as outras funções que nós vamos estar implementando. Neste caso, temos três pastas. Nós temos uma pasta HTML, um inclui pasta, e uma pasta de modelos. O que vamos fazer com este tipo de pset é separar o pensamento - o pensamento de programação - do código PHP com o aspecto visual real. Nós vamos ter um arquivo PHP que faz todo o pensamento, lê no banco de dados, imprime coisas, tem se declarações - coisas assim - e depois que vou passar os dados para o nosso arquivo de modelo - ou arquivo template.php. O que vai fazer é ler os dados e, em seguida, ele vai imprimi-lo. Podemos tratar modelos como "burro" em que nós realmente não quero que eles estar fazendo um monte de trabalho para calcular as coisas. Queremos que os nossos controladores para fazer isso. Um pouco sobre isso - vamos dar uma olhada em alguns dos códigos de distribuição. Aqui nós temos o nosso arquivo index.html, e é muito vazio. Essencialmente, o que ele faz - diz, bem, eu vou exigir que o arquivo configuration.php. Nós não vemos isso aí, mas é basicamente chamando o arquivo configuration.php, e executar isso. Depois que ele faz isso, ele vai tornar a carteira. Escutar é uma função, então sempre que estamos em um controlador, vamos chamar render, nós vamos dar-lhe o arquivo e, em seguida, os dados que estamos passando em, de modo que ele vai chamar em espécie portfolio.php-de passagem em que os dados, de modo que a carteira pode lidar com isso. E agora, aqui, temos a nossa forma login.php.  Este é o controlador que basicamente cuida da exploração madeireira dentro Aqui, ele verifica se um formulário foi enviado a este arquivo e lida com a validação do envio. Nós vamos olhar para essa função se desculpar. Quando queremos imprimir uma mensagem de erro, usamos desculpas e que irá redirecionar o usuário para uma página específica que irá imprimir a mensagem de erro específica que nós indicamos. Continuando, ele irá consultar o banco de dados - nós entrar em mais do que mais tarde. Então você vê que aqui se um formulário não foi apresentado, em seguida, ele processa um formulário. Isso significa que ele vai para login_form.php, então vamos olhar para isso. Login.php é realmente onde nós vemos o tráfico de HTML com o aspecto visual real. Aqui temos um tag de entrada para o nome do usuário, uma entrada para a senha, bem como um botão de envio. Isso é realmente onde o aspecto visual eo formulário HTML vai ser realizada. Aqui, ele diz que vai ser apresentada por um determinado método, chamado post. Nós vamos para as diferenças entre os métodos - postar contra obter, também há algo chamado colocar - vamos entrar nesses métodos mais tarde, mas para o interesse deste pset, Eu altamente incentivá-lo a usar post. Sabemos que, basicamente, uma vez que este formulário é enviado - de login_form.php - em seguida, ele vai para a ação - login.php - basicamente, passar em todos esses parâmetros desses formulários em login.php. Os resultados de forma que estão contidos dentro dessa matriz associativa de pós. Os índices dos diferentes elementos na matriz pós são exatamente o que você especificar aqui. Você diz que o nome da entrada é de nome de usuário. O nome desta é uma senha. Da mesma forma, você vê o nome de usuário como o índice do array associativo lá. Se formos para a pasta inclui, temos este arquivo funções que vai ser muito útil. Todas estas funções são implementadas para você. Você não precisa especificamente implementar qualquer um desses mesmo, mas eles vão bastante útil. Nós temos desculpas, que, como eu disse antes, será, basicamente, imprimir uma mensagem de erro para você em uma página específica - apology.php. Então, temos de despejo, por isso, se você acabou de chamar de despejo e, em seguida, passar a variável, em seguida, ele o levará para uma página que irá exibir essa variável para você. Então nós temos logout, que, basicamente, acabar com a sessão de um determinado usuário do. Pesquisa vai ser útil. Como estamos lidando com citações e ações, nós vamos ser capazes - e é essencialmente tempo real. Precisamos saber o que esses valores das ações são, por isso temos a função de pesquisa que lida com a documentação do Yahoo estoques. Uma vez que você olhar para um determinado símbolo de uma ação, ele irá retornar para você o símbolo de ações bem como o nome eo preço atual do estoque. Essa é a função de pesquisa. Então estamos lidando com o MySQL, então nós vamos estar querendo executar determinadas consultas em nosso banco de dados SQL. Temos consulta para lidar - a espécie de resumo de alguns isso. Nós vamos estar passando na seqüência de toda a nossa consulta SQL - e todas as variáveis ​​que vão nele - eo que este faz é realmente executar isso por nós. Em vez de ter que escrever tudo isso a cada vez que você deseja consultar - por obter todos os resultados de que a consulta - então você pode apenas chamar a função de consulta, e ele vai voltar para você - dependendo do que você está usando para sua consulta - provavelmente uma fileira de todos os resultados que correspondem a consulta ou similar. Mais sobre isso mais tarde, porém. Finalmente, temos de redirecionamento, que, como o nome sugere, redireciona para uma página diferente. E então nós temos render, que nós vamos estar chamando um par de vezes. Quando você está em um controlador, você chama tornar na página do modelo e, em seguida, passar os valores que o modelo irá lidar com eles. Esses valores são, provavelmente, vai ser lidar com o tipo de saída que você deseja para ser mostrado em sua página do modelo. Okay. Aqueles são as funções, e há muito mais a este código de distribuição. Convido você a passar por isso e explorá-lo você mesmo. Além disso, a especificação provavelmente levá-lo através de alguns outros elementos do código de distribuição. Aqui está um resumo das funções encontradas em functions.php. Okay. A primeira tarefa é permitir que os usuários se registrem no site. Agora, há um formulário de login no site, e você é fornecido com alguns usuários com senhas. Você pode usar os nomes de usuário e login, mas você deseja permitir que as pessoas façam suas próprias usernames e adicione-se ao site. O layout de registro é bastante semelhante ao formulário de login, exceto o nome de usuário não é pré-existente, eo usuário também precisa fornecer uma nova senha, e em seguida, normalmente temos uma confirmação de senha. Uma vez que todas as entradas do usuário de que a informação, queremos adicioná-los ao nosso banco de dados de usuários. Nós vamos ter um banco de dados - um banco de dados SQL - que vamos referenciar. Nesse banco de dados, nós vamos ter uma tabela com todos os usuários contendo o seu nome de usuário, sua senha, e também quanto dinheiro eles têm. No registo, queremos permitir que insira-o. Queremos mostrar que o formulário. Nós queremos ter certeza de que a sua senha - que eles entraram um, e depois também que as senhas coincidem quando eles entrarem duas vezes. Depois de tudo isso é feito - assumindo que esses erros são verificados - então queremos adicionar os usuários para o nosso banco de dados. Finalmente, depois de ter registado, é muito conveniente se você não precisa se logar novamente Uma vez registrado, por isso estamos indo para registrá-los no site se eles registrados com êxito. A primeira tarefa é para exibir o formulário, e isso é realmente vai ser - esse processo de registro inteiro vai ser modelado bem de perto após o login exceto em vez de login.php você pode ter register.php. Em vez de login_form.php-que é o modelo - você terá registar formulário. Você vai querer adicionar mais um campo - um campo de confirmação de senha - em vez de apenas um nome de usuário ea senha de um. Em seguida, queremos verificar se as senhas coincidem ou estão em branco. Temos o controlador - register.php-que vai cuidar de fazer essas verificações. Quando um formulário é enviado através do método post, em seguida, todas as variáveis ​​são contidos dentro da matriz de posto. Você quer ter certeza de que o valor da matriz posto no índice de senha corresponde ao elemento de confirmação. Você quer ter certeza de que eles não estão em branco, e você quer ter certeza de que eles são a mesma coisa. Uma coisa conveniente sobre o PHP é que não precisa usar string compare mais. Podemos usar o operador igual é igual  para verificar se as cadeias são iguais um ao outro. Para o tratamento de erros, você vai querer se desculpar. Para se desculpar, você simplesmente chamar a função  e especifique um tipo de mensagem que você deseja para a saída. Você, então, deseja adicionar o usuário para o banco de dados. Até agora, tudo o que tenho feito é apenas lidar localmente com os resultados do formulário. Agora, nós realmente deseja adicioná-los para o nosso banco de dados. Para isso, primeiro quer ter certeza de que o usuário não está em branco. Entenda que em um site, você não pode ter vários usuários com o mesmo nome, assim que você vai querer ter certeza de que quando você inserir algo em seu banco de dados - inserir um novo usuário - então você não obtiver uma colisão entre um nome de usuário pré-existente eo nome do usuário que o usuário está tentando enviar. Para isso, uma vez que você executar uma consulta - inserção de um determinado usuário com sua senha e um montante inicial de dinheiro - uma vez que você chama isso de consulta, então o MySQL irá realmente retornar false se ele falhar. A estrutura de usuários é tal que o nome de usuário é um valor único, então você não pode ter mais de um. Quando você tentar inserir uma nova linha com um nome que já existe, que vai retornar falso - como um falso valor booleano. Uma coisa complicada aqui é que você vai querer verificar se o resultado é o resultado de sua consulta. Se ele falhar, então você vai querer verificar com o operador triple-iguais. Isso está realmente acontecendo para verificar se há uma falha ou não, Considerando que, em apenas um simples iguala-iguais, seria verdadeiro se a linha estava vazio. O resultado de uma falha, se houver uma colisão entre nomes de usuário é o valor real falso. Aqui está como você iria inserir em um banco de dados. Aqui é a consulta que você deve executar estritamente em SQL. Uma coisa é que você pode realmente ir para o site que gerencia o banco de dados SQL e brincar lá digitando manualmente valores ou linhas. Ele irá mostrar o que a saída SQL é. Você também pode executar comandos SQL dentro de seu banco de dados  e depois ver o que a sintaxe pode ser, e depois traduzir isso em função de consulta que temos em pset 7, que vai ser muito semelhante ao das consultas que você realmente executados. Se eu queria inserir uma nova linha em minha tabela de usuários, então gostaria de especificar inserção em usuários, que é o nome da minha mesa. Então gostaria de especificar os nomes das colunas. Então eu iria fornecer os valores junto com a minha senha. Senhas em nossa tabela de usuários não são armazenados apenas como seqüência de caracteres. Eles são armazenados como a versão criptografada, de forma que você deseja executar a função crypt na senha real, e que vai lhe dar o tipo correto de armazenamento para a matriz usuários. Executar este irá inserir uma nova linha em sua tabela de usuários. Para lidar com a função de consulta, antes em C usamos o sinal de porcentagem como um espaço reservado. Da mesma forma, o mesmo conceito de um espaço reservado se aplica aqui. Com consulta, você especificar a consulta inteira, exceto quando você está lidando com variáveis ​​como o seu contributo para a consulta, em seguida, em vez de realmente colocá-los dentro - como quando tivemos declarações printf em C. Gostaríamos de colocar a corda e depois ter um espaço reservado, e então após cada vírgula, especificar qual variável que tínhamos. Aqui, nós estamos indo para usar o sinal de interrogação como o nosso espaço reservado e, em seguida, passar em cada variável, respectivamente, de modo, os espaços reservados - onde essas variáveis ​​devem ir. Então, aqui, o primeiro ponto de interrogação seria substituído pelo nome de usuário real em seguida, o ponto de interrogação segunda pela senha. Então, finalmente, uma vez que você registrou e adicionado ao banco de dados, então você quer registrá-los no site. Temos uma espécie de super-sessão global variável chamada. Session leva um certo ID, e que corresponde à ID do usuário que está atualmente logado pol O que você quer fazer é encontrar o seu ID de usuário é e defina que o ID da sessão como ID de que determinado usuário. Uma função que você vai querer usar aqui é um comando SQL que irá recuperar o número de identificação último inserido na sua mesa. Então vai chamar linhas - isto chamar o ID - isto atribuir um nome para o número que ele retorna. Ele vai chamar isso de id. Agora que já terminou registar, e podemos passar para citar. Citação permite que um usuário insira o nome de uma determinada ação, e então ele vai voltar as qualidades desse estoque. O que você vai querer fazer aqui é ter um controlador e alguns modelos. Neste caso, nós vamos ter um controlador que vai fazer todo o pensamento para nós. Vai procurar o símbolo e, em seguida, passar valores para os modelos que irá imprimir. Nós vamos ter dois modelos aqui. Nós vamos ter um modelo que fornece a forma em que os usuários estão indo para nome de entrada do estoque - o nome da ação. Então nós também vamos querer outro modelo que exibe esses valores. Você pode olhar para login de um exemplo de como você teria um formulário que aceita entrada, exceto aqui, nós só queremos um campo. Nós não queremos um nome de usuário e um campo de senha. Nós só queremos um campo de texto que permite ao usuário inserir o nome de um determinado. Então você quer enviar os dados - uma vez que você olhou para que o estoque - para quote_form.php. Lookup devolverá o símbolo de uma ação, o nome, e um preço. Aqueles estão contidos dentro de um array associativo. Olhe-se a função de pesquisa dentro do functions.php para mais informações sobre os tipos de retorno daqueles. Ótimo! Então, finalmente, você vai querer exibir as informações de estoque. Você provavelmente vai querer exibir - você deseja acessar essas variáveis. Depois de ter o preço em uma variável - , bem como o nome e o símbolo - então você vai querer exibir aqueles em sua página do modelo. Esse modelo de página poderia ser chamado show_quote.php ou algo assim. Sua página quote.php tornaria citação show e depois passar em todos esses valores. Então, em sua página php, você realmente imprimir esses valores para o aspecto HTML da página. É só usar a função de impressão e passar no preço. Existem 2 maneiras - você pode concatenar com o operador ponto, ou usar um espaço reservado. Os usuários, eventualmente, vão ser de compra e venda de ações. Queremos permitir-lhes alguma forma de ver todas as ações que têm actualmente. Vamos chamar isso de sua carteira. Carteira seria, presumivelmente, para cada usuário, conter um monte de linhas listando o tipo de ação que eles têm e, então, como muitos daqueles que têm. Nossa mesa existente - agora temos uma tabela de usuários em nosso banco de dados. Que contém o nome de usuário, assim como sua senha e quanto dinheiro eles têm. Não há nenhuma maneira real de armazenar todas as suas ações dentro disso. Não é como podemos inserir novas colunas para cada estoque. Isso seria uma linha muito, muito tempo, porque temos uma quantidade infinita de tipos de ações que poderiam ter. Assim, em vez que nós vamos fazer é dentro do mesmo banco de dados, vamos ter uma tabela de usuários, mas em seguida, também teremos uma tabela carteira. A tabela a carteira será definitivamente ligada à tabela de usuários, mas a estrutura da tabela carteira terá as informações sobre ações, quantas partes de que o estoque o usuário tem, , bem como um número de ID de utilizador particular. Você tem a tabela de usuários que tem o id, bem como o nome de usuário, o hash - qual é a senha, a senha criptografada - e, em seguida, a quantidade de dinheiro que eles têm. O número de identificação estaria ligado ao número de identificação da carteira. A carteira teria apenas o símbolo do estoque, bem como as ações - o número de ações de que o estoque que o usuário tem. Nesta tabela portfolio você teria basicamente todas as ações possuídas por todos os usuários do seu site. Mais tarde, especificar apenas partes de um determinado usuário - somente sua carteira - você recuperar os valores da tabela de seu portfólio de tal modo que o número de identificação é específico para esse usuário. Quando você exibir a carteira, você quer denunciar cada uma das ações em carteira do usuário. Você vai querer informar o número de ações eo valor atual das ações. Que o valor actual das referidas acções não são armazenados na tabela de carteira porque isso vai estar atualizando - no mínimo - a cada dia pelo Yahoo. Para obter essa informação, você não pode fazer referência que a partir de sua consulta SQL. Qual a função que fornece para nós? Que função terá o preço? Isso é pesquisa, portanto, usando pesquisa em um símbolo particular vai lhe dar um monte de informações. Ele vai lhe dar três peças de informação - o nome, o símbolo, assim como o preço. Depois de procurar um determinado símbolo, então você pode obter o preço, e então você pode usar o preço a ser exibido em seu portfólio. A carteira também deve exibir saldo do usuário de caixa atual. Esse campo é armazenada dentro de sua tabela de usuários. Então lembrando de como estamos, basicamente, ter que - estamos tendo diferentes tipos de arquivos PHP. Nós vamos ter um controlador que basicamente faz todo o pensamento para você. E então nós temos um modelo no qual o modelo lida com saída de dados. Você tem que pensar no que as variáveis ​​do controlador precisará tomar polegadas Se estamos lidando com um portfólio que gera todo o nome, símbolo e número de partes, bem como o preço atual de uma ação, em seguida, você vai querer encontrar uma forma de, basicamente, passando - você pode passar em uma matriz de valores que correspondem a esse. Vamos para um exemplo de como você pode recuperar todas as ações propriedade de um usuário em particular. Isto não está lidando - ainda - com o preço das ações. O que isto iria fazer é executar uma consulta. Seria obter o símbolo, bem como as partes de - Eu estou chamando esta tabela, mas, neste caso, o que seria? Qual é o nome da tabela que estamos lidando com que tem símbolo e partes para um usuário específico? É usuários ou carteira. Carteira. O que isso faria é portfolio de consulta para os símbolos e as partes para um usuário específico. Aqui, eu digo, (símbolo SELECT, ações de tbl - mas em vez de mesa, você vai substituir aquele com carteira. "Onde" é basicamente a minha condição. Eu estou dizendo que eu só quero obter essas matrizes associativas que correspondem  a esta condição seguinte - id iguais.  Então eu estou colocando um espaço reservado lá e depois id da sessão. O que isso iria fazer é dizer para cada linha em linhas. Esta é uma maneira elegante em vez de realmente ter de criar um loop que itera sobre todos os índices, em seguida, em PHP você pode ter um para-cada loop. Se você tem uma determinada matriz, então você pode dizer que eu vou ligar para cada elemento sucessivo - Eu vou ligar para cada elemento este nome. Assim, para cada um destes elementos, eu vou chamá-los de presente, então eu posso fazer isso. Neste para cada um, você tem linhas como sua matriz real, e cada linha que vai ligar linha. Toda vez que ele executa o corpo, ele vai subir e vai atualizar a linha para o próximo elemento em linhas. Agora, em termos de compra de stocks, o que nós queremos fazer é obter o estoque que o usuário quer comprar ea quantidade de ações que o usuário quer comprar, e depois - se quiserem - acrescentar que ações para sua carteira. Obviamente, se eles estão comprando algo, então isso vai diminuir a quantidade de dinheiro que eles têm, a fim de que vai diminuir o seu dinheiro. Nós vamos estar lidando com a atualização da carteira, bem como a tabela de usuários, o qual contém o dinheiro. Mas, primeiro, você precisa para obter o estoque real ea quantidade de ações que o usuário quer. Para isso, você vai precisar de um formulário HTML que vai pedir para o símbolo do estoque que deseja comprar, bem como o número de ações. Então você quer adicionar. Você vai querer selecionar determinados valores. Passamos por isso um pouco já, mas quando você está tentando obter determinadas linhas - recuperar determinadas linhas da tabela SQL, esta é a seguinte sintaxe. Você selecionar, e em seguida, se você especificar uma estrela, que vai basicamente retornar a linha, todo inteiro para você. Então, novamente, você tem a condição em que, e então você especificar - Eu só quero o nome de usuário para ser igual-mail em, por isso só vai recuperar a linha usuários que corresponde ao correio-in. Quando um usuário deseja adicionar um compartilhamento de uma carteira, você precisa verificar alguns erros. Você quer ter certeza de que o usuário pode realmente ter recursos para as ações, assim que você vai querer verificar o seu dinheiro. Antes, costumávamos estrela para recuperar uma linha inteira de uma tabela SQL. Mas aqui, nós podemos realmente apenas especificar que eu só quero um valor - Eu só quero o dinheiro. Então, aqui, seria devolver o dinheiro para o usuário com ID de número 1. Se um usuário já comprou uma determinada ação, mas depois compra mais do que o estoque, em seguida, em sua carteira - você não quer uma linha separada, outra linha que contém essa nova transação. Você realmente quer atualizar a quantidade. Tudo o que está mudando é realmente a quantidade de ações que o usuário possui. Se você usar a consulta INSERT INTO - Então é só inserir no seu portfólio todos esses valores - o número do ID do usuário, bem como o símbolo da ação que eles estão comprando e as partes, então você também vai querer especificar, bem, se eu me deparo com uma cópia da chave - neste caso, a chave duplicada não é apenas o ID de utilizador, mas também o símbolo estoque - porque você só pode ter - a nossa premissa é que você pode ter apenas uma linha  que corresponde a um símbolo específico. Então, na chave duplicada - se você tiver uma colisão lá - você está indo só para atualizar partes de seu novo valor. Ações iguala tudo o que tinha antes de mais o número de ações que o usuário está comprando. Agora que nós atualizamos a tabela de portfólio, vamos querer atualizar dinheiro do usuário. Que está na tabela de usuários, por isso estamos indo para ser subtraindo uma certa quantidade de dinheiro. Presumivelmente, ele vai ser dinheiro é igual a menos dinheiro - e depois um determinado montante. Para atualizar o dinheiro, você faria - se eu queria tirar dinheiro de e-mail em, então gostaria de executar esta consulta - «Utilizadores de atualização" e defina a coluna de caixa em dinheiro - Gostaria de remover dólares 9.999 somente se o nome de usuário é igual ao correio-in. Mas, neste caso, não queremos subtrair 9.999 especificamente. Queremos especificar, também, queremos subtrair o preço atual da ação multiplicado pelo número de ações que eles estão comprando. Agora nós lhes permitiu ver todas as ações que eles têm, bem como comprar mais ações. Nós também já lhes permitiu olhar para cima o preço atual de um estoque. Aqui, queremos permitir que eles vendem. Primeiro queremos mostrar basicamente - queremos permitir que eles vejam todas as ações que eles têm, Então, aqui queremos mostrar todas as linhas do portfólio. Se optar por vender uma determinada ação, então vamos supor que eles querem vender de tudo. Eles não são apenas vai vender 50% de suas ações, eles vão vender 100% dele. Nós podemos simplesmente apagar a linha inteira da carteira. Podemos apagar partes do determinado usuário do símbolo certo. Não é a sintaxe para isso. Então queremos atualizar o dinheiro. Nós vamos estar adicionando no dinheiro igual à quantidade de ações que estão vendendo multiplicado pelo preço atual da ação - não o preço a que comprou, mas o preço a que são - o preço atual quando eles estão vendendo. Para referenciar o preço atual de uma ação, você vai querer usar de pesquisa, o que lhe dará o preço de uma ação no momento atual. Agora ficamos com a história, qual pretende permitir que um usuário para manter o controle de todas as suas operações - quer ver sempre que vendeu algo, sempre que eles compraram um estoque. Nós queremos especificar o momento em que eles fizeram isso, assim como quantos eles compraram eo que era estoque. Não temos qualquer estrutura, atual existente, que especifica que? Bem, temos carteira que exibe os estoques número que um usuário tem por uma parte determinada. Mas estamos estruturando portfolio da maneira que ele atualiza quando compramos múltipla, enquanto que a história deveria - se você comprar da Apple, 10 partes do mesmo, e, posteriormente, vender 5, então você gostaria de ver aqueles separadamente como ações separadas, linhas separadas. Considerando que a ação de visualizar que em nossa mesa portfolio seria apenas uma atualização para que determinada linha,  por isso estamos provavelmente vai querer outra tabela. Em nosso banco de dados, temos a nossa tabela de usuários, temos a nossa tabela de portfólio, e agora provavelmente vai querer uma tabela de histórico. Essa tabela de histórico pode acompanhar a data atual, bem como o símbolo de ação particular, bem como quantas ações, e então o que é ação - se você fosse comprar essas acções ou se você estava vendendo. Para lidar com data, há um par de maneiras que você pode fazer isso. PHP tem uma maneira de manter o controle de data, o que você pode olhar-se a si mesmo. Em SQL você também pode usar agora ou timestamp atual. Isso é com você. Apenas certifique-se de que cada vez que um usuário compra ou vende, você vai estar atualizando seu dinheiro na tabela de usuários, você vai estar atualizando as linhas na tabela de carteiras, então você também vai estar atualizando a história, então não vão ser separados 3 consultas SQL que você estará chamando lá. Nós temos um monte de funcionalidade agora. Apenas um par de lembretes de que em seu arquivo de índice, você vai querer vincular a pelo menos o seu - mas você vai querer permitir que um usuário de ligação para a página buy.php. Isso vai permitir que um usuário - buy.php é o controlador, de modo que vai, quer enviar para - que vai mandá-lo para a forma que lhe permite olhar as coisas. Nós temos história. Temos a sessão, obter uma cotação e depois vender. Essas são, no mínimo, o que você deseja mostrar. Em termos de carteira, a carteira é realmente mostrado na página do índice. Se formos ao índice, aqui vemos que torna portfolio.php e passa a matriz associativa - basicamente o título é igual a carteira. Então, este é o controlador. Se formos para o modelo de portfolio.php, então tudo o que tem é - basicamente exibe uma imagem que diz, oh, este site está em construção. Mais tarde, uma vez que você passar - você estar passando em informações basicamente mais específico. Em vez de apenas o título, você provavelmente vai estar passando em mais coisas. Uma vez que você tem esses valores, então portfolio.php pode lidar com esses valores e imprimi-los em qualquer tipo de ordem. Depois de implementar tudo isso, você também precisa implementar uma característica mais. Isto pode ser permitir que um usuário alterar sua senha, para redefinir sua senha se eles esqueceram que - assim para a redefinição de senha, em seguida, Provavelmente você também quiser editar registrar para que lhes permite especificar um e-mail, assim que se esqueça sua senha, então eles podem conseguir isso. Eles provavelmente pode entrar em seu nome de usuário e, em seguida, um email será enviado para eles com um link para ser capaz de redefinir sua senha. Você pode ter algo que permite aos usuários obter recibos cada vez que comprar ou vender algo, e, finalmente, permitir-lhes para adicionar dinheiro para seu site. Assim que voltar para o conceito de controladores e modelos um pouco. Você vai ter algo como um - assim você vai ter um controlador aqui. Agora, nós estamos olhando para o exemplo login.php. Quando temos um controlador, basicamente isso vai levar dois casos. Quando temos controladores, estamos nessa parte que nós somos também uma espécie de lidar com quando temos formas também. O controlador tem basicamente ações separadas - uma se um formulário já foi apresentado, e depois dois, se o usuário está chegando a essa página , pela primeira vez e ainda precisa de entrada que forma. Eu estou indo para ir para esse primeiro caso antes de subir para o primeiro caso de ter a forma dentro Aqui nós dizemos, se o formulário foi submetido com o post método - não se preocupe com isso um pouco. Não se preocupe muito sobre isso, mas entender que esta função, basicamente, trata se um formulário foi submetido ou não. Esta condição é verdadeira se o usuário tiver apresentado o formulário. Se não, então vamos querer chamar login_form.php render, e depois passar no título. Este título é basicamente só vai aparecer no cabeçalho. O que isso faz é basicamente diz, ok - bem, se um usuário vai para login.php e não tem realmente conectado, então eu quero mandá-los para a página que tem que se formam o que lhes permite introduzir o nome de utilizador e palavra-passe. Então eu vou para login_form e que tem a forma real. Então, uma vez que o usuário alega que forma, eles vão enviá-lo para login.php com o método de pós. Então eu estou indo realmente para entrar nesta seção do meu loop se-else. Então é aqui que lidamos com os valores inseridos no formulário. É aqui que temos que lidar com isso. Então, depois de lidar com esses valores - se você está lidando com - dizer que estamos lidando com a página quote.php onde alguém pode introduzir um estoque que eles querem olhar para cima, e depois ver que a exibição - esse é o tipo de semelhante aqui. Aqui temos um formulário de login - you'd provavelmente tem um formulário de cotação - mas, em seguida, uma vez que o usuário tenha realmente apresentado essa informação, então você vai querer o controlador passar para outro modelo que irá mostrar-lhes que a informação real. Então certo por aqui, então você provavelmente vai - todo o final de sua condição aqui - o se o método é igual a pós - então você provavelmente vai querer tornar outra página - a citação show - que lhe envia a essa página - show_quote.php - e depois no arquivo que irá referenciar esses valores. Isso faz sentido? Temos um controlador que trata basicamente com os dois casos - se você digitou uma forma ou não. Se você não tiver inserido um formulário, então ele irá redirecioná-lo para essa forma, que, então, colocá-lo de volta para aquela página. Então, uma vez que você tem a informação no controlador, que o corpo vai lidar com isso informações necessárias - ou procura-se valores para o estoque, e, em seguida, uma vez que é olhou esses valores e tem-los em uma matriz bem formatado, então pode passar esse array para a página do modelo  que lida com a saída dessa informação. Mais uma vez, uma vez que na Internet, que vai ser divertido. Estamos fora do C de modo que não está limitado ao ASCII e que a saída do terminal, para se divertir com isso. Você pode torná-lo tão visual como você quer. Você pode permitir que os usuários de entrada de milhões de dólares em um momento, ou limitá-los e ser realmente significa e permitir-lhes apenas para entrar uma moeda de um centavo de cada vez ou algo assim. Definitivamente não se esqueça de se divertir com isso. PHP código é um pouco mais simples, que é um pouco mais fácil de traçar seu pseudocódigo para a implementação real. Assim, com certeza se divertir com isso, porque é realmente a nossa última peça no CS50. Com isso, este foi Passo a passo 7. Uma vez que você terminar de assistir o passo a passo e terminou sua pset, em seguida, estes foram também Série de Exercícios, e agora estamos no ao produto final - depois de passar por teste 1. Então, espero que você pode usar as ferramentas que você aprendeu com as Série de Exercícios - não apenas a sintaxe, mas mais a noção abstrata de como tomar um certo - gosto, eu quero fazer isso e então realmente implementar isso. Aprender a lutar pela sintaxe e código de distribuição. Leitura de código de outras pessoas, e então interpretar que o uso de pré-existentes funções. Então, boa sorte com o pset passado. Tem sido um prazer levar as orientações. Espero que tenham sido úteis para você. Estes foram passo a passo, e muito obrigado. [CS50.TV]