RJ Aquino: Ajmo samo početak. Dakle, ovo je kviz 1. Evo neke informacije na visokoj razini. O stranica za kviz je ovo URL, više ne CS50.net, iako je to će i dalje raditi. To je CS50.harvard.edu/quizzes/2013/1. To je veliki O stranici, govorim gdje i kada je, naime, iduće srijede u hrpa sobama. I tako iduće srijede, sam znači dva dana od danas. Sve ove informacije je tu. Ali, to je kumulativni. Dakle, sve što je od prve polovice Godina je potencijalno na kvizu, jer stvarno ne može učiniti napredna stvari u C bez ako se uvjeti i za petlje i slično. No, tu će biti naglasak na građa jer Kviz 0, počevši tvorevina i File I / O. To je obično više izazov nego Kviz 0. Prosječna ocjena je obično manji. Učim. Dok učite, budite sigurni da koristite CS50/discuss se postavljati pitanja i čitati pitanja tuđe. Dakle, ako nemate bilo kakvih pitanja, prijavite se i čitati Pitanja svojih prijatelja. Vjerojatno su dobra pitanja. I poduzeti prakse kvizova. Mi smo davali kvizovi za sedam ili osam godina. Svi su online. Buduća pitanja su slični na stara pitanja. To je kako smo ih napraviti. Kviz još uvijek ne postoji. Nitko od nas su ga vidjeli. No, to će izgledati natrag kvizovi. Za ovaj pregled sjednicu, to nije iscrpan popis tema. Vi ne možete samo prisustvuju to i onda biti spremna za kviz. Inače, da se ne bi toliko o kvizu. I to je također nije nužno Sve što trebate znati o bilo zadanu temu. To je značilo da vas izložiti stvari smo pokriveni, podsjećamo vas što mi pokrivena, a način na što smo to pokriveno. No, što će se morati ići dalje i dublje kada studija da provjeri je li da znate sve o bilo dano topic i da ste ispunili svi su kutovi koji su bili prekrivena predavanju. Kviz bilješke vam reći da ide u Pisar bilješke, sat predavanja video. To je dobar način da provjerite da li ste pokrivene sve svoje baze. Dakle, za početak, kad sam napravio to tobogani, pokušao sam staviti gdje sam pronašao informacije. Dakle, za File I / O, primjerice, 7 tjedan, Ponedjeljak predavanje, a objavljen Odjeljak 6 i Problem Set svi imaju Informacije o File I / O. Ja sam učinio ovo za svaku temu. Pa ti naslov slajdovi mogu biti korisne za vas. Dakle, ovdje imamo File I / O. Zapamtite, u Problem set 5, koristili smo fopen, fclose, fwrite, fread i fseek. Nakon što je vraćen 30ish JPEG i što mijenjati i zakačili s bitmape, što bi trebao biti prilično upoznat s tim funkcijama i kako oni rade. Ako se više ne poznaju, svakako ih pregledati. I budite sigurni da znate što se različiti argumenti, kada oni koriste. No, zajedničke datoteke vezane bugova možda ćete biti upitani o - Pa, ako ste zaboravili da provjerite je li fopen zapravo radio prije nego što odete u mijenjati datoteke. To bi moglo biti loše. Ako ste zaboravili da fclose datoteke da ste fopened, koji je sličan curenja memorije. To je jako loše. A zaboravlja da provjerite ako ste do kraja datoteke prije vas početi pisati na njega. Dakle, ako ste rekli, hej, ja sam na kraj datoteke. Daj mi još 5 bajtova. Pa, to je vjerojatno neće raditi onako kako ste očekivali. To je stvarno za File I / O, jer smo učinili mnogo toga sa set problema. Dakle, ako ste razumjeli što se događa Problem je u 5. set, sjetite se bitmats i JPEG, onda ste vjerojatno svi postavljen za datoteke I / O. Ako je to malo fuzzy, svakako pregledati taj problem postavljena i povezana materijal. Tvorevina, bili su tema koja su na Granica između 0 i kviz kviz 1. Jeste sasvim ne napraviti rez za kviz 0. Dakle, oni će sigurno biti na Kviz 1, Tjedan 7, u ponedjeljak. Što je rekonstruirati? Ovdje ćemo pokazati indetifikaciju. To je poput novog tipa. To je kao kontejner za više polja. U ovom slučaju, mi smo proglašen indetifikaciju Student koji ima dva polja - niz koji se zovu ime i int da smo pozivom dobi. Dakle, kad sam proći oko studente ili ja mijenjati studente, ja ću biti u mogućnosti pristupiti njihovo ime i njihovu dob. Pogledajmo neki kod za to. Ovdje vidimo da je sam izjavio Student je, baš kao i Izjavljujem bilo varijablu - int x, int y, et cetera. Evo student je. On počinje s ništa u svojim područjima. Tako ćemo ih postaviti. Možete postaviti polja u struct s točkom. Zato sam rekao da se ovdje s.name = RJ. I s.age = 21. Također možete ažurirati polja isti način na koji bih ažurirati vrijednost varijable. Dakle, želim promijeniti ime iz RJ s Nema razdoblja u RJ pir ispravan način. Da bi se s.name = RJ, isto kao što smo ga, rekao je izvorno. A onda možete ih koristiti. Dakle, mi smo ih postavili. Mi smo ih ažurirati. Također im možete pristupiti na vrlo sličan način. Pa evo, ja sam ispis RJ Je li 21 godina. I ja sam pristup te vrijednosti s s.name i s.age. Tako da je pristupanje tvorevina s točkastom zapisu. Yep, pitanje? PUBLIKA: Ima li razloga za Prethodni slajd da niste stavili student na vrhu liniju, kao typedef struct student, a zatim student na kraju? RJ Aquino: Dakle, pitanje je, na to slide, obično ste vidjeli typedef struct čvor, a zatim poljima struct i onda riječ čvor. I kako to da ovdje nisam rekao, typedef struct student, a zatim poljima struct a zatim student? Razlog je u tome što mi ne treba pristupiti ga unutar struct. Tako da je u redu da ga ostavite bez imena. Ja samo mogu ga ostaviti kao anonimni rekonstruirati. Razlog zbog kojeg smo to učiniti za povezane liste i stvari, jer je unutar trebate referenca za struct čvorova zvijezdu. Dakle struct mora imati ime, tako da možete pristupiti kasnije. To je manja pojedinost. No, obično ćete vidjeti typedef struct vitičastim zagradama, ako vam ne treba ime i typedef struct neki naziv slijedi vitičastim zagradama ako hoćete potrebno ime. Dakle, to je dobro pitanje. I na toj točki, mi imaju tendenciju da se mijenjati tvorevina, i proći oko tvorevina strane referenca, a ne prema vrijednosti. Dakle, samo ćemo proći oko upućuje na tvorevina, umjesto da prolazi oko tvorevina sebe. Dakle, ti si vrlo često će biti korištenjem, u ovom slučaju, student * ili struct node * ili čvor * umjesto iz studente ili čvorova. Pa evo, ja sam rekao, OK, promjenjiva ptr će biti adresa s.. To će biti pointer učeniku R. J. Tako možemo dobiti na tim poljima Isto kao što smo dobili ništa. Prvo, ID referenca pokazivač dobiti indetifikaciju. To je * ptr, a zatim dot, a zatim starost. Dakle pristupiti polju, a ja sam izmijenjena To je sada na 22, jer, budimo recimo, to je bio moj rođendan. Tu je sintaksa prečac koristite strelicu ovdje. Dakle ptr strelica age je samo isto kao * ptr.age. Sada, to je nešto što ćete morati zapamtiti i sjetiti. Iskoristio si to puno u pset6, bukvar pset. No, to je zapravo ono što se događa na ispod poklopca motora. Prošlo dereferencing pokazivač , a zatim ga pristupa. Pitanje? PUBLIKA: [nečujan]. RJ Aquino: Pa zašto smo pomoću pokazivače kao tvorevina, umjesto tvorevina sebe? Razlog će biti ako ste u prolazu struct u funkciji, što vjerojatno želim da prođe oko samo 4 ili tako bajtova koji predstavljaju pokazivač, što Za razliku od potencijalno 30 ili 40 bajtova koji su rekonstruirati. Tako prolazi nešto u funkciji je lakše kad je stvar manja je u kratko. Pitanje? PUBLIKA: Možda ste spomenuli ovo u početku, ali su tu ostali slajdovi gore na [nečujan]? RJ Aquino: Ovi slajdovi će biti se nakon pregleda sjednici. Mi ćemo ih objaviti na web stranici. Dakle, kreće na i kreće na malo brže, idemo razgovarati o podacima strukture. Ima puno. Pokrili smo hrpu njih. Evo što biste trebali razumjeti o strukturi podataka. Vi stvarno trebali shvatiti na visokoj razini što svaka struktura. Možete li objasniti na engleskom jeziku na svoj prijateljica koja nije poduzela CS50 kako mi smo organizirati naše podatke i zašto mi bismo se koriste nešto na ovaj način? To je jedna stvar. Stvar dva, razumjeti provedba. Dakle, razumijem kako koristiti ove stvari u C. A mi ćemo se ide preko toga. A onda je stvar tri će se znati drže puta i ograničenja različite strukture koje koristite. Dakle, razumijem zašto bi koristiti hash tablicu umjesto niza. Razumjeti kako brzo, u prosjeku, Pristupom hash tablica je. Razumjeti što su operacije brzo na povezani popis, ali sporo na poljima i obrnuto. Dakle, da shvate da, morat ćete Razumijem Big-O notaciju samo da znate kako razgovarati o tim svašta. A mi ćemo govoriti o tome. Dakle, prva stvar, povezani liste. Ovdje je slika na visokoj razini popisa povezana. Pokazali smo to u klasi. Mi obično imaju 10 ljudi stoji na pozornici. No, imamo niz čvorova gdje je svaka čvor ima neku vrijednost i upustvo na svojoj sljedećoj vrijednosti. Tako da se iz jednog čvora na drugi, što samo reći, daj mi sljedeći čvor. Imaš onaj čvor. Daj mi sljedeći čvor. Imaš onaj čvor. Daj mi sljedeći čvor i tako dalje dok ne postoji čvor lijevo. Dakle, i dalje govoriti o je na visokoj razini. To je vrlo lako za umetanje stvari u popisu povezana. Ako ne brinu o nalogu, možete jednostavno ispustiti odmah na početku. To je stalna vrijeme. No, teško je naći vrijednost. Ako pokušavate pitati, je sedam u mom popisu? Morate proći kroz svaka pojedinačna vrijednost. Je li ovo sedam? Je li ovo sedam? Je li ovo sedam? Je li ovo sedam? Iznova i iznova. I to je O (n). Dakle, kada studiranje za kviz, usporediti s polja. Je li to u redu? Svjetla su prigušena. OK. Kada je bolje Popis povezani? Kada je niz bolja? Pa pogledajmo neke koda. Ovdje je potencijalni čvor. To je rekonstruirati. To ima int n, koji će biti naša vrijednost. I to ima struct čvor * next, koji Naša je pokazivač na sljedeći čvor. Pa evo, možemo vidjeti da smo se dogodilo da su stavili int u našem čvor. No, kad bi to bilo povezano popis char zvijezde ili povezani popis kola, mi sigurno mogao učiniti previše. Sjeti se u pset6, vjerojatno je povezani popis char zvijezdama ili samo statička char polja. Pogledajmo ovdje na operaciji. Na taj način želimo umetnuti novi n na našem popisu povezana. Započinjemo s glave pointer koji je Kazaljka na čvoru koji ima vrijednost n i najbliži pokazivač da točke u ovom čvoru je vrijednost n i pored ništa, jer to je zadnji čvor. Dakle, u interesu vremena, ja ću stavi sve kod na zaslonu. A mi ćemo prošetati kroz nju nekoliko redaka na vrijeme. Dakle, ovdje je kod. Nadam se da je čitljiva. Prva stvar koju radimo je smo malloc novi čvor. Dakle, čini pokazivač na novi čvor koji ne sasvim imati ništa postavili u njemu još. Mi smo provjeriti kako bi bili sigurni da je novi čvor nije null. Inače, moramo odustati. Dakle, što je utvrdila da je, sada set vrijednosti u čvoru. Tako smo stavili novi n u naš n polju. I mi smo postavili sljedeći pokazivač ukazati na Izvorni glavu, tako da možemo Sada su umetnute to čvora u našem popisu. Konačno, imamo globalni čelnik točku na naše nove čvora, tako da, ako smo bili na početi na glavi, mi bi se na to novi prvi čvor umjesto Stari prvi čvor. A kad je ova funkcija izlazi, promjenjiva novi čvor više ne postoji, jer je lokalna u funkciju. Dakle, ovo je stanje u svijetu. Naš globalni čelnik ističe da se naša nova Prvi čvor, što ukazuje na našu Izvorni prvi čvor, što ukazuje na čvoru nakon toga. To je bilo za umetanje. Nadam se da je bio relativno jednostavno slijediti. Kada su u nedoumici, nacrtati sliku. Zato smatram da je riječ o povezane liste i gledajući Kod vrlo nije korisno. Dok gleda na sliku povezani Popis dopušta mi da mislim, oh, tako Imam ovaj čvor ovdje. Ali, ako sam ažurirati taj pokazivač, to završi nepovezani. A ja sam zaboravio gdje je čvora ide. I kod izađe. I imate više čvorova koji su isključeni. I ne završiti s Popis želite. Dakle, ako ste nacrtati sliku i učinite to korak po korak, nadamo se, vidjet ćete ispravan poredak stvari u smislu ažuriranje naputke kako bi bili sigurni da popis dolazi zajedno. Insert je relativno jednostavan. Složeniji jedan će biti umetanje u popis razvrstanih. Složeniji funkcija je izbrisati i pronaći, pa gleda kroz popis na vidjeti ako je nešto bilo. Možda ste to učinili u pset6 kada dobio u vašem hash tablicu i rekao, dobro, je riječ jabuka u mom popisu povezane? Dakle, možda su već učinili. No, svakako, osvježiti pamćenje i pokušati pronaći i reimplement reimplement izbrisati za popis povezane. Zabava strani bilješku, tu je također dvostruko povezana popisi, gdje imate naputke koje upućuju prema naprijed i unatrag, tako da možete ići u Sljedeći čvor i na prethodni čvor. A tu je pitanje na prošlu godinu kviz te vrste, govori o dvostruko povezane liste. Sada, to je struktura koja ste relativno upoznati s, jer je većina od vas vjerojatno ih koristiti na pset6. Evo jedan koji je malo manje upoznati. Kao strani bilješku, mislim da je kviz 1 je primarno teže nego Kviz 0, jer stvari koje radite, vi nisu učinili koliko. Da bi se to na drugi način, za kviz 0, što je napisano mnogo C. A mi Pitao si o C. Za Kviz 1, idemo pitati u vezi PHP i JavaScript, koje nisam napisao koliko. Mi ćemo vas pitati o C-koda koji nisi napisao koliko, Ovaj napredni C stvar. Dakle, definitivno, vježbati stvari s kojima govorio o predavanju koje nisu nužno učiniti na problem postavljen. Govoreći o kojoj, nisi napisao stog na problem postavljen. Ali bilo je u predavanju. Evo slika na visokoj razini hrpe koju pokazujemo svake godine. To je hrpa ladica u blagovaonica Mather. Na visokoj razini, gomila su prošli u, prvi iz strukture podataka. To znači da ćeš staviti stvari u - 1, 3, 7, 12, 14, 0 negativna. Jednu stvar ne mogu imati rekao je - negativna 3, 0. Možete staviti sve ove stvari u. I posljednja ste stavili u prvi jedan koji će izaći na vidjelo. Dakle, imate dvije operacije - push i pop. Sve stavite u koji sam bio pokazujući ovako su pritisak. I onda kada sam doći u zgrabiti nešto ili doći na vrhu zgrabiti nešto, to je pop. Tako ćemo provesti hrpe. I mi ih je pokazao u predavanju pomoću polja. No, što ih može učiniti korištenjem povezane liste. Stog je konceptualni podataka struktura, a ne kao Provedba-specifičan. Pa što bi to izgledati? To bi izgledalo nekako ovako. Ti bi imati veličinu cijeli broj. I ne bi se niz vrijednosti koje Mi pozivamo ladice, jer to je ono je slika za us - int ladice - i onda neki maksimalni kapacitet. Pa što bi gurnuti izgledati? Pa, ako imamo hrpu s, a zatim gurati nešto na s., dobili bismo veličina s.. I to će biti sljedeći otvoren je mjesto našeg niza. Dakle, ako imamo tri stvari u našoj stog, onda ladice 3 će biti sljedeći otvoreno mjesto, jer 0, 1, i 2 su već popunjena. Tako smo stavili vrijednost u s.trays [s.size], treće mjesto. I onda smo povećajte s.size reći, hej, imali smo tri stvari prije. Sada imamo četiri. Dakle, sljedeći put kada se gurati, ti si ide staviti nešto u 4. Ili sljedeći put pop, idete pogledati tri umjesto četiri ili bilo što drugo. I onda ćemo se vratiti vjerni recimo, hej, uspjeli smo. To je radio. Kao opće pravilo, ako je funkcija koja je trebao vratiti istinito ili lažno uvijek vraća true, možda učinio nešto krivo. Dakle ovo radi? Pa, to utvrde prekid za 1, a 2, i 3 i 4, i pet. No, recimo da sam doći do moje sposobnosti. Ja sam tada trčanje u problem, jer ako veličina je ista kao i sposobnosti, ja sam sada pokušava staviti nešto u Niz gdje nemam prostora. Dakle kratka provjera to popraviti. Ako s.size == KAPACITETA, povratak false. Inače, ići i raditi ono što smo učinili. Dakle, što smo drugo mogli pitati o za dimnjake? Što još treba proučiti? Što još treba vježbati? Pa, provedbu pop. Već smo učinili gurati. Sredit ću ja to. Provedba ne-polje, gdje koristite popis povezana, možda. Provedba ne int. Napravili smo Ints ovdje. No, moglo je biti i pluta. Mogao sam biti žice. To je mogao biti char zvijezde. Pogledajte posljednje kvizovi za vrste Pitanja smo pitali o hrpama. Reći ću da smo prešli hrpe oko Isto kao što smo ih prekrivena godine prošlost. Dakle, kviz pitanja trebaju biti dobar pokazatelj. Kretanje naprijed čak i brže, redova. Oni su poput hrpe. No, oni su prvi, van. Ako ste britanski, riječ red Vjerojatno je napravio puno smisla za vas. Inače, možda ćete morati čuo za njega kao linija. Oni rade kao crte na Apple store. Prva osoba koja se pojavi u 3:00 Ujutro je prvi Osoba kupiti svoj iPad. Dakle, imamo dvije operacije - Postavi u red i dequeue. Postavi u red stavlja nekoga u liniji. Dequeue vuče prvi Osoba s crte. Opet, možemo provesti ovo s nizom. Dakle, ono što je struct smo pokazala je u predavanju? Bilo je to jedno. Opet, brojevi. Opet, veličina i ova nova stvar front. Zašto postoji nešto što se zove prednji? To je indeks slijedeća element za dequeue. To je samo interno praćenje Prvi čovjek da se pojavi, tako da smo Možete ga izvaditi kada trebamo. Definitivno pogledati skripta i pokušati implementirati u red i dequeue kada studiranje za kviz. Važne stvari koje treba razmišljati o tome. Omatanje oko, ako prednja plus veličina završi veći od kapaciteta. Opet, ako je vaša struktura je puna, ti ćeš imati problema. Tablice koje ste vidjeli prije. Većina vas vjerojatno provesti ovih dana pset6. To je struktura koja teži O (1) konstantno vrijeme umetanja i O (1) vremenska konstanta pretraživanja. U CS50, implementirali smo to kao Niz povezanih listama. Ključna komponenta u hash tablicu je hash funkcija. Dakle, to pretvara vaše mišljenje, recimo, rječnik riječi, u broju, koja će biti naš index. I mi ćemo koristiti taj indeks u naše polje. Dakle, ovdje je slatka mala slika iz study.50.net. Poklanjamo sve riječi u naš hash funkcija. I hash funkcija nam govori gdje staviti te riječi. To je sve super, u zemlji u kojoj postoji samo jedna riječ za svaki utor. No, kao što se sjećate iz pset6, postoji više riječi od utora. Dakle, što se događa kada se dobili sudar? Umjesto spremanje jednu vrijednost u, recimo, hash tablicu 3, što pohraniti popis povezana. I tako, umjesto da dinju Ovdje, te će imati popis povezana, gdje je prvi čvor dinja. I pored čvora je mačka. I treći čvor sudara, neka je reći, jer sve ove riječi početi s C. Dakle, većina vas je to učinio za pset6. Ako niste napraviti hash tablicu na pset6 a vi pokušali nešto slično trie, svakako pregledati hash tablice. Ako ste to učiniti na pset6, definitivno pregledati hash tablice. A ako je to učinio na pset6 i to nije raditi sasvim u pravu i ti imala puno problema s njim, svakako pregledati hash tablice. Dakle, pouka je stvarno definitivno pregledati hash tablice. Velika manjina od vas pokušao se pokušava na pset6. Na visokoj razini slika. To je nešto poput ovog, gdje je svaka čvor ima skup djece, gdje je svaka Dijete odgovara na pismo. I svaki čvor također kaže, hej, ja sam riječ. Dakle, u ovom slučaju, riječ Maxwell, ako slijedite m do A do X-W-E-L-L, a zatim ga slijedi još jedan. A ti se ovaj simbol, Delta, koja mi znače da znači to je riječ. Dakle, Maxwell je riječ. Ove delte su tijekom označava transmutaciju koje stvari su riječi i koji stvari nisu. Tako je u pset6, podaci koje smo pohranjeni uz bilo koji od naših čvorova je: "Ja sam Riječ. "I super stvar oko pokušaja se oni pokažu umetanje i pretraživanja u O (dužina riječi). Dakle, samo da se kroz Maxwell, to je M-A-X-W-E-L-L. Dakle, sedam ili osam - Ja ne mogu računati - koraci da bi se na kraju i provjerite stvari. Tako brza provedba ovdje. Rob je prošao kroz povezana popis u njegovoj smrti. Pa to provjeriti. Oprostite. Prošao kroz trie u njegovoj smrti. Pa to provjeriti. No, što u osnovi imaju svaki čvor ima 27 upućuje na sljedeću čvorova i jedan Boolean za sam riječ. Provjerite Rob je obdukcija koliko to je zapravo provodi. Naša konačna struktura, naši drveće i pretraživanje s binarnim stablima. Dakle, gledajući u njih, oni su pokriveni nedavno Tjedan 8, u ponedjeljak. Stablo je sličan trie, osim tebe ne moraju nužno imati 27 čvorova na svaka točka. I nemate te podatke jedni korak koji označava je li - Put nije važno. Dok trie, put od vrha do Dno, Maxwell, bio je važan za nas. No, svaki čvor ima više djeca, možda. Imamo još malo vokabulara. Korijen stabla je na samom vrhu. I možemo reći da je vrlo najniži Čvorovi koji nemaju djeca su lišće. Dakle kao trie, stablo je struktura čvorova. Česta vrsta drveta koje ćemo razgovarati o tome je binarno stablo, gdje svaki čvor nema djece ili jedno dijete ili dvoje djece. Dakle, ova slika ovdje nije binarno stablo, jer čvor 3 ima troje djece. Ali, ako bismo se ignoriraju one, ostatak to je binarno stablo jer to pokazuje svojstvo da je svaki čvor ima nula, jedan ili dvoje djece. Pa kako bismo mogli izraziti u kodu? Mogli bismo imati čvor u kojem svaki čvor ima broj unutar nje, kao i kao pokazivač na stablu s lijeve strane i kazaljka na stabla na U redu, tako da je dvoje djece. Kako je to korisno? Pa, ako bi pravila o tome gdje smo stavi čvorove, možemo napraviti pretraživanje brži. Dakle, postoji koncept binarnom pretragu stablo, gdje se svi čvorovi na lijevo podstablo imaju manju vrijednost od čvora gledamo. I svi čvorovi na pravom podstablu imaju veću vrijednost od root čvor. Sada, da izgleda kao puno riječi. Ja ću ga staviti unutar double citati i pokazati vam sliku. Dakle, ovdje je primjer pretraživanje po binarnom stablu. Vidimo da smo započeli s 10.. Sve na lijevoj 10 je manji od njega. I sve što je s desne strane je veći od njega. Ali i više od toga, svaki čvor Stablo izražava tu nekretninu. Dakle čvor 7 ima 3 do lijevo i 9 udesno. Dakle, sve one koji su manji od 10. No, gledajući samo one, 7 ima 3. da njegova lijeva i 9 do svoje pravo. A isto tako na desnoj strani, 15 ima 14 na svoju lijevu stranu i 50 na svoje pravo. Tako su tri čvorišta tamo, 15, 14, i 50, su također vrijedi binarno stablo ili vrijedi pretraživanje po binarnom stablu. I oni su svi veći od 10.. Dakle, oni mogu biti Na upravo tamo. Ima li pitanje? PUBLIKA: Kako se nositi kada imate dvije Sevens? RJ Aquino: Da. Kako se nositi s dvije vrijednosti da su isti? Neki pretraživanje s binarnim stablima reći da vam ignorirati duplikate, jer je cilj Samo da kažem, ja nisam vidio te stvari tako daleko. Neki binarni pretraživanja drveće da bi mogao reći imaju broj unutar čvora. Drugi bi mogli reći da je sve to lijevo je manja od ili jednaka. I sve što je s desne strane je veći od. To samo ovisi o tome Problem je u tome da ste rješavanje. Dakle, u rječniku, na primjer, ne bi stalo duplikata. Ti bi ih izbaciti. No, neki drugi problem, možda vam je stalo. PUBLIKA: Je li moguće da su 1 lijevo 15, koji manje od 10? RJ Aquino: Ne. Ako 14 ovdje su 1, to bi neće biti valjana pretraživanje po binarnom stablu, jer sve što je s desne strane 10 mora biti veći od toga. Pa ćemo vidjeti zašto. Ako u zemlji potrazi moj cilj je naći 14, počnem u korijenu. Tako sam pogled. OK. Mi ćemo početi u korijenu. Pogledajte 10. Pa, 14, naš cilj, je veći od 10.. Dakle, ona mora biti na desnoj strani. To je vrlo slična cijelim telefon Knjiga stvar koju smo učinili, binarni traži tamo. No, umjesto binarnog pretraživanja u niz, da smo binarna traži u ovom stablu. Dakle, mi smo još uvijek u potrazi za 14 godina. Pa, 14 je manje od 15 godina. Dakle, ako je to u našem stablu, ona mora biti u ovom području. To mora biti na desnoj strani 10 i lijevo od 15 godina. I tako smo provjeriti ovaj čvor. I yay, pronašli smo 14. Neću hodati kroz njega. No, ovdje je kod. To je zapravo relativno jednostavan, jer ovo je rekurzivna. Što možemo od vas tražiti da učiniti na kvizu? Mogli bi vas pitati za pisanje ovog koda. Mogli bismo vas zamoliti da pogledate ovaj kod i mijenjati ovaj kod i objasniti što to radi. Da. Pitanje? PUBLIKA: Jesu li ti slajdovi će biti na raspolaganju kao što su bili zadnji put? RJ Aquino: Da. Tako su ti slajdovi će definitivno biti objavljena. Ivanković: Oni su zapravo objavljene upravo sada na web stranici. David upravo to učinio. RJ Aquino: Rezovi su upravo sada na web stranici. Vjerojatno ću izgladiti par su pri upisu sam primijetio i popraviti ih. No, tu je trenutna verzija na mjestu. Drugi stvari smo mogli poželjeti učiniti - pisati umetak. Napišite iterativni verziju rekurzivna funkcija smo vam samo pokazali ili razgovarati o tim stvarima, kao što je u st., u riječima, u rečenicama. Uspoređujući bijegu puta i objašnjavanje ono što bi željeli koristiti binarni traži stablo će se umjesto hash tablicu, primjerice. Dakle, razumijem te strukture na prilično dubokoj razini. Razumjeti kako ih pisati, kako ih koristiti, kako razgovarati o njima. A vi ćete biti spremni. Pitanje? Publika: Kada pišete pretraživanje po binarnom stablu, kako vam je činiti odrediti što vrijednost bi ga kao korijen? RJ Aquino: Dakle, pitanje je, što se Vrijednost misliš kao korijen? Ovisno o vašem kodu, što mogu imati globalni korijen. Dakle, možda ste vjerojatno imali u pset6 globalni hash tablicu. Ili možda prođe korijen u kao argument. Dakle, ovo pretraživanje funkcija ovdje Potrebno je argument čvor *. I tako sve što čvora vam se dogoditi da bude gledajući je ona koju liječenju kao root kada ga prođe u. A ja sam sve skupa. Oni su moji slajdovi. Sljedeća osoba može doći zamjenu u laptop i mikrofon. ROB Bowden: Mislim da bih mogao imati različito tumačiti na to pitanje. Ali sam ga tumačiti kao, ako imate brojeve 1, 2 i 3, kako radimo Znam da bi 2 korijen za razliku od 1 ili 3? Ako napravimo 2 korijena, onda je lijepo 1 i 3 na lijevo i desno. Ali, ako je 1 korijen, onda je 1 do Top, 2 pravo, 3 u desno. Dakle, po defaultu, ne znate što bi korijen. A za bilo algoritma mi očekujemo da daju ti, samo prva stvar koju umetak bi korijen. Ili ćemo vam dati binarno stablo koje već postoji da ima korijen. No, drugi algoritmi postoji takva da Korijen će ažurirati, tako da ako vam završiti u situaciji gdje je 1, 2, 3, to bi automatski ažurirati kako bi napraviti 2 nove korijena, tako da to je još uvijek lijepo uravnotežen. ANGELA LI: Cool. Hej, momci. Ja sam Angela. A ja ću svršiti našu C i onda ići u neke od naših web tehnologije - HTTP, HTML, CSS. Dakle, prva stvar koju je tampon overflow napada. Tako ćemo pogledati na ovom kodu. Vrlo je jednostavno. Tu je funkciju foo. I to ne vraća ništa. Ali to traje u pokazivaču u nizu pod nazivom bar. I to će prorekao pufer, što je znak Niz koji ima 12 utora. I to koristi memcpy, što je samo funkcija koja primjeraka iz jednog adresu na drugi. Dakle, ovo je pokušava kopirati u naš tampon iz bilo bar je pokazujući na. Dakle, bilo koji ideja što nije u redu s ovim kodom? Ivanković: Ako bar je dulje od C, oni će prebrisati. ANGELA LI: Da, točno. Mi nemamo garanciju da bar će biti manje od 12 godina. Upravo smo napravili neke proizvoljan broj 12. A bili smo kao, nadajmo se da je naš korisnički unos manji od 12 znakova. Dakle, u idealnom svijetu, ako je naš ulaz je Uvijek kao što se očekuje, onda ćemo dobiti nešto slično, zdravo. To je manje od 12 znakova. Ona dobiva pročitati u char c. A onda ćemo nešto učiniti s njom. To uopće nije važno. Ali zlonamjernik mogao učiniti nešto kao što je ovaj, gdje su daju nam ono što bar pokazuje da se, to će ukazati na ovaj veliki niz samo je. I ovaj je put duži od 12 godina. Dakle, to će ići do kraja ovdje gdje povratak adresa je nekad bila. Pa recimo ovu funkciju zove foo. Možda Foo bio pozvan od strane neke druge funkcija, koji je bio pozvan od strane glavni. Dakle, kada Foo radi, to treba da znaju gdje da se vrate. Ako Foo bio pozvan od strane neke funkcije po imenu baz, ona mora znati da je je dobio da se vrati u Baz. I to je ono što ovaj povratnu adresu ovdje nam govori. Ali, ako ćemo ga prebrisati s nekim drugim adresa, u ovom slučaju, to je zastupljenost u govoru na samom početku ove tampon, a zatim što se zapravo dogoditi je da Umjesto da se vrate natrag u Baz, koji je nazvao našu funkciju, to je samo ići na početku ovog koda. A ako je to bilo zato što došao i zlonamjerni haker dude ubrizgava to, onda možda taj iznos of a nije zapravo je. I to je zapravo samo kod koji razbija vaše računalo ili tako nešto. Tako da se obrambeni o ovom vrstom stvar, morate nikad ne pretpostaviti da sfaust je sigurno Iznos znakova. Na primjer, kada ste radili bukvar, što su rekli da su riječi bile samo će biti 40 znakova dugo maksimalno. I to je dobro. Ali, ako ne, onda bi se pobrinite se čitati samo u 45 likovi na vrijeme. Inače, možda ćete prebrisati Vaš tampon. Sva pitanja o tome. Da. PUBLIKA: Možeš li razgovarati nešto više o njima? ANGELA LI: Žao mi je. Da. PUBLIKA: mikrofon je samo za video. Pokušat ću i projekt. Bok, dečki. Sup? Tako ćemo ići preko nekoliko stvari u CS50 knjižnica, koje ste koristili sve semestar, govore dobiti korisničkog unosa. Kao što znate, što uključuje CS50 Knjižnica po samo radi CS50.h, koji sadrži sve prototipove funkcije koje možete koristiti, kao što su GetString i GetInt, a GetFloat, i tako dalje. A tu je i ovo jedna linija u CS50 knjižnica koja određuje niz, koji li vi znate do sada je samo char *. Ali neka je zaviriti u Kako GetString radi. To je vrlo skraćena verzija. Možete podići CS50 knjižnica datoteke od, mislim, manuals.CS50.net. A možete čitati putem stvarna funkcija. No, to pokriva neke od važni dijelovi. Tako smo stvorili neke tampon s nekim kapaciteta. A što mi radimo je da smo dobili jedan znak u vremenu od standardnog n. To je gdje korisnik ulazi Tekst u konzoli. I tako ćemo čitati u karakter, tako dugo dok to nije nova linija i to nije kraj datoteke, koje je kraj standardni ulaz. A za svaki znak koji čitamo u, ako je taj lik završi dodavanjem broju znakova smo pročitali u, a to je više nego naše sposobnosti, onda ono što mi radimo je samo mi veličinu naše tampon, tako da je to dvostruko duže. Pa opet, to se zaštitili od tampon overflow napada, jer ste pročitali u lik u isto vrijeme. A ako u bilo kojem trenutku ste pročitali u previše mnogima, samo proširiti svoje tampon. Vi to pomnožiti sa dva. I onda imate više prostora. Inače, samo dodajte lik tampon. I nakon što ste pročitali u svemu likovi, to će smanjiti tampon natrag na normalnu veličinu, dodavati null terminator, a zatim se vratiti. Sada, pogledajmo GetInt. Možete li pročitati ovo? Ja mogu zumirati malo. Ne znam kako računala rade. Ništa za to. Ja ne mogu zumirati ispravno. To je stvarno teško. Žao mi je. Recimo samo pogledajte ovo. Pa što GetInt se je to prvi čita u nizu od GetString, koji smo provesti prije. I važan dio napomenuti ovdje je li to dijeljenje da završi Čitanje je kao zapravo nije string, onda mi samo vrati INT_MAX se predstavljaju neuspjeh. Zašto smo se vratili INT_MAX umjesto negativnog 1 ili 1? Bilo koji ideja? PUBLIKA: [nečujan] negativna 1 na jedan. ANGELA LI: Da, točno. Dakle, ti si put više vjerojatno da samo želim do ulaza 1 ili negativnom 1. kada se to zatraži za n-ti i što god tko zna maxes. To je ogroman. Vi ste vjerojatno ne ide to koristiti. Dakle, ovo je poput dizajna odluci da pobrinite se da ne slučajno vratiti pogrešku ili ne vrate 1, što bi moglo biti analiziran kao točan odgovor. Dakle, ako je crta ne postoji, vraćamo INT-MAX. Inače, mi koristimo sscanf, koji je kao scanf. Ali to čita iz niza. I mi smo to formatiran niz, što je% i% c. I mi probati i utakmicu da s god korisnik nam je dao. Želimo broj usklađenih stvari biti 1, što znači da smo samo Stvarno želim odgovarati cijeli broj okružen možda bijeli prostor, a možda i ne. U tom slučaju, ako ste stavili u nešto kao što je, bar ne odgovara na sve, jer postoji potreba da se broj na početku. Tako nikada ne sscan okrenuo 0. Dakle, ne da se vrate. Alternativno, ako ste stavili u nešto kao i 1, 2, 3, A, B, C, koja odgovara i cijeli broj, ali također karakter nakon njega. Dakle sscanf će se vratiti dva, koji također nije idealno. Vi ne želite 1, 2, 3,, B, C da se valjani Int. Tako da se također ne radi. No, kažu da stavite u nešto poput 50. To će odgovarati% I, što znači to će se pročitati u n. I sada, n će sadržavati broj 50. A onda možete ga vratiti. Inače, što pritisnete Ponovi. I onda to samo ide iznova dok li dobiti odgovarajuće informacije od korisnika. Sva pitanja o tome? PUBLIKA: Dakle, ako ste bili ispisati Vrijednost GetInt na [nečujan] će to biti samo broj i max? ANGELA LI: Da. Dakle, ako koristite GetInt, trebali biste pretpostaviti da ne želite n-max do biti valjana ulaz, jer ćete pretpostaviti da je to loše. Ivanković: Ako nismo imali char ci netko je stavio na 1, 2, 3, Sam, zar ne i dalje raditi za 1, 2, 3? ANGELA LI: Mislim da će to raditi. Ali, vi ne želite da se 123Sam biti valjana unosa od strane korisnika. To zapravo nije int. Dakle, to ne čini fer da ga analizirati kao int. OK. U tom slučaju, krenimo na internetu. Dakle HTTP nije jezik. HTTP je samo skup standarda za kako poslati stvari od klijenata, koji si ti, na servere. To je drugi ljudi na webu. Dakle HTTP stoji za HyperText Transfer Protocol. To je srce i duša cijelog weba. Hypertext dio upravo odnosi se na HTML-u. Prijenos je klijentima kao što će poslati zahtjeve za poslužitelji, koji daju odgovore. A protokol je samo, kako je to Očekujete server ponašati? A kako ste trebali ponašati tako da možete pojednostaviti ovaj komunikacijski proces? Dakle HTTP zahtjeva izgleda puno kao što je ovaj. GET je vrsta zahtjeva. Momci su vidjeli GET zahtjeva i POST zahtjeva. Druga stvar koja postoji, / ja, to je samo URI ili URL gdje ste želim ići u domaćinu. Tako se ovaj zahtjev tražeći stranica, kao i www.facebook.com / mene. I to je zahtjev GET. I onda to HTTP/1.1, to je samo verzija HTTP koju koristite. To je gotovo uvijek 1.1. A tu je i hrpa drugih stvari previše. Vi zapravo možete ih vidjeti ako otvoriti svoju konzolu kada ste pregledavanja weba. Odgovori izgledati nešto više ovako. Gornji dio je, opet, tip HTTP koju koristite slijedi kod statusa. Dakle, 200 OK je sve ispalo. Ovdje je vaš sadržaj. Vaš sadržaj će slijediti. I onda će vam reći kakav sadržaja i drugih stvari previše. Šifre statusa, postoje neke važni oni koji bi trebali znati. 200 OK je kao i sve zlatne. Sve radi. 403 Forbidden. To ste vjerojatno vidjeli, ako ste zaboravili na chmod nešto ispravno. To znači da ne morate pravo dozvole za pristup koji na poslužitelju. To je kao da, ne, ne možete ga vidjeti. 404 znači da stvar ne postoji. Nije pronađen. Vjerojatno ste vidjeli da je puno. 500 interna pogreška poslužitelja je obično kao da je nešto pošlo po zlu na strani poslužitelja. Dakle, kada ste bili u provedbi pset7, ako ste imali PHP pogreške, te bi zapravo ići na stranicu i vidjeti cijela hrpa PHP pogreške stvari. No, to ne obično dogoditi, jer web stranice stvarno ne želim vam reći zašto je njihova stranica je slomljen. Oni će vjerojatno samo vratiti 500 interna pogreška poslužitelja. A tu je i 418 sam čajnik. Tu je cijela priča o zašto je to stvar. No, možete pročitati o tome u svoje slobodno vrijeme. Postoji cijela hrpa drugi status kodovi previše. No, to su one ti bi trebao znati. Dakle, pričajmo o HTML. HTML, zapamtite, nije programski jezik. To je jezik za označavanje. To znači da opisuje sadržaj. To vam govori što HTML dokument izgleda sviđa ili ne kako to izgleda ali kako se to strukturirano. Tako da definira strukturu i semantika web stranica. To je kao, to je stav. To je naredio popis. To je kao dio mog stranici. Evo naslov. To čini takve stvari. To ne oblikovati od bilo koje, zbog to je ono što vam je činiti u CSS. I to izgleda kao niz ugniježdenih oznake. Tako se koristiti primjer stvarno osnovne HTML stranica, imate DOCTYPE Izjava tamo. Ovaj DOCTYPE deklaracija govoreći, koristimo HTML5. Tada imate veliku HTML oznaku. Ona sadrži glave i tijela. Unutar glave, imate naslov. To je ono što ide u naslov bar po Vašem pregledniku. Imamo vezu oznaku koja povezuje u vanjskog stila. I onda imamo scenarij koji uvlači od vanjskog JavaScript i. A onda je unutar našeg tijela je zapravo što će se prikazati na stranici. Imamo točku, a zatim slika unutar tog stava. Ovo je jedna slika mačića. Uočite da je slika tag zatvara. Dakle, umjesto otvaranja sa slikom a onda rade drugi / slike, što samo ovo malo crtu Ovdje, koji ga zatvara. A slike tag također ima tu tipku Vrijednost atributa zove alt. To je alternativni tekst koji događa kada pređete preko njega. Većina HTML elementi imaju neku vrijednost ključa stvari koje ga mogu dati, razne prilagodbu. Da. PUBLIKA: [nečujan]. ANGELA LI: Pa, tako da je atribut oznake. Dakle, ako ste koristili jQuery, što bi Ne odaberete image.getAttribute. A onda možete tražiti dobiti alt atribut. A to će vam dati mačiće. Ako se sjećate forme u HTML, ulaz Elementi će imati naziv atributa. I to je ono što PHP koristi za slanje zahtjeva kada se obrazac podnosi. PUBLIKA: Jeste li spomenuti nešto o tome, ako koristite kittens.jpg ili nešto što je nestalo podnijeti mape ili druge datoteke? ANGELA LI: Da. Dakle, to je ono što se zove relativna put, jer ja ne odustajem što cijeli put. To je kao kad u C ako ne fopen neki file, ako fopen hi.txt, da hi.txt se očekuje da će biti u isti imenik, osim ako mu dati više složen put. Ivanković: Pa što bi moglo navesti koji folder [nečujan]? ANGELA LI: Da. A možete pogledati kako to učiniti. Ali, ako sam htjela da se kittens.jpg out na nadređeni imenik, ja bih to .. / Kittens.jpg. Da. Oprostite. Da. O, čovječe, zaboravio sam na to pitanje. Koje je bilo pitanje? Oh, pitanje je bilo je, kittens.jpg Očekuje se da će biti u istom direktoriju? I u ovom slučaju, to je. Ali, također možete dati mu određeni put tako da se ne mora biti. Dobro? CSS. Dakle, CSS, kao što su HTML, nije programski jezik. CSS je samo serija styling pravila. Ona se zalaže za Cascading Style Sheets. I što ga koristiti u kombinaciji s HTML-u u stilu stranicama. Dakle, postoje tri načina možete ga uključiti. Jedan od načina možete to učiniti u glavu dio HTML-a, možete samo otvoriti stil oznaku, a zatim staviti neke CSS pravila tamo. To je prilično u redu. Da. PUBLIKA: Možete li staviti one stil oznake između njih, neka je recimo, tijelo i / tijelo. A onda bi se styling samo u tijelu. ANGELA LI: Mogla bi. To ćemo raditi. No, da ne bi trebali, jer je styling vrste metapodataka koji bi trebao ići u Glava dokumenta. Tijelo treba stvarno samo sadrže što se zapravo događa na pojaviti na stranici. Ivanković: Pa što bih stavio stil u glavi kako bi stilu Cijela web stranica, zar ne? ANGELA LI: Da. Dakle, stavljajući stil ovdje, ove CSS pravila primjenjivat će se na cijelu stranicu na temelju njihovi selektora. Dakle bolji način da to učinite je umjesto da ima stil oznaku u glavu, imate ovaj link na vanjski stil List kao što sam ti pokazao u prethodnog primjera. Što to znači da pokušava i pronalazi podnijeti style.css a onda ga vuče i koristi to kao stilova za stranice. I vaš style.css bi baš izgledati ovako. To bi bila samo hrpa CSS. I na kraju, postoji još jedan način na koji može uključivati ​​CSS, koji je stvarno Ne treba nikada učiniti. To je poziv inline styling. I tako je bilo HTML element također može uzeti stil atribut. A onda u tom stilu atributa, možete dati CSS pravila. Dakle, u ovom slučaju, što god da sam div definiranja upravo ovdje, to će ima crnu pozadinu i Boja bijeli tekst. No, da ne bi trebali to učiniti, jer je ono to znači da se stavlja svoj styling unutar svog HTML. I znam da smo razgovarali o HTML-u je struktura i CSS stil. Ako ste to učinili, to miješa ih zajedno. I to ne baš čist. Dakle, ne radite to. Koristeći primjer CSS, tamo gore, da samo odaberite tijelo HTML dokumentarac. I mi smo kao, sve je će biti Comic Sans. Ja također ne preporučujemo. No, što bi mogao učiniti. Drugo pravilo ovdje, to se događa za odabir elementa na stranica sa ID početak. Dakle, što god HTML element, rekao sam ID = Glavni, ja ću dati da se 20-pixel marže i uskladiti sve, sve tekst, u sredini. Zadnja stvar koju odabire CSS klase. Dakle, bilo koji element na stranici koju sam dao razrednom odjelu, ja ću to napraviti boja pozadine svijetlo plave. Yep. To je sve što imam. Pitanje? PUBLIKA: Što hashtag Prije glavni učiniti? ANGELA LI: Pitanje je, što se hashtag prije glavne učiniti? U tom slučaju, u hash CSS znači odaberite po ID. Dakle, ako sam imao neke HTML elemente, kao što su podi = glavni, to CSS pravilo bira Stvar s ID glavnom. A isto tako, razdoblje pred dio je odabir strane CSS klase ili odaberite by HTML klasi. Ivanković: Zašto je ima prije 6 boja pozadine? ANGELA LI: Da. Dakle, pitanje je, zašto je tu hash prije 6? Ovo se razlikuje od tog mljeveno meso. To znači da ste davanje heksadecimalna boja. Dakle hex boje, to samo predstavlja boju. A sjećate RGB trojki kada jesi forenzike pset? To je slično. Prve dvije znamenke predstavljaju koliko crvena je u boji. Druga dvojica predstavljaju koliko je zelena. I treći predstavlja koliko plavo. I hash je ovo ide predstavljati boje. Dakle, ništa od 0, 0, 0, 0, 0, 0 do F, F, F, F, F, F vrijedi. To je neka valjana boja koje se mogu biti prikazan na Vašem pregledniku. Pitanje? PUBLIKA: Koja je razlika između korištenjem po ID i klase? ANGELA LI: pitanje je što je razlika između korištenjem po ID i klase? Možete imati samo jedan element u HTML dokument koji ima zadani ID. Tako je samo jedna stvar na mojoj stranici je dopušteno imati osobnu glavni ured. Tako da ga koristiti za to je header. To je orijentacija. To je footer. Nastava se razlikuju, jer možete primjenjuju se nastava za onoliko HTML elemenata kao što želite. Tako na primjer, ja sam razrednom odjelu, jer vjerojatno postoji više od jednog Poglavlje o mojoj stranici. Vi ste samo dozvoljeno da imaju što više elemente na stranici s istom klase, ali samo jedan s određenim ID. Ivanković: Pa dot predstavlja klase? ANGELA LI: Da. Dot predstavlja klasu. Cool. To je sve što sam dobio, dečki. Hvala Vam. [PLJESAK] ZAMYLA Chan: Bok, svima. Ja sam Zamyla. Ja ću biti pokrivanje PHP, MVC, i SQL danas. Puno materijala da ću biti pokrov će biti prilično pravo iz pset7. U redu. Dakle, ono što je PHP? PHP je kratica za PHP Hypertext Preprocessoru. Tako je, samo po sebi, rekurzivna ime, što je prilično cool. PHP je skriptni jezik strani poslužitelja, i daje pozadina i logični potpornjima naše web stranice. Dakle Angela puno govorio o HTML i CSS koji će napraviti strukturu na web stranici. Ali što ako želite to promijeniti Sadržaj dinamički ili ako to varira temelji na korisnika ili određeni uvjeti? To je mjesto gdje PHP dolazi u. Sada, u pravilu, PHP moglo potrajati nekoliko manje linije za provedbu istu stvar u C. To je zato PHP ručke memorije Uprava za programera, za razliku od nas imaju na malloc besplatno, takve stvari. No, budući da PHP je interpretativna jezik, u pravilu, to bi moglo izvršiti malo sporije od C, što je sastavio jezik. Budući da se krećemo programiranje jezika, pogledajmo kako Sintaksa će se razlikovati. Ajmo biti vrlo oprezni da ne zbune s tim. Tako je s PHP sintaksu, da li ste ugrađen svoj PHP unutar HTML datoteku ili unutar. php datoteku sama, što potrebno je priložiti kod u otvorenom PHP i zatvorene PHP oznake kao što su slijedi, kao što je na ekranu. Varijable u PHP-u. Svaki varijabla će početi s $ znak slijedi naziv Vaš promjenjiva. Sada, varijable u PHP-u slabo su upisali, što znači da ne trebate naznačiti kakvu vrstu podataka je kad si ga izjavljujući. Međutim, to ne znači da su oni nemaju bilo koje vrste na sve. Dakle, ako sam proglasiti varijablu i samo set je jednaka 1, a onda sam se proglasi još jedna varijabla, postavite je jednak "1" i onda još jedan 1,0, dobro, ovisno o vrsti jednakosti operateri mogu koristiti, ako želim uspoređivati u svim vrstama, a zatim oni će biti jednaki. No, ako želim da biste bili sigurni da vrste su jednaki, PHP još uvijek može učiniti da, iako ne pokazuju što tip je to kad smo Prvi bi datoteku. Sada, u PHP-u, iako smo prebacivanje iz programiranja jezika iz C, još uvijek imamo vjerodostojna, ako stanje, baš kao što je ovaj. Mi još uvijek imamo While petlje, samo kao što je ovaj, gdje ste stavili u svoj Stanje zatim Tijelo petlje. I onda mi također imamo za petlju, koji obično izgleda ovako. Dakle, ako sam htjela ponoviti preko svega Devet psets i dostaviti i poziv Funkcija submitPset, onda ja to mogu ovdje, što ti dečki su sve učinjeno po ovom trenutku. Čestitamo, usput. Za kameru, ljudi , rekao je, hvala na pitanju. Sada, ako ne želite koristiti samo ovo za petlju, onda PHP zapravo i ima stvari koje se zove foreach petlje. Dakle, ako sam imao niz brojeva, 0 do 8, pohranjene u polju psets, tada bih mogao imati foreach petlju da iterates preko svakog broja u psets. A onda bih mogao nazvati isto funkcionirati osam puta, baš kao što sam učinio prije. Dakle, ovo za svaku petlju je lijepo, jer ne moraju ako ne znate Točna duljina niza koji su, a zatim koristite ovu foreach petlju će se pobrinuti za vas. Tako sam napravio psets kao polje. Pogledajmo to. Nizovi u PHP-u su u pravilu isti kao one koje smo imali u C, gdje možete objaviti niz. I evo, ja mogu izjaviti prazno polje a zatim izgraditi dinamički pomoću indeksi su cijeli brojevi. Dakle indeks 0, idem za pohranu cijeli zove jedan. Na indeksu 1. mom popisu, idem pohraniti vrijednost 2. I na trećem indeksa, ali Drugi broj, idem pohraniti broj 12. Sada, to je u redu da se u radi to dobro radi. No, kažu mi je važno što svaki indeks drži. Za mene, indeks 0 označava kako mnogi mačke imam. I indeks 1 znači kako mnogi sove imam. A sljedeći znači koliko psi. Pa, onda se odrediti da, umjesto da pamtite 0 odnosi se na mačke i 1 do sove, mogu koristiti asocijativne polja, što znači da umjesto brojeva što mojih indeksa, Ja zapravo mogu koristiti nizove. Dakle, to je vrlo korisno. A vi ste zapravo samo zamjenjuje cjelobrojnike sa žicama. I tamo imate asocijativni niz. Da. PUBLIKA: Postoji li razlog zašto je donja za drugi dio, jer je moj popis ima niz. ZAMYLA Chan: Pitanje je, je postoji razlog zašto postoji naglašavaju između mog i popisu? Ne. To je samo kako ću imenovanja moja promjenjiva. Ivanković: Na prvi linije, to je jedna riječ. ZAMYLA Chan: Moje isprike. Sredit ću ja to. Da. Oni bi trebali biti isto ime varijable. Dobar ulov. OK. Pa krenimo na žici ulančavanje. Ako sam htjela uzeti dva niza, onda ih ja mogu spojite s operatorom dot. Dakle, ako ja imam Milo kao prvo ime i Banana kao prezime, a zatim spajanjem s operatorom dot i onda stavljajući prostor između će napraviti niz koji sadrži Milo Banana, koji sam tada mogu jeka ili, a, isprintati. Govoreći o odjeku, pričajmo o nekoliko korisna - Ups. Žao mi je. Nekoliko korisnih PHP funkcije. Dakle, imamo - tehničke poteškoće. Jedan drugi. Poslao sam. Problemi PowerPoint. I mi smo natrag s PHP funkcija. I mi smo natrag s PHP funkcija. Tako smo zahtijevaju funkciju, gdje je ako prođe u datoteku, evo je samo Primjer datoteke koje Možda ću proći u. Tada koja će uključivati ​​PHP kod iz tog spisa koji sam ukazati. I to će procijeniti da je i. Onda imamo i jeka, koji je paralelno s printf. Exit je paralelno razbiti, koji izlazi iz bloka kod koji ste u. I onda prazne provjerava je li s obzirom varijabla je kao null ili nulu ili god je izjednačen s bude prazna. Da. Ivanković: U gudački ulančavanje dot operator jedan, u PHP-u, jest da Isto kao u JavaScriptu gdje je pomoću dot za ulančavanje znači plus? Pa za ime i prezime, što bi moglo imati dolar potpisati prvi + + a onda trajati? ZAMYLA Chan: Da. Dakle, pitanje je hoće li u PHP smo Možete koristiti isti string ulančavanje kao u JavaScriptu s plusa. I Josip će se u to kasnije. Mislim da on ima slajd na to. Zapravo, to je nešto drugo. Tako je u JavaScriptu, morate koristiti plus da spojite žice. I u PHP-u, morate koristite operator dot. Dakle, oni su drugačiji. OK. Dakle, sada kada smo pokriveni svi to PHP, gdje se radi doista doći u ruci? Pa, to dolazi u ruci kada smo Možete ga kombinirati s našim HTML. Tako je naša PHP će nam dati snagu za alter-a stranice HTML sadržaja prije njezina utovara. Dakle, na temelju različitih uvjeta, obično specifičan korisnik koji je prijavljeni, možemo prikazati različite informacije. Linda, jesi li pitanje? PUBLIKA: Može li spojite cijeli također? ZAMYLA Chan: Da, možete. Dakle, pitanje je, ako je moguće spojite cijele ili drugi variable.s sad, idemo dalje s MVC, koji je paradigma koja nam koristi u pset7 i puno web dizajnera koristiti za organizira kod u datotekama u svoje web stranice. M je oznaka za model. A u osnovi, model datoteke će nositi interakcijama s bazom podataka. Pregled datoteke, koje se odnose na Estetika web stranice. A kontrolor ručke zahtjeva korisnika, analizira podataka, obavlja i druge logike. U pset7, u kombinaciji smo model i kontroler. A mi ih samo nazivaju regulatori i stavite ih u javni imenik. I pogled slika, možemo ih koristiti kao predlošci u predloške imeniku. Dakle, ovaj dijagram ovdje također predstavlja da je ista vrsta podjele s model i kontroler u ljubičasto Ovdje na lijevoj strani i Pogled na desnoj strani. Dakle, ovo je shematski da su neki od vas Možda ste vidjeli na radnog vremena ili Dijagrami da smo bili crtež kao ti su figuring out pset. Pa evo, u određenom kontroler, Model kontroler, imamo funkcije koje se odnose na upite SQL baza podataka, izvršavanje PHP logiku. Možda bi pogledati dionica u Yahoo! Finance. Ili možda, što bi samo provjeriti da vidjeti je li korisnik predala formirati već prije nego što posjetio svoju stranicu. I onda će uzvratiti formirati ovamo. Nakon što je ustvrdio da oblik od strane korisnika, akcija koja je specificirano u obliku HTML tag ukazat će na stranicu koja je vraća podatke koji se. Dakle, sve te informacije će biti poslao natrag u svoj kontroler. Onda će vjerojatno napraviti nešto više Logika na to i možda izvršiti neke više upita u SQL bazu podataka i onda, konačno, doći do lijepo upakiran skup informacija koje bi prolaze u nekom drugom predlošku koja prikazuje tu informaciju. Sada, kako ćemo zapravo paket da informacije do? Pa, imamo funkciju nazvanu Render da je bio u functions.php datoteke u pset7, gdje ćete proći u ime datoteka, naziv predloška. I onda je i prošla u asocijativni niz. I tako da asocijativne matrice predstavlja različite informacije da želite proći u. Sada, ono što će biti konstanta u ovi primjeri je da su tipke ili, a, ključevi asocijativne polja, oni su ono što će biti Očekuje se da će biti konstantna predloška, jer zna što treba nešto što se zove poruka ili nadjene ime. A onda su se stvari na pravo, stvarne vrijednosti, tako da u ovom slučaju, koji je dobar dečko i Milo, one idu da su vrijednosti koje se mijenjaju da kontroler mijenja svaki put ili na temelju određenog stanja i će proći da se u. Pa ovdje u predlošcima, vidimo da smo koristite HTML posebnih znakova, koji je samo u osnovi znači da želimo dobiti vršnjaka niz koji Korisnik staviti u. I želimo nadomjestiti Poruka tamo. Pa onda kada smo zapravo vidjeli datoteka, specifični informacija je prošao u. Imajte na umu da je ključ kako donijeti radove je da su tipke na asocijativne polja, one postaju varijabilni imena ovdje. I tako su vrijednosti tog ključa u asocijativne matrice onda postaje vrijednost u varijable. Sada, neka je premjestiti na SQL. Ona se zalaže za Strukturirani Upitni jezik. I tako to je samo za programiranje jezik dizajniran za upravljanje bazama podataka. I to je došao u ruci za nas u Naša web stranica financije pset7. U osnovi, to je samo jednostavan način praćenje i upravljanje objektima i tablice i povezati ih međusobno. Sada, misliti na svoje SQL baze podataka osnovi kao Excel datoteke, možda, s višestrukim karticama listova. Tako da bi mogao imati više tablica, Možda, koji međusobno povezani. I baš kao Excel, imamo puno funkcionalnosti koje želimo. Na primjer, možemo odabrati pojedini redovi. Možemo umetnuti informacije. Možemo ažurirati redaka. I mi također može izbrisati stvari. SQL odabir radova odabirom redaka ili red navedenih stupaca iz baza podataka koja odgovaraju određeni Kriteriji koje ukazuju. Dakle, ovdje kad vidim SELECT * FROM čarobnjaci gdje house = Ravenclaw, zatim Ja sam odabirom *, što znači da sam Odabirom svaki stupac u koji red od stola čarobnjaci, ali samo ako Kuća stupac jednak Ravenclaw. Sada, to je čista ili SQL. Dakle, ako sam otišao u phpMyAdmin, što je specifičan način na koji koristimo za upravljanje naši SQL baza podataka, onda sam mogao umetnuti da je na web stranici phpMyAdmin. A to će izvršiti. No, mi zapravo želite učiniti da na PHP strani. Pa kako ćemo to učiniti? Pa, mi koristimo upita funkciju, koja osnovi izvršava da SQL upit. Koristeći? kao rezervirano, možemo proći u određenim Vrijednosti našem niz koji smo želite zamijeniti. Dakle, možda sam pohranjivanje drugačije Vrijednosti u curr_house, koji predstavlja trenutnu kuću da ću kroz. Dakle, ja mogu proći da u kao rezervirano s upitnikom. A onda ću osnovi izvršavati Ista stvar kao što sam učinio prije, osim Sada sam u PHP. I upit će vratiti asocijativni niz. A ja ću ga pohraniti u redovima. Sada, upita se uvijek može uspjeti. Možda SQL upit nije mogla izvršiti jer stol nije postojao. Ili možda, stupac nije postojao. Nešto je pošlo po zlu. Pa, u tom slučaju, da ćete želite napraviti sigurni da provjerite je li upita vratio lažna. I to je pomoću triple jednak rad tamo. A onda se ispričavam, što je još jedan CS50 funkcija, prolazi u poruci. I ako pogledate u ispričati, sve to uistinu je donijeti apology.php. Da. PUBLIKA: Možete li objasniti što to Zvijezda se između odabir i iz? ZAMYLA Chan: Da, apsolutno. Pa star između odabir i iz znači da želim odabrati cjelinu Cijeli red od mog stola. Mogao sam naznačeno odaberite ime, godine, kuću. I ja bih samo da se ta tri stupovi u mom stolu. Ali, ako kažem SELECT *, onda ću dobiti sve što je u toj koloni. Onda ću vam ide na stražnjoj strani prvi. PUBLIKA: Dakle, ovo je još uvijek u SQL, zar ne? Je li to pitanje ili je to PHP? ZAMYLA Chan: Mi smo u upitu. Tako je to u PHP-u. Dakle, pomoću PHP funkcija upita, mi smo izvršavanju SQL upit. PUBLIKA: Je li išta u SQL mala i velika slova, kao i odabir ili čarobnjaci ili kuću? ZAMYLA Chan: Je li išta u SQL velika i mala slova? Vjerujem da jest. Vjerujem da je odabir i IZ i gdje su velika i mala slova. Ne? ROB Bowden: Dakle, to je suprotno. Nazivi stupaca i stol sredstva, sve su to velika i mala slova. No, bilo koji od MySQL ključnih riječi, kao što su SELECT, iz, i gdje, to nisu mala i velika slova. OK. Dakle, suprotno od onoga što sam rekao. Dakle, sve MySQL ključne riječi - odabir, iz, gdje je - onima nisu mala i velika slova. No, sve ostalo je. OK. Vi u prednjem. Ivanković: Ako sam $ redaka u smislu više od jednog retka, znači li to da je samo postaje asocijativne matrice? ZAMYLA Chan: Dakle, pitanje je, ako redovi ima više od jednog retka u njemu, ne je postala asocijativne matrice? Dakle, to je niz asocijativne nizovi već. Dakle, čak i ako postoji samo jedan red vratio, onda bih morati ići na indeks 0 od tog rezultata. I onda bih imati taj prvi red. Da, Belinda? Publika: Kada koristite ===, je to jedini primjer? Ili su tu ostali? ZAMYLA Chan: Dakle, u ovom slučaju, === je usporedba u cijeloj vrste. Oprostite. === Je usporedba koji uspoređuje vrste. I onda == uspoređuje u svim vrstama. PUBLIKA: Možete li objasniti što redaka je u ovoj situaciji? Je li to red podataka? ZAMYLA Chan: U sljedeći slajd, ja sam će objasniti što se redovi. Dakle, ako vam ne smeta održavanje off na to. I onda u leđa? PUBLIKA: Za funkcije kao što upita, donijeti i ispričavamo [nečujan]? ZAMYLA Chan: Pitanje je hoće li te funkcije - upita, ispričati, i učiniti - uobičajene su širom PHP. To su one koje CS50 napisao za pset7. I Jay? Publika: Kada trebate reći $ _SESSION, Je da je samo za osobne iskaznice? Ili bi rekli ste da je ovdje? ZAMYLA Chan: Dakle, pitanje je, kada je koristimo $ _SESSION, koji je specifičan Globalna varijabla koja koristimo. Evo ova varijabla će biti lokalni našem funkciji. Dakle, mi samo proglašenje nova varijabla. PUBLIKA: Kako se ispričati provodi? ZAMYLA Chan: Pitanje je bilo, Kako se ispričati provodi? I mislim da je to zapravo prilično Dobra praksa za vas dvoje da ide u functions.php sekcija i pogledati Ispričavam se i vidjeti kako ste mogli imati to učiniti sami. Tako sam se ostaviti da se za vas, ali samo kažu da ako pogledate ispričati, onda to traje poruku koju podnosi se ispričati, a zatim ga čini tu poruku. Bilo više pitanja? Volim pitanja. Zato ih se uvijek rado. PUBLIKA: [nečujan] echo ili print postoji? ZAMYLA Chan: Pitanje je bilo, mogli smo ne samo stavili echo ili print postoji. Tako da bi učinio nešto malo drugačiji. To bi tiskani upit nije uspio u to - dobro, sad, mi smo zapravo u našem kontroler. Dakle, mi zapravo ne moraju HTML postaviti ovdje. Apologize dovršavanjem apologize.php zapravo vas preusmjerava na apology.php. OK. Pa sad, idemo na odgovore Pitanje od ranije o tome stvarno je redovi. Pa, upit će vratiti Niz redaka. I svaki redak je zastupljena strane asocijativni niz. Dakle, ako sam izvršava neku SQL upita i Ja sam pohraniti rezultat u redovima, a zatim pomoću foreach petlju, a zatim niz Naziv je prva tamo - redovi. A onda ću nazvati svaki redak u tu $ zaredom. Dakle iterating preko toga, ja mogu onda pristupiti određenom redu je ime stupca, godine stupac, a kuća stupac. Imajte na umu da ne bih bio u mogućnosti to učiniti s reda, jer redovi INDEX Naziv ne postoji. Redovi je samo niz asocijativne nizove. Dakle, imate dvije razine postoje. Nakon što ste niz redaka, moraš se u to. A onda možete pristupiti stupce. Je li to jasno? Da, ispred? PUBLIKA: [nečujan] otvarati nosači za [nečujan]? ZAMYLA Chan: Pardon? PUBLIKA: Otvorena zagrada. ZAMYLA Chan: Ovo ovdje? To je što mi uključiti da je varijabla. Da. Ivanković: Kad ste ispisali, jeste li tiskanje u HTML kodu? ZAMYLA Chan: Da. Kad sam ispisati, ovo ovdje je unutar moj predložak sada, tako moj pogled na MVC način. Dakle, ja sam ispis u HTML. Ivanković: Pa, ako smo ušli u developer alata nakon pokretanja toga, što smo mogli da je zapravo u kodu? ZAMYLA Chan: To je super pitanje, da. Dakle, ako je otišao u razvojne alate u Firefox pomoću palikuća ili Chrome, onda da, što ste mogli vidi određeni HTML. Dakle, to ne bi pokazati $ red ["Ime"]. To će pokazati koje god ime je u tom nizu. PUBLIKA: Samo je pitanje općenito, ono što su tr i td definira kao? Zašto bi mi [nečujan]? ZAMYLA Chan: Tablica tr red, Tablica onda td kolumnu. OK. Publika: Da, to je data tablica. ZAMYLA Chan: Podaci tablice. Da. Ivanković: To je red u kojem red je tretiran kao stup? ZAMYLA Chan: Žao mi je. Može li to ponoviti? PUBLIKA: Kako što bi vizualizirati redaka? ZAMYLA Chan: Kako bi ste vizualizirati redovi u kakav način? Pričaš to redovi ovdje ili TR redovi? PUBLIKA: Redovi. ZAMYLA Chan: Ovi redovi ovdje? Ja bih zamisliti to kao Ja izvršavanje moj upit. A ona kaže, u redu, ja imam biti od 0 do n iznos redaka koji ispunjavaju kriterije da je ispitan. Dakle, imam neki broj redaka. Dakle redovima, dolara redovi, trgovina svaka jedan od onih redaka u nizu. Dakle, čak i ako je to samo jedan od njih, to je još niz redaka koji ga odgovaraju. Dakle, na primjer, to slično kada preuzeta cache memorije od korisnika. A kriteriji bilo gdje ID jednak ID sesije. Postoji zapravo samo jedan red koji bi mogao odgovarati. No, još uvijek redovi upravo vratio jedan red. Tako da ćeš morati ići u redovima, indeks 0, indeks cache zapravo doći do svog cachea. PUBLIKA: Je li funkcija za ispis u odjekuju istu stvar? ZAMYLA Chan: Da. Da. Ispis odjek iste. PUBLIKA: Je foreach petlje Jedini način da se indeks u redovima? ZAMYLA Chan: Je foreach petlje Jedini način na koji možete ponoviti kroz redove? Ne. Također možete koristiti za petlje, pod uvjetom da znate duljinu od niza redak-a. PUBLIKA: Možete li mu pristupiti pomoću red kao [nečujan]? ZAMYLA Chan: Dakle, ne možete mu pristupiti samo pomoću red, ako nemate foreach petlje uvjet da niste proglasili red. Da. Da, u bijelo. Ivanković: Pa što tr i td učiniti? ZAMYLA Chan: Pa i tr td su HTML tagova. tr ukazuje na početak od redak u tablici. I jedni td ukazuje Novi podaci stupac tablice. PUBLIKA: Za vizualni onoga red je kao, samo zamislite SQL, kako oni imaju red. [Nerazumljivo]. ZAMYLA Chan: Da. To je velika stvar. Možete zamisliti kako je tek reda kao u Excel tablicu, samo Popis redovima. OK. U redu. Dakle, sad kad smo otišli na odabir, ukoliko ne postoje nikakvi više pitanja, mi ćemo prijeći na umetkom. Dakle, ako sam htjela umetnuti u neki stol i stavite određeni stupac vrijednosti, mogao sam umetnuti u Ravenclaw u 7. godini. No, ponekad možda postoji duplikat vrijednosti, kao što smo vidjeli u pset7 kada smo su osvježavamo portfelj. Dakle, u ovom slučaju, želimo koristiti na Udvojen ključ UPDATE, tako da mi ne pohraniti više redaka s istim Cijenimo nego ga ažurirati. Onda mi zapravo ažuriranje, koji nije umetak. To je samo nadogradnja gdje se ažurirati u određenim stolom s obzirom Kriteriji i onda, na kraju, izbrisati, koji radi vrlo sličnu stvar. PUBLIKA: Možete li ukratko ići preko duple ključ? ZAMYLA Chan: Da. U biti ovdje, moram umetnuti u Gringotts, je, galije, te vrijednosti. No ID, navodno, je jedinstveni ključ Vrijednost postavljen u MySQL tablice. Dakle, ako sam već da je ID postavili, onda ja ne mogu umetnuti novi redak. Dakle, ako to ne postoji, već onda moram ga ažurirati. U sredini u bijeloj. Ivanković: Pa umetanje, ažuriranje, brisanje i odaberite, su oni svi dostupni lokalno [nečujan]? ZAMYLA Chan: Dakle umetanje, ažuriranje, brisanje i odabrali su svi SQL upita. Dakle, svaki put kada koristite SQL, imat ćete one dostupne. Ivanković: Povratak u posljednjih kvizovi - bilo je pitanje koje se bavila ako ste imali stol i htjela umetnite test rezultate u jednom, a vi stavite tvoje ime, tako da vas neće pustiti [Nečujan] prijateljica rezultat testa. Kako bi to učinio s umetkom? ZAMYLA Chan: Dakle, pitanje je bilo o natrag srednjoročni pitanje. Nisam svjestan što jedna je upravo sada. Dakle, možda nakon toga, ako želite doći i pokazati mi, onda ja mogu Sigurno vam dati savjete. No, govoreći o umetanja stvari, kao što su uzimanje nečijeg rezultat kada Ne treba, pričajmo o SQL injection napada. Dakle napad SQL injection je u suštini gdje netko vodi prednost niske sigurnosti način na koji uzimate u podacima. Dakle, ovdje, baš kao u CS50 financija, kad smo prijavljeni, možemo ući u korisničko ime u obliku prijave, Prvi okvir za tekst, a zatim ući u lozinkom. Možda naš PHP kod može izgledati nešto poput ovog, gdje je $ username je username post-data i lozinka je lozinka za post-data. I onda mi samo možemo obavljati svoj upit, recimo, OK, dobro, naš upit će odabrati iz naše korisnike, gdje korisničko ime je onaj koji se podnosi. A lozinka je lozinka, što znači da su lozinke odgovarati. Sad, što ako umjesto zapravo Slanjem stvarnu lozinku, kao što je 12345 i nagađanje na zuba koji govori lozinkom i pokušava hack njihova računa, što ako umjesto , ustvrdila je to. Oni su mogli upisati možda Pretpostavljam po lozinkom. I onda bi završiti citat zatim upišite ili 1 = 1. To bi tempo izravno u SQL upita izgledati nešto poput ovoga. Odaberite od korisnika gdje je username = zubaca i lozinkom jednako ljiljan ili 1 = 1. Dakle, bilo je lozinka ima biti točna ili 1 = 1, koja je uvijek istina. Dakle, u ovom slučaju, u osnovi, korisnik može iskoristite to i samo se prijavite sami i hack nečiji račun. Zato želimo izbjeći netko tko ima za to. No, na svu sreću, funkcija upitu prolazi u rezervirana mjesta će se briga za vas. Isto tako, da ćete obično nikada ne želite zapravo dostavi lozinke sami. Zato smo raspršen ili kodiran ih u CS50 financija. PUBLIKA: Prošlost kviz govorio oko MySQL žice pobjeći. Moramo li se brinuti o tome? ZAMYLA Chan: To je dobro pitanje. MySQL escape nizovi je definitivno Funkcija koja se rabi u našem upitu. Ali definitivno gledati u to. Ja bih rekao da je to fer igru ​​znati koji bi nam trebao pozvati da funkcionirati na konac. Da, Belinda? PUBLIKA: Kako znate kad je jednokrevetne citati ili dupli navodnici? A isto tako, osjećam se kao u predavanju ste spomenuo nešto o nemaju [nečujan] ili nešto ili Drugi singl quote na kraju. Mislim da je on istaknuo u predavanju koje ti si trebao imati apostrof 1 i onda ne moraju apostrofe ili tako nešto. PUBLIKA: [nečujan]. PUBLIKA: stvar je posljednji singl citat tamo u toj drugoj kutiji Ne bi trebao biti tamo. [Nečujan] Jer kad se uzme da je posljednji singl citiram van i podudaraju s ovim za sadržaj gdje je lozinka, ako imate da upita, postoji jedan citat na kraj već. Vi želite koristiti taj jedan citat kao onu koja je okrenuta prema jedan [Nerazumljivo]. Dakle, ono što je zapravo u tom tekstu okvir ne bi trebao imati to. ZAMYLA Chan: Ja ću to promijeniti. OK. Ako ne postoji bilo kakva pitanja, onda ću to prođe preko Josipu razgovarati o JavaScript, et cetera. [PLJESAK] JOSEPH ONG: Dakle, mi smo trčanje malo iza. Dakle, ako morate napustiti, to je u redu. No, mi tražimo da zadržite svoje glave dolje ako si u sredini, tako da nemojte blokirati fotoaparat i koristite natrag izlaz ako morate. Ja sam Joseph usput. Bok. Test, test. Dan, je li to dobro? Cool. Dakle Video također će biti objavljena online za one koji moramo ići. Nespretan. OK. Dakle, kviz pregled. To je mačka. Sada, JavaScript, što je možda i ne kao Aww za neke od vas. OK. Dakle, to je prvi put, pozvati iz Zamyla. Sjetite se da je PHP izvoditi na poslužitelju. I puno puta, ti dečki pisao petlje u PHP ispisati HTML, zar ne? Tako je jednom da je kod izvršava, da HTML izlaz koji vam ispisati dobiva šalje korisniku. A kada se to dogodi, nema više PHP može se izvoditi, osim ako se ponovno učitati stranicu, od Naravno, što reexecutes PHP. No, jednom kada ispisati taj HTML, ne možete ići bilo gdje. Tako da HTML je poslao preko do korisnika, što je preglednik ovamo, gdje Milo se pomoću računala. I tako dobro, postoji nekoliko stvari Jednom mi poslati HTML za korisnika. Ponekad želimo učiniti nešto slično kada kliknete na nešto, što želimo upozorenja kutije za pop-up, one vrste interakcije, kao kad pritisnete Ključ, kada kliknete na nešto stranica, želim da se nešto dogodi. Pa, ne možete reexecute PHP Šifra jednom da HTML je postavljen. Pa kako ste to učinili? Mi uvesti novi jezik zove JavaScript, koji traje u pregledniku koji vam omogućuje da radimo stvari u HTML nakon što dobijete ih s poslužitelja. I to je razlog zašto smo ga na strani klijenta zvati programski jezik. Ona radi na računalu - klijenta. Sva pitanja oko koje do sada? To paradigma ima smisla za ljude? OK. Dobro. U redu. Dakle, prva stvar na umu je JavaScript nije PHP. Oni imaju neku drugačiju sintaksu, što ćemo ići u. I oni imaju vrlo različite namjene. JavaScript, opet, za svoje Preglednik, za klijenta. Server radi negdje na tuđem Računalo koje šalje podatke vama, ispraviti? Dakle, ako smo vas pitati za pisanje PHP kod na ispit pitanje, nemojte pisati JavaScript i obrnuto. Samo ćete izgubiti bodove, i to neće biti dobro. Tako ćemo doći u neke sintaksa razlike - JavaScript lijevo i PHP na desnoj strani. Prva stvar koju ćete primijetiti s JavaScript, izjavljujemo varijable s var ključna riječ - V-R. PHP koristi znak za dolar, kao Zamyla objašnjeno ranije. Ako želite proglasiti asocijativni polje, vidimo poznate sintaksu na desna strana s PHP. Na lijevoj strani, umjesto koristite vitičastim zagradama. A onda vaši ključevi su na lijevoj strani. Tada imate debelo crijevo. I onda imate vrijednosti koje želite. Dakle, ovo je način na koji će to učiniti u PHP Na desnoj strani, s tom trenutku linija koja počinje u Mila. I to je način na koji će to učiniti na lijeva strana u JavaScriptu ako želite ono što mi zovemo objekt. I objekti u JavaScriptu su samo asocijativne nizove. Dakle, ako želite pristupiti polja, u PHP koristite ovaj nosač sintaksu. I na ovaj način, možete prenamijeniti Taj vlasnik polje za Lauren. Pa, u JavaScriptu, ako se želite pristupiti polje i to promijeniti, možete koristite dot sintaksu. Također možete koristiti sintaksu nosač. No, ne možete koristiti dot sintaksu u PHP-u. To neće raditi. To radi samo u PHP-u. I na kraju, za ispis stvari konzola, možete koristiti console.log, koji ti dečki koriste puno u pset8. Možete console.log to. Ako želite ispisati niz u PHP, morate koristiti za ispis r. I na desnoj strani, vidjet ćete i mljeveno meso Niz ulančavanje tamo. Netko je pitao ranije. Koristim plus u JavaScript. Ako želim da se spojite nešto u PHP-u, ja koristiti točku. To su različite. Ako ste pisanje PHP kod, nemojte koristiti plus. Ako pišete JavaScript broj, ne pisati točku. To će biti u redu. A vi ćete biti tužni. Dakle sintakse razlike. Znate svoj sintaksu, jer ako morate napisati pitanje, a vi koristite sintaksu iz pogrešnom jeziku, to neće raditi. I to će biti u redu. Tako ćemo govoriti o nekom kontrolom teku razlike, kako koristite petlje u svakoj od njih. Zamyla otišao preko desne strane. Stvari na desnoj strani trebao biti upoznat. Pogledajmo na lijevoj strani. Kada koristite za n petlje u JavaScriptu, Vaš varijabla petlje, var i tamo, loop preko tipki na polju. Pa vidite ime, kuću i ulogu. Ako sam console.log ja, ja dobiti Naziv, kuća, a uloga. Oni su ključevi. U JavaScriptu, foreach petlje ide iznad vrijednosti tog polja. Tako ćete primijetiti da su obojica ja. No, ovdje na PHP strani, ispisuje iz Mila, CS50, i maskota. To su vrijednosti u PHP-u. Dakle, to su kako se radi o dvije različite na različitim jezicima. Dakle, ako ste koristeći foreach petlje, nemojte pretpostavljati da je vam daje ključeve. A ako koristite za n petlje, ne Pretpostavljam da vam daje vrijednosti. Da li to ima smisla do sada? Sljedeći slajd će vam pokazati Kako možete pristupiti suprotno u svaki od njih. Pa, ako imate ključ u JavaScriptu i želite vrijednost out, vi samo indeks u polje s tim. Dakle Milo of ću dobiti ono što želite - vrijednosti. Tu je ovo drugačija sintaksu u PHP. Ako stvarno želite znati, ne znam Mislim da smo pokazali da vas još. Ali, ako ste zainteresirani, možete koristiti ovo dodatno sintakse na desnoj strani strana koja će zapravo neka ste dobili Tipke u PHP kada koristite foreach petlje. Dakle, samo malo trivijalnosti ako ste zainteresirani. Dakle, to je samo da se pokažu razlike između ove dvije petlje. Nemojte ih pomiješati kad ste programiranje pitanje. Sva pitanja oko toga. Cool. U redu. JavaScript objekti. Razgovarao sam o njima. Oni su poput asocijativnih polja. Jedna stvar Želio bih vam napomenuti ovdje je da je vrijednost u asocijativne polje može biti bilo što u JavaScript. To čak može biti funkcija, kao tamo. Imam funkciju koja je vrijednost ključa. A ako želim nazvati tu funkciju, Upravo sam pristup koru. A onda sam stavio zagrade Nakon toga. I to radi. Znači li pitanja? Ne? OK. Dobro. JavaScript, kao što su PHP, je labavo upisali. Što to znači? To nema vrste. No, kada se proglasi JavaScript promjenjiva, kažeš var ja. Vi to ne kažu. To nije stvar. Vi samo reći da je varijabla. I onda JavaScript će nositi Vrste ispod haube za vas. Možemo slobodno pretvoriti između vrste zbog toga. Tako sam počinje kao broj u ovom slučaju. I onda imam niz. A ja mogu dodati na njega. I ja sam ga prenamijeniti natrag u i.. Tako se na toj prvoj liniji, Ja je broj. Na drugoj liniji, i sada postaje Niz nakon što sam obaviti preraspodjelu. I evo, ja sam samo nadovezivanjem taj broj na žici. Pa vidite da je, iako sam bio broj u prvom dijelu, to je nekakav o kao što se pretvara string, a zatim se dodaju na taj pozdrav nizu. I to je ono što mislim rastresitim tipkanje. To je da pretvoriti između vrste vrlo jednostavno. I to ne baca upozorenja na koju se sviđa C radi. Tako sam sada sadrži Pozdrav 123 na žici. Next. Također, slobodno mogu usporediti između vrsta. Dakle, ako ste samo koristiti ==, jako puno kao u PHP, JavaScript radi sličnu stvar. Niz 123 je isti kao i broj 123 kada koristite dvostruki jednakima. Kada se koristi trostruki jednakima, ona također želi osigurati da tip je isti. Pa zato što je to niz i da je broj, iako su obojica 123, kada koristite triple jednaka, te dobiti lažno. U dvostruko jednako tako, onda se istina, Zbog dvostruke jednaki ne stalo tipa. Triple jednaki ne brine o tipu. Pitanja? OK. I još jedna stvar o JavaScript je Opseg je vrsta globalno ako nisi u funkciju. I to radi isto Način na PHP zapravo. Dakle, idemo kroz ovaj primjer. Ja postavljam na 999. A onda idem u ovaj za petlju. Dakle, ako sam ja tiskanje u ovo petlje, očekujem 0, 1, 2, 3, 4. Ja bi se i = 4. To povećava i sada na 5 na kraj za petlje. I onda se lomi iz petlje, jer ne ispunjava uvjetovati više. Što mislite da će iduće console.log ispisuje? Dakle, to je ono što će se učiniti u C. U C, jer ako imate kao var i izvan i imate var sam u petlju, kao i za petlju, onda to čini tako da to je scoped da dva Ja je različita. U JavaScriptu, to će samo tretiraju ga kao isto i ja. I dobiti 5, jer je to bila vrijednost Nakon što je izašao iz petlje. Dakle, one koji mi je isti ja. Ima li to smisla? Pa, to ima smisla s JavaScript stajalište. Ali isto paradigma ne prenosi se C. Imaju različita pravila djelokrugu rada. Da. PUBLIKA: [nečujan] izvan [nečujan] funkciji? JOSEPH ONG: Dakle, izvan koje funkcija? Tako da ću doći do toga samo na sekundu. Tako mi zovemo foo (i). To prolazi sam u Foo, koracima je, a onda ga prijavi. Tako je bilo 5. Tako ona postaje 6. No, ono što ja pričam je da sam u toj funkciji. Zato što je to parametar, to je scoped na toj funkciji. Dakle, nakon što sam zapravo dobili od toga funkcija, to je sada ići povratak na stari ja. To mi je scoped samo zato to je u funkciji. I mi smo opseg i funkcije. Ali nemamo opseg izvan funkcija u JavaScriptu. Ima li to smisla? Da. Pitanje. Ivanković: Sve [nečujan]? JOSEPH ONG: Pa da. U PHP-u, to je ista vrsta stvar. Tu je blagi suptilnost zapravo. No, možete me pitati o tome da nakon pregleda. Zapravo ne trebate znati da suptilnost za kviz. Za sve namjere i svrhe, kao što su varijable, globalne i PHP, osim oni su u funkciji, isti stvar je u JavaScriptu. Da. Ivanković: Zašto je to dopušteno u JavaScript i nema gdje drugdje? JOSEPH ONG: Pa zašto je to dopušteno u JavaScriptu, a ne u C? To je samo onaj tko je smislio JavaScript je odlučio da je to u redu u JavaScript. Dakle, to je samo kao programski jezik konvencija, kao što bismo rekli. Da. Ivanković: Pa zašto to ide 6-5? JOSEPH ONG: Tako je otišao 6-5, jer kad sam prošao sam u foo, da I unutar Foo sada scoped da foo, jer je opseg postoji u funkcijama u JavaScript. No, nakon što sam odavde, jer je je scoped na tu funkciju, samo sam koristite redovito sam da je unutar Ostatak toka kontrole. Smisla? Mogu li krenuti dalje? U redu. Cool. Prihvaćanje je to predmeti donosi referencu. Znate kako je kada prođe niz u C da bi mogao zapravo izmijeniti niz? To je ista stvar u JavaScript. Ako sam proći objekt, u ovom slučaju, ja prošlo Milo u ovoj catify funkciji. Milo počinje. Njegovo ime je Milo Banana. I prođe taj objekt u funkciji zato što je objekt, asocijativno polje u JavaScript. Kad sam se obavljaju operacije u toj funkciji, to će zapravo promijeniti objekt. Dakle, to će se dogoditi samo za objekte u JavaScript, baš kao što će se dogoditi za polja unutar C. Dakle Milo ime zapravo će postati mačka sada. Ima li to smisla? Tako se to radi samo za objekte. Objekti su prošli pozivanjem. Da. PUBLIKA: Kažeš da za razliku od varijable i. JOSEPH ONG: Da. Koja varijabla bio sam samo broj, zar ne? To je kao u C kada prođe cijeli broj, čini kopiju. A kad prođe niz, on zapravo mijenja stvarni niz u C. Ista stvar se događa s JavaScript je u ovom slučaju. U redu. I pored, Milo je tužno, jer on je sada mačka. To je zapravo Milo poslije neki izlet veterinaru. Pa kako ćemo koristiti JavaScript na web stranici? Mi to možemo uključiti. To je HTML koda sa striptiz tagova. Dakle, imam strip oznake tamo. A onda sam staviti neke JavaScript Kod u pismu tagova. I onda izvršava ovo. Kad sam samo to učiniti kao što je ovaj, to je zove inline JavaScript. Nekako je neuredan, jer JavaScript je zapravo u HTML. Bolji način da to učinite, puno ljepše, je napisati JavaScript u vanjske datoteke, a zatim pružiti Skripta tag s izvora. A to će ići u tom JavaScript datoteku i čitati JavaScript kôd iz da podnese umjesto. I na ovaj način, ne morate puno JavaScript je na početku svog HTML datoteke, što čini to stvarno neuredan. Vi samo ga staviti negdje drugdje. A onda će ga pročitati od tamo. Je li to smisla? Pitanjima plasman. U ovom konkretnom slučaju, Scenarij je pred tijelom. Dakle, kad sam izvršiti da, postoji ništa u tijelu još. Možda će to napraviti malo više osjećam kad sam pokazati sljedeći dio. U ovom slučaju, skripta dolazi nakon što je div. Tako zapravo pojavljuje div Na stranici na prvom mjestu. Upravo ovdje u ovom malom crvenom krugu, vidite pojavljuje tekst. I onda upozorenje pojavi. U prvom slučaju, jer scenarij bio prije div, upozorenja prikazuje se na prvom mjestu. I onda div pojavi nakon li odbaciti okvir. Dakle izvršenje pitanjima. Tako ćemo imati to na umu. To će biti važno u malo. OK. Pa dobro, kako ste čekati do Cijela stranica učita onda pred vama izvršiti neki kod? Mi ćemo doći u ovo malo Nešto kasnije previše. No, upravo bi ovaj plasman pitanja u umu za kada smo doći na drugi slajd. Tako ćemo doći do DOM sada. I što je DOM? Dakle, ako pogledate HTML kodu, to je samo hrpa teksta na ekranu. Pa kako ne znate da je JavaScript ovo je HTML element? Dakle, moramo imati neku uspomenu zastupljenost ovo struktura koja imamo. I kad god smo to u memoriji zastupanje u JavaScriptu, što nazivamo da DOM. I to je samo način na koji se ljudi odlučili da bismo trebali zastupati ovaj HTML struktura kao. A što to DOM izgledati? Pa, u spomen reprezentacije, uzmemo ovaj tekst. I mi se to pretvorilo u memoriju zastupljenost. Dakle, ovo je HTML. Dakle, prvo smo saznali da je svaki DOM stablo ima dokument. To izgleda kao drvo. I dokument sadrži HTML tag, zapravo sve Unutrašnjost je to sada. HTML tag ima dvoje djece. Ona ima glavu. To glavu, ako pogledate razvedenosti tamo na koliko ga je strukturiran između bliskih oznaka, Glava ima dijete. Dijete je naslov. Točno. Sada, imamo tijelo djeteta. A onda je to tijelo ima dijete zove obitelj. A da obitelj ima troje djece - Najstariji, srednji i najmlađi. Dakle, trebali biste znati kako nacrtati dijagram ovako kad smo vas pitati kako nacrtati dijagram kada dajemo što HTML na lijevoj strani. Znati kako proizvesti DOM stablo. A unutar tih stvari, postoji samo neki tekst, koji se sam zastupa kao mala kutija. Znači li to DOM stablo struktura bi razum i ono što je DOM? Dakle, što se p stajati? Ovamo, p tamo u tom oznakom predstavlja stavak tag u HTML-u. Dakle, možete ga pogledati. No, to samo znači da je neka prostor za nekog teksta. I to ima neke zadane CSS stil, jer to je stavka tag. Ali stvarno ne brinite taj dio previše. Samo znam da je rezervirano nekog teksta. Da. Pitanje? Da. PUBLIKA: Vi samo spominje CSS. Hash obitelj i mljeveno meso sve to je u osnovi zastupa ID-u CSS? JOSEPH ONG: Da, točno. Ja ću se na ono što ti Skosan znači u sekundi. Kad Angela otišla CSS, ona govorio o CSS selektora. To su CSS selektora koji što je pričala. Da, Rob? ROB Bowden: Također bih komentirati da DOM unutar oznaka Također je tekst čvor. JOSEPH ONG: Točno. Dakle, unutar oznaka, Imam neki tekst DOM. Pa stvarno, ovaj naslov bi trebao imati kao što je mala kutija dolaze izvan nje, kao dobro. No, to zapravo ne smeta Previše je u ovom slučaju. Mi stvarno ne brinu o tekstualnih čvorova, kao što smo ih nazvati, previše. OK, mi radimo. Očigledno, radimo. I ja ću to popraviti kada Ja ga ponovno uploadati. Ima li to smisla? Pa kako ćemo raditi s DOM? Kad god se bave domu u JavaScript, postoje dva koraka. Vi odaberite element DOM. I onda ti stvari za nju. Dakle, u ovom slučaju, apstraktno, ja sam bira srednji element. I onda primjer radi stvari na njega bi se mijenjaju tekst. To se koristi kako bi se Bob. Sada, ono što sam učinio za njega bio sam promijenio Bob Milou u ovom slučaju. Pa kako ćemo zapravo to učiniti? Kako ćemo napraviti odabir? A kako ćemo to raditi stvari kako bi stvar kada smo ga uzeti? Pa, onako kako ti dečki su ga naučili u ovoj klasi je pomoću nešto što zove jQuery. Dakle, ono što je jQuery? jQuery je knjižnica koja čini JavaScript lakše pisati. Tako je netko uzeo vremena i napisao jQuery. jQuery je zapravo napisano u JavaScript. I onda zato što je to učinio, mi sada ima hrpu funkcija koje možemo koristiti kako bi naš živi jako jednostavan. Dakle, ono što su neke od stvari zar ne? To čini odabirom elemenata lakše. To čini promjenu HTML, dodavanjem klase lakše. To ga čini lakšim Ajax. Mi ćemo govoriti u sekundi. I to je analogan C knjižnicama. Tako da su string.h, ste dobili strlen. Dobivate strcpy, sve te stvari. Kada su jQuery, te dobiti lijep načina za odabir elemenata za promjenu stvari, et cetera. Dobivate dodatnu funkcionalnost koja JavaScript vas ne daju. Dakle jQuery nije JavaScript. jQuery je knjižnica koja je zapisano u JavaScript da čini JavaScript lakše napisati. Dakle jQuery nije programski jezik. Ali JavaScript je. napraviti. Jeste li dobili svoju terminologiju pravu. Ima li pitanja? Da. Je li to pitanje? U redu. Pa kako se koristiti jQuery? Pa, kada pišete neke JavaScript kod i da su jQuery na vrhu vaše datoteke kao skript datoteke, koristite znak dolara Sada bi dobili pristup jQuery. A to se razlikuje od znak dolara u PHP. To je isti simbol vas upišete na tipkovnici. Ali oni znače vrlo različite stvari. Znak dolara u PHP znači ova Tako sam proglasiti varijablu. U JavaScriptu, kada ste uključeni jQuery, to stoji za jQuery. Dakle, imajte to na umu. Pa kako bi mogli smo odabrali DOM elemenata? Pa, ako ste to učiniti na ružan JavaScript Tako ćete pristupiti dokumentirati globalnu varijablu. I onda ste dobili elementa po ID obitelji. Ovo je stvarno duga i razvučen i nije lijepo. Ili možete dobiti sve elemente da su p tag. To radi previše u JavaScript. No, mi nikada stvarno pokazali što sintakse previše. Ono što mi je pokazao što je jQuery. Tako da cijeli selektor gore da je izražen u JavaScriptu samo dobiva je sažeti u ovom vrlo lijepom dolar prijavite hashtag obitelj. A $ p, samo gdje je to tako. Ako želite odabrati sve p oznake unutar obitelji, stavili smo prostor između ta dva. I sada, dobili smo sve p oznake unutar obitelji. I izgleda poznato? Pa, Angela je govorio o CSS selektora. Daj mi jednu sekundu. I tako, kako odabrati element, vi samo koristite istu stvar kao i vi će učiniti s izbornikom CSS. Ako stavite mljeveno meso ispred od njega, on odabire po ID. Dot odabire po klasama. Ako ste upravo stvar bez Skosan ili točkice, on odabire one oznake. Pitanja. Da? Publika: Kada koristimo točku u našem HTML, je da ne jQuery? JOSEPH ONG: Dot u našem HTML je JavaScript stvar. Nije jQuery stvar. Način vi to naučili s jQuery je za korištenje. html. I onda ga prošli god HTML će biti. Tako da ću doći do toga samo Drugi zapravo. Pa kako ćemo to učiniti stvari na elementu Jednom smo ga odabrali? Dakle, to je primjer odabirom element. Tako sada, želimo učiniti stvari za njega. Dakle, u ovom slučaju, neka mi vrati na prethodnu stranicu. Bilo je to prije nego što je Bob. I želim to promijeniti unutar HTML Mila. Tako sam nazvati HTML funkciju od elementa. To HTML je funkcija metoda elementa. I onda sam mu dati što Želim HTML biti. I to samo zamjenjuje ono što je unutra da tag s bilo kakvim sam ga dati. Da. Pitanje? PUBLIKA: hashtag koristi samo za jQuery. [Nečujan] ne bismo iskoristiti. JOSEPH ONG: Da, točno. No, ne brinite previše o čista JavaScript. Ja samo želim da vi usredotočiti na to kako će to učiniti s jQuery, jer koja će biti važna dio na kvizu. Točno. Točno. Pa vidiš da hashtag, tako da odgovara za odabir elementa s ID srednje zbog toga hashtag. Hashtag znači ID. I taj element ima ID sredini. Dakle, to je element koji smo odabrali. PUBLIKA: [nečujan]. Dolar znak hashtag [nečujan]? JOSEPH ONG: Pa nema. Pitanje je može li koristiti. Vrijednost. I. Vrijednost radi samo o elementima da su inputi. U jQuery, da bi . Val, ne. Vrijednost. Dakle, ja ću doći na mali primjer da pokazuje sve to u kombinaciji u sekundi. Ali mislim da to služi malo isječak Ima smisla da ljudi do sada. Želite li promijeniti HTML, pozvati HTML metodu. Da. PUBLIKA: Možete li objasniti Ponovno metoda? JOSEPH ONG: Dakle, metoda je samo funkcija koja pripada jednom, u to slučaj, jedan od ovih elemenata DOM, jer vidiš ja izabrani element na prvom mjestu. Zapravo, dopustite mi da koriste miša. Izabran sam element prvi. I onda sam nazvao ovaj HTML funkcija koja je imala. I zato je ova funkcija pripada ova stvar, mi to zovemo metoda. To je samo fancy ime za njega. Ponoviti. Tako zapamtite, odabrali smo Element sada. I mi smo ga stavili unutar promjenjiva elementa. Ispravite? Dakle, kada želimo promijeniti HTML na unutra, jer je Bob prije, želite promijeniti taj tekst Milou. Tako mi zovemo HTML. I mi to reći što HTML unutar Element koji se sada treba. I tako se to mijenja u Milo, jer sam ga dao Milo. Ivanković: Pa oni rade zajedno. [Nečujan] JOSEPH ONG: Da, da. Oni rade zajedno. Tako je jedan od njih odabire elementa na prvom mjestu. I druga radi nešto za njega. Da. PUBLIKA: [nečujan]. Ako ovaj postupak se razlikuje od u HTML imate metodu jednako stvarna. JOSEPH ONG: Da. To je drugi način. To je drugi način. I možemo pokriti da je u samo sekundu kad dođemo na primjer. Želim kako bi bili sigurni da smo ubrzali jer mi ponestaje vremena. No, mi smo pokrenuti način tijekom vremena sada. OK. Cool. Dakle, ako želite dodati klasu, postoji također metoda add klase. Ovo je samo primjer onoga što možete učiniti s jQuery. To samo dodaje klasu. Ako ga želite ukloniti, možete nazvati Ukloni. To je samo još jedna stvar koju možete učiniti. Tako više primjera stvari koje možete učiniti. Dakle, mogu samo ga stavi na top ovako? Najmlađi ukloniti. Ako sam samo izvršiti taj JavaScript kod vrhu moje datoteke, koje će raditi? Točno. Zbog srednje još uvijek ne postoji. Tako to ne ide na posao. Nalog za izvršenje. To ide u prvi vrh. Što? PUBLIKA: Najmlađi još uvijek ne postoji? JOSEPH ONG: Da. Najmlađi još uvijek ne postoji. Točno. PUBLIKA: Rekli ste srednji. JOSEPH ONG: Žao mi je. Najmlađi još uvijek ne postoji. A druga stvar je da nisam uključene u jQuery podnijeti pitati script src. Tako da se ne ide na posao. Zapravo, nisam to učinio u sljedeći slajd, što je trebao popraviti niti to. No, način na koji smo to učinili je JavaScript je event driven. Dakle, ono što mi radimo je koristimo događaj Handler da se to dogodi. I tako sam odabir dokumenta Prvi set. Kažem, OK, kada je dokument spremni, neka mi pokrenuti funkciju. Tako da je sve što je sintaksa sredstva. Izabran sam dokument. Sada, kada je dokument spremni, pokrenuti funkciju. I tako ovamo, kada je dokument spremna, što znači sve HTML ima učita, onda sam pokrenuti funkciju koji uklanja taj element. I tako sada, kada sam pokrenuti ovu funkciju da sam prešao u spreman sam zajamčeno da su svi na HTML stranica će postojati prvi. Da. Pitanje? Publika: Što je ključna događaja u funkciju? JOSEPH ONG: Dakle, taj se događaj ključna riječ u Funkcija je samo parametar koji dobiva prošao na funkciji za bilo koji događaj. To je samo nešto što dobivate besplatno. Kada koristite ključne rukuju u pset8, taj događaj mogli reći, za Na primjer, što ste ključ je ustrajao. U ovom slučaju, događaj za gotove, to zapravo nije super korisna. No, za ključni dolje događaju, to je više korisna, jer ste upoznati što Ključne ste pritisnuli pristupanjem tipku kod s tog događaja objekta. Ispravite? Ima li to smisla? OK. Da. Pitanje? Ivanković: Pa možeš staviti script tag niže? JOSEPH ONG: Pa da. Ti bi mogao staviti skriptu označiti niže. No, onda je to samo postaje jako neuredno. I mi smo htjeli centralizirati sve našeg koda na jednom mjestu. I to će nam omogućiti da to učiniti. Zapamti ranije sam rekao da je ljepši način da se osigura da su elementi na stranici prije izvršavanje koda? A to je samo lijep način što bi to postigao. PUBLIKA: [nečujan]. JOSEPH ONG: Da. Ti bi i dalje morati, zar ne? Zato zapamtite, što uključuje datoteku na vrhu stranice. Dakle, to će izvršiti prvi prije dođete do dna stranice. OK. Dakle, možete dodati i različite vrsta događaja rukovatelj. To je jedan upravo obrađuje klikova. Kad sam kliknite na najmlađe, a zatim ona će se pojaviti s oprezu. To je samo drugačiji tip događaja. Za razliku od spreman slučaju, sada koristiti klik događaj kada primite klikne na elementu. I tako, u ovom slučaju, ne zaboravite, klik rukovatelj je vezan za najmlađe. Dakle, to se događa samo kad je I kliknite na najmlađe. I u drugi, spreman događaja bio priključen na dokumentu. Dakle, to čeka u dokumentu biti spremna. Smisla? Mislim da mogu krenuti dalje. Da. Pitanje? PUBLIKA: [nečujan]. u tom slučaju trebate koristiti [nečujan]. JOSEPH ONG: Oh, da, jer je u to slučaj, moram čekati za najmlađe element koji će se pojaviti na zaslonu prvi Prije nego sam se priključiti rukovatelj klik na to, što je razlog zašto sam stavio unutra od dokumenata spremni. OK. I pored, tako da je ovo veliki primjer kako bi kombinirati sve. To je samo jedan oblik validacije primjer Vidjeli ste u predavanju. Dakle, ići korak po korak, kao idete kroz to. I to će biti potpuno u redu. Samo ga pročitati od vrha do dna. Imam obrazac na dnu. Kada je dokument spreman, Prilažem podnijeti rukovatelj na obrascu, kao da je kad sam dostaviti obrazac, ja dobiti vrijednosti unutar svake od tih ulaza. I sam provjeriti da li je prazno. Ako je prazan, sam povratak false, jer Ne želim dostaviti obrazac, jer forma je u krivu. Ako lozinka je prazan ili je manje od osam znakova, ne dostavi oblik, jer to je također u redu. I povratak false samo sprečava oblik od podnošenja i ide na novu stranicu. I nadamo se, to ima smisla. Mislim da ti dečki bi trebao šetati ovaj kod korak po korak na svoje. A kad jednom shvatiti što odaberite elementi i učiniti stvari za njega zapravo podrazumijeva, to će učiniti puno smisla za vas. Da? PUBLIKA: Što radi Naziv = ime znači? JOSEPH ONG: Dakle, ime = ime i name = lozinkom samo znači pogledati atribut god koju odaberete. I onda to mora odgovarati. Dakle, idemo u registraciji. I onda gledamo na sve ulaze i registracija. A onda ćemo odabrati jednu gdje je ime atribut je jednak korisničkog imena. , Tako da je prvi selektor samo odabire ulaz username. I to drugi selektor samo odabire Lozinka jedna, jer one imaju Njihovo ime atributi postaviti kao što oni su trebali biti. Pitanje? Ivanković: Na predaju, kako se Donji dio riješiti gornji dio? JOSEPH ONG: Pa to je zato rukovatelja događaja. Dakle, čekamo za podnijeti događaja koji dobiva otkaz iz obrasca. I to je sve što je podnose. Zašto ja zovem dostavi gore? Ona kaže, kada se obrazac podnosi, I dobili podnijeti događaj. Pa neka mi samo presresti da i onda pokrenuti ovaj kod umjesto. Da? Ivanković: Zašto imate imati funkciju događaj? Zašto ne bi mogao samo [nečujan]? JOSEPH ONG: Zato što je u JavaScriptu se morati proglasiti funkcije. To je samo kako se to radi u JavaScript. Morate reći što se događa pokrenuti funkciju. Dakle, vi ste ga reći da ste Očekujemo funkciju ovdje umjesto samo vitičastim zagradama. Ivanković: I funkcija je ono što slijedi? JOSEPH ONG: Da. Funkcija je ono što je unutra Kovrčava aparatić poslije da je funkcija ključna. Da? PUBLIKA: [nečujan]. JOSEPH ONG: Za podnijeti? Ivanković: Ne, za funkciju bez događaja. JOSEPH ONG: Da. Dakle, bez događaja, možete imati to. Ako ne trebate događaj, onda ti samo mogu izostaviti. Ali, ako to ne učinite, onda ste Samo ga je tamo stavio. Da. Brzo pitanje? PUBLIKA: [nečujan]. JOSEPH ONG: Da. Jer ono što trebate učiniti, document.ready samo kaže čekati sve HTML na stranicu za učitavanje prvi. I obično, želite da vaše elementi na mjestu prije nego što pokrenete bilo koji broj. U redu. Moramo doći u Ajax. Nemamo mnogo vremena. Dakle, prednosti i mane. JavaScript je lakše probati pisati s jQuery. Ali jQuery je vrsta spora. To je kao PHP je sporiji od C, jer je tumačiti. I jQuery je malo sporiji od JavaScript, jer je to ipak puno stvari ispod haube. I tako, ako ste koristeći jQuery, to je samo malo sporije od JavaScript, iako daje lijep eleganciju. I na kraju, Ajax. Do sada je u Ajax, niste vidjeli Ajax u smislu pset7 još jer kada to učinite, možete podnijeti Obrazac za citat. On učitava novu stranicu. Tako ćete dobiti ovu veliku bijelu bljeskalicu na stranici, a da druga opterećenja stranica, točno? Bilo bi jako lijepo kada bi vam nije imao ovaj bljesak. Kao i Facebook, ako se samo dođite do dno, dodaje novi sadržaj bez osvježavajuće cijelu stranicu. Dakle, nešto ovako bi bilo lijepo. To je kod JavaScripta na lijevoj strani. Možete dobiti ono što je unutar tog ulaza. Možete dobiti informacije dionica iz Yahoo! I onda napraviti veliki niz koji kaže, u redu, to je poruka koju želim koji se prikazuju na ekranu. A onda ste stavili tu poruku unutar nekog HTML elementa koji dobiva prikazuju na zaslonu. Dakle, to je sve što se ovdje događa. Tako je u osnovi, jer to je sve JavaScript i da ne trebate pokrenuti Više PHP, to će se pobrinuti da stranica ne osvježi. Dakle, ovo je samo apstraktna ideja da ja ovdje govorim za sada. Apstraktna ideja je da ako to učiniti sve u JavaScriptu, nemate stranica osvježi. No, kako se zapravo to učiniti? Pa, zapravo, pričajmo o Problem s ovom prvom. Problem je u JavaScript, izvršenje je sinkroni. Dakle, morate čekati jedan linije završiti prije vas izvršiti sljedeći redak. A što ako idem na Yahoo, i njihovi serveri su jako spori, a to im traje tri sekunde da Vratite mi taj stock info? Kad sam pogodio da će cijena liniju, ako izvršenje sinkrone, kao što je po default, što samo ide učiniti je Vaš preglednik će se odugovlačiti tri sekunde. A ti nećeš biti u mogućnosti to učiniti sve dok ga dobije te podatke. To će biti zamrznuta. A to je loše. Vi ne želite da korisnik imaju smrznute web stranicu. Ispravite? To je jednostavno loše. Svi se slažu? Ako ste pregledavanja Facebook i to zamrzava, a vi ne možete ništa učiniti, te dobili jako frustriran. Dakle, rješenje je da napravite nešto asinkroni umjesto. Dakle, sve je to stvar, kaže asinkroni je, idem pitati ovo URL za neke podatke. A onda ću nastaviti. Samo ću zadržati izvršavanju bez obzira na broj koji je nakon toga. I onda, kad god da su podaci spremna, onda ću ga obraditi. To je sve što je rekao. Ivanković: Ajax samo čini Kod asinkroni? JOSEPH ONG: To je asinkroni način dohvat podataka. Dakle, prva stvar o Ajax je to mi omogućuje dobiti podatke iz vanjske web stranice. A druga stvar je što osigurava da je moja stranica ne odugovlačiti dok sam ja dobavljanje te podatke. To je asinkroni dio toga. Budući da se ide negdje drugdje, zato kažem da bi se to događalo dok to je dobavljanje te podatke, koji čini asinkroni. Ja bi izvršenje. Tako bi da je asinkroni Ideja na umu. I ja ću vam pokazati što Razlika je u tome. Sinkroni verziju se nalazi na lijevoj strani. Asinkroni verziju nalazi se na desnoj strani. Pogledajte brojeva kako bi vidjeli što koraci odgovara onome što izvršava na svakoj liniji. Tamo, upozorenja prikazuje se na prvom mjestu. Zbog dobivanja dionica info iz Yahoo! traje tri sekunde, to staje za tri sekunde. I onda ga obavijesti cijenu Nakon te tri sekunde. Tako sada, da upozorenja prikazuje se u to vrijeme - Tri sekunde u. I onda ga obavijesti koju nakon toga. Dakle, to samo ide korak po korak. To je kao što dečki neće prihvatiti, točno? S asinkroni izvršenje, vas upozoriti na prvom mjestu. Tada ćete otići na ovaj URL. A što reći, ja ću samo pitati za podatke. A onda ću se obraditi ga kasnije. Tako da se odmah izvrši Sljedeći linija nakon što se da asinkroni zahtjev. Dakle, 0,001 sekundi, možete vidjeti hi upozorenja. Izvršiti tu funkciju, bye upozorenja. I zato što sam obećala da ću će obraditi podatke kasnije, što događa se kada se to podaci vrati Tri sekunde kasnije, onda trčim da Funkcija da imam tamo. Da? PUBLIKA: Možete li navesti ili razjasniti što Ajax znači? JOSEPH ONG: Dakle, Ajax je način da, ako sam trebam podatke kad sam na web stranici, a ja Ne želim da se osvježite stranicu, a zatim Koristim ovu tehnologiju nazvanu Ajax. To u biti samo znači, ići dohvatiti Podaci iz druge web stranice. I to na način da je samo ne odugovlačiti moju web stranicu. Ivanković: Pa da svojstvena dio JavaScript ili jQuery? JOSEPH ONG: Dakle, netko je napisao način da to učinite ovo u JavaScript davno. U jednom trenutku, to ne postoji. I tako je netko izmislio ovu tehniku da ljudi mogu zatražiti ove podatke na taj način. A napisali su neke stvari to učiniti za vas. I jQuery samo daje to vrlo lijep način da to učinite s ovim $. dobiti funkciju. pitanja? Ja mogu odgovoriti na pitanja o Ajax nakon toga previše. Ja ću biti ovdje. Tako da ćemo nas dohvatiti podatke bez osvježite stranicu. I to neka nam to učiniti u asinkroni način da ne zamrznuti stranicu. Predugo, nije pročitao, ako to Objašnjenje je predugo za vas. Pa napokon, cross-site scripting napada. Vidjeli smo to s Zamyla. Ako u mojoj bazi podataka nekoga ima ovo ime, koja je to skripta tag, a ja ima neki kod na mojoj stranici koja ispisuje iz imena ljudi za redom, ili moram Neki JavaScript kôd koji unosi ovo ime u stranicu, ono HTML dobiva proizvodi? Pa, ja ispisati HTML oznaku. Ja ispisati sve ove oznake. Sam doći do dijela gdje sam ispis s prijateljima. Ja ispisati Lauren van. To ispisati Milo out. I onda se moje ime u bazi podataka Skripta je nakon neprijatan Facebook status. Zato sam umetnuta to u stranicu jer to izgleda kao JavaScript, kada ovu stranicu dobiva šalje korisniku, to dobiva izvršiti kao JavaScript. I tako to je ono što mi zovemo skriptiranje napad cross-site. Netko stavlja zlonamjerne informacije u vaša baza podataka koja bi mogla odgovarati neke dodatne string ili Neki JavaScript string. A kad se dobiva ispisati na stranica na ovaj način, što onda što se događa je da je loše kod dobiva izvršiti da nisam namjeravao za to da se pogubi. I to je sve cross-site skriptiranje napad. A način na koji se oko ovo je kao Zamyla rekao. Vi samo umotati stvari u HTML posebni znakova. I ovaj HTML posebni znakova je PHP funkcija koja će spriječiti ovu vrstu stvari iz događa s tobom ako imate zlonamjerni niz u bazi podataka. To samo bježi, tako da se to ne dogodi se tumačiti kao HTML. On zamjenjuje male zagrade s onim što mi zovemo entitete. I razgovarali smo to na predavanju previše. Dakle, mislim da ste vi trebali imati dobro razumijevanje o tome. Pitanja? Da. Ivanković: Pa kako bi [nečujan]? JOSEPH ONG: to ponoviti. PUBLIKA: Kako bi monitor - JOSEPH ONG: Točno. Dakle imate nešto što kaže, kada Ja se registrirate, upišite u moje ime. Ja samo upišite u tom području, moje ime je stript nakon neprijatan Facebook status blizu skriptu tag. I to samo dobiva staviti u baza podataka, jer ja ne mogu reći da je netko u svijetu nema naziv s lijevom strelicom u njoj ili Riječ skriptu u njega. To zapravo ne smisla. Zato sam samo da bi bili sigurni da sam dezinficirajte stvari prije nego što sam ga ispisati van na stranici. PUBLIKA: Znači, HTML posebne kartice sprečava skriptu oznake? JOSEPH ONG: Da. Dakle, to ne sprječava skriptu oznake. To samo osigurava da skripte oznake ne bi interpretirati kao HTML ili - Da. To jednostavno dolazi kao što što zapravo jest. U redu. Tako da je pregled kviz. Cool. [PLJESAK]