R.J. AQUINO: Le të ketë filluar. Pra, kjo është Quiz 1. Ja disa informata të nivelit të lartë. Faqja About për quiz është në këtë URL, nuk CS50.net, edhe pse kjo do të vazhdojnë të punojnë. Është CS50.harvard.edu/quizzes/2013/1. Kjo është e madhe Rreth faqes, ju thënë ku dhe kur, pra të mërkurën e ardhshme në një bandë e dhomave. Dhe deri të mërkurën e ardhshme, unë të thotë dy ditë nga tani. I gjithë ky informacion është atje. Por është kumulativ. Pra, çdo gjë që nga gjysma e parë e vit është potencialisht në quiz, sepse ju nuk mund të vërtetë të bëjë të avancuar gjërat në C pa nëse kushtet dhe për sythe dhe si. Por nuk do të jetë një theks në materiale të mbuluara nga viti Quiz 0, duke filluar me structs dhe dokumentit I / O. Kjo është zakonisht më shumë sfiduese se sa Quiz 0. Mesatare Rezultati është zakonisht më e ulët. Studimi vështirë. Ndërsa ju jeni duke studiuar, të jetë i sigurt për të përdorur CS50/discuss të postoni pyetjet tuaja dhe lexoni pyetjet e njerëzve të tjerë. Pra, nëse ju nuk keni ndonjë pyetje, hyni dhe të lexoni Pyetjet e miqve tuaj '. Ata janë ndoshta pyetje të mira. Dhe për të marrë kuize praktikë. Ne kemi qenë duke i dhënë kuize për shtatë apo tetë vjet tani. Ata janë të gjithë në internet. Pyetjet e ardhshme janë të ngjashme për pyetjet e vjetra. Kjo është se si ne të bërë ato. Quiz nuk ekziston ende. Askush prej nesh nuk e kanë parë atë. Por kjo do të duket si kuize mëparshme. Për këtë seancë të shqyrtimit, kjo nuk është një listë të gjerë të temave. Ju nuk mund të marrë pjesë në këtë dhe pastaj të jetë krejtësisht e gatshme për quiz. Përndryshe, nuk do të ishte se shumë nga një quiz. Dhe kjo është gjithashtu jo domosdoshmërisht gjithçka që ju duhet të dini për ndonjë dhënë temë. Është për qëllim të ju vë në gjërat ne i kemi mbuluar, ju kujtoj atë që ne mbuluar, dhe mënyra në të të cilat ne e mbuloi. Por ju do të keni për të shkuar më tej dhe më të thellë, kur ju studioni për të dyfishtë-check se ju e dini çdo gjë rreth ndonjë jepet temë dhe që e keni mbushur në të gjitha qoshet që ishin mbuluar në leksion. Shënimet quiz të ju tregojnë për të shkuar në shënime shkruesit, shikojnë leksion videos. Kjo është një mënyrë e mirë për t'u siguruar që ju keni mbuluar të gjitha bazat tuaja. Pra duke u nisur, kur unë bëra këto slides, unë u përpoq për të vënë aty ku kam gjetur informacionit. Pra, për File I / O, për shembull, Java 7, Hënës leksion, dhe postuar Neni 6 dhe Problem Set të gjitha kanë informacion rreth Skeda I / O. Unë e kam bërë kjo për çdo temë. Pra ato slides title mund të jetë e dobishme për ju. Pra, këtu kemi dokumentit I / O. Mos harroni, në Problem Set 5, ne kemi përdorur fopen, fclose, fwrite, fread, dhe fseek. Duke shëruar 30ish JPEGs dhe duke ridimensionuar dhe messed me bitmaps, ju duhet të jetë shumë e njohur me këto funksione dhe se si ata punojnë. Nëse ju nuk jeni të njohur, patjetër të shqyrtojë ato. Dhe sigurohuni që ju të kuptoni se çfarë argumentet e ndryshme janë, kur ata janë përdorur. Por mete zakonshme file lidhura ju mund të kërkohet për - mirë, në qoftë se ju keni harruar për të parë nëse fopen ka punuar në të vërtetë para se të shkoni për të modifikuar një skedar. Kjo mund të jetë e keqe. Nëse ju keni harruar për të fclose një skedar që e keni fopened, kjo është e ngjashme me një rrjedhje kujtim. Kjo është mjaft e keqe. Dhe duke harruar për të parë nëse ju keni arritur në fund të dosjes para teje filloni të shkruani për të. Pra, nëse ju thoni, hej, unë jam në në fund të file. Më jepni 5 bytes më tepër. E pra, që ndoshta nuk do të punojnë jashtë në mënyrë që ju presin. Kjo është me të vërtetë ajo për Skeda I / O, sepse ne e bëri këtë shumë nga ajo me problemi vendosur. Pra, nëse ju kuptuar se çfarë po ndodhte Problem në Set 5, mos harroni bitmats dhe JPEGs, atëherë ju jeni me siguri të gjithë vendosur për Skeda I / O. Në qoftë se kjo është pak fuzzy, patjetër të shqyrtuar këtë problem vendosur dhe material i lidhur. Structs ishin temat që ishin në Linja mes 0 dhe Quiz Quiz 1. A nuk e mjaft të prerë për Quiz 0. Pra, ata patjetër do të jetë në Quiz 1, Java 7, të hënën. Çfarë është një struct? Këtu kemi të tregojnë një e strukturës. Është si një lloj të ri. Është si një enë për fusha të shumta. Në këtë rast, ne kemi deklaruar një e strukturës Studenti që ka dy fusha - një varg që ne jemi duke bërë thirrje emrin dhe një int që ne jemi duke bërë thirrje moshën. Kështu që kur kam kaluar rreth nxënësve apo I modifikojë studentët, unë do të jetë në gjendje të të hyrë në emrin e tyre dhe moshën e tyre. Le të shikojmë në një kod për këtë. Këtu ne shohim se unë e kam shpallur një student s, ashtu si Deklaroj çdo ndryshore - int x, int y, e të tjera. Ja s nxënës. Ai fillon me asgjë në arat e tij. Pra, le të vendosur ato. Ju vendosur fushat e një struct me dot. Kështu që unë kam thënë këtu se s.name = RJ. Dhe s.age = 21. Ju gjithashtu mund të rinovuar fusha të njëjtën mënyrë ju do të rinovuar vlera e një variable. Kështu që unë dua të ndryshojë emrin tim nga RJ me nuk ka periudha të R.J. shkruar mënyra e saktë. Ajo do të s.name = RJ, e njëjta siç thamë atë fillimisht. Dhe pastaj ju mund të përdorni ato. Pra, ne kemi vendosur ato. Ne kemi përditësuar tyre. Ju gjithashtu mund të përdorni ato në të njëjtën mënyrë. Kështu që këtu, unë jam shtypjen jashtë R.J. Është 21 vjeç. Dhe unë jam duke hyrë në këto vlera me s.name dhe s.age. Pra, kjo është qasja structs me dot simbol. Po, pyetje? Audienca: A ka një arsye më rrëshqitje e mëparshme që ju nuk e keni vënë Studenti në linjë lartë, si typedef Studenti struct dhe pastaj Studenti në fund? R.J. AQUINO: Pra, pyetja është, në këtë rrëshqitje, ne kemi parë në mënyrë tipike typedef nyje struct dhe pastaj arat e struct dhe atëherë fjala nyje. Dhe sa të vijë këtu unë nuk them, typedef Studenti struct dhe pastaj Fushat e struct dhe pastaj studentit? Arsyeja është se unë nuk kam nevojë të hyni në atë në brendësi të struct. Pra, kjo është në rregull për të lënë atë pa një emër. Unë vetëm mund të lënë atë si një struct anonim. Arsyeja që ne bëjmë atë për listat e lidhura dhe gjëra është për shkak se brenda ju duhet për referencë një yll e nyjeve struct. Pra struct duhet të ketë një emër, kështu që ju mund të hyni në atë më vonë. Kjo është një detaj i vogël. Por ju do të shihni në mënyrë tipike typedef e strukturës formatimin e teksteve kaçurrel nëse ju nuk keni nevojë emri dhe typedef struct disa Emri ndjekur nga formatimin e teksteve kaçurrel nëse ju do nevojë për emrin. Pra, kjo është një pyetje e mirë. Dhe në këtë pikë, ne priren për të modifikuar structs dhe kalojnë rreth structs nga referencë, jo me vlerë. Pra, ne vetëm do të kalojë rreth pointers për të structs në vend të kalimit përreth structs veten e tyre. Pra, ju jeni shumë shpesh do të jetë përdorur, në këtë rast, * studenti ose struct nyje * ose * nyje në vend nga studentët apo nyjet. Kështu që këtu, unë kam thënë, OK, ptr ndryshueshme do të jetë adresa e s. Ajo do të jetë akrep të studentit R.J. Pra, ne mund të merrni në ato fusha të njëjtën gjë si ne të merrni asgjë. Së pari, ID referencë në treguesin për të marrë e strukturës. Kjo është * ptr dhe pastaj një dot dhe pastaj mosha. Pra, për të hyrë në fushë, dhe unë kam updated ajo tani në 22, sepse, le të të themi, ishte ditëlindja ime. Ka një sintaksë shkurtore duke përdorur arrow këtu. Mosha Pra ptr shigjetë është vetëm njëjtë si * ptr.age. Tani, kjo është diçka që ju do të keni për të mësuar përmendësh dhe mos harroni. Ju përdorur atë shumë në pset6, pset speller. Por kjo është në të vërtetë se çfarë po ndodh në nën kapuç. Është dereferencing në treguesin dhe pastaj të hyrë në të. Pyetje? Audienca: [padëgjueshme]. R.J. AQUINO: Pra, pse jemi duke përdorur pointers si structs në vend të structs veten e tyre? Arsyeja do të ishte në qoftë se ju jeni duke kaluar një struct për një funksion, ju ndoshta duan për të kaluar rreth vetëm 4 apo më shumë bytes që përfaqësojnë në treguesin, si krahasim me potencialisht 30 ose 40 bytes që janë struct. Pra, duke kaluar diçka në një funksion është më e lehtë kur gjëja është më i vogël me pak fjalë. Pyetje? Audienca: Ju mund të keni përmendur këtë në fillim, por a ka slides të tjera deri në [padëgjueshme]? R.J. AQUINO: Këto slides do të jetë pas seancës së shqyrtimit. Ne do të postoj ato në faqen e internetit. Pra, duke lëvizur në dhe të lëvizin më pak më të shpejtë, ne do të flasim për të dhëna struktura. Ka shumë. Ne mbuluar një bandë e tyre. Ja se çfarë ju duhet të kuptoni në lidhje me strukturën e të dhënave. Ju duhet të vërtetë kuptojnë në një të lartë nivel atë që çdo strukturë është. A mund të shpjegojë në gjuhën angleze të tuaj Miku që nuk ka marrë CS50 si ne jemi duke organizimin e të dhënave tona dhe pse ne do të të jetë duke përdorur diçka në këtë mënyrë? Kjo është një gjë. Thing dy, të kuptojnë zbatimi. Pra, të kuptojnë se si të përdorin këto gjëra në C. Dhe ne do të shkojnë mbi këtë. Dhe pastaj gjë e tre do të di herë të drejtuar dhe kufizimet e strukturat e ndryshme që ju jeni duke përdorur. Kështu e kuptoj pse ju do të përdorë hash tabelë në vend të një grup. Kuptojnë se si shpejt, mesatarisht, hyrë në një tryezë të hash është. Kuptoni çfarë operacionet janë të shpejtë në lista e lidhur por i ngadaltë në vargjeve dhe anasjelltas. Pra, për të kuptuar se, ju do të duhet të kuptojnë Big-O simbol vetëm për të dini si për të folur për këto llojet e gjërave. Dhe ne do të flasim për këtë. Pra gjëja e parë, listat e lidhura. Këtu është një foto e nivelit të lartë i një liste të lidhura. Ne e tregojmë këtë në klasë. Ne zakonisht kemi 10 persona duke qëndruar në skenë. Por ne kemi një seri të nyjave, ku çdo nyjë ka disa vlera dhe një tregues me vlerën e saj të ardhshëm. Pra, të marrë nga një nyjë në tjetrën, që ju vetëm thonë, më jep nyjen e ardhshëm. Ju keni atë nyje. Më jepni nyjen e ardhshëm. Ju keni atë nyje. Më jepni nyjen e ardhshme dhe kështu me radhë derisa nuk ka asnjë të majtë nyje. Pra, vazhdojnë të flasin për atë në një nivel të lartë. Është shumë e lehtë për të futur gjëra në listën e lidhur. Nëse ju nuk e kujdesit për të rendit, ju mund të bjerë vetëm atë të drejtë në fillim. Kjo është koha konstante. Por është e vështirë për të gjetur një vlerë. Nëse jeni duke u përpjekur për të kërkuar, është shtatë në listën time? Ju duhet të kalojnë nëpër çdo vlerë të vetme. A është kjo e shtatë? A është kjo e shtatë? A është kjo e shtatë? A është kjo e shtatë? Pa pushim. Dhe kjo është O (n). Pra, kur studion për quiz, krahasoni këtë me vargjeve. A është kjo në rregull? Dritat u dim. OK. Kur është një listë e lidhur më të mirë? Kur është një grup më të mirë? Pra, le të shohim disa kodin. Këtu është një nyje potencial. Kjo është një struct. Ajo ka një int n, e cila do të jetë vlera tona. Dhe kjo ka një nyje struct * tjetër, i cili është tregues jonë për nyjen e ardhshëm. Pra këtu, ne mund të shohim se ka ndodhur që kanë vënë një int në nyje tonë. Por në qoftë se kjo ishte një listë e lidhur e char yjet ose një listë e lidhur e gjithandej, ne krejtësisht të mund ta bëjë këtë shumë. Mos harroni në pset6, ju ndoshta kishte një listë e lidhur e mundshëm char apo vetëm vargjeve char statike. Le të shikojmë këtu në një operacion. Pra, ne duam të futur një të ri n në listën tonë të lidhura. Ne fillim me një tregues kokë që është një tregues për këtë nyje që ka vlera të N dhe një tjetër e një tregues që pikë në këtë nyje është një vlerë e n dhe një tjetër i null, sepse kjo është nyja e fundit. Pra, në interes të kohës, unë do vënë të gjithë kodin në ekran. Dhe ne do të ecim nëpër të disa rreshta në një kohë. Kështu që këtu është kodi. Unë shpresoj se është i lexueshëm. Gjëja e parë që ne bëjmë është ne malloc një nyje të re. Pra, kjo e bën një tregues për një nyje të re që nuk mjaft të ketë asgjë të vendosur deri në atë ende. Ne kontrolloni për të siguruar që nyja e re nuk është null. Përndryshe, ne duhet të heqin dorë. Pra, duke kontrolluar se, ne tani vendosur vlerat në nyje. Pra, ne kemi vënë n e ri në fushën tonë n. Dhe ne kemi vendosur kursorin tjetër për pikë për të kreu origjinal, në mënyrë që ne mund të tani e kanë futur këtë Nyja në listën tonë. Së fundi, ne kemi pikë qendrore globale në nyje tonë të ri, kështu që nëse do të të fillojë në krye, ne do të jemi në këtë nyja e re në vend të parë nyja e vjetër parë. Dhe kur ky funksion daljet, nyje e ndryshueshme e re nuk ekziston më, sepse ajo ishte e lokale në funksion. Pra, kjo është gjendja e botës. Kreu ynë global tregon tonë të ri nyjen e parë, e cila tregon për tonë nyje origjinal parë, e cila pikë në nyjen pas kësaj. Kjo ishte futje. Shpresoj që ishte relativisht i i hapur për të ndjekur. Kur në dyshim, të nxjerrë një foto. Kështu që unë të gjeni se duke folur për Listat e lidhura dhe duke kërkuar në Kodi është shumë e nuk e dobishme. Ndërsa duke kërkuar në një foto të një të lidhura Lista e lejon mua për të menduar, oh, kështu që Unë kam këtë nyje këtu. Por në qoftë se unë të rinovuar atë treguesin, ajo përfundon të shkëputur. Dhe unë e kam harruar ku nyje shkon. Dhe kodi daljet. Dhe ju keni nyje të shumta që janë shkyçur. Dhe ju nuk do të përfundojnë me lista që ju dëshironi. Pra, nëse ju nxjerrë foto dhe të bëjë atë hap pas hapi, shpresojmë se, ju do të shihni mënyrë korrekte e gjërave në aspektin e përditësimin e pointers për të siguruar se lista vjen së bashku. Fut është relativisht i drejtpërdrejtë. Një e më e komplikuar do të ishte e futje në një listë të renditura. Një funksion më e komplikuar është fshirë dhe për të gjetur, kështu që duke kërkuar nëpërmjet një listë të të shohim nëse diçka është atje. Ndoshta ju e bëri këtë në pset6 kur ju mori në tryezën tuaj të hash dhe ju tha, mirë, është fjala molla në listën time e lidhur? Kështu që ju mund të keni bërë tashmë këtë. Por definitivisht, rifreskoni kujtesën tuaj dhe të përpiqen për të reimplement gjeni dhe reimplement fshini për listën e lidhur. Fun shënim anë, ka edhe dyfish i lidhur listat, ku ju duhet pointers që tregojnë të dy përpara dhe prapambetur, në mënyrë që ju mund të shkoni në nyje të ardhshëm dhe për nyjen e mëparshëm. Dhe aty ishte një pyetje në vitin e kaluar quiz e atij lloji, duke folur në lidhje me listat e dyfish-lidhura. Tani, kjo është një strukturë që ju jeni relativisht të njohur me të, sepse më nga ju ndoshta përdorur ato në pset6. Ja një që është pak më pak të njohur. Si një shënim anë, unë mendoj se është e Quiz 1 kryesisht më e vështirë se Quiz 0, sepse gjëra që ju jeni duke bërë, ju nuk kanë bërë sa më shumë. Për të vënë atë një mënyrë tjetër, për Quiz 0, ju kishte shkruar shumë C. Dhe ne ju pyetur për C. Për Quiz 1, ne do të ju pyes për PHP dhe JavaScript, të cilat ju nuk kam shkruar sa më shumë të. Ne jemi duke shkuar për të ju pyes për C-kodin që ju nuk e keni shkruar sa më shumë e, kjo stuff i avancuar C. Pra, definitivisht, praktikë sende e ne biseduar rreth në ligjëratë që ju jo domosdoshmërisht të bëjë mbi problemin vendosur. Duke folur nga të cilat, nuk e keni shkruar një pirg në një problem të vendosur. Por kjo ishte në leksion. Ja foto-nivelit të lartë të shumë paratë që ne të tregojmë çdo vit. Është turrë tabaka në Mather sallë ngrënie. Në një nivel të lartë, paratë janë një e kaluar në, së pari jashtë strukturën e të dhënave. Kjo do të thotë që ju jeni do për të vënë gjërat në - 1, 3, 7, 12, 14, negative 0. Një gjë që unë nuk mund të ketë tha - negative 3, 0. Ju vënë të gjitha këto gjëra in Dhe e fundit që ju vënë në të është e para ai që do të dalë. Pra, ju keni dy operacione - shtytje dhe pop. Të gjitha të vënë në se jam e gjeste si kjo janë shtytje. Dhe atëherë kur unë arrijë në të rrëmbyer diçka apo të arrijnë në krye të rrëmbyer diçka, kjo është pop. Pra, ne jemi duke shkuar për të zbatuar oxhaqet. Dhe kemi treguar ato në leksion duke përdorur vargjeve. Por ju mund të bëni ato përdorimin e listave të lidhura. Një rafte është një dhënave konceptuale Struktura, jo si një një zbatimi specifike. Pra, çfarë do që të duken si? Ajo do të duket lloj i si kjo. Ju do të keni një madhësi numër i plotë. Dhe ju do të keni një rrjet të vlerave që ne jemi duke e quajtur tabaka, sepse kjo është ajo foto ishte për us - int tabaka - dhe pastaj disa kapaciteti maksimal. Pra, çfarë do të shtyjë duken si? E pra, në qoftë se ne kemi një rafte s, pastaj të shtyjë diçka mbi s, ne do të merrni madhësia e s. Dhe kjo do të jetë e ardhshme vend i hapur e array tonë. Pra, nëse ne kemi tre gjëra në rafte tonë, atëherë tabaka 3 do të jetë e ardhshme vend të hapur, për shkak 0, 1, dhe 2 janë të mbushura tashmë. Pra, ne kemi vënë vlerën në s.trays [s.size], vend i tretë. Dhe pastaj ne rritje s.size për të thënë, hej, kemi pasur tri gjëra më parë. Tani, ne kemi katër. Kështu që herën tjetër që ju të shtyjë, ju jeni do të vënë diçka në 4. Ose herën tjetër që ju pop, ju do të jeni për të parë në 3 në vend të 4 apo çfarëdo. Dhe pastaj ne do të kthehen e vërtetë të të themi, hej, ne kemi pasur sukses. Kjo ka punuar. Si rregull e pranoj, nëse një funksion që është duhet të kthehen vërtetë apo false gjithmonë kthehet e vërtetë, ju mund të kanë bërë diçka të gabuar. Pra, e bën këtë punë? Well, it works fine për 1, dhe 2 dhe 3, dhe 4, dhe pesë. Por le të thonë se unë të arrijë kapacitetin tim. Unë pastaj e kam drejtuar në një problem, sepse nëse madhësia është i njëjtë me kapacitet, unë jam i tani duke u përpjekur për të vënë diçka në një grup ku unë nuk kam hapësirë. Pra, një kontroll të shkurtër për të rregulluar këtë. Nëse s.size KAPACITETEVE ==, kthimit të rreme. Përndryshe, shkoni dhe të bëjë atë që ne e bëmë. Pra, çfarë tjetër mund të kërkojmë rreth për shumë paratë? Çfarë tjetër duhet të studioni? Çfarë tjetër duhet të praktikoni ju? E pra, zbatimin e pop. Ne tashmë e bëri shtytje. Unë do të rregullojmë se. Një zbatim jo-array, ku ju përdorni një listë e lidhur, ndoshta. Një zbatim jo-int. Ne e bëmë ints këtu. Por kjo mund të ketë qenë gjithandej. Unë mund të ketë qenë vargjet. Ajo mund të ketë qenë yje char. Shikoni kuize e fundit për llojet e pyetje ne kemi kërkuar për kollonat. Unë do të them se ne të mbuluar shumë paratë rreth të njëjtën gjë si ne kemi mbuluar ato në vitet e fundit. Pra pyetjet quiz duhet të jetë një tregues i mirë. Duke shkuar përpara edhe më shpejt, rradhët. Ata janë si oxhaqet. Por ata janë parë në, e parë jashtë. Nëse ju jeni britanik, radhë fjala ndoshta bëri shumë kuptim për ju. Përndryshe, ju mund të keni dëgjuar për atë si një linjë. Ata punojnë si linjë në dyqan Apple. Personi i parë për të treguar deri në 3:00 në mëngjes është e para personi për të blerë iPad e tij. Pra, ne kemi dy operacione - enqueue dhe dequeue. Enqueue vë dikë në linjë. Dequeue tërheq parë Personi nga vija. Përsëri, ne mund të zbatojë kjo me një grup. Pra, çfarë është struct ne tregoi në leksion? Ishte kjo. Përsëri, numra. Përsëri, madhësia dhe kjo gjë front të ri. Pse ka diçka që quhet front? Kjo është indeksi i ardhshëm element të dequeue. Është vetëm brenda vendit mbajtja e djalë i parë që shfaqen, në mënyrë që të mund ta tërheqë atë kur ne kemi nevojë për të. Definitely shikoni në shënimet leksion dhe të përpiqen për të zbatuar enqueue dhe dequeue kur duke studiuar për quiz. Gjëra të rëndësishme për të menduar. Duke përfunduar rreth nëse para plus Madhësia e përfundon më e madhe se kapaciteti. Përsëri, në qoftë se struktura juaj është e plotë, ju jeni do të ketë një problem. Hash tabelave që ju keni parë më parë. Shumica nga ju ndoshta zbatuar këto në pset6. Kjo është një strukturë që synon për O (1) futje koha konstante dhe O (1) Lookup kohë konstante. Në CS50, ne kemi zbatuar këtë si një grup i listave të lidhura. Element kryesor në një tryezë të hash është funksion hash. Pra, ajo konverton kontributin tuaj, le të themi, një fjalë fjalor, në një numër, e cila do të jetë indeksi tonë. Dhe ne do të përdorim këtë indeks në grup tonë. Kështu që këtu është një foto cute pak nga study.50.net. Ne të hedhin të gjitha fjalët në funksion ynë hash. Dhe funksion hash na thotë ku për të vënë këto fjalë. Kjo është e gjitha të madhe në vendin ku ka vetëm një fjalë për çdo vend i caktuar. Por si ju mbani mend nga pset6, ka më shumë fjalë se lojëra elektronike. Pra, çfarë ndodh kur ju të marrë një përplasje? Në vend të magazinimin një vlerë në, le të themi, tavolinë hash 3, ju ruajtur një listë e lidhur. Dhe kështu në vend që pjepër këtu, ju do të keni një listë e lidhur, ku nyja e parë është pjepër. Dhe nyja tjetër është cat. Dhe nyja e tretë është përplasja, le të them, sepse të gjitha këto fjalë të filluar me C. Pra, shumica prej jush e bëri këtë për pset6. Nëse ju nuk e ka bërë një tabelë hash për pset6 dhe ju tentuar diçka si një Trie, patjetër të shqyrtuar tabelat hash. Nëse ju e ka bërë atë në pset6, patjetër shqyrtuar tabelat hash. Dhe në qoftë se ju e bëri atë në pset6 dhe ajo nuk e bëri punojnë jashtë shumë e drejtë dhe t'ju kishte shumë probleme me të, patjetër shqyrtuar tabelat hash. Pra, mësimi i vërtetë është padyshim shqyrtuar tabelat hash. Pakica më e madhe e ju u përpoq jashtë përpiqet për pset6. Foto të nivelit të lartë. Është diçka si kjo, ku çdo nyja ka një grup të fëmijëve, ku secili Fëmija i korrespondon një letër. Dhe çdo nyje të thotë, hej, unë jam një fjalë. Pra, në këtë rast, fjala Maxwell, në qoftë se ju ndiqni M në A në X-W-E-L-L dhe pastaj ndiqni atë një më shumë. Dhe ju të merrni këtë simbol, Delta, i cili kemi ditur të thotë kjo është një fjalë. Pra, Maxwell është një fjalë. Këto Deltat janë të gjithë duke nënkuptuar të cilat gjëra janë fjalët dhe të cilat gjërat nuk janë. Pra në pset6, të dhënat që ruhen së bashku me ndonjë nga nyjet tona ishte "Unë jam një Fjala. "Dhe gjëja e ftohtë në lidhje përpiqet po ata demonstrojnë futje dhe lookup në O (gjatësi e një fjalë). Pra, vetëm për të marrë me Maxwell, është e M-A-X-W-E-L-L. Pra, shtatë apo tetë - Unë nuk mund të llogarisë - hapa për të marrë deri në fund dhe shikoni gjëra jashtë. Zbatimi në mënyrë të shpejtë këtu. Rob shkuan përmes një i lidhur lista në postmortem tij. Pra shikoni se nga. Më vjen keq. Shkoi nëpër një Trie në postmortem tij. Pra shikoni se nga. Por ju në thelb kanë secila nyjë ka 27 pointers në nyjet e ardhshme dhe një Boolean jam unë një fjalë. Kontrolloni postmortem e Rob-së për mënyrën se si kjo në fakt është zbatuar. Struktura jonë final, pemët tona dhe pemë binare e kërkimit. Pra, duke kërkuar në këto, këto ishin të mbuluara më së fundi Java 8, të hënën. Një pemë është e ngjashme me një Trie, përveç teje jo domosdoshmërisht kemi 27 nyje në çdo pikë. Dhe ju nuk keni këto të dhëna në çdo hap që nënkupton se - rruga nuk ka rëndësi. Ndërsa një Trie, rruga nga lart fund, Maxwell, ishte e rëndësishme për ne. Por çdo nyjë ka të shumta Fëmijët, ndoshta. Ne kemi disa fjalorin më shumë. Rrënja e pemës është në krye. Dhe ne themi se shumë më i fundit Nyjet që kanë asnjë Fëmijët janë të lë. Pra, si një Trie, një pemë është një strukturë e nyjeve. Një lloj i zakonshëm i pemës që ne jemi duke shkuar për të folur për një pemë binare, ku çdo nyje nuk ka fëmijë apo një fëmijë ose dy fëmijë. Pra, kjo foto këtu nuk është një pemë binare, sepse nyja 3 ka tre fëmijë. Por në qoftë se ne do të injorojë ato, pjesën tjetër e ajo është një pemë binare, sepse atë tregon pasurinë që çdo nyje ka zero, një, ose dy fëmijë. Pra, si mund ta shprehim këtë në kodin? Ne mund të kemi një nyje ku çdo nyje ka një numër i plotë në brendësi të tij, si dhe si një tregues për pemë në të majtë dhe një tregues për pemë në e drejtë, kështu që të dy fëmijët. Si është kjo e dobishme? E pra, në qoftë se ne bëjmë rregulla rreth ku ne vënë nyje, ne mund të bëjë kërkim më të shpejtë. Pra, ka një koncept i një kërkimi binar pemë, ku të gjitha nyjet në la subtree kanë një vlerë më të vogël se nyjen ne jemi duke kërkuar në. Dhe të gjitha nyjet në subtree e duhur kanë një vlerë më të madhe se nyjen rrënjë. Tani, që duket si një shumë e fjalëve. Unë do të vënë atë në brendësi të dyfishtë kuotat dhe t'ju tregojë një foto. Kështu që këtu është një shembull i një pemë kërko binar. Shih se ne fillim me 10. Çdo gjë të majtë 10 është më e vogël se sa ajo. Dhe çdo gjë në të djathtë është më e madhe se ajo. Por më shumë se kaq, çdo nyje në pema e shpreh këtë pronë. Pra nyja 7 ka një 3 të la dhe një 9 në të djathtë. Pra, të gjithë ata janë më të vogla se 10. Por duke kërkuar në vetëm ata, 7 ka 3 të saj të majtë dhe 9 për të drejtën e saj. Dhe në mënyrë të ngjashme nga e djathta dhe 15 ka 14 të saj të majtë dhe 50 për të drejtën e saj. Pra, të tre nyjet mbi atje, 15, 14, dhe 50, janë edhe një pemë të vlefshme binar apo një pemë të vlefshme kërko binar. Dhe ata janë të gjitha më e madhe se 10. Pra, ata janë të lejuar të jenë të më të drejtë atje. A ka ndonjë pyetje? Audienca: Si mund të merren kur ju keni dy merr shtatë çifte? R.J. AQUINO: Po. Si mund të merren me të dy vlerave që janë të njëjta? Disa pemë binare e kërkimit të thotë se ju injorojnë kopje identike, sepse qëllimi është vetëm për të thënë, unë kam parë këto gjëra deri tani. Disa pemë binare e kërkimit që ju mund të thoni kanë një akuzë brenda të nyjeve. Të tjerët mund të thonë se çdo gjë që të majta është më pak se ose e barabartë me. Dhe çdo gjë në të djathtë është më e madhe se. Kjo varet vetëm nga ajo që Problemi është që ju jeni zgjidhjen. Pra, në një fjalor, për shembull, ju nuk do të kujdesen për kopje identike. Ju do t'i hedhin jashtë. Por disa probleme të tjera që ju mund të kujdeseni. Audienca: A është e mundur që të ketë a 1 majtas 15, e cila është më pak se 10? R.J. AQUINO: Jo. Nëse 14 here ishin një 1, kjo do të jo të jetë një pemë e vlefshme kërko binar, sepse çdo gjë në të djathtë të 10 duhet të jetë më e madhe se ajo. Dhe ne do të shohim se pse. Në qoftë se në vendin e kërkimit qëllimi im është për të gjetur 14, unë të fillojë në rrënjë. Kështu që unë shoh. OK. Ne jemi duke shkuar për të filluar në rrënjë. Shikoni 10. E pra, 14, objektivi ynë, është më e madhe se 10. Kështu që ajo duhet të jetë në të djathtë. Kjo është shumë e ngjashme me të gjithë telefon Gjëja libër ne e bëmë, binare kërkoni atje. Por në vend të kërkimit binar në një grup, ne jemi binar kërkim në këtë pemë. Pra, ne jemi ende në kërkim të 14. E pra, 14 është më i vogël se 15. Pra, në qoftë se është në pemën tonë, ajo duhet të jetë në këtë fushë këtu. Ajo duhet të jetë në të djathtë të 10 dhe majtas 15. Dhe kështu që ne të kontrolluar këtë nyje. Dhe yay, ne kemi gjetur 14. Unë nuk jam do të ecin nëpër atë. Por këtu është kodi. Kjo është në fakt relativisht drejtpërdrejtë, sepse kjo është recursive. Çfarë mund ne të ju kërkoni të bëni në një quiz? Ne mund të ju pyes për të shkruar këtë kod. Ne mund t'ju kërkojë të shikoni në këtë kod dhe të modifikojë këtë kod dhe të shpjegojë se çfarë ai e bën. Po. Pyetje? Audienca: A janë këto slides do të jetë vënë në dispozicion si ata ishin për herë të fundit? R.J. AQUINO: Po. Pra, këto slides patjetër do të të postuar. Audienca: Ata në të vërtetë janë të postuar tani në faqen e internetit. Davidi vetëm e bëri atë. R.J. AQUINO: Slides janë tani në faqen e internetit. Unë ndoshta do të rregulloj disa e kam vërejtur gabime shkrimi dhe rregullimin e tyre. Por ka një aktuale Versioni në vend. Të tjerët gjëra që ne mund t'ju kërkojë për të bërë - shkruani insert. Shkruani një version përsëritës të funksion recursive ne vetëm ju tregoi ose flasin për këto gjëra, si në paragrafët, me fjalë, në fjali. Duke krahasuar herë të kandidojë dhe të shpjeguar atë që ju do të dëshironi të përdorni një binar kërkoni për pemë në vend të një hash tavolinë, për shembull. Pra, të kuptojnë këto struktura në një nivel mjaft të thellë. Kuptojnë se si të shkruajnë ato, si për të përdorimin e tyre, si për të folur për to. Dhe ju do të vendosen të gjitha. Pyetje? Audienca: Kur ju jeni me shkrim pemë binare kërko, se si ju të përcaktuar se çfarë vlerë për të bëjë atë si rrënjë? R.J. AQUINO: Pra, pyetja është, ajo që Vlera do të bëni si rrënjë? Në varësi të kodit tuaj, ju mund të ketë një rrënjë globale. Kështu që ju mund të ketë të ngjarë kishte në pset6 një tryezë globale hash. Ose ju mund të kalojë rrënjë në si argument. Pra, ky funksion kërkim këtu merr një argument një nyje *. Dhe kështu çdo gjë nyje ju ndodh që të jetë duke kërkuar në është një që ju jeni duke e trajtuar si rrënjë tuaj, kur ju të kalojë atë in Dhe unë jam i vendosur të gjitha. Ata janë slides e mia. Personi tjetër mund të vijë shkëmbim në një kompjuter portativ dhe mic. Rob Bowden: Unë mendoj se unë mund të ketë interpretuar këtë pyetje të ndryshme. Por unë interpretuar atë si, në qoftë se ju keni numrat 1, 2, dhe 3, si nuk kemi dini për të bërë 2 rrënjë krahasim me 1 ose 3? Nëse bëjmë 2 rrënjë, atëherë është e bukur 1 dhe 3 të majtë dhe të djathtë. Por në qoftë se 1 është rrënja, atëherë është 1 për të top, 2 e drejta, 3 në të djathtë. Pra nga default, ju nuk e dini çfarë për të bërë rrënjë. Dhe për çdo algorithm ne jemi duke pritur për të ju jap, vetëm Gjëja e parë që insert do të jetë rrënja. Ose ne do të ju jap një pemë binare që tashmë ekziston që ka një rrënjë. Por algoritme të tjera ekziston tillë që rrënjë do të rinovuar, kështu që nëse ju përfundojnë në situatë ku është 1, 2, 3, kjo automatikisht do update to bëjnë 2 rrënjë të re, në mënyrë që është ende i balancuar bukur. Angela LI: Cool. Hey, djema. Unë jam Angela. Dhe unë jam duke shkuar për të përfunduar jashtë C tonë dhe pastaj të shkoni në disa nga web tonë teknologjive - HTTP, HTML, dhe CSS. Pra, gjëja e parë është tampon Sulmet del nga shtrati. Pra, le të marrin një vështrim në këtë kod. Është shumë e thjeshtë. Ka një foo funksion. Dhe kjo nuk ka kthim asgjë. Por, ajo merr në një tregues në një varg të quajtur bar. Dhe ajo do të deklarojnë këtë buffer, e cila eshte nje karakter array që ka 12 lojëra elektronike. Dhe ai përdor memcpy, e cila është vetëm një funksion që kopje nga një adresë në një tjetër. Pra, kjo është duke u përpjekur të kopje në tampon tonë nga çdo gjë bar është duke treguar për të. Pra, çdo ide çfarë është e gabuar me këtë kod? AUDIENCA: Nëse bar është më e gjatë se C, ata do të prishësh. Angela LI: Po, pikërisht. Ne nuk kemi garanci se bar do të jetë më pak se 12. Ne vetëm bërë disa numër arbitrar 12. Dhe ne kemi qenë si, le të shpresojmë se input ynë përdoruesi është më pak se 12 karaktere të gjatë. Kështu në një botë ideale, në qoftë se input tonë është gjithmonë siç pritet, atëherë ne do të merrni diçka si, përshëndetje. Kjo është më pak se 12 karaktere. Ajo merr të lexoni në char c. Dhe atëherë ne të bëjmë diçka me të. Kjo nuk ka rëndësi. Por një person me qëllim të keq mund të bëjë diçka më shumë si kjo, ku ata na japin çdo gjë që bar është duke treguar për të, ajo do të tregojnë për këtë grup të madh i vetëm A-së. Dhe kjo është mënyra më e gjatë se 12. Pra, kjo do të shkojnë të gjithë rrugën poshtë këtu për ku kthimi Adresa përdoret për të. Pra, le të themi këtë funksion quhet foo. Ndoshta foo u quajt nga disa të tjera funksion, e cila u quajt nga kryesore. Pra, kur foo është i rrjedhshëm, ajo ka nevojë për të dinë se ku të kthehen në. Nëse foo u thirr nga një funksion të quajtur baz, ajo duhet të dini se është e marrë për të shkuar mbrapa në Baz. Dhe kjo është ajo që kjo adresë e kthimit poshtë këtu është duke na thënë. Por në qoftë se ne të prishësh atë me disa të tjera adresën, në këtë rast, kjo është një përfaqësimin e adresën në fillimi i këtij tampon, atëherë atë që në të vërtetë do të ndodhë është se në vend që të kthehen përsëri në Baz, e cila quhet funksionin tonë, është vetëm do të shkojnë për të para të këtij kodi. Dhe në qoftë se kjo ishte atje për shkak se një tip me qëllim të keq hacker erdhi dhe injektuar këtë, atëherë ndoshta kjo shumë i A-së nuk është në të vërtetë një të. Dhe kjo është në fakt vetëm kodin që prishet kompjuteri juaj ose diçka. Pra, të jenë mbrojtës në lidhje me këtë lloj të gjë, ju duhet të supozojmë se kurrë input përdorues është një i caktuar Shuma e karaktereve. Për shembull, kur ju jeni duke bërë speller, ju u tha se fjalët ishin vetëm do të jetë 40 karaktere maksimale të gjatë. Dhe kjo ishte e mirë. Por në qoftë se jo, atëherë ju do të duhet të të sigurt për të lexuar vetëm në 45 karaktere në një kohë. Përndryshe, ju mund të prishësh tampon tuaj. Çdo pyetje mbi këtë. Po. Audienca: vetëm A mund të flisni pak më shumë për këto? Angela LI: Na vjen keq. Po. Audienca: mic është vetëm për video. Unë do të përpiqet dhe të projektit. Hi, djema. Sup? Pra, le të shkojë mbi disa gjëra në Biblioteka CS50, të cilat ju keni qenë duke përdorur të gjithë semestër, kryesisht për të marrë të dhëna përdoruesi. Siç e dini, ju përfshijnë CS50 Biblioteka duke bërë vetëm CS50.h, e cila përmban të gjitha prototipa e funksionet që ju mund të përdorni, si GetString dhe GetInt, dhe GetFloat, e të tjera. Dhe nuk ka kjo linjë e në CS50 Biblioteka e cila përcakton një varg, të cilat ju djema të gjithë e dimë deri tani është vetëm një char *. Por le të marrë një vështrim në se si punon getString. Ky është një version shumë të shkurtuar. Ju mund të tërheqë deri dosjet e bibliotekës CS50 nga, unë mendoj, manuals.CS50.net. Dhe ju mund të lexoni funksioni aktual. Por kjo mbulon disa nga pjesë të rëndësishme. Pra, ne kemi krijuar një mbrojtje të me disa kapaciteteve. Dhe ajo që ne bëjmë është të kemi një karakter në një kohë nga N standarde. Kjo është ku inputet e përdoruesit Teksti në tastierë. Dhe kështu që ne jemi duke shkuar për të lexuar në një karakter aq kohë sa ajo nuk është një e re line dhe kjo nuk është në fund të skedarit, e cila është fundi i të standard input. Dhe për çdo karakter që lexojmë në, në qoftë se karakteri përfundon duke shtuar me numrin e karaktereve ne kemi lexuar në dhe që është më shumë se kapacitetit tonë atëherë ajo që ne bëjmë është që sapo të ndrysho tonë buffer kështu që është dy herë kohë. Pra, përsëri, kjo mbrojtur nga tampon sulmet e del nga shtrati, për shkak se ju lexoni në nje karakter në një kohë. Dhe në qoftë se në çdo moment që ju lexoni në shumë shumë, ju vetëm të zgjeruar tampon tuaj. Ju shumohen atë me dy. Dhe atëherë ju keni më shumë hapësirë. Përndryshe, ju vetëm të shtoni një karakter për të tampon. Dhe pasi ju keni lexuar në të gjitha karaktere, ajo do të tkurret me tampon përsëri poshtë për të madhësisë normale, shtoni një Terminator null, dhe pastaj të kthehen. Tani, le të shohim në GetInt. A mund të ju djema lexoni këtë? Unë mund të zoom në një grimë. Unë nuk e di se si punojnë kompjuterat. S'ka gjë Unë nuk mund të zoom në siç duhet. Kjo është me të vërtetë e vështirë. Më vjen keq. Le të shikojmë në këtë. Pra, çfarë GetInt nuk është ajo së pari lexon në një varg prej getString, e cila ne kemi zbatuar më parë. Dhe pjesa më e rëndësishme të theksohet këtu është nëse ky ndarjen se ai përfundon deri Leximi është si jo në fakt një varg, atëherë ne vetëm të kthehen INT_MAX të përfaqësojnë dështim. Pse të kthehemi INT_MAX vend të negativ 1 ose 1? Ndonjë ide? Audienca: [padëgjueshme] negative në një 1. Angela LI: Po, pikërisht. Pra, ju jeni mënyrë shumë të ngjarë të duan vetëm në input 1 ose negativ kur e bëri 1 për një NTH dhe çfarëdo maxes n. Është i madh. Ju jeni ndoshta nuk do të përdorin atë. Pra, kjo është si një vendim të projektimit për të sigurohuni që ju nuk e bëni aksidentalisht kthyer një gabim ose ju nuk kthehen 1, e cila mund të analizohet si një përgjigje të saktë. Pra, në qoftë se një linjë e nuk ekziston, të kthehemi INT-MAX. Përndryshe, ne përdorim sscanf, e cila është si scanf. Por ajo lexon nga një varg. Dhe ne kemi këtë formatuar varg i cili është i%% c. Dhe ne të përpiqemi dhe ndeshje që me çdo gjë që përdoruesit na dha. Ne duam numrin e gjërave të krahasohen të jetë 1, që do të thotë se ne vetëm me të vërtetë duan që të shkojë me një numër të plotë rrethuar nga ndoshta e bardhë hapësirë, ndoshta jo. Në këtë rast, në qoftë se keni vënë në diçka si bar, bar nuk përputhet fare, sepse nuk duhet të jetë një numër i plotë në fillim. Kështu që kurrë nuk u kthye sscan 0. Pra, ju nuk kthehen se. Përndryshe, në qoftë se keni vënë në diçka si 1, 2, 3, A, B, C, që përputhje e si numër i plotë, por edhe karakteri pas saj. Pra sscanf do të kthehet 2, e cila gjithashtu nuk është ideale. Ju nuk duan 1, 2, 3, Një, B, C të jetë një int vlefshme. Kështu që edhe nuk punon. Por thonë se të vendosni në diçka si 50. Kjo do të përputhen% i, që do të thotë ajo do të merrni të lexoni në n. Dhe tani, n do të përmbajë numrin 50. Dhe pastaj ju mund të kthejë atë. Përndryshe, ju goditi rigjykuar. Dhe atëherë ajo vetëm shkon nga e para deri në ju merrni një kontribut të duhur nga ana e përdoruesit. Çdo pyetje mbi këtë? Audienca: Pra, nëse ju do të shtypura nga vlera e GetInt më [e padëgjueshme] ajo do të jetë vetëm numër i plotë dhe max? Angela LI: Po. Pra, nëse ju përdorni GetInt, ju duhet të marrë se ju nuk doni max n-të të jetë një input i vlefshëm, sepse ju do të jeni të supozohet se se ishte e keqe. Audienca: Në qoftë se ne nuk e kemi char c dhe dikush të vënë në 1, 2, 3, Sam, do ajo ende punë për 1, 2, 3? Angela LI: Unë mendoj se do të punojë. Por ju nuk doni të 123Sam të jetë një input i vlefshëm nga një përdorues. Kjo nuk është me të vërtetë një int. Pra, kjo nuk duket e drejtë të kuptoj atë si një int. OK. Në këtë rast, le të lëvizë në internet. Pra HTTP nuk është gjuhë. HTTP është vetëm tërësia e standardeve për si ju të dërgoni gjëra nga klientët, që është, për të servers. Kjo është njerëz të tjerë në internet. Pra HTTP qëndron për HyperText Transferimi Protocol. Kjo është zemra dhe shpirti e të gjithë web. Pjesa HyperText vetëm referohet HTML. Transferimi është i klientëve si ju do të dërgoni kërkesat për servers, që i japin përgjigje. Dhe protokolli është vetëm, si do ju presin një server të sillen? Dhe si po ju duhet të sillen të tilla që ju mund të modernizojë këtë Procesi i komunikimit? Pra HTTP kërkesa duket shumë si kjo. GET është lloji i kërkesës. Ju djema keni parë GET requests dhe kërkesave PAS. Gjëja e dytë që ka, / mua, kjo është vetëm URI ose URL e ku ju duan të shkojnë në kuadër të ushtrisë. Pra, kjo kërkesë është duke i kërkuar për faqe, si www.facebook.com / mua. Dhe kjo është një kërkesë GET. Dhe pastaj kjo HTTP/1.1, kjo është vetëm version i HTTP ju jeni duke përdorur. Është pothuajse gjithmonë 1.1. Dhe pastaj nuk ka një bandë e sende të tjera shumë. Ju në fakt mund të shihni këto nëse ju hapur deri tuaj konsol, kur ju jeni shfletimin web. Përgjigjet dukej diçka më shumë si kjo. Pjesa e lartë është, përsëri, Lloji i HTTP ju jeni duke përdorur ndjekur nga një kod të statusit. Pra, 200 OK është çdo gjë ka punuar jashtë. Këtu është përmbajtja juaj. Përmbajtja juaj do të ndjekë. Dhe atëherë ajo do të ju tregojnë se çfarë lloj e përmbajtjes dhe sende të tjera shumë. Kodet e statusit, ka disa ato të rëndësishme që ju duhet të dini. 200 OK është si çdo gjë e artë. Çdo gjë punon. 403 Forbidden. Kjo ju ndoshta keni parë nëse keni harruar të chmod diçka si duhet. Kjo do të thotë se ju nuk keni të drejtat e duhura për të qasje që në server. Është si, jo, ju nuk mund të shohin atë. 404 do të thotë se gjëja nuk ekziston. Nuk është gjetur. Ju ndoshta keni parë këtë shumë. 500 Gabim Serveri i brendshëm është zakonisht si diçka shkoi keq në anën e e serverit. Pra, kur ju u zbatimin pset7, në qoftë se keni pasur gabime PHP, ju mund të në të vërtetë të shkoni në faqen e parë një tërë bandë e PHP gabim gjëra. Por kjo nuk do të ndodhë normalisht, sepse faqet e internetit të vërtetë nuk duan të t'ju them se pse faqja e tyre është prishur. Ata ndoshta do të kthehen vetëm një 500 Gabim i brendshëm Server. Dhe pastaj nuk ka 418 Unë jam një ibrik çaji. Nuk është një histori e tërë në lidhje me pse kjo është një gjë. Por ju mund të lexoni për atë në kohën tuaj. Ka një bandë e tërë e kodet e tjera Statusi shumë. Por këto janë ato ju duhet të dini. Pra, le të flasim për HTML. HTML, mos harroni, nuk është një gjuhë programimi. Kjo është një gjuhë markup. Kjo do të thotë ai përshkruan përmbajtjen. Kjo ju tregon se çfarë një dokument HTML duket si apo jo ajo që duket si por se si është strukturuar. Pra, kjo përcakton një strukturë dhe semantikë e faqeve web. Është si, kjo është një paragraf. Kjo është lista e renditur. Kjo është si një seksion i faqes sime. Ja titulli. Ai e bën gjëra si kjo. Ajo nuk ka stilin e ndonjë që, për shkak se kjo është ajo që ju bëni në CSS. Dhe kjo duket si një seri tags i mbivendosur. Pra, për të përdorur një shembull të një të vërtetë themelore Faqe HTML, ju keni të DOCTYPE Deklarata deri atje. Kjo deklaratë DOCTYPE është duke thënë, ne jemi duke përdorur HTML5. Pastaj ju keni tag madh HTML. Ajo përmban një kokë dhe një trup. Brenda në kokë, ju keni titullin. Kjo është ajo që shkon në titull bar e shfletuesit tuaj. Ne kemi një tag lidhje që lidh në një fletë stil të jashtëm. Dhe pastaj ne kemi një skenar që tërheq nga një JavaScript të jashtëm si. Dhe pastaj brenda trupit tonë është në të vërtetë ajo merr tregohet në faqe. Ne kemi marrë një paragraf dhe më pas një image brenda atij paragrafi. Kjo është një foto e kittens. Vini re se imazhi tag mbyllet vetë. Pra, në vend të hapjes me një imazh dhe më pas duke bërë një tjetër / imazh, ju thjesht e kanë këtë plagë të vogël këtu, që mbyllet atë. Dhe tag imazhi ka gjithashtu këtë kyç atribut vlera quajtur alt. Kjo është teksti alternative që ndodh kur ju rri pezull mbi të. Shumica e elementeve HTML kanë ndonjë vlerë të rëndësishme gjëra që ju mund të japin atë, të ndryshme customization. Po. Audienca: [padëgjueshme]. Angela LI: E pra, kështu që është një atribut i tag. Pra, nëse ju jeni duke përdorur jQuery, ju mund të të bëjë zgjidhni image.getAttribute. Dhe pastaj ju mund të kërkoni për marrë atribut alt. Dhe ai do t'ju japë kittens. Nëse ju kujtohet format në HTML, të dhëna elemente do të ketë atributet për emrin. Dhe kjo është ajo që përdor PHP për të dërguar Kërkesat kur një formë është dorëzuar. Audienca: A e keni përmend diçka se si në qoftë se ju përdorni kittens.jpg ose diçka që ka me personat e zhdukur dorëzojë dosjet ose fotografi të tjera? Angela LI: Po. Pra, kjo është ajo që quhet një i afërm rrugë, sepse unë nuk jam duke i dhënë ju Pozicioni i plotë. Kjo është si kur në C në qoftë se ju bëni fopen disa fotografi, në qoftë se ju hi.txt fopen, që hi.txt pritet të jetë në të njëjtën directory, nëse nuk ju jepte një më shumë rrugë komplekse. Audienca: Pra, ju mund të specifikoni cilat dosje [padëgjueshme]? Angela LI: Po. Dhe ju mund të kërkoni si ta bëni këtë. Por, nëse kam kërkuar për të marrë kittens.jpg jashtë të directory prind, unë do të bëj .. / Kittens.jpg. Po. Më vjen keq. Po. Oh njeri, kam harruar pyetjen. Cila ishte pyetja? Oh, pyetja ishte është, kittens.jpg pritet të jetë në të njëjtën directory? Dhe në këtë rast, është. Por ju gjithashtu mund të jepte një rrugë të caktuar tillë që ajo nuk duhet të jetë. Mirë? CSS. Pra CSS, si HTML, nuk është një gjuhë programimi. CSS është vetëm një seri e rregullave styling. Ajo qëndron për Cascading Style Sheets. Dhe ju përdorni atë në lidhje me HTML për faqet stil. Pra, ka tre mënyra ju mund të përfshijë atë. Një mënyrë që ju mund ta bëjë këtë është në kokë pjesë e HTML tuaj, ju mund vetëm të hapur një tag stil dhe pastaj rrinë disa CSS rregullat në atje. Është shumë në rregull. Po. Audienca: A mund të vënë ato tags stil në mes, le të të themi, trupit dhe / trup. Dhe pastaj ju do të jetë styling vetëm në trup. Angela LI: Ju mund të. Ajo do të punojnë. Por ju nuk duhet, sepse stili është lloj i metadata që duhet të shkojnë në kreu i dokumentit tuaj. Trupi duhet të vërtetë vetëm të përmbajë atë që në të vërtetë do të shfaqen në faqen tuaj. Audienca: Pra, ju do të vënë stil në kokën tuaj të stilit tërë faqe web, apo jo? Angela LI: Po. Pra, duke stilin këtu, këto rregulla CSS do të zbatohet për të gjithë faqja e bazuar në Selectors tyre. Pra, mënyra më e mirë për të bërë atë është në vend të paturit e një tag stil në kokën tuaj, ju e keni këtë lidhje në një stil të jashtëm fletë si unë ju tregoi në shembull mëparshme. Çfarë kjo nuk është ajo përpiqet dhe gjen paraqesë style.css dhe pastaj tërheq atë në dhe përdor atë si stilet për faqe. Dhe style.css juaj do vetëm shikoni si kjo. Ajo do të jetë vetëm një bandë e CSS. Dhe së fundi, ka një mënyrë tjetër ju mund të përfshijë CSS, e cila ju me të vërtetë nuk duhet të bëjë kurrë. Është styling thirrje inline. Dhe kështu që çdo element HTML gjithashtu mund të të marrë një atribut stil. Dhe pastaj në atë atribut stil, ju mund të jepni rregullat CSS. Pra, në këtë rast, çdo gjë div unë jam përcaktimin e drejtë këtu, ajo do të kanë një sfond të zi dhe një tekst ngjyrë të bardhë. Por ju nuk duhet ta bëjë këtë, sepse ajo kjo nuk është ajo e vë styling tuaj brenda HTML tuaj. Dhe unë e di që ne kemi qenë duke folur për HTML është struktura dhe CSS është stil. Nëse ju bëni këtë, ajo mixes ato së bashku. Dhe kjo nuk është shumë i pastër. Pra, nuk e bëjmë këtë. Duke përdorur një shembull të CSS, deri atje, ne vetëm të zgjidhni trupin e HTML dokumentar. Dhe ne jeni si, çdo gjë është do të jetë Comic Sans. Unë gjithashtu nuk e rekomandojmë atë. Por ju mund ta bëjë këtë. Rregulli i dytë të drejtë këtu, ajo do për të zgjedhur elementin për Faqja me ID kryesore. Pra, çfarëdo HTML element, i thashë ID = Kryesor, unë jam duke shkuar për të dhënë se një Margin 20-pixel dhe të lidhur çdo gjë, gjitha tekst, te qendrës. Gjëja e fundit që përzgjedh nga klasa CSS. Pra, çdo element në faqe që unë i jepja një klasë seksion, unë jam duke shkuar për ta bërë atë një ngjyrë e sfondit të dritë blu. Yep. Kjo është e gjitha që kam marrë. Pyetje? Audienca: Çfarë do të hashtag para kryesore bëni? Angela LI: Pyetja është, çfarë bën hashtag para se të bëjë kryesor? Në këtë rast, hash në CSS do të thotë zgjidhni nga ID. Pra, nëse kam pasur disa element HTML, si divid = kryesore, kjo CSS rregull zgjedh gjë me ID kryesore. Dhe në mënyrë të ngjashme, periudha para seksioni është të zgjidhni nga klasa CSS ose zgjidhni nga klasa HTML. Audienca: Pse ka një ka para 6 në ngjyrën e sfondit? Angela LI: Po. Pra, pyetja është, pse nuk ka një hash para 6? Kjo është e ndryshme se sa atë hash. Kjo do të thotë se ju jeni duke i dhënë një ngjyrë heksadecimal. Pra ngjyra magji, kjo vetëm përfaqëson një ngjyrë. Dhe ju kujtohet treshe RGB kur keni kryer mjeko-ligjore e pset? Kjo është e ngjashme. Para dy shifrat përfaqësojnë se sa e kuqe është në ngjyrë. I dytë dy përfaqësojnë sa e gjelbër. Dhe e treta paraqet sa blu. Dhe hash është kjo do për të përfaqësuar një ngjyrë. Pra, çdo gjë nga 0, 0, 0, 0, 0, 0 deri në F, F, F, F, F, F eshte e vlefshme. Është një ngjyrë të vlefshme që mund të të shfaqet nga browseri juaj. Pyetje? Audienca: Çfarë është dallimi në mes të përdorur nga ID dhe nga klasa? Angela LI: Pyetja është se çfarë është diferenca midis përdorur nga ID dhe të klasës? Ju mund të ketë vetëm një element në një Dokumenti HTML që ka një ID të caktuar. Pra, vetëm një gjë në faqen time i lejohet të ketë ID Main. Kështu që ju përdorni atë për këtë është header. Kjo është navigacion. Ky është futboll. Klasët janë të ndryshme, sepse ju mund të aplikoni klasa për të sa më shumë elemente HTML si ju dëshironi. Kështu për shembull, unë e bëri pjesë të klasës, sepse nuk ka ndoshta më shumë se një seksion në faqen time. Ju jeni vetëm duke lejuar që të ketë sa më shumë elementet në faqe me të njëjtën klasë por vetëm një me një ID të caktuar. Audienca: Pra dot përfaqëson klasë? Angela LI: Po. Një dot përfaqëson një klasë. Ftohtë. Kjo është e gjitha unë kam marrë, djema. Falemnderit. [Duartrokitje] ZAMYLA Chan: Hi, të gjithë. Unë jam Zamyla. Unë jam duke shkuar për të mbuluar PHP, MVC, dhe SQL sot. Një shumë e materialit që unë do të jetë mbulimi do të jetë shumë e shumë të drejtë nga pset7. Dakord. Pra, çfarë është PHP? PHP qëndron për HyperText PHP Preprocessor. Kështu që, në vetvete, është një recursive emrin, i cili është shumë i ftohtë. PHP është një server-side gjuhë e shkruar, dhe kjo siguron backend dhe mbështetjet logjike e faqen tonë të internetit. Pra, Angela folur shumë në lidhje me HTML dhe CSS që do të bëjë strukturën e faqes së internetit. Por, çfarë nëse ju doni të ndryshoni se përmbajtje dinamike, ose në qoftë se ajo ndryshon bazuar në përdorues ose kushte të caktuara? Kjo është ku vjen in PHP Tani, në mënyrë tipike, PHP mund të marrë disa pak rreshta për të zbatuar të njëjtën gjë në C. Kjo për shkak PHP trajton kujtesën menaxhimit për programues, në krahasim me të na pasur nevojë të malloc lirë, gjëra të tilla si se. Por që PHP është një interpretues gjuhë, në mënyrë tipike, ai mund të kryej pak më ngadalë se C, e cila është një gjuhë hartuar. Sepse ne jemi duke lëvizur programimit gjuhë, le të shohim se si Sintaksa do të ndryshojnë. Le të jenë shumë të kujdesshëm për të mos merrni hutuar me këtë. Pra, me PHP sintaksë, nëse ju jeni embedding PHP tuaj brenda një HTML paraqesë ose brenda një skedar. php vetë, ju duhet të fus kodin në të hapur PHP dhe tags PHP mbyllura si poshtë, si në ekran. Variablat në PHP. Çdo ndryshore të vetme do të fillojë me shenja $ e ndjekur nga emri i variabël tuaj. Tani, variablat në PHP janë të shtypur lirshëm, që do të thotë se ju nuk keni nevojë për të treguar se çfarë lloji të dhënave është kur ju jeni duke deklaruar atë. Megjithatë, kjo nuk do të thotë se ata nuk kanë ndonjë lloje në të gjitha. Pra, nëse unë deklaroj një ndryshore dhe të vendosur vetëm është e barabartë me 1, dhe pastaj unë deklaroj një tjetër ndryshueshme, vendosur atë barabartë me "1" dhe pastaj një tjetër 1.0, mirë, në varësi të llojit të barazisë operatorët I use, në qoftë se unë dua të të krahasuar në të gjitha llojeve, pastaj ata do të jenë të barabartë. Por në qoftë se unë dua të bëni të sigurtë që Llojet janë të barabartë, PHP ende mund të bëjë se, edhe pse ne nuk i tregojnë çfarë lloji është kur ne së pari të bëjë file. Tani, në PHP, edhe pse ne jemi switching mbi të programimit gjuhë nga C, ne ende kemi tonë i sigurt nëse kusht, ashtu si kjo. Ne ende kemi sythe tona, ndërsa, vetëm si kjo, ku ju vënë në tuaj kusht dhe pastaj Trupi lakut. Dhe atëherë ne gjithashtu kemi tonë për lak, i cili zakonisht duket si ky. Pra, nëse kam kërkuar për të iterate mbi të gjitha nëntë psets dhe të paraqesë dhe të thërrasë një funksion submitPset, atëherë unë mund ta bëjë këtë këtu, të cilat ju djema kanë të gjitha bërë me këtë pikë. Urime, nga rruga. Për kamera, njerëzit tha, faleminderit. Tani, në qoftë se ju nuk dëshironi të përdorni vetëm këtë për lak, atëherë PHP në të vërtetë edhe ka gjëra të quajtur sythe foreach. Pra, nëse unë kam një rrjet të integers, 0 deri 8, ruhen në psets array, atëherë unë mund të ketë një lak foreach që iterates mbi çdo numër në psets. Dhe atëherë unë mund të telefononi të njëjtën gjë funksionojnë tetë herë, ashtu si kam bërë më parë. Pra, kjo për çdo lak është e bukur, sepse ju nuk keni për të në qoftë se ju nuk e dini Gjatësia e saktë e vektorit që ju kanë, pastaj duke përdorur këtë lak foreach do të kujdeset për atë për ju. Kështu që unë bëra psets si një grup. Le të shikojmë në këtë. Vargjeve në PHP janë zakonisht të njëjta si ato që ne kemi pasur në C, ku ju mund të deklarojë një rrjet. Dhe këtu, unë mund të deklaroj një rrjet bosh dhe pastaj të ndërtuar në mënyrë dinamike duke përdorur Indekset si numrat e plotë. Pra indeksit 0, unë jam duke shkuar për të ruajtur nje integer quajtur 1. Në indeksin 1 të listës sime, unë jam duke shkuar për të ruajtur vlerën 2. Dhe në indeksin e tretë, por Numri i dytë, unë jam duke shkuar për të ruajtur numrin 12. Tani, kjo është e mirë në se punon se punon mirë. Por thonë se kjo ka rëndësi për mua atë që çdo Indeksi i mban. Për mua, indeksi 0 do të thotë se si shumë macet kam. Dhe indeksi i 1 do të thotë se si shumë owls kam. Dhe një tjetër do të thotë se si shumë qenë. E pra, atëherë të përcaktojë se, në vend të kësaj e të pasurit për të kujtuar 0 lidhet me macet dhe 1 deri strucit, unë mund të përdorni vargjeve asociative, që do të thotë se në vend të integers si indekseve të mia, Unë në fakt mund të përdorni vargjet. Pra, kjo është mjaft e dobishme. Dhe ju keni në thelb vetëm zëvendësohet numrat e plotë me tela. Dhe nuk keni një array shoqerues. Po. Audienca: A ka një arsye pse ka një underscore për sekondë pjesë, për shkak se lista ime ka array. ZAMYLA CHAN: Pyetja ishte, është ka një arsye pse ka një të theksuar në mes tim dhe lista? Jo. Kjo është vetëm se si unë jam emërtimin ndryshueshme im. Audienca: Më parë line, kjo është një fjalë. ZAMYLA CHAN: Keqardhjet e mia. Unë do të rregullojmë se. Po. Ata duhet të jenë të njëjta emri ndryshueshme. Kapur mirë. OK. Pra, le të lëvizin për në varg varg. Nëse unë të kërkuar për të marrë dy vargjet, atëherë unë mund të lidh ato me dot operatorin. Pra, nëse unë kam Milo si një emër i parë dhe banane si një mbiemër, atëherë concatenating me dot operatorin dhe pastaj të vënë një hapësirë ​​në mes të do të bëjnë një varg që përmban Milo Banane, të cilat unë pastaj mund jehonë apo, në vend, të shtypura nga. Duke folur për jehonë, le të flasim rreth një pak të dobishme - oops. Më vjen keq. Disa funksione të dobishme PHP. Pra, ne kemi - vështirësitë teknike. Një e dytë. I dërguar atë. Problemet PowerPoint. Dhe ne jemi të kthyer me funksionet e PHP. Dhe ne jemi të kthyer me funksionet e PHP. Pra, ne kemi nevojë për funksionin, ku në qoftë se ju të kalojë në një skedar, këtu është është vetëm një shembull i një skedar që Unë mund të kalojë in Pastaj që do të përfshijë kodin PHP nga këtë dosje që tregojnë. Dhe kjo do të vlerësojë se in Pastaj ne gjithashtu kemi jehonë, të cilat a është paralel me printf. Dil një paralele të thyer, të cilat daljet bllok kodin që ju jeni futur me emrin Dhe pastaj kontrollon bosh nëse një e dhënë variabël është si i pavlefshëm ose zero ose çdo gjë që barazohet me të qenit bosh. Po. Audienca: Për varg string dot një operator, në PHP, është se njëjtë si në JavaScript ku është duke përdorur dot për varg do të thotë plus? Pra, për emrin e plotë, ju mund të ketë dollar nënshkruajë parë + dhe pastaj + fundit? ZAMYLA CHAN: Po. Pra, pyetja ishte nëse në PHP ne mund të përdorin të njëjtin varg string si në JavaScript me pluses. Dhe Jozefi do të merrni në atë më vonë. Unë mendoj se ai ka një rrëshqitje mbi këtë. Në fakt, është e ndryshme. Pra në JavaScript, ju duhet të përdorni plus të lidh vargjet. Dhe në PHP, ju duhet të përdorni dot operatorin. Pra, ata janë të ndryshme. OK. Pra, tani që ne i kemi mbuluar të gjithë kjo PHP, ku e bën atë të vijë me të vërtetë në dispozicion? E pra, kjo vjen në dispozicion kur ne mund të kombinojnë atë me HTML tonë. Pra PHP ynë do të na japë fuqinë për të HTML ndryshojë përmbajtjen e një faqe para ngarkim të saj. Pra, në bazë të kushteve të ndryshme, zakonisht përdoruesit të veçantë që është regjistrohet në, ne mund të shfaqin informacione të ndryshme. Linda, a keni një pyetje? Audienca: A mund të lidh një numër të plotë të? ZAMYLA Chan: Po, mundeni. Pra, pyetja është nëse ju mund të lidh integers ose të tjera variable.s tani, ne shkojmë për në MVC, të cilat është një paradigmë që kemi përdorur në pset7 dhe një shumë e web designers përdorin për organizimin kodin në fotografi në web faqen e tyre. M qëndron për Model. Dhe në thelb, fotografi modeli do të merret me marrëdhëniet me bazën e të dhënave. Shiko fotografi, ato lidhen me estetikë e internetit. Dhe Controller trajton kërkesat e përdoruesit, parses të dhënave, ka logjikë tjetër. Në pset7, ne kemi kombinuar modelin dhe kontrollues. Dhe ne vetëm i thirri kontrollorët dhe vënë ato në dosjen publike. Dhe view fotografi, ne i përdorim ato si templates në direktoria e shablloneve. Pra, ky diagram këtu gjithashtu paraqet që të njëjtën lloj ndarje me Modeli dhe kontrollues në vjollcë këtu nga e majta dhe pamje në të djathtë. Pra, kjo është një skematike që disa nga ju mund të keni parë në Orari i ose diagramet që ne kemi qenë duke tërhequr si ju ishin parafytyruar pset tuaj. Kështu që këtu, në një kontrollues të caktuar, një model kontrollues, ne kemi funksione që kanë të bëjnë me querying SQL bazës së të dhënave, ekzekutimin logjikën PHP. Ndoshta ju do të kërkoni një gjendje në Yahoo! Financave. Apo ndoshta, ju do të shikoni vetëm për të të parë nëse një përdorues i kishte dorëzuar një formuar tashmë para se të paturit e vizituar faqen tuaj. Dhe pastaj ju do të bëjnë një formë mbi këtu. Pas kësaj formë u dorëzuar nga përdoruesi, veprim që ishte specifikohet në HTML tag formën e do të tregonte faqe që ajo kthehet që të dhënat për të. Pra, të gjithë këtë informacion do të jetë kthyer në kontrollues tuaj. Pastaj ju ndoshta do të bëjë pak më shumë Logjika për këtë dhe ndoshta të ekzekutuar disa më shumë pyetje në bazën e të dhënave SQL dhe pastaj, në fund, të dalë me një bukur set e mbushur e informacionit që ju do ndodhë në një template tjetër që shfaqet këtë informacion. Tani, si nuk kemi të vërtetë paketë se informacioni up? E pra, ne kemi një funksion të quajtur Render që ishte në dosjen functions.php në pset7, ku ju të kalojë në emër të një fotografi, emri i një template. Dhe pastaj ju gjithashtu të kalojë në një grup shoqerues. Dhe kështu që array shoqerues përfaqëson informacione të ndryshme që ju doni të kalojë in Tani, çfarë do të jetë konstante në këta shembuj është se çelësat ose, në vend, çelësat e shoqerues vargjeve, ata janë ato që do të jetë pritet të jetë konstante nga template, sepse ajo e di se ajo ka nevojë për diçka që quhet mesazh ose e quajtur emrin. Dhe pastaj gjërat në të djathtë, vlerat aktuale, kështu që në këtë rast, i cili është një djalë i mirë dhe Milo, ato do të jenë vlerat që po ndryshojnë se kontrollues ndryshon çdo herë ose bazuar në një gjendje të caktuar dhe do të ndodhë që in Kështu që këtu në templates, ne shohim se ne janë duke përdorur HTML karaktere të veçanta, të cilat vetëm në thelb do të thotë se ne duam për të marrë string kolegëve që përdorues vënë in Dhe ne duam të zëvendësojë mesazh në atje. Pra, atëherë kur ne të vërtetë të parë fotografi, specifike Informacioni është kaluar in Vini re se çelësi si bëjnë vepra është se çelësat e shoqerues vargjeve, ato të ndryshueshme të bëhet Emrat këtu. Dhe kështu vlerat e kësaj kyç në array associative pastaj bëhet vlera e variablit. Tani, le të lëvizin për në SQL. Ajo qëndron për strukturuar Query Language. Dhe kështu kjo është vetëm një programimit Gjuha e projektuar për menaxhimin e bazave të të dhënave. Dhe ajo erdhi në dispozicion për ne në pset7 faqen tonë të internetit financave. Në thelb, kjo është vetëm një mënyrë e thjeshtë për të të ndjekur dhe për të menaxhuar objekte dhe tavolina dhe lidhjen e tyre me njëra tjetrën. Tani, mendoj se e bazës së të dhënave tuaj SQL në thelb si një file Excel, ndoshta, me fletë të shumta skeda. Kështu që ju mund të ketë tavolina të shumta, ndoshta, që lidhet me njëri tjetrin. Dhe ashtu si Excel, ne kemi shumë funksionalitetin që ne duam. Për shembull, ne mund të zgjidhni rreshtave të caktuara. Ne mund të fusni informacionin. Ne mund të rinovuar rreshtave. Dhe ne gjithashtu mund të fshini gjërat. SQL zgjidhni vepra duke përzgjedhur rreshtave apo një rresht i kolonave të përcaktuara nga një Baza e të dhënave që përputhen me një të caktuar kriteret që ju tregojnë. Kështu që këtu, kur unë shoh zgjidhni nga * magjistarët ku shtëpia = Ravenclaw, pastaj Unë jam zgjedhjen *, që do të thotë unë jam i zgjedhjen e çdo kolonë të vetme në atë rresht nga tabela magjistarët por vetëm nëse kolona e shtëpisë është e barabartë Ravenclaw. Tani, kjo është e pastër apo SQL. Pra, nëse unë shkova në phpMyAdmin, e cila është mënyrë specifike që ne përdorim për të menaxhuar Bazat e të dhënave tona SQL, atëherë unë mund të futni që në faqen e internetit phpMyAdmin. Dhe kjo do të ekzekutojë. Por ne fakt duam të bëjmë që në anën PHP. Pra, si do ta bëjmë këtë? E pra, ne përdorim funksionin query, e cila në thelb ekzekuton që SQL query. Duke përdorur? si një placeholder, ne mund të kalojë në disa Vlerat në vargun tonë që ne duan për të zëvendësuar. Pra, ndoshta unë jam ruajtjen e ndryshme Vlerat në curr_house, të cilat përfaqëson shtëpinë e tanishme që unë jam duke kaluar. Kështu që unë mund të kalojë që në si një placeholder me pikëpyetje. Dhe atëherë unë do të kryej në thelb njëjta gjë si kam bërë më parë, me përjashtim të tani, unë jam në PHP. Dhe query do të kthehet një array shoqerues. Dhe unë jam duke shkuar për të ruajtur atë në radhë. Tani, query gjithmonë mund të dështojë. Ndoshta SQL query nuk mund të ekzekutojë sepse tabela nuk ekzistonte. Apo ndoshta, kolona nuk ekzistonte. Diçka shkoi keq. E pra, në këtë rast, ju do të dëshironi të bëni të sigurtë që ju kontrolloni nëse query kthye false. Dhe kjo është duke përdorur trefishtë është e barabartë me operacion atje. Dhe atëherë unë kërkoj falje, e cila është një tjetër Funksion CS50, duke kaluar në një mesazh. Dhe në qoftë se ju shikoni në të kërkuar falje, të gjitha të të vërtetë nuk është të merr apology.php. Po. Audienca: A mund të shpjegoni se çfarë se yll ka midis zgjidhni dhe nga? ZAMYLA Chan: Po, absolutisht. Pra yll në mes të zgjidhni dhe nga do të thotë që unë dua për të zgjedhur të gjithë tërë rresht nga tryezën time. Unë mund të kemi treguar zgjidhni emrin, vit, shtëpi. Dhe unë do të merrni vetëm këto tre kolona në tryezën time. Por në qoftë se unë them të zgjedhur *, atëherë unë do të të marrë çdo gjë në atë kolonë. Atëherë unë jam duke shkuar për të shkuar ju në shpinë e parë. Audienca: Pra, kjo është ende e në SQL, apo jo? A është kjo pyetje apo është kjo PHP? ZAMYLA CHAN: Ne jemi në një pyetje. Pra, kjo është në PHP. Pra, duke përdorur funksionin PHP pyetje, ne jemi ekzekutimin e një SQL query. Audienca: vallë diçka që është në SQL rast të ndjeshme, si të zgjedhur ose magjistarët apo shtëpi? ZAMYLA CHAN: vallë diçka që është SQL në rast të ndjeshme? Unë besoj se kështu, po. Unë besoj se SELECT dhe FROM dhe KU janë rast të ndjeshme. Nuk ka? Rob Bowden: Pra, kjo është e kundërta. Emrat kolonë dhe mjetet tavolinë, të gjithë ata janë rast të ndjeshme. Por asnjë prej fjalëve kyçe MySQL, si SELECT, NGA, dhe KU, ato nuk janë të rast të ndjeshme. OK. Pra, e kundërta e asaj që kam thënë. Pra, të gjitha fjalë kyçe MySQL - zgjedhur, nga, ku - ata nuk janë rast të ndjeshme. Por, çdo gjë tjetër është. OK. Ju në para. Audienca: Nëse unë kam $ rreshtave në drejtim të më shumë se një rresht, që do të thotë është vetëm të bëhet një grup shoqerues? ZAMYLA CHAN: Pra, pyetja është nëse rreshtave ka më shumë se një rresht në të, ka ajo bëhet një grup shoqerues? Pra, kjo është një grup i shoqerues vargjeve tashmë. Pra, edhe në qoftë se ka vetëm një rresht kthyer, atëherë ju do të keni për të shkuar në Indeksi 0 të atij rezultat. Dhe pastaj ju do të duhet atë rreshtin e parë. Po, Belinda? Audienca: Kur e keni përdorur ===, është kjo vetëm konkret? Apo janë atje të tjerët? ZAMYLA CHAN: Pra, në këtë rast, === është një krahasim të gjithë llojeve. Më vjen keq. === Është një krahasim që krahason llojet. Dhe pastaj == krahason në të gjitha llojet. Audienca: A mund të shpjegoni se çfarë rreshtave është në këtë situatë? A është e rresht e të dhënave? ZAMYLA CHAN: Në rrëshqitje tjetër, unë jam i duke shkuar për të shpjeguar se çfarë është e rreshtave. Pra, nëse ju nuk do mend që mbajnë off në këtë. Dhe pastaj ju në shpinë? Audienca: Për funksione si pyetje, bëjnë dhe kërkoj falje [padëgjueshme]? ZAMYLA CHAN: Pyetja ishte nëse këto funksione - query, kërkoj falje, dhe të bëjnë - janë të zakonshme në të gjithë PHP. Këto janë ato që CS50 shkroi për pset7. Dhe Jay? Audienca: Kur keni nevojë për të thënë $ _session, Është se vetëm për kartat e identitetit? Ose mund të keni thënë se këtu? ZAMYLA CHAN: Pra, pyetja është, kur ne përdorim $ _session, që ishte një specifike variabël globale që ne jemi duke përdorur. Ja kjo është e ndryshueshme do të të jetë lokal në funksion tonë. Pra, ne jemi vetëm duke deklaruar një variabël të re. Audienca: Si të kërkoj falje zbatuar? ZAMYLA CHAN: Pyetja ishte, se si është zbatuar kërkoj falje? Dhe unë mendoj se kjo është në fakt një shumë e praktikë e mirë për ju djema për të shkuar në seksioni functions.php dhe të kërkoni në kërkoj falje dhe të shohim se si ju mund të ketë bërë atë vetë. Kështu që unë mund të lënë që për ju, por vetëm thonë se në qoftë se ju shikoni në kërkoj falje, atëherë ai merr mesazhin që ju dorëzuar të kërkoj falje, dhe pastaj ajo e bën këtë mesazh. Çdo pyetje më shumë? Unë e dua pyetje. Pra, mbajtur ata të vijnë. Audienca: [padëgjueshme] echo ose print atje? ZAMYLA CHAN: Pyetja ishte, nuk mund ne vetëm kemi vënë echo ose print atje. Kështu që do të kishte bërë diçka pak më të ndryshme. Kjo do të kishte shtypur query dështuar në se - mirë, tani për tani, ne jemi në të vërtetë në kontrollues tonë. Pra, ne nuk mund të vërtetë kanë HTML ngritur këtu. Apologize duke i bërë apologize.php në të vërtetë ju përcjellëse të apology.php. OK. Deri tani, le të shkojnë në për të adresuar pyetje nga më parë në lidhje me atë me të vërtetë është i rreshtave. E pra, query do të kthehet një grup i rreshtave. Dhe çdo rresht është e përfaqësuar nga një grup asociative. Pra, nëse unë kam ekzekutuar disa SQL query dhe Unë e kam ruajtur rezultatin në rreshta, pastaj duke përdorur një lak foreach, atëherë array Emri është i pari atje - rreshta. Dhe atëherë unë jam duke shkuar për të thirrur çdo rresht në rresht atje $. Kështu iterating mbi atë, unë mund pastaj hyrë në radhën e caktuar të emrin kolona, kolona vit, dhe kolona shtëpi. Vini re se unë nuk do të kishte qenë në gjendje të bëni këtë me radhë, sepse indeksit rreshtave Emri nuk ekziston. Rreshtat është vetëm një koleksion i vargjeve asociative. Pra, ju keni dy nivele atje. Pasi të keni rrjet të rreshtave, ju duhet të merrni në këtë. Dhe pastaj ju mund të hyni në kolona. E që të bëjnë të qartë? Po, përpara? Audienca: [padëgjueshme] hapur kllapa për [e padëgjueshme]? ZAMYLA CHAN: Pardon mua? Audienca: Kllapa hapur. ZAMYLA CHAN: Këto këtu? Kjo është më lejon që të përfshijë që ndryshueshme. Po. Audienca: Kur keni shkruar, ju jeni shtypjen në kodin HTML? ZAMYLA CHAN: Po. Kur unë të shtypura, kjo këtu është brenda template im tani, kështu që pikëpamja ime e metodës MVC. Kështu që unë jam shtypjen në HTML. Audienca: Pra, nëse ne shkuam në zhvilluesi i mjete pas drejtimin e kësaj, ne mund të që në fakt në kodin? ZAMYLA CHAN: Kjo është një e madhe pyetje, po. Pra, nëse ju shkoi në mjetet zhvilluesi i në Firefox duke përdorur Firebug ose Chrome, atëherë po, ju mund të shih HTML specifike. Pra, ajo nuk do të tregojë rreshtin $ ["name"]. Ajo do të tregojë cilado emri është në atë rresht. Audienca: Vetëm një çështje e përgjithshme, çfarë janë tr dhe td përcaktuar si? Pse do të kemi [padëgjueshme]? ZAMYLA CHAN: Tabela tr rresht, Tabela e pastaj td kolonë. OK. Audienca: Po, është e të dhënave tryezë. ZAMYLA CHAN: Tabela e të dhënave. Po. Audienca: Është një rresht në të cilën rresht është trajtuar si një kolonë? ZAMYLA CHAN: Na vjen keq. A mund të përsëris se? Audienca: Si do ju kujtoj rreshtave? ZAMYLA CHAN: Si do ta kujtoj rreshtave në çfarë mënyre? A jeni duke folur për këto rreshtave këtu ose rreshtave tr? Audienca: Të rreshtave. ZAMYLA CHAN: Këto rreshta këtu? Unë do të kujtoj këtë si I ekzekutuar query time. Dhe ai thotë, OK, unë kam ose 0 për n shuma e rreshtave që përputhen me kriteret e se ju kishte kërkohet. Pra, unë kam një numër të rreshtave. Pra radhë, rreshtave $, dyqane secili një nga ato rreshtave në një rrjet. Pra, edhe nëse është vetëm një prej tyre, është e ende një grup i rreshtave që përputhen atë. Kështu pra, për shembull, kjo është të ngjashme me kur ju sjellë nga larg cache nga përdoruesit. Dhe kriteret nuk kishte ku ID e barabartë me ID sesion. Ka me të vërtetë vetëm është një rresht që mund të përputhet me atë. Por ende rreshtave vetëm u kthye një rresht. Pra, ju do të keni për të shkuar në rreshta, Indeksi 0, Indeksi i cache për të në fakt për të cache tuaj. Audienca: A është funksioni print në jehonë të njëjtën gjë? ZAMYLA CHAN: Po. Po. Print një jehonë të njëjtën gjë. Audienca: A është lak foreach Mënyra e vetme për të indeksit në rreshta? ZAMYLA CHAN: A është një lak foreach vetmja mënyrë që ju mund të iterate përmes rreshtave? Jo. Ju mund të përdorni një për lak, me kusht që ju e dini gjatësinë e grup rreshtin së. Audienca: A mund të hyni në atë duke përdorur një rresht si [e padëgjueshme]? ZAMYLA CHAN: Pra, ju nuk mund të përdorni atë vetëm duke përdorur rresht në qoftë se ju nuk keni një foreach lak kusht që ju nuk e kanë deklaruar rresht. Po. Po, në të bardhë. Audienca: Pra çfarë tr dhe td bëjë? ZAMYLA CHAN: Pra tr dhe td janë HTML tags. TR tregon fillimin i një rresht tryezë. Dhe secili td tregon një e re e të dhënave tabelë kolona. Audienca: Për një vizuale të asaj që një rresht është si, vetëm të imagjinoni SQL, si ata kanë një rresht. [Padëgjueshme]. ZAMYLA CHAN: Po. Kjo është një pikë e madhe. Ju mund të parashikoj rreshtave si vetëm si në një tabelë Excel, vetëm lista e rreshtave. OK. Dakord. Pra, tani që ne kemi shkuar mbi zgjidhni, nëse nuk ka ndonjë pyetje më shumë, ne do të shkoni mbi mbi insert. Pra, nëse kam kërkuar për të futur në disa tavolinë dhe të futur kolonë të caktuar vlerat, unë mund të futur veten në Ravenclaw në vitin 7. Por ndonjëherë mund të ketë kopjuar vlerat, siç e pamë në pset7 kur ne u përditësimin portofolin tonë. Pra, në këtë rast, ne duam të përdorim ON Duplicate KRYESORE UPDATE, në mënyrë që ne të mos bëjmë dyqan rreshtave të shumta me të njëjtën vlerësojmë por update it. Pastaj ne fakt kemi update, cili nuk është një insert. Është vetëm një update ku ju update në një tryezë të caktuar me një të dhënë kriteret dhe pastaj, në fund, fshini, i cili bën një gjë shumë të ngjashme. Audienca: A mund të për pak kohë shkojnë mbi kopjuar kyç? ZAMYLA CHAN: Po. Në thelb këtu, unë kam futur në gringotts, është, galleons, këto vlera. Por ID, me sa duket, është një çelës unik Vlera e vendosur deri në tryezë MySQL. Pra, nëse unë tashmë kanë që ID ngritur, atëherë unë nuk mund të futur një rresht të ri. Pra, në qoftë se ajo nuk ekziston tashmë, atëherë unë kam për të rinovuar atë. Në mes, në të bardhën. Audienca: Pra insert, update, fshini, dhe zgjidhni, janë ato të gjitha në dispozicion në nivel lokal [padëgjueshme]? ZAMYLA CHAN: Pra insert, update, fshini, dhe zgjidhni janë të gjitha pyetje SQL. Pra, sa herë që ju jeni duke përdorur SQL, ju do të keni ato në dispozicion. Audienca: Kthehu tek kuize e fundit - ka pasur një pyetje që trajtohen në qoftë se keni pasur një tryezë dhe të kërkuar për futur rezultatet e provimeve në një dhe ju futur Emri juaj kështu që nuk do të ju lejojnë [Padëgjueshme] Rezultati Testi mikut tuaj. Si do të bëni që me insert? ZAMYLA CHAN: Pra pyetja ishte rreth një pyetje e mëparshme afatmesëm. Unë nuk jam në dijeni të cilat e kjo është e drejtë tani. Pra, ndoshta më pas, në qoftë se ju doni të dil dhe më tregoni, atëherë unë mund të me siguri ju japin këshilla. Por duke folur për gjëra të futur, si duke marrë rezultatin e dikujt kur ju nuk duhet, le të flasim për Sulmet e SQL injeksion. Pra, një sulm SQL injeksion është në thelb ku dikush merr Avantazhi i sigurisë së ulët të mënyrë që ju jeni duke marrë në të dhënat. Kështu që këtu, ashtu si në sektorin e financës CS50, kur kemi hyrë brenda, ne mund të hyjë në një shrytëzuesin në formën e hyrjes, Kutia e parë e tekstit, dhe pastaj të hyjë në një fjalëkalim. Ndoshta kodi ynë PHP mund të duket diçka si kjo, ku $ emrin është emri i përdoruesit pas të dhënave dhe fjalëkalimi është pas të dhënave regjistrohu. Dhe atëherë ne vetëm ekzekutuar query tonë, të themi, OK, edhe, query ynë do të zgjidhni nga përdoruesit tanë, ku emri i përdoruesit është një të tillë që ata të dorëzuar. Dhe fjalëkalimi është fjalëkalimi, që do të thotë se përputhen fjalëkalimet. Tani, çfarë nëse në vend të vërtetë dorëzon një fjalëkalim aktuale, si 12345 dhe guessing në bri që thotë fjalekalimin dhe duke u përpjekur të kollitem tyre llogari, çka nëse në vend ata e dorëzuar këtë. Ata mund të shkruani ndoshta një me mend në një fjalëkalim. Dhe pastaj ata do të përfundojë quote pastaj shkruani ose 1 = 1. Kjo do ritmin direkt në SQL query të dukej diçka si kjo. Zgjidh nga përdoruesit ku emri i përdoruesit = prongs dhe fjalëkalimi është e barabartë me zambak ose 1 = 1. Pra, ose regjistrohu ka të saktë ose 1 = 1, e cila është gjithmonë e vërtetë. Pra, në këtë rast, në thelb, një përdorues mund të të përfitojnë nga kjo dhe vetëm të hyni veten në dhe hack Llogaria dikujt. Pra, kjo është arsyeja pse ne duam të shmangur dikush që ka për të bërë këtë. Por për fat të mirë, funksioni query nga duke kaluar në placeholders do të marrë kujdesi për këtë për ju. Gjithashtu, ju do të zakonisht nuk doni që në fakt paraqesin fjalëkalimet vetë. Kjo është arsyeja pse ne sheshuar ose të mbyllur ato në sektorin e financës CS50. Audienca: quiz kaluara biseduar rreth vargjet shpëtuar të MySQL. A ne duhet të shqetësohen për këtë? ZAMYLA CHAN: Kjo është një pyetje e mirë. Të vargjet shpëtuar MySQL është padyshim një funksion që është përdorur në pyetjen tonë. Por patjetër të shohim në se. Unë do të them se kjo është lojë e drejtë të dini që ju do të duhet për të thirrur që funksionojnë në një varg. Po, Belinda? Audienca: Si e dini kur është e Kuotat e vetme apo citate të dyfishtë? Dhe gjithashtu, unë ndjehem si në leksion ju përmendur diçka për të mos pasur [padëgjueshme] apo diçka ose quote dytë i vetëm në fund. Unë mendoj se ai vuri në dukje se në leksionin ju jeni menduar të ketë apostrof 1 dhe pastaj nuk kanë apostrofat apo diçka. Audienca: [padëgjueshme]. Audienca: Gjë është vetëm i fundit të japin kuotën e në atje në atë kuti e dytë nuk duhet të jetë atje. [Padëgjueshme] Sepse kur ju merrni se vetëm e kaluar japin kuotën e tyre jashtë dhe të shkojë me këto për përmbajtjen ku fjalëkalimi është, në qoftë se ju keni se query, ka një kuotë të vetme në fundi tashmë. Ju dëshironi të përdorni atë kuotë të vetme si ai që shikon një të [Padëgjueshme]. Pra, çfarë është në të vërtetë në atë tekst kuti nuk duhet të ketë atë. ZAMYLA CHAN: Do ndryshojë këtë. OK. Nëse nuk ka ndonjë pyetje, atëherë unë do të të kalojë atë mbi Jozefit për të folur rreth JavaScript, e të tjera. [Duartrokitje] JOSEPH ONG: Pra, ne do të vrapojnë pak prapa. Pra, nëse ju duhet të largohet, kjo është në rregull. Por ne kërkojmë që ju të mbani kokat tuaja poshtë nëse ju jeni në mes, kështu që ju mos bllokojë kamera dhe ju përdorni dalje mbrapa në qoftë se ju keni për të. Unë jam Jozefi nga rruga. Hi. Test, test. Dan, është se e mirë? Ftohtë. Kështu video gjithashtu do të jetë postuar në internet për ata që duhet të largohet tani. Vështirë. OK. Pra shqyrtim quiz. Kjo është një mace. Tani, JavaScript, e cila ndoshta nuk është si aww për disa nga ju djema. OK. Pra, kjo është e parë, kujtohet nga Zamyla. Mos harroni se PHP është të kandidojë në server. Dhe shumë herë, ju djema shkroi sythe në PHP për të shtypura nga HTML, apo jo? Pra, një herë që kodi ekzekuton, që Prodhimi HTML që ju të shtypura nga merr dërguar përdoruesit. Dhe një herë të ndodhë kjo, jo më shumë PHP mund të drejtohet, nëse ju rifreskoni faqen, e Sigurisht, e cila reexecutes PHP. Por sapo ju të shtypura nga ajo HTML, ju nuk mund të shkojnë kudo. Kështu që HTML është dërguar mbi të përdoruesit, që është shfletuesi gjatë këtu, ku Milo është duke përdorur kompjuterin. Dhe aq mirë, ka disa gjëra që një herë ne kemi dërguar HTML të përdoruesit. Ndonjëherë ne duam të bëjmë diçka si kur ju klikoni mbi diçka, ne duam kuti alarm për të pop up, ato llojet e ndërveprimet, si kur të shtypni kyç, kur ju klikoni mbi diçka faqe, unë dua diçka të ndodhë. E pra, ju nuk mund të reexecute PHP Kodi HTML herë se është vendosur. Pra, si do të bëni këtë? Ne kemi prezantuar një gjuhë të re të quajtur JavaScript, i cili shkon në shfletuesin që ju lejon të bëni gjëra me HTML pasi të keni marrë ato nga serveri. Dhe kjo është arsyeja pse ne e quajmë atë një klient-side gjuhë programimi. Ai punon në kompjuterin tuaj - klienti. Ndonjë pyetje në lidhje se deri më tani? Kjo paradigmë ka kuptim për njerëzit? OK. Mirë. Dakord. Pra, gjëja e parë që të vihet në dukje është JavaScript nuk është e PHP. Ata kanë disa sintaksë të ndryshme, të cilat ne do të shkojnë në. Dhe ata kanë përdor shumë të ndryshme. JavaScript, përsëri, për tuaja shfletues, për klientin. Server shkon diku për të dikujt tjetër kompjuter që dërgon informacion për ju, korrigjuar? Pra, nëse ne ju kërkojmë të shkruani kodin PHP në një pyetje e provimit, nuk e shkruaj JavaScript dhe anasjelltas. Ju do të humbni vetëm pikë, dhe kjo nuk do të jetë e drejtë. Pra, le të marrë në disa dallimet sintaksore - JavaScript në të majtë dhe PHP në të djathtë. Gjëja e parë që ju do të njoftimit me JavaScript, ne deklarojë variablave me var fjalen - V-A-R. PHP përdorur shenjën dollarit, si Zamyla diskutuar më parë. Nëse ju doni për të deklaruar një shoqerues array, ne shohim sintaksë e njohur në anën e djathtë me PHP. Në anën e majtë, në vend të kësaj ju përdorni formatimin e teksteve kaçurrel. Dhe pastaj çelësat tuaj janë në të majtë. Pastaj ju keni një zorrë e trashë. Dhe atëherë ju keni vlerat që ju dëshironi. Pra, kjo është se si ju do të bëni atë në PHP në anën e djathtë me atë të dytë Linja që fillon në Milo. Dhe kjo është se si ju do të bëni atë në la anën në JavaScript në qoftë se ju doni ajo që ne e quajmë një objekt. Dhe objekte në JavaScript janë vetëm vargjeve asociative. Pra, nëse ju doni të hyni në fushat, në PHP ju përdorni këtë sintaksë kllapa. Dhe në këtë mënyrë, ju mund të reassign kjo fushë pronari për Lauren. E pra, në JavaScript, nëse doni të hyrë në një fushë dhe për të ndryshuar atë, ju mund të përdorni dot sintaksë. Ju mund të përdorni sintaksë kllapa. Por ju nuk mund të përdorni dot sintakse në PHP. Kjo nuk do të funksionojë. Ajo punon vetëm në PHP. Dhe së fundi, për të shtypur gjëra për të konsol, ju përdorni console.log, e cila ju djema të përdorni një shumë në pset8. Ju mund të console.log se. Nëse ju doni të shtypura një rrjet në PHP, ju duhet të përdorni r shtypura. Dhe në anën e djathtë, ju shihni i hash varg string atje. Dikush e pyeti më parë. I use një plus në JavaScript. Nëse unë dua të lidh diçka në PHP, ta përdor dot. Këto janë të ndryshme. Nëse jeni të shkruar kodin PHP, nuk e përdorin një plus. Nëse jeni të shkruar JavaScript Kodi, nuk shkruaj dot. Ajo do të jetë e gabuar. Dhe ju do të jetë i trishtuar. Dallimet në mënyrë sintaksore. E di sintaksë tuaj, sepse në qoftë se ju keni për të shkruani një pyetje dhe ju përdorni sintaksë nga gjuha e gabuar, ajo nuk do të funksionojë. Dhe kjo do të jetë i gabuar. Pra, le të flasim për një kontroll rrjedhin dallime, se si ju përdorni unazore në secilin prej tyre. Zamyla kaloi në anën e djathtë. Stuff në anën e djathtë duhet të jetë e njohur. Le të shikojmë në anën e majtë. Kur e keni përdorur për n lak në JavaScript, ndryshueshme loop tuaj, var i atje, lak mbi çelësat e vektorit. Kështu që ju shihni emrin, shtëpi, dhe rolin. Nëse unë console.log i, të shkoj emri, shtëpi, dhe roli. Ata janë çelësat. Në JavaScript, një lak foreach shkon mbi vlerat e kësaj grup. Pra, ju vini re se ata janë të dy i. Por ne këtu në anën e PHP, ai shtyp nga Milo, CS50, dhe nuskë. Ata janë vlerat në PHP. Pra, këto janë se si këto të dyja janë të ndryshme në gjuhë të ndryshme. Pra, nëse ju jeni duke përdorur një foreach loop, mos e pranojmë se ajo ju jep çelësat. Dhe në qoftë se ju jeni duke përdorur një për lak n, nuk bëjnë supozojmë se ju jep vlerat. A ka kjo kuptim deri më tani? Rrëshqitje tjetër do të ju tregojnë se se si ju mund të hyni në të kundërtën në secili prej tyre. E pra, nëse ju keni çelësin në JavaScript dhe ju doni vlerën jashtë, ju vetëm indeksi në array me këtë. Pra, Milo e unë do të merrni ju çfarë doni - vlerat. Ka kjo sintaksë të ndryshme në PHP. Nëse jeni të vërtetë dëshironi të dini se, unë nuk e bëj mendoj se ne kemi treguar atë për ju akoma. Por nëse ju jeni të interesuar, ju mund të përdorni kjo sintaksë shtesë në të djathtë pala që në të vërtetë do të ju lejojnë të merrni çelësat në PHP, kur ju jeni duke përdorur një loop foreach. Pra, vetëm pak e vogëlsira në qoftë se ju jeni të interesuar. Pra, kjo është vetëm për të treguar dallimet në mes këtyre dy sythe. A nuk përzierje e tyre deri kur ju jeni programimit një pyetje. Ndonjë pyetje në lidhje me këtë. Ftohtë. Dakord. JavaScript objekte. Kam folur për ta. Ata janë si vargjeve associative. E vetmja gjë që unë do të doja që ju të vini re këtu është se një vlerë në një asociative array mund të jetë çdo gjë në JavaScript. Ajo mund edhe të jetë një funksion, si atje. Unë kam një funksion që është një vlerë e çelësit. Dhe në qoftë se unë dua të thirrur atë funksion, Unë vetëm të hyrë në leh. Dhe pastaj kam vënë kllapa pas kësaj. Dhe që punon. Pra, ndonjë pyetje? Nuk ka? OK. Mirë. JavaScript, si PHP, është shtypur lirshëm. Çfarë do të thotë kjo? Ajo ka lloje. Por kur ju të deklarojë një JavaScript variabël, ju thoni var i. Ju nuk e thoni atë. Kjo nuk është një gjë. Ju vetëm të thonë se kjo është një variabël. Dhe pastaj të aktivizoni Java do të merret me Llojet nën kapuç për ju. Ne lirisht mund të konvertohet në mes të Llojet shkak të kësaj. Kështu që i fillon si një numër në këtë rast. Dhe atëherë unë kam një varg. Dhe unë shtoj i për të. Dhe unë reassign atë përsëri në i. Pra, në atë linjë të parë, i është numri. Në rreshtin e dytë, unë tani bëhet një string pasi unë bëj ripërcaktimin. Dhe këtu, unë jam vetëm concatenating se numri i mbi varg. Kështu që ju shihni se edhe pse i ishte një numër i plotë në pjesën e parë, kjo është lloj e si duke konvertuar tek një string dhe më pas duke u shtuar mbi atë varg hello. Dhe kështu kjo është ajo që dua të them nga shtypja lirshme. Kjo është që ju të kthyer në mes të lloje shumë të lehtë. Dhe kjo nuk do të hedhin paralajmërime në ju si C ka. Kështu që unë tani përmban përshëndetje 123 të vargut. Next. Ne gjithashtu mund të krahasohen lirisht midis llojeve. Pra, nëse ju vetëm përdorni ==, shumë si në PHP, JavaScript bën një gjë të ngjashme. String 123 është i njëjtë me numrin 123 kur ju përdorni të barabartëve dyfishtë. Kur përdoret barabartë trefishtë, ajo gjithashtu do që të sigurohet se Lloji është njëjtë. Pra, për shkak se është një varg dhe që është një numër, edhe pse ata janë të dy 123, kur ju përdorni trefishtë është e barabartë, ju merrni rreme. Në dyfishtë barabartë rast, ju merrni vërtetë, sepse është e barabartë me dy nuk intereson lloji. Barabartë Triple ka kujdes për llojin. Pyetje? OK. Dhe një tjetër gjë rreth JavaScript është Shtrirja është lloj globale nëse nuk jeni në një funksion. Dhe punon e njëjtë Mënyra në PHP në fakt. Pra, le të kalojnë nëpër këtë shembull. I vendosur për të i 999. Dhe pastaj do të shkoj në këtë për lak. Pra, nëse unë jam i shtypjes në këtë për lak, pres 0, 1, 2, 3, 4. I merrni për i = 4. Ajo increments i tani në 5 në fundi i për lak. Dhe pastaj ai e thyen nga lak, sepse ajo nuk i përmbush kusht më. Çfarë mendoni se e ardhshme console.log printime nga? Pra, kjo është ajo që do të bëjë në C. Në C, sepse në qoftë se ju keni si i var jashtë dhe ju keni var i brenda një lak, si një për lak, atëherë kjo e bën të tillë që është e scoped se dy i-së janë të ndryshme. Në JavaScript, ajo do vetëm trajtojnë atë si të njëjtë i. I merrni me 5, pasi që ishte vlera pas dalë nga lak. Kështu ato janë I e njëjta i. A ka kjo kuptim? E pra, kjo ka kuptim nga një këndvështrim JavaScript. Por e njëjta paradigmë nuk kryer mbi të C. Ata kanë rregulla të ndryshme Studimit. Po. Audienca: [padëgjueshme] jashtë funksionit [padëgjueshme]? JOSEPH ONG: Pra, jashtë cili funksion? Kështu që unë do të shkoj në se në vetëm një të dytë. Kështu që ne e quajmë foo (i). Kjo i kalon në foo, increments atë, dhe pastaj regjistron atë. Pra, ajo ishte 5. Pra, ai bëhet 6. Por ajo që unë jam duke folur rreth është se unë në atë funksion. Për shkak se ajo është një parametër, kjo është scoped në atë funksion. Pra, një herë unë në fakt të merrni nga se funksion, ajo tani do të shkojnë përsëri në i vjetër. Kjo i është scoped vetëm për shkak kjo është në një funksion. Dhe ne kemi qëllimin dhe funksionet. Por ne nuk e kemi qëllimin jashtë e funksioneve në JavaScript. A ka kjo kuptim? Po. Pyetje. Audienca: Same [padëgjueshme]? JOSEPH ONG: Pra, vërtet. Në PHP, është e njejta gjë. Ka një finesë të vogël në të vërtetë. Por ju mund të pyesni për se pas shqyrtimit. Ju nuk keni të vërtetë duhet të dini se finesë për quiz. Për të gjitha qëllimet dhe synimet, si variablave, globale dhe PHP, përveç nëse ata janë në një funksion, njëjtë gjë në JavaScript. Po. Audienca: Pse është kjo e lejuar në JavaScript dhe nuk ka ku tjetër? JOSEPH ONG: Pra, pse është e lejuar në JavaScript dhe jo në C? Ajo është vetëm ai që doli me JavaScript vendosi se kjo ishte në rregull në JavaScript. Pra, është vetëm si një gjuhë programimi konventë si ne do të themi. Po. Audienca: Pra, pse e bëri shkojnë 6-5? JOSEPH ONG: Pra, ajo shkoi 6-5, sepse Unë të kalova i në foo, që i brenda foo tani është scoped të foo, sepse Shtrirja ekziston në funksione në JavaScript. Por sapo kam dal nga këtu, sepse atë u scoped në funksion, unë jam vetëm duke përdorur i rregullt që ishte brenda tjetër e rrjedhës së kontrollit. Kuptim? A mund të lëvizë në? Dakord. Ftohtë. Pranimi i kësaj është objekte janë miratuar nga referencë. Ti e di se si kur ju të kalojë një koleksion në C që ju mund të në fakt modifikuar array? Është e njëjta gjë në JavaScript. Nëse unë të kalojë një objekt, në këtë rast, unë Milo kaluar në këtë funksion catify. Milo fillon. Emri i tij është Milo banane. Unë të kalojë atë objekt në një funksion sepse është një objekt, një shoqerues array në JavaScript. Kur kam kryer një operacion në këtë funksion, ai do të në të vërtetë të ndryshojë objektin. Pra, kjo do të ndodhë vetëm për objekte në JavaScript, ashtu si ndodh për vargjeve brenda e emrit C. Pra Milo-së në të vërtetë do të bëhet cat tani. A ka kjo kuptim? Pra, kjo punon vetëm për objekte. Objektet janë miratuar me referenca. Po. Audienca: Pra, ju jeni duke thënë se në kontrast me i ndryshueshëm. JOSEPH ONG: Po. Cili variabël i ishte vetëm një numër, e drejtë? Është si në C, kur ju të kalojë një numër i plotë një, kjo e bën një kopje. Dhe kur ju të kalojë një rrjet, ai në fakt ndryshon array aktuale në C. E njëjta gjë ndodh me JavaScript në këtë rast. Dakord. Dhe e ardhshme, Milo është e trishtuar, sepse ai është tani një mace. Kjo ishte në të vërtetë Milo pas disa udhëtim të vet. Deri sa nuk kemi përdorim JavaScript në një web faqe? Ne mund të përfshijë atë. Kjo është Kodi HTML me tags zhvesh. Pra, unë kam tags zhvesh atje. Dhe pastaj kam vënë disa JavaScript Kodi brenda etiketave script. Dhe atëherë ajo ekzekuton këtë. Kur unë vetëm të bëjë atë si kjo, është e quajtur inline JavaScript. Kjo është lloj i çrregullt, sepse JavaScript është në të vërtetë në HTML. Një mënyrë e mirë për të bërë këtë, shumë nicer, është për të shkruar tuaj JavaScript në një fotografi të jashtëm dhe pastaj të sigurojë tag script me një burim. Dhe kjo do të shkojnë në atë JavaScript skedar dhe lexoni kodin JavaScript nga që të paraqesë në vend. Dhe në këtë mënyrë, ju nuk keni shumë JavaScript në fillim të tuaj Fotografi HTML, gjë që e bën me të vërtetë çrregullt. Ju vetëm vënë atë diku tjetër. Dhe atëherë ajo do të lexoni atë nga atje. A ka kuptim kjo? Çështjet vendosje. Në këtë rast të veçantë, shkrimit është para së trupit. Pra, kur do të zbatoj atë, ka asgjë në trup ende. Ndoshta kjo do të bëjë pak më shumë kuptim kur unë tregoni ketë pjesën tjetër. Në këtë rast, script vjen pas div. Pra div fakt duket në faqen e parë. Këtu në këtë rreth të vogël të kuq, ju shihni teksti shfaqet. Dhe pastaj vigjilent tregon deri. Në rastin e parë, sepse script ishte para div, vigjilent tregon deri parë. Dhe pastaj div tregon deri pas ju shkarkojë kuti. Pra, ekzekutimi ka rëndësi. Pra, ne do të mbajë këtë në mendje. Kjo do të jetë e rëndësishme në pak. OK. Aq mirë, si mund të prisni deri tërë faqe është e ngarkuar atëherë para jush ekzekutuar një kod? Ne do të merrni në këtë pak Pak më vonë shumë. Por, vetëm i mbajnë këtë vendosje çështje në mendje për kur vijnë në një tjetër rrëshqitje. Pra, ne të merrni për DOM tani. Dhe çfarë është DOM? Pra, nëse ju shikoni në kodin HTML, është vetëm një bandë e tekstit në ekran. Pra, si nuk e di JavaScript që ky është një element HTML? Pra, ne duhet të kemi disa kujtesës përfaqësimi i kësaj strukturë që ne kemi. Dhe sa herë që ne kemi këtë në përkujtimin Përfaqësimi në JavaScript, që ne e quajmë se DOM. Dhe kjo është vetëm një mënyrë që njerëzit të vendosur se ne duhet të përfaqësojë këtë Struktura si HTML. Dhe ajo që e bën të duket kjo DOM si? E pra, në përfaqësimin e kujtesës, ne kemi marrë këtë tekst. Dhe ne e kthejnë atë në kujtesë përfaqësim. Pra, kjo është HTML. Pra, ne së pari të gjeni se çdo Pemë DOM ka një dokument. Ajo duket si një pemë. Dhe dokumenti përmban HTML tag, në të vërtetë çdo gjë brenda këtë tani. HTML tag ka dy fëmijë. Ajo ka një kokë. Kjo kokë, në qoftë se ju shikoni në vulë atje se si është e strukturuar ndërmjet etiketave të ngushtë, kokë ka një fëmijë. Fëmija është titulli. Pikërisht. Tani, ne kemi një fëmijë të trupit. Dhe pastaj se trupi ka një fëmijë të quajtur familjes. Dhe kjo familje ka tre fëmijë - vjetër, e mesme, dhe më i ri. Kështu që ju duhet të dini se si për të nxjerrë një diagram si kjo kur ju pyes se për të nxjerrë një diagram kur ne japim ju HTML në të majtë. E di se si për të prodhuar pemë DOM. Dhe brenda këtyre gjërave, nuk ka vetëm disa tekst, të cilin unë e kam përfaqësuar kuti e vegjël. A ka kjo strukturë pemë DOM bëjnë kuptim dhe çfarë DOM është? Pra, çfarë ka p qëndrojë për? Mbi këtu, p atje në atë tag paraqet një paragrafi tag në HTML. Kështu që ju mund të shikoni atë. Por ai thjesht do të thotë se është një hapësirë ​​për disa tekst. Dhe kjo ka disa CSS parazgjedhje styling, sepse kjo është një paragrafi tag. Por mos u shqetësoni për të vërtetë se një pjesë shumë. Vetëm e di se është një placeholder për disa tekst. Po. Pyetje? Po. Audienca: Ju vetëm CSS përmendur. Familja hash dhe të hash të gjitha këto gjëra në thelb është përfaqësojnë ID-ve në CSS? JOSEPH ONG: Po, pikërisht. Unë do të shkoj në atë që këto hashes thotë në një të dytë. Kur Angela shkoi CSS, ajo foli për selectors CSS. Këto janë Selectors CSS që ajo ishte duke folur për. Po, Rob? Rob Bowden: Unë do të komentojë se DOM brenda tag titullin është gjithashtu një nyje tekst. JOSEPH ONG: E drejta. Pra, në brendësi të tag titullin, Unë kam disa DOM tekst. Pra, me të vërtetë, ky titull duhet të ketë si një pak kuti që vijnë jashtë të saj si. Por kjo nuk ka rëndësi shumë në këtë rast. Ne nuk e kujdesit të vërtetë në lidhje me nyjet tekst, si ne i quajmë ato, shumë. OK, ne bëjmë. Me sa duket, ne bëjmë. Dhe unë do të rregullojmë se kur Unë të ngarkoni atë përsëri. A ka kjo kuptim? Deri sa nuk kemi punë me DOM? Kurdo që të merren me DOM në JavaScript, ka dy hapa. Ju zgjidhni një element DOM. Dhe pastaj ju të bëni gjëra për të. Pra, në këtë rast, në mënyrë abstrakte, unë kam zgjedhur elementin e mesme. Dhe pastaj një shembull të bërë gjëra të me të do të ndryshojë tekstin. Kjo përdoret për të Bob. Tani, çfarë kam bërë aty u kam ndryshuar Bob Milos në këtë rast. Deri sa nuk kemi në fakt e bëjmë këtë? Si mund ta bëjmë përzgjedhjen? Dhe si ne bëjmë të bërë gjëra të gjë e një herë ne kemi marrë atë? E pra, mënyra më e ju djema kanë mësuar atë në këtë klasë është duke përdorur diçka ne quajtur jQuery. Pra, çfarë është jQuery? jQuery është një bibliotekë që e bën JavaScript më të lehtë për të shkruar. Pra, dikush mori kohë dhe shkroi jQuery. jQuery është shkruar në të vërtetë në JavaScript. Dhe pastaj për shkak se ata e bënë këtë, ne tani kanë një bandë e tërë e funksioneve që ne mund të përdorim që të bëjë tonë jeton me të vërtetë e lehtë. Pra, cilat janë disa nga gjëra ai nuk? Kjo e bën më të lehtë zgjedhjen e elementeve. Kjo e bën ndryshimin HTML, duke shtuar klasa më e lehtë. Kjo e bën më të lehtë Ajax. Ne do të shkoj në se në një të dytë. Dhe kjo është analoge me bibliotekat C. Kështu që ju të përfshijë string, ju merrni strlen. Ju merrni strcpy, të gjitha këto gjëra. Kur ju të përfshijë jQuery, ju merrni bukur mënyra për të zgjedhur elemente të ndryshimit gjëra, e të tjera. Ju merrni funksionalitetin shtesë që JavaScript nuk do të ju jap. Pra, nuk është jQuery JavaScript. jQuery është një bibliotekë që është shkruar në JavaScript që e bën JavaScript më e lehtë për të shkruar. Pra jQuery nuk është një programimit gjuha. Por JavaScript është. të bëjë. Që ju të merrni një terminologji të drejtën tuaj. Ndonjë pyetje? Po. A është kjo një pyetje? Dakord. Pra, si ju përdorni jQuery? E pra, kur ju jeni me shkrim disa JavaScript kodin dhe ju të përfshijë një jQuery në krye të dosjes tuaj si një fotografi script, përdorni shenjën e dollarit tani për të marrë qasje në jQuery. Dhe kjo është e ndryshme nga shenja dollar në PHP. Është e njëjta simbol ju shkruani në tastierën tuaj. Por ata do të thotë gjëra shumë të ndryshme. Shenjë Dollar në PHP do të thotë kjo është se si unë deklaroj një ndryshore. Në JavaScript, kur ju keni të përfshira jQuery, ajo qëndron për jQuery. Pra, mbani në mend. Pra, si mund të kemi zgjedhur elemente DOM? E pra, kur ju bëni atë shëmtuar JavaScript mënyrë, ju hyni në dokumentojnë ndryshore globale. Dhe pastaj ju merrni element nga familja ID. Kjo është me të vërtetë e gjatë dhe gojor dhe jo shumë i mirë. Ose ju mund të merrni të gjitha elementet që janë një tag p. Kjo punon edhe në JavaScript. Por kurrë nuk e kemi treguar me të vërtetë ju sintaksa shumë. Ajo që kemi treguar që ishte jQuery. Kështu që tërë përzgjedhës deri atje që u shprehur në JavaScript vetëm merr kondensuar në këtë dollarit shumë të bukur nënshkruajë familjen hashtag. Dhe $ p, vetëm ku është e si kjo. Nëse ju doni të zgjidhni të gjitha etiketimet p brenda një familje, ne kemi vënë një hapësirë në mes të dy. Dhe tani, ne kemi marrë të gjitha p e tags brenda një familje. Dhe të duket e njohur? E pra, Angela ka folur për Selectors CSS. Më jepni një të dytë. Dhe kështu që në mënyrë të përzgjedhur një element ju vetëm përdorni të njëjtën gjë si ju do të bëni me një përzgjedhës CSS. Nëse ju vendosni një hash përpara e saj, ajo zgjedh nga ID. Një dot përzgjedh nga klasa. Nëse ju vetëm keni gjë pa hashes ose pika, ajo zgjedh ato tags. Pyetjet. Po? Audienca: Kur ne përdorim dot në tonë HTML, është se nuk jQuery? JOSEPH ONG: Dot në HTML tonë është një gjë e JavaScript. Kjo nuk është një gjë e jQuery. Mënyrë ju djema mësuar atë me jQuery është që të përdorin. html. Dhe pastaj ju keni kaluar atë çka HTML do të jetë. Kështu që unë do të shkoj në se në vetëm një të dytë në të vërtetë. Deri sa nuk kemi të bëjmë gjëra të elementit një herë ne kemi zgjedhur atë? Pra, kjo është një shembull i zgjedhjen e një element. Deri tani, ne duam të bëjmë gjëra për të. Pra, në këtë rast, më lejoni të kthehem në rrëshqitje mëparshëm. Ishte Bob para. Dhe unë dua të ndryshojë këtë brenda HTML të Milo. Kështu që unë e quaj funksionin HTML nga elementi. Ky funksion HTML është Nje metode e elementit. Dhe pastaj unë të dhënë atë çfarë Unë dua HTML të jetë. Dhe vetëm ajo e zëvendëson atë që ka brenda e që tag me çdo gjë që unë jap. Po. Pyetje? Audienca: hashtag është përdorur vetëm për të jQuery. [Padëgjueshme] ne nuk do të përdorim atë. JOSEPH ONG: Po, pikërisht. Por mos u shqetësoni shumë JavaScript për të pastër. Unë vetëm dua që ju djema të përqëndrohet në atë se si ju do të bëjë atë me jQuery, sepse që do të jetë e rëndësishme pjesë në quiz. E drejta. Pikërisht. Kështu që ju shihni atë hashtag, në mënyrë që korrespondon për të zgjedhur elementin me ID e mesme për shkak të asaj hashtag. Hashtag do të thotë ID. Dhe ky element ka një ID të mesme. Pra, kjo është elementi që do të përzgjedhim. Audienca: [padëgjueshme]. hashtag shenjë dollar [padëgjueshme]? JOSEPH ONG: Pra nuk ka. Pyetja është a mund të përdorni. Vlerën. Dhe. Vlera e punon vetëm në elementet që janë të inputeve. Në jQuery, do të ishte e . Val, jo. Vlera. Kështu që unë do të merrni për një shembull të vogël që tregon e gjithë kjo në kombinim në një të dytë. Por unë mendoj se kjo i shërben një copë të vogël ka kuptim për njerëz deri më tani. Dëshironi të ndryshojë HTML, telefononi metodën HTML. Po. Audienca: A mund të shpjegoni Metoda përsëri? JOSEPH ONG: Pra, një metodë është vetëm një funksion që i përket një, në këtë rast, një nga këto elemente DOM, sepse ju të parë unë zgjedhur elementin e parë. Në fakt, më lejoni të përdorni miun. I zgjedhur elementin e parë. Dhe atëherë unë e quajti këtë HTML funksionin që kishte. Dhe për shkak se ky funksion i takon këtë gjë, ne e quajmë atë një metodë. Kjo është vetëm një emër i zbukuruar për të. Thuaj se përsëri. Pra mbani mend, kemi zgjedhur element tani. Dhe ne e kemi vënë atë në brendësi të element i ndryshueshëm. Korrigjuar? Pra, kur ne duam të ndryshojmë HTML në brenda, sepse ishte Bob para, ju doni të ndryshoni se teksti Milos. Kështu që ne e quajmë HTML. Dhe ne tregoni se çfarë HTML brenda se element duhet të jetë tani. Dhe kështu ajo ndryshon atë në Milo, sepse i dha Milo. Audienca: Pra, ata janë duke punuar së bashku. [Padëgjueshme] JOSEPH ONG: Po, po. Ata janë duke punuar së bashku. Pra, një prej tyre zgjedh elementi i parë. Dhe e dyta e bën diçka për të. Po. Audienca: [padëgjueshme]. Nese kjo metodë është i ndryshëm nga ne HTML ju keni metodën barabartë aktuale. JOSEPH ONG: Po. Kjo është një metodë e ndryshme. Kjo është një metodë e ndryshme. Dhe ne mund të mbulojë atë në vetëm një të dytë kur të shkoj në një shembull. Unë dua të të siguruar që ne të shpejtuar sepse ne jemi mbetur shumë kohë. Por ne kemi drejtuar rrugën me kalimin e kohës tani. OK. Ftohtë. Pra, nëse ju doni të shtoni një klasë, nuk ka gjithashtu një metodë klasë add. Ky është vetëm një shembull i asaj ju mund të bëni me jQuery. Kjo vetëm shton një klasë. Nëse ju dëshironi të hiqni atë, ju mund të telefononi të hequr. Kjo është vetëm një tjetër gjë që ju mund të bëni. Pra, më shumë shembuj të gjërave që ju mund të bëni. Pra, mund të unë vetëm vënë atë në lartë si kjo? Hiq më i ri. Në qoftë se unë vetëm të ekzekutuar atë JavaScript në top i dosjen time, do që të punojë? E drejta. Për shkak se e mesme nuk ekziston ende. Pra, kjo nuk do të punojë. Urdhri i ekzekutimit. Ai shkon në krye të parë. Çfarë? Audienca: më e re nuk ekziston akoma? JOSEPH ONG: Po. Më i ri nuk ekziston ende. Pikërisht. Audienca: Ju thatë mesme. JOSEPH ONG: Na vjen keq. Më i ri nuk ekziston ende. Dhe gjëja tjetër është që unë nuk kanë përfshirë jQuery paraqesë pyesni src script. Kështu që nuk do të punojnë. Në fakt, unë nuk e ka bërë që në rrëshqitje tjetër, e cila është menduar për të rregulluar se ose. Por mënyra që ne të bërë këtë është JavaScript është ngjarje e shtyrë. Pra, ajo që ne bëjmë është që ne përdorim një ngjarje mbajtës për të bërë këtë të ndodhë. Dhe kështu që unë zgjidhni dokumentin vendosur të parë. Unë them, OK, kur dokumenti është gati, më lejoni të drejtuar një funksion. Pra, kjo është e gjitha që do të thotë sintaksore. I zgjedhur dokumentin. Tani, kur dokumenti është gati, të drejtuar funksionin. Dhe kështu këtu kur dokumenti është të gatshëm, që do të thotë të gjitha HTML ka ngarkuar, atëherë unë të drejtuar funksionin që heq atë element. Dhe kështu që tani, kur kam drejtuar këtë funksion që kam kaluar në gati, unë jam i garantuar që të gjitha HTML në faqe do të ekzistojnë së pari. Po. Pyetje? Audienca: Cila është ngjarja fjalen brenda funksionit? JOSEPH ONG: Pra se fjalen ngjarje në funksion është vetëm një parametër që merr kaluar në funksion për çdo rast. Kjo është vetëm diçka që ju merrni për të lira. Kur ju jeni duke përdorur handlers kyçe në pset8, që ngjarja mund t'ju them, për shembull, e cila kyç keni shtypur. Në këtë rast, për një ngjarje të gatshëm, kjo nuk është në të vërtetë super e dobishme. Por, për një ngjarje kyç poshtë, është më e të dobishme, për shkak se ju të merrni të dini të cilat Key ju presion duke hyrë në kyç Kodi off atë objekt ngjarje. Korrigjuar? A ka kjo kuptim? OK. Po. Pyetje? Audienca: Pra, mund të vendosni tag script ulët poshtë? JOSEPH ONG: Pra, vërtet. Ju mund të vënë script tag ulët poshtë. Por pastaj ai thjesht bëhet me të vërtetë çrregullt. Dhe ne si të përqendroj të gjitha i kodit tonë në një vend. Dhe kjo do të na lejojë për të bërë atë. Mos harroni më parë kam thënë se ka një nicer mënyrë për të siguruar që elemente janë në faqe para se të ekzekutuar kodin? Dhe kjo është vetëm një mënyrë e mirë ju do të përmbushur këtë. Audienca: [padëgjueshme]. JOSEPH ONG: Po. Ju do të duhet ende të, apo jo? Sepse mos harroni, ju përfshirë paraqesë në fillim të faqes. Pra, ajo do të ekzekutojë të parë para ju merrni në fund të faqes. OK. Kështu që ju mund të shtoni një tjetër lloji i mbajtësit të ngjarjeve. Kjo vetëm proceset e klikimeve. Kur unë klikoni mbi më i ri, atëherë ajo do të hapet me një alarm. Kjo është vetëm një tjetër lloji i ngjarjes. Në krahasim me rast gati, ju tani përdorin klikoni ngjarjen kur merrni klikimeve në një element. Dhe kështu në këtë rast, mos harroni, klikoni mbajtës është bashkangjitur më i ri. Pra, kjo ndodh vetëm kur Unë klikoni mbi më i ri. Dhe në një tjetër rast, të gatshëm është bashkangjitur dokumentit. Pra, ajo pret për dokumentin të jetë gati. Kuptim? Unë mendoj se unë mund të lëvizë. Po. Pyetje? Audienca: [padëgjueshme]. në këtë rast ju përdorni [padëgjueshme]. JOSEPH ONG: Oh, po, sepse në këtë rast, më duhet të pres për të rinjtë element të shfaqen në ekran e parë para se unë mund të bashkangjitni një mbajtës klikoni për të ajo, e cila është arsyeja pse unë vënë atë brenda e një dokument të gatshëm. OK. Dhe të ardhshëm, kështu që ky është një shembull i madh i se si ju do të kombinohen çdo gjë. Ky është vetëm një shembull formë validation ju keni parë në leksion. Pra, të marrë atë hap pas hapi si ju shkoni nëpër këtë. Dhe kjo do të jetë krejtësisht në rregull. Vetëm të lexoni atë nga lart poshtë. I kanë një formë në fund. Kur dokumenti është gati, unë bashkangjitni një paraqesë mbajtës të formës, e tillë që kur unë të paraqesë një formë, unë të marrë vlerat brenda secilit prej këtyre inputeve. Dhe unë kontrolloni nëse është bosh. Nëse është e bosh, unë kthimit të rreme, sepse Unë nuk dua të dorëzojnë formularin, sepse forma është e gabuar. Nëse fjalëkalimi është bosh ose është më pak se tetë karaktere, unë nuk e dorëzon formë, sepse kjo është edhe e gabuar. Dhe rreme kthimi vetëm pengon forma nga paraqitjen dhe duke shkuar në një faqe të re. Dhe shpresojmë se, kjo ka kuptim. Unë mendoj se ju djema duhet të ecin nëpër ky kod hap pas hapi në tuaj. Dhe një herë ju e kuptoni se çfarë zgjidhni elementet dhe të bëjë gjëra në të në fakt nënkupton, kjo do të bëjë shumë kuptim për ju. Po? Audienca: Çfarë e bën Emri = të thotë emrin e përdoruesit? JOSEPH ONG: Pra emri = emri i përdoruesit dhe Emri = fjalëkalimi do të thotë vetëm shikoni në atribut i çfarëdo ju jeni zgjedhur. Dhe pastaj që ka për të përputhen. Pra, ne do të shkojmë në regjistrim. Dhe pastaj të shohim në të gjitha inputet dhe regjistrimi. Dhe pastaj kemi marr një ku emrin veti është e barabartë tek emri. Kështu që përzgjedhës parë vetëm përzgjedh input emrin. Dhe kjo përzgjedhës i dyti vetëm zgjedh fjalëkalimi një, sepse ata kanë atributet emrin e tyre të vendosur si ajo që ata janë menduar të jetë. Pyetje? Audienca: Në dorëzimin, si e bën Pjesa e poshtme të zgjidhë pjesën e lartë? JOSEPH ONG: Pra, kjo është për shkak se e mbajtësit të ngjarjes. Pra, ne jemi duke pritur për një ngjarje të paraqesë që suspendohet nga forma. Dhe kjo është e gjitha që është e paraqesin. Pse unë e quaj të paraqesë deri atje? Ajo thotë se, kur forma është dorëzuar, Kam marrë një ngjarje të paraqitur. Pra më lejoni të vetëm të kapur atë dhe atëherë të drejtuar këtë kod në vend. Po? Audienca: Pse ju keni që të ketë ngjarje funksion? Pse nuk mund të ju vetëm [padëgjueshme]? JOSEPH ONG: Sepse në JavaScript, ju duhet të deklarojnë funksionet. Kjo është vetëm se si funksionon në JavaScript. Ju keni për të thënë se do për të drejtuar një funksion. Pra, ju jeni duke thënë atë që ju jeni në pritje të një funksion këtu në vend të vetëm formatimin e teksteve kaçurrel. Audienca: Dhe Funksioni është çdo gjë në vijim? JOSEPH ONG: Po. Funksioni është çdo gjë që është brenda formatimin e teksteve kaçurrel pas se fjalen funksion. Po? Audienca: [padëgjueshme]. JOSEPH ONG: Për të paraqitur? Audienca: Jo, për funksionin e pa ngjarjen. JOSEPH ONG: Po. Pra, pa ngjarjes, ju mund të keni atë. Nëse ju nuk keni nevojë për ngjarjen, atëherë ju mund vetëm të heq atë. Por nëse ju bëni, atëherë ju vetëm vënë atë atje. Po. Pyetje të shpejtë? Audienca: [padëgjueshme]. JOSEPH ONG: Po. Për shkak se ajo që ju duhet të bëni, document.ready vetëm të thotë të presim për të gjithë HTML në faqen e parë të ngarkesës. Dhe zakonisht, ju doni elemente tuaj në vend para se të dalë ndonjë kod. Dakord. Ne duhet të marrë për të Ajax. Ne nuk kemi shumë kohë. Pra, pro dhe kundër. JavaScript është e lehtë try shkruaj me jQuery. Por jQuery është lloj i ngadalshëm. Është si PHP është më i ngadalshëm se C, sepse është e interpretuar. Dhe jQuery është pak më ngadalë se sa JavaScript, për shkak se ajo ka një shumë të gjërat nën kapuç. Dhe kështu që nëse ju jeni duke përdorur jQuery, është e vetëm pak më ngadalë se JavaScript, edhe pse ju jep hijeshi bukur. Dhe së fundi, Ajax. Deri më tani me Ajax, ju nuk e keni parë Ajax në aspektin e pset7 ende, sepse kur ju bëni, ju të paraqesë një formë për të japin kuotën e tyre. Ngarkon një faqe të re. Pra, ju merrni këtë flash të madh të bardhë në faqen ndërkohë që ngarkesa e dyta faqe, saktë? Do të ishte me të vërtetë mirë në qoftë se ju nuk e kanë këtë flash. Ashtu si Facebook, në qoftë se ju vetëm shkoni te fund, ai shton përmbajtje të re pa freskuese faqe të tërë. Pra, diçka e tillë do të ishte mirë. Ky është kodi JavaScript nga e majta. Ju merrni atë që është brenda e atë të dhëna. Ju merrni info aksioneve nga Yahoo! Dhe pastaj të bëni një varg i madh që thotë, OK, ky është mesazhi që unë dua për të treguar në ekran. Dhe pastaj të vendosni atë mesazh brenda e disa element HTML që merr shfaqet në ekran. Pra, kjo është e gjitha që po ndodh këtu. Pra, në thelb, sepse kjo është e gjitha JavaScript dhe ju nuk keni nevojë për të drejtuar më PHP, kjo do të sigurt se faqja nuk rifreskohet. Pra, kjo është vetëm një ide abstrakte që unë jam duke thënë se këtu tani për tani. Ideja abstrakt është se në qoftë se ju bëni atë të gjitha në JavaScript, ju nuk keni një faqe refresh. Por si mund të vërtetë e bëjnë këtë? E pra, në të vërtetë, le të flasim për një problem me këtë të parë. Një problem është në JavaScript, Ekzekutimi është sinkron. Kështu që ju duhet të prisni për një linjë për të përfunduar para teje ekzekutuar linjë tjetër. Dhe çka nëse unë jam duke shkuar mbi të Yahoo!, dhe serverat e tyre janë me të vërtetë i ngadalshëm, dhe ai i merr ato tri sekonda për të të më kthejë atë info aksioneve? Kur unë goditi atë linjë të çmimeve, nëse Ekzekutimi është sinkron, pasi ajo është nga parazgjedhur, ajo është vetëm do të bëni është browser-i juaj është duke shkuar për të ngadalësuar për tre sekonda. Dhe ju nuk do të jetë në gjendje të bëjë çdo gjë, ndërsa ajo merr të dhënat. Ajo do të jetë i ngrirë. Dhe kjo është e keqe. Ju nuk doni një përdorues që të kanë një web faqe të ngrirë. Korrigjuar? Kjo është vetëm i keq. Gjithkush është dakord? Nëse ju jeni duke shfletuar Facebook dhe atë ngrin dhe ju nuk mund të bëjë asgjë, ju të marrë të frustruar me të vërtetë. Pra zgjidhja është që ne bëjmë diçka asinkron në vend. Pra, e gjithë kjo gjë asinkron thotë po, unë jam duke shkuar për të kërkuar këtë URL për disa të dhënave. Dhe atëherë unë jam duke shkuar për të do të mbajë. Unë jam vetëm duke shkuar për të mbajtur të ekzekutimit çfarëdo kodin që ishte pas kësaj. Dhe atëherë sa herë që të dhënat është gati, atëherë unë do të përpunojë atë. Kjo është e gjitha ajo është duke thënë. Audienca: Ajax vetëm ka Kodi asinkron? JOSEPH ONG: Kjo është një asinkron Mënyra e të dhënave Po sillet. Pra, gjëja e parë për Ajax është ajo më lejon të merrni të dhënat nga një faqe të jashtme. Dhe gjëja e dytë është ajo e bën të sigurt se faqja ime nuk stallë, ndërsa unë jam i ngarkuar të dhënat. Kjo është pjesa asinkron e saj. Për shkak se ajo shkon jashtë diku tjetër, sepse unë të them unë do të mbajë në kohë është e ngarkuar që të dhënat, që e bën të asinkron. Unë mbaj ekzekutimin. Pra, mbani atë të kryhet në menyrë ide në mendje. Dhe unë do t'ju tregoj atë Dallimi është. Versioni sinkron është në anën e majtë. Versioni asinkron është në anën e djathtë. Shikoni numrat për të parë që Hapat korrespondojnë me atë ekzekuton në çdo linjë. Atje, alarm tregon deri parë. Sepse duke marrë info aksioneve nga Yahoo! merr tre sekonda, ajo stalla për tre sekonda. Dhe atëherë ajo alarme çmimin pas këtyre tre sekonda. Pra, tani, që tregon alarm deri në atë kohë - tre sekonda in Dhe pastaj ajo alarme nga pas kësaj. Pra, ajo shkon vetëm hap pas hapi. Është si ajo që ju djema do të pranonte, saktë? Me ekzekutim asinkron, ju lajmërojnë parë. Pastaj ju shkoni jashtë për këtë URL. Dhe ju thoni, unë jam duke shkuar për thjesht pyesni për të dhënat. Dhe atëherë unë jam duke shkuar për të përpunojë atë më vonë. Pra, ajo menjëherë ekzekuton Linja tjetër pasi kam bërë që Kërkesa asinkron. Pra, një 0.001 sekonda, e shihni vigjilent hi. Ekzekutuar atë funksion, bye vigjilent. Dhe për shkak se kam bërë një premtim që unë do të përpunojë të dhënat më vonë, çfarë ndodh është kur të të dhënave që vjen mbrapa tre sekonda më vonë, atëherë unë të drejtuar që funksion që unë kam atje. Po? Audienca: A mund të specifikoni ose sqaruar se çfarë do të thotë Ajax? JOSEPH ONG: Pra, Ajax është një mënyrë që në qoftë se unë nevojë për të dhëna kur unë jam në një faqe interneti dhe unë nuk duan të rifreskoni faqen, atëherë I përdorni këtë teknologji të quajtur Ajax. Kjo në thelb do të thotë thjesht, shkoni të shkoj të marr të dhënat nga një faqe interneti. Dhe të bëjë atë në një mënyrë që vetëm nuk ngecë web faqen time. Audienca: Pra, është e natyrshme që një pjesë e JavaScript ose jQuery? JOSEPH ONG: Pra, dikush shkroi një mënyrë për të bërë kjo në të aktivizoni Java një kohë të gjatë më parë. Në një moment, ajo nuk ekzistonte. Dhe kështu dikush shpiku këtë teknikë për të lejuar njerëzit që të kërkojë këto të dhëna në këtë mënyrë. Dhe ata shkruan disa sende për të bërë atë për ju. Dhe jQuery vetëm ju jep këtë mënyrë shumë e mirë për të bërë atë me këtë $. marrë funksionin. pyetje? Unë mund të përgjigjem pyetjeve rreth Ajax më pas shumë. Do të jem këtu. Pra, le të na shkoj të marr të dhëna të pa freskuese faqe. Dhe le të na e bëjnë këtë në një mënyrë asinkrone që nuk ngrijë faqe. Një kohë të gjatë, nuk e ka lexuar qoftë se Shpjegimi ishte shumë e gjatë për ty. Pra më në fund, ndër-vend Sulmet scripting. Ne e pamë këtë me Zamyla. Nëse në dikë tim bazës së të dhënave e ka këtë emër, i cili është ky tag script, dhe unë kanë një kod në faqen time se printime nga emrat e njerëzve në një rresht, ose unë kam disa kodin JavaScript që fut ky emër në faqe, çfarë HTML merr prodhuar? E pra, unë të shtypura nga HTML tag. Unë të shtypura nga të gjitha këto tags. Unë shkoj në pjesën ku unë jam shtypjen me miqtë e mi. Unë të shtypura Lauren jashtë. Ajo shtypura Milo jashtë. Dhe pastaj emrin tim në bazën e të dhënave është pas script unflattering status Facebook. Sepse unë futur këtë në faqen sepse ajo duket si JavaScript, kur kjo faqe merr dërguar për përdoruesit, ajo merr ekzekutuar si JavaScript. Dhe kështu kjo është ajo që ne e quajmë një cross-site scripting sulm. Dikush e vë informacionin me qëllim të keq në bazës së të dhënave tuaj që mund të korrespondojnë me disa string shtesë ose disa string JavaScript. Kur ajo merr të shtypura jashtë për të Faqja e në këtë mënyrë, atëherë çfarë ndodh është se kodi i keq merr ekzekutuar se nuk e kam ndërmend që ajo të marrë ekzekutuar. Dhe kjo është e gjitha një ndër-vend sulm scripting është. Dhe mënyra që ju të marrë rreth kjo është si Zamyla tha. Ju vetëm përfunduar gjërat në Chars të veçantë HTML. Dhe kjo HTML chars të veçantë është një PHP funksion që do të parandaluar këtë lloj gjë nga ndodh me ju në qoftë se ju keni një qëllim të keq string në bazën e të dhënave tuaja. Ajo thjesht i shpëton atë, në mënyrë që ajo nuk të marrë të interpretohet si HTML. Ajo zëvendëson kllapa pak me atë që ne e quajmë subjekteve. Dhe kemi shkuar mbi këtë në leksion shumë. Kështu që unë mendoj se ju djema duhet të kenë një zotërim të mirë në këtë. Pyetje? Po. Audienca: Pra, si do të [padëgjueshme]? JOSEPH ONG: Thuaj se përsëri. Audienca: Si do monitor - JOSEPH ONG: E drejta. Kështu që ju keni diçka që thotë se, kur Regjistrohem, lloji në emrin tim. Unë vetëm lloji në atë fushë, emri im është stript pas unflattering Facebook Statusi i tag të ngushtë script. Dhe që vetëm merr vënë në bazës së të dhënave, sepse unë nuk mund të them se dikush në botë nuk ka një emër me një shigjetë të majtë në të ose script fjalë në të. Kjo nuk ka të vërtetë ka kuptim. Kështu që unë vetëm duhet të bëni të sigurtë që unë Sanitize gjëra para se të shtypura atë jashtë në faqen. Audienca: Kështu kartat e veçanta HTML parandalon tags script? JOSEPH ONG: Po. Pra, ajo nuk e ndalon tags script. Ajo thjesht bën të sigurt që tags script nuk do të marrë interpretohet si HTML ose - po. Ajo thjesht vjen deri sa ajo që ai në fakt është. Dakord. Kështu që ishte rishikimi quiz. Ftohtë. [Duartrokitje]