[Powered by Google Translate] [Semana 9]
[David J. Malan - Harvard University]
[Esta é CS50. - CS50.TV]
Todo ben. Benvido de volta. Este é CS50, e este é o inicio da semana 9.
Hoxe, en particular, o deseño, non máis no contexto C
pero no contexto do PHP e un pouco de SQL e un pouco de JavaScript,
particularmente para un fin de ambos pset 7 e tamén o seu proxecto final.
En realidade, se está nese punto no seu proxecto final
onde presuntamente a partir dunha hora, ten polo menos comezou a dar un pensamento
ao seu proxecto final e está a pensar que desexa colaborar con un ou dous compañeiros,
Se vostede está tendo problemas para conectarse con compañeiros de clase dixen,
Sinto-se libre para cubrir o formulario en cs50.net/partners/form.
El só pide que o que é, o tipo de proxecto que está a pensar,
onde vostede vive só por razóns loxísticas.
E entón, se quere manter un ollo en durante a próxima semana ou así que a URL folla alí,
entón podes ver unha versión de só lectura do documento de Google
en que estamos traídos esta información.
Entón, se quere traballar con alguén, por todos os medios sentirse libre para chegar á xente
a través deste mecanismo.
Pero a maioría das persoas fan traballo solo. Isto é totalmente ben.
Polo tanto, non sinto que esta é de forma algunha obrigatorio.
O venres era só eu e algúns do equipo aquí,
teatro en branco para a maior parte.
Foron tres turistas sentado alí enriba, de xeito que foi un pouco raro.
O que falamos foi sobre bases de datos e nós conversas sobre pset 7 un pouco.
E se non aconteceu para incorporarse aquela en vídeo aínda, iso é bo.
Vou tentar definir os termos que, doutra forma que concedeu
con base en charla do venres.
>> Pero hoxe nós estamos indo para tratar de chegar ao punto
de non só ser capaz de facer algo así pset 7
pero realmente entender o que está a suceder debaixo do capó,
particularmente algunhas das abstraccións que poñemos no lugar do ficheiro functions.php
para facer a súa vida un pouco máis fácil, pero para que finalmente entender
de xeito que cando as rodinhas saír algunhas semanas aínda pode sobrevivir
no mundo real e facer isto sen marco CS50 debaixo de ti.
Ese $ _SESSION, para aqueles de vostedes que están familiarizados
ou que xa peguei o vídeo na venres, o que imos facer SESIÓN
en unha aplicación web baseado en PHP?
Esta é unha variable superglobal, o que significa que é similar en espírito para GET e POST
e algúns outros, pero o que é esa cousa de útil para?
>> ¿Que é SESIÓN utilizado? Si [Alumno] log in
Sentímolo? [Alumno] log in log in feito.
En pset sete estamos a usar esa superglobal sesión para facilitar log in
E o que é agradable sobre este superglobal é que é un array asociativo.
Unha matriz asociativa, recall, é só unha matriz, pero cuxos índices xa non teñen que ser números
como 012. Poden ser números ou poden ser aínda cordas.
E iso, se mergullou pset 7 aínda, ten que se lembrar que estamos almacenando unha identificación clave chamada
dentro desa matriz asociativa cuxo valor é algo así como 123 -
calquera que sexa conectado no momento ID de usuario é.
A motivación para iso é que, mesmo despois de que o usuario visitou localhost
ou o meu sitio máis xeral e entón eles rexistrado,
aínda que non faga clic nun enlace ou volver para o meu sitio por 5 minutos
ou incluso unha hora ou un día, pero eles deixan a xanela do navegador aberta,
través deste superglobal podo lembrar que se identificou
>> Noutras palabras, iso me permite almacenar un pouco longo prazo calquera cousa que quero sobre un usuario.
E pode pensar realmente como a encarnación dun cesta da compra.
Lugares como a Amazon, obviamente, deixar poñer as cousas nun cesta de la compra,
pero HTTP, o protocolo que alimenta a web, é apátrida
no sentido de que cando visita un sitio web,
Para a maior parte, non ten algunha conexión de rede constante
entre o navegador eo servidor.
Así que teña baixo a HTML e os JPEGs e os GIFs e todo iso,
a conexión vai e só ten unha copia do HTML e outras cousas do servidor.
Pero se o servidor quere lembrar de algo sobre ti,
a carga está no servidor para realmente gravar esa información.
E así que o programador que teñen control sobre o servidor
pode pór algo que sexa dentro desa matriz asociativa superglobal
e vai estar alí a próxima vez que o usuario atrás,
se é minutos ou mesmo días máis tarde, a menos que pechen a ventana do navegador,
en que punto SESIÓN desaparece.
Entón, é o almacenamento efémero, é non persistente, e está destinado a ir
así que o usuario pecha o seu navegador - non só que guía, moitas veces, o navegador enteiro,
así, efectivamente deslogar o usuario.
Entón, como é esa cousa realmente aplicado?
Imos dar unha rápida ollo a un exemplo simples, mirou o venres.
Para quen non coñece, era tan sinxelo coma iso.
Esta é unha páxina web, cuxo único propósito na vida é me diga
cantas veces eu xa visitaron esta páxina.
Esta é a primeira vez aquí o luns que o visitei, por iso di 0 veces.
>> Pero se eu comezar a actualizar esta páxina, el di que unha vez máis, 2, 3, 4, 5,
e iso acabará por só manter a conta subindo, subindo, subindo, subindo, ata
para cada vez que eu realmente premer Recargar sobre el.
Entón, como é este traballo? Deixe-me ir a dentro dese ficheiro chamado counter.php.
A parte de arriba é todos os comentarios azuis, pero a parte interesante é aquí.
Na liña 13 chamamos iso de session_start función,
e que é, literalmente, todo o que cómpre facer se quere ter acceso
a este superglobal especial chamada $ _SESSION.
Isto fai todo isto posible, e imos ver en un momento como este é posible.
Nun comunicado liña 16 o que eu estou facendo.
A clave, chamado contador - noutras palabras, o valor do índice - "contador"
existe dentro desa matriz chamada sesión, entón o que estou facendo con el na liña de abaixo?
Cal é a liña 18 está facendo?
>> [Resposta do alumno inaudível] O que é isto? [Alumno] almacenar o valor. Bo
É almacenar o valor que está en sesión agora nunha nova variable local temporal,
$ Contador en todas as letras minúsculas.
Teña en conta que o PHP xa está sendo un pouco preguiceiro aquí.
Repare que non temos ningunha mención de int ou float ou cadea ou algo así
porque o PHP é feblemente tipado, en que non ten que especificar o tipo dunha variable,
e neste caso aquí eu non teño aínda declarou aínda.
Estou declarando a dentro destas claves e ao contrario de C, este é realmente ben.
Non importa o quão profundamente aniñados declaración dunha variable é en PHP -
dentro rizado cinta, dentro rizado cinta e afíns -
el naquel momento no tempo existen para o resto do programa,
para mellor ou para peor.
Por iso, inmediatamente convértese en global, logo que o define como estamos facendo aquí.
>> Se non, se eu non cre que hai algo na superglobal session,
Estou aparentemente arrincar este contador variable a 0,
así, só asumindo o usuario nunca estivo aquí antes.
E entón este curso é de incrementar o contador como?
Estou a actualizar o valor que está dentro desa matriz asociativa
fixándose a igual en calquera momento contador + 1.
Se rolar ata aquí para o código HTML da páxina, é realmente moi simple.
Todo o que teño no corpo desta páxina é: "Xa visitaron esta web veces así e así."
E esta é unha construción PHP.
Se fai <? =, Isto é equivalente ao que efectivamente función?
É realmente equivalente a algo como printf, que xa vimos moitas veces en C,
aínda que, como xa debería saber a partir da especificación en pset 7,
impresión tamén é unha función que só imprime algo, realmente non usar códigos de formato,
e pode realmente dicir eco tamén.
Son todos moi lixeiramente diferente, aínda que o efecto neto é basicamente o mesmo.
Entón, ese uso do signo igual é só unha especie de un xeito elegante de facelo
de forma máis sucinta do que podería ser capaz.
Entón, iso é todo o que esta web fai. El amosa o valor de contador.
Como se todo isto realmente acontece?
Ten que lembrar de unha semana, comezamos a mirar debaixo do capó
de como a páxina web funciona usando esta guía inspector.
>> Chrome ten ese tanto na versión para Mac, a versión de Windows, e mesmo a versión do Linux,
e Firefox e IE teñen mecanismos semellantes en que ten este depurador integrado
dentro do navegador.
Imos dar un ollo ao seguinte.
Temos unha morea de guías aquí, e recordar que o máis á esquerda é unha Elementos,
e non importa como godawful o código HTML e JavaScript está nunha páxina,
lembrar que, coa guía Elementos realmente pode navegar no HTML xerarquicamente
e agradable e ordenadamente.
Entón, se está tentando aprender a partir dun sitio web como Google ou Facebook
ou realmente calquera sitio, sabe que é probablemente mellor fóra
mirando o código fonte desta forma en lugar de ver a fonte prima,
o que pode ser unha desorde, como vimos, especialmente no sitio web de Google.
Entón, se eu, no canto clica na guía Rede aquí,
imos ver o que está a suceder cando visitar esta páxina.
Primeiro déixeme borrar a caché.
Eu estou indo para ir en Configuración no Chrome e despois ir a Historia
e desmarque todos os datos de navegación.
Podes estar acostumado a facelo para outros fins, [risas]
pero cando se trata de sitios en desenvolvemento, é realmente útil -
se está rindo sabe. [Risas]
É realmente moi útil no desenvolvemento de sitios web, porque a realidade é
cousas como galletas e cousas como caché de arquivos HTML, arquivos de caché de JavaScript
Pode realmente facer unha gran dor de cabeza, porque se por calquera motivo
o explorador decide facer caché algún arquivo e aínda así ten feito cambios que o ficheiro no servidor
pero o seu navegador non ten realmente entendeu que o ficheiro foi modificado
e, polo tanto, non realmente volver baixalo, mesmo cando fai clic no botón Recargar,
unha das formas máis infalible para só asegúrese a culpa non é o seu código,
é o comportamento do navegador, é ir aquí no seu navegador
e só limpar toda a historia, así que non hai confusión.
>> E entón, se realmente quere ser paranoico, saia do navegador, reinicias,
e comproba se todo está funcionando como esperado.
Así, en breve, limpeza de caché é bo cando se fai desenvolvemento.
Polo tanto, temos aquí a guía Rede.
Eu xa tiña visitado o sitio 9 veces, pero deixe-me ir adiante agora e prema en Recargar.
E eu estou de volta a 0.
Imos realmente ver como é que este superglobal sesión está sendo implementado.
Eu estou indo a premer a solicitude HTTP 1 que foi feita,
e esta xanela de depuración me permite ollar para dentro diso.
Aquí eu vexo só unha resposta desde o servidor, o que non é interesante.
Vin isto en calquera número de formas.
Pero o que é tecnicamente interesante son as cabeceiras.
Se rolar para abaixo aquí e centrar os cabezallos de solicitude e prema en ver fonte,
o que eu vou ver se, literalmente, a solicitude HTTP
que acaba de entrar no meu navegador para o servidor,
Get é a palabra e, a continuación, / counter.php sendo o nome do ficheiro,
HTTP/1.1 ser só a versión HTTP que o meu ordenador está a usar.
Esta liña aquí é un pequeno recordatorio de navegador para o servidor que o nome do servidor é
que quere falar.
E despois o resto que ás veces é interesante, pero non é relevante agora.
>> Este é só un tipo de curiosidade.
Cryptic aínda que esa secuencia é, en calquera momento o seu navegador visita un sitio web
é informar ao servidor do navegador que está usando
e que o sistema operativo que está a usar e que a versión do mesmo.
Entón, se xa se preguntas como sitios como CNN e outros enfeites
saber o que as porcentaxes son usuarios de Mac na web os usuarios, PC,
Usuarios do IE, os usuarios de Chrome e afíns, é porque todos os nosos navegadores
está dicindo cada único sitio aí fóra que somos.
Iso non significa necesariamente conter información de identificación persoal,
pero fai dicir ao servidor que o seu enderezo IP é eo que navegador e sistema operativo está a usar.
Entón é aí onde esa información é.
Pero o que é máis interesante agora, cando se trata destas sesións é a cabeceira de resposta.
Deixe-me ver clic fonte próxima a resposta.
O que é interesante aquí é algunhas cousas.
1, temos de volta un código de estado 200.
Nós nunca vemos este código de estado porque iso significa que está todo ben.
Significa, literalmente, ben ao contrario de calquera outra cousa.
¿Que é un número que, ás veces, ver que é malo? [Alumno] 404.
Arquivo de 404, non se atopou, 403 pode estar deparando coa xa,
o que é prohibido, o que significa que vostede esqueceu de chmod algo, o máis probable.
E hai unha morea de outros.
>> Aquí, iso é un pouco tolo.
Realmente só escribín este ficheiro hai uns minutos colando-gedit.
Por que esa páxina caduca en 1981, antes de que realmente era un sitio?
O que está a suceder alí?
>> [Resposta do alumno inaudível] O selo de tempo. Pero por que?
É un tanto arbitraria, pero é realmente útil.
O que isto está dicindo para o meu navegador é o arquivo PHP que acabou solicitado xa caducou.
Na verdade, el expirou hai 30 anos.
Pero o que iso realmente significa?
Significa só que a próxima vez que o usuario visita esta páxina,
sexa por recarga ou escribindo a URL na barra de enderezos,
asegúrese de ir buscar unha nova copia do mesmo.
Esta é unha especie de un exemplo de bloqueo de caché,
unha palabra estúpida que significa só tentando evitar navegadores
realmente HTML caché que foi enviado a partir dun servidor
para que non accidentalmente alcanzou recarga e despois ver a mesma versión do ficheiro.
Realmente quere que o servidor para enviar unha nova copia.
Así, o feito de que é 1981 só significa que é o que o aparello é escoller
como unha data arbitraria no pasado.
Pero a liña real suculento agora é este.
Mesmo antes do 50 probablemente vagamente familiar cookies.
A partir de agora, especialmente entre aqueles menos cómodo ou no medio,
o que é unha cookie no seu entendemento agora
aínda que estamos a piques de facer o seu entendemento máis técnico?
¿Que é unha cookie? Si
[Estudante] Información sobre o usuario, como no caso de que xa escribiron o seu nome de usuario ou algo así.
>> Bo É a información sobre o usuario, se introduciu o seu nome de usuario xa.
As cookies son un medio polo cal os servidores poden lembrar de algo sobre un usuario.
E o que é realmente unha cookie é un ficheiro de texto ou unha secuencia de bytes
que é plantado polo servidor dentro do teu navegador,
e dentro dese ficheiro ou entre os máis é algún tipo de identificador.
Quizais sexa literalmente o seu nome de usuario, pero máis frecuentemente é algo máis crítico para o futuro
como esta cousa aquí - bo8dal3ct e así por diante - este realmente grande secuencia alfanumérica
iso é realmente só para ser un identificador único para ti.
Ou pode pensar niso como unha especie de selo de man virtual.
Se vai para algún club ou un parque de atraccións, para lembrar que realmente paga
e foron eles colocar unha etiqueta vermella na súa man de calquera tipo,
e que lembra as persoas no mostrador que xa pagou
e pode ir e vir como sexa.
As cookies son un pouco semellante en espírito a iso.
A primeira vez que visitei o sitio web, como eu fixen despois de limpar a caché,
o servidor web, o aparello, neste caso, poñer un selo na miña man
cuxo nome é PHPSESSID, sesión ID,
cuxo valor é esta secuencia alfanumérica moi longo.
>> Entón esta é agora unha especie de estampada na miña man para que a próxima vez eu bati recargar
ou manualmente visitar esta URL nun navegador,
meu navegador por definición HTTP vai presentar o selo de man
de novo e de novo e de novo.
Así, aínda que o servidor non necesariamente saben quen eu son,
eles polo menos saben que eu son o mesmo usuario, ou polo menos, máis especificamente, o mesmo navegador.
E por iso esta é, en última análise como a superglobal sesión é aplicada.
O servidor non ten idea de quen é vostede cando visita un sitio web para a segunda ou terceira vez
se non presentar este selo man.
E así que presentar ese selo de man,
o servidor web, esencialmente, vai para unha base de datos pouco da súa propia
e cheques, así, acabo de ver o selo de man de bo8dal3ct usuario e así por diante.
Deixe-me ver a información que o programador teña almacenado
interior da superglobal sobre ese usuario,
e entón deixe-me asegurar que eses datos son de novo dentro da sesión superglobal
para que o programador pode volver a acceder a estes datos
aínda que foi definido uns minutos ou horas.
Entón, noutras palabras, as cookies, o que causa unha mala reputación por algún tempo
por mor da inseguridade en navegadores e poden realmente violan a nosa intimidade e todo iso,
realmente teñen gran utilidade, porque sen eles
ía ser constantemente sesión en cada páxina de Facebook que visita
ou correo electrónico cada Gmail le o seu navegador non ten algunha forma de lembrar
que xa está dentro do sistema.
>> Así, deste xeito as cookies son enviados e cara atrás a través do fío.
Outra curiosidade sobre as cookies, especialmente aquí, é que este é totalmente en texto puro.
Non hai cifrado suceder aquí calquera,
e en realidade eu estou usando HTTP neste momento.
Un dos momentos favoritos en CS50, que agora é de 2 anos,
foi na época unha ferramenta chamada Firesheep saíu.
Esta foi unha peza de software libre que foi feita por un investigador de seguridade
como unha chamada de espertar para a comunidade para dicir o quão atroz aplicado
mecanismos de autenticación seguros na web eran.
Entón, por algún tempo, Facebook foi case enteiramente sobre HTTP, HTTPS non.
E mesmo se non ten idea de como funciona o cifrado, S é seguro
entón iso significa que hai polo menos algúns cifrado implicados.
Facebook foi usado para cifrar os nomes de usuario e contrasinais,
pero, logo que mirou para o seu cutuca ou mensaxes ou o seu comentario de noticias,
todo iso foi sen criptografía.
Así foi Gmail ata que só un ano ou dous atrás.
Cada vez que sesión, si, eles usaron cifrado segura
pero despois diso non fixeron. E por que sería?
Porque non usar o cifrado de todos os tempos en casos de uso como esta?
¿Que é iso? Creo que oín algo. [Alumno] Speed.
Velocidade, non? Existen formas de evitar isto.
Pero se só tipo de pensar loxicamente, se Encriptar algo,
tes que facer polo menos un pouco máis traballo.
En pset 2 cando aplicou César ou Vigenère ou mesmo de crack,
só imprimir unha cadea é relativamente fácil.
Encriptar e, a continuación, imprimir unha cadea require como mínimo un pouco máis traballo.
>> Para super sitios populares como Google e Facebook,
se ten que facer máis traballo para cada usuario para cada única páxina web que visita,
que só ten máis tempo de CPU.
E se precisa de máis tempo de CPU, pode ter máis servidores,
que significa que pode ter máis diñeiro.
E así por moitos anos isto só realmente non foi a mellor práctica.
As persoas usan cifrado SSL só cando é necesario.
Pero acabou, e como ese suxeito con Firesheep fixo super claro,
cando vostedes que están actualmente no Facebook agora -
A modo de curiosidade, imos ver se vai confesar.
Se está en Facebook agora en algún guía, mesmo se non está en primeiro plano,
é a súa URL HTTP ou HTTPS?
[Varios alumnos] S. S? [Risas]
Okay. Calquera HTTP? Só un? Okay.
Entón, todos podemos hackear conta do cara Facebook agora.
Para a maior parte, esta converteuse en activado por defecto, polo menos nalgúns sitios.
E longa historia curta, o seu tráfico na web non é criptografía,
non só o HTML ir e volver entre as WiFis non criptografada,
así que as cousas como as cookies ir e volver todo o aire
sen calquera forma de criptografía.
Entón se ten un pouco de habilidade de programación ou un pouco de investigando habilidades
para atopar software gratuíto que fai iso, todo o que tes que facer é sentarse no Starbucks
ou sentir nun aeroporto, onde hai xeralmente non cifradas WiFi
e só ver palabras clave como sep-Cookie: PHPSESSID ou
porque se ten o coñecemento técnico para só observar o WiFi
para todos os bits que flúen ó longo do aire por este estándar,
Pode, entón, dicir que PHPSESSID cara pasa a ser bo8dal e así por diante.
E, de novo, se vostede é suficientemente coñecemento técnico ou ter a ferramenta certa,
pode só reconfigurar o seu propio navegador que comece a presentar este selo de man
para o Facebook.com, Facebook e só vai asumir que é a cara
porque todo o que eles non saben é quen é vostede, pero que ten ese identificador exclusivo.
Entón, se roubar o identificador único e presenta-lo ao servidor web, como o seu propio,
eles están indo só para mostrar a vostede que a persoa de alimentación de noticias
ou daquela persoa mensaxes ou puxões.
>> E gustaríame Google agora como activar HTTPS para Facebook quizais.
Pero é realmente tan sinxelo coma iso.
E así o Facebook e Google e outros quedaron moi bo niso,
pero manter un ollo para fóra todo o máis para os sitios que visita que non usan HTTP
e ter algún tipo de información sensibles sobre eles,
se é financeira ou persoal ou similares.
Se eles non están a usar iso, moi posiblemente pode galletas como este ser facilmente roubado
e despois forxado, e iso é o que Firesheep fixo.
Non ten que ser un programador.
Todo o que tiña que facer era ter unha conexión á Internet, descarga esta ferramenta gratuíta,
eo que quere facer é que faga o login e, a continuación, iria amosar-lle os nomes Facebook
de todos na Sanders, nesta demostración particular, en torno de ti
e todo o que tiña que facer era facer clic no seu nome e do software automatizou o proceso de
de cheirar aquel biscoito, presentándose como o seu propio Facebook,
e, listo, está rexistrado Pol
Polo tanto, este é un dos "non fagas iso" oficialmente.
Se ten rede propia casa e quere xogar, por todos os medios,
pero enténdese que fai cruzar a liña nun ambiente universitario.
>> Pero o obxectivo aquí é realmente para enfatizar non como facelo
pero como se defender contra eses tipos de cousas.
E a solución trivial aquí, aínda que en si é fallo,
é realmente reducir o uso de calquera sitios que non están usando HTTPS constantemente.
Así, sitios como Facebook e Google teñen cada vez máis caixas
onde podes optar por este tipo de cousas,
e os bancos tiveron que desde hai anos por razóns semellantes.
Entón, un pouco de un factor de medo, se pudermos. Pero é iso en poucas palabras.
É así que un servidor se lembra de quen é vostede.
E así que poden lembrar quen é vostede, poden lembrar de nada sobre ti
que o programador teña almacenado dentro deste superglobal especial chamada $ _SESSION.
E para pset sete estamos usando iso trivialmente só para lembrar un int,
ou sexa, o ID único do usuario que fixo sesión,
de xeito que sabemos que estiveron alí antes.
Algunha preguntas, entón en sesións ou cookies ou similares?
Firesheep non funciona tan ben máis,
e ten que poñer o ordenador en un modo especial promiscuo
entón está realmente escoitando para o tráfico ademais de si mesmos.
Entón se está actualmente descarga Firesheep, entende que non é tan fácil
como era antes de demostrar.
Todo ben. E non facelo Sanders. Facelo na casa.
Bases de datos.
Unha das cousas que fixo o 7 pset moi deliberadamente
foi nós dámoslle unha táboa de base de datos de mostra para os usuarios que ten algúns IDs de usuario,
algúns nomes de usuario e contrasinais cifradas algúns nel contidas.
E como podes ver, se non ten, vai ter que cambiar a táboa un pouco.
Vai ter que engadir un pouco de memoria para cada un dos usuarios desta táboa,
e vai ter que engadir outra táboa de histórico, unha mesa de carteiras,
ou quizais chamar-lle outra cousa.
Pero en termos de pensar en como facelo, imos abrir esta ferramenta
o que foi usado o venres, pero non coñece, o aparello ven con unha ferramenta
chamada phpMyAdmin, que é casualmente escrito en PHP,
pero o seu propósito na vida, despois de eu entrar aquí como jharvard de carmesim,
é dar-me unha maneira agradable de ver e cambiar o meu banco de datos.
>> A base de datos que eu estou correndo no aparello chámase MySQL
Isto é moi popular, e é unha base de datos de código aberto libre que é marabillosas fácil de usar,
especialmente con front-ends como este.
O que esta ferramenta permite que faga, por exemplo, é cotovelada en torno a mesas.
Deixe-me ir adiante e facelo.
O venres, creamos unha táboa chamada alumnos que foi super sinxelo.
Tiña tres columnas - Id, nome, correo electrónico - e inseridos man un par de liñas
como David e Mike neste exemplo en particular.
Imos levar isto un pouco máis, e imos supor que queremos lembrar máis
que só o nome e correo-e sobre un usuario.
Deixe-me prema aquí Estrutura arriba.
E, de novo, o pset percorre as medidas necesarias aquí,
non te preocupes algúns iso é un pouco rápido.
Entón eu vou para premer aquí.
Eu estou indo para engadir un número de columnas despois e-mail
porque quero engadir algo como casa.
Esquecín de rexistrar a casa dun alumno.
Deixe-me prema en ir, e agora temos esta forma que, por desgraza, é un pouco longo de esquerda a dereita,
pero eu vou chamar o nome desta casa de campo,
e entón o tipo que agora teño que escoller.
Polo tanto, imos ter unha breve conversa sobre os distintos tipos en MySQL
porque mentres o PHP é feblemente tipado e que tipo de xoga rápido e solto cos tipos,
nunha base de datos especial que é super importante para realmente usar dixitación para a súa vantaxe
porque unha das cousas MySQL e outros bancos de datos pode facer por ti
é garantir que non poñer datos falsos na súa base de datos.
Este é o tipo de erro corrente libre dispoñible para ti.
>> Para a casa que, obviamente, non quero que sexa un int, que é un valor de 32 bits en MySQL
Fixemos falar brevemente o venres sobre varchar, que significa lonxitude variable char.
¿Que é iso? Isto permite que especifique que quere que isto sexa unha secuencia de calquera tipo.
Realmente non sabe de antemán o tempo que desexa,
entón imos arbitrariamente dicir un nome de casa pode ser de 255 caracteres,
pero pode ir con 32, 64 - calquera número realmente.
Pero a vantaxe de usar un varchar sobre un campo chamado char é o que?
Só intuitivamente se eu rolar por aquí, entender que hai char e hai varchar.
Varchar é de lonxitude variable char; char é unha lonxitude fixa char.
Así, con base só no que definición, cal é a vantaxe ou desvantaxe de cada unha delas?
Noutras palabras, que se preocupa coa distinción, ou por que lle importa?
>> Si [Alumno] Varchar ten máis flexibilidade, pero ocupa máis memoria.
Bo Varchar ocupa máis - Imos ver. Eu non estou seguro se eu oíse ese dereito.
Pode dicir que unha vez máis?
[Alumno] dixo varchar, probablemente, ten máis flexibilidade, pero é preciso máis memoria.
Interesante. Okay. Varchar probablemente lle dá máis flexibilidade, pero ocupa máis memoria.
O último non é necesariamente verdade.
El depende do contexto, pero imos volver a iso.
>> [Resposta do alumno inaudível] Exactamente.
É realmente o caso que char vai utilizar máis memoria
porque un char, como en C, é como unha corda, que é unha matriz de caracteres.
Entón, se di que un campo char de tamaño 255,
a base de datos é, literalmente, vai dar-lle 255 caracteres.
E se a casa acaba sendo personaxes Mather e 6 total,
está perdendo máis de 200 caracteres.
>> Así, un varchar efectivamente utiliza só cantos caracteres é necesario
ata un importe máximo.
Pero o prezo que paga é realmente rendemento, potencialmente.
Se sabe de antemán que todas as cordas van ser 8 caracteres -
Por exemplo, supoñamos que requiren claves de lonxitude 8 -
A vantaxe de usar un campo char na ocasión, aínda que moitas veces non,
é especificar unha lonxitude fixa para algo así como un contrasinal
porque agora a base de datos pode ser aínda máis intelixente.
Se sabe que todos os campos char, cada corda nunha columna é a mesma lonxitude,
recibe de volta o recurso de acceso aleatorio.
Pode saltar entre os distintos campos de char na súa táboa de base de datos
porque pensar dun banco de datos como liñas e columnas.
Entón, cada unha das cadeas é a mesma lonxitude,
vostede sabe que o primeiro é o byte 0, a próxima é a de 8 bytes
e, a continuación, 16 e, a continuación, 24 e así por diante.
Entón, se todas as cordas son da mesma lonxitude, pode saltar moito máis eficiente.
De xeito que pode ser unha vantaxe en termos de rendemento,
pero normalmente non ten o luxo de saber con antelación,
así un varchar é o camiño a percorrer.
Aquí está outro detalle que mesmo Facebook foi para finalmente.
Ints son grandes, e que tipo de usalos por defecto cada vez que precisa de un número,
pero é só 32 bits.
>> E aínda que Facebook non pode ter 4 millóns de usuarios, agora,
hai sempre algunhas persoas alí fóra con varias contas
ou contas que foron abertas e, a continuación, pechado,
e así o propio Facebook Creo uns anos tiña a transición int
para, como é apropiadamente chamado bigint, que queda só a 64 bits en vez.
Polo tanto, esta tamén é unha decisión de deseño.
Vostede sería incrible sorte seu proxecto final transfórmase inicio,
ten 4 millóns e un usuarios, máis ou menos,
caso en que ints pode ser un pouco miope.
Pero, en realidade, a súa táboa de usuarios pode ser ben con ints.
Pero para algo así como 7 pset, como a súa táboa de histórico,
pode ter miles, millóns de usuarios se evolucionar para etrade.com.
Así, mentres non pode ter máis de 4 millóns de usuarios,
aqueles usuarios que ten pode ter máis de 4 millóns de transaccións ao longo do tempo -
compra e vende e as cousas na súa historia.
Entón, se fai anticipar - de novo, estes son bos problemas para ter se ten esta cantidade de datos -
se anticipar datos que exceden o tamaño dun int,
indo con algo bigint é unha dirección, non con frecuencia suficiente adoptado por deseñadores
porque a xente figura que non vai ser un problema,
pero é tan fácil de escoller algo maior que iso.
Decimal que estamos usando o pset 7, que especifica precisión fixa
así pode evitar as cuestións que envolven coches alegóricos e de dobres e reais e similares.
>> E despois hai outros campos aquí. Imos axitar as mans para eles de algunha maneira.
Pero as datas, horarios todos teñen un formato prescrito no MySQL
ea vantaxe de almacenar datas como datas e non VARCHARs
significa que a base de datos pode, en realidade, reflexa-los en diferentes formatos,
un formato EUA ou formato europeo ou similar - con todo, quere que -
moito máis eficiente do que se fose só algúns varchar xenérico.
E despois hai algúns outros binarios, varbinary, blobs.
Estes son obxectos binarios grandes, e tamén pode almacenar datos binarios
así como os datos xeométricos dun banco de datos.
Pero para nós, imos normalmente se preocupan ints e VARCHAR e similares.
Imos rematar este exemplo coa casa.
Casa eu vou dicir poderá ser arbitrariamente 255 caracteres.
Entón o valor por defecto que podería facelo.
Poderiamos, por defecto poñer todos Mather House, por exemplo.
É así que pode especificar que a base de datos
velarán por que alguén ten sempre un valor. Pero vou deixar que sexa.
En realidade, para as persoas que viven fóra do campus e non nunha casa,
quizais realmente quero especificar que o valor estándar para casa é NULL,
e entón eu teño comprobar esta caixa e dicir a base de datos que está todo ben a casa do usuario é NULL.
>> Unha vez máis, este é outro mecanismo de defensa que pode pór en práctica
así que non precisa nin de poñelo no seu código PHP necesariamente.
A base de datos pode garantir que as cousas son ou non son NULL.
E entón, finalmente, atributos.
Ningún destes son realmente relevantes.
Binario, non asinado - ningún deles son relevantes para un varchar.
Índice.
Alguén sabe ou recorda ou ten un palpite sobre o que é un índice
para algo como casa?
Isto tamén é, en realidade, unha decisión de proxecto importante e relativamente doado.
Para quen aínda non viu, o venres que falou brevemente sobre claves primarias.
Nunha táboa de base de datos, unha chave primaria é o campo ou columna
que identifica exclusivamente as liñas da táboa.
Así, no marco actual temos IDs, temos nomes e correos electrónicos.
Cal destes é o mellor candidato para ser unha chave primaria,
cuxo papel é identificar liñas?
Probablemente ID.
Indiscutibelmente, nós tamén podemos empregar o que?
Talvez podes usar o correo electrónico, porque, en teoría, é único
a menos que as persoas están compartindo as contas de correo electrónico.
Pero a realidade é que, se vostede está a usar unha identificación numérica como 1234,
iso é só 32 bits, mentres que un enderezo de correo-e pode ser esta moitos máis ou esta moitos máis.
Polo tanto, en termos de eficiencia de identificadores únicos,
el tende a ser unha boa práctica só para usar un int
mesmo se ten algún candidato cadea que sen dúbida podería usar.
>> Para algo como casa, iso non debe ser unha chave primaria
porque, entón, só unha persoa podería vivir en Mather e 1 persoa en Currier e similares.
Do mesmo xeito, iso non debe ser único.
A diferenza entre a primeira e única é que, no caso de que a mesa de corrente,
ID sería primario, pero correo-e non é primaria para a razón que acabamos de mencionar -
rendemento - pero aínda debe ser único.
Entón, tamén se pode impoñer exclusividade sen ter a pretensión
que é un importante campo de super primaria.
Pero este é moi útil: Index.
Se sabe de antemán para o seu proxecto final para pset 7, ou, en xeral,
que esta casa de campo vai ser algo que busca nun lote
usar a palabra clave de verificación ou algo máis,
entón podes dicir anticipadamente a base de datos para traballar a súa maxia
e asegúrese de que el cría na memoria calquera estruturas de datos de fantasía necesario
para acelerar investigacións en base a casa.
Quizais el vai usar unha táboa hash, quizais el vai usar unha lista ligada.
En realidade, el tende a usar unha árbore, moitas veces chamado dunha estrutura de árbore B -
non unha árbore binaria, mais unha árbore B - que é unha árbore moi grande
que se pode ver nunha clase como CS124, os datos da clase estruturas.
Pero, en resumo, non ten que se preocupar con iso ao usar o software de base de datos intelixente.
Pode só dicir que, "Índice de este campo para que eu poida investigar sobre el de forma máis eficiente."
>> Se deixar este fóra e tentar buscar a todos na base de datos que vive Mather,
vai transformarse en busca lineal.
E se ten 6.000 graduandos todos vivindo en algunha casa,
vai buscar toda a táboa para atopar os Matherites,
mentres que, se di Index, espero que sexa algo próximo a unha busca logarítmica
para atopar eses tipos de alumnos.
Este é só un recurso gratuíto para conectar,
mesmo que vén a un prezo de unha certa cantidade de espazo.
Por último, auto-incremento, este campo AI,
o que significa só se é un int e non quere preocuparse para incrementar vostede mesmo
cada vez que hai un novo usuario, asegúrese de que,
e cada usuario que se insire automaticamente recibirá un novo ID.
Imos facer clic en Gardar, e agora imos atopar o fallo con este proxecto.
Se eu entrar en Buscar, aviso de que Mike e miña casa é NULL.
Podo usar o phpMyAdmin para editar manualmente.
Eu podo ir aquí e escriba Mather e prema a tecla Intro,
e agora observar o cadro é diferente.
Pero repare que eu podería facer outra cousa tamén.
ID de David é un, entón phpMyAdmin novo é só unha ferramenta administrativa;
iso non é algo que os usuarios están indo cada vez para ver.
Entón, se eu, no canto clica na guía SQL enriba -
e, de novo, pset 7 ha presenta-lo para unha desas consultas -
Eu podo executar manualmente o comando da linguaxe SQL Structured Query
Update users SET casa = 'Pfoho' Where id = 1.
Estas consultas SQL son, ben o suficiente, bastante lexible de esquerda a dereita.
Actualizar a táboa de usuarios, axuste o campo chamado casa para Pfoho
onde ID do usuario é 1.
Ou eu podería incluso facer, onde e-mail = 'malan@harvard.edu'.
Mentres que identifica comigo, que ía funcionar tan ben.
Pero ID tende a ser maior rendemento, entón imos facelo.
Imos prema en Ir Ok, lecture.users non existe. Cal é o meu erro?
Cal é a táboa verdade chamado aquí?
É chamado de alumnos só porque é o que nós fixemos aquí na esquina superior esquerda.
É chamado de estudantes, e non usuarios. Entón prema en Ir agora.
Unha liña afectada. Consulta levou 0,01 segundos.
Se fai clic en Buscar agora, agora vive en Pfoho Malan.
Entón, iso é outro sabor de SQL, pero o pset ha oriente-lo a través de un pouco máis do que iso.
>> Hai unha decisión estúpida que eu xa fixen aquí.
Eu diría que este proxecto de base de datos é ineficiente
porque canto máis persoas eu engadir á táboa alumnos,
máis de nós comezar a engadir, o máis das TFS comezar a engadir,
imos comezar a ver o que Despedimentos na táboa?
>> Si [Alumno] Vendo que está en estudantes, estamos usando o mesmo [inaudível]
O mesmo - Dereito, exactamente.
Entón, se 400 persoas viven en Mather, máis ou menos,
finalmente esta táboa terá 400 liñas que din "Mather", "Mather,"
"Mather," "Mather," "Mather."
Estamos perdendo todos estes bytes, e hai un par de takeaways alí.
1, hai o caso de canto tolo onde se alguén paga unha morea de cartos
e renomeia Mather, agora temos que cambiar a nosa táboa de base de datos enteiro.
Iso non vai acontecer frecuentemente, aínda Pfoho xa foi chamado de Casa do Norte hai 15 anos,
así acontece. Pero iso non é todo o que convincente.
Máis convincente que un caso como o de canto a necesidade de actualizar os datos en masa
para unha base de datos é por que está almacenando Mather novo e de novo e de novo e de novo?
Isto é un monte de caracteres, 6 caracteres.
Non podemos facer aínda mellor do que iso, especialmente para Pforzheimer?
Certamente que podemos facer mellor do que moitos personaxes.
Porque non basta asociar un identificador único, con cada casa
e tenda que para cada usuario? Entón, imos tentar iso.
En vez de só usar a táboa alumnos, deixe-me ir para o meu banco de datos charla aquí na esquina superior esquerda.
Nótese aquí que di Crear táboa.
Deixe-me facer unha táboa chamada casas.
O número de columnas que vai ser 2. Intro.
Agora eu teño dous campos.
Vou chamar este nome, e que vai ser un varchar de lonxitude 255,
>> pero que é bastante arbitraria. Deixe-me poñer isto aquí por convención.
Entón engada unha identificación aquí. Imos dar a cada casa un identificador único.
Imos dar a cada casa un nome.
Imos especificar que o identificador será asinado só por convención usar só números positivos.
Imos adiante e dar a este un campo de auto incremento por agora.
E necesitamos algo máis?
Imos adiante e faga clic en Gardar.
Agora eu teño unha segunda táboa.
Observe como un aparte, este é o pouco enigmática comando SQL
que tería que escribir manualmente se non está a usar unha ferramenta administrativa como phpMyAdmin.
Polo tanto, outra razón que usalo.
É unha especie de marabillosas útil pedagoxicamente, porque pode facer clic en torno a
e descubrir como as cousas funcionan por só copiando e colando o phpMyAdmin fixo.
Pero o mando Crear táboa é o que foi só executado, e aquí é a miña mesa.
Deixe-me ir adiante agora e utilizar o SQL prima en vez de simplificar, premendo na pestana Inserir.
Deixe-me facer INSERT INTO casas,
e eu vou dicir o nome da casa vai ter un valor de 'Mather'.
É iso aí. Esta sintaxe é un pouco máis enigmática.
Este é o nome dos campos que desexa inserir.
Estes son os valores que queremos inserir eses campos. Deixe-me prema en Ir
Unha liña inserida cada 0,02 segundos. Deixe-me faga clic en Buscar agora.
>> Observe se eu faga clic en Buscar hai Mather, cuxa identificación é pola automatización do número 1.
Deixe-me facer outro. Deixe-me ir a guía SQL.
INSERT INTO casas. O nome da casa vai ter un valor de Pfoho e así por diante.
Ir E podo seguir facendo iso de novo e de novo e de novo.
Ou se estar aburrido usando o phpMyAdmin, pode só usar a guía Inserir
e non ter que escribir o SQL prima.
Pode só bater-lo máis axiña, escribindo, por exemplo, Currier, intro
e agora, se premer en Buscar hai Currier cun ID de 3.
Entón é iso que queremos dicir con auto-incremento.
Pero agora temos que corrixir algo nos estudantes.
Na alumnos que deben ao tipo de datos do campo casa agora?
Debe ser un int, non?
Así, o obxectivo aquí é o de fatorar, tamén coñecido como normalizar as táboas
de xeito que non almacenar información de forma redundante en calquera dos meus cadros.
E, de novo, o camiño que estabamos aquí vai dicir Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, que é moi redundante
en termos de perda de caracteres.
Entón deixe-me ir adiante e cambiar isto premendo Estrutura,
e deixe-me ir adiante e marcar o campo casa, faga clic en Cambiar
e agora eu vou cambiar isto sexa un int.
255 non é máis relevante.
Deixe-me ir adiante e dicir que está todo ben, aínda é NULL. Gardar.
Agora os estudantes táboa foi modificada con éxito,
e observe novo fogar é un int.
Como un aparte, ignorar o número entre parénteses cando se trata de ints.
>> Isto é por razóns de legado.
Volver o día en que non ten GUI, en vez diso tiña un ambiente de liña de comandos,
os 10 e 11 respectivamente especificados cantos caracteres debe amosar
na fiestra de terminal para realmente mostrar campos.
Non ten nada que ver coa lonxitude de bits do campo real, por iso imos ignorar que, por agora.
Agora eu teño que ir a esta mesa.
E se David vive en Mather, casa non debe ser 0,
que é un valor máis próximo ao estándar int NULL.
Debe morar na casa dun.
Imos dicir arbitrariamente que vive Mike Pfoho, a casa de número 2.
Agora miña mesa parece un pouco máis enigmática.
Pero considere a eficiencia.
Agora estou usando só 32 bits para identificar a casa,
o que significa que hai só unha definición canónica da miña casa Mather e Pfoho
e que está na mesa de vivendas.
Entón, se eu queira voltar agora esas táboas, pensar deste xeito.
Aquí eu teño a miña mesa os alumnos, e no lado dereito hai estes números, 1 e 2.
1 é Mather, 2 e Pfoho.
Temos os mesmos números nesta táboa outro, o que se denomina de vivendas,
1 e 2 e 3 para as tres casas.
O que queremos agora facer é ter a capacidade de código, PHP e SQL,
a sorte de xuntarse estas táboas, onde se estes son os estudantes e estes son as casas,
queremos dalgunha forma combina-los de xeito que unha liña con 1,
2 liñas con 2, e para que poidamos descubrir onde David
e onde Mike e onde toda a xente vive.
Para facer isto, podemos realizar unha consulta SQL como o seguinte.
SELECT * FROM alumnos RexistrarseFacebook casas ON -
E agora que os campos que queremos participar?
Entón students.house = houses.id.
>> Un pouco enigmático, pero esta parte significa, literalmente, crear unha nova táboa temporal
que é o resultado da unión de estudantes e casas.
E como quere combinar as puntas dos meus dedos aquí?
SET 'campo casa igual ás casas "os alumnos campo ID.
E se eu agora prema en ir, eu volver exactamente o que eu esperaba.
David está en Mather, Mike está na Pfoho, e tamén ver os identificadores únicos.
Pero o punto é agora eu teño unha táboa completa.
E así o takeaway aquí para pset 7 ou realmente para o proxecto final:
Se cre que está almacenando calquera peza de información redundante,
se é unha casa, quizais sexa unha cidade, provincia e código postal
onde ZIP pode, normalmente, pero non sempre ser usado como un identificador único,
non facer o exercicio mental e, despois, con algo así como phpMyAdmin
de factoring que os datos comúns, porque, especialmente como o seu sitio está máis ben utilizado
e máis popular, é así que asegurarse de que todo é super rápido,
dando á base de datos como moitas suxestións como a singularidade posible.
Isto foi moito.
Algunha pregunta? Todo ben. Imos dar un intervalo de 5 minutos alí e reagrupar.
Todo ben.
A continuación, un exemplo foi empregado hai uns anos cando tirei CS161,
que é a clase operativo sistemas na facultade
que é coñecido por ser incrible, pero unha cantidade tola de traballo,
e concéntrase realmente en algúns dos problemas de baixo nivel que xorden nos sistemas operativos
e tamén ata no mundo dos bancos de datos.
>> A historia que foi contada polo meu profesor, Margo Seltzer, este ano foi como segue.
Supoña que vostede ten unha neveira dormitorio para vostede eo seu compañeiro de cuarto
e tanto que realmente lle gusta de leite.
Entón chega na casa do día de clase un, o seu compañeiro de cuarto non está aí,
abre a neveira, e entender, "Oh droga, estamos fóra de leite."
Entón pechar a neveira, se atravesar a rúa para CVS
e poñerse en liñas cada vez máis longas para mercar leite en CVS.
Mentres tanto, o seu compañeiro de cuarto chega na casa da súa clase,
entra no cuarto, abre a neveira realmente queren un pouco de leite,
abre a neveira e "Droga, non de leite."
Entón, el ou ela pecha a neveira, sae pola porta, e vai para ABP
ou noutro lugar que CVS onde non vai chocar uns con outros
para ir buscar un pouco de leite.
Está claro que uns minutos máis tarde, tanto de voltar a casa
e agora ten leite dúas veces tanto como realmente quería.
E, sendo o leite, agora vai ir mal, porque lle gusta de leite
pero realmente non me gusta de leite, entón agora tes moito leite, por iso vai aceda.
Esta é unha situación terrible, terrible.
O que podería ter resolto esta situación se fose o compañeiro de cuarto casa primeiro? Si
[Estudante] Debe deixar unha nota. [Risas]
Bo Debería deixar unha nota.
Debería colocar unha nota de post-it ou o mesmo que dicir, "Gone para o leite",
e, a continuación, o seu compañeiro de cuarto conceptualmente sería pechado para fóra de realmente facer iso.
Ou podería ir un paso máis aló.
Pode literalmente, bloquear o frigorífico con algún tipo de cadeado,
e agora o seu compañeiro de cuarto vai ser literalmente protexida para fóra da neveira.
Se generalizarmos volta á programación,
case pode pensar no frigorífico como algún tipo de variable ou unha estrutura,
algún tipo de recipiente para información.
O problema fundamental aquí é que ambos foron autorizados a inspeccionar
ou ler o estado desta estrutura de datos,
pero viu en momentos diferentes e aínda así tanto tomou unha decisión
con base no estado do mundo naqueles momentos diferentes no tempo.
Entón, se tivese pechado a neveira, que tería polo menos evitar o seu compañeiro de cuarto
de ser capaz de inspeccionar o estado do mundo,
para que el ou ela non podería tomar esta decisión mesmo.
Así, bancos de datos, como se ve, ten ese problema constantemente.
>> Imos ver se podemos construír un escenario.
Supoña que vostede é unha especie de vila e vai para o Bank of America
ou un dos outros lugares na praza que ten unha parella ATMs lado a lado,
e dalgunha forma se descubriu como duplicar unha tarxeta Multibanco - non tan difícil así.
É só unha cinta magnética.
E entón o que quere tentar facer é xogar este xogo
polo cal se pon unha tarxeta nunha máquina, outro cartón noutra máquina,
e, esencialmente, quere tentar retirar o diñeiro ao mesmo tempo,
porque imaxinar que a historia é o seguinte.
A máquina da esquerda leva a súa tarxeta e contrasinal,
e entón di: "Deixa-me 100 dólares."
A ATM está programa para primeiro facer un select no seu banco de datos ou equivalente -
calquera base de datos que está a usar - a ver se este usuario ten polo menos US $ 100 na súa conta?
Se si, entón cuspir o $ 100 e restar R $ 100 a partir do seu equilibrio.
Pero está claro que, se hai varias máquinas aquí ou múltiples formas de inspeccionar
o estado do mundo, o cofre do banco, a ver canto diñeiro ten,
supoñer que só por casualidade a máquina á esquerda e á dereita
tanto esta pregunta en aproximadamente no mesmo momento no tempo.
>> E isto pode certamente pasar. As caixas electrónicos son ordenadores estes días.
Entón, se a máquina da esquerda di: "Si, ten polo menos US $ 100",
Mentres tanto, a máquina á dereita di: "Si, ten polo menos US $ 100",
entón ambos avanzar para completar os seus programas e realmente cuspir os 100 dólares
e dicir: "Antes tiña US $ 200."
"Deixe-me actualizar a variable a ser agora 100 dólares deixados na conta."
Pero ambos teñen comprobado o seu saldo de conta e descubrir que é 200 dólares
e os dous a continuación, facer as contas e din que 200 - 100,
as máquinas potencialmente cuspir dúas notas de $ 100 en cada máquina,
pero só actualizou o seu saldo de conta suma é R $ 100.
Noutras palabras, tomou a US $ 200, pero porque inspeccionaron o estado do mundo
simultaneamente e, a continuación, tomou a decisión en base nese valor,
eles non poden facer as matemáticas, en última análise correctamente.
Polo tanto, nunha situación de base tamén realmente quere ter algún tipo de bloqueo
de xeito que, logo que comprobar o estado dalgunha variable
que é realmente importante, como saldo da súa conta,
non deixe ninguén tomar decisións baseadas no que ata está disposto a facer a súa cousa,
onde, neste caso, é o ATM do lado esquerdo.
Bloquear todos os outros fóra.
Pode realmente acadar ese efecto en un par de formas diferentes.
>> O xeito máis sinxelo no MySQL é unha liña de SQL que lle deu
na especificación do conxunto de problemas que se parece exactamente como este.
Inserir na táboa - o que é chamado - un id, un símbolo, e por acción, un número de accións,
os valores que se seguen, por exemplo.
Se aínda non leu a especificación aínda, este é un exemplo que implica como vai facer sobre
comprar 10 accións desta tostón stock para Presidente Skroob,
cuxa identificación do usuario pasa a ser o número 7?
Isto di INSERT INTO táboa id seguinte, símbolo e número de accións
7, 'DVN.V', e 10.
Pero - pero, pero, pero - a segunda liña é a máis importante.
ON duplicados partes da actualización clave = partes + valores (accións).
Entón, totalmente enigmático aspecto a primeira vista.
Pero o feito de que esta consulta SQL, aínda que rompe en dúas liñas,
É unha consulta longa, isto significa que é atómica
no sentido en que esta consulta pode ser executado en conxunto ou non en todos.
E, por definición do MySQL, que é como eles aplicaron esta consulta.
El é, por definición, o manual garantir a executar todos dunha vez ou de xeito ningún.
A motivación para iso é a seguinte.
Neste caso está intentando comprar 10 accións do,
é unha especie da mesma historia como o leite, é unha especie da mesma historia como o ATM.
>> Se non fai o erro de empregar esta sintaxe
pero a selección da base de datos para ver cantas accións desta tostón stock
que o Presidente Skroob ten, e creo que ten 10 accións,
e entón algúns fracción de segundo máis tarde faga unha declaración Update,
que é outra declaración en SQL que se vai adiante e engadir 10 máis accións
á súa 10 actual de xeito que, idealmente, o total de 20,
o problema é que os actuais sistemas de base de datos e porque nos ordenadores de hoxe
ten múltiples procesadores, núcleos múltiples -
noutras palabras, os computadores poden ser literalmente facendo varias cousas ao mesmo tempo -
non hai ningunha garantía de que o seu SELECT e Update no seu caso
van ocorrer de costas.
Así, un escenario malo sería facer o SELECT
para ver cantas accións desta tostón stock non Skroob ten,
e despois é só por casualidade outra consulta de base de datos é executado -
quizais o seu Skroob noutra xanela do navegador tentando mercar 10 partes
noutra ventá completamente, moi parecida coa ATM -
e supor que outra consulta queda entre SELECT e Update.
Podería ser o caso de que Skroob agora perde un pouco número de accións
porque outro proceso está a inspeccionar o estado do seu mundo,
ou que está máis accións que debe ter.
Non vou entrar en detalles de exactamente o que esas liñas historia particular sería,
pero o punto é, se ten que comprobar o valor de variábeis e entón tomar unha decisión,
se hai un risco de alguén facer algo entre estes dous testemuños,
como pode ocorrer en sistemas multiprocessados, en sistemas multicore,
ordenadores con capacidade de facer varias cousas ao mesmo tempo, cousas malas poden ocorrer
contas bancarias como debitado incorrectamente, a compra de leite dúas veces máis,
ou, neste caso, o número incorrecto de accións.
Pero hai unha maneira máis fácil pensar sobre iso.
>> Acontece que tamén soporta SQL, se configurar a súa táboa correctamente,
algo chamado transaccións, o que eu diría é realmente aínda máis doado de entender
do que iso, pero non é un 1-liner, polo que é realmente un pouco máis implicado.
Hai, literalmente, unha declaración en SQL chamado START Transaction.
Así como hai SELECT, UPDATE, INSERT, DELETE e JOIN e unha morea de outros,
hai palabras clave como START Transaction.
E o que fai no contexto pset 7 -
non ten que facer iso para pset 7, que é explicitamente negada como non é necesario,
pero para proxectos finais pode ser útil -
se chamar unha consulta de START Transaction e despois outra consulta
e, a continuación, consulta outro e despois outro, outro, e outro,
esas consultas non vai realmente ser executado ata que chamar a instrución SQL COMMIT,
en que punto se é dúas declaracións ou 20 testemuños, todos eles van ser executados dunha soa vez,
o que significa que ninguén pode accidentalmente mercar moito leite ou débito moito diñeiro
ou comprar accións moitas porque todas as súas dúbidas executará
de costas cara atrás, cara atrás.
E iso é super importante, especialmente cando está facendo algo así.
Este é un exemplo arbitrario que se imos actualizar a conta bancaria
establecendo un equilibrio igual a equilibrio - $ 1000, onde o número de conta é 2.
E entón a segunda instrución é agora imos depositar que $ 1000
en alguén da conta bancaria cuxa conta número 1.
>> Noutras palabras, este é un exemplo perfecto de onde quere estar seguro
que ambas as afirmacións ocorrer ou non en todos
porque se non o cliente vai ferrar
e vai ter o seu diñeiro e non depositala lo noutro lugar,
ou o banco vai ferrar, onde vai depositar o diñeiro
pero en realidade non subtrai-lo da súa conta de usuario.
Entón quere os dous xuntos para realizar.
Así entra nas transaccións mundiais.
Entón, iso é algo para manter na parte de atrás da súa mente,
non tanto para fins de só un proxecto final,
pero se quere ter o seu proxecto final en algún lugar,
Se desexa iniciar algunha empresa en torno a el,
se quere resolver problema algún grupo de estudantes no campus
e realmente ten un sitio web, en directo activa, ese é o tipo de erros sutís que poden xurdir
Se vostede non pode pensar no que pode pasar dúas persoas
está intentando acceder o seu sitio en, literalmente, no mesmo momento no tempo,
en que as súas consultas poderían entrelázanse.
>> Preparado para un pouco de JavaScript, un teaser do mesmo?
Este é o noso último idioma para o semestre. Todo ben.
Afortunadamente, JavaScript parece moi, moi, moi semellante ás dúas linguas, C e PHP,
que fixemos ata agora.
Non hai Javascript no pset 7, pero é unha ferramenta incrible útil
cando se trata de facer proxectos na web finais ou realmente só programación web en xeral.
Así, unha visión rápida de algo chamado don.
Aquí é unha páxina web super simples que realmente só di Ola mundo,
tanto no título e no corpo.
A medida que a sangría ten suxerido por algún tempo,
existe realmente unha xerarquía para as páxinas web.
Eu podería deseñar ese fragmento mesmo HTML como unha árbore,
pensar de volta para as nosas discusións de estruturas de datos en C, como segue.
Eu teño algún nodo raíz especial chamado nodo documento,
e imos ver o análogo desta en JavaScript en só un momento.
O primeiro fillo e fillo único de que neste caso é a etiqueta HTML.
Non hai mapeamento directo do doctype.
Iso é unha cousa especial, de xeito que temos que simplemente ignore-la cando se trata deste don,
Este documento árbore obxecto Model.
Teña en conta que a etiqueta HTML, que arbitrariamente representado como un rectángulo,
ten 2 fillos: cabeza e corpo.
>> Aqueles son igualmente deseñado como rectángulos.
É significativo que a cabeza é pictoricamente á esquerda do corpo.
A implicación é que a cabeza está en primeiro lugar na árbore.
Polo tanto, non hai, en realidade, unha ordenación dunha árbore cando deseña-lo como este,
aínda que as formas e whatnot son arbitrarias.
Xefe mentres ten un fillo único chamado título,
título, en realidade, ten o seu propio fillo, que é "Ola, mundo",
que eu deliberadamente atraeu como un oval aquí para facelo un pouco diferente do rectángulo.
Estes rectángulos son elementos, mentres Ola, mundo é realmente un nó de texto.
Polo tanto, é un nó na árbore, pero é un tipo de nodo
Entón eu deseño iso arbitrariamente diferente.
Do mesmo xeito que o corpo ten un fillo chamado Ola mundo, así como,
nó de xeito diferente, aínda que eles están casualmente o mesmo texto,
pero eu deseño-lo usando a mesma forma. Entón, quen se importa?
Ben, o que é agradable HTML é que ten esta natureza xerárquica.
E o que é agradable sobre Javascript e particularmente bibliotecas que están dispoñibles gratuitamente
e populares como jQuery, pode navegar pola estrutura de árbore de forma sorprendente fácil.
Calquera das cousas que fixemos en C con punteiros e árbores de desprazamento e recursing en nós
neno entregado o neno dereita, de súpeto, podemos clasificar de concedido
como incrible esclarecedor se non un pouco frustrante
pero non case un xeito eficiente de percorrer preto de programación.
E así, con estas linguaxes de alto nivel como JavaScript
nós imos ser capaces de ir esta árbore máis intuitiva.
>> E de feito a sintaxe vai ser bastante familiar.
Se nunca viu JavaScript antes, esta é unha referencia moi boa
do persoal de Mozilla, as persoas que fan o Firefox,
así me sinto libre para buscar que a súa conveniencia.
O que vai atopar - e eses diapositivas son idénticos aos que usan o outro día -
Similarmente, principal está desaparecido.
Entón, cando escribir un programa en JavaScript, non hai ningunha función principal.
Vostede acaba de comezar a escribir código.
Pero unha distinción fundamental entre Javascript e C e PHP
é que, mentres C e PHP, ata agora, ser executado no lado do servidor
polo aparello, neste caso, ou máis xeralmente, por un servidor,
JavaScript por proxecto é xeralmente executado por un navegador.
Noutras palabras, pode escribir código JavaScript, como estamos a piques de,
nun servidor no aparello, pero inclui-lo entre o seu HTML, entre o CSS,
entre os seus GIFs e os seus PNGs e os seus JPEGs
de modo que cando o usuario visita a páxina web, se está a usar JavaScript
que o código JavaScript vén do servidor ao navegador
e é o navegador que realmente executa.
Entón, iso ten implicacións importantes para a propiedade intelectual, mesmo.
É unha especie de parvo para pensar sobre como protexer o seu IP cando se trata de código JavaScript
porque, por natureza da linguaxe que é executada normalmente lado do navegador.
>> Pode ofuscar, o que significa que pode facelo parecer tolo e feo
con ningún espazo en branco, horribles nomes de variables, para facer máis difícil para as persoas para roubar o seu IP,
pero o fundamental é que é executado lado do navegador.
Aínda que unha parte do servidor como de lado JavaScript pode ser usado,
o caso de uso máis común agora aínda está no seu navegador.
E aquí é o que parece. Aquí é un if-else if-else construír só como C, así como PHP.
Aquí é unha expresión booleana cando "ou" 2 cousas xuntos.
Aquí é cando "e" dúas cousas xuntas.
Aquí está unha instrución switch, que é semellante ao PHP
en que pode cambiar en distintos tipos de valores.
Loops semellante ten loops aquí, que son estruturados de forma idéntica ao que xa vimos antes.
Mentres lazos; temos facer mentres loops.
Variables, sempre tan lixeiramente diferente.
Vostede declarar variables, como fai en PHP e C,
pero tamén é feblemente JavaScript ingresaran.
Non especificar int ou float ou cadea ou algo así normalmente.
Vostede pode especificar var.
Non ten que especificar var, pero ten implicacións non o fai.
Normalmente, se omitir var, accidentalmente crear unha variable global en vez do lugar.
Entón deixe-me propor que case sempre só dicir var e entón o nome da variable.
Non é un tipo, é só para a variable var.
Este sería un exemplo, se é 123 ou "Ola mundo".
Matrices están presentes e sintaticamente semellante ao PHP.
Eu vou dicir números var e entón eu usar corchetes novo para declarar unha variable
cuxo tipo é matriz que ten eses números específicos en que, separados por comas.
E entón, finalmente, este é o único que realmente parece diferente.
Lembre que en PHP que tería aplicado dunha matriz asociativa para un estudante
como Zamyla que pode parecer como este, no que a variable é chamado de alumno.
Os corchetes significan aquí vén unha matriz.
>> O feito de que eu non estou usando índices numéricos pero cordas - id, casa, e nome -
significa que esta é unha matriz asociativa,
e esas frechas co signo igual eo soporte angular
significa que a clave é "ID", o valor é 1;
A clave é a "casa", o valor é Winthrop House;
a clave é "nome", o valor é Zamyla Chan.
Polo tanto, hai tres claves dentro desta matriz asociativa, cada cal ten o seu propio valor.
Nós vimos que pset 7, ou en breve, en JavaScript mesma idea,
pero iso vai quedar así.
Estudante para var - sen sinal de dólar e ningunha mención de tipo aínda, pero var -
iguais e abra claves porque JavaScript, cando ten pares de valores clave,
realmente usa algo chamado un obxecto.
E aqueles de vostedes que tardou APCS ou similar pode lembrar de obxectos Java
ou linguas semellantes.
JavaScript non é Java, en primeiro lugar.
Foi unha decisión deliberada anos proxecto para derrubar outra cousa que era popular,
o seu nome, aínda que non ten ningunha relación fundamental Java en si.
JavaScript posúe obxectos, e crea-los a través da notación chaveta.
Obxectos en JavaScript son practicamente equivalentes a arrays asociativos en PHP
cando se trata de almacenamento de datos para dentro delas.
>> Pero, aínda máis poderosa en JavaScript pode asociarse facilmente funcións
dentro dun obxecto, e que pode facelo noutros idiomas,
é ben un paradigma común, como imos ver.
En suma, este obxecto representa un alumno, que é particularmente Zamyla,
e é semellante conceptualmente, só sintaticamente diferente deste.
Imos realmente usar JavaScript nun ficheiro.
Acontece que hai unha etiqueta script.
Vimos unha marca de estilo e vimos outras etiquetas HTML.
A etiqueta script realmente contén algún código JavaScript.
Deixe-me ir para dentro do aparello onde temos algún código pre-feita.
Eu non teño posta aínda no sitio, pero eu vou facelo despois da aula.
Imos abrir un agasallo, blink.html.
Na década de 1990, houbo literalmente unha etiqueta HTML chamado tag palpebrar de ollos,
e esta foi unha das marcas máis marabillosas demasia en internet
polo cal visitar algúns década de 1990 páxina web estilo e comezar a ver texto piscando-así,
os resultados da etiqueta marqués, que texto, indo así.
Unha das poucas veces en que o mundo foi realmente estableceron un estándar web
todos a través da tarxeta matou a etiqueta palpebrar hai uns anos.
Pero podemos resucitalo lo JavaScript como unha demostración do poder que ten
cando se pode escribir un programa dentro dunha páxina web.
Primeiro imos saltar a cousas novas e concentrarse só na idade.
>> Aquí está o material antigo neste exemplo.
Eu teño unha etiqueta HTML, unha marca de cabeza, e un título de tag.
Entón eu teño unha etiqueta corpo aquí cunha div, que recall é só unha división rectangular da páxina
que teña dado unha única ID arbitrariamente da "saúdo" para,
só así eu teño unha forma de exclusividade referíndose a el, que ten un texto moi sinxelo:
Ola, mundo.
Agora déixeme ir ata o cumio do ficheiro e ver o que hai de novo.
A primeira cousa que é top-se novo é a etiqueta de script,
e dentro do aviso de etiquetas script que eu teña declarado unha función.
Para declarar unha función JavaScript, bastante parecido ao PHP,
vostede literalmente escribir función, entón o nome da función, entre parénteses,
e quizais algúns argumentos tomar calquera.
Entón eu teño a miña chaveta como de costume, e agora temos un código un pouco novo,
pero imos ver o que iso significa.
Entón div var, isto significa só dar-me unha div chamada variable.
Eu podería telo chamado foo, pero eu quería que sexa chamado div
por razóns que quedará claro en un segundo.
A continuación, el se transforma en JavaScript - e este é o código JavaScript integrado na miña páxina web -
hai unha variable global especial do tipo chamado de documento.
JavaScript é na verdade unha linguaxe orientada a obxectos.
Non imos entrar en detalles en 50, como o que iso significa,
pero por agora saber que un obxecto é moi fermoso como unha estrutura.
Como vimos camiño de volta cando, nun dos máis antigos xogos de problema
onde imos poñer unha morea de información nunha estrutura,
Do mesmo xeito é documentar unha estrutura especial que vén co navegador,
ven con calquera páxina web. Non é algo que eu creei.
Dentro desta estrutura do documento, porén, ten non só datos
pero tamén ten funcións.
>> E en calquera momento que ten unha función dentro dunha estrutura dentro dun obxecto,
chámase método. Pero é a mesma cousa.
Un método é unha función que só acontece a estar dentro de outra cousa.
Entón iso significa que esta variable global especial chamado documento
ten unha función chamada getElementById que literalmente fai iso.
El vai te un elemento do Don, Document Object Model árbore,
cuxa identificación é nesta saúdo caso.
Noutras palabras, todo o tempo que pasamos en estruturas de datos entra en xogo aquí.
Esta imaxe dun don que tivemos un momento atrás,
aínda que a páxina é un pouco diferente, se eu tivese unha div na foto,
document.getElementById que volvería para min sería efectivamente un punteiro
para o rectángulo na árbore, unha referencia para o rectángulo na árbore.
Entón, iso é o que significa, en realidade, chamar a unha desas funcións.
Neste caso, unha vez é unha div. Non é un corpo ou un título.
Entón, imos ver o que eu faga con este div agora que eu teño iso dentro deste div variable chamada.
Acontece con JavaScript ten a capacidade de axustar o CSS da súa páxina dinamicamente.
Ata agora, todo o CSS que fixemos, aínda que limitado, é en atributos de estilo,
ou onde máis nos poñer CSS?
Eu medio mimada que un. Na etiqueta de estilo na parte superior do ficheiro.
Ou o terceiro lugar foi?
>> Un arquivo externo, algo. CSS.
Entón eses son os tres lugares que fixemos CSS, ata agora,
pero o problema é que xa codificado todo.
Decidiu que mergullou pset 7, decidimos antes de charla que o noso CSS sería.
Pero se quere cambiar o seu CSS, pode realmente facer iso
unha vez que ten unha linguaxe de programación real.
CSS, HTML - linguaxes non. JavaScript é.
Así, verifícase que, logo que ten un deses rectángulos da árbore
chamado don, ten-se algúns datos dentro dela.
Así, o div que eu simplemente peguei a partir da árbore ten o que nós imos chamar unha propiedade no interior do mesmo
chamado estilo, e ten a propiedade de estilo en si unha propiedade chamada visibilidade.
Gustaríame saber iso só de ollar a un manual de usuario CSS.
Acontece que hai unha visibilidade propiedade CSS que fai o que di.
Fai algo visible ou non, visible ou non.
E como fai que é iso.
Estou pedindo programaticamente a visibilidade deste div está oculto,
o que eu cambiar a? Visible.
Outra cousa a visibilidade desta páxina non está oculto, loxicamente non facelo oculto.
Eu non teño idea por que é visible e oculto e non é visible e invisible.
Esta foi unha decisión mala concepción ao longo do camiño.
Pero eses son de feito opostos CSS: visíbeis e ocultas.
Todo iso fai que significa cambiar o CSS do meu arquivo e fóra, dentro e fóra
para que div particular.
Pero, de novo, esta é unha función chamada palpebrar de ollos. Cando é que a función de palpebrar chamado?
Acontece que hai outra fiestra especial variable global chamada,
similares en espíritu documento, pero que o documento se refire a súa páxina web,
como a árbore DOM, HTML que enviou o servidor,
fiestra se refire ao cromo en torno a el, a barra de enderezo, a barra de título,
e todo o material en torno a súa páxina web.
>> E verifícase que o obxecto da fiestra ten unha función especial dentro do que chamou de setInterval
que fai o que di.
El ha establecer un intervalo - neste caso cada 500 milisegundos -
e, dar un palpite, que é o que vai facer cada 500 milisegundos?
Vai para realizar esa función palpebrar.
E o que é bo aquí é que poderiamos ter feito isto en C aínda que nunca fixemos.
C ten algo chamado de punteiros de función onde podes pasar ao redor de funcións
como argumentos.
Do mesmo xeito en JavaScript pode pasar o nome dunha función a outra función.
E noten que eu estou facendo. Eu non estou facendo iso.
Se eu poñer parénteses despois do palpebrar, significa chamar a función de parpadeo.
Se eu omiti-los, iso significa que aquí é a función de palpebrar
para que setInterval pode chamalo cada 500 milisegundos.
Así, o resultado final, atroz que sexa, é que se eu entrar en localhost e ir blink.html,
Agora teño isto acontecer de novo e de novo.
E se realmente Inspect Element, imos ver se podemos ver iso.
Deixe-me Inspect Element, deixe-me rolar un pouco,
deixe-me escoller elementos máis aquí, e observe o interior DON do inspector de Chrome.
É literalmente cambiando e cara atrás cada 500 milisegundos.
Ou tamén para o noso amigo de Nate,
Se xa se preguntas como iso funciona idea, semellante cun intervalo
pero Nate está realmente facendo uso moi eficaz de cor, neste caso particular aquí.
Entón, o que máis podemos realmente facer isto?
Imos abrir un outro exemplo e tentar algo
iso é programaticamente aínda máis útil do que facer palpebrar cousas.
Deixe-me ir no noso directorio formas hoxe e ir form0.
Esta foi a forma máis fea posible que veña con,
e deixe-me amosar-lle o que parece nun navegador.
>> Deixe-me entrar en localhost / formas, e iso é form0.
Esta é unha forma desagradable de super HTML que ten algúns campos de correo electrónico, contrasinal,
contrasinal e, a continuación, unha caixa pequena de acordo con algúns termos e condicións.
O problema é se eu visitar esta forma e eu non quero darlle o meu enderezo de correo-e,
Eu non quero a aceptar os termos e condicións, quizais, poida prema en rexistrar
e deixa-me a través de calquera maneira.
Isto acontece se someter a un arquivo PHP chamado estúpido dump.php.
Todo o que fai é imprimir os contidos de $ _GET soamente con fins de diagnóstico.
Iso foi o que foi presentado polo usuario agora.
Pero supoña que realmente quere validar a submisión do form do usuario.
Deixe-me ir a versión 1.
Este é form1.html. Parece esteticamente tan malo, pero repare como é fantasía.
Se preme en Register sen cooperar, eu fico chamado.
"Debe proporcionar o seu enderezo de correo-e."
Todo ben. Entón deixe-me tentar iso. Entón malan@harvard.edu. Eu non teño un contrasinal.
Registre-se. "Debe proporcionar un contrasinal." Todo ben.
Entón eu vou ofrecer un contrasinal de carmesim. Registre-se.
"Os contrasinais non coinciden." Eu teño que escribir aquí agora carmesim.
Eu accidentalmente comprobado isto. Registre-se.
"Ten que aceptar os termos e condicións." Todo ben. Concordo alí. Registre-se.
E agora me mostra a saída de diagnóstico por alí.
>> Entón, o que pasou?
Tivemos esa capacidade de validar as submissões de formulario.
En realidade, se fixo mergullar en pset 7, hai unha función de desculparse
que o fai moi doado de berrar co usuario con unha mensaxe en pantalla.
Eu estou usando un mecanismo un pouco diferente, a función de alerta,
o que non é unha función que está encima sorriu unha vez que fai mensaxes de usuarios moi feas.
Pero imos ver o que eu estou facendo aquí.
Este é form1.html, e entender que eu teño algunha sintaxe moi familiar:
tag corpo, etiqueta formulario, atributo de acción, atributo método.
Pero teña en conta que eu dei a miña forma unha identificación única para o barrio.
Entón eu teño un campo de correo-e cuxo tipo é texto,
un campo de contrasinal, cuxo tipo é campo de confirmación de contrasinal, cuxo tipo é o contrasinal,
e, a continuación, unha caixa de verificación, cuxo nome é segundo por aquí, é tipo caixa de verificación.
E entón eu teño un botón de envío.
Pero repare no cume o que máis eu teño.
Primeiro de todo, hai outro uso da etiqueta script.
Se ten algún código JavaScript noutro arquivo, así como con CSS pode inclui-lo.
E fai iso con fonte do script, e despois entender que eu estou conectando aparentemente
para googleapis.com para un camiño moi longo, pero cuxo nome do ficheiro remata en jquery.min
para menos. js.
jQuery é unha biblioteca super popular para JavaScript que só fai JavaScript
todo o máis user-friendly para usar.
É efectivamente facer un estándar de feito.
Así, aínda que o que está a piques de ver non é puro JavaScript, por si só,
é unha biblioteca encima JavaScript moi parecido coa biblioteca CS50 é unha capa
enriba do código de baixo nivel C, a realidade é case todos en Internet usa.
Entón, estas non son as rodas de adestramento. Este é só o mellor practicar estes días.
Agora vexa abaixo que é o meu etiqueta script propio, e observe o que eu fixen aquí.
Acontece que o jQuery fai algo un pouco de fantasía.
JavaScript debe cifrões, pero eles non teñen sentido.
>> Son como a letra A ou B ou C.
jQuery simplemente adoptou a convención ou tipo de reivindicou o feito de
que US $ será o seu símbolo especial.
Así, logo que cargar este ficheiro JavaScript global ata aquí coa tag script,
ten acceso a unha variable global especial que se chama $.
É máis apropiadamente chamada jQuery, pero que non parece tan sexy como $.
Pero dólares non ten ningún significado especial. No PHP tivo un significado especial.
Tiña que ter iso na fronte dunha variable.
Esta é só unha cousa sexy que asumiron.
O que está a suceder aquí?
Repare que eu estou pasando para a función jQuery meu documento variable global
e entón eu estou chamando. listo.
O jQuery esencialmente fai é que permite que tome algunhas cousas JavaScript vainilla
como o obxecto documento o obxecto ventá
e se pasalo para a función jQuery -
e, de novo, para ser claro, esta é unha función chamada jQuery -
o que fai é que volve a unha versión especial de documento
que ten máis funcionalidades asociada a el.
Así, en JavaScript cru non hai ningunha función listo,
pero se pasar documento para a función jQuery primeira,
el retorna a vostede unha versión especial do obxecto do documento
que ten características máis extravagantes.
E é por iso que a xente quere del. Ela só fai as cousas máis fáciles de facer, como estamos a piques de ver.
Entón, o que esta liña de código significa?
Esta liña de código aquí significa que o documento está listo -
noutras palabras, unha vez que o navegador é rematar de ler este ficheiro de arriba cara abaixo -
vai adiante e executar a seguinte función.
O que é realmente interesante en JavaScript - e PHP ten iso tamén -
e funcións anónimas.
En JavaScript pode declarar funcións que non teñen nome, pero eles teñen un corpo.
Teña en conta o que está a suceder aquí.
>> Esta é unha función chamada listo, e iso significa só facer o seguinte
cando a páxina web enteira está listo, cando todo foi lido a partir do servidor.
O que quere facer? Eu quero facer un anaco de código.
Teña en conta que nós non queremos facer ese código inmediatamente.
Se eu omitido iso, iso significaría empezar inmediatamente a execución destas liñas de código.
Pero o feito de que eu estou dicindo non, non, non, involucrar este en unha función anónima como esta
significa non executa-lo aínda, chamalo, eventualmente.
Vimos iso hai un momento no noso formulario de exemplo anterior.
Cal é a función que chamamos finalmente, a 500 milésimas de segundo máis tarde? Blink.
Así, a mesma idea.
Unha vez máis, aínda que iso parece un pouco raro, só tomar agora en fe
que para declarar unha función anónima que se chama, finalmente,
simplemente escribir function () {
Entón, o que o código que imos facer, finalmente? O seguinte.
Isto tamén parece un pouco novo, pero iso significa que aquí é a función jQuery,
e este é agora un atallo.
Este fragmento de código HTML na parte inferior da pantalla, por suposto, ten algunha representación árbore.
Non é iso. Esta páxina é máis interesante do que este exemplo Ola mundo.
Pero hai algunha árbore que corresponde a este HTML.
Sería unha dor no pescozo para ter que aplicar algún tipo de función recursiva
para comezar o nodo raíz e, a continuación, atopar o nodo cuxo ID é o rexistro.
Entón, o que fai jQuery super doado para nós é literalmente iso.
Dalle me calquera div ou calquera forma, calquera que sexa elemento HTML
ten un ID de rexistro.
Isto é equivalente a document.getElementById ('Rexistro').
>> Por que persoas como jQuery?
Porque é máis curto para escribir. Pero iso é todo o que é. É a mesma idea.
Tiren-me a etiqueta cuxa identificación é o rexistro.
E cando esa marca, que pasa a ser unha forma, é sometido,
vai adiante e executar o código.
Polo tanto, imos ter un ollar agora como estamos facendo validación de formulario.
A sintaxe é recoñecidamente enigmática en principio, pero o que está a suceder?
Esta liña de código é certo, eu vou berrar que o usuario facilite o seu enderezo de e-mail.
Entón o que é esta liña de código?
$ Significa jQuery. Agora, observe iso.
Este é tipo de como CSS.
Se xa mergullou en CSS, con todo, vostede sabe que iso significa que o elemento cuxa identificación é o rexistro.
O espazo significa atopar un neno ou un descendente de inscrición, cuxo nome é de entrada.
E entón esa cousa entre corchetes é un filtro pouco.
E mesmo se isto parece enigmático, isto significa só ir ao formulario cuxo ID é o rexistro,
ir ao interior do elemento de entrada que cuxo nome e correo-e,
e en seguida, obter o seu valor, calquera que sexa o seu valor pasa a ser -
asdf se iso é todo o que eu escriba ou malan@harvard.edu se é iso que eu escriba.
Entón, se o valor do campo do formulario de correo-e == nada, berrar co usuario.
Outra cousa, se o valor do campo de contrasinal == nada, berrar co usuario.
>> Else, o valor do campo de contrasinal non é igual ao valor do campo de confirmación
que era o elemento doutra forma, berrar co usuario.
E entón, finalmente - e esta tamén ten algunhas nova sintaxe propia,
pero unha vez que xa viu, e polo menos un pouco máis razoable -
máis o formulario cuxo ID é o rexistro ten un elemento de entrada, cuxo nome é segundo
e é marcada, vai adiante e berrar co usuario.
Entón, eu totalmente recoñecer que este é completamente esmagadora a primeira vista.
É un monte de nova sintaxe. Pero todos jQuery segue estes tipos de patróns.
E honestamente, eu nin sabía que iso existía ata poucos minutos.
Eu Googled: "Como é que comproba que a caixa de verificación está marcada en jQuery?"
e esta é a sintaxe, porque hai diferentes formas de facelo
con real código JavaScript prima.
Así como a primeira páxina do conxunto de problemas 7 enfatiza,
pset 7 é moito máis un exercicio de inicio se
onde nós fornecen, espero, un cadro conceptual que para afrontar o pset.
>> Pero, como é frecuentemente o caso con deseño web, cómpre a vostede realmente dar unha fuçada,
incorporar fragmentos de código e exemplos dende a web, sempre que cita-los
acordo cos termos en que a primeira folla,
e entender que aprender HTML, CSS, JavaScript e ata SQL
é realmente pretende ser este exercicio na casa, cando comezamos a tomar esas Rodas pequenas.
E entender tamén que hai tantas cousas máis que podes facer con un navegador.
Dentro da maioría destes elementos hai outras cousas chamados manipuladores de eventos.
E aínda que só mirou para os chamados onsubmit e onReady,
podes facer cousas como onkeydown, onkeyup,
como cando o usuario toca unha tecla, pode escoitar isto e cara arriba.
Gmail ten atallos de teclado.
Como Google aplicar atallos de teclado, como C para compoñer?
Eles escoitar eventos, como son chamados, como onkeypress ou onkeyup e onkeydown.
Se xa pairava o rato sobre algunha opción de menú
e, de súpeto, preparado, aparece un menú ou cambia de cor gráfico,
como eles están facendo iso?
En vez de escoitar onReady ou onsubmit, escoitar onmouseover ou onmouseout.
>> Así, en breve, con estes principios moi simples que nós comezamos a rabuñar a superficie de hoxe
e imos mergullar aínda máis para o mércores, que ten, cada vez máis,
poder de aplicar os tipos de cousas que xa está familiarizado.
Entón imos terminar alí, e nós imos seguir este mércores.
>> [CS50.TV]