>> RJ AQUINO: Vamos apenas começar.
Portanto, este é um quiz.
Aqui estão algumas informações de alto nível.
A página Sobre para o teste é neste URL, já não CS50.net, embora isso
continuará a funcionar.
É CS50.harvard.edu/quizzes/2013/1.
É a grande página Sobre, dizendo-lhe onde e quando, ou seja, próxima quarta-feira
em um monte de quartos.
E até a próxima quarta-feira, eu significa daqui a dois dias.
Toda esta informação está lá.
Mas é cumulativo.
>> Então, tudo a partir da primeira metade do ano é potencialmente no questionário,
porque você não pode realmente fazer avançada coisas em C sem se as condições e
loops e semelhantes.
Mas haverá uma ênfase no material coberto desde quiz 0,
começando com estruturas e Arquivo I / O. É tipicamente mais
desafiador do que quiz 0.
A pontuação média é tipicamente menor.
Estude bastante.
>> Enquanto você está estudando, não se esqueça de usar CS50/discuss para postar suas perguntas
e ler perguntas de outras pessoas.
Então, se você não tiver alguma dúvida, faça o login e leia
perguntas dos seus amigos.
Eles provavelmente estão boas perguntas.
E responder aos questionários de prática.
Fomos dando quizzes para sete ou oito anos.
Eles estão todos online.
Questões futuras são semelhantes para velhas questões.
É assim que fazê-los.
>> O teste ainda não existe.
Nenhum de nós tê-lo visto.
Mas ele vai olhar como quizzes anteriores.
Para esta sessão de avaliação, esta não é uma lista exaustiva de tópicos.
Você não pode apenas assistir a este e, em seguida, ser perfeitamente pronto para o quiz.
De outro modo, não seria que muito de um quiz.
E isso também não é necessariamente tudo o que você precisa saber sobre qualquer
determinado tópico.
Era para expô-lo às coisas cobrimos, lembrá-lo que nós
coberto, e a maneira pela que cobria.
Mas você vai ter que ir mais longe e mais profunda quando você estuda a dupla verificação
que você sabe tudo sobre um determinado tema e que você tenha preenchido
todos os cantos que estavam coberto de aula.
>> As notas do quiz dizer-lhe para ir para o notas escriba, assistir vídeos de aula.
Essa é uma boa maneira de ter certeza que você tem cobriu todas as suas bases.
Então, para começar, quando eu fiz isso slides, eu tentei colocar onde eu encontrei
informações.
Assim, para arquivo I / O, por exemplo, Semana 7, Segunda-feira da palestra, eo postou
Seção 6 e Conjunto de Problemas todos têm informações sobre File I / O. Eu fiz
isso para cada tópico.
Portanto, aqueles slides de título pode ser útil para você.
>> Portanto, temos aqui File I / O. Lembre-se, em Conjunto de Problemas 5, usamos fopen, fclose,
fwrite, fread e fseek.
Tendo recuperado 30ish JPEGs e ter redimensionado e mexeu com
bitmaps, você deve estar bastante familiarizados com estas funções
e como eles funcionam.
Se você não está familiarizado, definitivamente revê-los.
E certifique-se de compreender o que os diferentes argumentos são,
quando eles são usados.
>> Mas os erros relacionadas a arquivos comuns você pode ser perguntado sobre -
bem, se você esqueceu de verificar se fopen realmente trabalhou antes de ir para
modificar um arquivo.
Isso poderia ser ruim.
Se você esqueceu de um arquivo fclose que você fopened, que é semelhante ao
um vazamento de memória.
Isso é muito ruim.
E esquecendo-se de verificar se você tem chegou ao final do arquivo antes de você
começar a escrever para ele.
>> Então, se você diz, hey, eu estou em o fim do ficheiro.
Dá-me mais 5 bytes.
Bem, isso provavelmente não vai funciona do jeito que você espera.
Isso é realmente dele para File I / O, porque fizemos tanto dele
com o conjunto de problemas.
Então, se você entendeu o que estava acontecendo Problema em Set 5, lembre-se das bitmats
e os JPEGs, então você está provavelmente todos definido para File I / O. Se isso é um pouco
difusa, definitivamente rever esse problema definir e material associado.
>> As estruturas foram o tema que estavam no linha entre 0 e quiz quiz 1.
Não muito fazer o corte para Quiz 0.
Então, eles vão ser definitivamente na Teste 1, Semana 7, segunda-feira.
O que é um struct?
Aqui nós mostramos uma estrutura.
É como um novo tipo.
É como um recipiente para vários campos.
>> Neste caso, temos declarado um struct aluno que tem dois campos -
uma seqüência que estamos chamando o nome e um int que estamos chamando idade.
Então, quando eu passar em torno de estudantes ou eu modificar os estudantes, eu vou ser capaz de
acessar seu nome e sua idade.
Vamos dar uma olhada em algum código para isso.
Aqui vemos que eu tenho declarado um estudante s, assim como
Declaro qualquer variável -
int x, int y, et cetera.
>> Aqui está o aluno s.
Ele começa com nada em seus campos.
Então, vamos defini-las.
Você define campos de uma estrutura com ponto.
Então, eu disse aqui que s.name = RJ.
E S.age = 21.
Você também pode atualizar campos da mesma maneira que você atualize
o valor de uma variável.
Então, eu quero mudar meu nome de RJ com sem períodos para RJ escrito o
maneira correta.
Seria s.name = RJ, a mesma como dissemos originalmente.
E então você pode acessá-los.
>> Então, nós defini-las.
Nós atualizamos eles.
Você também pode acessá-los no mesmo caminho.
Então, aqui, eu estou imprimindo RJ É de 21 anos de idade.
E eu estou acessando esses valores com s.name e S.age.
De modo que está acessando estruturas com a notação de ponto.
Yep, questionar?
>> AUDIÊNCIA: Existe uma razão para o slide anterior que você não colocou
aluno na linha superior, como typedef aluno struct e depois
aluno no final?
>> RJ AQUINO: Então, a pergunta era, em esse slide, nós tipicamente vistos
typedef struct nó e, em seguida, o campos da struct e
em seguida, o nó de palavra.
E como é que aqui eu não disse, typedef estudante estrutura e, em seguida, o
campos da struct e estudante?
A razão é que eu não preciso acessá-lo dentro da estrutura.
Então, não há problema em deixá-lo sem um nome.
Posso deixá-lo como um struct anônimo.
>> A razão por que fazê-lo por listas ligadas e coisas é porque dentro de você precisar
fazer referência a uma estrela nós struct.
Assim, a estrutura tem que ter um nome, para que você possa acessá-lo mais tarde.
É um detalhe menor.
Mas você costuma ver typedef struct chaves, se você não precisa
o nome e typedef struct algum nome seguido por chaves se quiser
Preciso do nome.
Então essa é uma boa pergunta.
>> E nesse ponto, que tendem a modificar estruturas e passar em torno de estruturas de
referência, não por valor.
Então vamos passar em torno de ponteiros para estruturas em vez de passar ao redor do
instrui si.
Então você está com muita freqüência vai ser utilizando, neste caso, o estudante ou *
struct node * ou nó * vez a estudantes ou nós.
Então, aqui, eu disse, OK, a variável ptr vai ser o endereço de s.
Vai ser o ponteiro para o aluno RJ
>> Assim, podemos chegar a esses campos o mesmo que nós temos qualquer coisa.
Primeiro, ID referenciar o ponteiro para obter a estrutura.
Isso é * ptr e depois um ponto e, em seguida, a idade.
Assim, para acessar o campo, e eu tenho atualizado que agora a 22, porque, vamos
por exemplo, que era meu aniversário.
Há uma sintaxe de atalho utilizando a seta aqui.
Idade seta Então ptr é apenas o mesmo que * ptr.age.
Agora, isso é algo que você vai ter para memorizar e lembrar.
>> Você usou muito em pset6, o pset ortográfico.
Mas isso é realmente o que está acontecendo por baixo do capô.
É dereferencing o ponteiro e depois acessá-lo.
Pergunta?
>> AUDIÊNCIA: [inaudível].
>> RJ AQUINO: Então por que estamos usando ponteiros como estruturas em vez de o
instrui a si mesmos?
A razão seria se você está passando uma estrutura para uma função, você provavelmente
quer passar em torno de apenas 4 ou menos bytes que representam o cursor, como o
oposição à 30 ou potencialmente 40 bytes, que são a estrutura.
Então passando algo a uma função é mais fácil quando a coisa
é menor em curto.
Pergunta?
>> AUDIÊNCIA: Você pode ter mencionado isso no início, mas existem
outros slides para cima no [inaudível]?
>> RJ AQUINO: Esses slides será depois da sessão de revisão.
Nós vamos publicá-las no site.
Movendo assim por diante e se movendo ligeiramente mais rápido, vamos falar sobre os dados
estruturas.
Há um monte.
Cobrimos um monte deles.
Veja o que você deve entender sobre a estrutura de dados.
>> Você realmente deve entender em um alto nível que cada estrutura é.
Você pode explicar em Inglês para o seu amigo que não tomou como CS50
estamos organizando os nossos dados e por que tinha estar usando algo assim?
Isso é coisa de uma.
Coisa dois, entender a implementação.
Assim, entender como usar essas coisas em C. E nós vamos estar passando por isso.
>> E, em seguida, coisa de três seria conhecer a tempos de execução e as limitações do
várias estruturas que você está usando.
Assim, entendo por que você usaria um de hash de tabela em vez de uma matriz.
Entenda como rápido, em média, acessando uma tabela hash é.
Entenda o que as operações são rápidas em lista ligada, mas lento em matrizes e
vice-versa.
Então, para entender isso, você vai ter que entender Big-O notação apenas para saber
como falar sobre estes os tipos de coisas.
E vamos falar sobre isso.
>> Então a primeira coisa, listas ligadas.
Aqui está uma foto de alto nível de uma lista ligada.
Mostramos isso na sala de aula.
Nós normalmente temos 10 pessoas de pé no palco.
Mas nós temos uma série de nós, onde cada nó tem algum valor e um ponteiro
para seu próximo valor.
Então, para começar a partir de um nó para o outro, você basta dizer, me dê o próximo nó.
Você tem esse nó.
Dê-me o próximo nó.
Você tem esse nó.
Dê-me o nó seguinte e assim por diante até que não haja nenhum nó esquerdo.
>> Assim, continuam a falar sobre -lo em um nível elevado.
É muito fácil de inserir coisas em uma lista encadeada.
Se você não se importa com a ordem, você pode apenas deixá-lo cair
logo no início.
É tempo constante.
Mas é difícil encontrar um valor.
Se você está tentando fazer, é sete na minha lista?
Você tem que passar por cada valor único.
É este o sete?
Uma e outra vez.
E isso é O (n).
Assim, ao estudar para o quiz, compare isso com matrizes.
>> Tudo bem?
As luzes se fraca.
OK.
Quando é que uma lista ligada melhor?
Quando é uma matriz melhor?
Então, vamos olhar para alguns códigos.
Aqui é um nó potencial.
É um struct.
Tem um int n, que será o nosso valor.
E tem um nó struct * seguinte, que é nossa ponteiro para o próximo nó.
Então, aqui, podemos ver que aconteceu ter colocado um int em nosso nó.
Mas se esta fosse uma lista ligada de carvão estrelas ou uma lista encadeada de carros alegóricos, que
totalmente poderia fazer isso também.
>> Lembre-se na pset6, você provavelmente teve um lista ligada de estrelas de char ou apenas
matrizes de caracteres estáticos.
Vamos dar uma olhada aqui em uma operação.
Por isso, queremos inserir uma nova n em nossa lista encadeada.
Começamos com um ponteiro cabeça que é um ponteiro para esse nó que tem o
valor de n e um lado de um ponteiro que aponta para esse nó é um valor de
n e um ao lado do nulo, porque é o último nó.
Assim, no interesse de tempo, eu vou colocar todo o código na tela.
E nós vamos atravessá-la algumas linhas de cada vez.
>> Então, aqui está o código.
Espero que seja legível.
A primeira coisa que fazemos é nós malloc um novo nó.
Por isso, faz um apontador para um novo nó não tem nada muito definido
em cima dele ainda.
Nós certifique-se de que o novo nó não é nulo.
Caso contrário, temos que desistir.
Assim, tendo verificado que, agora definir os valores no nó.
Então nós colocamos o novo n em nosso campo n.
E nós definir o próximo ponteiro para apontar para a cabeça original, de modo que podemos
agora ter inserido este nó em nossa lista.
>> Finalmente, temos o ponto diretor global ao nosso novo nó, de modo que, se fôssemos
começar a cabeça, nós estaríamos neste novo primeiro nó em vez de
o antigo primeiro nó.
E quando sai esta função, o novo nó variável não existir mais,
pois foi local para a função.
Então este é o estado do mundo.
Nosso diretor global aponta para o nosso novo primeiro nó, o que aponta para o nosso
primeiro nó original, que pontos para o nó depois disso.
>> Essa foi a inserção.
Espero que tenha sido relativamente simples de seguir.
Em caso de dúvida, tirar uma foto.
Então, eu acho que falar sobre listas ligadas e olhando
código é muito não é útil.
Considerando a olhar para uma imagem de um ligado lista permite-me a pensar, oh, tão
Eu tenho esse nó aqui.
Mas se eu atualizar esse ponteiro, ele acaba desconectado.
E eu esqueci onde o nó passa.
E o código sai.
E você tem vários nós que estão desconectados.
E você não acabar com a lista que você deseja.
>> Então, se você desenhar a imagem e fazê-lo passo a passo, com sorte, você vai ver
a ordem correta das coisas em termos de atualizar os ponteiros para certificar-se de
que a lista vem junto.
Insert é relativamente simples.
A uma mais complicada seria inserção em uma lista ordenada.
A função mais complicado é apagar e encontrar, assim que olhar através de uma lista de
ver se algo está lá.
Talvez você fez isso em pset6 quando você tem em sua tabela hash e você disse,
bem, é a palavra maçã na minha lista ligada?
>> Então, você já pode ter feito isso.
Mas, definitivamente, refrescar sua memória e tentar localizar e reimplementar
reimplementar apagar para uma lista ligada.
Nota lateral Fun, também duplamente vinculada listas, onde você tem
ponteiros que apontam para a frente e para trás, de modo que você poderia ir para o
próximo nó e o nó anterior.
E havia uma pergunta sobre o do ano passado teste desse tipo, falando
sobre listas duplamente ligadas.
>> Agora, isso é uma estrutura que está relativamente familiarizados, porque a maioria
de vocês provavelmente usou em pset6.
Aqui está um que é um pouco menos familiar.
Como uma nota lateral, eu acho que é um Teste principalmente mais difícil do que quiz 0, porque
as coisas que você está fazendo, você não ter feito tanto.
Para colocar isso de outra forma, para Quiz 0, você tinha escrito um monte de C. E nós
perguntou-lhe sobre C.
>> Para Teste 1, vamos perguntar-lhe sobre PHP e JavaScript, o que você
não ter escrito tanto.
Vamos perguntar-lhe sobre C-código que você não tenha escrito tanto,
este material avançado C.
Então, definitivamente, a prática do que coisas falou em palestra que
não necessariamente fazer sobre o conjunto de problemas.
>> Falando nisso, você não escreveu uma pilha sobre um conjunto de problemas.
Mas foi na palestra.
Aqui está a imagem de alto nível pilhas que mostramos a cada ano.
É a pilha de bandejas em a sala de jantar Mather.
Em um nível alto, pilhas são um último in, first out estrutura de dados.
Isso significa que você está indo para colocar as coisas em -
1, 3, 7, 12, 14, 0 negativo.
A única coisa que eu não poderia ter disse - negativo 3, 0.
Você coloca todas essas coisas dentro
E o último que você colocou no é o primeiro um que vai sair.
>> Então você tem duas operações -
push e pop.
Todos os colocando em que eu era gesticulando como esta são empurrão.
E então quando eu chegar no grab algo ou chegar em cima para pegar
alguma coisa, que é pop.
Então, nós estamos indo para implementar pilhas.
E nós lhes mostrou em palestra utilização de arrays.
Mas você pode fazê-las usando listas ligadas.
Uma pilha é um conceitual de dados estrutura, não como um
uma aplicação específica.
>> Então, o que isso parece?
Seria algo mais ou menos como este.
Você teria um tamanho inteiro.
E você tem um conjunto de valores que estamos chamando bandejas, porque isso é
o que a imagem era para nós - int bandejas -
e mais um pouco a capacidade máxima.
Então, o que levaria Look Like?
Bem, se nós temos uma pilha s, em seguida, para empurrar algo sobre s, obteríamos
o tamanho de s.
E isso seria o próximo local aberto da nossa matriz.
Então, se temos três coisas em nossa pilha, em seguida, as bandejas 3 seria o próximo
local aberto, porque 0, 1, e 2 já está preenchido.
>> Então vamos colocar o valor em s.trays [s.size], o terceiro lugar.
E então nós incrementar s.size a dizer, hey, tivemos três coisas antes.
Agora, nós temos quatro.
Então da próxima vez você empurra, você está vai colocar algo em 4.
Ou da próxima vez que aparecer, você vai a olhar para 3 em vez de 4 ou o que seja.
E então nós vamos retornar true para digamos, hey, nós conseguimos.
Isso funcionou.
Como regra geral, se uma função que é deve retornar true ou
falsa sempre retorna true, você pode ter feito algo errado.
Então, isso funciona?
>> Bem, ele funciona bem para um, e 2 e 3, e 4, e cinco.
Mas digamos que eu chegar ao meu capacidade.
Eu, em seguida, correr para um problema, porque se o tamanho é a mesma como a capacidade, eu sou
agora a tentar colocar algo em um array onde eu não tenho espaço.
Então, uma pequena seleção para corrigir isso.
Se s.size == CAPACIDADE, retornar false.
Caso contrário, vá e faça o que nós fizemos.
Então o que mais poderíamos pedir cerca de pilhas?
O que mais você deve estudar?
O que mais você deve praticar?
>> Bem, a implementação de pop.
Nós já fizemos empurrão.
Eu vou corrigir isso.
A implementação não-matriz, onde você usa uma lista ligada, talvez.
A implementação não int.
Fizemos ints aqui.
Mas poderia ter sido carros alegóricos.
Eu poderia ter sido strings.
Poderia ter sido estrelas de caracteres.
Olhe para quizzes últimos para os tipos de perguntas que você pediu sobre pilhas.
>> Eu vou dizer que nós cobrimos pilhas em torno o mesmo que nós cobrimos eles em
ano passado.
Assim, as perguntas do questionário deveria ser uma boa indicação.
Avançando ainda mais rápido, as filas.
Eles são como pilhas.
Mas eles são first in, first out.
Se você é britânico, fila a palavra provavelmente fez muito sentido para você.
Caso contrário, você pode ter ouvido falar dele como uma linha.
Eles funcionam como a linha na loja da Apple.
A primeira pessoa a mostrar-se às 3:00 na parte da manhã é a primeira
pessoa a comprar o seu iPad.
>> Portanto, temos duas operações -
enfileiramento e dequeue.
Enqueue coloca alguém na linha.
Desenfileiramento puxa o primeiro pessoa fora da linha.
Mais uma vez, podemos implementar isto com uma matriz.
Então, qual é o que struct mostrou na palestra?
Foi um presente.
Mais uma vez, os números.
Mais uma vez, o tamanho ea essa coisa nova frente.
Porque é que existe uma coisa chamada frente?
É o índice do próximo elemento para retirar da fila.
É só manter internamente o controle de o primeiro cara a mostrar-se, de modo que nós
pode retirá-lo quando precisamos.
>> Definitivamente olhar para anotações de aula e tentar para implementar enfileiramento e dequeue
ao estudar para o quiz.
Coisas importantes para se pensar.
Envolvendo em torno se a frente mais a tamanho acaba maior do que a capacidade.
Mais uma vez, se a sua estrutura é completa, você vai ter um problema.
Hash tabelas que você já viu antes.
A maioria de vocês provavelmente implementado estes em pset6.
É uma estrutura que visa a O (1) inserção de tempo constante e S (1)
pesquisa de tempo constante.
>> Em CS50, implementamos este como um conjunto de listas ligadas.
O componente chave para uma tabela hash é a função hash.
Por isso, converte a sua entrada, vamos dizer, uma palavra de dicionário, em um número,
qual vai ser o nosso índice.
E nós vamos usar esse índice em nossa matriz.
Então, aqui está uma foto bonitinha de study.50.net.
Jogamos todas as palavras em nossa função hash.
E a função de hash nos diz onde colocar essas palavras.
>> Isso tudo é grande na terra onde só há uma palavra para cada slot.
Mas, como você se lembra de pset6, não são mais palavras do que slots.
Então o que acontece quando você obter uma colisão?
Em vez de armazenar um valor de, vamos dizer, tabela hash 3, você
armazenar uma lista ligada.
E assim, em vez de ter melão aqui, você teria uma lista ligada,
onde o primeiro nó é melão.
E o próximo nó é gato.
E o terceiro nó é colisão, vamos dizer, porque todas essas palavras começam
com C.
>> Assim, a maioria de vocês fez isso por pset6.
Se você não fez uma tabela hash em pset6 e você tentou algo parecido
uma trie, definitivamente rever tabelas hash.
Se você fez isso de pset6, definitivamente rever tabelas hash.
E se você fez isso de pset6 e isso não aconteceu trabalhar muito bem e você
tinha um monte de problemas com ele, definitivamente rever tabelas hash.
Assim, a lição é realmente definitivamente rever tabelas hash.
>> A grande minoria de que você tentou fora tenta sobre pset6.
Imagem de alto nível.
É algo como este, onde cada nó possui um conjunto de crianças, onde cada
criança corresponde a uma letra.
E cada nó também diz: hey, eu sou uma palavra.
Portanto, neste exemplo, a palavra Maxwell, se você seguir o M para o A para o
X-W-E-L-L e depois segui-lo mais uma vez.
E você tem este símbolo, delta, que que significam a dizer isso é uma palavra.
Então Maxwell é uma palavra.
Estes são deltas todo significante que as coisas são palavras e que
as coisas não são.
>> Assim, em pset6, os dados que armazenamos ao lado de qualquer um dos nossos nós foi "Eu sou um
palavra. "E a coisa legal sobre tentativas é demonstrar que a inserção e
lookup em O (comprimento de uma palavra).
Então, só para passar por Maxwell, é M-A-X-W-E-L-L. Assim, sete ou oito -
Eu não posso contar -
passos para chegar até o fim e verificar as coisas.
Implementação tão rápida aqui.
Rob passou por uma associada listar em seu pós-morte.
Portanto, verifique isso.
Desculpe.
Passou por uma trie em seu pós-morte.
Portanto, verifique isso.
>> Mas você tem basicamente cada nó tem 27 ponteiros para os próximos nós e um
Boolean estou eu uma palavra.
Confira postmortem de Rob por quanto isso realmente é implementado.
Nossa estrutura final, nossas árvores e árvores de busca binária.
Então, olhando para estes, estas foram cobertas mais recentemente, Semana 8, segunda-feira.
Uma árvore é semelhante a uma trie, exceto que você não necessariamente têm 27 nós em
cada ponto.
E você não tem esses dados a cada passo que significa se o -
o caminho não importa.
Considerando uma trie, o caminho de cima para inferior, Maxwell, foi importante para nós.
>> Mas cada nó tem múltipla crianças, talvez.
Nós temos um pouco mais de vocabulário.
A raiz da árvore está no topo.
E nós dizemos que a própria bottommost os nós que não têm
crianças são folhas.
Assim como uma trie, uma árvore é uma estrutura de nós.
Um tipo comum de árvore que vamos falar é uma árvore binária, onde
cada nó não tem filhos ou uma criança ou duas crianças.
Portanto, esta imagem aqui não é uma árvore binária, porque
nó 3 tem três filhos.
>> Mas se tivéssemos de ignorar aqueles, o resto de que é uma árvore binária porque
demonstra a propriedade que cada nó tem zero, um ou dois filhos.
Então, como podemos expressar isso no código?
Poderíamos ter um nó onde cada nó tem um número inteiro dentro do mesmo, bem
como um ponteiro para a árvore à esquerda e um ponteiro para a árvore no
direita, de modo que os dois filhos.
Como isso é útil?
Bem, se fizermos regras sobre onde nós colocar nós, podemos tornar a pesquisa mais rápida.
>> Portanto, há um conceito de uma pesquisa binária árvore, em que todos os nós da
subárvore esquerda tem um valor menor que o nó que estamos olhando.
E todos nós na subárvore direita ter um valor maior
que o nó raiz.
Agora, que se parece com um monte de palavras.
Vou colocá-lo dentro de dupla citações e mostrar uma foto.
Então, aqui está um exemplo de uma árvore de busca binária.
Veja que começamos com 10.
Tudo o que o lado esquerdo da 10 é menor do que.
E tudo para a direita é maior do que isso.
>> Mas mais do que isso, cada nó a árvore expressa essa propriedade.
Assim, o nó 7 tem um 3 a para a esquerda e um 9 para a direita.
Assim, todos aqueles que são menores do que 10.
Mas olhando para apenas aqueles, o 7 tem 3 à sua esquerda e 9 para a sua direita.
E da mesma forma, à direita, 15 tem 14 à sua esquerda e 50 à direita.
Assim, os três nós por lá, 15, 14, e 50 anos, são também uma árvore binária válido
ou uma árvore de busca binária válido.
E todos eles são maiores do que 10.
Então, eles estão autorizados a estar à direita lá.
Existe uma pergunta?
>> AUDIÊNCIA: Como você lida quando você tem dois setes?
>> RJ AQUINO: Yeah.
Como você lida com dois valores que são os mesmos?
Algumas árvores de busca binária dizer que você ignorar duplicatas, porque o objetivo é
só para dizer, eu já vi essas coisas até agora.
Algumas árvores de busca binária pode-se dizer tem uma contagem dentro do nó.
Outros podem dizer que tudo o que esquerda é menor do que ou igual a.
E tudo para a direita é maior do que.
>> Ela só depende do que o problema é que você está resolvendo.
Assim, em um dicionário, por exemplo, você não se preocupam com duplicatas.
Você iria jogá-los fora.
Mas algum outro problema que você pode cuidar.
>> AUDIÊNCIA: É possível ter 1 para a esquerda, de 15, o qual
é inferior a 10?
>> RJ AQUINO: Não.
Se o 14 aqui foram um 1, este seria não ser uma árvore de busca binária válida,
porque tudo à direita 10 tem de ser maior do que ele.
E vamos ver o porquê.
Se na terra de busca meu objetivo é para encontrar 14, eu começo na raiz.
Então eu olho.
OK.
Vamos começar na raiz.
Olhe para 10.
>> Bem, 14, o nosso alvo, é maior do que 10.
Por isso, deve-se à direita.
Isto é muito semelhante ao conjunto do telefone coisa livro que fizemos, o binário
pesquisar lá.
Mas, em vez de procurar binário em uma matriz, estamos binário
busca nesta árvore.
Então, ainda estamos à procura de 14.
Bem, 14 é menor do que 15.
Então, se é na nossa árvore, deve estar num determinado local.
Deve ser à direita do 10 e para a esquerda, de 15.
>> E, assim, verificar este nó.
E yay, nós encontramos 14.
Eu não estou indo para atravessá-la.
Mas aqui está o código.
Na verdade, é relativamente simples,
porque este é recursivo.
O que poderíamos pedir para você fazer em um teste?
Poderíamos pedir-lhe para escrever este código.
Poderíamos pedir-lhe para olhar para este código e modificar o código e explicar o que
que está fazendo.
É.
Pergunta?
>> AUDIÊNCIA: São esses slides vai ser disponibilizados como estavam da última vez?
>> RJ AQUINO: sim.
Então, esses slides vai definitivamente ser postado.
>> AUDIÊNCIA: Eles estão realmente postado agora no site.
David acabou de fazer isso.
>> RJ AQUINO: Os slides são agora no site.
Eu provavelmente vou consertar um par de os erros de digitação Notei e corrigi-los.
Mas há uma corrente versão no site.
Outros coisas que poderíamos pedir-lhe para fazer -
escrever inserção.
Escreva uma versão iterativa do função recursiva que acabei de mostrar
ou falar sobre essas coisas, como em parágrafos, em palavras, em frases.
Comparando-se os tempos de execução e explicando o que você gostaria de usar um binário
árvore de busca para em vez de um Tabela de Hash, por exemplo.
>> Assim, entender estas estruturas em um nível muito profundo.
Entenda como escrevê-los, como usá-los, como falar sobre eles.
E você vai estar tudo pronto.
Pergunta?
>> AUDIÊNCIA: Quando você está escrevendo o árvore binária de busca, como você
determinar o valor de torná-lo como a raiz?
>> RJ AQUINO: Então, a pergunta era: o que valor que você acha que a raiz?
Dependendo do seu código, você pode ter uma raiz global.
Então você pode ter provavelmente tinha em pset6 uma tabela hash global.
Ou você pode passar a raiz como um argumento.
Portanto, esta função de pesquisa aqui recebe um argumento um nó *.
E assim que o nó tiver que ser olhando é o que você está tratando
como a sua raiz quando você passá-lo dentro
E eu estou pronto.
Esses são os meus slides.
A próxima pessoa pode vir de swap em um laptop e microfone.
>> ROB BOWDEN: Eu acho que eu poderia ter interpretado essa questão de forma diferente.
Mas eu interpretei isso como, se você tiver os números 1, 2 e 3, como nós
saber para fazer 2 a raiz em oposição a uma ou três?
Se fizermos 2 a raiz, então é bem 1 e 3 à esquerda e à direita.
Mas se um é a raiz, então é uma ao topo, dois da direita, 3 para a direita.
Então, por padrão, você não sabe o que fazer a raiz.
E para qualquer algoritmo que estamos esperando dar-lhe, assim, a primeira coisa que você
inserção seria a raiz.
Ou nós dar-lhe uma árvore binária que já existente, que tem uma raiz.
Mas outros algoritmos existe tal que a raiz será atualizado, de modo que se você
acabar na situação em que é 1, 2, 3, ele vai atualizar automaticamente para
fazer 2 a nova raiz, de modo que ele ainda está bem equilibrada.
>> ANGELA LI: Cool.
Ei, pessoal.
Eu sou Angela.
E eu vou terminar o nosso C e, em seguida, entrar em alguns dos nossos web
tecnologias -
HTTP, HTML e CSS.
Então a primeira coisa é tampão ataques de estouro.
Então, vamos dar uma olhada neste código.
É muito simples.
Há uma função foo.
E ele não retorna nada.
Mas é preciso em um ponteiro para uma string chamada bar.
>> E vai declarar esta buffer, que é um personagem
matriz que tem 12 slots.
E ele usa memcpy, que é apenas um função que copia de um endereço
em outra.
Então, isso está tentando copiar para nosso buffer de qualquer
bar está apontando.
Então, alguma idéia do que está errado com esse código?
>> AUDIÊNCIA: Se a barra é mais longa do que C, que irá substituir.
>> ANGELA LI: Sim, exatamente.
Nós não temos nenhuma garantia de que a barra vai ser menor do que 12.
Nós apenas fizemos um número arbitrário 12.
E nós ficamos tipo, vamos esperar que nossa entrada for inferior a
12 caracteres.
Assim, em um mundo ideal, se a nossa entrada é sempre como esperado, então nós vamos chegar
algo como, Olá.
Isso é menos de 12 caracteres.
Ele é lido em char c.
E, então, fazer algo com ele.
Realmente não importa.
>> Mas uma pessoa mal-intencionada pode fazer algo mais como este, onde eles
dá-nos tudo o bar está apontando para, ele vai apontar para este enorme variedade
de apenas de um.
E este é o caminho mais longo do que 12.
Então, ele vai percorrer todo o caminho até aqui para que o retorno
endereço costumava ser.
Então, digamos que esta função é chamado foo.
Talvez foo foi chamado por algum outro função, que foi chamado por principal.
Então, quando foo está sendo executado, ele precisa saber para onde voltar.
>> Se foo foi chamado por uma função chamada baz, tem que saber que é
tem que voltar para Baz.
E é isso que este endereço de retorno aqui está nos dizendo.
Mas se substituí-lo com algum outro endereço, neste caso, esta é uma
representação do discurso na início deste buffer, então
o que realmente vai acontecer é que em vez de voltar para trás para baz,
que chamou a nossa função, é apenas indo para ir para a frente este código.
>> E se isso estava lá porque um malicioso cara veio e hackers
injetado isso, então talvez esse valor do de um não é realmente de um.
E ele é realmente apenas o código que quebra seu computador ou algo assim.
Então, para ficar na defensiva sobre esse tipo de coisa, você tem que assumir que nunca
entrada do usuário um certo quantidade de caracteres.
Por exemplo, quando você estava fazendo ortográfico, lhe foi dito que as palavras eram
só vai ser 40 caracteres máximo de comprimento.
E isso era bom.
>> Mas se não, então você teria que certifique-se apenas de ler em 45
caracteres de cada vez.
Caso contrário, você pode substituir seu buffer.
Qualquer dúvida sobre isso.
É.
>> AUDIÊNCIA: Você poderia apenas falar um pouco mais sobre isso?
>> ANGELA LI: Desculpe.
Sim.
>> AUDIÊNCIA: O microfone é apenas para vídeo.
Vou tentar e projeto.
Oi, pessoal.
SUP?
Então, vamos passar por cima de algumas coisas no Biblioteca CS50, o que você está usando
todo o semestre, principalmente para obter a entrada do usuário.
Como você sabe, você incluir o CS50 biblioteca apenas fazendo CS50.h, que
contém todos os protótipos do funções que você pode usar, como
GetString e GetInt e GetFloat, et cetera.
E há essa linha no CS50 biblioteca que define uma string, que
Vocês todos já sabem é apenas um char *.
>> Mas vamos dar uma olhada em GetString como funciona.
Esta é uma versão muito resumida.
Você pode puxar para cima os arquivos de biblioteca CS50 de, eu acho, manuals.CS50.net.
E você pode ler a função real.
Mas isso cobre algumas das as peças importantes.
Então, nós criamos alguns tampão com alguma capacidade.
E o que fazemos é pegar um personagem em um momento de padrão n.
É aí que a entradas do usuário texto no console.
>> E assim vamos ler em um caráter, desde que ele não é um novo
linha e não é o fim do arquivo, o que é a extremidade de entrada padrão.
E, para cada personagem que lemos em, se que o personagem acaba de adicionar
para o número de caracteres que lemos e que é mais do que a nossa capacidade,
então o que fazemos é apenas redimensionar nossa tampão de modo que é o dobro do tempo.
Então, novamente, este proteger contra tampão ataques de estouro, porque você leu em
um personagem de cada vez.
E se em algum momento você ler em muito muitos, basta expandir o seu buffer.
Você multiplica por dois.
E então você tem mais espaço.
>> Caso contrário, basta adicionar um personagem para o buffer.
E depois que você já leu em toda a caracteres, que irá diminuir o buffer
de volta para o tamanho normal, adicionar um terminador nulo, e depois voltar.
Agora, vamos olhar para GetInt.
Vocês podem ler isso?
Eu posso ampliar um pouco.
Eu não sei como os computadores funcionam.
Nunca mente.
Não pode ampliar corretamente.
>> Isso é realmente difícil.
Sinto muito.
Vamos olhar para isso.
Então, o que faz é GetInt ele lê primeiro em uma série de GetString, que
temos implementado antes.
E a parte mais importante a notar aqui é se essa partilha que ele acaba
leitura é como não realmente uma corda, então nós apenas voltar para INT_MAX
representar o fracasso.
Por que voltar INT_MAX vez de negativo 1 ou 1?
Alguma ideia?
>> AUDIÊNCIA: [inaudível] 1 negativo em um.
>> ANGELA LI: Sim, exatamente.
Então você é muito mais provável que apenas quer na entrada 1 ou negativo 1, quando solicitado
para um enésimo e tudo Maxes enésima.
É enorme.
Você provavelmente não vai usá-lo.
Então, isso é como uma decisão de projeto para certifique-se que você não acidentalmente
retornará um erro ou você não voltar 1, que pode ser analisado
como uma resposta correta.
Assim, se uma linha não existir, voltamos INT-MAX.
Caso contrário, vamos usar sscanf, que é como scanf.
Mas ele lê a partir de uma string.
>> E nós temos esta formatado string, que é% i% c.
E nós tentamos e combinar isso com tudo o que o usuário nos deu.
Queremos que o número de coisas combinadas a ser 1, o que significa que somente
realmente quero corresponder a um número inteiro rodeado por talvez branco
espaço, talvez não.
Neste caso, se você colocar em alguma coisa como bar, bar não corresponde em tudo,
porque é necessário que haja um inteiro no início.
Por isso, nunca sscan virou 0.
Então você não retornar isso.
>> Alternativamente, se você colocar em alguma coisa como 1, 2, 3, A, B, C, que jogos
tanto o número inteiro mas também o personagem depois.
Assim sscanf retornará 2, que também não é ideal.
Você não quer 1, 2, 3, A, B, C e ser um int válido.
Então isso também não funciona.
Mas digamos que você coloca em algo como 50.
Isso vai coincidir com o% i, o que significa ele vai ter lido no n.
E agora, n conterá o número 50.
E então você pode devolvê-lo.
>> Caso contrário, você bateu em Repetir.
E então ele só vai outra vez até você recebe uma entrada adequada do usuário.
Qualquer dúvida sobre isso?
>> AUDIÊNCIA: Então, se você fosse para imprimir o valor da GetInt em [inaudível]
seria apenas o número inteiro e máximo?
>> ANGELA LI: Yeah.
Então, se você usar GetInt, você deve assumir que você não quer max enésimo para
ser uma entrada válida, porque você está indo supor que isso era ruim.
>> AUDIÊNCIA: Se não tivéssemos char c e alguém colocou em 1, 2, 3, Sam, seria
ainda trabalhar para 1, 2, 3?
>> ANGELA LI: Eu acho que ele iria trabalhar.
Mas você não quer que a 123Sam ser uma entrada válida por um usuário.
Isso não é realmente um int.
Por isso, não parece justo analisá-lo como um int.
OK.
Nesse caso, vamos passar para a internet.
Então HTTP não é uma linguagem.
HTTP é apenas o conjunto de normas para como você enviar as coisas de clientes,
isso é você, para os servidores.
Isso é outras pessoas na web.
>> Então HTTP significa Hypertext Transfer Protocol.
É o coração ea alma de toda a web.
A parte de hipertexto apenas refere-se ao HTML.
A transferência é clientes como você vai enviar pedidos de
servidores, que dão respostas.
E o protocolo é apenas, como é que você espera que um servidor se comportar?
E como você deve se comportar de tal forma que você pode simplificar este
processo de comunicação?
>> Assim, solicitações HTTP parecem muito com isso.
GET é o tipo de solicitação.
Vocês têm visto solicitações GET e solicitações POST.
Essa segunda coisa lá, / mim, isso é apenas o URI ou a URL de onde você
quero ir para dentro do hospedeiro.
Portanto, este pedido está pedindo o página, como www.facebook.com / mim.
E é uma solicitação GET.
E então este HTTP/1.1, que é apenas a versão do HTTP que você está usando.
É quase sempre 1.1.
>> E depois há um bando de outras coisas também.
Você pode realmente ver estes se abrir o seu console quando você está
navegar na web.
Respostas parecido mais como este.
A parte superior é, de novo, o tipo de HTTP que você está usando
seguido por um código de estado.
Então 200 OK é tudo deu certo.
Aqui é o seu conteúdo.
Seu conteúdo vai seguir.
E então ele vai dizer que tipo de conteúdo e de outras coisas também.
>> Os códigos de status, há alguns mais importantes que você deve saber.
200 OK é como ouro de tudo.
Tudo funciona.
403 Proibido.
Isso você provavelmente já viu se você esqueceu chmod algo corretamente.
Isso significa que você não tem as permissões corretas para
acessar esse no servidor.
É como se, não, você não pode vê-lo.
404 significa que coisa não existe.
Não foi encontrado.
Você provavelmente já viu muito isso.
>> 500 Internal Server Error é geralmente como algo deu errado no lado
do servidor.
Então, quando você estava implementando pset7, se você tivesse erros do PHP, você poderia
realmente ir para a página e ver um todo monte de coisas PHP erro.
Mas isso normalmente não acontece, porque sites realmente não quer
dizer-lhe por que seu site está quebrado.
Eles provavelmente vou voltar a 500 Internal Server Error.
>> E depois há 418 eu sou um bule de chá.
Há toda uma história sobre por que isso é uma coisa.
Mas você pode ler sobre isso em seu próprio tempo.
Há todo um conjunto de outros códigos de status também.
Mas estes são os você deveria saber.
Então vamos falar sobre HTML.
HTML, lembre-se, não é um linguagem de programação.
É uma linguagem de marcação.
Isso significa que ele descreve o conteúdo.
Diz-lhe que um documento HTML parece como ou não é o que parece
mas como ele está estruturado.
>> Por isso, define uma estrutura e semântica das páginas da web.
É como se, este é um parágrafo.
Esta é uma lista ordenada.
Isto é como uma seção da minha página.
Aqui está o título.
Ele faz coisas assim.
Não estilo nada disso, porque isso é o que você faz em CSS.
E parece que uma série etiquetas de aninhadas.
Assim, a utilização de um exemplo de uma base realmente Página HTML, você tem o DOCTYPE
declaração lá em cima.
>> Esta declaração DOCTYPE é dizendo, estamos usando HTML5.
Então você tem a tag grande HTML.
Ele contém uma cabeça e um corpo.
Dentro da cabeça, você tem o título.
Isso é o que se passa no título barra do seu navegador.
Temos uma tag link que liga em uma folha de estilo externa.
E então nós temos um script que puxa a partir de um JavaScript externo bem.
>> E, em seguida, no interior do nosso corpo é realmente o que é mostrado na página.
Temos um parágrafo e, em seguida, um imagem dentro desse número.
Este é um retrato de gatinhos.
Observe que a imagem tag se fecha.
Então, em vez de abrir com uma imagem e depois fazer outro / imagem,
só tem esta pequena barra aqui, que a fecha.
E a tag de imagem também tem essa chave atributo valor chamado alt.
Esse é o texto alternativo que acontece quando você passa o mouse sobre ele.
>> A maioria dos elementos HTML têm algum valor da chave coisas que você pode dar isso, vários
personalização.
É.
>> AUDIÊNCIA: [inaudível].
>> ANGELA LI: Bem, por isso é uma atributo da marca.
Portanto, se você estava usando jQuery, você poderia fazer select image.getAttribute.
E então você pode procurar obter o atributo alt.
E ele vai te dar gatinhos.
Se você se lembrar formulários em HTML, entrada elementos terá atributos de nome.
E é isso que o PHP usa para enviar pedidos quando um formulário é enviado.
>> AUDIÊNCIA: Você mencionou algo sobre como se você usa ou Kittens.jpg
algo que tem o que faltava pastas de arquivos ou outros arquivos?
>> ANGELA LI: sim.
Então, isso é o que se chama um parente caminho, porque eu não estou dando
lhe o caminho completo.
Isto é como quando em C, se você fizer fopen algum arquivo, se você hi.txt fopen, que
hi.txt deverá estar na mesma diretório, a menos que você dar-lhe um mais
caminho complexo.
>> AUDIÊNCIA: Então você pode especificar qual pasta [inaudível]?
>> ANGELA LI: Yeah.
E você pode olhar para cima como fazer isso.
Mas se eu queria ficar fora Kittens.jpg do diretório pai, eu faria
.. / Kittens.jpg.
É.
Desculpe.
É.
Oh homem, eu esqueci a pergunta.
Qual foi a pergunta?
Ah, a pergunta era é, Kittens.jpg Espera-se que estar no mesmo diretório?
E, neste caso, é.
Mas você também pode dar-lhe um certo caminho de tal modo que ele não tem que ser.
Bom?
>> CSS.
Então, CSS, como HTML, não é uma linguagem de programação.
CSS é apenas uma série de regras de estilo.
Fica para Cascading Style Sheets.
E você usá-lo em conjunto com HTML para páginas de estilo.
Portanto, há três maneiras você pode incluí-lo.
Uma maneira que você pode fazer é na cabeça parte do seu HTML, você pode apenas
abrir uma marca de estilo e depois ficar algumas regras CSS lá.
É muito OK.
É.
>> AUDIÊNCIA: Você poderia colocar aqueles marcas de estilo no meio, vamos
digamos, corpo e / corpo.
E então você seria styling só no corpo.
>> ANGELA LI: Você poderia.
Ele vai trabalhar.
Mas você não deve, porque estilo é tipo de metadados que deve ir
o chefe do seu documento.
Corpo realmente deve conter apenas o que está realmente indo para
aparecer na sua página.
>> AUDIÊNCIA: Então você colocaria estilo em sua cabeça para o estilo do
toda a página web, certo?
>> ANGELA LI: Yeah.
Então, colocar estilo aqui, essas regras CSS se aplicará a toda a página com base em
seus seletores.
Portanto, a melhor maneira de o fazer é, ao invés de ter uma marca de estilo em sua cabeça,
você tem este link para um estilo externo folha como eu mostrei no
exemplo anterior.
O que isto significa é que tenta e encontra o arquivo style.css e, em seguida, puxa-
e em que utiliza como o estilos para a página.
E seu style.css faria basta olhar assim.
Seria apenas um monte de CSS.
>> E, finalmente, há uma outra maneira que você pode incluir CSS, o que você realmente
não deve nunca fazer.
É um estilo in-line chamada.
E assim qualquer elemento HTML pode também tirar um atributo de estilo.
E então, nesse atributo de estilo, você pode dar-lhe as regras de CSS.
Portanto, neste caso, seja qual for div Estou definir bem aqui, ele vai
tem um fundo preto e uma cor de texto branco.
Mas você não deve fazer isso, porque o que isso é que coloca o seu estilo
dentro do seu HTML.
>> E eu sei que nós temos falado sobre HTML é estrutura e CSS é o estilo.
Se você fizer isso, ele mistura los juntos.
E não é muito limpo.
Portanto, não faça isso.
Usando um exemplo de CSS, lá em cima, nós basta selecionar o corpo do HTML
documentário.
E nós somos como, tudo de vai ser Comic Sans.
Eu também não recomendo isso.
Mas você pode fazer isso.
>> A segunda regra aqui, vai para selecionar o elemento no
página com ID principal.
Assim, qualquer elemento HTML, eu disse ID = Principal, eu vou dar um que
Margem de 20 pixels e alinhar tudo, todo o texto, para o centro.
A última coisa que escolhe por classe CSS.
Assim, qualquer elemento na página que eu dei uma classe de seção, eu vou fazê-lo
uma cor de fundo de luz azul.
Yep.
Isso é tudo que eu tenho.
Pergunta?
>> AUDIÊNCIA: O que a hashtag antes principal fazer?
>> ANGELA LI: A pergunta é, o que faz a hashtag antes afazeres principal?
Neste caso, o hash CSS significa selecionar por ID.
Então, se eu tinha algum elemento HTML, como divId = principais, esta regra CSS seleciona
a coisa com ID principal.
E de igual modo, o período em frente seção é selecionar por classe de CSS ou
selecionar por classe de HTML.
>> AUDIÊNCIA: Por que há um tem antes 6 em cor de fundo?
>> ANGELA LI: Yeah.
Então a questão é, por que há um hash antes do 6?
Isto é diferente do que hash.
Isto significa que você está dando uma cor hexadecimal.
Assim, as cores hexadecimais, isso só representa uma cor.
E você se lembra quando triplos RGB você fez o pset forense?
Isto é semelhante.
Os dois primeiros dígitos representam quanto vermelho é a cor.
O segundo dois representam quanto verde.
E o terceiro representa quanto azul.
E o hash é que isso vai para representar uma cor.
>> Assim, qualquer coisa desde 0, 0, 0, 0, 0, 0 -se a F, F, M, F, M, F é válido.
É um pouco de cor válidos que podem ser apresentada pelo seu browser.
Pergunta?
>> AUDIÊNCIA: Qual é a diferença entre usando por ID e por classe?
>> ANGELA LI: A pergunta é o que é a diferença entre
usando por ID e classe?
Você pode ter apenas um elemento de uma Documento HTML que tem um determinado ID.
Assim, apenas uma coisa na minha página é permitido ter ID principal.
Então você usá-lo para isso é o cabeçalho.
Esta é a navegação.
Este é o rodapé.
Classes são diferentes, porque você pode aplicar aulas a tantos elementos HTML
como você quer.
>> Assim, por exemplo, eu fiz parte da classe, porque provavelmente há mais de um
seção na minha página.
Você só está autorizado a ter o maior número elementos na página com o mesmo
classe, mas apenas uma com um certo ID.
>> AUDIÊNCIA: Então, o ponto representa a classe?
>> ANGELA LI: Yeah.
Um ponto representa uma classe.
Legal.
Isso é tudo que eu tenho, rapazes.
Obrigado.
>> [Aplausos]
>> ZAMYLA CHAN: Oi, todo mundo.
Estou Zamyla.
Eu vou fazer a cobertura PHP, MVC, SQL e hoje.
Uma grande parte do material que eu vou estar cobertura vai ser muito bonito
direito de pset7.
Tudo bem.
Então o que é PHP?
PHP significa PHP Hypertext Preprocessor.
Por isso, em si mesmo, é um recursiva nome, o que é muito legal.
PHP é uma linguagem de script do lado do servidor, e fornece a infra-estrutura
e os fundamentos lógicos do nosso site.
>> Então, Angela falou muito sobre o HTML e CSS que fará com que a estrutura
do site.
Mas e se você quiser mudar isso conteúdo dinamicamente ou se ele varia
com base no utilizador ou certas condições?
É aí que vem dentro PHP
Agora, normalmente, PHP pode levar alguns menos linhas para implementar a mesma coisa
em C. Isso porque PHP lida com a memória gestão para o programador,
ao contrário de nós ter que malloc livre, coisas desse tipo.
>> Mas desde o PHP é uma interpretação linguagem, tipicamente, pode executar
um pouco mais devagar do que C, a qual é uma linguagem compilada.
Porque nós estamos movendo programação línguas, vamos olhar para a forma como o
sintaxe será diferente.
Vamos ter muito cuidado para não se confundem com isso.
Então, com a sintaxe do PHP, se você é incorporação de seu PHP dentro de um HTML
arquivo ou dentro de um arquivo php. si mesmo, você precisa colocar o código no aberto
PHP e as tags PHP fechados como seguinte, como na tela.
>> Variáveis ​​em PHP.
Cada variável única terá início com o sinal $, seguido do nome de
sua variável.
Agora, as variáveis ​​em PHP são vagamente digitado, o que significa que você não precisa
para indicar que o tipo de dados é quando você está declarando isso.
No entanto, isso não significa que eles não tem qualquer tipo de todo.
Então, se eu declarar uma variável e apenas definir ele igual a 1, e então eu declarar
outra variável, defina-o igual a "1", e, em seguida, um outro 1.0, bem como,
dependendo do tipo de igualdade operadores que eu uso, se eu quiser comparar
em todos os tipos, então eles vão ser iguais.
Mas se eu quero ter certeza de que o tipos são iguais, PHP ainda pode fazer
que, mesmo que não indicam que tipo é quando nós
primeiro fazer o arquivo.
>> Agora, em PHP, apesar de sermos comutação de programação
linguagens de C, ainda temos a nossa fiel se a condição, tal como este.
Nós ainda temos os nossos laços enquanto, apenas como este, onde você colocou no seu
condição e, em seguida, o corpo do ciclo.
E depois também temos o nosso loop for, que normalmente se parece com isso.
Então, se eu queria fazer uma iteração sobre todos Série de Exercícios nove e submeter e chamar um
submitPset função, então eu posso fazer isso aqui, o que vocês têm tudo
feito por este ponto.
Parabéns, pelo caminho.
>> Para a câmera, as pessoas disse, obrigado.
Agora, se você não quer apenas usar esse loop for, então o PHP na verdade também
tem coisas chamados loops foreach.
Então, se eu tivesse um array de inteiros, 0 a 8, armazenados nas Série de Exercícios matriz,
então eu poderia ter um loop foreach que itera sobre todos os números em Série de Exercícios.
E então eu poderia chamar o mesmo funcionar oito vezes,
assim como eu fiz antes.
Então, isso para cada circuito é bom, porque você não tem que se você não sabe
o comprimento exato da matriz que você ter, em seguida, usando esse loop foreach
vai cuidar disso para você.
>> Então eu fiz Série de Exercícios como uma matriz.
Vamos olhar para isso.
Arrays em PHP normalmente são as mesmas que os que temos em C, onde
você pode declarar um array.
E aqui, eu posso declarar uma matriz vazia e, em seguida, construir-se dinamicamente usando
índices como inteiros.
Assim, o índice 0, eu estou indo para armazenar um inteiro denominado 1.
No índice 1 da minha lista, eu vou para armazenar o valor de 2.
E no terceiro, mas o índice de segundo número, eu vou
armazenar o número 12.
>> Agora, isso é bom na medida em que funciona, funciona bem.
Mas dizer isso é importante para mim o que cada índice se mantém.
Para mim, o índice 0 significa o quão muitos gatos que tenho.
E o índice de 1 significa como muitas corujas que eu tenho.
E o próximo significa quantos cães.
Bem, então é para especificar que, em vez de ter de se lembrar 0 refere-se a
gatos e 1 a corujas, eu posso usar arrays associativos, o que significa que
em vez de inteiros como os meus índices, Eu posso realmente usar cordas.
>> Então, isso é bastante útil.
E você, basicamente, apenas substituído os inteiros com strings.
E aí você tem um array associativo.
É.
>> AUDIÊNCIA: Existe uma razão pela qual não há um sublinhado para o segundo
parte, porque a minha lista tem a matriz.
>> ZAMYLA CHAN: A questão foi, é Existe uma razão pela qual há uma
sublinhado entre meu e lista?
Não.
É assim que eu estou nomeando minha variável.
>> AUDIÊNCIA: No primeiro linha, é uma palavra.
>> ZAMYLA CHAN: As minhas desculpas.
Eu vou corrigir isso.
É.
Eles devem ser o mesmo nome da variável.
Boa captura.
OK.
Então, vamos seguir em frente para string concatenação.
Se eu quisesse tomar duas cordas, então eu posso concatenar-los
com o operador ponto.
Então, se eu tenho Milo como um primeiro nome Banana e como um último nome, então
concatenação com o operador ponto e em seguida, colocar um espaço entre
vai fazer uma seqüência que contém Milo Banana, o que eu posso then echo ou,
em vez disso, imprimir.
>> Falando de eco, vamos falar sobre alguns útil -
oops.
Sinto muito.
Algumas funções PHP úteis.
Portanto, temos a -
dificuldades técnicas.
Um segundo.
A enviei.
Problemas do PowerPoint.
E estamos de volta com funções PHP.
>> Portanto, temos a função de exigir, quando se você passar em um arquivo, aqui está é apenas
um exemplo de um arquivo que Eu poderia passar dentro
Então, que irá incluir o código PHP a partir desse arquivo que eu indicar.
E vai avaliar que dentro
Então, nós também temos o eco, o que é um paralelo para printf.
Exit é um paralelo de quebrar, que sai do bloco de
código que você está dentro
E, em seguida, verifica vazios se uma determinada variável é como nulo ou zero ou
tudo o que é equiparado a ser vazio.
É.
>> AUDIÊNCIA: Para a concatenação operador ponto um, em PHP, é que o
mesmo que em JavaScript onde ele está usando o ponto para concatenação significa mais?
Assim, o nome completo, você poderia ter dólar primeiro sinal + e, em seguida, + durar?
>> ZAMYLA CHAN: Yeah.
Portanto, a questão era saber se no PHP nós pode usar a mesma concatenação
como em JavaScript com as vantagens.
E José vai entrar nisso mais tarde.
Eu acho que ele tem um slide sobre isso.
Na verdade, é diferente.
Assim, em JavaScript, você precisa usar a mais para concatenar strings.
E em PHP, você tem que usar o operador ponto.
Então, eles são diferentes.
>> OK.
Portanto, agora que nós cobrimos tudo este PHP, onde faz
realmente vir a calhar?
Bem, ele vem a calhar quando nós pode combiná-lo com o nosso HTML.
Assim, o nosso PHP nos dará o poder de alterar o conteúdo HTML de uma página antes de
seu carregamento.
Assim, com base em diferentes condições, geralmente o usuário específico que é
logado, podemos mostrar informações diferentes.
Linda, você tem uma pergunta?
>> AUDIÊNCIA: Você pode concatenar um inteiro também?
>> ZAMYLA CHAN: Sim, você pode.
Portanto, a questão era se você puder concatenar inteiros ou outra
variable.s agora, passamos para MVC, que é um paradigma que foi utilizado em
pset7 e um monte de web designers usam para organizar o código nos arquivos
em seu site.
M significa Model.
E, basicamente, arquivos de modelo tratará com interações com o banco de dados.
Ver arquivos, eles se relacionam com o estética do website.
E as alças Controlador solicitações dos usuários, analisa
dados, faz outra lógica.
>> Em pset7, combinamos o modelo eo controlador.
E nós só chamou os controladores e colocá-los no diretório público.
E os arquivos de visão, podemos usá-los como modelos no diretório de modelos.
Portanto, este diagrama aqui representa também o mesmo tipo de divisão com o
modelo eo controlador em roxo aqui no lado esquerdo e
o ponto de vista do lado direito.
Portanto, este é um esquema que alguns de vocês pode ter visto no horário de expediente ou
diagramas que estávamos desenho como você foram descobrir seu pset.
>> Então, aqui, em um determinado controlador, um modelo controlador, que têm funções
que se relacionam com a consulta SQL banco de dados, a execução de lógica PHP.
Talvez você olhar para cima um estoque no Yahoo!
Finanças.
Ou talvez, você teria apenas que verificar para ver se o usuário tinha apresentado um
formar já antes de ter visitou sua página.
E então você tornaria Uma forma aqui.
Depois que a forma tinha sido apresentado pelo usuário, a ação que foi
especificada na tag HTML do formulário indicaria a página que
retorna os dados para.
>> Então, toda essa informação seria enviado de volta para seu controlador.
Então você provavelmente faria um pouco mais lógica em que e talvez executar alguns
mais consultas no banco de dados SQL e então, finalmente, chegar a um bem
set repleto de informações que você faria passar em algum outro modelo
que exibia essa informação.
Agora, como é que vamos realmente embalar que as informações acima?
Bem, nós temos uma função chamada de renderização que estava no arquivo functions.php em
pset7, onde você passar o nome de um ficheiro, o nome de um modelo.
>> E então você também passar em uma matriz associativa.
E assim que a matriz associativa representa a informação diferente
que você quer passar dentro
Agora, o que vai ser constante em Nestes exemplos é que as teclas ou,
em vez disso, as chaves do associativo matrizes, essas são o que vai ser
Espera-se ser constante pelo modelo, porque ele sabe que precisa
algo chamado mensagem ou chamado nome.
E então as coisas do lado direito, o valores reais, portanto, neste caso, quem é
um bom menino e Milo, aqueles vão ser os valores que estão mudando
que o controlador muda a cada vez ou com base em uma determinada condição e
que passará dentro
>> Então, aqui em modelos, vemos que está usando caracteres especiais em HTML,
o que só significa basicamente que nós queremos para obter a seqüência de pares que a
usuário colocar dentro
E queremos substituir mensagem lá.
Então quando nós realmente ver o arquivo, o específico
informação é passada dentro
Note-se que a chave de como tornar os trabalhos é que as chaves do associativo
matrizes, as variáveis ​​se tornam nomes aqui.
E assim os valores de chave, que na matriz associativa torna-se então o
valor da variável.
>> Agora, vamos passar para SQL.
Fica para Structured Query Language.
E assim, esta é apenas uma programação linguagem projetada
para o gerenciamento de bancos de dados.
E veio a calhar para nós nosso site finanças pset7.
Essencialmente, é apenas uma maneira fácil de controlar e gerenciar objetos e tabelas
e ligá-los entre si.
Agora, pense em seu banco de dados SQL basicamente como um arquivo do Excel, talvez,
com várias folhas com guias.
>> Assim, você poderá ter várias tabelas, talvez, que foi ligado a um outro.
E muito parecido com o Excel, temos um monte de a funcionalidade que nós queremos.
Por exemplo, podemos selecionar determinadas linhas.
Podemos inserir informações.
Podemos atualizar linhas.
E nós também pode excluir as coisas.
>> O SQL selecionar trabalhos de seleção de linhas ou uma fileira de colunas especificadas de uma
de banco de dados que correspondem a um determinado critérios que você indicar.
Então aqui quando vejo select * from bruxos onde a casa = Corvinal, então
Estou selecionando *, o que significa que eu sou selecionar cada coluna única em que
linha da tabela assistentes, mas somente se a coluna é igual a casa Corvinal.
Agora, isso é pura ou SQL.
Então, se eu fui para o phpMyAdmin, que é a forma específica que usamos para gerenciar
nossos bancos de dados SQL, então eu poderia inserir que no site do phpMyAdmin.
E isso seria executado.
>> Mas nós realmente queremos fazer que no lado do PHP.
Então, como vamos fazer isso?
Bem, nós usamos a função de consulta, que basicamente executa a consulta SQL.
Usando?
como um espaço reservado, podemos passar em certos valores para a nossa cadeia que nós
deseja substituir.
Por isso, talvez eu estou armazenando diferente valores na curr_house, que
representa a casa atual que eu estou passando.
Então, eu posso passar isso como um espaço reservado com o ponto de interrogação.
E então eu vou basicamente executar o mesma coisa que eu fiz antes, com exceção
agora, estou em PHP.
>> E consulta retornará um array associativo.
E eu vou guardá-lo em linhas.
Agora, a consulta pode sempre falhar.
Talvez a consulta SQL não pôde executar porque não existe a tabela.
Ou talvez, a coluna não existe.
Algo deu errado.
Bem, nesse caso, você vai querer fazer Certifique-se que você verifique se o
consulta retornou falso.
E isso é usando o triplo é igual a operação não.
>> E então eu me desculpo, que é outra Função CS50, passando uma mensagem.
E se você olhar para pedir desculpas, tudo o que realmente faz é tornar apology.php.
É.
>> AUDIÊNCIA: Você poderia explicar o que é que estrela faz entre seleção e de?
>> ZAMYLA CHAN: Sim, absolutamente.
Então, a estrela no meio de seleção e de significa que eu quero selecionar o conjunto
linha inteira da minha mesa.
Eu poderia ter indicado selecione nome, ano, casa.
E eu só iria pegar esses três colunas na minha mesa.
Mas se eu disser select *, então eu vou ter tudo nessa coluna.
Então eu vou te na parte de trás primeiro.
>> AUDIÊNCIA: Então, isso ainda é em SQL, certo?
É esta consulta ou isso é PHP?
>> ZAMYLA CHAN: Estamos em uma consulta.
Portanto, esta é em PHP.
Então, usando a consulta função PHP, estamos executando uma consulta SQL.
>> AUDIÊNCIA: É algo em SQL maiúsculas e minúsculas, como selecionar
ou assistentes ou casa?
>> ZAMYLA CHAN: É qualquer coisa em SQL maiúsculas de minúsculas?
Eu acredito que sim.
Acredito que SELECT e DO E onde estão maiúsculas de minúsculas.
Não?
>> ROB BOWDEN: Então, é o oposto.
Os nomes das colunas e os meios de mesa, todos esses são case-sensitive.
Mas qualquer uma das principais palavras do MySQL, como SELECT, FROM e WHERE, aqueles que não são
maiúsculas de minúsculas.
OK.
Assim, o oposto do que eu disse.
Assim, todas as palavras-chave do MySQL -
selecionar, a partir de onde - aqueles não são case-sensitive.
Mas tudo o resto é.
OK.
Você na frente.
>> AUDIÊNCIA: Se eu tenho R $ linhas em termos de mais de uma linha, isso significa que é
só se torna uma matriz associativa?
>> ZAMYLA CHAN: Então, a questão era se as linhas tem mais de uma linha em que, se
se torna uma matriz associativa?
Por isso, é um conjunto de associativo matrizes já.
Assim, mesmo se houver apenas uma linha voltou, então você tem que ir para
0 índice de que resultam.
E então você tem que primeira linha.
Sim, Belinda?
>> AUDIÊNCIA: Quando você usa ===, é este o único exemplo?
Ou existem outros?
>> ZAMYLA CHAN: Então, neste caso, === é uma comparação entre os tipos.
Desculpe. === É um comparador que compara os tipos.
E então == compara em todos os tipos.
>> AUDIÊNCIA: Você pode explicar o que linhas é nesta situação?
É linha de dados?
>> ZAMYLA CHAN: No próximo slide, eu sou vai explicar o que é linhas.
Então, se você não se importa segurando fora disso.
E então você pelas costas?
>> AUDIÊNCIA: Para funções como consulta, prestar e pedir desculpas [inaudível]?
>> ZAMYLA CHAN: A questão era se estas funções - consulta, pedir desculpas,
e render -
são comuns em PHP.
Estes são os que CS50 escreveu para pset7.
E Jay?
>> AUDIÊNCIA: Quando você precisa dizer $ _SESSION, É que apenas para IDs?
Ou você poderia ter dito isso aqui?
>> ZAMYLA CHAN: Então, a pergunta era, quando usamos $ _SESSION, que foi de algum
variável global que estamos usando.
Aqui esta variável vai ser local para a nossa função.
Então, estamos apenas declarando uma nova variável.
>> AUDIÊNCIA: Como pedir desculpas implementado?
>> ZAMYLA CHAN: A pergunta era: como é pedir desculpas implementado?
E eu acho que isso é realmente uma bonita boas práticas para vocês para entrar em
a seção functions.php e olhar para pedir desculpas e ver como você poderia ter
feito isso sozinho.
Assim eu posso deixar isso para você, mas apenas dizer que, se você olhar para pedir desculpas,
em seguida, leva a mensagem que você submetidos a pedir desculpas, e então ele
torna essa mensagem.
Mais alguma pergunta?
Eu amo perguntas.
Assim, mantê-los próximos.
>> AUDIÊNCIA: [inaudível]
echo ou print lá?
>> ZAMYLA CHAN: A pergunta era: não poderíamos simplesmente ter colocado
echo ou print lá.
Assim que teria feito algo ligeiramente diferente.
Isso teria impresso consulta Falha em que -
Bem, agora, estamos na verdade em nosso controller.
Então, nós realmente não têm HTML criado aqui.
Apologize tornando apologize.php na verdade redireciona para apology.php.
OK.
>> Então, agora, vamos continuar a abordar a questão de mais cedo sobre o que
é realmente linhas.
Bem, consulta retornará uma matriz de linhas.
E cada linha é representada por uma matriz associativa.
Então, se eu tiver executado alguma consulta SQL e Eu tenho guardado o resultado em linhas, em seguida,
usando um loop foreach, a matriz nome é o primeiro a chegar - linhas.
E então eu vou chamar cada linha em que $ row.
>> Então iteração sobre isso, então eu posso acessar coluna o nome da linha dado,
coluna do ano, ea casa da coluna.
Note que eu não teria sido capaz de fazer isso com linhas, porque o índice linhas
nome não existe.
Linhas é apenas um conjunto de arrays associativos.
Então você tem dois níveis de lá.
Depois de ter a matriz de linhas, você tem que entrar nisso.
E então você pode acessar as colunas.
Será que isso deixar claro?
Sim, em frente?
>> AUDIÊNCIA: [inaudível] abrir suportes para [inaudível]?
>> ZAMYLA CHAN: Perdoe-me?
>> AUDIÊNCIA: Os colchetes abertos.
>> ZAMYLA CHAN: Estes aqui?
Isso é que me permite incluir essa variável.
É.
>> AUDIÊNCIA: Ao imprimir, é você imprimir o código HTML?
>> ZAMYLA CHAN: sim.
Quando imprimo, este aqui é dentro meu modelo agora, para
meu ponto de vista do método de MVC.
Então, eu estou imprimindo no HTML.
>> AUDIÊNCIA: Então se fomos para desenvolvedor ferramentas após a execução deste, poderíamos
que, na verdade, em código?
>> ZAMYLA CHAN: Isso é uma grande pergunta, sim.
Então, se você foi para as ferramentas de desenvolvimento no Firefox usando Firebug ou
Chrome, então sim, você poderia ver o HTML específico.
Por isso, não iria mostrar $ linha ["Nome"].
Ele iria mostrar o que nome é nessa linha.
>> AUDIÊNCIA: Apenas uma questão geral, o que são tr e td definido como?
Por que nós [inaudível]?
>> ZAMYLA CHAN: tr linha da tabela, mesa depois de td coluna.
OK.
>> AUDIÊNCIA: Sim, é os dados da tabela.
>> ZAMYLA CHAN: dados da tabela.
É.
>> AUDIÊNCIA: É uma linha em que o linha é tratada como uma coluna?
>> ZAMYLA CHAN: Desculpe.
Você pode repetir?
>> AUDIÊNCIA: Como você visualizar linhas?
>> ZAMYLA CHAN: Como você visualize linhas em que tipo de forma?
Você está falando sobre estes linhas aqui ou as linhas de tr?
>> AUDIÊNCIA: As linhas.
>> ZAMYLA CHAN: Essas linhas aqui?
Eu visualizar isso como Eu executar a minha consulta.
E diz, OK, eu tenho ou 0 a n quantidade de linhas que correspondem aos critérios
que você tinha consultado.
Então, eu tenho um número de linhas.
Assim, as linhas, as linhas $, lojas de cada uma dessas linhas em um array.
Assim, mesmo que seja apenas um deles, é ainda um conjunto de linhas que combinem com ele.
>> Então, por exemplo, este é semelhante a quando você buscada
o cache dos usuários.
E os critérios de lá era o lugar onde ID é igual a ID da sessão.
Realmente é apenas uma linha que poderia corresponder.
Mas ainda linhas de voltar uma linha.
Então você teria que ir para linhas, índice 0, cache de índice para
realmente chegar ao seu cache.
>> AUDIÊNCIA: É a função de impressão em eco a mesma coisa?
>> ZAMYLA CHAN: sim.
Sim.
Imprimir um eco da mesma.
>> AUDIÊNCIA: É o loop foreach o única forma de índice em linhas?
>> ZAMYLA CHAN: É um loop foreach a única maneira que você pode
iterar através de linhas?
Não.
Você também pode usar um loop for, desde que você sabe que o comprimento
de série da linha.
>> AUDIÊNCIA: Você poderia acessá-lo usando uma linha como [inaudível]?
>> ZAMYLA CHAN: Então você não pode acessá-lo apenas usando linha se você não tem um
loop foreach, desde que você não declarou linha.
Sim.
Sim, no branco.
>> AUDIÊNCIA: Então o que tr e td fazer?
>> ZAMYLA CHAN: Então e tr td são tags HTML.
tr indica o início de uma linha da tabela.
E cada um indica um td nova coluna de dados da tabela.
>> AUDIÊNCIA: Para um visual do que uma linha é como, apenas imaginar o SQL, como
eles têm uma linha.
[Inaudível].
>> ZAMYLA CHAN: Yeah.
Isso é um grande ponto.
Você pode visualizar as linhas como apenas como em uma tabela do Excel, apenas
a lista das linhas.
OK.
Tudo bem.
Portanto, agora que já sabemos select, se não há mais perguntas, nós vamos
passar por cima para inserção.
Então, se eu queria inserir alguns tabela e inserir determinada coluna
valores, eu poderia inserir-me em Ravenclaw no ano 7.
Mas, às vezes pode haver duplicado valores, como vimos no pset7 quando
estavam atualizando nosso portfólio.
>> Portanto, neste caso, nós queremos usar ON DUPLICATE KEY UPDATE, para que não
armazenar várias linhas com o mesmo valorizar, mas sim atualizá-lo.
Então nós realmente temos de atualização, o que não é uma peça inserta.
É apenas uma atualização onde você atualizar em uma determinada mesa com uma dada
critérios e então, finalmente, eliminar que faz uma coisa muito semelhante.
>> AUDIÊNCIA: Você poderia brevemente passar por cima da chave duplicada?
>> ZAMYLA CHAN: Yeah.
Essencialmente aqui, tenho INSERT INTO Gringotes, é, galeões, estes valores.
Mas ID, presumivelmente, é uma chave única valor definido na tabela MySQL.
Então, se eu já tiver esse ID criado, então eu não posso inserir uma nova linha.
Então, se ele ainda não existir, então eu tenho que atualizá-lo.
No meio no branco.
>> AUDIÊNCIA: Então, inserir, atualizar, excluir, e selecionar, são aqueles todos disponíveis
localmente [inaudível]?
>> ZAMYLA CHAN: Então, inserir, atualizar, excluir e
selecionar são todas as consultas SQL.
Assim, sempre que você estiver usando SQL, você terá os disponíveis.
>> AUDIÊNCIA: Voltar para o quizzes passados ​​-
havia uma questão que lidava com se você tivesse uma tabela e queria
inserir os resultados dos testes em um e inserir seu nome para que ele não vai deixar você
[Inaudível] pontuação no teste do seu amigo.
Como você faria isso com a inserção?
>> ZAMYLA CHAN: Então, a pergunta foi sobre uma pergunta anterior a médio prazo.
Eu não estou ciente de que um que é agora.
Então, talvez mais tarde, se você quiser vir e me mostrar, então eu posso
certamente dar-lhe dicas.
Mas, falando de coisas inserção, como tomando nota de alguém quando você
não deve, vamos falar sobre Ataques de injeção SQL.
Assim, um ataque de injeção de SQL é essencialmente onde alguém toma
vantagem do baixo de segurança do caminho que está a tomar em dados.
>> Então, aqui, assim como em CS50 finanças, quando logado, podemos entrar em um
nome de usuário no formulário de login, caixa de texto em primeiro lugar, e
em seguida, digite uma senha.
Talvez o nosso código PHP pode parecer algo como este, onde $ username
é o nome de usuário e senha de pós-dados é a senha de pós-dados.
E então nós apenas executar a nossa consulta, por exemplo, OK, bem, a nossa consulta vai
escolha de nossos usuários, onde o nome de usuário é o
um que eles submetidos.
E a senha é a senha, o que significa que as senhas coincidem.
>> Agora, e se em vez de realmente apresentar uma senha real, como
12345 e adivinhando pinos que diz senha e tentando cortar seu
conta, e se em vez que apresentou esta.
Eles poderiam digitar talvez um palpite sobre uma senha.
E então eles iriam terminar a Citação em seguida, digite ou 1 = 1.
Isso seria andar diretamente para o SQL consultar para algo parecido com isto.
Selecione a partir de usuários onde username = dentes e senha
é igual lírio ou 1 = 1.
>> Assim, ou a senha tem estar correta ou 1 = 1,
que é sempre verdade.
Portanto, neste caso, basicamente, um usuário pode tirar proveito disso e faça o login
-se em corte e conta de alguém.
Então é por isso que queremos evitar alguém ter que fazer isso.
Mas, felizmente, a função de consulta passando os espaços reservados terá
cuidado com isso para você.
Além disso, você normalmente nunca quer para realmente enviar as senhas
si.
É por isso que hash ou criptografada los em CS50 finanças.
>> AUDIÊNCIA: O questionário passado conversei cerca de cordas de fuga mysql.
Será que temos que se preocupar com isso?
>> ZAMYLA CHAN: Essa é uma boa pergunta.
As seqüências de escape do MySQL é definitivamente um função que foi utilizada no nosso consulta.
Mas definitivamente olhar para isso.
Eu diria que é um jogo justo para saber que você precisa para chamar esse
funcionar em uma corda.
Sim, Belinda?
>> AUDIÊNCIA: Como você sabe quando é aspas simples ou duplas?
E também, eu me sinto como em palestra você mencionado algo sobre não ter
o [inaudível], ou uma coisa ou segunda aspas simples no final.
Eu acho que ele apontou em palestra que você deveria ter um apóstrofo
e depois não têm apóstrofos ou algo assim.
>> AUDIÊNCIA: [inaudível].
>> AUDIÊNCIA: A coisa é o último single Citação lá nessa segunda caixa
não deve estar lá.
[Inaudível]
Porque quando você levar esse último single citar fora e combinar estes para o conteúdo
onde a senha é, se você tem que consulta, não há uma única citação no
o fim já.
Você quer usar essa única citação como aquela que está virado para o um
[Inaudível].
Então, qual é, na verdade, em que o texto caixa não deve ter isso.
>> ZAMYLA CHAN: Eu vou mudar isso.
OK.
Se não houver qualquer dúvida, então eu vou passá-lo sobre a Joseph falar
sobre JavaScript, et cetera.
>> [Aplausos]
>> JOSEPH ONG: Então estamos executando um pouco para trás.
Então, se você tiver que sair, tudo bem.
Mas pedimos que você mantenha suas cabeças para baixo se você estiver no meio, para que
não bloquear a câmera e usar a saída de volta, se for preciso.
Eu sou Joseph pelo caminho.
Oi.
Teste, teste.
Dan, isso é bom?
Legal.
>> Assim, o vídeo também serão postados on-line para aqueles que
tem que sair agora.
Awkward.
OK.
Então revisão quiz.
Este é um gato.
Agora, JavaScript, que não é talvez aww como para alguns de vocês.
OK.
Então, isso é em primeiro lugar, lembrar da Zamyla.
Lembre-se que o PHP é executado no servidor.
E muitas vezes, vocês escreveram laços em PHP para imprimir HTML, certo?
Assim, uma vez que o código é executado, que Saída HTML que você imprima
é enviado para o usuário.
E quando isso acontece, não mais pode PHP ser executado, a menos que você recarregar a página, de
curso, que reexecutes o PHP.
Mas uma vez que você imprimir esse HTML, você não pode ir a qualquer lugar.
>> Assim que o HTML é enviado para o usuário, qual é o navegador mais aqui, onde
Milo está usando o computador.
E tão bem, há várias coisas uma vez que enviar HTML para o usuário.
Às vezes queremos fazer algo como quando você clica em alguma coisa, nós queremos
caixas de alerta de pop-up, esses tipos de interações, como quando você pressiona o
chave, quando você clica em alguma coisa na página, eu quero que algo aconteça.
Bem, você não pode executar novamente PHP código, uma vez que o HTML está definido.
Então, como você faz isso?
>> Nós introduzimos uma nova linguagem chamada JavaScript, que roda no navegador
que permite que você faça coisas para HTML depois de receber
los a partir do servidor.
E é por isso que chamamos um do lado do cliente linguagem de programação.
Ele funciona em seu computador -
o cliente.
Qualquer dúvida sobre isso até agora?
Esse paradigma faz sentido para as pessoas?
OK.
Boa.
Tudo bem.
Então a primeira coisa a se notar é JavaScript não é PHP.
>> Eles têm uma sintaxe diferente, que nós vamos entrar.
E eles têm usos muito diferentes.
JavaScript, novamente, para o seu navegador, para o cliente.
Server é executado em algum lugar de outra pessoa computador que envia informações
para você, correto?
Então, se nós lhes pedimos para escrever código PHP em uma pergunta do exame, não escreva
JavaScript e vice-versa.
Você só vai perder pontos, e ele não vai estar certo.
>> Então, vamos entrar em algum diferenças de sintaxe -
JavaScript à esquerda e PHP à direita.
A primeira coisa que você vai notar com JavaScript, declaramos variáveis ​​com
a palavra-chave var -
V-A-R. PHP usou o sinal de dólar, Zamyla como discutido anteriormente.
Se você quiser declarar um associativa série, vemos a sintaxe familiar em
o lado direito com o PHP.
No lado esquerdo, em vez você usar chaves.
E então suas chaves estão à esquerda.
Então você tem dois pontos.
E então você tem os valores que você deseja.
>> Então é assim que você faria isso em PHP no lado direito com a segunda
linha que começa em Milo.
E é assim que você faria isso na lado esquerdo em JavaScript, se você quiser
o que chamamos de um objeto.
E objetos em JavaScript são apenas arrays associativos.
Então, se você quiser acessar campos, em PHP você usa esta sintaxe suporte.
E desta forma, você pode transferir este campo para Lauren proprietário.
>> Bem, em JavaScript, se alguém quiser acessar um campo e alterá-lo, você pode
usar a sintaxe de ponto.
Você também pode usar a sintaxe suporte.
Mas você não pode usar o sintaxe de ponto em PHP.
Isso não vai funcionar.
Ele só funciona em PHP.
E, finalmente, imprimir as coisas para o console, você usa console.log, que
Vocês usam muito em pset8.
Pode console.log que.
>> Se você quiser imprimir uma matriz em PHP, você tem que usar impressão r.
E no lado direito, você vê Eu mistura concatenação lá.
Alguém perguntou antes.
Eu uso um plus em JavaScript.
Se eu quiser concatenar algo em PHP, eu uso o ponto.
Estes são diferentes.
Se você estiver escrevendo código PHP, não use um plus.
Se você estiver escrevendo JavaScript código, não escreva um ponto.
Será errado.
E você vai ficar triste.
>> Então, as diferenças de sintaxe.
Conheça a sua sintaxe, porque se você tem a escrever uma pergunta e você usar a sintaxe
a partir da linguagem errada, ele não vai funcionar.
E vai ser errado.
Então vamos falar sobre algum controle fluir diferenças, como você usa
laços em cada uma delas.
Zamyla passou por cima da lateral direita.
Coisas do lado direito deve estar familiarizado.
Vamos olhar no lado esquerdo.
>> Quando você usa o loop n em JavaScript, a variável de loop, var i lá,
loop sobre as chaves do array.
Então você vê o nome, casa, e papel.
Se eu console.log i, recebo nome, casa, e papel.
Essas são as chaves.
Em JavaScript, um loop foreach vai sobre os valores dessa matriz.
Então você percebe que eles são ambos i.
Mas, aqui no lado do PHP, ela imprime fora Milo, CS50 e Mascote.
Esses são os valores em PHP.
>> Então, essas são como esses dois são diferentes nas diferentes línguas.
Então, se você estiver usando um foreach loop, não pense que ele
dá-lhe as chaves.
E se você estiver usando um loop for n, não supor que você obtém os valores.
Será que isso faz sentido até agora?
O próximo slide vai mostrar-lhe como você pode acessar o oposto em
cada um deles.
>> Bem, se você tem a chave em JavaScript e você quer que o valor para fora,
você acabou de índice para a matriz com isso.
Então, Milo de eu vou conseguir o que você quer - os valores.
Há essa sintaxe diferente em PHP.
Se você realmente quer saber, eu não acho que já mostrei para você ainda.
Mas se você estiver interessado, você pode usar esta sintaxe adicional à direita
lado que vai realmente deixá-lo começar a chaves em PHP quando você está usando um
loop foreach.
Então, basta um pouco de trivia se você estiver interessado.
>> Então, isso é apenas para demonstrar a diferenças entre estes dois loops.
Não misturá-las quando você está programação de uma pergunta.
Qualquer dúvida sobre isso.
Legal.
Tudo bem.
JavaScript objetos.
Eu falei sobre eles.
Eles são como matrizes associativas.
A única coisa que eu gostaria que você notar aqui é que um valor de uma associativo
matriz pode ser qualquer coisa em JavaScript.
>> Ele pode até mesmo ser uma função, como lá.
Eu tenho uma função que é um valor de uma chave.
E se eu quiser chamar essa função, Eu só acessar casca.
E então eu coloquei os parênteses depois disso.
E isso funciona.
Então, alguma dúvida?
Não?
OK.
Boa.
JavaScript, como PHP, é vagamente digitado.
O que significa isso?
>> Ela tem os tipos.
Mas quando você declarar um JavaScript variável, você diz var i.
Você não pode dizer isso.
Isso não é uma coisa.
Você acabou de dizer que é uma variável.
E então JavaScript irá lidar com o tipos sob o capô para você.
Podemos converter livremente entre tipos por causa disso.
Então eu começa como um número neste caso.
E então eu tenho uma string.
E acrescento eu a ele.
E eu atribuí-la de volta para i.
>> Então, em que a primeira linha, i é o número.
Na segunda linha, eu agora se torna um cadeia depois de eu fazer a mudança.
E aqui, estou apenas concatenando esse número na string.
Então você vê que mesmo que eu era um inteiro na primeira parte, é uma espécie
de como ser convertido para um corda e, em seguida, serem adicionados
para essa seqüência Olá.
E é isso que eu quero dizer pela digitação solto.
Isso é que você converter entre tipos muito facilmente.
E não lançar avisos para você como C faz.
>> Então eu agora contém Olá 123 para a string.
Avançar.
Podemos também comparar livremente entre os tipos.
Então, se você acabou de usar ==, muito como em PHP, JavaScript
faz uma coisa semelhante.
A corda 123 é o mesmo que o número 123 quando você usa dois iguais.
Quando utilizados três iguais, também quer ter certeza de que
o tipo é o mesmo.
Então, porque isso é uma cadeia e que é um número, apesar de serem ambos
123, quando você usa o triplo é igual, você começa falso.
No duplo equivale a caso, você começa verdade, porque dois iguais não
preocupam com tipo.
Três iguais se preocupa com tipo.
Dúvidas?
OK.
>> E outra coisa sobre JavaScript escopo é uma espécie de mundial, a menos que você é
numa função.
E ele funciona da mesma maneira em PHP na verdade.
Então, vamos passar por este exemplo.
Eu defini i a 999.
E então eu vou para este loop for.
Então, se eu estou imprimindo i neste para loop, espero 0, 1, 2, 3, 4.
Recebo a i = 4.
Ele incrementa i agora a 5 no No final do ciclo de.
E em seguida, ele sai do loop, porque ele não cumprir a
condicionar mais.
>> O que você acha que o próximo console.log imprime?
Então, isso é o que ele faria em C. Em C, porque se você tem como var i fora
e você tem var i dentro de um loop, como um loop, em seguida, torna-se de tal forma que
ele está no escopo de que os dois i de são diferentes.
Em JavaScript, ela só vai tratá-lo como o mesmo i.
Recebo 5, porque esse era o valor depois que ele saiu fora do circuito.
Então, aqueles que são os mesmos i.
Será que isso faz sentido?
>> Bem, faz sentido a partir de um ponto de vista JavaScript.
Mas o mesmo paradigma não faz transitar para C. Eles têm
diferentes regras de escopo.
Sim.
>> AUDIÊNCIA: [inaudível]
fora da função [inaudível]?
>> JOSEPH ONG: Então, fora do qual função?
Então, eu vou chegar a isso em apenas um segundo.
Então chamamos foo (i).
Isto passa i em foo, incrementos e, em seguida registra-lo.
Por isso, foi 5.
Assim torna-se 6.
Mas o que eu estou falando é que i, em que a função.
Porque é um parâmetro, é escopo para essa função.
Então, quando eu realmente sair dessa função, está indo agora para ir
de volta para o velho eu.
Que eu só porque tem como escopo ele está em uma função.
E nós temos alcance e funções.
Mas não temos escopo fora de funções no JavaScript.
Será que isso faz sentido?
Sim.
Pergunta.
>> AUDIÊNCIA: Same [inaudível]?
>> JOSEPH ONG: Então, sim.
No PHP, é o mesmo tipo de coisa.
Há uma ligeira sutileza na verdade.
Mas você pode me perguntar sobre que, após a revisão.
Você realmente não precisa saber que sutileza para o quiz.
Para todos os efeitos, como variáveis, global e PHP, a menos que
eles estão em uma função, mesmo coisa em JavaScript.
Sim.
>> AUDIÊNCIA: Por que isso é permitido em JavaScript e em nenhum outro lugar?
>> JOSEPH ONG: Então por que é permitido em JavaScript e não em C?
É só quem veio com JavaScript decidiu que este era OK em
JavaScript.
Então é como uma linguagem de programação convenção, como diríamos.
Sim.
>> AUDIÊNCIA: Então, por que ir 6-5?
>> JOSEPH ONG: Assim foi 6-5, porque quando eu passei eu em foo, que
i dentro de foo agora é delimitado para foo, porque existe no âmbito funções
JavaScript.
Mas uma vez eu sair daqui, porque foi delimitado para a função, eu sou apenas
usando o i regular que estava dentro o resto do fluxo de controle.
Faz sentido?
Posso seguir em frente?
Tudo bem.
Legal.
>> A aceitação desta é objetos são passados ​​por referência.
Sabe quando você passa uma matriz em C você poderia
na verdade, modificar a matriz?
É a mesma coisa em JavaScript.
Se eu passar um objeto, neste caso, eu Milo passou para esta função catify.
Milo começa.
Seu nome é Milo Banana.
Eu passar esse objeto para uma função porque é um objeto, um associativa
array em JavaScript.
>> Quando eu executar uma operação nessa função, ele irá
realmente mudar o objeto.
Então, isso só vai acontecer por objetos em JavaScript, assim como acontece
para matrizes dentro do nome de C. Então Milo vai realmente se tornar gato agora.
Será que isso faz sentido?
Então, isso só funciona para objetos.
Os objetos são passados ​​por referência.
Sim.
>> AUDIÊNCIA: Então você está dizendo que em contraste com i variável.
>> JOSEPH ONG: Yeah.
Qual variável i era apenas um número, certo?
É como no C, quando você passar um inteiro um, ele faz uma cópia.
E quando você passar um array, ele realmente altera a matriz real em
C. A mesma coisa acontece com JavaScript neste caso.
Tudo bem.
E no próximo, Milo é triste, porque ele é agora um gato.
Isso foi realmente Milo depois alguma viagem ao veterinário.
>> Então, como vamos usar JavaScript em uma página da web?
Podemos incluí-lo.
Este é o código HTML com as tags de strip.
Então, eu tenho marcas tira de lá.
E então eu coloquei um pouco de JavaScript código dentro das tags de script.
E então ele executa isso.
Quando eu apenas fazê-lo assim, é chamado JavaScript embutido.
É uma espécie de confuso, porque o JavaScript é realmente no HTML.
>> A melhor maneira de fazer isso, muito mais agradável, é escrever o seu JavaScript em um
arquivo externo e, em seguida, fornecer a tag script com uma fonte.
E isso vai para o arquivo JavaScript e ler o código JavaScript a partir de
esse arquivo em seu lugar.
E desta forma, você não tem um monte de JavaScript no início de sua
Arquivo HTML, o que torna realmente confuso.
Você acabou de colocá-lo em outro lugar.
E então ele vai lê-lo de lá.
Será que isso faz sentido?
>> Assuntos colocação.
Neste caso em particular, o script é antes o corpo.
Então, quando eu executar isso, não há nada no corpo ainda.
Talvez isso vai fazer um pouco mais sentir quando eu mostrar esta próxima parte.
Neste caso, o script vem após o div.
Assim, o div realmente aparece na página primeiro.
Aqui mesmo neste pequeno círculo vermelho, você vê o texto aparece.
E então o alerta aparece.
>> No primeiro caso, porque o script foi antes da div, o
alerta aparece em primeiro lugar.
E então o div aparece depois você fechar a caixa.
Assim, a execução importa.
Então, vamos manter isso em mente.
Isto será importante daqui a pouco.
OK.
Tão bem, como é que você espere até que o página inteira é carregada, então antes de você
executar algum código?
Nós vamos chegar a esta um pouco pouco mais tarde também.
Mas apenas manter este posicionamento assuntos em mente para quando
vir para outro slide.
>> Então nós começamos a DOM agora.
E o que é DOM?
Então, se você olhar para o código HTML, é apenas um monte de texto na tela.
Então como é que sabe que o JavaScript este é um elemento HTML?
Então, nós temos que ter um pouco de memória representação desta
estrutura que temos.
E sempre que temos isto em memória representação em JavaScript, que chamamos
que o DOM.
E isso é apenas uma maneira que as pessoas decidiram que devemos representar este
Estrutura HTML como.
>> E o que isso DOM parece?
Bem, em representação da memória, tomarmos este texto.
E nós transformá-lo em memória representação.
Então este é o HTML.
Então, primeiro descobrir que cada DOM árvore tem um documento.
Parece uma árvore.
E o documento contém o código HTML tag, na verdade, tudo o que
dentro deste momento.
A tag HTML tem dois filhos.
Ele tem uma cabeça.
Essa cabeça, se você olhar para o recuo lá com a forma como ele está estruturado
entre as tags íntimos, cabeça tem um filho.
A criança é o título.
Exatamente.
>> Agora, nós temos uma criança corpo.
E, em seguida, que tem um corpo criança chamada família.
E que a família tem três filhos -
o mais velho, meio e mais jovem.
Então, você deve saber como desenhar um diagrama assim quando pedimos-lhe como
para desenhar um diagrama quando damos você o HTML do lado esquerdo.
Saiba como produzir a árvore DOM.
E dentro dessas coisas, há apenas algum texto, que eu representava
como pequenas caixas.
>> Será que esta estrutura de árvore DOM fazer sentido eo que o DOM é?
Então o que o p representa?
Por aqui, o p lá em que representa uma marcação
parágrafo tag em HTML.
Assim, você pode procurá-lo.
Mas isso significa apenas que é algum espaço para algum texto.
E tem algum estilo CSS padrão, porque é uma marca de parágrafo.
Mas realmente não se preocupar com que parte muito.
Só sei que é um espaço reservado para algum texto.
Sim.
Pergunta?
Sim.
>> AUDIÊNCIA: Você acabou de mencionar CSS.
A família de hash eo hash tudo isso é, basicamente,
representando IDs em CSS?
>> JOSEPH ONG: Sim, exatamente.
Vou pegar o que esses hashes quer dizer em um segundo.
Quando Angela foi até CSS, ela falou sobre seletores CSS.
Estes são os seletores CSS que ela estava falando.
Sim, Rob?
>> ROB BOWDEN: Eu também gostaria de comentar DOM que dentro da tag title
é também um nó de texto.
>> JOSEPH ONG: Certo.
Então, dentro da tag title, Eu tenho alguns DOM texto.
Então, realmente, este título deve ter como um pequena caixa que vem fora dele também.
Mas isso realmente não importa demasiado neste caso.
Nós realmente não se importam com nós de texto, como lhes chamamos, muito.
OK, o que fazemos.
Aparentemente, o que fazemos.
E eu vou consertar isso quando Eu enviá-lo novamente.
Será que isso faz sentido?
>> Então, como vamos trabalhar com o DOM?
Sempre que você lidar com o DOM em JavaScript, existem dois passos.
Você seleciona um elemento DOM.
E então você faz as coisas para ele.
Portanto, neste caso, de forma abstrata, eu tenho seleccionado o elemento do meio.
E, em seguida, um exemplo de fazer coisas para isso seria alterando o texto.
Isso costumava ser Bob.
Agora, o que eu fiz a ele foi que eu mudei Bob Milo neste caso.
>> Então, como é que vamos realmente fazer isso?
Como é que vamos fazer a seleção?
E como nós não o fazendo coisas para a coisa, uma vez que tenha tomado?
Bem, a maneira que vocês têm aprendido nesta classe é usando algo que
chamado jQuery.
Então o que é jQuery?
jQuery é uma biblioteca que faz JavaScript mais fácil de escrever.
Então, alguém teve o tempo e escreveu jQuery.
>> jQuery é escrito em JavaScript.
E então, porque eles fizeram isso, agora tem um monte de funções que
podemos usar que fazem a nossa vive realmente fácil.
Então, quais são algumas das coisas que ele faz?
Faz selecionar elementos mais fácil.
Faz mudando HTML, adicionar classes mais fácil.
Faz Ajax mais fácil.
Nós vamos chegar a isso em um segundo.
>> E é análogo a bibliotecas C.
Então você incluir string.h, você se strlen.
Você começa strcpy, todas essas coisas.
Quando você incluir jQuery, você tem bom maneiras de selecionar elementos para mudança
coisas, et cetera.
Você começa a funcionalidade extra que O JavaScript não lhe dar.
Então jQuery não é JavaScript.
jQuery é uma biblioteca que está escrito em JavaScript que faz JavaScript
mais fácil de escrever.
>> Então jQuery não é uma programação língua.
Mas é JavaScript.
fazer.
Claro que você começar sua terminologia correta.
Alguma pergunta?
Sim.
Isso é uma pergunta?
Tudo bem.
Assim como você usar jQuery?
Bem, quando você está escrevendo algum O código JavaScript e você incluir um
jQuery na parte superior do seu arquivo como um arquivo de script, você pode usar o sinal de dólar
agora para obter acesso a jQuery.
E isso é diferente de o cifrão no PHP.
>> É o mesmo símbolo que digite no teclado.
Mas eles significam coisas muito diferentes.
Sinal de dólar em PHP significa que esta É assim que eu declarar uma variável.
Em JavaScript, quando você incluiu jQuery, ele representa jQuery.
Portanto, manter isso em mente.
Então, como podemos selecionar elementos DOM?
Bem, quando você faz o feio JavaScript forma, você acessar o
documento variável global.
E então você começa elemento por família ID.
Isto é realmente longa e prolixo e não muito agradável.
>> Ou você pode obter todos os elementos que são uma marca p.
Isso funciona também em JavaScript.
Mas nós nunca realmente mostrou você a sintaxe muito.
O que nós mostramos é jQuery.
Então, todo esse seletor lá em cima que foi expressa em JavaScript só fica
condensado para este muito agradável dólar assinar família hashtag.
E $ p, apenas onde é assim.
Se você quiser selecionar todas as tags p dentro de uma família, nós colocamos um espaço
entre os dois.
E agora, nós temos todo o p etiquetas dentro de uma família.
>> E parece familiar?
Bem, Angela falou sobre Seletores CSS.
Dê-me um segundo.
E assim, a fim de selecionar um elemento, você acabou de usar a mesma coisa que você
faria com um seletor CSS.
Se você colocar um hash na frente disso, ele seleciona por ID.
Um ponto seleciona por classes.
Se você só tem a coisa sem hashes ou pontos, ele seleciona essas tags.
Perguntas.
Sim?
>> AUDIÊNCIA: Quando usamos ponto em nossa HTML, é que não jQuery?
>> JOSEPH ONG: Dot em nosso HTML é uma coisa JavaScript.
Não é uma coisa jQuery.
A maneira que vocês aprenderam com jQuery é usar. html.
E então você passou o que quer o HTML vai ser.
Então, eu vou chegar a isso em apenas uma segunda, na verdade.
Então, como vamos fazer coisas para elemento uma vez que o selecionou?
Então, isso é um exemplo de selecionar um elemento.
Então, agora, nós queremos fazer coisas para ele.
>> Portanto, neste caso, deixe-me voltar para o slide anterior.
Foi Bob antes.
E eu quero mudar isso dentro de HTML para Milo.
Então eu chamar a função HTML a partir do elemento.
Essa função é HTML um método de elemento.
E então eu dar-lhe o que Eu quero que o HTML seja.
E ele só substitui o que está dentro de que tag com o que eu dou.
Sim.
Pergunta?
>> AUDIÊNCIA: A hashtag é usado apenas para o jQuery.
[Inaudível]
que não iria usar isso.
>> JOSEPH ONG: Sim, exatamente.
Mas não se preocupe muito JavaScript sobre puros.
Eu só quero que vocês se concentrar em como você faria isso com jQuery, porque
que vai ser o importante parte no quiz.
Certo.
Exatamente.
Então você vê que hashtag, de modo que corresponde a selecionar o elemento com
meio ID por causa dessa hashtag.
Hashtag significa ID.
E este elemento tem um ID de meio.
Então esse é o elemento que selecionar.
>> AUDIÊNCIA: [inaudível].
cifrão hashtag [inaudível]?
>> JOSEPH ONG: Então não.
A questão é que você pode usar. Valor.
E. Valor só funciona em elementos que são insumos.
Em jQuery, seria . Val, não o valor..
Então, eu vou chegar a um pequeno exemplo que demonstra tudo isso em combinação
em um segundo.
Mas eu acho que isso serve um pequeno trecho faz sentido para as pessoas até o momento.
Quer mudar o HTML, chamar o método HTML.
Sim.
>> AUDIÊNCIA: Você pode explicar o método de novo?
>> JOSEPH ONG: Então, um método é apenas um função que pertence a um, na presente
caso, um desses elementos DOM, porque você vê que eu
seleccionado o primeiro elemento.
Na verdade, deixe-me usar o mouse.
Selecionei o elemento primeiro.
E então eu chamei este HTML função que ele tinha.
E porque essa função pertence à esta coisa, nós chamamos de um método.
Isso é apenas um nome fantasia para ele.
Diga isso de novo.
Então lembre-se, selecionamos o elemento agora.
E nós colocá-lo dentro de o elemento variável.
Corrija?
>> Assim, quando queremos mudar o código HTML em dentro, porque era Bob antes, você
quer mudar o texto para Milo.
Então chamamos HTML.
E nós dizemos que o que o HTML dentro que elemento deve ser agora.
E assim muda para Milo, porque eu dei-lhe Milo.
>> AUDIÊNCIA: Então, eles estão trabalhando juntos.
[Inaudível]
>> JOSEPH ONG: Sim, sim.
Eles estão trabalhando juntos.
Então um deles seleciona o primeiro elemento.
E a segunda se faz algo a ele.
Sim.
>> AUDIÊNCIA: [inaudível].
Se este método é diferente em HTML você tem o método igual real.
>> JOSEPH ONG: Yeah.
Isto é um método diferente.
E podemos cobrir que em apenas um segundo quando chegarmos a um exemplo.
Eu quero ter certeza de que podemos acelerar porque estamos correndo contra o tempo.
Mas nós funcionamos forma ao longo do tempo agora.
OK.
Legal.
Então, se você quiser adicionar uma classe, não há também um método de classe add.
Este é apenas um exemplo do que você pode fazer com jQuery.
Isso só acrescenta uma classe.
>> Se você quiser removê-lo, você pode chamar de remoção.
Essa é apenas mais uma coisa que você pode fazer.
Assim, mais exemplos de coisas que você pode fazer.
Então, eu posso simplesmente colocá-lo em parte superior assim?
O mais jovem de remoção.
Se eu executar esse JavaScript no o topo do meu arquivo, será que funciona?
Certo.
Porque meio ainda não existe.
Então, isso não vai funcionar.
Ordem de execução.
Ele vai para o topo pela primeira vez.
O quê?
>> AUDIÊNCIA: O mais jovem ainda não existe?
>> JOSEPH ONG: Yeah.
O mais jovem ainda não existe.
Exatamente.
>> AUDIÊNCIA: Você disse meio.
>> JOSEPH ONG: Desculpe.
O mais jovem ainda não existe.
E a outra coisa é que eu não tenho incluído o jQuery
arquivo pedir src script.
Então, isso não vai funcionar.
Na verdade, eu não fiz isso em o próximo slide, que é
supostamente para corrigir o que quer.
Mas a forma como fazemos isso é JavaScript é orientado a eventos.
Então, o que fazemos é usar um evento Handler para fazer isso acontecer.
E assim eu selecionar o documento definido em primeiro lugar.
Eu digo, OK, quando o documento é pronto, deixe-me executar uma função.
Então, isso é tudo o que os meios de sintaxe.
>> Selecionei o documento.
Agora, quando o documento é pronto, execute a função.
E assim por aqui quando o documento é pronto, o que significa que todo o HTML tem
carregado, então eu executar a função que remove esse elemento.
E agora, quando eu executar esta função que passei em pronto, estou
garantido que todo o código HTML na página vai existir em primeiro lugar.
Sim.
Pergunta?
>> AUDIÊNCIA: Qual é a palavra-chave do evento dentro da função?
>> JOSEPH ONG: Então, a palavra-chave do evento na função é apenas um parâmetro que
é passado para a função para qualquer evento.
É apenas algo que você obter gratuitamente.
Quando você estiver usando manipuladores de chave em pset8, esse evento poderia dizer-lhe, por
exemplo, qual é a chave que você pressionou.
Neste caso, para um evento pronto, na verdade não é super útil.
Mas, para um evento de tecla pressionada, é mais útil, porque você começa a conhecer o que
tecla pressionada pela chave acessando código fora esse objeto de evento.
Corrija?
Será que isso faz sentido?
OK.
Sim.
Pergunta?
>> AUDIÊNCIA: Então, você pode colocar o tag script mais para baixo?
>> JOSEPH ONG: Então, sim.
Você poderia colocar o script marcar mais para baixo.
Mas, então, ele só se torna realmente confuso.
E nós gostamos de centralizar todas as do nosso código em um só lugar.
E isso vai nos permitir fazer isso.
Lembre-se antes eu disse que há um agradável maneira de assegurar que os elementos são
na página antes de executar o código?
E esta é apenas uma maneira agradável você conseguir isso.
>> AUDIÊNCIA: [inaudível].
>> JOSEPH ONG: Yeah.
Você ainda teria que, certo?
Porque lembre-se, você incluiu o arquivo no topo da página.
Então, ele vai executar antes de você chegar ao fundo da página.
OK.
Assim, você também pode adicionar um diferente tipo de manipulador de eventos.
Este apenas processa cliques.
Quando clico em mais jovem, então ele irá aparecer com um alerta.
Este é apenas um diferente tipo de evento.
Ao contrário do evento pronto, agora você usar o evento click quando você recebe
clica em um elemento.
>> E assim, neste caso, lembre-se, o clique manipulador está anexado a mais nova.
Por isso, só acontece quando Eu clico no mais novo.
E na outra, o evento pronto foi anexado ao documento.
Por isso, espera que o documento para ficar pronto.
Faz sentido?
Eu acho que eu posso seguir em frente.
Sim.
Pergunta?
>> AUDIÊNCIA: [inaudível].
nesse caso você use [inaudível].
>> JOSEPH ONG: Ah, sim, porque neste caso, eu tenho que esperar para os mais novos
elemento que aparece na primeira tela antes que eu possa anexar um manipulador de cliques para
ele, que é por isso que eu colocá-lo dentro de um documento pronto.
OK.
E no próximo, de modo que este é um grande exemplo de como você combinar tudo.
Este é apenas um exemplo de validação de formulário você já viu em palestra.
Então, levá-lo passo a passo como você passar por isso.
E será totalmente OK.
Apenas leia de cima para baixo.
>> Eu tenho um formulário na parte inferior.
Quando o documento estiver pronto, eu anexar um enviar manipulador à forma, de modo que
quando eu enviar o formulário, recebo os valores dentro de cada uma dessas entradas.
E eu verificar se ele está em branco.
Se é branco, eu retornar falso, porque Eu não quero enviar o formulário,
porque a forma está errada.
Se a senha estiver em branco ou é menos de oito caracteres, não apresentar
a forma, porque isso também é errado.
Eo falso retorno apenas impede a forma de apresentação e
indo para uma nova página.
>> E, esperamos, isso faz sentido.
Eu acho que vocês devem percorrer Neste passo a passo código em seu próprio país.
E uma vez que você entender o que a seleção elementos e fazer coisas para ele
realmente implica, isso fará com que muito sentido para você.
Sim?
>> AUDIÊNCIA: O que faz o name = nome significa?
>> JOSEPH ONG: Então o nome = nome de usuário e name = senha significa apenas olhar para o
atributo de qualquer você está selecionando.
E, em seguida, que tem de corresponder.
Então vamos para o registro.
E então olhamos para todas as entradas e registro.
E, então, escolher aquele em que o nome atributo é igual ao nome de usuário.
Assim que o primeiro seletor apenas seleciona a entrada de nome de usuário.
E que segundo seletor só seleciona a senha de uso único, porque aqueles têm
seus atributos nome definido como o que eles deveriam ser.
Pergunta?
>> AUDIÊNCIA: No envio, como é que o parte inferior resolver a parte de cima?
>> JOSEPH ONG: Então é porque do manipulador de eventos.
Então, nós estamos à espera de um evento de apresentação que é demitido do formulário.
E isso é tudo o que é enviar.
Por que eu chamo apresentar lá em cima?
Diz, quando o formulário é enviado, Recebo um evento de enviar.
Então deixe-me que interceptar e em seguida, executar esse código em seu lugar.
Sim?
>> AUDIÊNCIA: Por que você tem ter evento função?
Por que você não pode simplesmente [inaudível]?
>> JOSEPH ONG: Porque em JavaScript, você tem que declarar as funções.
É assim que ele funciona em JavaScript.
Você tem que dizer que vai para executar uma função.
Então você está dizendo que você está esperando uma função aqui em vez de
apenas chaves.
>> AUDIÊNCIA: E a função é tudo o que se segue?
>> JOSEPH ONG: Yeah.
A função é o que está dentro as chaves após
a palavra-chave função.
Sim?
>> AUDIÊNCIA: [inaudível].
>> JOSEPH ONG: Para enviar?
>> AUDIÊNCIA: Não, para a função sem o evento.
>> JOSEPH ONG: Yeah.
Assim, sem o evento, você pode ter isso.
Se você não precisa do evento, então você pode simplesmente omiti-lo.
Mas se você fizer isso, então você basta colocá-lo lá.
Sim.
Pergunta rápida?
>> AUDIÊNCIA: [inaudível].
>> JOSEPH ONG: Yeah.
Porque o que você precisa fazer, o document.ready apenas diz esperar por tudo
o código HTML na página para carregar primeiro.
E, geralmente, você quer que seus elementos no local antes de executar qualquer código.
Tudo bem.
Temos que ir para o Ajax.
Nós não temos muito tempo.
Então, prós e contras.
JavaScript é tentativa mais fácil escrever com jQuery.
Mas jQuery é uma espécie de lento.
>> É como o PHP é mais lento do que C, porque ele é interpretado.
E jQuery é um pouco mais lento do que JavaScript, porque ele faz um monte de
coisas sob o capô.
E por isso, se você estiver usando jQuery, é apenas um pouco mais lento do que
JavaScript, embora dá-lhe agradável elegância.
E, finalmente, o Ajax.
Até agora, com o Ajax, você ainda não viu Ajax em termos de pset7 ainda, porque
quando você faz, você envia um formulário para cotação.
Ele carrega uma nova página.
Então você começa este grande clarão branco na página enquanto que
cargas segunda página, correto?
>> Seria muito bom se você não tem esse flash.
Como o Facebook, se você acabou de se deslocar para no fundo, ele adiciona novos conteúdos
sem atualizar a página inteira.
Então algo como isso seria bom.
Este é o código JavaScript no lado esquerdo.
Você fica com o que está dentro do que a entrada.
Você começa a Informação da do Yahoo!
E então você fazer uma grande cadeia que diz: OK, esta é a mensagem que eu quero
para mostrar na tela.
E então você colocar essa mensagem dentro de algum elemento HTML que recebe
exibida na tela.
>> Então, isso é tudo o que está acontecendo aqui.
Então, basicamente, porque isso é tudo JavaScript e você não precisa correr
mais PHP, esta irá certificar-se que a página não atualizar.
Portanto, esta é apenas uma idéia abstrata que eu estou dizendo aqui, por enquanto.
A idéia abstrata é que se você fizer isso tudo em JavaScript, você não tem um
atualização da página.
Mas como você realmente fazer isso?
>> Bem, na verdade, vamos falar sobre um problema com este primeiro.
Um problema é em JavaScript, execução é síncrona.
Então você tem que esperar por um linha para terminar antes de você
executar a próxima linha.
E se eu estou indo para o Yahoo!, e seus servidores são muito lento, e
ele leva três segundos para me devolva essa informação estoque?
Quando eu bati essa linha de preço, se o execução é síncrono, como é por
padrão, o que só vai fazer é o seu browser vai parar para
Três segundos.
E você não vai ser capaz de fazer nada enquanto ele recebe os dados.
Vai ser congelado.
>> E isso é ruim.
Você não quer que um usuário tem uma página web congelado.
Corrija?
Isso é apenas ruim.
Todo mundo concorda?
Se você está navegando no Facebook e congela e você não pode fazer nada, você
ficar muito frustrado.
Então a solução é que fazemos algo assíncrona vez.
Então, tudo isso diz assíncrona é, eu vou pedir a este
URL para alguns dados.
E então eu vou continuar.
Eu estou indo só para manter a execução qualquer código que foi depois disso.
>> E então sempre que os dados estão prontos, então eu vou processá-lo.
Isso é tudo o que está dizendo.
>> AUDIÊNCIA: Ajax só faz assíncrono código?
>> JOSEPH ONG: É um assíncrono forma de Buscando dados.
Assim, a primeira coisa sobre o Ajax é ele me permite obter dados
a partir de um site externo.
E a segunda coisa é que torna-se que a minha página não parar enquanto estou
buscar esses dados.
Essa é a parte assíncrona do mesmo.
Porque ele vai em outro lugar, porque eu digo que eu continue enquanto
é buscar esses dados, que torna assíncrona.
Eu mantenho a execução.
>> Portanto, manter isso assíncrona idéia em mente.
E eu vou te mostrar o que é a diferença.
A versão síncrona é, no lado esquerdo.
A versão assíncrona é, no lado direito.
Olhe para os números para ver qual etapas correspondem ao que
executa em cada linha.
Lá, o alerta aparece em primeiro lugar.
Porque obter informações estoque do Yahoo!
leva três segundos, barracas durante três segundos.
E, então, alerta o preço depois desses três segundos.
>> Então, agora, que os shows de alerta se naquela época -
três segundo pol
E então ele alerta por depois disso.
Então, ele só vai passo a passo.
É como o que vocês aceitaria, correto?
Com a execução assíncrona, você alerta em primeiro lugar.
Então você vai para fora para este URL.
E você diz, eu vou basta perguntar para os dados.
E então eu vou processá-lo mais tarde.
Portanto, imediatamente executa o próxima linha depois que eu que fazer
solicitação assíncrona.
>> Então, um 0,001 segundo, você vê oi alerta.
Executar essa função, bye alerta.
E porque eu fiz uma promessa que eu iria processar os dados mais tarde, o
acontece é que, quando os dados vem de volta três segundo mais tarde, depois que eu corro
função que eu tenho lá.
Sim?
>> AUDIÊNCIA: Você poderia especificar ou esclarecer o que significa Ajax?
>> JOSEPH ONG: Então Ajax é uma forma que se eu precisam de dados quando eu estou em um site e eu
não quer atualizar a página, então Eu uso essa tecnologia chamada Ajax.
Isso só significa, essencialmente, ir buscar dados de outro site.
E fazê-lo de uma forma que apenas não parar minha página web.
>> AUDIÊNCIA: Assim é que uma inerente parte de JavaScript ou jQuery?
>> JOSEPH ONG: Então, alguém escreveu uma maneira de fazer isso em JavaScript muito tempo atrás.
Em um ponto, ele não existia.
E então alguém inventou esta técnica para permitir que as pessoas a solicitar esses dados
desta forma.
E eles escreveram algumas coisas para fazer isso por você.
E jQuery apenas lhe dá esta muito agradável maneira de fazê-lo
com esse $. obter função.
pergunta?
Eu posso responder a perguntas sobre Ajax tarde demais.
Eu vou estar aqui.
>> Por isso, vamos nos buscar dados sem atualizar a página.
E vamos nós fazer isso em de forma assíncrona que
não congelar a página.
Por muito tempo, não leu, se isso explicação era muito longo para você.
Então, finalmente, local cruz ataques de script.
Vimos isso com Zamyla.
Se em meu banco de dados alguém tem este nome, o que é essa tag script, e eu
tem algum código na minha página que imprime os nomes das pessoas em uma fila, ou eu tenho
algum código JavaScript que insere este nome para a página,
HTML que é produzido?
Bem, eu imprimir a tag HTML.
Eu imprimir todas essas tags.
>> Eu chegar à parte onde eu sou impressão sair com meus amigos.
Imprimo Lauren fora.
Ele imprimir Milo fora.
E então o meu nome no banco de dados é pós roteiro
status do Facebook que não faz jus.
Porque eu inseriu esta na página porque parece que JavaScript, quando
esta página é enviada para o usuário, ele é executado como JavaScript.
E por isso este é o que chamamos de ataque cross-site scripting.
Alguém coloca a informação malicioso seu banco de dados, que podem corresponder a
alguma corda adicional ou alguma corda JavaScript.
>> E quando ele é impresso para o página desta forma, então o que
acontece é que código ruim é executado que eu não tinha a intenção
para ele para se executado.
E isso é tudo um cross-site ataque de script é.
E a maneira de dar a volta isto é como Zamyla disse.
Você só embrulhar as coisas em HTML caracteres especiais.
E este HTML caracteres especiais é um PHP função que irá impedir que este tipo
de coisa aconteça com você se você tem um malicioso
corda em seu banco de dados.
Ele só lhe escapa, de modo que não faz se interpretado como HTML.
Ele substitui os pequenos suportes com o que chamamos de entidades.
E nós fomos sobre isso na palestra também.
Então, eu acho que vocês devem ter um bom entendimento sobre isso.
Dúvidas?
Sim.
>> AUDIÊNCIA: Então, como é que o [inaudível]?
>> JOSEPH ONG: Diga isso de novo.
>> AUDIÊNCIA: Como é que o monitor -
>> JOSEPH ONG: Certo.
Então você tem algo que diz, quando Me registrar, digite o meu nome.
Eu só digitar nesse campo, meu nome é stript cargo não faz jus Facebook
estado perto tag script.
E isso só é colocado no banco de dados, porque eu não posso dizer que alguém
no mundo não tem um nome com uma seta para a esquerda nele ou o
roteiro palavra nele.
Isso não faz muito sentido.
Então, eu só tenho que ter certeza de que eu higienizar o material, antes de imprimi-lo
para a página.
>> AUDIÊNCIA: Assim, os cartões especiais do HTML impede que as tags de script?
>> JOSEPH ONG: Yeah.
Por isso não impede que as tags de script.
Ele só garante que o tags de script não recebem
interpretado como HTML ou -
sim.
Ele só aparece como o que que realmente é.
Tudo bem.
Então essa foi a revisão quiz.
Legal.
>> [Aplausos]