1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Semana 8, Continuação] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Harvard University] 3 00:00:04,000 --> 00:00:08,000 [Esta é CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:13,000 >> Este é CS50, de modo que este é o fim da Semana 8 aqui. 5 00:00:13,000 --> 00:00:16,000 Nós, naturalmente, tinha um pouco de um furacão no início desta semana, 6 00:00:16,000 --> 00:00:19,000 então agora é realmente só você e eu nesta sala de aula, 7 00:00:19,000 --> 00:00:22,000 mas hoje, continuamos nossa conversa sobre PHP 8 00:00:22,000 --> 00:00:25,000 e sobre a programação web em geral, e também introduzir a idéia 9 00:00:25,000 --> 00:00:29,000 de bancos de dados, especialmente um chamado MySQL, que é bastante popular nos dias de hoje, 10 00:00:29,000 --> 00:00:34,000 em grande parte devido à sua escalabilidade, bem como porque o seu ser livre e de código aberto. 11 00:00:34,000 --> 00:00:37,000 >> Mas, primeiro, um olhar de onde paramos da última vez. 12 00:00:37,000 --> 00:00:40,000 Lembre-se que estávamos a olhar para os vários exemplos Frosh mensagens instantâneas, 13 00:00:40,000 --> 00:00:44,000 e esta foi a forma horrível que eu vim com uns 15 + anos atrás 14 00:00:44,000 --> 00:00:49,000 a fim de que os alunos sobre registo campus para esportes caloiro intramurais 15 00:00:49,000 --> 00:00:52,000 sem realmente ter de percorrer mais em todo o quintal para Wigglesworth 16 00:00:52,000 --> 00:00:56,000 a deslizar um pedaço físico de papel debaixo da porta alguns Proctor. 17 00:00:56,000 --> 00:00:59,000 Em vez disso, mudou tudo online, mas para isso é necessário fazer uso 18 00:00:59,000 --> 00:01:03,000 de algumas tecnologias, para um, precisávamos de HTML, linguagem de marcação de hipertexto, 19 00:01:03,000 --> 00:01:07,000 que mais uma vez é esta linguagem de marcação com o qual você construir páginas web estruturalmente. 20 00:01:07,000 --> 00:01:10,000 >> Usando um pouco de CSS estes dias, as folhas de estilo em cascata, 21 00:01:10,000 --> 00:01:16,000 pelo qual usamos estilizações da página web usando uma sintaxe um pouco diferente, 22 00:01:16,000 --> 00:01:19,000 enquanto que o HTML foi tudo sobre a sua estrutura. 23 00:01:19,000 --> 00:01:21,000 Precisamos também de introduzir uma linguagem de programação web. 24 00:01:21,000 --> 00:01:25,000 Neste caso, vamos usar o PHP e PHP vai permitir-nos 25 00:01:25,000 --> 00:01:28,000 a saída de conteúdo de forma dinâmica, bem como fazer as coisas como programáticas 26 00:01:28,000 --> 00:01:33,000 envio de e-mails, como foi o caso sobre a nota que saiu na semana passada. 27 00:01:33,000 --> 00:01:35,000 >> Lembre-se que o código para isso foi em 2 partes. 28 00:01:35,000 --> 00:01:38,000 Um deles, tivemos froshims3.php, 29 00:01:38,000 --> 00:01:42,000 e este foi em grande parte de marcação com um formulário HTML dentro dele, 30 00:01:42,000 --> 00:01:45,000 um pouco de CSS aqui em os atributos de estilo 31 00:01:45,000 --> 00:01:48,000 para que a forma em si seria centrado na página, mas para além disso 32 00:01:48,000 --> 00:01:51,000 tivemos algumas entradas forma representativa, um campo de texto, uma caixa de seleção, 33 00:01:51,000 --> 00:01:55,000 alguns botões de rádio, um menu de seleção, e um botão de envio. 34 00:01:55,000 --> 00:02:01,000 E através deste formulário, submetidos a um arquivo que foi aparentemente chamado register3.php, 35 00:02:01,000 --> 00:02:04,000 que por si só parecia um pouco algo como isto. 36 00:02:04,000 --> 00:02:08,000 Agora, a maior parte do código em register3.php, recall, era tudo sobre e-mail. 37 00:02:08,000 --> 00:02:11,000 Ele fez um pouco de validação do formulário que foi enviado para assegurar 38 00:02:11,000 --> 00:02:14,000 que os campos foram realmente desde que se esperava. 39 00:02:14,000 --> 00:02:18,000 Em seguida, chamado algumas funções PHP usando um pouco nova sintaxe, 40 00:02:18,000 --> 00:02:20,000 mesmo que seja emprestado de C. 41 00:02:20,000 --> 00:02:24,000 >> Este operador seta nos permite fazer uso de algo chamado programação orientada a objetos. 42 00:02:24,000 --> 00:02:27,000 Nós não vamos entrar nesse em detalhes aqui, mas sei que por agora 43 00:02:27,000 --> 00:02:31,000 é uma maneira de ter funções associadas com os objetos, 44 00:02:31,000 --> 00:02:34,000 que são um tipo especial de estrutura, como vimos em C. 45 00:02:34,000 --> 00:02:37,000 Mas, por agora, basta ter fé em que esta é a sintaxe correta para usar 46 00:02:37,000 --> 00:02:41,000 ao usar uma biblioteca como esta biblioteca PHPMailer. 47 00:02:41,000 --> 00:02:44,000 E então, no final deste arquivo que tinha gerado dinamicamente um e-mail 48 00:02:44,000 --> 00:02:47,000 que foi enviado para a minha conta jharvard@cs50.net 49 00:02:47,000 --> 00:02:50,000 da minha conta jharvard@cs50.net, 50 00:02:50,000 --> 00:02:54,000 e informado ao usuário, assim, que foram registrados para este esporte. 51 00:02:54,000 --> 00:02:57,000 Isso é muito bonito o que o site de mensagens instantâneas Frosh fez todos esses anos atrás 52 00:02:57,000 --> 00:03:00,000 quando eu implementado, concedido, em um idioma diferente, 53 00:03:00,000 --> 00:03:02,000 mas mostra-lhe, talvez, o poder que você tem 54 00:03:02,000 --> 00:03:05,000 agora que você pode se expressar não só programaticamente 55 00:03:05,000 --> 00:03:08,000 a um nível baixo em uma linguagem como C, mas a um nível muito mais elevado 56 00:03:08,000 --> 00:03:11,000 com estas aplicações do mundo real, como e-mail muito para realmente resolver 57 00:03:11,000 --> 00:03:13,000 alguns problemas do mundo real. 58 00:03:13,000 --> 00:03:16,000 >> Agora, é claro, apesar de eu usar esse script para gerar algum 59 00:03:16,000 --> 00:03:20,000 dinamicamente a partir de e-mails jharvard@cs50.net, o que é de fato uma conta 60 00:03:20,000 --> 00:03:23,000 que eu tenho acesso, a não ser muito cuidadoso para enviar 61 00:03:23,000 --> 00:03:26,000 email somente de contas que são, na verdade, o seu próprio, 62 00:03:26,000 --> 00:03:30,000 para que as coisas se você em um pouco de água quente na vida. 63 00:03:30,000 --> 00:03:35,000 Com isso dito, vamos agora transição para a resolução de um problema completamente diferente, 64 00:03:35,000 --> 00:03:37,000 a de estados de retenção. 65 00:03:37,000 --> 00:03:39,000 Agora, o que isso realmente significa? 66 00:03:39,000 --> 00:03:42,000 HTTP, este protocolo de transferência de hipertexto, 67 00:03:42,000 --> 00:03:45,000 é na verdade um protocolo sem estado, eo que isto significa é que 68 00:03:45,000 --> 00:03:48,000 quando você puxa algo como Google.com e tecle enter 69 00:03:48,000 --> 00:03:51,000 normalmente o seu navegador tem algum tipo de ícone que, então, girando 70 00:03:51,000 --> 00:03:54,000 resulta em alguma página da Web que está sendo baixado, 71 00:03:54,000 --> 00:03:57,000 e depois que pequeno ícone parar de girar, e que de fato sugere 72 00:03:57,000 --> 00:04:02,000 HTTP que tenha concluído algum tipo de conexão com o servidor e é isso. 73 00:04:02,000 --> 00:04:05,000 O HTTP é stateless no sentido de que ele não mantém 74 00:04:05,000 --> 00:04:08,000 uma conexão persistente com o servidor no Skype mesma forma faz 75 00:04:08,000 --> 00:04:11,000 ou Gchat faz porque com HTTP 76 00:04:11,000 --> 00:04:15,000 o pressuposto é que uma vez que você foi buscar uma página web que é isso. 77 00:04:15,000 --> 00:04:18,000 >> Agora, na realidade estes dias em sites como Facebook e Google Maps 78 00:04:18,000 --> 00:04:21,000 e Twitter e afins não há dinamismo muito mais pelo qual 79 00:04:21,000 --> 00:04:25,000 mesmo depois que o ícone parar de girar você pode de fato ter mais atualizações 80 00:04:25,000 --> 00:04:29,000 do servidor, mais tweets, mais atualizações de status no Facebook e afins. 81 00:04:29,000 --> 00:04:33,000 Mas mesmo que está usando uma técnica que nós vamos falar em uma ou duas semanas 82 00:04:33,000 --> 00:04:36,000 conhecido como Ajax usando uma linguagem chamada JavaScript, 83 00:04:36,000 --> 00:04:38,000 mas no final do dia, o HTTP é ainda sem estado. 84 00:04:38,000 --> 00:04:42,000 E ainda se você quiser alguma forma lembrar de coisas sobre um usuário 85 00:04:42,000 --> 00:04:44,000 mesmo depois de terem desligado do servidor 86 00:04:44,000 --> 00:04:47,000 PHP faz dar-lhe um meio de fazer isso 87 00:04:47,000 --> 00:04:52,000 porque, como vimos pela última vez, PHP tem um número de superglobals, 88 00:04:52,000 --> 00:04:55,000 e uma superglobal é, novamente, uma variável global especial 89 00:04:55,000 --> 00:04:59,000 que é entregue a você pelo servidor web e pelo próprio PHP. 90 00:04:59,000 --> 00:05:02,000 >> Você não tem que fazer nada para colocar valores em que, 91 00:05:02,000 --> 00:05:05,000 e entre os superglobals que temos visto até agora são obter e postar, 92 00:05:05,000 --> 00:05:08,000 que é onde os campos do formulário são colocados automaticamente para você, 93 00:05:08,000 --> 00:05:11,000 bem como um par de outros que nós não vimos ainda. 94 00:05:11,000 --> 00:05:17,000 Dentro de $ _SERVER são algumas variáveis ​​especiais relacionados com o próprio servidor. 95 00:05:17,000 --> 00:05:22,000 Qual é o endereço IP, o que protocolo, HTTP ou HTTPS que você usa, 96 00:05:22,000 --> 00:05:25,000 o método de solicitação que você usa e afins, por isso há algumas interessantes, 97 00:05:25,000 --> 00:05:29,000 detalhes suculentos sobre o servidor, e, na verdade, o usuário de lá também. 98 00:05:29,000 --> 00:05:33,000 Há $ _COOKIE, que é onde essas coisas chamados cookies são armazenados. 99 00:05:33,000 --> 00:05:36,000 Nós não vamos gastar tempo com os cookies-se hoje, 100 00:05:36,000 --> 00:05:40,000 mas sei agora que um cookie é apenas um pequeno pedaço de informação 101 00:05:40,000 --> 00:05:43,000 que um servidor web pode plantar em um navegador 102 00:05:43,000 --> 00:05:46,000 e por sua vez a sua memória RAM ou disco rígido seu computador 103 00:05:46,000 --> 00:05:49,000 para armazenar informações sobre um usuário, por exemplo, seu nome de usuário 104 00:05:49,000 --> 00:05:52,000 de modo que eles não tem que digitá-lo cada vez que entrar ou algum 105 00:05:52,000 --> 00:05:55,000 número exclusivo ou identificador para esse usuário 106 00:05:55,000 --> 00:05:58,000 de modo que você não tem que incomodar-los com os mesmos tipos de perguntas sobre 107 00:05:58,000 --> 00:06:00,000 preferências no futuro, mas a maioria de interesse 108 00:06:00,000 --> 00:06:02,000 agora é de R $ _SESSION. 109 00:06:02,000 --> 00:06:07,000 >> Este superglobal, que, como os outros, é entregue a você automaticamente pelo PHP 110 00:06:07,000 --> 00:06:10,000 quando você está escrevendo baseado em PHP sites 111 00:06:10,000 --> 00:06:13,000 pode armazenar o que quiser, strings, inteiros, 112 00:06:13,000 --> 00:06:16,000 pontos flutuantes, valores, matrizes, objetos, 113 00:06:16,000 --> 00:06:20,000 realmente qualquer coisa que você quer, e ele permite que você guarde-o de tal forma 114 00:06:20,000 --> 00:06:23,000 que, mesmo se o usuário visitar você agora e depois 115 00:06:23,000 --> 00:06:26,000 volta de um minuto a partir de agora ou 5 minutos a partir de agora, porque 116 00:06:26,000 --> 00:06:28,000 eles levam o seu tempo antes de clicar em algum outro link 117 00:06:28,000 --> 00:06:32,000 PHP irá garantir que o que você colocar na sessão que superglobal 118 00:06:32,000 --> 00:06:37,000 minutos ou 5 minutos atrás ainda estará lá quando o usuário retorna. 119 00:06:37,000 --> 00:06:40,000 E debaixo da capa desta superglobal é implementado por meio de 120 00:06:40,000 --> 00:06:44,000 essas coisas chamados cookies, mas por enquanto, é apenas uma abstração 121 00:06:44,000 --> 00:06:47,000 qual é uma espécie de o equivalente a um carrinho de compras. 122 00:06:47,000 --> 00:06:50,000 O que quer que você, programador, coloque em que 123 00:06:50,000 --> 00:06:53,000 array associativo superglobal vai estar lá algum número de minutos depois 124 00:06:53,000 --> 00:06:59,000 até que você apagá-lo ou até que o usuário fecha seu navegador completamente. 125 00:06:59,000 --> 00:07:02,000 >> Vamos dar uma olhada em um exemplo de como essa coisa é realmente utilizada. 126 00:07:02,000 --> 00:07:07,000 Em counter.php entre peças de hoje de código 127 00:07:07,000 --> 00:07:09,000 temos a linha a seguir. 128 00:07:09,000 --> 00:07:13,000 No início deste arquivo, temos um monte de comentários azuis, que são desinteressantes para agora. 129 00:07:13,000 --> 00:07:15,000 Mas, na linha 13, temos uma nova linha, 130 00:07:15,000 --> 00:07:18,000 session_start, e que, na verdade, faz exatamente o que diz. 131 00:07:18,000 --> 00:07:20,000 Inicia-se sessões. 132 00:07:20,000 --> 00:07:25,000 Ele permite que você use esse grande _SESSION superglobal $, e é tão simples como isso. 133 00:07:25,000 --> 00:07:30,000 Agora, se continuar a procurar na linha 16, vamos tentar descobrir o que esta página web vai fazer. 134 00:07:30,000 --> 00:07:35,000 If (isset ($ _SESSION ["contador"]), então vá em frente 135 00:07:35,000 --> 00:07:39,000 e guarde na variável de contador, contador de minúsculas, 136 00:07:39,000 --> 00:07:42,000 $ _SESSION ["Contador"]. 137 00:07:42,000 --> 00:07:45,000 Este parece ser declarar uma variável local chamada contador 138 00:07:45,000 --> 00:07:48,000 dentro da qual está colocando uma cópia de tudo o que está dentro da superglobal 139 00:07:48,000 --> 00:07:52,000 chamado sessão no local "contador". 140 00:07:52,000 --> 00:07:56,000 Outra, aparentemente, este contador local pouco variável, é inicializado a 0. 141 00:07:56,000 --> 00:08:01,000 >> Mas, em seguida, algumas linhas mais tarde, em 26 aviso que a cópia da sessão de balcão, 142 00:08:01,000 --> 00:08:06,000 sua chave, tem um valor atribuído novo, que é o seu valor atual mais 1. 143 00:08:06,000 --> 00:08:09,000 Em suma, este arquivo parece estar atualizando 144 00:08:09,000 --> 00:08:13,000 um contador que está armazenado dentro do superglobal sessão 145 00:08:13,000 --> 00:08:16,000 aumentando-o de 1, mas retém uma primeira cópia do valor anterior 146 00:08:16,000 --> 00:08:20,000 armazenando-o em uma variável local chamada $ contador, 147 00:08:20,000 --> 00:08:22,000 e aqui vamos ver o que permanece. 148 00:08:22,000 --> 00:08:24,000 Acontece que é muito bonito apenas HTML. 149 00:08:24,000 --> 00:08:29,000 Na parte inferior desta página vemos na linha 37 que já visitaram este site 150 00:08:29,000 --> 00:08:33,000 número do contador de vezes, por isso há um par de características interessantes aqui. 151 00:08:33,000 --> 00:08:36,000 Um deles, esta é claramente uma variável, mas isso não basta apenas colocar 152 00:08:36,000 --> 00:08:39,000 $ Contador no corpo de seu HTML porque, naturalmente, 153 00:08:39,000 --> 00:08:43,000 se é só lá entre seu PHP HTML vai assumir que é apenas HTML. 154 00:08:43,000 --> 00:08:48,000 Você literalmente quer US $ contador a ser impresso na tela. 155 00:08:48,000 --> 00:08:51,000 >> Mas, em vez de cair em modo PHP 156 00:08:51,000 --> 00:08:55,000 com este pedaço de sintaxe que pode inserir dinamicamente um valor aqui 157 00:08:55,000 --> 00:08:58,000 muito semelhante em espírito para o que fizemos da última vez com 158 00:08:58,000 --> 00:09:00,000 inserir valores em cordas. 159 00:09:00,000 --> 00:09:04,000 Na verdade, esta é apenas uma notação abreviada para dizer algo como isso literalmente, 160 00:09:04,000 --> 00:09:12,000 print ($ contador) ou mesmo algo como printf (% s, contador), 161 00:09:12,000 --> 00:09:14,000 ou mesmo, como você pode ter visto online ou em livros didáticos, 162 00:09:14,000 --> 00:09:17,000 há uma função em PHP chamado eco 163 00:09:17,000 --> 00:09:20,000 que faz a mesma coisa, e de todos aqueles são apenas formas mais fôlego 164 00:09:20,000 --> 00:09:25,000 de dizer 00:09:28,000 Neste caso, aquele que você não precisa colocar 166 00:09:28,000 --> 00:09:30,000 a palavra PHP após o ponto de interrogação. 167 00:09:30,000 --> 00:09:34,000 Este é notação abreviada para, mais uma vez, o que acabamos de ver há pouco 168 00:09:34,000 --> 00:09:37,000 que está ecoando algum valor. 169 00:09:37,000 --> 00:09:39,000 >> Vamos ver o que o resultado final deste realmente é. 170 00:09:39,000 --> 00:09:43,000 Deixe-me passar em nosso arquivo counter.php, 171 00:09:43,000 --> 00:09:47,000 e vamos ver o que Davi só cometeu um erro ao jogar com o código lá. 172 00:09:47,000 --> 00:09:50,000 Vamos corrigir o que ele errou, 173 00:09:50,000 --> 00:09:54,000 eo erro parece estar lá, foi, na linha 37. 174 00:09:54,000 --> 00:09:59,000 Segundo o topo da página que visitei este site 0 vezes. 175 00:09:59,000 --> 00:10:02,000 Bem, vamos em frente, agora e na parte superior do navegador clique no 176 00:10:02,000 --> 00:10:05,000 recarregar ícone e clico em recarregar, 177 00:10:05,000 --> 00:10:12,000 e agora eu visitei o site uma vez, 2, 3, 4, 5, 6, 7, 8. 178 00:10:12,000 --> 00:10:16,000 E, de fato, se olharmos para a fonte desta página o código fonte está mudando, 179 00:10:16,000 --> 00:10:19,000 e notar a ausência completa de qualquer PHP, e isso é porque 180 00:10:19,000 --> 00:10:23,000 Código PHP é avaliado ou interpretado do lado do servidor, 181 00:10:23,000 --> 00:10:27,000 e assim que significa que a saída do script PHP é o que é, em última análise enviado para o navegador, 182 00:10:27,000 --> 00:10:31,000 que neste caso é algum código HTML puro e algum texto cru. 183 00:10:31,000 --> 00:10:33,000 O que está acontecendo aqui? 184 00:10:33,000 --> 00:10:37,000 >> Bem, com relativamente poucas linhas de código que eu sou capaz de armazenar 185 00:10:37,000 --> 00:10:40,000 persistentemente ao longo de vários segundos, ou se esperou tempo suficiente, 186 00:10:40,000 --> 00:10:44,000 minutos, até mesmo horas, algum valor de uma maneira que faz HTTP 187 00:10:44,000 --> 00:10:47,000 parecem stateful como se tivéssemos mantido 188 00:10:47,000 --> 00:10:51,000 essa conexão com o servidor, e é só lembrar o que eu disse da última vez, 189 00:10:51,000 --> 00:10:55,000 mas na realidade não há um monte de complexidade acontecendo debaixo do capô 190 00:10:55,000 --> 00:10:59,000 envolvendo cookies que está permitindo PHP para me dar essa ilusão 191 00:10:59,000 --> 00:11:02,000 deste carrinho de compras-como recurso. 192 00:11:02,000 --> 00:11:05,000 Por agora, um exemplo trivial onde estamos apenas armazenar um número inteiro, 193 00:11:05,000 --> 00:11:08,000 mas esse recurso vai voltar a ser de grande valor 194 00:11:08,000 --> 00:11:10,000 quando começamos a falar sobre os projetos mais complexos, 195 00:11:10,000 --> 00:11:12,000 entre eles conjunto de problemas 7. 196 00:11:12,000 --> 00:11:16,000 Este é o seu problema muito último no CS50. 197 00:11:16,000 --> 00:11:19,000 Eu sei, é tão triste, mas o que você vai encontrar é que vamos concluir 198 00:11:19,000 --> 00:11:22,000 esta parte do semestre, na verdade, a transição 199 00:11:22,000 --> 00:11:25,000 a partir do contexto de C certamente ao contexto do PHP 200 00:11:25,000 --> 00:11:27,000 Mas ao usar alguns dos fundamentos mesmos 201 00:11:27,000 --> 00:11:29,000 falamos por algum tempo. 202 00:11:29,000 --> 00:11:33,000 >> O objetivo com pset 7 é implementar CS50 Finanças, 203 00:11:33,000 --> 00:11:37,000 que é a sua própria versão do Yahoo Finance ou Finanças Google 204 00:11:37,000 --> 00:11:40,000 ou mesmo Etrade.com em que você tem a capacidade de 205 00:11:40,000 --> 00:11:43,000 olhar para cima os preços das ações para símbolos dadas, mas mais do que isso 206 00:11:43,000 --> 00:11:48,000 você tem a capacidade de "comprar" e "vender" ações 207 00:11:48,000 --> 00:11:51,000 que são negociados em várias bolsas de valores, porque como esta home page 208 00:11:51,000 --> 00:11:55,000 aqui sugere, que é realmente a medida em que nós começamos 209 00:11:55,000 --> 00:11:59,000 o conjunto de problemas para você, você tem um formulário de login que está pedindo um nome de usuário e uma senha. 210 00:11:59,000 --> 00:12:03,000 Ele tem um botão de envio, mas depois, como vamos ver, eventualmente, 211 00:12:03,000 --> 00:12:06,000 não há nada realmente acontecendo debaixo do capô ainda porque 212 00:12:06,000 --> 00:12:09,000 Resta-lhe implementar a capacidade de registrar novos usuários, 213 00:12:09,000 --> 00:12:12,000 a capacidade de comprar ações, vender ações, 214 00:12:12,000 --> 00:12:14,000 para realmente olhar para cima os preços das ações atuais. 215 00:12:14,000 --> 00:12:17,000 >> E, de fato, este mundo será tão real quanto possível porque fizemos 216 00:12:17,000 --> 00:12:20,000 incluir um pouco de código que permitirá que você com uma única função 217 00:12:20,000 --> 00:12:25,000 para consultar Yahoo Finance, que maravilhosamente disponibiliza dados livres 218 00:12:25,000 --> 00:12:31,000 para olhar para cima os preços das ações com base no símbolo de ação ou símbolo ticker, 219 00:12:31,000 --> 00:12:34,000 e você terá de volta o preço atual da ação do dia. 220 00:12:34,000 --> 00:12:37,000 Os dados que você está realmente vendo neste pset particular será 221 00:12:37,000 --> 00:12:40,000 sobre como o mundo real como ele pode obter de modo que você está realmente a interface 222 00:12:40,000 --> 00:12:43,000 com ações do mundo real, os preços reais, 223 00:12:43,000 --> 00:12:47,000 e vamos ver quanto dinheiro você pode fazer talvez 224 00:12:47,000 --> 00:12:51,000 ao longo dos próximos dias de jogar com o seu conjunto próprio problema. 225 00:12:51,000 --> 00:12:55,000 >> Mas vamos primeiro definir o cenário para como criar algo que certamente é mais complicado 226 00:12:55,000 --> 00:12:59,000 que counter.php, que é mais complicado do que qualquer um dos exemplos Frosh IMs, até agora, 227 00:12:59,000 --> 00:13:02,000 e vamos tentar introduzir uma paradigmas poucos aqui que nos permite 228 00:13:02,000 --> 00:13:06,000 tanto para pset 7 e talvez para o seu projeto final, se você faz algo baseado na web 229 00:13:06,000 --> 00:13:11,000 manter o seu código bem organizado, para manter-se sã, 230 00:13:11,000 --> 00:13:15,000 e dar um passo em direção a colaborar, seja em projeto final do CS50 231 00:13:15,000 --> 00:13:18,000 ou além, se você continuar a programar algo no futuro. 232 00:13:18,000 --> 00:13:21,000 Há este paradigma de design geral 233 00:13:21,000 --> 00:13:24,000 em informática e no desenvolvimento de software em geral 234 00:13:24,000 --> 00:13:27,000 conhecido como MVC, o modelo de controlador de vista, 235 00:13:27,000 --> 00:13:30,000 e este é um acrônimo bobo que descreve uma idéia muito legal, 236 00:13:30,000 --> 00:13:34,000 que é a separação de diferentes aspectos de um programa, 237 00:13:34,000 --> 00:13:39,000 especificamente manter a lógica separada ou a lógica do negócio de um site 238 00:13:39,000 --> 00:13:42,000 de modo a que tudo o que envolve coisas como 239 00:13:42,000 --> 00:13:45,000 chamar funções e consulta de bancos de dados e similares 240 00:13:45,000 --> 00:13:48,000 acontece não entre seu HTML 241 00:13:48,000 --> 00:13:51,000 mas sim em arquivos separados, e, de fato, há um arquivo de um 242 00:13:51,000 --> 00:13:54,000 tipicamente que você chamou o controlador 243 00:13:54,000 --> 00:13:56,000 que é realmente o cérebro por trás da operação, e vamos ver um exemplo 244 00:13:56,000 --> 00:13:58,000 isso em apenas um momento. 245 00:13:58,000 --> 00:14:01,000 >> Há um modelo que é código de programação 246 00:14:01,000 --> 00:14:05,000 que faz a falar com os seus bancos de dados, que fala com o Yahoo Finance e similares, 247 00:14:05,000 --> 00:14:08,000 e depois há o V em MVC, os pontos de vista, 248 00:14:08,000 --> 00:14:11,000 todo o material que está relacionado com a estética, os arquivos que realmente contêm 249 00:14:11,000 --> 00:14:14,000 HTML, CSS e talvez o seu semelhante. 250 00:14:14,000 --> 00:14:17,000 A ideia aqui, como esta figura indica, é que o controlador 251 00:14:17,000 --> 00:14:21,000 é o arquivo, como veremos em breve e, como você vai ver particularmente em pset 7, 252 00:14:21,000 --> 00:14:24,000 que o mundo fala a via seus navegadores. 253 00:14:24,000 --> 00:14:27,000 Esse é o arquivo que será visitado na internet pública, 254 00:14:27,000 --> 00:14:30,000 mas o controlador fala potencialmente modelo, 255 00:14:30,000 --> 00:14:34,000 o que é um ou mais arquivos que contenham código relacionado aos dados, 256 00:14:34,000 --> 00:14:37,000 código relacionado com a base de dados e similares, e, em seguida, se fala de 257 00:14:37,000 --> 00:14:40,000 o controlador de um ou mais arquivos, conhecidos como pontos de vista, 258 00:14:40,000 --> 00:14:43,000 que são a estética de uma página da web, modelos de tipos, 259 00:14:43,000 --> 00:14:47,000 que pode levar alguns dados como entrada, mas no final do dia, 260 00:14:47,000 --> 00:14:50,000 a única lógica dentro de uma visão deve ser a prestação de dados, 261 00:14:50,000 --> 00:14:53,000 iteração sobre um loop e realmente cuspindo alguns 262 00:14:53,000 --> 00:14:56,000 Baseado em HTML rendition algo do mesmo ou até mesmo como um PDF. 263 00:14:56,000 --> 00:14:59,000 >> O que é legal sobre o MVC é que você pode ter pontos de vista diferentes 264 00:14:59,000 --> 00:15:02,000 com base no tipo de dispositivo, com base no tipo de formato de ficheiro que, na verdade, 265 00:15:02,000 --> 00:15:04,000 querem mostrar para o usuário. 266 00:15:04,000 --> 00:15:10,000 Vamos dar uma olhada em alguns exemplos progressivamente mais complexas e bem desenhado 267 00:15:10,000 --> 00:15:13,000 começando primeiro com a versão 0 aqui. 268 00:15:13,000 --> 00:15:16,000 Deixe-me ir em frente e abrir-se em nosso diretório MVC hoje 269 00:15:16,000 --> 00:15:21,000 um arquivo chamado index.php no diretório 0. 270 00:15:21,000 --> 00:15:26,000 Observe que este é um site super simples e muito underwhelming 271 00:15:26,000 --> 00:15:29,000 que é uma espécie de versão 0 de uma homepage para CS50, 272 00:15:29,000 --> 00:15:32,000 e perceba como temos um link para Palestras, temos um link para Syllabus, 273 00:15:32,000 --> 00:15:35,000 e se eu seguir o link para notificação Palestras que a URL 274 00:15:35,000 --> 00:15:39,000 em cima vai mudar para lectures.php. 275 00:15:39,000 --> 00:15:44,000 Se eu siga o link para notificação Semana 1 que as mudanças de URL para week1.php. 276 00:15:44,000 --> 00:15:46,000 Parece haver uma estrutura bastante simples hierárquica aqui. 277 00:15:46,000 --> 00:15:49,000 >> Vamos dar uma rápida olhada debaixo do capô com a forma como isso é colocado para fora, 278 00:15:49,000 --> 00:15:53,000 e de fato, se eu olhar para index.php é muito simples. 279 00:15:53,000 --> 00:15:57,000 Na verdade, apesar de eu chamei este arquivo um PHP não há nenhum código de programação real. 280 00:15:57,000 --> 00:16:01,000 Há um comentário que eu escrevi aqui no PHP apenas para que o usuário não acabar vendo isso. 281 00:16:01,000 --> 00:16:05,000 Claro que, como antes de qualquer coisa, que está entre tags PHP 282 00:16:05,000 --> 00:16:08,000 é interpretado, mesmo que seja um comentário, e para interpretar um comentário 283 00:16:08,000 --> 00:16:11,000 significa apenas para jogá-lo fora no final do dia e na verdade não 284 00:16:11,000 --> 00:16:15,000 enviá-lo para o navegador, de modo que tudo aqui é apenas estética. 285 00:16:15,000 --> 00:16:20,000 Se eu abrir semelhante lectures.php isso também é apenas um arquivo codificado. 286 00:16:20,000 --> 00:16:23,000 Ele passa a ser chamado de algo. Php, 287 00:16:23,000 --> 00:16:27,000 mas é realmente justo. html, e week1.php, week2.php 288 00:16:27,000 --> 00:16:31,000 da mesma forma são apenas de marcação, então não há um monte de falhas deste projeto. 289 00:16:31,000 --> 00:16:33,000 Um, é uma quantidade enorme de copiar / colar. 290 00:16:33,000 --> 00:16:37,000 Mesmo que a única coisa que está mudando entre esses arquivos é a lista não ordenada, 291 00:16:37,000 --> 00:16:41,000 as tags li, eu ainda assim tem doc tipo, HTML, cabeça, 292 00:16:41,000 --> 00:16:44,000 título, corpo perto, perto HTML e mais 293 00:16:44,000 --> 00:16:47,000 em todos os arquivos, o que significa que se eu quiser reestruturar 294 00:16:47,000 --> 00:16:50,000 esta página web ou restylize que eu tenho que entrar e mudar 295 00:16:50,000 --> 00:16:54,000 todos esses arquivos manualmente ou com algum grande localizar e substituir. 296 00:16:54,000 --> 00:17:01,000 >> Vamos dar um passo em direção a um projeto mais inteligente, mais pensando na versão 1 aqui 297 00:17:01,000 --> 00:17:04,000 qual conforme a ler-me que nós incluímos para que você possa tocar junto com 298 00:17:04,000 --> 00:17:07,000 estes mais vagaroso na observação de casa que temos aqui 299 00:17:07,000 --> 00:17:10,000 um resumo dos arquivos na versão 1 deste site, 300 00:17:10,000 --> 00:17:13,000 e parece que eu tomei sobre mim mesmo para fatorar 301 00:17:13,000 --> 00:17:17,000 um código comum, header.php e footer.php. 302 00:17:17,000 --> 00:17:20,000 Bem, vamos dar uma olhada no que está dentro do primeiro deles. 303 00:17:20,000 --> 00:17:23,000 Header.php parece familiar, 304 00:17:23,000 --> 00:17:26,000 mas observar onde ele se cortou? 305 00:17:26,000 --> 00:17:30,000 Logo após a linha 19, então isso é tudo o que era comum 306 00:17:30,000 --> 00:17:33,000 do index.php arquivos, lectures.php, 307 00:17:33,000 --> 00:17:36,000 Semana1 e week2.php do exemplo anterior. 308 00:17:36,000 --> 00:17:40,000 O que fiz foi cópia e tudo corte que era comum a todos os arquivos, 309 00:17:40,000 --> 00:17:44,000 colocá-lo em um arquivo de cabeçalho separado, e da mesma forma em footer.php 310 00:17:44,000 --> 00:17:48,000 eu aplicar o mesmo princípio pelo qual as únicas linhas interessantes 311 00:17:48,000 --> 00:17:52,000 em footer.php são estes corpo, dois perto e HTML perto. 312 00:17:52,000 --> 00:17:55,000 >> Mas o que isso significa agora é que na nova versão 313 00:17:55,000 --> 00:17:59,000 de aviso index.php quanto mais simples ele pode chegar. 314 00:17:59,000 --> 00:18:02,000 Concedido, um pouco mais enigmático olhar, um pouco menos intuitiva 315 00:18:02,000 --> 00:18:06,000 a seguir de cima para baixo, mas, meu Deus, tudo que a redundância é ido agora. 316 00:18:06,000 --> 00:18:10,000 Nós exigir o uso de uma função PHP chamado literalmente exigir até superior, 317 00:18:10,000 --> 00:18:15,000 que lembra muito, lembre-se, de C # include mecanismo. 318 00:18:15,000 --> 00:18:17,000 Exigimos header.php no topo. 319 00:18:17,000 --> 00:18:20,000 Exigimos footer.php na parte inferior, ea única coisa que é diferente 320 00:18:20,000 --> 00:18:25,000 ou especial sobre este arquivo é o conteúdo que está destinado a ser única para ele. 321 00:18:25,000 --> 00:18:29,000 Se eu entrar na, digamos, lectures.php, o mesmo princípio se aplica. 322 00:18:29,000 --> 00:18:32,000 Mais uma vez, alguns comentários em cima, mas depois eu requerem cabeçalho, rodapé exigem, 323 00:18:32,000 --> 00:18:35,000 e entre é só o conteúdo que está realmente mudado. 324 00:18:35,000 --> 00:18:38,000 E se nós olhamos para semana 1 e semana 2 veríamos 325 00:18:38,000 --> 00:18:42,000 que o mesmo princípio foi aplicado ali. 326 00:18:42,000 --> 00:18:44,000 Bem, nós não estamos completamente feito lá. 327 00:18:44,000 --> 00:18:48,000 >> Vamos dar uma olhada na versão 2, que tem uma estrutura semelhante, 328 00:18:48,000 --> 00:18:50,000 mas observar agora eu introduzido outra coisa. 329 00:18:50,000 --> 00:18:53,000 Na linha 10 eu introduzi helpers.php, 330 00:18:53,000 --> 00:18:55,000 que, aparentemente, contém funções auxiliares. 331 00:18:55,000 --> 00:18:58,000 Uma função auxiliar é geralmente uma função relativamente curto 332 00:18:58,000 --> 00:19:01,000 que você escreve para ajudá-lo em vários lugares, 333 00:19:01,000 --> 00:19:04,000 e vamos ver o que há dentro de helpers.php. 334 00:19:04,000 --> 00:19:07,000 Neste caso, parece que ele tem duas funções. 335 00:19:07,000 --> 00:19:10,000 Lembre-se do outro dia com o nosso exemplo cubo 336 00:19:10,000 --> 00:19:13,000 você pode definir suas próprias funções em PHP, e que eu tenho feito agora é que eu tenho 337 00:19:13,000 --> 00:19:17,000 funções definidas chamados tornar rodapé e tornar cabeçalho, 338 00:19:17,000 --> 00:19:21,000 a primeira das quais utiliza um parâmetro chamado dados, 339 00:19:21,000 --> 00:19:25,000 cujo valor padrão é um conjunto vazio, como sugere lá, 340 00:19:25,000 --> 00:19:29,000 e nós podemos realmente escrever este ainda mais sucinta na última versão do PHP 341 00:19:29,000 --> 00:19:32,000 dizendo colchete aberto, fechado colchete. 342 00:19:32,000 --> 00:19:35,000 Isso significa que uma matriz vazia de tamanho 0, mas ainda assim uma matriz. 343 00:19:35,000 --> 00:19:38,000 >> Esta função extracto é um pouco especial em que 344 00:19:38,000 --> 00:19:41,000 o que ele faz é que recebe como argumento uma matriz associativa 345 00:19:41,000 --> 00:19:45,000 que tem 0 ou mais pares de valores-chave, e se você tiver uma chave de foo 346 00:19:45,000 --> 00:19:48,000 e um valor de barra a função extracto 347 00:19:48,000 --> 00:19:51,000 cria uma situação em que agora, a partir de linha 11, 348 00:19:51,000 --> 00:19:57,000 você tem uma variável local chamada $ foo cujo valor é bar. 349 00:19:57,000 --> 00:19:59,000 E se você tivesse mais chaves e valores na matriz de dados, 350 00:19:59,000 --> 00:20:03,000 da mesma forma que eles são extraídos para o âmbito local 351 00:20:03,000 --> 00:20:06,000 ou espaço de nome, de modo que footer.php e 352 00:20:06,000 --> 00:20:09,000 a mesma idéia aqui para que header.php 353 00:20:09,000 --> 00:20:12,000 ter acesso a essas variáveis. 354 00:20:12,000 --> 00:20:15,000 Na verdade, deixe-me abrir novamente header.php 355 00:20:15,000 --> 00:20:18,000 e chamar a atenção para o que agora parece que nesta versão. 356 00:20:18,000 --> 00:20:22,000 >> Ao invés de codificar CS50 como o título para cada página 357 00:20:22,000 --> 00:20:24,000 perceber o dinamismo que é possível agora. 358 00:20:24,000 --> 00:20:29,000 Na linha 5 estou ecoando uma variável título, 359 00:20:29,000 --> 00:20:34,000 mas primeiro eu estou passando essa variável título para uma função chamada htmlspecialchars. 360 00:20:34,000 --> 00:20:38,000 Um nome estúpido para uma função, desde que seja, mas o que realmente faz o que diz. 361 00:20:38,000 --> 00:20:41,000 Ele garante que todos os caracteres especiais 362 00:20:41,000 --> 00:20:46,000 na seqüência que foi aprovada em são devidamente escapou HTML. 363 00:20:46,000 --> 00:20:49,000 Este é, na verdade, uma forma de evitar uma coisa chamada cross-site scripting ataque 364 00:20:49,000 --> 00:20:52,000 em que alguém pode maliciosa ou acidentalmente 365 00:20:52,000 --> 00:20:55,000 injetar seu próprio HTML em seu site 366 00:20:55,000 --> 00:20:59,000 colando em alguma forma, por exemplo, 367 00:20:59,000 --> 00:21:02,000 algo que você não espera foram bastante, particularmente código JavaScript, 368 00:21:02,000 --> 00:21:05,000 como vamos falar em uma semana ou duas de cada vez. 369 00:21:05,000 --> 00:21:08,000 >> Este header.php agora, é uma visão 370 00:21:08,000 --> 00:21:12,000 no sentido de que ele permite que você visualize esteticamente o conteúdo de um conjunto de dados. 371 00:21:12,000 --> 00:21:14,000 Mas, mais especificamente, é um modelo. 372 00:21:14,000 --> 00:21:19,000 Esta é uma espécie de plano agora do que queremos no cabeçalho de cada página para olhar como, 373 00:21:19,000 --> 00:21:23,000 mas há algum dinamismo que queremos o título a ser inserido dinamicamente 374 00:21:23,000 --> 00:21:26,000 com base na variável título 375 00:21:26,000 --> 00:21:30,000 que foi extraído quando chamada, de novo, 376 00:21:30,000 --> 00:21:33,000 a função cabeçalho render. 377 00:21:33,000 --> 00:21:36,000 Agora, se nós olhamos rodapé render, há realmente não uso muito disso agora 378 00:21:36,000 --> 00:21:40,000 porque em footer.php não há dinamismo qualquer. 379 00:21:40,000 --> 00:21:43,000 Não poderia ser, mas no momento é uma lista codificado de 2 tags, 380 00:21:43,000 --> 00:21:46,000 mas a ideia mesmo se aplica, de modo a que, na verdade, sugere porque 381 00:21:46,000 --> 00:21:49,000 se perdemos tempo tendo um cabeçalho render e uma função de renderização rodapé? 382 00:21:49,000 --> 00:21:52,000 Deixe-me ir em vez agora em versão 3, 383 00:21:52,000 --> 00:21:56,000 e na versão 3 em ajudantes decidi simplificar ainda mais. 384 00:21:56,000 --> 00:21:58,000 >> Deixe-me ter uma função render. 385 00:21:58,000 --> 00:22:02,000 Deixe-me tê-lo tomar um outro argumento, desta vez chamada de modelo, 386 00:22:02,000 --> 00:22:05,000 que se destina a ser o nome de um modelo, 387 00:22:05,000 --> 00:22:11,000 e depois vou concatenar presunçosamente. php para valor que variável, 388 00:22:11,000 --> 00:22:17,000 e então, se ela existe, foo.php bar.php ou header.php e footer.php, 389 00:22:17,000 --> 00:22:20,000 então eu estou indo para ir em frente e extrair os dados variáveis 390 00:22:20,000 --> 00:22:23,000 e depois exigir esse caminho. 391 00:22:23,000 --> 00:22:29,000 Em outras palavras, para usar isso agora, se eu abrir index.php 392 00:22:29,000 --> 00:22:32,000 perceber que eu não chamo de cabeçalho renderização mais. 393 00:22:32,000 --> 00:22:36,000 Eu só chamar render, mas eu passar em um valor de cotação do cabeçalho 394 00:22:36,000 --> 00:22:39,000 deixar claro qual o modelo que eu realmente quero para carregar. 395 00:22:39,000 --> 00:22:41,000 >> Então aqui perceber o que estou fazendo. 396 00:22:41,000 --> 00:22:44,000 Estou passando dinamicamente uma chave de título, 397 00:22:44,000 --> 00:22:47,000 um valor de CS50, e isso também, como vimos antes, 398 00:22:47,000 --> 00:22:51,000 poderia ser mais sucinto na última versão do PHP 399 00:22:51,000 --> 00:22:54,000 onde eu posso substituir a função array com colchetes, 400 00:22:54,000 --> 00:22:57,000 que eu proponho é ainda mais legível e, certamente, 401 00:22:57,000 --> 00:22:59,000 um pouco mais fácil de digitar. 402 00:22:59,000 --> 00:23:02,000 E, claro, com a chamada render rodapé na parte inferior, 403 00:23:02,000 --> 00:23:05,000 que não se incomodam em passar um segundo argumento em tudo, não matriz associativa, 404 00:23:05,000 --> 00:23:07,000 porque não há nada dentro da dinâmica que rodapé. 405 00:23:07,000 --> 00:23:10,000 É apenas a algumas tags próximos de HTML. 406 00:23:10,000 --> 00:23:14,000 Bom, estamos tomando medidas para realmente limpar as coisas aqui, 407 00:23:14,000 --> 00:23:17,000 mas deixe-me abrir dois exemplos finais. 408 00:23:17,000 --> 00:23:21,000 Este, número 4, aviso que eu fiz uma decisão consciente agora 409 00:23:21,000 --> 00:23:26,000 para melhorar o exemplo anterior, finalmente, usando uma hierarquia para os meus arquivos. 410 00:23:26,000 --> 00:23:29,000 >> Observe que, nesse resumo, nesta me lê, eu introduzi 411 00:23:29,000 --> 00:23:32,000 um diretório e inclui um diretório de modelos 412 00:23:32,000 --> 00:23:35,000 cujos conteúdos vão ser as coisas que eu quero incluir 413 00:23:35,000 --> 00:23:38,000 e os modelos que eu quero tornar, respectivamente. 414 00:23:38,000 --> 00:23:42,000 Isto é realmente eu ser anal e tentando manter as coisas arrumadas, 415 00:23:42,000 --> 00:23:45,000 manter arquivos relacionados juntos, mas o resultado final 416 00:23:45,000 --> 00:23:48,000 é que agora temos uma configuração um pouco mais arrumado, mas temos que lembrar agora 417 00:23:48,000 --> 00:23:51,000 em, por exemplo, index.php 418 00:23:51,000 --> 00:23:55,000 quando exigem o arquivo helpers.php 419 00:23:55,000 --> 00:24:01,000 temos que agora exigem-lo através de includes / helpers.php 420 00:24:01,000 --> 00:24:06,000 ao invés de apenas dizer helpers.php porque agora é realmente em um sub-diretório. 421 00:24:06,000 --> 00:24:09,000 Agora, como um aparte, você vai ver nestes exemplos e alguns outros 422 00:24:09,000 --> 00:24:11,000 funciona como exigem, exigem uma vez. 423 00:24:11,000 --> 00:24:15,000 Há realmente uma função em si chamado incluir, e todos eles têm um comportamento um pouco diferente. 424 00:24:15,000 --> 00:24:18,000 Aqui eu digo exigem uma vez para fazer super claro que eu só quero aqueles 425 00:24:18,000 --> 00:24:20,000 ajudantes incluído no meu projeto uma vez. 426 00:24:20,000 --> 00:24:24,000 Mas se eu sou cuidadoso e se eu estou realmente pensando na minha lógica propriamente 427 00:24:24,000 --> 00:24:27,000 deveria bastar também só para dizer requerer até topo 428 00:24:27,000 --> 00:24:31,000 tanto tempo como eu mesmo não possa exigir o mesmo arquivo em outro lugar. 429 00:24:31,000 --> 00:24:34,000 Na verdade, esta é uma maneira um pouco mais eficiente de fazer as coisas em seguida, usando 430 00:24:34,000 --> 00:24:38,000 exigem uma vez, então eu vou reduzi-la a apenas exigir. 431 00:24:38,000 --> 00:24:40,000 >> Vamos dar um passo adiante. 432 00:24:40,000 --> 00:24:46,000 Este último exemplo, agora, a versão 5, tem uma hierarquia de pastas ainda mais limpa. 433 00:24:46,000 --> 00:24:50,000 Observe o que eu fiz aqui por a ler-me nesta versão final 434 00:24:50,000 --> 00:24:54,000 é agora eu tenho meu diretório HTML, que eu tive todo esse tempo, 435 00:24:54,000 --> 00:24:58,000 mas dentro de lá agora é só lectures.php, index.php, 436 00:24:58,000 --> 00:25:01,000 week1.php e week2.php. 437 00:25:01,000 --> 00:25:05,000 O diretório inclui agora vive ao lado do diretório HTML, 438 00:25:05,000 --> 00:25:08,000 de modo ao mesmo nível como um irmão, por assim dizer. 439 00:25:08,000 --> 00:25:10,000 Assim faz a pasta de modelos. 440 00:25:10,000 --> 00:25:14,000 O takeaway chave aqui é que eu introduzido estrutura um pouco mais, 441 00:25:14,000 --> 00:25:17,000 mas o elemento-chave agora é que apenas os arquivos 442 00:25:17,000 --> 00:25:21,000 que precisam estar acessíveis na web, publicamente endereçável 443 00:25:21,000 --> 00:25:25,000 por uma URL na internet pública estão em meu diretório HTML. 444 00:25:25,000 --> 00:25:28,000 >> Arquivos mesmo tempo, outras helpers.php, footer.php, 445 00:25:28,000 --> 00:25:32,000 header.php, que são, sem dúvida, talvez mais sensível, 446 00:25:32,000 --> 00:25:35,000 talvez ajudantes, na verdade, tem alguns nomes de usuário e senhas ou algum intelectual 447 00:25:35,000 --> 00:25:39,000 propriedade da mina, funções que eu realmente não quero que o mundo veja, mesmo que acidentalmente. 448 00:25:39,000 --> 00:25:45,000 É uma boa prática para manter fora do diretório HTML pública 449 00:25:45,000 --> 00:25:48,000 todos os arquivos que não precisam de se ser público. 450 00:25:48,000 --> 00:25:51,000 Tudo que você tem que fazer neste caso quando se olha, por exemplo, 451 00:25:51,000 --> 00:25:55,000 o arquivo index.php do diretório do HTML, 452 00:25:55,000 --> 00:25:58,000 notar só temos de ser um pouco mais cuidadoso quando requerendo 453 00:25:58,000 --> 00:26:00,000 ou exigir uma vez que este arquivo. 454 00:26:00,000 --> 00:26:03,000 Eu preciso primeiro fazer .. para ir para o diretório pai, 455 00:26:03,000 --> 00:26:06,000 em seguida, fazer / includes / helpers.php 456 00:26:06,000 --> 00:26:12,000 a mergulhar de volta para obter o arquivo que eu me importo. 457 00:26:12,000 --> 00:26:16,000 >> Quaisquer perguntas, então no MVC 458 00:26:16,000 --> 00:26:20,000 ou esta encarnação relativamente simples mesmo? 459 00:26:20,000 --> 00:26:23,000 E deixe-me deixar claro que nós nos concentramos um pouco sobre a 460 00:26:23,000 --> 00:26:27,000 V aqui, os pontos de vista e do factoring fora destes modelos. 461 00:26:27,000 --> 00:26:30,000 Nós não temos realmente distingue M de C ainda. 462 00:26:30,000 --> 00:26:33,000 Na verdade, não há realmente nenhuma M aqui, e até mesmo o nosso C, 463 00:26:33,000 --> 00:26:36,000 controlador, não está realmente fazendo tudo o que muito, mas você vai ter muito mais 464 00:26:36,000 --> 00:26:39,000 familiarizado com ambas as duas cartas de MVC, 465 00:26:39,000 --> 00:26:43,000 ou melhor, você vai ter muito mais familiarizado com o C 466 00:26:43,000 --> 00:26:49,000 em MVC para conjunto de problemas 7, então não há mais do que isso no horizonte. 467 00:26:49,000 --> 00:26:51,000 Perguntas? 468 00:26:51,000 --> 00:26:53,000 Há, na verdade, ninguém aqui. 469 00:26:53,000 --> 00:26:57,000 >> Ok, vamos agora passar para o segundo e último tópico para hoje. 470 00:26:57,000 --> 00:27:00,000 Que é a introdução de uma base de dados. 471 00:27:00,000 --> 00:27:03,000 Até este ponto, nós tivemos algumas maneiras de armazenar dados. 472 00:27:03,000 --> 00:27:05,000 Nós usamos variáveis. 473 00:27:05,000 --> 00:27:08,000 Voltar em nosso arquivo de C, I / O debate que começamos a usar arquivos de texto 474 00:27:08,000 --> 00:27:11,000 e utilização de arquivos como fprintf, e então nós nem começou 475 00:27:11,000 --> 00:27:14,000 falando sobre CSV um pouco, valores separados por vírgula, 476 00:27:14,000 --> 00:27:17,000 para todos estes nos permitiu ter dados armazenados 477 00:27:17,000 --> 00:27:19,000 ou não-persistente ou persistentemente. 478 00:27:19,000 --> 00:27:23,000 Mas mesmo CSVs não são realmente propício para a busca 479 00:27:23,000 --> 00:27:25,000 e inserção e exclusão. 480 00:27:25,000 --> 00:27:28,000 É realmente apenas um arquivo de texto separado por vírgulas estúpido 481 00:27:28,000 --> 00:27:30,000 linha por linha por linha por linha, por isso, se você quiser 482 00:27:30,000 --> 00:27:32,000 pesquisar o arquivo o melhor que você pode fazer é realmente busca linear. 483 00:27:32,000 --> 00:27:34,000 Você tem que começar no topo do arquivo, ler a coisa toda em, 484 00:27:34,000 --> 00:27:36,000 e olhar para algum valor de interesse. 485 00:27:36,000 --> 00:27:39,000 Se você deseja inserir em que você tem que fazer a mesma coisa, 486 00:27:39,000 --> 00:27:41,000 Iterando sobre ele e inserir em um determinado lugar, 487 00:27:41,000 --> 00:27:45,000 e, na verdade, você tem que fazer toda a lógica de buscar a si mesmo. 488 00:27:45,000 --> 00:27:49,000 >> Você não pode fazer padrão inteligente de correspondência em um arquivo CSV, salvo se você escrever o código. 489 00:27:49,000 --> 00:27:51,000 Você não pode fazer filtração de um arquivo CSV 490 00:27:51,000 --> 00:27:53,000 a menos que se escreve o código. 491 00:27:53,000 --> 00:27:56,000 Não seria bom se alguém colocar todo o esforço 492 00:27:56,000 --> 00:27:59,000 para realmente tornar a busca mais fácil e fácil inserção 493 00:27:59,000 --> 00:28:01,000 e exclusão e atualização e assim por diante? 494 00:28:01,000 --> 00:28:04,000 Isso é exatamente o que um banco de dados é. 495 00:28:04,000 --> 00:28:07,000 SQL, linguagem de consulta estruturada, é ainda outro idioma 496 00:28:07,000 --> 00:28:10,000 que estamos introduzindo aqui hoje, mas isso também é bastante acessível, 497 00:28:10,000 --> 00:28:13,000 eo que estamos realmente vai fazer é só arrancar dele alguns dos mais salientes 498 00:28:13,000 --> 00:28:16,000 características de modo que para pset 7, e se você fizer alguma coisa com base na Web, 499 00:28:16,000 --> 00:28:19,000 seu projeto final, você tem a capacidade de se expressar 500 00:28:19,000 --> 00:28:22,000 em termos de consultas de dados. 501 00:28:22,000 --> 00:28:25,000 Você tem a capacidade de armazenar um pouco ou um monte de dados 502 00:28:25,000 --> 00:28:28,000 de um modo muito mais estruturado que será, no final do dia, 503 00:28:28,000 --> 00:28:32,000 tornar sua vida mais fácil, porque com o SQL você pode se expressar 504 00:28:32,000 --> 00:28:35,000 muito mais precisamente, muito mais metodicamente a fim de 505 00:28:35,000 --> 00:28:40,000 voltar alguns subconjunto de dados de um grande corpus de dados. 506 00:28:40,000 --> 00:28:45,000 >> Você pode pensar em um banco de dados, neste caso, um banco de dados SQL, realmente como o Excel 507 00:28:45,000 --> 00:28:48,000 ou números em que é uma planilha, 508 00:28:48,000 --> 00:28:50,000 ou talvez várias planilhas, e uma planilha, é claro, 509 00:28:50,000 --> 00:28:53,000 tem linhas e colunas, e isso é porque 510 00:28:53,000 --> 00:28:56,000 Bancos de dados SQL são relacionais, relacional, no sentido de 511 00:28:56,000 --> 00:28:59,000 que armazenam dados em termos dessas tabelas, 512 00:28:59,000 --> 00:29:01,000 linhas e colunas. 513 00:29:01,000 --> 00:29:03,000 Eles são mais desempenho do que algo como uma planilha, 514 00:29:03,000 --> 00:29:05,000 e uma folha de cálculo é feito para ser usado por um ser humano. 515 00:29:05,000 --> 00:29:08,000 Um banco de dados destina-se a ser usado por um programador 516 00:29:08,000 --> 00:29:12,000 escrever código contra ele, assim que a encarnação de um banco de dados 517 00:29:12,000 --> 00:29:14,000 vai ser uma das linhas de comando. 518 00:29:14,000 --> 00:29:18,000 >> Uma das bases de dados relacionais mais populares lá fora, é, mais uma vez, MySQL, 519 00:29:18,000 --> 00:29:22,000 que é maravilhosamente livre, desempenho muito elevados, e é isso que 520 00:29:22,000 --> 00:29:24,000 Facebook usado muito cedo e até certo ponto ainda hoje 521 00:29:24,000 --> 00:29:27,000 para armazenar uma grande quantidade de seus dados, e vamos ver em um momento 522 00:29:27,000 --> 00:29:30,000 que a utilização de comandos relativamente simples 523 00:29:30,000 --> 00:29:33,000 podemos selecionar dados, inserir dados, atualizar dados, 524 00:29:33,000 --> 00:29:37,000 apagar os dados e afins, mas, felizmente, há uma interface mais amigável 525 00:29:37,000 --> 00:29:39,000 que apenas digitando em um prompt de preto e branco aqui. 526 00:29:39,000 --> 00:29:43,000 Nós vamos usar para pset 7 e além de uma ferramenta gratuita chamada phpMyAdmin. 527 00:29:43,000 --> 00:29:45,000 O nome é mera coincidência. 528 00:29:45,000 --> 00:29:47,000 A ferramenta passa a ser implementado em PHP, 529 00:29:47,000 --> 00:29:49,000 mas que é fundamentalmente irrelevante. 530 00:29:49,000 --> 00:29:53,000 O que é útil sobre phpMyAdmin é que é um utilitário baseado na web. 531 00:29:53,000 --> 00:29:55,000 Nós pré-instalado no aparelho para você, 532 00:29:55,000 --> 00:29:58,000 e com ele você pode criar tabelas em um banco de dados, 533 00:29:58,000 --> 00:30:01,000 você pode inserir dados, apagar dados, e geralmente ver 534 00:30:01,000 --> 00:30:04,000 seus dados em um ambiente bastante amigável. 535 00:30:04,000 --> 00:30:07,000 Seus usuários não vai usar o phpMyAdmin. 536 00:30:07,000 --> 00:30:09,000 >> Isto é realmente apenas uma ferramenta administrativa ou desenvolvedor 537 00:30:09,000 --> 00:30:12,000 com que a ver e fuçar seus dados e descobrir como estruturá-lo, 538 00:30:12,000 --> 00:30:15,000 assim como você mesmo pode usar o Excel ou Numbers, 539 00:30:15,000 --> 00:30:19,000 mas que vai ser uma ótima maneira de visualizar o que está acontecendo debaixo do capô 540 00:30:19,000 --> 00:30:22,000 de modo que você possa se concentrar no problema interessante resolver e não tanto 541 00:30:22,000 --> 00:30:25,000 sobre os comandos arcanos. 542 00:30:25,000 --> 00:30:28,000 Vamos dar uma olhada em um exemplo de dados que podem ser armazenados tabularly 543 00:30:28,000 --> 00:30:30,000 em um banco de dados relacional. 544 00:30:30,000 --> 00:30:32,000 Aqui está um exemplo. 545 00:30:32,000 --> 00:30:35,000 Agora, infelizmente, phpMyAdmin erradamente no lado de maneira jogando palavras demais 546 00:30:35,000 --> 00:30:38,000 e gráficos em você, mas se você aprimorar em apenas sobre o 547 00:30:38,000 --> 00:30:42,000 Coluna de ID, a coluna de nome de usuário, ea coluna de hash, 548 00:30:42,000 --> 00:30:45,000 isso é efetivamente uma planilha, mas ele passa a ser um trecho de 549 00:30:45,000 --> 00:30:49,000 de uma mesa no interior do aparelho 550 00:30:49,000 --> 00:30:53,000 usando um arquivo que nós lhe oferecemos em conjunto de problemas 7. 551 00:30:53,000 --> 00:30:57,000 >> Em particular, nós damos-lhe um arquivo que representa 552 00:30:57,000 --> 00:31:01,000 mesa de um usuário, de modo a planilha contendo os usuários com 3 colunas, 553 00:31:01,000 --> 00:31:05,000 uma das quais é uma identificação única a partir de 1 e sendo incrementado depois. 554 00:31:05,000 --> 00:31:08,000 A segunda coluna é um nome de usuário, e aqueles de vocês que fez Hacker, 555 00:31:08,000 --> 00:31:12,000 a edição Hacker para pset 2, pode reconhecer alguns destes nomes de usuário, pelo menos. 556 00:31:12,000 --> 00:31:16,000 No lado direito estão as senhas, mas eles não são senhas literais. 557 00:31:16,000 --> 00:31:19,000 Eles são hashes º, por isso acaba 558 00:31:19,000 --> 00:31:22,000 que o armazenamento de senhas em um banco de dados é uma idéia muito ruim. 559 00:31:22,000 --> 00:31:25,000 Vocês todos já deve ter lido em algum momento de algum site 560 00:31:25,000 --> 00:31:28,000 ou banco de dados de alguma companhia que está sendo comprometida, e então você tem que 561 00:31:28,000 --> 00:31:31,000 alterar sua senha, você precisa para obter restituições para as coisas 562 00:31:31,000 --> 00:31:34,000 porque um cara ruim, na verdade quebrou em sua conta como resultado. 563 00:31:34,000 --> 00:31:38,000 >> O armazenamento de senhas em texto puro, não encriptado em um banco de dados 564 00:31:38,000 --> 00:31:41,000 é completamente estúpido, e ainda é muito divertido 565 00:31:41,000 --> 00:31:44,000 depois de ler sobre algumas empresas muito conhecidas 566 00:31:44,000 --> 00:31:47,000 às vezes na imprensa cujas bases de dados estão comprometidos, 567 00:31:47,000 --> 00:31:50,000 e que parte não é engraçado, mas o fato de que os bancos de dados contêm criptografado 568 00:31:50,000 --> 00:31:53,000 senhas é ridículo, porque, literalmente, com uma linha de código 569 00:31:53,000 --> 00:31:57,000 você pode proteger contra essa ameaça em particular, e isso é o que nós fizemos aqui. 570 00:31:57,000 --> 00:32:00,000 Mesmo para a nossa versão Finanças pouco fake CS50 571 00:32:00,000 --> 00:32:03,000 estamos criptografar senhas apenas para uma boa medida, e do fato de que 572 00:32:03,000 --> 00:32:07,000 todas essas senhas começam com $ 1 $ é apenas uma convenção. 573 00:32:07,000 --> 00:32:10,000 Isso só significa que eles são criptografados ou realmente hash, 574 00:32:10,000 --> 00:32:13,000 que é como uma função de criptografia unidirecional 575 00:32:13,000 --> 00:32:17,000 pelo qual você não pode reverter seus efeitos com algo chamado MD5. 576 00:32:17,000 --> 00:32:21,000 >> O facto de que 50 é após o que significa que um valor de sal 577 00:32:21,000 --> 00:32:24,000 de 50 foi usado para hash todas essas senhas, exceto um. 578 00:32:24,000 --> 00:32:27,000 Meu, é claro, como você pode ver lá, HA, 579 00:32:27,000 --> 00:32:30,000 estava usando um sal diferente, para aqueles de vocês que fiquei um pouco desarmado 580 00:32:30,000 --> 00:32:33,000 talvez em Hacker 2, que poderia ter sido o resultado de termos usados 581 00:32:33,000 --> 00:32:36,000 um hash diferente do que os outros, porque minha senha é realmente o mesmo 582 00:32:36,000 --> 00:32:38,000 como algum outro usuário lá em cima. 583 00:32:38,000 --> 00:32:41,000 Na verdade, se você estava esperando todas essas semanas para descobrir 584 00:32:41,000 --> 00:32:44,000 o que essas senhas foram aqui foram as senhas que você foi desafiado 585 00:32:44,000 --> 00:32:48,000 de crack na edição de conjunto de problemas Hacker 2, portanto, não muito complicado. 586 00:32:48,000 --> 00:32:50,000 Na verdade, malan era o mesmo que jharvard, 587 00:32:50,000 --> 00:32:54,000 mas se voltarmos olharam diferente. 588 00:32:54,000 --> 00:32:58,000 >> Concentre-se em jharvard de vermelho porque eles eram salgados diferente. 589 00:32:58,000 --> 00:33:01,000 O algoritmo foi perturbado de uma maneira que o 590 00:33:01,000 --> 00:33:05,000 valor de hash, o valor criptografado parece um pouco diferente 591 00:33:05,000 --> 00:33:08,000 porque as entradas eram ligeiramente diferentes, mas a senha debaixo do capô 592 00:33:08,000 --> 00:33:10,000 ainda era, em última análise carmesim. 593 00:33:10,000 --> 00:33:12,000 Agora, quem se importa com isso? 594 00:33:12,000 --> 00:33:15,000 Bem, nós estamos fornecendo-lhe os usuários de exemplo, os nomes de usuário de amostra 595 00:33:15,000 --> 00:33:18,000 e hashes de suas senhas, de modo que você realmente tem alguns 596 00:33:18,000 --> 00:33:23,000 clientes para CS50 Finanças quando você sair do chão com o seu código. 597 00:33:23,000 --> 00:33:27,000 Você vai ter que implementar mais tabelas dentro do MySQL, dentro do banco de dados. 598 00:33:27,000 --> 00:33:30,000 Você vai ter que criar mais planilhas, de forma eficaz, mas decidimos dar-lhe um presente 599 00:33:30,000 --> 00:33:33,000 para você começar, e você vai ver que a especificação do conjunto de problemas 600 00:33:33,000 --> 00:33:37,000 orienta o processo de importação esta tabela 601 00:33:37,000 --> 00:33:39,000 e também explicando o que algumas das características são, 602 00:33:39,000 --> 00:33:41,000 e você também vai ver que nós lhe fornecer o código 603 00:33:41,000 --> 00:33:44,000 para lidar com a hash ou criptografia dessas senhas, 604 00:33:44,000 --> 00:33:49,000 assim você não precisa se preocupar muito com o que MD5 ou similares é realmente tudo. 605 00:33:49,000 --> 00:33:53,000 >> Então, SQL, linguagem de consulta estruturada. 606 00:33:53,000 --> 00:33:56,000 Isto é, muito simplesmente, a linguagem que está prestes a começar a usar em pset 7 607 00:33:56,000 --> 00:34:01,000 e, talvez, para além de solicitar dados de algum banco de dados. 608 00:34:01,000 --> 00:34:06,000 Os dados são, novamente, armazenados tabularly nestas tabelas relacionais, colunas e linhas, 609 00:34:06,000 --> 00:34:09,000 mas usando uma sintaxe relativamente simples como apagar, 610 00:34:09,000 --> 00:34:12,000 inserir, atualizar e selecione podemos fazer exatamente isso. 611 00:34:12,000 --> 00:34:15,000 Podemos excluir do banco de dados, inserir, 612 00:34:15,000 --> 00:34:19,000 atualizar dados, bem como selecionar, ou seja, recuperar dados do banco de dados. 613 00:34:19,000 --> 00:34:21,000 Como nós vamos fazer isso? 614 00:34:21,000 --> 00:34:23,000 Deixe-me ir em frente para o aparelho. 615 00:34:23,000 --> 00:34:28,000 Deixe-me puxar para cima http://localhost, 616 00:34:28,000 --> 00:34:30,000 que, novamente, é o local próprio aparelho. 617 00:34:30,000 --> 00:34:32,000 Isso é o seu apelido padrão. 618 00:34:32,000 --> 00:34:35,000 E deixe-me ir para / phpmyadmin. 619 00:34:35,000 --> 00:34:39,000 Isto acontece por ser uma URL especial que o aparelho está pré-configurado para entender 620 00:34:39,000 --> 00:34:42,000 que imediatamente me pede um nome de usuário e senha. 621 00:34:42,000 --> 00:34:46,000 >> Como de costume, eu vou digitar jharvard e carmesim, 622 00:34:46,000 --> 00:34:48,000 mas percebe que é a conta de administrador no computador. 623 00:34:48,000 --> 00:34:53,000 É apenas uma coincidência que há também um jharvard registrado para CS50 Finanças. 624 00:34:53,000 --> 00:34:56,000 Jharvard, carmesim, enter me dá a interface de usuário que vimos 625 00:34:56,000 --> 00:34:59,000 um vislumbre de um momento atrás, e é um pouco esmagadora na primeira, 626 00:34:59,000 --> 00:35:02,000 mas a certeza, você nunca vai ter que clicar a maioria dos links nesta ferramenta. 627 00:35:02,000 --> 00:35:05,000 Você vai acabar usando um pequeno subconjunto que são super úteis, 628 00:35:05,000 --> 00:35:08,000 o primeiro dos quais é bases de dados aqui. 629 00:35:08,000 --> 00:35:11,000 Se eu subir aos bancos de dados, observe que estou solicitado a criar um banco de dados. 630 00:35:11,000 --> 00:35:14,000 Este é como criar um novo arquivo do Excel, de forma eficaz. 631 00:35:14,000 --> 00:35:18,000 Eu estou indo para ir em frente e chamar esta palestra, e eu só vou ignorar o campo lá, agrupamento. 632 00:35:18,000 --> 00:35:20,000 Isto tem a ver com a representação dos dados no mesmo, 633 00:35:20,000 --> 00:35:24,000 e eu vou clique em criar e, agora, perceber como eu deixar de ir criar 634 00:35:24,000 --> 00:35:27,000 no lado esquerdo onde diz nenhum banco de dados 635 00:35:27,000 --> 00:35:30,000 Eu deveria ver em breve o banco de dados de aula. 636 00:35:30,000 --> 00:35:32,000 >> Se eu agora clique no lado esquerdo, o banco de dados de palestra, 637 00:35:32,000 --> 00:35:34,000 percebe meus guias mudar um pouco. 638 00:35:34,000 --> 00:35:38,000 Eu tenho estrutura, importação SQL, exportação e algumas outras coisas. 639 00:35:38,000 --> 00:35:40,000 A estrutura é praticamente em branco. 640 00:35:40,000 --> 00:35:43,000 Sem tabelas encontradas no banco de dados, como se diz aqui, 641 00:35:43,000 --> 00:35:47,000 então vamos criar uma tabela, e vamos em frente e criar uma tabela 642 00:35:47,000 --> 00:35:53,000 Como os alunos, e quantas colunas queremos? 643 00:35:53,000 --> 00:35:55,000 Vamos manter isso simples, e vamos gravar para cada estudante 644 00:35:55,000 --> 00:35:58,000 um número de identificação, um nome e um endereço de e-mail. 645 00:35:58,000 --> 00:36:02,000 >> Vamos mantê-lo simples assim, então 3 colunas, vai. 646 00:36:02,000 --> 00:36:05,000 A forma que você vê aqui é agora um pouco confuso e esmagadora, 647 00:36:05,000 --> 00:36:08,000 mas temos que passar por isso linha por linha, por isso muito rapidamente vamos dar 648 00:36:08,000 --> 00:36:14,000 a primeira coluna neste banco de dados um nome de identificação para o identificador único. 649 00:36:14,000 --> 00:36:17,000 Vai ser um inteiro. Eu posso realmente ignorar comprimento e valores. 650 00:36:17,000 --> 00:36:21,000 Um int vai ser de 32 bits, não importa o que você digita lá, então vamos deixá-lo em branco. 651 00:36:21,000 --> 00:36:24,000 Valor padrão, eu poderia fazê-lo nulo, conforme definido. 652 00:36:24,000 --> 00:36:27,000 Eu vou deixar isso quieto. Não vamos nos preocupar sobre os valores padrão. 653 00:36:27,000 --> 00:36:29,000 Vamos deslocar até aqui para a direita, atributos. 654 00:36:29,000 --> 00:36:31,000 Isto é interessante. 655 00:36:31,000 --> 00:36:33,000 Vamos em frente e um pouco arbitrariamente dizer que as identificações devem ser assinados. 656 00:36:33,000 --> 00:36:35,000 Não vamos perder todos os números negativos. 657 00:36:35,000 --> 00:36:37,000 >> Vamos 0-4000000000, mais ou menos, 658 00:36:37,000 --> 00:36:40,000 e então não vamos tocar em qualquer um destes campos apenas ainda lá, 659 00:36:40,000 --> 00:36:43,000 mas deixe-me então digitar o nome aqui, 660 00:36:43,000 --> 00:36:46,000 e depois o outro era e-mail, de modo que o problema é e-mail 661 00:36:46,000 --> 00:36:50,000 e nome, obviamente, não inteiros, então vamos mudar estes para um campo diferente. 662 00:36:50,000 --> 00:36:53,000 Acontece varchar, comprimento variável char, 663 00:36:53,000 --> 00:36:56,000 é como uma corda em um banco de dados SQL 664 00:36:56,000 --> 00:36:59,000 mas um comprimento variável, e você realmente tem que dizer-lhe antecipadamente o 665 00:36:59,000 --> 00:37:02,000 comprimento máximo da string, então eu vou um pouco arbitrariamente 666 00:37:02,000 --> 00:37:05,000 por convenção tipo 255 caracteres. 667 00:37:05,000 --> 00:37:08,000 Eu poderia perfeitamente dizer 32. Eu poderia dizer mil. 668 00:37:08,000 --> 00:37:11,000 Você tipo de necessidade de decidir por si próprio com base em suas características demográficas o que é 669 00:37:11,000 --> 00:37:14,000 o nome da mais longa aluno e ir com esse número ou um pouco maior, 670 00:37:14,000 --> 00:37:17,000 mas o que é agradável sobre um varchar é que não vai para o lixo 671 00:37:17,000 --> 00:37:19,000 255 bytes em nome de cada aluno. 672 00:37:19,000 --> 00:37:23,000 Se é DAVID não vai usar um todo 255 bytes, 673 00:37:23,000 --> 00:37:26,000 mas isso é um limite superior, então eu vou com 255 apenas por convenção, 674 00:37:26,000 --> 00:37:30,000 mas podemos debater que ser algum valor menor, e para o endereço de e-mail 675 00:37:30,000 --> 00:37:34,000 apenas a ser coerente 255, mas, novamente, nós poderíamos ter o mesmo debate. 676 00:37:34,000 --> 00:37:36,000 Mas eu vou fazer uma outra coisa aqui no lado direito. 677 00:37:36,000 --> 00:37:40,000 >> O que é poderosa sobre um banco de dados é que ele pode fazer um monte de trabalho pesado 678 00:37:40,000 --> 00:37:42,000 ou complexo trabalho para você. 679 00:37:42,000 --> 00:37:46,000 Em particular, eu realmente não me importo com o que os números do meu aluno de identificação são. 680 00:37:46,000 --> 00:37:49,000 É só para ser um identificador único em uma base de dados 681 00:37:49,000 --> 00:37:52,000 então eu tenho uma representação sucinta de 32 bits do que o aluno 682 00:37:52,000 --> 00:37:55,000 para que eu tenha alguma forma de identificar unicamente a eles 683 00:37:55,000 --> 00:37:58,000 para que não haja dois Davids, por exemplo, em uma classe. 684 00:37:58,000 --> 00:38:01,000 Na verdade, eu estou indo para esta caixa AI, auto incremento, 685 00:38:01,000 --> 00:38:04,000 de modo que o banco de dados MySQL, descobre 686 00:38:04,000 --> 00:38:08,000 o ID cada estudante recém-inserido é que vai ser. 687 00:38:08,000 --> 00:38:11,000 Eu nem sequer tem que se preocupar com isso no meu código, 688 00:38:11,000 --> 00:38:13,000 e eu também vou escolher algo no menu de índice. 689 00:38:13,000 --> 00:38:17,000 O índice cair para baixo aqui tem primário, único, 690 00:38:17,000 --> 00:38:19,000 índice e texto completo. 691 00:38:19,000 --> 00:38:21,000 Você pode adivinhar o que talvez algumas dessas coisas são, 692 00:38:21,000 --> 00:38:24,000 mas acontece que em bancos de dados relacionais 693 00:38:24,000 --> 00:38:28,000 você o programador ou o administrador de banco de chegar ao preventivamente 694 00:38:28,000 --> 00:38:32,000 dar dicas para o banco de dados, como o que os campos 695 00:38:32,000 --> 00:38:34,000 em uma tabela são um pouco especial. 696 00:38:34,000 --> 00:38:37,000 >> Por exemplo, neste caso, eu vou dizer que ID 697 00:38:37,000 --> 00:38:42,000 vai ser um índice primário, também conhecido como uma chave primária. 698 00:38:42,000 --> 00:38:44,000 O que isto significa, por definição, é que doravante ID 699 00:38:44,000 --> 00:38:48,000 irá identificar os alunos nesta tabela. 700 00:38:48,000 --> 00:38:53,000 Nenhum estudante vai ter a mesma identificação, porque eu estou impor essa restrição ou esse índice. 701 00:38:53,000 --> 00:38:55,000 Além disso, o que é que isto vai fazer por mim é que vai dizer 702 00:38:55,000 --> 00:38:58,000 MySQL ID que é especial. 703 00:38:58,000 --> 00:39:03,000 Eu me preocupo particularmente sobre ID, então vá em frente e fazer mágica sua estrutura de dados da fantasia, 704 00:39:03,000 --> 00:39:05,000 construir algum tipo de árvore. 705 00:39:05,000 --> 00:39:08,000 Normalmente é algo chamado de árvore-B, que não olhou para semanas atrás, 706 00:39:08,000 --> 00:39:11,000 mas é outra estrutura de dados como similar em espírito às árvores binárias 707 00:39:11,000 --> 00:39:15,000 e tenta que nós olhamos, mas vai dizer 708 00:39:15,000 --> 00:39:18,000 ao banco de dados neste campo é tão importante que eu provavelmente 709 00:39:18,000 --> 00:39:22,000 quero ser capaz de pesquisar sobre ele, vá em frente e construir alguma fantasia 710 00:39:22,000 --> 00:39:25,000 estrutura de dados na memória para acelerar pesquisas para que idealmente 711 00:39:25,000 --> 00:39:28,000 eles são de tempo constante, ou pelo menos tão próximo quanto possível de que 712 00:39:28,000 --> 00:39:32,000 de modo que ele não transformar-se em busca linear, o qual não será 713 00:39:32,000 --> 00:39:34,000 o mais alto desempenho abordagem. 714 00:39:34,000 --> 00:39:37,000 Por outro lado, endereço de e-mail pode ter sido uma chave primária. 715 00:39:37,000 --> 00:39:41,000 >> Em teoria, endereço de e-mail de todos é único, a menos que você está compartilhando alguma conta, 716 00:39:41,000 --> 00:39:45,000 mas não é geralmente bom para usar algo como uma corda 717 00:39:45,000 --> 00:39:49,000 como uma chave primária, porque se o seu propósito na vida é identificar 718 00:39:49,000 --> 00:39:55,000 linhas da tabela não há nenhuma razão para usar no máximo 255 bytes 719 00:39:55,000 --> 00:39:58,000 para identificar alguém, se você pode ir longe com apenas 4 bytes 720 00:39:58,000 --> 00:40:00,000 ou um int de 32 bits. 721 00:40:00,000 --> 00:40:03,000 Em geral, uma chave primária deve ser curto e sucinto 722 00:40:03,000 --> 00:40:07,000 e, idealmente, algo como um inteiro ou um int grande, que passa a ser de 64 bits. 723 00:40:07,000 --> 00:40:11,000 Mas um endereço de e-mail deve ser único, e uma das características de um banco de dados muito 724 00:40:11,000 --> 00:40:14,000 é impor exclusividade para mim. 725 00:40:14,000 --> 00:40:18,000 Ao selecionar único aqui perto de e-mail, mesmo que enviar e-mail próprio 726 00:40:18,000 --> 00:40:21,000 é deslocado para fora da tela, eu estou dizendo para o banco de dados 727 00:40:21,000 --> 00:40:23,000 não confie em mim. 728 00:40:23,000 --> 00:40:26,000 Não deixe-me inserir no banco de dados 729 00:40:26,000 --> 00:40:29,000 o mesmo endereço duas vezes, mesmo que eu sou um idiota e não estou 730 00:40:29,000 --> 00:40:32,000 muito boa com meus ifs e IFS pessoa e de código PHP real 731 00:40:32,000 --> 00:40:37,000 e eu acidentalmente deixar o usuário registrar com um endereço de e-mail existente 732 00:40:37,000 --> 00:40:40,000 o banco de dados é mais um nível de defesa para correção 733 00:40:40,000 --> 00:40:44,000 para garantir que esse endereço de e-mail duplicado não acabar na tabela. 734 00:40:44,000 --> 00:40:49,000 >> Agora, pelo contrário, para o nome que você provavelmente não quer fazer esse único 735 00:40:49,000 --> 00:40:51,000 porque, então, nunca poderia haver dois Davids ou dois Smiths Mike, por exemplo, 736 00:40:51,000 --> 00:40:55,000 em seu banco de dados, de modo que uma só teremos que sair sozinha. 737 00:40:55,000 --> 00:40:58,000 Eu estou indo para ir em frente e clique em Salvar na parte inferior direita, 738 00:40:58,000 --> 00:41:02,000 e tudo parece bom, mas repare-se aqui 739 00:41:02,000 --> 00:41:04,000 esta é uma peça que, por enquanto, não vai gastar muito tempo em 740 00:41:04,000 --> 00:41:07,000 porque a sintaxe é um pouco complexa, e não temos para criar tabelas 741 00:41:07,000 --> 00:41:10,000 tudo o que, muitas vezes, mas o SQL em si é uma linguagem, 742 00:41:10,000 --> 00:41:13,000 a sintaxe para que é aqui que eu destacou. 743 00:41:13,000 --> 00:41:18,000 O phpMyAdmin realmente faz é que ele cria uma interface gráfica baseada na web para você 744 00:41:18,000 --> 00:41:23,000 com o qual você pode economizar tempo e não ter que digitar manualmente fora 745 00:41:23,000 --> 00:41:26,000 uma consulta SQL bastante longo como esse. 746 00:41:26,000 --> 00:41:29,000 >> Em outras palavras, se você quiser criar manualmente esta tabela, 747 00:41:29,000 --> 00:41:32,000 quer no que phpMyAdmin preto e branco rápida ou até mesmo em 748 00:41:32,000 --> 00:41:35,000 usando este outro guia, este guia SQL onde você pode digitar em qualquer SQL consultas 749 00:41:35,000 --> 00:41:38,000 você quer, francamente, isso teria me levado um minuto 750 00:41:38,000 --> 00:41:41,000 para realmente lembrar a sintaxe inteiro, e até então eu provavelmente teria 751 00:41:41,000 --> 00:41:45,000 fez alguns erros de digitação, por isso esta ferramenta é útil para coisas como essa, e é também instrutivo. 752 00:41:45,000 --> 00:41:49,000 Você pode começar a inferir que a sintaxe é 753 00:41:49,000 --> 00:41:52,000 apenas pela cor agradável de codificação que está adicionando phpMyAdmin 754 00:41:52,000 --> 00:41:54,000 para nossa conveniência visual. 755 00:41:54,000 --> 00:41:56,000 Mas agora vamos fazer isso em seu lugar. 756 00:41:56,000 --> 00:42:00,000 Deixe-me ir para a guia Inserir no topo, e deixe-me ir em frente e inserir, por exemplo, 757 00:42:00,000 --> 00:42:04,000 um ID vamos dizer, na verdade eu não me importo. 758 00:42:04,000 --> 00:42:07,000 Vai auto incremento. Vou deixar o negócio de banco de dados com isso. 759 00:42:07,000 --> 00:42:11,000 Mas será Davi, e meu e-mail deve ser malan@harvard.edu. 760 00:42:11,000 --> 00:42:16,000 >> Vamos em frente aqui e colocar em Mike Smith como um outro. 761 00:42:16,000 --> 00:42:18,000 Eu vou me dar um último nome, bem como, 762 00:42:18,000 --> 00:42:22,000 e nós vamos ter ele seja smith@example.com, 763 00:42:22,000 --> 00:42:24,000 e onde eu vou seguir? 764 00:42:24,000 --> 00:42:27,000 Bem, parece que vai é o botão para clicar, e pronto. 765 00:42:27,000 --> 00:42:30,000 Observe no top 2 linhas inseridas. 766 00:42:30,000 --> 00:42:32,000 Esta é a consulta SQL real. 767 00:42:32,000 --> 00:42:36,000 Essa é a ferramenta phpMyAdmin executado por mim, 768 00:42:36,000 --> 00:42:40,000 mas o resultado final, o aviso prévio, se eu agora vá para a aba de navegação, 769 00:42:40,000 --> 00:42:43,000 é ver duas linhas nesta tabela, lembra muito esteticamente 770 00:42:43,000 --> 00:42:46,000 da tabela vimos anteriormente para nossos usuários de pset 7, 771 00:42:46,000 --> 00:42:51,000 um dos quais é David Malan, um dos quais agora é Mike Smith. 772 00:42:51,000 --> 00:42:54,000 Mas só para ficar claro, eu não preciso usar o phpMyAdmin, 773 00:42:54,000 --> 00:42:56,000 e, de fato, você vai em breve ser escrever código para pset 7 774 00:42:56,000 --> 00:43:01,000 que automatiza o processo de adição de linhas, excluir linhas, atualizando linhas e afins, 775 00:43:01,000 --> 00:43:04,000 então deixe-me em vez de ir para a aba SQL-se aqui 776 00:43:04,000 --> 00:43:14,000 e digite SELECT * FROM alunos onde 777 00:43:14,000 --> 00:43:18,000 e-mail = "malan@harvard.edu". 778 00:43:18,000 --> 00:43:21,000 >> Em outras palavras suponho que agora você tem 779 00:43:21,000 --> 00:43:26,000 alguma forma HTML, e os tipos de usuário em seu endereço de e-mail, entre outras áreas, 780 00:43:26,000 --> 00:43:29,000 eo objetivo agora é em PHP no código de back-end 781 00:43:29,000 --> 00:43:31,000 para realmente olhar para outros detalhes do usuário. 782 00:43:31,000 --> 00:43:34,000 Qual é o seu nome completo? Qual é o seu número de ID? 783 00:43:34,000 --> 00:43:37,000 Você pode escrever uma consulta SQL como esta, selecione * de estudantes 784 00:43:37,000 --> 00:43:40,000 onde e-mail = "malan@harvard.edu". 785 00:43:40,000 --> 00:43:46,000 E se eu clique em ir, note que eu, e certamente eu, voltar apenas uma linha. 786 00:43:46,000 --> 00:43:50,000 Mike é omitido este conjunto de resultados, como a coleção de linhas 787 00:43:50,000 --> 00:43:53,000 geralmente é chamado, porque ele não tem o mesmo endereço de email que eu. 788 00:43:53,000 --> 00:43:57,000 >> Agora, novamente, aqui para pset 7 você vai usar o phpMyAdmin como uma ferramenta administrativa 789 00:43:57,000 --> 00:44:00,000 e uma ferramenta pedagógica para aprender o caminho 790 00:44:00,000 --> 00:44:03,000 em todo o mundo de SQL, mas no final do dia, 791 00:44:03,000 --> 00:44:08,000 você vai estar escrevendo essas consultas dentro do código PHP atual, 792 00:44:08,000 --> 00:44:11,000 e fique atento no passo a passo Zamyla, em particular 793 00:44:11,000 --> 00:44:14,000 onde você poderá obter uma turnê do código de distribuição para este conjunto de problemas 794 00:44:14,000 --> 00:44:18,000 onde demos-lhe não só a estética para a página de login 795 00:44:18,000 --> 00:44:21,000 eo logotipo agradável sexy que diz CS50 Finanças, mas nós também lhe deu 796 00:44:21,000 --> 00:44:24,000 um monte de funções que vão tornar sua vida um pouco mais fácil. 797 00:44:24,000 --> 00:44:27,000 Nós também escreveu parte do pset para você, 798 00:44:27,000 --> 00:44:32,000 a parte de login em particular, para dar-lhe um sentido de um projeto de representante 799 00:44:32,000 --> 00:44:36,000 que realmente usa um controlador, por exemplo index.php, 800 00:44:36,000 --> 00:44:40,000 login.php e similares, e então você verá o pset também tem um diretório de templates 801 00:44:40,000 --> 00:44:43,000 que tem todos os seus pontos de vista, todos os estética. 802 00:44:43,000 --> 00:44:46,000 E assim, o fluxo de trabalho global em pset 7 vai ser a de que 803 00:44:46,000 --> 00:44:49,000 seus usuários visitam um controlador através de uma URL em um navegador. 804 00:44:49,000 --> 00:44:53,000 Esse controlador contém código PHP que você escreveu, e dentro de seu código PHP 805 00:44:53,000 --> 00:44:57,000 pode ser algumas linhas de SQL aninhada entre aspas duplas 806 00:44:57,000 --> 00:45:00,000 e passado para uma função que escreveu consulta chamada 807 00:45:00,000 --> 00:45:03,000 que irá ajudá-lo a falar com o banco de dados sem usar algo como 808 00:45:03,000 --> 00:45:05,000 uma ferramenta administrativa como phpMyAdmin. 809 00:45:05,000 --> 00:45:08,000 >> Você vai ser capaz de escrever instruções SQL em código PHP 810 00:45:08,000 --> 00:45:11,000 e receber de volta uma matriz PHP do conjunto de resultados, 811 00:45:11,000 --> 00:45:14,000 das linhas que corresponde de fato a essa consulta. 812 00:45:14,000 --> 00:45:18,000 E da mesma forma que você vai ser capaz de fazer inserções ou exclusões 813 00:45:18,000 --> 00:45:22,000 ou atualizações ou similares, a sintaxe para o qual é bastante similar, 814 00:45:22,000 --> 00:45:25,000 e você vai ver a partir de algumas referências on-line, a partir do código de distribuição 815 00:45:25,000 --> 00:45:29,000 e do pset embalar-se exatamente como ir sobre fazer isso. 816 00:45:29,000 --> 00:45:33,000 Perceber finalmente que estamos realmente apenas arranhando a superfície do SQL 817 00:45:33,000 --> 00:45:36,000 e do MySQL, mas o poder do que realmente é que ele libera 818 00:45:36,000 --> 00:45:40,000 a concentrar-se sobre os problemas que deseja resolver, os casos de uso que você deseja implementar 819 00:45:40,000 --> 00:45:43,000 sem ter de preocupar-se tão grande, pelo menos no início, 820 00:45:43,000 --> 00:45:47,000 sobre onde e como armazenar e procurar o seu banco de dados, 821 00:45:47,000 --> 00:45:50,000 e esta é literalmente onde o Facebook em si tem o seu início 822 00:45:50,000 --> 00:45:53,000 usando o MySQL e em seguida, usando mais servidores MySQL e, em seguida, mais servidores MySQL 823 00:45:53,000 --> 00:45:57,000 antes de tempo, até que, em seguida, teve que realmente começar a pensar seriamente em como 824 00:45:57,000 --> 00:46:00,000 armazenamento de dados, como armazenar as coisas ainda mais eficiente, 825 00:46:00,000 --> 00:46:04,000 por isso mesmo que vamos ter concedido o fato de que os índices e restrições exclusivas 826 00:46:04,000 --> 00:46:08,000 e assim por diante apenas trabalhar há uma conversa muito interessante 827 00:46:08,000 --> 00:46:12,000 que tudo isso pode, eventualmente, levar a, assim que perceber que estamos apenas arranhando a superfície 828 00:46:12,000 --> 00:46:17,000 do que poderia, eventualmente, para você ou seus projetos tornam-se um pouco de dados grandes. 829 00:46:17,000 --> 00:46:22,000 >> Com isso dito, vamos terminar aqui, e vamos ver na próxima semana. 830 00:46:28,000 --> 00:46:30,000 [CS50.TV]