[Powered by Google Translate] [Java 9]
[David J. Malan - Universiteti i Harvardit]
[Kjo është CS50. - CS50.TV]
Dakord. Mirëpritur mbrapa. Kjo është CS50, dhe kjo është fillimi i javës 9.
Sot ne të përqëndrohet në veçanti në projektimin, jo më në kontekstin e C
por në kontekstin e PHP dhe pak e SQL dhe pak e JavaScript,
veçanërisht drejt një fundi të dy pset 7 dhe gjithashtu projektin tuaj përfundimtar.
Në fakt, nëse ju jeni në atë moment në projektin tuaj përfundimtar
ku me sa duket si e një orë apo më shumë më parë ju të paktën filluar të jepni disa menduar
për projektin tuaj përfundimtar dhe ju jeni duke menduar se ju dëshironi të bashkëpunojnë me 1 ose 2 shokët e klasës,
në qoftë se ju jeni ka probleme lidh me tha shokëve,
të ndjehen të lirë për të plotësoni formularin në cs50.net/partners/form.
Ajo vetëm kërkon që ju të jeni, çfarë lloji i projektit ju jeni duke menduar rreth,
ku ju jetoni vetëm për arsye logjistike.
Dhe pastaj, nëse ju doni të mbani një sy në gjatë javës së ardhshme apo më shumë nga spreadsheet URL atje,
atëherë ju mund të shihni një version read-e vetëm të doc Google
në të cilën ne jemi mbledhur këtë informacion.
Pra, nëse ju dëshironi të punoni me dikë, me të gjitha mjetet të ndjehen të lirë për të arritur jashtë për njerëzit
nëpërmjet këtij mekanizmi.
Por shumica e folks bëjnë solo punës. Kjo është krejtësisht në rregull.
Pra, mos të ndjehen se kjo është në asnjë mënyrë të detyrueshme.
Të premten ajo ishte vetëm mua dhe disa të ekipit në këtu,
Teatri bosh për pjesën më të madhe.
Ka qenë 3 turistë ulur deri atje, kështu që ishte pak i vështirë.
Çfarë kemi biseduar për bazat e të dhënave ishte dhe ne biseduam rreth 7 pset pak.
Dhe në qoftë se ju nuk e keni për të kapur të ndodhë që në video vetëm ende, kjo është në rregull.
Unë do të përpiqemi për të përcaktuar të gjitha kushtet që ne ndryshe do të marrë për të dhënë
bazuar në leksion të së premtes.
>> Por sot ne do të përpiqemi për të merrni ju në pikën
e jo vetëm të qenit në gjendje për të bërë diçka si pset 7
por me të vërtetë kuptojnë se çfarë po ndodh nën kapuç,
veçanërisht disa nga abstraksionet që kemi vënë në vend në dosjen functions.php
për të bërë jetën tuaj pak më e lehtë, por në mënyrë që ju përfundimisht kuptoni
kështu që kur rrotat e trajnimit të vijë jashtë në disa javë ju mund të mbijetojnë
në botën reale dhe të bëjë këtë stuff pa ndonjë kornizë CS50 nën ju.
Kjo $ _SESSION, për ato prej jush që janë të njohur
ose që tashmë kapur video të premten, çfarë do SESIONI le të na bëjë
në një aplikim PHP bazuar web?
Kjo është një ndryshore superglobal, që do të thotë se është e ngjashme në frymë të GET dhe PAS
dhe disa të tjerë, por çfarë është kjo gjë e dobishme për të?
>> Çfarë është SEANCA përdoret për të? Po. [Student] Logging in
Na vjen keq? [Student] Logging in Logging in vërtetë.
Në pset 7 ne jemi duke përdorur këtë superglobal SESIONI për të lehtësuar logging in
Dhe çfarë është e bukur në lidhje me këtë superglobal është se ajo është një grup shoqerues.
Një grup asociativ, risjell, është vetëm një grup, por nuk kanë më të cilit indekseve të jetë një numër
si 012. Ata mund të jenë numra ose ata mund të jenë edhe vargjet.
Dhe kështu që nëse ju keni fetar në pset 7 ende, ju mund të kujtojnë se ne jemi ruajtjen e një ID kyç të quajtur
brenda kësaj grup associative vlera e së cilës është diçka si 123 -
çfarëdo regjistrohet aktualisht në ID e përdoruesit është.
Motivimi për këtë është se edhe pas përdoruesi ka vizituar localhost
ose faqen e internetit e mia më përgjithësisht dhe më pas ata kanë hyrë brenda,
edhe në qoftë se ata nuk klikoni një lidhje ose të kthehen në faqen time për 5 minuta
apo edhe një orë ose edhe një ditë, por ata lënë dritaren hapur shfletuesin e tyre,
nëpërmjet këtij superglobal mund ta mbani mend se ata janë futur me emrin tuaj
>> Me fjalë të tjera, ajo lejon mua për të ruajtur diçka pak më afatgjatë që unë dua në lidhje me një përdorues.
Dhe ju mund të mendoni për atë me të vërtetë, si mishërim i një karrocë pazar.
Vende si Amazon duket të ju lejojnë të vënë gjërat në një karrocë pazar,
por HTTP, protokolli që fuqitë Web, është pa shtetësi
në kuptimin që kur ju vizitoni një faqe interneti,
për pjesën më të madhe që ju nuk keni ndonjë lidhje të vazhdueshme të rrjetit
mes shfletuesin tuaj dhe server.
Sa më shpejt që ju keni shkarkuar HTML dhe JPEGs dhe gifs dhe të gjithë që,
lidhja shkon larg dhe ju vetëm duhet një kopje të HTML dhe gjësend nga serveri.
Por në qoftë se serveri do të kujtoni diçka për ju,
barra është në server të vërtetë regjistrojnë këtë informacion.
Dhe kështu ju programues të cilët kanë kontroll mbi server
mund të vënë çdo gjë që ju dëshironi më në brendësi të kësaj grup superglobal associative
dhe ajo do të jetë atje herën tjetër përdorues vjen mbrapa,
nëse kjo është minuta apo edhe ditë më vonë, nëse ata mbyllë dritaren e shfletuesit,
në të cilën pikë SEANCA zhduket.
Pra, kjo është ruajtja kalimtare, është jo-të vazhdueshme, dhe ajo është menduar për të shkuar larg
sa më shpejt që përdoruesi mbyll shfletuesin e tyre - jo vetëm se, tab shpesh shfletuesi tërë,
duke efektive prerjet përdoruesit jashtë.
Pra, si është kjo gjë zbatohet në të vërtetë?
Le të marrin një vështrim të shpejtë në një shembull të thjeshtë kemi shikuar në të premten.
Për ata të panjohur, ajo ishte aq e thjeshtë si kjo.
Kjo është një faqe web të cilit vetëm qëllim në jetë është që të thoni
sa herë kam vizituar këtë faqe.
Kjo është hera e parë që këtu të hënën se kam vizituar atë, kështu që ajo thotë se 0 herë.
>> Por në qoftë se unë të fillojë reloading këtë faqe, ajo thotë se 1 herë, 2, 3, 4, 5,
dhe kjo përfundimisht do vetëm i mbajnë në numërimin lart, lart, lart, lart, lart
për çdo herë që unë në fakt klikoni Rifresko mbi të.
Pra, si është kjo pune? Më lejoni të shkoj në brendësi të kësaj dosje të quajtur counter.php.
Pjesa e lartë e saj është e gjitha komentet blu, por pjesa interesante është këtu.
On line 13 që ne e quajmë këtë session_start funksion,
dhe kjo është fjalë për fjalë të gjithë ju duhet të bëni nëse ju dëshironi të keni qasje
në këtë superglobal të veçantë të quajtur $ _SESSION.
Kjo e bën të mundur të gjithë, dhe ne do të shohim në një moment sa që është e mundur.
Në linjë njoftim 16 atë që unë jam duke bërë.
Nëse çelësi, e quajtur kundër - me fjalë të tjera, vlera e indeksit - "kundër"
ekziston brenda kësaj grup të quajtur seancë, atëherë çfarë jam duke bërë me atë në përputhje më poshtë?
Çfarë është Shkarko 18 duke bërë?
>> [Përgjigja e padëgjueshme Studenti] Çfarë është ajo? [Student] Ruajtjen e vlerës. Mirë.
Është ruajtjen e vlerës që është në sesion të drejtë tani në një variabël të re lokale të përkohshme,
$ Counter në të gjitha Fjala.
Vini re se PHP është tashmë qenë pak dembel këtu.
Njoftim ne nuk kemi asnjë përmendje të int ose float ose string ose diçka të tillë
sepse PHP është shtypur dobët, ku ju nuk keni për të specifikojë llojin e një ndryshore,
dhe në këtë rast unë nuk e kam këtu edhe shpallur atë ende.
Unë jam deklaruar atë në brendësi të këtyre teksteve kaçurrel dhe ndryshe C, në fakt kjo është në rregull.
Pa marrë parasysh se sa thellë mbivendosur deklaratën e një ndryshore është në PHP -
brenda mbajtëse kaçurrel, brenda së mbajtëse kaçurrel dhe si -
ajo do të në atë moment në kohë ekzistojnë për pjesën e mbetur të programit,
për mirë apo për keq.
Pra, ajo menjëherë bëhet globale sa më shpejt që ju të përcaktojë atë si ne jemi duke bërë këtu.
>> Përndryshe, në qoftë se unë nuk do të gjeni se nuk ka asgjë në superglobal seancë,
Unë jam duket Initializing këtë counter ndryshueshme në 0,
duke supozuar vetëm përdoruesi nuk ka qenë këtu më parë.
Dhe atëherë kjo sigurisht është e bën rritjen counter si?
Unë jam përditësimin e vlerës që është brenda e kësaj grup associative
duke vendosur atë të barabartë për çdo gjë kundër aktualisht është + 1.
Nëse unë lëviz nëpër këtu për HTML të faqes, kjo është në fakt shumë e thjeshtë.
Unë kam të gjitha në trupin e kësaj faqeje është, "Ju keni vizituar këtë faqe herë kështu-dhe-kështu."
Dhe kjo është një konstrukt PHP.
Nëse ju bëni <? =, Kjo është e barabartë me atë në mënyrë efektive funksion?
Është me të vërtetë e barabartë me diçka si printf, të cilat ne kemi parë shumë herë në C,
edhe pse si ju mund të dini tashmë nga spec në pset 7,
është shkruar edhe një funksion që vetëm kopje diçka jashtë, ajo nuk ka të vërtetë të përdorin kodet format,
dhe ju në fakt mund të them jehonë si.
Ata janë të gjithë ndonjëherë në mënyrë pak më të ndryshme, edhe pse efekti neto fund të fundit është e njëjtë.
Pra, kjo përdorimi i barabartë me shenjë është vetëm lloj i një mënyrë elegante për të bërë atë
më shumë shkurtimisht se ju mund të jetë ndryshe në gjendje të.
Pra, kjo është e gjitha kjo faqe e bën. Ajo printon nga vlera e banak.
Si është e gjithë kjo në të vërtetë ndodh?
Ju mund të kujtojnë një javë apo më shumë më parë kemi filluar duke kërkuar nën kapuç
se si punon një faqe interneti duke përdorur këtë tab inspektori.
>> Chrome ka këtë si në versionin Mac, versioni i Windows, dhe madje edhe versionin Linux,
dhe Firefox dhe IE kanë mekanizma të ngjashme ku ju e keni këtë Rregullues ndërtuar në
brenda i shfletuesin.
Le të marrin një vështrim në vijim.
Ne kemi marrë një bandë e tërë e skedave këtu, dhe kujtojmë se një pari nga e majta është Elemente,
dhe pa marrë parasysh se sa godawful HTML dhe JavaScript është në një faqe,
kujtojnë se me tab Elemente të vërtetë ju mund të lundruar HTML hierarkike
dhe e bukur dhe mjeshtërisht.
Pra, nëse ju jeni duke u përpjekur për të mësuar nga një faqe interneti si Google apo Facebook
apo me të vërtetë ndonjë website, të kuptojë se ju jeni me siguri më të mirë
shikuar në kodin burim në këtë mënyrë në krahasim me shikimin burimin e papërpunuara,
e cila mund të jetë një rrëmujë, siç kemi parë sidomos në faqen e Google.
Pra, nëse unë në vend të klikoni mbi butonin Rrjeti këtu,
le të shohim se çfarë po ndodh, kur kam vizituar këtë faqe.
Së pari më lejoni të qartë cache tim.
Unë jam duke shkuar për të shkuar në Settings në Chrome dhe pastaj të shkoni në Histori
dhe pastaj Qartë të gjitha të dhënat në shfletim.
Ju mund të përdoren për të bërë këtë për qëllime të tjera, [qeshur]
por kur është fjala për faqet e internetit në zhvillim, është në të vërtetë e dobishme -
nëse ju jeni duke qeshur ju e dini. [Qeshura]
Është e vërtetë me të vërtetë e dobishme kur zhvillimin e faqet e internetit, sepse realiteti është
gjëra të tilla si cookies dhe gjëra të tilla si fotografi HTML, fotografi cached cached JavaScript
në fakt mund të bëhet një dhimbje koke e madhe, sepse në qoftë se për çfarëdo arsye
shfletuesi vendos të cache disa fotografi dhe ende ju keni bërë ndryshime në këtë dosje në server
por shfletuesi nuk e ka kuptuar me të vërtetë se skeda është ndryshuar
dhe për këtë arsye nuk ka të vërtetë të ri-ta shkarkuar atë edhe kur ju klikoni butonin Reload,
një nga mënyrat më të pagabueshëm për të vetëm sigurohuni që faji nuk është me kodin tuaj,
kjo është me sjelljen e shfletuesit, është për të shkuar në këtu në shfletuesin tuaj
dhe vetëm të qartë të gjithë historinë në mënyrë që nuk ka konfuzion.
>> Dhe pastaj nëse ju me të vërtetë duan të jenë të paranojak, lë shfletuesin, rinisni atë,
dhe pastaj të bëjë që të gjitha është duke punuar ashtu siç pritet.
Pra me pak fjalë, cache pastrimin është i mirë kur bën zhvillimin.
Pra, këtu kemi tab Network.
Unë më parë kishte vizituar faqe 9 herë, por më lejoni të shkoj përpara dhe tani klikoni reload.
Dhe unë jam kthyer poshtë për 0.
Le të shohim se si të vërtetë është se kjo superglobal SEANCA është duke u zbatuar.
Unë jam duke shkuar për të klikoni mbi kërkesën HTTP 1 që është bërë,
dhe kjo dritare debugging më lejon të shikoni brenda për këtë.
Këtu unë shoh vetëm përgjigje e nga serveri, e cila nuk është interesante.
Unë e kam parë këtë në çdo numër të mënyra.
Por ajo që është interesante janë teknikisht headers.
Nëse unë lëvizni poshtë këtu dhe të përqëndrohet në headers kërkesë dhe kliko View Source,
atë që unë jam duke shkuar për të parë është fjalë për fjalë Kërkesa HTTP
që vetëm shkoi nga shfletuesin tim në server,
GET qenë fjala operative dhe pastaj / counter.php qenë emri i file,
HTTP/1.1 vetëm duke versioni HTTP që shfletuesi ime është duke përdorur.
Kjo linjë këtu është një kujtesë e vogël nga shfletuesi në serverin se çfarë emri i serverit është
se ai dëshiron të flasin për të.
Dhe pastaj pjesa tjetër e kësaj është ndonjëherë interesante, por jo të rëndësishme tani.
>> Kjo është vetëm një lloj kurioziteti.
Fshehtë edhe pse kjo është string, në çdo kohë shfletuesi juaj viziton një faqe interneti
ajo është e informuar atë server ju jeni duke përdorur shfletuesit
dhe se çfarë sistemi operativ që jeni duke përdorur dhe çfarë versioni të tij.
Pra, nëse ju keni menduar ndonjëherë se si faqet e internetit të tilla si CNN dhe gjësend
e di se çfarë përqindjet janë përdoruesit e Mac për përdoruesit, Web PC,
IE përdoruesit, përdoruesit Chrome dhe si, kjo është për shkak se të gjithë shfletuesit tonë
janë thënë çdo website të vetme atje ajo që ne jemi.
Kjo nuk do të përmbajnë informacion personalisht të identifikueshme,
por ajo ka treguar se çfarë server IP adresa juaj është dhe çfarë shfletues dhe OS jeni duke përdorur.
Pra, kjo është ajo ku ky informacion është.
Por ajo që është më interesante tani, kur është fjala për këto seanca është header përgjigje.
Më lejoni të klikoni shikoni burim tjetër për përgjigje.
Çfarë është interesante këtu është disa gjëra.
1, kemi marrë përsëri një kod statusit të 200.
Ne kurrë nuk shohim këtë kod status, sepse kjo do të thotë të gjitha është e mirë.
Kjo do të thotë fjalë për fjalë në rregull në kontrast me diçka tjetër.
Çfarë është një numër i kemi ndonjëherë shohim se është e keqe? [Student] 404.
, 404 'file' nuk gjendet, 403 ju mund të pengues mbi tashmë,
e cila është e ndaluar, që do të thotë se keni harruar diçka chmod, më shumë gjasa.
Dhe ka një bandë e të tjerëve.
>> Këtu poshtë, kjo është pak e çmendur.
Unë me të vërtetë vetëm shkroi këtë skedë pak minuta më parë nga pasting atë në Gedit.
Përse kjo faqe skadon në vitin 1981 para se të vërtetë ishte një Web?
Çfarë po ndodh atje?
>> [Përgjigja e padëgjueshme Studenti] Vula e kohës. Por pse?
Është disi arbitrare, por është e vërtetë të dobishme.
Çfarë kjo është thënë në shfletuesin tim është this file PHP ju keni kërkuar sapo ka skaduar tashmë.
Në fakt, ajo skaduar 30 vjet më parë.
Por çfarë do që me të vërtetë do të thotë?
Ajo thjesht do të thotë herën tjetër përdoruesi viziton këtë faqe,
qoftë me reloading ose shtypja URL në shiritin e adresave,
sigurohuni që ju të shkoni dhe të shkoj të marr një kopje të re të saj.
Kjo është lloj i një shembull i goditjes cache,
një fjalë e trashë që vetëm do të thotë duke u përpjekur për të shkurajuar shfletues
nga të vërtetë HTML caching që është dërguar nga një server
në mënyrë që ju nuk e goditi aksidentalisht Rifresko dhe pastaj shikoni versionin e njëjtë të file.
Ju në fakt duan server për të dërguar një kopje të re.
Pra, fakti se ajo është vetëm do të thotë se 1981 kjo është ajo që pajisja është zgjedhur
si një datë arbitrare në të kaluarën.
Por linja e vërtetë lëng është tani kjo.
Edhe para 50 ndoshta ju jeni paksa të njohur me cookies.
Si e drejtë tani, sidomos në mesin e atyre më pak të rehatshme apo në mes,
çfarë është një cookie në mirëkuptimin tuaj tani
edhe pse ne jemi gati për të bërë kuptim tuaj më teknike?
Çfarë është një cookie? Po.
[Student] Informacion rreth përdoruesit, si në qoftë se ata kanë shkruar emrin e tyre të përdoruesit ose diçka.
>> Mirë. Kjo është informacion në lidhje me përdoruesit, nëse ata kanë shtypur në emrin e tyre të përdoruesit tashmë.
Cookies janë një mënyrë ku servers mund të mbani mend diçka në lidhje me një përdorues.
Dhe çfarë është me të vërtetë një cookie është një file teksti ose disa sekuenca e bytes
që është mbjellë nga serveri brenda e shfletuesit tuaj,
dhe brenda kësaj dosje, ose në mesin e atyre bytes është një lloj identifikues.
Ndoshta kjo është fjalë për fjalë emrin tuaj të përdoruesit, por më shpesh është diçka më e fshehtë-looking
si kjo gjë këtu - bo8dal3ct dhe kështu me radhë - ky varg të vërtetë e madhe alfanumerike
kjo është me të vërtetë do të thotë vetëm të jetë një identifikues unik për ju.
Ose ju mund të mendoni për atë si lloj i një vule dore virtuale.
Nëse ju shkoni në një klub apo një amusement park, të mbani mend se ju keni paguar
dhe shkuar në, ata vënë një shirit të kuq pak në dorën tuaj të disa lloj,
dhe që kujton njerëzit në sportelin që ju keni paguar tashmë
dhe ju mund të vijnë e të shkojnë si ju lutem.
Cookies janë pak të ngjashme në shpirt për këtë.
Herën e parë kam vizituar këtë faqe interneti, si unë vetëm e bëri pas pastrimin cache tim,
server web, aplikim në këtë rast, vendos një vulë mbi dorën time
emri i të cilit është PHPSESSID, sesioni ID,
vlera e të cilave është kjo me të vërtetë e gjatë alfanumerike string.
>> Kështu që tani është lloj i emblazoned në duart e mia në mënyrë që herën tjetër që unë goditi ringarkoni
ose me dorë vizitoni këtë URL në një shfletues,
shfletuesin tim nga përkufizimi i HTTP do të paraqesë vulën e dorës
përsëri dhe përsëri dhe përsëri.
Pra, edhe pse serveri nuk do të dinë që unë jam,
ata të paktën e di që unë jam përdoruesi njëjta ose të paktën, më konkretisht, shfletuesi njëjta.
Dhe kështu kjo është në fund të fundit si superglobal SEANCA është zbatuar.
Serveri ka asnjë ide se kush jeni, kur ju sërish një faqe interneti për të dytën apo të tretën herë
nëse ju paraqesim këtë vulë dore.
Dhe sa më shpejt që ju të pranishëm atë pullë dorë,
server web thelb shkon në një bazë të dhënash të vogël të vet
dhe kontrolle, në rregull, unë kam parë vetëm vulën e dorës bo8dal3ct përdoruesit dhe kështu me radhë.
Më lejoni të shohim se çfarë informacioni programues ka ruajtur
brenda e superglobal në lidhje me këtë përdorues,
dhe pastaj më lejoni të bëni të sigurtë që se të dhënat është përsëri brenda sesionit të superglobal
kështu që programues mund të ri-hyrë në të dhënat që
edhe në qoftë se ajo u ngrit disa minuta ose orë më parë.
Pra, në fjalë të tjera, cookies, të cilat mori një rap keq për disa kohë
për shkak të pasigurisë në shfletues dhe ata mund të vërtetë të shkelin privatësinë tonë dhe të gjithë këtë,
ata në fakt kanë dobi të madhe sepse pa to
ju do të jetë vazhdimisht për prerjet në çdo faqe që ju vizitoni Facebook
apo çdo email Gmail ju lexoni nëse shfletuesi nuk kanë ndonjë mënyrë për të kujtuar
që e keni vërtetuar tashmë.
>> Pra, në këtë mënyrë cookies janë dërguar mbrapa dhe me radhë nëpër tela.
Një tjetër kuriozitet në lidhje me cookies, sidomos këtu, është se kjo është plotësisht në cleartext.
Nuk ka asnjë encryption ndodh këtu çdo gjë,
dhe në të vërtetë unë jam duke përdorur HTTP në këtë moment.
Një nga momentet preferuarat tanë në CS50, e cila tani është 2 vjet më parë,
ishte rreth kohës një mjet i quajtur Firesheep doli.
Kjo ishte një pjesë e lirë të softuerit që është bërë nga një studiues të sigurisë
si një wake-up thirrje për komunitetin për të thënë se sa zbatohet atrociously
disa mekanizma vertetimi në Web ishin.
Pra, për disa kohë, Facebook ka qenë pothuajse tërësisht mbi HTTP HTTPS, nuk ka.
Dhe edhe në qoftë se ju nuk keni ide se si kripto punon, S është e sigurtë
kështu që kjo do të thotë se ka të paktën disa encryption të përfshira.
Facebook nuk përdoret për të kriptuar emrat e përdoruesit dhe fjalëkalimet,
por sa më shpejt që ju të shikuar në tuaj Pokes apo mesazhet tuaja ose feed tuaj lajme,
të gjitha që u unencrypted.
Kështu ishte deri në Gmail vetëm një vit ose 2 më parë.
Çdo herë që të regjistrohet në, po, ata kanë përdorur encryption sigurt,
por më pas ata nuk e bëri. Dhe pse mund që të jetë?
Pse të mos i përdorni vetëm kriptografinë të gjithë kohës në raste të përdorimit si ky?
Çfarë është ajo? Unë mendoj se kam dëgjuar diçka. [Student] Speed.
Speed, apo jo? Ka shumë mënyra rreth kësaj.
Por në qoftë se ju vetëm lloji i kënaqur me atë logjikisht, nëse ju encrypt diçka,
ju duhet të bëni të paktën një punë pak më shumë.
Në pset 2 kur zbatohet Cezarit apo Vigenere apo edhe Crack,
vetëm shtypjen e një varg është relativisht e lehtë.
Encrypting dhe pastaj shtypjen një varg minimalisht kërkon punë pak më shumë.
>> Për faqet e internetit super popullor si Google dhe Facebook,
në qoftë se ju duhet të bëni më shumë punë për çdo përdorues për çdo faqe interneti të vetme që ata vizitojnë,
që vetëm merr më shumë kohë CPU.
Dhe në qoftë se keni nevojë për më shumë kohë CPU, ju mund të kenë nevojë serverat e më shumë,
që do të thotë që ju mund të kenë nevojë më shumë para.
Dhe kështu për shumë vite kjo vetëm të vërtetë nuk ishte praktikë e mirë.
Njerëzit do të përdorin SSL encryption vetëm kur ata kishin nevojë për të.
Por ajo doli, dhe si ky shoku me Firesheep bërë super të qartë,
kur ju djema të cilët janë aktualisht në Facebook tani -
Nga kurioziteti, le të shohim nëse ju do të fess up.
Nëse ju jeni në Facebook drejtë tani në disa tab, edhe nëse ajo nuk është foregrounded,
është HTTP HTTPS juaj URL apo?
[Studentët] S. shumta S? [Qeshura]
Rregull. Çdo HTTP? Vetëm 1? Rregull.
Pra, të gjithë ne mund të kollitem në Facebook llogari se djalë të drejtë tani.
Për pjesën më të madhe kjo është bërë ndezur nga default, të paktën në disa faqet e internetit.
Dhe histori të gjatë të shkurtër, nëse trafiku juaj web nuk është e koduar,
jo vetëm që e bën HTML shkuar mbrapa dhe me radhë nëpër WiFis unencrypted,
kështu që gjëra të tilla si biskota të shkuar mbrapa dhe me radhë të gjithë në ajër
pa ndonjë formë të encryption.
Pra, nëse ju keni vetëm pak tru e programimit ose pak e Googling aftësitë
për të gjetur software të lirë që e bën këtë, të gjithë ju duhet të bëni është ulur në Starbucks
ose ulen në një aeroport ku ka përgjithësisht unencrypted WiFi
dhe vetëm shikojnë për fjalë kyçe të tilla si Cookie Set-: ose PHPSESSID
sepse në qoftë se ju keni tru teknike të vetëm shikojnë WiFi
për të gjitha bit që rrjedhin nëpër ajër për këtë model,
atëherë ju mund të them se PHPSESSID djalë ndodh të jetë bo8dal dhe kështu me radhë.
Dhe pastaj përsëri në qoftë se ju jeni të mjaftueshme teknikisht tru ose keni mjet i duhur,
atëherë ju mund vetëm të rikonfiguruar shfletuesin tuaj për të filluar paraqitjen atë vulën e dorës
të Facebook.com, dhe Facebook është vetëm do të supozojmë se ju jeni që djalë
sepse të gjithë ata e dinë se nuk është se kush jeni, por që ju e keni këtë identifikues unik.
Pra, nëse ju vjedhin atë identifikues unik dhe ta paraqesë atë në web server si vet tuaj,
ata janë vetëm do të ju tregojë ushqim atij personi lajmeve
ose mesazhet që personi ose Pokes.
>> Dhe unë do të Google tani se si të aktivizoni HTTPS for Facebook ndoshta.
Por me të vërtetë është aq e thjeshtë sa se.
Dhe kështu Facebook dhe Google dhe si kanë marrë me të vërtetë mirë në këtë,
por të mbajtur një sy jashtë të gjithë më shumë për çdo faqet e internetit që ju vizitoni, që nuk përdorin HTTP
dhe kanë disa lloj të informatave të ndjeshme mbi ta,
nëse kjo është financiare ose personale ose doja.
Nëse ata nuk jeni duke përdorur këtë, mjaft ndoshta mund të cookie-t si kjo të jetë shumë e lehtë të vjedhura
dhe të falsifikuara pas, dhe kjo është pikërisht ajo që bëri Firesheep.
Ju nuk duhet të jetë një programues.
Të gjithë ju kishte të bënte ishte kanë një lidhje në Internet, shkarkoni këtë mjet të lirë,
dhe çfarë do të bëjë është që ju hyni në dhe atëherë ajo do të ju tregojnë emrat Facebook
të gjithë në Sanders, në këtë demonstratë të veçantë, rreth jush
dhe të gjithë ju kishte të bënte ishte të klikoni mbi emrin e tyre dhe software automatizuar procesin e
i nuhatës se cookie, duke paraqitur atë në Facebook si vet tuaj,
dhe, voila, ju jeni futur me emrin tuaj
Pra, kjo është një tjetër një nga ato "nuk e bëjmë këtë" zyrtarisht.
Nëse ju keni një rrjet në shtëpi dhe ju doni të kallajxhi, me të gjitha mjetet,
por kjo nuk e kuptojnë të kalojnë vijën në një mjedis universitar.
>> Por qëllimi këtu është me të vërtetë të theksojmë jo si ta bëni këtë
por si për të mbrojtur kundër këtyre llojeve të gjërave.
Dhe zgjidhja parëndësishëm këtu, edhe pse ai vetë është me të meta,
është me të vërtetë të zvogëluar përdorimin e ndonjë faqet që nuk janë përdorur HTTPS vazhdimisht.
Pra faqet si Facebook dhe Google gjithnjë kanë kutitë
ku ju mund të zgjedhë për këtë lloj gjë,
dhe bankat kanë pasur këtë për vite për të njëjtat arsye.
Pra, vetëm pak e një faktor frikë nëse ne mund të. Por kjo është ajo në një fjalë.
Kjo është se si një server kujton se kush jeni.
Dhe sa më shpejt që ata mund të mbani mend se kush jeni, ata mund të mbani mend asgjë rreth jush
se programues ka ruajtur brenda këtij superglobal të veçantë të quajtur $ _SESSION.
Dhe për pset 7 ne jemi duke e përdorur atë trivially vetëm për të kujtuar një int,
domethënë ID unike e përdoruesit i cili ka regjistruar në,
kështu që ne e dimë se ata kanë qenë atje më parë.
Ndonjë pyetje atëherë në seancat ose biskota apo si?
Firesheep nuk punojnë si edhe më,
dhe ju keni për të vënë kompjuterin tuaj në një mënyrë të veçantë përzier
kështu që ju jeni në të vërtetë duke dëgjuar për trafikun përveç vetes.
Pra, nëse ju jeni duke shkarkimit Firesheep, të kuptojë se nuk është fare aq e lehtë
si ajo dikur ishte për të demonstruar.
Dakord. Dhe nuk e bëjmë atë në Sanders. Bëjë atë në shtëpi.
Bazat e të dhënave.
Një nga gjërat që ne e bëmë në pset 7 qëllimisht shumë
u ju japim një tabelë të dhënave mostër për përdoruesit që ka disa ID e përdoruesit,
disa emra përdoruesi, fjalëkalime dhe disa Encrypted aty.
Dhe si ju do të shihni, nëse ju nuk e keni tashmë, ju jeni do të duhet të ndryshojë në tryezë pak.
Ju jeni do të duhet të shtoni disa cache për secilin prej shfrytëzuesve në atë tryezë,
dhe ju jeni do të duhet të shtoni një tjetër tryezë historisë, një tryezë portofole,
apo ndoshta e quajnë atë diçka tjetër.
Por në aspektin e të menduarit rreth asaj se si ta bëni këtë, le të hapë këtë mjet
që kemi përdorur të premten, por në qoftë se panjohura, pajisja vjen me një mjet
quajtur phpMyAdmin cila është shkruar rastësisht në PHP,
por qëllimi i tij në jetë, pasi unë hyni këtu si jharvard me purpur,
është që të më jepni një mënyrë user-friendly të shikojnë dhe ndryshimin e bazës së të dhënave tim.
>> Baza e të dhënave që unë jam në drejtimin e pajisjes quhet MySQL.
Kjo është shumë popullor, dhe kjo është një bazë të dhënash të lirë me burim të hapur që është mrekullisht e lehtë për t'u përdorur,
sidomos me para përfundon si kjo.
Çfarë ky mjet lejon mua për të bërë, për shembull, është thes rreth tavolina.
Më lejoni të shkojnë përpara dhe të bëjë këtë.
Të premten kemi krijuar një tabelë të quajtur studentët që ishte e thjeshtë super.
Ajo kishte 3 kolona - ID, emrin, dhe email - dhe unë dorë futur një çift të rreshtave
si Davidi dhe Mike në këtë shembull të veçantë.
Le të marrin këtë një pak më tej, dhe le të supozojmë se ne duam të mbani mend më shumë
se vetëm emrin dhe email për një përdorues.
Më lejoni të klikoni Struktura deri këtu në krye.
Dhe përsëri, pset ecën ju nëpërmjet hapat e nevojshme këtu,
kështu që mos u bëni merak nëse disa nga kjo është pak i shpejtë.
Atëherë unë jam duke shkuar për të klikoni në këtu.
Unë jam duke shkuar për të shtuar disa numrin e shtyllave pas mailit
sepse unë dua të shtoj diçka si shtëpi.
Kam harruar të regjistrojë në shtëpinë e nxënësit.
Më lejoni të klikoni Go, dhe tani ne kemi këtë formular që fatkeqësisht është pak të gjerë nga e majta në të djathtë,
por unë jam duke shkuar për të thirrur emrin e këtë shtëpi terren,
dhe pastaj lloji unë tani duhet të zgjedhin.
Pra, le të ketë një bisedë të shkurtër në lidhje me llojet e ndryshme në MySQL
sepse ndërkohë që PHP është shtypur dobët dhe kjo lloj luan shpejtë dhe të lirshme me lloje,
në një bazë të dhënash veçanërisht është e rëndësishme që në fakt përdorin super shtypja në avantazhin tuaj
sepse një nga gjërat MySQL dhe makina tjera të bazës së të dhënave mund të bëjë për ju
është siguruar që ju nuk e vënë të dhënat fals në bazën e të dhënave tuaja.
Kjo është lloj i gabimit të lirë kontrolluar në dispozicion për ju.
>> Për shtëpi kemi natyrisht nuk duan që ajo të jetë një int, e cila është një 32-bit vlera në MySQL.
Ne e bëmë të flasim shkurtimisht të premten rreth VARCHAR, i cili qëndron për gjatësi variabile char.
Çfarë është kjo? Kjo ju lejon të specifikojë që ju dëshironi që kjo të jetë një varg i disa lloj.
Ju nuk mund të vërtetë e di paraprakisht se sa kohë ajo është,
kështu që ne do të themi arbitrarisht një emër shtëpi mund të jetë 255 karaktere,
por ju mund të shkoni me 32, 64 - çdo numër të vërtetë.
Por avantazh i përdorimit të një VARCHAR mbi një fushë të quajtur char është ajo?
Vetëm intuitivisht në qoftë se unë lëviz këtu poshtë, njoftim nuk char dhe varchar ka.
VARCHAR është gjatësia e ndryshueshme char, char është një gjatësi fikse char.
Pra, bazuar vetëm në atë përkufizim, çfarë është avantazh apo pengesë e secilit nga këto?
Me fjalë të tjera, i cili kujdeset për dallimin, ose pse duhet të keni kujdes?
>> Po. [Student] VARCHAR ka më shumë fleksibilitet, por merr më shumë memorie.
Mirë. VARCHAR merr më shumë - Le të shohim. Unë nuk jam i sigurt nëse kam dëgjuar atë të drejtë.
Mund të ju them se një herë më shumë?
[Student] kam thënë VARCHAR ndoshta ka më shumë fleksibilitet, por ajo merr më shumë memorie.
Interesante. Rregull. VARCHAR ndoshta ju jep më shumë fleksibilitet, por merr më shumë memorie.
Ky i fundit nuk është domosdoshmërisht e vërtetë.
Kjo varet nga konteksti, por le të kthehen në atë.
>> [Përgjigja e padëgjueshme Student] Pikërisht.
Është e vërtetë rasti që char do të zakonisht përdorin shumë memorie
sepse një char, si në C, është si një varg, është një grup të karaktereve.
Pra, nëse ju thonë se një fushë e char gjatësi 255,
bazës së të dhënave është fjalë për fjalë do të ju jap 255 karaktere.
Dhe në qoftë se shtëpia përfundon duke u Mather dhe 6 karaktere total,
ju jeni të humbur mbi 200 karaktere.
>> Pra, një VARCHAR efektivisht përdor vetëm si karaktere shumë sa është e nevojshme
deri tek një sasi maksimale.
Por çmimi që ju paguani në fakt është performanca, potencialisht.
Nëse ju e dini paraprakisht se të gjitha vargjet tuaja do të jetë 8 karaktere -
për shembull, supozojmë se keni nevojë për fjalëkalime për gjatësi 8 -
përmbysur e përdorimit të një fushë char në rast, edhe pse jo shpesh,
është që të përcaktojë një gjatësi fikse për diçka si një fjalëkalim
sepse tani të dhënave mund të jetë edhe më të zgjuar.
Në qoftë se ajo e di se çdo fushë char, çdo varg në një kolonë është gjatësia e njëjtë,
ju merrni mbrapa funksion të aksesit të rastit.
Ju mund të kërcejnë rreth në mesin e fushave të ndryshme char në tryezën tuaj bazës së të dhënave
për shkak të mendojnë për një bazë të dhënash si rreshtave dhe kolonave.
Pra, nëse çdo njëri prej vargjeve është gjatësia e njëjtë,
ju e dini se i pari është në bajt 0, një tjetër është në bajt 8
dhe pastaj 16 dhe pastaj 24 dhe kështu me radhë.
Pra, nëse të gjitha vargjet janë të njëjtën gjatësi, ju mund të kërcejnë rreth shumë më efikase.
Kështu që mund të jetë një përfitim në drejtim të performancës,
por zakonisht ju nuk keni luksin e ditur paraprakisht,
kështu që një VARCHAR është rruga për të shkuar.
Ja një tjetër detaj se edhe Facebook u përplas përfundimisht.
Ints janë të mëdha, dhe ne lloj i përdorin ato nga default në çdo kohë ne duam një numër,
por kjo është vetëm 32 bit.
>> Dhe, edhe pse Facebook nuk kanë mjaft 4000000000 përdoruesit tani,
ka patjetër disa njerëz atje me llogarive të shumëfishta
ose llogaritë që janë hapur dhe mbyllur pastaj,
dhe kështu Facebook vetvete Unë besoj se disa vite më parë kishte për kalimin nga int
për të, siç është quajtur me vend, bigint, e cila është vetëm 64 bit vend.
Pra, kjo shumë është një vendim design.
Ju do të jetë me fat nëse amazingly projekti juaj i fundit kthehet për fillimin,
ka 4 miliard përdorues dhe 1, të japë ose të marrë,
në të cilin rast duke përdorur ints mund të jetë pak dritëshkurtër.
Por në realitet, tavolinë përdoruesit tuaj është ndoshta mirë me ints.
Por për diçka si pset 7, si tavolina juaj e historisë,
ju mund të keni mijëra, miliona e përdoruesve në qoftë se ju zhvillohej në etrade.com.
Pra, përderisa ju nuk mund të ketë më shumë se 4 miliardë përdoruesve,
ata përdorues që ju keni mund të keni më shumë se 4 miliard transaksione me kalimin e kohës -
blen dhe shet dhe gjërat në historinë e tyre.
Pra, nëse ju bëni parashikojnë - përsëri, këto janë probleme të mirë të ketë, nëse ju keni këto të dhëna shumë -
në qoftë se ju bëni parashikojnë të dhënat kalojnë madhësinë e një int,
do me diçka si bigint është një drejtim mjaft shpesh nuk miratohet nga disenjatorët
sepse njerëzit shifër që nuk do të jetë një problem,
por kjo lehtë për të zgjedhur diçka më të madhe se kaq.
Te Dhjeta ne jemi duke përdorur në pset 7, i cili specifikon saktësi fikse
kështu që ju mund të shmangur çështjet që përfshijnë gjithandej dhe dyshe dhe reals dhe te ngjashme.
>> Dhe pastaj ka disa fusha të tjera këtu. Ne do të tundë duart tona me ta në një farë mase.
Por datat, herë të gjithë e kanë një format të përcaktuar në MySQL,
dhe avantazhin e datave magazinimin, si dhe datat e jo varchars
do të thotë që baza e të dhënave në fakt mund të reformat e tyre në formate të ndryshme,
nëse një format amerikan ose europian apo format si - megjithatë ju doni atë -
shumë më efikase se në qoftë se ajo ishte vetëm disa VARCHAR gjenerike.
Dhe pastaj ka disa binar tjetër, varbinary, blobs.
Këto janë objekte binare të mëdha, dhe ju gjithashtu mund të ruajtur të dhënat binare
si dhe si të dhëna gjeometrike në një bazë të dhënash.
Por për ne, ne do të zakonisht kujdeset për ints dhe varchars dhe si.
Le të përfundojë deri këtë shembull me shtëpi.
Shtëpia Unë jam duke shkuar për të thonë në mënyrë arbitrare do të jetë 255 chars.
Atëherë vlera e parazgjedhur ne mund të bëjmë këtë.
Ne mund nga default vënë të gjithë në Shtëpinë Mather, për shembull.
Kjo është se si ne mund të specifikojë se baza e të dhënave
duhet të sigurojnë që dikush gjithmonë ka një vlerë. Por unë do të lë që të jetë.
Në fakt, për njerëzit që jetojnë jashtë kampus dhe jo në një shtëpi,
ndoshta unë vërtetë duan të specifikojë se vlera e paracaktuar është NULL për shtëpinë,
dhe atëherë unë duhet të kontrolloni këtë kuti dhe tregoni bazën e të dhënave është në rregull nëse shtëpia e Perdoruesit është NULL.
>> Përsëri, kjo është një tjetër mekanizëm mbrojtës që ju mund të vënë në vend
kështu që ju as nuk keni për të vënë atë në kodin tuaj PHP domosdoshmërisht.
Baza e të dhënave do të sigurojë se gjërat janë ose nuk janë NULL.
Dhe pastaj së fundi, Atribute.
Asnjë nga këto janë me të vërtetë të rëndësishme.
Binary, unsigned - asnjë nga ata që janë të rëndësishme për një VARCHAR.
Indeksi.
Does anyone know a mbani mend ose kanë një mend se çfarë është një indeks
për diçka si shtëpi?
Kjo shumë është në fakt një vendim i rëndësishëm dhe relativisht e lehtë të projektimit.
Për ata që nuk e kanë parë ende atë, të premten kemi biseduar shkurtimisht për çelësat primar.
Në një tryezë të bazës së të dhënave, një kyç primar është fushë apo kolonë
që identifikon në mënyrë unike rreshtave në tabelë.
Pra, në tabelën e tanishëm ne kemi ID, ne kemi emrat dhe e-mail.
Cila nga këto është kandidati më i mirë të jetë një kyç primar,
Roli i të cilit është të identifikojë unike rreshtave?
Ndoshta ID.
Ndoshta, ne mund të përdorë gjithashtu edhe atë që pse?
Ndoshta ju mund të përdorni email sepse në teori është unike
nëse njerëzit janë të ndarë llogaritë e-mail.
Por realiteti është se në qoftë se jeni duke përdorur një ID numerike si 1234,
kjo është vetëm 32 bit, ndërsa një adresë e-mail mund të jetë kjo shumë apo kjo bytes bytes shumë.
Pra, në aspektin e efikasitetit për identifikues unik,
ajo tenton të jetë praktikë e mirë vetëm për të përdorur një int
edhe në qoftë se ju keni disa kandidatin varg që ju mund ndoshta të përdorni.
>> Për diçka si shtëpi, kjo nuk duhet të jetë një kyç primar
sepse atëherë vetëm 1 person mund të jetojë në Mather dhe 1 person në Currier dhe si.
Në mënyrë të ngjashme, kjo nuk duhet të jetë unike.
Dallimi mes kryesor dhe unike është se në rastin e tabelës tonë të tanishme,
ID do të jetë primare, por nuk është primar mail për arsye kemi përmendur vetëm -
Performanca - por ajo duhet të vazhdojë të jetë unike.
Kështu që ju ende mund të zbatojë unike pa bërë kërkesën
se kjo është një fushë e rëndësishme super primar.
Por kjo është mjaft e dobishme: Indeksi i.
Nëse ju e dini paraprakisht për projektin tuaj përfundimtar, për pset 7, ose në përgjithësi,
se kjo fushë është shtëpia do të jetë diçka që ju kërkoni në një shumë
duke përdorur fjalen zgjedhur apo diçka tjetër,
atëherë ju mund të tregoni preemptively bazës së të dhënave për të punuar magjinë e saj
dhe sigurohuni që ajo krijon në kujtesë ndonjë strukturave dashuroj dhënave të nevojshme
për të shpejtuar kërkimet të bazuara në shtëpi.
Ndoshta ajo do të përdorë një tabelë hash, ndoshta ajo do të përdorë një listë të lidhura.
Në të vërtetë, ajo tenton për të përdorur një pemë, shpesh një strukturë që quhet B-pemë -
nuk një pemë binare por një B-pema - cila është një pemë shumë gjerë
që ju mund të shihni në një klasë si CS124, të dhënat strukturat klasës.
Por në të shkurtër, ju nuk keni për t'u shqetësuar rreth se kur duke përdorur software i zgjuar bazës së të dhënave.
Ju vetëm mund të them se, "Indeksi këtë fushë kështu që unë mund të kërkoni në atë më efikase."
>> Në qoftë se ju lënë këtë off dhe ju provoni të kërkoni për të gjithë në bazën e të dhënave që jeton në Mather,
ajo do të bie në kërkim linear.
Dhe në qoftë se ju keni marrë 6000 undergrads gjithë jetojnë në një shtëpi,
ju do të jeni për të kërkuar të gjithë tabelën për të gjetur Matherites,
ndërsa në qoftë se ju thonë Index, shpresojmë se kjo do të jetë diçka afër një kërkim logaritmike
për të gjetur ato lloje të studentëve.
Kjo është vetëm një tipar të lirë të kthehet më,
edhe pse ai ka ardhur me një çmim prej disa sasinë e hapësirës.
Së fundi, auto-rritje, kjo fushë AI,
që thjesht do të thotë në qoftë se ajo është një int dhe ju nuk doni të kujdeseni për të ardhura atë vetë
çdo herë që ka një përdorues të ri, kontrolloni se,
dhe çdo përdorues që merr futur automatikisht do të merrni një ID të ri.
Le të klikoni Ruaj, dhe tani le të grindem me këtë dizajn.
Nëse unë shkoj në Browse, njoftim që të dy Mike dhe shtëpia ime është NULL.
Unë mund të përdorni për të redaktuar këtë phpMyAdmin dorë.
Unë mund të shkojnë në këtu dhe lloji në Mather dhe pastaj goditi Enter,
dhe tani njoftim tabela është e ndryshme.
Por vini re unë mund të bëj diçka tjetër si.
ID Davidit është 1, kështu që phpMyAdmin përsëri është vetëm një mjet administrativ;
kjo nuk është diçka që përdoruesit e tuaja janë ndonjëherë do të shohin.
Pra, nëse unë në vend të klikoni butonin SQL up krye -
dhe përsëri, pset 7 do ju prezantoj me shumë nga këto pyetje -
Unë mund të dorë të ekzekutuar SQL strukturuar gjuhës komandën query
UPDATE SET përdoruesit shtëpiak = 'Pfoho' KU id = 1.
Këto janë pyetje SQL, mjaft të bukur, shumë e lexueshme nga e majta në të djathtë.
Update tryezë përdoruesit, vendosur në fushë të quajtur shtëpi të Pfoho
ku ID e përdoruesit është 1.
Ose unë mund të bëni edhe ku mail = 'malan@harvard.edu'.
Për aq kohë sa që identifikon në mënyrë unike mua, që do të punojnë si.
Por ID tendencë të jetë performanca të larta, kështu që le të bëjmë këtë.
Le të klikoni Go. Mirë, lecture.users nuk ekziston. Çfarë është gabimi im?
Çfarë është Tabela e quajtur fakt këtu?
Ajo që quhet nxënës vetëm për shkak se kjo është ajo që ne e bëmë deri këtu në të majtë të lartë.
Ajo që quhet studentët jo, shfrytëzuesit. Pra, klikoni Go tani.
1 rresht prekur. Query mori 0.01 sekonda.
Nëse unë klikoni Browse tani, tani jeton në Malan Pfoho.
Pra, kjo është një tjetër shije e SQL, por pset do të ecin ju nëpërmjet një pak më shumë për këtë.
>> Ka një vendim budallaqe unë kam bërë tashmë këtu.
Unë do të argumentojnë se ky dizajn bazës së të dhënave është joefikase
sepse më shumë njerëz të shtoj në tryezë studentëve,
më shumë nga ne kam fillojnë duke shtuar, më shumë nga TFS kam fillojnë duke shtuar,
ne jemi duke shkuar për të filluar për të parë se çfarë tepricat në këtë tryezë?
>> Po. [Student] Duke parë se ajo është në studentë, ne jemi duke përdorur të njëjtën [padëgjueshme]
E njëjta - e drejta, pikërisht.
Pra, nëse 400 njerëz jetojnë në Mather, japin ose të marrë,
përfundimisht kjo tabelë do të ketë 400 rreshtave që thonë "Mather", "Mather,"
"Mather", "Mather", "Mather".
Ne jemi të humbur të gjitha këto bytes, dhe ka një çift i takeaways atje.
1, nuk është rasti i çmendur qoshe ku nëse dikush paguan një shumë të holla
dhe Riemëron Mather, ne tani duhet të ndryshojmë tërë tabelën tonë bazës së të dhënave.
Kjo nuk do të ndodhë shpesh, edhe pse Pfoho ishte quajtur dikur Veriut House 15 vjet më parë,
kështu që ajo ndodh. Por kjo nuk është e gjitha që imponues.
Më bindëse se një rast qoshe si ajo e që kanë nevojë për të rinovuar të dhënat në masë
për një bazë të dhënash është arsyeja pse jeni ruajtjen Mather përsëri dhe përsëri dhe përsëri dhe përsëri?
Kjo është një shumë e karaktere, 6 karaktere.
Nuk mund të bëjmë edhe më mirë se kaq, sidomos për Pforzheimer?
S'ka dyshim se ne mund të bëjmë më mirë se kaq shumë karaktere.
Pse jo vetëm të shoqërojnë një identifikues unik me çdo shtëpi
dhe dyqan se për çdo përdorues? Pra, le të provoni këtë.
Në vend se të përdorni vetëm tabelën studentët, më lejoni të shkoj deri në bazën e të dhënave tim leksion deri këtu në të majtë të lartë.
Vini re këtu ai thotë Krijo tryezë.
Më lejoni të krijoni një tabelë të re të quajtur shtëpi.
Numri i kolonave do të jetë 2. Enter.
Tani kam 2 fusha.
Unë jam duke shkuar për të thirrur këtë emër, dhe ajo do të jetë një VARCHAR e gjatësisë 255,
>> por kjo është goxha arbitrare. Më lejoni të vënë këtë këtu poshtë nga Konventa.
Pra, të vënë një ID deri këtu. Le të japim çdo shtëpi një identifikues unik.
Le të japim çdo shtëpi një emër.
Le të specifikojë se identifikues do të jetë vetëm duke unsigned konventë të përdorin vetëm numra pozitive.
Le të shkojnë përpara dhe të japë këtë një fushë auto-Rritja tani për tani.
Dhe nuk kemi nevojë për ndonjë gjë tjetër?
Le të shkojnë përpara dhe klikoni Ruaj.
Tani unë kam një tryezë të dytë.
Vini re si një mënjanë kjo është pak më e fshehtë komanda SQL
që do të duhej të shkruani me dorë, nëse nuk përdorni një mjet administrativ si phpMyAdmin.
Pra, një tjetër arsye ne e përdorin atë.
Kjo është lloj mrekullisht e dobishme e pedagogjike, sepse ju mund të klikoni rreth
dhe të kuptoj se si funksionojnë gjërat vetëm nga kopjimi dhe pasting atë që bëri phpMyAdmin.
Por komanda tabela Krijo është ajo që u ekzekutua vetëm, dhe këtu është tabela ime.
Më lejoni tani të shkojnë përpara dhe të përdorin SQL parë sesa thjeshtëzoj duke klikuar butonin Insert.
Më lejoni të bëni INSERT INTO shtëpive,
dhe unë jam duke shkuar për të thonë se emri i shtëpisë do të ketë një vlerë prej "Mather '.
Kjo ishte. Kjo Sintaksa është pak më i fshehtë.
Ky është emri i fushave ne duam të futur.
Këto janë vlerat që ne duam të futur në këto fusha. Më lejoni të klikoni Go.
1 rresht futur mori 0.02 sekonda. Më lejoni të klikoni Browse tani.
>> Njoftim qoftë se unë klikoni Browse, ka Mather, të cilit ID është duke Automatizim numri 1.
Më lejoni të bëj një tjetër. Më lejoni të shkojnë në tab SQL.
INSERT INTO shtëpive. Emri i shtëpisë do të ketë një vlerë prej Pfoho dhe kështu me radhë.
Go. Dhe unë mund të vazhdojmë të bëjmë këtë përsëri dhe përsëri dhe përsëri.
Ose në qoftë se ju merrni mërzitur duke përdorur phpMyAdmin, ju mund të përdorni vetëm skedën Fut
dhe nuk duhet të shtypni SQL papërpunuara.
Ju mund vetëm zhurmë atë më shpejt nga shtypja, për shembull, korrier, Enter,
dhe tani në qoftë se ne klikoni Browse, ka korrier me një ID e 3.
Pra, kjo është ajo që ne kuptojmë me auto ardhura.
Por tani ne kemi për të rregulluar diçka në studentët.
Studentët se çfarë duhet lloji të dhënat e fushës shtëpi tani do të jetë?
Ajo duhet të jetë një int, e drejtë?
Pra, qëllimi këtu është që nga faktor, i njohur ndryshe si normalizuar, tabelat
kështu që ne nuk të ruajtur informacione redundantly në ndonjë nga tavolina e mia.
Dhe përsëri, rruga ne kemi qenë këtu do të thotë Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, e cila është shumë e tepërt
në drejtim të shkapërderdhjen e chars.
Pra më lejoni të shkoj përpara dhe ta ndryshoni këtë duke klikuar Struktura,
dhe më lejoni të shkoj përpara dhe të kontrolloni jashtë fushës shtëpi, kliko Ndrysho,
dhe tani unë jam duke shkuar për të ndryshuar këtë të jetë një int.
255 nuk është më relevante.
Më lejoni të shkoj përpara dhe të thonë se është në rregull në qoftë se ajo është ende NULL. Ruaj.
Tani studentët tryezë është ndryshuar me sukses,
dhe vini re përsëri shtëpi është një int.
Si një mënjanë, injorojnë numrin në kllapa, kur është fjala për ints.
>> Kjo është për arsye trashëgimi.
Kthehu në ditë, kur ju nuk keni GUIs, ju në vend që pati një mjedis command line,
e 10 dhe 11, përkatësisht të specifikuara sa karaktere ju duhet të tregojnë
në dritaren e terminalit të vërtetë shfaqur fusha.
Ajo ka asgjë të bëjë me gjatësinë bit e fushës aktuale, kështu që ne vetëm do të injorojë se për tani.
Tani unë kam për të shkuar në këtë tryezë.
Dhe në qoftë se Davidi jeton në Mather, shtëpi nuk duhet të jetë 0,
cila është një int paracaktuar vlera afërt tek NULL.
Ai duhet të jetojë në shtëpinë e 1.
Le të themi se në mënyrë arbitrare jeton Mike në Pfoho, kështu që numri i shtëpisë 2.
Tani tryezën time duket pak më të fshehtë.
Por e konsiderojnë efikasitetin.
Unë jam tani duke përdorur vetëm 32 bit për të identifikuar nga shtëpia,
që do të thotë ka vetëm 1 Përkufizimi kanonik i Mather shtëpinë time dhe Pfoho
dhe kjo është në tabelën e shtëpive.
Pra, nëse unë dua të bashkohem tani këto tabela, të mendojnë për atë në këtë mënyrë.
Këtu kam studentët tryezën time, dhe në anën e djathtë ka këto numra, 1 dhe 2.
1 është Mather, 2 është Pfoho.
Ne kemi ato numra të njëjta në këtë tabelë tjetër, e cila quhet shtëpi,
1 dhe 2 dhe 3 shtëpi për ato 3.
Ajo që ne tani duam të bëjmë është të ketë aftësinë për kodin PHP, SQL dhe,
të lloj ribashkuar këto tabela, ku në qoftë se këto janë studentët dhe këto janë shtëpitë,
ne duam të disi të kombinuar ato në mënyrë që linjat deri 1 me 1,
2 linja me 2, dhe kështu që ne mund të kuptoj se ku Davidin
dhe ku Mike dhe ku të gjithë të tjerët jeton.
Për ta bërë këtë, ne mund të ekzekutojë një pyetje SQL si në vijim.
SELECT * NGA studentët BASHKOHU PËR shtëpi -
Dhe tani çfarë fushat duam të bashkohen në?
Pra students.house = houses.id.
>> Një fshehtë pak, por kjo pjesë do të thotë fjalë për fjalë të krijuar një tabelë të re të përkohshme
kjo është rezultat i bashkimit studentëve dhe shtëpitë.
Dhe si nuk ju duan të kombinojnë këshilla e gishtat e mi këtu?
Bëje 'fushë shtëpi të barabartë në shtëpitë e nxënësve' fushë ID.
Dhe në qoftë se unë tani klikoni Go, unë kthehet pikërisht ajo që unë shpresuar për të.
Davidi është në Mather, Mike është në Pfoho, dhe unë gjithashtu shoh identifikues unik.
Por çështja është tani kam një tabelë të plotë.
Dhe kështu takeaway këtu për pset 7 apo me të vërtetë për projektin përfundimtar:
Nëse ju gjeni se ju jeni ruajtjen çdo pjesë e informacionit të përsëritur,
nëse kjo është një shtëpi, ndoshta kjo është një qytet, SHTETËRORE, dhe ZIP
ku ZIP zakonisht mund të, por jo gjithmonë të përdoret si një identifikues unik,
shkojnë përmes ushtrimit mendore dhe pastaj me diçka si phpMyAdmin
e factoring në dukje se të dhënat e zakonshme, sepse sidomos si faqen tuaj te internetit merr më të mirë të përdorura
më shumë popullor, kjo është se si ju të bëni të sigurtë që çdo gjë është e super të shpejtë,
duke i dhënë bazën e të dhënave si shumë të lë të kuptohet se për të veçantisë të jetë e mundur.
Kjo ishte një shumë.
Çdo pyetje? Dakord. Le të marrin një pushim 5-minutëshe atje dhe rigrupohen.
Dakord.
Më poshtë është një shembull që është përdorur disa vjet më parë kur mora CS161,
e cila është operuar sistemet klasë në kolegj
cili është i njohur për të qenë e mahnitshme, por një sasi të çmendur të punës,
dhe ajo fokusohet vërtetë në disa prej nivelit të ulët problemet që lindin në sistemet operative
dhe gjithashtu edhe në botën e bazave të të dhënave.
>> Historia që u tha nga profesori im, Margo ujë mineral, që ishte viti si më poshtë.
Supozoni se ju keni një frigorifer pak konvikt për ju dhe shokun tuaj
dhe të dy prej jush të vërtetë si qumësht.
Pra, ju vijnë në shtëpi nga një ditë në klasë, shokun tuaj nuk është ende atje,
ju hapni frigoriferin, dhe ti e kupton, "Oh mallkuar, ne jemi nga qumështi."
Pra, ju mbyllni frigorifer, ju ecni nëpër rrugë për të CVS
dhe për të marrë gjithnjë e më shumë në linjat e gjata për të blerë disa qumësht në CVS.
Ndërkohë, shokun juaj vjen në shtëpi nga e tij ose të saj të klasës,
vjen në dhomë, hap frigorifer të vërtetë duan disa qumësht,
hap frigoriferin dhe "Damn, nuk ka qumësht."
Kështu që ai ose ajo e mbyll frigoriferin, ecën nga dera, dhe shkon në ABP
ose diku tjetër se CVS ku ju nuk jeni do të përplasem në njëri-tjetrin
të shkoni të merrni disa qumësht.
Sigurisht që disa minuta më vonë, të dy prej jush të kthehet në shtëpi
dhe tani ju keni qumësht dy herë sa më shumë që ju në të vërtetë të kërkuar.
Dhe duke qenë qumësht, tani ajo do të shkojë keq për shkak se ju pëlqen qumësht
por ju nuk vërtetë si qumësht, kështu që tani ju keni qumësht shumë, kështu që ajo do të thartë.
Kjo është një e tmerrshme, situatë e tmerrshme.
Çfarë mund të ketë zgjidhur këtë situatë, nëse ju keni qenë në shtëpi shokun e parë? Po.
[Student] Ju duhet të ketë lënë një shënim. [Qeshura]
Mirë. Ju duhet të keni lënë një shënim.
Ju duhet të keni vënë një shënim Post-it ose si duke thënë, "Gone për qumësht,"
dhe pastaj shokun tuaj konceptuale do të ishte bllokuar nga vërtetë për ta bërë këtë.
Ose ju mund të shkoni 1 hap më tej.
Ju mund të vërtetë të bllokoj frigoriferin me disa lloj dry,
dhe tani shokun tuaj fjalë për fjalë do të jetë i bllokuar nga frigorifer.
Nëse ne përgjithësoj përsëri në programimin,
ju mund të pothuajse të mendoj për frigorifer si një lloj të ndryshueshme ose një struct,
disa lloj enë për informacion.
Problemi këtu është se në thelb të dy prej jush ishin të lejuar për të inspektuar
ose lexoni gjendjen e kësaj strukture të dhënave,
por ju shikuara atë në kohë të ndryshme dhe ende të dy prej jush bërë një vendim
bazuar në gjendjen e botës në ato momente të ndryshme në kohë.
Pra, ju kishte mbyllur frigoriferin, ju do të keni të paktën shmangur shokun tuaj
nga që ka qenë në gjendje për të inspektuar gjendjen e botës,
kështu që ai ose ajo nuk mund të ketë bërë që të njëjtin vendim.
Pra bazat e të dhënave, siç rezulton, e kanë këtë problem vazhdimisht.
>> Le të shohim nëse ne mund të ndërtojmë një skenar.
Supozoni se ju jeni një lloj djalë i keq dhe ju shkoni në Bankën e Amerikës
ose një nga vendet e tjera në sheshin që kanë një anë çift ATM krah,
dhe disi ju artistikisht se si për të kopjuar një kartë ATM - jo të gjitha se e vështirë.
Kjo është vetëm një shirit magnetik.
Dhe kështu ajo që ju doni të përpiqen për të bëni është të luajnë këtë lojë
ku keni vënë 1 kartë në 1 makinë, një tjetër kartë në makinë tjetër,
dhe në thelb ju doni të përpiqen për të tërhequr paratë në të njëjtën kohë,
sepse imagjinoni se historia shkon si vijon.
Makinë në të majtë merr kartën tuaj dhe kodin PIN,
dhe pastaj ju thoni: "Më jepni 100 $."
ATM është programuar që së pari të bëjë një të zgjedhur në bazën e të dhënave të tij apo ekuivalent -
çfarëdo databazë është e përdorur - të parë e bën këtë përdorues të kenë të paktën $ 100 në llogari të tij ose të saj?
Nëse është kështu, atëherë nxjerr nga goja $ 100 dhe $ 100 zbres nga bilanci tyre.
Por sigurisht, nëse ka makina të shumta këtu ose mënyra të shumta të inspektuar
gjendja e kësaj bote, kasafortë banka, për të parë sa para keni,
mendoj se thjesht nga rastësia e makinës në të majtë dhe të drejtën
dy kërkoni këtë pyetje në përafërsisht të njëjtën moment në kohë.
>> Dhe kjo me siguri mund të ndodhë. ATM janë kompjuterat këto ditë.
Pra, në qoftë se makina në të majtë thotë: "Po, ju keni të paktën $ 100,"
Ndërkohë makinë në të djathtë thotë: "Po, ju keni të paktën $ 100,"
pastaj të dy prej tyre të vazhdojë për të përfunduar programet e tyre dhe në fakt nxjerr jashtë $ 100
dhe thonë: "Më parë ju kishte 200 $."
"Më lejoni të rinovuar ndryshore për tani të 100 $ mbetur në llogari."
Por në qoftë se dy prej tyre janë kontrolluar bilancin e llogarisë suaj dhe të gjetur se ajo është 200 $
dhe të dy prej tyre atëherë të bëjë matematikë dhe thoni 200-100,
makinat kanë potencialisht nxjerr nga goja dy faturat $ 100 në çdo makinë,
por ata kanë përditësuar vetëm bilancin e llogarisë tuaj shuma të jetë $ 100.
Me fjalë të tjera, ju keni marrë nga $ 200, por sepse ata inspektuar gjendjen e botës
në të njëjtën kohë dhe pastaj të marrë një vendim të bazuar në atë vlerë,
ata nuk mund të bëjë matematikë përfundimisht saktë.
Pra, në një situatë shumë të bankës ju me të vërtetë dëshironi të keni disa lloj lokaut
në mënyrë që sa më shpejt që ju keni kontrolluar gjendjen e disa ndryshore
kjo është me të vërtetë e rëndësishme, si bilancin e llogarisë suaj,
nuk e le dikush tjetër të marrë vendime bazuar në atë derisa ju jeni bërë duke bërë gjë tuaj,
ku në këtë rast ju jeni ATM në të majtë.
Lock të gjithë të tjerët jashtë.
Ju në fakt mund të arrijë këtë efekt në disa mënyra të ndryshme.
>> Mënyra më e thjeshtë në MySQL është një linjë e SQL që ju dha
në specifikim të caktuar të problemit që duket tamam si kjo.
Vendos në tavolinë - çfarëdo qoftë ajo që quhet - një id, një simbol, dhe një pjesë, një numër të aksioneve,
vlerat e mëposhtme, për shembull.
Nëse ju nuk e keni lexuar ende spekulim, ky është një shembull që përfshin si do ju shkoj për
blerjen e aksioneve 10 të këtij aksioneve qindarkë për Presidentin Skroob,
ID cilit përdorues ndodh të jetë numri 7?
Kjo thotë INSERT INTO tryezë id vijim, simbol, dhe numri i aksioneve
i 7, 'DVN.V', dhe 10.
Por - por, por, por - rreshtin e dytë është e rëndësishme.
PËR aksioneve Duplicate KRYESORE UPDATE = aksionet + VLERAT (aksione).
Pra krejtësisht fshehtë, duke kërkuar në shikim të parë.
Por fakti se ky query SQL, edhe pse ai përfundon në 2 rreshta,
është 1 query gjatë, kjo do të thotë se është atomike
në kuptimin që kjo pyetje ose do të ekzekutohet të gjithë së bashku apo jo në të gjitha.
Dhe nga përkufizimi i MySQL, kjo është se si ata të implementuar këtë pyetje.
Ajo është nga përkufizimi në manualin e garantuar për të ekzekutuar të gjitha në një herë ose aspak.
Motivimi për këtë është si më poshtë.
Nëse në këtë rast se ju jeni duke u përpjekur për të blerë 10 aksione të aksioneve,
kjo është lloj i tregimit të njëjtë si qumështi, kjo është lloj i tregimit të njëjtë si ATM.
>> Nëse ju bëni gabim të mos e përdorni këtë sintaksë
por në vend të zgjedhur nga baza e të dhënave për të parë se sa shumë aksione të aksioneve peni këtij
Presidenti ka Skroob kanë, dhe mendoj se ai ka 10 aksione,
dhe pastaj disa dytë më vonë ju nda pastaj të bëjë një deklaratë UPDATE,
e cila është një tjetër deklaratë në SQL që thotë se të shkojnë përpara dhe për të shtuar më shumë aksione të 10
me 10 e tij të tanishme në mënyrë që në mënyrë ideale totale është 20,
Problemi është sepse në sistemet e sotme bazës së të dhënave dhe për shkak se në kompjuterët e sotme
ju keni procesorë të shumta, cores të shumta -
me fjalë të tjera, kompjuterët mund të vërtetë të bërë gjëra të shumta në të njëjtën kohë -
nuk ka asnjë garanci që SELECT tuaj dhe UPDATE juaj në këtë rast
do të ndodhë për të kthyer prapa.
Pra, një skenar i keq do të jetë që ju të bëni SELECT
për të parë se sa aksionet e kësaj aksioneve peni ka Skroob keni,
dhe pastaj thjesht nga rastësia tjetër query bazës së të dhënave është ekzekutuar -
ndoshta Skroob saj në një dritare të shfletuesit duke u përpjekur për të blerë 10 aksione
në një tjetër dritare krejt, ashtu si e ATM -
dhe mendoj se një tjetër query merr në mes të zgjedhur dhe të rinovuar.
Kjo mund të jetë rast që Skroob tani humbet disa numrin e aksioneve
sepse një tjetër proces është inspektuar gjendjen e botës së tij,
ose ai merr aksione më shumë se ai duhet të ketë.
Ne nuk do të shkojë në veçoritë e pikërisht ajo që ato linja të veçanta histori do të jetë,
por pikë është në qoftë se ju duhet të kontrolloni një vlerë ndryshores dhe pastaj të marrë një vendim,
në qoftë se ka një rrezik të dikush tjetër bën diçka në mes këtyre 2 pasqyra,
siç mund të ndodhë në sistemet multiprocessor, në multicore sistemet,
kompjutera me aftësinë për të bërë gjëra të shumta në të njëjtën kohë, gjëra të këqija mund të ndodhë
si llogari bankare duke debituar gabimisht, duke blerë qumësht dy herë më shumë,
ose në këtë rast numri i gabuar i aksioneve.
Por ka një mënyrë e lehtë për të menduar për këtë.
>> Ajo rezulton se SQL mbështet gjithashtu, nëse ju konfiguroni tryezën tuaj të saktë,
diçka që quhet transaksionet, të cilat unë do të argumentojnë në fakt është edhe më e lehtë për të kuptuar
se kjo, por kjo nuk është një 1-astar, kështu që kjo është në fakt një pak më shumë të përfshira.
Nuk është fjalë për fjalë një deklaratë në SQL quhet transaksion START.
Ashtu si ka SELECT, UPDATE, INSERT, DELETE, dhe të bashkohet dhe një bandë e të tjerëve,
nuk janë fjalë kyçe të tilla si transaksion START.
Dhe çfarë ju atëherë bëni në kontekstin e pset 7 -
ju nuk keni për të bërë këtë për pset 7, është e qartë si disclaimed nuk është e nevojshme,
por për projekte finale ajo mund të jetë e dobishme -
në qoftë se ju e quani një pyetje e transaksionit Start dhe pastaj një tjetër pyetje
dhe pastaj një tjetër query dhe pastaj një tjetër, një tjetër dhe një tjetër,
këto pyetje në fakt nuk do të ekzekutohet derisa ju telefononi deklaratë SQL KRYERJEN,
në të cilën pikë, nëse kjo është deklarata ose 20 2 deklarata, ata të gjithë do të ekzekutohet në të njëjtën kohë,
që do të thotë askush tjetër nuk mund të aksidentalisht blejnë qumësht shumë të parave ose debiti shumë
ose të blejnë aksione shumë, sepse të gjitha pyetjet tuaja do të ekzekutojë
për të kthyer prapa për të kthyer prapa.
Dhe kjo është super i rëndësishëm, sidomos kur ju jeni duke bërë diçka si kjo.
Ky është një shembull arbitrar që thotë le të rinovuar llogarinë bankare
duke vendosur një ekuilibër të barabartë me bilancin - $ 1000, ku numri i llogarisë është 2.
Dhe pastaj deklarata e dytë është tani le të depozitojë se $ 1000
në dikush tjetër llogari bankare të cilit numri i llogarisë është 1.
>> Me fjalë të tjera, ky është një shembull i përsosur i vendit ku ju doni të bëni të sigurtë
se të dyja këto deklarata të ndodhë ose jo në të gjitha
sepse përndryshe konsumatori do të merrni dehur
dhe ju do të jeni për të marrë paratë e tyre dhe jo të depozitojë atë diku tjetër,
ose banka do të merrni dehur ku ju do të jeni për të depozituar paratë
por në fakt nuk zbres atë nga llogaria e përdoruesit.
Pra, ju doni të dy prej tyre për të ekzekutuar së bashku.
Kështu hyn në transaksione botërore.
Pra, kjo është diçka për të mbajtur në shpinë e mendjen tuaj,
jo aq shumë për qëllime të vetëm një projekt përfundimtar,
por në qoftë se ju doni të marrë projektin tuaj përfundimtar diku,
në qoftë se ju doni të filluar disa kompani rreth tij,
në qoftë se ju doni të zgjidhur problemin disa Grupi i studentëve në kampus
dhe në fakt të ketë një website të jetojnë, aktiv, këto janë lloj i mete delikate që mund të lindin
nëse ju nuk mendoni se mjaft me atë që mund të ndodhë në qoftë se 2 persona
janë duke u përpjekur për të hyrë në faqen tuaj në të njëjtën fjalë për fjalë moment në kohë,
ku pyetjet e tyre përndryshe mund të merrni thurur.
>> Gati për disa JavaScript, një ngacmues tij?
Kjo është gjuha jonë e fundit për semestër. Dakord.
Fatmirësisht, JavaScript duket shumë, shumë, shumë të ngjashme me 2 gjuhë, C dhe PHP,
ne kemi bërë deri më tani.
Nuk ka asnjë JavaScript në pset 7, por është një mjet tepër të dobishme
kur është fjala për të bërë web-bazë e projekteve përfundimtare apo të vërtetë vetëm programimit web në përgjithësi.
Pra, një pasqyrë të shpejtë të diçka të quajtur DOM.
Këtu është një super faqe e thjeshtë web që me të vërtetë vetëm thotë hello, bota
dyja në titull dhe në trup.
Si gjurmë ka qenë sugjeruar për disa kohë,
nuk është me të vërtetë një hierarki të faqeve web.
Unë mund të tërheqë këtë copë të njëjtën HTML si një pemë,
duke menduar përsëri në diskutimet tona të strukturave të të dhënave në C, si më poshtë.
Unë kam disa nyje të veçantë rrënjë të quajtur nyja dokument,
dhe ne do të shohim analoge të kësaj në JavaScript në vetëm një moment.
Fëmija i parë dhe fëmija e vetme e që në këtë rast është HTML tag.
Nuk ka asnjë hartë e drejtpërdrejtë të DOCTYPE.
Kjo është një gjë e veçantë, kështu që ne duhet vetëm të injorojë atë kur është fjala për këtë DOM,
kjo Document Object Model pemë.
Vini re se tag HTML, të cilën unë e kam përshkruar në mënyrë arbitrare si një drejtkëndësh,
ka 2 fëmijë: kokë dhe trup.
>> Ata janë tërhequr në mënyrë të ngjashme si rectangles.
Kjo është kuptimplotë pictorially se kreu është në të majtë të trupit.
Implikimi është se kreu i vjen së pari në pemë.
Pra, ka në fakt një urdhërimin në një pemë, kur ju tërheq atë si kjo,
edhe pse forma dhe gjësend janë arbitrare.
Kreu ndërkohë ka një fëmijë të vetme të quajtur titullin,
dhe titulli në fakt ka fëmijën e vet, e cila është "Hello, World",
me qëllim që unë tërhoqi si një ovale këtu për të bërë atë paksa e ndryshme nga drejtkëndësh.
Këto janë elemente të rectangles, ndërsa hello, bota është me të vërtetë një nyje tekst.
Pra, kjo është një nyje në pemë, por kjo është një lloj të ndryshme të nyjeve
kështu që unë tërhoqi atë në mënyrë arbitrare ndryshe.
Ngjashëm ka trupi të ketë një fëmijë të quajtur Hello, World, si edhe,
nyje aq e ndryshme, edhe pse ata janë rastësisht njëjtin tekst,
por unë kam tërhequr atë duke përdorur të njëjtën formë. Pra, kush kujdeset?
E pra, ajo që është e bukur për HTML është se ai e ka këtë natyrën hierarkike.
Dhe çfarë është e bukur për JavaScript dhe veçanërisht bibliotekave që janë të lirë në dispozicion
dhe popullore si jQuery, ju mund të lundruar strukturën e pemë aq amazingly lehtë.
Çdo të gjëra që ne bëmë në C me pointers dhe pemëve traversing dhe recursing në nyje
Fëmija majtë për fëmijën e duhur, të gjithë një e papritur, ne mund të lloj të marrë për të dhënë
si amazingly shkolluar nëse jo pak frustruese
por jo gati një mënyrë efikase për të shkuar në lidhje me programimin.
Dhe kështu me këto gjuhë të nivelit të lartë si JavaScript
ne do të jetë në gjendje për të lundruar këtë pemë më shumë intuitive.
>> Dhe me të vërtetë sintaksë do të jetë mjaft e njohur.
Në qoftë se ju kurrë nuk kam parë më parë JavaScript, ky është një referencë të vërtetë e bukur
nga Mozilla folks, njerëz të cilët bëjnë Firefox,
kështu që mos ngurroni të shfletoni se në lehtësinë tuaj.
Çfarë do të gjeni - dhe këto slides janë identike me atë që kemi përdorur për ditë të tjera -
Në mënyrë të ngjashme, kryesore është zhdukur.
Kështu që kur ju shkruani një program në JavaScript, nuk ka asnjë funksion kryesor.
Ju vetëm të filloni të shkruani kodin.
Por një dallim kyç ndërmjet JavaScript dhe C dhe PHP
është se ndërsa C dhe PHP deri tani janë ekzekutuar anën server
nga aplikim në këtë rast ose më në përgjithësi nga një server,
JavaScript me dashje është ekzekutuar zakonisht nga një shfletues.
Me fjalë të tjera, ju mund të shkruani kodin JavaScript, si ne jeni gati për të,
në një server në aplikim, por ju të përfshijë atë në mesin tuaj HTML, CSS mesin tuaj,
mes gifs tuaja dhe PNGs tuaj dhe JPEGs tuaj
kështu që kur përdoruesi viziton faqen tuaj të internetit, nëse ju jeni duke përdorur JavaScript,
se kodi JavaScript vjen nga server në shfletuesin,
dhe kjo është shfletuesi që në fakt ekzekuton atë.
Pra, kjo ka implikime të rëndësishme për pronat edhe intelektuale.
Kjo është lloj i trashë për të mendoj edhe për mbrojtjen e IP tuaj kur është fjala për JavaScript Kodi
sepse nga natyra e gjuhës ajo merr ekzekutuar zakonisht anën e shfletuesit.
>> Ju mund të turbulloj atë, që do të thotë që ju mund të bëjë atë të duket i çmendur dhe të shëmtuar
pa whitespace, emrat e tmerrshme ndryshueshme, për ta bërë atë më të vështirë për njerëzit që të vjedhin IP tuaj,
por kryesore është se ajo është ekzekutuar anën e shfletuesit.
Edhe pse si një anë mënjanë JavaScript mund të përdoren server,
Rasti më i zakonshëm përdorimi tani është ende në shfletuesin.
Dhe këtu është ajo që duket si. Këtu është një rast tjetër në qoftë se-tjetër-ndërtuar ashtu si C, ashtu si PHP.
Këtu është një shprehje Boolean kur ju "ose" 2 gjëra së bashku.
Këtu është kur ju "dhe" 2 gjëra së bashku.
Këtu është një deklaratë e kaloni, i cili është i ngjashëm me PHP
në atë që ju mund të kaloni në lloje të ndryshme të vlerave.
Sythe të ngjashme kanë për sythe këtu, të cilat janë të strukturuara identike me atë që kemi parë më parë.
Ndërsa sythe, ne kemi marrë bëni ndërsa sythe.
Variablat, ndonjëherë në mënyrë pak më ndryshe.
Ju nuk deklarojnë variablave si ju bëni në PHP dhe C,
por në mënyrë të ngjashme është JavaScript shtypur dobët.
Ju nuk specifikojnë int ose float ose string ose diçka të tillë zakonisht.
Ju mund të specifikoni var.
Ju nuk duhet të specifikojë var, por ajo ka pasoja në qoftë se ju nuk e bëni.
Zakonisht në qoftë se ju heq var, ju aksidentalisht krijoni një ndryshore globale në vend të lokale.
Pra më lejoni të propozojnë që ju pothuajse gjithmonë vetëm të them var dhe pastaj emrin e ndryshueshme.
Kjo nuk është një tip, kjo është vetëm var per ndryshueshme.
Kjo do të jetë një shembull, nëse kjo është 123 ose "Hello, World".
Vargjeve janë të pranishëm dhe syntactically ngjashme me PHP.
Unë do të them numrat var dhe pastaj kam përdorur kllapa katrore sërish të deklarojë një ndryshore
cilit lloj është grup që ka këto numra të veçantë në atë të ndara me presje.
Dhe pastaj në fund, ky është i vetmi që me të vërtetë duket ndryshe.
Kujtojnë se në PHP, ne do të kemi zbatuar një sërë lidhjesh për një student
si Zamyla që mund të duket si ky, ku ndryshueshme quhet student.
Kllapa katrore të thotë këtu vjen një grup.
>> Fakti që unë nuk jam duke përdorur indekset numerike, por strings - id, shtëpi, dhe emri -
do të thotë se ky është një grup shoqerues,
dhe këto shigjeta me e barabartë me shenjë dhe kllapa angled
nënkupton se çelësi është "ID", vlera është 1;
çelësi është "shtëpia", vlera është Winthrop Shtëpia;
kyç është "emri", vlera është Zamyla Chan.
Pra, ka 3 çelësat brenda të këtij grup asociativ, secila prej të cilave ka vlerën e vet.
Ne kemi parë se në pset 7, ose ju së shpejti do të, në të njëjtën ide JavaScript,
por ajo do të duket si ky.
Pra studenti var - asnjë shenjë dollari dhe nuk përmendet ende lloji, por var -
barabartë dhe pastaj të hapur formatimin e teksteve kaçurrel, sepse në JavaScript, kur ju keni çiftet kyç vlerë,
ju përdorni të vërtetë diçka që quhet një objekt.
Dhe ata prej jush që ka marrë autoblindat apo si mund të të kujtojnë objekte nga Java
ose gjuhë të ngjashme.
JavaScript nuk është Java, para së gjithash.
Kjo ishte disa vjet më parë të projektimit të qëllimshme vendim të zbres diçka tjetër që ishte popullor,
emrin e saj, edhe pse ajo nuk ka lidhje themelore për Java veten.
JavaScript ka objekte, dhe ju krijojnë ato nga rruga e simbol Brace kaçurrel.
Objektet në JavaScript janë shumë e shumë të barabartë me vargjeve associative në PHP
kur është fjala për magazinimin e të dhënave në brendësi të tyre.
>> Por edhe më fuqishëm në JavaScript mund të shoqërojnë shumë lehtë funksione
brenda një objekt, dhe edhe pse ju mund ta bëni këtë në gjuhë të tjera,
kjo është mjaft e një paradigmë të përbashkët, si ne do të shohim.
Me pak fjalë, ky objekt paraqet një student, i cili është veçanërisht Zamyla,
dhe kjo është konceptualisht të ngjashme, vetëm syntactically ndryshe nga kjo.
Le të përdorni të vërtetë JavaScript në një skedar.
Ajo rezulton se ka një tag script.
Ne kemi parë një tag stil dhe ne kemi parë të tjerë tags HTML.
Tag script fakt do të përmbajë disa kodin JavaScript.
Më lejoni të shkoj në aplikim, ku kemi disa kodin burimor para-bërë.
Unë nuk kam postuar atë në faqen e internetit ende, por unë do të bëj që pas klasës.
Le të hapë këtë, blink.html.
Kthehu në vitet 1990, ka qenë fjalë për fjalë një HTML tag quajtur tag injoroj,
dhe kjo ishte një nga më të Etiketimet mrekullisht amortizuar në internet
ku ju do të vizitoni disa web faqe 1990 stil dhe të fillojnë të shohim tekstin ndezje ju pëlqen kjo,
rezultatet e tag Marquis, i cili kishte shkuar teksti si kjo.
Një nga disa herë kur bota ka rënë dakord të vërtetë në një standard të internetit,
të gjithë në të gjithë bordit vrarë tag injoroj disa vite më parë.
Por ne mund të ringjallë atë me JavaScript, si një demonstrim i fuqisë që keni
kur ju mund të shkruani një program në brendësi të një web faqe.
Së pari le të kaloni mbi gjëra të reja dhe të përqëndrohet vetëm në e vjetër.
>> Këtu është gjëra të vjetra në këtë shembull.
Unë kam një HTML tag, tag një kokë, dhe një tag titullin.
Atëherë unë kam një tag trupit këtu me një div, e cila risjell është vetëm një ndarje drejtkëndëshe e faqes
që unë kam dhënë një ID unike arbitrarisht nga "përshëndetje" për të,
vetëm kështu që unë kam një mënyrë për të iu referuar unike për atë, që ka një tekst shumë të thjeshtë:
hello, bota.
Tani më lejoni të shkoni deri në fillim të këtij file dhe shikoni se çfarë është e re.
Gjëja e parë që është e re top up është tag script,
dhe në brendësi të njoftimit tag script kam deklaruar një funksion.
Të deklarojë një funksion në javascript, mjaft të ngjashme me PHP,
ju shkruani fjalë funksion atëherë emrin e funksionit, kllapa,
dhe ndoshta disa argumente në qoftë se ajo merr ndonjë.
Atëherë unë kam marrë mbajtëse time kaçurrel si zakonisht, dhe tani ne kemi disa kodin paksa ri,
por le të shohim se çfarë do të thotë kjo.
Pra div var, kjo thjesht do të thotë të më jepni një div ndryshueshme quajtur.
Unë mund të ketë e quajti atë foo, por kam kërkuar që ajo të quhet div
për arsye se do të jetë e qartë në një të dytë.
Atëherë ajo kthehet në JavaScript - dhe kjo është kodi JavaScript mishëruar në web faqen time -
nuk është një ndryshore globale veçantë në terezi quajtur dokument.
JavaScript është në fakt një object-oriented gjuhë.
Ne nuk do të shkojnë në detaje në 50 si për atë që do të thotë,
por tani për tani e di se një objekt është shumë e shumë si një struct.
Ashtu si ne pamë rrugën prapa, kur në një nga më të hershme të problemit përcakton
ku ne kemi vënë një shumë e informacionit në një struct,
në mënyrë të ngjashme është dokumentuar një struct veçantë që vjen me shfletuesin,
vjen me ndonjë web faqe. Kjo nuk është diçka që unë krijuar.
Brenda kësaj strukture dokument, edhe pse, ju keni jo vetëm të dhënat
por ju gjithashtu kanë funksione.
>> Dhe çdo herë që të ketë një funksion në brendësi të një strukture, brenda një objekti,
ajo që quhet një metodë. Por kjo është e njëjta gjë.
Një metodë është një funksion që pikërisht kështu ndodh të jetë në brendësi të diçkaje tjetër.
Pra, kjo do të thotë se kjo është e ndryshueshme globale të veçantë të quajtur dokument
ka një funksion të quajtur getElementById që fjalë për fjalë e bën këtë.
Kjo do të merrni ju një element nga DOM, Document Object Model pemë,
ID cilit është në këtë rast përshëndetje.
Me fjalë të tjera, të gjitha ato që kemi shpenzuar kohë në strukturat e të dhënave vjen në lojë këtu.
Kjo fotografi e një DOM se kemi pasur një moment më parë,
edhe pse faqja është pak më ndryshe, në qoftë se kam pasur një div në këtë foto,
document.getElementById çfarë do të kthehet tek unë do të në mënyrë efektive të jetë një tregues
tek drejtkëndësh në dru, një reference te drejtkëndësh në pema.
Pra, kjo është ajo që do të thotë në fakt të thirrur një prej këtyre funksioneve.
Në këtë rast përsëri është një div. Kjo nuk është një organ ose një titull.
Pra, le të shohim se çfarë unë pastaj të bëjë me këtë div tani që unë kam atë në brendësi të këtij div ndryshueshme quajtur.
Kjo rezulton me JavaScript që ju keni mundësinë për të shkulje e faqes tuaj CSS dinamike.
Deri tani, të gjithë e kemi bërë CSS, edhe pse e kufizuar, është në atributet stil,
ose ku tjetër kemi vënë CSS?
Unë lloj i asaj një prishur. Në tag stil në krye të file.
Ose vendin e tretë ka qenë në?
>> Një file të jashtëm, diçka. Css.
Pra, ata janë 3 vende ne kemi bërë deri më tani CSS,
por është kapur kemi koduar vështirë se të gjithë.
Ju keni vendosur që ju pëllumb në pset 7, ne kemi vendosur para leksion se çfarë CSS ynë do të jetë.
Por në qoftë se ju doni të ndryshojë CSS tuaj, ju në fakt mund të bëjë që
një herë ju keni një gjuhë programimi aktuale.
CSS, HTML - gjuhë programuese jo. JavaScript është.
Pra, del se sa më shpejt që ju keni një nga ato rectangles nga pema
quajtur DOM, ajo ka në vetvete disa të dhëna në brendësi të saj.
Kështu që unë vetëm div rrëmbyer nga pema ka atë që ne do të thërrasë një pronë në brendësi të saj
quhet stil, dhe prona stil ka vetë një pronë të quajtur shikimit.
Unë do të dinë këtë vetëm duke shikuar deri një përdorues manual css-së.
Ajo rezulton se ka një pronë CSS shikimit që e bën atë që ajo thotë.
Kjo e bën diçka të dukshme ose jo, të dukshme apo jo.
Dhe se si ju bëni që është kjo.
Unë jam duke kërkuar programuar nëse dukshmëria e këtij div është e fshehur,
çfarë mund të ndryshojë atë për të? Dukshëm.
Tjetër në qoftë se dukshmëria e kësaj faqeje nuk është e fshehur, logjikisht unë e bëjnë atë të fshehur.
Unë nuk kam asnjë ide se pse kjo është e dukshme dhe të fshehta dhe nuk është e dukshme dhe të padukshme.
Ky ishte një vendim i varfër dizajn përgjatë rrugës.
Por ata janë me të vërtetë opposites në CSS: të dukshme dhe të fshehura.
E gjithë kjo nuk është ajo të thotë të ndryshojë CSS e dosjes time në dhe jashtë, në dhe jashtë
për atë div veçantë.
Por përsëri, kjo është një funksion të quajtur injoroj. Kur funksioni injoroj quhet?
Ajo rezulton se ka një tjetër të veçantë globale dritare ndryshueshme quajtur,
ngjashme në frymë të dokumentit, por ndërsa dokumenti i referohet në faqen tuaj të internetit,
si pemë DOM, HTML keni dërguar nga serveri,
dritare referohet kromit rreth tij, shiritin e adresave, bar titullin,
dhe të gjithë e që stuff rreth faqen tuaj web.
>> Dhe kjo rezulton se objekti dritare ka një funksion të veçantë brenda të saj të quajtur setInterval
që e bën atë që ajo thotë.
Ajo do të përcaktojë një interval - në këtë rast çdo 500 milliseconds -
dhe, të marrë një guess, çfarë është ajo do të bëjë çdo 500 milliseconds?
Ajo do të ekzekutojë këtë funksion injoroj.
Dhe çfarë është e mirë këtu është se ne mund të kemi bërë këtë në C, edhe pse ne kurrë nuk e bëri.
C nuk kanë diçka të quajtur pointers funksion ku ju mund të kalojë funksionet rreth
si argumente.
Në mënyrë të ngjashme në JavaScript mund të kalojë emrin e një funksioni në një tjetër funksion.
Dhe vini re atë që unë jam duke bërë. Unë nuk jam bërë këtë.
Nëse unë vënë kllapa pas injoroj, që do të thotë thirrje funksionin e injoroj.
Në qoftë se unë heq ato, që do të thotë këtu është funksioni i injoroj
kështu që setInterval mund të telefononi atë çdo 500 milisekonda.
Pra, rezultati përfundimtar, mizore pse ajo është, është se në qoftë se unë të shkojnë në localhost dhe të shkojnë në blink.html,
Unë tani kanë këtë të ndodh përsëri dhe përsëri.
Dhe në qoftë se unë në fakt Inspect Element, le të shohim nëse ne mund të shohim këtë.
Më lejoni Inspect Element, më lejoni të lëvizni poshtë vetëm pak,
më lejoni të zgjedhin Elements mbi këtu, dhe vini re brenda DOM e inspektorit Chrome.
Është fjalë për fjalë ndryshuar mbrapa dhe me radhë çdo 500 milliseconds.
Nëse ne do të shkojmë për të mikut tonë Nate,
në qoftë se keni menduar ndonjëherë se si kjo është duke punuar ide, të ngjashme me një interval,
por Nate është në të vërtetë duke e bërë përdorimin efektiv të shumë të ngjyrës në këtë rast të veçantë këtu.
Pra, ajo që më shumë mund të bëjë në fakt me këtë?
Le të hapë një tjetër shembull dhe provoni diçka
që është programuar edhe më e dobishme se sa duke bërë gjëra të injoroj.
Më lejoni të shkoj në forma të directory tonë sot dhe të shkojnë në form0.
Kjo ishte forma shëmtuar e mundshme që unë mund të dalë me të,
dhe më lejoni vetëm të ju tregojnë se si ajo duket si në një shfletues.
>> Më lejoni të shkoj në localhost / forma, dhe kjo është form0.
Kjo është një super formë HTML shëmtuar që ka një disa fusha për të email-it, për fjalëkalim,
fjalëkalimi, dhe pastaj një checkbox pak për të rënë dakord për disa termave dhe kushteve.
Kapur është në qoftë se unë të vizitoni këtë formular dhe unë nuk dua të ju jap adresën time email,
Unë nuk dua të bien dakord për termat dhe kushtet ndoshta, unë mund të klikoni Regjistrohu
dhe kjo lejon mua nëpërmjet anyway.
Kjo ndodh për të paraqitur në një skedar PHP quajtur idiote dump.php.
Gjithë kjo nuk është të shtypura nga $ _GET përmbajtjen e vetëm për qëllime diagnostike.
Kjo ishte ajo që u paraqit nga ana e përdoruesit vetëm tani.
Por mendoj që ne të vërtetë duan për të vërtetuar dorëzimin e përdoruesit formë.
Më lejoni të shkoj në versionin 1.
Kjo është form1.html. Ajo duket estetikisht po aq e keqe, por njoftim sa ajo është e zbukuruar.
Nëse unë klikoni Regjistrohu pa bashkëpunuar, unë të marrë yelled at.
"Ju duhet të sigurojë adresën tuaj e-mail."
Dakord. Pra më lejoni të provoni këtë. Pra malan@harvard.edu. Unë nuk kam nevojë një fjalëkalim.
Regjistrohu. "Ju duhet të sigurojë një fjalëkalim." Dakord.
Kështu që unë do të sigurojë një fjalëkalim të purpur. Regjistrohu.
"Fjalëkalimet nuk përputhen." Unë kam tani shkruani këtu kuq.
Unë rastësisht kontrolluar atë. Regjistrohu.
"Ju duhet të bien dakord për termat dhe kushtet." Dakord. Pajtohem atje. Regjistrohu.
Dhe tani ajo tregon mua e prodhimit diagnostike atje.
>> Pra, çfarë ka ndodhur vetëm?
Ne kemi pasur këtë aftësi për të vërtetuar parashtresat formë.
Në fakt, në qoftë se ju e bëri pikiatë në pset 7, ka një funksion falje
që e bën mjaft të lehtë për të çirrem në përdorues me një mesazh në ekran.
Unë jam duke përdorur një mekanizëm pak më të ndryshme, funksion alarm,
e cila nuk është një funksion që është mbi buzëqeshi pasi kjo e bën shumë të shëmtuar mesazhet e përdoruesit.
Por le të shohim se çfarë unë jam duke bërë këtu.
Kjo është form1.html, dhe të vëreni se unë kam disa sintaksë shumë të njohur:
tag trupit, tag formë, atribut veprim, atribut metodë.
Por vini re unë kam dhënë formën time një ID unike për lehtësi.
Pastaj unë kam marrë një email fushë cilit lloj është teksti,
një fushë fjalëkalimi cilit lloj është, fjalëkalimi konfirmim fushë cilit lloj është fjalëkalimi,
dhe pastaj një checkbox emri i të cilit është marrëveshja mbi këtu, lloj është checkbox.
Dhe pastaj unë kam marrë një butoni të paraqesë.
Por vëreni në krye atë që kam më shumë.
Para së gjithash, ka një tjetër përdorimi i tag script.
Nëse ju keni disa kodin JavaScript në një tjetër dosje, ashtu si me CSS ju mund ta përfshijë atë.
Dhe ju bëni që me burim script, dhe pastaj të vini re unë jam lidh me sa duket
të googleapis.com në një rrugë shumë të gjatë, por emri i të cilit përfundon në fotografinë jquery.min
për minimum. js.
jQuery është një bibliotekë super popullor për JavaScript që vetëm bën JavaScript
të gjitha më shumë përdorues-miqësor për t'u përdorur.
Është bërë në mënyrë efektive një standard de facto.
Pra, edhe pse ajo që ju jeni gati për të parë nuk është i pastër JavaScript në vetvete,
kjo është një bibliotekë JavaScript në krye të shumë si bibliotekë CS50 është një shtresë
në krye të nivelit të ulët kodit C, realiteti është se pothuajse të gjithë në internet përdor atë.
Pra, këto nuk janë rrota trajnimit. Kjo është vetëm praktikë e mirë këto ditë.
Tani vini re më poshtë se është tag mi shkrimit, dhe vini re atë që unë kam bërë këtu.
Ajo rezulton se jQuery bën diçka dashuroj pak.
Java ka shenja të dollarit, por ata janë të pakuptimta.
>> Ata janë si një letër ose B ose C.
jQuery ka miratuar thjesht Konvente ose lloj të kërkesës hedhur në faktin
se $ do të jetë simbol i tyre të veçantë.
Pra, sa më shpejt që ju të ngarkesës këtë skedë globale JavaScript deri këtu me tag script,
ju keni qasje në një ndryshore globale të veçantë që është quajtur $.
Është shumë e duhur quhet jQuery, por që nuk duket gati si sexy si $.
Por $ nuk ka kuptim të veçantë. Në PHP kishte domethënie të veçantë.
Ju duhet të kishte atë në frontin e një ndryshore.
Kjo është vetëm një gjë sexy që ata morën në.
Çfarë po ndodh këtu?
Njoftim unë jam duke kaluar në funksion jQuery globale dokumentin tim të ndryshueshme
dhe atëherë unë jam duke bërë thirrje. gati.
Çfarë jQuery thelb nuk është kjo ju lejon të marrin disa gjëra vanilje JavaScript
si objekt dokument, objekti dritare,
dhe në qoftë se ju të kalojë atë në funksion jQuery -
dhe përsëri, të jetë i qartë, ky është një funksion të quajtur jQuery -
atë që nuk është ajo të kthehet në ju një version të veçantë të dokumentit
që ka funksionalitet më shumë lidhur me të.
Pra, në JavaScript e parë nuk ka asnjë funksion gati,
por në qoftë se ju të kalojë dokument në funksion jQuery parë,
të kthehet për ju një version të veçantë të objektit dokumentit
që ka më shumë karakteristika dashuroj.
Dhe kjo është arsyeja pse njerëzit dëshirojnë atë. Ajo thjesht bën gjërat më të lehtë për të bërë, si ne jeni gati për të parë.
Pra, çfarë e bën këtë linjë e kodit të thotë?
Kjo linjë e kodit këtu do të thotë kur dokumenti është gati -
me fjalë të tjera, pasi shfletuesi është bërë e lexuar këtë skedar tek të lartë fund -
të shkojnë përpara dhe të ekzekutojë funksionin e mëposhtme.
Çfarë është me të vërtetë interesante në JavaScript - PHP dhe ka këtë si të mirë -
është funksione anonime.
Në JavaScript që ju mund të deklarojë funksione që nuk kanë emër, por ata nuk kanë një trup.
Vini re se çfarë po ndodh këtu.
>> Ky është një funksion të quajtur gati, dhe kjo thjesht do të thotë të bëjë në vijim
kur tërë faqen web është gati, kur ajo është lexuar në të gjitha nga serveri.
Çfarë doni të bëni? Unë dua për të ekzekutuar një copë të kodit.
Vini re se ne nuk duam për të ekzekutuar këtë kod menjëherë.
Nëse unë hequr këtë, kjo do të thotë menjëherë të fillojë ekzekutimin këto rreshta të kodit.
Por fakti që unë jam duke thënë jo, jo, jo, të përfundojë këtë në një funksion anonim si kjo
Mjetet nuk ekzekutojnë atë ende, e quajti atë përfundimisht.
Ne e pamë këtë si një moment më parë në shembullin e mëparshëm tonë formë.
Çfarë funksioni nuk kemi thirrur eventualisht, 500 milisekonda më vonë? Injoroj.
Pra, të njëjtën ide.
Përsëri, edhe në qoftë se kjo duket pak e pazakontë, vetëm të marrë tani për tani mbi besimin
që të deklarojë një funksion anonim që është quajtur përfundimisht,
ju thjesht shkruani funksion () {
Pra, çfarë kodi do të shkojmë për të ekzekutuar përfundimisht? Në vijim.
Kjo shumë duket një re të vogël, por kjo do të thotë këtu është funksioni jQuery,
dhe kjo tani është një shkurtore.
Kjo copë e HTML në pjesën e poshtme të ekranit sigurisht ka disa përfaqësim pemë.
Kjo nuk është kjo. Kjo faqe është më interesante se këtë shembull, botë Hello.
Por ka disa pemë që korrespondon me këtë HTML.
Ajo do të jetë një dhimbje në qafë që të ketë për të zbatuar një lloj të funksioni rekursiv
të fillojë në nyjen rrënjë dhe pastaj të gjeni nyje të cilit ID është regjistrimi.
Pra, çfarë e bën jQuery super e lehtë për ne është fjalë për fjalë këtë.
Të shkojnë përpara dhe për të marrë mua çfarëdo div apo formë çfarëdo, çfarëdo elementi HTML
ka një ID të regjistrimit.
Kjo është ekuivalente me document.getElementById ('regjistrimit').
>> Pse njerëz si jQuery?
Sepse kjo është më e shkurtër për të tipit. Por kjo është e gjitha kjo është. Kjo është ide e njëjtë.
Merrni mua tag cilit ID është regjistrimi.
Dhe kur kjo tag, i cili ndodh të jetë një formë, është dorëzuar,
të shkojnë përpara dhe të ekzekutuar këtë kod.
Pra, le të marrin një të shohim tani se si ne jemi duke bërë validation formë.
Sintaksa është pa dyshim fshehtë në fillim, por çfarë po ndodh?
Nëse kjo linjë e kodit është e vërtetë, unë jam duke shkuar për të çirrem në përdoruesit për të siguruar adresën e tij ose të saj email.
Pra, çfarë është kjo linjë e kodit?
$ Thotë jQuery. Tani këtë njoftim.
Kjo është lloj i si CSS.
Nëse ju keni fetar në CSS ende, ju do të dini se kjo do të thotë elementi cilit ID është regjistrimi.
Hapësirë ​​të thotë të gjeni një fëmijë ose pasardhës i regjistrimit emri i të cilit është input.
Dhe pastaj kjo gjë në kllapa katrore është një filtër të vogël.
Dhe edhe në qoftë se kjo duket fshehtë, kjo thjesht do të thotë të shkojë në formë të cilit ID është regjistrimi,
shkoni në brendësi të elementit të dhëna që emri i të cilit është e-mail,
dhe pastaj të marrë vlerën e saj, pavarësisht nga vlera e tij ndodh të jetë -
asdf në qoftë se është e gjitha unë shtypen, ose malan@harvard.edu nëse kjo është ajo që unë shtypur.
Pra, nëse vlera e fushës së formularit email == asgjë, çirrem në të përdoruesit.
Tjetër në qoftë se vlera e fushës fjalëkalimin == asgjë, çirrem në të përdoruesit.
>> Tjetër në qoftë se vlera e fushës fjalëkalimin nuk e barabartë me vlerën e fushës konfirmimit,
i cili ishte elementi tjetër formë, çirrem në të përdoruesit.
Dhe pastaj në fund - dhe kjo shumë ka disa sintaksën e ri të vetin,
por një herë ju keni parë atë, kjo është të paktën një pak më të arsyeshme -
tjetër në qoftë se forma e të cilit ID është regjistrimi ka një element të dhëna emri i të cilit është marrëveshja
dhe kjo është e kontrolluar, të shkojnë përpara dhe bërtas në përdorues.
Kështu që unë pranoj plotësisht kjo është plotësisht e madhe në shikim të parë.
Kjo është një shumë e sintaksës së re. Por të gjithë jQuery ndjek këto lloje të modeleve.
Dhe sinqerisht, unë nuk e di edhe kjo ka ekzistuar deri pak minuta më parë.
Unë googled, "Si mund të kontrolloni nëse një checkbox është i kontrolluar në jQuery?"
dhe kjo është sintaksë, sepse nuk ka mënyra të ndryshme për ta bërë këtë
me kodin aktual para JavaScript.
Pra, si faqja e parë e Set Problem 7 thekson,
pset 7 është shumë një ushtrim në Bootstrapping veten
ku ne kemi dhënë, me shpresë, një kornizë konceptuale me të cilat për të trajtuar pset.
>> Por siç është shpesh rasti me web design, është deri tek ju për të vërtetë për të thes rreth,
përfshijnë copra të kodit dhe shembuj nga Web aq kohë sa ju citoj ato
sipas kushteve në atë fletë të parë,
dhe të kuptojë se të mësuarit HTML, CSS, JavaScript dhe madje edhe SQL
është menduar të jetë me të vërtetë këtë në shtëpi stërvitje si ne të fillojë të marrë këto rrota trajnimit jashtë.
Dhe të kuptojë shumë ka kaq shumë gjëra më shumë që ju mund të bëni me një shfletues.
Brenda shumica e këtyre elementëve ka gjëra të tjera të quajtur handlers ngjarje.
Dhe edhe pse ne vetëm shikuar në ato quajtur onsubmit dhe onready,
ju mund të bëni gjëra të tilla si onkeydown, onkeyup,
si kur përdoruesi prek një çelës, ju mund të dëgjoni për këtë dhe deri kyç.
Gmail ka shkurtesat e tastierës.
Si funksionon Google zbatojë shkurtesat e tastierës për të rendis si C?
Ata dëgjojnë për ngjarje, si ata janë quajtur, si çelësi shtyp në linjë apo onkeyup dhe onkeydown.
Nëse e keni ndonjëherë fluturoi miun tuaj mbi disa opsionin e menysë
dhe të gjitha një e papritur, voila, një menu duket ose grafik ndryshon ngjyra,
se si ata janë duke bërë se?
Në vend se të dëgjojnë për onready apo onsubmit, ju dëgjoni për onmouseover ose onmouseout.
>> Pra me pak fjalë, me këto bazat shumë të thjeshtë që ne kemi filluar të zeroja sipërfaqe e sotme
dhe ne do të zhyten edhe më tej të mërkurën, keni, gjithnjë e më,
fuqia për të zbatuar llojet e gjërave që ju jeni tashmë të njohur me të.
Pra, le të përfundojë atje, dhe ne do të vazhdojmë këtë të mërkurën.
>> [CS50.TV]