[Música tocando] DAVID J. MALAN: Tudo bem. Bem vindo de volta. Este é CS50. Este é o fim da semana 8. E como você sabe, nós temos bastante horário normal de expediente em alguns dos refeitórios, incluindo Annenberg. E alguns membros da equipe gentilmente tirou algumas fotos recentemente. E em honra de Dia das Bruxas, nós pensamos compartilhar uma vez que nos pegou de surpresa aqui no Salão Annenberg apenas a outra noite. Seu colega Jacob posou para essa foto, mas era mais divertido estava no Facebook, a que se seguiu conversa que aconteceu depois. Seu primeiro post em resposta a sua foto foi esta. Poucos minutos depois, ele decidiu para um up-se com isso. Ela passou então a ir a este, e, em seguida, ainda mais divertidamente é quando sua mãe entrou na conversa. E, em seguida, em última análise, parece que este foi apenas um artifício maravilhoso para um jogar o que está acontecendo. Então, se você gostaria para ver Jacob e outros, entre eles Cynthia Meng, que é nos bastidores da equipe zona CS50, ir para este URL e este jogo aqui. Assim, sem mais delongas, hoje nós continuar esta olhada programação web, e a criação real de programas que não funcionam em sua linha de comando, mas em vez executado dentro de um navegador. Presumivelmente, agora, ou muito Em breve, você vai estar no meio de implementação seu próprio servidor web, o que é diferente de programação web. O servidor web em pset6 tem tudo a ver software que sabe escrever como tomar Solicitações HTTP de um navegador, ou até mesmo de você, um ser humano, com um programa chamado Telnet, e em seguida, responder a esses pedidos ou por cuspir um arquivo HTML, ou um jpeg, gif ou um, ou até mesmo um arquivo .php. Mas com um servidor web, não é suposto basta abrir um arquivo PHP, algo que termina em .php, e então cuspir o conteúdo. É suposto fazer o que esse arquivo pela primeira vez? Por assim dizer. Não compilá-lo, dissemos na segunda-feira, mas rather-- Então, interpretá-la. PHP é uma linguagem interpretada, e assim por uma das características-chave em sua web servidor, embora implementado por nós, É essa capacidade de seu servidor web notar, oh. Este é um arquivo que termina em .php. Deixe-me não apenas enviá-lo para o usuário como se fosse conteúdo estático, mas deixe-me lê-lo linha por linha, da esquerda para a direita, e interpretá-lo. E para fazer, que você caras vão essencialmente chutar a um programa no aparelho, e em um monte de sistemas de computador, chamado apenas PHP. Esse é o nome de PHP o próprio intérprete de linguagem. Então, que peça vamos implementar para você, eo que resta para você, em última instância, é uma série de peças, entre as quais está implementando suporte para conteúdo estático. Mas agora, e com conjunto de problemas de sete, você é vai começar a transição para realmente escrever o código PHP que é interpretado em falar com um back-end banco de dados que armazena informações. Então, vamos entender melhor primeiro um par destes superglobals e quanto poder você sair da caixa de graça com uma linguagem como PHP. Coisas que você não tem implementar-se. Então, nós vimos na segunda-feira $ _GET, que é uma superglobal, que é apenas PHP falar de uma resposta global variável que você pode acessar em qualquer lugar. E o que está dentro de $ _GET? O que está dentro deste Superglobal que vemos? Certamente estatisticamente pelo menos uma pessoa sabe. O que está dentro de $ _GET? Sim? AUDIÊNCIA: É as variáveis você colocar na cadeia de consulta. DAVID J. MALAN: Perfeito. É as variáveis colocar na cadeia de consulta. Assim, em nosso exemplo mais antigo de reimplementar Google quando tivemos uma URL, e em seguida, ponto de interrogação, que demarca o início do HTTP parâmetros, então tivemos q igual alguma coisa, como q é igual a gatos, o que iria automaticamente dentro do que US $ _GET super-global para você, por causa do PHP, é uma chave de Q, e do seu valor de gatos. Em outras palavras, $ _GET e todos essas coisas são matrizes associativas, tabelas hash de tipos, que loja de chaves e valores. Agora, de volta a pset5, o hash tabela que você poderia ter implementado, ou o que você pode tentar Implementamos, realmente era efetivamente um associativa matriz, uma estrutura de dados através do qual você pode associar chaves com valores. Mas em pset5, os valores foram trivial. O valor foi essencialmente verdadeiro ou falso. É a palavra no dicionário? Então, quando você hash uma palavra como maçã para ver se a Apple está no dicionário, sua função de verificação presumivelmente retornado verdadeiro ou falso. Então, isso é efetivamente o valor que estamos recebendo de volta. Mas vimos na segunda-feira brevemente, certamente você pode associar mais interessante valores que apenas verdadeiro ou falso com chaves, como a maçã. Você realmente pode retornar um seqüência arbitrária, e, na verdade, isso é o que $ _GET e estes outras variáveis ​​permitem que você faça. Então $ _POST é semelhante em espírito, mas se você enviar um formulário via post, um método HTTP que é diferente usado para coisas como cartões de crédito, e informações privadas, e mesmo informação binária, como fotos, essas coisas acabam dentro de $ _POST. E, na verdade, para arquivos como jpegs e outros enfeites, há ainda um outro que não é aqui chamado $ _FILES também. Assim, o servidor que não vou me debruçar sobre demais muito, mas dá-lhe acesso classificar de detalhes de nível inferior sobre o próprio servidor que você está usando. Biscoito e sessão, porém, vamos efetivamente ver agora. O último é o que usamos para implementar a noção de um carrinho de compras. A um super simples, mas recordação que tivemos esse exemplo aqui, contando quantas vezes você tinha visitado esta página antes. Mas hoje, em vez de apenas olhar para o efeito deste, vamos abrir Inspector do Chrome, que você pode geralmente fazer clicando ou Controle direita clicando em qualquer lugar em uma página web, em seguida, escolha inspecionar elemento. Ou você pode ir através do menus que descrevemos em especificação de pset6. E eu estou indo para a guia Rede aqui, e vamos observar por um momento o tráfego HTTP que é indo e voltando. Deixe-me primeiro ir em frente e limpar o cache do Chrome. Então, alguns de vocês podem estar familiarizados com esta técnica já, e nós estamos indo para usá-lo por aqui fins de depuração. Agora, como computador os cientistas vão começar fazendo isso para depuração efeitos, pelo que vamos limpar o cache, tipicamente, de modo que nós pode se livrar de coisas chamadas cookies. Então, provavelmente você está familiarizada com o que são cookies, ou pelo menos que eles existem, mas o que é seu entendimento deles, como apenas um utilizador de computadores, o que é um cookie? Sim. AUDIÊNCIA: É um pouco de-- bem, não bit em um termo de ciência da computação. É uma peça de dados que um site envia para você, a fim para ser capaz de registrar estatísticas sobre você. DAVID J. MALAN: OK, bom. Portanto, é um pedaço de dados que um servidor, coloca em seu computador, e vamos generalizar ainda mais, é uma chave value-- bem, que está ficando mais preciso. É uma peça de informações, um pedaço de dados, que um servidor é capaz para colocar no seu computador e, muitas vezes, o servidor faz este, de modo a lembrar quem você é. Assim, por exemplo, as probabilidades são provavelmente você está registradas em sites como o Facebook, ou Gmail, ou outros antes, e você ingresse em sua nome de usuário e senha, e em seguida, depois disso, para algum número de minutos ou horas ou até mesmo dias, o servidor que memoriza você é, de fato, logado. Agora, como é que realmente está acontecendo? Porque você certamente não está redigitação seu nome de usuário e senha toda vez você navegar para um página diferente no Facebook. Então não é que o biscoitos são a resposta. Um cookie que você pode pensar que, tipo de gosto, uma mão digitais selo que você pode obter em um parque de diversões parque ou um clube que, essencialmente, indica que você tem estado aqui antes, e você já mostrado o seu ID para o segurança, por exemplo, e que o clube ou para o parque deve agora assumir que você já autenticado. Você já foram identificadas por ele. Então, com isso em mente, vamos abrir contador aqui. Deixe-me ir em frente, eu apenas fiz, e limpar todos os meus cookies. E agora o que eu vou fazer é segure a tecla Shift, apenas para uma boa medida, e forçosamente recarregar a página. Mudança apenas certifique-se que nada é armazenado em cache. E aqui está o pedido que ia e voltava. Então, aqui temos um pedido, e deixar me aproximar aqui em baixo, e um monte de presente é tipo de detalhes desinteressantes para agora que o browser automaticamente enviado, mas vamos clique em Exibir Fonte para ver os cabeçalhos matérias. E se você já mergulhou pset6 já, você certamente vai reconhecer as coisas assim, e talvez alguns dessas outras linhas aqui, mas o que é mais interessante para hoje se eu rolar para baixo, não para o pedido mas para a resposta de chamada, essa linha provavelmente parece familiar. Isso é uma coisa boa quando você vê um 200 OK. Aparentemente, esta é a data e hora no servidor e há um monte de coisas. Oh, isso é interessante. Acontece que sempre que você usa PHP, pelo menos neste servidor, o servidor que cospe versão do PHP que você está usando. O que, na verdade, para a segurança propósitos, não é uma coisa boa. Mas, vamos voltar ao que em outro momento, talvez. Mas agora esta é a linha suculento hoje, e vimos brevemente alguns destes, Eu acho que com o Facebook quando cutucou em todo o Inspector na época, biscoito conjunto é o que está plantando aquele pequeno pedaço de informação para o seu computador. Este é um cabeçalho HTTP que é efetivamente informar o seu navegador, Chrome, IE, seja qual for, hey loja navegador em que o usuário do disco rígido ou na memória RAM do usuário, uma chave chamada PHPSESSID, que é um notação abreviada para o ID da sessão, e dar-lhe um valor de 0vlk8t, ponto, ponto, ponto. Um tempo muito longo pseudo seqüência alfanumérica aleatória. É apenas um número muito grande, mas ele é codificado com letras e números de modo a que o tamanho do que pode ser ainda maior do que os números por si só. E, em seguida, pelo caminho, caminho = /, que Significa apenas que esse cookie deve ser associada com o totalidade do site, não apenas um específico página da coisa toda. Portanto, este é esse selo mão virtual. É como se o servidor, Facebook, ou, no nosso caso o aparelho, tem 0vlk8t literalmente escrito e assim por diante, em sua mão. Observe que o servidor de, não fazer é não é guardar o meu nome, certamente não guardar a minha senha. Em vez disso, parece haver armazenar a informação de pseudo aleatório de modo que ninguém pode adivinhar o meu selo de mão é. No lado do servidor, Enquanto isso, o servidor vai se lembrar, provavelmente em um banco de dados ou algo assim, que o utilizador, que no futuro apresenta um selo de mão de 0vlk8t, ponto, ponto, ponto, deve ser associado a este particular, carrinho de compras, por assim dizer. Em outras palavras, se eu agora vá volta aqui e recarregue esta página, como é que o servidor sabe que visitei uma vez? Ou se eu fizer isso de novo, como é que o servidor sei que tenho visitado duas vezes? Bem, se eu descer a este pedido mais recente, o que agora é o terceiro que eu enviei no total, observe o meu pedido agora. Há ainda esta é solicitar até aqui, mesmo como antes, ainda há um grupo inteiro de coisas que nós ignoramos, como antes, mas o último cabeçalho, este tempo, porque eu já estive aqui antes, é uma apresentação de este selo mão virtual. Biscoito em que essa linha aqui, não definida mas bolinho cólon PHPSESSI = 0vlk8t, isso é automático de apenas meu navegador apresentação deste selo mão para que Agora o servidor, logo que se percebe, ooh, este é usuário 0vlk8t ponto, ponto, ponto, Agora me lembro que ele ou ela é e associar novamente com que o usuário seja qual for informações que eu quero, e todos essa informação pode ser armazenada por você, o programador, em $ _SESSION. Então, para ser claro, se eu abrir bem rápido no gedit o arquivo real, counter.php, no meu diretório público host local como antes, perceber que, de fato, Eu estou em última análise, o armazenamento em $ _SESSION Entre aspas "contra", o valor do contador anterior quais Recebo destas linhas até aqui que nós olhou para última hora mais um. Então, debaixo do capô, isso é todos os cookies são. É exatamente o tipo de digitais selo mão indo e voltando, e, francamente, se você abrir o Chrome do Inspector em qualquer site você visita hoje, com Super alta probabilidade, você vai ver, talvez um, talvez meia dúzia de biscoitos ser lembrado por você. E pior ainda, se os site que você está visitando todos os anúncios, que têm é certamente muito comum hoje em dia, e se esses anúncios estão chegando de algum partido central, alguém como Google ou AdWords como eles ligue para um de seus produtos ou outros fornecedores tais que vender anúncios, o que é interessante, e, francamente, o que é um pouco preocupante, sobre como funciona HTTP, é que se você tiver um anúncio embutido no Facebook.com e Google.com, e Harvard.edu, qualquer número de sites, por isso é tão que há um homem de meia que está servindo acima anúncios para todos os três desses sites, verifica-se que o os cookies são por domínio. Então se você tem um anúncio que vem do mesma empresa em diferentes sites, que empresa pode efetivamente controlar quem você está em todos os sites. Harvard pode não saber você está visitando o Facebook. Facebook pode não saber e você está visitando Harvard. Mas qualquer que seja serviço de anúncios eles estão usando, se esse domínio é presente em ambos Harvard.edu web páginas e páginas da web Facebook.com, este homem médio certamente sabe quem você é porque destes cookies sendo compartilhado do outro lado, ou em vez de, que o chamado intermediário. Então, vamos voltar a este em implicações de segurança dos mesmos, mas há uma grande quantidade de informações sendo armazenados sobre você a qualquer momento você visitar mais qualquer página web em a internet e realmente reduz a este mecanismo muito simples. O que acontece, então, se você é super paranóica e você decide ir em Chrome ou IE ou o que quer e desligar os seus cookies? O que acontece? Sim? Você realmente-- você já fez isso certo? Está bem. Não, vá em frente. AUDIÊNCIA: Alguns sites não têm uma função sem ele gosta Facebook. DAVID J. MALAN: Yeah! Assim, determinados sites só vai parar de trabalhar. E na maioria dos sites hoje em dia que, fundamentalmente, confiar em cookies, especialmente se eles têm que iniciar sessão em, eles estão indo só para quebrar. Porque a considerar alternativa, se o Web site não tem forma de lembrar quem você é, e, portanto, seu navegador não é representando cada com HTTP pedido deste selo lado, eficazmente um site como ir do Facebook ter que pedir-lhe para Conecte-se cada vez danado você mudar de página ou clicar em um link, o que certamente não é particularmente um bom usuário experiência. De modo que não é, também, entre os trade-offs. Assim, sem mais delongas, vamos dar por certo que com programação web, em linguagens como PHP, você pode se lembrar informação como essa no conjunto de problemas sete quando você implementar seu próprio Site E * Trade, como com o que comprar e vender ações, você vai se lembrar exatamente o que o usuário tenha comprado e vendido e que ele ou ela é por meio desta sessão. Mas nós vamos precisar uma forma mais extravagante do que e-mail para começar a manter as informações em torno. Certo? Na segunda-feira, nós conversamos sobre Frosh IMs e como na versão de que um site, anos atrás, tudo que fizemos foi enviar e-mail a Proctor quem é encarregado dos esportes internos programa, o nome eo sexo, e se eles são ou não um capitão, eo dormitório de alguém que é registrar para um esporte intramural. Portanto, não é ruim, mas ele ou ela, em seguida, tive que vasculhar através de seu e-mail, fazer uma planilha ou algo parecido que, para manter tudo organizado. Então certamente nós como programadores pode fazer isso para que Proctor. E assim entra em SQL, Structured Query Language, que vai ficar bonita diferente para ambos C e PHP, e você vai mergulhar muito mais mãos em PHP e conjunto de problemas, mas também sete SQL, ou SQL, é uma linguagem que que você usa para conversar com um banco de dados. Mas o que é um banco de dados? Bem você acha de um banco de dados, pelo menos por agora, como sendo apenas como um arquivo do Excel, ou se você é um arquivo de números de usuário de um Mac, ou se você é um Google Apps usuário uma planilha do Google, é efetivamente um banco de dados, ou realmente especificamente um banco de dados relacional. Um banco de dados relacional é apenas algo que tem linhas e colunas, e você pode armazenar qualquer tipo de informações nestas linhas ou colunas. Mas o que é agradável sobre SQL, e sobre bancos de dados reais, e não apenas planilhas ou planilhas do Google, é que você pode usar uma linguagem para realmente executar consultas para inserir dados, para remover os dados, de olhar para os dados, mesmo o mais importante, e você não tem que usá-lo bastante manualmente como você pode tipicamente um Google planilha como este. Assim, em SQL, há um monte de declarações fundamentais ou peças de funcionalidade embutida. Há muitos mais do que estes, mas você pode ir uma enorme distância apenas por saber que esta linguagem chamada SQL tem pelo menos quatro declarações que você pode aproveitar. Excluir, para a remoção de dados, Inserir, para adicionar linhas, Update, para mudar linhas e Seleção, para voltar linhas e que é de fato o que o SQL faz. Ele opera inteiramente em linhas para que quando você inserir ou remover, ou atualização, ou selecionar o que você está ficando para trás como um chamado conjunto de resultados, como uma matriz de linhas. Um grupo de linhas de uma tabela. Então, de volta ao dia, e até hoje, Você pode interagir com o banco de dados usando uma linha de comando, mas não é particularmente divertido de usar Nesta janela estilo preto e branco e realmente executar comandos e picar em torno de seu banco de dados. A interface gráfica do usuário, ou GUI, é muito mais preferível, sem dúvida, e por isso a ferramenta recomendamos e pré-instalado para você no aparelho é chamado phpMyAdmin. É uma coincidência total que o nome dessa coisa tem PHP nele, isso significa apenas que as pessoas que escreveu este programa-se escreveu ele em PHP. Mas é em última análise, sobre a administração um servidor de banco de dados, como um servidor MySQL que você pode ter, como você fazer, no aparelho CS50. Portanto, não há mais detalhes aqui do que nós precisamos nos preocupar com hoje, mas o que é fundamental é que na esquerda lado está uma lista das bases de dados que você tem no seu computador, em seu aparelho CS50, ou vir projetos finais que você pode ter em relação a terceiros, uma empresa de site ou servidor web, que você pode estar pagando por espaço. Então, à esquerda é o bases de dados, um dos quais é pset7 que eu pedi emprestado a partir do próximo pset semanas, e em seguida, no topo não perceber que há uma monte de abas, uma das quais é bases de dados, SQL, status, usuários, exportação e assim por diante. Então você pode ir um longo caminho apenas por perceber que a maior parte do interface de utilizador está no topo da coluna esquerda e na parte superior direita lá em cima. Então o que podemos realmente fazer com isso? Bem, vamos começar a criar uma bit de informação como se segue. Suponha que o seguinte é o caso, como será em poucos dias, você deseja implementar um site, chamado CS50 Finanças, e este site permite que você compre entre aspas e vender ações. E vai descobrir o preço dessas ações, em última análise, como você vai ver, conversando com o Yahoo Finance. O que, maravilhosamente, tem um serviço gratuito através do qual você pode passar em um ticker estoque como GOOG para o Google, e ele vai lhe dar de volta o estoque atual do Google preços no passado pelo menos alguns minutos. Então você vai usar isso, em última instância, fingir para o usuário para comprar e vender real ações usando dinheiro virtual, mas a primeira coisa o usuário vai ver é esta tela de login que eles pede para o seu nome de usuário e senha. E, assim, um dos primeiros desafios para você em pset7 vai ser para implementar o back-end banco de dados, a planilha se você, que vai armazenar nomes de usuários e senhas e, finalmente, quais ações eles próprios, e quantos e quanto dinheiro eles têm, por isso um monte de outras coisas em outras tabelas ou planilhas. Então, vamos dar uma olhada em como esta poderia parecer à primeira vista. Eu vou voltar para o aparelho e eu sou indo para ir para este URL aqui phpMyAdmin localhost / phpmyadmin e você verá que ele me leva a uma interface exatamente como vimos no captura de tela, e aqui eu tem um banco de dados adicional chamado palestra para hoje e deixe-me ir em frente primeiro e clique em pset7. Parece que tenho um par de opções, um para os novos, para a criação de uma nova tabela, e um link para os usuários, que é uma tabela que já criada. Então o que é uma tabela? Então, se você usou o Excel antes, e se você tiver números usados ​​ou Google Planilhas, você abre uma janela e você terá um grupo inteiro de linhas e colunas, mas então você geralmente tem planilhas ao longo do fundo, ou abas separadas. Você pode pensar de cada planilha como uma tabela banco de dados, de modo que, em última análise, é uma combinação de uma ou mais tabelas, uma ou mais planilhas, na mundo de uma planilha normal. Então deixe-me ir em frente e clique sobre essa planilha que eu premade, chamados de usuários, a.k.a. Tabela de banco de dados. E se eu rolar para baixo aqui, deixe-me afastar um pouco, isso é o que está dizendo phpMyAdmin nós é dentro deste quadro agora. É um pouco confuso no início relance, porque a interface do usuário não é a coisa mais bonita do mundo, mas o que é interessante é esta parte aqui. ID, nome de usuário e hash. Com antecedência, e você vai ser entregue este problema em definir sete, nós damos-lhe um arquivo contendo um super tabela de banco pequeno, emprestado realmente a partir da edição de hackers do conjunto de problemas dois, no interior dos quais existem seis linhas. Um para toda a Belinda caminho para um para Zamyla, e observe à esquerda daqueles usernames são IDs únicas, como um, dois, três, quatro, cinco, seis, números inteiros, e depois para a direita são hashes. E se, as probabilidades são, você não fez o problema edição hacker de definir dois, mas um hash é como um criptografado senha com algumas ressalvas. E assim, o que você vê aqui são as versões criptografadas de todos os seis de nossas senhas de problema definir edição dois do hacker. Agora à esquerda é apenas algumas coisas GUI, editando essa linha, copiando esta linha, apagar esta linha. Mas o que é interessante agora é o seguinte. Eu posso realmente começar experimentando com esta tabela. Então, se eu for e clique no SQL guia, eu recebo esta caixa de texto grande. E não é assim que vamos fazê-lo quando, na verdade, escrever código. Para ser claro, phpMyAdmin é apenas uma ferramenta que é vai nos deixar bisbilhotar o banco de dados e deixe-nos experimentar com consultas. Assim, por exemplo, suponha Eu executar exatamente isso. Select, que é um dos palavras-chave que mencionei anteriormente, estrela, que representa todos as colunas de uma tabela. Pelo que a tabela? Bem, os usuários. E notem que há esta convenção estranho em SQL onde você realmente usar volta carrapatos, normalmente, citações não individuais e citações não duplas quando se fala de nomes de tabelas, assim a citação de volta é a coisa sobre a superior esquerdo do seu teclado mais provável. Então deixe-me ir em frente agora e apenas deixar isso quieto e role a página e clique em Ir, e estamos realmente vai ver a mesma coisa. Acabamos executada uma consulta SQL dizendo selecione tudo estrela da tabela chamada usuários e o que você recebe de volta é esta. Em última análise, nós vamos ser capazes de fazer a mesma coisa em código, mas por agora tudo o que eu queria que foi vê-lo no meu navegador. Bem, vamos fazer alguma coisa um pouco diferente. Deixe-me voltar para a aba SQL, e vamos apenas dizer que o que? Zamyla perdeu toda a sua dinheiro, e, portanto, é hora de excluir seu como um usuário. Ela não está mais login. Então eu vou dizer excluir de-- bem, manter a capitalização para a consistência, eliminar dos usuários onde. E assim, podemos ter estes predicados, ou estes qualificadores, no final da minha declaração onde e como eu poderia apagar Zamyla? Pelo seu nome Zamyla, de modo que o coluna, uma das colunas foi nomeado, então onde name = "Zamyla". E aqui eu uso duplo aspas ou aspas simples, você só pode usar a parte de trás quando carrapatos falando sobre os nomes, por exemplo, de tabelas ou campos. E deixe-me clique Aqui. E agora, a página da web é sendo um pouco tenso. Ou, você realmente deseja executar apagar dos usuários onde o nome é igual Zamyla? Sim. Então, agora, se voltar para a minha mesa clicando usuários, observe que Hm. Eu gozado. E, na verdade, eu meio que clicado longe tão rápido você nem sequer ver o mensagem de erro vermelho, talvez. O que eu fiz de errado? AUDIÊNCIA: Você não precisa para capitalizar seu nome. DAVID J. MALAN: Sim, eu capitalizados seu nome, mas sua username-- na verdade eu fez um par de erros, certo? Um deles, seu nome de usuário é zamyla, Z em minúsculas, eo nome da coluna é nome de usuário, não o nome, então vamos fazer isso de novo. Deixe-me ir em frente e excluir dos usuários ONDE nome de usuário é igual entre aspas "Zamyla". Tudo certo? Então, isso parece um pouco melhor, vamos me ir role a página e clique em Ir. Ele ainda vai grite comigo para ter certeza. Eu clique em Sim, e agora vemos, francamente que isso aconteceu, realmente rápido, menos de um segundo, certamente, este é exatamente a consulta que foi executada. Para confirmar, deixe-me clique usuários e na verdade agora Zamyla está desaparecido. Agora vamos fazer o contrário. Suponha-se que quer Gabe se inscrever para o site. O que é a consulta SQL, que é o comando que eu poderia digitar para adicionar Gabe? Bem, é bastante simples. Insira em usuários, e agora fica um pouco enigmática. Eu preciso especificar, para o servidor, quais campos eu quero atribuir. Eu realmente não me importo com o que de Gabe ID número é, então eu vou pular essa. Estou vez vai dizer username, hash e, em seguida, os valores que eu quero colocar lá vai ser Gabe. E então sua mistura, eu não sei. Então, por agora, eu vou deixar isso como um grande para fazer. Vamos voltar a em que o conjunto de problemas especificação de como você realmente fazer isso. Assim notar, novamente, a sintaxe. Insira no nome da tabela, em seguida, uma parêntesis lista dos campos, as colunas que você deseja adicionar valores e, em seguida apenas a mesma ordem exacta da esquerda para a direito dos valores que você deseja adicionar, e é só enrolando porque o texto é um pouco longo. Então, agora deixe-me clique em Ir. Uma linha inserida. E agora, se eu voltar para usuários, o que é interessante é que não só é Gabe agora na banco de dados, o que é, aparentemente, o seu ID? Bem, é sete. Por que é sete anos quando eu não adicioná-lo? Portanto, esta é, também, um dos características que você começa do banco de dados. Muita construído em funcionalidade. Acontece que quando criado essa tabela, I pré-configurado é automaticamente atribua uma ID de tal maneira que incrementa. Então, se você já se remexia, e olhou para o seu Facebook ID número é, nos dias de hoje não é realmente uma coisa a fazer, mas o Facebook como uma API, Application Interface de Programação, através do qual você pode obter de volta todo um conjunto de dados sobre si mesmo, sobre seus amigos, e suas conexões. E o que costumava ser tipo de legal, de volta ao dia, estava a olhar para cima que o seu Facebook número de identificação era. Mark Zuckerberg de, por exemplo, é três desde que ele era o autor do site. E como a história vai, ele criou duas contas de teste, os usuários um e dois, que ele então excluídos. E assim, Zuck, como é o seu nome de usuário no Facebook, é o número de ID três, e todos nós temos um número muito maior do que três destes dias. Na verdade, em algum momento Facebook se afastou do mesmo usando um int, que é um valor de 32 bits, usando a o próximo passo, essencialmente um longo tempo para que que poderiam acomodar até mesmo os usuários mais se registrar. Assim, um fato histórico pouco divertido. Então, isso é apenas o sintaxe básica com os quais poderíamos executar um par de consultas, mas podemos, na verdade, fazer um monte mais coisas com SQL. E você vai ver, em última instância, no problema de definir sete que você tem que fazer uma número de decisões de projeto, entre eles vai ser quais os tipos de dados para usar. Assim como em C, não há dados tipos em um banco de dados, como MySQL, e os tipos de dados que você tem que escolher de incluir esses campos aqui. Char, varchar, Int, grande int, decimal e data e hora, e muitos outros. Então, vamos realmente fazer isso. Vamos fingir que nós não mão que você mesa do usuário e deixe-me ir em frente e criar, por eu, nas palestras database-- na verdade, deixe-me ir em frente e eliminar a mesa que eu tenho aqui já para que possamos realmente criar este. Whoops. Eu vou deixar cair este mesa, e agora estou indo para ir novamente para o palestra de banco de dados aqui, Vou criar uma tabela chamados de usuários e vamos apenas fazer três colunas inicialmente e clique em Ir. Agora, na sua maior parte, mais uma vez, este é apenas usando esta ferramenta gráfica chamada phpMyAdmin, eo que nós estamos fazendo agora é a criação de uma tabela. Então, isso é como Arquivo indo, Novo, e criar um novo arquivo de Excel. Então, ele está me pedindo um pouco questões, da esquerda para a direita, qual é o nome da primeira coluna, e, em seguida, o nome da segunda coluna, e o nome do terceiro. Então, vamos recriar isso. ID, nome de usuário e, em seguida, era um, e depois de hash era outra. Então, o que deve o tipo de dados ser-se agora para um campo como ID? Aqui está a lista completa de tipos de dados disponíveis para você em um banco de dados, e por enquanto vamos apenas ir com int. Valor de 32 bits, eu não pensar de forma realista eu sou vai ter mais do que 4 bilhões usuários na minha conta, no meu serviço, então eu vou manter em movimento para a próxima pergunta. Eu não vou especificar ou um comprimento de valores, não é aplicável aqui para um int, por si só. E agora eu posso especificar, aparentemente, um padrão valor, que eu não vou especificar. Um agrupamento, eu não sei o que é. Um atributo. Agora nós realmente fazer ter uma decisão de projeto. Portanto, há alguns campos aqui, nem todos de que é aplicável, mas não assinado apenas significa o quê? Que o int deve ser? Só não negativo. Então isso tem que ser 0 em cima. Não, eu não estou indo para verificar porque Quero que cada usuário tenha uma identificação, ele não pode ser nulo. E então, nós conseguimos um pouco mais decisões de design interessantes como este. Voltaremos a isso em um momento, mas o que outra característica do banco de dados é, é que você pode dizer o servidor de banco de dados, vá em frente e otimizar a si mesmo, sua RAM e espaço no disco rígido, de modo que seleciona e inserções, e exclusões e atualizações são muito rápidos. Compare isso com pset5. Se você quiser procurar algo em sua tabela de hash, que você pensa como um banco de dados, que tinha que fazer todo o trabalhar para fazer a sua tabela hash rápido. É como se, obviamente, você. Certo? Você tinha que colocar no tempo tudo bem ajustando as coisas, recebendo uma função hash direita, para descobrir como muitos baldes de ter. Mas o que é bom, mais uma vez, sobre um banco de dados é você só punt todos isso para outras pessoas que pensei que este através de você, e que Eu vou dizer aqui, sob índice é que meu campo ID vai ser a principal forma de identificação de usuários na base de dados. Eu não vou pensar de Zamyla como Zamyla, Vou pensar em ela como o número 6. Por que é, talvez, melhor intuitivamente pensar e modelo cada uma de suas linhas individuais usando um número em vez de algo como uma corda, como o Zamyla ou Gabe ou mais corda ainda? Sim? AUDIÊNCIA: Um ID é único? DAVID J. MALAN: Diga de novo? AUDIÊNCIA: Um ID é único? DAVID J. MALAN: Um ID é único, mas suppose-- conforme o caso, em geral, com nomes de usuários, suponha Eu também disse que só pode haver um Zamyla no mundo, e apenas um Gabe. Eu poderia impor a singularidade constrangimento em cordas, também, se eu quisesse. Então, não é um mau pensamento. AUDIÊNCIA: Mais seguro. DAVID J. MALAN: Mais seguro, por quê? AUDIÊNCIA: Você não pode dizer que é que, como no utilizador. DAVID J. MALAN: OK, você não pode dizer que o usuário é que por isso há uma privacidade aspecto a ele, especialmente se as identificações talvez aparecendo nas URLs. Então, com certeza, que poderia tipo de trabalho, também. Outros pensamentos? Sim? AUDIÊNCIA: É mais fácil executar operações em um int. DAVID J. MALAN: Essa é a verdadeira kicker. É apenas mais eficiente, ou mais fácil para o computador, para executar operações sobre um número inteiro. Certo? Um int é garantido para ser de 32 bits, enquanto que Zamyla está a poucos caracteres, Gabriel é um pouco mais caracteres, Davenport é muito longa, e por isso é não é particularmente eficaz para usar cordas para comparar valores e procurar para os campos e campos de atualização, se você pode ir longe com apenas um número inteiro. Apenas 32 bits. Assim, nomes de usuário, também, desta forma, não tem que ser único, embora eles provavelmente deveria ser, e mesmo desta forma também um usuário poderia ser permitido alterar o seu nome de usuário. Então, vamos agora deixar este como o meios primários de identificar o utilizador. Isto é dizer o banco de dados vá em frente e otimizar-se de modo que os ups olhar em ID são super rápido. AI, horrivelmente nomeado, apenas significa auto incremento, e esta é a verificação caixa é preciso verificar para especificar que o campo ID para ser atualizado automaticamente para mim, e então eu vou rolar para a direita aqui e, sinceramente, eu não estou realmente interessado mais em qualquer um desses campos. Certamente não é de hoje. Então, eu vou voltar aqui, para a primeira coluna, onde Eu preciso especificar nome de usuário e haxixe, e vamos pelo menos no foco segundo para agora. Int provavelmente não é a escolha certa, Então, o que faz mais sentido, talvez? AUDIÊNCIA: Texto. DAVID J. MALAN: Diga de novo? AUDIÊNCIA: Texto. DAVID J. MALAN: Texto? OK, eu ouvi texto. O que mais? Nós meio que tem um monte de opções que são de natureza textual. Então, quando e por quê, fazer você usa algum destes? Bem char, ao contrário do que você pode pensar, não é um único caractere. É um número específico de caracteres. Então, se nós sabemos que todos os nomes de usuário deve ser como oito caracteres, como costumava ser comum em idosos sistemas de computador, eu poderia dizer de char e então eu poderia dizer 8 aqui. É quando a terceira coluna se torna aplicável ao criar uma tabela. Mas isso é meio chato porque algumas pessoas podem quero ter um nome de usuário mais de oito caracteres, algumas pessoas podem querer tem um nome mais curto, então por que comprometer-me para um número específico? Por que não ter uma variável número de caracteres e apenas dizer que o comprimento máximo de um nome é, eu não sei, como 64 caracteres. Eu não consigo pensar em todos os amigos que têm nomes mais de 64 caracteres, e mesmo que seja muito curto que você poderia certamente bater-lo arbitrariamente. Então varchar é uma variável número de caracteres. O texto não é um mau instinto, e francamente que tipo de faz o que diz, mas um campo de texto pode ser como 65.000 bytes, pelo menos. Isso é provavelmente um exagero para um campo, e, de fato, sim, 65.535. Isso é provavelmente um exagero para um nome, então vamos ficar, normalmente, com varchars para textual campo e haxixe também. Hash, verifica-se, poderíamos fazer uma varchar bem ou algo parecido, mas não vamos focar hoje no criptografia lá e os números que pode, na verdade, pretende utilizar para o seu comprimento. Mas deixe-me rolar para a direita. Você só pode ter um índice primário de uma tabela, mas eu gostaria de aplicar qualquer um destes, agora, para nome de usuário, você diria? O que deve ser nome de usuário baseada em uma vaga compreensão destas quatro opções? Apenas pelos seus nomes? AUDIÊNCIA: Unique. DAVID J. MALAN: tão único, certo? Assim, verifica-se que não só poderia você diz a um banco de dados, com antecedência, esta é a principal forma identificação de campos. Você também pode dizer que este é vai ser um campo exclusivo. Não vai ser a coisa que eu confiar, mas eu gostaria que o banco de dados para têm essencialmente que, se condição, de modo que se eu tentei registrar dois usuários com o mesmo nome, o flat out banco de dados não vai me deixar. Eu poderia ter algum código adicional em PHP que impede tanto, a base de dados, mas, também, pode garantir que isso nunca vai acontecer. Agora, como um aparte, especialmente quanto você pensa sobre projetos finais, lembre-se de posicioná-lo e cheia texto são realmente muito útil. Se você tem um banco de dados maior, não com dezenas, mas com centenas ou milhares ou mesmo milhões de campos, você pode também dizer o banco de dados com antecedência este é um campo que eu vou estar procurando em um monte. Talvez o seu nome de usuário, talvez seja bio, se você estiver fazer um site Facebook, como que tem números que o usuário tem permissão para salvar, e se você quiser dizer a base de dados de antemão Eu vou estar à procura neste campo muito, mas não é necessariamente única, você pode especificar criar me um índice. Ou, você pode dizer que também me permite fazer tipo de pesquisas arbitrárias como Command ou Control F, como você poderia, em um processador de texto, para que você possa olhar cordas arbitrárias ou substrings neste domínio. Em outras palavras, estamos chegando para o ponto no semestre onde você não precisa se preocupar com como implementar as coisas de forma eficiente. Você só precisa saber sobre o que decisões de projeto para fazer de modo que você está usando as ferramentas certas para o comércio, a fim de alavancar recursos que outras pessoas construíram para você. Então, para recapitular, principal só deve tem um, você pode ter apenas um, e que é a coisa que você está comprometendo-se a utilizando a identificação de campos exclusivamente. Único é apenas semelhante em espírito, mas você pode apenas ocasionalmente usá-lo, mas deseja que o banco de dados para impô-la. Índice significa apenas preventivamente acelerar as coisas no futuro para que eu possa procurar coisas neste domínio. E, em seguida, o texto completo é geralmente para parágrafos, ou ensaios, ou organismos grandes de texto onde você também pode querer ter curingas como o equivalente de estrelas. Right. Então, que era uma espécie de muito a todos de uma vez. Vamos ver se não podemos destilar um par desses recursos e então construir algo bastante simples, mas poderosa. Assim, entre a outra decisões de projeto que você está em última análise, vai ter é ao longo as linhas de mecanismos de armazenamento. E deixe-me apenas fazer menção a este em antecipação de projetos finais, e antecipação de deixar de dizer-- não vamos fazer isso. Vamos construir este pequeno primeira aplicação. Eu estou indo para ir em meu terminal janela, e aqui não é só counter.php, que vamos agora para se livrar de como não pertinente, mas temos um grupo inteiro de diretórios e esta vai ser muito semelhante em espírito o que você verá no conjunto de problemas sete. Portanto, temos três diretórios inclui público e modelos, que é exatamente de onde paramos no Segunda-feira com todo o nosso paradigma MVC. E, para recapitular, em público está indo para ir qualquer arquivo que eu quero que os usuários realmente v poder visitar em seu navegador via URL. Modelo. O que nós colocamos em modelos? Que tipo de coisas? Não era muito, mas um casal arquivos, pelo menos, na segunda-feira. Sim. AUDIÊNCIA: cabeçalho e rodapé? DAVID J. MALAN: Cabeçalho e Rodapé. Portanto, temos algo similar hoje, também. Temos mais alguns arquivos, mas Rodapé eu vejo, eu vejo cabeçalho, e, em seguida, um monte de outros arquivos. Portanto, este é o equivalente da visão V MVC, que, mais uma vez, será um pouco mais claro no conjunto de problemas de sete, mas isto é apenas uma pasta que estou colocando um monte de minha estética. Muito do meu HTML, muitas das minhas formas. Enquanto isso, inclui, é outra diretório que tem esses três arquivos e vamos dar uma olhada rápida para estes. Eu estou indo para ir em frente e abrir config.php. Como se vê, muito como no início do prazo, você incluiu afiada CS50 dot h com pset7. No exemplo de hoje, você vai para fazer o equivalente a de que com uma declaração requerem que efectivamente inclui essas várias linhas. Então, para ser claro, este é um arquivo chamado config.php. E observe o que está fazendo. É aparentemente fazendo algo transformando em mensagens enigmáticas, erro para que você possa vê-los no navegador. É, então, aparentemente requerendo dois outros arquivos então isso é como #include em C, e então este que fez ver, e nós invocados, isso se transforma em que carrinho de compras como a funcionalidade. Isto significa uma vontade de cookie ser enviado de volta e para trás. Então, por que isso é interessante? Bem, se voltarmos a este diretório e abrir-se, por exemplo, constance.php. Note que o PHP faz constantes de apoio, não é completamente como #define em C. Em vez disso, você literalmente dizer definido, e aviso que eu tenho guardado com antecedência quatro constantes neste arquivo. Um banco de dados para a de hoje, para minha senha para o meu nome de usuário, e para o nome do servidor. Então, essas são realmente vai ser bastante semelhante em conjunto de problemas sete. E por último, e é aí que eu sou indo para obter algumas funcionalidades agradável da equipe, em functions.php é um monte de código que você escreveu, e eu roubei algumas dessas do conjunto de problemas de sete para hoje, que faz um monte de coisas e vamos apenas olhar para um deles em particular. Esta função aqui, consulta, vai ser a função PHP que chamamos a fim de executar SQL. Um momento atrás, estávamos usando phpMyAdmin, mas isso é apenas por tipo de efeitos de aprendizagem e fins de diagnóstico e esquecendo o seu conjunto de dados. Quando você realmente usar o seu banco de dados, você, o ser humano, são, obviamente, não vai estar puxando um web página cada vez que alguém registra. Você vai escrever um código que inserções e exclui usuários sob demanda, e nós vamos fazer isso por meio da função de consulta. Se eu agora vá para baixo, não há vai ser mais algumas funcionalidades. Redirect vai ser uma função que escrevemos para você que lhe permite enviar o usuário para outra URL, e processar é uma função, bem como vimos na segunda-feira, que realmente torna um molde, mas mais para estes na forma de pset7 da própria caminhada. Por agora, vamos em frente e fazer isso. Deixe-me ir para a minha mesa de palestras e ver que há atualmente nada aqui ainda, e deixe-me ir também em meu diretório público, onde há apenas um arquivo, index.php. Este arquivo parece ser super simples No momento, ele se parece com isso. Muito parecido como nós parou na segunda-feira. Estou exigindo esse arquivo, config.php, que é em um inclui diretório, que está em dot dot, meus pais, e depois é só tornar este arquivo. Então, qual é este arquivo? Vamos abrir em meus modelos form.php, e vamos ver isso. Super simples, aparentemente, esta forma é vai apresentar, até um $ _GET ou $ _POST. Verificação de sanidade rápida. Literalmente visualmente procurar o arquivo. Método iguala post. Então, ele não vai usar a URL, como Google faz, que vai classificar de esconder a informação por trás as cenas e é vai se submeter a uma arquivo chamado register.php, e que é o arquivo que ainda não escrevi mas o que é que isto vai para olhar como é isso. Se eu for para uma página separada Esta é o localhost / index.php parece. E, novamente, o servidor de apenas assumindo index.php. Enter. Então é aí que estamos , eo que eu quero fazer é ser capaz de escrever coisas como Davi, e depois meu número de telefone, o que vai dizer 617-555-1212 por enquanto, cadastre e agora register.php não foi encontrado. Então eu preciso para implementar isso. Então, vamos rapidamente chicote algo como isso. Deixe-me ir para o meu diretório público e fazer gedit de register.php, e agora eu estou indo para ir em frente e iniciar o modo PHP, como fizemos na segunda-feira, e tag perto do PHP, e vamos fazer um par de coisas. Então, eu sei, a partir de ter escrito essa forma, que eu quero para verificar o seguinte. Se estiver vazia, qualquer que seja o utilizador digitou para o campo de nome e, em seguida Vou dizer algo como pedir desculpas faltando nome. Peça desculpas, entretanto, é não é uma coisa construída em PHP, é uma função que escrevemos em functions.php para pset7 para que você tenha acesso a ele. Else se o outro campo está vazio, número, então eu sou vai pedir desculpas ao usuário e dizer o número que falta. Salve este arquivo. Agora vamos voltar para o meu navegador, voltar ao fórum tente novamente. Registre-se. Está bem. Não aconteceu nada, o que é bom. Eu não recebi uma mensagem de erro. Mas se em vez disso, vamos recarregar esta página, e não fornecer qualquer coisa. Caramba. Faça isso. Registre-se. O que eu fiz de errado? Se vazio, o nome $ _POST. Diga de novo? Oh, é claro. Eu esqueci a parte mais importante, que é require ("../ includes / config.php."). Eu preciso ter acesso ao desculpar função, que É por isso que nada estava acontecendo. A função não existe realmente. Então, vamos tentar isso de novo. Vamos recarregar a página, clique em Register. Está bem. Não é. Assim, a saída que estamos vendo aqui é o resultado de chamar uma desculpas função, super simples, e ele simplesmente imprime o que quer Dou-lhe como um argumento. Tudo bem, então vamos cooperar. Vamos fornecer o meu nome como Davi, registrar, faltando número Ok, vamos prever que, também. 617-555-1212. Registre-se. Está bem. Então, tudo está bem agora, apenas nada interessante está acontecendo. Então, agora vamos fazer algo mais interessante acontecer assim. Deixe-me ir para phpMyAdmin, e vamos realmente criar uma tabela chamada usuários, Vou dar-lhe três colunas, e eu rapidamente criar ID, e depois nome, e então o número, eo campo ID eu sou vai sair como um int. O campo do nome eu vou para deixar como varchar, e vamos dizer 64, um tanto arbitrariamente. O número que eu vou para fazer, você sabe o quê? Estamos indo para apoiar números norte-americanos aqui, então eu vou fazer alguma coisa como carvão e, em seguida, 10 caracteres max para um código de área e em seguida, sete dígitos. E então para cá, eu vou especificar auto incremento neste campo, tornar esta uma chave primária, e Eu estou indo para ir em frente e não verificar qualquer um destes outros caixas. Então, quando eu agora, finalmente, clique em Salvar, e eu voltar para a minha tabela de usuários, este é o que parece que se eu clique agora uma estrutura New Tab. Então isso, para ser claro, é apenas uma maneira de phpMyAdmin de dizer sua tabela de banco de dados tem um ID, um nome e um número com essas configurações particulares e vamos ignorar o resto dos campos lá por enquanto. Então agora o que eu quero fazer? Então, se eu ir agora para o meu código fonte, se está tudo bem Eu quero executar a consulta seguinte. Insira em, e eu posso apenas dizem os usuários eu não estritamente precisa para trás aqueles carrapatos se é nem uma palavra perigosa como usuários. Eu vou dizer o nome, número, e então aqui estou não vai codificar a dígitos dos valores ainda. Eu vou colocar dois pontos de interrogação. E esta é uma convenção em muitas línguas em que se você quer ter um espaço reservado para uma string você vai usar a questão marcas, por razões que vou voltar a conversar sobre segurança, e aqui Vou passar naqueles dois campos de publicar o nome, e, em seguida, publicar o número, e agora salve o arquivo. E agora eu vou descer aqui é um super simplesmente dizer rendersuccess.php, que vai ser outro modelo. Eu vou criar muito rápido. Geditsuccess.php e eu só vou dizer sucesso H1 nesse arquivo. Tudo certo. Então, agora, vamos voltar para o browser, onde visitei antes. Vamos ir em frente e confirmar que eu escrevi em David, eu escrevi um número de telefone, registe-se. Caramba. O que eu fiz de errado? Então, eu estou vendo um erro aqui, você tem um erro em sua sintaxe SQL. Deixe-me saltar de volta para gedit, vamos me voltar para register.php, eo que eu omitir que Era importante da última vez? Eu preciso disso. Você quer saber o que além de ter notado antes, mas eu preciso disso. Então agora vamos voltar, e isso foi útil para ver no navegador e é por isso que em config.php nós cuspir erros. Vamos em frente e recarregar, clique em Continuar, o sucesso. Então, agora deixe-me ir para o meu banco de dados aqui e clique em Usuários, e navegar, e notar que eu agora David tem no meu banco de dados aqui. Agora tecnicamente este site é ainda não está na internet pública, por isso não pode ter outro pessoas em colocar aqui, mas se eu já quis, por exemplo, me envie uma mensagem de texto. Vamos sair em um membro aqui e ver se isso realmente funciona. Eu estou indo para ir em frente e excluir essa linha e vamos borrar essa no vídeo mais tarde por isso não temos a toda internet texting me, e agora vamos ir até o browser e nós falaremos sobre a palestra e vamos digitar diferente número aqui, registrar o sucesso. Então, agora, o meu próprio número é presumivelmente em o banco de dados, e agora a parte divertida. Vamos realmente usar o PHP para fazer algo de programação, ou a partir do comando linha ou de algum outro lugar, e por enquanto eu sou apenas vai mantê-lo simples e eu estou indo para ir para o meu diretório aqui e faça o seguinte. Roteiro Gedit vamos dizer, vamos chamá-lo de texto, #! / user / bin / env PHP, como vimos da última vez. PHP. Agora eu vou exigem inclui config.php, embora isso possa induzir um pequeno erro. E agora eu estou indo para ir em frente e dizer linhas, consulta, selecione estrela dos usuários, e agora aqui eu vou fazer uma técnica da última vez para cada linhas como linha. E eu vou fazer algo simples. Printf digamos que nome é esse, eo número é este, barra invertida n. E agora eu vou passar na linha citar nome unquote, eo número da linha entre aspas, e agora vamos em frente ea janela de meu terminal chmod este a + x para fazer esse script chamado executável texto. E agora vamos executar texto. OK, então o progresso. Então, eu tenho uma empresa escrita comando de script de linha, em uma linguagem chamada PHP, que, devido a que requerem linha, tem acesso a todos aqueles configuração constantes que eu especificados. O nome da base de dados e assim por diante. Na verdade, só para ficar claro que este não é um acaso, deixe-me ir em frente e se inscrever, muito rápido, alguém como Rob e vai dar-lhe o número 555-1212. E agora, se eu executar o script novamente, observe o poder do que estamos fazendo com o banco de dados. Agora eu imediatamente vi o que o outras duas linhas estão em meu banco de dados. Então agora vamos tentar fazer alguma coisa ainda mais extravagante dentro de, e esta é a parte que nós temos Não testada antecipadamente, por isso a última vez que fiz isso as coisas foram horrivelmente errado, dispomos de vídeo para esse efeito. Na verdade, sim, engraçado lado. Então, a última vez, em um palestra como há dois anos, decidimos, eu decidi, para ser tudo isso seria uma grande idéia para gerar dinamicamente e-mails em classe, utilizando toda a base de dados CS50 alunos, que nos deram seus números e suas operadoras de telefonia celular que você pode se lembrar de pset0, como raciocinar, verifica-se Eu tinha um pequeno bug no meu programa e fez um par de erros em 2012, eu acho. Pelas quais, uma que eu tinha para o laço que fez exatamente esse tipo de coisa, iteração sobre o banco de dados, a obtenção de um nome do banco de dados, nome do banco de dados, e em seguida, em cada iteração do laço que eu mandei um e-mail. Mas em vez de enviar um e-mail, eu enviou um e-mail a primeira iteração, e dois e-mails de uma segunda iteração, enviado três e-mails de uma segunda iteração, o que como você pode se lembrar de nossa discussão de notação assintótica esta grande O de ruim, como n ao quadrado é o número de mensagens que eu enviei, mas não foi até mesmo e-mails foi mensagens de texto. E como você sabe, o comparecimento não é super em alta até o final do semestre e então eu pensei que seria bonito em o tempo para dizer: "Por que não está de classe?" No texto da mensagem I enviado para toda a classe, e era engraçado como 50% do classe, mas os restantes 50%, alguns dos quais apavorei, enviei incrivelmente doces notas apologéticas para a equipe de pedir desculpas por ter perdido a palestra apenas desta vez, certo? De modo que seria horrivelmente errado. Então, nesse espírito, vamos tentar fazer isso novamente, mas apenas com o meu número. De antemão, no functions.php, Eu escrevi essa função aqui. É chamado de texto, e leva em três argumentos. Um número, um transportador, e uma mensagem. Eu estou usando um switch, que maravilhosamente PHP levar cordas, e não apenas inteiros, e eu não implementar todo o suporte para isso ainda, Acabei de fazer AT & T e Verizon. Pois verifica-se que, com estes transportadores eles têm e-mail para gateways SMS, através do qual você pode realmente enviar um e-mail para um endereço como número de telefone no vtext.com e se o usuário não tiver bloqueado as mensagens, ele vai passar por é uma mensagem de texto. Agora, para fazer isso, eu vou ter que adicionar um campo muito rápido para o meu banco de dados. Eu estou indo para ir para minha estrutura, e estou indo para ir em frente e adicione um campo no fim da tabela. Vamos clicar Go, e eu sou vai chamar esta transportadora e por enquanto eu vou deixar isso como um texto da barra, mas podemos ser mais sofisticado no futuro. Eu estou indo para ir rapidamente em minha mesa, e eu sou vai se livrar de Rob, porque isso é um número falso, Eu estou indo para ir para editar aqui e estou vai mudar a minha operadora manualmente para ser Verizon, que ele é, e agora aqui. Vamos fazer uma verificação de sanidade rápida. Vamos abrir o nosso script de texto, que se parece com isso, transportador é% s. Nós estamos fazendo muito mais erro verificação do que eu fiz em 2012, portador. E agora, eu estou indo para ir em frente e re-executar o script. Está bem. Transportadora é Verizon, o que significa Agora espero que eu possa fazer exatamente isso. Corretamente este ano, espero, aqui vamos nós. Então, dentro desse loop for, eu sou vai não só tem esse printf, Eu também vou chamar texto e o uso desta recordação função era que leva um número, um transportadora, e uma mensagem. Então vamos ver, o número vai ser linha entre aspas "número", Citação linha "transportador", fecha aspas ea última foi a mensagem. Não estrague este ano, ponto e vírgula. Está bem. Dedos cruzados. Vamos ver se isso funciona. Tudo bem, então. Aqui vamos nós. Vamos desbloquear o telefone, cruzar os dedos, maldição. May-- variável indefinida oh espere, espere, espere, muito rápido. Muito rápido, muito rápido. Isso é totalmente vale a pena. Deixe-me pegar, deixe-me pegar, uh-oh. Obrigado, os textos têm iniciado a partir de uma outra pessoa. Deixe-me ir em frente e abrir reais rápido, dropbox.php / mail aqui. Espera. Realmente vale a pena. Downloads. OK, fonte src8m. Está bem. Precisa de mais uma linha aqui. Oh lá está, é em Frosh IMs, é no registro em três. Oh Olá, Margo, muito obrigado. OK, e eu estava faltando essa linha aqui. Então deixe-me pegar rapidamente esta linha de código, que inclui o e-mail ou biblioteca que eu realmente quero usar, Vou rapidamente voltar em funções, Eu estou indo para ir para o topo desta arquivo e exigem esse arquivo, bem como, e agora eu estou indo realmente cruzar meu dedos quando eu voltar para o comando script de linha, o que está dentro de diretório host local de hoje. Texto Executar. Enter. Mail. Espera. Espera. Mail. Oh, OK. Aqui vamos nós. Correio recebe novo mailer PHP. Eu fiz esse direito? Caramba. A-- oh, espere, espere, espere. Estar por. Eu prometo, isto é vai ser assim vale a pena. Endereço. É por isso que eu não faça o exemplos direita antes da aula. Ugh. Os seguintes destinatários falhou. Vamos tentar uma última coisa. SMTP definir a partir de, adicione o endereço, o endereço é realmente isso. Vamos tentar esta última parte de endereço. Ah, eu estou realmente triste agora. Obrigado. Mas eu realmente aprecio tudo os textos que você está enviando. Você tem este David. Você está soprando. Vamos deixá-lo lá e vamos corrigi na segunda-feira. Veja você, então. Daven FARNHAM: E agora Profunda Pensamentos por Daven Farnham. Se uma árvore binária cai numa floresta e ninguém está por perto para C ele-- [rindo].