Rj AQUINO: Povedzme začať. Tak to je kvíz 1. Tu sú niektoré informácie na vysokej úrovni. O stránka pre kvízu je to URL, už CS50.net, aj keď to bude aj naďalej fungovať. Je to CS50.harvard.edu/quizzes/2013/1. Je to veľký O stránke, hovorím kde a kedy, a to budúcu stredu V banda izieb. A budúcu stredu, som znamená, za dva dni teraz. Všetky tieto informácie sú tu. Ale to je kumulatívne. Takže všetko z prvej polovice rok je potenciálne v kvíze, pretože nemôžete naozaj pokročilých veci C bez ak podmienky a pre slučky a podobne. Ale tam sa bude klásť dôraz na materiál pokrytý od Quiz 0, počnúc štruktúr a súboru Aj / O. Je to typicky viac náročnejšie ako Quiz 0. Priemerné skóre je zvyčajne nižšia. Usilovne študovať. Aj keď ste študoval, uistite sa, že používate CS50/discuss písať svoje otázky a prečítať otázky iných ľudí. Takže ak nemáte žiadne otázky, prihlásiť a čítať otázok vašich priateľov. Sú to pravdepodobne dobré otázky. A vziať prax kvízy. Boli sme dávať kvízy pre teraz sedem alebo osem roky. Sú to všetci on-line. Budúce otázky sú podobné na staré otázky. To je, ako sme sa urobiť z nich. Kvíz ešte neexistuje. Nikto z nás to videl. Ale to bude vyzerať predchádzajúce kvízy. Z tohto preskúmania relácii, to nie je vyčerpávajúci zoznam tém. Nemôžete len zúčastniť tejto a potom byť dokonale pripravený na kvíz. V opačnom prípade by to nemalo byť že veľká časť kvízu. A to je tiež nemusí byť nutne všetko, čo potrebujete vedieť o všetkých vzhľadom k téme. Je určený pre vás vystaviť veci Prebrali sme, vás upozorní na to, čo sme vzťahuje, a spôsob, ktoré sa vzťahuje. Ale budete musieť ísť ešte ďalej a hlbšie, keď budete študovať na double-check že viete všetko o nejaký daný tému a že ste vyplnil všetky rohy, ktoré boli na ktoré sa vzťahuje prednáške. Kvíz poznámky povie, aby ste šli do poznámky pisár hodinky prednáška videa. To je dobrý spôsob, ako sa uistiť, že ste pokryté všetky svoje základne. Takže, ako začať, keď som to šmykľavky, snažil som sa dať, kde som zistil, informácie. Takže pre File I / O, napríklad, týždeň 7, Pondelkové prednáška, a zaslali § 6 a problém Set všetci majú Informácie o súbore Aj / O. Urobil som u každej témy. Takže tie titul šmykľavky môže byť užitočné pre vás. Takže tu máme File Aj / O. Pamätajte si, že v Problém Set 5, použili sme fopen, fclose, fwrite, fread, a fseek. Po obnovení 30ish JPEG a čo zmenšené a zmätený s bitmapy, mali by ste byť docela oboznámení s týmito funkciami a ako fungujú. Ak ste už oboznámení, určite skontrolovať je. A uistite sa, že ste pochopili, čo rôzne argumenty, keď sú používané. Ale bežné chyby súboru súvisiacich môžete byť požiadaní o - No, ak ste zabudli skontrolovať, či fopen skutočne pracoval predtým, než idete upraviť súbor. To by mohlo byť zlé. Ak ste zabudli fclose súbor že ste fopened, to je podobné pretečeniu pamäte. To je dosť zlý. A zabudol skontrolovať, či ste došli na koniec súboru pred vami začnite písať k nej. Takže, ak povieš, hej, ja som na koniec súboru. Daj mi 5 viac bajtov. No, to asi nebude pracovať tak, ako očakávate. To je naozaj to pre File I / O, pretože sme tak veľa z toho sa problém nastaviť. Takže ak ste pochopil, čo sa deje v probléme Sada 5, pamätať bitmats a JPEG, potom ste pravdepodobne všetky sada pre súbor I / O. Ak je to trochu nejasný, určite prečítať tento problém nastaviť a súvisiaci materiál. Štruktúry boli témou, ktoré boli na Hranice medzi Quiz 0 a 1 Quiz. Nie úplne vykonať rez pre Quiz 0. Takže určite sa na Quiz 1, 7. týždeň, v pondelok. Čo je struct? Tu vám ukážeme struct. Je to ako nového typu. Je to ako kontajner pre viac polí. V tomto prípade sme vyhlásený struct študent, ktorý má dve polia - reťazec, ktorý sme volať mená a int, že voláte veku. Takže keď som sa prejsť okolo študentov alebo Aj zmeniť študentov, budem môcť prístup k ich mená a ich vek. Poďme sa pozrieť na niektoré kódu, ktorý. Tu vidíme, že som vyhlásil, študent s, rovnako ako Prehlasujem, všetky premenné - int x, int y, et cetera. Tu je študentka s Začne sa nič v jeho poli. Takže poďme nastaviť je. Môžete nastaviť pole struct s bodkou. Tak som povedal, tu to s.name = RJ. A s.age = 21. Môžete tiež aktualizovať polia Rovnakým spôsobom by ste aktualizovať hodnota premennej. Tak som chcel zmeniť svoje meno z RJ sa žiadne obdobie do rj hláskoval správna cesta. Bolo by s.name = RJ, rovnaký ako to povedal pôvodne. A potom ich môžete otvoriť. Takže sme ich nastaviť. Aktualizovali sme ich. Môžete tiež prístup k nim vo veľmi rovnakým spôsobom. Tak tu som vytlačiť Rj Je 21 rokov. A ja prístupu týchto hodnôt s s.name a s.age. Tak to je prístup structs s tečkové notáciu. Jo, otázka? DIVÁKOV: Je tu dôvod, prečo na predchádzajúcu snímku, ktorý ste dal študent na hornom riadku, ako typedef struct študent a potom študent na konci? Rj AQUINO: Takže otázka je, na Tento snímok, sme zvyčajne vidieť typedef struct uzol a potom pole struct a potom uzol slovo. A ako to, že tu som nepovedal, typedef struct študent a potom pole struct a potom študenta? Dôvodom je, že nemusíte pristupovať vnútri struct. Takže je to v poriadku nechať bez mena. Nemôžem len tak odísť ako anonymný struct. Dôvod, prečo sme to pre spojových zoznamov a veci je, že vo vnútri budete potrebovať odkazovať struct uzly hviezdu. Takže struct musí mať názov, takže môžete pristupovať neskôr. Je to maličkosť. Ale budete zvyčajne vidieť typedef struct zložené zátvorky, ak nepotrebujete Názov a typedef struct niektoré názov nasleduje v zložených zátvorkách, ak bude Potrebujem meno. Tak to je dobrá otázka. A v tomto bode, máme tendenciu meniť structs a prejsť okolo structs podľa referencie, nie podľa hodnoty. Takže sme si len prejsť okolo odkazy na structs miesto dookola štruktúr sami. Takže veľmi často bude použitie, v tomto prípade, študent, * alebo uzol struct * alebo uzol * miesto so študentmi alebo uzlov. Tak tu som povedal, OK, premenná ptr bude adresa s. Bude to byť ukazovateľ študentovi R. J. Takže sa môžeme dostať na tie oblasti, rovnako ako my dostať nič. Po prvé, číslo odkazu ukazovateľ dostať struct. To je * ptr, a potom bodka a potom veku. Takže pre prístup k poľu, a ja som aktualizovať je teraz až 22, z dôvodu, poďme povedzme, že to bola moja narodeniny. K dispozícii je syntaxe skratky pomocou šípky tu. Takže ptr šípka vek je len rovnako ako ptr.age *. Teraz, to je niečo, čo budete mať zapamätať a pamätať si. Použili ste to veľa pset6, pravopisu pset. Ale to je vlastne to, čo sa deje na pod kapotou. Je to dereferencing ukazovateľ a potom ho prístupu. Otázka? DIVÁKOV: [nepočuteľné]. Rj AQUINO: Tak prečo sme pomocou ukazovatele ako štruktúr miesto štruktúr sami? Dôvodom by bolo, keby ste okolo struct funkciu, budete pravdepodobne chcete prejsť okolo len 4 alebo tak bajtov, ktoré predstavujú ukazovatele, ako Na rozdiel od potenciálne 30 alebo 40 bajtov, ktoré sú struct. Takže okolo niečo na funkciu je jednoduchšie, keď to je menšia krátka. Otázka? DIVÁKOV: Možno ste spomenul na začiatku, ale sú tam ďalšie snímky až na [nepočuteľný]? Rj AQUINO: Tieto zábery budú po zasadnutí preskúmaní. Budeme ich zverejňovať na internetových stránkach. Tak pohybujúce sa a pohybujúce sa mierne rýchlejšie, budeme hovoriť o údajoch štruktúry. Existuje veľa. Zaoberali sme veľa z nich. Tu je to, čo by ste mali pochopiť, o dátovej štruktúre. Mali by ste naozaj pochopiť, na vysokej úrovni to, čo každá štruktúra je. Môžete mi vysvetliť, v angličtine do svojho priateľ, ktorý neprijal CS50, ako budeme organizovať naše dáta a prečo my by sme používať niečo týmto spôsobom? To je vec jedna. Thing dva, pochopiť, realizácie. Tak, ako používať tieto veci v C. A pôjdeme na to. A potom, čo tri by vedieť, beh lehoty a obmedzenia rôzne štruktúry, ktoré používate. Takže chápem, prečo by ste použiť hash tabuľky namiesto poľa. Vedieť, ako rýchlo, v priemere, prístup hash tabuľky je. Pochopiť, aké operácie sú rýchle na spájať zoznam, ale pomaly na poliach a vice versa. Tak, aby pochopili, že budete musieť pochopiť, Big-O notácie len vedieť, ako hovoriť o nich druhy vecí. A budeme o tom hovoriť. Takže prvá vec, súvisí zoznamy. Tu je na vysokej úrovni obrázok prepojeného zoznamu. Ukážeme to v triede. Máme zvyčajne majú 10 ľudí stojaci na javisku. Ale máme rad uzlov, kde každý uzol má určitú hodnotu a ukazovateľ jeho ďalšiu hodnotu. Takže sa dostať z jedného uzla do druhého, môžete len povedať, daj mi ďalší uzol. Máte tento uzol. Daj mi ďalší uzol. Máte tento uzol. Daj mi ďalší uzol a tak ďalej kým je uzol nie je vľavo. Takže aj naďalej hovoriť o tom, je na vysokej úrovni. Je to veľmi jednoduché vložiť veci do prepojeného zoznamu. Ak sa nechcete starať o poradí, stačí navštíviť hneď na začiatku. To je časová konštanta. Ale je to ťažké nájsť hodnotu. Ak sa snažíte požiadať, je sedem v mojom zozname? Musíte prejsť každý jediná hodnota. Je to sedem? Je to sedem? Je to sedem? Je to sedem? Znova a znova. A to je O (n). Takže pri štúdiu na kvíz, porovnať to s poľami. Je to v poriadku? Svetla sa dim. OK. Ak je prepojený zoznam lepší? Keď je pole lepší? Takže poďme sa pozrieť na niektoré kódu. Tu je potenciál uzla. Je to struct. Má int n, ktorý bude naše hodnoty. A to je uzol struct * ďalšie, ktoré je náš ukazovateľ na ďalší uzol. Takže tu môžeme vidieť, že sme sa stalo aby dali int v našom uzla. Ale keby to bolo spojené zoznam char hviezdy alebo spájať zoznam plavákov, sme úplne to mohol urobiť taky. Zapamätať si ma na pset6, pravdepodobne ste mal spájať zoznam char hviezd alebo len statické char pole. Pozrime sa tu na operáciu. Takže chceme vložiť nový n do nášho prepojeného zoznamu. Začneme s hlavou ukazovateľ, ktorý je ukazovateľ na tento uzol, ktorý má hodnota n a ďalšie o ukazovateľ, ktorý poukazuje na tento uzol je hodnota n, a ďalší z null, pretože je to posledné uzol. Takže v záujme času, budem dať všetky kódu na obrazovke. A budeme chodiť cez neho pár riadkov naraz. Tak tu je kód. Dúfam, že je to čitateľné. Prvá vec, ktorú robíme, je sme malloc nový uzol. Tak to je ukazovateľ na nový uzol, ktorý nie je úplne nič nastaviť sa v ňom ešte. Skontrolujte sme, aby sa uistil, že nový uzol nie je null. V opačnom prípade sa musíme vzdať. Takže, čo sa uistíte, že sme teraz nastaviť hodnoty v uzle. Takže sme dali nový n do nášho n poľa. A sme si stanovili ďalšie ukazovatele poukazujú na pôvodná hlava, takže môžeme Teraz sa vkladá tento uzla do nášho zoznamu. Nakoniec, máme globálne bod hlavy na našom novom uzle, takže ak by sme mali začína na hlave, by mali byť v tomto nový prvý uzol miesto starý prvý uzol. A keď sa táto funkcia ukončí, variabilný nový uzol neexistuje, , Pretože to bol miestne funkcie. Tak toto je stav sveta. Naše globálne hlava ukazuje na naše nové Prvý uzol, ktorý ukazuje na našu Originálne prvý uzol, ktorý body k uzlu po tom. To bolo vloženie. Dúfam, že sa pomerne jednoduché nasledovať. Ak si nie ste istí, nakresliť obrázok. Tak som zistil, že hovorí o spojové zoznamy a pri pohľade na Kód je veľmi nepomôže. Zatiaľ čo pri pohľade na obraz súvisí Zoznam umožňuje, aby som si myslel, oh, tak Mám tento uzol tu. Ale keď som aktualizovať tento ukazovateľ, to skončí odpojený. A ja som zabudol, kde Uzol ide. A kód ukončí. A budete mať viac uzlov ktoré sú odpojené. A nemusíte skončiť s Zoznam chcete. Takže ak si nakresliť obrázok a urobiť to krok za krokom, dúfajme, uvidíte správny poriadok vecí, pokiaľ ide o aktualizovať odkazy, aby sa ubezpečil , Že zoznam je spolu. Insert je pomerne jednoduché. Zložitejšie z nich bude vloženie do triedeného zoznamu. Zložitejšie funkcie je odstrániť a nájsť, takže pri pohľade cez zoznamu do uvidíme, či niečo je. Možno ste to urobil v pset6, keď dostal do hash tabuľky a ste povedal, dobre, je slovo jablko v mojom Google zoznamu? Takže ste už urobili. Ale určite, osviežiť pamäť a pokúsiť sa reimplement find a reimplement odstrániť pre spájať zoznam. Fun strane poznámka, tam je tiež dvojnásobne-spojený zoznamy, kde máte ukazovatele, ktoré ukazujú dopredu aj dozadu, takže môžete ísť na ďalší uzol a na predchádzajúcu uzol. A tam bola otázka, na minulý rok test tohto typu, hovorí o dvojito viazané zoznamy. Teraz, to je štruktúra, ktorá ste pomerne oboznámení s, pretože väčšina z vás pravdepodobne použili na pset6. Tu je jeden, ktorý je trochu menej známe. Ako vedľajší poznámku, myslím, že kvíz 1 je predovšetkým ťažšie ako kvíz 0, pretože veci, čo robíte, budete neurobili toľko. Ak chcete dať, že inú cestu, pre Quiz 0, ste napísal veľa C. A spýtal sa vám o C. Pre Quiz 1, budeme sa vás opýtať PHP a JavaScript, ktoré nenapísal toľko. Chystáme sa vás opýtať na C-kódu, ktoré ste nenapísal toľko, Tento moderný C materiál. Tak určite, cvičiť čo sme hovorí v prednáške, ktorú nutne robiť na problém nastaviť. Keď o tom hovoríme, ste nenapísal zásobník na problém nastaviť. Ale to bolo v prednáške. Tu je na vysokej úrovni obrázok komíny, ktoré vám ukážeme každý rok. Je to hromada zásobníkov v Mather jedáleň. Na vysokej úrovni, komíny sú posledné in, first out dátové štruktúry. To znamená, že budete dať veci do - 1, 3, 7, 12, 14, 0 negatívny. Jedna vec, ktorú som nemohol mať povedané - negatívny 3, 0. Môžete dať všetky tieto veci palcov A posledný, kto si dať v je prvá ten, ktorý sa chystá vyjsť. Takže máte dve operácie - tlačiť a pop. Všetci uvedení v tom, že som bol ukázal ako to je tlak. A potom, keď som sa dostať do chytiť niečo, alebo dostať na vrchol chytiť niečo, to je pop. Takže budeme realizovať komíny. A ukázal sa im v prednáške pomocou matice. Ale vy ste mohli robiť pomocou prepojených zoznamov. Stack je koncepčné údajov štruktúra, nie ako jedno špecifické pre implementáciu. Takže to, čo by to vyzerať? To bude vyzerať tak trochu ako to. Mal by si mať veľkosť celé číslo. A budeš mať celý rad hodnôt, ktoré voláme zásobníky, pretože to je čo obraz bol pre us - int zásobníky - a potom niektoré maximálna kapacita. Takže to, čo by sa tlačiť vyzerať? No, ak máme zásobníka s, potom stlačte niečo na s, dostali by sme sa veľkosť S. A že by sa ďalšie otvorené miesto nášho poľa. Takže ak máme v našom zásobníku tri veci, potom zásobníky 3 bude ďalší otvorené miesto, pretože 0, 1, a 2 ar už naplnená. Takže sme dali hodnotu do s.trays [s.size], tretie miesto. A potom sme sa zvýšiť s.size povedať, hej, mali sme pred tri veci. Teraz máme štyri. Takže až sa nabudúce budete tlačiť, že ste dám niečo do 4. Alebo sa nabudúce budete pop, budete pozrieť sa na 3. miesto 4 alebo čokoľvek iného. A potom sa vrátime pravda povedzme, hej, sme uspeli. To fungovalo. Ako pravidlo, ak je funkcia, ktorá je Predpokladá sa vráti hodnotu true alebo false vždy vracia hodnotu true, môžete urobil niečo zlé. Tak to funguje? No, to funguje na 1, a 2 a 3, a 4, a päť. Ale povedzme, že som sa do mojej schopnosti. Ja som potom narazíte na problém, pretože ak veľkosť je rovnaká ako kapacita, som Teraz sa snaží dať niečo do pole, kde nemám priestor. Tak krátka kontrola opraviť to. Ak KAPACITY s.size ==, vráti false. Inak, ísť a robiť to, čo sme urobili. Tak čo iné by sme mohli požiadať o pre komíny? Čo ďalšie by ste mali študovať? Čo ďalšie by ste mali cvičiť? No, vykonávanie pop. Už sme urobili tlak. Urobím to. Vykonávanie non-array, kde môžete použiť spojový zoznam, možno. Implementácia non-int. Tu Urobili sme ints. Ale mohlo to byť plaváky. Mohol som byť reťazca. Mohlo by to byť char hviezdy. Pozrite sa na posledných kvízy pre druhy otázky sme požiadali o komíny. Ja poviem, že sme prebrali komíny okolo rovnako ako Prebrali sme im minulých rokoch. Takže kvíz otázky by byť dobré znamenie. Do budúcna ešte rýchlejšie, fronty. Sú ako komíny. Ale oni sú prvý dnu, prvý von. Ak ste Briti, slovo fronta Asi sa veľa zmysel pre vás. V opačnom prípade môžete mať Počul o ňom ako čiara. Pracujú ako linky v obchode Apple. Prvá osoba, ktorá má ukázať na 03:00 v dopoludňajších hodinách, je prvou osoba kúpiť jeho iPad. Takže máme dve operácie - enqueue a dequeue. Enqueue dá niekto v rade. Dequeue ťahá prvý osoba mimo linku. Opäť môžeme realizovať to s celou radou. Takže to, čo je struct nám ukázal na prednáške? Bolo to jedno. Opäť platí, že čísla. Opäť platí, že veľkosť a to nová vec vpredu. Prečo je tam niečo, čo nazýva front? Je to index ďalšie prvok dequeue. Je to len interne sledovanie ten prvý sa ukázať, takže sme ju vytiahnuť, keď je treba. Určite sa pozri na skriptá a skúste realizovať Zaradí a Dequeue pri štúdiu na kvíz. Dôležité veci na zamyslenie. Obal okolo v prípade, že predné a Veľkosť skončí väčší než kapacita. Opäť platí, že ak vaša štruktúra je plná, budete mať problém. Hash tabuľky, ktoré ste predtým nevideli. Väčšina z vás pravdepodobne realizovaná ty na pset6. Je to štruktúra, ktorá si kladie za cieľ O (1) vkladanie a O časová konštanta (1) časová konštanta vyhľadávanie. V CS50, sme zaviedli toto ako pole spojových zoznamov. Kľúčovým prvkom k hash tabuľky je funkcia hash. Tak to prevedie vstup, povedzme, slovník slovo, do položky, ktorý sa bude náš index. A budeme používať tento index do nášho poľa. Tak tu je roztomilý malý obrázok od study.50.net. Hodíme všetky slová do naše hash funkcie. A funkcia hash nám hovorí, kam umiestniť tieto slová. To všetko je skvelé v krajine, kde je tu len jedno slovo pre každý slot. Ale ako si pamätáte z pset6, že sú viac než slová sloty. Takže čo sa stane, keď sa sa kolízie? Namiesto uloženia jednu hodnotu v, povedzme, hash tabuľka 3, môžete uložiť prepojeného zoznamu. A tak namiesto toho, aby melón tu, mali by ste mať spájať zoznam, kde je prvý uzol je melónu. A ďalší uzol je mačka. A tretí uzol je kolízia, poďme povedať, pretože všetky tieto slová začínajú s C. Takže väčšina z vás to urobil pre pset6. Ak ste neurobili hash tabuľky na pset6 a pokus o niečo také trie, určite skontrolovať hash tabuľky. Ak ste to na pset6, rozhodne skontrolovať hash tabuľky. A ak ste to urobil na pset6 a nie pracovať úplne v poriadku a vás mali veľa problémov s tým, rozhodne skontrolovať hash tabuľky. Takže poučenie naozaj je určite skontrolovať hash tabuľky. Drvivá menšina z vás sa snažili sa snaží o pset6. High-level obrázok. Je to niečo ako toto, kde každý uzol má rad detí, kde každý Dieťa odpovedá na list. A každý uzol tiež hovorí, Ahoj, ja som slovo. Takže v tomto prípade slovo Maxwell, ak budete postupovať podľa M A do X-W-E-L-L a potom sa po nej ešte jedna. A vy si to symbol, delta, čo sa označujú tak, že znamená to, je slovo. Takže Maxwell je slovo. Tieto delty sú celé znamenať, ktoré veci sú slová, a ktoré veci nie sú. Takže v pset6, údaje sa uložená pozdĺž všetkých našich uzlov bolo "Som slovo. "A super vec, o pokusoch sa preukazujú vkladanie a vyhľadávanie v O (dĺžka slova). Takže stačí sa dostať cez Maxwell, je to M-A-X-W-E-L-L. Takže sedem alebo osem - Nemôžem počítať - kroky, ako sa dostať na koniec a skontrolovať veci. Tak rýchle realizácie tu. Rob prešiel spojené Zoznam v jeho posmrtné. Tak to skontrolovať. Prepáčte. Prešiel trie v jeho posmrtné. Tak to skontrolovať. Ale vy ste v podstate majú každý uzol má 27 odkazy na ďalšie uzly a jeden Boolean pre som slovo. Pozrite sa Rob je po smrti, ako to vlastne je implementovaná. Naša finálna štruktúra, naše stromy a binárne vyhľadávacie stromy. Takže pri pohľade na to, tie boli pokryté naposledy 8. týždeň, v pondelok. Strom je podobný trie, okrem teba nemusí mať nutne 27 uzlov na každý bod. A nemusíte mať tieto dáta pri každom krok, ktorý znamená, či - Cesta nezáleží. Vzhľadom k tomu, trie, cesta z vrcholu na dno, Maxwell, bolo pre nás dôležité. Každý uzol, ale má viac deti, možno. Máme nejaké ďalšie slovnú zásobu. Koreň stromu je na samom vrchole. A môžeme povedať, že veľmi najspodnejšej uzly, ktoré nemajú žiadny deti sú listy. Tak ako trie, strom štruktúra uzlov. Obyčajný druh stromu, ktorý budeme hovoriť o tom, je binárny strom, kde každý uzol nemá žiadne deti, alebo jedno dieťa alebo dve deti. Takže tento obrázok tu nie je binárny strom, pretože Uzol 3 má tri deti. Ale ak by sme mali ignorovať tie, zvyšok to je binárny strom, pretože to ukazuje tú vlastnosť, že každý uzol má nula, jedna, alebo dve deti. Tak ako by sme mohli vyjadriť to v kóde? Mohli by sme mať uzol, kde má každý uzol celé číslo v nej, ako aj ako ukazovateľ do stromu na ľavej strane a ukazovateľ na strom na Dobre, takže dve deti. Ako je to užitočné? No, ak urobíme pravidlá o tom, kde sa dať uzlov, môžeme hľadanie rýchlejšie. Takže tam je pojem binárne vyhľadávanie strom, kde všetky uzly na ľavý podstrom majú menšiu hodnotu ako uzol sa pozeráme na. A všetky uzly na pravom podstrome majú väčšiu hodnotu ako je koreňový uzol. No, to vyzerá ako veľa slov. Chystám sa dať dovnútra double citácie a ukážem obrázok. Takže tu je príkladom binárny vyhľadávací strom. Vidieť, že začneme s 10. Všetko, čo na ľavej strane 10 je menšia než to. A všetko, čo k pravej strane je väčšia než to. Ale viac než to, že každý uzol v strom vyjadruje túto vlastnosť. Uzol 7 tak má 3 k vľavo a 9 na pravej strane. Takže všetci z nich sú menšie ako 10. Ale pri pohľade na práve tí, 7 má 3 až jeho ľavá a 9 po jeho pravej strane. A podobne ako na pravej, 15 má 14 na jeho ľavej strane a 50 na jeho pravej strane. Takže tri uzly tamto, 15, 14, a 50, sú tiež platné binárny strom alebo platný binárny vyhľadávací strom. A všetci sú väčšie ako 10. Takže oni môžu byť na tu. Je tu otázka? DIVÁKOV: Ako sa vysporiadať, keď máte dve sedmičky? Rj AQUINO: Jo. Ako sa vysporiadať s dvoma hodnotami ktoré sú rovnaké? Niektoré binárne vyhľadávacie stromy povedať, že vám ignorovať duplicitné, pretože cieľom je len povedať, čo som videl tieto veci tak ďaleko. Niektoré binárne vyhľadávacie stromy Dalo by sa povedať majú počítať vnútri uzla. Iní by sa povedať, že všetko, čo sa vľavo je menšia ako alebo rovný. A všetko, čo k pravej strane je väčšie ako. Záleží len na tom, čo Problém je, že ste riešenie. Takže v slovníku, napríklad, môžete by sa starať o duplikáty. Tie by sa vyhodiť. Ale nejaký iný problém, ktorý by mohol starať. DIVÁKOV: Je možné mať 1 na ľavej strane 15, ktorý je menšie ako 10? Rj AQUINO: Nie Ak tu boli 14 a 1, to by nemôže byť platný binárny vyhľadávací strom, pretože všetko, na pravej strane 10 musí byť väčšia, než to. A uvidíme prečo. Keď je v krajine vyhľadávania je mojím cieľom nájsť 14, začnem pri koreni. Tak som sa pozrieť. OK. Chystáme sa začať pri koreni. Pozrite sa na 10.. No, 14, náš cieľ, je väčší než 10. Tak to musí byť na pravej strane. To je veľmi podobné na celom telefóne Kniha vec, ktorú sme urobili, binárne hľadať tam. Ale namiesto toho, binárne vyhľadávanie v poli, sme binárne vyhľadávanie v tomto strome. Takže stále hľadáme 14. No, 14 je menšia ako 15 rokov. Takže ak je to v našom stromu, to musí byť byť v tejto oblasti tu. To musí byť na pravej strane 10 a na ľavej strane 15. A tak sme sa skontrolovať tento uzol. A yay, sme našli 14. Nebudem chodiť cez neho. Ale tu je to kód. Je to vlastne pomerne jednoduché, pretože to je rekurzívny. Čo by sme vás požiadať, aby to na kvíz? Mohli by sme vás požiadať, aby ste napísať tento kód. Mohli by sme vás požiadať, aby ste sa na túto kódu a upraviť tento kód a vysvetliť, čo to robí. Jo. Otázka? DIVÁKOV: Sú tieto snímky bude k dispozícii ako boli naposledy? Rj AQUINO: Áno. Takže tieto snímky budú určite byť zverejnené. DIVÁKOV: Sú skutočne vyslaný práve teraz na webových stránkach. David práve urobil. Rj AQUINO: Snímky sú práve teraz na webových stránkach. Budem asi urovnať pár na preklepy som si všimol a opraviť ich. Ale je tu prúd verzie na stránkach. Ostatné veci, ktoré sme vám mohli spýtať na to - napísať vložka. Napíšte iteratívny verzia rekurzívne funkcie jednoducho vám ukázal alebo hovoriť o týchto veciach, rovnako ako v body, v slovách, vo vetách. Porovnanie dobu chodu a vysvetlenie čo by ste chceli použiť binárne vyhľadávací strom pre miesto hash tabuľky, napríklad. Takže pochopenie týchto štruktúr na celkom hlbokej úrovni. Pochopiť, ako je písať, ako sa používať je, ako sa o nich hovoriť. A budete všetko nastavené. Otázka? DIVÁKOV: Keď píšete binárny vyhľadávací strom, ako si určiť, aký hodnoty aby ho ako koreň? Rj AQUINO: Takže otázka je, čo Hodnota si urobiť ako užívateľ root? V závislosti na kóde, môžete môže mať globálny koreň. Takže môžete mať pravdepodobne mal v pset6 globálnej hash tabuľky. Alebo môžete prejsť koreň v ako argument. Takže táto funkcia vyhľadávanie tu berie argument uzla *. A tak bez ohľadu na uzol vám stalo, že sa pri pohľade na je raz si liečbe ako užívateľ root, keď ho prejsť dovnútra A ja som všetko. To sú moje zábery. Ďalšia osoba môže prísť swapu v notebooku a mic. ROB BOWDEN: Myslím, že by mohol mať interpretovať túto otázku inak. Ale ja som interpretoval to ako, keď máte čísla 1, 2, a 3, ako sme sa vedieť, aby dve koreň na rozdiel od 1 alebo 3? Ak urobíme 2 koreňa, potom je to pekne 1 a 3 na ľavej a pravej. Ale ak 1 je koreň, potom je to 1 až horné, 2 vpravo, 3 vpravo. Takže v predvolenom nastavení, neviete, čo robiť koreň. A pre každú algoritmus čakáme na dať, len prvá vec, ktorú Vložka by koreň. Alebo vám by som dal binárny strom, ktorý už existuje, ktorý má koreň. Ale ostatné algoritmy existuje také, že koreň sa aktualizuje, takže ak vám skončiť v situácii, kedy je to 1, 2, 3, to by sa automaticky aktualizuje, aby aby 2 nové koreni, aby je to stále pekne vyrovnané. ANGELA LI: Cool. Ahoj, chlapci. Ja som Angela. A ja idem dokončiť našu C a potom ísť do niektorej z nášho webu technológie - HTTP, HTML, CSS a Takže prvá vec, ktorú je vyrovnávacia pamäť prepadové útoky. Takže poďme sa pozrieť na tento kód. Je to celkom jednoduché. K dispozícii je funkcia foo. A to nič nevracia. Ale to sa v ukazovateli na reťazec s názvom bar. A bude to vyhlásiť toto vyrovnávacej pamäti, čo je znak pole, ktoré má 12 slotov. A používa memcpy, ktorý je len funkcia, ktorá kopíruje z jednej adresy do iného. Tak to sa snažia kopírovať do náš vyrovnávacej pamäti od toho, čo bar je ukazuje. Takže vôbec predstavu, čo sa deje s týmto kódom? DIVÁKOV: Pokiaľ bar je dlhšia ako C, budú prepisovať. ANGELA LI: Jo, presne tak. Nemáme žiadnu záruku, že bar bude nižší ako 12 rokov. Len sme sa trochu ľubovoľné číslo 12. A my sme boli ako, dúfajme, že náš vstup užívateľa je menej než 12 znakov dlhé. Takže v ideálnom svete, ak náš vstup vždy, ako sa očakávalo, potom dostaneme niečo ako, ahoj. To je menej než 12 znakov. Jedná sa načíta do char c A potom sme sa s tým niečo urobiť. Je to naozaj nezáleží. Ale zlomyseľný človek môže robiť niečo ako je toto, kde sa dať nám všetko, čo je bar ukazuje na, to bude poukázať na tejto obrovskej pole z práve je. A to je spôsob, ako dlhšie ako 12 rokov. Takže to ísť celú cestu tu, kde návratnosť Adresa býval. Takže povedzme, že túto funkciu sa nazýva foo. Možno, že foo bol volaný iný Funkcia, ktorá bola volaná hlavné. Takže keď beží foo, je potrebné vedieť, kam sa vracať. Ak foo bol volaný nejaké funkcie vymenoval baz, musí vedieť, že je to sa vrátiť do Baz. A to je to, čo táto spiatočná adresa tu sa nám hovorí. Ale keď sme to prepísať s niektorými ďalšími adresa, v tomto prípade sa jedná o zastúpenie na adrese začiatku tejto vyrovnávacej pamäti, potom čo sa vlastne bude diať, je, že miesto návratu do Baz, ktorá vyzvala svojej funkcii, je to len ísť na prednej strane tohto kódu. A či je to tam preto, zlomyseľný hacker vole prišiel a injekčne, potom možno táto suma na to nie je v skutočnosti je. A to je vlastne len kód, ktorý prestávky počítač alebo tak niečo. Takže sa defenzívne o tomto druhu vec, budete musieť nikdy predpokladať, že vstup užívateľa je určitá množstvo znakov. Napríklad, keď ste robili pravopisu, ste povedal, že slová boli iba bude 40 znakov dlhý maximum. A to bolo dobré. Ale ak nie, potom sa budete musieť uistite sa, že len čítať 45 znaky naraz. V opačnom prípade môžete prepísať Váš vyrovnávacej pamäti. Akékoľvek otázky na to. Jo. DIVÁKOV: Mohol by si hovoriť niečo viac o nich? ANGELA LI: Ospravedlňujem sa. Áno. Divákov: mikrofón je len pre video. Budem sa snažiť a projekt. Ahoj, chlapci. Sup? Tak poďme na niekoľko vecí v CS50 knižnice, ktoré ste používali všetky semester, väčšinou získať vstup od užívateľa. Ako viete, zahrnúť CS50 knižnica tým, že len robí CS50.h, ktoré obsahuje všetky prototypy funkcie, ktoré môžete použiť, ako GetString a vezmi_int, a GetFloat, et cetera. A tam je to jeden riadok v CS50 knižnica, ktorá definuje reťazec, ktorý vy všetci vieme teraz je len char *. Ale poďme sa pozrieť na ako GetString funguje. To je veľmi skrátená verzia. Môžete vytiahnuť súbory CS50 knižnice z, myslím, manuals.CS50.net. A môžete prečítať vlastné funkcie. Ale to sa týka niektorých dôležité časti. Takže sme vytvorili nejakú vyrovnávacej pamäti sa nejakým spôsobom. A to, čo robíme, je, že sme sa o jeden znak v dobe bežne n To je miesto, kde užívateľ zadá text na konzolu. A tak budeme čítať v charakter tak dlho, kým to nie je nová vedenie a to nie je koniec súboru, ktorý je koniec štandardného vstupu. A pre každý znak, ktorý čítame v, v prípade, že postava skončí pridanie počtu znakov, ktoré sme si v, a to je viac než našej schopnosti, potom to, čo robíme, je, že sme len zmeniť veľkosť nášho vyrovnávacej pamäti tak, že je to dvakrát tak dlho. Takže znovu, to ochrana proti pufra pretečeniu útoky, pretože ste čítal v znakoch. A ak v ľubovoľnom mieste môžete prečítať v príliš mnoho, stačí rozšíriť svoje vyrovnávacej pamäti. Môžete vynásobte ju dvoma. A potom budete mať viac priestoru. V opačnom prípade stačí pridať znak do buffera. A potom, čo som čítal vo všetkých znaky, bude to zmenšiť buffer späť na normálnu veľkosť, pridať null terminátor, a potom sa vrátiť. Teraz sa poďme pozrieť na vezmi_int. Môžete vy si to? Môžem priblížiť trochu. Neviem, ako počítače fungujú. To nič. Nemôžem priblížiť správne. To je naozaj ťažké. Je mi to ľúto. Poďme sa len pozrieť na to. Takže to, čo vezmi_int robí, je to prvé čítanie v reťazci od GetString, ktoré sme realizovaný pred. A dôležitou súčasťou poznamenať, Ak je to zdieľanie, že to skončí čítanie je rovnako ako v skutočnosti reťazec, potom sa len vrátiť INT_MAX na predstavujú zlyhanie. Prečo by sme sa vrátiť INT_MAX miesto negatívneho 1 alebo 1? Nejaké nápady? DIVÁKOV: [nepočuteľné] Negatívny 1 na jedného. ANGELA LI: Jo, presne tak. Takže ty si oveľa viac pravdepodobné, že len chcú na vstupe 1 alebo záporné 1 po zobrazení výzvy pre n-té a čo nth maxes. Je to obrovský. Tie pravdepodobne nebude používať. Takže je to ako rozhodnutie o návrhu na uistite sa, že nemáte náhodou vráti chybu, alebo nechcete vrátiť 1, ktorý by mohol byť analyzovaný ako správnu odpoveď. Takže ak neexistuje linka, vrátime INT-MAX. V opačnom prípade budeme používať sscanf, ktorý je ako scanf. Ale to číta z reťazca. A máme to naformátovaní Reťazec, ktorý je% i% c A snažíme sa a zápas, ktorý sa čo užívateľ nám dal. Chceme, aby počet párových vecí na 1, čo znamená, že len Naozaj chcem, aby zodpovedali celé číslo obklopený možná biela priestor, možno nie. V tomto prípade, keď dáte do niečoho ako je bar, bar nezodpovedá vôbec, pretože tam musí byť číslo na začiatku. Takže sscan nikdy sa 0. Takže sa nemusíte vracať, že. Prípadne, ak ste vložili do niečoho ako je 1, 2, 3, A, B, C, ktorá zodpovedá ako celé číslo, ale aj znak po ňom. Takže sscanf vráti 2, čo tiež nie je ideálne. Nechcete 1, 2, 3,, B, C, že je platný int. Tak to tiež nefunguje. Ale povedať, že dať niečo ako 50 rokov. To sa bude zhodovať% i, čo znamená, že to bude mať čítať do n A teraz, n bude obsahovať číslo 50. A potom sa môžete vrátiť. V opačnom prípade budete hit Opakovať. A potom to jednoducho chodí dookola, kým dostanete správny vstup od užívateľa. Akékoľvek otázky na to? DIVÁKOV: Takže ak by ste chceli vytlačiť hodnota vezmi_int na [nepočuteľný] by to byť len číslo a max? ANGELA LI: Jo. Takže ak používate vezmi_int, mali by ste predpokladať, ktoré nechcete n-tý max do byť platný vstup, pretože budete predpokladať, že to bolo zlé. DIVÁKOV: Keby sme nemali char c a niekto dal v 1, 2, 3, Sam, by to stále pracovať pre 1, 2, 3? ANGELA LI: Myslím, že to bude fungovať. Ale nechcete 123Sam sa byť platný vstup od užívateľa. To naozaj nie je int. Takže to nie je fér analyzovať ako int. OK. V tomto prípade, poďme na internete. Takže HTTP nie je jazykom. HTTP je len súbor noriem pre ako posielať veci z klientov, že si to ty, na serveroch. To je ostatní ľudia na webe. Takže HTTP je skratka pre Hypertext Transfer Protocol. Je to srdce a duša celého pásu. Hypertext časť práve odkazuje na HTML. Prenos je klientom ako budete posielať žiadosti o servery, ktoré poskytujú odpovede. A protokol je len, ako to môžete očakávať, že server správať? A ako sa má správať tak, že si môžete zjednodušiť tento komunikačný proces? Takže požiadavky HTTP vyzerať veľmi podobne ako táto. GET je druh žiadosti. Vy ste videli požiadavky GET a požiadavky POST. To je druhá vec tam, / ja, že je to len URI alebo URL, kde sa Chcem ísť do hostiteľa. Takže táto žiadosť žiadosťou o stránky, rovnako ako www.facebook.com / ma. A to je požiadavka GET. A potom to HTTP/1.1, to je len verzia protokolu HTTP, ktorý používate. Je to takmer vždy 1.1. A potom je tu partia ďalších vecí taky. Môžete skutočne vidieť je, ak máte otvoriť konzolu, keď ste prehliadania webu. Odpovede vyzerať ďalšie podobné. Horná časť je, opäť, typ HTTP, ktorý používate nasleduje kód stavu. Takže 200 OK je všetko dopadlo. Tu je váš obsah. Váš obsah bude nasledovať. A potom vám povie, aký druh obsahu a ďalších vecí taky. Stavové kódy, existuje niekoľko dôležité tie, ktoré by ste mali vedieť. 200 OK je ako všetko, čo je zlaté. Všetko funguje. 403 Forbidden. To ste asi videli, ak ste zabudli niečo chmod správne. To znamená, že nemusíte správne oprávnenia k prístup, ktorý na serveri. Je to ako, nie, nemôžeš ju vidieť. 404 znamená, že to neexistuje. Nebol nájdený. Pravdepodobne ste už videli, že veľa. 500 Internal Server Error je zvyčajne ako niečo pokazilo na strane servera. Takže, keď sa vykonáva pset7, ak ste mali chyby PHP, mohol by si skutočne ísť na stránku a zobraziť Celá partia PHP chýb veci. Ale to nie je zvyčajne nestane, pretože webové stránky nemajú naozaj chcete povedať, prečo sa ich stránky rozbité. Najskôr iba vrátiť 500 Internal Server Error. A potom je tu 418 som kanvice. K dispozícii je celý príbeh o tom, prečo to je vec. Ale môžete prečítať o tom vo svojom voľnom čase. Je tu celá banda ostatné stavové kódy taky. Ale to sú tie, mali by ste vedieť. Takže poďme hovoriť o HTML. HTML, pamätajte, že nie je programovací jazyk. Je to značkovací jazyk. To znamená, že opisuje obsah. To vám povie, čo dokument HTML vyzerá páči, alebo nie, ako to vyzerá ale ako je to štruktúrovaná. Tak sa definuje štruktúru a sémantika webových stránok. Je to ako, to je bod. Toto je zoznam poradí. To je ako časť mojej stránky. Tu je to titul. To robí veci, ako že. To nie je štýl nič z toho, pretože že to, čo robíte v CSS. A vyzerá to, že séria z vnorené tagy. Takže použiť príklad naozaj základné HTML stránky, budete mať DOCTYPE vyhlásenie tam. Toto vyhlásenie DOCTYPE je hovorí, sme pomocou HTML5. Potom máte veľkú HTML tag. Obsahuje hlavu a telo. Vnútri hlavy, máte titul. To je to, čo sa deje v názve bar vo vašom prehliadači. Máme značku odkazu, ktorý spája v externom zoznamu štýlov. A potom máme skript, ktorý ťahá z externého JavaScriptu rovnako. A potom vo vnútri nášho tela je v skutočnosti čo sa bude zobrazené na stránke. Máme odsek a potom obrázok v tomto odseku. Toto je obraz mačiatok. Všimnite si, že obraz tag zavrie sama. Takže namiesto toho otvoru s obrazom a potom robiť ďalšie / image, môžete len tento malý lomítko tú, ktorá ju uzatvára. A tag obraz má tiež tento kľúč hodnota atribútu s názvom alt. To je alternatívny text, ktorý sa sa stane, keď budete vznášať sa nad ním. Väčšina prvkov HTML majú nejakú hodnotu kľúča veci, ktoré môžete dať to, rôzne prispôsobenie. Jo. DIVÁKOV: [nepočuteľné]. ANGELA LI: No, tak to je atribút tagu. Takže ak ste sa pomocou jQuery, mohol by si robiť vyberte image.getAttribute. A potom si môžete vyhľadať získať atribút alt. A to vám mačiatka. Ak si pamätáte formulárov v HTML, vstup prvky budú mať atribúty meno. A to je to, čo PHP používa na odosielanie žiadosti, ak sa predložené formuláre. DIVÁKOV: Spomenuli ste sa o niečo o tom, ak používate kittens.jpg alebo niečo, čo má chýbajúce súbor zložiek alebo iné súbory? ANGELA LI: Áno. Tak toto je to, čo sa nazýva relatívna cesta, pretože nedám si úplnú cestu. To je, ako keď v C, ak je to fopen nejaký súbor, ak fopen hi.txt, že hi.txt Očakáva sa, že bude v rovnakom adresár, ak to dať viac Komplex cesta. DIVÁKOV: Takže by ste mohli zadať ktorá zložka [nepočuteľný]? ANGELA LI: Jo. A môžete vyhľadať ako na to. Ale keď som sa chcel dostať von kittens.jpg z nadradeného adresára, by som si .. / Kittens.jpg. Jo. Prepáčte. Jo. Človeče, ja zabudol na otázku. Aká bola otázka? Ach, otázka znela je, kittens.jpg Očakáva sa, že bude v rovnakom adresári? A v tomto prípade to je. Ale môžete tiež dať určitú cestu tak, že to nemusí byť. Dobrý? CSS. Tak CSS, ako je HTML, nie je programovací jazyk. CSS je len rad pravidiel styling. To je skratka pre kaskádové štýly. A budete používať v spojení HTML na stránkach štýlu. Takže existujú tri spôsoby, môžete zahrnúť. Jeden spôsob, ako to urobiť, je v hlave časť vášho HTML, môžete len otvoriť tag štýl a potom držať niektoré CSS vládne tam. Je to celkom v poriadku. Jo. DIVÁKOV: Mohli by ste dať tie tagy štýl v medzi, poďme povedzme, telo a / telo. A potom by štýl iba v tele. ANGELA LI: To by si mohol. Bude to fungovať. Ale nemali by ste, pretože štýl je druh metadát, ktoré by mali ísť do vedúci dokumentu. Telo by sa skutočne obsahujú len čo sa vlastne deje, aby objaví na vašej stránke. DIVÁKOV: Takže by ste dal štýl vo vašej hlave štýl Celé webové stránky, nie? ANGELA LI: Jo. Takže uvedenie štýl tu, tieto pravidlá CSS sa bude vzťahovať na celú stranu na základe ich voliča. Takže lepší spôsob, ako to urobiť, je miesto mať značku štýlu vo vašej hlave, Máte tento odkaz na externý štýl list, ako by som vám ukázal v Predchádzajúci príklad. Čo to však je, že sa snaží, a zistí, súbor style.css a potom vytiahne ju v a používa ako štýly pre stránku. A vaše style.css by len vyzerať takto. Bolo by to len banda CSS. A napokon, je tu iný spôsob, ako môžu zahŕňať CSS, ktoré si naozaj by nemal nikdy robiť. Je to výzva inline štýl. A tak akýkoľvek HTML element môže tiež sa atribút style. A potom sa v tomto atribútu style, môžete dať pravidlá CSS. Takže v tomto prípade, čo div, že som definovanie tu, bude to majú čierne pozadie a biela farba textu. Ale nemali by ste to robiť, pretože to, čo to však je, že stavia svoje styling vnútri HTML. A ja viem, že sme hovorili o HTML je štruktúra a CSS štýl. Ak to urobíte, sa mieša ich dohromady. A to nie je moc čisté. Tak nerob to. Použitie príklad CSS, tam sme vyberte telo HTML dokument. A my na to všetko Bude Comic Sans. Tiež som neodporúčam to. Ale si to mohol urobiť. Druhé pravidlo tu, bude to vyberte prvok na Stránka s ID main. Takže bez ohľadu na HTML element, povedal som ID = Hlavné, ja dám, že 20-pixel marže a zladiť všetko, všetok text, do centra. Posledná vec, ktorú vyberie podľa CSS triedy. Takže akýkoľvek prvok na stránke, ktorá som dal trieda sekcie, budem robiť to farba svetlo modré pozadie. Jo. To je všetko, čo mám. Otázka? DIVÁKOV: Čo hashtag Pred hlavným robiť? ANGELA LI: Otázkou je, čo robí hashtag pred hlavné úlohy? V tomto prípade, hash v CSS znamená vybrať podľa ID. Takže keď som mal nejaký HTML prvok, ako je Deliť = hlavný, toto pravidlo CSS vyberá vec s ID main. A podobne, obdobie pred Sekcia je vybrať podľa CSS triedy alebo vyberte pomocou HTML triede. DIVÁKOV: Prečo je tam má pred 6 vo farbe pozadí? ANGELA LI: Jo. Takže otázka je, prečo je tam hash pred 6? To je iný ako ten hash. To znamená, že dávate hexadecimálne farby. Takže hexadecimálne farby, to len predstavuje farbu. A pamätajte RGB trojica, kedy ste na forenznú pset? To je podobné. Prvé dve číslice predstavujú koľko je v červenej farbe. Druhé dva predstavujú Ako moc zelený. A tretie predstavuje koľko modrá. A hash je to sa deje reprezentovať farby. Takže niečo z 0, 0, 0, 0, 0, 0 až F, F, F, F, F, F je platný. Je to nejaký platný farba, ktorá môže budú zobrazené vo vašom prehliadači. Otázka? DIVÁKOV: Aký je rozdiel medzi použitie podľa ID a triedy? ANGELA LI: Otázkou je, čo je rozdiel medzi použitie podľa ID a triedy? Môžete mať iba jeden prvok HTML dokument, ktorý má danú ID. Takže len jedna vec, na mojej stránke je povolené mať ID main. Tak ho použiť pre toto je hlavička. To je navigácia. Toto je pätu. Triedy sú odlišné, pretože môžete platí tried ako mnoho prvkov HTML ako budete chcieť. Tak napríklad, robil som triedny časť, pretože tam je asi viac ako jeden časť na mojej strane. Jenom dovolené mať toľko prvky na stránke sa rovnakým trieda, ale iba jeden s určitým ID. DIVÁKOV: Tak bodka predstavuje trieda? ANGELA LI: Jo. Bodka reprezentuje triedu. V pohode. To je všetko, čo mám, chlapci. Ďakujem. [APPLAUSE] ZAMYLA CHAN: Ahoj, všetci. Som Zamyla. Budem sa tu zaoberať PHP, MVC a SQL dnes. Veľa materiálu, ktorý budem krytina bude do značnej miery priamo z pset7. Dobrá. Takže to, čo je PHP? PHP je skratka pre PHP Hypertext Preprocessor. Takže to, samo o sebe, je rekurzívny meno, ktoré je celkom v pohode. PHP je server-side skriptovací jazyk, a poskytuje backend a logické opory na našich webových stránkach. Takže Angela hovorila veľa o HTML a CSS, ktoré bude štruktúra na internetových stránkach. Ale čo keď chcete zmeniť obsah dynamicky, alebo v prípade, že sa líši založené na užívateľa alebo určitých podmienok? To je miesto, kde PHP vypovedaciu Teraz, typicky, PHP môže trvať niekoľko menej čiary na vykonanie to isté v C. To preto, že PHP spracováva pamäti riadenie pre programátora, na rozdiel od nás majú na malloc zadarmo, podobné veci. Ale pretože PHP je interpretačné jazyk, typicky, to by mohlo urobiť trochu pomalšie ako C, čo je zostavený jazyk. Pretože ideme programovanie jazyky, poďme sa pozrieť na to, ako Syntaxe sa líšia. Buďme veľmi opatrní, aby pliesť s tým. Takže sa syntaxou PHP, či už sú vloženie vášho PHP vnútri HTML súboru alebo do súboru. php sám, vy je potrebné priložiť kód v otvorenej PHP a uzavreté PHP tagy ako nasleduje, rovnako ako na obrazovke. Premenné v PHP. Každý premenná bude začínať $ Znak nasledovaný názvom Váš variabilný. Teraz, premenné v PHP sú voľne zadali, čo znamená, že nepotrebujete uviesť, aký typ dát je, keď ste ju deklarovať. Avšak, to neznamená, že nemajú všetky typy vôbec. Takže keď deklarujete premennú a stačí nastaviť je rovná 1, a potom prehlasujem, ďalšie premennú, nastavte ju na hodnotu "1", a potom ešte jeden 1,0, dobre, v závislosti od typu rovnosti Prevádzkovatelia používam, keď chcem porovnať všetkých typov, potom že bude rovnaká. Ale ak chcem, aby sa ubezpečil, že typy sú si rovní, PHP môže ešte urobiť že, aj keď sme nenaznačujú aký to je, keď sme najprv vytvoriť súbor. Teraz, v PHP, aj keď sme prepínanie z programovania jazyky od C, máme stále naše verný, ak podmienka, rovnako ako to. Stále máme while, len ako je táto, kde si dať do svojho stav a potom telo slučky. A potom máme aj pre sláčiky, ktorý zvyčajne vyzerá takto. Takže keď som chcel iterovat cez všetky deväť psets a predložiť a volanie funkcie submitPset, potom môžem urobiť tu, ktoré vy všetci vykonáva týmto bodom. Gratulujeme, mimochodom. Pre kamery, ľudia povedal, ďakujem. Teraz, ak ste nechceli, aby stačí použiť tento pre sláčiky, potom PHP vlastne tiež sa veci tzv foreach slučky. Takže keď som mal rad čísel, 0 až 8, uložené v poli psets, potom by som mohol mať slučky foreach, ktorý iterácia cez každé číslo v psets. A potom by som mohol zavolať rovnaké fungovať osemkrát, rovnako ako som to urobil predtým. Takže to pre každú slučku je pekné, pretože nemusíte sa, ak neviete, Presná dĺžka poľa, ktoré sa, potom pomocou tejto slučky foreach sa o to postará za vás. Tak som urobil psets ako pole. Poďme sa pozrieť na to. Polia v PHP sú zvyčajne rovnaké ako tie, ktoré sme mali v jazyku C, kde môžete deklarovať pole. A tu, môžem vyhlásiť prázdne pole a potom vybudovať dynamicky pomocou Indexy sú celé čísla. Takže indexom 0, idem uložiť celé číslo 1, s názvom. Na indexe 1 na mojom zozname, idem pre uloženie hodnoty 2. A na tretí indexe, ale druhé číslo, budem uložiť číslo 12. Teraz, to je v poriadku v tom, že funguje to dobre funguje. Ale hovoria, že to záleží na mne čo každý index má. Pre mňa, index 0 znamená, ako Mnoho mačiek mám. A index 1 znamená, ako mnoho sovy mám. A budúci znamená, koľko psov. No, potom to určiť, že namiesto mať na pamäti, 0 sa týka mačky a 1 až sovy, môžem použiť asociatívne pole, čo znamená, že miesto čísel sú moje indexov, Môžem skutočne používať reťazca. Tak to je celkom užitočné. A vy ste v podstate len vymeniť celé čísla s reťazcami. A tu to máte asociatívne pole. Jo. DIVÁKOV: Je tu dôvod, prečo tam je podčiarkovník za sekundu časť, pretože môj zoznam má pole. ZAMYLA CHAN: Otázka bola, je existuje dôvod, prečo tam je podčiarkovník medzi mojou a zoznamu? Nie. To je len, ako som pomenovanie môj variabilný. DIVÁKOV: Na prvý linka, to je jedno slovo. ZAMYLA CHAN: Ospravedlňujem sa. Urobím to. Jo. Mali by byť rovnaký názov premennej. Dobrý úlovok. OK. Takže poďme sa presunúť na povrázku zreťazenie. Keby som chcel, aby sa dva reťazce, potom som ich zřetězit s operátorom bodka. Takže keď mám Milo ako prvé mená a Banana ako priezvisko, a potom zreťazenie s operátorom bodky a potom uvedenie medzeru medzi bude reťazec, ktorý obsahuje Milo Banana, ktorý som potom echo, alebo skôr vytlačiť. Keď už hovoríme o echo, hovorme o málo užitočná - Oops. Je mi to ľúto. Niekoľko užitočných PHP funkcií. Takže máme - technické ťažkosti. Jedna sekunda. Poslal som ho. Problémy PowerPoint. A sme späť s PHP funkciou. A sme späť s PHP funkciou. Takže sme sa vyžadujú funkcie, kde ak odovzdáte do súboru, tu je práve príklad súboru, ktorý Mohol by som prejsť dovnútra Tak to bude zahŕňať PHP kód z tohto súboru, ktorý som naznačovať. A to bude hodnotiť, či palcov Potom máme tiež echo, ktoré je rovnobežná s printf. Koniec je rovnobežná s zlomiť, ktorý ukončí blok kód, ktorý ste palcov A potom prázdne kontroluje, či daný Premenná je ako null alebo nula alebo čo sa stotožňuje s tým, že prázdny. Jo. DIVÁKOV: Pre reťazec zreťazenie dot jeden prevádzkovateľ, v PHP, je to, že rovnako ako v JavaScripte, kde je to pomocou bodka pre zreťazenie znamená znamienko plus? Takže pre celé meno, môžete mať dolár podpísať prvú + a + vydrží? ZAMYLA CHAN: Jo. Takže otázkou bolo, či v PHP sme môžete použiť rovnaké zreťazenie ako v JavaScriptu s plusy. A Jozef sa dostať do toho neskôr. Myslím, že má snímka na to. V skutočnosti, je to iné. Takže v JavaScripte, budete musieť použiť a zřetězit reťazca. A v PHP, musíte pomocou operátora bodka. Takže sú rozdielne. OK. Takže teraz, že sme prebrali všetko Tento PHP, kde to naozaj príde vhod? No, to príde vhod, keď sme možno kombinovať s naším HTML. Takže naše PHP nám dá silu, aby zmeniť danej stránky v obsahu HTML pred jeho zaťaženie. A tak na základe rôznych podmienok, zvyčajne špecifické pre užívateľa, ktorý je prihlásený, môžeme zobraziť rôzne informácie. Lindo, si na niečo spýtať? DIVÁKOV: Môžete zřetězit celé číslo i? ZAMYLA CHAN: Áno, môžete. Takže otázka je, ak je to možné zřetězit celé čísla alebo iné variable.s teraz prejdeme k MVC, ktoré je vzor, ​​ktorý sa používa v pset7 a mnoho webové dizajnérmi použiť pre organizovanie kódu v súboroch na svojich internetových stránkach. M je skratka pre model. A v podstate, model súbory sa bude zaoberať sa interakcie s databázou. Zobraziť súbory, ktoré sa vzťahujú k estetika webových stránkach. A rukoväte Controller užívateľské požiadavky, analyzovať údaje, robí inú logiku. V pset7, sme spojili model a regulátor. A my len volal ich regulátory a dať je vo verejnom zozname. A zobrazenie súborov, môžeme použiť ako šablóny v adresári šablón. Takže toto schéma tu tiež predstavuje že rovnaký druh delenia sa modelu a regulátora vo fialovej tu na ľavej strane a pohľad na pravej strane. Tak toto je schéma, ktoré niektorí z vás Možno ste videli v úradné hodiny alebo diagramy, ktoré sme boli kreslenie ako vy sa zisťuje z vášho pset. Tak tu, v danom regulátora, model regulátor, máme funkcie ktoré sa vzťahujú k dotazu SQL databázy, vykonávanie PHP logiku. Možno by ste vyhľadať sklad Yahoo! Financie. Alebo možno, len by ste skontrolovať, zistiť, či používateľ podal tvorí už pred tým, než navštívil vaše stránky. A potom by ste mali urobiť tvorí tu. Potom, čo bolo predložené, že forma užívateľom, akcia, ktorá bola zadanú vo formulári v HTML tagu by uviesť stránku, ktorá je tieto dáta vráti do. Takže všetky tie informácie by poslal späť do regulátora. Potom by ste asi robiť trochu viac logika na to a možno vykonať niekoľko viac dotazov v SQL databáze a potom, konečne, prísť s pekne balené sada informácií, ktoré by odovzdať do nejakej inej šablóny , Ktorá sa zobrazí informácia. A teraz, ako sme sa vlastne balíček že informácie sa? No, my máme funkciu zvanú Render , Ktorá bola v súbore functions.php v pset7, kde môžete prejsť v mene súbor, názov šablóny. A potom si tiež prejsť v asociatívne pole. A tak, že asociatívne pole predstavuje rôzne informácie ktoré chcete odovzdať palcov A teraz, čo sa deje, že je konštantná v Tieto príklady je, že kľúče alebo, skôr, kľúče na asociatívne polia, ktoré sú, čo sa deje, aby sa Očakáva sa, že konštantná šablónou, pretože vie, že potrebuje niečo, čo nazýva správu alebo tzv meno. A potom veci na pravej strane, skutočné hodnoty, takže v tomto prípade, ktorý je hodný chlapec a Milo, tie idú byť hodnoty, ktoré sa menia že regulátor sa mení pri každom alebo s ohľadom na konkrétne podmienky a prejde, že palcov Takže tu v šablónach, vidíme, že sme používate špeciálne znaky HTML, ktorý práve v podstate znamená, že chceme dostať peer reťazec, ktorý užívateľ dať dovnútra A chceme nahradiť správa tu. Takže keď sme vlastne zobrazenie súbor, špecifický informácie sú odovzdávané palcov Všimnite si, že kľúč, ako urobiť práca je že kľúče asociatívne pole, ktoré štát premenná mená tu. A tak sa hodnoty tohto kľúča v asociatívne pole sa potom stáva hodnota premennej. Teraz, poďme sa presunúť na SQL. To je skratka pre Structured Query Language. A tak je to len programovanie jazyk navrhnutý pre správu databáz. A to prišlo vhod pre nás naše pset7 web financie. V podstate je to len jednoduchý spôsob, ako sledovanie a správu objektov a tabuliek a prepojiť ich navzájom. A teraz, myslím, že SQL databázy v podstate ako súbor programu Excel, možno, s viacerými kartami listov. Takže by ste mohli mať viac tabuliek, Možno, že navzájom prepojené. A podobne ako v Exceli, máme veľa funkcie, ktoré chceme. Napríklad, môžeme zvoliť niektoré riadky. Môžeme vložiť informácie. Môžeme aktualizovať riadky. A môžeme tiež vymazať veci. SQL vybrať diela výberom riadkov alebo rad špecifikovaných stĺpcov z databázy, ktoré zodpovedajú určité Kritériá, ktoré ste uviesť. Takže tu, keď vidím select * from kúzelníci, kde dom = Bystrohlav, potom Ja výberu *, čo znamená, že som výber každý stĺpec v tom, že riadok z tabuľky sprievodcov, ale iba vtedy, ak Dom stĺpec rovná Bystrohlavu. Teraz, to je čistá alebo SQL. Takže keď som išiel do phpMyAdmin, ktorý je špecifický spôsob, ktorý používame pre správu Naše databázy SQL, potom by som mohol vložiť že na webové stránky phpMyAdmin. A že by sa spustiť. Ale my vlastne chcete robiť že na strane PHP. Tak ako to urobíme? No, budeme používať funkciu dotazu, ktorý v podstate vykonáva SQL dotazu. Používanie? ako zástupný znak, môžeme prejsť v niektorých Hodnoty našej reťazec, ktorý sme chcete nahradiť. Tak snáď som ukladanie iný Hodnoty v curr_house, ktoré predstavuje aktuálne domu že som prechádzal. Tak som sa prejsť, že ako zástupný symbol s otáznikom. A potom budem v podstate vykonať to isté, čo som robil predtým, s výnimkou teraz som v PHP. A dotaz vráti asociatívne pole. A budem ukladať v radoch. Teraz, dotaz môže vždy zlyhať. Možno, že dotaz SQL nemožno spustiť pretože tabuľka neexistuje. Alebo, stĺpec neexistovala. Niečo je zle. No, v tom prípade, že budete chcieť, aby sa Uistite sa, že ste skontrolovať, či dotaz vrátil false. A to pomocou triple rovná prevádzka tam. A potom som sa ospravedlniť, čo je ďalší Funkcie CS50, prechádzajúcej v správe. A keď sa pozriete na ospravedlňujeme, všetky ňou naozaj je činí apology.php. Jo. DIVÁKOV: Mohli by ste vysvetliť, čo to hviezda robí medzi select a od? ZAMYLA CHAN: Jo, určite. Takže hviezda medzi select a od Znamená to, že chcem vybrať celý Celý rad z môjho stola. Mohol som uviedla vyberte meno, rok, dom. A ja by som len dostať tie tri Stĺpce v mojom stole. Ale keď poviem SELECT *, potom budem dostať všetko, čo v tomto stĺpci. Potom som ťa ísť v prvej chrbte. DIVÁKOV: Takže je to stále v SQL, nie? Je to otázka, alebo je to PHP? ZAMYLA CHAN: Sme v dotaze. Takže je to v PHP. Takže pomocou PHP funkcie dotazu na, máme vykonávanie SQL dotazu. DIVÁKOV: Je niečo v SQL case-sensitive, ako je výber alebo kúzelníci, alebo dom? ZAMYLA CHAN: Je niečo v SQL case-sensitive? Verím, že áno. Verím, že SELECT a FROM A kde sú case-sensitive. Nie? ROB BOWDEN: Takže, je to naopak. Názvy stĺpcov a tabuľky prostriedky, všetky z nich sú case-sensitive. Avšak niektoré z MySQL kľúčových slov, ako je SELECT, FROM a WHERE, ktoré nie sú case-sensitive. OK. Takže opak toho, čo som povedal. Takže všetky kľúčové slová MySQL - vyberte, z, kde - ty nie sú citlivé na veľkosť písmen. Ale všetko ostatné je. OK. Nachádzate sa v prednej časti. DIVÁKOV: Keď som $ riadky, pokiaľ ide o viac ako jeden riadok, znamená to, že je len sa stane asociatívne pole? ZAMYLA CHAN: Takže otázka je, či riadky má viac než jeden riadok v nej, sa sa stane asociatívne pole? Tak to je pole asociatívne polia už. Takže aj keď je tam len jeden riadok sa vrátil, potom by ste museli ísť k index 0 tohto výsledku. A potom budeš mať ten prvý riadok. Áno, Belinda? DIVÁKOV: Ak použijete ===, Je to jediný prípad? Alebo sú tam ďalší? ZAMYLA CHAN: Takže v tomto prípade === je porovnanie u všetkých typov. Prepáčte. === Je porovnanie , Ktorý porovnáva typy. A == porovnáva u všetkých typov. DIVÁKOV: Môžete mi vysvetliť, čo riadky je v tejto situácii? Je to riadok dát? ZAMYLA CHAN: V ďalšiu snímku, som bude vysvetľovať, čo riadky je. Takže ak vám nevadí, že drží off na to. A potom sa do chrbta? DIVÁKOV: Pre funkcie, ako je dotaz, činí a ospravedlniť [nepočuteľný]? ZAMYLA CHAN: Otázkou bolo, či Tieto funkcie - dotaz, ospravedlňujem sa, a činí - sú spoločné pre PHP. To sú tie, ktoré CS50 písal pre pset7. A Jay? DIVÁKOV: Keď potrebujete povedať $ _SESSION, Je to, že len v ID? Alebo by ste mohli povedať, že tu? ZAMYLA CHAN: Otázkou teda bolo, keď používame $ _SESSION, že bol špecifický globálna premenná, ktorá sme použili. Tu je táto premenná bude byť lokálna našej funkcie. Takže sme jednoducho vyhlásení Nová premenná. DIVÁKOV: Ako sa ospravedlniť realizovaný? ZAMYLA CHAN: Otázka bola, ako sa ospravedlniť realizovaný? A myslím, že je to vlastne celkom dobré praxe pre vy ísť do časť functions.php a pozrieť sa na Ospravedlňujem sa a uvidíte, ako by ste mohli mať urobiť sami. Tak som sa môže nechať na vás, ale len hovoria, že keď sa pozriete na ospravedlniť, potom to trvá správu, ktorú predložený ospravedlniť, a potom robí túto správu. Nejaké ďalšie otázky? Milujem otázky. Tak, aby im blíži. DIVÁKOV: [nepočuteľné] echo alebo print tam? ZAMYLA CHAN: Otázka bola, mohli sme nielen dali echo alebo print tam. Tak, že by urobil niečo mierne odlišné. To by sa vytlačí dotaz nepodarilo sa, že - dobre, teraz sme vlastne v našom regulátora. Takže nemáme skutočne HTML nastaviť tu. Ospravedlniť by vykresľovanie apologize.php vlastne presmeruje vás na apology.php. OK. Takže teraz, poďme na adresu otázka z minulosti, čo naozaj riadkov. No, dotaz vráti pole riadkov. A každý riadok predstavuje prostredníctvom asociatívneho poľa. Takže ak som popravený nejaký SQL dotaz a Ja som uložil výsledok do riadkov, potom pomocou foreach slučky, potom pole Názov je prvý, kto sa - riadky. A potom budem volať každý riadok tam $ row. Takže iterácia cez to, že som so potom prístup k názvu stĺpca v danom riadku je, rok stĺpec, a dom stĺpec. Všimnite si, že by som bol schopný to s riadkami, pretože riadky Index Názov neexistuje. Riadky je len pole asociatívne pole. Takže máte dve úrovne tam. Akonáhle budete mať niekoľko riadkov, musíte sa dostať do toho. A potom môžete pristupovať stĺpca. Vedeli, že aby bolo jasné? Jo, vpredu? DIVÁKOV: [nepočuteľné] otvorte držiaky na [nepočuteľný]? ZAMYLA CHAN: Prepáčte? DIVÁKOV: Otvorené držiaky. ZAMYLA CHAN: Ty tu? To, že mi dovolil zahrnúť táto premenná. Jo. DIVÁKOV: Keď tlačíte, ste tlač do HTML kódu? ZAMYLA CHAN: Áno. Pri tlači, toto je vnútri môj vzor, ​​takže môj pohľad na metódy MVC. Takže som tlač do formátu HTML. DIVÁKOV: Takže keď sme išli do developer nástroja po spustení to, mohli by sme že vlastne v kóde? ZAMYLA CHAN: To je skvelý otázka, jo. Takže ak ste išiel do vývojárske nástroje v Firefox pomocou Firebug alebo Chrome, potom áno, mohol by ste pozri konkrétny HTML. Takže by to ukázať, $ row ["name"]. To by sa ukázať, podľa toho, meno je v danom riadku. DIVÁKOV: Len všeobecný problém, čo tr a td definovaná ako? Prečo by sme [nepočuteľný]? ZAMYLA CHAN: Tabuľka rad tr, tabuľka potom td stĺpce. OK. DIVÁKOV: Jo, to je tabuľka dát. ZAMYLA CHAN: Dáta tabuľky. Jo. DIVÁKOV: Je to riadok, v ktorom riadok sa zaobchádza ako stĺpec? ZAMYLA CHAN: Ospravedlňujem sa. Môžeš to zopakovať? DIVÁKOV: Ako by ste zobraziť riadky? ZAMYLA CHAN: Ako by ste zobraziť riadky v akej ceste? Hovoríš o nich riadky tu alebo na tr riadky? DIVÁKOV: Riadky. ZAMYLA CHAN: Tieto riadky? Ja by som si to predstaviť ako Som spustiť môj dotaz. A to hovorí, OK, musím buď 0 pre n množstvo riadkov, ktoré zodpovedajú kritériám že ste vypočúvaný. Takže mám určitý počet riadkov. Takže riadky, že $ riadky, ukladá každý jeden z tých riadkov v matici. Takže aj keď je to len jeden z nich, je to Stále poľa riadkov, ktoré sa zhodujú. Tak, napríklad, to je podobne ako keď pritiahnuté za vlasy vyrovnávacej pamäte od užívateľov. A kritériá tam bolo miesto, kde ID rovná ID relácie. Tam je naozaj len jeden riadok ktoré by mohli zodpovedať. Ale napriek tomu riadky práve vrátil jeden riadok. Takže budete musieť ísť do riadkov, index 0, index cache skutočne dostať do vyrovnávacej pamäti. DIVÁKOV: Je funkcia pre tlač v echo to isté? ZAMYLA CHAN: Áno. Áno. Vytlačiť ozvenu rovnaký. DIVÁKOV: Je foreach slučka Jediným spôsobom, ako index do radov? ZAMYLA CHAN: Je foreach slučka jediný spôsob, ako môžete iterovat riadky? Nie. Môžete tiež použiť pre sláčiky, za predpokladu, že viete, dĺžku riadku v poli. DIVÁKOV: Mohli by ste to prístup pomocou riadku ako [nepočuteľný]? ZAMYLA CHAN: Takže nemôžete pristupovať len pomocou riadku, ak nemáte foreach slučky za predpokladu, že ste vyhlásil riadok. Áno. Jo, v bielej farbe. DIVÁKOV: Tak čo tr a td robiť? ZAMYLA CHAN: Tak tr a td sú HTML tagy. tr označuje začiatok z riadku tabuľky. A každý td znamená, nová tabuľka stĺpec dát. DIVÁKOV: Pre vizuálnu čo riadok je rád, len si predstavte, SQL, ako majú riadok. [Nepočuteľné]. ZAMYLA CHAN: Jo. To je skvelé miesto. Môžete si predstaviť riadky len ako ako v tabuľke programu Excel, len zoznam riadkov. OK. Dobrá. Takže teraz, že sme prešli vyberte, ak nie sú žiadne ďalšie otázky, my budeme prejsť na vložku. Takže keď som chcel vložiť do niektorej tabuľky a vložiť určitý stĺpec hodnoty, mohol som sa vložiť do Bystrohlavu v 7. ročníku. Ale niekedy tam môže byť duplicitné hodnoty, ako sme videli v pset7, keď sme boli aktualizujeme naše portfólio. Takže v tomto prípade, chceme využiť ON Duplicitné kľúč UPDATE, takže nemáme uložiť viac riadkov s rovnakým cení, ale skôr ho aktualizovať. Potom sme skutočne aktualizáciu, ktorý nie je vložka. Je to len aktualizácie, kde si aktualizovať v určitej tabuľke s ohľadom Kritériá a potom, konečne, mazať, ktorý má veľmi podobnú vec. DIVÁKOV: Mohli by ste stručne ísť cez duplicitné kľúč? ZAMYLA CHAN: Jo. V podstate tu, mám INSERT INTO Gringottskí škriatkovia, je, galeóny, tieto hodnoty. Ale ID, pravdepodobne, je jedinečný kľúč Hodnota nastaviť v MySQL tabuľke. Takže ak som už, že ID nastaviť, potom nemôžem vložiť nový riadok. Takže ak to nie je už existujú, potom musím aktualizovať. V stredu v bielej. DIVÁKOV: Tak vkladať, aktualizovať, mazať, a vyberte, sú všetky k dispozícii lokálne [nepočuteľný]? ZAMYLA CHAN: Tak vložka, aktualizovať, mazať a vyberte sú všetky SQL dotazy. Takže zakaždým, keď používate SQL, budete mať tie dispozícii. DIVÁKOV: Späť na poslednú kvízy - tam bola otázka, ktorá sa zaoberala ak by ste mali stôl a chcel vložte výsledky testov v jednom a vložíte vaše meno tak, že vás nenechá [Nepočuteľné] Skúška skóre vášho priateľa. Ako by ste to urobil s vložkou? ZAMYLA CHAN: Takže otázka bola o predchádzajúce strednodobé otázka. Nie som si vedomý, ktoré jeden je práve teraz. Takže možno neskôr, ak chcete prísť a ukázať mi, potom môžem určite vám tipy. Ale keď už hovoríme o vkladaní vecí, ako je s niečí skóre, keď si by nie, poďme hovoriť o tom, SQL injection útoky. Takže útok SQL injection je v podstate kde niekto vezme Výhodou nízkej bezpečnosti spôsobom, že užívate v dátach. Takže tu, rovnako ako v CS50 financií, keď sa prihlásite, môžeme vstúpiť do užívateľské meno v prihlasovacom formulári, Prvé textové pole, a zadajte v hesle. Možno, že náš PHP kód môže vyzerať niečo ako toto, kde $ username je užívateľské meno post-Data a heslo je heslo post-dát. A potom stačí spustiť náš dotaz, povedzme, OK, dobre, náš dotaz bude výber z našich užívateľov, kde užívateľské meno je ten, ktorý predložili. A heslo je heslo, čo znamená, že sa heslá nezhodujú. A teraz, čo keď namiesto toho, aby skutočne Podaním aktuálne heslo, ako 12345 a hádať na vidly, ktoré hovorí, že heslo a snaží sa preniknúť ich Účet, čo keď namiesto toho, tvrdili to. Mohli zadajte možná myslím na heslo. A potom by skončiť citácie zadajte alebo 1 = 1. To by prechádzať priamo do SQL dotaz vyzerať nejako takto. Vyberte si z užívateľov, kde užívateľské meno = Hroty a heslo rovná ľalie alebo 1 = 1. Takže buď heslo má byť správne alebo 1 = 1, ktorý je vždy pravdivý. Takže v tomto prípade, v podstate, môže užívateľ využiť to a stačí sa prihlásiť sami v a hack niečí účet. Takže to je dôvod, prečo chceme, aby sa zabránilo niekto má, ako to urobiť. Ale našťastie, funkcia dotazu podľa prechádzajúcej v zástupných symboloch bude trvať starostlivosť o to pre vás. Tiež budete zvyčajne nikdy nebudete chcieť musela skutočne predložiť hesla sami. To je dôvod, prečo sme hash alebo zašifrovanej je v CS50 financií. Divákov: Minulosť kvíz hovoril o MySQL únikové reťazca. Máme sa báť, že? ZAMYLA CHAN: To je dobrá otázka. V MySQL Únikové reťazca je určite funkcia, ktorá bola použitá v našom dotaze. Ale rozhodne pozrieť do toho. Povedal by som, že je to fér hra vedieť že by ste museli volať, že fungovať na povrázku. Jo, Belinda? DIVÁKOV: Ako viete, kedy je to apostrof alebo dvojité úvodzovky? A tiež mám pocit, že v prednáške spomenul niečo o tom, ktoré nemajú [Nepočuteľný], alebo tak niečo, alebo Druhý singel citát na konci. Myslím, že poukázal na prednáške, že máš mať apostrof 1 a potom nemá apostrofy alebo tak niečo. DIVÁKOV: [nepočuteľné]. Divákov: to je posledný singel citácie tam v tom druhom okne by nemali byť. [Nepočuteľný] Pretože keď budete mať ten posledný singel citovať, a tie zodpovedajú za obsah kde je heslo, ak máte, že dotaz, je tu jeden citát na koniec už. Ak chcete použiť túto jednoduchú úvodzovky ako ten, ktorý stojí na jednej [Nepočuteľné]. Takže to, čo je vlastne v tomto texte box by nemal mať, že. ZAMYLA CHAN: budem zmeniť. OK. Ak tam nie sú nejaké otázky, potom budem odovzdať ju Jozefa hovoriť o JavaScriptu, et cetera. [APPLAUSE] JOSEPH ONG: Tak sme sa beží trochu pozadu. Takže ak máte odísť, to je v poriadku. Ale žiadame, aby ste si hlavy ak ste v stredu, takže neblokujú fotoaparát a používať späť exit, ak budete musieť. Som Joseph mimochodom. Dobrý deň. Test, test. Dane, je to dobré? V pohode. Takže video bude tiež zverejnené on-line pre tých, ktorí musieť odísť. Trápne. OK. Takže kvíz recenziu. To je mačka. Teraz, JavaScript, ktorý je možno nie ako Aww pre niektoré z vás. OK. Takže to je prvý, prevezme späť od Zamyla. Nezabudnite, že PHP je beží na serveri. A mnoho časov, vy ste napísal slučky v PHP vytlačiť HTML, nie? Takže akonáhle tento kód spustí, že HTML výstup, ktorý môžete vytlačiť dostane poslal k užívateľovi. A akonáhle sa to stane, nič viac PHP môže spustiť, ak obnovte stránku, z Samozrejme, ktorá reexecutes PHP. Ale akonáhle si vytlačiť tomto formáte HTML, nemôžeš ísť nikam. Tak, že HTML je poslaný na užívateľovi, ktorý je prehliadač sem, kde Milo je pomocou počítača. A tak dobre, existuje niekoľko vecí, akonáhle pošleme HTML užívateľmi. Niekedy chceme urobiť niečo ako keď kliknete na niečo, čo chceme, varovanie boxy na pop-up, tie druhy interakcie, ako keď stlačíte kľúč, keď kliknete na niečo, čo na stránky, chcem aby sa niečo stalo. No, nemôžete reexecute PHP kód raz, že HTML je nastavený. Tak ako to robíte? Predstavujeme nový jazyk zvaný JavaScript, ktorý beží v prehliadači , Ktorý vám umožní robiť veci, HTML potom, čo obdrží je zo servera. A to je dôvod, prečo sme to na strane klienta volanie programovací jazyk. Je to práca na počítači - klient. Akékoľvek otázky týkajúce sa, že tak ďaleko? To paradigma má zmysel pre ľudí? OK. Dobrá. Dobrá. Takže prvá vec, ktorú si uvedomiť, je JavaScript nie je PHP. Majú nejakú inú syntax, ktoré pôjdeme do. A oni majú veľmi odlišné použitie. JavaScript, opäť, pre vaše prehliadač, pre klienta. Server beží niekde na niekoho iného počítača, ktorý odosiela informácie pre vás, opraviť? Takže ak vás žiadame písať PHP kód na skúšku otázku, nepíšte JavaScript a naopak. Budete len stratiť body, a to nebude to pravé. Tak poďme dostať sa do niektorej syntaktické rozdiely - JavaScript vľavo a PHP na pravej strane. Prvá vec, ktorú si všimnete, s JavaScript, budeme deklarovať premenné s var kľúčové slovo - V - R. PHP používa znak dolára, ako Zamyla bolo uvedené vyššie. Ak chcete deklarovať asociatívne pole, vidíme známu syntax na pravá strana s PHP. Na ľavej strane, miesto môžete použiť zložené zátvorky. A potom sa vaše kľúče sú na ľavej strane. Potom budete mať dvojbodku. A potom máte hodnoty ktoré chcete. Tak to je, ako by ste to urobiť v PHP na pravej strane tejto druhej linka, ktorá začína v Milo. A to je, ako by ste to na ľavej strane v JavaScripte, ak chcete to, čomu hovoríme objekt. A objekty v JavaScripte sú len asociatívne pole. Takže ak chcete pristupovať poľa, v PHP môžete použiť túto syntax konzoly. A týmto spôsobom, môžete priradiť Tento majiteľ pole Lauren. No, v JavaScripte, ak človek chce Prístup polia a zmeniť, môžete použiť syntax bodky. Môžete tiež použiť syntax konzoly. Ale nemôžete použiť dot syntax v PHP. To nebude fungovať. To funguje iba v PHP. A konečne, tlačiť veci konzoly, môžete použiť console.log, ktoré vy používate veľa pset8. Môžete console.log, že. Ak chcete vytlačiť pole v PHP, budete musieť použiť tlačovú r A na pravej strane, môžete vidieť aj hash zreťazenie tam. Niekto sa pýtal skôr. Používam plus v JavaScripte. Ak budem chcieť zřetězit niečo v PHP, používam bodku. Jedná sa o rôzne. Ak píšete PHP kód, nepoužívajte plus. Ak píšete JavaScript kód, nepíšte bodku. Bude to v poriadku. A ty budeš smutná. Takže syntaktické rozdiely. Poznaj svojho syntax, pretože ak máte napíšte otázku a môžete použiť syntax z nesprávneho jazyka, to nebude fungovať. A to bude zle. Takže poďme hovoriť o nejakej kontrole prietok rozdiely, ako používať slučky v každej z nich. Zamyla prešiel na pravej strane. Veci na pravej strane by mali byť oboznámení. Poďme sa pozrieť na na ľavej strane. Ak používate pre n slučky v JavaScripte, Váš variabilný slučky, var i tam, slučka cez kľúče poľa. Takže vidíte, meno, dom a role. Keby som console.log ja, ja si meno, dom a role. To sú kľúče. V JavaScriptu, foreach slučka pokračuje nad hodnoty tohto poľa. Takže si všimnete, že sú obaja i Ale tu na PHP strane, vytlačí z Milo, CS50, a maskota. To sú hodnoty v PHP. Takže sa jedná o tom, ako tieto dva odlišné v rôznych jazykoch. Takže ak ste pomocou foreach slučky, nemusí predpokladať, že vám dáva kľúče. A ak používate pre n slučky, nie Predpokladám, že vám dáva hodnoty. Znamená to robiť tak ďaleko zmysel? Ďalšia snímka je ukážem, ako môžete prístup opak v každý z nich. No, ak máte kľúč v JavaScripte a chcete, aby hodnota z, stačí index do Pole s tým. Takže Milo budem mať čo Chcete - hodnoty. Tam je to iná syntaxe v PHP. Ak naozaj chcete vedieť, vôbec sa mi nepáči myslím, že sme to ukázal na vás ešte. Ale ak máte záujem, môžete použiť Toto dodatočné syntaxe vpravo strana, ktorá bude skutočne vám umožní získať kľúče v PHP, ak ste pomocou foreach slučka. Takže len trochu maličkosti ak máte záujem. Tak to je len demonštrovať Rozdiely medzi týmito dvoma slučkami. Nemiešajte je, keď ste programovanie otázku. Akékoľvek otázky o tom. V pohode. Dobrá. JavaScript objekty. Hovoril som o nich. Sú ako asociatívne pole. Jedna vec, ktorú by som rád, keby ste si uvedomiť, Tu je to, že hodnota v asociatívnom Pole môže byť čokoľvek v JavaScripte. Môže to byť aj funkcia, ako tam. Mám funkciu, ktorá je hodnota kľúča. A keď chcem zavolať túto funkciu, Len som prístup kôru. A potom som dal zátvorky po tom. A to funguje. Takže nejaké otázky? Nie? OK. Dobrá. JavaScript, rovnako ako PHP, je voľne zadali. Čo to znamená? To predsa má druhy. Ale keď deklarujete JavaScript variabilný, hovoríte var i Nehovor to. To nie je vec. Stačí povedať, že je to variabilný. A potom JavaScript sa bude zaoberať typy pod kapotou pre vás. Môžeme voľne prevádzať medzi typy tohto dôvodu. Takže aj začína ako číslo v tomto prípade. A potom mám reťazec. A pridám aj do neho. A ja som preradiť späť do i. Takže na tej prvej línii, i je číslo. Na druhom riadku, aj teraz stáva string potom, čo som urobiť preloženie. A tu, ja som len zreťazenie že číslo na reťazec. Takže vidíte, že aj keď som bol číslo v prvej časti, je to trochu ako byť prevedené na string a potom sa pridal na tejto ahoj reťazca. A tak to je to, čo mám na mysli u voľné písanie. To, že prevod medzi typy veľmi ľahko. A to nevyhodí varovanie u sa vám páči C robí. Tak aj teraz obsahuje ahoj 123 na reťazec. Ďalšie. Môžeme tiež voľne porovnať medzi druhmi. Takže ak stačí použiť ==, veľmi ako v PHP, JavaScript robí podobnú vec. Reťazec 123 je rovnaký ako počet 123 pri použití dvojitej rovná. Pri použití trojlôžkové rovná, ale tiež chce, aby sa uistil, že typ je rovnaký. Tak preto, že to je reťazec, a že je číslo, aj keď sú obaja 123, pri použití triple rovná, dostanete false. V double rovná prípadu, dostanete pravda, pretože dvojité rovná nie je starostlivosť o type. Trojlôžková rovná sa starať o typ. Otázky? OK. A ešte jedna vec, o JavaScriptu je rozsah je druh globálne, ak ste vo funkcii. A funguje to rovnaké spôsob, ako v PHP skutočnosti. Takže poďme prejsť tento príklad. Nastavil som aj na 999.. A potom som sa ísť do toho na slučky. Takže keď som tlačiť aj v tomto pre slučky, myslím, že 0, 1, 2, 3, 4. Mám pre i = 4. To zvýši aj teraz 5 na koniec pre sláčiky. A potom vypukne slučky, pretože nespĺňa podmieňujú už. Čo si myslíte, že budúci console.log vytlačí? Takže to je to, čo to bude robiť v C. C, pretože ak máte, ako var i mimo a máte var i vo vnútri slučky, ako pre slučky, potom to robí to tak, že je to rozsahom, že dvaja aj to sú rôzne. V JavaScriptu, bude to len zaobchádzať s ňou ako rovnaký i Mám 5, pretože to bola hodnota potom, čo vystúpil z slučky. Takže ty aj to je rovnaké aj Má to zmysel? No, to dáva zmysel z stanovisko JavaScript. Avšak rovnaký vzor nie je preniesť do C. Majú rôzne pravidlá stanovenia rozsahu. Áno. DIVÁKOV: [nepočuteľné] mimo funkciu [nepočuteľný]? JOSEPH ONG: Tak do ktorej funkcie? Tak ja sa k tomu len chvíľku. Takže hovoríme foo (i). To prejde aj do foo, prírastky to, a potom sa prihlási ju. Takže to bolo 5. Tak to sa stáva 6. Ale to, čo hovorím, je že aj v tejto funkcii. Vzhľadom k tomu, že je to parameter, je to rozsahom do tejto funkcie. Takže akonáhle som sa vlastne dostať z toho funkcie, je to teraz pôjde späť na starý i Že som ich rozsahom len preto, to je vo funkcii. A máme rozsah a funkcie. Ale my nemáme priestor mimo funkcií v JavaScripte. Má to zmysel? Áno. Otázka. DIVÁKOV: Rovnaká [nepočuteľné]? JOSEPH ONG: Tak jo. V PHP, je to rovnaký typ vec. Tam je mierny jemnosť vlastne. Ale môžete mi opýtať že po preskúmaní. Nemáte naozaj potrebujete vedieť že jemnosť na kvíz. Pre všetky účely, ako premenné, globálne a PHP, ak nie je sú vo funkcii, rovnaký vec v JavaScripte. Áno. DIVÁKOV: Prečo je to povolené v JavaScript a nie kde inde? JOSEPH ONG: Tak prečo je to povolené v JavaScripte, a nie v C? Je to len ten, kto prišiel s JavaScript sa rozhodol, že to bolo OK JavaScript. Takže je to len ako programovací jazyk konvencie, ako by sme povedali. Áno. DIVÁKOV: Tak prečo to ísť 6-5? JOSEPH ONG: Tak to šlo 6-5, pretože keď som prešiel aj do foo, že aj vo vnútri foo je teraz rozsahom do foo, preto, že existuje priestor vo funkciách v JavaScript. Ale akonáhle som sa odtiaľto dostať, pretože to bola vymedzená na funkciu, ja som len pomocou pravidelného som si, že vo vnútri zvyšok tok riadenia. Zmysel? Môžem ďalej? Dobrá. V pohode. Prijatie je to objekty sú odovzdané odkazom. Viete, ako pri odovzdaní polia v C Dalo by sa skutočne zmeniť pole? Je to to isté v JavaScripte. Mám-li odovzdať objekt, v tomto prípade, som prešiel Milo do tejto funkcie catify. Milo začína. Jeho meno je Milo Banana. Ja potom, že objekt do funkcie pretože je to objekt, asociatívne poľa v JavaScripte. Keď som sa vykonať operáciu v tejto funkcii, bude skutočne zmeniť objekt. Tak to sa stane len pre objekty v JavaScripte, rovnako ako sa to stane pre pole vnútri C. So Milo mená sa skutočne stane mačka teraz. Má to zmysel? Takže to funguje len pre objekty. Objekty sú odovzdávané odkazom. Áno. DIVÁKOV: Takže hovoríte, že na rozdiel od premennej i JOSEPH ONG: Jo. Ktoré premenné som bol len číslo, nie? Je to ako v C pri odovzdaní celé číslo, to robí kópiu. A keď odovzdáte pole, je v skutočnosti zmení aktuálne pole v C. To isté sa deje s JavaScript v tomto prípade. Dobrá. A ďalšie, Milo je smutná, pretože je to teraz mačka. To bol vlastne Milo po nejaký výlet k veterinárovi. Tak ako sme sa používať JavaScript na webovej stránke? Môžeme zahrnúť. Toto je HTML kód s pásovými značkami. Takže mám prúžok tagy tam. A potom som dal nejaké JavaScript Kód v rámci značky skriptu. A potom sa to spustí to. Keď som to takto, je to tzv inline JavaScript. Je to trochu chaotický, pretože JavaScript je v skutočnosti v HTML. Lepší spôsob, ako to urobiť, oveľa krajší, je napísať svoj JavaScript vo externý súbor a potom poskytnúť script tag so zdrojom. A to bude ísť do tohto súboru JavaScript a prečítajte si JavaScript kód z že súbor miesto. A to spôsobom, nemáte veľa JavaScript na začiatku svojho Súbor HTML, ktorý umožňuje je to naozaj chaotický. Stačí dať niekam inam. A potom to bude čítať zo tam. Vedeli, že má zmysel? Umiestnenie záležitosti. V tomto konkrétnom prípade, Skript je pred telom. Takže keď som spustiť to, že tam je nič v tele ešte. Možno, že to bude trochu viac pocit, keď som sa ukážte tento ďalší diel. V tomto prípade, skript prichádza po div. Takže vlastne sa objaví div na stránke ako prvý. Práve tu v tomto malom červenom krúžku, Vidíte sa objaví text. A potom sa upozornenie zobrazí. V prvom prípade, pretože skript bol pred div, upozornenie sa objaví ako prvý. A potom div sa objaví po môžete zavrite okno. Takže prevedenie záleží. Takže budeme mať na pamäti. To bude dôležité v trochu. OK. Tak dobre, ako si počkať, až Celá stránka je načítaná potom pred vami spustiť nejaký kód? Dostaneme sa do toho trochu o niečo neskôr taky. Ale len držať toto umiestnenie záležitosti na mysli, keď sme prísť do iného snímky. Tak sa dostávame k DOM teraz. A čo je DOM? Takže keď sa pozriete na HTML kód, je to len banda textu na obrazovke. Tak ako viete, že JavaScript to je HTML element? Takže musíme mať nejakú pamäť zastúpenie tejto štruktúra, ktorá máme. A keď sme to v pamäti zastúpenie v JavaScripte, nazývame že DOM. A je to len spôsob, ako ľudia rozhodli že by sme mali zastupovať túto HTML Štruktúra. A čo to DOM vyzerať? No, v reprezentácii pamäti, Vezmeme tento text. A my ho zase do pamäti zastúpenie. Tak to je HTML. Tak sme prvýkrát zistili, že každý DOM strom má dokument. Vyzerá to ako strom. A dokument obsahuje HTML tag, vlastne všetko vnútri to teraz. HTML tag má dve deti. To má hlavu. To je hlava, keď sa pozriete na odsadenie tamto na tom, ako je to štruktúrovaný medzi blízkymi značky, Hlava má dieťa. Dieťa je titul. Presne tak. Teraz máme tela dieťaťa. A potom, že telo má Dieťa s názvom rodina. A že rodina má tri deti - najstarší, stredný a najmladší. Takže by ste mali vedieť, ako nakresliť schému takto, keď sme sa vás opýtať, ako nakresliť schému, kedy dávame budete HTML na ľavej strane. Vedieť, ako vyrobiť DOM stromu. A v týchto veciach, je tam len nejaký text, ktorý som si predstavoval ako malé krabičky. Znamená to, DOM stromovej štruktúry, aby zmysel a čo DOM je? Takže to, čo sa p stať? Tu, p tam sa tým, že značka reprezentuje odsek tag v HTML. Takže sa môžete pozrieť to. Ale to len znamená, že to je nejaký priestor pre nejaký text. A to má nejaký predvolený CSS štýl, pretože je to tag odseku. Ale to nie je naozaj starosti že časť príliš veľa. Len viem, že to je zástupný symbol pre nejaký text. Áno. Otázka? Áno. DIVÁKOV: Práve ste spomenul CSS. Hash rodina a hash všetky tie veci je v podstate predstavuje ID v CSS? JOSEPH ONG: Jo, presne tak. Dostanem sa na to, čo tieto hodnoty hash znamená v sekunde. Keď Angela išla cez CSS, ona hovoril o CSS selektory. Jedná sa o CSS selektory, ktoré hovorila o Áno, Rob? ROB BOWDEN: Chcel by som tiež vyjadriť že DOM vnútri názvu značky je textový uzol. JOSEPH ONG: Správne. Takže v názve značky, Mám nejaké textové DOM. Takže naozaj, tento titul by mal mať ako krabička odíde z toho rovnako. Ale to nezáleží v tomto prípade príliš. My naozaj nestarám o textových uzlov, ako im hovoríme, príliš veľa. OK, čo robíme. Zdá sa, že áno. A ja som sa opraviť, že keď Som to nahrať znova. Má to zmysel? Tak ako sme sa pracovať s DOM? Kedykoľvek sa vysporiadať s DOM v JavaScript, tam sú dva kroky. Môžete vybrať element modelu DOM. A potom tie veci k tomu. Takže v tomto prípade, abstraktne, som vybrané prostredného prvku. A potom príkladom, ako robiť veci, k tomu by sa zmenou textu. To býval Bob. A teraz, čo som urobil, na to, že som zmenil Bob Milo v tomto prípade. Tak ako to vlastne urobiť? Ako to urobíme vyberanie? A ako sa to robí veci, aby vec, akonáhle sme ho vziať? No, ako vy ste sa to naučil V tejto triede je pomocou niečo, čo s názvom jQuery. Takže to, čo je jQuery? jQuery je knižnica, ktorá umožňuje JavaScript jednoduchšie napísať. Takže niekto vzal čas a napísal jQuery. jQuery je vlastne napísaný v JavaScriptu. A potom preto, že to urobil, teraz majú veľa funkcií, ktoré môžeme použiť, aby sa naše žije rýchle. Takže aké sú niektoré z čo to robí? To je výber prvkov jednoduchšie. To je meniace sa HTML, pridaním triedy jednoduchšie. To je Ajax jednoduchšie. K tomu sa dostaneme, že v sekunde. A to je analogické s C knižnice. Takže tie patrí string.h, dostanete strlen. Získate strcpy, všetky tieto veci. Keď zahrniete jQuery, dostanete pekný spôsoby, ako vybrať prvky na zmenu veci, et cetera. Získate ďalšie funkcie, ktoré JavaScript nedáva vám. Takže jQuery nie je JavaScript. jQuery je knižnica, ktorá je napísaná v JavaScript, ktorý robí JavaScript jednoduchšie napísať. Takže jQuery nie je programovanie jazyk. Ale JavaScript. robiť. Iste vám vaše terminológiu pravdu. Akékoľvek otázky? Áno. Je to otázka? Dobrá. Tak ako sa vám používať jQuery? No, keď píšete niektoré JavaScript kódu a zahrnúť jQuery v hornej časti súboru ako Súbor skriptu, môžete použiť znak dolára Ak chcete získať prístup k jQuery. A to sa líši od znak dolára v PHP. Je to rovnaký symbol vám písať na klávesnici. Ale oni znamenajú veľmi odlišné veci. Znak dolára v PHP znamená, že táto je to, ako som sa deklarovať premennú. V JavaScriptu, keď ste súčasťou jQuery, to je skratka pre jQuery. Takže majte na pamäti, že. Takže, ako môžeme vybrať DOM prvky? No, keď budeš robiť to škaredé JavaScript spôsobom, máte prístup dokumentovať globálne premennú. A potom dostanete element podľa ID rodiny. To je naozaj dlhý a rozvláčny a nie je moc pekné. Alebo sa môžete dostať všetky prvky ktoré sú tag p To funguje aj v JavaScripte. Ale my sme nikdy ukázal môžete syntaxe moc. Čo sme ukázali ste bol jQuery. Takže celý voliča smerom hore tam, že bol vyjadrený v JavaScripte dostane len kondenzované k tejto veľmi peknej dolára prihlásiť Hashtag rodinu. A $ p, práve tam, kde je to takto. Ak chcete vybrať všetky p tagy vnútri rodiny, dáme priestor medzi týmito dvoma. A teraz sme sa všetky p tagy vnútri rodiny. A vyzerajú povedome? No, Angela hovoril o CSS selektory. Daj mi jednu sekundu. A tak aby bolo možné zvoliť prvok, stačí použiť rovnakú vec ako vy by to s voličom CSS. Ak dáte hash pred o tom, že vyberá podľa ID. Bodka vyberie podľa tried. Ak máte len vec bez hash alebo bodky, vyberie tie tagy. Otázky. Áno? DIVÁKOV: Keď používame bodku v našej HTML, je to, že nie je jQuery? JOSEPH ONG: Dot v našom HTML je vec JavaScript. Nie je to jQuery vec. Ako vy ste sa to naučil s jQuery je použiť. html. A potom si to prešiel, čo HTML bude. Tak ja sa k tomu len druhý vlastne. Tak ako to urobíme veci na prvok raz sme vybrali to? Tak to je príklad toho, výber prvku. Takže teraz, chceme robiť veci na ňom. Takže v tomto prípade, nechaj ma ísť späť na predchádzajúcu snímku. To bolo predtým, ako Bob. A chcem to zmeniť v HTML na Milo. Tak som volať funkciu HTML z prvku. Táto funkcia je HTML metóda prvku. A potom som sa dať to, čo Chcem HTML byť. A je to práve nahrádza to, čo je vo vnútri že tag s tým, čo ju dám. Áno. Otázka? Divákov: hashtag sa používa iba pre jQuery. [Nepočuteľný] by sme použiť. JOSEPH ONG: Jo, presne tak. Ale nebojte sa príliš veľa o čisté JavaScript. Len chcem, aby si ľudí sa zamerať na to, ako si by to s jQuery, pretože že to bude dôležité, časť na kvíz. Správne. Presne tak. Takže vidíte, že hashtag, aby zodpovedá vybrať prvok s ID strednej kvôli tomu hashtag. Hashtag znamená ID. A tento prvok má ID uprostred. Tak to je prvok zvolíme. DIVÁKOV: [nepočuteľné]. znak dolára hashtag [nepočuteľný]? JOSEPH ONG: Takže nie. Otázkou je môžete použiť. Hodnotu. A. Hodnota funguje len na prvky, ktoré sú vstupy. V jQuery, by bolo . Val, nie. Hodnota. Takže budem mať na malom príklade, ktorý ukazuje, to všetko v kombinácii v sekunde. Ale myslím, že to slúži malý úryvok má zmysel pre ľudí tak ďaleko. Ak chcete zmeniť HTML, volanie metódy vo formáte HTML. Áno. DIVÁKOV: Môžete mi vysvetliť, opäť metóda? JOSEPH ONG: Takže metóda je len funkcia, ktorá patrí k jednej, v tomto prípad, jeden z týchto prvkov DOM, preto, že vidím zvolený prvok ako prvý. V skutočnosti, dovoľte mi, aby som pomocou myši. Vybral som prvý prvok. A potom som volal tento HTML funkcie, ktoré to malo. A pretože táto funkcia patrí tá vec, hovoríme metóda. To je len vymyslené meno pre neho. Povedz to ešte raz. Takže pamätajte, že sme si vybrali Teraz element. A my sme dať dovnútra premenný prvok. Opravte? Takže keď chceme zmeniť HTML na vnútri, pretože to bolo Bob skôr, Ak chcete zmeniť tento text Milo. Takže hovoríme HTML. A my to povedať, čo HTML vnútri že prvok by mal byť teraz. A tak sa zmení ju na Milo, preto, že som dal to Milo. DIVÁKOV: Takže oni pracujú spoločne. [Nepočuteľný] JOSEPH ONG: Jo, jo. Pracujú spoločne. Takže jeden z nich vyberie prvý prvok. A druhá robí niečo k tomu. Áno. DIVÁKOV: [nepočuteľné]. Keď je táto metóda sa líši od v HTML Máte metódu rovná aktuálnej. JOSEPH ONG: Jo. To je iný spôsob. To je iný spôsob. A môžeme pokryť, že len sekundu keď sa dostaneme na príklade. Chcem sa uistiť, že sme sa urýchliť pretože máme málo času. Ale my sme bežať po celú dobu teraz. OK. V pohode. Takže ak chcete pridať triedu, tam je tiež metóda add triedy. To je len príklad toho, čo môžete robiť s jQuery. To len pridáva triedu. Ak ho chcete vybrať, môžete volať odstrániť. To je len ďalšia vec, ktorú môžete urobiť. Takže ďalšie príklady vecí, ktoré môžete urobiť. Takže môžem len dať to na horná takto? Najmladší odstrániť. Keby som len spustiť túto JavaScript vo Vrchol môjho súboru, ktorý funguje? Správne. Pretože stredná doteraz neexistuje. Takže to nebude fungovať. Exekučný príkaz. Ide to až na vrchol ako prvý. Čo je? DIVÁKOV: Najmladší doteraz neexistuje? JOSEPH ONG: Jo. Najmladší doteraz neexistuje. Presne tak. DIVÁKOV: Povedal si, že stredná. JOSEPH ONG: Ospravedlňujem sa. Najmladší doteraz neexistuje. A ďalšia vec je, že nie zahŕňal jQuery súbor sa opýtať skriptu src. Tak, že to nebude fungovať. Vlastne som to neurobil, že v Ďalšiu snímku, ktorý je mal opraviť, že buď. Ale spôsob, ako to urobiť, je mať Java scripty je riadené udalosťami. Takže to, čo robíme, je, že sme použiť udalosť handler, aby sa to stalo. A tak som sa vybrať dokument nastaviť ako prvý. Ja hovorím, OK, keď je dokument pripravení, dovoľte mi, aby som spustiť funkciu. Tak to je všetko, že syntaktické prostriedky. Vybral som dokument. Teraz, keď je dokument pripravení, spustite funkciu. A tak sa sem, keď je dokument ready, čo znamená, že všetky HTML má naložené, potom som spustiť funkciu ktorý odstraňuje tento prvok. A tak teraz, keď som sa spustiť túto funkciu že som prešiel do pripravená, som garantované, že všetky na HTML Stránka bude existovať ako prvý. Áno. Otázka? DIVÁKOV: Čo je kľúčové slovo akcia v rámci funkcie? JOSEPH ONG: Tak, že kľúčové slovo udalosť funkcia je len parameter, ktorý je odovzdaný do funkcie pre každú udalosť. Je to proste niečo, čo dostanete zdarma. Ak používate kľúčové obslužné rutiny v pset8, že udalosť mohla povedať, pre príklad, ktorý kľúč, ktorý pokračoval. V tomto prípade, na pripravený udalosti je to v skutočnosti nie je veľmi užitočné. Ale pre kľúčové dole prípade, že je to viac užitočné, pretože vám vedieť, ktoré stlačené klávesy prístupom kľúč Kód z tej objektu udalosti. Opravte? Má to zmysel? OK. Áno. Otázka? DIVÁKOV: Takže si môžete dať script tag nižšie dole? JOSEPH ONG: Tak jo. Dalo by sa dal scenár označiť nižšia dole. Ale potom sa to proste stáva naozaj chaotický. A my sme chceli centralizovať všetky nášho kódu na jednom mieste. A to nám umožní urobiť. Zapamätaj si predtým som povedal, že je to krajšie spôsob, ako zabezpečiť, že prvky sú Na stránke pred spustenie kódu? A to je len príjemný spôsob, by ste dosiahnuť. DIVÁKOV: [nepočuteľné]. JOSEPH ONG: Jo. Tie by ešte, nie? Vzhľadom k tomu, pamätajte, že v cene súbor v hornej časti stránky. Takže to bude spustený ako prvý pred sa dostanete do spodnej časti stránky. OK. Takže môžete tiež pridať rôzne typ obsluhu udalosti. Tenhle práve spracováva kliknutí. Keď kliknem na najmladší, potom to bude pop-up s výstrahou. To je len iný Typ udalosti. Na rozdiel od pripravená akcia, teraz použiť udalosť click, keď dostanete klikne na prvok. A tak v tomto prípade si, cvaknutie Psovod je pripojený k najmladším. Takže sa to stane len vtedy, keď Aj kliknite na najmladší. A v tej druhej, pripravenej akcie bol pripojený k dokumentu. Tak čaká na dokument byť pripravený. Zmysel? Myslím, že môžem ísť ďalej. Áno. Otázka? DIVÁKOV: [nepočuteľné]. V tomto prípade môžete použiť [nepočuteľný]. JOSEPH ONG: Jo, jo, pretože v tomto prípad, musím čakať na najmladší prvok sa objaví na obrazovke ako prvý predtým, než som sa pripojiť popisovač kliknite na tlačidlo to, čo je dôvod, prečo som ju dovnútra o dokument pripravený. OK. A ďalej, takže to je veľký príklad ako by ste kombinovať všetko. To je len príklad validácie formulára ste videli v prednáške. Takže to brať krok za krokom, ako idete cez to. A bude to úplne v poriadku. Len si to čítajú zhora nadol. Mám formulár v dolnej časti. Ak je dokument pripravený, prikladám predložiť popisovač na formulári tak, že keď som odošlite formulár, dostanem hodnoty v každom z týchto vstupov. A ja som skontrolovať, či je to prázdne. Ak je to prázdne, vrátim false, pretože Nechcem odoslať formulár, pretože forma je v poriadku. Ak je heslo prázdne alebo je to menej ako osem znakov, nemám predložiť forma, pretože to je tiež zle. A return false len bráni forma z podania a ísť na novú stránku. A dúfajme, že to dáva zmysel. Myslím, že chlapci by mali prejsť Tento kód krok za krokom na vlastnú päsť. A akonáhle pochopíte, čo vybrať prvky a robiť veci, ktoré jej vlastne znamená, to bude robiť veľa zmysel pre vás. Áno? DIVÁKOV: Čo robí name = Užívateľské meno znamená? JOSEPH ONG: Tak name = meno užívateľa a name = heslo len znamená, že sa na atribútom čokoľvek ste výber. A potom, že sa musí zhodovať. Tak ideme na registráciu. A potom sa pozrieme na všetkých vstupoch a registrácia. A potom sme sa vybrať ten, kde meno atribút je rovný užívateľským menom. Takže len ten prvý voliča vyberie užívateľské meno vstup. A len to, že druhý volič vyberie Heslo jedna, pretože tie majú ich atribúty name nastavený ako to, čo by to mal byť. Otázka? DIVÁKOV: Na podanie, ako sa spodná časť vyriešiť vrchnú časť? JOSEPH ONG: Tak to je preto, že na obslužnú rutinu udalosti. Takže čakáme na predloženie akciu že vyhodí z formy. A to je všetko, čo je predložiť. Prečo hovorím podať až tam? To hovorí, keď je predložený formulár, Som si predložiť udalosť. Takže dovoľte mi zachytiť, že a spustite tento kód miesto. Áno? DIVÁKOV: Prečo máte mať funkcie akciu? Prečo nemôžeš jednoducho [nepočuteľný]? JOSEPH ONG: Pretože v JavaScriptu, ste musí deklarovať funkcie. To je, ako to funguje v JavaScriptu. Musíš povedať, že to bude spustiť funkciu. Takže hovoríte to, že si čaká funkciu tu namiesto len zložené zátvorky. DIVÁKOV: A funkcie je, čo nasleduje? JOSEPH ONG: Jo. Táto funkcia je to, čo je vo vnútri zložené zátvorky po že funkcie kľúčové slovo. Áno? DIVÁKOV: [nepočuteľné]. JOSEPH ONG: Pre odoslať? DIVÁKOV: Nie, funkcia bez udalosti. JOSEPH ONG: Jo. A tak, bez toho, aby udalosť, môžete mať, že. Ak nepotrebujete udalosť, potom stačí vynechať. Ale ak áno, potom ste Len to tam dal. Áno. Rýchly dotaz? DIVÁKOV: [nepočuteľné]. JOSEPH ONG: Jo. Vzhľadom k tomu, čo je potrebné urobiť, document.ready len hovorí, že čakať na všetky HTML na stránku načítať ako prvý. A zvyčajne chcete, aby vaše prvky na mieste skôr, ako spustíte akýkoľvek kód. Dobrá. Musíme sa dostať na Ajax. Nemáme veľa času. Takže klady a zápory. JavaScript je jednoduchšie pokus písať s jQuery. Ale jQuery je trochu pomalý. Je to ako PHP je pomalší ako C, pretože je to interpretované. A jQuery je o niečo pomalší ako JavaScript, pretože to veľa veci pod kapotou. A tak, ak používate jQuery, je to len trochu pomalší ako JavaScript, aj keď to dáva vám krásny elegancia. A konečne, Ajax. Zatiaľ sa Ajax, ste nevideli Ajax , Pokiaľ ide o pset7 ešte, pretože keď to urobíte, môžete podať Formulár pre cenovú ponuku. Je načíta novú stránku. Takže ste si tento veľký biely blesk na strane zatiaľ čo Druhá stránka načíta, správne? Bolo by naozaj pekné, keby vám nemal tento blesk. Rovnako ako Facebook, ak ste práve prejdite na dno, pridáva nový obsah bez osviežujúci celú stránku. Takže niečo také by bolo pekné. To je kód JavaScript na ľavej strane. Dostanete to, čo je vo vnútri tohto vstupu. Získate stock informácie z Yahoo! A potom urobíte veľký reťazec, ktorý hovorí, OK, to je posolstvo chcem ukázať na obrazovke. A potom si dať túto správu vnútri nejaký HTML prvok, ktorý dostane zobrazí na obrazovke. Tak to je všetko, čo sa tu deje. Takže v podstate, pretože to je všetko JavaScript a nemusíte spúšťať Už PHP, to sa uistite, že že strana neobnoví. Takže je to len abstraktné idea že tu hovorím teraz. Abstraktné predstava je, že ak si to všetko v JavaScripte, nemáte načítanie stránky. Ale ako to vlastne urobiť? No, vlastne, poďme hovoriť o tom, Problém s týmto prvýkrát. Problém je v JavaScripte, prevedenie je synchrónne. Takže budete musieť počkať na jedného linka dokončiť pred vami spustiť ďalší riadok. A čo keď budem cez Yahoo!, a ich servery sú veľmi pomalé, a trvá im tri sekundy na daj mi staré ten stock informácie? Keď som narazila, že cenové línii, ak prevedenie je synchrónny, ako je to podľa default, čo to len ide urobiť, je Váš prehliadač bude stánok pre tri sekundy. A vy nebudete môcť robiť niečo, keď sa dostane k dátam. Bude to byť zmrazené. A to je zlé. Nechcete užívateľovi majú zmrazené webové stránky. Opravte? To je jednoducho zle. Všetci súhlasia s tým,? Ak ste prehliadania Facebook a to zamrzne a nemôžete nič robiť, vám sa naozaj frustrovaní. Takže riešenie je, že sme urobiť niečo asynchrónne miesto. Tak toto všetko asynchrónne vec hovorí sa, idem sa na to opýtať URL pre určité údaje. A potom budem pokračovať. Ja som jednoducho ísť, aby sa vykonávanie bez ohľadu na kód, ktorý sa po tom. A potom keď tieto dáta je pripravený, Potom som sa ho spracovať. To je všetko, čo sa hovorí. DIVÁKOV: Ajax práve robí Kód asynchrónne? JOSEPH ONG: Je to asynchrónny spôsob načítanie dát. Takže prvá vec, o Ajax je mi umožňuje získať dáta z externého webu. A druhá vec je, dbá na to, že moja strana nemá odďaľovať, keď som načítanie týchto dát. To je asynchrónny súčasťou. Vzhľadom k tomu, že ide niekam inam, preto hovorím, že som ďalej na chvíľu je to očarujúce, že dáta, ktoré je to asynchrónny. Stále prevedenie. Takže majte že asynchrónny Myšlienka na mysli. A ja vám ukážem, čo Rozdiel je v tom. Synchrónne verzia je na ľavej strane. Asynchrónne verzia je na pravej strane. Pozrite sa na čísla zistiť, ktoré kroky zodpovedajú tomu, čo vykoná v každom riadku. Tam, upozornenie sa objaví ako prvý. Vzhľadom k tomu, ako sa stock informácie od Yahoo! trvá tri sekundy, stánky po dobu troch sekúnd. A potom to upozorní cenu Po týchto troch sekundách. Takže teraz, že upozornenie sa zobrazí sa v tej dobe - tri sekundy palcov A potom to upozorní tým, po tom. Tak to len ide krok za krokom. Je to ako to, čo vy by akceptovať, že? S asynchrónnym prevedenie, môžete upozorniť ako prvý. Potom môžete odísť na túto adresu URL. A vy hovoríte, budem opýtajte sa na údaje. A potom budem spracovať neskôr. Takže to okamžite vykoná ďalší riadok potom, čo som robiť, že Asynchrónne požiadavku. Takže 0,001 sekundy, zobrazí upozornenie hi. Vykonať túto funkciu, upozornenia bye. A pretože som sľub, ktorý som spracuje dáta neskôr, čo sa stane, ak tieto dáta vráti tri sekundy neskôr, potom bežím, že Funkcie, ktoré mám tamto. Áno? DIVÁKOV: Mohli by ste upresniť alebo objasniť, čo Ajax znamená? JOSEPH ONG: Tak Ajax je to tak, že keď som Potrebujete dát, keď som na stránkach a ja nechcem aktualizovať stránku, potom I používať túto technológiu s názvom Ajax. To v podstate znamená len, dojdi dáta z iného webu. A to takým spôsobom, že len nemá odďaľovať svoju webovú stránku. DIVÁKOV: Tak je to, že vlastné časť JavaScript alebo jQuery? JOSEPH ONG: Takže niekto napísal, ako to urobiť To JavaScript dávno. Na jednom mieste, to neexistovalo. A tak niekto vymyslel túto techniku aby ľudia mohli požiadať o tieto dáta v tejto móde. A oni písali nejaké veci aby to pre vás. A jQuery vám dáva len to veľmi príjemný spôsob, ako to urobiť s týmto $. dostať funkciu. otázky? Dokážem odpovedať na otázky týkajúce sa Ajax potom taky. Budem tu. Tak to poďme nám načítavať dáta, bez toho, aby osviežujúci stránku. A poďme nám to v asynchrónny spôsob, ktorý nezamŕza stránku. Príliš dlhý, nečítal ak to vysvetlenie bolo pre vás príliš dlhá. Tak konečne, cross-site skriptovanie útoky. Videli sme to Zamyla. Ak je vo svojom databázovom niekto má tento názov, ktoré je tento tag script, a ja nejaký kód na mojej stránke, ktorá tlačí s menami ľudí v rade, alebo mám nejaký kód JavaScriptu, ktorý vloží tento názov do stránky, čo je to HTML je produkované? No, ja vytlačiť značku HTML. Aj vytlačiť všetky tieto značky. Mám na tú časť, kde som tlač von s kamarátmi. Vytlačiť Lauren von. To vytlačiť Milo von. A potom sa moje meno v databáze je skript príspevok nelichotivé postavenie Facebook. Pretože som vložil to do stránky , Pretože to vyzerá, JavaScript, kedy Táto stránka je poslaný k užívateľovi, sa dostane popravený ako JavaScript. A tak to je to, čo nazývame cross-site scripting útoku. Niekto dáva škodlivého informácií databázy, ktorá by mohla zodpovedať niektoré ďalšie reťazec alebo niektoré JavaScript reťazec. A keď sa to vytlačí na Stránka týmto spôsobom, potom to, čo sa stane, je, že zlý kód dostane popravený že som nemal v úmysle pre to, aby si popravený. A to je všetko, cross-site skriptovanie útok. A spôsob, ako obísť je to ako povedal Zamyla. Stačí zabaliť veci Špeciálne znaky HTML. A tento HTML špeciálne znaky je PHP funkcia, ktorá zabráni tento druh veci z deje s vami Ak máte škodlivý reťazec v databáze. Je to proste uniká to, takže to nie je sa interpretovaný ako HTML. Nahrádza malé držiaky s tým, čo nazývame subjekty. A šli sme na to v prednáške príliš. Takže myslím, že chlapci by mali mať dobrý prehľad o to. Otázky? Áno. DIVÁKOV: Tak ako by [Nepočuteľný]? JOSEPH ONG: Povedz to ešte raz. DIVÁKOV: Ako by monitor - JOSEPH ONG: Správne. Takže máte niečo, čo sa hovorí, keď Aj registrovať, typ v mojom mene. Len som písať v tejto oblasti, volám sa stript príspevok nelichotivý Facebook Stav v blízkosti script tag. A to len dostane dať do databázy, pretože nemôžem povedať, niekto vo svete nemá meno s ľavou šípkou v ňom alebo Slovo skript v ňom. To nie je naozaj zmysel. Tak som sa len uistiť, že som dezinfikovať veci skôr, než som ju vytlačiť von na stránku. DIVÁKOV: Takže špeciálne karty HTML zabraňuje tagy skriptu? JOSEPH ONG: Jo. Takže to nebráni tagy skriptu. Je to jednoducho robí, či skript tagy nechápem interpretovaný ako HTML alebo - jo. Je to proste príde ako to, čo je to v skutočnosti je. Dobrá. Takže to bolo preskúmanie kvíz. V pohode. [APPLAUSE]