R. J. Aquino: Laat ons net begin. So dit is Quiz 1. Hier is 'n paar hoë-vlak inligting. Die About page vir die toets is op hierdie URL, nie meer CS50.net, alhoewel dit sal nog steeds werk. Dit is CS50.harvard.edu/quizzes/2013/1. Dit is die groot About page, jy vertel waar en wanneer, naamlik volgende Woensdag in 'n klomp van die kamers. En teen volgende Woensdag, ek beteken twee dae van nou af. Al hierdie inligting is daar. Maar dit is kumulatiewe. So alles van die eerste helfte van die jaar is potensieel op die toets, want jy kan nie regtig gevorderde doen dinge in C sonder indien toestande en vir loops en dies meer. Maar daar sal 'n klem op die wees materiaal bedek sedert Quiz 0, begin met structs en File Ek / O. Dit is tipies meer uitdagend as Quiz 0. Die gemiddelde telling is gewoonlik laer. Studeer hard. Terwyl jy studeer, is seker te gebruik CS50/discuss jou vrae te plaas en lees ander mense se vrae. So as jy nie enige vrae het nie, teken in en lees jou vriende se vrae. Hulle is waarskynlik 'n goeie vrae. En neem aan die praktyk vasvrae. Ons het al gee vasvrae vir sewe of agt jaar. Hulle is almal online. Toekomstige vrae is soortgelyk om ou vrae. Dit is hoe ons dit maak. Die toets nog nie bestaan ​​nie. Nie een van ons het dit gesien. Maar dit sal lyk vorige vasvrae. Vir hierdie oorsig sessie, is dit nie 'n volledige lys van onderwerpe. Jy kan nie net bywoon en dan perfek gereed vir die toets. Anders, sou dit nie dat baie van 'n toets. En dit is ook nie noodwendig alles wat jy nodig het om te weet oor enige gegewe onderwerp. Dit is bedoel om jou bloot te stel aan die dinge Ons het gedek, herinner u wat ons gedek, en die wyse wat ons gedek nie. Maar jy sal verder gaan en dieper as jy te dubbel-check studeer dat jy alles oor enige gegewe weet onderwerp en dat jy in gevul het al die hoeke gedek in lesing. Die quiz notas vertel om te gaan na die skrywer notas, kyk lesing videos. Dit is 'n goeie manier om seker te maak jy het bedek al jou basisse. So jy begin, toe ek hierdie skyfies, het ek probeer om te sit waar ek gevind inligting. So vir File I / O, byvoorbeeld, Week 7, Maandag se lesing, en die gepos Artikel 6 en Probleem Stel almal inligting oor File I / O. Ek het dit gedoen dit vir elke onderwerp. So kan die titel skyfies nuttig wees vir jou. So hier het ons File I / O. Onthou, in Probleem Stel 5, ons gebruik fopen, fclose, fwrite, fread, en fseek. Nadat verhaal 30ish JPEG en nadat verklein en deurmekaar met bitmaps, moet jy redelik vertroud met hierdie funksies en hoe hulle werk. As jy nie meer bekend is, beslis hulle weer hersien. En maak seker dat jy verstaan ​​wat die verskillende argumente is, wanneer dit gebruik word. Maar die algemene lêer-verwante foute jy kan gevra word oor - Wel, as jy vergeet het om te kyk of fopen eintlik gewerk het voor jy gaan verander 'n lêer. Dit kan sleg wees. As jy vergeet het n lêer te fclose wat jy fopened, dit is soortgelyk aan 'n geheugenlek. Dit is baie sleg. En vergeet om te sien of jy bereik die einde van die lêer voordat jy begin skryf om dit te. So as jy sê, hey, ek is by die die einde van die lêer. Gee my 5 meer grepe. Wel, dit is waarskynlik nie gaan uitwerk soos jy verwag. Dit is regtig dit vir File I / O, omdat ons so baie van dit het met die probleem sit. So as jy verstaan ​​wat aan die gang was in Probleem Stel 5, onthou die bitmats en die JPEG, dan is jy waarskynlik al stel vir File I / O. As dit is 'n bietjie fuzzy, beslis hersien dat die probleem stel en die gepaardgaande materiaal. Structs was die onderwerp wat op die lyn tussen Quiz 0 en Quiz 1. Het nogal maak nie die sny vir Quiz 0. En hulle sal beslis wees op Quiz 1, Week 7, Maandag. Wat is 'n struct? Hier wys ons 'n struct. Dit is soos 'n nuwe soort. Dit is soos 'n houer vir verskeie velde. In hierdie geval, het ons 'n struct verklaar student wat twee velde - 'n string wat ons noem die naam en 'n int dat ons 'n beroep ouderdom. So wanneer ek gaan om studente of ek studente te verander, sal ek in staat wees om te toegang tot hul naam en hul ouderdom. Kom ons kyk na 'n paar kode vir wat. Hier sien ons dat ek verklaar 'n student se, net soos Ek verklaar dat enige veranderlike - int x, int y, ensovoorts. Hier is die student se. Hy begin met niks in sy veld. So laat ons hulle weer. Jy stel velde van 'n struct met dot. So ek het hier gesê dat s.name = RJ. En s.age = 21. Jy kan ook velde werk dieselfde manier wat jy wil werk die waarde van 'n veranderlike. So ek wil my naam te verander van RJ met geen tyd om te R. J. gespel die regte manier. Dit sou s.name word = RJ, dieselfde soos ons sê dit oorspronklik. En dan kan jy toegang tot hulle. Sodat ons hulle gestel het. Ons het hulle opgedateer. Jy kan ook toegang verkry tot hulle in die baie dieselfde manier. So hier, ek is uit te druk R. J. Is 21 jaar oud. En ek is die toegang tot die waardes met s.name en s.age. So dit is die toegang tot structs met die dot-notasie. Yep, bevraagteken? Publiek: Is daar 'n rede op die vorige skyfie wat jy nie het student op die boonste lyn, soos typedef struct student en dan student aan die einde? R. J. Aquino: So die vraag is, op hierdie skuif, het ons gewoonlik gesien typedef struct knoop en dan die velde van die struct en Toe het die woord knoop. En hoe hier kom ek nie sê, typedef struct student en dan die velde van die struct en dan student? Die rede is dat ek nie hoef te toegang tot dit binne-in die struct. Dus is dit OK om dit te verlaat sonder 'n naam. Ek kan net laat dit as 'n anonieme struct. Die rede waarom ons doen dit vir gekoppel lyste en dinge is omdat die binnekant jy nodig 'n struct nodes ster te verwys. So het die struct het 'n naam te hê, sodat jy dit kan later toegang te verkry. Dit is 'n klein detail. Maar jy sal gewoonlik sien typedef struct krulhakies as jy hoef nie die naam en typedef struct paar naam gevolg deur krulhakies as jy wil moet die naam. So dit is 'n goeie vraag. En op daardie punt, is ons geneig om te verander structs en slaag om structs deur verwys, nie in waarde. So ons sal net slaag om verwysings na structs plaas van slaag om die structs hulself. So jy baie gereeld gaan wees gebruik, in hierdie geval, student of * struct knoop * of node * plaas uit studente of knope. So hier is, het ek gesê, OK, die veranderlike ptr gaan die adres van s te wees. Dit gaan om die ondeursigtigheid te wees aan die student R. J. So ons kan kry op die velde dieselfde as ons iets kry. Eerstens, ID verwys na die wyser die struct te kry. Dit is * ptr en dan 'n kol en dan ouderdom. So om toegang tot die terrein, en ek het opgedateer Nou tot 22, want, laat sê, dit was my verjaarsdag. Daar is 'n kortpad sintaksis die gebruik van die pyl hier. So ptr pyl ouderdom is net dieselfde as * ptr.age. Nou, dit is iets wat jy het om te onthou en onthou. Jy gebruik dit 'n baie in pset6, die speller pset. Maar dit is eintlik wat aangaan op onder die kap. Dit is ontwysing die wyser en dan toegang tot dit. Vraag? Publiek: [onhoorbaar]. R. J. Aquino: So hoekom gebruik ons wysers as structs in plaas van die structs hulself? Die rede sou wees as jy verby 'n struct om 'n funksie, het jy waarskynlik wil om te slaag om net die 4 of so grepe dat die wyser te stel, in teenstelling met die potensieel 30 of 40 grepe wat die struct. So verby iets aan 'n funksie is makliker as die ding is kleiner in kort. Vraag? Publiek: Jy kan dit genoem het in die begin, maar daar is ander skyfies op [onhoorbaar]? R. J. Aquino: Hierdie skyfies sal wees nadat die hersiening sessie. Ons plaas dit op die webwerf. So beweeg op en beweeg effens vinniger, ons gaan om te praat oor data strukture. Daar is 'n baie. Ons dek 'n klomp van hulle. Hier is wat jy behoort te verstaan oor die data struktuur. Jy moet regtig verstaan ​​op 'n hoë vlak wat elke struktuur is. Kan jy in Engels verduidelik aan jou vriend wat nie geneem het nie CS50 hoe ons data is organisering en waarom ons wil word die gebruik van iets op hierdie manier? Dit is een ding. Ding twee, verstaan die implementering. So verstaan ​​hoe om hierdie dinge te gebruik in C. En ons sal gaan oor hierdie. En dan ding drie sal weet word die hardloop tye en die grense van die verskillende strukture wat jy gebruik. So verstaan ​​waarom jy sou gebruik om 'n Hutstabel in plaas van 'n skikking. Verstaan ​​hoe vinnig, gemiddeld, toegang tot 'n gemors tafel is. Verstaan ​​wat operasies is vinnig op gekoppel lys, maar stadig op skikkings en omgekeerd. So om te verstaan, sal jy het om te verstaan ​​Big-O notasie net weet hoe om te praat oor hierdie allerhande dinge. En ons sal praat oor dat. So die eerste ding, gekoppel lyste. Hier is 'n hoë-vlak prentjie van 'n geskakelde lys. Ons toon dit in die klas. Ons het gewoonlik 10 mense staan ​​op die verhoog. Maar ons het 'n reeks van nodes, waar elke node het 'n paar waarde en 'n wyser om sy volgende waarde. So om van die een knoop na die volgende, jy net sê, gee my die volgende knoop. Jy het dat knoop. Gee my die volgende knoop. Jy het dat knoop. Gee my die volgende knoop en so aan totdat daar is geen knoop linkerkant. So gaan voort om te praat oor dit op 'n hoë vlak. Dit is baie maklik om dinge te voeg in 'n geskakelde lys. As jy nie omgee vir die orde, jy kan net gooi dit reg aan die begin. Dit is konstante tyd. Maar dit is moeilik om 'n waarde te vind. As jy probeer om te vra, is sewe in my lys? Jy het om deur te gaan elke enkele waarde. Is dit sewe? Is dit sewe? Is dit sewe? Is dit sewe? Oor en oor weer. En dit is O (n). So wanneer jy studeer vir die toets, vergelyk dit met skikkings. Is dit OK? Die ligte het dowwe. OK. Wanneer is 'n geskakelde lys beter? Wanneer is 'n skikking beter? So laat ons kyk na 'n paar kode. Hier is 'n potensiële knoop. Dit is 'n struct. Dit het 'n int n, wat sal ons waarde wees. En dit het 'n struct knoop * langs, wat is ons wyser na die volgende knoop. So hier is, kan ons sien dat ons gebeur het sit 'n int in ons node. Maar as dit was 'n gekoppelde lys van char sterre of 'n gekoppelde lys van dryf, het ons heeltemal kan dit ook doen. Onthou in pset6, jy het waarskynlik 'n gekoppel lys van kar sterre of net statiese kar skikkings. Kom ons kyk hier by 'n operasie. So ons wil voeg 'n nuwe n in ons geskakelde lys. Ons begin met 'n kop wyser wat 'n verwysing na die knoop wat die waarde van N en 'n volgende van 'n muis wat punte na hierdie knoop is 'n waarde van N en 'n volgende van nul, want dit is die laaste knoop. So in die belang van die tyd, sal ek sit al die kode op die skerm. En ons sal deur dit loop 'n paar reëls op 'n tyd. So hier is die kode. Ek hoop dit is leesbaar. Die eerste ding wat ons doen, is om ons malloc 'n nuwe knoop. So maak dit 'n verwysing na 'n nuwe knoop wat nie heeltemal iets soos in dit nog nie. Ons gaan om seker te maak dat die nuwe knoop is nie null. Anders, ons het om op te gee. So het bewys dat ons nou stel die waardes in die knoop. So het ons die nuwe n in ons n veld. En ons het die volgende wyser om te wys op die oorspronklike kop, sodat ons kan nou het ingevoeg hierdie node in ons lys. Ten slotte, ons het die wêreldwye hoof punt aan ons nuwe knoop, sodat as ons begin by die hoof, sou ons op hierdie nuwe eerste knoop in plaas van die ou eerste knoop. En wanneer hierdie funksie uitgange, die veranderlike nuwe node bestaan ​​nie meer nie, want dit was die plaaslike na die funksie. So dit is die toestand van die wêreld. Ons globale hoof wys na ons nuwe eerste knoop, wat dui op ons oorspronklike eerste knoop, wat punte om die knoop daarna. Dit was te voeg. Ek hoop dit was relatief maklik om te volg. Wanneer jy twyfel, teken 'n prentjie. So vind ek dat dit oor geskakelde lyste en op soek na kode is baie nie nuttig. Terwyl op soek na 'n foto van 'n gekoppelde lys laat my dink, o, so Ek het hierdie knoop hier. Maar as ek werk wat wyser, dit eindig ontkoppel. En ek het vergeet waar die knoop gaan. En die kode verlaat. En jy het verskeie nodes wat opgeskort is. En jy nie eindig met die lys wat jy wil. So as jy trek die prentjie en dit doen stap vir stap, hopelik, sal jy sien die korrekte volgorde van die dinge wat in terme van opdatering van die wysers om seker te maak dat die lys kom saam. Insetsel is relatief eenvoudig. 'N meer ingewikkelde een sou wees opname in 'n lys gesorteer. 'N meer ingewikkelde funksie is verwyder en vind, so kyk deur 'n lys te kyk of daar iets is daar. Miskien het jy dit gedoen het in pset6 wanneer jy het in jou hash tafel en jy gesê het, Wel, is die woord appel in my geskakelde lys? Sodat jy kan reeds gedoen. Maar beslis, verfris u geheue en probeer vind om reimplement en reimplement verwyder vir 'n geskakelde lys. Fun kant nota, is daar ook dubbel-gekoppelde lyste, waar jy wenke wat wys beide vorentoe en agtertoe, sodat jy kan gaan na die volgende knoop en aan die vorige knoop. En daar was 'n vraag oor verlede jaar se quiz van die tipe, praat oor dubbel-geskakelde lyste. Nou, dit is 'n struktuur wat jy betreklik vertroud met, omdat die meeste van julle waarskynlik gebruik dit op pset6. Hier is een wat 'n bietjie minder bekende. As 'n kant nota, ek dink dat Quiz 1 is hoofsaaklik harder as Quiz 0, omdat die dinge wat jy doen, jy het nie soveel gedoen. Te sit dat 'n ander manier, vir Quiz 0, jy 'n baie C. geskryf het en ons vra jou oor C. Vir Quiz 1, ons gaan jou vra om oor PHP en JavaScript, wat jy het nie so veel van 'n skriftelike. Ons gaan om te vra oor die C-kode wat jy het nie so veel van 'n skriftelike, Hierdie gevorderde C dinge. So beslis, oefen die dinge wat ons gepraat oor in lesing wat jy het nie noodwendig te doen op die probleem gestel. Praat wat jy nie geskryf het 'n stapel op 'n probleem stel. Maar dit was in lesing. Hier is die hoë-vlak beeld van stapels dat ons wys elke jaar. Dit is die stapel bak in die Mather eetsaal. Op 'n hoë vlak, stapels is 'n laaste in, eerste uit data struktuur. Dit beteken dat jy gaan om dinge te sit in - 1, 3, 7, 12, 14, negatiewe 0. Die een ding wat ek kon nie ' gesê - negatiewe 3, 0. Jy het al hierdie dinge in En die laaste een wat jy in die eerste een wat gaan om uit te kom. So jy het twee operasies - stoot en pop. Al die plaas in wat ek was beduie soos hierdie is stoot. En dan wanneer ek bereik in te gryp iets of bereik op die top te gryp iets wat pop. So ons gaan stapels te implementeer. En ons het hulle in lesing gebruik skikkings. Maar jy kan dit doen gebruik geskakelde lyste. 'N stapel is 'n konseptuele data struktuur, nie soos 'n implementering-spesifieke een. So, wat sou dit lyk? Dit sou soort van soos hierdie kyk. Jy wil hê om 'n heelgetal grootte. En jy wil 'n verskeidenheid van waardes wat Ons noem bak, want dit is wat die foto is vir ons - int bak - en dan 'n paar maksimum kapasiteit. So, wat sou lyk soos druk? Wel, as ons 'n stapel s, dan stoot iets op s, sou ons die grootte van s. En dat die volgende sal wees oop plek van ons verskeidenheid. So as ons drie dinge in ons stapel, dan bak 3 die volgende sou wees oop kol, want 0, 1, en 2 is reeds gevul. So het ons die waarde in s.trays [s.size], die derde plek. En dan het ons inkrementeer s.size om te sê, hey, ons het drie dinge voor. Nou het ons vier. So die volgende keer wat jy druk, is jy gaan om iets te sit in 4. Of die volgende keer as jy pop, jy gaan om te kyk na 3 in plaas van 4 of wat ook al. En dan sal ons terug waar te sê, hey, ons het daarin geslaag. Dit het gewerk. As 'n reël van die duim, as 'n funksie wat veronderstel om terug te keer waar of valse terugkeer altyd waar jy kan iets verkeerd gedoen het. So werk dit? Wel, dit werk goed vir 1, en 2 en 3, en 4, en vyf. Maar laat ons sê ek my hoedanigheid bereik. Ek het dan loop in 'n probleem nie, want As grootte is dieselfde as kapasiteit, is ek nou probeer om iets te sit in 'n skikking waar ek nie plek nie. So 'n kort tjek dit op te los. As s.size == HOEDANIGHEID, terugkeer onwaar. Andersins, gaan en doen wat ons gedoen het. So wat anders kan ons vra oor vir stapels? Wat anders moet jy studeer? Wat anders moet jy oefen? Wel, die implementering van pop. Ons het reeds gedoen het te stoot. Ek sal dit regmaak. 'N nie-skikking implementering, waar jy gebruik om 'n geskakelde lys, miskien. 'N nie-int implementering. Ons het ints hier. Maar dit kan dryf gewees het. Ek kon snare gewees het. Dit kon gewees het kar sterre. Kyk na die verlede vasvrae vir die soorte vrae wat ons gevra het oor stapels. Ek sal sê dat ons gedek stapels rondom dieselfde as ons het hulle oordek het in die afgelope jaar. So het die quiz vrae behoort 'n goeie aanduiding. Vorentoe beweeg selfs vinniger, toue. Hulle is soos stapels. Maar hulle is die eerste in, eerste uit. As jy die Britse, die woord tou waarskynlik 'n baie sin vir jou. Anders, kan jy gehoor van dit as 'n lyn. Hulle werk soos die lyn by die Apple winkel. Die eerste persoon om te wys op 03:00 in die môre is die eerste persoon sy iPad te koop. So het ons twee operasies - enqueue en dequeue. Enqueue sit iemand in die lyn. Dequeue trek die eerste persoon van die lyn af. Weereens, kan ons implementeer dit met 'n skikking. So, wat is die struct ons getoon in lesing? Dit was hierdie een. Weereens, getalle. Weereens, die grootte en die nuwe ding voor. Hoekom is daar iets genoem front? Dit is die indeks van die volgende element te dequeue. Dit is net intern hou van die eerste man te wys, sodat ons kan trek dit uit wanneer ons nodig het om te. Beslis kyk na lesingnotas en probeer enqueue en dequeue te implementeer wanneer jy studeer vir die toets. Belangrike dinge om oor te dink. Wikkel om as die voorste plus die grootte eindig groter as kapasiteit. Weereens, as jou struktuur is vol, jy gaan 'n probleem te hê nie. Hash tabelle wat jy nog nooit gesien. Die meeste van julle het waarskynlik geïmplementeer hierdie op pset6. Dit is 'n struktuur wat daarop gemik is om O (1) konstante inplanting en O (1) konstante soek. In CS50, het ons geïmplementeer dit as 'n verskeidenheid van geskakelde lyste. Die belangrike komponent van 'n hash tafel is die hash funksie. So dit vat jou insette, kom ons sê, 'n woord uit die woordeboek, in 'n aantal, wat gaan ons indeks te wees. En ons sal die indeks gebruik in ons verskeidenheid. So hier is 'n oulike prentjie van study.50.net. Ons gooi al die woorde in ons hash funksie. En die hash funksie vertel ons waar hierdie woorde om te sit. Dit is al groot is in die land waar daar is net een woord vir elke slot. Maar as jy onthou van pset6, is daar is meer woorde as slots. So, wat gebeur wanneer jy 'n botsing? In plaas van die stoor van een waarde in, kom ons sê, hutstabel 3, jy slaan 'n geskakelde lys. En so in plaas van om spanspek Hier sal jy 'n geskakelde lys het, waar die eerste knoop is spanspek. En die volgende knoop is kat. En die derde knoop is die botsing, laat sê nie, want al hierdie woorde begin met C. So die meeste van julle het dit vir pset6. As jy dit nie doen nie 'n gemors tabel op pset6 en jy iets soos poging tot 'n Trie, beslis hersien hash tabelle. As jy het dit op pset6, beslis hersien hash tabelle. En as jy dit gedoen het op pset6 en dit het nie werk heeltemal reg en jy het 'n baie probleme met dit, beslis hersien hash tabelle. So die les is regtig beslis hersien hash tabelle. Die oorgrote minderheid van julle probeer probeer uit op pset6. Hoë-vlak prentjie. Dit is iets soos hierdie, waar elke node het 'n stel van kinders, waar elke kind ooreenstem met 'n brief. En elke node ook sê, hey, ek is 'n woord. So in hierdie geval, die woord Maxwell, As jy volg die M aan die A tot die X-W-E-L-L en dan volg dit een meer. En jy hierdie simbool, delta, wat ons gewys dat dit beteken dit is 'n woord. So Maxwell is 'n woord. Hierdie delta is deurgaans duidelik maak watter dinge woorde en wat dinge is nie. So in pset6, die data wat ons gestoor saam met enige van ons knope was "Ek is 'n woord. "En die cool ding oor drieë is hulle demonstreer inplanting en konnekteer in O (lengte van 'n woord). So net om te kry deur middel van Maxwell, dit is M-A-X-W-E-L-L. So sewe of agt - Ek kan nie tel nie - stappe te kry aan die einde en kyk dinge uit. So vinnig implementering hier. Rob het deur 'n gekoppelde lys in sy nadoodse. So maak seker dat uit. Jammer. Het deur 'n Trie in sy nadoodse. So maak seker dat uit. Maar jy basies elke knoop het 27 verwysings na die volgende nodes en een Boolean is ek 'n woord. Check uit Rob se nadoodse hoe dit is eintlik geïmplementeer word. Ons finale struktuur, ons bome en binêre soek bome. So kyk na hierdie, is hierdie gedek mees onlangs Week 8, Maandag. 'N boom is soortgelyk aan 'n Trie, behalwe as jy hoef nie noodwendig 27 knope op elke punt. En jy hoef nie hierdie data by elke stap wat dui op die vraag of die - die pad nie saak nie. Terwyl 'n tydstip waarop die pad van bo na onderkant, Maxwell, was vir ons belangrik. Maar elke knoop het verskeie kinders, miskien. Ons het 'n paar meer woordeskat. Die wortel van die boom is op die heel boonste. En ons sê dat die baie onderste nodes wat geen kinders is blare. Dus, net soos 'n Trie, 'n boom is 'n struktuur van knope. 'N algemene tipe van die boom wat ons gaan om te praat oor 'n binêre boom, waar elke knoop het geen kinders of 'n kind of twee kinders. So hierdie foto hier is nie 'n binêre boom, want knoop 3 het drie kinders. Maar as ons diegene, die res te ignoreer dit is 'n binêre boom, want dit demonstreer die eiendom wat elke knoop nul, een of twee kinders. So hoe kan ons druk dit in kode? Ons kan 'n knoop waar elke node het 'n 'n heelgetal binnekant van dit, asook as 'n verwysing na die boom aan die linkerkant en 'n verwysing na die boom op die reg, sodat die twee kinders. Hoe is dit nuttig? Wel, as ons reëls oor maak waar ons sit nodes, kan ons soek vinniger. So is daar 'n konsep van 'n binêre soek boom, waar al die nodes op die links substructuur 'n kleiner waarde as die knoop ons is op soek na. En al die nodes op die regte substructuur het 'n groter waarde as die wortel node. Nou, dit lyk soos 'n baie woorde. Ek is van plan om dit te sit binnekant van dubbele aanhalings en wys jou 'n prentjie. So hier is 'n voorbeeld van 'n binêre soek boom. Sien dat ons begin met 10. Alles aan die linkerkant van 10 is kleiner as wat dit. En alles aan die regterkant is groter as wat dit. Maar meer as dit, elke knoop in die boom spreek hierdie eiendom. So die knoop 7 het 'n 3 tot die links en 'n 9 aan die regterkant. So almal is kleiner as 10. Maar kyk na net diegene, die 7 het 3 aan sy linker-en 9 tot sy reg. En net so op die regte, 15 het 14 aan sy linker-en 50 tot sy reg. So het die drie nodes daar, 15, 14, en 50, is ook 'n geldige binêre boom of 'n geldige binêre soek boom. En hulle is almal groter as 10. So het hulle toegelaat word om te wees op die reg daar. Is daar 'n vraag? Publiek: Hoe hanteer jy wanneer jy het twee sewes? R. J. Aquino: Ja. Hoe hanteer jy met twee waardes wat dieselfde is? Sommige binêre soek bome te sê dat jy ignoreer duplikate, want die doel is net om te sê, het ek gesien hierdie dinge so ver. Sommige binêre soek bome wat jy kan sê 'n telling binnekant van die knoop. Ander kan sê dat alles links minder as of gelyk aan. En alles aan die regterkant is groter as. Dit hang net af wat die probleem is jy die oplossing. So in 'n woordeboek, byvoorbeeld, het jy sou nie omgee duplikate. Jy sal hulle gooi. Maar 'n ander probleem wat jy kan gee. Publiek: Is dit moontlik om 'n 'n 1 aan die linkerkant van 15, wat minder as 10? R. J. Aquino: No As die 14 was hier 'n 1, sou dit nie 'n geldige binêre soekboom, want alles aan die regterkant van 10 moet groter wees as wat dit. En ons sal sien hoekom. As in die land van die soektog my doel is om 14 te vind, het ek begin by die wortel. So ek kyk. OK. Ons gaan om te begin by die wortel. Kyk na 10. Wel, 14, ons teiken, is groter as 10. So moet dit wees aan die regterkant. Dit is baie soortgelyk aan die hele telefoon boek ding wat ons gedoen het, die binêre soek daar. Maar in plaas van binêre soek in 'n skikking, ons is binêre soek in die boom. So ons is nog steeds op soek na 14. Wel, 14 is kleiner as 15. So as dit is in ons boom, moet dit wees in hierdie gebied hier. Dit moet aan die regterkant van wees 10 en aan die linkerkant van 15. En so gaan ons hierdie knoop. En yay, ons het gevind 14. Ek gaan nie om dit deur te loop. Maar hier is die kode. Dit is eintlik relatief eenvoudig, want dit is rekursiewe. Wat kan ons vra om te doen op 'n quiz? Ons kan vra om die kode te skryf. Ons kan vra om te kyk na die kode en verander die kode en verduidelik wat dit doen. Ja. Vraag? Publiek: Is hierdie skyfies gaan wees beskikbaar gestel as hulle was die laaste keer? R. J. Aquino: Ja. So het hierdie skyfies sal beslis gepos word. Publiek: Hulle is eintlik gepos nou op die webwerf. David net het dit gedoen. R. J. Aquino: Die skyfies nou op die webwerf. Ek sal waarskynlik lap van 'n paar die typos ek opgemerk en op te los. Maar daar is 'n huidige weergawe van die site. Ander dinge wat ons kan vra om te doen nie - skryf insetsel. Skryf 'n iteratiewe weergawe van die rekursiewe funksie wat ons net het jy of praat oor hierdie dinge, soos in paragrawe, in woorde, in sinne. Vergelyk die vlug tye en verduidelik wat jy graag wil 'n binêre te gebruik Soek boom in plaas van 'n hash tafel, byvoorbeeld. So verstaan ​​hierdie strukture op 'n mooi diep vlak. Verstaan ​​hoe om dit te skryf, hoe om te gebruik, hoe om te praat oor hulle. En jy sal al gestel word. Vraag? Publiek: Wanneer jy skryf die binêre soek boom, hoe kan jy bepaal watter waarde maak dit as die wortel? R. J. Aquino: So die vraag is, wat waarde maak jy as die wortel? Afhangende van jou kode, jy dalk 'n globale wortel. So kan jy waarskynlik in gehad pset6 'n globale hash tafel. Of jy kan die wortel slaag in as 'n argument. So hierdie soektog funksie hier neem 'n argument 'n knoop *. En so ook al knoop jy gebeur om te wees kyk, is die een wat jy die behandeling as jou wortel wanneer jy dit in En ek is al te stel. Dit is my skyfies. Die volgende persoon kan kom ruil in 'n skootrekenaar en mic. ROB BOWDEN: Ek dink ek mag hê die vraag verskillend geïnterpreteer. Maar ek vertolk dit as, as jy ' die nommers 1, 2, en 3, hoe doen ons weet 2 die wortel te maak in teenstelling met 1 of 3? As ons 2 die wortel, dan is dit mooi 1 en 3 van die links en regs. Maar as 1 is die wortel, dan is dit 1 tot die top, 2 regs, 3 aan die regterkant. So by verstek, jy weet nie wat die wortel te maak. En vir enige algoritme ons verwag om gee jou net die eerste ding wat jy insetsel sou die wortel wees. Of ons wil gee jou 'n binêre boom wat bestaan ​​reeds dat 'n wortel. Maar ander algoritmes bestaan ​​sodanig dat die wortel sal werk, so dat as jy beland in die situasie waar dit is 1, 2, 3, dit sou outomaties by te werk te maak 2 die nuwe wortel, sodat dit is nog steeds mooi gebalanseer. ANGELA LI: Cool. Haai, ouens. Ek is Angela. En ek gaan af ons C en dan in 'n paar van ons web tegnologie - HTTP, HTML, en CSS. So die eerste ding is buffer oorloop aanvalle. So kom ons neem 'n blik op die kode. Dit is redelik eenvoudig. Daar is 'n funksie cat. En is dit nie terugkom nie. Maar dit neem in 'n wyser 'n string genoem bar. En dit gaan om dit te verklaar buffer, wat is 'n karakter skikking wat het 12 slots. En dit gebruik memcpy, wat net 'n funksie wat kopieë van een adres in 'n ander. So dit is probeer om te kopieer in ons buffer van watter bar dui op. So 'n idee wat is verkeerd met hierdie kode? Publiek: As bar is langer as C, sal hulle vervang. ANGELA LI: Ja, presies. Ons het geen waarborg dat bar gaan minder as 12 wees. Ons het net 'n paar arbitrêre getal 12. En ons was soos, laat ons hoop dat ons toevoer van die gebruiker is minder as 12 karakters lank wees. So in n ideale wêreld, as ons insette is altyd as wat verwag is, dan sal ons kry iets soos, hallo. Dit is minder as 12 karakters. Dit word gelees in kar c. En dan moet ons iets doen met dit. Dit maak nie regtig saak nie. Maar n kwaadwillige persoon kan doen iets meer soos hierdie, waar hulle gee ons alles bar dui op, dit gaan om te wys op die groot verskeidenheid van net A's. En dit is manier langer as 12. So dit gaan al die pad om te gaan hier waar die opbrengs adres gebruik te word. So kom ons sê hierdie funksie is cat genoem. Cat is miskien deur 'n ander genoem funksie, wat deur hoof geroep is. So wanneer cat loop, is dit nodig om te weet waar om terug te keer. As cat deur 'n funksie genoem genoem roof, dit het om te weet dat dit het om terug te gaan roof. En dit is wat hierdie terugkeer adres hier is om ons te vertel. Maar as ons oor het dit met 'n paar ander adres, in hierdie geval, dit is 'n verteenwoordiging van die adres van die begin van hierdie buffer, dan wat eintlik gaan gebeur, is dat in plaas van die terugkeer na roof, wat genoem ons funksie, dit is net gaan om te gaan na die voorkant van die kode. En as dit was daar, want 'n kwaadwillige hacker dude gekom en ingespuit hierdie, dan miskien hierdie bedrag van A se is nie eintlik 'n se. En dit is eintlik net kode wat breek jou rekenaar of iets. So verdedigende oor hierdie soort van te wees ding, jy moet nooit aanvaar dat toevoer van die gebruiker is 'n sekere bedrag van die karakters. Byvoorbeeld, wanneer jy doen speller, is hy ingelig dat die woorde was net om te wees 40 karakters lang maksimum. En dit was goed. Maar indien nie, dan sal jy het om te maak seker om net in 45 lees karakters op 'n slag. Anders, kan jy oorskryf jou buffer. Enige vrae oor daardie. Ja. Publiek: Kan jy net praat 'n bietjie meer oor hierdie? ANGELA LI: Jammer. Ja. Publiek: Die mikrofoon is net vir die video. Ek sal probeer en projek. Hi, ouens. Sup? So laat ons gaan oor 'n paar dinge in die CS50 biblioteek, wat jy al met behulp al semester, meestal toevoer van die gebruiker te kry. Soos u weet, kan jy sluit die CS50 biblioteek net doen CS50.h, wat bevat al die voorlopers van die funksies wat jy kan gebruik, soos GetString en getint, en GetFloat, ensovoorts. En daar is hierdie een lyn in die CS50 biblioteek wat definieer 'n string, wat julle weet nou al teen is net 'n kar *. Maar laat ons neem 'n blik op hoe GetString werk. Dit is 'n baie verkorte weergawe. Jy kan trek die CS50 biblioteek lêers uit, dink ek, manuals.CS50.net. En jy kan deur middel van lees die werklike funksie. Maar dit dek van die belangrikste dele. Dus het ons geskep paar buffer met 'n kapasiteit. En wat ons doen, is ons een van die karakters op 'n tyd van Standard n. Dit is waar die gebruiker insette teks in die konsole. En so gaan ons lees in 'n karakter so lank as wat dit is nie 'n nuwe lyn en dit is nie die einde van die lêer, wat is die einde van standaard insette. En vir elke karakter wat ons lees in, As daardie karakter eindig te voeg die aantal karakters wat ons gelees in, en dit is meer as ons vermoë, dan wat ons doen is ons net die grootte van ons buffer sodat dit is twee keer so lank. So weer, dit beskerm teen buffer oorloop aanvalle, want jy lees in 'n karakter in 'n tyd. En as op enige punt wat jy lees in te baie, jy moet net uit te brei jou buffer. Jy vermenigvuldig dit met twee. En dan het jy meer ruimte. Anders, kan jy voeg net 'n karakter te buffer. En nadat jy al die gelees het karakters, sal dit die buffer krimp terug na die normale grootte, voeg 'n nul terminator, en dan terug te keer. Nou, laat ons kyk na getint. Kan julle dit lees? Ek kan zoom in 'n bietjie. Ek weet nie hoe om rekenaars te werk. Never mind. Ek kan nie zoom in goed. Dit is werklik moeilik. Ek is jammer. Kom ons kyk net na hierdie. So, wat getint doen, is dit die eerste keer lees in 'n string van GetString, wat ons reeds geïmplementeer. En die belangrike rol om daarop te let is as dit deel dat dit eindig lees is soos nie eintlik 'n string, dan moet ons net terug te INT_MAX verteenwoordig mislukking. Hoekom moet ons terugkeer nie INT_MAX plaas negatiewe 1 of 1? Enige idees? Publiek: [onhoorbaar] negatiewe 1 op die een. ANGELA LI: Ja, presies. So jy is manier om meer geneig om te wil net om insette 1 of negatief 1 wanneer dit gevra word vir 'n nde en wat de maxes. Dit is groot. Jy is waarskynlik nie van plan om dit te gebruik. So dit is soos 'n ontwerp besluit om te maak seker dat jy nie per ongeluk terug 'n fout of jy terugkeer nie 1, wat ontleed te kan word as 'n korrekte antwoord. So as 'n reël nie bestaan ​​nie, ons terugkeer INT-MAX. Andersins, gebruik ons ​​sscanf, Dit is soos scanf. Maar dit lees van 'n string. En ons het hierdie geformatteerde string, wat is% i% c. En ons probeer en ooreenstem met wat met wat die gebruiker aan ons gegee het. Ons wil die aantal ooreenstem dinge te wees 1, wat beteken dat ons slegs regtig 'n heelgetal te pas omring deur miskien wit ruimte, miskien nie. In hierdie geval, as jy in iets soos bar, maak bar nie ooreenstem nie, want daar moet wees 'n heelgetal aan die begin. So sscan nooit opgedaag 0. So jy terugkeer nie doen nie. Alternatiewelik, as jy in iets soos 1, 2, 3, A, B, C, wat wedstryde beide die heelgetal, maar ook die karakter nadat dit. So sscanf sal terugkeer 2, wat is ook nie ideaal nie. Jy wil nie 1, 2, 3, A, B, C 'n geldige int te wees. Sodat ook nie werk nie. Maar sê jy sit in iets soos 50. Dit sal die% wedstryd wat ek, wat beteken dit sal kry lees in n. En nou, sal n die nommer 50 bevat. En dan kan jy dit terug. Andersins, jy getref probeer weer. En dan is dit net gaan oor weer tot jy 'n behoorlike toevoer van die gebruiker. Enige vrae oor wat? Publiek: So as jy was om uit te druk die waarde van die getint op [onhoorbaar] sou dit net die integriteit en Max? ANGELA LI: Ja. So as jy gebruik getint, moet jy aanvaar dat jy nie wil hê dat de Max 'n geldige toevoer, want jy gaan om te aanvaar dat dit was sleg. Publiek: As ons nie char c en iemand sit in 1, 2, 3, Sam, sou dit nog steeds werk vir 1, 2, 3? ANGELA LI: Ek dink dit sal werk. Maar jy wil nie 123Sam te 'n geldige toevoer deur 'n gebruiker. Dit is nie regtig 'n int. Daarom is dit nie regverdig lyk dit te ontleed as 'n int. OK. In daardie geval, laat se skuif op die internet. So HTTP is nie 'n taal. HTTP is net die stel van standaarde vir hoe jy dinge van kliënte stuur, dis jy, te stuur. Dit is die ander mense op die web. So HTTP staan ​​vir HyperText Oordrag protokol. Dit is die hart en siel van die hele web. Die hiperteks deel het net verwys na HTML. Die oordrag is kliënte soos jy versoeke sal stuur na bedieners, wat gee antwoorde. En die protokol is net, hoe jy verwag 'n bediener op te tree? En hoe is jy veronderstel om op te tree sodanig dat jy kan vaartbelyn hierdie kommunikasie proses? So HTTP versoeke lyk baie soos hierdie. GET is die tipe versoek. Julle het gesien AOO versoeke en post versoeke. Die tweede ding is daar, / my, dis net die URI of die URL van waar jy wil gaan in die gasheer. So hierdie versoek vra vir die bladsy, soos www.facebook.com / me. En dit is 'n GET-versoek. En dan is dit HTTP/1.1, dit is net die weergawe van HTTP jy gebruik. Dit is byna altyd 1,1. En dan is daar 'n klomp van ander dinge ook. Jy kan eintlik sien hierdie as jy maak jou konsole wanneer jy op die web. Antwoorde kyk om iets meer soos hierdie. Die boonste deel is, weer, die tipe HTTP jy gebruik gevolg deur 'n status kode. So 200 OK is alles uitgewerk. Hier is jou inhoud. Jou inhoud gaan volg. En dan sal dit vir jou sê watter soort van die inhoud en ander dinge ook. Die status kode, daar is 'n paar belangrikste is dat jy moet weet. 200 OK is soos alles se goue. Alles werk. 403 verbode. Dit het jy waarskynlik gesien as jy vergeet iets om behoorlik chmod. Dit beteken dat jy nie het nie die nodige regte te toegang wat op die bediener. Dit is soos, nee, jy kan dit nie sien nie. 404 beteken dat die ding bestaan ​​nie. Nie gevind nie. Jy het waarskynlik gesien dat 'n klomp. 500 Interne server fout is gewoonlik soos iets verkeerd geloop het op die kant van die bediener. So wanneer jy die uitvoering van pset7, As jy PHP foute gehad het, kon jy eintlik gaan na die bladsy en sien 'n n hele klomp van PHP fout dinge. Maar dit beteken gewoonlik nie gebeur nie, omdat webtuistes regtig nie wil vertel hoekom hulle site is gebreek. Hulle sal waarskynlik net terug n 500 Interne bediener probleem. En dan is daar 418 Ek is 'n teepot. Daar is 'n hele storie oor Hoekom is dit 'n ding. Maar jy kan daaroor lees op jou eie tyd. Daar is 'n hele klomp van die ander status kode ook. Maar dit is die kinders moet jy weet. So laat ons praat oor HTML. HTML, onthou, is nie 'n programmeertaal. Dit is 'n opmaak taal. Dit beteken dat dit beskryf inhoud. Dit vertel jou wat 'n HTML-dokument lyk hou of nie, hoe dit lyk Maar hoe dit gestruktureer is. So is dit definieer 'n struktuur en semantiek van webblaaie. Dit is soos hierdie is n paragraaf. Dit is 'n geordende lys. Dit is soos 'n deel van my bladsy. Hier is die titel. Dit maak dinge soos dat. Dit maak nie stileer enige van dat, omdat dit is wat jy doen in CSS. En dit lyk soos 'n reeks van geneste etikette. So 'n voorbeeld van 'n baie basiese te gebruik HTML bladsy, jy het die DOCTYPE verklaring tot daar. Dit DOCTYPE verklaring sê, ons gebruik HTML5. Dan moet jy die groot HTML tag. Dit bevat 'n kop en 'n liggaam. Binne-in die kop, jy het die titel. Dit is wat gaan in die titel bar van jou browser. Ons het 'n skakel tag wat links in 'n eksterne stylblad. En dan het ons 'n script wat trek vanaf 'n eksterne JavaScript sowel. En dan in ons liggaam is eintlik wat kry wat op die bladsy. Ons het 'n paragraaf en 'n beeld binne-in daardie paragraaf. Hierdie een is 'n foto van katjies. Let daarop dat die beeld tag sluit self. So in plaas van die opening met 'n beeld en dan doen 'n ander / beeld, jy net hierdie klein streep hier, wat sluit dit. En die beeld tag het ook hierdie sleutel waarde eienskap genoem alt. Dit is die alternatiewe teks wat gebeur wanneer u muis oor dit. Die meeste HTML elemente het 'n paar belangrike waarde dinge wat jy kan gee, is verskeie aanpassing. Ja. Publiek: [onhoorbaar]. ANGELA LI: Wel, so dit is 'n kenmerk van die merk. So, as jy met behulp van jQuery, kan jy doen kies image.getAttribute. En dan kan jy soek vir kry die alt eienskap. En dit sal vir u katjies. As jy onthou vorms in HTML, insette elemente sal naam eienskappe. En dit is wat PHP gebruik te stuur versoeke wanneer 'n vorm ingedien word. Publiek: Het jy iets in oor hoe as jy kittens.jpg gebruik of iets wat die vermiste lêer dopgehou of lêers? ANGELA LI: Ja. So dit is wat genoem word 'n relatiewe pad, want ek is nie gee jy die volle pad. Dit is soos wanneer in C as jy fopen sommige lêer, as jy fopen hi.txt, wat hi.txt sal na verwagting in dieselfde gids, tensy jy dit gee 'n meer ingewikkelde pad. Publiek: So jy kan spesifiseer wat die gids [onhoorbaar]? ANGELA LI: Ja. En jy kan kyk hoe om dit te doen. Maar as ek wou kittens.jpg uit te kry van die ouer gids, sou ek doen . /. Kittens.jpg. Ja. Jammer. Ja. Ag man, ek het vergeet om die vraag. Wat was die vraag? O ja, die vraag is, is, kittens.jpg sal na verwagting in dieselfde gids? En in hierdie geval, dit is nie. Maar jy kan ook gee dit 'n sekere pad sodanig dat dit nie hoef te wees nie. Goeie? CSS. So CSS, soos HTML, is nie 'n programmeertaal. CSS is net 'n reeks van stilering reëls. Dit staan ​​vir Cascading Style Sheets. En jy dit gebruik in samewerking met HTML styl bladsye. So is daar drie maniere jy kan dit sluit. Een manier waarop jy dit kan doen, is in die kop gedeelte van jou HTML, kan jy net open 'n styl tag en dan hou sommige CSS reëls daar. Dit is redelik OK. Ja. Publiek: Kan jy die styl tags in tussen, laat sê, liggaam en / liggaam. En dan sal jy stilering wees slegs in die liggaam. ANGELA LI: Jy kon. Dit sal werk. Maar jy moet nie, want stilering is soort van die metadata wat moet gaan in die hoof van die dokument. Liggaam moet regtig bevat slegs wat eintlik gaan wys op jou bladsy. Publiek: So jy wil sit styl in jou kop te styl van die hele web bladsy, reg? ANGELA LI: Ja. So om styl hier, hierdie CSS reëls toepassing sal wees op die hele bladsy wat gebaseer is op hul keurders. So het die beter manier om dit te doen, is in plaas van 'n styl tag in jou kop, jy het hierdie skakel na 'n eksterne styl vel soos ek jou gewys het in die vorige voorbeeld. Wat dit beteken is dit probeer en vind die lêer style.css en dan trek dit in en gebruik dit as die style vir die bladsy. En jou style.css sou net so lyk. Dit sou net 'n klomp van CSS. En uiteindelik, is daar 'n ander manier waarop jy kan insluit CSS, wat jy regtig moet nooit doen nie. Dit is oproep inline stilering. En so 'n HTML element kan ook neem 'n styl kenmerk. En dan in die styl kenmerk, jy kan dit gee CSS reëls. So in hierdie geval, ongeag div Ek is definieer reg hier, gaan dit het 'n swart agtergrond en 'n wit teks kleur. Maar jy moet dit nie doen nie, want wat Dit beteken dit sit jou stilering binne-in jou HTML. En ek weet ons het gepraat oor HTML is struktuur en CSS is styl. As jy dit doen, is dit meng hulle saam. En dit is nie baie skoon. So dit nie doen nie. Met behulp van 'n voorbeeld van CSS, daar, het ons net kies die liggaam van die HTML dokumentêre. En ons is soos, alles gaan wees Comic Sans. Ek beveel ook nie doen nie. Maar jy kan dit doen. Die tweede reël reg hier, gaan dit die element op die te kies bladsy met ID hoof. Dus, wat HTML element, ek het gesê ID = Hoof, ek gaan dat 'n te gee 20-pixel marge en alles bring, al die teks, na die sentrum. Die laaste ding wat kies deur CSS klas. So 'n element op die bladsy wat ek het 'n artikel klas, ek gaan om dit te maak 'n agtergrond van ligblou. Yep. Dit is al wat ek gekry het. Vraag? Publiek: Wat beteken die hashtag voordat hoof doen? ANGELA LI: Die vraag is, wat beteken die hashtag voor vernaamste doen? In hierdie geval, die hash in CSS beteken kies deur ID. So as ek 'n paar HTML element, soos divID = hoof, dit CSS reël kies die ding met ID hoof. En so het die tydperk voor artikel is kies deur CSS klas of kies deur HTML klas. Publiek: Hoekom is daar 'n het voordat 6 in die agtergrond? ANGELA LI: Ja. So die vraag is, hoekom is daar 'n gemors voor die 6? Dit is anders as dié gemors. Dit beteken dat jy gee 'n heksadesimale kleur. So blok kleure, dit net verteenwoordig 'n kleur. En jy onthou RGB drietalle wanneer jy het die forensiese pset? Dit is soortgelyk. Die eerste twee syfers verteenwoordig hoeveel rooi is in die kleur. Die ander twee verteenwoordig hoeveel groen. En die derde stel hoeveel blou. En die hash is dit gaan 'n kleur te verteenwoordig. So iets van 0, 0, 0, 0, 0, 0 tot F, F, F, F, F, F geldig is. Dit is 'n paar geldige kleur wat kan word vertoon deur die leser. Vraag? Publiek: Wat is die verskil tussen gebruik deur ID en deur die klas? ANGELA LI: Die vraag is wat is die verskil tussen gebruik deur ID en klas? Jy kan slegs een element in 'n HTML dokument wat 'n gegewe ID. So net een ding op my bladsy toegelaat ID hoof te hê. Sodat jy dit gebruik, want dit is die kop. Dit is die navigasie. Dit is die voet. Klasse is anders, want jy kan klasse van toepassing op soveel HTML elemente as jy wil. So byvoorbeeld, ek het die klas artikel, want daar is waarskynlik meer as een artikel op my bladsy. Jy is net toegelaat om soveel te hê elemente op die bladsy met dieselfde klas, maar slegs een met 'n sekere ID. Publiek: So het die dot verteenwoordig die klas? ANGELA LI: Ja. 'N kol verteenwoordig 'n klas. Cool. Dit is al wat ek het, ouens. Dankie. [Applous] ZAMYLA CHAN: Hi, almal. Ek is Zamyla. Ek gaan om te word wat PHP, MVC, en SQL vandag. Baie van die materiaal wat ek sal wees bedekking gaan wees pretty much reg uit pset7. Alle regte. So, wat is PHP? PHP staan ​​vir PHP Hypertext Preprocessor. Daarom is dit op sigself is 'n rekursiewe noem, wat is pretty cool. PHP is 'n bediener-kant skripte taal, en dit bied die agterkant en die logiese fondamente van ons webwerf. So Angela het baie gepraat oor die HTML en CSS wat die struktuur maak van die webwerf. Maar wat as jy wil om dit te verander inhoud dinamies en of dit wissel gebaseer op die gebruiker of sekere voorwaardes? Dit is waar PHP kom in Nou, tipies, kan PHP 'n paar minder lyne dieselfde ding om te implementeer in C. Dit is omdat PHP hanteer geheue bestuur vir die programmeerder, in teenstelling met ons om te malloc gratis, dinge soos dat. Maar omdat PHP is 'n interpretatiewe taal, tipies, kan dit uit te voer 'n bietjie stadiger as C, wat is 'n saamgestel taal. Omdat ons beweeg programme tale, laat ons kyk na hoe die sintaksis sal verskil. Kom ons wees baie versigtig om nie te deurmekaar raak met hierdie. So met PHP sintaksis, of jy inbedding jou PHP binnekant van 'n HTML lêer of binne 'n. PHP lêer self, jy nodig om die kode te sluit in die oop PHP en die geslote PHP etikette soos volg, soos op die skerm. Veranderlikes in PHP. Elke enkele veranderlike sal begin met die $ teken gevolg deur die naam van die jou veranderlike. Nou, veranderlikes in PHP is losweg getik, wat beteken dat jy nie nodig het wat die data tipe aan te dui is wanneer jy dit is verklaar. Dit beteken egter nie dat hulle het geen tipes nie. So as ek verklaar 'n veranderlike en net soos dit gelyk is aan 1, en dan verklaar ek 'n ander veranderlike, stel dit gelyk aan "1" en dan nog een 1,0, goed, afhangende van die tipe van gelykheid operateurs wat ek gebruik, as ek wil om te vergelyk oor alle vorme, dan hulle sal gelyk wees. Maar as ek wil om seker te maak dat die tipes is gelyk, PHP kan nog steeds doen dat, selfs al het ons dui nie watter tipe dit is wanneer ons eerste maak die lêer. Nou, in PHP, selfs al is ons oorskakeling van ontwikkeling tale van C, het ons nog ons betroubare Indien die toestand nie, net soos hierdie. Ons het nog ons terwyl loops, net soos hierdie, waar jy sit in jou toestand en dan die liggaam van die lus. En dan het ons ook ons ​​lus, wat tipies lyk. So as ek wou Itereer oor die hele nege psets en dien en noem dit 'n funksie submitPset, dan kan ek dit doen hier, wat julle ouens het al gedoen deur hierdie punt. Baie geluk, deur die manier. Vir die kamera, mense gesê, dankie. Nou, as jy nie wil net gebruik om hierdie lus, dan PHP eintlik ook het dinge genoem foreach loops. So as ek het 'n skikking van heelgetalle, 0 deur 8, gestoor in die skikking psets, dan kan ek 'n foreach lus het dat herhaal oor elke getal in psets. En dan kan ek dieselfde bel funksioneer agt keer, net soos ek tevore gedoen het. So dit vir elke lus is lekker, want jy hoef nie te As jy nie weet nie die presiese lengte van die skikking wat jy het, dan is die gebruik van hierdie foreach lus sal sorg dit vir jou. So ek gemaak psets as 'n skikking. Kom ons kyk na dit. Skikkings in PHP is tipies dieselfde as die mense wat ons in C, gehad het waar jy kan 'n skikking verklaar. En hier is, kan ek 'n leë skikking verklaar en dan bou dinamies deur die gebruik van indekse as heelgetalle. So indeks 0, ek gaan om te slaan 'n heelgetal vernoem 1. Op indeks 1 van my lys, ek gaan die waarde 2 te stoor. En op die derde indeks, maar die tweede getal is, gaan ek slaan die nommer 12. Nou, hierdie is 'n boete in daardie werk dit werk goed. Maar sê dit vir my saak wat elke indeks hou. Vir my is, indeks 0 beteken hoe baie katte wat ek het. En die indeks 1 beteken hoe baie volstruise wat ek het. En die volgende een beteken hoeveel honde. Wel, dan is dit aan daardie spesifiseer, in plaas van om te onthou 0 betrekking tot katte en 1 vir die volstruise, kan ek gebruik assosiatiewe skikkings, wat beteken dat in plaas van heelgetalle as my indekse, Ek kan eintlik gebruik snare. So, dit is baie handig. En jy het basies net vervang die heelgetalle met snare. En daar het jy 'n assosiatiewe skikking. Ja. Publiek: Is daar 'n rede waarom daar 'n onderstreping vir die tweede deel, want my lys het die skikking. ZAMYLA CHAN: Die vraag is, is daar 'n rede waarom daar 'n beklemtoon tussen my en 'n lys? No Dit is net hoe ek die benaming my veranderlike. Publiek: Op die eerste lyn, dit is een woord. ZAMYLA CHAN: Ek vra om verskoning. Ek sal dit regmaak. Ja. Hulle moet dieselfde veranderlike naam wees. Goeie vangs. OK. So laat ons aanbeweeg na string aaneenskakellling. As ek wou twee snare te neem, dan kan ek koppel hulle met die dot operateur. So as ek 'Milo as 'n eerste naam en Banana as 'n laaste naam, dan concatenating met die dot operateur en dan om 'n ruimte in tussen 'n string wat Milo bevat maak Piesang, wat ek dan kan eggo, of eerder, uit te druk. Praat van eggo, laat ons praat oor 'n paar nuttige - Oeps. Ek is jammer. 'N Paar nuttige PHP funksies. So het ons die - tegniese probleme. Een sekonde. Ek dit stuur. PowerPoint probleme. En ons is terug met PHP funksies. En ons is terug met PHP funksies. So het ons die vereistes funksie, waar As jy in 'n lêer slaag, hier is net 'n voorbeeld van 'n lêer wat Ek kan slaag in Dan sal die PHP-kode insluit van die lêer wat ek dui. En dit sal evalueer wat in Dan het ons ook 'n eggo, wat is 'n parallel te printf. Uitgang is 'n parallel te breek, wat die blok uitgange kode wat jy in En dan leë tjeks of 'n gegewe veranderlike is soos nul of nul of alles is gelyk met wat leeg. Ja. Publiek: Vir die string aaneenskakellling dot operateur een, in PHP, is dat die dieselfde as in JavaScript waar dit gebruik die dot vir aaneenskakellling beteken plus? So vir die volle naam, kan jy dollar het teken eerste + en dan + vir die laaste? ZAMYLA CHAN: Ja. So die vraag is of in PHP ons kan dieselfde string aaneenskakellling gebruik as in JavaScript met die plus punte. En Josef sal kry in wat later. Ek dink hy het 'n skyfie op daardie. Eintlik is dit anders. So in JavaScript, jy moet gebruik die plus snare te koppel. En in PHP, wat jy hoef te gebruik die dot operateur. So hulle is anders. OK. So nou dat ons alles gedek hierdie PHP, waar kom dit regtig handig te pas kom? Wel, dit kom handig te pas wanneer ons kan dit kombineer met ons HTML. So ons PHP sal die krag gee om ons te 'n bladsy se HTML inhoud voor te verander sy laai. So gebaseer op verskillende toestande gewoonlik die spesifieke gebruiker wat aangeteken het, kan ons mekaar verskillende inligting. Linda, het jy 'n vraag? Publiek: Kan jy koppel ook 'n heelgetal? ZAMYLA CHAN: Ja, jy kan. So die vraag is as jy kan koppel heelgetalle of ander variable.s nou, ons beweeg aan na MVC, wat is 'n paradigma wat ons gebruik in pset7 en 'n baie web ontwerpers gebruik vir organisering van die kode in die lêers in hul webwerf. M staan ​​vir Model. En basies, sal model lêers hanteer met interaksie met die databasis. Kyk lêers, hulle betrekking het op die estetika van die webwerf. En die Kontroleur handvatsels gebruiker versoeke, ontledings data, doen ander logika. In pset7, ons saam die model en die kontroles. En ons het net noem hulle leiers en sit hulle in die openbare gids. En die oog lêers, ons gebruik dit as templates in die templates. So hierdie diagram hier verteenwoordig ook wat dieselfde soort afdeling met die model en die kontroles in die pers hier op die linker-en die oog op die regterkant. So dit is 'n skematiese dat sommige van julle kan gesien het by Kantoor ure of gebruik te maak wat ons teken as jy is die uitzoeken jou pset. So hier, in 'n gegewe kontroleerder, 'n model kontroleerder, het ons funksies wat verband hou met die gebruik daarvan die SQL databasis, uitvoering PHP logika. Miskien het jy sou opkyk 'n voorraad in Yahoo! Finansies. Of miskien, sal jy net kyk na sien of 'n gebruiker ingedien het 'n vorm reeds voordat hy besoek jou bladsy. En dan sal jy lewer 'n vorm hier. Na daardie vorm is voorgelê deur die gebruiker, die aksie wat wat in die vorm se HTML tag sou die bladsy aan te dui dat dit terug dat die data te. So al die inligting sal wees terug gestuur na jou kontroleerder. Dan sou jy waarskynlik 'n bietjie meer te doen logika op daardie en miskien voer 'n paar meer navrae in die SQL databasis en Dan, uiteindelik, kom met 'n mooi verpak stel van die inligting wat jy wil slaag in in 'n ander sjabloon wat vertoon die inligting. Nou, hoe eintlik pakket wat ons nie dat die inligting up? Wel, ons het 'n funksie genoem Betaal dit was in die functions.php lêer in pset7, waar jy in die naam van slaag 'n lêer, die naam van 'n sjabloon. En dan moet jy ook slaag in 'n assosiatiewe skikking. En sodat assosiatiewe skikking verteenwoordig die verskillende inligting wat jy wil om te slaag in Nou, wat gaan konstante in wees hierdie voorbeelde is dat die sleutels of, Inteendeel, die sleutels van die assosiatiewe skikkings, dit is wat gaan wees sal na verwagting konstant deur die sjabloon te wees, omdat hy weet wat dit nodig iets genoem boodskap of genoem naam. En dan is die dinge wat op die regte, die werklike waardes, so in hierdie geval, wat is 'n goeie seun en Milo, is dié gaan die waardes wat die verandering te wees dat die beheerder verander elke keer of op grond van 'n sekere toestand en sal slaag wat in So hier in templates, sien ons dat ons gebruik HTML spesiale karakters, wat net basies beteken dat ons wil die peer string te kry dat die gebruiker sit in En ons wil vervang boodskap in daar. So dan wanneer ons eintlik sien die lêer, die spesifieke inligting oorgedra word in Let daarop dat die sleutel hoe lewer werke dat die sleutels van die assosiatiewe skikkings, diegene geword veranderlike name hier. En so het die waardes van die sleutel in die assosiatiewe skikking word dan die waarde van die veranderlike. Nou, laat ons beweeg na SQL. Dit staan ​​vir gestruktureerde Navraag taal. En so is dit net 'n ontwikkeling taal wat ontwerp vir die bestuur van databasisse. En dit handig te pas gekom vir ons in ons pset7 finansies webwerf. In wese is, is dit net 'n maklike manier om te spoor en te bestuur voorwerpe en tafels en hulle verbind aan mekaar. Nou, dink aan jou SQL databasis basies as 'n Excel lêer, miskien, met verskeie blad velle. Sodat jy verskeie tafels kan hê, miskien, wat gekoppel is aan mekaar. En baie soos Excel, ons het 'n baie die funksies wat ons wil hê. Byvoorbeeld, kan ons kies sekere rye. Ons kan inligting plaas. Ons kan werk rye. En ons kan ook dinge verwyder. Die SQL kies werke deur die kies van rye of 'n ry van die gespesifiseerde kolomme van 'n databasis wat ooreenstem met 'n sekere kriteria wat jy aandui. So hier toe ek sien select * uit wizards waar huis = Ravenclaw, dan Ek kies *, wat beteken dat ek kies elke enkele kolom in daardie ry van die tabel wizards, maar slegs indien die huis kolom gelyk Ravenclaw. Nou, dit is suiwer of SQL. So as ek het in phpMyAdmin, wat die spesifieke manier wat ons gebruik om te bestuur ons SQL databasis, dan kan ek voeg wat in die phpMyAdmin webwerf. En dit sou voer. Maar ons eintlik wil doen wat op die PHP kant. So, hoe kan ons dit doen? Wel, ons gebruik die navraag funksie, wat basies voer dat SQL navraag. Met behulp van? as 'n plekhouer, kan ons in sekere slaag waardes aan ons string dat ons wil vervang. So dalk is ek die stoor verskillende waardes in die curr_house, wat verteenwoordig die huidige huis dat ek gaan. So ek kan gebeur dat in so 'n plekhouer met die vraagteken. En dan sal ek basies voer die dieselfde as wat ek gedoen het voor, behalwe nou, is ek in PHP. En navraag sal terugkeer 'n assosiatiewe skikking. En ek gaan dit in rye te stoor. Nou, navraag kan altyd misluk. Miskien is die SQL navraag kon nie uitgevoer want die tabel nie bestaan ​​het nie. Of miskien het die kolom nie bestaan ​​nie. Iets het verkeerd gegaan. Wel, in daardie geval, sal jy wil maak seker dat jy kyk of die navraag onwaar teruggekeer. En dit is deur die gebruik van die drie gelyk operasie daar. En dan het ek is jammer, dit is 'n ander CS50 funksie, verby in 'n boodskap. En as jy kyk na verskoning vra, al is dit regtig is lewer apology.php. Ja. Publiek: Kan jy verduidelik wat dit star doen tussen te kies en te kom? ZAMYLA CHAN: Ja, absoluut. So het die ster in tussen te kies en uit beteken dat ek wil hê dat die hele te kies hele ry van my tafel. Ek kon kies aangedui het noem, jaar, huis. En ek sou net die drie kolomme in my tafel. Maar as ek kies *, dan sal ek kry alles wat in daardie kolom. Toe ek gaan om te gaan in die rug eerste. Publiek: So is dit steeds in SQL, reg? Is hierdie navraag of is dit PHP? ZAMYLA CHAN: Ons is in 'n navraag. So is dit in PHP. So met die PHP funksie navraag, ons uitvoering van 'n SQL navraag. Publiek: Is iets in SQL geval-sensitiewe, soos kies of wizards of huis? ZAMYLA CHAN: Is iets in SQL geval-sensitiewe? Ek glo so, ja. Ek glo dat kies en VANAF En waar is kas-sensitief. Nee? ROB BOWDEN: So, dit is die teenoorgestelde. Die kolom name en die tafel middel, almal is kas-sensitief. Maar enige van die MySQL sleutel woorde soos Kies uit is, en waar, dit is nie geval-sensitiewe. OK. So het die teenoorgestelde van wat ek gesê het. So al die MySQL sleutelwoorde - kies, uit, waar - diegene is nie kas-sensitief. Maar alles is. OK. Jy in die voorkant. Publiek: As ek het $ rye in terme van meer as een ry, beteken dit is net word 'n assosiatiewe skikking? ZAMYLA CHAN: So die vraag is of rye het meer as een ry in dit, beteken dit 'n assosiatiewe skikking? So dit is 'n verskeidenheid van assosiatiewe skikkings reeds. So selfs al is daar net een ry terug, dan sal jy het om te gaan na indeks 0 van daardie gevolg. En dan sal jy daardie eerste ry. Ja, Belinda? Publiek: Wanneer jy gebruik ===, is dit die enigste geval? Of is daar ander? ZAMYLA CHAN: So in hierdie geval, === is 'n vergelyking oor tipes. Jammer. === Is 'n vergelyking wat vergelyk die tipes. En dan == vergelyk oor alle vorme. Publiek: Kan jy verduidelik wat rye is in hierdie situasie? Is dit ry van data? ZAMYLA CHAN: In die volgende skuif, ek is gaan om te verduidelik wat rye is. So as jy nie omgee nie vashou af op daardie. En dan moet jy in die rug? Publiek: Vir funksies soos navraag, lewer en vra om verskoning [onhoorbaar]? ZAMYLA CHAN: Die vraag was of hierdie funksies - navraag, vra om verskoning, en lewer - is algemeen in PHP. Dit is mense wat CS50 geskryf het vir pset7. En Jay? Publiek: Wanneer jy nodig het om te sê $ _session, Is dat slegs vir ID's? Of kan jy dit hier gesê het? ZAMYLA CHAN: So die vraag is, wanneer Ons gebruik $ _session, dit was 'n spesifieke globale veranderlike wat ons gebruik. Hier hierdie veranderlike gaan wees plaaslike tot ons funksie. So ons is maar net verklaar 'n nuwe veranderlike. Publiek: Hoe is jammer geïmplementeer? ZAMYLA CHAN: Die vraag is, hoe jammer geïmplementeer? En ek dink dit is eintlik 'n redelik goeie praktyk vir julle ouens om te gaan in die functions.php artikel en kyk na jammer om te sien hoe jy kan hê dit self gedoen. So ek kan laat dit aan jou nie, maar net sê dat as jy kyk na verskoning vra, dan is dit die boodskap wat jy voorgelê om verskoning te vra, en dan is dit lewer dat die boodskap. Enige verdere vrae? Ek hou van vrae. So hou hulle kom. Publiek: [onhoorbaar] eggo of druk daar? ZAMYLA CHAN: Die vraag is, kon ons nie net gesit eggo of druk daar. So wat sou iets gedoen het effens anders. Dit sou gedruk het navraag misluk in daardie - Wel, nou, ons is eintlik in ons kontroleerder. So ons het nie eintlik ' HTML opgestel hier. Verskoning deur die lewering van apologize.php eintlik aansture jy apology.php. OK. So nou, laat ons gaan op aan te spreek die vraag van vroeër oor wat regtig rye. Wel, sal navraag terugkeer 'n verskeidenheid van rye. En elke ry is verteenwoordig deur 'n assosiatiewe skikking. So as ek 'n paar uitgevoer SQL navraag en Ek het gestoor en die resultaat in rye, dan gebruik van 'n foreach lus, dan die skikking naam is die eerste een daar - rye. En dan gaan ek om te bel elke ry daar $ ry. So iterating oor wat, ek kan dan toegang tot die gegewe ry se naam kolom jaar kolom, en die huis kolom. Let daarop dat ek nie sou gewees het om te doen dit met rye, want rye indeks naam bestaan ​​nie. Rye is net 'n verskeidenheid van assosiatiewe skikkings. So jy het twee vlakke is daar. Sodra jy die verskeidenheid van rye, jy het om te kry in daardie. En dan kan jy toegang tot die kolomme. Het dit maak dit duidelik? Ja, in die voorkant? Publiek: [onhoorbaar] oop tussen hakies vir [onhoorbaar]? ZAMYLA CHAN: Verskoon my? Publiek: Die oop hakies. ZAMYLA CHAN: Hierdie hier? Dit is my toelaat om te sluit daardie veranderlike. Ja. Publiek: Wanneer jy druk, is jy druk op die HTML-kode? ZAMYLA CHAN: Ja. Toe ek druk dit hier is binne my sjabloon nou, so my oog van MVC metode. So ek druk in die HTML. Publiek: So as ons na ontwikkelaar gereedskap na die uitvoer van hierdie, kan ons wat eintlik in die kode? ZAMYLA CHAN: Dit is 'n groot vraag, ja. So as jy het in die ontwikkelaar gereedskap in Firefox gebruik Firebug of Chrome, dan ja, kan jy sien die spesifieke HTML. So sou dit nie wys $ ry ["Naam"]. Dit sal ook al wys naam is in die ry. Publiek: Net 'n algemene probleem, wat is tr en td gedefinieer as? Hoekom sal ons [onhoorbaar]? ZAMYLA CHAN: Table ry tr, tafel dan td kolom. OK. Publiek: Ja, dit is tabel data. ZAMYLA CHAN: Table data. Ja. Publiek: Dit is 'n ry waarin die ry soos 'n kolom behandel? ZAMYLA CHAN: Jammer. Kan jy dit asseblief herhaal? GEHOOR: Hoe sou jy visualiseer rye? ZAMYLA CHAN: Hoe sou jy visualiseer rye in watter soort manier? Is jy praat oor hierdie rye hier of die tr rye? Publiek: Die rye. ZAMYLA CHAN: Hierdie rye hier? Ek wil visualiseer dit as Ek voer my navraag. En dit sê, OK, ek het óf 0 tot n bedrag van rye wat ooreenstem met die kriteria dat jy het bevraagteken. So ek het 'n paar aantal rye. So rye, die $ rye, winkels elke een van daardie rye in 'n skikking. So selfs al is dit net een van hulle is, is dit nog steeds 'n verskeidenheid van rye wat ooreenstem met dit. So dan, byvoorbeeld, is dit soortgelyk aan wanneer jy haal die kas van die gebruikers. En die kriteria daar was waar ID gelyk aan die sessie ID. Daar is regtig net een ry wat kon ooreenstem nie. Maar nog steeds rye net een ry terug. So jy wil hê om te gaan na die rye, indeks 0, indeks kas te eintlik kry om jou kas. Publiek: Is die druk-funksie in eggo dieselfde ding? ZAMYLA CHAN: Ja. Ja. Druk 'n eggo van dieselfde. Publiek: Is die foreach lus om die enigste manier om na die indeks in rye? ZAMYLA CHAN: Is daar 'n foreach lus die enigste manier waarop jy kan Itereer deur rye? No Jy kan ook gebruik om 'n lus vir die, met dien verstande dat jy weet wat die lengte van die ry se skikking. Publiek: Kan jy toegang tot dit gebruik van 'n ry as [onhoorbaar]? ZAMYLA CHAN: So jy kan nie toegang tot dit gebruik net ry as jy het nie 'n foreach lus met dien verstande dat jy nie ry verklaar. Ja. Ja, in die wit. Publiek: So, wat tr en td doen nie? ZAMYLA CHAN: So tr en td is HTML tags. tr dui die begin van 'n ry in die tabel. En elke td dui op 'n nuwe tabel data kolom. Publiek: Vir 'n visuele van wat 'n ry is soos, dink net die SQL, hoe hulle het 'n ry. [Onhoorbaar]. ZAMYLA CHAN: Ja. Dit is 'n groot punt. Jy kan rye visualiseer as net soos in 'n Excel-tabel, net die lys van die rye. OK. Alle regte. So nou dat ons gegaan het oor kies, indien daar is nie meer vrae, ons sal gaan oor na insetsel. So as ek wou in te voeg in 'n paar tabel in en voeg sekere kolom waardes, kon ek myself voeg in Ravenclaw in jaar 7. Maar soms kan daar dubbele wees waardes, soos ons gesien het in pset7 wanneer ons is besig om ons portefeulje. So in hierdie geval, ons wil gebruik op Duplikaatsleutel werk, sodat ons dit nie doen nie stoor verskeie rye met dieselfde waarde, maar eerder werk dit. Toe ons eintlik werk, Dit is nie 'n insetsel. Dit is net 'n update waar jy werk in 'n sekere tafel met 'n gegewe kriteria en dan, uiteindelik, te verwyder, wat nie 'n baie soortgelyke ding. Publiek: Kan jy kortliks gaan oor die duplikaatsleutel? ZAMYLA CHAN: Ja. In wese hier, ek het INSERT INTO gringotts, is, galjoene, hierdie waardes. Maar ID, vermoedelik, is 'n unieke sleutel waarde wat in MySQL tabel. So as ek reeds het dat ID opgestel, dan kan ek nie 'n nuwe ry plaas. So as dit nie reeds bestaan, dan het ek dit by te werk. In die middel van die wit. Publiek: So voeg, te werk, te verwyder, en kies, is dié van alle beskikbare plaaslik [onhoorbaar]? ZAMYLA CHAN: So voeg, update, verwyder, en kies is almal SQL navrae. So wanneer jy met behulp van SQL, jy sal moet diegene beskikbaar. Publiek: Terug na die verlede vasvrae - daar was 'n vraag wat gehandel het oor As jy het 'n tafel en wou voeg toets tellings in een en jy voeg jou naam so dit sal nie toelaat dat jy [Onhoorbaar] Jou vriend se toets telling. Hoe sal jy dit doen met die insetsel? ZAMYLA CHAN: So die vraag was oor 'n vorige mid-term vraag. Ek is nie bewus van wat een is dit nou. So miskien daarna, as jy wil kom op en wys my, dan kan ek beslis jou raad gee. Maar praat van die inbring van dinge, soos neem van iemand se telling wanneer jy behoort nie, laat ons praat oor SQL-inspuiting aanvalle. So 'n SQL-inspuiting aanval is in wese waar iemand voordeel van die lae sekuriteit van die manier wat jy neem in data. So hier, net soos in CS50 finansies, toe ons aangemeld, kan ons ingaan in 'n gebruikersnaam in die aanmelding vorm, die eerste teks boks, en gee dan in 'n wagwoord. Miskien ons PHP-kode kan kyk iets soos hierdie, waar $ username is die post-data gebruikersnaam en wagwoord is post-data wagwoord. En dan het ons net uit te voer ons navraag, sê, OK, goed, ons navraag gaan kies uit ons gebruikers, waar die rekening is die een wat hulle ingedien het. En die wagwoord is die wagwoord, Dit beteken dat die wagwoorde. Nou, wat as plaas van werklik die indiening van 'n werklike wagwoord, soos 12345 en aan die raai te gaffel wat sê wagwoord en probeer om te hack hul rekening, wat as plaas hulle voorgelê nie. Hulle kon dalk tik 'n raaiskoot op 'n wagwoord. En dan sal hulle klaar is met die kwotasie tik in of 1 = 1. Dit sou direk tempo in die SQL navraag iets om na te kyk. Kies van die gebruikers waar gebruikersnaam = Penne en wagwoord gelyk lelie of 1 = 1. So óf die wagwoord korrek of 1 = 1 te wees, wat altyd waar nie. So in hierdie geval, basies, 'n gebruiker kan neem voordeel van hierdie en net aan te meld hulself in en hack iemand se rekening. So dit is hoekom ons wil vermy iemand wat dit te doen. Maar gelukkig het die navraag funksie deur verby in die plekhouers sal neem sorg van hierdie vir jou. Ook, sal jy gewoonlik nooit wil om werklik te dien die wagwoorde hulself. Dit is hoekom ons hashed of geïnkripteer hulle in CS50 finansies. Publiek: Die afgelope quiz gepraat oor MySQL ontsnapping snare. Moet ons bekommerd wees oor wat? ZAMYLA CHAN: Dit is 'n goeie vraag. Die MySQL ontsnapping snare is beslis 'n funksie wat gebruik is in ons navraag. Maar beslis kyk na dit. Ek sou sê dit is fair game om te weet wat jy nodig het om dit te noem funksioneer op 'n string. Ja, Belinda? Publiek: Hoe weet jy wanneer dit aanhalingstekens of dubbele aanhalingstekens? En ook, ek voel soos in lesing wat jy iets oor nie met die [onhoorbaar] of iets of die tweede single quote aan die einde. Ek dink hy het daarop gewys in lesing wat jy veronderstel toespraak 1 te hê en dan nie apostrofs of iets. Publiek: [onhoorbaar]. Publiek: Die ding is die laaste een aanhaling in daar in die tweede blokkie moet nie daar wees. [Onhoorbaar] Want as jy daardie laaste een haal uit en pas dit aan vir inhoud waar die wagwoord is, as jy daardie navraag, daar is 'n enkele aanhaling die einde reeds. Jy wil hê dat die enkele aanhaling te gebruik as die een wat die een in die gesig staar [Onhoorbaar]. So, wat is eintlik in die teks boks moet nie dat. ZAMYLA CHAN: Ek sal dit verander nie. OK. As daar nie enige vrae het, dan sal ek slaag dit oor aan Josef te praat oor JavaScript, ensovoorts. [Applous] JOSEPH ONG: So ons hardloop 'n bietjie agter. So as jy het om te verlaat nie, dit is OK. Maar ons vra dat jy jou kop af As jy in die middel, sodat jy nie die kamera blok en jy gebruik die rug uitgang as jy moet. Ek is Josef deur die pad. Hi. Toets, toets. Dan, is dat 'n goeie? Cool. So het die video sal ook gepos word aanlyn vir diegene wat het nou te verlaat. Ongemaklik. OK. So quiz review. Dit is 'n kat. Nou, JavaScript, wat miskien nie as aww vir 'n paar van julle ouens. OK. So dit is die eerste, onthou van Zamyla. Onthou dat PHP is hardloop op die bediener. En baie van die tye, julle het sirkelroetes in PHP te druk HTML, reg? So een keer dat kode voer, wat HTML uitvoer wat jy druk kry gestuur na die gebruiker. En wanneer dit gebeur, nie meer PHP kan word hardloop nie, tensy jy die blad herlaai van Natuurlik, wat reexecutes die PHP. Maar as jy druk wat HTML, jy kan nie iewers heen te gaan. Sodat HTML word gestuur na die gebruiker, wat die leser hier, waar Milo is die gebruik van die rekenaar. En so goed, is daar verskeie dinge Sodra ons HTML stuur na die gebruiker. Soms wil ons iets te doen wanneer jy op iets wat ons wil waarskuwing bokse te pop-up, hierdie soort interaksies, soos wanneer jy druk op die sleutel, wanneer jy iets op die kliek bladsy, ek wil iets om te gebeur. Wel, kan jy nie reexecute PHP een maal dat HTML is ingestel. So hoe doen jy dit? Ons stel 'n nuwe taal, die sogenaamde JavaScript, wat loop in die leser wat u toelaat om dinge te doen na HTML nadat jy ontvang hulle van die bediener. En dit is die rede waarom ons dit 'n kliënt-kant noem programmeertaal. Dit werk op jou rekenaar - die kliënt. Enige vrae oor wat so ver? Dit paradigma sin maak aan mense? OK. Goed. Alle regte. Dus is die eerste ding om daarop te let is JavaScript is nie PHP. Hulle het 'n paar verskillende sintaksis, wat ons gaan in. En hulle het baie verskillende gebruike. JavaScript, weer, vir jou leser, vir die kliënt. Bediener loop iewers op iemand anders se rekenaar wat inligting stuur vir jou, reg? So as ons vra jou PHP-kode te skryf op 'n eksamenvraag, skryf nie JavaScript en omgekeerd. Jy sal net punte verloor nie, en dit sal nie reg wees nie. So laat ons kry in 'n paar sintaksis verskille - JavaScript aan die linkerkant en PHP op die regterkant. Die eerste ding wat jy sal sien met JavaScript, ons verklaar veranderlikes met die var navraag - V-A-R. PHP gebruik om die dollar teken, as Zamyla vroeër bespreek. As jy wil 'n assosiatiewe te verklaar skikking, sien ons die bekende sintaks op die regterkant met PHP. Aan die linkerkant, in plaas jy gebruik krullerige draadjies. En dan is jou sleutels is aan die linkerkant. Dan het jy 'n kolon. En dan moet jy die waardes wat jy wil. So dit is hoe jy dit sou doen in PHP aan die regterkant met die tweede lyn wat op Milo begin. En dit is hoe jy dit sou doen op die linkerkant in JavaScript as jy wil wat ons noem 'n voorwerp. En die voorwerpe in JavaScript is net assosiatiewe skikkings. So as jy wil om toegang te verkry velde, in PHP jy hierdie bracket sintaksis. En op hierdie manier, kan jy toewys hierdie eienaar veld Lauren. Wel, in JavaScript, as 'n mens wil toegang tot 'n stuk grond en dit verander, kan jy gebruik die dot sintaksis. Jy kan ook gebruik om die bracket sintaksis. Maar jy kan nie die dot sintaksis in PHP. Dit sal nie werk nie. Dit werk net in PHP. En uiteindelik, om dinge te druk om die troos, jy console.log, gebruik wat julle ouens gebruik om 'n lot in pset8. Jy kan console.log dat. As jy wil 'n skikking te druk in PHP, jy druk r te gebruik. En op die regterkant, jy sien ek hash string aaneenskakellling daar. Iemand het gevra vroeër. Ek gebruik 'n plus in JavaScript. As ek iets wil koppel in PHP, ek gebruik die dot. Dit is anders. As jy PHP-kode te skryf, gebruik nie 'n plus. As jy wil skryf JavaScript kode, nie 'n dot skryf nie. Dit sal verkeerd wees. En jy sal hartseer wees. So sintaksis verskille. Ken jou sintaksis, want as jy het om te skryf 'n vraag en jy sintaksis gebruik van die verkeerde taal, sal dit nie werk nie. En dit sal verkeerd wees. So laat ons praat oor 'n paar beheer vloei verskille, hoe jy gebruik loops in elkeen van hulle. Zamyla het oor die regterkant. Dinge aan die regterkant moet vertroud wees. Kom ons kyk na die linkerkant. Wanneer jy vir n lus in JavaScript gebruik, jou lus veranderlike, var i daar, lus oor die sleutels van die skikking. So sien jy die naam, huis, en die rol. As ek console.log i, ek kry naam, huis, en die rol. Dit is die sleutels. In JavaScript, 'n foreach lus gaan oor die waardes van hierdie reeks. So jy sien hulle is albei i. Maar hier op die PHP kant, is dit druk uit Milo, CS50, en Mascot. Dit is die waardes in PHP. So dit is hoe hierdie twee verskillende in die verskillende tale. So as jy 'n foreach lus, aanvaar nie dat dit gee jou die sleutels. En as jy met behulp van 'n vir n lus, doen nie neem dit gee jou die waardes. Is dit sin maak so ver? Die volgende skyfie gaan om jou te wys hoe kan jy die teenoorgestelde toegang in elkeen van hulle. Wel, as jy die sleutel in JavaScript en jy wil hê dat die waarde nie, jy net indeks in die skikking met dit. So Milo van ek sal kry wat jy wil - die waardes. Daar is hierdie verskillende sintaksis in PHP. As jy regtig wil om dit te weet, ek doen nie dink ons ​​het het dit aan julle nie. Maar as jy belangstel, kan jy gebruik Hierdie addisionele sintaksis op die regte kant wat eintlik sal laat jy die sleutels in PHP wanneer jy met 'n foreach lus. Dus net 'n bietjie van trivia as jy belangstel. So dit is net om te demonstreer verskille tussen hierdie twee sirkelroetes. Moenie meng dit wanneer jy programmering van 'n vraag. Enige vrae oor dat. Cool. Alle regte. JavaScript voorwerpe. Ek het gepraat oor hulle. Hulle is soos assosiatiewe skikkings. Die een ding wat ek wil u om daarop te let hier is dat 'n waarde in 'n assosiatiewe skikking kan enigiets in JavaScript wees. Daar kan selfs 'n funksie, soos daar. Ek het 'n funksie wat is 'n waarde van 'n sleutel. En as ek wil hê dat die funksie te roep, Ek het net toegang bas. En dan het ek die hakies daarna. En dit werk. So enige vrae? Nee? OK. Goed. JavaScript, soos PHP, losweg getik. Wat beteken dit? Dit het wel tipes. Maar wanneer jy 'n JavaScript verklaar veranderlike, sê jy var i. Jy hoef nie te sê dit. Dit is nie 'n ding. Jy moet net sê dit is 'n veranderlike. En dan JavaScript sal hanteer tipes onder die enjinkap vir jou. Ons kan vrylik skakel tussen tipes as gevolg van hierdie. So ek begin as 'n aantal in hierdie geval. En dan het ek 'n string. En ek voeg ek dit. En ek toewys dit terug in i. So op die eerste reël, Ek is die getal. Op die tweede lyn, ek word nou 'n string na wat ek doen die bestemming. En hier, is ek net concatenating dat die getal op die tou. So jy sien dat selfs al was ek 'n heelgetal in die eerste deel, is dit 'n soort van soos tans omskep in 'n string en dan word bygevoeg op dat hallo string. En dit is wat ek bedoel deur die los tik. Dit is wat jy sit tussen tipes baie maklik. En dit is nie waarskuwings gooi na wat jy wil C doen. So ek nou bevat hallo 123 aan die tou. Volgende. Ons kan ook vrylik te vergelyk tussen tipes. So as jy net gebruik ==, baie soos in PHP, JavaScript doen 'n soortgelyke ding. Die string 123 is dieselfde as die aantal 123 wanneer jy dubbel gelykes gebruik. Wanneer dit gebruik word trippel gelykes, is dit ook wil om seker te maak dat die tipe is dieselfde. So, want dit is 'n string en dit is 'n nommer, selfs al is hulle albei 123, as jy gebruik driedubbele gelyk, jy vals. In die dubbele gelyk geval, jy ware, omdat dubbel gelykes nie omgee tipe. Drie gelykes nie omgee tipe. Vrae? OK. En 'n ander ding oor JavaScript is omvang is soort van globale tensy jy in 'n funksie. En dit werk op dieselfde manier in PHP eintlik. So laat ons gaan deur hierdie voorbeeld. Ek het i 999. En dan gaan ek in hierdie lus. So as ek druk ek in hierdie vir lus, ek verwag 0, 1, 2, 3, 4. Ek kry om i = 4. Dit inkremente Ek het nou tot 5 op die einde van die lus. En dan is dit breek uit van die lus, omdat dit nie voldoen aan die kondisioneer nie. Wat dink jy dat die volgende console.log druk uit? So dit is wat dit sou doen in C. In C, want as jy soos var i buite en jy het var i binne 'n lus, soos 'n lus, dan is dit maak dit so dat dit is scoped dat die twee Ek se verskil. In JavaScript, dit sal net hanteer dit as dieselfde i. Ek kry 5, want dit was die waarde nadat dit opgewonde uit van die lus. So wat ek se is dieselfde i. Is wat sin maak? Wel, maak dit sin uit 'n JavaScript standpunt. Maar dieselfde paradigma nie oor te dra aan C. Hulle het verskillende bestekopname reëls. Ja. Publiek: [onhoorbaar] buite die funksie [onhoorbaar]? JOSEPH ONG: So buite wat funksie? So ek kry dat net 'n sekonde. So noem ons cat (i). Dit gaan ek in cat, inkremente dit, en dan inteken nie. So was dit 5. So is dit 6. Maar wat ek praat is dat ek in daardie funksie. Want dit is 'n parameter, dit is scoped aan dié funksie. So wanneer ek eintlik kry uit daardie funksie, dit is nou gaan om te gaan Terug na die ou ek. Dat ek net scoped omdat dit is in 'n funksie. En ons het die omvang en funksies. Maar ons het nie die omvang buite van funksies in JavaScript. Is wat sin maak? Ja. Vraag. Publiek: Dieselfde [onhoorbaar]? JOSEPH ONG: So ja. In PHP, dit is dieselfde tipe ding. Daar is 'n effense subtiel eintlik. Maar jy kan my vra oor dat na die hersiening. Jy nie regtig nodig het om te weet wat subtiel vir die toets. Vir alle praktiese doeleindes, soos veranderlikes, globale en PHP, tensy hulle is in 'n funksie, dieselfde ding in JavaScript. Ja. Publiek: Hoekom is dit toegelaat in JavaScript en nêrens anders? JOSEPH ONG: So hoekom is dit toegelaat in JavaScript en nie in C? Dit is net wie het met JavaScript besluit dat dit OK in JavaScript. So dit is net soos 'n programmeertaal konvensie soos ons sou sê. Ja. Publiek: So hoekom het dit gaan 6-5? JOSEPH ONG: So dit het 6-5, want as ek geslaag het Ek in cat, wat Ek binnekant van cat nou scoped te cat, omdat omvang bestaan ​​in funksies in JavaScript. Maar wanneer ek hier uit, want dit is scoped aan die funksie, is ek net gebruik van die gereelde i wat binne die res van die beheer vloei. Sin maak? Kan ek op? Alle regte. Cool. Die aanvaarding van hierdie voorwerpe geslaag deur verwysing. Jy weet hoe wanneer jy 'n skikking in C wat jy kan eintlik die skikking te verander? Dit is dieselfde ding in JavaScript. As ek slaag 'n voorwerp, in hierdie geval, ek geslaag Milo in hierdie catify funksie. Milo begin het. Sy naam is Milo piesang. Ek slaag die voorwerp in 'n funksie want dit is 'n voorwerp, 'n assosiatiewe skikking in JavaScript. Toe ek voer 'n operasie in daardie funksie, sal dit eintlik die voorwerp verander. So dit sal slegs gebeur vir voorwerpe in JavaScript, wil net dit gebeur vir skikkings binnekant van C. So Milo se naam sal eintlik 'n kat nou. Is wat sin maak? So dit werk net vir voorwerpe. Voorwerpe wat deur verwysing. Ja. Publiek: So jy sê dat in teenstelling met veranderlike i. JOSEPH ONG: Ja. Watter veranderlike ek was net 'n nommer, reg? Dit is soos in C wanneer jy 'n heelgetal n, maak dit 'n kopie. En wanneer jy 'n skikking slaag, is dit eintlik verander die werklike verskeidenheid in C. Dieselfde gebeur met JavaScript in hierdie geval. Alle regte. En volgende jaar, Milo is hartseer omdat hy is nou 'n kat. Dit was eintlik Milo na sommige reis na die veearts. So, hoe gebruik ons ​​JavaScript in 'n web bladsy? Ons kan dit sluit. Dit is HTML-kode met die strook tags. So ek het strook tags daar. En dan het ek 'n paar JavaScript kode in die script tags. En dan is dit voer dit. Toe ek doen dit net soos hierdie, is dit genoem inline JavaScript. Dit is soort van morsig, omdat die JavaScript is eintlik in die HTML. 'N beter manier om dit te doen, baie lekkerder, is jou JavaScript in 'n te skryf eksterne lêer en dan bied die script tag met 'n bron. En dit gaan aan dat JavaScript lêer en lees die JavaScript-kode van dat 'n lêer plaas. En op hierdie manier, het jy nie 'n baie JavaScript aan die begin van jou HTML-lêer, wat maak dit is regtig slordig. Jy het dit net iewers anders. En dan sal dit lees dit van daar af. Het dit sin maak? Plasing sake. In hierdie spesifieke geval, die script is voor die liggaam. So wanneer ek voer dat daar niks in die liggaam nie. Miskien sal dit 'n bietjie meer te maak voel wanneer ek wys hierdie volgende deel. In hierdie geval, die script kom nadat die DIV. So het die div eintlik verskyn op die bladsy eerste. Reg hier in hierdie klein rooi sirkel, sien jy die teks verskyn. En dan is die waarskuwing vertoon. In die eerste geval, omdat die script was voor die DIV, die waarskuwing toon eerste. En dan is die div toon nadat jy ignoreer die boks. So die uitvoering saak maak. So sal ons dit in gedagte hou. Dit sal belangrik wees om in 'n bietjie. OK. So goed, hoe wag jy totdat die hele bladsy word dan gelaai, voordat jy sommige kode uit te voer? Ons kry in hierdie 'n bietjie bietjie later ook. Maar net hierdie plasing hou sake in gedagte vir wanneer ons kom na 'n ander skuif. So kry ons DOM nou. En wat is DOM? So as jy kyk na HTML-kode, dit is net 'n klomp van die teks op die skerm. So hoe JavaScript weet dat dit is 'n HTML element? So ons het 'n paar geheue te hê voorstelling van hierdie struktuur wat ons het. En wanneer ons dit in die geheue verteenwoordiging in JavaScript, ons noem dat die DOM. En dit is net 'n manier dat mense besluit dat ons dit moet stel HTML struktuur. En wat beteken dit DOM lyk? Wel, in die geheue verteenwoordiging, ons neem hierdie teks. En ons draai dit in die geheue verteenwoordiging. So dit is die HTML. So het ons eerste vind uit dat elke DOM boom het 'n dokument. Dit lyk soos 'n boom. En die dokument bevat die HTML tag, eintlik alles binnekant van dit nou. Die HTML tag het twee kinders. Dit het 'n kop. Dit kop, as jy kyk na die inkeping daar by hoe dit gestruktureer tussen die noue etikette, kop het 'n kind. Die kind is die titel. Presies. Nou, ons het 'n liggaam kind. En dan is die liggaam het 'n kind genoem familie. En dat familie het drie kinders - oudste, middel, en die jongste. So jy moet weet hoe om 'n diagram te trek soos hierdie wanneer ons vra jou hoe 'n diagram te trek wanneer ons gee jy die HTML aan die linkerkant. Weet hoe om die DOM boom te produseer. En binnekant van hierdie dinge is, is daar net sommige teks, wat ek verteenwoordig so min bokse. Is dit DOM boom struktuur maak sin en wat die DOM is? So wat beteken die p staan ​​vir? Hier, die p daar in die kode verteenwoordig 'n paragraaf tag in HTML. Sodat jy kan kyk dit. Maar dit beteken net dit is 'n paar ruimte vir 'n paar teks. En dit het 'n standaard CSS styling, want dit is 'n lid tag. Maar nie regtig nie bekommerd wees oor wat deel te veel. Weet net dit is 'n plekhouer vir 'n paar teks. Ja. Vraag? Ja. Publiek: Jy moet net genoem CSS. Die hash familie en die hash alles wat goed is basies verteenwoordig ID's in CSS? JOSEPH ONG: Ja, presies. Ek kry van wat hierdie twee velde beteken in 'n tweede. Wanneer Angela het oor CSS, het sy gepraat oor CSS keurders. Dit is die CSS keurders sy praat nie. Ja, Rob? ROB BOWDEN: Ek wil ook kommentaar dat DOM binnekant van die titel tag is ook 'n teks knoop. JOSEPH ONG: Right. So in die titel tag, Ek het 'n paar teks DOM. So regtig, moet hierdie titel het soos 'n kissie af van dit kom so goed. Maar dit maak nie regtig saak nie te veel in hierdie geval. Ons het nie regtig omgee oor die teks knope, soos ons dit noem, te veel. OK, ons doen. Blykbaar, ons doen. En ek sal dit regmaak dat wanneer Ek is dit oplaai weer. Is wat sin maak? So hoe kan ons werk met die DOM? Wanneer jy te doen het met die DOM in JavaScript, is daar twee stappe. Jy kies 'n DOM element. En dan moet jy dinge doen om dit te. So in hierdie geval, abstrakte, ek het gekies om die middel element. En dan 'n voorbeeld van doen dinge dit sal verander word om die teks. Wat gebruik word Bob. Nou, wat ek gedoen het om dit wat ek verander Bob te Milo in hierdie geval. So hoe kan ons eintlik doen? Hoe doen ons die kies? En hoe doen ons die doen dinge te die ding wanneer ons het dit geneem? Wel, die manier waarop jy ouens het dit geleer in hierdie klas is deur die gebruik van iets wat ons genoem jQuery. So, wat is jQuery? jQuery is 'n biblioteek wat maak JavaScript makliker om te skryf. So iemand het die tyd en geskryf jQuery. jQuery is eintlik geskryf in JavaScript. En dan, omdat hulle gedoen het, het ons nou het 'n hele klomp van die funksies wat ons kan gebruik wat maak dat ons woon baie maklik. So, wat is 'n paar van die dinge wat dit doen? Dit maak die keuse van elemente makliker. Dit maak dit verander HTML, toevoeging van klasse makliker. Dit maak Ajax makliker. Ons kry met wat in 'n tweede. En dit is analoog aan C biblioteke. So jy sluit string.h, jy strlen raak. Jy kry strcpy, al hierdie dinge. Wanneer jy sluit jQuery, jy mooi maniere elemente verandering te kies dinge, ensovoorts. Jy kry ekstra funksies wat JavaScript gee jou nie. So jQuery is nie JavaScript. jQuery is 'n biblioteek wat in geskryf is JavaScript dat JavaScript makliker om te skryf. So jQuery is nie 'n ontwikkeling taal. Maar JavaScript is. maak. Seker dat jy jou terminologie reg. Enige vrae? Ja. Is dit 'n vraag? Alle regte. So hoe kan jy jQuery gebruik? Wel, as jy 'n paar skryf JavaScript-kode en jy sluit in 'n jQuery aan die bokant van jou lêer as 'n script lêer, jy gebruik die dollar-teken nou toegang tot jQuery te kry. En dit is anders die dollar teken in PHP. Dit is dieselfde simbool wat jy tik op die sleutelbord. Maar dit beteken baie verskillende dinge. Dollar-teken in PHP beteken hierdie is hoe ek verklaar 'n veranderlike. In JavaScript, wanneer jy ingesluit jQuery, dit staan ​​vir jQuery. So hou dit in gedagte. So, hoe kan ons kies DOM elemente? Wel, as jy dit doen die lelike JavaScript Terloops, jy toegang tot die dokumenteer globale veranderlike. En dan kry jy element deur ID-familie. Dit is regtig lank en langdradig en nie baie mooi. Of jy kan al die elemente kry wat 'n p-etiket. Dit werk ook in JavaScript. Maar ons het nooit regtig gewys jy die sintaksis te veel. Wat ons gewys het was jQuery. Sodat die hele selector daar wat is uitgespreek in JavaScript net kry verkorte hierdie baie mooi dollar teken hashtag familie. En $ p, net waar dit is soos dit. As jy wil hê dat alle p tags te kies binne 'n gesin, het ons 'n ruimte tussen die twee. En nou, kry ons al die p tags binne 'n familie. En kyk dit bekend? Wel, Angela gepraat oor CSS keurders. Gee my 'n sekonde. En so ten einde 'n element te kies, jy net gebruik dieselfde ding as jy sou doen met 'n CSS selector. As jy 'n gemors in die voorkant dit, dit kies deur ID. 'N kol kies deur klasse. As jy net die ding sonder allegaartjies of kolle, is dit kies diegene tags. Vrae. Ja? Publiek: Wanneer ons dot in ons HTML, is dat nie jQuery? JOSEPH ONG: Dot in ons HTML is 'n JavaScript ding. Dit is nie 'n jQuery ding. Die manier waarop jy ouens geleer om dit met jQuery is html. te gebruik. En dan moet jy verby dit alles die HTML gaan wees. So ek kry dat net 'n tweede eintlik. So hoe doen ons dinge te element Sodra ons het dit gekies? So dit is 'n voorbeeld van kies van 'n element. So nou, ons wil dinge om te doen om dit te. So in hierdie geval, laat my terug te gaan na die vorige skyfie. Dit was Bob voor. En ek wil om dit te verander binne HTML te Milo. So bel ek die HTML-funksie van die element. Dit HTML funksie is 'n metode van element. En dan gee ek dit wat Ek wil die HTML te wees. En dit is net vervang wat binne in daardie merker met alles wat ek gee dit. Ja. Vraag? Publiek: Die hashtag gebruik slegs vir die jQuery. [Onhoorbaar] sou ons dit nie gebruik nie. JOSEPH ONG: Ja, presies. Maar nie te veel bekommerd wees nie oor suiwer JavaScript. Ek wil net julle ouens om te fokus op hoe jy sou dit doen met jQuery, want wat gaan die belangrik om te wees deel van die toets. Right. Presies. So sien julle dat hashtag, sodat ooreenstem die element te kies met die ID middel as gevolg van daardie hashtag. Hashtag beteken ID. En hierdie element het 'n ID van die middel. So wat is die element wat ons kies. Publiek: [onhoorbaar]. dollar-teken hashtag [onhoorbaar]? JOSEPH ONG: So nie. Die vraag is, kan jy gebruik. Waarde. En. Waarde werk net op elemente wat insette. In jQuery, sou dit wees . Val, nie. Waarde. So ek sal kry om 'n klein voorbeeld wat toon al hierdie in kombinasie in 'n tweede. Maar ek dink dit dien 'n bietjie brokkie sin maak om mense so ver. Wil jy die HTML te verander, noem die HTML metode. Ja. Publiek: Kan jy verduidelik weer die metode? JOSEPH ONG: So 'n metode is net 'n funksie wat behoort aan een, in hierdie geval, een van die DOM elemente, want jy sien ek die element gekies eerste. Eintlik laat my gebruik van die muis. Ek die eerste element gekies. En dan het ek het hierdie HTML funksioneer wat dit gehad het. En omdat hierdie funksie behoort te hierdie ding, ons noem dit 'n metode. Dit is net 'n fancy naam vir dit. Sê dit weer. So onthou, het ons gekies die element nou. En ons het dit binne-in die element veranderlike. Korrek? So wanneer ons wil die HTML te verander op binne, want dit was Bob voordat jy wil hê dat die teks te verander na Milo. So HTML noem ons. En ons sê dit wat die HTML binnekant daardie element moet nou. En so het dit verander om dit te Milo, want ek het dit Milo. Publiek: So hulle saam te werk. [Onhoorbaar] JOSEPH ONG: Ja, ja. Hulle is saam te werk. So een van hulle kies die element eerste. En die tweede een nie iets om dit te. Ja. Publiek: [onhoorbaar]. Indien hierdie metode is anders as in HTML jy het die metode gelyk werklike. JOSEPH ONG: Ja. Dit is 'n ander metode. Dit is 'n ander metode. En ons kan dek wat in net 'n tweede wanneer ons 'n voorbeeld. Ek wil om seker te maak dat ons bespoedig want ons is besig om van die tyd. Maar ons het weg te hardloop met verloop van tyd nou. OK. Cool. So as jy wil 'n klas by te voeg, is daar ook 'n byvoeging klas metode. Dit is net 'n voorbeeld van wat wat jy kan doen met jQuery. Dit voeg net 'n klas. As jy wil dit te verwyder, kan jy dit verwyder noem. Dit is net nog 'n ding wat jy kan doen. So meer voorbeelde van dinge wat jy kan doen. So kan ek net sit dit op die top soos hierdie? Jongste verwyder. As ek maar net uit te voer dat JavaScript op die top van my lêer, sal dit werk? Right. Omdat middel nog nie bestaan ​​nie. So dit is nie van plan om te werk. Uitvoering orde. Dit gaan na die top eerste. Wat? Publiek: Jongste nog nie bestaan ​​nie? JOSEPH ONG: Ja. Jongste nog nie bestaan ​​nie. Presies. Publiek: Jy het gesê middel. JOSEPH ONG: Jammer. Jongste nog nie bestaan ​​nie. En die ander ding is ek het nie ingesluit die jQuery lêer vra script src. So dit is nie van plan om te werk. Eintlik het ek dit nie doen nie in die volgende skuif, wat veronderstel om dit te los nie. Maar die manier waarop ons dit doen, is JavaScript is gebeurtenis gedrewe. So wat ons doen is ons gebruik 'n gebeurtenis hanteerder te maak dit gebeur. En so het ek kies om die dokument stel eerste. Ek sê OK, wanneer die dokument is gereed, ek hardloop 'n funksie. So dit is al wat sintaksis beteken. Ek die dokument gekies. Nou, wanneer die dokument is gereed is, loop die funksie. En so hier wanneer die dokument is gereed is, wat beteken dat al die HTML het gelaai, dan loop ek die funksie wat verwyder daardie element. En so nou, toe ek loop hierdie funksie dat ek geslaag het in gereed, ek is gewaarborg dat al die HTML op die bladsy gaan eerste bestaan ​​nie. Ja. Vraag? Publiek: Wat is die geval navraag binne die funksie? JOSEPH ONG: So daardie gebeurtenis navraag in die funksie is net 'n parameter wat kry geslaag om die funksie vir enige gebeurtenis. Dit is net iets wat jy kry vir gratis. Wanneer jy met die sleutel hanteerders in pset8, kan so 'n geval vertel nie, want Byvoorbeeld, wat die sleutel wat jy gedruk op. In hierdie geval, vir 'n gereed geval, dit is eintlik nie super nuttig. Maar vir 'n sleutel af geval, dit is meer nuttig, want jy weet wat Sleutel jou gedruk deur toegang tot belangrike kode af daardie gebeurtenis voorwerp. Korrek? Is wat sin maak? OK. Ja. Vraag? Publiek: So kan jy die scripttag laer af? JOSEPH ONG: So ja. Jy kan die script sit merk laer af. Maar dan word dit net regtig slordig. En ons wil almal om te sentraliseer van ons kode in een plek. En dit sal ons toelaat om dit te doen. Onthou vroeër het ek gesê daar is 'n mooier manier om te verseker dat die elemente op die bladsy voor jou kode uit te voer? En dit is net 'n mooi manier jy sou bereik nie. Publiek: [onhoorbaar]. JOSEPH ONG: Ja. Jy sal nog steeds om te, reg? Want onthou, jy het die dien aan die bokant van die bladsy. So dit gaan eerste uit te voer voor jy aan die onderkant van die bladsy. OK. So jy kan ook 'n ander tipe event handler. Hierdie een prosesse net klik. Wanneer ek op die jongste, dan dit sal pop-up met 'n waarskuwing. Dit is net 'n ander tipe gebeurtenis. In teenstelling met die gereed geval, het jy nou gebruik die klik geval wanneer jy klik op 'n element. En so in hierdie geval, onthou, die klik hanteerder is tot jongste aangeheg. So gebeur dit slegs wanneer Ek kliek op die jongste. En in die ander een, die reg gebeurtenis is om die dokument aangeheg. So is dit wag vir die dokument om gereed te wees. Sin maak? Ek dink ek kan aanbeweeg. Ja. Vraag? Publiek: [onhoorbaar]. In hierdie geval is jy [onhoorbaar]. JOSEPH ONG: O, ja, want in hierdie geval, ek het om te wag vir die jongste element te die eerste keer verskyn op die skerm voordat ek kan 'n klik hanteerder heg aan dit, dit is hoekom ek dit binne van 'n dokument gereed is. OK. En volgende jaar, so dit is 'n groot voorbeeld van hoe jy alles sal kombineer. Dit is net 'n vorm validering byvoorbeeld jy gesien het in die lesing. So neem dit stap vir stap soos jy gaan deur middel van hierdie. En dit sal heeltemal OK. Lees dit net van bo tot onder. Ek het 'n vorm aan die onderkant. Wanneer die dokument gereed is, ek heg 'n dien hanteerder na die vorm, soos wat toe ek stuur die vorm, ek kry die waardes binne elk van hierdie insette. En ek kyk of dit leeg. As dit leeg is, ek terugkeer valse, want Ek wil nie die vorm in te dien, omdat die vorm is verkeerd. As die wagwoord is leeg of dit is minder as agt karakters, ek stuur nie die vorm, want dit is ook verkeerd. En die terugkeer valse net verhoed die vorm van die voorlegging en gaan na 'n nuwe bladsy. En hopelik, dit maak sin. Ek dink jy moet ouens loop deur hierdie kode stap vir stap op jou eie. En as jy verstaan ​​wat die kies elemente en doen dinge om dit te eintlik behels, sal dit maak 'n baie sin vir jou. Ja? Publiek: Wat beteken die name = gebruikersnaam beteken? JOSEPH ONG: So het die naam = gebruikersnaam en name = wagwoord beteken net kyk na die kenmerk van watter jy kies. En dan het aan te pas. So ons gaan in registrasie. En dan moet ons kyk na alle insette en registrasie. En dan haal ons die een waar die naam eienskap is gelyk aan gebruikersnaam. So daardie eerste selector net kies die rekening insette. En dat die tweede selector net kies die wagwoord een, want hulle het hul naam eienskappe soos as wat hulle veronderstel is om te wees. Vraag? Publiek: By die indiening, hoe die onderste gedeelte los die boonste deel? JOSEPH ONG: So dit is omdat van die gebeurtenis hanteerder. So ons wag vir 'n geleentheid dien wat kry afgevuur uit die vorm. En dit is alles wat voorlê. Hoekom moet ek roep indien daar? Dit sê, wanneer die vorm ingedien word, Ek kry 'n onderwerp gebeurtenis. So laat my net onderskep wat en dan loop die kode in plaas. Ja? Publiek: Hoekom het jy funksie geval het? Hoekom kan jy nie net [onhoorbaar]? JOSEPH ONG: Omdat in JavaScript, jy het die funksies te verklaar. Dit is net hoe dit werk in JavaScript. Jy het om te sê dit gaan 'n funksie uit te voer. So jy vertel dat jy verwag 'n funksie hier in plaas van net krullerige draadjies. Publiek: En die funksie is alles wat volg? JOSEPH ONG: Ja. Die funksie is alles wat binne-in die krulhakies na daardie funksie navraag. Ja? Publiek: [onhoorbaar]. JOSEPH ONG: dien vir? Publiek: Nee, want funksie sonder die gebeurtenis. JOSEPH ONG: Ja. So sonder die geval, jy kan hê nie. As jy nie die geval nie nodig, dan kan jy net laat dit. Maar as jy dit doen, dan is jy het dit net daar. Ja. Vinnige vraag? Publiek: [onhoorbaar]. JOSEPH ONG: Ja. Want wat jy hoef te doen, is die document.ready sê net wag vir almal die HTML op die bladsy te laai eers. En gewoonlik, wil jy jou elemente in plek voordat jy hardloop enige kode. Alle regte. Ons het om te kry om Ajax. Ons het nie veel tyd nie. So voor-en nadele. JavaScript is makliker probeer skryf met jQuery. Maar jQuery is 'n soort van stadig. Dit is soos PHP is stadiger as C, want dit is vertolk. En jQuery is 'n bietjie stadiger as JavaScript, omdat dit nie 'n baie die wat onder die kap. En so, as jy met behulp van jQuery, dit is net 'n bietjie stadiger as JavaScript, selfs al is dit gee jou mooi elegansie. En uiteindelik, Ajax. Tot dusver met Ajax, het jy nie gesien Ajax in terme van pset7 nie, want wanneer jy dit doen, jy stuur 'n vorm te quote. Dit laai 'n nuwe bladsy. So kry jy hierdie groot wit flits op die bladsy, terwyl dié tweede bladsy laai, korrek? Dit sal regtig lekker wees as jy het nie hierdie flits. Soos Facebook, as jy net gaan na die onderkant, dit voeg nuwe inhoud sonder verfrissend die hele bladsy. So iets soos hierdie sal lekker wees. Dit is JavaScript kode aan die linkerkant. Jy kry wat binne daardie insette. Jy kry die voorraad info van Yahoo! En dan moet jy maak 'n groot string wat sê, OK, dit is die boodskap wat ek wil om te wys op die skerm. En dan moet jy sit dat die boodskap in van 'n paar HTML element wat kry vertoon op die skerm. So dit is al wat hier gebeur. So basies, want dit is al JavaScript en jy hoef nie te loop meer PHP, dit sal seker maak dat die bladsy nie verfris. So dit is net 'n abstrakte idee dat ek hier sê vir nou. Die abstrakte idee is dat as jy dit doen al in JavaScript, jy het nie 'n bladsy verfris. Maar hoe weet jy eintlik doen? Wel, eintlik, laat ons praat oor 'n probleem met die eerste. 'N probleem is in JavaScript, uitvoering is sinchrone. So jy hoef te wag vir 'n lyn te voltooi voordat jy voer die volgende reël. En wat as ek gaan na Yahoo!, en hulle bedieners is regtig stadig, en dit neem om hulle drie sekondes Gee my weer dat voorraad info? Toe ek getref dat die prys lyn, indien die uitvoering is sinchrone, want dit is deur standaard, wat dit net gaan om te doen, is jou leser gaan stalletjie vir drie sekondes. En jy gaan nie in staat wees om te doen enigiets, terwyl dit kry wat data. Dit gaan gevries word. En dit is sleg nie. Jy wil nie 'n gebruiker 'n bevrore webblad. Korrek? Dit is net sleg nie. Almal is dit eens? As jy op Facebook, en dit vries en jy kan niks doen nie, moet jy kry regtig gefrustreerd. So die oplossing is wat ons maak iets asynchrone plaas. So al hierdie asynchrone ding sê is, ek gaan om dit te vra URL vir 'n paar data. En dan gaan ek die gang te hou. Ek gaan net om te hou die uitvoering watter kode wat was daarna. En dan wanneer die data is gereed, dan sal ek dit verwerk. Dit is al wat dit sê. Publiek: Ajax maak net kode asynchrone? JOSEPH ONG: Dit is 'n asinchrone manier gaan haal data. So die eerste ding wat oor Ajax is dit laat my sommer data vanaf 'n eksterne webwerf. En die tweede ding is dit maak seker dat my bladsy nie stalletjie terwyl ek haal wat data. Dit is die asynchrone deel daarvan. Want dit gaan iewers anders, want ek sê ek hou op, terwyl dit gaan haal wat data, wat maak dit asynchrone. Ek hou uitvoering. So hou dit asynchrone idee in gedagte. En ek sal jou wys wat die verskil is. Die sinchrone weergawe is aan die linkerkant. Die asynchrone weergawe is op die regterkant. Kyk na die nommers om te sien watter stappe ooreenstem met wat voer op elke lyn. Daar, die waarskuwing toon eerste. Want om voorraad info van Yahoo! neem drie sekondes, dit stalletjies vir drie sekondes. En dan is dit waarskuwings van die prys ná dié drie sekondes. So nou dat waarskuwing programme up op daardie tydstip - drie sekondes in En dan is dit waarskuwings deur na daardie. So dit gaan net stap vir stap. Dit is soos wat julle sou aanvaar, korrek? Met asinkrone uitvoering, jy eers waarsku. Dan gaan jy af na hierdie URL. En jy sê, ek gaan vra net vir die data. En dan gaan ek later verwerk. So dit uitvoer onmiddellik die volgende lyn nadat ek maak dat asynchrone versoek. So 'n 0.001 sekondes, jy sien waarskuwing hi. Voer daardie funksie, wakker bye. En omdat ek 'n belofte gemaak dat ek sou die data later verwerk, wat gebeur, is wanneer daardie data kom terug drie sekondes later, toe loop ek dat funksie wat ek daar. Ja? Publiek: Kan jy spesifiseer of verduidelik wat Ajax beteken? JOSEPH ONG: So Ajax is 'n manier dat as ek nodig data wanneer ek op 'n webwerf en ek wil nie die bladsy te verfris, dan Ek gebruik hierdie tegnologie genoem Ajax. Wat in wese net beteken, gaan haal data vanaf 'n ander webwerf. En doen dit in 'n wyse dat net nie my webblad stalletjie. Publiek: So, is dat 'n inherente deel van JavaScript of jQuery? JOSEPH ONG: So iemand 'n wyse te doen het dit in JavaScript 'n lang tyd gelede. Op 'n stadium het dit nie bestaan ​​nie. En so iemand hierdie tegniek uitgevind mense toe te laat om hierdie inligting te versoek in hierdie mode. En hulle het 'n paar dinge om dit te doen vir jou. En jQuery gee jou net hierdie baie mooi manier om dit te doen met hierdie $. kry funksie. vrae? Ek vrae oor kan beantwoord Ajax daarna ook. Ek sal hier wees. So dit laat ons data haal sonder die bladsy te verfris. En dit laat ons doen dit in 'n asinchrone manier wat nie vries die bladsy. Te lank, het nie lees as wat verduideliking was te lank vir jou. So uiteindelik, kruis-site script aanvalle. Ons het dit met Zamyla. As in my databasis iemand het hierdie naam, wat is hierdie script tag, en ek het 'n paar kode op my bladsy wat afdrukke uit mense se name in 'n ry, of ek sommige JavaScript-kode wat voeg hierdie naam in die bladsy, wat HTML kry geproduseer? Wel, ek druk die HTML tag. Ek druk al hierdie etikette. Ek kry om die deel waar ek druk saam met my vriende. Ek druk Lauren uit. Dit druk Milo uit. En dan my naam in die databasis is script post onvleiende Facebook status. Omdat ek plaas dit in die bladsy want dit lyk soos JavaScript, wanneer hierdie bladsy kry gestuur na die gebruiker, dit sal uitgevoer word as JavaScript. En so dit is wat ons noem 'n kruis-site scripting aanval. Iemand sit kwaadwillige inligting in jou databasis wat kan stem ooreen met 'n paar ekstra tou of sommige JavaScript string. En wanneer dit gedruk aan die bladsy op hierdie manier, wat dan gebeur, is dat slegte-kode sal uitgevoer word dat ek nie van plan is om om dit te kry uitgevoer. En dit is al wat 'n kruis-webwerf script aanval is. En die manier waarop jy rond dit is soos Zamyla gesê. Jy moet net draai dinge in HTML spesiale karakters. En hierdie HTML spesiale karakters is 'n PHP funksie wat sal verhoed dat hierdie soort ding van jou gebeur as jy 'n kwaadwillige string in jou databasis. Dit ontsnap dit net sodat dit nie raak geïnterpreteer as HTML. Dit vervang die klein hakies met wat ons noem entiteite. Toe het ons oor hierdie in lesing ook. So ek dink jy ouens moet 'n goeie greep op dit. Vrae? Ja. Publiek: So hoe sou die [onhoorbaar]? JOSEPH ONG: Sê dit weer. Publiek: Hoe sal die monitor - JOSEPH ONG: Right. So jy het iets wat sê, wanneer Ek registreer, tik in my naam. Ek tik net in daardie gebied, my naam is stript post onvleiende Facebook status naby script tag. En dit net kry dit in die databasis, want ek kan nie sê iemand in die wêreld het nie 'n naam met 'n linker pyl in dit of die woord script in. Dit maak nie regtig sin maak nie. So ek moet net om seker te maak dat ek ontsmet die dinge voor ek druk dit uit na die bladsy. Publiek: So het die HTML spesiale kaarte verhoed dat die script tags? JOSEPH ONG: Ja. Daarom is dit nie verhoed dat die script tags. Dit maak net seker dat die script tags kry nie geïnterpreteer as HTML of - ja. Dit kom net soos wat dit werklik is. Alle regte. So dit was die quiz review. Cool. [Applous]