SAM LEVATICH: Bem-vindo ao seção para esta semana. Eu não sou Andi. Andi caiu doente o dia de hoje, e eu foram tipo de chamada no último minuto para assumir. É estação de gripe, por isso certifique-se de que você estão ficando limpo, lavar as mãos, e alimentação saudável para que você, também, não estão acamados. Mas sem mais delongas, vamos começar. Hoje, nós estamos indo falar sobre PHP um pouco como bit-- PHP refere ao HTML, como ele refere-se a CSS, e alguma da teia coisas que você fez na última atribuição. Vamos falar um pouco sobre SQL e como você pode trabalhar com bancos de dados, que é um componente bastante chave de P definir 8-- P ajustou 7. P ajustou 7. E então vamos falar um pouco pouco sobre como controladores de vista trabalhar e por que isso é uma filosofia por trás de alguns páginas da web modernos e um design diferente. Praticamente um monte de tipos de aplicativos e você pode enviar aplicativos está usando este modelo, framework controlador de vista, que você estará usando em P ajuste 7, então eu vou falar um pouco sobre por que se tornou popular, porque é importante e agradável. E então eu vou finalmente passar para algumas dicas sobre combate P ajustou 7. E se tivermos tempo sobrando no final, nós podemos realmente fazer alguma em que trabalhar em conjunto. Então, PHP. Na verdade, você pode ter notado isto-- você realmente não tem que mergulhar em ele-- mas P ajustou 6 teve algum PHP código que estava acontecendo. E porque o PHP é um C-like língua, PHP, ao contrário de HTML e CSS, é uma linguagem de programação, Considerando HTML e CSS são estáticos. Eles são linguagens de marcação que lidam com estilo e layout visual. PHP é o negócio real. PHP tem loops, ele tem conditions-- tudo isso que é divertido sobre C. Tem algumas coisas que são um pouco pouco melhor do que C, o que vamos ver, mas acho que a maneira mais fácil de falar sobre o PHP é apenas para mergulhar. Então, eu estou indo para ir para a direita no IDE neste momento. A primeira coisa que vamos fazer é realmente olhar um pouco em alguns dos Código PHP que estava em P ajustou 6. Assim, a maneira que nós fazemos isso-- antes, a maneira que nós estávamos correndo o servidor para o aparelho era que teríamos de type-- use sua implementação ou a aplicação da equipe de server.c entrando em diretório e funcionando server.c tanto com nenhuma arguments-- tão basta chamá-lo na host local, que é o que você provavelmente fez a maior parte do tempo-- e, em seguida, alimentando- um com directory-- que para usar como sua raiz onde o site iria ser executado, basicamente. Esta semana para P ajuste 7, como grande como o nosso código para server.c é que existem pessoas que já têm escrito estas coisas finas sobre a CS50 que ter um pouco mais funcionalidade, um programa de servidor que é capaz de lidar com um pouco mais dos meandros que vamos ver tanto em P ajustou 7 e P set 8. E a maneira que você iniciar o servidor é apenas digitando "apache50." E antes de fazer qualquer coisa, você quer certificar-se Apache que 50 não é já em execução, pois é na minha máquina, que eu fiz para testá-lo. E você faz isso chamando apache50. Parar, e você vai ver que ele está parando o servidor web, se você pode olhar lá na parte inferior da janela do terminal. E depois é só para começar, estamos vai chamar, "apache50 começar." E então nós vamos para alimentá-lo um diretório. Agora, porque nós queremos olhar em algumas das P ajustou 6 código que tínhamos implementado, eu realmente copiado um pouco do P ajuste 6 código em minha própria pasta, que você pode ver no lado esquerdo lá. É chamado de "SECTION8" em letras maiúsculas porque eu estou tão animado a ser transmitido ao vivo hoje. Então, se nós funcionamos este, que deveria todos trabalham muito eficazmente. Ela diz, OK, nosso site é agora disponível no endereço do IDE, basicamente, que é o que você estava usando exatamente como era no P definir 7-- P ajustou 6. Todos os meus índices são um índice de hoje. Assim, podemos ir para aquele endereço, se você se lembra, apenas clicando neste pequeno botão no canto superior direito. E você vai lembrar este código, que aconteceu quando você foi para hello.php. E o que o código é projetado para fazer é quando você digitou um nome aqui-- se você diz Sam porque essa é a minha nome-- e clico Say Olá, quando fomos para a próxima página, nome que foi suposto ser exibida. Ele dizia: "Olá, Sam" ou "Olá", o que quer que você nome colocar nele, embora nós fomos a uma inteiramente nova página web. E este é o tipo de coisa que o PHP pode fazer por você. PHP é capaz de transmitir dados entre duas páginas da web. Esta é uma página totalmente diferente. Você verá o título é "Olá" aqui. Na verdade, eles têm o mesmo título, mas eu prometo que eles são diferentes web páginas, se olharmos para a fonte. E você pode passar os dados que é introduzido neste campo de texto, enviá-lo para a próxima A página que está sendo chamado, e, em seguida, de dados que é capaz de estar lá na sua forma actual. Agora nós ainda não implementaram este nós mesmos, o que é o que nós vamos fazer agora para espécie obter um sabor de como o PHP funciona, mas a idéia fundamental é que você pode PHP-- tipo de pensar nisso como uma função. Algo que o PHP pode deixá-lo Não é que pode levar parâmetros que entra em uma página HTML através da utilização de PHP e formas, e ele pode passar os parâmetros como para a próxima página que carrega. Neste caso, nós estamos carregando-se esta A página com o botão "Diga Olá". Mas, por agora, eu realmente excluído alguns dos que o código no hello.php que estava sendo executado que foi, na verdade, exibindo o "Olá, mundo "ou" Olá, Sam "ou "Olá," o que quer que era apenas de entrada. Então, por agora, estamos vai fazer isso, basicamente. Nós vamos recriar isso e também adicionar mais algumas funcionalidades, fazer um pouco mais com ele, ver o PHP é realmente capaz. Então, primeiro, vamos falar sobre este arquivo, hello.php. Então, se nós zoom em um bit-- pouco e agora estou tipo de tentar percorrer todo a maneira circundar-- lá vamos nós. Você verá que é chamado ola.php, mas a sintaxe de que olha como um arquivo HTML. Isto é porque o PHP real neste arquivo é preso entre todos estes question mark-blocos acento circunflexo. Tudo aqui é considerado código PHP. E você vai perceber que quando eu fiz um comentário, você vai ver o familiar duas barras. E se você se lembra, em HTML, se eu digitar um comentário, parece algo mais perto isso, que é um comentário em HTML. Então, realmente tudo entre estes dois colchetes agora é código PHP, que reflecte-se no facto que este pequeno símbolo de comentário é transformado em um comentário. Assim, cada vez que você escrever código PHP, mesmo se não há nenhum código HTML fora dele, ele está sempre vai ser fechado nestes colchetes com pontos de interrogação. Você pode tipo de pensar sobre como tudo isso-- do código que corria em seus programas C foi fechado em um int main, vazio, chaveta, encaracolado declaração final cinta. E você verá chaves em PHP também, mas este é o tipo de como o principal método de PHP. Então, agora, como é que vamos fazer qualquer coisa em PHP? Agora, PHP é uma programação linguagem que é muito parecida com C, mas opera na web. Então, uma coisa que você vai immediately-- um das primeiras coisas que você realmente fez com C você foi impresso material para fora, certo? Assim, em C que fizemos com uma função printf. Demos-lhe uma corda, provavelmente com uma nova linha, e, depois, encerrado com um ponto e vírgula. Assim, a maneira que nós estamos indo para fazer isso em PHP-- porque não é bastante printf. É um pouco de sintaxe diferente. A maneira que nós imprimimos as coisas em PHP é que dizemos, "echo Olá" ou "eco" qualquer palavra. E isso tem o efeito de fazer printf com uma corda, "Olá". E acrescenta a nova linha para ele. Então, vamos agora fazer sure-- Vou reduzir novamente um pouco bit-- vamos nos certificar de que que o código está funcionando porque não poderia muito bem ser um bug neste código que teremos de enfrentar. Então, o servidor já está em execução. Então, se nós rolar para trás até o fundo, sim, o servidor ainda está em execução. Então, se nós apenas tocar neste direito pouco aqui-- welcome-- devemos get-- grande. Nós ainda estamos tendo a familiar "Diga Olá" diálogo, mas quando eu digitar "oi," vamos ver que o texto "Olá" era de fato impresso, que é exatamente como que esperávamos porque ecoam em PHP é como uma instrução printf. Então, de volta ao código, como em P ajustou 6 fiz o código de distribuição que são fornecidos fazer com que o PHP saída a coisa que você digitado na tela anterior? E a sorte de examinar por que isso acontece, estamos indo para entrar em index.html, que é o arquivo original, o arquivo que aparece na tela com o botão "Diga Olá". Você percebe que há todas as coisas clássicas temos vindo a esperar do HTML tais como essas coisas, essas tags fechado no ângulo entre parênteses, como PHP mas sem os pontos de interrogação, o que indica uma coisa especial para HTML. Temos título, que é "Olá". E você vai perceber que, como vimos, o título é "Olá" em ambos os casos. Vamos mudar este "dizer" apenas para que podem distinguir-nos onde estamos. Mas nós temos um corpo. E, em seguida, a parte interessante, o bit que aparece no HTML, é este elemento de formulário. E então nós temos um formulário. E essa é a chave. Esta é a forma como estamos trabalhando com PHP. O parâmetro da acção formulário diz que hello.php é o que nós estamos indo para enviar os valores nos este formulário para. Este é o lugar onde nós estamos passando os parâmetros, por assim dizer. Você vai notar outra coisa aqui é que o método é "começar". Há dois primário métodos pelos quais será estar usando PHP para passar dados entre as páginas web websites--, rather-- nesta atribuição. E esses métodos são "get" e "post". Há algumas sutis diferenças entre GET e POST que chegaremos into-- nós vai "pegar" em, se você quiser. Mas, para todos os intentos e propósitos, GET e POST ambos são apenas formas que você passar parâmetros com um pouco diferentes execuções. Por agora, vamos usar get porque obter foi o que foi originalmente usado no arquivo PHP de P ajustou 6. E, na verdade, se formos e olhar antes que editei qualquer outra coisa, Eu vou dizer um oi a-- qual é o seu nome? AUDIÊNCIA: Elliot. SAM LEVATICH: Oh, meu Deus. Eu não sei como se escreve isso. Você poderia soletrar isso por mim? AUDIÊNCIAS: E-L-G-I-S-T. SAM LEVATICH: I-S-T? AUDIÊNCIA: É. SAM LEVATICH: Perfect. ESTÁ BEM. Eu acho que eu sabia como soletrar isso. Me desculpe por isso. Mas, se dissermos "Diga Olá", que não é ele não vai aparecer na tela ainda porque nós modificamos o código um pouco. Mas se nós "Diga Olá" - OK, então "Olá" é aqui. Mas se tomarmos um mais perto olhar para o próprio URL, vamos ver que ele termina com hello.php? name = Elliot. Então, essa é uma forma de comunicação para a próxima página web os parâmetros que nós passamos. Dissemos name = Elliot. E isso é, finalmente, como P ajustou 6 acessada a variável que passamos em através do formulário. E isso é algo que é peculiar a um pedido get. A solicitação get faz com que os parâmetros conhecido na URL do site. E você vai se lembrar, também, P em que você ajuste 6 teve de escrever uma função que lidava com o fato que esta cadeia de consulta poderia existir depois de um arquivo. Não poderia ser um ponto de interrogação seguido por basicamente qualquer número de caracteres. E isso é exatamente o que está acontecendo aqui. E a razão que teve de analisar esse na sua implementação de server.c em P ajuste 6 é assim que você poderia dizer o código PHP que name = Elliot. Você necessário para ser capaz de analisar o que fora do URL para que o arquivo PHP em questão sabia o que estava lidando. Portanto, esperamos que isto dá a motivação para server.c agora que nós estamos seguindo em frente fora de C com o PHP. Então vamos realmente focar o acesso ao coisas passada através de uma solicitação get agora neste ponto. Eu estou indo para salvar este. Nós não muda nada. Parece que temos um campo de entrada. Estamos definindo algumas propriedades, como podemos fazer um HTML. Estas são coisas simples. Nós não precisamos deles. Mas nós temos autocomplete fora, que basicamente says-- você sabe, quando você digita coisas para dentro da teia, por vezes, ele tenta preencher esse para você. Então, é uma coisa agradável. Queremos desligá-lo para esta finalidade. Essa foi uma decisão CS50. Assim, podemos excluir que, se quiséssemos. A focagem automática apenas fura o cursor na forma direita no início. Mais uma vez, não é muito importante. Mas name = "name" - é um pouco complicado, porque o seu nome e nome. Mas nós poderíamos ter mudado este para outra coisa. E, de fato, isso é o que vamos fazer agora. Vamos dizer "pessoa", que é uma espécie de nome Se uma pessoa é definido pelo seu nome. Então vamos fechar este, reabrir o nosso website desde o nosso servidor ainda está em execução Apache 50, e vamos dizer, Olá, aqui está Elliot novamente. Por que não? Olá. E se formos até aqui, vamos ver em seguida, em vez de name = Elliot, ele diz que pessoa = Elliot. E isso é um resultado direto do fato que apenas mudou name = "pessoa". Assim, em um elemento de entrada de um formulário HTML, o campo de nome é o identificador para o parâmetro que está sendo passado. É como se você está criando uma função "adicionar", que teve dois inteiros e você disse int a e int b. Isso seria um nome, e se você queria uma outra forma, que nós podemos fazer apenas copiando e colar, então teríamos nome b. Então, agora nós vamos ter dois parâmetros que estão a ser passada através chegar ao próximo website-- próxima página web, hello.php. E nós podemos realmente ver que novamente se quiser. Esta é a maneira mais fácil de lidar com o código da Web no IDE, basicamente. Você iniciar o servidor, obtê-lo em execução e, em seguida, cada vez que você fazer algumas mudanças, apenas perto esse arquivo apenas para ser seguro. Pressionando o botão de volta é um pouco complicado porque ele pode carregar uma versão anterior versão, não o mais atualizado. E então você simplesmente clique em seu botão novamente, pop direita up-- oh, e agora existem duas formas. E por isso, se nós digitamos uma coisa em cada um-- "hirshhorn jason," para instance-- nós dizer Olá. Olhamos para os nossos parâmetros. Parece que nós temos, como esperado, a = jason e b = hirshhorn, que representa os dois parâmetros que passados ​​para essa função. Então agora vamos realmente começar a implementar essa funcionalidade que nós tinha em P ajustou 6. Então, agora nós estamos apenas fazendo eco Olá. E isso não é muito útil. Nós queremos ecoar alguma variável que foi passado para nós. E nós sabemos o nome desta variável. Temos um e temos b. Assim nós poderíamos escolher para ecoar qualquer um. Mas como podemos acessá-lo? Bem, há certas variáveis ​​globais em PHP. E eu vou escrever los em observações aqui. Os dois mais importantes são get e postar para os nossos propósitos agora. Estas são as matrizes ou, Tecnicamente, os dicionários onde nossas variáveis ​​que estamos passando para a próxima página da web ao vivo. E logo veremos como usá-los. Outro breve nota sobre o código PHP e algumas especificidades do ele-- em C, para declarar uma variável ou usar variáveis, primeiro você tinha que declará-los. E o que você tinha que fazer quando você declarou-se dizer int a carvão ou b. Você tinha que declarar os tipos de estes variáveis ​​antes de você criou. PHP-- você não precisa fazer nada disso. O PHP não pedir o tipo de variável. E a maneira que você criar um variable-- vez do que dizer int, char, string-- que é realmente char *, como nós sabe-- ao invés de fazer tudo de que, porque tudo é do mesmo tipo, typeless, podemos apenas use um personagem, que é o sinal de dólar. E você vai ver que já está aparecendo up, pequenas coisas autocomplete. E está dizendo que _GET e _POST são duas opções que eu tenho disponível para mim. Algumas dessas outras coisas são outras variáveis ​​globais em PHP que você estará usando mais o curso de P ajustou 7. Por agora vamos concentrar em GET e POST. Mas esta é uma útil coisa que o IDE faz onde uma vez que você digitou em que o sinal de dólar, ele vai começar a preencher variáveis ​​globais ou variáveis ​​que você já tenha definido. Então, se você queria para definir uma variável chamada "cadeia" você pode apenas configurá-lo igual a "oi". E é basicamente tão simples como isso. E então nós poderíamos fazer algo como "echo $ string." O IDE deve estar jogando alguns erros se eu estou fazendo nada de errado, por isso espero que eu estou fazendo tudo certo. Mas erros sempre surgem. Outra coisa complicada sobre PHP é que ele não está compilado. Assim, com programas em C, você faria a rotina diária de-- basicamente, você faria para edições seu código, você salvá-lo, e, em seguida, você faria fazê-lo, onde foi make o passo que chamado o compilador, clang, para tornar seu código, este texto arquivo, em um arquivo executável. PHP é C-like, mas ele é executado on the fly pelo seu navegador web. Portanto, não há maneira de saber. Faça jogaria os erros votos, certo? Seria como, você não declarou essa variável antes de tentar usá-lo. Você fez tudo isso ruim segfault stuff--, segfault, todo esse tipo de diversão vezes que veio com make. PHP é uma faca de dois gumes porque você não vai obter esses erros, mas isso também significa que você não vai saber realmente o que há de errado com seu programa se você basta executá-lo e ele não está funcionando. Mas o depurador de salientar algumas espero votos pequenas coisas sintaticamente que você pode corrigir. Então, agora, se formos mais a-- dizer, vamos fechar essa. Reabrir. E estamos de volta para aqui. Então, temos uma variável e uma variável b. E estes não acabará importa. Vamos chamá-los h e g por nenhuma razão particular. E nós dizer Olá. Agora parece que a nossa cadeia "oi" é de fato a impressão. Nós criamos uma variável chamada "string", defina-igual a "oi". Observe que nós não temos que fazer malloc ou fazer um array de caracteres. Em PHP, porque as variáveis são typeless, uma string é o mesmo que para um char todos os efeitos. Este poderia ser "oi". Este poderia ser apenas o personagem k. Este pode ser um número 1. E ele não se importa. O PHP não se preocupam o tipo da sua variável. Ou, ele se importa. Ele se importa quando você tenta e fazer as coisas com ele, mas ele não se importa em a etapa de declaração. E, assim como você pode em C, você pode declarar cordas na pilha como este embora dizendo "pilha" é um pouco pouco de um equívoco potencial quando nós estamos falando sobre PHP. Mas não temos que se preocupar com isso. Então, nós temos o nosso cadeia "oi", e que o eco string. Então, agora temos discutido variáveis. Então, agora nós precisamos de falar sobre get e postar e executar a última coisa que é necessário para realmente obter esta de volta para a funcionalidade do P ajustou 6. Então, agora nós somos ecoando a corda, mas nós têm essas variáveis ​​GET e POST. E porque nós estamos usando O método GET, ele Parece natural que a nossa variável que estamos interessados ​​em, tanto a e b, vai ser localizado na matriz ou dicionário, tecnicamente chegar. Então, se nós montamos obter como este com seu groups-- eu pressionei entrar e ele não gostou ele-- mas aqui nós temos obter. E assim que começar já existe. Assim, podemos já começar a acesso alguns dos elementos de get. Se nós começamos, esta sintaxe para arrays em PHP é muito C-like. Nós temos nossos dois colchetes. Então, se nós dizemos entrar em um normais array, poderíamos acessar o índice de ordem zero, o primeiro índice. PHP é o índice zero. Poderíamos dizer zero, um, dois-- coisas como esta. E eu venho dizendo que obter é tecnicamente um dicionário. Então, o que está fazendo PHP sob o capô, que é um pouco mais agradável do que C, é que já está a dar-lhe algum funcionalidade dicionário, que é realmente tabelas de hash, ou tenta, supostamente. Ou, tecnicamente, poderia ser uma tentativa bem. Mas o PHP está a implementar uma tabela hash, que forma um dicionário eficaz. E por isso sabemos o nome de nossa variável, certo? Ele está sendo passado em a string de consulta pelo PHP. Nós temos a = h e b = g, onde e b são os nomes das variáveis. Assim, a maneira que nós podemos acessar o valor que corresponde à tecla em nosso dicionário é apenas dizendo _GET_GET ["a"]. Portanto, agora temos _GET ["a"]. E se nós apenas substituir dentro nosso eco, se ecoar _GET_GET ["a"] - e vamos ver se o depurador lança quaisquer erros sobre isto-- vamos guardar isso e fechar isto. Abri-lo. Então, nós estamos apenas fazendo um direito agora, para b não deve importar. "ela" e "ele" - "murmurar." "ela" e "hum". Parece bom. E é impresso "ela," que é uma loucura. Mas isso é exatamente o que estava acontecendo na P ajustou 6. Basicamente, o que P ajustou 6 foi doing-- echo Olá, nome-- onde teve um nome da variável e isso só pede para você digitar nesse pedaço de texto. Houve também alguma Código adicional onde que incluía instruções if, que podemos fazer agora. Nós podemos dizer se existe, o que é uma funcionalidade dentro do PHP, _GET Com o sublinhado, "nome" - que é basicamente dizendo: "se o nome tiver sido preenchido", porque Poderíamos simplesmente ter clicado no botão para enviar o formulário sem digitar nada nesse campo. E nós envolvemos que, em nossa chaves amigáveis. Nós podemos ter uma declaração de outra pessoa. E isso é tudo dentro do ângulo de PHP suporte, ponto de interrogação, suporte de ângulo, Se você for. E agora vamos ver se isso funciona. Eu continuo esperando por ele para debug e crap fora de mim, basicamente, mas ainda não tem. Talvez ele vai agora porque eu falei sobre. Aham. Ele fez, na verdade. Então, nada está aparecendo. Isso é por causa de algo errado que eu escrevi no código PHP. E eu mencionei a depuração é complicado porque em PHP, nós não compilá-lo de antemão eo compilador não era como, aqui é onde seus erros são. Mas o que podemos fazer é-- fazer as pessoas se lembram como olhar para o diferente rede solicita que PHP-- ou que sites mandar? [? Malin?] Fez isso em palestra uma ou duas vezes. Você se lembra onde vamos encontrar os débitos diferentes e 200 OKs, todos os códigos que são enviados através de HTTP a partir da página web a página da web? Alguém se lembra onde vamos fazer isso? AUDIÊNCIA: Page Source. SAM LEVATICH: fonte de página. Exatamente. Se você acesse a página Source-- perfeito. Então Fonte Página puxa para cima o inspetor. E eu estou usando o Safari. Um monte de você, provavelmente, estar usando o Chrome ou Firefox. Mas enquanto você está em qualquer browser-- moderna e sinta-se livre para seguir juntamente, se quiser. Você pode digitar até este código ou basta olhar dentro do conjunto P 6 diretório para algum material similar. hello.php é o que nós somos atualmente trabalhando em emular. Portanto, há uma variedade de guias. Podemos olhar para todos os recursos. Podemos ver o código fonte. Então parece que não fez obter corpo passado no final. Ele encontrou um erro em PHP e parou de carregar a página web inteira. Nós nem sequer ter um fim tag para HTML ou qualquer coisa. E se olharmos para a rede, nós podemos ver que estamos sendo enviado um pedido. Este é o domínio. Este é o endereço. É um documento. Estamos usando o método GET. E é vermelho. Ou, ele estava vermelho quando eu não estava selecionando-o. Como faço para desmarcá-la? Bem, era vermelho. Deixe-me refrescar. Aqui está. Agora é vermelho. Portanto, é vermelho, o que significa ele falhou, o que é ruim. Então, vamos examinar por que o fez falhar. Então, tudo o que o código fonte da página pode basicamente, dizer que você é o seu lugar não funcionou, o que já podemos ver. Assim, idealmente, não haveria ser um instrumento mais útil. E há algumas extensões do navegador que permitem que você depurar PHP, mas nós não estamos indo para estar escrevendo uma tonelada de PHP, por isso é provavelmente apenas o melhor a olhar através de seu código com cuidado e apenas se certificar de que ele não está fazendo qualquer outra coisa. Então, vamos ver se o formato deste if é onde está o problema. Eu quero carregar isso até aqui de volta. Olá Oi. Portanto, há um problema lá. Assim, para sintaxe correta de PHP, PHP vai para ser C-like em que você vai ver loops. Você vai ver se as declarações. Você vai ver todos esses amigos que você se familiarizar com ao longo deste semestre CS50. Mas a melhor maneira de descobrir como fazer algo em PHP é pesquisar no Google ou olhar para alguns exemplos de código PHP porque você sabe que a funcionalidade. Você sabe o que você pode ver com o programa. Você pode fazer um loop. Você pode fazer um loop quantas vezes quiser. Você pode fazer um loop em todos os tipos de formas diferentes. Você pode criar funções. Você pode criar funções que chamar outras funções, funções que chamam a si mesmos. E você tem nomes para esses conceitos. Você tem recursividade, laços, se, outros fluxos de controle. E por isso o Google é seu melhor amigo. Mesmo dizer, "PHP se declaração "e lá vou ser toneladas de posts com respostas a outras pessoas que tiveram perguntas semelhantes a você, que estão apenas começando para fora com PHP e está curioso sobre uma coisa sintaxe. Porque nós temos o luxo de ser capaz de olhar para o código em conjunto P 6, nós realmente puxá-lo para cima e ver que OK, aqui está algo interessante. Então, isso é o que realmente parecia em P ajustou 6. Então, se nós passamos por isso, podemos ver que nós temos tem vários destes pouco Bits de ponto de interrogação PHP-like. E não há chaves. Há dois pontos. E há encaracolado cintas em PHP, mas isso é um formato e uma maneira de fazê- PHP que funciona bem com HTML porque como você vai ver, estamos fechando off estes PHP bits-- o elses e o IFS e todos que-- e depois estamos intercalando HTML dentro deles enquanto ainda na sequência do fluxo de controle estabelecido pelo PHP. Então, eu estou indo só para rápida caminhada através deste porque é um monte de a mesma conceitos que estávamos fazendo antes. Temos se não for vazio, parênteses, _GET_GET ["name"]. Isto é tudo a mesma coisa. Estamos usando o dicionário que _GET PHP envia pedido de formas, porque são os parâmetros de ação, eo método é começar. E, em seguida, que termina que. O cólon é um significante apenas para fazer isso se a declaração se avalia para true. É como uma chaveta. E, de fato, é uma chaveta em outras linguagens como Python, que você pode encontrar se você apenas fazer isso para o seu projeto final. E então esta linha, Olá. Então nós temos essa coisa estranha. Temos mais suportes. Não há nenhuma HTTP há-- ou PHP, desculpe. Mas há um sinal de igual. E então nós temos uma função, htmlspecialchars (_GEThtmlspecialchars (_GET ["nome"]). Isto é como uma espécie de mais versão avançada do eco. Como se tivéssemos ecoar como uma forma para imprimir as coisas em PHP. Esta é uma função que é definido em que o PHP vai lidar com um pouco mais desagradável personagens e valores de bytes que você poderia passá-lo. É sempre mais seguro para usar isto. Mas echo irá fazer o trabalho muito bem se nós não somos lidar com qualquer coisa muito desagradável. E assim, este tem o mesmo efeito de basicamente, este material entre a questão marcas é avaliado pelo PHP. htmlspecialchars retorna um HTML agradável valor impresso de _GET_GET ["nome"], isto é, tudo o que digitou no formulário. E então ele vai dizer Olá, espaço vírgula, e depois disso. Essa coisa toda entre os colchetes será substituído por qualquer que seja htmlspecialchars põe para fora. Então, isso é basicamente similar para o que estamos fazendo. E nós temos uma declaração de outra coisa que é Olá mundo, o que faz sentido. Então agora vamos voltar para o nosso código e ver exactly-- oh. Disse existe, que não está uma coisa que queríamos fazer. Queríamos dizer não vazio. E por isso deve trabalhar um pouco pouco melhor, não _GET_GET vazio ["name"]. E isso chaveta jogos que chaveta. Temos nossas chaves aqui. echo Olá _GET ["name"]. Vamos ver se isso funciona um pouco melhor. Nós ainda estamos executando nosso servidor. Olá Jason. Olá Jason. E funcionou desta vez. E então isso é uma prova que você pode, efectivamente, usar as chaves que você conhecer e amar em código PHP em HTML. O código para PHP fornecida você em pset 6-- pset 6-- fornece outra forma de fazendo a mesma coisa. Portanto, agora temos o poder. Temos a funcionalidade para implementar o código PHP que vimos no pset 6 por nós mesmos, basicamente. Antes de eu seguir em frente, o que são alguns dos perguntas que você tem neste momento? Sim [inaudível]. AUDIÊNCIA: Então, na sua versão em pset6, quando você executá-lo, há um espaço. E eu posso ver onde o espaço é após a vírgula. [Inaudível] de início o suporte aberto. Como você incorporar o espaço em do jeito que você escreveu seus próprios códigos? COLUNA: Essa é uma boa pergunta. E então vamos descobrir isso. Então essa é uma pergunta muito boa e um que eu não considerou. Mas vamos fazer isso juntos. Então, primeiro de tudo, o que Eu estou fazendo com eco é quando nós apenas ecoam Olá, Olá ele gera. Se nós eco agora este entrar em um separado linha, vamos examinar o que acontece. Portanto, clique isto. Nós mantemo-nos dizer, oi Jason. Então, novamente, não temos esse espaço. E isso porque, em PHP, quando temos eco, não importa quantas spaces-- nope, não o V-- não importa quantos espaços que colocamos no aqui-- se agora que carregar novamente, oi Jason. Sim, veja, todos aqueles espaços fui comido up. E isso é algo que a função de eco faz. Então, para cuidar de esse espaço, e esta é uma das razões por que você não use echo e você usar htmlspecialchars vez. Estou curioso para saber o que seria aconteceria se fizéssemos isso onde um espaço fechado em uma string. Eu honestamente não sei o que vai acontecer quando eu faço isso. Então esse é um caminho. Essa é uma maneira de cuidar dela. Se você enrolar o espaço em uma string, então o espaço será a saída bem por eco. A coisa mais segura a fazer é fazer htmlspecialchars. Isso é sempre a aposta segura. Mas agora temos uma maneira de fazer com eco, se necessário. E de um modo semelhante, podemos echo novas linhas, todo o tipo de coisas que você está familiarizado fazendo em PHP. Qualquer outra pessoa, o que é mais perguntas que outras pessoas têm neste momento sobre PHP? Se as pessoas mostrou-se um pouco tarde, Estou feliz para ficar depois de um pouco e falar sobre algumas das o início. E também está tudo emitida em directo, e arquivados, o que é uma loucura. De qualquer forma, então agora vamos fazer alguma coisas mais avançadas com PHP. E uma das coisas mais adiantadas você foram introduzidas no C foi para loops. E PHP tem um mais poderoso para circuito chamado de loop foreach. E parece que isto-- para cada em branco como em branco, chaves, fazer a coisa. Portanto, este é basicamente um atalho. Veja, o loop for como um construção sintática foi criado em C e em conjunto linguagem e coisas assim. Idealizado em C, precisamente, como uma abreviação para um monte de tipos de loops que as pessoas iriam ver. Como quando você escreveu um loop, não era muitas vezes um passo de inicialização executado logo no início, um condição em que o loop seria stop-- e essa é a característica isso é apenas em um loop while, ou um tempo que tem exactamente só que feature-- e, em seguida, um passo incrementação no fim. E assim que você costuma encontrar-se escrever código como o seguinte. Eu estou indo para apagar um pouco isso. Mas se nós estamos interagindo através caracteres em uma matriz, por exemplo, como nós temos tenho uma matriz de caracteres. Desculpe para trazer de volta C. Eu sei, você pensou que estava feito. Mas é apenas para o fim de aprender PHP, eu prometo. Então, se você tem um str de char de comprimento 8, e vamos dizem que diz Hellooo com um nulo à direita. Ótimo, então essa é a nossa seqüência. E, depois, teve um loop. Temos int i é igual a 0. E nós queremos sair quando str de i não é igual igual a nulo, porque nós sair quando ele é igual a null. E então o que fazemos em cada i ++ ponto no loop for. Fazer algo com str de i. Assim, a fórmula de base foi, tivemos essa matriz que queria tratar como elementos separados. Mas o que tínhamos a fazer é que tivemos de basicamente criar um inteiro separado variável que estava contando-se cada vez que fomos através do laço. E então nós teríamos que então chamar strstr [i] quando o que realmente queria fazer é só ir personagem pelo caráter, certo? Nós não queremos para incrementar um inteiro e, em seguida, usar esse inteiro para acessar cada personagem individualmente. Nós realmente queremos caractere por caractere. E assim, para cada forma inteligente calcula que para nós. Se nós temos uma matriz, que podemos declarar em PHP apenas-- como se nós temos uma variável chamado, vamos chamá-lo de matriz. Os milagres de nenhuma digitação, é assim como qualquer outra variável. É apenas uma matriz. E nós temos um pouco [inaudível] como 1, 2, 3, apenas uma espécie de matriz inicializado. É OK, ele não gosta do meu foreach. Mas se nós realmente foreach-- Eu digitei que um pouco errado. Há duas maneiras de fazer um loop foreach. Há a sintaxe e o como sintaxe. E nós vamos fazer sintaxe em primeiro lugar, não como. Esse é o meu erro. Então, num foreach em array, eco num. E PHP está gritando com me por algum motivo. É encontrar um inesperado em em alguma coisa, que é um pouco de um incômodo. Mas vamos descobrir por que isso acontece em um momento. Então, não gosto disso. Vamos tentar usar o como. Ele prefere a sintaxe é como parece. Então vamos fazer matriz foreach como num. Assim, uma pequena explicação do que aconteceu é a sintaxe é como dizendo-- bem em primeiro lugar, vamos olhar para o que este é impressa. Então abrimos nosso IDE. Vamos aqui. Nós dizemos: Olá Jason. E fez 123, que foram os conteúdos da matriz que criamos em cima. Então mergulhar neste loop foreach, nós temos uma matriz variável chamada o qual é uma disposição de três números. E então nós estamos fazendo foreach array como num, eco num. E isso é mais intuitivo do que um para lop. Nós estamos dizendo, o tratamento de cada um dos as coisas na matriz como NUM, Eu quero que você me dê num. E isso é exatamente o que está fazendo. PHP é o cálculo que quando você diz matriz foreach, e você está lidando com uma matriz, o que você vai querer para repetir são os personagens dessa matriz, é o ints dessa matriz, são os elementos dessa matriz. E isso está permitindo que você armazene essas variáveis ​​como, num e num seguida, basta saída imediatamente em vez de dizer, Eu tenho uma variável chamada i, e então eu quero saída strstr [i]. E assim que nos permite fazer coisas legais. Como basicamente não temos para criar estas variáveis ​​como i do e fazer tudo este material incrementação no fim. PHP cuida de tudo isso para você. Então agora vamos falar sobre como foreach ele se aplica ao nosso dicionário _GET. Então, vamos comentar isso rapidamente. Portanto, temos nossa matriz _GET. Nós temos essa variável. E tem algumas coisas nele. Agora, só temos uma variável sendo passado para ele, que é nome. Mas se pressione Enter, agora podemos ter duas variáveis. Podemos ter nome e idade, por exemplo, se queremos chegar a idade e também o nome de uma pessoa, curiosamente. Então agora _GET vai ser um dicionário com dois elementos, com dois pares de valores-chave. E a primeira key-- eu vou escrever até um presente na placa também. Temos nosso dicionário é _GET. Desculpe, é um pouco difícil de ver. Mas dentro do nosso dicionário temos nome, que vai ser algo que nos é dada. E nós vamos ter idade, que é também vai ser algo que nos é dada. E esta é a totalidade do nosso dicionário. Então, ele tem dois elementos na mesma. E isso porque foreach laços são inteligentes, nós poderia pensar, e corretamente poderia pensar que foreach possível percorrer este dicionário, imprimindo os valores dada pelo nome e idade. Então vamos de fato fazer exatamente isso. Vamos construir um loop foreach. E nós vamos fazer para _GET como. E nós vamos fazer o seguinte. Então vamos ver o que acontece se nós digitamos apenas palavra, e depois dizer palavra eco. Nós também vamos a ecoar uma nova linha apenas para torná-lo um pouco mais claro, o que está acontecendo. Então vamos ver. Ele não está me dando algum erro. E nós vamos fechar este. No nosso site, você vai estar fazendo um monte de que, ao longo de pset7. Assim, dizemos meu nome é Sam. Minha idade é 45. Não é. Mas ele imprime, como esperado, Sam 45. E assim você vai perceber que o loop foreach fez-- aqui, vamos voltar ao que por isso é até no board-- chegarmos _GET como palavra. E havia quatro coisas em _GET. Mas ele só impressos duas coisas. foreach, sendo seu auto inteligência, assumiu que o que realmente queríamos foi os valores, não as chaves. Mas há uma maneira que poderíamos imprimir as chaves, bem como, se quiséssemos. Se quiséssemos saber o que também estas variáveis ​​foram chamados, há uma maneira que nós pode acessar esta bem. E a maneira de classificar de fazer isso, por isso podemos dizer, vamos realmente dividi-lo em pares de valores-chave. Então vamos ver o que acontece agora. Portanto, temos a chave. Nós temos valor. Nós temos um outro novo linha para facilitar a leitura. E vamos ver o que acontece quando fazemos isso agora. Eu não sei quantos anos é Jason. Jason de 15. Portanto, temos nome Jason, de 15 anos. Então, nós fomos capazes de acessar a chave e pares de valores deste dicionário apenas dizendo como pontos-chave para o valor. E isso é uma sintática foreach pouco açúcar que permite você acesse as coisas no dicionário. Portanto, esperamos que este tipo de enfatiza a potência do loop foreach. Você pode muito bem jogar qualquer coisa que parece iterable, como qualquer coisa que tenha múltiplo elementos como um array, como um dictionary-- esses são dois principais coisas que você estará trabalhando com tanto na vida e na pset 7. Então você pode jogar esse material para ele, e ele vai descobrir o que você quer fazer com ele. Ele vai dizer: OK, eu vou ficar estas coisas aos dados que foi passado para mim. E isso é algo que você é vai estar usando um monte de em pset 7. Eu estou indo para rolagem rápida para baixo só para ver onde eu estou. As pessoas têm perguntas neste ponto? Perguntas em tudo? Sim? AUDIÊNCIA: Então, com a chave e valor, você poderia nomeá-lo de qualquer outra coisa e ele continuaria a trabalhar? COLUNA: Oops. Uau, eu apaguei totalmente toda a linha. Ótimo trabalho. Então, a a. Chave e valor é apenas uma convenção. É útil. Você poderia obter algum projeto pontos, talvez alguns pontos de estilo para fazer isso, porque realmente transmite a intenção. Mas nós dizemos um e Yarp. AUDIÊNCIA: Você não tem que mudar nada no arquivo HTML a fim de refletir isso? COLUNA: Nem um pouco. AUDIÊNCIA: E ele só sabe que por causa da iguala maior than-- COLUNA: Sim. AUDIÊNCIA: indicador --que que that's-- COLUNA: Sim. Isso é uma sintaxe foreach, mas sim. AUDIÊNCIA: Não existem tipos. Assim que se você queria idade para ser apenas um número? Existe uma maneira de fazer isso? COLUNA: Existem maneiras de verificar se variáveis ​​obedecer a determinados tipos. Então PHP pede um pouco mais de você porque não existem tipos em. Algumas maneiras ele pede menos. De certa forma ele pede mais. Porque se você tem apenas algo em uma variável, você não tem idéia de que tipo é. Mas se você for esperto sobre as variáveis que você atribui tipos de e para certificar-se de que funciona somente return-- você quer funções para retornar somente um tipo de valor de modo que você pode basicamente espera que a variável que você voltar a partir de uma função será do tipo que você acha que vai ser, basicamente. Mas existem alguns métodos pelo qual você pode verificar. Eu não me lembro-los fora do topo da minha cabeça. Eu estou esperando por ele para ficar azul. isint? isstr? Existem métodos construído em PHP que pode verificar o tipo de variáveis ​​para você. Mas se você atribuir variáveis inteligentemente, você não deve tem que fazer isso muito em pset 7. Mas existem aqueles métodos. E isso é algo que está na própria linguagem. E eu não me lembro a sintaxe precisa. Poderíamos até mesmo procurá-lo. Mas o tempo é da essência. Alguém mais tem tiver mais alguma dúvida? Sim. AUDIÊNCIA: Eu tenho só mais uma. Então você mencionou o método GET, mas você não mencionou o método POST. Será que estamos voltando para isso? COLUNA: Sim, nós vamos voltar a isso. Isso é exatamente o que eu estava procurando para o meu telefone, que agora caiu no sono, mas eu vou encontrá-lo. Basta ter certeza que nós batemos todas as notas PHP. Sim, não há nenhuma versão de depuração. Sim, temos mais algumas coisas que nós queremos fazer agora, neste momento. Então, falando de POST, que você mencionou, a única diferença entre GET e POST é lembre-se que quando olhamos neste URL e vimos, oh, é igual a um nome e idade igual Yarp está bem no URL lá para nós. POST é um pouco mais reservado com a sua passagem de informação. Portanto, se você não quiser que um usuário a saber, por exemplo, você não queria que o nome de usuário ea senha da pessoa Atualmente logado para ser exibido em o URL, que é uma coisa razoável não querer na URL, porque alguém pode vê-lo. Se ligar a alguém para uma página, você não querem que sua URL grudado lá, porque isso iria permitir que as pessoas para acessar apenas com o colar de uma URL em vez de realmente preencher um formulário. POST é um pouco mais reservado. E as únicas coisas que nós vamos ter que mudar são este método, a mudança de obter para enviar mensagens. E, em seguida, no interior do HTTP, em vez de acessar o _GET matriz, nós estamos indo para acessar o _POST array. E nós vamos perceber que, se abrimos este volta-se novamente, Jason declina lentamente na idade. nome Jason, de 14 anos. A mesma coisa aparece. Mas vamos para o URL e essas variáveis ​​não estão lá. E a maneira que POST passes-- por isso lembre- como olhar para a fonte de uma página. Nós vamos para a rede. Nós atualizar. E isso é outra coisa que POST vai lhe dar avisos sobre. Você pode ter visto uma caixa, um texto caixa como esta no seu browser. Você tem certeza que quer para enviar um formulário de novo? POST é o que está enviando essas formas. Porque, basicamente, se você enviou o seu informações cartão de crédito para alguém, que não vai aparecer na URL. Isso vai ser um pedido POST. Então, quando você atualizar a página, é reenviar esse pedido post. Então, agora nós queremos enviar o formar de novo, porque ele não vai para criar todas as compras duplicadas. E nós vamos perceber que aqui em baixo, o método que estamos usando é POST. E, de fato, transferir bytes. Transferiu 401 deles. Programa de belos pequenas. Mas não há nenhum lugar que podemos ver os valores que estão sendo passados. As páginas da web podem ver a si mesmos, mas nós, como usuários não são capazes de ver, a menos que você é um hacker. Se você é um hacker bom, você pode olhar. Se você souber o básico formato do HTML, os valores fará se a conhecer nas páginas. Você vai ser capaz de ver. Os valores vão estar lá, eles são apenas um pouco menos óbvio para você de acesso, basicamente. Temos mais perguntas sobre GET, POST antes-- o que vamos fazer a seguir é realmente olhar para algum código que você está dando em pset 7, falar sobre como ele usa alguns destes conceitos, e falar sobre o as coisas que você está indo ter que fazer um pouco no pset 7. Mais alguma pergunta antes disso? Mais perguntas que vocês têm? Ótimo. Tudo bem, vamos olhar um pouco de pset 7, sem dúvida que você é tudo mais animado. Quero dizer, isso é algo que David passa por um pouco. Mas teremos três diretórios no parte superior, bem como um ficheiro de configuração. Isso é para bancos de dados, o que nós vamos falar em cerca de cinco minutos. Inclui, você nunca precisa procurar neste diretório se você não quer, mas é bom para sei que existem todos os tipos de ajudantes. Helpers é como funções votos. E então nós temos de configuração, que define algumas coisas. Existem algumas funções que tem CS50 escrito que estão em auxiliar e de configuração. E alguns dos que PHP já sai em arquivos vai fazer um monte de mais sorte trabalho de perna de obtuso para você. Como se entrarmos em público login.php, que é o que mostra-se à direita quando você entra em pset 7. Vamos ver o que há este exigir declaração. E isso como uma espécie de afiada incluem, hashtag incluem se você é de uma geração mais nova. Mas isto basicamente diz que eu preciso de acesso a todas as funções em config.php. E você poderia ter um requerem para todos os tipos de outras coisas. configuração realmente requer ajudantes. Assim, sempre que você precisar configuração, você também é incluindo ou exigindo ajudantes também. Então, que lhe dá acesso a todos os funções legais que vamos usar, coisas como render. Eu estou indo realmente para aliviar esta um pouco para baixo. Assim, a função então nós estamos indo a pé através de pouco antes de passarmos para SQL um pouco bit é a função login.php, apenas porque ele usa alguns dos tópicos que nós acabamos de falar em PHP. Você vê a primeira coisa é se $ _SERVER. Esta é uma outra variável global que você vai estar lidando. É como _GET e _POST, mas o que servidor contém é isso pode deixá-lo saber se o método de solicitação foi um GET ou um POST. Como anteriormente o que estávamos fazendo é apenas em nosso código que escreveu, estávamos apenas mudando-o para ser GET e POST dependendo do que o HTML tem. Mas existem páginas que podem ser acessado com ambos os tipos de solicitações. E você pode querer fazer coisas diferentes dependendo do tipo de pedido, assim como o login faz. Assim, você pode verificar que o pedido método por meio de chaves que acessam, através da utilização de uma chave e obter o valor de algo no dicionário _SERVER. Então, isso é outra mundial como variável _GET e _POST. Se for GET, queremos tornar o formulário de login. Renderização é uma função que, basicamente, apenas coloca-se o HTML apropriado e passa alguns parâmetros. Este título é um parâmetro que é usado na exibição, curiosamente, o título da página no pergunta, a coisa aqui em cima, ou dizer Olá em nosso exemplo anterior. Agora nós temos uma coisa diferente. Else se é POST, nós fazer algumas outras coisas. Nós estamos usando esse método vazio. Não é existir, ele está vazio. E nós vimos antes, PHP tem uma boa quantidade de construído em métodos que se houver David will-- são métodos que são úteis para você, eles vão ser alertados para você na caminhada por que David dá a visão geral começando, e também pedaços de votos Zamyla. Ela está de volta todos. Todos nós podemos regozijar. pedir desculpas é uma função apropriadamente chamado que basicamente só imprime algumas mensagens de erro, CS50 porque é muito educado. E agora isto, este é um pouco complicado, porque isso é o lugar onde nós estamos consultando o banco de dados. Agora nós não falamos sobre bancos de dados. E nós estamos indo na próxima cinco minutos mais ou menos, no máximo. Mas esta é uma função CS50 que tem escrito para obter uma mesa, basicamente, a partir de um banco de dados que estamos trabalhando com no pset 7. Eu sou muito ruim com o meu indexação hoje zero. Mas sim, é 7. Então consulta vai retornar um matriz, é, basicamente, o bit de chave. E porque essas coisas não têm digitação, de modo linhas é um array de arrays. Porque quando estamos pensando em uma mesa, o que nós vamos fazer é, como você aprendeu na Série de Exercícios como o jogo de 15, de qualquer maneira onde você tinha que usar uma matriz dupla, nós, basicamente, ter variedade de outros matrizes faz uma tabela. E você tem linhas e colunas. E então você pode acessá-los como [0] [1], você começa a [0] [1]. Coisas básicas como essa. Então, o que estamos fazendo aqui nesta função, estamos pedindo o banco de dados se o usuário é a tentar entrar, que será enviado através do método POST. Vamos ver o que estamos recebendo o nome de usuário de _POST. Eles vão ter enviado, o usuário ou você, enviará um valor através de um formulário através de POST porque é nome de usuário e senha coisas. Estamos verificando o nome de usuário para ver, é isso em cima da mesa? Porque, se um usuário está fazendo logon em, em seguida, seu nome de usuário deve ser armazenada na tabela de os usuários que existem para este site. Então, basicamente, se o usuário está no banco de dados, consulta vai retornar essa linha, que é uma matriz. Mas a parte complicada é que se mesmo se a matriz dupla é de apenas uma linha, mesmo que seja um uma linha array-- como você tem basically-- se você tem um tamanho de uma matriz que está segurando uma outra matriz, você está realmente lidando com uma coluna. Mas ainda é tratada como uma matriz dupla. E é aí que as vezes podem ser complicado, porque nós temos linhas aqui. Nossa variável é linhas. E então nós estamos criando uma nova variável chamada linha e defini-la igual a a primeira linha de filas. E você vai perceber que o comentário diz que é a primeira e única linha. Então este é o complicado parte onde agora funciona pode retornar matrizes muito facilmente. Não há mallocs. Você não vai ver mallocs. Então você não vai ver as falhas seg. Mas funções ainda estará passando em torno de matrizes e de dados em grupos. E você tem que ter cuidado com o que exatamente suas funções retornarão. E mesmo que seja um coluna como esta, consultar ainda está indo para retornar uma matriz de casal. Assim, para que o acesso column-- ou você pode pensar em tudo isso como invertida uma vez que estamos falando de linhas. Mas, para acessar uma linha que, você não pode simplesmente dizer linhas. Mesmo que seja uma linha, você tem que não rowsrows [0] para eliminar este tipo de pouco exterior da matriz e tem apenas a sua uma linha. Fazer algumas outras coisas. Há uma função chamado password_verify que verifica a senha que foi postada. E então vemos outro mundial variável aqui, _SESSION. Basicamente id da sessão é como você manter o controle de se alguém está logado ou não. Então, agora com login.php, estamos logar um usuário. Então, o que nós queremos fazer é que nós queremos dizer o id da sessão é igual à linha id, que só faz sentido porque cada linha terá um ID diferente número como parte da tabela. Nós vamos entrar em um SQL segundo, por isso, se nada disso Parece um pouco como blah, então tudo será esclarecido. Mas vamos definir o id igual a coisa apropriada, registrar o usuário em. Desculpas se alguma coisa der errado. E isso é logins propósito em vida como professor Malan diria. Assim que foi login.php. E um monte de código PHP que você escrever em pset 7, que vai ser um pouco. Não se esqueça de chmod para as permissões adequadas. Haverá um pouco sobre que, no início da especificação. Mas o PHP que você é escrita vai ser fazendo coisas que é semelhante a este. Você vai ser acesso a algumas coisas que são dadas a você no variáveis ​​globais do PHP que está lidando com a atual usuário logado, se existe temos pedidos foram enviados a esta página, coisas diferentes assim. E também será potencialmente iterar linhas desta coisa. Em uma função, consulta diferente não voltar essa matriz dupla. E, se houver mais de um fileiras em que, Se houver é-- sim, se houver são mais de uma linha em que, então ele irá ser uma mesa. E você pode querer fazer uma iteração através das linhas de essa matriz usando o loop foreach que descrevemos. Então, se você faz foreach em um duplo array, qual será o word-- aqui, Na verdade, eu vou escrevê-lo. Vou escrever rápido aqui. Se temos um foreach de linhas como linha, qual é o tipo de linha? Alguém sabe? Você entendeu? Então linhas é uma matriz de casal. Então, o que é foreach vai inferir que queremos a partir dessa matriz dupla se estamos interagindo sobre isso? Podemos assumir que basicamente ele vai ser ou elementos, ou linhas ou colunas, basicamente. E assim nós, linhas e colunas pode tratar como a mesma coisa. Basicamente o que o loop foreach vai a fazer é que vai retornar as linhas. linha vai ser do tipo de linha, Considerando que as linhas é uma matriz de casal. Então, se você dá foreach uma matriz dupla, é não vai fazer uma iteração mais de um nível profundo. Que é basicamente para dizer se há são oito células nesta mesa-- 1,2, 3 4, 5, 6, 7, o 8-- loop foreach não é vai passar por cada uma dessas células. O que o loop foreach vai fazer foi ele irá passar por esta linha, dar-lhe toda esta linha. E então ele vai passar por essa linha. Por isso, só repete um nível de profundidade. Se você adicionar um nested loop foreach, então você pode tratar cada linha retornada a partir de linhas, você faz linha foreach como elemento, Digamos. E então você pode ecoar o elemento. Então essa é uma breve pouco de reciclagem sobre como você pode estar usando foreach laços no contexto de consulta. Há alguma pergunta sobre PHP? Qualquer coisa antes de nós passar para falar sobre SQL ea diversão de banco de dados? Sentindo-se bem? Sentindo-se bem. Tudo certo. Vamos passar de volta para o PowerPoint, que você provavelmente perder. SQL, yay. As pessoas que estão em minha seção tipicamente vai saber que subtítulos de siglas são sempre apenas as primeiras palavras Penso que jogo que algorithm-- que sigla. Não é um algoritmo. Então, é um banco de dados SQL. É uma linguagem que trabalha com bancos de dados. E todos os bancos de dados são é tabelas, pelo menos na maneira SQL que os representa. Outra maneira de pensar sobre bancos de dados é bases de dados são um conjunto de chaves e valores basicamente. Você pode pensar em um banco de dados como um dicionário e também como uma mesa. Basicamente, é uma maneira de associar dados diferentes com outros dados, muitas vezes através de linhas e colunas. E essa é a maneira que é SQL funciona melhor. Portanto, este é um exemplo de uma tabela. Eu tenho alguns exemplos de pessoas na minha seção, que Eu não tive tempo para mudar. Mas nós temos coisas como ID, nome, superpotência, e cidade natal. Eu não sei onde qualquer um é a partir na minha seção, então eu só vou assumir todo mundo é de Nova Iorque Cidade porque eu tenho uma alta estatística probabilidade de estar correta. SQL levará automaticamente cuidar da coluna ID para você. Se você inserir uma nova linha em um banco de dados SQL, ele será incrementado que Número de identificação e apenas basicamente ficar como cinco nomes, superpotência, cidade natal, quem quer para o fim do referido quadro. Então ID é uma coluna você nunca tem que se preocupar. Mas, como no caso de login.php, quando estavam recebendo a identificação da sessão de uma tabela e usando apenas ID, ID é uma forma de identificar de forma exclusiva um elemento de um banco de dados. Então, se nós tivemos dois Sams, ambos CS50 que ensinou, e de que ambos eram de Milwaukee, esses seriam ainda tem números de identificação distintos e, assim, ser distinta no contexto da mesa. Então é isso que SQL está lidando com, trabalhando com no back-end. Ora, estes são os quatro comandos que você vai precisar para trabalhar com SQL. E eu joguei-los todos em um slide. Mas nós vamos passar por todos eles individualmente. O primeiro comando é UPDATE, que faz o que você poderia esperar. Digamos que você tenha alguns dados em a tabela que está fora de data. Como se você está mantendo a par de nomes de pessoas e as idades, se alguém é a idade aumenta, em seguida, você vai querer entrar e atualizar idade apenas dessa pessoa. Para um exemplo que funciona com o nosso primeiro mesa-- não se preocupe sobre a escrita de todos estes comandos ao mesmo tempo. Mas se você tem atualização para baixo, que vai ser bom para essa parte, porque nós vamos voltar para a mesa. Então, se nós voltar para a mesa, vamos dizer algo que aconteceu Foi houve um terremoto ou uma linha de falha que dividir diretamente através de New York City. E nós queríamos para atualizar todos que viveu em New York City. Todos eles tiveram que se mudar para a Pensilvânia. Isso não é uma cidade natal. Todos eles tiveram que se mudar para New Haven. Aí vamos nós. Então, todo mundo em Nova York move-se para New Haven. E então isso é algo que é editando três registros nesta tabela. Mas em SQL, você pode fazer que em apenas um comunicado. Então vamos voltar para atualizar. Deixe-me rapidamente apagar esta placa novamente. Quando estamos falando actualização, existem algumas partes da sintaxe que são fundamentais. Bem, toda a sintaxe é a chave. Mas o material em verde é opcional. São obrigados a branco, nomes predefinidos como. E a luz azul são coisas que variam de acordo com a tabela. Então é isso que está acontecendo com o esquema de cores aqui, lá em cima. Portanto, se queremos atualizar apenas as linhas das pessoas que vivem em Nova York, Então, o que nós faríamos se nós disséssemos atualização? Então mesa é onde colocamos o nome da nossa mesa. Vamos apenas dizer o nome de nossa mesa é a mesa um. Por isso, queremos atualizar a tabela um. E nós queremos set-- o que queremos para definir? Bem, quero dizer, PHP assim column-- trata linhas como identificadores únicos. E, em seguida, são colunas os diferentes campos desses elementos do banco de dados. Assim, o primeiro elemento de base de dados tem um nome de Sam, superpotência do CS50, e uma cidade natal de Milwaukee. Então, se nós o referido conjunto, vamos olhar para os parâmetros de novo esse conjunto toma. Temos coluna é igual ao valor. Por isso, queremos dizer que alguns column-- que lembrar é um field-- queremos ver uma campo igual a algo novo. Então, se nós apenas disse atualização tabela 1, definir o nome igual Elliot. Obtenha algumas pessoas da nova seção no essa. Mas se nós apenas fez uma atualização da tabela definir o nome igual Elliot, o que seria o olhar tabela como depois disso? As pessoas têm alguma idéia? Sim. AUDIÊNCIA: Tudo em que linha se tornaria Elliot. COLUNA: Tudo em qual linha? AUDIÊNCIA: Na primeira linha. COLUNA: Na primeira linha? Por que a primeira linha? Eu não quero pegar em você. AUDIÊNCIA: Talvez tudo em toda a mesa? COLUNA: Tudo em a tabela inteira, sim. E isso é exatamente certo Eu porque-- estava apenas te ajudar um pouco há-- porque nós omitimos a cláusula opcional WHERE. Se você não tem o ONDE cláusula, o que este comando fará é que vou trabalhar com cada única linha na tabela. O nome de toda a gente tornar Elliott, basicamente, Elliot, que é muito feliz. Ou Yanni, um dos dois. Mas o nome de todo mundo vai mudar. Então, a maneira como usamos o ONDE clause-- e isso se aplica a todos os wheres que estão em cada um dos estas coisas diferentes. Então, você vai perceber que SET tem coluna de valor igual. E o mesmo acontece com WHERE. Mas estes são diferentes tipos de declarações. Então, a coluna é igual ao valor em SET está em missão. Como estamos dizendo que queremos para definir o nome igual a Elliot. Mas nas cláusulas WHERE, estas são declarações de igualdade. Então, vamos dizer que só queria alterar o nome da pessoa para Elliot se o seu nome era Ryan, vamos dizer. Assim, quando dizemos ONDE nome é igual a Ryan, que faria com êxito única mudança o nome-- seria apenas alterar o campo de nome nas fileiras onde o campo de nome é igual ao Ryan. Então, se tivéssemos várias pessoas chamado Ryan, todos os seus nomes mudaria para Elliot. Isto é semelhante ao exemplo se de uma linha de falha divide New York City e todo mundo tem que mover-se para New Haven, a maneira que pudermos fazer isso em uma instrução é ATUALIZAÇÃO table1 SET cidade natal = New Haven onde cidade natal é igual a New York City. Este é o poder de a instrução UPDATE. Podemos selecionar qualquer número de linhas através de afirmações verdadeiras sobre os campos nessas linhas. Não podemos dizer set ATUALIZAÇÃO table1 name = Elliot ONDE linha = 1, exceto que nós podemos se dissermos ID = 1. Então, nós estamos indo para ser trabalhando com igualdade de campos, a igualdade de colunas. Mas usando o campo ID é uma forma de selecionar linhas individuais, especificamente, porque o campo ID é um exclusivo identificador em um banco de dados SQL. Assim como atualizar uma linha, ID é igual a 1. Atualizando linha dois, apenas mudar esse número de identificação. Mas o poder do WHERE é que nós pode atualizar as coisas com base no que o seu valores atuais de certas coisas são. Sim Elliot? AUDIÊNCIA: E se você quiser a-- novamente, isso é outra questão. Mas a minha primeira pergunta foi: onde isso está acontecendo? Onde estou atualizando esta? É este um código PHP? COLUNA: Onde você atualizar, sim. Nós estamos indo falar sobre onde tudo isso acontece espécie de uma vez vamos em todos os comandos. Mas o que você precisa sabemos agora é, basicamente, que seu banco de dados SQL existe como algo para ser acessado pela consulta função, que define CS50. Portanto, se você usar a função de consulta, você pode acessar esta tabela. Então você estará enviando estes comandos para sua mesa em arquivos PHP através da função de consulta. Você também pode brincar com sua tabela diretamente. E essa é a melhor maneira de testar estes tipos de comandos. E nós vamos passar por exatamente como fazer isso em apenas um pouco. Então, isso é o comando UPDATE. E o resto dos comandos vai ser uma espécie de semelhante, trabalhando em coisas semelhantes. O INSERT INTO é, provavelmente, o mais diferente de UPDATE. Vou deixar isso para lá apenas um pouco e trabalhar aqui. Então INSERT INTO, você verá ainda que a tabela é o mesmo. Você deseja inserir. A capitalização, SQL é caso insensível. Então você não tem que capitalizar essas coisas. Por convenção, as palavras em branco são capitalizados. Mas eu também codificados por cores deles. A única razão que você capitalizar aqueles quando você está digitando- é apenas para enfatizar aqueles que são constantes. E assim que você pode olhar para a capitalização ou o fato de que Eu colori-los de forma diferente. Então temos INSERT INTO, vamos fazer table1 novamente. Isto é tudo em uma linha. Eu só estou separando-o por as diferentes declarações. Então não se preocupe com o fato de que table1 foi parar na segunda linha. Então, nós queremos fazer um INSERT INTO Table1 alguns valores. E você vai notar a opcional bit, o que eu vou chegar em um segundo. Então temos VALUES. Então, digamos que queremos adicionar Andi para a nossa mesa, porque perdemos Andi. Andi está doente. Então, vamos adicionar Andi para a nossa mesa. Lembre-se que o número de identificação é atualizado automaticamente. Então, os únicos campos nós precisa se preocupar com são nome, superpotência, e cidade natal. E assim, a maneira que nós fazemos que, olhando para a nossa sintaxe, é que nós temos só tenho um parênteses, com vírgula valores separados, cada um dos quais é um valor. Então, se nós queria inserir Andi em nossa mesa, tudo o que temos a fazer é Andi direita. O que há de superpotência da Andi, pessoas na seção de Andi? Ela gosta de voo, ou gosta velocidade, ou algo assim. O que já temos lá em cima? Temos CS50, vôo, velocidade e força. AUDIÊNCIA: A viagem no tempo. SPEAKER: A viagem no tempo, incrível. Então temos Andi, tempo viagens, e sua cidade natal. Essa é uma pergunta muito boa. New York City, a menos que alguém sabe. Todo mundo é de Nova York é o lição a tirar de hoje. Portanto, esta declaração seria inserir, como uma quinta linha, com o tempo de viagem superpotência e uma cidade natal de New York City. Mas o campo opcional é basicamente uma maneira para especificar exatamente quais colunas você quer inserir as coisas em. A maneira que nós estamos fazendo isso agora, Andi, curso do tempo, New York City, vai na ordem exata de nosso nome mesa--, superpotência, cidade natal. E se você queria fazer algo diferente do que isso, como dizer que você não sabia superpotência de alguém, como como eu não sabia de Andi superpotência no início. Então tudo que eu sabia era seu nome e sua cidade natal. O que eu poderia fazer é que pude fazer-- eu vou apagar isso rápido. Eu quero atualizar somente as colunas. E é aí que o opcional lista coluna entra em jogo. Eu só quero atualizar nome e cidade natal. E então eu vou dizer VALUES. Eu vou fazer Andi e New York City. Se eu tivesse omitido da lista de colunas e acabou de fazer essas duas coisas, onde iria New York City ter ido? A coluna que faria New York Cidade foram colocados em? As pessoas têm alguma idéia? Superpotência, exatamente. Então, isso vai apenas ir em ordem. E uma vez que atinge o fim do lista, ele só vai parar de encher as coisas em. E os valores que ele vai ficar em todas as colunas só vai ser NULL. Então porque nós especificamos nome e cidade natal, nós vamos ter ID 5, nomear Andi, superpotência NULL. Então superpotência é um valor não inicializado. Você não vai necessariamente chegar a Valgrind mesmos erros se você tentar e acessá-lo. Tudo vai ser muito bem zerado fora, porque NULL é um valor em SQL. Isso é uma constante. E, em seguida, cidade natal será New York City. Então esse é o comando INSERT INTO. Antes de passarmos, há mais dois comandos. As pessoas tem dúvidas sobre UPDATE, sobre INSERT INTO, cerca de SQL geralmente antes de avançarmos para os nossos pedaços finais? As pessoas se sentem bem, ótimo. Adoro. Então vamos falar sobre SELECT. Indo vala ATUALIZAÇÃO aqui. E escolha vai ser muito semelhante. O objetivo do SELECT, O propósito de SELECT na vida é dar-lhe um monte de colunas que satisfaçam determinadas condições. E quando eu digo satisfazer certas condições, sua mente pode imediatamente voltar para aquela cláusula WHERE que surgiu em UPDATE. E essa cláusula é exatamente lá em SELECT. Se não colocar o ONDE cláusula e dizemos SELECT nome, hometown-- escrito que um pouco wrong-- nome, cidade natal FROM table1. Se nós apenas dizer que, o que SELECIONE vai nos dar é que é vai dar-nos uma double-- uma mesa, em vez. Uma matriz dupla se estamos pensando em PHP sentidos. Mas ele só vai dar-nos uma duplo conjunto de duas nome columns--, e cidade natal. E ele irá ignorar ID. E ele irá ignorar superpotência. E vai apenas dar-nos cada única linha do referido quadro. Então, se nós apenas inserido Andi, teremos Andi. E nós vamos ter o original quatro. Se eles já foram atualizado, que irá ser refletida, et cetera, et cetera. Portanto, este é porque nós não utilizar a cláusula WHERE. Mas podemos usá-lo exatamente da mesma maneira que usamos em UPDATE. Se nós só queremos uma tabela dos nomes e super poderes de pessoas vivendo em Nova York, podemos executar uma instrução como SELECT nome, superpower-- Eu só vou deixar isso-- DE table1 ONDE cidade natal = New York City. Então, isso vai mostrar que você pode ficar totalmente diferentes colunas, e em seguida, colocar as colunas que você não está mesmo ficando para trás na cláusula WHERE. Nós não querem mesmo o cidade natal de todos. Mas queremos que o nome e a superpotência de pessoas cuja cidade natal é Nova York. Então, isso é algo que nós pode fazer com o ONDE cláusula é que podemos lidar com colunas que não necessariamente querem de volta. Da mesma forma como UPDATE, nós podemos lidar com colunas que nós não necessariamente deseja atualizar. Podemos atualizar a cidade de todos que o nome é Sam, por exemplo. Podemos atualizar a cidade de todo aquele cujo número de ID é 2. Então, basta atualizar o cidade da segunda linha onde não temos de lidar com necessária a pergunta comum. E excluir é, como seria de esperar, DELETE FROM table1. E então nós temos outra cláusula WHERE. Assim, podemos dizer WHERE ID = 1. Excluir a primeira linha. E DELETE será sempre excluir uma linha, ou ele vai excluir algum número de linhas. DELETE FROM tabela WHERE cidade natal = New York City irá apagar todos em New York City. Isto é, se houve uma praga trágico súbita e você só queria remover todos da mesa que viveu em uma determinada cidade que foi atingido por uma praga. Que eles possam descansar em paz. Estes são os quatro comandos SQL que você vai precisar usar. Você pode até não precisar usá-los todos. Mas estes são os quatro CS50 que você espera para ser confortável com entrar em tanto questionário 1 e também pset7 e pset8. Há apenas que a tabela novamente. Neste, superpotência de Roy tem foi atualizado para feixes de laser, que é um exemplo que eu não uso. Eu não sei qual deles Roy prefere, mas força. Roy tem uma superpotência de força. Katherine não fazê-lo hoje. Isso é lamentável. Mas ela tem super-velocidade. Bem que foi PHP. Antes de falarmos sobre MVC, faz Alguém tem dúvidas sobre PHP? Agora SQL, PHP ou se de repente você tem chegar a uma pergunta sobre PHP? Ótimo. Tudo bem, nós está tudo definido em seguida. Então, falando um pouco cerca de vista modelo controladores, vamos voltar a alguns do material em pset7. Então, o que vista de modelo controlador é-- eu não sou indo para salvar as minhas alterações para acessar porque eu totalmente massacrados-lo. Mas, basicamente, temos dois coisas separadas acontecendo. Temos um público diretório que contém o código que vai ser executado e as páginas da web que serão visitados. E também temos este diretório visualizações. E vistas contém modelos. Isto é o que a função render-- vimos a renda função em um monte de código PHP CS50 que já escreveu para você, que leva em certos parâmetros. O que esse código está fazendo é que vai em vista, que são conjuntos de como código HTML pré-escrita, e é a inserção de valores em determinados lugares. Isto é como quando você entrar em CS50 Finanças, o mesmo cabeçalho é em cada página. O mesmo é rodapé em cada página. Isto é porque a maneira que é tornar os trabalhos ele vai corrigir automaticamente nesse cabeçalho e telespectador que você pode encontrar em vista. Nós, na verdade, pode entrar em cabeçalho, e olhe, é um arquivo HTML com uma cabeça. Tem algumas folhas de estilo. Você não precisa olhar para CSS para pset7 se você não quer. Mas você pode modificar -los se quiser, fazer seu Finanças olhar um pouco diferente. Tem alguns PHP em o cabeçalho um pouco para ver se houver um título diferente ele deve colocar neste cabeçalho. Mas apenas alguns outros scripts, e links, e outras coisas. Cabeça termina, corpo começa, e oops, temos este estranho pouco efeito. E há uma div, assim como uma espécie sem forma de elemento que tem uma idéia do meio. E então quando vemos rodapé, temos o fim de uma div. Temos um fundo, que é onde o texto do rodapé é. Fim da div, fim do corpo, fim do HTML. Então, o que é renda fazendo é tornar é uma espécie de remendar cabeçalho, um diferente arquivo PHP que conterá as coisas que reais você vai ver, como o quadro dos saldos se você está comprando ou vendendo ações. E então ele vai adicionar no rodapé. E a vista do modelo controlador idéia é que nós quer separar como as coisas parecem partir do código. É queremos separar o frontend e se o servidor, onde o frontend é as coisas que o usuário vê, o Nice visuals-- HTML, CSS, coisas assim, imagens, et cetera. E o backend é PHP. Este é o código que você escreve. Este é o lugar onde o código é fazendo operações reais. Isto é, quando você está adicionando um estoque para sua mesa, quando você está comprando e venda, que é backend. E podemos, como você viu, incluindo PHP diretamente em HTML. Então, o que nós poderíamos ter feito para esta atribuição é apenas teve um arquivo HTML para cada página, como login. E então nessa página, basta teve um enorme bloco de código PHP, incluindo todos os de que o código essa página especificamente seria necessário. E então nós poderíamos ter feito isso para a carteira. Poderíamos ter feito todas as compras e vender dentro das páginas individuais. Mas porque estamos renderização separadamente, a partir de onde estamos escrevendo o backend código, podemos facilmente mudar a forma como as coisas parecem sem mudando a cada arquivo único. Nós fazemos coisas como basta adicionar uma nova div ao fundo de-- Olá eu modifiquei o rodapé. Você pode apenas fazer coisas assim. Mas também, você pode mudar todo o layout visual sem afetar o que é indo no backend. E você pode mudar a backend inteiro e ainda tê-lo olhar apenas como fazia antes. este É a idéia de controlador de vista do modelo. E é realmente um paradigma imposto em algumas das linguagens de programação você pode querer usar para projetos finais. Se você fizer o desenvolvimento iOS, eles têm pontos de vista, que é o que você vê no iPhone, e então o servidor quanto como uma coisa separada. Você pode pensar sobre um pouco. Há um monte de binários em ciência da computação, que é engraçado, porque tudo é em binário. Eu não planejei isso. Isso foi um trocadilho não intencional. Sim, não trocadilhos. Mas, como arquivos .h e arquivos .c, há uma grande quantidade de separação das coisas que nós talvez não seja necessário. Assim, podemos apenas editar os arquivos h, ou alguém pode apenas ver um ficheiro.h e saber exactamente as funções que estão no C arquivo sem necessariamente saber sua implementação. Essa idéia de componentes de separação que dependem uns dos outros mas pode classificar de acessar um ao outro através de diferentes canais, passagem de variáveis, apenas incluem declarações, coisas assim, este princípio ajuda a criar aplicações que pode ser mais facilmente editado por várias pessoas, pode ser mais facilmente alterado ou alterações em grande escala, e são mais fáceis de depurar em uma série de maneiras. Muito rápido, eu tenho algumas dicas para pset7, que eu vou fazer tela cheia para que você não apenas olhando para as-- tippee ponta ponta. Não há que muitas dicas. Mas eu mencionei PHP é difícil de depurar. Duplos e triplos verificá-lo. Se o seu código não é apenas aparecendo na página, é provavelmente um erro de PHP, desculpe. Você nunca precisa de olhar para CSS se você não quiser. Mas uma vez que você está acabado, pode ser uma boa coisa pouco de diversão para simplesmente entrar e mexer com os parâmetros CSS. CSS e HTML são um exemplo de um modelo coisa vista controlador de estilo também, certo? Você poderia ter marcas de estilo no interior de elementos HTML. Mas se você tipo de terceirização-los a CSS, eles são mais fáceis de editar, and play com a volta, e se divertir com. Trate CS50 helper funciona como caixas pretas. Você não precisa saber exatamente o que está fazendo renda, mas confiar nele para sempre fazer o bem coisa dependendo do que você passá-lo, coisas como esta. E eu recomendaria acompanhando passo a passo de Davi, passar por todos os material, não apenas os todos, mas você realmente pode tratar essas caixas como preto. Não vá para estes funções de procura de bugs. E saudar o retorno de nosso overlord Zamyla. Ótimo. Há alguma pergunta finais antes que tipo de saltar para o dia? Eu ainda estou vivo? Ótimo. Pessoas LiveStream Oi. Ótimo. Há mais perguntas? Não? E então eu acho que nós somos bom para ir para hoje. Vou ficar por aqui um pouco depois, se as pessoas tinham dúvidas eles tinham medo de perguntar sobre o córrego. Mas, caso contrário, tenha um bom dia.