R.J. AQUINO: Řekněme začít. Tak to je kvíz 1. Zde jsou některé informace na vysoké úrovni. O stránka pro kvízu je to URL, již CS50.net, i když to bude i nadále fungovat. Je to CS50.harvard.edu/quizzes/2013/1. Je to velký O stránce, říkám kde a kdy, a to příští středu V banda pokojů. A příští středu, jsem znamená, za dva dny teď. Všechny tyto informace jsou zde. Ale to je kumulativní. Takže všechno z první poloviny rok je potenciálně v kvízu, protože nemůžete opravdu pokročilé věci C bez jestliže podmínky a pro smyčky a podobně. Ale tam bude kladen důraz na materiál pokrytý od Quiz 0, počínaje struktur a souboru I / O. Je to typicky více náročnější než Quiz 0. Průměrné skóre je obvykle nižší. Pilně studovat. I když jste studoval, ujistěte se, že používáte CS50/discuss psát své dotazy a přečíst dotazy jiných lidí. Takže pokud nemáte žádné otázky, přihlásit a číst otázek vašich přátel. Jsou to pravděpodobně dobré otázky. A vzít praxe kvízy. Byli jsme dávat kvízy pro nyní sedm nebo osm roky. Jsou to všichni on-line. Budoucí otázky jsou podobné na staré otázky. To je, jak jsme se udělat z nich. Kvíz ještě neexistuje. Nikdo z nás to viděl. Ale to bude vypadat předchozí kvízy. Z tohoto přezkoumání relaci, to není vyčerpávající seznam témat. Nemůžete jen zúčastnit této a poté být dokonale připraven na kvíz. V opačném případě by to nemělo být že velká část kvízu. A to je také nemusí být nutně vše, co potřebujete vědět o všech vzhledem k tématu. Je určen pro vás vystavit věci Probrali jsme, vás upozorní na to, co jsme vztahuje, a způsob, které se vztahuje. Ale budete muset jít ještě dále a hlouběji, když budete studovat na double-check že víte všechno o nějaký daný téma a že jste vyplnil všechny rohy, které byly na které se vztahuje přednášce. Kvíz poznámky řekne, abyste šli do poznámky písař hodinky přednáška videa. To je dobrý způsob, jak se ujistit, že jste pokryty všechny své základny. Takže, jak začít, když jsem to skluzavky, snažil jsem se dát, kde jsem zjistil, informace. Takže pro File I / O, například, týden 7, Pondělní přednáška, a zaslali § 6 a problém Set všichni mají Informace o souboru I / O. Udělal jsem u každého tématu. Takže ty titul skluzavky může být užitečné pro vás. Takže tady máme File I / O. Pamatujte si, že v Problém Set 5, použili jsme fopen, fclose, fwrite, fread, a fseek. Po obnovení 30ish JPEG a co zmenšeny a zmatený s bitmapy, měli byste být docela obeznámeni s těmito funkcemi a jak fungují. Pokud jste již obeznámeni, určitě zkontrolovat je. A ujistěte se, že jste pochopili, co různé argumenty, když jsou používány. Ale běžné chyby souboru souvisejících můžete být požádáni o - No, pokud jste zapomněli zkontrolovat, zda fopen skutečně pracoval předtím, než jdete upravit soubor. To by mohlo být špatné. Pokud jste zapomněli fclose soubor že jste fopened, to je podobné nevracení paměti. To je dost špatný. A zapomněl zkontrolovat, zda jste došli na konec souboru před vámi začněte psát k ní. Takže, pokud řekneš, hej, já jsem na konec souboru. Dej mi 5 více bajtů. No, to asi nebude pracovat tak, jak očekáváte. To je opravdu to pro File I / O, protože jsme tak hodně z toho se problém nastavit. Takže pokud jste pochopil, co se děje v problému Sada 5, pamatovat bitmats a JPEG, pak jste pravděpodobně všechny sada pro soubor I / O. Pokud je to trochu nejasný, určitě přečíst tento problém nastavit a související materiál. Struktury byly tématem, které byly na Hranice mezi Quiz 0 a 1 Quiz. Ne zcela provést řez pro Quiz 0. Takže určitě se na Quiz 1, 7. týden, v pondělí. Co je struct? Zde vám ukážeme struct. Je to jako nového typu. Je to jako kontejner pro více polí. V tomto případě jsme prohlášen struct student, který má dvě pole - řetězec, který jsme volat jména a int, že voláte věku. Takže když jsem se projít kolem studentů nebo I změnit studentů, budu moci přístup k jejich jména a jejich věk. Pojďme se podívat na některé kódu, který. Zde vidíme, že jsem prohlásil, student s, stejně jako Prohlašuji, všechny proměnné - int x, int y, et cetera. Zde je studentka s. Začne se nic v jeho poli. Takže pojďme nastavit je. Můžete nastavit pole struct s tečkou. Tak jsem řekl, tady to s.name = RJ. A s.age = 21. Můžete také aktualizovat pole Stejným způsobem byste aktualizovat hodnota proměnné. Tak jsem chtěl změnit své jméno z RJ se žádné období do R.J. hláskoval správná cesta. Bylo by s.name = RJ, stejný jak to řekl původně. A pak je můžete otevřít. Takže jsme je nastavit. Aktualizovali jsme je. Můžete také přístup k nim ve velmi stejným způsobem. Tak tady jsem vytisknout R.J. Je 21 let. A já přístupu těchto hodnot s s.name a s.age. Tak to je přístup structs s tečkové notaci. Jo, otázka? DIVÁKŮ: Je tu důvod, proč na předchozí snímek, který jste dal student na horním řádku, jako typedef struct student a poté student na konci? R.J. AQUINO: Takže otázka je, na Tento snímek, jsme obvykle vidět typedef struct uzel a pak pole struct a pak uzel slovo. A jak to, že tady jsem neřekl, typedef struct student a poté pole struct a poté studenta? Důvodem je, že nemusíte přistupovat uvnitř struct. Takže je to v pořádku nechat beze jména. Nemohu jen tak odejít jako anonymní struct. Důvod, proč jsme to pro spojových seznamů a věci je, že uvnitř budete potřebovat odkazovat struct uzly hvězdu. Takže struct musí mít název, takže můžete přistupovat později. Je to maličkost. Ale budete obvykle vidět typedef struct složené závorky, pokud nepotřebujete Název a typedef struct některé název následuje ve složených závorkách, pokud bude Potřebuji jméno. Tak to je dobrá otázka. A v tomto bodě, máme tendenci měnit structs a projít kolem structs podle reference, nikoli podle hodnoty. Takže jsme si jen projít kolem odkazy na structs místo kolem dokola struktur sami. Takže velmi často bude použití, v tomto případě, student, * nebo uzel struct * nebo uzel * místo se studenty nebo uzlů. Tak tady jsem řekl, OK, proměnná ptr bude adresa s.. Bude to být ukazatel studentovi R. J. Takže se můžeme dostat na ty oblasti, stejně jako my dostat nic. Za prvé, číslo odkazu ukazatel dostat struct. To je * ptr, a pak tečka a pak věku. Takže pro přístup k poli, a já jsem aktualizovat je nyní až 22, z důvodu, pojďme řekněme, že to byla moje narozeniny. K dispozici je syntaxe zkratky pomocí šipky tady. Takže ptr šipka věk je jen stejně jako * ptr.age. Nyní, to je něco, co budete mít zapamatovat a pamatovat si. Použili jste to hodně pset6, pravopisu pset. Ale to je vlastně to, co se děje na pod kapotou. Je to dereferencing ukazatel a pak ho přístupu. Otázka? DIVÁKŮ: [neslyšitelné]. R.J. AQUINO: Tak proč jsme pomocí ukazatele jako struktur místo struktur sami? Důvodem by bylo, kdyby jste kolem struct funkci, budete pravděpodobně chcete projít kolem jen 4 nebo tak bajtů, které představují ukazatele, jako Na rozdíl od potenciálně 30 nebo 40 bajtů, které jsou struct. Takže kolem něco na funkci je jednodušší, když to je menší krátká. Otázka? DIVÁKŮ: Možná jste zmínil na začátku, ale jsou tam další snímky až na [neslyšitelný]? R.J. AQUINO: Tyto snímky budou po zasedání přezkoumání. Budeme je zveřejňovat na internetových stránkách. Tak pohybující se a pohybující se mírně rychleji, budeme mluvit o údajích struktury. Existuje spousta. Zabývali jsme spoustu z nich. Zde je to, co byste měli pochopit, o datové struktuře. Měli byste opravdu pochopit, na vysoké úrovni to, co každá struktura je. Můžete mi vysvětlit, v angličtině do svého přítel, který nepřijal CS50, jak budeme organizovat naše data a proč my bychom používat něco tímto způsobem? To je věc jedna. Thing dva, pochopit, realizace. Tak, jak používat tyto věci v C. A půjdeme na to. A potom, co tři by vědět, běh lhůty a omezení různé struktury, které používáte. Takže chápu, proč byste použít hash tabulky namísto pole. Vědět, jak rychle, v průměru, přístup hash tabulky je. Pochopit, jaké operace jsou rychlé na spojový seznam, ale pomalu na polích a vice versa. Tak, aby pochopili, že budete muset pochopit, Big-O notace jen vědět, jak mluvit o nich druhy věcí. A budeme o tom mluvit. Takže první věc, souvisí seznamy. Zde je na vysoké úrovni obrázek propojeného seznamu. Ukážeme to ve třídě. Máme obvykle mají 10 lidí stojící na jevišti. Ale máme řadu uzlů, kde každý uzel má určitou hodnotu a ukazatel jeho další hodnotu. Takže se dostat z jednoho uzlu do druhého, můžete jen říct, dej mi další uzel. Máte tento uzel. Dej mi další uzel. Máte tento uzel. Dej mi další uzel a tak dále dokud je uzel není vlevo. Takže i nadále mluvit o tom, je na vysoké úrovni. Je to velmi snadné vložit věci do propojeného seznamu. Pokud se nechcete starat o pořadí, stačí navštívit hned na začátku. To je časová konstanta. Ale je to těžké najít hodnotu. Pokud se snažíte požádat, je sedm v mém seznamu? Musíte projít každý jediná hodnota. Je to sedm? Je to sedm? Je to sedm? Je to sedm? Znovu a znovu. A to je O (n). Takže při studiu na kvíz, porovnat to s poli. Je to v pořádku? Světla se dim. OK. Pokud je propojený seznam lepší? Když je pole lepší? Takže pojďme se podívat na některé kódu. Zde je potenciál uzlu. Je to struct. Má int n, který bude naše hodnoty. A to je uzel struct * další, které je náš ukazatel na další uzel. Takže zde můžeme vidět, že jsme se stalo aby dali int v našem uzlu. Ale kdyby to bylo spojeno seznam char hvězdy nebo spojový seznam plováků, jsme úplně to mohl udělat taky. Zapamatovat si mě na pset6, pravděpodobně jste měl spojový seznam char hvězd nebo jen statické char pole. Podívejme se zde na operaci. Takže chceme vložit nový n do našeho propojeného seznamu. Začneme s hlavou ukazatel, který je ukazatel na tento uzel, který má hodnota n a další o ukazatel, který poukazuje na tento uzel je hodnota n, a další z null, protože je to poslední uzel. Takže v zájmu času, budu dát všechny kódu na obrazovce. A budeme chodit přes něj pár řádků najednou. Tak tady je kód. Doufám, že je to čitelné. První věc, kterou děláme, je jsme malloc nový uzel. Tak to je ukazatel na nový uzel, který není zcela nic nastavit se v něm ještě. Zkontrolujte jsme, aby se ujistil, že nový uzel není null. V opačném případě se musíme vzdát. Takže, co se ujistíte, že jsme teď nastavit hodnoty v uzlu. Takže jsme dali nový n do našeho n pole. A jsme si stanovili další ukazatele poukazují na původní hlava, takže můžeme Nyní se vkládá tento uzlu do našeho seznamu. Nakonec, máme globální bod hlavy na našem novém uzlu, takže pokud bychom měli začíná na hlavě, by měli být v tomto nový první uzel místo starý první uzel. A když se tato funkce ukončí, variabilní nový uzel neexistuje, , protože to byl místní funkce. Tak tohle je stav světa. Naše globální hlava ukazuje na naše nové První uzel, který ukazuje na naši Originální první uzel, který body k uzlu po tom. To bylo vložení. Doufám, že se poměrně jednoduché následovat. Pokud si nejste jisti, nakreslit obrázek. Tak jsem zjistil, že mluví o spojové seznamy a při pohledu na Kód je velmi nepomůže. Zatímco při pohledu na obraz souvisí Seznam umožňuje, abych si myslel, oh, tak Mám tento uzel zde. Ale když jsem aktualizovat tento ukazatel, to skončí odpojen. A já jsem zapomněl, kde Uzel jde. A kód ukončí. A budete mít více uzlů které jsou odpojeny. A nemusíte skončit s Seznam chcete. Takže pokud si nakreslit obrázek a udělat to krok za krokem, doufejme, uvidíte správný řád věcí, pokud jde o aktualizovat odkazy, aby se ujistil , že seznam je spolu. Insert je poměrně jednoduché. Složitější z nich bude vložení do tříděného seznamu. Složitější funkce je odstranit a najít, takže při pohledu přes seznamu do uvidíme, jestli něco je. Možná jste to udělal v pset6, když dostal do hash tabulky a jste řekl, dobře, je slovo jablko v mém Google seznamu? Takže jste již učinili. Ale určitě, osvěžit paměť a pokusit se reimplement find a reimplement odstranit pro spojový seznam. Fun straně poznámka, tam je také dvojnásobně-spojený seznamy, kde máte ukazatele, které ukazují dopředu i dozadu, takže můžete jít na další uzel a na předchozí uzel. A tam byla otázka, na minulý rok test tohoto typu, mluví o dvojitě vázané seznamy. Nyní, to je struktura, která jste poměrně obeznámeni s, protože většina z vás pravděpodobně použili na pset6. Tady je jeden, který je trochu méně známé. Jako vedlejší poznámku, myslím, že kvíz 1 je především těžší než kvíz 0, protože věci, co děláte, budete neudělali tolik. Chcete-li dát, že jinou cestu, pro Quiz 0, jste napsal spoustu C. A zeptal se vám o C. Pro Quiz 1, budeme se vás zeptat PHP a JavaScript, které nenapsal tolik. Chystáme se vás zeptat na C-kódu, které jste nenapsal tolik, Tento moderní C materiál. Tak určitě, cvičit co jsme mluví v přednášce, kterou nutně dělat na problém nastavit. Když o tom mluvíme, jste nenapsal zásobník na problém nastavit. Ale to bylo v přednášce. Zde je na vysoké úrovni obrázek komíny, které vám ukážeme každý rok. Je to hromada zásobníků v Mather jídelna. Na vysoké úrovni, komíny jsou poslední in, first out datové struktury. To znamená, že budete dát věci do - 1, 3, 7, 12, 14, 0 negativní. Jedna věc, kterou jsem nemohl mít řečeno - negativní 3, 0. Můžete dát všechny tyto věci palců A poslední, kdo si dát v je první ten, který se chystá vyjít. Takže máte dvě operace - tlačit a pop. Všichni uvedení v tom, že jsem byl ukázal jako to je tlak. A pak, když jsem se dostat do chytit něco, nebo dostat na vrchol chytit něco, to je pop. Takže budeme realizovat komíny. A ukázal se jim v přednášce pomocí matice. Ale vy jste mohli dělat pomocí propojených seznamů. Stack je koncepční údajů struktura, ne jako jedno specifické pro implementaci. Takže to, co by to vypadat? To bude vypadat tak trochu jako to. Měl bys mít velikost celé číslo. A budeš mít celou řadu hodnot, které voláme zásobníky, protože to je co obraz byl pro us - int zásobníky - a pak některé maximální kapacita. Takže to, co by se tlačit vypadat? No, pokud máme zásobníku s, pak stiskněte něco na s, dostali bychom se velikost S. A že by se další otevřené místo našeho pole. Takže pokud máme v našem zásobníku tři věci, pak zásobníky 3 bude další otevřené místo, protože 0, 1, a 2 ar již naplněna. Takže jsme dali hodnotu do s.trays [s.size], třetí místo. A pak jsme se zvýšit s.size říci, hej, měli jsme před tři věci. Nyní máme čtyři. Takže až se příště budete tlačit, že jste dám něco do 4. Nebo se příště budete pop, budete podívat se na 3. místo 4 nebo cokoliv jiného. A pak se vrátíme pravda řekněme, hej, jsme uspěli. To fungovalo. Jako pravidlo, je-li funkce, která je Předpokládá se vrátí hodnotu true nebo false vždy vrací hodnotu true, můžete udělal něco špatného. Tak to funguje? No, to funguje na 1, a 2 a 3, a 4, a pět. Ale řekněme, že jsem se do mé schopnosti. Já jsem pak narazíte na problém, protože pokud velikost je stejná jako kapacita, jsem Nyní se snaží dát něco do pole, kde nemám prostor. Tak krátká kontrola opravit to. Pokud KAPACITY s.size ==, vrátí false. Jinak, jít a dělat to, co jsme udělali. Tak co jiného bychom mohli požádat o pro komíny? Co dalšího byste měli studovat? Co dalšího byste měli cvičit? No, provádění pop. Už jsme udělali tlak. Udělám to. Provádění non-array, kde můžete použít spojový seznam, možná. Implementace non-int. Zde Udělali jsme ints. Ale mohlo to být plováky. Mohl jsem být řetězce. Mohlo by to být char hvězdy. Podívejte se na posledních kvízy pro druhy otázky jsme požádali o komíny. Já řeknu, že jsme probrali komíny kolem stejně jako Probrali jsme jim minulých letech. Takže kvíz otázky by být dobré znamení. Do budoucna ještě rychleji, fronty. Jsou jako komíny. Ale oni jsou první dovnitř, první ven. Pokud jste Britové, slovo fronta Asi se hodně smysl pro vás. V opačném případě můžete mít Slyšel o něm jako čára. Pracují jako linky v obchodě Apple. První osoba, která má ukázat na 03:00 v dopoledních hodinách, je první osoba koupit jeho iPad. Takže máme dvě operace - enqueue a dequeue. Enqueue dá někdo v řadě. Dequeue táhne první osoba mimo linku. Opět můžeme realizovat to s celou řadou. Takže to, co je struct nám ukázal na přednášce? Bylo to jedno. Opět platí, že čísla. Opět platí, že velikost a to nová věc vpředu. Proč je tam něco, co nazývá front? Je to index další prvek dequeue. Je to jen interně sledování ten první se ukázat, takže jsme ji vytáhnout, když je třeba. Určitě se podívej na skripta a zkuste realizovat Zařadí a Dequeue při studiu na kvíz. Důležité věci k zamyšlení. Obal kolem v případě, že přední a Velikost skončí větší než kapacita. Opět platí, že pokud vaše struktura je plná, budete mít problém. Hash tabulky, které jste předtím neviděli. Většina z vás pravděpodobně realizována ty na pset6. Je to struktura, která si klade za cíl O (1) vkládání a O časová konstanta (1) časová konstanta vyhledávání. V CS50, jsme zavedli toto jako pole spojových seznamů. Klíčovým prvkem k hash tabulky je funkce hash. Tak to převede vstup, řekněme, slovník slovo, do čísla, který se bude náš index. A budeme používat tento index do našeho pole. Tak tady je roztomilý malý obrázek od study.50.net. Hodíme všechna slova do naše hash funkce. A funkce hash nám říká, kam umístit tato slova. To vše je skvělé v zemi, kde je tu jen jedno slovo pro každý slot. Ale jak si pamatujete z pset6, že jsou více než slova sloty. Takže co se stane, když se se kolize? Namísto uložení jednu hodnotu v, řekněme, hash tabulka 3, můžete uložit propojeného seznamu. A tak místo toho, aby meloun zde, měli byste mít spojový seznam, kde je první uzel je melounu. A další uzel je kočka. A třetí uzel je kolize, pojďme říci, protože všechny tyto slova začínají s C. Takže většina z vás to udělal pro pset6. Pokud jste neudělali hash tabulky na pset6 a pokus o něco takového trie, určitě zkontrolovat hash tabulky. Pokud jste to na pset6, rozhodně zkontrolovat hash tabulky. A pokud jste to udělal na pset6 a ne pracovat zcela v pořádku a vás měli spoustu problémů s tím, rozhodně zkontrolovat hash tabulky. Takže poučení opravdu je určitě zkontrolovat hash tabulky. Drtivá menšina z vás se snažili se snaží o pset6. High-level obrázek. Je to něco jako tohle, kde každý uzel má řadu dětí, kde každý Dítě odpovídá na dopis. A každý uzel také říká, Ahoj, já jsem slovo. Takže v tomto případě slovo Maxwell, pokud budete postupovat podle M A do X-W-E-L-L a pak se po ní ještě jedna. A vy si to symbol, delta, což se označují tak, že znamená to, je slovo. Takže Maxwell je slovo. Tyto delty jsou celé znamenat, které věci jsou slova, a které věci nejsou. Takže v pset6, údaje se uložená podél jakékoliv z našich uzlů bylo "Jsem slovo. "A super věc, o pokusech se prokazují vkládání a vyhledávání v O (délka slova). Takže stačí se dostat přes Maxwell, je to M-A-X-W-E-L-L. Takže sedm nebo osm - Nemohu počítat - kroky, jak se dostat na konec a zkontrolovat věci. Tak rychlé realizace zde. Rob prošel spojené Seznam v jeho posmrtné. Tak to zkontrolovat. Promiňte. Prošel trie v jeho posmrtné. Tak to zkontrolovat. Ale vy jste v podstatě mají každý uzel má 27 odkazy na další uzly a jeden Boolean pro jsem slovo. Podívejte se Rob je po smrti, jak to vlastně je implementována. Naše finální struktura, naše stromy a binární vyhledávací stromy. Takže při pohledu na to, ty byly pokryty naposledy 8. týden, v pondělí. Strom je podobný trie, kromě tebe nemusí mít nutně 27 uzlů na každý bod. A nemusíte mít tato data při každém krok, který znamená, zda - Cesta nezáleží. Vzhledem k tomu, trie, cesta z vrcholu na dno, Maxwell, bylo pro nás důležité. Každý uzel, ale má více děti, možná. Máme nějaké další slovní zásobu. Kořen stromu je na samém vrcholu. A můžeme říci, že velmi nejspodnější uzly, které nemají žádný děti jsou listy. Tak jako trie, strom struktura uzlů. Obyčejný druh stromu, který budeme mluvit o tom, je binární strom, kde každý uzel nemá žádné děti, nebo jedno dítě nebo dvě děti. Takže tento obrázek tady není binární strom, protože Uzel 3 má tři děti. Ale pokud bychom měli ignorovat ty, zbytek to je binární strom, protože to ukazuje tu vlastnost, že každý uzel má nula, jedna, nebo dvě děti. Tak jak bychom mohli vyjádřit to v kódu? Mohli bychom mít uzel, kde má každý uzel celé číslo v ní, jakož i jako ukazatel do stromu na levé straně a ukazatel na strom na Dobře, takže dvě děti. Jak je to užitečné? No, pokud uděláme pravidla o tom, kde se dát uzlů, můžeme hledání rychleji. Takže tam je pojem binární vyhledávání strom, kde všechny uzly na levý podstrom mají menší hodnotu než uzel se díváme na. A všechny uzly na pravém podstromu mají větší hodnotu než je kořenový uzel. No, to vypadá jako hodně slov. Chystám se dát dovnitř double citace a ukážu obrázek. Takže zde je příkladem binární vyhledávací strom. Vidět, že začneme s 10. Vše, co na levé straně 10 je menší než to. A vše, co k pravé straně je větší než to. Ale víc než to, že každý uzel v strom vyjadřuje tuto vlastnost. Uzel 7 tak má 3 k vlevo a 9 na pravé straně. Takže všichni z nich jsou menší než 10. Ale při pohledu na právě ti, 7 má 3 až jeho levá a 9 po jeho pravé straně. A podobně jako na pravé, 15 má 14 na jeho levé straně a 50 na jeho pravé straně. Takže tři uzly tamhle, 15, 14, a 50, jsou také platné binární strom nebo platný binární vyhledávací strom. A všichni jsou větší než 10. Takže oni mohou být na tady. Je tu otázka? DIVÁKŮ: Jak se vypořádat, když máte dvě sedmičky? R.J. AQUINO: Jo. Jak se vypořádat s dvěma hodnotami které jsou stejné? Některé binární vyhledávací stromy říci, že vám ignorovat duplicitní, protože cílem je jen říct, co jsem viděl tyto věci tak daleko. Některé binární vyhledávací stromy Dalo by se říci mají počítat uvnitř uzlu. Jiní by se říci, že vše, co se vlevo je menší než nebo rovno. A vše, co k pravé straně je větší než. Záleží jen na tom, co Problém je, že jste řešení. Takže ve slovníku, například, můžete by se starat o duplikáty. Ty by se vyhodit. Ale nějaký jiný problém, který by mohl starat. DIVÁKŮ: Je možné mít 1 na levé straně 15, který je menší než 10? R.J. AQUINO: Ne Pokud zde byly 14 a 1, to by nemůže být platný binární vyhledávací strom, protože všechno, na pravé straně 10 musí být větší, než to. A uvidíme proč. Je-li v zemi vyhledávání je mým cílem najít 14, začnu u kořene. Tak jsem se podívat. OK. Chystáme se začít u kořene. Podívejte se na 10.. No, 14, náš cíl, je větší než 10. Tak to musí být na pravé straně. To je velmi podobné na celém telefonu Kniha věc, kterou jsme udělali, binární hledat tam. Ale místo toho, binární vyhledávání v poli, jsme binární vyhledávání v tomto stromu. Takže pořád hledáme 14. No, 14 je menší než 15 let. Takže pokud je to v našem stromu, to musí být být v této oblasti zde. To musí být na pravé straně 10 a na levé straně 15. A tak jsme se zkontrolovat tento uzel. A yay, jsme našli 14. Nebudu chodit přes něj. Ale tady je to kód. Je to vlastně poměrně jednoduché, protože to je rekurzivní. Co bychom vás požádat, aby to na kvíz? Mohli bychom vás požádat, abyste napsat tento kód. Mohli bychom vás požádat, abyste se na tuto kódu a upravit tento kód a vysvětlit, co to dělá. Jo. Otázka? DIVÁKŮ: Jsou tyto snímky bude k dispozici jako byli naposledy? R.J. AQUINO: Ano. Takže tyto snímky budou určitě být zveřejněny. DIVÁKŮ: Jsou skutečně vyslán právě teď na webových stránkách. David právě udělal. R.J. AQUINO: Snímky jsou právě teď na webových stránkách. Budu asi urovnat pár na překlepy jsem si všiml a opravit je. Ale je tu proud verze na stránkách. Ostatní věci, které jsme vám mohli zeptat na to - napsat vložka. Napište iterativní verze rekurzivní funkce prostě vám ukázal nebo mluvit o těchto věcech, stejně jako v body, ve slovech, ve větách. Porovnání dobu chodu a vysvětlení co byste chtěli použít binární vyhledávací strom pro místo hash tabulky, například. Takže pochopení těchto struktur na docela hluboké úrovni. Pochopit, jak je psát, jak se používat je, jak se o nich mluvit. A budete vše nastaveno. Otázka? DIVÁKŮ: Když píšete binární vyhledávací strom, jak si určit, jaký hodnoty aby jej jako kořen? R.J. AQUINO: Takže otázka je, co Hodnota si udělat jako uživatel root? V závislosti na kódu, můžete může mít globální kořen. Takže můžete mít pravděpodobně měl v pset6 globální hash tabulky. Nebo můžete projít kořen v jako argument. Takže tato funkce vyhledávání zde bere argument uzlu *. A tak bez ohledu na uzel vám stalo, že se při pohledu na je jednou jsi léčbě jako uživatel root, když ho projít dovnitř A já jsem všechno. To jsou moje snímky. Další osoba může přijít swapu v notebooku a mic. ROB BOWDEN: Myslím, že by mohl mít interpretovat tuto otázku jinak. Ale já jsem interpretoval to jako, když máte čísla 1, 2, a 3, jak jsme se vědět, aby dvě kořen na rozdíl od 1 nebo 3? Pokud uděláme 2 kořene, pak je to pěkně 1 a 3 na levé a pravé. Ale pokud 1 je kořen, pak je to 1 až horní, 2 vpravo, 3 vpravo. Takže ve výchozím nastavení, nevíte, co dělat kořen. A pro každou algoritmus čekáme na dát, jen první věc, kterou Vložka by kořen. Nebo vám bych dal binární strom, který již existuje, který má kořen. Ale ostatní algoritmy existuje takové, že kořen se aktualizuje, takže pokud vám skončit v situaci, kdy je to 1, 2, 3, to by se automaticky aktualizuje, aby aby 2 nové kořeni, aby je to stále pěkně vyrovnané. ANGELA LI: Cool. Ahoj, kluci. Já jsem Angela. A já jdu dokončit naši C a pak jít do některé z našeho webu technologie - HTTP, HTML, CSS a. Takže první věc, kterou je vyrovnávací paměť přepadové útoky. Takže pojďme se podívat na tento kód. Je to docela jednoduché. K dispozici je funkce foo. A to nic nevrací. Ale to se v ukazateli na řetězec s názvem bar. A bude to prohlásit toto vyrovnávací paměti, což je znak pole, které má 12 slotů. A používá memcpy, který je jen funkce, která kopíruje z jedné adresy do jiného. Tak to se snaží kopírovat do náš vyrovnávací paměti od toho, co bar je ukazuje. Takže vůbec představu, co se děje s tímto kódem? DIVÁKŮ: Pokud bar je delší než C, budou přepisovat. ANGELA LI: Jo, přesně tak. Nemáme žádnou záruku, že bar bude nižší než 12 let. Jen jsme se trochu libovolné číslo 12. A my jsme byli jako, doufejme, že náš vstup uživatele je méně než 12 znaků dlouhé. Takže v ideálním světě, pokud náš vstup vždy, jak se očekávalo, pak dostaneme něco jako, ahoj. To je méně než 12 znaků. Jedná se načte do char c. A pak jsme se s tím něco udělat. Je to opravdu nezáleží. Ale zlomyslný člověk může dělat něco jako je toto, kde se dát nám vše, co je bar ukazuje na, to bude poukázat na této obrovské pole z právě je. A to je způsob, jak déle než 12 let. Takže to jít celou cestu tady, kde návratnost Adresa býval. Takže řekněme, že tuto funkci se nazývá foo. Možná, že foo byl volán jiný Funkce, která byla volána hlavní. Takže když běží foo, je třeba vědět, kam se vracet. Pokud foo byl volán nějaké funkce jmenoval baz, musí vědět, že je to se vrátit do Baz. A to je to, co tato zpáteční adresa tady se nám říká. Ale když jsme to přepsat s některými dalšími adresa, v tomto případě se jedná o zastoupení na adrese počátku této vyrovnávací paměti, pak co se vlastně bude dít, je, že místo návratu do Baz, která vyzvala své funkci, je to jen jít na přední straně tohoto kódu. A jestli je to tam proto, zlomyslný hacker vole přišel a injekčně, pak možná tato částka na to není ve skutečnosti je. A to je vlastně jen kód, který přestávky počítač nebo tak něco. Takže se defenzivní o tomto druhu věc, budete muset nikdy předpokládat, že vstup uživatele je určitá množství znaků. Například, když jste dělali pravopisu, jste řekl, že slova byla pouze bude 40 znaků dlouhý maximum. A to bylo dobré. Ale pokud ne, pak se budete muset ujistěte se, že jen číst 45 znaky najednou. V opačném případě můžete přepsat Váš vyrovnávací paměti. Jakékoliv dotazy na to. Jo. DIVÁKŮ: Mohl bys mluvit něco více o nich? ANGELA LI: Omlouvám se. Ano. Diváků: mikrofon je jen pro video. Budu se snažit a projekt. Ahoj, kluci. Sup? Tak pojďme na několik věcí v CS50 knihovny, které jste používali všechny semestr, většinou získat vstup od uživatele. Jak víte, zahrnout CS50 knihovna tím, že jen dělá CS50.h, které obsahuje všechny prototypy funkce, které můžete použít, jako GetString a vezmi_int, a GetFloat, et cetera. A tam je to jeden řádek v CS50 knihovna, která definuje řetězec, který vy všichni víme teď je jen char *. Ale pojďme se podívat na jak GetString funguje. To je velmi zkrácená verze. Můžete vytáhnout soubory CS50 knihovny z, myslím, manuals.CS50.net. A můžete pročíst vlastní funkce. Ale to se týká některých důležité části. Takže jsme vytvořili nějakou vyrovnávací paměti se nějakým způsobem. A to, co děláme, je, že jsme se o jeden znak v době běžně n. To je místo, kde uživatel zadá text na konzoli. A tak budeme číst v charakter tak dlouho, dokud to není nová vedení a to není konec souboru, který je konec standardního vstupu. A pro každý znak, který čteme v, v případě, že postava skončí přidání počtu znaků, které jsme si v, a to je více než naší schopnosti, pak to, co děláme, je, že jsme jen změnit velikost našeho vyrovnávací paměti tak, že je to dvakrát tak dlouho. Takže znovu, to ochrana proti pufru přetečení útoky, protože jste četl v znacích. A pokud v libovolném místě můžete přečíst v příliš mnoho, stačí rozšířit své vyrovnávací paměti. Můžete vynásobte ji dvěma. A pak budete mít více prostoru. V opačném případě stačí přidat znak do bufferu. A poté, co jsem četl ve všech znaky, bude to zmenšit buffer zpět na normální velikost, přidat null terminátor, a pak se vrátit. Nyní se pojďme podívat na vezmi_int. Můžete vy si to? Mohu přiblížit trochu. Nevím, jak počítače fungují. To nic. Nemohu přiblížit správně. To je opravdu těžké. Je mi to líto. Pojďme se jen podívat na to. Takže to, co vezmi_int dělá, je to první čtení v řetězci od GetString, které jsme realizován před. A důležitou součástí poznamenat, je-li to sdílení, že to skončí čtení je stejně jako ve skutečnosti řetězec, pak se jen vrátit INT_MAX na představují selhání. Proč bychom se vrátit INT_MAX místo negativního 1 nebo 1? Nějaké nápady? DIVÁKŮ: [neslyšitelné] Negativní 1 na jednoho. ANGELA LI: Jo, přesně tak. Takže ty jsi mnohem více pravděpodobné, že jen chtějí na vstupu 1 nebo záporné 1 po zobrazení výzvy pro n-tého a co nth maxes. Je to obrovský. Ty pravděpodobně nebude používat. Takže je to jako rozhodnutí o návrhu na ujistěte se, že nemáte náhodou vrátí chybu, nebo nechcete vrátit 1, který by mohl být analyzován jako správnou odpověď. Takže pokud neexistuje linka, vrátíme INT-MAX. V opačném případě budeme používat sscanf, který je jako scanf. Ale to čte z řetězce. A máme to naformátování Řetězec, který je% i% c. A snažíme se a zápas, který se co uživatel nám dal. Chceme, aby počet spárovaných věcí na 1, což znamená, že jen Opravdu chci, aby odpovídaly celé číslo obklopen možná bílá prostor, možná ne. V tomto případě, když dáte do něčeho jako je bar, bar neodpovídá vůbec, protože tam musí být číslo na začátku. Takže sscan nikdy se 0. Takže se nemusíte vracet, že. Případně, pokud jste vložili do něčeho jako je 1, 2, 3, A, B, C, která odpovídá jak celé číslo, ale i znak po něm. Takže sscanf vrátí 2, což také není ideální. Nechcete 1, 2, 3,, B, C, že je platný int. Tak to také nefunguje. Ale říct, že dát něco jako 50 let. To se bude shodovat% i, což znamená, že to bude mít číst do n. A teď, n bude obsahovat číslo 50. A pak se můžete vrátit. V opačném případě budete hit Opakovat. A pak to prostě chodí dokola, dokud dostanete správný vstup od uživatele. Jakékoliv dotazy na to? DIVÁKŮ: Takže pokud byste chtěli vytisknout hodnota vezmi_int na [neslyšitelný] by to být jen číslo a max? ANGELA LI: Jo. Takže pokud používáte vezmi_int, měli byste předpokládat, které nechcete n-tý max. do být platný vstup, protože budete předpokládat, že to bylo špatné. DIVÁKŮ: Kdybychom neměli char c a někdo dal v 1, 2, 3, Sam, by to stále pracovat pro 1, 2, 3? ANGELA LI: Myslím, že to bude fungovat. Ale nechcete 123Sam se být platný vstup od uživatele. To opravdu není int. Takže to není fér analyzovat jako int. OK. V tomto případě, pojďme na internetu. Takže HTTP není jazykem. HTTP je jen soubor norem pro jak posílat věci z klientů, že jsi to ty, na serverech. To je ostatní lidé na webu. Takže HTTP je zkratka pro Hypertext Transfer Protocol. Je to srdce a duše celého pásu. Hypertext část právě odkazuje na HTML. Přenos je klientům jako budete posílat žádosti o servery, které poskytují odpovědi. A protokol je jen, jak to můžete očekávat, že server chovat? A jak se má chovat tak, že si můžete zjednodušit tento komunikační proces? Takže požadavky HTTP vypadat hodně podobně jako tato. GET je druh žádosti. Vy jste viděli požadavky GET a požadavky POST. To je druhá věc tam, / já, že je to jen URI nebo URL, kde se Chci jít do hostitele. Takže tato žádost je žádostí o stránky, stejně jako www.facebook.com / mě. A to je požadavek GET. A pak to HTTP/1.1, to je jen verze protokolu HTTP, který používáte. Je to téměř vždy 1.1. A pak je tu parta dalších věcí taky. Můžete skutečně vidět je, pokud máte otevřít konzoli, když jste procházení webu. Odpovědi vypadat další podobné. Horní část je, opět, typ HTTP, který používáte následuje kód stavu. Takže 200 OK je všechno dopadlo. Tady je váš obsah. Váš obsah bude následovat. A pak vám řekne, jaký druh obsahu a dalších věcí taky. Stavové kódy, existuje několik důležité ty, které byste měli vědět. 200 OK je jako všechno, co je zlaté. Všechno funguje. 403 Forbidden. To jste asi viděli, pokud jste zapomněli něco chmod správně. To znamená, že nemusíte správné oprávnění k přístup, který na serveru. Je to jako, ne, nemůžeš ji vidět. 404 znamená, že to neexistuje. Nebyl nalezen. Pravděpodobně jste již viděli, že hodně. 500 Internal Server Error je obvykle jako něco pokazilo na straně serveru. Takže, když se provádí pset7, pokud jste měli chyby PHP, mohl bys skutečně jít na stránku a zobrazit Celá parta PHP chyb věci. Ale to není obvykle nestane, protože webové stránky nemají opravdu chcete říct, proč se jejich stránky rozbité. Nejspíš jen vrátit 500 Internal Server Error. A pak je tu 418 jsem konvice. K dispozici je celý příběh o tom, proč to je věc. Ale můžete přečíst o tom ve svém volném čase. Je tu celá banda ostatní stavové kódy taky. Ale to jsou ty, měli byste vědět. Takže pojďme mluvit o HTML. HTML, pamatujte, že není programovací jazyk. Je to značkovací jazyk. To znamená, že popisuje obsah. To vám řekne, co dokument HTML vypadá líbí, nebo ne, jak to vypadá ale jak je to strukturovaná. Tak se definuje strukturu a sémantika webových stránek. Je to jako, to je bod. Toto je seznam pořadí. To je jako část mé stránky. Tady je to titul. To dělá věci, jako že. To není styl nic z toho, protože že to, co děláte v CSS. A vypadá to, že série z vnořené tagy. Takže použít příklad opravdu základní HTML stránky, budete mít DOCTYPE prohlášení tam. Toto prohlášení DOCTYPE je říká, jsme pomocí HTML5. Pak máte velkou HTML tag. Obsahuje hlavu a tělo. Uvnitř hlavy, máte titul. To je to, co se děje v názvu bar ve vašem prohlížeči. Máme značku odkazu, který spojuje v externím seznamu stylů. A pak máme skript, který táhne z externího JavaScriptu stejně. A pak uvnitř našeho těla je ve skutečnosti co se bude zobrazeno na stránce. Máme odstavec a pak obrázek v tomto odstavci. Tohle je obraz koťat. Všimněte si, že obraz tag zavře sama. Takže místo toho otvoru s obrazem a pak dělat další / image, můžete jen tento malý lomítko tu, která ji uzavírá. A tag obraz má také tento klíč hodnota atributu s názvem alt. To je alternativní text, který se se stane, když budete vznášet se nad ním. Většina prvků HTML mají nějakou hodnotu klíče věci, které můžete dát to, různé přizpůsobení. Jo. DIVÁKŮ: [neslyšitelné]. ANGELA LI: No, tak to je atribut tagu. Takže pokud jste se pomocí jQuery, mohl bys dělat vyberte image.getAttribute. A pak si můžete vyhledat získat atribut alt. A to vám koťata. Pokud si pamatujete formulářů v HTML, vstup prvky budou mít atributy jméno. A to je to, co PHP používá k odesílání žádosti, pokud se předložené formuláře. DIVÁKŮ: Zmínila jste se o něco o tom, pokud používáte kittens.jpg nebo něco, co má chybějící soubor složek nebo jiné soubory? ANGELA LI: Ano. Tak tohle je to, co se nazývá relativní cesta, protože nedám si úplnou cestu. To je, jako když v C, pokud je to fopen nějaký soubor, pokud fopen hi.txt, že hi.txt Očekává se, že bude ve stejném adresář, pokud to dát více Komplex cesta. DIVÁKŮ: Takže byste mohli zadat která složka [neslyšitelný]? ANGELA LI: Jo. A můžete vyhledat jak na to. Ale když jsem se chtěl dostat ven kittens.jpg z nadřazeného adresáře, bych si .. / Kittens.jpg. Jo. Promiňte. Jo. Člověče, já zapomněl na otázku. Jaká byla otázka? Ach, otázka zněla je, kittens.jpg Očekává se, že bude ve stejném adresáři? A v tomto případě to je. Ale můžete také dát určitou cestu tak, že to nemusí být. Dobrý? CSS. Tak CSS, jako je HTML, není programovací jazyk. CSS je jen řada pravidel styling. To je zkratka pro kaskádové styly. A budete používat ve spojení HTML na stránkách stylu. Takže existují tři způsoby, můžete zahrnout. Jeden způsob, jak to udělat, je v hlavě část vašeho HTML, můžete jen otevřít tag styl a pak držet některé CSS vládne tam. Je to docela v pořádku. Jo. DIVÁKŮ: Mohl byste dát ty tagy styl v mezi, pojďme řekněme, tělo a / tělo. A pak by styl pouze v těle. ANGELA LI: To bys mohl. Bude to fungovat. Ale neměli byste, protože styl je druh metadat, které by měly jít do vedoucí dokumentu. Tělo by se skutečně obsahují pouze co se vlastně děje, aby objeví na vaší stránce. DIVÁKŮ: Takže byste dal styl ve vaší hlavě styl Celé webové stránky, ne? ANGELA LI: Jo. Takže uvedení styl tady, tato pravidla CSS se bude vztahovat na celou stranu na základě jejich voliče. Takže lepší způsob, jak to udělat, je místo mít značku stylu ve vaší hlavě, Máte tento odkaz na externí styl list, jako bych vám ukázal v Předchozí příklad. Co to však je, že se snaží, a zjistí, soubor style.css a pak vytáhne ji v a používá jako styly pro stránku. A vaše style.css by jen vypadat takto. Bylo by to jen banda CSS. A konečně, je tu jiný způsob, jak mohou zahrnovat CSS, které si opravdu by neměl nikdy dělat. Je to výzva inline styl. A tak jakýkoliv HTML element může také se atribut style. A pak se v tomto atributu style, můžete dát pravidla CSS. Takže v tomto případě, co div, že jsem definování tady, bude to mají černé pozadí a bílá barva textu. Ale neměli byste to dělat, protože to, co to však je, že staví své styling uvnitř HTML. A já vím, že jsme mluvili o HTML je struktura a CSS styl. Pokud to uděláte, se mísí je dohromady. A to není moc čisté. Tak nedělej to. Použití příklad CSS, tam jsme vyberte tělo HTML dokument. A my na to všechno Bude Comic Sans. Také jsem nedoporučuji to. Ale jsi to mohl udělat. Druhé pravidlo tady, bude to vyberte prvek na Stránka s ID main. Takže bez ohledu na HTML element, řekl jsem ID = Hlavní, já dám, že 20-pixel marže a sladit vše, veškerý text, do centra. Poslední věc, kterou vybere podle CSS třídy. Takže jakýkoli prvek na stránce, která jsem dal třída sekce, budu dělat to barva světle modré pozadí. Jo. To je vše, co mám. Otázka? DIVÁKŮ: Co hashtag Před hlavním dělat? ANGELA LI: Otázkou je, co dělá hashtag před hlavní úkoly? V tomto případě, hash v CSS znamená vybrat podle ID. Takže když jsem měl nějaký HTML prvek, jako je DELIT = hlavní, toto pravidlo CSS vybírá věc s ID main. A podobně, období před Sekce je vybrat podle CSS třídy nebo vyberte pomocí HTML třídě. DIVÁKŮ: Proč je tam má před 6 v barvě pozadí? ANGELA LI: Jo. Takže otázka je, proč je tam hash před 6? To je jiný než ten hash. To znamená, že dáváte hexadecimální barvy. Takže hexadecimální barvy, to jen představuje barvu. A pamatujte RGB trojice, kdy jste na forenzní pset? To je podobné. První dvě číslice představují kolik je v červené barvě. Druhé dva představují Jak moc zelený. A třetí představuje kolik modrá. A hash je to se děje reprezentovat barvy. Takže něco z 0, 0, 0, 0, 0, 0 až F, F, F, F, F, F je platný. Je to nějaký platný barva, která může budou zobrazeny ve vašem prohlížeči. Otázka? DIVÁKŮ: Jaký je rozdíl mezi použití podle ID a třídy? ANGELA LI: Otázkou je, co je rozdíl mezi použití podle ID a třídy? Můžete mít pouze jeden prvek HTML dokument, který má danou ID. Takže jen jedna věc, na mé stránce je povoleno mít ID main. Tak jej použít pro toto je hlavička. To je navigace. Toto je zápatí. Třídy jsou odlišné, protože můžete platí tříd jako mnoho prvků HTML jak budete chtít. Tak například, dělal jsem třídní část, protože tam je asi víc než jeden část na mé straně. Jenom dovoleno mít tolik prvky na stránce se stejným třída, ale pouze jeden s určitým ID. DIVÁKŮ: Tak tečka představuje třída? ANGELA LI: Jo. Tečka reprezentuje třídu. V pohodě. To je všechno, co mám, kluci. Děkuju. [APPLAUSE] ZAMYLA CHAN: Ahoj, všichni. Jsem Zamyla. Budu se zde zabývat PHP, MVC a SQL dnes. Hodně materiálu, který budu krytina bude do značné míry přímo z pset7. Dobrá. Takže to, co je PHP? PHP je zkratka pro PHP Hypertext Preprocessor. Takže to, samo o sobě, je rekurzivní jméno, které je docela v pohodě. PHP je server-side skriptovací jazyk, a poskytuje backend a logické opory na našich webových stránkách. Takže Angela mluvila hodně o HTML a CSS, které bude struktura na internetových stránkách. Ale co když chcete změnit obsah dynamicky, nebo v případě, že se liší založené na uživatele nebo určitých podmínek? To je místo, kde PHP vypovídací Nyní, typicky, PHP může trvat několik méně čáry k provedení totéž v C. To proto, že PHP zpracovává paměti řízení pro programátora, na rozdíl od nás mají na malloc zdarma, podobné věci. Ale protože PHP je interpretační jazyk, typicky, to by mohlo provést trochu pomaleji než C, což je sestaven jazyk. Protože jdeme programování jazyky, pojďme se podívat na to, jak Syntaxe se liší. Buďme velmi opatrní, aby plést s tím. Takže se syntaxí PHP, ať už jsou vložení vašeho PHP uvnitř HTML souboru nebo do souboru. php sám, vy je třeba přiložit kód v otevřené PHP a uzavřené PHP tagy jako následuje, stejně jako na obrazovce. Proměnné v PHP. Každý proměnná bude začínat $ znak následovaný názvem Váš variabilní. Nyní, proměnné v PHP jsou volně zadali, což znamená, že nepotřebujete uvést, jaký typ dat je, když jste ji deklarovat. Nicméně, to neznamená, že nemají všechny typy vůbec. Takže když deklarujete proměnnou a stačí nastavit je rovna 1, a pak prohlašuji, další proměnnou, nastavte ji na hodnotu "1", a pak ještě jeden 1,0, dobře, v závislosti na typu rovnosti Provozovatelé používám, když chci porovnat všech typů, poté že bude stejná. Ale pokud chci, aby se ujistil, že typy jsou si rovni, PHP může ještě udělat že, i když jsme nenaznačují jaký to je, když jsme nejprve vytvořit soubor. Nyní, v PHP, i když jsme přepínání z programování jazyky od C, máme stále naše věrný, pokud podmínka, stejně jako to. Stále máme while, jen jako je tato, kde si dát do svého stav a poté tělo smyčky. A pak tu máme i náš pro smyčce který obvykle vypadá takto. Takže když jsem chtěl iterovat přes všechny devět psets a předložit a volání funkce submitPset, pak mohu udělat tu, které vy všichni provádí tímto bodem. Gratulujeme, mimochodem. Pro kamery, lidé řekl, děkuji. Nyní, pokud jste nechtěli, aby stačí použít tento pro smyčce, pak PHP vlastně také se věci tzv. foreach smyčky. Takže když jsem měl řadu čísel, 0 až 8, uložené v poli psets, pak bych mohl mít smyčky foreach, který iterace přes všechny čísla v psets. A pak bych mohl zavolat stejné fungovat osmkrát, stejně jako jsem to udělal předtím. Takže to pro každou smyčku je pěkné, protože nemusíte se, pokud nevíte, Přesná délka pole, které se, pak pomocí této smyčky foreach se o to postará za vás. Tak jsem udělal psets jako pole. Pojďme se podívat na to. Pole v PHP jsou obvykle stejné jako ty, které jsme měli v jazyce C, kde můžete deklarovat pole. A tady, mohu prohlásit prázdné pole a pak vybudovat dynamicky pomocí Indexy jsou celá čísla. Takže indexem 0, jdu uložit celé číslo 1, s názvem. Na indexu 1 na mém seznamu, jdu pro uložení hodnoty 2. A na třetí indexu, ale druhé číslo, budu uložit číslo 12. Nyní, to je v pořádku v tom, že funguje to dobře funguje. Ale říkají, že to záleží na mně co každý index má. Pro mě, index 0 znamená, jak Mnoho koček mám. A index 1 znamená, jak mnoho sovy mám. A příští znamená, kolik psů. No, tak to upřesnit, že místo mít na paměti, 0 se týká kočky a 1 až sovy, můžu použít asociativní pole, což znamená, že místo čísel jsou mé indexů, Mohu skutečně používat řetězce. Tak to je docela užitečné. A vy jste v podstatě jen vyměnit celá čísla s řetězci. A tady to máte asociativní pole. Jo. DIVÁKŮ: Je tu důvod, proč tam je podtržítko za sekundu část, protože můj seznam má pole. ZAMYLA CHAN: Otázka byla, je existuje důvod, proč tam je podtržítko mezi mou a seznamu? Ne. To je jen, jak jsem pojmenování můj variabilní. DIVÁKŮ: Na první linka, to je jedno slovo. ZAMYLA CHAN: Omlouvám. Udělám to. Jo. Měly by být stejný název proměnné. Dobrý úlovek. OK. Takže pojďme se přesunout na provázku zřetězení. Kdybych chtěl, aby se dva řetězce, pak jsem je zřetězit s operátorem tečka. Takže když mám Milo jako první jména a Banana jako příjmení, a pak zřetězení s operátorem tečky a pak uvedení mezeru mezi bude řetězec, který obsahuje Milo Banana, který jsem pak echo, nebo spíše vytisknout. Když už mluvíme o echo, mluvme o málo užitečná - Chybička se vloudila. Je mi to líto. Několik užitečných PHP funkcí. Takže máme - technické obtíže. Jedna sekunda. Poslal jsem ho. Problémy PowerPoint. A jsme zpět s PHP funkcí. A jsme zpět s PHP funkcí. Takže jsme se vyžadují funkce, kde pokud předáte do souboru, tady je právě příklad souboru, který Mohl bych projít dovnitř Tak to bude zahrnovat PHP kód z tohoto souboru, který jsem naznačovat. A to bude hodnotit, zda palců Pak máme také ozvěna, která je rovnoběžná s printf. Konec je rovnoběžná s zlomit, který ukončí blok kód, který jste palců A pak prázdné kontroluje, zda daný Proměnná je jako null nebo nula nebo co se ztotožňuje s tím, že prázdný. Jo. DIVÁKŮ: Pro řetězec zřetězení dot jeden provozovatel, v PHP, je to, že stejně jako v JavaScriptu, kde je to pomocí tečka pro zřetězení znamená znaménko plus? Takže pro celé jméno, můžete mít dolar podepsat první + a + vydrží? ZAMYLA CHAN: Jo. Takže otázkou bylo, zda v PHP jsme můžete použít stejné zřetězení jako v JavaScriptu s plusy. A Josef se dostat do toho později. Myslím, že má snímek na to. Ve skutečnosti, je to jiné. Takže v JavaScriptu, budete muset použít a zřetězit řetězce. A v PHP, musíte pomocí operátoru tečka. Tak jsou různé. OK. Takže teď, že jsme probrali vše Tento PHP, kde to opravdu přijde vhod? No, to přijde vhod, když jsme lze kombinovat s naším HTML. Takže naše PHP nám dá sílu, aby změnit dané stránky v obsahu HTML před jeho zatížení. A tak na základě různých podmínek, obvykle specifické pro uživatele, který je přihlášen, můžeme zobrazit různé informace. Lindo, jsi na něco zeptat? DIVÁKŮ: Můžete zřetězit celé číslo i? ZAMYLA CHAN: Ano, můžete. Takže otázka je, pokud je to možné zřetězit celá čísla nebo jiné variable.s teď přejdeme k MVC, které je vzor, ​​který se používá v pset7 a mnoho webové designéry použít pro organizování kódu v souborech na svých internetových stránkách. M je zkratka pro model. A v podstatě, model soubory se bude zabývat se interakce s databází. Zobrazit soubory, které se vztahují k estetika webových stránkách. A rukojeti Controller uživatelské požadavky, analyzovat údaje, dělá jinou logiku. V pset7, jsme spojili model a regulátor. A my jen volal jejich regulátory a dát je ve veřejném seznamu. A zobrazení souborů, můžeme použít jako šablony v adresáři šablon. Takže toto schéma zde také představuje že stejný druh dělení se modelu a regulátoru ve fialové zde na levé straně a pohled na pravé straně. Tak tohle je schéma, které někteří z vás Možná jste viděli v úřední hodiny nebo diagramy, které jsme byli kreslení jako vy se zjišťuje z vašeho pset. Tak tady, v daném regulátoru, model regulátor, máme funkce které se vztahují k dotazu SQL databáze, provádění PHP logiku. Možná byste vyhledat sklad Yahoo! Finance. Nebo možná, jen byste zkontrolovat, zjistit, zda uživatel podal tvoří již před tím, než navštívil vaše stránky. A pak byste měli učinit tvoří tady. Poté, co bylo předloženo, že forma uživatelem, akce, která byla zadanou ve formuláři v HTML tagu by uvést stránku, která je tato data vrátí do. Takže všechny ty informace by poslal zpět do regulátoru. Pak byste asi dělat trochu víc logika na to a možná provést několik více dotazů v SQL databázi a pak, konečně, přijít s pěkně balené sada informací, které by předat do nějaké jiné šablony , která se zobrazí informace. A teď, jak jsme se vlastně balíček že informace se? No, my máme funkci zvanou Render , která byla v souboru functions.php v pset7, kde můžete projít ve jménu soubor, název šablony. A pak si také projít v asociativní pole. A tak, že asociativní pole představuje různé informace které chcete předat palců A teď, co se děje, že je konstantní v Tyto příklady je, že klíče nebo, spíše, klíče na asociativní pole, které jsou, co se děje, aby se Očekává se, že konstantní šablonou, protože ví, že potřebuje něco, co nazývá zprávu nebo tzv. jméno. A pak věci na pravé straně, skutečné hodnoty, takže v tomto případě, který je hodný chlapec a Milo, ty jdou být hodnoty, které se mění že regulátor se mění při každém nebo s ohledem na konkrétní podmínky a projde, že palců Takže tady v šablonách, vidíme, že jsme používáte speciální znaky HTML, který právě v podstatě znamená, že chceme dostat peer řetězec, který uživatel dát dovnitř A chceme nahradit zpráva zde. Takže když jsme vlastně zobrazení soubor, specifický informace jsou předávány palců Všimněte si, že klíč, jak učinit práce je že klíče asociativní pole, které stát proměnná jména zde. A tak se hodnoty tohoto klíče v asociativní pole se pak stává hodnota proměnné. Nyní, pojďme se přesunout na SQL. To je zkratka pro Structured Query Language. A tak je to jen programování jazyk navržený pro správu databází. A to přišlo vhod pro nás naše pset7 web finance. V podstatě je to jen jednoduchý způsob, jak sledování a správu objektů a tabulek a propojit je navzájem. A teď, myslím, že SQL databáze v podstatě jako soubor aplikace Excel, možná, s více kartami listů. Takže byste mohli mít více tabulek, Možná, že navzájem propojené. A podobně jako v Excelu, máme hodně funkce, které chceme. Například, můžeme zvolit některé řádky. Můžeme vložit informace. Můžeme aktualizovat řádky. A můžeme také vymazat věci. SQL vybrat díla výběrem řádků nebo řada specifikovaných sloupců z databáze, které odpovídají určité Kritéria, které jste uvést. Takže tady, když vidím select * from kouzelníci, kde dům = Havraspár, pak Já výběru *, což znamená, že jsem výběr každý sloupec v tom, že řádek z tabulky průvodců, ale pouze tehdy, pokud Dům sloupec rovná Havraspáru. Nyní, to je čistá nebo SQL. Takže když jsem šel do phpMyAdmin, který je specifický způsob, který používáme pro správu Naše databáze SQL, pak bych mohl vložit že na webové stránky phpMyAdmin. A že by se spustit. Ale my vlastně chcete dělat že na straně PHP. Tak jak to uděláme? No, budeme používat funkci dotazu, který v podstatě provádí SQL dotazu. Používání? jako zástupný znak, můžeme projít v některých Hodnoty naší řetězec, který jsme chcete nahradit. Tak snad jsem ukládání jiný Hodnoty v curr_house, které představuje aktuální domu že jsem procházel. Tak jsem se projít, že jako zástupný symbol s otazníkem. A pak budu v podstatě provést totéž, co jsem dělal předtím, s výjimkou teď jsem v PHP. A dotaz vrátí asociativní pole. A budu ukládat v řadách. Nyní, dotaz může vždy selhat. Možná, že dotaz SQL nelze spustit protože tabulka neexistuje. Nebo, sloupec neexistovala. Něco je špatně. No, v tom případě, že budete chtít, aby se Ujistěte se, že jste zkontrolovat, zda dotaz vrátil false. A to pomocí triple rovná provoz tam. A pak jsem se omluvit, což je další Funkce CS50, procházející ve zprávě. A když se podíváte na omlouváme, veškeré ní opravdu je činí apology.php. Jo. DIVÁKŮ: Mohl byste vysvětlit, co to hvězda dělá mezi select a od? ZAMYLA CHAN: Jo, určitě. Takže hvězda mezi select a od Znamená to, že chci vybrat celý Celá řada z mého stolu. Mohl jsem uvedla zvolte jméno, rok, dům. A já bych jen dostat ty tři Sloupce v mém stole. Ale když řeknu SELECT *, pak budu dostat vše, co v tomto sloupci. Pak jsem tě jít v první zádech. DIVÁKŮ: Takže je to stále v SQL, ne? Je to dotaz, nebo je to PHP? ZAMYLA CHAN: Jsme v dotazu. Takže je to v PHP. Takže pomocí PHP funkce dotazu na, máme provádění SQL dotazu. DIVÁKŮ: Je něco v SQL case-sensitive, jako je výběr nebo kouzelníci, nebo dům? ZAMYLA CHAN: Je něco v SQL case-sensitive? Věřím, že ano. Věřím, že SELECT a FROM A kde jsou case-sensitive. Ne? ROB BOWDEN: Takže, je to naopak. Názvy sloupců a tabulky prostředky, všechny z nich jsou case-sensitive. Avšak některé z MySQL klíčových slov, jako je SELECT, FROM a WHERE, které nejsou case-sensitive. OK. Takže opak toho, co jsem řekl. Takže všechna klíčová slova MySQL - vyberte, z, kde - ty nejsou citlivé na velikost písmen. Ale všechno ostatní je. OK. Nacházíte se v přední části. DIVÁKŮ: Když jsem $ řádky, pokud jde o více než jeden řádek, znamená to, že je jen se stane asociativní pole? ZAMYLA CHAN: Takže otázka je, zda řádky má více než jeden řádek v ní, se se stane asociativní pole? Tak to je pole asociativní pole již. Takže i když je tam jen jeden řádek se vrátil, pak byste museli jít ke index 0 tohoto výsledku. A pak budeš mít ten první řádek. Ano, Belinda? DIVÁKŮ: Použijete-li ===, Je to jediný případ? Nebo jsou tam další? ZAMYLA CHAN: Takže v tomto případě === je srovnání u všech typů. Promiňte. === Je srovnání , který porovnává typy. A == porovnává u všech typů. DIVÁKŮ: Můžete mi vysvětlit, co řádky je v této situaci? Je to řádek dat? ZAMYLA CHAN: V další snímek, jsem bude vysvětlovat, co řádky je. Takže pokud vám nevadí, že drží off na to. A pak se do zad? DIVÁKŮ: Pro funkce, jako je dotaz, činí a omluvit [neslyšitelný]? ZAMYLA CHAN: Otázkou bylo, zda Tyto funkce - dotaz, omlouvám se, a činí - jsou společné pro PHP. To jsou ty, které CS50 psal pro pset7. A Jay? DIVÁKŮ: Když potřebujete říci $ _SESSION, Je to, že pouze v ID? Nebo byste mohli říci, že tady? ZAMYLA CHAN: Otázkou tedy bylo, když používáme $ _SESSION, že byl specifický globální proměnná, která jsme použili. Zde je tato proměnná bude být lokální naší funkce. Takže jsme prostě vyhlášení Nová proměnná. DIVÁKŮ: Jak se omluvit realizován? ZAMYLA CHAN: Otázka byla, jak se omluvit realizován? A myslím, že je to vlastně docela dobré praxe pro vy jít do část functions.php a podívat se na Omlouvám se a uvidíte, jak byste mohli mít udělat sami. Tak jsem se může nechat na vás, ale jen říkají, že když se podíváte na omluvit, pak to trvá zprávu, kterou předložen omluvit, a pak činí tuto zprávu. Nějaké další otázky? Miluji otázky. Tak, aby jim blíží. DIVÁKŮ: [neslyšitelné] echo nebo print tam? ZAMYLA CHAN: Otázka byla, mohli jsme nejen dali echo nebo print tam. Tak, že by udělal něco mírně odlišné. To by se vytiskne dotaz nepodařilo se, že - dobře, teď jsme vlastně v našem regulátoru. Takže nemáme skutečně HTML nastavit zde. Omluvit by vykreslování apologize.php vlastně přesměruje vás na apology.php. OK. Takže teď, pojďme na adresu otázka z dřívějška, co opravdu řádků. No, dotaz vrátí pole řádků. A každý řádek představuje prostřednictvím asociativního pole. Takže pokud jsem popraven nějaký SQL dotaz a Já jsem uložil výsledek do řádků, pak pomocí foreach smyčky, pak pole Název je první, kdo se - řádky. A pak budu volat každý řádek tam $ row. Takže iterace přes to, že jsem se pak přístup k názvu sloupce v daném řádku je, rok sloupec, a dům sloupec. Všimněte si, že bych byl schopen to s řádky, protože řádky Index Název neexistuje. Řádky je jen pole asociativní pole. Takže máte dvě úrovně tam. Jakmile budete mít řadu řádků, musíte se dostat do toho. A pak můžete přistupovat sloupce. Věděli, že aby bylo jasné? Jo, vpředu? DIVÁKŮ: [neslyšitelné] otevřete držáky na [neslyšitelný]? ZAMYLA CHAN: Promiňte? DIVÁKŮ: Otevřené držáky. ZAMYLA CHAN: Ty tady? To, že mi dovolil zahrnout tato proměnná. Jo. DIVÁKŮ: Když tisknete, jste tisk do HTML kódu? ZAMYLA CHAN: Ano. Při tisku, tohle je uvnitř můj vzor, ​​takže můj pohled na metody MVC. Takže jsem tisk do formátu HTML. DIVÁKŮ: Takže když jsme šli do developer nástroje po spuštění to, mohli bychom že vlastně v kódu? ZAMYLA CHAN: To je skvělý otázka, jo. Takže pokud jste šel do vývojářské nástroje v Firefox pomocí Firebug nebo Chrome, pak ano, mohl byste viz konkrétní HTML. Takže by to ukázat, $ row ["name"]. To by se ukázat, podle toho, jméno je v daném řádku. DIVÁKŮ: Jen obecný problém, co tr a td definována jako? Proč bychom [neslyšitelný]? ZAMYLA CHAN: Tabulka řada tr, tabulka pak td sloupce. OK. DIVÁKŮ: Jo, to je tabulka dat. ZAMYLA CHAN: Data tabulky. Jo. DIVÁKŮ: Je to řádek, ve kterém řádek se zachází jako sloupec? ZAMYLA CHAN: Omlouvám se. Můžeš to zopakovat? DIVÁKŮ: Jak byste zobrazit řádky? ZAMYLA CHAN: Jak byste zobrazit řádky v jaké cestě? Mluvíš o nich řádky zde nebo na tr řádky? DIVÁKŮ: Řádky. ZAMYLA CHAN: Tyhle řádky? Já bych si to představit jako Jsem spustit můj dotaz. A to říká, OK, musím buď 0 pro n množství řádků, které odpovídají kritériím že jste dotazován. Takže mám určitý počet řádků. Takže řádky, že $ řádky, ukládá každý jeden z těch řádků v matici. Takže i když je to jen jeden z nich, je to Stále pole řádků, které se shodují. Tak, například, to je podobně jako když přitažené za vlasy mezipaměti od uživatelů. A kritéria tam bylo místo, kde ID rovná ID relace. Tam je opravdu jen jeden řádek které by mohly odpovídat. Ale přesto řádky právě vrátil jeden řádek. Takže budete muset jít do řádků, index 0, index cache skutečně dostat do vyrovnávací paměti. DIVÁKŮ: Je funkce pro tisk v echo totéž? ZAMYLA CHAN: Ano. Ano. Vytisknout ozvěnu stejný. DIVÁKŮ: Je foreach smyčka Jediným způsobem, jak index do řad? ZAMYLA CHAN: Je foreach smyčka jediný způsob, jak můžete iterovat řádky? Ne. Můžete také použít pro smyčce, za předpokladu, že víte, délku řádku v poli. DIVÁKŮ: Mohl byste to přístup pomocí řádku jako [neslyšitelný]? ZAMYLA CHAN: Takže nemůžete přistupovat jen pomocí řádku, pokud nemáte foreach smyčky za předpokladu, že jste prohlásil řádek. Ano. Jo, v bílé barvě. DIVÁKŮ: Tak co tr a td dělat? ZAMYLA CHAN: Tak tr a td jsou HTML tagy. tr označuje začátek z řádku tabulky. A každý td znamená, nová tabulka sloupec dat. DIVÁKŮ: Pro vizuální co řádek je rád, jen si představte, SQL, jak mají řádek. [Neslyšitelný]. ZAMYLA CHAN: Jo. To je skvělé místo. Můžete si představit řádky jen jako jako v tabulce aplikace Excel, jen seznam řádků. OK. Dobrá. Takže teď, že jsme přešli vyberte, pokud nejsou žádné další otázky, my budeme přejít na vložku. Takže když jsem chtěl vložit do některé tabulky a vložit určitý sloupec hodnoty, mohl jsem se vložit do Havraspáru v 7. ročníku. Ale někdy tam může být duplicitní hodnoty, jak jsme viděli v pset7, když jsme byly aktualizujeme naše portfolio. Takže v tomto případě, chceme využít ON Duplicitní klíč UPDATE, takže nemáme uložit více řádků se stejným cení, ale spíše jej aktualizovat. Pak jsme skutečně aktualizaci, který není vložka. Je to jen aktualizace, kde si aktualizovat v určité tabulce s ohledem Kritéria a pak, konečně, mazat, který má velmi podobnou věc. DIVÁKŮ: Mohl byste stručně jít přes duplicitní klíč? ZAMYLA CHAN: Jo. V podstatě tady, mám INSERT INTO Gringottovi, je, galeony, tyto hodnoty. Ale ID, pravděpodobně, je jedinečný klíč Hodnota nastavit v MySQL tabulce. Takže pokud jsem již, že ID nastavit, pak nemohu vložit nový řádek. Takže pokud to není již existují, pak musím aktualizovat. Ve středu v bílé. DIVÁKŮ: Tak vkládat, aktualizovat, mazat, a vyberte, jsou všechny k dispozici lokálně [neslyšitelný]? ZAMYLA CHAN: Tak vložka, aktualizovat, mazat a vyberte jsou všechny SQL dotazy. Takže pokaždé, když používáte SQL, budete mít ty dispozici. DIVÁKŮ: Zpět na poslední kvízy - tam byla otázka, která se zabývala pokud byste měli stůl a chtěl vložte výsledky testů v jednom a vložíte vaše jméno tak, že vás nenechá [Neslyšitelný] Zkouška skóre vašeho přítele. Jak byste to udělal s vložkou? ZAMYLA CHAN: Takže otázka byla o předchozí střednědobé otázka. Nejsem si vědom, které jeden je právě teď. Takže možná později, pokud chcete přijít a ukázat mi, pak mohu určitě vám tipy. Ale když už mluvíme o vkládání věcí, jako je s něčí skóre, když si by ne, pojďme mluvit o tom, SQL injection útoky. Takže útok SQL injection je v podstatě kde někdo vezme Výhodou nízké bezpečnosti způsobem, že užíváte v datech. Takže tady, stejně jako v CS50 financí, když se přihlásíte, můžeme vstoupit do uživatelské jméno v přihlašovacím formuláři, První textové pole, a zadejte v hesle. Možná, že náš PHP kód může vypadat něco jako tohle, kde $ username je uživatelské jméno post-Data a heslo je heslo post-dat. A pak stačí spustit náš dotaz, řekněme, OK, dobře, náš dotaz bude výběr z našich uživatelů, kde uživatelské jméno je ten, který předložily. A heslo je heslo, což znamená, že se hesla neshodují. A teď, co když místo toho, aby skutečně Podáním aktuální heslo, jako 12345 a hádat na vidle, které říká, že heslo a snaží se proniknout jejich Účet, co když místo toho, tvrdili to. Mohli zadejte možná myslím na heslo. A pak by skončit citace zadejte nebo 1 = 1. To by přecházet přímo do SQL dotaz vypadat nějak takhle. Vyberte si z uživatelů, kde uživatelské jméno = hroty a heslo rovná lilie nebo 1 = 1. Takže buď heslo má být správné nebo 1 = 1, který je vždy pravdivý. Takže v tomto případě, v podstatě, může uživatel využít to a stačí se přihlásit sami v a hack něčí účet. Takže to je důvod, proč chceme, aby se zabránilo někdo má, jak to udělat. Ale naštěstí, funkce dotazu podle procházející v zástupných symbolech bude trvat péče o to pro vás. Také budete obvykle nikdy nebudete chtít musela skutečně předložit hesla sami. To je důvod, proč jsme hash nebo zašifrované je v CS50 financí. Diváků: Minulost kvíz mluvil o MySQL únikové řetězce. Máme se bát, že? ZAMYLA CHAN: To je dobrá otázka. V MySQL Únikové řetězce je určitě funkce, která byla použita v našem dotazu. Ale rozhodně podívat do toho. Řekl bych, že je to fér hra vědět že byste museli volat, že fungovat na provázku. Jo, Belinda? DIVÁKŮ: Jak víte, kdy je to jednoduché uvozovky nebo dvojité uvozovky? A také mám pocit, že v přednášce zmínil něco o tom, které nemají [neslyšitelný], nebo tak něco, nebo Druhý singl citát na konci. Myslím, že poukázal na přednášce, že máš mít apostrof 1 a pak nemá apostrofy nebo tak něco. DIVÁKŮ: [neslyšitelné]. Diváků: to je poslední singl citace tam v tom druhém okně by neměly být. [Neslyšitelný] Protože když budete mít ten poslední singl citovat, a ty odpovídají za obsah kde je heslo, máte-li, že dotaz, je tu jeden citát na konec již. Chcete-li použít tuto jednoduchou uvozovku jako ten, který stojí na jedné [Neslyšitelný]. Takže to, co je vlastně v tomto textu box by neměl mít to. ZAMYLA CHAN: budu změnit. OK. Pokud tam nejsou nějaké otázky, pak budu předat ji Josefa mluvit o JavaScriptu, et cetera. [APPLAUSE] JOSEPH ONG: Tak jsme se běží trochu pozadu. Takže pokud máte odejít, to je v pořádku. Ale žádáme, abyste si hlavy pokud jste ve středu, takže neblokují fotoaparát a používat zpět exit, pokud budete muset. Jsem Joseph mimochodem. Dobrý den. Test, test. Dane, je to dobré? V pohodě. Takže video bude také zveřejněny on-line pro ty, kteří muset odejít. Trapné. OK. Takže kvíz recenzi. To je kočka. Nyní, JavaScript, který je možná ne jako Aww pro některé z vás. OK. Takže to je první, převezme zpět od Zamyla. Nezapomeňte, že PHP je běží na serveru. A mnoho časů, vy jste napsal smyčky v PHP vytisknout HTML, ne? Takže jakmile tento kód spustí, že HTML výstup, který můžete vytisknout dostane poslal k uživateli. A jakmile se to stane, nic víc PHP může spustit, pokud obnovte stránku, ze Samozřejmě, která reexecutes PHP. Ale jakmile si vytisknout tomto formátu HTML, nemůžeš jít nikam. Tak, že HTML je poslán na uživateli, který je prohlížeč sem, kde Milo je pomocí počítače. A tak dobře, existuje několik věcí, jakmile pošleme HTML uživateli. Někdy chceme udělat něco jako když kliknete na něco, co chceme, varování boxy na pop-up, ty druhy interakce, jako když stisknete klíč, když kliknete na něco, co na stránky, chci aby se něco stalo. No, nemůžete reexecute PHP kód jednou, že HTML je nastaven. Tak jak to děláte? Představujeme nový jazyk zvaný JavaScript, který běží v prohlížeči , který vám umožní dělat věci, HTML poté, co obdrží je ze serveru. A to je důvod, proč jsme to na straně klienta volání programovací jazyk. Je to práce na počítači - klient. Jakékoliv dotazy týkající se, že tak daleko? To paradigma má smysl pro lidi? OK. Dobrá. Dobrá. Takže první věc, kterou si uvědomit, je JavaScript není PHP. Mají nějakou jinou syntaxi, které půjdeme do. A oni mají velmi odlišné použití. JavaScript, opět, pro vaše prohlížeč, pro klienta. Server běží někde na někoho jiného počítače, který odesílá informace pro vás, opravit? Takže pokud vás žádáme psát PHP kód na zkoušku otázku, nepište JavaScript a naopak. Budete jen ztratit body, a to nebude to pravé. Tak pojďme dostat se do některé syntaktické rozdíly - JavaScript vlevo a PHP na pravé straně. První věc, kterou si všimnete, s JavaScript, budeme deklarovat proměnné s var klíčové slovo - V--R. PHP používá znak dolaru, jako Zamyla bylo uvedeno výše. Chcete-li deklarovat asociativní pole, vidíme známou syntaxi na pravá strana s PHP. Na levé straně, místo můžete použít složené závorky. A pak se vaše klíče jsou na levé straně. Pak budete mít dvojtečku. A pak máte hodnoty které chcete. Tak to je, jak byste to udělat v PHP na pravé straně této druhé linka, která začíná v Milo. A to je, jak byste to na levé straně v JavaScriptu, pokud chcete to, čemu říkáme objekt. A objekty v JavaScriptu jsou jen asociativní pole. Takže pokud chcete přistupovat pole, v PHP můžete použít tuto syntaxi konzoly. A tímto způsobem, můžete přiřadit Tento majitel pole Lauren. No, v JavaScriptu, pokud člověk chce Přístup pole a změnit, můžete použít syntaxi tečky. Můžete také použít syntaxi konzoly. Ale nemůžete použít dot syntax v PHP. To nebude fungovat. To funguje pouze v PHP. A konečně, tisknout věci konzole, můžete použít console.log, které vy používáte hodně pset8. Můžete console.log, že. Chcete-li vytisknout pole v PHP, budete muset použít tiskovou r. A na pravé straně, můžete vidět i hash zřetězení tam. Někdo se ptal dříve. Používám plus v JavaScriptu. Pokud budu chtít zřetězit něco v PHP, používám tečku. Jedná se o různé. Pokud píšete PHP kód, nepoužívejte plus. Pokud píšete JavaScript kód, nepište tečku. Bude to v pořádku. A ty budeš smutná. Takže syntaktické rozdíly. Poznej svého syntaxi, protože pokud máte napište otázku a můžete použít syntaxi z nesprávného jazyka, to nebude fungovat. A to bude špatně. Takže pojďme mluvit o nějaké kontrole průtok rozdíly, jak používat smyčky v každé z nich. Zamyla přešel na pravé straně. Věci na pravé straně by měli být obeznámeni. Pojďme se podívat na na levé straně. Používáte-li pro n smyčky v JavaScriptu, Váš variabilní smyčky, var i tam, smyčka přes klíče pole. Takže vidíte, jméno, dům a role. Kdybych console.log já, já si jméno, dům a role. To jsou klíče. V JavaScriptu, foreach smyčka pokračuje nad hodnoty tohoto pole. Takže si všimnete, že jsou oba i. Ale tady na PHP straně, vytiskne z Milo, CS50, a maskota. To jsou hodnoty v PHP. Takže se jedná o tom, jak tyto dva odlišné v různých jazycích. Takže pokud jste pomocí foreach smyčky, nemusí předpokládat, že vám dává klíče. A pokud používáte pro n smyčky, ne Předpokládám, že vám dává hodnoty. Znamená to dělat tak daleko smysl? Další snímek je ukážu, jak můžete přístup opak v každý z nich. No, pokud máte klíč v JavaScriptu a chcete hodnotu ven, stačí index do Pole s tím. Takže Milo budu mít co Chcete-- hodnoty. Tam je to jiná syntaxe v PHP. Pokud opravdu chcete vědět, vůbec se mi nelíbí myslím, že jsme to ukázal na vás ještě. Ale pokud máte zájem, můžete použít Toto dodatečné syntaxe vpravo strana, která bude skutečně vám umožní získat klíče v PHP, pokud jste pomocí foreach smyčka. Takže jen trochu maličkosti pokud máte zájem. Tak to je jen demonstrovat Rozdíly mezi těmito dvěma smyčkami. Nemíchejte je, když jste programování otázku. Jakékoliv dotazy o tom. V pohodě. Dobrá. JavaScript objekty. Mluvil jsem o nich. Jsou jako asociativní pole. Jedna věc, kterou bych rád, kdybyste si uvědomit, Zde je to, že hodnota v asociativním Pole může být cokoliv v JavaScriptu. Může to být i funkce jako tam. Mám funkci, která je hodnota klíče. A pokud chci volat tuto funkci Jen jsem přístup kůru. A pak jsem dal závorky po tom. A to funguje. Tak nějaké otázky? Ne? OK. Dobrá. JavaScript, stejně jako PHP, je volně zadali. Co to znamená? To přece má druhy. Ale když deklarujete JavaScript variabilní, říkáte var i. Neříkej to. To není věc. Stačí říct, že je to variabilní. A pak JavaScript se bude zabývat typy pod kapotou pro vás. Můžeme volně převádět mezi druhy tohoto důvodu. Takže i začíná jako číslo v tomto případě. A pak mám řetězec. A přidám i do něj. A já jsem přeřadit zpět do i.. Takže na té první linii, i je číslo. Na druhém řádku, i nyní stává string poté, co jsem udělat přeložení. A tady, já jsem jen zřetězení že číslo na řetězec. Takže vidíte, že i když jsem byl číslo v první části, je to trochu jako být převedeny na string a pak se přidal na této ahoj řetězce. A tak to je to, co mám na mysli u volné psaní. To, že převod mezi typy velmi snadno. A to nevyhodí varování u se vám líbí C dělá. Tak i nyní obsahuje ahoj 123 na řetězec. Další. Můžeme také volně porovnat mezi druhy. Takže pokud stačí použít ==, velmi jako v PHP, JavaScript dělá podobnou věc. Řetězec 123 je stejný jako počet 123 při použití dvojité rovná. Při použití třílůžkové rovná, ale také chce, aby se ujistil, že typ je stejný. Tak proto, že to je řetězec, a že je číslo, i když jsou oba 123, při použití triple rovná, dostanete false. V double rovná případu, dostanete pravda, protože dvojité rovná není péče o typu. Třílůžkový rovná se starat o typ. Otázky? OK. A ještě jedna věc, o JavaScriptu je rozsah je druh globální pokud jste ve funkci. A funguje to stejné způsob, jak v PHP skutečnosti. Takže pojďme projít tento příklad. Nastavil jsem i na 999.. A pak jsem se jít do toho na smyčky. Takže když jsem tisknout i v tomto pro smyčky, myslím, že 0, 1, 2, 3, 4. Mám pro i = 4. To zvýší i nyní 5 při konec pro smyčce. A pak vypukne smyčky, protože nesplňuje podmiňují už. Co si myslíte, že příští console.log vytiskne? Takže to je to, co to bude dělat v C. C, protože pokud máte, jako var i mimo a máte var i uvnitř smyčky, jako pro smyčky, pak to dělá to tak, že je to rozsahem, že dva i to jsou různé. V JavaScriptu, bude to jen zacházet s ní jako stejný i. Mám 5, protože to byla hodnota poté, co vystoupil z smyčky. Takže ty i to je stejné i. Má to smysl? No, to dává smysl z stanovisko JavaScript. Avšak stejný vzor není přenést do C. Mají různá pravidla stanovení rozsahu. Ano. DIVÁKŮ: [neslyšitelné] mimo funkci [neslyšitelný]? JOSEPH ONG: Tak do které funkce? Tak já se k tomu jen chvilku. Takže říkáme foo (i). To projde i do foo, přírůstky to, a pak se přihlásí ji. Tak to bylo 5. Tak to se stává 6. Ale to, co mluvím, je že i v této funkci. Vzhledem k tomu, že je to parametr, je to rozsahem do této funkce. Takže jakmile jsem se vlastně dostat z toho funkce, je to teď půjde zpět na starý i. Že jsem je rozsahem jen proto, to je ve funkci. A máme rozsah a funkce. Ale my nemáme prostor mimo funkcí v JavaScriptu. Má to smysl? Ano. Otázka. DIVÁKŮ: Stejná [neslyšitelné]? JOSEPH ONG: Tak jo. V PHP, je to stejný typ věc. Tam je mírný jemnost vlastně. Ale můžete mi zeptat že po přezkumu. Nemáte opravdu potřebujete vědět že jemnost na kvíz. Pro všechny záměry a účely, jako proměnné, globální a PHP, není-li jsou ve funkci, stejný věc v JavaScriptu. Ano. DIVÁKŮ: Proč je to povoleno v JavaScript a ne kde jinde? JOSEPH ONG: Tak proč je to povoleno v JavaScriptu, a ne v C? Je to jen ten, kdo přišel s JavaScript se rozhodl, že to bylo OK JavaScript. Takže je to jen jako programovací jazyk konvence, jak bychom řekli. Ano. DIVÁKŮ: Tak proč to jít 6-5? JOSEPH ONG: Tak to šlo 6-5, protože když jsem prošel i do foo, že i uvnitř foo je nyní rozsahem do foo, proto, že existuje prostor ve funkcích v JavaScript. Ale jakmile jsem se odsud dostat, protože to byla vymezena na funkci, já jsem jen pomocí pravidelného jsem si, že uvnitř zbytek tok řízení. Smysl? Můžu dál? Dobrá. V pohodě. Přijetí je to objekty jsou předány odkazem. Víte, jak při předání pole v C Dalo by se skutečně změnit pole? Je to totéž v JavaScriptu. Mám-li předat objekt, v tomto případě, jsem prošel Milo do této funkce catify. Milo začíná. Jeho jméno je Milo Banana. Já pak, že objekt do funkce protože je to objekt, asociativní pole v JavaScriptu. Když jsem se provádění operace v této funkci, bude skutečně změnit objekt. Tak to se stane pouze pro objekty v JavaScriptu, stejně jako se to stane pro pole uvnitř C. So Milo jména se skutečně stane kočka teď. Má to smysl? Takže to funguje pouze pro objekty. Objekty jsou předávány odkazem. Ano. DIVÁKŮ: Takže říkáte, že na rozdíl od proměnné i. JOSEPH ONG: Jo. Které proměnné jsem byl jen číslo, ne? Je to jako v C při předání celé číslo, to dělá kopii. A když předáte pole, je ve skutečnosti změní aktuální pole v C. Totéž se děje s JavaScript v tomto případě. Dobrá. A další, Milo je smutná, protože je to teď kočka. To byl vlastně Milo po nějaký výlet k veterináři. Tak jak jsme se používat JavaScript na webové stránce? Můžeme zahrnout. Toto je HTML kód s pásovými značkami. Takže mám proužek tagy tam. A pak jsem dal nějaké JavaScript Kód v rámci značky skriptu. A pak se to spustí to. Když jsem to takhle je to tzv. inline JavaScript. Je to trochu chaotický, protože JavaScript je ve skutečnosti v HTML. Lepší způsob, jak to udělat, mnohem hezčí, je napsat svůj JavaScript ve externí soubor a pak poskytnout script tag se zdrojem. A to bude jít do tohoto souboru JavaScript a přečtěte si JavaScript kód z že soubor místo. A to způsobem, nemáte mnoho JavaScript na začátku svého Soubor HTML, který umožňuje je to opravdu chaotický. Stačí dát někam jinam. A pak to bude číst ze tam. Věděli, že má smysl? Umístění záležitosti. V tomto konkrétním případě, Skript je před tělem. Takže když jsem spustit to, že tam je nic v těle ještě. Možná, že to bude trochu víc pocit, když jsem se ukažte tento další díl. V tomto případě, skript přichází po div. Takže vlastně se objeví div na stránce jako první. Právě zde v tomto malém červeném kroužku, Vidíte se objeví text. A pak se upozornění zobrazí. V prvním případě, protože skript byl před div, upozornění se objeví jako první. A pak div se objeví po můžete zavřete okno. Takže provedení záleží. Tak budeme si to pamatovat. To bude důležité v trochu. OK. Tak dobře, jak si počkat, až Celá stránka je načtena poté před vámi spustit nějaký kód? Dostaneme se do toho trochu o něco později taky. Ale jen držet toto umístění záležitosti na mysli, když jsme přijít do jiného snímku. Tak se dostáváme k DOM teď. A co je DOM? Takže když se podíváte na HTML kód, je to jen banda textu na obrazovce. Tak jak víte, že JavaScript to je HTML element? Takže musíme mít nějakou paměť zastoupení této struktura, která máme. A když jsme to v paměti zastoupení v JavaScriptu, nazýváme že DOM. A je to jen způsob, jak lidé rozhodli že bychom měli zastupovat tuto HTML Struktura. A co to DOM vypadat? No, v reprezentaci paměti, Vezmeme tento text. A my ho zase do paměti zastoupení. Tak to je HTML. Tak jsme poprvé zjistili, že každý DOM strom má dokument. Vypadá to jako strom. A dokument obsahuje HTML tag, vlastně všechno uvnitř to teď. HTML tag má dvě děti. To má hlavu. To je hlava, když se podíváte na odsazení támhle na tom, jak je to strukturovaný mezi blízkými značky, Hlava má dítě. Dítě je titul. Přesně tak. Nyní máme těla dítěte. A pak, že tělo má Dítě s názvem rodina. A že rodina má tři děti - nejstarší, střední a nejmladší. Takže byste měli vědět, jak nakreslit schéma takhle, když jsme se vás zeptat, jak nakreslit schéma, kdy dáváme budete HTML na levé straně. Vědět, jak vyrobit DOM stromu. A v těchto věcech, je tam jen nějaký text, který jsem si představoval jako malé krabičky. Znamená to, DOM stromové struktury, aby smysl a co DOM je? Takže to, co se p stát? Tady, p tam se tím, že značka reprezentuje odstavec tag v HTML. Takže se můžete podívat to. Ale to jen znamená, že to je nějaký prostor pro nějaký text. A to má nějaký výchozí CSS styl, protože je to tag odstavce. Ale to není opravdu starosti že část příliš mnoho. Jen vím, že to je zástupný symbol pro nějaký text. Ano. Otázka? Ano. DIVÁKŮ: Právě jste zmínil CSS. Hash rodina a hash všechny ty věci je v podstatě představuje ID v CSS? JOSEPH ONG: Jo, přesně tak. Dostanu se na to, co tyto hodnoty hash znamená ve vteřině. Když Angela šla přes CSS, ona mluvil o CSS selektory. Jedná se o CSS selektory, které mluvila o. Ano, Rob? ROB BOWDEN: Chtěl bych také vyjádřit že DOM uvnitř názvu značky je textový uzel. JOSEPH ONG: Správně. Takže v názvu značky, Mám nějaké textové DOM. Takže opravdu, tento titul by měl mít jako krabička odejde z toho stejně. Ale to nezáleží v tomto případě příliš. My opravdu nestarám o textových uzlů, jak jim říkáme, příliš mnoho. OK, co děláme. Zdá se, že ano. A já jsem se opravit, že když Jsem to nahrát znovu. Má to smysl? Tak jak jsme se pracovat s DOM? Kdykoliv se vypořádat s DOM v JavaScript, tam jsou dva kroky. Můžete vybrat element modelu DOM. A pak ty věci k tomu. Takže v tomto případě, abstraktně, jsem vybrané prostředního prvku. A pak příkladem, jak dělat věci, k tomu by se změnou textu. To býval Bob. A teď, co jsem udělal, na to, že jsem změnil Bob Milo v tomto případě. Tak jak to vlastně udělat? Jak to uděláme vybírání? A jak se to dělá věci, aby věc, jakmile jsme ho vzít? No, jak vy jste se to naučil V této třídě je pomocí něco, co s názvem jQuery. Takže to, co je jQuery? jQuery je knihovna, která umožňuje JavaScript jednodušší napsat. Takže někdo vzal čas a napsal jQuery. jQuery je vlastně napsaný v JavaScriptu. A pak proto, že to udělal, nyní mají spoustu funkcí, které můžeme použít, aby se naše žije rychlé. Takže jaké jsou některé z co to dělá? To je výběr prvků jednodušší. To je měnící se HTML, přidáním třídy jednodušší. To je Ajax jednodušší. K tomu se dostaneme, že ve vteřině. A to je analogické s C knihovny. Takže ty patří string.h, dostanete strlen. Získáte strcpy, všechny tyto věci. Když zahrnete jQuery, dostanete pěkný způsoby, jak vybrat prvky na změnu věci, et cetera. Získáte další funkce, které JavaScript nedává vám. Takže jQuery není JavaScript. jQuery je knihovna, která je napsána v JavaScript, který dělá JavaScript jednodušší napsat. Takže jQuery není programování jazyk. Ale JavaScript. dělat. Jistě vám vaše terminologii pravdu. Jakékoliv dotazy? Ano. Je to otázka? Dobrá. Tak jak se vám používat jQuery? No, když píšete některé JavaScript kódu a zahrnout jQuery v horní části souboru jako Soubor skriptu, můžete použít znak dolaru Chcete-li získat přístup k jQuery. A to se liší od znak dolaru v PHP. Je to stejný symbol vám psát na klávesnici. Ale oni znamenají velmi odlišné věci. Znak dolaru v PHP znamená, že tato je to, jak jsem se deklarovat proměnnou. V JavaScriptu, když jste součástí jQuery, to je zkratka pro jQuery. Takže mějte na paměti, že. Takže, jak můžeme vybrat DOM prvky? No, když budeš dělat to ošklivé JavaScript způsobem, máte přístup dokumentovat globální proměnnou. A pak dostanete element podle ID rodiny. To je opravdu dlouhý a rozvláčný a není moc hezké. Nebo se můžete dostat všechny prvky které jsou tag p. To funguje i v JavaScriptu. Ale my jsme nikdy ukázal můžete syntaxe moc. Co jsme ukázali jste byl jQuery. Takže celá voliče směrem nahoru tam, že byl vyjádřen v JavaScriptu dostane jen kondenzované k této velmi pěkné dolaru přihlásit Hashtag rodinu. A $ p, právě tam, kde je to takhle. Chcete-li vybrat všechny p tagy uvnitř rodiny, dáme prostor mezi těmito dvěma. A teď jsme se všechny p tagy uvnitř rodiny. A vypadají povědomě? No, Angela mluvil o CSS selektory. Dej mi jednu sekundu. A tak aby bylo možno zvolit prvek, stačí použít stejnou věc jako vy by to s voličem CSS. Pokud dáte hash před o tom, že vybírá podle ID. Tečka vybere podle tříd. Máte-li jen věc bez hash nebo tečky, vybere ty tagy. Otázky. Ano? DIVÁKŮ: Když používáme tečku v naší HTML, je to, že není jQuery? JOSEPH ONG: Dot v našem HTML je věc JavaScript. Není to jQuery věc. Jak vy jste se to naučil s jQuery je použít. html. A pak si to prošel, co HTML bude. Tak já se k tomu jen druhý vlastně. Tak jak to uděláme věci na prvek jednou jsme vybrali to? Tak to je příklad toho, výběr prvku. Takže teď, chceme dělat věci na něm. Takže v tomto případě, nech mě jít zpátky na předchozí snímek. To bylo předtím, než Bob. A chci to změnit v HTML na Milo. Tak jsem volat funkci HTML z prvku. Tato funkce je HTML metoda prvku. A pak jsem se dát to, co Chci HTML být. A je to právě nahrazuje to, co je uvnitř že tag s tím, co ji dám. Ano. Otázka? Diváků: hashtag se používá pouze pro jQuery. [Neslyšitelný] bychom použít. JOSEPH ONG: Jo, přesně tak. Ale nebojte se příliš mnoho o čisté JavaScript. Jen chci, abys lidi se zaměřit na to, jak si by to s jQuery, protože že to bude důležité, část na kvíz. Správně. Přesně tak. Takže vidíte, že hashtag, aby odpovídá vybrat prvek s ID střední kvůli tomu hashtag. Hashtag znamená ID. A tento prvek má ID uprostřed. Tak to je prvek zvolíme. DIVÁKŮ: [neslyšitelné]. znak dolaru hashtag [neslyšitelný]? JOSEPH ONG: Takže ne. Otázkou je můžete použít. Hodnotu. A. Hodnota funguje pouze na prvky, které jsou vstupy. V jQuery, by bylo . Val, ne. Hodnota. Takže budu mít na malém příkladu, který ukazuje, to vše v kombinaci ve vteřině. Ale myslím, že to slouží malý úryvek má smysl pro lidi tak daleko. Chcete-li změnit HTML, volání metody ve formátu HTML. Ano. DIVÁKŮ: Můžete mi vysvětlit, opět metoda? JOSEPH ONG: Takže metoda je jen funkce, která patří k jedné, v tomto případ, jeden z těchto prvků DOM, proto, že vidím zvolen prvek jako první. Ve skutečnosti, dovolte mi, abych pomocí myši. Vybral jsem první prvek. A pak jsem volal tento HTML funkce, které to mělo. A protože tato funkce patří ta věc, říkáme metoda. To je jen vymyšlené jméno pro něj. Řekni to ještě jednou. Takže pamatujte, že jsme si vybrali Nyní element. A my jsme dát dovnitř proměnný prvek. Opravte? Takže když chceme změnit HTML na uvnitř, protože to bylo Bob dříve, Chcete-li změnit tento text Milo. Takže říkáme HTML. A my to říct, co HTML uvnitř že prvek by měl být teď. A tak se změní ji na Milo, proto, že jsem dal to Milo. DIVÁKŮ: Takže oni pracují společně. [Neslyšitelný] JOSEPH ONG: Jo, jo. Pracují společně. Takže jeden z nich vybere první prvek. A druhá dělá něco k tomu. Ano. DIVÁKŮ: [neslyšitelné]. Je-li tato metoda se liší od v HTML Máte metodu rovná aktuální. JOSEPH ONG: Jo. To je jiný způsob. To je jiný způsob. A můžeme pokrýt, že jen sekundu když se dostaneme na příkladu. Chci se ujistit, že jsme se urychlit protože máme málo času. Ale my jsme běžet po celou dobu nyní. OK. V pohodě. Takže pokud chcete přidat třídu, tam je také metoda add třídy. To je jen příklad toho, co můžete dělat s jQuery. To jen přidává třídu. Chcete-li jej vyjmout, můžete volat odstranit. To je jen další věc, kterou můžete udělat. Takže další příklady věcí, které můžete udělat. Takže mohu jen dát to na horní takhle? Nejmladší odstranit. Kdybych jen spustit tuto JavaScript ve Vrchol mého souboru, který funguje? Správně. Protože střední dosud neexistuje. Takže to nebude fungovat. Exekuční příkaz. Jde to až na vrchol jako první. Co je? DIVÁKŮ: Nejmladší dosud neexistuje? JOSEPH ONG: Jo. Nejmladší dosud neexistuje. Přesně tak. DIVÁKŮ: Říkal jsi, že střední. JOSEPH ONG: Omlouvám se. Nejmladší dosud neexistuje. A další věc je, že ne zahrnoval jQuery soubor se zeptat skriptu src. Tak, že to nebude fungovat. Vlastně jsem to neudělal, že v Další snímek, který je měl opravit, že buď. Ale způsob, jakým to udělat, je mít Java scripty je řízené událostmi. Takže to, co děláme, je, že jsme použít událost handler, aby se to stalo. A tak jsem se vybrat dokument nastavit jako první. Já říkám, OK, když je dokument připraveni, dovolte mi, abych spustit funkci. Tak to je vše, že syntaktické prostředky. Vybral jsem dokument. Nyní, když je dokument připraveni, spusťte funkci. A tak se sem, když je dokument ready, což znamená, že všechny HTML má naložené, pak jsem spustit funkci který odstraňuje tento prvek. A tak teď, když jsem se spustit tuto funkci že jsem prošel do připravená, jsem garantováno, že všechny na HTML Stránka bude existovat jako první. Ano. Otázka? DIVÁKŮ: Co je klíčové slovo akce v rámci funkce? JOSEPH ONG: Tak, že klíčové slovo událost funkce je jen parametr, který je předán do funkce pro každou událost. Je to prostě něco, co dostanete zdarma. Používáte-li klíčové obslužné rutiny v pset8, že událost mohla říct, pro příklad, který klíč, který pokračoval. V tomto případě, na připravený události je to ve skutečnosti není velmi užitečné. Ale pro klíčové dolů případě, že je to více užitečné, protože vám vědět, které stisknuté klávesy přístupem klíč Kód z té objektu události. Opravte? Má to smysl? OK. Ano. Otázka? DIVÁKŮ: Takže si můžete dát script tag nižší dole? JOSEPH ONG: Tak jo. Dalo by se dal scénář označit nižší dolů. Ale pak se to prostě stává opravdu chaotický. A my jsme chtěli centralizovat všechny našeho kódu na jednom místě. A to nám umožní udělat. Zapamatuj si dříve jsem řekl, že je to hezčí způsob, jak zajistit, že prvky jsou Na stránce před spuštění kódu? A to je jen příjemný způsob, byste dosáhnout. DIVÁKŮ: [neslyšitelné]. JOSEPH ONG: Jo. Ty by ještě, ne? Vzhledem k tomu, pamatujte, že v ceně soubor v horní části stránky. Takže to bude spuštěn jako první před se dostanete do spodní části stránky. OK. Takže můžete také přidat různé typ obslužné rutiny události. Tenhle právě zpracovává kliknutí. Když kliknu na nejmladší, pak to bude pop-up s výstrahou. To je jen jiný Typ události. Na rozdíl od připravena akce, nyní použít událost click, když obdržíte klikne na prvek. A tak v tomto případě si, cvaknutí Psovod je připojen k nejmladším. Takže se to stane pouze tehdy, když I klikněte na nejmladší. A v té druhé, připravené akce byl připojen k dokumentu. Tak čeká na dokument být připraven. Smysl? Myslím, že můžu jít dál. Ano. Otázka? DIVÁKŮ: [neslyšitelné]. V tomto případě můžete použít [neslyšitelný]. JOSEPH ONG: Jo, jo, protože v tomto případ, musím čekat na nejmladší prvek se objeví na obrazovce jako první předtím, než jsem se připojit popisovač klepněte na tlačítko to, což je důvod, proč jsem ji dovnitř o dokument připravený. OK. A dále, takže to je velký příklad jak byste kombinovat všechno. To je jen příklad validace formuláře jste viděli v přednášce. Takže to brát krok za krokem, jak jdete přes to. A bude to naprosto v pořádku. Jen si to čtou shora dolů. Mám formulář v dolní části. Pokud je dokument připraven, přikládám předložit popisovač na formuláři tak, že když jsem odešlete formulář, dostanu hodnoty v každém z těchto vstupů. A já jsem zkontrolovat, jestli je to prázdné. Pokud je to prázdné, vrátím false, protože Nechci odeslat formulář, protože forma je v pořádku. Pokud je heslo prázdné nebo je to méně než osm znaků, nemám předložit forma, protože to je také špatně. A return false jen brání forma z podání a jít na novou stránku. A doufejme, že to dává smysl. Myslím, že kluci by měli projít Tento kód krok za krokem na vlastní pěst. A jakmile pochopíte, co vybrat prvky a dělat věci, které jí vlastně znamená, to bude dělat hodně smysl pro vás. Ano? DIVÁKŮ: Co dělá name = Uživatelské jméno znamená? JOSEPH ONG: Tak name = jméno uživatele a name = heslo jen znamená, že se na atributem cokoliv jste výběr. A pak, že se musí shodovat. Tak jdeme na registraci. A pak se podíváme na všech vstupech a registrace. A pak jsme se vybrat ten, kde jméno atribut je roven uživatelským jménem. Takže jen ten první voliče vybere uživatelské jméno vstup. A jen to, že druhý volič vybere Heslo jedna, protože ty mají jejich atributy name nastaven jako to, co by to měl být. Otázka? DIVÁKŮ: Na podání, jak se spodní část vyřešit vrchní část? JOSEPH ONG: Tak to je proto, že na obslužnou rutinu události. Takže čekáme na předložení akci že vyhodí z formy. A to je vše, co je předložit. Proč říkám podat až tam? To říká, když je předložen formulář, Jsem si předložit událost. Takže dovolte mi zachytit, že a spusťte tento kód místo. Ano? DIVÁKŮ: Proč máte mít funkce akci? Proč nemůžeš prostě [neslyšitelný]? JOSEPH ONG: Protože v JavaScriptu, jste musí deklarovat funkce. To je, jak to funguje v JavaScriptu. Musíš říct, že to bude spustit funkci. Takže říkáte to, že jsi čeká funkci zde namísto jen složené závorky. DIVÁKŮ: A funkce je, co následuje? JOSEPH ONG: Jo. Tato funkce je to, co je uvnitř složené závorky po že funkce klíčové slovo. Ano? DIVÁKŮ: [neslyšitelné]. JOSEPH ONG: Pro odeslat? DIVÁKŮ: Ne, funkce bez události. JOSEPH ONG: Jo. A tak, aniž by událost, můžete mít, že. Pokud nepotřebujete událost, pak stačí vynechat. Ale pokud ano, pak jste Jen to tam dal. Ano. Rychlý dotaz? DIVÁKŮ: [neslyšitelné]. JOSEPH ONG: Jo. Vzhledem k tomu, co je třeba udělat, document.ready jen říká, že čekat na všechny HTML na stránku načíst jako první. A obvykle chcete, aby vaše prvky na místě dříve, než spustíte jakýkoli kód. Dobrá. Musíme se dostat na Ajax. Nemáme moc času. Takže klady a zápory. JavaScript je jednodušší pokus psát s jQuery. Ale jQuery je trochu pomalý. Je to jako PHP je pomalejší než C, protože je to interpretováno. A jQuery je o něco pomalejší než JavaScript, protože to hodně věci pod kapotou. A tak, pokud používáte jQuery, je to jen trochu pomalejší než JavaScript, i když to dává vám krásný elegance. A konečně, Ajax. Zatím se Ajax, jste neviděli Ajax , pokud jde o pset7 ještě, protože když to uděláte, můžete podat Formulář pro cenovou nabídku. Je načte novou stránku. Takže jste si tento velký bílý blesk na straně zatímco Druhá stránka načte, správně? Bylo by opravdu hezké, kdyby vám neměl tento blesk. Stejně jako Facebook, pokud jste právě přejděte na dno, přidává nový obsah aniž by osvěžující celou stránku. Takže něco takového by bylo hezké. To je kód JavaScript na levé straně. Dostanete to, co je uvnitř tohoto vstupu. Získáte stock informace z Yahoo! A pak uděláte velký řetězec, který říká, OK, to je poselství chci ukázat na obrazovce. A pak si dát tuto zprávu uvnitř nějaký HTML prvek, který dostane zobrazí na obrazovce. Tak to je všechno, co se tady děje. Takže v podstatě, protože to je vše JavaScript a nemusíte spouštět Už PHP, to se ujistěte, že že strana neobnoví. Takže je to jen abstraktní idea že tu říkám teď. Abstraktní představa je, že pokud si to vše v JavaScriptu, nemáte načtení stránky. Ale jak to vlastně udělat? No, vlastně, pojďme mluvit o tom, Problém s tímto poprvé. Problém je v JavaScriptu, provedení je synchronní. Takže budete muset počkat na jednoho linka dokončit před vámi spustit další řádek. A co když budu přes Yahoo!, a jejich servery jsou velmi pomalé, a trvá jim tři sekundy na dej mi zpátky ten stock informace? Když jsem narazila, že cenové linii, pokud provedení je synchronní, jak je to podle default, co to jen jde udělat, je Váš prohlížeč bude stánek pro tři sekundy. A vy nebudete moci dělat něco, když se dostane k datům. Bude to být zmrazeny. A to je špatné. Nechcete uživateli mají zmrazené webové stránky. Opravte? To je prostě špatně. Všichni souhlasí s tím,? Pokud jste procházení Facebook a to zamrzne a nemůžete nic dělat, vám se opravdu frustrovaný. Takže řešení je, že jsme udělat něco asynchronní místo. Tak tohle všechno asynchronní věc říká se, jdu se na to zeptat URL pro některé údaje. A pak budu pokračovat. Já jsem prostě jít, aby se provádění bez ohledu na kód, který se po tom. A pak když tato data je připraven, Pak jsem se ho zpracovat. To je vše, co se říká. DIVÁKŮ: Ajax právě dělá Kód asynchronní? JOSEPH ONG: Je to asynchronní způsob načítání dat. Takže první věc, o Ajax je mi umožňuje získat data z externího webu. A druhá věc je, dbá na to, že moje strana nemá oddalovat, když jsem načítání těchto dat. To je asynchronní součástí. Vzhledem k tomu, že jde někam jinam, proto říkám, že jsem dál na chvíli je to okouzlující, že data, která je to asynchronní. Pořád provedení. Takže mějte že asynchronní Myšlenka na mysli. A já vám ukážu, co Rozdíl je v tom. Synchronní verze je na levé straně. Asynchronní verze je na pravé straně. Podívejte se na čísla zjistit, které kroky odpovídají tomu, co provede v každém řádku. Tam, upozornění se objeví jako první. Vzhledem k tomu, jak se stock informace od Yahoo! trvá tři sekundy, stánky po dobu tří sekund. A pak to upozorní cenu Po těchto třech sekundách. Takže teď, že upozornění se zobrazí se v té době - tři sekundy palců A pak to upozorní tím, po tom. Tak to jen jde krok za krokem. Je to jako to, co vy by akceptovat, že? S asynchronním provedení, můžete upozornit jako první. Pak můžete odejít na tuto adresu URL. A vy říkáte, budu zeptejte se na údaje. A pak budu zpracovat později. Takže to okamžitě provede další řádek poté, co jsem dělat, že Asynchronní požadavek. Takže 0,001 sekundy, zobrazí upozornění hi. Provést tuto funkci, upozornění bye. A protože jsem slib, který jsem zpracuje data později, co se stane, je-li tato data vrátí tři sekundy později, pak běžím, že Funkce, které mám támhle. Ano? DIVÁKŮ: Mohl byste upřesnit nebo objasnit, co Ajax znamená? JOSEPH ONG: Tak Ajax je to tak, že když jsem Potřebujete dat, když jsem na stránkách a já nechci aktualizovat stránku, pak I používat tuto technologii s názvem Ajax. To v podstatě znamená jen, dojdi data z jiného webu. A to takovým způsobem, že jen nemá oddalovat svou webovou stránku. DIVÁKŮ: Tak je to, že vlastní část JavaScript nebo jQuery? JOSEPH ONG: Takže někdo napsal, jak to udělat To JavaScript dávno. Na jednom místě, to neexistovalo. A tak někdo vymyslel tuto techniku aby lidé mohli požádat o tato data v této módě. A oni psali nějaké věci aby to pro vás. A jQuery vám dává jen to velmi příjemný způsob, jak to udělat s tímto $. dostat funkci. otázky? Dokážu odpovědět na otázky týkající se Ajax potom taky. Budu tady. Tak to pojďme nám načítat data, aniž by osvěžující stránku. A pojďme nám to v asynchronní způsob, který nezamrzá stránku. Příliš dlouhý, nečetl-li to vysvětlení bylo pro vás příliš dlouhá. Tak konečně, cross-site skriptování útoky. Viděli jsme to Zamyla. Je-li ve svém databázovém někdo má tento název, které je tento tag script, a já nějaký kód na mé stránce, která tiskne se jmény lidí v řadě, nebo mám nějaký kód JavaScriptu, který vloží tento název do stránky, co je to HTML je produkováno? No, já vytisknout značku HTML. I vytisknout všechny tyto značky. Mám na tu část, kde jsem tisk ven s kamarády. Vytisknout Lauren ven. To vytisknout Milo ven. A pak se mé jméno v databázi je skript příspěvek nelichotivé postavení Facebook. Protože jsem vložil to do stránky , protože to vypadá, JavaScript, kdy Tato stránka je poslán k uživateli, se dostane popraven jako JavaScript. A tak to je to, co nazýváme cross-site scripting útočit. Někdo dává škodlivého informací databáze, která by mohla odpovídat některé další řetězec nebo některé JavaScript řetězec. A když se to vytiskne na Stránka tímto způsobem, pak to, co se stane, je, že špatný kód dostane popraven že jsem neměl v úmyslu pro to, aby si popraven. A to je vše, cross-site skriptování útok. A způsob, jak obejít je to jako řekl Zamyla. Stačí zabalit věci Speciální znaky HTML. A tento HTML speciální znaky je PHP funkce, která zabrání tento druh věci z děje s vámi Máte-li škodlivý řetězec v databázi. Je to prostě uniká to, takže to není se interpretován jako HTML. Nahrazuje malé držáky s tím, co nazýváme subjekty. A šli jsme na to v přednášce příliš. Takže myslím, že kluci by měli mít dobrý přehled o to. Otázky? Ano. DIVÁKŮ: Tak jak by [neslyšitelný]? JOSEPH ONG: Řekni to ještě jednou. DIVÁKŮ: Jak by monitor - JOSEPH ONG: Správně. Takže máte něco, co se říká, když I registrovat, typ v mém jménu. Jen jsem psát v této oblasti, jmenuji se stript příspěvek nelichotivý Facebook Stav v blízkosti script tag. A to jen dostane dát do databáze, protože nemůžu říct, někdo ve světě nemá jméno s levou šipkou v něm nebo Slovo skript v něm. To není opravdu smysl. Tak jsem se jen ujistit, že jsem dezinfikovat věci dřív, než jsem ji vytisknout ven na stránku. DIVÁKŮ: Takže speciální karty HTML zabraňuje tagy skriptu? JOSEPH ONG: Jo. Takže to nebrání tagy skriptu. Je to prostě dělá, zda skript tagy nechápu interpretován jako HTML nebo - jo. Je to prostě přijde jako to, co je to ve skutečnosti je. Dobrá. Takže to byl přezkum kvíz. V pohodě. [APPLAUSE]