R.J. Aquino: Nézzük csak az induláshoz. Tehát ez a Quiz 1. Itt van néhány magas szintű információt. Az About page A kvíz ezen URL már nem CS50.net, bár ez továbbra is működni fognak. Ez CS50.harvard.edu/quizzes/2013/1. Ez a nagy Névjegy oldalon, mondom hol és mikor, azaz jövő hét szerdán egy csomó szoba. És jövő szerdán, azt azt jelenti, két nap múlva. Mindezek az információk ott van. De ez kumulatív. Tehát mindent az első felében a év potenciálisan a kvíz, mert akkor nem igazán fejlett dolgokat C nélkül, amennyiben feltételek és A hurkok és hasonlók. De lesz a hangsúly a hatálya alá tartozó anyagok hiszen kvíz 0, kezdve a struktúrákat és a File I / O Ez jellemzően kihívás, mint Quiz 0-ra. Az átlagos pontszám jellemzően alacsonyabb. Tanulmányozd nehéz. Amíg te tanulás, ügyeljen arra, hogy CS50/discuss, hogy küldje el kérdéseit és olvasd el mások kérdéseire. Tehát, ha nincs bármilyen kérdése van, Jelentkezz be és olvasd a barátai kérdéseire. Ők valószínűleg jó kérdések. És, hogy a gyakorlat vetélkedők. Már így vetélkedők hét vagy nyolc éve. Ők mind online. Jövő kérdések hasonlóak a régi kérdésekre. Így tesszük őket. A teszt még nem létezik. Egyikünk sem látta. De ez így fog kinézni korábbi vetélkedők. Ehhez felülvizsgálati ülésén, ez nem kimerítő listát a témák. Nem lehet csak részt ezen, majd tökéletesen készen áll a teszt. Ellenkező esetben nem lenne hogy sok a kvíz. És ez szintén nem feltétlenül mindent, amit tudni kell minden adott témában. Ez azt jelentette, hogy ki, hogy a dolgokat már fedett, figyelmezteti Önt mi fedett, és az, ahogy amit fedezte. De akkor meg kell, hogy menjen tovább, és mélyebb, ha tanulmányozza a kettős ellenőrzés hogy mindent tudnak az adott téma, és hogy már kitöltött a sarkok, amelyek szereplő előadás. A kvíz jegyzetek mondani, hogy menjen a írástudó jegyzetek, óra előadás videók. Ez egy jó módja annak, hogy győződjön meg róla, hatálya alá tartozó valamennyi bázisok. Így a kezdetekhez, mikor tette ezeket a diák, megpróbáltam tenni, ahol találtam információt. Így File I / O, például, 7. hét, A hétfői előadás, és a kiküldött 6. § és a probléma meg mind Információk a fájlról I / O Megtettem ezt minden témában. Tehát azok címdiák lehet hasznos lehet az Ön számára. Tehát itt van Fájl I / O Ne feledje, a Probléma meg 5 szoktuk fopen, fclose, fwrite, fread és fseek. Miután vissza 30ish JPEG és miután átméretezett és hírnök bitmap, akkor legyen elég ismerős e funkciók és hogyan működnek. Ha nem ismerős, mindenképpen felülvizsgálja azokat. És győződjön meg róla, hogy megértette, mit A különböző érvek, ha ők használják. De a közös fájl kapcsolatos hibák akkor lehet kérni, a - Nos, ha már elfelejtette, hogy ellenőrizze, fopen ténylegesen ledolgozott mielőtt elmész módosítani egy fájlt. Ez lehet rossz. Ha elfelejtette a fclose fájlba hogy már fopened, ami hasonló a memóriavesztés. Ez nagyon rossz. És elfelejti, hogy ellenőrizze, ha már végére ért a fájl előtt kezdjünk el írni hozzá. Tehát, ha azt mondod, hé, itt vagyok a végén a fájl. Adj még 5 bájt. Nos, ez valószínűleg nem fog dolgozzanak ki, ahogy várnánk. Ez tényleg azt Fájl I / O, mert nem annyira belőle a probléma beállítva. Tehát, ha megértette, mi történik A probléma meg 5, emlékszem a bitmats és a JPEG, akkor valószínűleg az összes készlet Fájl I / O Ha ez egy kicsit fuzzy, mindenképpen felülvizsgálja ezt a problémát állítva, és a kapcsolódó anyagi. Struktúrák volt a téma, hogy volt a vonal között kvíz 0 és kvíz 1.. Nem elég, hogy a vágás a Quiz 0-ra. Így akkor biztosan a Kvíz 1., 7. hét, hétfő. Mi az a struktúra? Itt megmutatjuk a struct. Ez olyan, mint egy új típusú. Ez olyan, mint egy konténer A több területen. Ebben az esetben, már kijelentette, a struktúra diák, hogy két területen - egy string, hogy mi hívó nevét és egy int, hogy mi hívás korban. Tehát, amikor át körbe a diákok, vagy én módosítani diákok, én képes lesz hozzáférhet a nevüket és a korukat. Nézzünk néhány kódja. Itt azt látjuk, hogy én már kijelentette, egy diák s, mint Kijelentem, bármely változó - int x, int y, et cetera. Itt a diák s. Úgy kezdődik, semmi a területen. Tehát nézzük meg őket. Te meg területén a struktúra és pont. Szóval azt mondtam, hogy itt s.name = RJ. És s.age = 21. Azt is frissíteni mezők ugyanúgy, ahogy azt frissíteni a változó értékét. Szóval szeretném megváltoztatni a nevét RJ-vel nincs pont a R.J. írta a helyes utat. Ez lenne s.name = RJ, ugyanaz ahogy mondta eredetileg. És akkor érheti őket. Így már meg őket. Már frissítik őket. Azt is elérheti őket a nagyon hasonló módon. Tehát itt, én kinyomtatására R.J. 21 éves. És én elérése ezeket az értékeket A s.name és s.age. Szóval ez hozzáférés struktúrákat A dot jelölést. Igen, kérdés? Közönség: Van valami oka a Előző dia, hogy nem tesz hallgató a felső sorban, mint a typedef struct diák, majd hallgató a végén? R.J. Aquino: Tehát a kérdés az volt, a ezt a diát, most már tipikus jelenség typedef struct csomópontot, majd a területén a struktúra és a akkor a szó csomópontot. És hogy jön ide azt nem mondtam, typedef struct hallgató, majd a területén a struct majd diák? Ennek az az oka, hogy nem kell, hogy hozzáférni belsejében a struct. Tehát nem baj, hogy hagyja, hogy név nélkül. Én is csak hagyja, ahogy egy névtelen struct. Az ok, amiért csinálni kapcsolt listák és dolog, mert benne meg kell referencia a struct csomópontok csillag. Így a struktúra van, hogy egy nevet, így érheti később. Ez egy kis részlet. De akkor általában látni typedef struct kapcsos zárójelek, ha nem kell nevét és typedef struct néhány név majd kapcsos zárójelek ha úgy tetszik kell a nevét. Szóval ez egy jó kérdés. És ezen a ponton, hajlamosak vagyunk módosítani Struktúrák és adja át körül struktúrákat a referencia, nem érték. Szóval akkor csak át körbe mutatókat Struktúrák ahelyett, hogy továbbítaná körül Struktúrák magukat. Szóval igen gyakran lesz használatával, ebben az esetben, a * vagy hallgató struct node * vagy csomópont * helyett ki a diákok vagy a csomópontok. Tehát itt, azt mondtam, rendben van, a változó ptr lesz a címe s. Ez lesz a mutató a tanuló R.J. Így lehet kapni ezeket a mezőket ugyanaz, mint amit kap semmit. Először is, ID hivatkozni a mutató hogy a struct. Ez * ptr, majd egy pont, majd az életkor. Tehát elérni a területen, és már frissített most 22, mert nézzük mondjuk, ez volt a születésnapom. Van egy parancsikont szintaxis használja a nyíl itt. Tehát ptr nyíl kor csak ugyanaz, mint a * ptr.age. Nos, ez olyasvalami, akkor meg memorizálni és emlékezni. Ön használta sokat pset6, A helyesírás Pset. De ez valójában mi folyik az a motorháztető alatt. Ez dereferencing a mutató majd hozzáféréshez. Kérdés? Közönség: [hallható]. R.J. Aquino: Akkor miért is használ Struktúrák a pointerek helyett Struktúrák magukat? Ennek oka az lenne, ha halad a struct a funkciót, akkor valószínűleg szeretnék átadni az egész csak a 4-es vagy, így bájt, hogy képviselje a mutató, mint szemben a 30 vagy potenciálisan 40 bájt, hogy a struct. Így halad valamit a funkciót könnyebb, ha a dolog kisebb a rövid. Kérdés? Közönség: Lehet, hogy már említettem, ez az elején, de vannak másik diák fel [nem hallható]? R.J. Aquino: Ezek a diák lesz után a felülvizsgálati ülésén. Majd tegye őket a honlapon. Így mozog és mozog kissé gyorsabb, fogunk beszélni az adatok szerkezetek. Nagyon sok. Tettünk egy csomó őket. Itt van, amit meg kell értened a adatstruktúra. Meg kell igazán értem magas szinten mi minden szerkezet. Meg tudod magyarázni, az angol a barátom, hogy nem vett CS50 hogyan mi szervezzük meg az adatok, és ezért azt használni valamit így? Ez a dolog egy. Thing két, érthető a végrehajtás. Szóval, megérteni, hogyan kell használni ezeket a dolgokat A C. és mi megy át ezt. És akkor a dolog három lenne tudni, hogy a futnak idő és a korlátozásokat a különböző szerkezetek használ. Így érthető, miért is használja a hash tábla helyett egy tömb. Értsd meg, hogy milyen gyorsan, átlagosan hozzáférés a hash tábla. Értsd meg, milyen műveletek gyors láncolt lista, de lassú a tömbök és a fordítva. Így érthető, hogy neked kell megérteni Big-O jelölés csak tudni hogyan kell beszélni ezekről a dolgot. És fogunk beszélni. Tehát az első dolog, láncolt listák. Itt van egy magas szintű kép A láncolt lista. Meg kell mutatni az osztályban. Mi általában 10 fő áll a színpadon. De van egy sor olyan csomópont, ahol az egyes node van néhány érték, és a mutató hogy a következő értékre. Tehát, hogy egy csomópont a következő, akkor csak azt mondom, hogy nekem a következő csomópontot. Van, hogy a csomópont. Add ide a következő csomópontot. Van, hogy a csomópont. Add nekem a következő csomópontot, és így tovább amíg nincs csomópont maradt. Tehát továbbra is beszélni ez magas szinten. Nagyon könnyű beilleszteni a dolgokat egy láncolt lista. Ha nem érdekel a rend, akkor csak dobd az elején. Ez az állandó idő. De nehéz találni egy értéket. Ha akarsz kérni, hét listámon? El kell menni a minden egyes értéket. Ez a hét? Ez a hét? Ez a hét? Ez a hét? Újra és újra. És ez O (n). Tehát, ha tanul a kvíz, összehasonlítani ezt tömbök. Ez rendben van? A fények kialudtak homályos. OK. Amikor egy láncolt lista jobb? Amikor egy tömb jobb? Tehát nézzük meg néhány kódot. Itt van egy lehetséges csomópont. Ez egy struct. Meg van egy int n, amely lesz az érték. És van egy struct node * mellett, amely mi mutató a következő csomópontot. Tehát itt azt látjuk, hogy mi történt hogy véget int a mi csomópont. De ha ez egy láncolt lista a char csillag vagy egy láncolt lista az úszók, mi teljesen képes erre is. Ne feledje, a pset6, akkor valószínűleg volt egy láncolt lista char csillagok, vagy csak statikus char tömbök. Nézzünk itt egy művelet. Tehát szeretnénk beszúrni egy új n a mi láncolt lista. Kezdjük el a fejét mutató, amely a mutatót ezen a csomóponton, amely a n értéke, és a következő egy mutató, amely pontot, hogy ez a csomópont egy értéke n és a legközelebbi null, mert a ez az utolsó csomópontot. Tehát az az érdeke, idő, úgy lesz fel az összes kódot a képernyőn. És megyünk rajta néhány sort egy időben. Tehát itt van a kód. Remélem olvasható. Az első dolog, amit tehetünk, mi malloc egy új csomópont. Így tesz a mutatót egy új csomópont, amely nem igazán kell semmit beállítani fel, hogy még. Ellenőrizzük, hogy megbizonyosodjon arról, hogy az Az új csomópont nem null. Ellenkező esetben meg kell feladni. Tehát, ha ellenőrizte, hogy, most állítsa be az értékeket a csomópontot. Így tesz az új n a mi n területen. És mi meg a következő mutatót pont az eredeti fejét, hogy mi is most már be ezt a csomópontot a listát. Aztán itt van még a globális vezetője pont hogy az új csomópontot, hogy ha mi voltunk, hogy kezdődik feje, mi lenne ebben az Új első csomópont helyett a régi első csomópontot. És amikor ezt a funkciót kilép, a változó új csomópont már nem létezik, mert a helyi a funkciót. Tehát ez az állam a világ. A globális vezetője rámutat, hogy az új első csomópont, amely rámutat, hogy a eredeti első csomópont, amely pontokat hogy a csomópont után. Ez volt a szerelést. Remélem, hogy viszonylag egyszerű követni. Ha kétségei vannak, rajzoljon egy képet. Szóval, azt tapasztalom, hogy beszélek kapcsolt listák és néztem kód nagyon nem segít. Mivel nézi a képet egy kapcsolt lista lehetővé teszi számomra, hogy gondolkodni, ó, így Van ez a node itt. De ha frissítem, hogy mutató, hogy végül levált. És elfelejtettem, ahol a csomópont megy. És a kódot kilép. És van több csomópont hogy megszakad. És ha nem a végén A kívánt listát. Tehát, ha rajzolni a képet, és csináld lépésről lépésre, remélem, látni fogod a megfelelő sorrendben a dolgokat tekintve frissíti a mutatókat, hogy megbizonyosodjon arról, a lista jön össze. Insert viszonylag egyszerű. Egy bonyolultabb lenne egy beszúrás a rendezett lista. A bonyolultabb funkció törlése és megtalálni, ezért keres egy listát hátha van ott valami. Talán te ezt pset6 ha került a hash tábla, és azt mondta, Nos, a szó alma én láncolt lista? Szóval, lehet, hogy már megtette ezt. De mindenképpen, frissíteni a memóriát és próbálja újraimplementálni találni és újraimplementálni törlése a láncolt lista. Fun Mellékesen jegyzem meg, ott is kétszeresen kötött listák, ahol van mutatók, hogy pont az előre és a hátra, így mehet a következő csomópont és az előző csomópontot. És ott volt a kérdés, a tavalyi kvíz az ilyen típusú, beszél a kétszeresen láncolt listák. Nos, ez a struktúra, hogy te viszonylag ismerik, mert a legtöbb akkor valószínűleg használni őket pset6. Itt van az egyik, hogy egy kicsit kevésbé ismert. Mint Mellékesen jegyzem meg, azt hiszem, hogy Quiz 1 elsősorban a keményebb, mint a kvíz 0, mivel a cucc amit csinálsz, akkor még nem tette meg, mint sok. Ahhoz, hogy egy másik utat, a kvíz 0, Ön írt egy csomó C. És mi megkérdezte, hogy a C- A kvíz 1. fogunk kérdezni PHP és a JavaScript, amit még nem írt annyi. Fogunk kérdezni C-kód még nem írt annyi, ez a fejlett C cuccot. Tehát mindenképpen, a gyakorlat a cucc is beszélt előadásában, hogy nem feltétlenül csinál A probléma meg. Ha már itt tartunk, akkor nem írt verem a probléma meg. De az előadás. Itt a magas szintű képet halom, hogy mi jelenik meg minden évben. Ez a halom tálcák A Mather étkezőben. Egy magas, halom egy utolsó in, first out adatstruktúra. Ez azt jelenti, mész tenni a dolgokat - 1, 3, 7, 12, 14, 0 negatív. Az egyetlen dolog, amit nem lehetett szerint - a negatív 3, 0. Meg az összes ezeket a dolgokat in És az utolsó teszel az első egyik, hogy fog kijönni. Szóval van két művelet - push és pop. Minden üzembe, hogy én intett, mint ez push. És akkor, amikor elérem az, hogy megragad valamit, vagy eléri a tetején, hogy megragad valami, ami pop. Így fogunk végrehajtani halom. És megmutattuk nekik előadás a tömbök. De meg tudná csinálni őket a kapcsolt listák. A verem fogalmi adat szerkezet, nem úgy, mint egy megvalósításbeli egyet. Szóval, mi lenne, hogy néz ki? Úgy néz ki, olyan, mint ez. Ha volna egy egész méretű. És ha volna egy sor értékek Mi úgy hívjuk tálcák, mert ez mi a kép volt minket - int tálcák - majd néhány a maximális kapacitást. Tehát mi nyomja néz ki? Nos, ha van egy halom s, majd nyomja valami rá s, kapnánk a méret a s. És ez lesz a következő nyitott spot a mi tömb. Tehát, ha van három dolog a mi stack, majd 3 tálcák lenne a következő nyitott helyre, mert a 0, 1, és a 2. már megtelt. Így tesz az értéket s.trays [s.size], a harmadik helyen. És akkor növelni s.size mondani, Hé, mi volt három dolog előtt. Most már négy. Így a következő alkalommal, amikor nyomja, akkor megy, hogy valamit, 4. Vagy a következő alkalommal, amikor a pop, mész nézni 3-4 helyett, vagy bármi. És akkor majd vissza hű mondjuk, hé, sikerült. Ez működött. A szabály, ha egy függvény, ami volna vissza igaz vagy false mindig igazat ad vissza, akkor lehet hogy történt valami baj. Így működik ez? Nos, ez jól működik, 1, és a 2, és 3. és 4., valamint az öt. De tegyük fel, hogy elérem a kapacitást. Már akkor befut a probléma, mert Ha a méret ugyanaz, mint a kapacitás, én vagyok most próbál tenni valamit egy tömb, ahol nincs hely. Így egy rövid csekket erősít ez. Ha s.size == kapacitás, return false. Ha nem, és amit tettünk. Szóval, mi mást lehetne kérni körülbelül a stack? Mit kell még tanulni? Mit kell még gyakorolni? Nos, végrehajtási pop. Már nem nyomja. Megcsinálom. Egy nem-tömb megvalósítása, ahol a használja a láncolt lista, talán. Egy nem-int végrehajtását. Mi volt ints itt. De lehetett volna úszók. Lehettem volna szálakat. Lehetett volna char csillagok. Nézd meg a korábbi vetélkedők a fajta kérdés már kérdezték stack. Én azt mondom, hogy fedett halom körül ugyanaz, mint amit már lefedett őket elmúlt években. Tehát a kvíz kérdéseket kell jó jelzés. Előrelépés még gyorsabb, sorok. Olyanok, mint a halom. De ők az első be, első ki. Ha a brit, a szó sorban Valószínűleg egy csomó értelme van. Ellenkező esetben előfordulhat, nem hallottam róla, mint egy vonal. Úgy működik, mint a vonal az Apple bolt. Az első ember, aki jelenik meg 03:00 Reggel az első aki vásárolni az iPad. Tehát két művelet - Enqueue és dequeue. Enqueue teszi, hogy valaki a sorban. Dequeue húzza az első személy ki a vonalból. Ismét, akkor végre ezt egy tömb. Tehát mi az a struktúra is megmutatta előadás? Ez volt ez. Ismét számokat. Ismét, a méret és az új dolog elöl. Miért van valami neve előtt? Ez az index a következő elem dequeue. Ez csak belső nyomon követése Az első srác, hogy megjelenik, hogy mi húzza ki, amikor szükségünk van rá. Feltétlenül nézd meg jegyzet, és próbálja végrehajtása Enqueue és dequeue ha tanul a teszt. Fontos dolgot gondolni. Csomagoló körül, ha az első és a méret végül nagyobb kapacitást. Ismét, ha a szerkezet teljes, fogsz problémája van. Hash táblák, amit látott. A legtöbb akkor valószínűleg végre ezeket pset6. Ez egy olyan struktúra, amelynek célja a O (1) állandó idő behelyezés és O (1) állandó idő elemzéssel. A CS50, mi végre ezt egy sor kapcsolt listák. A legfontosabb eleme, hogy a hash tábla a hash függvényt. Tehát, hogy átalakítja a bemenet, mondjuk, a szótári szót, egy szám, ami lesz az index. És fogjuk használni, hogy index a mi tömb. Tehát itt van egy aranyos kis kép A study.50.net. Mi dobja a szavakat a hash függvényt. És a hash függvény azt mondja, hová tegye ezeket a szavakat. Ez minden nagy a földön, ahol a csak egy szó, minden nyílásba. De ahogy emlékszem pset6, ott több szót, mint a hely. Tehát, mi történik, ha kap egy ütközés? Ahelyett, hogy egy érték tárolására, mondjuk, hash tábla 3, akkor tárolja a láncolt lista. És így ahelyett, sárgadinnye Itt, ha volna egy láncolt lista, ahol az első csomópont sárgadinnye. És a következő csomópont macska. És a harmadik csomópont ütközés, nézzük azt mondják, azért, mert ezeket a szavakat indul C. Így a legtöbb tetted ezt pset6. Ha nem csinál egy hash tábla pset6 és megpróbált valami hasonló a trie, mindenképpen felülvizsgálja hash táblákat. Ha még csinálni pset6, határozottan felülvizsgálja hash táblákat. És ha te azt pset6, és nem dolgozzanak ki igaza, és sok volt a baj vele, határozottan felülvizsgálja hash táblákat. Tehát a lecke nagyon határozottan felülvizsgálja hash táblákat. A hatalmas kisebbség próbálta ki megpróbálja a pset6. Magas szintű kép. Ez olyasmi, mint ez, ahol minden csomópontnak van egy sor a gyermekek, ahol az egyes gyerek felel meg a levelet. És minden csomópont is mondja, hé, én egy szót sem. Tehát ebben az esetben, a szó Maxwell, ha követi az M az A a X-W-E-L-L és kövesse azt majd még egy. És hogy ez a szimbólum, delta, ami azt jelenti, hogy azt jelenti, hogy ez a szó. Tehát Maxwell egy szó. Ezek a delták a teljes jelölő amely a dolgok szavak, és amelyek dolgok nem. Tehát pset6, az adatokból tárolt mellett bármelyik csomópont volt, "Én vagyok a szó. "És a hűvös dolog próbálkozás az, hogy bizonyítani behelyezése és lookup O (hossza a szó). Szóval, csak azért, hogy a Maxwell, ez M-A-X-W-E-L-L. Tehát, hét vagy nyolc - Nem tudok számolni - lépéseket, hogy a végén és ellenőrizze a dolgokat. Tehát gyors végrehajtására van. Rob ment keresztül kapcsolódik felsorolni a halál után. Így ellenőrizni, hogy ki. Bocsánat. Ment keresztül trie az ő halála után. Így ellenőrizni, hogy ki. De alapvetően minden csomópont 27 mutatókat a következő csomópontokat, és egy Logikai változó vagyok egy szót sem. Nézze meg Rob halála után hogyan ez valójában kerül végrehajtásra. A végső szerkezetét, a fák és bináris keresés fák. Így nézi ezeket, ezeket fedett legutóbb hét 8., hétfő. A fa olyan, mint egy trie, kivéve, ha Nem feltétlenül kell 27 csomópontok minden ponton. És akkor nem kell ezeket az adatokat minden egyes lépés, amely azt jelenti, hogy a - az út nem számít. Mivel trie, az út fentről alsó, Maxwell, fontos volt számunkra. De minden csomópont több gyerekek, talán. Van még pár szókincs. A gyökér a fa a legtetején. És azt mondják, hogy az nagyon legalsó csomópontok, amelyek nem rendelkeznek gyerekek levelek. Szóval, mint a trie, a fa szerkezete csomópontok. A gyakori típusa a fa, megyünk beszélni egy bináris fa, ahol a minden csomópont nem gyermekek vagy egy gyerek vagy két gyerek. Tehát ez a kép itt nem egy bináris fa, mert node 3 három gyermeke van. De ha mi voltunk, hogy figyelmen kívül hagyja azokat, a többi Az ez egy bináris fa, mert mutatja a tulajdonsága, hogy minden csomópont nulla, egy, vagy két gyermek. Szóval hogyan lehetne kifejezni ezt a kódot? Mi is van egy csomópont, ahol minden csomópont egész szám belsejébe, valamint a mutató a bal oldali fa és egy hivatkozást a fa a van, így a két gyerek. Hogy lehet ez hasznos? Nos, ha teszünk szabályokat, ahol fel csomópontok, tudjuk, hogy a keresés gyorsabb. Szóval van egy koncepció a bináris keresés fa, ahol minden csomópont a bal részfa van egy kisebb értéket mint a csomópont nézünk. És az összes csomópont a jobb részfa nagyobb értékűnek mint a gyökér csomópontot. Nos, úgy néz ki, mint egy csomó szót. Fogom tedd belül a kettős idézetek és megmutatom a kép. Tehát itt egy példa bináris kereső fába. Lásd, hogy kezdjük 10. Minden balra Kisebb, mint 10 azt. És minden a jobb nagyobb, mint azt. De sokkal inkább, mint, hogy minden csomópont a fa kifejezi ezt a tulajdonságot. Így a 7 csomópont rendelkezik egy 3 a bal és egy 9 jobbra. Tehát az összes ilyen kisebb, mint 10. De néztem csak azokat, a 7 már 3. a bal és 9. jogát. És hasonlóképpen a jobb oldalon, 15 14 a bal és 50 jogát. Tehát a három csomópont ott, 15, 14, és 50, szintén egy érvényes bináris fa vagy érvényes bináris keresést fa. És ők mind nagyobb, mint 10.. Így azok számára, hogy a jobb oldalon van. Van kérdés? Közönség: Hogyan kezeled, ha van két hetes? R.J. Aquino: Igen. Hogyan kezeled a két érték hogy az azonos? Néhány bináris keresés fák mondani, hogy figyelmen kívül hagyja másolatok, hiszen a cél az, csak mondani, hogy láttam ezek a dolgok eddig. Néhány bináris kereső fa meg tudná mondani, Van egy szám belsejében a csomópontot. Mások azt mondják, hogy mindent a bal oldali kisebb, mint vagy egyenlő. És minden a jobb nagyobb, mint. Ez csak attól függ, hogy mi a probléma az, te megoldásában. Tehát a szótárban, például, ha nem érdekel másolatokat. Akkor dobja ki őket. De más probléma lehet, hogy érdekel. Közönség: Lehetséges, hogy a 1 a bal oldalon a 15, mely kevesebb, mint 10? R.J. Aquino: Nem. Ha a 14-itt volt 1, Ez nem érvényes bináris kereső fa, mert minden jobbra 10 kell, hogy legyen nagyobb, mint azt. És majd meglátjuk, hogy miért. Ha a földön a keresési célom megtalálni 14., elkezdem a gyökér. Így nézek. OK. Fogunk kezdeni a gyökér. Nézd meg a 10.. Nos, a 14., a cél, nagyobb, mint 10-ig. Így kell lennie, a jobb oldalon. Ez nagyon hasonlít az egész telefon book dolog, amit tett, a bináris keres ott. De ahelyett, hogy a bináris keresés egy tömb, mi bináris keresés a fán. Szóval még mindig keresi a 14. Nos, 14 kisebb, mint 15. Tehát ha ez a mi fa, akkor azt legyen ezen a területen itt. Meg kell lennie, hogy a jobbra 10, és a bal oldalon a 15. És így ellenőrizze ezt a csomópontot. És yay, találtunk 14. Nem fogok járni rajta. De itt van a kód. Ez valójában viszonylag egyszerű, mert ez a rekurzív. Mi is azt kérjük, hogy ezt a kvízt? Azt is kérjük, hogy írni ezt a kódot. Azt lehetne kérni, hogy nézd meg ezt a kódot és módosítsa a kódot, és elmagyarázza, mi csinál. Igen. Kérdés? Közönség: Vannak ezek a diák lesz elérhető, mint volt legutóbb? R.J. Aquino: Igen. Tehát ezek a diák biztosan felkerül. Közönség: ők valóban írt most a honlapon. Dávid hogy ezt tetted. R.J. Aquino: A diák most a honlapon. Majd talán összecsap pár A helyesírási megjegyeztem, és kijavítani azokat. De van egy aktuális változatot az oldalon. Más dolog, amit lehet kérni, hogy ezt - levelet betét. Írj egy iteratív változata rekurzív függvény is csak azt mutatta, hogy vagy beszélni ezeket a dolgokat, mint bekezdések, a szavak, a mondatok. Összehasonlítva a futási idők, és elmagyarázza mit szeretne használni a bináris Keresés fa helyett hasítótábla, például. Így érthető ezek a struktúrák egy nagyon mély szinten. Értsd meg, hogyan kell írni őket, hogyan kell használja őket, hogyan kell beszélni róluk. És akkor lesz minden készen. Kérdés? Közönség: Amikor írsz a bináris kereső fa, hogyan meghatározni, hogy milyen értéket hogy ez a gyökér? R.J. Aquino: Tehát a kérdés az volt, hogy mi értéket csinál, mint a gyökér? Attól függően, hogy a kódot, akkor Lehet, hogy a globális gyökér. Szóval lehet, hogy valószínűleg már a pset6 globális hash tábla. Vagy lehet, hogy adja át a gyökér az argumentumként. Tehát ez a keresés funkció itt vesz egy érv a csomópont *. És bármit csomópont történetesen nézte az egyik bánsz mint a gyökér, ha át be! És én vagyok minden. Azok a diák. A következő személy jöhet csere egy laptop és a mikrofon. ROB BOWDEN: Azt hiszem, lehet, hogy értelmezték ezt a kérdést másképp. De úgy értelmeztem, mint, ha az 1, 2, és 3, hogyan tudjuk tudni, hogy a 2. a gyökér szemben az 1-es vagy 3? Ha teszünk 2. a gyökér, akkor ez szépen 1. és 3. a bal és a jobb oldalon. De ha 1. a gyökér, akkor ez az 1-es top, 2 jobbra, 3 jobbra. Tehát alapértelmezés szerint nem tudja mit kell tenni a gyökér. És minden algoritmust várunk, hogy Önnek, csak az első dolog, amit betét lenne a gyökér. Vagy mi lenne kapsz egy bináris fa, amely már létezik, hogy van egy gyökér. De más algoritmusok létezik olyan, hogy A gyökér frissíti, így ha a végén abban a helyzetben, ahol ez 1, 2, 3, akkor automatikusan frissíti a , hogy 2 új gyökér, hogy ez még mindig szépen egyensúlyban. ANGELA LI: Cool. Sziasztok. Angela vagyok. És én fogom lehúznak a C majd bemegy néhány web technológiák - HTTP, HTML és CSS. Tehát az első dolog az, puffer overflow támadások. Szóval vessünk egy pillantást a kódot. Ez nagyon egyszerű. Van egy function ize. És nem adott vissza semmit. De tart a mutató hogy egy string nevű bárban. És ez fog bejelenteni puffer, amely egy karakter tömb 12 slot. És ez használ memcpy, ami csak egy funkció, amely másolatok egy címet a másikba. Tehát ez próbál másolni a puffert, amit bár mutat. Tehát valami ötlete, mi a baj ezzel a kóddal? Közönség: Ha a sáv hosszabb C, akkor felülírja. ANGELA LI: Igen, pontosan. Nincs garancia arra, hogy bár lesz kevesebb, mint 12. Csak néhány tetszőleges számú 12. És mi voltunk, mint, reméljük, hogy a felhasználói bevitel kevesebb, mint 12 karakter hosszú lehet. Tehát egy ideális világban, ha a bemenet mindig, és utána mi lesz valami ilyesmit, helló. Ez kevesebb, mint 12 karakter. Ez lesz olvasható a char c. És akkor mi vele valamit. Nem igazán számít. De egy rosszindulatú személy tehet valami, mint ez, ahol nekünk, amit bár mutat, ez megy, pont ezt a hatalmas tömb A Csak egy a. És ez az út hosszabb, mint 12. Szóval ez fog menni végig itt, ahol a visszatérő cím szokott lenni. Mondjuk ezt a funkciót hívják foo. Talán foo hívták néhány más funkciót, amelyet a nevezett a fő. Tehát, ha a foo fut, szüksége van tudni, hogy hol, hogy visszatérjen. Ha foo hívták néhány függvényt BAZ, azt kell tudni, hogy ez van, hogy menjen vissza a BAZ. És ez az, amit ez a feladó címét itt azt mondja. De ha felülírni néhány más címét, ebben az esetben, ez egy képviselete az a cím, a legelején a puffert, majd a mi tényleg fog történni, hogy a ahelyett, hogy visszatért a BAZ, amely felhívta a funkciót, ez csak fog menni, hogy az első a kódot. És ha ez volt ott, mert a rosszindulatú hacker haver jött, és injektált ezt, akkor talán ez az összeg Az A. valójában nem egy a. És ez valójában csak kód szünetek a számítógép, vagy valami. Tehát, hogy védekező erről a fajta dolog, amit meg kell soha nem feltételezni, hogy felhasználói bemenet egy bizonyos mennyiségű karaktereket. Például, ha csinált helyesírás, azt mondták, hogy szavai csak akkor lesz 40 karakter hosszú, maximum. És ez jó volt. De ha nem, akkor meg kellett volna győződjön meg róla, hogy csak olvasni 45 karakter egy időben. Ellenkező esetben előfordulhat, hogy felülírja A buffer. Minden olyan kérdés, hogy a. Igen. Közönség: Tudna csak beszélni egy kicsit többet ezek? ANGELA LI: Sajnálom. Igen. Közönség: A mikrofon csak a video. Megpróbálom, és a projekt. Szia, srácok. Sup? Szóval menjünk át néhány dolgot a CS50 könyvtár, amely már használja minden félévben, főként hogy felhasználói. Mint tudod, akkor többek között a CS50 könyvtár csak ezzel CS50.h, amely tartalmazza az összes prototípus a funkciók, amelyek segítségével, mint a GetString és getInt, és GetFloat, et cetera. És itt van ez egy sort a CS50 könyvtár, mely egy sor, amely Ti mindannyian tudjuk már csak egy char *. De vessünk egy pillantást hogyan getString működik. Ez egy nagyon rövidített változata. Ön húzza fel a CS50 könyvtár fájlokat az, azt hiszem, manuals.CS50.net. És akkor olvassa el a tényleges funkciót. De ez magában foglalja egyes A legfontosabb része. Ezért hoztuk létre néhány puffer némi kapacitással. És mit csinálunk a kapunk egy karakter egy időben a szabványos n. Ez az, ahol a felhasználó be- szöveget a konzolon. És így fogunk olvasni a karakter amíg ez nem egy új vonalat, és ez nem ér véget a fájl, ami a vége a standard input. És minden karakter, amit olvasott, ha ez a karakter végül hozzá a karakterek száma olvastuk és ez több, mint a kapacitás, akkor mit teszünk mi csak átméretezni a puffert úgy, hogy ez kétszer olyan hosszú. Tehát még egyszer, ez véd a puffer overflow támadások, mert olvasni egy karaktert egy időben. És ha bármikor olvasni túl sok, csak bővíteni a puffer. Azt szorozd meg kettővel. És akkor több hely. Ellenkező esetben csak hozzá egy karaktert a puffer. És miután elolvastad az összes karaktert, akkor csökken a puffer vissza, hogy a normál méretű, adjunk hozzá egy null terminátor, majd vissza. Nos, nézzük meg getInt. Nem tudnátok olvasni? Én lehet nagyítani egy kicsit. Nem tudom, hogy a számítógépek működnek. Mindegy. Nem tudok nagyítani megfelelően. Ez nagyon nehéz. Sajnálom. Nézzük csak meg ezt. Tehát mi getInt tesz, először elolvassa egy stringet getString, amely már végre korábban. És a fontos szerepet kell megjegyezni , ha ez a közös, hogy végül olvasás, mint valójában nem a húr, akkor csak vissza INT_MAX a képviselnek hiba. Miért vissza INT_MAX helyett negatív 1 vagy 1? Valami ötlet? Közönség: [Nem hallható] negatív 1. egy. ANGELA LI: Igen, pontosan. Tehát akkor valószínűbb, hogy csak akar 1. bemenethez vagy negatív 1. amikor megkérdezi egy n-edik és bármi edik maxes. Ez óriási. Akkor valószínűleg nem fogja használni. Tehát ez olyan, mint egy tervezési döntés győződjön meg róla, hogy nem véletlenül hibát ad vissza, vagy ha nem tér vissza 1, ami értelmezi a helyes válasz. Tehát, ha a vonal nem létezik, visszatérünk INT-MAX. Ellenkező esetben használjuk sscanf, ami olyan, mint scanf. De olvas egy string. És itt van ez formázott szöveg, ami% i% c. És mi megpróbáljuk egyeztetni, hogy a , amit a felhasználó adott nekünk. Azt akarjuk, hogy néhány egyező dolog 1 legyen, ami azt jelenti, hogy csak a szeretné, hogy megfeleljen egy egész körül talán fehér hely, talán nem. Ebben az esetben, ha tesz valamit mint a bár, bár nem egyezik egyáltalán, mert ott kell lennie egy egész szám elején. Tehát sscan soha nem kapcsol 0-ra. Szóval nem térnek vissza, hogy az. Vagy, ha tesz valamit mint az 1, 2, 3, A, B, C, hogy a mérkőzések mind az egész, hanem a karakter után. Így sscanf visszatér 2, ami szintén nem ideális. Nem akarod, 1, 2, 3, A, B, C, hogy egy érvényes int. Annak érdekében, hogy még nem működik. De azt mondják, teszel valamit, mint 50.. Ez meg fogja találni a% i, ami azt jelenti, ez lesz olvasható a n. És most, n tartalmazza a 50-es. És akkor vissza. Ellenkező esetben, bejön Újra. És akkor ez csak azt újra, amíg kapsz egy megfelelő bemenet a felhasználó. Kérdése az, hogy? Közönség: Tehát, ha úgy döntesz, hogy nyomtassa ki értékét a getInt a [hallható] lenne csak az egész, és a max? ANGELA LI: Igen. Tehát, ha ön használ getInt, akkor feltételezzük, hogy nem akar-edik max a egy érvényes bemenet, mert mész azt feltételezni, hogy rossz volt. Közönség: Ha nem volt char c és valaki fel az 1., 2., 3., Sam, nem igaz még mindig működik, 1, 2, 3? ANGELA LI: Azt hiszem, hogy működne. De nem akar 123Sam a egy érvényes bemenetet a felhasználó által. Ez nem igazán egy int. Tehát ez nem fair értelmezni, mint egy int. OK. Ebben az esetben menjünk , hogy az interneten. Tehát HTTP nem nyelv. HTTP csak a normál csomagban hogyan küldhet dolgokat az ügyfelek, hogy te, a szervereket. Ez mások az interneten. Így HTTP áll a Hypertext Átviteli protokoll. Ez a szív és a lélek az egész interneten. A hipertext része csak utal a HTML. Az átadás ügyfelek, mint a akkor küld kéréseket szerverek, amelyek segítségével a válaszokat. És a protokoll csak, hogyan vársz egy szervert kell viselkedni? És hogyan kéne viselkedniük olyan, hogy lehet egyszerűsíteni ezt a kommunikációs folyamat? Tehát HTTP kérések néz ki, mint ez. GET a kérés fajtája. Srácok, láttam GET kéréseket és POST kérések. Ez a második dolog van, / én, ez csak az URI vagy URL-jét, ahol akar menni a házigazda. Így ezt a kérést kér a oldal, mint a www.facebook.com / me. És ez egy GET kérést. És akkor ez a HTTP/1.1, ez csak változata HTTP használ. Ez szinte mindig 1.1. És akkor ott van egy csomó más dolog is. Tudod valójában látni ezeket, ha nyissa meg a konzolt, amikor böngészés a weben. Válaszok kinéznie több, mint ez. A felső rész, ismét a típusú HTTP, amit használ majd egy státusz kódot. Tehát 200 OK mindent dolgozott ki. Itt van a tartalom. A tartalom fog követni. És akkor azt fogja mondani, hogy milyen a tartalom és egyéb dolgokat is. A státusz kódok, van néhány fontos is, amit tudnia kell. 200 OK, mint minden arany. Minden jól működik. 403 Forbidden. Ez akkor már valószínűleg látott, ha elfelejtettem a chmod valamit rendesen. Ez azt jelenti, hogy nem kell megfelelő jogosultsága elérni, hogy a szerveren. Ez olyan, mint, nem, nem látom. 404-es azt jelenti, hogy a dolog nem létezik. Nem található. Ön valószínűleg látta, hogy sok. 500 Internal Server Error általában mintha valami elromlott az oldalon a szerver. Tehát, mikor végrehajtási pset7, ha már PHP hiba, akkor tényleg menj az oldalra, és lát egy csomó PHP hiba dolgokat. De ez általában nem történik meg, mert a honlap nem igazán akar mondani, hogy miért a helyén van törve. Ők valószínűleg csak vissza 500 Internal Server Error. És akkor ott van 418 vagyok teáskannát. Van egy egész történet miért ez a dolog. De olvastam, a maga idejében. Van egy csomó egyéb helyzet szerinti kódokat is. De ezek azok tudnia kell. Tehát beszéljünk HTML. HTML, ne feledje, nem a programozási nyelv. Ez egy jelölőnyelv. Ez azt jelenti, hogy le tartalmat. Azt mondja, hogy mi az a HTML dokumentum néz tetszik, akár nem az, aminek látszik de hogyan is épül fel. Tehát ez határozza meg a szerkezet és szemantika weboldalakat. Ez olyan, mint, ez a bekezdés. Ez egy rendezett lista. Ez olyan, mint egy része az oldalamon. Itt a cím. Teszi ilyesmi. Ez nem formázza bármelyik, mert ez az, amit csinálni CSS. És úgy néz ki, mint egy sor A beágyazott címkéket. Tehát, hogy használja egy példa egy nagyon alapvető HTML oldalt, akkor a DOCTYPE nyilatkozatban ott. Ez DOCTYPE nyilatkozat mondván, mi a HTML5. Akkor a nagy HTML tag. Ez tartalmaz egy fejet és egy testet. Bent a fejét, akkor a cím. Ez az, ami megy a címben a böngésző címsorába. Van egy link tag, amely összeköti egy külső stíluslap. És akkor van egy script, hogy húzza külső JavaScript is. És akkor testünkben valójában mi lesz látható az oldalon. Van egy bekezdést, majd egy image belül az említett bekezdés. Ez a kép a cica. Figyeljük meg, hogy a kép tag bezárja magát. Tehát ahelyett, hogy nyitás kép majd csinál egy / képet, akkor csak ez a kis perjel itt, amely bezárja azt. És a kép tag is ezt a kulcsot érték attribútum úgynevezett alt. Ez az alternatív szöveget történik, ha lebeg rajta. A legtöbb HTML elemek néhány alapvető érték dolog, hogy lehet, hogy ez, a különböző testreszabás. Igen. Közönség: [hallható]. ANGELA LI: Nos, ez egy attribútum a tag. Tehát, ha használta jQuery, akkor do select image.getAttribute. És akkor kereshet hogy az alt attribútum. És kapsz cica. Ha emlékszel formák HTML, input elem lesz attribútumok. És ez az, amit a PHP használ küldeni kéri, amikor egy űrlap elküldésekor. Közönség: Te ezt valami arról, hogy ha használja kittens.jpg vagy valamit, ami a hiányzó dossziék és más fájlokat? ANGELA LI: Igen. Tehát ez az úgynevezett relatív utat, mert én nem adom akkor a teljes elérési utat. Ez olyan, mint ha a C-ben, ha nem fopen néhány fájlt, ha fopen hi.txt, hogy hi.txt várhatóan ugyanazon a könyvtár, ha nem adsz meg egy bonyolult utat. Közönség: Szóval lehet megadni melyik mappában [nem hallható]? ANGELA LI: Igen. És akkor nézz fel, hogyan kell csinálni. De ha azt akartam, hogy kittens.jpg ki A szülő könyvtár, megtenném .. / Kittens.jpg. Igen. Bocsánat. Igen. Ó, ember, elfelejtettem a kérdést. Mi volt a kérdés? Ó, az volt a kérdés van, kittens.jpg várhatóan ugyanabban a könyvtárban? És ebben az esetben, ez az. De akkor is, hogy ez egy bizonyos utat úgy, hogy nem kell, hogy legyen. Jó? CSS. Tehát CSS, mint a HTML, nem egy programozási nyelv. CSS csak egy sor stílus szabályokat. Ez áll a Cascading Style Sheets. És használja együtt HTML stílus oldalakat. Tehát három módja van akkor is azt. Ennek egyik módja, amit tehetünk, hogy a fejben része a HTML, akkor csak nyissa meg a stílus címkét, majd bottal Néhány CSS szabályok ott. Elég az OK gombra. Igen. Közönség: Tudnál tesz azok stílus címkék között, nézzük mondjuk, a test és / body. És akkor lenne stílus csak a test. ANGELA LI: Lehet. Működni fog. De nem szabad, mert a stílus fajta metaadatok kell menni vezetője a dokumentum. Karosszéria tényleg csak olyan , mi folyik valójában a jelennek meg az oldalon. Közönség: Tehát azt stílus- a fejedben, hogy a stílus az egész weboldal, nem igaz? ANGELA LI: Igen. Így üzembe stílus itt, ezek a CSS-szabályok érvényes lesz az egész oldal alapján a választók. Tehát a jobb módja annak, hogy ez inkább , amelyek a stílust tag a fejedben, meg ezt a linket egy külső stílus lemez, ahogy mutattam a előző példában. Mi ez, hogy megpróbálja, és megtalálja a fájlt style.css majd húzza ben, és azt használja, mint a stílusok az oldalon. És a style.css lenne most így néz ki. Ez csak egy rakás CSS. És végül, van egy másik módja lehetnek CSS, amit igazán soha nem szabad csinálni. Ez a hívás inline stílus. És így minden HTML elem is egy style attribútum. És akkor, hogy a stílus attribútum, tudod, hogy ez CSS szabályokat. Tehát ebben az esetben, amit div vagyok meghatározó itt, meg fog egy fekete háttér és a fehér színnel. De ne ezt, mert amit ez van az hozza a stílus belül a HTML. És tudom, hogy mi már beszélünk HTML a struktúra és a CSS a stílus. Ha ezt megteszi, akkor mixek őket. És ez nem túl tiszta. Szóval, ne csináld ezt. Segítségével egy példa CSS, ott, akkor csak válassza ki a test a HTML dokumentumfilm. És mi vagyunk, mint, minden lesz a Comic Sans. Én is nem ajánlom ezt. De meg tudná csinálni ezt. A második szabály itt, hogy megy válassza ki az elemet a oldal azonosítója fő. Tehát bármit HTML elem, mondtam ID = Fő, fogok adni, hogy a 20 pixel margin és igazítsa meg minden, a szöveg, hogy a központ. Az utolsó dolog, kiválasztja a CSS osztályban. Tehát minden elem az oldalon, hogy én adtam egy szakaszt osztály fogok tenni háttér színe világoskék. Aha. Ez minden, amim van. Kérdés? Közönség: Mit jelent a hashtag főétkezések előtt csinálni? ANGELA LI: A kérdés az, mit A hashtag főétkezések előtt do? Ebben az esetben, a hash CSS jelenti Keresés azonosító. Tehát, ha volt egy kis HTML elem, mint a divid = fő, ez a CSS szabályt választja a dolog azonosítója fő. És hasonlóképpen, az időszak elején rész Keresés CSS osztály vagy válassza ki a HTML osztályban. Közönség: Miért van olyan is, mielőtt 6. háttérszín? ANGELA LI: Igen. Tehát a kérdés az, hogy miért van a hash előtt 6? Ez más, mint a hash. Ez azt jelenti, hogy adsz hexadecimális szín. Tehát hex színek, ez csak jelent egy színt. És emlékszel RGB háromágyas, amikor te a törvényszéki Pset? Ez hasonló. Az első két számjegy képviseli , hogy mennyi vörös a színe. A második két képviselnek mennyit zöld. És a harmadik képvisel mennyit kék. És a hash ez megy hogy képviselje a színt. Tehát bármi 0, 0, 0, 0, 0, 0 akár az F, N, N, N, N, N érvényes. Ez valami érvényes, szín is jelenik meg a böngésző. Kérdés? Közönség: Mi a különbség a használó azonosító és osztály? ANGELA LI: A kérdés az, mi a a különbség segítségével az id és a class? Egyszerre csak az egyik eleme az HTML dokumentum, amely egy adott azonosító. Tehát csak egy dolog az oldalamon megengedett, hogy azonosító fő. Így használja ezt a fejlécet. Ez a navigáció. Ez a lábléc. Az osztályok különböző, mert akkor vonatkoznak osztályok annyi HTML elemek amennyit csak akar. Így például, én osztály részt, mert ott valószínűleg több mint egy fejezet az oldalamon. Te csak lehetővé tette számára, hogy annyi elemek az oldalon az azonos osztályban, de csak egy bizonyos azonosító. Közönség: Tehát a pont képviseli az osztály? ANGELA LI: Igen. A dot jelent osztályban. Cool. Ez minden, amim van, srácok. Köszönöm. [Taps] ZAMYLA Chan: Szia, mindenkinek. Én vagyok Zamyla. Megyek is, amely a PHP, MVC és az SQL ma. Sok az anyag, hogy én leszek burkolat lesz nagyjából egyenesen pset7. Rendben van. Tehát mi az a PHP? PHP jelentése PHP Hypertext Preprocessor. Így, önmagában, egy rekurzív neve, ami elég jó. A PHP egy szerver oldali programozási nyelv, és ez biztosítja a backend és a logikai alapjait A honlapunkon. Így Angela beszélt sokat a HTML és a CSS, melyek révén a szerkezet a honlapon. De mi van, ha meg szeretné változtatni, hogy tartalma dinamikusan vagy ha változik alapján a felhasználó vagy a Bizonyos körülmények között? Ez az, ahol a PHP jön be Nos, általában, PHP eltarthat néhány kevésbé vonalak végre ugyanezt A C. Ennek oka, hogy a PHP kezeli a memóriát menedzsment a programozó, szemben nekünk kelljen malloc szabad, ilyesmi. De mivel a PHP egy értelmező nyelv, általában, lehet, hogy végre egy kicsit lassabban, mint a C, ami egy lefordított nyelvet. Mivel haladunk programozási nyelvek, nézzük meg, hogy a szintaxis különböznek. Legyünk nagyon óvatos, hogy ne összezavarodnak ezzel. Tehát PHP szintaxis, akár A beágyazás PHP belsejében egy HTML fájl vagy egy. php fájl is, akkor kell mellékelni a kódot a nyílt PHP és a zárt PHP címkéket, mint a következik, mint a képernyőn. Változók a PHP. Minden egyes változó kezdeni A $ jel után a neve A változó. Most, változók PHP gyengén típusos, ami azt jelenti, hogy nem kell hogy jelezzék, milyen az adattípus az, amikor nyilvánította. Azonban ez nem jelenti azt, hogy nincs típus egyáltalán. Tehát, ha azt, hogy egy változót, és csak meg ez egyenlő 1-re, majd kijelentem egy másik változó, állítsa egyenlő az "1" majd egy másik 1.0, nos, típusától függően az egyenlőség üzemeltetők használom, ha azt akarjuk összehasonlítani minden típusú, akkor akkor egyenlő. De ha azt szeretnénk, hogy győződjön meg arról, hogy a típus megegyezik, a PHP még mindig hogy bár mi nem utalnak milyen típusú az, amikor először a fájlt. Most, PHP, bár mi átkapcsolás a programozási nyelvek C, még mindig megvan a megbízható, ha a feltétel, mint ez. Még mindig van a while ciklusokhoz, csak mint ez, ahová a állapotban, majd a testület a hurok. És akkor mi is a hurok, ami általában úgy néz ki, mint ez. Tehát, ha azt akartam, hogy végighaladni az összes kilenc psets és benyújtja, és hívja a funkció submitPset, akkor meg tudom csinálni van, amit a srácok az összes által végzett ezen a ponton. Gratulálok, mellesleg. A kamera, az emberek azt mondta, köszönöm. Most, ha nem akarja, hogy csak ezt a a hurok, akkor PHP valójában is a dolgokat az úgynevezett foreach hurok. Tehát, ha már egy sor egész számok, 0 a 8., tárolja a tömb psets, akkor én is egy foreach ciklus, ami végighalad minden számot psets. És akkor én is hívni ugyanazt működni nyolcszor, ahogy én tettem korábban. Szóval ez minden hurok szép, mert akkor nem kell, ha nem tudod, pontos hossza a tömb, amit van, akkor ezzel a foreach ciklus vigyázni fog az Ön számára. Így tettem psets tömbként. Nézzük meg, hogy az. Tömbök PHP általában ugyanaz, mint az is, hogy már volt a C-ben, ahol a Ön kijelenti egy tömböt. És itt, én kijelentem, üres tömböt majd felépíteni dinamikusan segítségével indexek az egész. Tehát index 0 fogom tárolni egész nevű 1.. Az index 1 listámon, megyek az érték tárolásához 2.. És a harmadik, hanem az indexet második számot, megyek tárolja a 12-es szám. Nos, ez rendben van, hogy működik, jól működik. De azt mondják, nekem számít mi minden index tart. Számomra index 0 azt jelenti, hogy sok macska van. És az index 1 azt jelenti, hogy sok baglyok van. És a következő alkalommal azt jelenti, hogy sok kutya. Nos, akkor azt adja meg, hogy ahelyett, annak, hogy ne feledje, 0 vonatkozik macskák és 1 baglyok, tudom használni asszociatív tömb, ami azt jelenti, hogy ahelyett, hogy egész számok, mint az én indexek Én valójában használ szálakat. Tehát ez nagyon hasznos. És te alapvetően csak cserélni Az egész a húrok. És ott van egy asszociatív tömb. Igen. Közönség: Van valami oka, hogy miért van aláhúzás a második részben, mert a listának a tömbben. ZAMYLA Chan: A kérdés az volt, van Van egy oka annak, hogy egy aláhúzás között az én és a lista? Nem. Ez csak, hogy én elnevezési a változó. Közönség: Az első vonal, ez egy szó. ZAMYLA Chan: Elnézést. Megcsinálom. Igen. Ezeket meg kell egyeznie változó neve. Jó fogás. OK. Szóval lépni a húr összefűzés. Ha akartam, hogy két húrok, akkor tudok összefűzni őket A dot operátor. Tehát, ha van Milo, mint az első név és a Banana a vezetéknevet, majd összefűző a dot üzemeltető és akkor amivel egy tér között teszi egy string, amely Milo Banán, amit aztán echo, vagy inkább nyomtassa ki. Apropó echo, beszéljünk körülbelül egy pár hasznos - hoppá. Sajnálom. Néhány hasznos PHP funkciókat. Tehát a - technikai nehézségek. Egy pillanat. Én küldtem. PowerPoint problémákat. És vissza a PHP funkciókat. És vissza a PHP funkciókat. Így már a szükséges funkció, ahol a ha át egy fájlba, itt csak egy példa egy fájl Lehet, hogy át be Ezt követően, amely tartalmazza majd a PHP kódot a fájlból, hogy jelzik. És ez fogja értékelni, hogy be Aztán mi is echo, amely egy párhuzamos printf. Kilépés egy párhuzamos megtörni, amely kilép a blokk kódot, amit már be És akkor üres ellenőrzi, hogy egy adott változó, mint a nulla vagy nulla, vagy bármilyen egyenlővé azzal, hogy üres. Igen. Közönség: A szövegösszefűzés dot üzemeltető egy, a PHP, az, hogy a ugyanaz, mint a JavaScript, ahol ez a A dot az összefűzés jelent meg? Így a teljes nevét, akkor lehetett volna dollár alá először + majd + utoljára? ZAMYLA Chan: Igen. Tehát a kérdés az volt, hogy a PHP-ben is használhatja ugyanazt szövegösszefűzés mint a JavaScript és a pluses. József bekerül később. Azt hiszem, van egy slide rajta. Valójában, ez más. Tehát JavaScript, akkor kell használni A plusz konkatenálására szálakat. És a PHP-ben, meg kell használja a pont operátor. Így ők más. OK. Tehát most, hogy hatálya alá tartozó valamennyi ez a PHP, hol van az Nagyon jól jön? Nos, ez jól jön, ha van lehet kombinálni a HTML. Így a PHP megadja nekünk a hatalom, hogy megváltoztathatja egy oldal HTML tartalmat előtt betöltési. Tehát alapján különböző körülmények között, általában az adott felhasználó, hogy ez bejelentkezett tudjuk megjeleníteni különböző információkat. Linda, ugye van egy kérdés? Közönség: Tud összefűzni egy egész szám is? ZAMYLA Chan: Igen, akkor. Tehát a kérdés az volt, ha tudsz összefűzni egész vagy más variable.s Most lépni MVC, ami az a paradigma, amit használt pset7 és sok webes tervezők használni szervezése a kódot a kép a saját honlapján. M jelentése modell. És tulajdonképpen, modell fájlok foglalkozni A kölcsönhatások az adatbázisban. Tekintse meg a fájlokat, azok a esztétika a honlapon. És a vezérlő kezeli felhasználói kéréseket, elemzi adatok, nem más logika. A pset7, ötvöztük a modell és a vezérlő. És mi csak hívta őket vezérlők és őket a nyilvános könyvtár. És a nézet fájlokat, használjuk őket a Sablonok könyvtárban. Tehát ez a rajz is itt jelent hogy ugyanazt a részleg a modell és a vezérlő lila itt a bal és a A kilátás a jobb oldalon. Tehát ez egy sematikus, hogy néhányan közületek Lehet, hogy látta a Munkaidő, vagy diagramokat, hogy mi volt rajz, ahogy voltak kitalálni a Pset. Tehát itt egy adott vezérlő, egy modellt vezérlő, van funkciója , amelyek kapcsolódnak a lekérdezése SQL adatbázis, végrehajtása PHP logika. Lehet, hogy nézne fel az állomány a Yahoo! Finance. Vagy talán, akkor csak nézd a látni, hogy egy felhasználónak nyújtott be a alkotnak már mielőtt meglátogatta az oldalon. És akkor tenné egyfajta ide. Ezután a formában nyújtottak be a felhasználó által, a cselekvés volt megadott űrlap HTML tag azt jelzi, a lap, hogy a visszaadja az adatokat. Tehát az összes ezen információk küldte vissza a vezérlő. Akkor valószínűleg nem egy kicsit logika, és talán végre egy pár több lekérdezést az SQL adatbázis és Aztán végül felér egy szépen csomagolt készlet információ, hogy lenne át a néhány más template hogy a megjelenő információt. Nos, hogy valójában csomag ezt az információt fel? Nos, van egy függvényt nevű Render ez volt a functions.php fájl pset7, ahol át a nevét a fájl nevét egy sablont. És akkor is át a egy asszociatív tömb. És így, hogy az asszociatív tömböt képvisel A különböző információs kívánt átadni be Nos, mi lesz állandó ezek a példák, hogy a kulcsokat, vagy inkább a kulcsokat az asszociatív tömbök, ezek mi lesz várható, hogy az állandó sablon mert tudja, hogy szüksége úgynevezett üzenet vagy a hívott nevét. És akkor a dolgok a jobb oldalon, a tényleges értékek, így ebben az esetben, aki jó fiú, és Milo, azok mennek hogy az értékeket, amelyek a változó hogy a vezérlő megváltozik minden alkalommal vagy alapulhat, és egy bizonyos feltétel fog múlni, hogy be Tehát itt a sablonok, azt látjuk, hogy a HTML speciális karakterek ami csak alapvetően azt jelenti, hogy azt akarjuk, hogy a szakértői húr, amely a felhasználó sem hozta be És szeretnénk helyettesíteni üzenetet is. Így aztán, amikor tényleg megtekintése a fájlt, az adott információ jut be Ne feledje, hogy a legfontosabb, hogy hogyan teszi művek hogy a kulcsokat az asszociatív tömbök, azok válnak a változó nevek. És így az értékeket, hogy a legfontosabb a asszociatív tömb válik a a változó értékét. Most pedig térjünk rá az SQL. Ez áll a strukturált Lekérdező nyelv. És ez csak egy programozási kifejlesztett nyelv kezelésére adatbázisok. És ez jól jött számunkra a pset7 Pénzügyminisztérium honlapján. Lényegében, ez csak egy egyszerű módja annak, nyomon követésére és kezelésére tárgyak és táblák és összekapcsolják őket egymáshoz. Most, gondolom, az SQL adatbázis gyakorlatilag az Excel fájlt, talán több füles lap. Szóval lehet több tábla, talán, hogy kapcsolódik egymáshoz. És ugyanúgy, mint az Excel, akkor van egy csomó A funkció, amit akarunk. Például kiválaszthatjuk Bizonyos sorok. Tudjuk be információkat. Mi lehet frissíteni sorokat. És mi is törölheti a dolgokat. SQL SELECT működik kiválasztásával sorok vagy egy sor adott oszlop egy adatbázis, amelyek megfelelnek bizonyos kritériumokat, hogy jelzik. Tehát itt, amikor látom select * from varázslók ahol house = Hollóhát, akkor Én kiválasztása *, ami azt jelenti, én vagyok kiválasztása minden egyes oszlop, amely sorban a varázslók táblázat, de csak akkor, ha A ház oszlop egyenlő Hollóhát. Nos, ez tiszta vagy SQL. Tehát, ha bementem phpmyadmin, ami specifikus módon, hogy kezelheti az SQL adatbázis, akkor tudtam be hogy a phpMyAdmin weboldalán. És ez végre. De mi valójában akarsz hogy a PHP oldalon. Szóval hogyan lehet csinálni? Nos, használjuk a lekérdezés funkciót, amely alapvetően hajtja végre, hogy az SQL lekérdezést. A? mint helyőrző, akkor át bizonyos értékeket a string, hogy szeretné cserélni. Így talán én tárolására különböző értékeket a curr_house, amely képviseli a jelenlegi házat hogy megyek keresztül. Szóval lehet átadni, hogy a helyőrző A kérdőjel. És akkor én alapvetően végre a ugyanaz, mint tettem korábban, kivéve Most vagyok PHP-ben. És a lekérdezés visszatér egy asszociatív tömb. És én fogom tárolni a sorok. Most lekérdezés mindig sikerül. Lehet, hogy az SQL lekérdezés nem hajtható végre azért, mert a tábla nem létezik. Vagy talán, az oszlop nem létezik. Valami nem stimmel. Nos, ebben az esetben, akkor szeretnénk, hogy róla, hogy ellenőrizze, hogy a query vissza hamis. És ez az a hármas egyenlő működés ott. És elnézést kérek, amely egy másik CS50 funkció, átadva az üzenetet. És ha megnézzük a bocsánatot, mind az tényleg nem teszi apology.php. Igen. Közönség: Meg tudná magyarázni, hogy ez mit csillag nem között, válassza ki és a? ZAMYLA Chan: Igen, abszolút. Így a csillag között, válassza ki és a azt jelenti, hogy szeretné választani az egész teljes sort a táblázatban. Tudtam volna tüntetni válassza címe, év, ház. És én csak kap a három oszlopot a táblázatban. De ha azt mondom select *, akkor én hogy mindent az oszlop. Aztán megyek neked a hátsó először. Közönség: Tehát ez még mindig SQL, igaz? Ez a lekérdezés, vagy ez a PHP? ZAMYLA Chan: Mi vagyunk a lekérdezés. Tehát ez a PHP-ben. Tehát a PHP függvény lekérdezés, mi végrehajtása SQL lekérdezést. Közönség: Valami SQL kis-és nagybetűket, mint a válassza vagy varázslók vagy ház? ZAMYLA Chan: Valami SQL kis-és nagybetűket? Azt hiszem, igen. Hiszem, hogy a SELECT és a FROM és hol vannak kis-és nagybetűket. Nem? ROB BOWDEN: Szóval, ez az ellenkezője. Az oszlop nevét és az asztal eszközök, az összes ilyen kis-és nagybetűket. De minden a MySQL kulcsszavak, mint a SELECT, FROM és WHERE, azok nem kis-és nagybetűket. OK. Így az ellenkezője annak, amit mondtam. Tehát minden a MySQL kulcsszavak - válassza ki a,, hová - ezek nem kis-és nagybetűket. De minden mást is. OK. Ön az első. Közönség: Ha már $ sorok tekintetében több, mint egy sor, ez azt jelenti, az csak lesz egy asszociatív tömb? ZAMYLA Chan: Tehát a kérdés az volt, ha a sorok több mint egy sort benne, nem válik egy asszociatív tömb? Tehát ez egy tömb asszociatív tömbök már. Tehát, még ha csak egy sort vissza, akkor azt kell menni index 0 az eredmény. És azt is, hogy az első sorban. Igen, Belinda? Közönség: Amikor ===, ez az egyetlen eset? Vagy vannak mások? ZAMYLA Chan: Tehát ebben az esetben, === egy összehasonlítás az egész típusok. Bocsánat. === Egy összehasonlítás amely összehasonlítja a típusok. És akkor == hasonlítja össze minden típusú. Közönség: Meg tudod magyarázni, mit sorok ebben a helyzetben? Van-e sor az adatok? ZAMYLA Chan: A következő dia vagyok fogja elmagyarázni, hogy mit sorok. Szóval, ha nem bánod holding ki rajta. És akkor a hátsó? Közönség: A funkciók, mint a lekérdezés, teszi, és bocsánatot [hallható]? ZAMYLA Chan: A kérdés az volt, hogy ezeket a funkciókat - lekérdezés, elnézést, és teszi - gyakoriak az egész PHP. Ezek azok, amelyek CS50 írt pset7. És Jay? Közönség: Mikor kell mondani $ _SESSION, Hogy csak az azonosítók? Vagy tudnád azt mondta, hogy itt van? ZAMYLA Chan: Tehát a kérdés az volt, amikor a akkor a $ _SESSION, hogy egy adott globális változó, hogy mi használ. Itt ez a változó lesz lokálisan a mi funkciót. Szóval deklarálásával egy új változó. Közönség: Hogyan bocsánatot kérni végrehajtani? ZAMYLA Chan: A kérdés az volt, hogyan elnézést végre? És azt hiszem, ez valójában egy nagyon jó gyakorlat a srácok, hogy bemegy A functions.php részt, és nézd meg bocsánatot kérni, és nézze meg, hogyan lehetett volna megcsinálta magát. Szóval lehet, meghagyom neked, de csak azt mondják, hogy ha megnézi bocsánatot, akkor azt az üzenetet, hogy nyújtott be, hogy bocsánatot kérjen, és akkor teszi, hogy az üzenetet. Van még kérdés? Szeretem a kérdésekre. Tehát folyamatosan, hogy jönnek. Közönség: [Nem hallható] echo vagy a print ott? ZAMYLA Chan: A kérdés az volt, tudnánk nem csak a már fel echo vagy print ott. Szóval ez volna valamit kicsit más. Ez lett a nyomtatott query nem abba - Nos, most vagyunk valójában a mi vezérlő. Tehát valójában nem HTML létre itt. Kérj bocsánatot téve apologize.php valóban átirányítja Önt apology.php. OK. Tehát most, menjünk be, hogy foglalkozzon a kérdés, a korábbi, hogy mi valóban sor. Nos, lekérdezés visszaadja egy sor sor. És minden sorban képviselteti magát egy asszociatív tömb. Tehát, ha már végre egy kis SQL lekérdezést és Már tárolja az eredményt sorok, akkor egy foreach ciklus, akkor a tömb neve az első is - sor. És akkor fogom hívni Minden sorban ott $ row. Tehát az iterációt, azt aztán hozzáférhet az adott sorban nevét oszlop, év oszlop, és a ház oszlop. Ne feledje, hogy én nem lett volna képes ezt a sort, mert a sorok index név nem létezik. Sorok csak egy tömb asszociatív tömbök. Szóval van két szinten van. Miután a tömb sorok, van, hogy bele. És akkor érheti el az oszlopok. Vajon, hogy világossá teszik? Igen, előtte? Közönség: [Nem hallható] nyit Konzolok [hallható]? ZAMYLA Chan: Bocsánat? Közönség: A nyitott zárójelben. ZAMYLA Chan: Ezek itt? Ez lehetővé teszi számomra, hogy tartalmazza a változó. Igen. Közönség: nyomtatásakor, vagy nyomtatás a HTML-kódot? ZAMYLA Chan: Igen. Amikor nyomtatni, ez itt van benne a sablon most, hogy véleményem szerint MVC módszer. Szóval a nyomtatást a HTML. Közönség: Tehát, ha bementünk fejlesztő eszközök futtatása után, tudtuk hogy valóban a kódot? ZAMYLA Chan: Ez egy nagyszerű kérdés, igen. Tehát, ha bement a fejlesztői eszközök A Firefox a Firebug vagy Chrome, akkor igen, akkor lásd az adott HTML. Így nem mutat $ row ["Name"]. Ez mutatja, amelyik név, hogy sorban. Közönség: Csak egy általános kérdés, mi a tr és td meghatározása? Miért mi [nem hallható]? ZAMYLA Chan: Table row TR, táblázatot, majd td oszlopban. OK. Közönség: Igen, ez a táblázat adatait. ZAMYLA Chan: táblázat adatait. Igen. Közönség: Ez egy sort, amelyben a sor kezelni, mint egy oszlop? ZAMYLA Chan: Elnézést. Meg tudod ismételni? Közönség: Hogy ugye elképzelni sorok? ZAMYLA Chan: Hogyan megjeleníteni sorok milyen módon? Beszélsz ezekről a sorok itt, vagy a tr sorok? Közönség: A sorok. ZAMYLA Chan: Ezek a sorok itt? Én elképzelni ezt Én végre a lekérdezést. És azt mondja, OK, van vagy 0-n mennyiségű sorok, amelyek megfelelnek a feltételeknek hogy már lekérdezésre. Szóval van néhány a sorok számát. Így sor, a $ sorok, tárol minden egyes az egyik ilyen sorok egy tömbben. Tehát akkor is, ha ez csak az egyiket, ez még egy sor sorok egyezik meg. Tehát, például, ez hasonló, ha lehívásra A cache a felhasználóktól. És a kritériumokat ott volt, ahol ID megegyezik a session ID. Ott tényleg csak egy sor ami egyezik. De még mindig sorok most tért vissza egy sort. Tehát azt kell, hogy menjen a sorok, index 0, index gyorsítótár valóban kap a cache. Közönség: A nyomtatási funkció echo ugyanaz a dolog? ZAMYLA Chan: Igen. Igen. Print visszhangja ugyanaz. Közönség: A foreach hurok a egyetlen módja annak, index sorokba? ZAMYLA Chan: Van egy foreach ciklus Az egyetlen módja, hogy tudod halad végig a sorok? Nem. Ön is használja a for ciklus, feltéve, hogy hogy tudja a hosszát A sor a tömb. Közönség: Tudnál hozzáférni egy sorban, mint [nem hallható]? ZAMYLA Chan: Tehát nem lehet hozzáférni csak a sort, ha nincs foreach hurok feltéve, hogy még nincs bejelentve sor. Igen. Igen, a fehér. Közönség: Mit tr és td csinálni? ZAMYLA Chan: Tehát tr és td HTML címkéket. tr kezdetét jelzi egy tábla sor. És minden egyes td jelez új táblázat adatai oszlopban. Közönség: A vizuális, amit egy sor olyan, mint, csak elképzelni a SQL, hogyan van egy sorban. [Hallható]. ZAMYLA Chan: Igen. Ez egy jó pont. Lehet elképzelni sorokat, mint csak mint egy Excel táblázatban, csak a listát a sorok. OK. Rendben van. Most, hogy már átállt válassza, ha a nincs több kérdés, fogunk menjen át rá betéttel. Tehát, ha azt akartam szúrni néhány asztal és helyezze bizonyos oszlop értékek, tudtam be magam a Hollóhát a 7. évben. Néha azonban előfordulhat, hogy ismétlődő értékek, mint láttuk, pset7 amikor voltak frissítjük portfólió. Tehát ebben az esetben szeretnénk használni Ismétlődő kulcs UPDATE, hogy mi nem tárolni több sor azonos érték, hanem inkább frissíteni. Akkor valójában frissítést, amely nem egy betét. Ez csak egy frissítést, ahol frissítése egy bizonyos asztal egy adott feltételeket, majd végül, törlés, amely nem egy nagyon hasonló dolog. Közönség: Tudna röviden megy át a duplikált kulcs? ZAMYLA Chan: Igen. Lényegében itt van INSERT INTO Gringotts, az, galleont, ezeket az értékeket. De azonosító, feltehetően, egy egyedi kulcs értéket létre MySQL tábla. Tehát, ha már van, hogy az ID létre, akkor nem tudom be egy új sort. Tehát, ha nem létezik már, akkor azt kell frissíteni. A középső, a fehér. KÖZÖNSÉG Szóval be, frissítésére, törlésére, és válassza ki, azok a rendelkezésre álló helyileg [hallható]? ZAMYLA Chan: Tehát be, frissítést, törlése és jelölje mind SQL lekérdezés. Tehát, ha a 'használ SQL, akkor van a rendelkezésre álló. Közönség: vissza a múltba vetélkedők - volt a kérdés, hogy foglalkozott ha volt egy tábla, és azt akarta, hogy be vizsgálati eredmények az egyik, és helyezze a neved, így nem engedi, hogy [Hallhatatlan] a barátod vizsgálati pontszám. Hogy csináltad a betét? ZAMYLA Chan: Tehát a kérdés az volt, korábbi középtávú kérdés. Nem vagyok tisztában vele, mely az egyik, hogy most. Így talán később, ha azt szeretnénk, hogy jön, és mutasd meg, akkor én is biztosan ad tippeket. Hanem behelyezése dolgok, mint a vesz valaki a pontszámot, ha Nem, beszéljünk SQL injekciós támadás. Tehát egy SQL injekciós támadás lényegében ahol valaki veszi előnye az alacsony biztonsági az módon, hogy szed az adatok. Tehát itt, csakúgy, mint a CS50 pénzügy, ha bejelentkezett, tudjuk be a felhasználónév a bejelentkezési űrlap, Az első szövegmezőbe, és majd adja meg a jelszót. Lehet, hogy a PHP kódot nézhet valami, mint ez, ahol a $ username a poszt-data felhasználónév és jelszó a poszt-adatok jelszót. És akkor már csak végre a lekérdezést, mondjuk, Oké, a lekérdezés fog válassza a mi felhasználók, ahol a A felhasználónév a az egyik, hogy benyújtották. És a jelszó a jelszó, azt jelenti, hogy a jelszavak egyeznek. Nos, mi lenne, ha ahelyett, hogy valóban benyújtása tényleges jelszót, mint a 12345 és a találgatás a villa, amely azt mondja jelszót, és megpróbálta feltörni a számla, mi lenne, ha ehelyett benyújtották ezt. Tudták írja be talán találgatás egy jelszót. És akkor is befejezi a quote majd írja be vagy 1 = 1. Ez lenne lépést közvetlenül a SQL kérdezni, hogy valahogy így néz ki. Válasszon a felhasználók számára, ahol a felhasználónév = Ágakkal és jelszó egyenlő liliom vagy 1 = 1. Szóval vagy a jelszót helyesnek vagy 1 = 1, ami mindig igaz. Tehát ebben az esetben, alapvetően a felhasználó tudja kihasználni ezt, és csak be magukat, és csapkod valaki számlájára. Szóval ezért akarjuk, hogy ne valaki, hogy erre. De szerencsére, a lekérdezés funkciót halad a helyőrző lesz gondoskodik e az Ön számára. Is, akkor általában soha nem akar hogy ténylegesen be a jelszót magukat. Ezért kivonatolt vagy titkosított őket CS50 finanszírozáshoz. Közönség: A múlt kvíz beszélt a MySQL escape szálakat. Vajon nem kell aggódnia, hogy? ZAMYLA Chan: Ez egy jó kérdés. A MySQL escape húrok határozottan használt funkció a mi lekérdezésben. De mindenképpen nézzen bele. Azt mondanám, hogy ez tisztességes játék tudni , hogy meg kéne hívni, hogy funkció egy húr. Igen, Belinda? Közönség: Honnan tudod, ha ez egy vagy dupla idézőjel? És azt is, úgy érzem, az előadás meg említett valamit arról, hogy nem A [hallható], vagy valami, vagy a második idézőjel a végén. Azt hiszem, rámutatott, hogy az előadás kéne, hogy aposztróf 1 és akkor nem kell aposztrófok vagy valami. Közönség: [hallható]. Közönség: A lényeg az utolsó egy idézet ott a második dobozban nem kellene itt lennie. [Nem hallható] Mert ha megteszi, hogy az utolsó egy idézni, és megfelelnek ezeknek a tartalom ahol a jelszó, ha van, hogy lekérdezés, van egy idézet a A végén már. Azt akarod, hogy használni, hogy egyetlen idézet mint az, hogy néz az egyik [Hallható]. Tehát mi valójában az, hogy a szöveg box nem kellett volna ezt. ZAMYLA Chan: fogom változtatni. OK. Ha nincs olyan kérdés, akkor én át át a Joseph beszélni a JavaScript, et cetera. [Taps] JOSEPH ONG: Tehát mi fut egy kicsit hátra. Tehát, ha el kell hagynia, ez rendben van. De arra kérünk, hogy tartsa meg fejjel lefelé ha a közepén, így ne takarja el a kamerát, és használja a hátsó kijárat, ha kell. Én vagyok József az úton. Szia. Test, teszt. Dan az, hogy jó? Cool. Így a videó is felkerül online amelyek kell mennem. Kínos. OK. Tehát kvíz felülvizsgálata. Ez egy macska. Nos, JavaScript, ami talán nem mint aww néhány srácok. OK. Szóval ez az első, visszahívja a Zamyla. Ne feledje, hogy a PHP futtatni a szerveren. És sokszor, srácok írta hurkok PHP kinyomtatni HTML, igaz? Tehát, ha a kódot hajtja végre, hogy a HTML kimenetet, hogy nyomtassa ki lesz küldeni a felhasználónak. És ha ez megtörténik, nincs több PHP futni, hacsak nem újratölti az oldalt, a Természetesen, ami reexecutes a PHP. De ha egyszer nyomtassa ki, hogy a HTML, nem mehetsz sehova. Annak érdekében, hogy a HTML átküldi a felhasználó, amely a böngésző itt, ahol a Milo használja a számítógépet. És olyan jól, van néhány dolog, egyszer küldjük HTML a felhasználónak. Néha szeretnénk tenni valamit, mint ha rákattint valamit, azt szeretnénk, figyelmeztető dobozokat, hogy felbukkan, ezek féle kölcsönhatások, mint amikor megnyomja a kulcsfontosságú, ha rákattint valamit a oldal, azt akarom, hogy történjen valami. Nos, nem lehet újra elvégeztetheti PHP kód egyszer, hogy a HTML-be van állítva. Szóval, hogyan csinálod ezt? Bemutatjuk az új nyelv nevű JavaScript, azaz a böngészőben , amely lehetővé teszi, hogy a dolgok HTML miután megkapta a szerverről is. És ez az, amiért ez egy kliens-oldali programozási nyelv. Úgy működik a számítógépen - az ügyfél. Minden olyan kérdést, amely eddig? Ez a paradigma van értelme az emberek? OK. Jó. Rendben van. Tehát az első dolog megjegyezni A JavaScript nem PHP. Van néhány különböző szintaxis, amely megyünk bele. És nagyon különböző célokra. JavaScript, ismét a a böngésző, az ügyfél számára. Server fut valahol valaki másnak a számítógép, amely információt küld neked, igaz? Tehát, ha azt kérjük, hogy írjon a PHP kódot egy vizsga kérdés, nem írok JavaScript és fordítva. Akkor csak veszít pontokat, és ez nem lehet igaz. Akkor menjünk be egy kis szintaxis különbségek - JavaScript a bal oldalon és a PHP a jobb oldalon. Az első dolog, észre fogod venni a JavaScript, kijelentjük változók A var kulcsszó - V-A-R. PHP használta a dollár jelet, mint Zamyla korábban tárgyalt. Ha azt szeretné, hogy állapítsa meg egy asszociatív tömb, látjuk az ismerős szintaxist A jobb oldalon a PHP. A bal oldalon, ehelyett használja kapcsos zárójelek. És akkor a gombok a bal oldalon. Akkor a vastagbélben. És akkor az értékeket , amit akar. Szóval, ez hogyan fog csinálni a PHP a jobb oldalán, hogy a második sort, amely kezdődik Milo. És ez hogyan fog csinálni a bal oldali JavaScript, ha akarsz mit nevezünk egy tárgyat. És tárgyak JavaScript vannak csak asszociatív tömbök. Tehát, ha az elérni kívánt területeken, PHP használja ezt a zárójeles formával. És így, lehet hozzárendelni ez a tulajdonos mező Lauren. Nos, a JavaScript, ha szeretné, hogy hozzá egy mezőt, és változtassa meg, akkor használja a dot szintaxist. Ön is használja a zárójeles formával. De nem tudja használni a dot szintaxis a PHP. Ez nem fog működni. Csak akkor működik a PHP. És végül, hogy nyomtassa ki a dolgokat, hogy a konzolt, akkor használja console.log, amely srácok használ sokat pset8. Lehet console.log ezt. Ha szeretne nyomtatni egy tömböt PHP, meg kell használni a nyomtatási r. És a jobb oldalon, látod, hogy hash- karakterlánc összefűzés ott. Valaki kérdezte korábban. ÉN használ egy plusz JavaScript. Ha azt akarom, hogy összefűzni valamit PHP-ben, azt használja a pontot. Ezek különböző. Ha írsz PHP kódot, ne használja a plusz. Ha írsz JavaScript kód, nem írok egy pont. Ez lesz baj. És te leszel szomorú. Tehát szintaxis különbségeket. Ismerje meg a szintaxis, mert ha kell levelet kérdést, és használja szintaxis a megfelelő nyelvet, nem fog működni. És ez lesz a baj. Szóval beszéljünk néhány vezérlés flow különbségek, hogyan használja hurkok mindegyik. Zamyla ment át a jobb oldalon. Stuff a jobb oldalon meg kell ismernie. Nézzük meg a bal oldalon. Amikor n hurok JavaScript, a loop változó var i ott, hurkot a kulcsokat a tömb. Tehát a nevéhez, ház, és a szerepet. Ha console.log én kapok név, ház, és a szerepet. Ezek a gombok. A JavaScript egy foreach ciklus megy feletti értékeit ezen tömbben. Szóval, azt veszi észre, ők mindketten i. De itt a PHP oldalon, nyomtat ki Milo, CS50, és kabalája. Ezek az értékek a PHP. Tehát ezek hogy ez a két különböző a különböző nyelveken. Tehát, ha egy foreach loop, nem feltételezzük, hogy a adja a kulcsokat. És ha egy n hurok, nem Feltételezem, hogy megadja az értékeket. Van ennek értelme eddig? A következő dia fog mutatni hogyan lehet elérni az ellenkezőjét mindegyik. Nos, ha a kulcsot JavaScript , és azt szeretné, hogy ár-érték el, csak index a tömb azzal. Tehát Milo i fogja kapni, amit szeretné - az értékeket. Van ez a különböző szintaxis a PHP. Ha szeretné tudni, én nem hiszem, megmutattam, hogy még. De ha érdekel, akkor a E kiegészítő szintaxis a jobb oldalon oldalon, hogy valóban kapja a kulcsok PHP, amikor egy foreach hurok. Tehát csak egy kis apróság ha érdekel. Szóval ez csak bizonyítani a különbségek a két hurok. Ne keverje össze őket, ha éppen programozási kérdés. Minden olyan kérdést, hogy. Cool. Rendben van. JavaScript objektumok. Beszéltem velük. Olyanok, mint az asszociatív tömböket. Az egyetlen dolog, amit szeretnék, ha figyelembe itt az, hogy egy értéket egy asszociatív tömb bármi lehet a JavaScript. Ez lehet akár egy funkciót, mint ott. Nekem van olyan funkció, amely olyan érték, a kulcs. És ha azt akarom hívni ezt a funkciót, Én csak elérni kéreg. És akkor tettem zárójelek után. És ez működik. Tehát kérdése? Nem? OK. Jó. JavaScript, mint a PHP, lazán gépelt. Mit jelent ez? Ez nem is típus. De amikor kijelentik a JavaScript változó, azt mondod var i. Azt nem mondom meg. Ez nem egy dolog. Csak azt mondják, hogy ez egy változó. És akkor JavaScript fogja kezelni a típusai a motorháztető alatt az Ön számára. Mi szabadon konvertálni között mert ez a fajta. Tehát én indul, mint egy szám ebben az esetben. És akkor van egy húr. És hozzáteszem én is. És átminősítése vissza a i. Tehát az, hogy az első sorban, i a szám. A második sorban, most válik szöveg után én a átrendelése. És itt, én csak összefűző ez a szám rá a húr. Tehát láthatjuk, hogy bár én volt egész az első részben, hogy ez a fajta , mint alakítják a karakterlánc majd bővül rá, hogy helló húr. És ez az, amit gondolok A laza gépelés. Ez az, amit konvertálni között típus nagyon könnyen. És ez nem dobja figyelmeztetések rád, mint a C-nek. Úgyhogy most tartalmaz helló 123 a húr. Tovább. Azt is szabad összehasonlítani típusai között. Tehát, ha csak használja ==, nagyon , mint a PHP, JavaScript nem egy hasonló dolog. A karakterlánc 123 ugyanaz, mint a szám 123 ha használja a kettős egyenlők. Amikor a használt hármas egyenlők, hanem biztos akar lenni abban, hogy a típus ugyanaz. Tehát, mert ez egy string, és ez egy számot, annak ellenére, hogy ők is 123, ha használja hármas egyenlő, kapsz hamis. A két egyenlő helyzet, akkor kap igazi, mert a dupla egyenlőségjel nem érdekel típusát. Triple egyenlő törődik típusát. Kérdése van? OK. És még egy dolog JavaScript köre egyfajta globális hacsak nem a funkciót. És ez ugyanúgy működik, módon PHP valójában. Szóval menjünk át ezt a példát. Én meg azt, hogy 999. És akkor megyek ebbe a hurok. Tehát, ha én vagyok a nyomtatás én ebben a loop, elvárom, 0, 1, 2, 3, 4. Értem, hogy i = 4. Ez növeli Most az 5-ös a végén a for ciklus. Aztán kitör a hurok, mert nem felel meg a kondicionálja többé. Mit gondolsz, hogy a következő console.log kiírja? Szóval, ez az, amit tenne C C, mert ha tetszik var i kívül és van var i belül a hurok, mint egy a hurok, akkor ez teszi, hogy ez távcsöves, hogy a két i az eltérő. A JavaScript, akkor csak kezelik, mint az azonos i. Kapok 5, mert ez volt az érték azután, hogy kilépett ki a hurok. Tehát azok az i-ugyanaz i. Van ennek értelme? Nos, van értelme A JavaScript szempontból. De ugyanez a paradigma nem átvitt C. Van eltérő hatókör szabályokat. Igen. Közönség: [Nem hallható] kívül funkció [nem hallható]? JOSEPH ONG: Tehát, amelyen kívül a funkciót? Így lesz az, hogy csak a második. Így hívjuk ize (i). Ez megy i a foo, lépésekben , majd naplózza azt. Így 5. Így válik 6. De amit én beszélek hogy én ezzel a feladattal. Mert ez a paraméter, akkor távcsöves hogy ezt a funkciót. Szóval, ha egyszer tényleg kijutni, hogy a funkció, ez most fog menni vissza a régi i. Hogy én csak távcsöves miatt ez a funkció. És van hatályának és feladatainak. De nincs körét kívül A funkciók JavaScript. Van ennek értelme? Igen. Kérdés. Közönség: Ugyanaz a [Nem hallható]? JOSEPH ONG: Szóval igen. A PHP-ben, ez az azonos típusú dolog. Van egy kis finomság valójában. De kérdezz hogy a felülvizsgálat után. Nem igazán kell tudni hogy a finomság a kvíz. Minden cél és szándék, mint a változók, a globális és a PHP, hacsak ők a funkció ugyanaz dolog a JavaScript. Igen. Közönség: Miért van ez megengedett JavaScript és nincs hol máshol? JOSEPH ONG: Miért van az, megengedett A JavaScript nem C? Ez csak aki jött fel JavaScript úgy döntött, hogy ez OK JavaScript. Tehát ez olyan, mint egy programozási nyelv egyezmény ahogy mondaná. Igen. Közönség: Akkor miért nem ez megy 6-5? JOSEPH ONG: És ez így ment 6-5, mert amikor mentem én a foo, hogy i belseje ize most távcsöves az ize, mert köre létezik funkciók JavaScript. De ha egyszer kijutok innen, mert volt távcsöves a funkcióhoz, én csak segítségével a rendszeres én volt benne a többi kontroll áramlását. Értelme? Tudok lépni? Rendben van. Cool. Az elfogadási erre tárgy átadása hivatkozás. Tudod, hogy mikor adja át tömb a C, amit lehetett valóban módosítani a tömb? Ez ugyanaz a JavaScript. Ha át egy objektumot, ebben az esetben, azt telt Milo ebbe catify funkciót. Milo indul ki. A neve Milo Banana. Elmegyek, hogy az objektum egy függvény mert ez egy tárgy, egy asszociatív tömb JavaScript. Amikor végre egy műveletet ezzel a feladattal, hogy lesz ténylegesen változtatni az objektumot. Tehát ez csak akkor történhet tárgyak JavaScript, ahogy ez történik A tömbök belsejében C. Tehát Milo neve valóban lesz macska most. Van ennek értelme? Tehát ez csak akkor működik, tárgyakat. Az objektumok által elfogadott referencia. Igen. Közönség: Tehát azt mondod, hogy a ellentétben a i változó. JOSEPH ONG: Igen. Ami i változó csak Számos, nem igaz? Ez olyan, mint C-ben, amikor át egy integer egy, lemásolja. És amikor át egy tömb, valójában megváltoztatja az aktuális tömb C. Ugyanez történik JavaScript ebben az esetben. Rendben van. És a következő, Milo szomorú, mert ő most már egy macska. Ez volt tulajdonképpen Milo után néhány utat az állatorvoshoz. Szóval hogyan használjuk JavaScript egy weboldal? Tudjuk belevenni. Ez a HTML kódot a szalag címkéket. Szóval szalag címkéket is. Aztán egy kis JavaScript kódot a script tag. És akkor végrehajtja ezt. Amikor én csak csinálni, mint ez, ez úgynevezett inline JavaScript. Elég rendetlen, mert a JavaScript valójában a HTML. Egy jobb módja ennek, sokkal szebb, az, hogy írjuk meg a JavaScript egy külső fájlt, és ezt követően A script tag egy forrás. És ez megy, hogy a JavaScript fájl és olvassa el a JavaScript kódot hogy a fájl helyett. És így, akkor nem sok JavaScript elején a HTML fájl, ami tényleg rendetlen. Csak tedd máshol. És akkor olvasd el onnan. Tudta, hogy van értelme? Elhelyezés számít. Ebben a konkrét esetben a szkript, mielőtt a test. Tehát, amikor végre, hogy van sem a szervezetben, mégis. Lehet, hogy ez egy kicsit értelme, ha megmutatom ezt a következő részben. Ebben az esetben, a forgatókönyvet után jön a div. Így a div valóban megjelenik az oldalon először. Itt ebben a kis piros kör, látod a szöveg jelenik meg. És akkor a riasztás megjelenik. Az első esetben, mivel a forgatókönyvet volt, mielőtt a div, a figyelmeztetés jelenik meg először. És akkor a div felbukkan után akkor utasítsa el a dobozt. Tehát a végrehajtás számít. Tehát mi ezt tartsd szem előtt. Ez fontos lesz egy kicsit. OK. Tehát jól, mit várjon, amíg a teljes oldal betöltődik, akkor mielőtt végre egy kódot? Majd kap ez egy kicsit kicsit később is. De ne ezt az elhelyezést kérdéseket szem előtt tartva, amikor jön egy másik diára. Így eljutunk DOM most. És mi a DOM? Tehát, ha megnézi a HTML-kódot, ez csak egy csomó szöveget a képernyőn. Tehát hogyan JavaScript tudja ez egy HTML elem? Tehát kell, hogy legyen egy kis memória ennek ábrázolása szerkezet, hogy van. És ha itt van ez a memóriában képviselet JavaScript, hívjuk hogy a DOM. És ez csak egy módja annak, hogy az ember úgy döntött, hogy kell képviselnie ezt HTML struktúra. És mit jelent ez a DOM néz ki? Nos, a memóriában képviselet, vesszük ezt a szöveget. És mi kapcsolja be a memóriába képviselet. Tehát ez a HTML. Tehát először megtudja, hogy minden DOM fa egy dokumentumot. Úgy néz ki, mint egy fa. És a dokumentum tartalmazza a HTML tag, tulajdonképpen mindent belsejében ezt most. A HTML tag két gyermeke van. Ez egy feje. Ez a fej, ha megnézi behúzás ott a hogyan is épül fel között szoros címkéket, fej egy gyerek. A gyermek címmel. Pontosan. Most, hogy van egy test gyermek. És akkor ez a testület rendelkezik gyermek nevű család. És, hogy a család három gyermeke van - legrégebbi, középső és legfiatalabb. Tehát meg kell tudni, hogyan kell felhívni a diagram mint ez, amikor azt kérdezzük, hogyan felhívni a diagram, amikor adunk Ön a HTML a bal oldalon. Tudja, hogyan kell előállítani a DOM fa. És belül ezeket a dolgokat, de csak szöveget, amit már képviselt mindössze dobozok. Vajon ez a DOM fa struktúra, hogy értelme, és mi a DOM? Mit is jelent a p állni? Ide, a p ott , hogy tag képvisel paragrafus a HTML. Így néz fel. De ez csak azt jelenti, hogy valami hely a szöveget. És van néhány alapértelmezett CSS stílus, mert ez a paragrafus. De ne igazán aggódni azt a részét, túl sok. Csak tudom, hogy ez egy helykitöltő néhány szöveget. Igen. Kérdés? Igen. Közönség: Csak említette CSS. A hash család és a hash minden ilyesmi alapvetően képviselő azonosítók a CSS? JOSEPH ONG: Igen, pontosan. Hozok, amit ezek a hash-eket jelent a második. Amikor Angela odament CSS, ő beszélt CSS választók. Ezek a CSS szelektor, hogy ő beszélt. Igen, Rob? ROB BOWDEN: Én is megjegyzést hogy a DOM belsejében title tag is egy szöveges csomópontot. JOSEPH ONG: Így van. Tehát belül a cím, Van néhány szöveget DOM. Szóval tényleg, ezt a címet kellett volna, mint a kis doboz jön ki belőle is. De ez nem igazán számít túl sok ebben az esetben. Nem igazán érdekel a szöveg csomópontok, ahogy mi hívjuk őket, túl sok. OK, mi. Úgy látszik, mi. És azt rögzíti, hogy ha Én töltse fel újra. Van ennek értelme? Szóval hogyan működik a DOM? Amikor foglalkozik a DOM-ban JavaScript, két lépésben. Kiválasztott egy DOM elemet. És akkor olyan dolgokat is. Tehát ebben az esetben, absztrakt, én már kiválasztva a középső elem. És akkor egy példa csinál dolgokat hogy ez változik a szöveg. Ez szokott lenni Bob. Nos, mit tettem, hogy ez volt Megváltoztattam Bob Milo ebben az esetben. Szóval hogyan lehet ténylegesen ezt teszik? Hogy mi a kiválasztó? És hogyan csináljuk a dolgokat csinálnak, hogy az a helyzet, ha már elvitte? Nos, ahogy ti is megtanultam, hogy Ebben az osztályban a segítségével valami, amit nevű jQuery. Szóval mi a jQuery? jQuery egy könyvtár, ami JavaScript könnyebb írni. Tehát valaki kihasználta az időt, és írt jQuery. jQuery valójában írva JavaScript. És azért, mert ezt tette, most Van egy csomó funkciók tudjuk használni, hogy a mi él nagyon egyszerű. Tehát mi van néhány dolog, amit csinál? Ez teszi kiválasztásával elemeket könnyebb. Ez teszi a változó HTML, hozzátéve osztályok könnyebb. Ez teszi Ajax könnyebb. Mi lesz az, hogy a második. És hasonló a C könyvtárakat. Így többek között string.h, kap strlen. Kapsz strcpy, mind ezeket a dolgokat. Amikor is jQuery, kapsz szép módon, hogy kiválassza elemek változhatnak a dolgokat, satöbbi. Kapsz extra funkció, amely JavaScript nem ad. Tehát jQuery nem JavaScript. jQuery egy könyvtár, ami írva JavaScript, ami JavaScript könnyebb írni. Tehát jQuery nem egy programozási nyelvet. De a JavaScript. tenni. Biztos, hogy a terminológia helyes. Bármilyen kérdése? Igen. Ez kérdés? Rendben van. Szóval hogyan használja jQuery? Nos, ha írsz egy kis JavaScript kódot, és tartalmaz egy jQuery tetején a fájlt a script fájlt, akkor használja a dollár jel Most, hogy hozzáférjenek a jQuery. És ez eltér a dollár jel a PHP. Ez ugyanaz a szimbólum írja a billentyűzeten. De nem értem, nagyon különböző dolog. Dollárjel PHP jelent ebben a Én így, hogy egy változót. A JavaScript, ha már benne jQuery, hogy áll a jQuery. Tehát, hogy tartsa szem előtt. Szóval, hogyan lehet, hogy mi válasszuk DOM elemeket? Nos, ha nem ez a csúnya JavaScript Így hozzáférhet a dokumentum globális változót. És akkor kap elemet azonosító család. Ez nagyon hosszú és terjengős és nem túl szép. Vagy lehet kapni az összes elemet hogy egy p tag. Ez a szerkezet túl a JavaScript. De soha nem mutatta Ön a szintaxis túl sok. Mi megmutattuk, volt jQuery. Annak érdekében, hogy a teljes választó ott, hogy fejeztük JavaScript csak lesz sűrített, hogy ez a nagyon szép dollár jel hashtag család. És a $ p, éppen ott, ahol ez olyan, mint ezt. Ha azt szeretné, hogy válassza ki az összes p címke belül a család, hogy egy helyet a kettő között. És most, hogy minden a p címkék belül egy család. És nézd ismerős? Nos, Angela beszélt CSS választók. Adjon meg egy pillanatra. Így annak érdekében, hogy válasszon ki egy elemet, csak használja ugyanazt a dolgot, mint te tenne egy CSS választó. Ha tesz egy hash elé belőle, kiválasztja ID. A dot kiválasztja az osztályok. Ha csak a dolog, anélkül, hogy hash vagy pont, hogy kiválasztja azokat a címkéket. Kérdések. Igen? Közönség: Amikor használja pont a mi HTML, az, hogy nem jQuery? JOSEPH ONG: Dot a HTML egy JavaScript dolog. Ez nem egy jQuery dolog. Ahogy ti megtanulta azt jQuery használata. html. És akkor át azt, amit A HTML lesz. Így lesz az, hogy csak egy második valójában. Szóval hogyan lehet csinálni dolgokat elem ha egyszer már választott meg? Szóval ez egy példa egy elem kiválasztása. Tehát most, szeretnénk csinálni dolgokat hozzá. Tehát ebben az esetben, hadd menjek vissza az előző diára. Ez volt Bob előtt. És szeretném változtatni belső HTML Milo. Így hívom a HTML funkció Az elem. Ez a HTML funkció módszer elem. Aztán, hogy ez milyen Azt akarjuk, hogy a HTML lenni. És ez csak helyettesíti, mi van benne a hogy a tag, bármilyen adok neki. Igen. Kérdés? Közönség: A hashtag használják csak a jQuery. [Nem hallható] mi nem használjuk ezt. JOSEPH ONG: Igen, pontosan. De ne aggódj túl sokat A tiszta JavaScript. Csak azt akarom, hogy a srácok, hogy összpontosítson, hogyan megtenné jQuery, mert a ez lesz a fontos részt a kvíz. Rendben. Pontosan. Tehát láthatjuk, hogy hashtag, hogy a megfelel válassza ki az elemet Az ID közepén, mert az, hogy hashtag. Hashtag jelent ID. És ez az elem van egy azonosítója közepén. Szóval ez az elem választjuk. Közönség: [hallható]. dollárjel hashtag [hallható]? JOSEPH ONG: Tehát nem. A kérdés lehet használni. Értéket. És. Értékét csak akkor működik, elem amelyek bemenet. A jQuery lenne . Val, nem. Értéket. Szóval lesz egy kis példa, hogy mutatja mindezt kombinálva a második. De azt hiszem, ez szolgálja a kis részlet van értelme, hogy az emberek eddig. Akarja változtatni a HTML, hívja a HTML módszerrel. Igen. Közönség: Meg tudod magyarázni A módszer újra? JOSEPH ONG: Tehát a módszer csak egy funkció, amely tartozik egy, ebben az esetében, az egyik ilyen a DOM elemek, mert látod, kiválasztott elem először. Ami azt illeti, hadd használja az egeret. Kiválasztottam az elem első. Aztán felhívtam ezt a HTML működik, hogy volt. És mivel ez a funkció tartozik, ez a dolog, hogy ez egy módszer. Ez csak egy fantázianév is. Mondd még egyszer. Úgy emlékszem, hogy a kiválasztott Az elem most. És most már tedd belsejében az elem változó. Helyes? Tehát, ha meg akarjuk változtatni a HTML-on benne, mert Bob előtt, szeretné változtatni a szöveget, hogy Milo. Ezért hívjuk a HTML. És azt mondani, hogy mi az a HTML kód az elem legyen most. És ez így megváltoztatja a Milo, mert én adtam Milo. Közönség: Tehát ők együtt dolgoznak. [Nem hallható] JOSEPH ONG: Igen, igen. Ők együtt dolgoznak. Tehát az egyik ezek közül kiválasztja az elem az első. És a második nem valami. Igen. Közönség: [hallható]. Ha ez a módszer eltér a HTML-ben akkor a módszer azonos aktuális. JOSEPH ONG: Igen. Ez egy másik módszer. Ez egy másik módszer. És mi lehet fedezni, hogy csak a második amikor eljutunk egy példát. Azt szeretnénk, hogy győződjön meg arról, hogy gyorsítsák fel a mert kifutunk az időből. De már fut ahogy az idő múlásával már. OK. Cool. Tehát, ha azt szeretnénk, hogy adjunk egy osztály, ott van is add osztály módszer. Ez csak egy példa arra, hogy mi meg tudod csinálni a jQuery. Ez csak növeli egy osztály. Ha azt szeretné, hogy távolítsa el azt, hívhatja remove. Ez csak egy dolog, amit tehetünk. Így további példa a dolog, amit tehetünk. Így tudok csak tedd azt A tetején, mint ez? Legfiatalabb remove. Ha csak végre, hogy a JavaScript a A tetején a fájl, akkor, hogy a munka? Rendben. Mivel középen még nem létezik. Tehát ez nem fog működni. Végrehajtási rend. Ez megy a csúcsra először. Mi az? Közönség: A legfiatalabb még nem létezik? JOSEPH ONG: Igen. A legfiatalabb még nem létezik. Pontosan. Közönség: Azt mondtad, közepén. JOSEPH ONG: Elnézést. A legfiatalabb még nem létezik. A másik dolog, hogy én még nem tartalmazza a jQuery fájl kérdezze script src. Szóval ez nem fog működni. Ami azt illeti, nem tettem, hogy A következő dia, ami kellene rögzíteni, hogy vagy. De ahogy ezt tesszük a JavaScript eseményvezérelt. Tehát mi teszünk, így egy esemény Handler, hogy ez megvalósuljon. És így ki a dokumentumot beállítani. Azt mondom, OK, ha a dokumentum kész, engedik a funkciót. Szóval ez minden, szintaxis eszközzel. Kiválasztottam a dokumentumot. Most, amikor a dokumentum kész, futtassa a funkciót. És itt, ha a dokumentum kész, ami azt jelenti, a HTML-ben betöltött, aztán futok a funkciót , amely megszünteti ezt az elemet. És most, amikor én vezetem ezt a funkciót hogy átment kész vagyok garantált, hogy az összes a HTML- oldal fog létezni először. Igen. Kérdés? Közönség: Mi az az esemény, kulcsszó a funkciót? JOSEPH ONG: Tehát az esemény kulcsszó a funkció csak egy paraméter, átad a funkció bármilyen esemény. Ez csak valami, ami kapsz ingyen. Ha a kulcs rakodók pset8, hogy az esemény lehet mondani, a Például, hogy melyik gombot megnyomta a. Ebben az esetben, egy kész esemény, ez valójában nem szuper hasznos. De egy gomb le eseményt, ez több hasznos, mert kapsz, hogy melyik gombhoz elérésével kulcs code ki az esemény objektumot. Helyes? Van ennek értelme? OK. Igen. Kérdés? Közönség: Így tud tenni a script tag lejjebb? JOSEPH ONG: Szóval igen. Valaki tehetne a forgatókönyvet tag lejjebb. De ez csak akkor válik igazán rendetlen. És szeretnénk központosítani minden kódunk egy helyen. Ez lehetővé teszi számunkra, hogy csináld. Ne feledje, korábban azt mondta, hogy egy szebb módja annak, hogy az elemek Az oldalon, mielőtt végre kódot? És ez csak egy szép módon akkor elérni ezt. Közönség: [hallható]. JOSEPH ONG: Igen. Azt is meg kell, ugye? Mert ne feledd, benne a fájlt az oldal tetején. Így fog végrehajtani, mielőtt eljut a lap alján. OK. Így akkor is hozzá egy másik típusú eseménykezelő. Ez most dolgozza kattintással. Amikor rákattintok a legfiatalabb, majd akkor felbukkan egy figyelmeztető. Ez csak egy másik típusú esemény. Szemben a kész eseményt, most használja a Click esemény, ha megkapja rákattint egy elem. És ebben az esetben, ne feledje, a kattintás kezelő csatlakozik legfiatalabb. Így csak akkor történik, ha Rákattintok legfiatalabb. És a másik, kész esemény csatolták a dokumentumot. Így várja a dokumentum hogy kész. Értelme? Azt hiszem, tudok lépni. Igen. Kérdés? Közönség: [hallható]. ebben az esetben a [hallható]. JOSEPH ONG: Igen, mert ebben esetben, meg kell várni a legfiatalabb elem jelenik meg a képernyőn az első mielőtt tudok csatolni egy kattintás felvezető ez, ezért tettem belülről a dokumentum elkészült. OK. És a következő, így ez egy nagy példája hogyan fog össze mindent. Ez csak egy Form Validation példa láttad az előadás. Tehát, hogy lépésről lépésre, mint végig ezt. És ez teljesen rendben. Csak olvasd el fentről lefelé. Van egy lap alján. Ha a dokumentum elkészült, mellékelem a be felvezető a formában, amikor elküldi az űrlapot, kapok az értékeket belül minden egyes ilyen bemenet. És akkor esetleg üresen. Ha ez üres, visszatérek hamis, mert Nem akarom, hogy küldje el az űrlapot, mivel az űrlap rossz. Ha a jelszó üres, vagy kevesebb mint nyolc karakter, nem be formában, mert ez is rossz. És a return false csak megakadályozza, az űrlap benyújtása és lesz egy új oldalt. És remélhetőleg, ez van értelme. Azt hiszem, a srácok meg séta ezt a kódot lépésről lépésre a saját. És ha egyszer megérted, mi a Select elemeket és csinálni dolgokat hozzá valóban jár, ez lehetővé teszi majd sok értelme van. Igen? Közönség: Mit jelent a name = felhasználónév jelent? JOSEPH ONG: Tehát a name = felhasználónév és name = jelszó csak annyit jelent, nézd meg a attribútum bármilyen te kiválasztásával. És akkor, hogy van, hogy megfeleljen. Tehát bemegy regisztráció. És akkor nézzük az összes bemenet és a regisztráció. És akkor válassza ki, ahol a név attribútum egyenlő felhasználónév. Tehát, hogy az első választó csak kiválasztja A felhasználónév bemenet. És ez a második választó csak kiválasztja A jelszó egy, mert ezek vannak az attribútumok be azt, hogy milyen ők állítólag. Kérdés? Közönség: A benyújtás, hogyan működik a alsó részén oldja meg a felső rész? JOSEPH ONG: Szóval ez azért van, mert Az eseménykezelő. Tehát várjuk a küldés esemény hogy kirúgják az űrlapot. És ez minden, ami be. Miért hívom be ott? Azt mondja, ha az űrlap elküldése, Kapok egy be eseményt. Engedjék meg, hogy elfogják ezt, és majd futtassa ezt a kódot. Igen? Közönség: Miért van hogy a funkció esemény? Miért nem tudsz csak [hallható]? JOSEPH ONG: Mivel a JavaScript, akkor be kell jelenteniük a funkciókat. Ez csak így működik JavaScript. Azt kell mondanom, hogy a helyzet futtatni a funkciót. Szóval azt mondod, hogy, hogy te vár funkciója van, hanem csak kapcsos zárójelek. Közönség: És a funkció van, amit a következők? JOSEPH ONG: Igen. A funkció, amit belül A kapcsos zárójelek után ezt a funkciót kulcsszó. Igen? Közönség: [hallható]. JOSEPH ONG: For benyújtani? Közönség: Nem, a működés anélkül, hogy az eseményt. JOSEPH ONG: Igen. Tehát nem az esemény, lehet, hogy az. Ha nem kell a rendezvény, akkor csak kihagyja azt. De ha igen, akkor csak tedd oda. Igen. Gyors kérdés? Közönség: [hallható]. JOSEPH ONG: Igen. Mert mit kell tennie, a document.ready csak azt mondja, várni minden A HTML az oldal kiszámításának először. És általában, azt szeretné elemek a helyén, mielőtt futni kódot. Rendben van. El kell, hogy az Ajax. Nincs sok időnk. Így előnye és hátránya. JavaScript könnyebb try levelet jQuery. De jQuery egyfajta lassú. Ez olyan, mint a PHP lassabb, mint a C, mert értelmezése. És jQuery egy kicsit lassabb, mint a JavaScript, mert nem sok a dolgok a motorháztető alatt. És ha a jQuery, ez csak egy kicsit lassabb, mint a JavaScript, annak ellenére, hogy ad szép elegancia. És végül, Ajax. Eddig az Ajax, még nem láttam Ajax tekintve pset7 még, mert ha igen, akkor be Űrlap árajánlatot. Ez betölt egy új oldalt. Így van ez a nagy fehér villanás az oldalon, míg második oldal betöltődik, igaz? Ez lenne igazán szép, ha nem volt a flash. Mint a Facebook, ha csak lapozzunk Az alsó, teszi hozzá új tartalmat frissítése nélkül az egész oldalt. Szóval, valami ilyesmi lenne. Ez JavaScript kód a bal oldalon. Kapsz mi van benne, hogy a bemenet. Kapsz az állomány info Yahoo! És akkor, hogy egy nagy karakterlánc, azt mondja, OK, ez az az üzenet, amit akarok jelenjen meg a képernyőn. És akkor tedd azt üzenetet belül Néhány HTML elem lesz jelenik meg a képernyőn. Szóval ez minden, ami itt történik. Tehát alapvetően, mert ez az egész JavaScript és nem kell futtatni már PHP, ez győződjön meg róla, , hogy az oldal nem frissül. Tehát ez csak egy elvont eszme hogy mondok itt most. Az absztrakt ötlet az, hogy ha ez mind a JavaScript, akkor nem kell a oldal frissítése. De hogyan lehet ténylegesen ezt? Nos, valóban, beszéljünk A probléma ezzel az első. A probléma a JavaScript, végrehajtás szinkron. Tehát meg kell várni egy sort befejezni, mielőtt végre a következő sorban. És mi van, ha én megyek át a Yahoo!, és azok a szerverek nagyon lassú, és a tart ez három másodpercig add vissza, hogy Készlet információ? Amikor hit, hogy az ár egyenes, ha a végrehajtás szinkron, mivel ez a alapértelmezett, milyen ez csak fog tenni, a böngésző fog húzni az három másodpercig. És akkor nem lesz képes megtenni semmit, amíg nem lesz, hogy az adatok. Ez lesz fagyasztani. És ez rossz. Nem akarod, hogy a felhasználó Egy fagyott weboldalt. Helyes? Ez csak rossz. Mindenki egyetért? Ha a böngészés a Facebook, és lefagy, és nem csinál semmit, akkor igazán csalódott. Tehát a megoldás is, hogy valami aszinkron helyette. Szóval az egész aszinkron dolgot mond van, fogom fel ezt a URL néhány adatot. És akkor fogom tartani fog. Meg fogom tartani végrehajtása bármi kód, amely után volt, hogy. És akkor, amikor az adatok készen áll, akkor fogom feldolgozni. Ez minden mond. Közönség: Ajax csak teszi code aszinkron? JOSEPH ONG: Ez egy aszinkron módja Adatok behozása. Tehát az első dolog Ajax ez lehetővé teszi számomra, hogy az adatok külső honlapján. A másik dolog az, hogy biztosítja hogy az oldal nem elakad, amíg én vagyok elragadó az adatokat. Ez az aszinkron része. Mert kialszik valahol máshol, mert azt mondom, hogy tartani fog, amíg ez elragadó, hogy az adatok, hogy a teszi aszinkron. Folyton végrehajtása. Maradjatok, hogy az aszinkron ötlet szem előtt tartva. És én megmutatom, milyen a különbség. A szinkron verzió van a bal oldalon. Az aszinkron verzió a jobb oldalon. Nézd meg a számokat, hogy melyik lépések megfelelnek annak, amit hajt végre minden egyes sorban. Ott, a figyelmeztetés megjelenik az első. Mivel egyre Készlet információ a Yahoo! úgy három másodperc alatt, a standokon három másodpercig. És akkor figyelmezteti az ár után a három másodperc. Tehát most, hogy a figyelmeztetés mutatja fel abban az időben - három másodpercig be És akkor figyelmezteti az után. Így csak azt lépésről lépésre. Ez olyan, mint amit ti elfogadja, igaz? Az aszinkron végrehajtás, akkor figyelmezteti először. Aztán elmegy erre az URL. És azt mondja, megyek csak kérni az adatokat. És akkor fogok feldolgozni később. Így azonnal végrehajtja a következő sor azután, hogy tenni, hogy aszinkron kérést. Tehát egy 0.001 másodperc látod éber hi. Végre ezt a funkciót, éber szia. És azért, mert tett egy ígéretet, hogy feldolgozza az adatokat később, milyen történik, amikor az adatok visszajön Három másodperc múlva, aztán futok, hogy funkció, hogy van ott. Igen? Közönség: Tudnál adja, vagy tisztázni, mit Ajax jelent? JOSEPH ONG: Tehát Ajax egy módja annak, hogy ha szükséges adatokat, amikor én vagyok a honlapon, és én nem akarja, hogy frissíteni kell az oldalt, akkor Én ezt a technológiát az úgynevezett Ajax. Ez lényegében csak annyit jelent, menj és hozd el adatokat egy másik weboldalon. És csináld oly módon, hogy csak nem elakad a weboldalt. Közönség: Tehát az, hogy a benne rejlő része JavaScript vagy jQuery? JOSEPH ONG: Tehát, hogy valaki írt egy módja annak, hogy ez a JavaScript régen. Egy ponton, nem létezik. És így, hogy valaki feltalálta ezt a technikát hogy az emberek, hogy kérje az adatok ilyen módon. És írtam néhány dolgot csinálni az Ön számára. És jQuery csak ad neked nagyon jó módja annak, hogy csináld ezzel $. kap funkciót. kérdés? Tudok válaszolni kérdésekre Ajax utána is. Én itt leszek. Tehát nézzük mi letölteni az adatokat anélkül, hogy az oldal frissítésével. És tegyük ránk ezt aszinkron módon nem fagy meg az oldalon. Túl hosszú, nem olvassa el, ha a magyarázat túl hosszú volt az Ön számára. Így végül, cross-site scripting támadásokat. Láttuk ezt Zamyla. Ha az adatbázis valaki ezt a nevet, ami egy script tag, és én egy kis kódot a kinyomtatott lapot ki az emberek nevét a sorban, vagy én Néhány JavaScript kód, amely beilleszti ezt a nevet az oldalra, mi az a HTML lesz elő? Nos, nyomtassa ki a HTML tag. Én kinyomtatni ezeket a címkéket. Értem, hogy az a része, ahol én vagyok a nyomtatás a barátaimmal. Nyomtatni Lauren ki. Ez nyomtassa Milo out. És akkor az én nevem az adatbázisban a script üzenet túl hízelgő Facebook állapotát. Mert be ezt az oldalt mert úgy néz ki, mint a JavaScript, amikor ez az oldal lesz küldeni a felhasználónak, ez lesz végrehajtva JavaScript. És ez az, amit mi a cross-site scripting támadás. Valaki hozza rosszindulatú információk az adatbázis, amely megfelel az további szöveg vagy Néhány JavaScript karakterlánc. És ha lesz kinyomtatható a oldal ilyen módon, akkor mi előfordul, hogy rossz kód kerül végrehajtásra, hogy nem áll szándékában Ahhoz, hogy kivégeznek. És ez az egész egy cross-site scripting támadás. És ahogy Önnek körül ez olyan, mint Zamyla mondta. Csak csomagolja a dolgokat HTML speciális karakter. És ez a HTML speciális karaktereket egy PHP funkció, amely megakadályozza, hogy ez a fajta dolog történik veled ha van egy rosszindulatú karakterlánc az adatbázisban. Ez csak megszökik, úgy, hogy ez nem kap értelmezhető HTML. Ez váltja fel a kis konzolok azzal, amit úgy hívunk szervezetek. És mentünk át ezt az előadást is. Szóval azt hiszem, nektek kellett volna egy jó megértése, hogy. Kérdése van? Igen. Közönség: Szóval hogyan A [hallható]? JOSEPH ONG: Mondd még egyszer. Közönség: Milyen lenne a monitor - JOSEPH ONG: Így van. Szóval van valami, ami azt mondja, ha a Regisztrálni, írja be a nevem. Csak írja be a területen, a nevem lehántjuk a csontról poszt túl hízelgő Facebook állapot szoros script tag. És ez csak egyre helyezni a adatbázis, mert nem tudom, hogy valaki A világ nem volt neve a bal nyíl, vagy a szó script benne. Ez nem igazán van értelme. Szóval csak azt, hogy biztos, hogy fertőtlenítse a dolgokat, mielőtt nyomtatni ki az oldalra. Közönség: Tehát a HTML speciális kártya megakadályozza, hogy a script tag? JOSEPH ONG: Igen. Tehát ez nem akadályozza meg a script tag. Ez csak azért arról, hogy a script tag nem kap értelmezhető úgy, mint a HTML vagy - igen. Csak jön fel, mint mi valójában. Rendben van. Tehát ez volt a teszt felülvizsgálatát. Cool. [Taps]