R.J. Акино: Нека просто да започнете. Така че това е тест 1. Ето малко информация на високо ниво. The За страницата за теста е в този URL, вече не CS50.net, въпреки че все още ще работи. Това е CS50.harvard.edu/quizzes/2013/1. Това е най-голямото За страница, ви казвам, къде и кога, а именно следващата сряда в един куп стаи. И от следващата сряда, аз означава два дни от сега. Цялата тази информация е там. Но това е с натрупване. Така че всичко, от първата половина на година е потенциално на теста, защото не можеш да направиш наистина напреднали неща в C без ако условията и за линии и други подобни. Но ще има акцент върху материал, покрит от Quiz 0, като се започне с structs и File I / O. Това е обикновено по- предизвикателни, отколкото Quiz 0. Средната оценка обикновено е по-ниска. Проучване трудно. Докато сте проучване, не забравяйте да използвате CS50/discuss да публикувате вашите въпроси и прочетете въпроси на други хора. Така че, ако не разполагат с никакви въпроси, влезете и да прочетете въпроси на приятелите си. Те са вероятно добри въпроси. И вземи викторини на практика. Ние сме били като викторини за седем или осем години. Те всички са на линия. Бъдещи въпроси са сходни към старите въпроси. Ето как можем да ги направим. Тестът все още не съществува. Никой от нас не са го виждали. Но тя ще изглежда така предишни викторини. За този преглед сесия, това не е изчерпателен списък от теми. Не може просто да присъстват на това и след това да бъде напълно готов за теста. В противен случай не би било че голяма част от викторина. И това също не е задължително всичко, което трябва да знаете за всеки зададена тема. Тя е предназначена да ви изложи на нещата ние сме обхванати, да ви напомня какво сме покрити, и начина, по който ние го покри. Но ще трябва да се отиде по-далеч и по-дълбоко, когато учат да двойна проверка , че знаете всичко за всеки един тема и че сте попълнили всички ъгли, които са покрит с лекция. Отбелязва викторина ви казват да отидете на Scribe бележки, Гледай лекционни видеоклипове. Това е добър начин да се уверите, че сте покрити всичките си бази. Така че да започнете, когато направих това пързалки, аз се опитах да се сложи където намерих информация. Така че за File I / O, например, Седмица 7, Понеделник лекция, така и изпратените Раздел 6 и Проблем Set всички имаме информация за File I / O. Правил съм това за всяка тема. Така че тези заглавие пързалки може да Ви бъдем полезни. Така че тук имаме File I / O. Не забравяйте, че в Проблем Задайте 5, ние използвахме FОтваряне на, неуспешно, неуспешно, fread и fseek. След като се възстановява 30ish JPEGs и като е преоразмерена и побъркани с растерни изображения, трябва да бъде доста познати с тези функции и как те работят. Ако вече не сте запознати, Определено ги прегледат. И се уверете, че сте разбрали това, различните аргументи са, когато те се използват. Но най-често срещаните свързани с файловете буболечките може да бъдете помолени за - Е, ако сте забравили да се провери дали FОтваряне на действително е работил, преди да отидете на модифицирате файл. Това може да бъде лошо. Ако сте забравили да неуспешно файл че сте fopened, че е подобен на изтичане на памет. Това е доста зле. И забравяш, за да проверите дали сте достигнала края на файла, преди да започнете да пишете за него. Така че, ако ви кажа, хей, аз съм най- на края на файла. Дай ми още 5 байта. Е, това вероятно няма да работят на начина, по който очаквате. Това е наистина за File I / O, защото сме направили толкова много от него с определен проблем. Така че, ако сте разбрали какво се случва Проблем в Set 5, запомнете bitmats и JPEG снимки, тогава вие вероятно сте всички определен за File I / O. Ако това е малко размита, определено преразгледат този проблем определя и свързани материал. Structs бяха темата, които бяха на линия между 0 и Quiz Quiz 1. Още не сте съвсем прави разреза за Quiz 0. Така че със сигурност ще бъде на Quiz 1 Седмица 7, понеделник. Каква е структурата? Тук ние показваме една структура. Това е като нов вид. Това е нещо като контейнер за няколко полета. В този случай, ние сме обявен за структура студент, който има две полета - низ, който ние се обаждате име и едно цяло число, че ние се обаждате възраст. Така че, когато минавам около студенти или I модифицирате студенти, ще бъде в състояние да достъп до тяхното име и възрастта им. Нека да разгледаме някои код за това. Тук виждаме, че съм обявен студент и, точно като Декларирам, всяка променлива - Int X, Int Y, и така нататък. Ето студент ите. Той започва с нищо в полетата си. Така че нека да ги зададете. Можете да зададете полетата на структура с точка. Така че това, което казах тук, че s.name = RJ. И s.age = 21. Можете също така да актуализирате полета По същия начин можете да актуализирате стойността на променливата. Така че аз искам да си сменя името си от RJ с Не периоди до R.J. написан на правилния начин. Това ще бъде s.name = RJ, същото както ние го каза първоначално. И тогава може да има достъп до тях. Така че ние сме ги задали. Ние сме ги актуализира. Можете също така да има достъп до тях в много по същия начин. Така че тук, аз съм отпечатване R.J. Е на 21 години. И аз съм достъп до тези стойности с s.name и s.age. Така че това е достъп до structs с нотация точка. Да, въпрос? ПУБЛИКАТА: Има ли причина, относно предишния слайд, който не е пускал ученик на най-горния ред, като typedef структура на студент и след това студент в края на краищата? R.J. Акино: Така че въпросът е, по този слайд, ние сме обикновено се наблюдава typedef структура възел и след това полета на структурата и След това думата възел. А как дойде тук аз не съм казвал, typedef структура на студент, а след това полета на структурата и след това ученикът? Причината е, че не е нужно да се достъп до него вътре в структурата. Така че това е ОК, за да го оставите без име. Просто не мога да го оставя като анонимен структура. Причината да го направя за свързани списъци и неща е така, защото вътре в себе си трябва за указване на STRUCT възли звезда. Така че структурата трябва да има име, така че можете да получите достъп до нея по-късно. Това е един малък детайл. Но вие обикновено ще видите typedef структура фигурни скоби, ако не е нужно името и typedef структура някакво име последвано от фигурни скоби, ако щете нужда от име. Така че това е добър въпрос. И в този момент, ние сме склонни да се променят structs и преминават около structs от препращане, не по стойност. Така че ние просто ще преминат около указатели към structs вместо да преминават около самите structs. Значи много често ще бъде използвате, в този случай, студент или * структура възел * или възел * вместо ученици или възли. Така че тук, аз съм казвал, OK, PTR променливата ще бъде на адреса на S. Тя ще бъде на показалеца на студента R.J. Така че ние може да получите най-тези области същият като вземем нещо. Първо, ID указване на показалеца за да получите STRUCT. Това е * PTR и след това точка и след това възраст. Така че, за да получите достъп до терена и съм актуализиран то сега до 22, тъй като, нека да речем, че имам рожден ден. Има кратък синтаксис с помощта на стрелката тук. Така PTR стрелка възраст е просто същото като * ptr.age. Сега, това е нещо, което ще има да запаметява и да си спомня. Можете да го използва много в pset6, на правопис PSET. Но това е всъщност това, което се случва на под предния капак. Това е dereferencing показалеца и след това достъп до него. Въпрос? ПУБЛИКАТА: [недоловим]. R.J. Акино: Тогава защо ние, използвайки указатели като structs вместо самите structs? Причината би било, ако ти минава една структура към функция, най-вероятно Искам да премине само около 4 или така байтове, които представляват показалеца, като за разлика от 30 или потенциално 40 байта, които са в структурата. Така минава нещо към функция По-лесно е, когато нещо е по-малък в кратко. Въпрос? ПУБЛИКАТА: Може да сте споменавал в началото, но има други пързалки Горе на [недоловим]? R.J. Акино: Тези слайдове ще бъдат след заседанието за преразглеждане. Ние ще ги публикуваме в сайта. Така че се движат по и преместване на леко по-бързо, ние ще говорим за данни структури. Има много. Покрихме един куп от тях. Ето какво трябва да се разбере за структурата на данните. Вие трябва наистина да се разбере най-високо На какво ниво е всяка структура. Можете ли да обясните на английски език, за да ви приятел, че не е взел CS50 как ние сме организиране на нашите данни и защо ние ще се използва нещо по този начин? Това е нещо, което един. Thing две, разбирам изпълнението. Така че разбирам как да се използват тези неща в C. И ние ще се случва през това. И тогава нещо три ще се запознаят с тече времето и ограниченията на различни структури, които използвате. Така разбираме защо трябва да използвате хеш таблица вместо масив. Разберете колко бързо, средно, достъп хеш таблица е. Разберете какви операции са бързо на свързан списък, но бавно на масиви и обратно. Така че да се разбере, че ще трябва да разбирам Big-O нотация просто да знаете как да се говори за тях всякакви неща. И ние ще говорим за това. Така че първото нещо, свързани списъци. Ето снимка на високо равнище на свързан списък. Ние показваме това в клас. Ние обикновено имат 10 души застанал на сцената. Но ние имаме серия от възли, където всеки възел има някаква стойност и показалеца за следващия си стойност. Така че, за да получите от един възел към следващата, можете само да кажа, дай ми на следващия възел. Имаш този възел. Дай ми на следващия възел. Имаш този възел. Дай ми на следващия възел и така нататък докато има никакъв възел лявата. Така че продължи да се говори за то на по-високо ниво. Това е много лесно да вмъкнете неща в свързан списък. Ако не ви е грижа за реда, може просто да го пуснете още в самото начало. Това е константно време. Но е трудно да се намери стойност. Ако се опитвате да попитам, е седем в моя списък? Вие трябва да мине през всяка една стойност. Това седем? Това седем? Това седем? Това седем? Отново и отново. И това е O (N). Така че, когато учи за теста, Сравнете това с масиви. Това ли е ОК? Светлините угаснаха неясни. OK. Когато е свързан списък, по-добре? Когато е масив по-добре? Така че нека да разгледаме някои код. Тук е потенциална възел. Това е структура. Той разполага с вътр н, които ще бъде нашата стойност. И тя има структура възел * следващия, който За нас е указател към следващия възел. Така че тук, ние можем да видим, че ние се случи за да изведе едно цяло число в нашия възел. Но ако това беше свързан списък на Чар звезди или свързан списък на плувки, ние напълно може да направи това. Не забравяйте в pset6, най-вероятно е имал свързан списък на Чар звезди или само статични харак масиви. Нека да разгледаме тук, в операция. Така че ние искаме да вмъкнете нов п в нашата свързан списък. Ние започваме с показалеца глава, която е указател към тази възлова точка, която има стойност на п и следваща на показалеца, че точки до този възел е на стойност н и следващата на нула, защото това е последният възел. Така че, в интерес на време, ще го направя постави целия код на екрана. И ние ще минеш през нея няколко линии в даден момент. Така че тук е кодът. Надявам се, че това е разбираемо. Първото нещо, което правим, е ние изчистване нов възел. Така че има указател към нов възел, който не съвсем нищо настроите в него все още. Ние се уверете, че новия възел не е нищожна. В противен случай, ние трябва да се откажем. Така че, след като са проверили, че ние сега Определените стойности в възел. Така че ние поставяме новия N в нашата област п. И ние се установи следващото показалеца да сочи към оригиналния главата, така че ние можем да Сега сте поставили този възел в нашия списък. И накрая, имаме глобална точката на главата в нашия нов възел, така че ако трябва да започне в главата, ние ще бъдем в този нов първи възел вместо старата първия възел. И когато тази функция изходи, променлива нов възел вече не съществува, защото това е местно на функцията. Така че това е състоянието на света. Нашата глобална главата сочи към новия ни първият възел кои точки да ни оригиналната първия възел, който точки с възел след това. Това беше вмъкване. Надявам се, че това е относително лесно да се следват. Когато се колебаете, да се направи снимка. Така че аз намирам, че говорим за свързани списъци и гледа код е много полезно не. Има предвид, че гледаш картина от свързания списък ми позволява да мисля, о, толкова Имам този възел тук. Но ако аз актуализира тази показалка, тя завършва изключен. И аз съм забравил къде възел отива. И кода излиза. И вие имате множество възли че са изключени. И вие не се окажете с списъка, който искате. Така че, ако се направи на снимката и да го направя стъпка по стъпка, да се надяваме, ще видите правилния ред на нещата от гледна точка на актуализиране на насоки, за да се уверите, че списъкът идва заедно. Insert е относително проста. По-сложно би било поставяне в подредени списък. По-сложна функция е изтриване и да намерят, така че търсите чрез списък, за да да видим дали нещо е там. Може би ви е направил това в pset6 когато имам в своя хеш таблица и ти каза, добре, е ябълка в моя свързан списък? Така че, може би вече сте направили това. Но определено, освежи паметта си и се опитват да reimplement находка и reimplement изтриете за свързан списък. Fun страна нота, има също двойно-свързан списъци, в които имате указатели, които сочат напред, така и назад, така че да може да отиде на следващия възел и към предишния възел. И имаше един въпрос на миналата година викторина на този тип, говори за двойно по-свързани списъци. Сега, това е структура, която сте сравнително запознати, защото повечето от вас вероятно са ги използвали по pset6. Ето една, която е малко по-малко позната. Като страна нота, аз мисля, че е един Quiz предимно по-трудно, отколкото Quiz 0, защото нещата, които правиш, ти не са направили толкова много. За да сложи това по друг начин, за Quiz 0, ти беше написал много C. И ние ви попита за C. За Quiz 1, отиваме да ви попитам за PHP и JavaScript, които можете не са написани като голяма част от. Отиваме да ви попитам за C-код, който не са написани като голяма част от, този авангарден C неща. Така че, определено, практикуват неща, които говори в лекция, че не е задължително да се направи на проблема избран. Говорейки за което, ти не са писали комин върху един проблем настроен. Но това беше в лекция. Ето картината на високо равнище стекове, че ние показваме всяка година. Това е топчето тави в трапезарията Mather. На по-високо ниво, стекове са последна , първи излязъл структура на данните. Това означава, че започваш да постави нещата в - 1, 3, 7, 12, 14, отрицателен 0. Единственото нещо, което не би могло да има каза - отрицателен 3, 0. Слагаш всички тези неща инча И последното, което е записано в е първата едно, че ще излезе. Така че имате две операции - натиснете и поп. Всички от пускането в които бях жестикулираше като това са тласък. И тогава, когато се достигне, за да вземете нещо или да достигнат на върха, за да вземете нещо, това е поп. Така че ние ще приложат стакове. И ние ги показа в лекция употребата на масиви. Но бихте могли да ги правя използване на свързани списъци. A стак е концептуална данни структура, а не като изпълнение-специфична един. Така че това, което би изглеждало това? Тя ще изглежда нещо като това. Вие искате да има размер число. И ще имате масив от стойности, които ние се обаждате тави, защото това е какво картината е за ни - Int тави - и след това някои максимален капацитет. Така че това, което ще тласне прилича? Е, ако имаме една купчина ите, след това да натиснете нещо върху S, ще получим размера на S. И това ще бъде следващия отворен място на нашия масив. Така че, ако имаме три неща в нашия комин, След тави 3 да бъдат следващите отворен място, защото 0, 1, и 2, са вече запълнени. Така че ние поставяме на стойността в s.trays [s.size], на трето място. И след това ние увеличаваме s.size да се каже, хей, ние имахме три неща преди. Сега, ние имаме четири. Така че следващия път, когато се бута, ти си ще сложи нещо в 4. Или следващият път, когато се появи, ти започваш да погледнем в три вместо четири или нещо такова. И тогава ще се върнем към истинската да речем, хей, ние успяхме. Това е работил. Като правило на палеца, ако една функция, която е Трябваше да се върне вярно или невярно винаги се връща вярно, вие може са направили нещо нередно. Същото прави тази работа? Е, той работи добре за един, и 2, и 3, и 4, и пет. Но нека да кажа, че се достигне капацитета си. Аз бях тогава тичам в проблем, тъй като ако размерът му е същият като капацитет, аз съм сега се опитва да сложи нещо в едно масив, където не е нужно пространство. Така кратко проверка, за да се определи това. Ако s.size == КАПАЦИТЕТ, връщане фалшиви. В противен случай, отидете и да направим това, което направихме. Така че, какво друго бихме могли да попитате за за купчини? Какво друго трябва да ви уча? Какво друго трябва да се упражнявате? Е, за прилагане на поп. Ние вече го бута. Ще поправим това. Изпълнение A не масив, където използвате свързан списък, може би. A изпълнение без вътр. Ние направихме целочислени тук. Но можеше да бъде и плувки. Можех да бъда струни. Това би могло да бъде харак звезди. Погледнете последните викторини за видовете въпроси, които сме питали за стакове. Аз ще кажа, че ние обхванати купчини около същото, както сме ги покри в последните години. Така че въпросите за теста трябва е един добър показател. Движейки се напред още по-бързо, се реди на опашка. Те са като стакове. Но те са първи, първи излязъл. Ако сте британски, думата опашка вероятно прави много смисъл за вас. В противен случай, може да се наложи Чух за него като за една линия. Те работят като линията в магазина Apple. Първият човек, който се появи в 3:00 сутринта е първият човек да си купи си IPAD. Така че ние имаме две операции - Enqueue и dequeue. Enqueue поставя някого в линията. Dequeue дърпа първия лице на разстояние от линията. Отново могат да се реализират това с масив. Така че каква е структурата на WE показа в лекция? Тя беше тази. Отново, номера. Отново, размер и това ново нещо отпред. Защо има нещо, наречено отпред? Това е индекс на следващия елемент за dequeue. Това е просто вътрешно следене на първият човек да се появи, така че да можем мога да го извадя, когато имаме нужда да. Определено изглежда по записки от лекции и се опитайте да приложат Enqueue и dequeue когато учи за теста. Важни неща, за да си помисля. Опаковането ако предната плюс размер озовава по-голям от капацитета. Отново, ако вашата структура е пълна, ти започваш да имате проблем. Hash таблици, които сте виждали преди. Повечето от вас вероятно изпълнява тези на pset6. Това е структура, която има за цел за O (1) вмъкване константно време и O (1) константно време за справка. В CS50, реализирахме това като масив от свързани списъци. Ключовият компонент на хеш таблица е хеш функция. Така тя превръща вашия вход, да речем, речник дума, в редица, който ще бъде нашия индекс. И ние ще използваме този индекс в нашия масив. Така че тук е малко сладко картина от study.50.net. Ние хвърли всички думи в нашата хеш функция. А функцията за сегментиране ни казва, къде да поставите тези думи. Това е велик в земята, където Има само една дума за всеки слот. Но както си спомняте от pset6, има са повече думи, отколкото слотове. Така че това, което се случва при получи сблъсък? Вместо на съхранение една стойност, нека да кажем, хеш таблица 3, вие съхранява свързан списък. И така, вместо да се налага пъпеш тук, вие ще трябва свързан списък, където първия възел е пъпеш. И на следващия възел е котка. И третият възел е сблъсък, нека се каже, тъй като всички тези думи започват с C. Така че повечето от вас го е направил за pset6. Ако вие не сте направили хеш таблица на pset6 и сте се опитали нещо подобно на Trie, определено преразгледа хеш таблици. Ако съм го направил на pset6, определено преглед хеш таблици. И ако ти си го направил на pset6 и не стана работят напълно прав и вие имаше много проблеми с него, определено преглед хеш таблици. Така че урокът наистина е определено преглед хеш таблици. По-голямата малцинство от вас се опита навън се опитва на pset6. Високо ниво на картината. Това е нещо като това, където всеки възел има набор от деца, където всеки дете съответства на писмо. И всеки възел също казва, хей, аз съм една дума. Така че в този случай, думата Максуел, ако следвате M на А към X-W-E-L-L и след това го последва още един. И вие получавате този символ, делта, която ние означава да кажеш, че това е дума. Така че Максуел е дума. Тези делти са навсякъде показваше кои неща са думи и които нещата не са такива. Така че в pset6, данните, които се съхраняват заедно с някой от нашите възли е "Аз съм дума. "И готино нещо за опита е, че те демонстрират вмъкване и справка в O (дължина на дума). Така че просто да се измъкне сам Maxwell, това е М-A-X-W-E-L-L. Така че седем или осем - Не може да се разчита - стъпки, за да стигнете до края и проверете нещата. Така че бързото прилагане тук. Rob премина през свързан изброят му след смъртта. Така че проверете това. Извинете. Премина през Trie в неговата аутопсия. Така че проверете това. Но в основата си имат всеки възел има 27 указатели към следващите възли и един Булева, защото съм дума. Вижте аутопсия на Роб за това как това всъщност е изпълнена. Нашата крайна структура, нашите дървета и двоични дървета за търсене. Така че погледнете в тях, те са били покрити най-наскоро Седмица 8, понеделник. Едно дърво е подобно на Trie, с изключение на теб не е задължително да има 27 възли в всяка точка. И не е нужно тези данни на всеки стъпка, която показва дали - пътя не е от значение. Като има предвид, Trie, пътят от горе до дъно, Maxwell, беше важно за нас. Но всеки възел има множествена деца, може би. Имаме още няколко думи. Коренът на дървото е на самия връх. И ние казваме, че в най-долен възли, които нямат децата са листа. Така че като Trie, дървото е структура на възли. А често срещан вид дърво, което отиваме да се говори за е двоичен дърво, където всеки възел е без деца или едно дете или две деца. Така че тази картина не е тук двоичен дърво, защото възел 3 има три деца. Но ако бяхме да игнорират тези, а останалата част на е двоичен дърво защото показва имота, че всеки възел има нула, една, или две деца. И така, как бихме могли да изразят това в кода? Ние може да има разклонение, където всеки възел има цяло число в нея, както и като указател към дървото в ляво и указател към дървото в Добре, така че двете деца. Как е полезно това? Е, ако ние правим правила за това къде сме сложи възли, ние можем да направим по-бързо търсене. Така че има концепция за двоично търсене дърво, където всички възли на ляво поддърво имат по-малка стойност от възела гледаме. И всички възли от дясната поддърво имат по-голяма стойност от корен възел. Сега, че прилича много на думите. Отивам да го пуснат вътре на двойното котировки и ви покажа снимка. Така че тук е пример за двоично търсене дърво. Виж, че започваме с 10. Всичко на ляво 10 е по-малка от нея. И всичко в дясно е по-голяма от нея. Но още повече, че от това, всеки възел в дървото изразява този имот. Така възловата точка 7 има 3 към наляво и 9 надясно. Така че всички от тях са по-малки от 10. Но гледам само тези, на 7 има 3 от неговата лява и 9 до дясната му. И подобно на правото, 15 има 14 да му лявата и от 50 до правото си. Така трите възли над там, 15, 14, и 50, са също така валидно двоично дърво или валидно двоично търсене дърво. И всички те са по-големи от 10. Така че те могат да бъдат отдясно там. Има ли един въпрос? ПУБЛИКАТА: Как се справяте, когато имате две седмици? R.J. Акино: Да. Как се справяте с две стойности , че са едни и същи? Някои двоични дървета за търсене казват, че игнорира дубликати, защото целта е само да кажа, че съм виждал тези неща досега. Някои двоични дървета за търсене може да се каже имат брой вътрешността на възел. Други може да се каже, че всичко, за да ляво е по-малко от или равно на. И всичко в дясно е по-голям от. Просто зависи от това, което проблем е, вие решите. Така че в един речник, например, можете няма да е грижа за дубликати. Вие ще ги изхвърлят. Но някакъв друг проблем, който може да се грижи. ПУБЛИКАТА: Възможно ли е да има 1 отляво на 15, което е по-малко от 10? R.J. Акино: Не. Ако 14 тук са с 1, това би не е валидно двоично търсене дърво, защото всичко в дясно от 10 трябва да бъде по-голяма от нея. И ние ще видим защо. Ако в земята на търсенето целта ми е да намерите 14, I започне в корена. Така че аз гледам. OK. Отиваме да започне в корена. Погледнете 10. Е, 14, нашата цел, е по-голяма от 10. Така че тя трябва да е отдясно. Това е много подобен на цяло телефона книга нещо, което направихме, двоичен търси там. Но вместо двоичен търсене в масив, ние сме двоичен търсене в това дърво. Така че ние сме все още се търсят за 14. Е, 14 е по-малък от 15. Така че, ако това е в нашето дърво, тя трябва да бъде в тази област тук. Тя трябва да бъде правото на 10 и в ляво на 15. И така, ние проверяваме този възел. И Уау, ние открихме, 14. Аз няма да минеш през нея. Но тук е кодът. Това всъщност е относително прям, защото това е рекурсивно. Какво можем да ви помоля да направите на викторина? Бихме могли да ви помоля да напишете този код. Бихме могли да ви помоля да погледнете този код и модифициране на този код и да обясни какво го прави. Да. Въпрос? Публика: Да не тези слайдове ще бъдат предоставя на разположение, тъй като те са били за последен път? R.J. Акино: Да. Така че тези слайдове определено ще бъдат публикувани. ПУБЛИКАТА: Те всъщност е публикувал в момента на сайта. David просто го направих. R.J. Акино: Слайдовете са в момента на сайта. Вероятно ще закърпи няколко на печатни грешки I забелязани и да ги поправи. Но има ток версия на сайта. Други неща, които може да ви помоля да се направи - напиши вложка. Напиши един повтарящ версия на рекурсивна функция ние просто ви показах или говорим за тези неща, както и в параграфи, в думи, в изречения. Сравнявайки време изтече и разясняване това, което би искал да използва двоичен търсене за дърво, вместо на хеш таблица, например. Така че разбирам тези структури в доста дълбоко ниво. Разберете как да ги пиша, как да ги използват, как да се говори за тях. И вие ще бъдете всичко е готово. Въпрос? ПУБЛИКАТА: Когато пишете на двоично търсене дърво, как го правиш определи каква стойност да го направи като корен? R.J. Акино: Така че въпросът е, какво стойност да направите като корен? В зависимост от вашия код, можете може да има глобален корен. Така че може да сте вероятно имаше в pset6 глобален хеш таблица. Или може да премине на корена в като аргумент. Така че това търсене функция тук приема аргумент възел *. И така, каквото и възела, които се случи да бъде гледам е тази, която сте лечение както си корен, когато сте го премине инча И аз съм всичко е готово. Това са моите слайдове. Следващият човек може да дойде суап в един лаптоп и микрофон. ROB BOWDEN: Мисля, че може да се наложи тълкува този въпрос по различен начин. Но аз го тълкува както, ако имате числата 1, 2, и 3, как правим знаете, за да направи два корена за разлика от 1 или 3? Ако направим два корена, тогава това е добре 1 и 3 от ляво и от дясно. Но ако един е коренът, а след това е 1 към отгоре, 2 отдясно, три надясно. Така че, по подразбиране, не знаете какво да се направи корена. И за всеки алгоритъм, ние очакваме да ви дам, само първата ви нещо вложка ще бъде корена. Или ние ще ви дам един двоично дърво, което вече съществува, че има корен. Но други алгоритми съществува такава, че коренът ще се актуализира, така че ако сте се окажете в ситуация, в която това е 1, 2, 3, той автоматично ще се актуализира, за да направи две новия корен, така че тя все още е добре балансиран. ANGELA LI: Cool. Хей, момчета. Аз съм Анджела. И аз отивам да завърши нашата C и след това отидете в някои от нашия уеб технологии - HTTP, HTML и CSS. Така че първото нещо, което е буфер препълване на атаки. Така че нека да погледнем на този код. Това е доста проста. Има една функция Foo. И тя не връща нищо. Но това отнема в указател в низ наречен бар. И то се случва да декларира това буфер, който е характер масив, който има 12 слота. И той използва memcpy, който е само на функция, която копия от един адрес в друг. Така че това се опитва да копирате в нашия буфер от каквото и бар се посочи. Така че всяка идея какво не е наред с този код? ПУБЛИКАТА: Ако бар е по-дълъг от C, те ще презапише. ANGELA LI: Да, точно така. Нямаме никаква гаранция, че бар ще бъде по-малко от 12. Ние току-що направи някои произволен брой 12. И ние бяхме като, нека се надяваме, че нашата потребителска вход е по-малко от Дълги 12 символа. Така че в един идеален свят, ако нашият принос е винаги, както се очаква, тогава ние ще се заемем нещо подобно, здравей. Това е по-малко от 12 символа. Той получава прочетете в Чар в. И тогава можем да направим нещо с него. Всъщност няма значение. Но злонамерен човек може да направи нещо повече като това, където те ни даде каквото и бар се посочи, то се случва да сочи към този огромен масив само на А. И това е начин, по-дълъг от 12. Така че ще отидем по целия път тук долу, където възвръщаемостта адрес да бъде използван. Така че нека да кажем, че тази функция се нарича Foo. Може би Foo беше наречена от някои други функция, която беше наречена от основната. Така че, когато Foo е стартиран, той се нуждае от да се знае къде да се върнете към. Ако Foo беше наречена от някои функции на име Баз, той трябва да знае, че това е Трябва да се върнем към Баз. И това е, което този обратен адрес тук ни казва. Но ако ние го замените с друг адрес, в този случай, това е представителство на адреса в самото начало на този буфер, след това какво всъщност ще се случи, е, че вместо да се завърне обратно към Баз, който нарича нашата функция, това е просто ще отиде до предната част на този кодекс. И ако това беше там, защото злонамерен хакер пич дойде и инжектира това, тогава може би тази сума от А всъщност не е на А. И това е всъщност просто код, който паузи вашия компютър или нещо такова. Така че, за да бъде защитата за този вид нещо, което трябва да се приеме, че никога потребителски вход е определен размер на символа. Например, когато сте били прави правопис, ти беше казал, че думите са само ще бъде 40 символа дългосрочен максимум. И това беше добро. Но ако не, тогава вие ще трябва да се уверете, че да се чете само в 45 символи в даден момент. В противен случай, може да презапишете Вашата буфер. Всякакви въпроси, свързани с това. Да. ПУБЛИКАТА: Може ли да се говори малко повече за тях? ANGELA LI: Съжалявам. Да. ПУБЛИКАТА: Микрофона е само за видео. Аз ще се опитам и проект. Здравейте, момчета. Sup? Така че нека да отида в продължение на няколко неща в CS50 библиотека, която сте използвали всички семестър, най-вече за да получите потребителски вход. Както знаете, че сте включили CS50 библиотека, като просто правиш CS50.h, които съдържа всички прототипи на функции, които можете да използвате, като GetString и GetInt, и GetFloat, и така нататък. И там е това на един ред в CS50 библиотека, която дефинира низ, който вие всички знаете от сега е просто Чар *. Но нека хвърлим един поглед на как работи GetString. Това е много съкратена версия. Можете да дръпнете нагоре CS50 файловете на библиотеката от, мисля, manuals.CS50.net. И вие можете да прочетете действителната функция. Но това включва някои от важните части. Така че, ние създадохме някои буфер с някои капацитет. И това, което ние правим, е да се получи един герой в даден момент от стандартната п. Това е, когато потребителят не въведе текст в конзолата. И така, ние отиваме да прочетете в характер, така че стига да не е нещо ново линия и това не е края на файла, който е краят на стандартния вход. И за всеки герой, който четем в, ако този герой се озовава добавяне за броя на символите, които сме се чете в и това е повече от възможностите ни, След това, което ние правим, е да просто да преоразмерите ни буфер, така че това е два пъти по-дълго. Така че отново, този защити срещу буфер препълване на атаки, защото четат символ в даден момент. И ако във всеки един момент можете да прочетете в твърде много, просто разширите своя буфер. Можете да го умножете по две. И тогава ще трябва повече място. В противен случай, можете просто да добавите знак за буфериране. И след като сте чели във всички символа, то ще се свие буфера обратно към нормален размер, добавете нищожна терминатор, и след това се върнете. Сега, нека да разгледаме GetInt. Можете ли да прочетеш това? Мога да увеличите малко. Аз не знам как работят компютрите. Няма нищо. Не мога да увеличите правилно. Това е наистина трудно. Съжалявам. Нека просто да погледнете това. Така че това, което прави, е да го GetInt първия прочитания в низ от GetString, които въведохме преди. И важната част е да се отбележи тук е, ако това споделяне, че тя се озовава четене е като не всъщност е низ, тогава ние просто се върнете към INT_MAX представлява недостатъчност. Защо се връщаме INT_MAX вместо на отрицателна 1 или 1? Някакви идеи? ПУБЛИКАТА: [недоловим] отрицателен един на един. ANGELA LI: Да, точно така. Значи вие сте много по-вероятно просто да искате за въвеждане на един или отрицателен 1, когато бъдете подканени за тото и каквото тото maxes. Това е огромна. Вие вероятно няма да го използвам. Така че това е като решение за дизайн, за да уверете се, че не случайно върне грешка или не се върне 1, което може да бъде анализирана като верен отговор. Така че, ако една линия не съществува, върнем INT-MAX. В противен случай, ние използваме sscanf, което е като scanf. Но той чете от низ. И ние имаме този форматиран низ, който е% и% в. И ние се опитваме и да съвпада с тази с каквото потребителят ни е дал. Искаме броят на съвпадащи неща да бъде 1, което означава, че само Наистина ли искаш да съответства на цяло число заобиколен от може би бяла пространство, може би не. В този случай, ако поставите в нещо като бар, бар не съответства на всички, тъй като е необходимо да бъде цяло число в началото. Така че никога не се обърна sscan 0. Така че не се върне това. Алтернативно, ако поставите в нещо като 1, 2, 3, А, B, C, че мачове както число, но също характера след това. Така sscanf ще се върне 2, които също не е идеален. Вие не искате 1, 2, 3, A, B, C да бъде валиден Int. Така че да не работи. Но казват, ще ви постави в нещо като 50. Това ще съвпада с I%, което означава, тя ще получи прочетете в п. И сега, н ще съдържа номера 50. И тогава можете да го върнете. В противен случай, те удари Retry. И тогава той просто отива отново, докато можете да получите правилното въвеждане от потребителя. Всякакви въпроси, свързани с това? ПУБЛИКАТА: Така че, ако ви се налага да разпечатате стойността на GetInt на [недоловим] ще го бъде само цяло число и Макс? ANGELA LI: Да. Така че, ако използвате GetInt, трябва да приемем, че не искате да тото макс да бъде валиден вход, защото започваш да се предположи, че това е лошо. ПУБЛИКАТА: Ако ние не разполагаме с Чар в и някой сложи в 1, 2, 3, Сам, нали все още работи за един, два, три? ANGELA LI: Мисля, че ще работи. Но вие не искате да 123Sam да бъде валиден вход от потребителя. Това не е наистина едно цяло число. Така че това не е честно да се анализира като Int. OK. В такъв случай, нека да преминем към интернет. Така HTTP не е език. HTTP е просто набор от стандарти за как ви изпрати неща от клиенти, това си ти, до сървъри. Това е, други хора в интернет. Така HTTP означава Hypertext Transfer Protocol. Това е сърцето и душата на цялата мрежа. Частта за хипертекст просто се отнася за HTML. Прехвърлянето е клиенти като Вие ще изпратите на заявления за сървъри, които дават отговори. И протокола е само, как Очаквате ли сървъра да се държи? И как трябва да се държат така че можете да се рационализира тази процес на комуникация? Така HTTP заявки изглежда много прилича на това. GET е типът на искането. Вие, момчета, са видели заявки GET и заявки POST. Това второто нещо там, / ме, че е само URI или URL адреса на мястото, където Искам да отида в рамките на хост. Така че това искане се кандидатства за страница, като www.facebook.com / мен. И това е заявка за GET. И тогава този HTTP/1.1, това е просто версията на HTTP, който използвате. Това е почти винаги 1.1. И след това има един куп други неща също. Всъщност можете да видите това, ако отвори вашата конзола, когато сте сърфиране в интернет. Отговорите изглеждат нещо Още като тази. Горната част е, отново, за тип HTTP, който използвате последван от код на състоянието. Така че 200 е ОК всичко се нареди. Тук е вашето съдържание. Вашето съдържание ще последва. И тогава тя ще ви каже какви на съдържание и други неща също. Кодовете на състоянието, има няколко важни тези, които трябва да знаеш. 200 OK е като златна всичко е наред. Всичко работи. 403 Forbidden. Това най-вероятно сте видели, ако сте забравили да коригирате нещо правилно. Това означава, че не е нужно правилните разрешения за достъп до тази на сървъра. Това е като, не, не можете да го видите. 404 означава, че нещо не съществува. Не е намерен. Вие вероятно сте видели, че много. 500 вътрешна грешка в сървър е обикновено като нещо се е объркало на страната на сървъра. Така че, когато сте били изпълнителните pset7, ако сте имали PHP грешки, бихте могли да всъщност отидете на страницата и ще видите цял куп PHP грешка неща. Но това обикновено не се случи, защото сайтове наистина не искат да ви кажа защо сайта им е счупен. Те най-вероятно просто ще се върне 500 Вътрешна грешка Server. И тогава там е 418 Аз съм чайник. Има цяла история за защо това е нещо. Но вие можете да прочетете за това, че по свой собствен път. Има цял куп други кодове също статус. Но това са тези, вие трябва да знаете. Така че нека да говорим за HTML. HTML, не забравяйте, не е език за програмиране. Това е език за маркиране. Това означава, че тя описва съдържанието. Той ви казва това, което изглежда като HTML документ харесва или не това, което изглежда но как е структурирана. Така го определя структурата и семантика на уеб страници. Това е като, това е параграф. Това е подреден списък. Това е като една част от моята страница. Тук е заглавието. Той прави подобни неща. Това не стил всяка от които, поради това е това, което правиш в CSS. И тя изглежда като серия на вложени тагове. Така да се използва например от наистина основния HTML страница, имате DOCTYPE декларация до там. Тази декларация DOCTYPE е казвайки, ние използваме HTML5. След това имате голям HTML тагове. Той съдържа главата и тялото. Вътре в главата, имате титлата. Това е, което се случва в заглавието бар на вашия браузър. Ние имаме таг връзка, която свързва във външен стил лист. И тогава имаме скрипт, който дърпа от външен JavaScript и. И тогава вътре в тялото ни е всъщност това, което се показва на страницата. Имаме точка и след това изображение вътре този параграф. Това е снимка на котенца. Забележете, че образът таг се затваря в себе. Така че, вместо на отваряне с изображение и след това да направите друг / изображение, можете Просто трябва това малко наклонена черта тук, който се затваря. И етикет на изображението също има този ключ атрибут стойност нарича надм. Това е алтернативен текст, който се случва, когато мишката върху него. Повечето HTML елементи имат някаква ключова стойност неща, които можете да го дават, различни персонализиране. Да. ПУБЛИКАТА: [недоловим]. ANGELA LI: Ами, така че това е една атрибут на етикет. Така че, ако сте използвали JQuery, бихте могли да избирайте image.getAttribute. И тогава можете да потърсите получите атрибута ALT. И това ще ви даде котенца. Ако си спомняте форми в HTML, вход елементи ще имат име атрибути. И това е, което PHP използва, за да изпратите искания, когато е подадено форма. ПУБЛИКАТА: Споменахте ли нещо за това как, ако използвате kittens.jpg или нещо, което има изчезналите папки с файлове или други файлове? ANGELA LI: Да. Така че това е, което се нарича относителна път, защото аз не се отказвам ви пълния път. Това е като, когато в C, ако го направите FОтваряне на някой файл, ако FОтваряне на hi.txt, че hi.txt се очаква да бъде в същата указател, освен ако не му се даде по- сложен път. ПУБЛИКАТА: Така бихте могли да посочите коя папка [недоловим]? ANGELA LI: Да. И вие можете да погледнете как се прави това. Но ако исках да се kittens.jpg навън на директория, аз ще направя .. / Kittens.jpg. Да. Извинете. Да. О, човече, забравих въпроса. Какъв беше въпросът? О, въпросът е е, kittens.jpg Очаква се да бъдат в една и съща директория? И в този случай, това е. Но можете да му дадете определена пътека така, че да не трябва да бъде. Добре ли е? CSS. Така че, CSS, като HTML, не е език за програмиране. CSS е просто поредица от правила за правене на прически. Това е съкращение от Cascading Style Sheets. И вие го използвате във връзка с HTML да стил страници. Така че има три начина можете да го включите. Един от начините, можете да го направите, е в главата част от вашия HTML, можете просто да отворите етикет стил и след това се придържаме някои CSS правила там. Това е доста OK. Да. ПУБЛИКАТА: Може ли да сложите тези тагове в стил между тях, нека да речем, тялото и / тяло. И тогава ще бъде стайлинг само в тялото. ANGELA LI: Вие може. Ще проработи. Но ти не трябва, защото е стайлинг вид на метаданните, че трябва да отида в главата на вашия документ. Body трябва наистина да съдържа само какво всъщност ще се появи на вашата страница. ПУБЛИКАТА: Значи слагах стил в главата си, за да оформите цялата уеб страница, нали? ANGELA LI: Да. Така че пускането стил тук, тези правила CSS ще се прилага за цялата страница на базата на техните селектори. Така че по-добрият начин да го направите е вместо на наличието на тагове стил в главата си, имате тази връзка към външен стил лист, както ти е показано в предишния пример. Това, което прави, е да се опитва и намира подаде style.css и след това да го дърпа в и използва, че тъй като стилове за страницата. И си style.css би просто изглежда по този начин. Той просто ще бъде един куп CSS. И накрая, има и друг начин може да включва CSS, които наистина не трябва никога да се направи. Това е призив инлайн стайлинг. И така всеки HTML елемент може също предприеме атрибут стил. И след това в този атрибут стил, можете да го дам правила CSS. Така че в този случай, независимо Разделения съм определяне точно тук, това ще има черен фон и бял цвят на текста. Но вие не трябва да направите това, защото това, което това не е го слага си стайлинг вътре в HTML. И знам, че ние сме били говорим за HTML е структура и CSS е стил. Ако направите това, той се смесва ги заедно. И това не е много чиста. Така че не прави това. Използването пример за CSS, там горе, ние просто изберете тялото на HTML документален филм. И ние сме като, всичко е Ще бъде Comic Sans. Аз също не препоръчвам това. Но бихте могли да направите това. Второто правило точно тук, това ще , за да изберете елемент, на базата на страница с ID главната. Така че каквото и HTML елемент, казах ID = Главната, аз отивам да дам, че една 20-пиксел марж и привеждане на всичко, целия текст, до центъра. Последното нещо, което избира чрез CSS клас. Така че всеки елемент на страницата, която дадох секция клас, отивам да го направи фонов цвят на светло синьо. Да. Това е всичко, което имам. Въпрос? ПУБЛИКАТА: Какво прави hashtag преди главния направя? ANGELA LI: Въпросът е, какво прави на hashtag преди основните задачи? В този случай, хашиш в CSS означава, изберете от ID. Така че, ако имах някои HTML елемент, като разде = основни, това CSS правило избира нещото с ID главната. И по същия начин, периодът пред раздел е изберете от CSS клас или изберете от HTML клас. ПУБЛИКАТА: Защо има има преди 6 във фонов цвят? ANGELA LI: Да. Така че въпросът е, защо е там хеш преди 6? Това е различно от това сегментиране. Това означава, че вие ​​се отказвате шестнадесетичен цвят. Така шестнадесетичен цветове, това е просто представлява цвят. А помниш ли, когато RGB тройки ти направи PSET криминалистите? Това е подобно. Първите две цифри представляват колко червен е в цвета. Вторият две представляват колко зелено. И третият представлява колко синьо. И хеша е това ще да представлява цвят. Така че всичко от 0, 0, 0, 0, 0, 0 до F, F, F, F, F, F е валиден. Това е някакъв валиден цвят, който може да се показва от вашия браузър. Въпрос? ПУБЛИКАТА: Каква е разликата между помощта от ID и от класа? ANGELA LI: Въпросът е какво е разликата между помощта от ID и клас? Можете да имате само един елемент в HTML документ, който има даден ID. Така че само едно нещо на моята страница е позволено да имат ID главната. Така че можете да го използвате за това е заглавието. Това е навигацията. Това е най-долния. Класовете са различни, тъй като можете да прилага класове до възможно най-много на HTML елементи колкото искате. Така например, аз го направих раздел клас, защото там е най-вероятно повече от един раздел на моята страница. Ти просто позволено да има колкото се може повече елементи на страницата със същите клас, но само един с определена ID. ПУБЛИКАТА: Така точката представлява класа? ANGELA LI: Да. A точка представлява клас. Cool. Това е всичко, което имам, момчета. Благодаря. [APPLAUSE] ZAMYLA CHAN: Здравейте, всички. Аз съм Zamyla. Ще разгледаме PHP, MVC, както и SQL днес. Голяма част от материала, който ще бъде покритие ще бъде доста много правото от pset7. Добре. Така че това, което е PHP? PHP е съкращение от PHP Hypertext Preprocessor. Така че това, само по себе си, е рекурсивно име, което е много готино. PHP е от страна на сървъра скриптов език, и тя осигурява на гръб и логическите основи на нашия уебсайт. Така Ангела говорихме много за HTML и CSS, които ще направят структурата на сайта. Но какво, ако искате да промените това съдържание динамично или ако тя варира въз основа на потребителя или определени условия? Това е, когато идва инча PHP Сега, обикновено, PHP може да отнеме няколко по-малко линии за изпълнение на едно и също нещо в C. Това е така, защото PHP дръжки памет управление за програмист, за разлика от нас като за изчистване безплатно, такива неща. Но тъй като PHP е интерпретативна език, обикновено, може да се изпълни малко по-бавно от С, който е компилиран език. Защото ние се движим програмиране езици, нека да разгледаме как синтаксис ще се различава. Нека бъдем много внимателни да не се бърка с това. Така че с PHP синтаксис, дали сте вграждане на вашия PHP вътре на HTML подаде или в рамките на PHP файл. себе си, вие трябва да приложите копие на кода на открито PHP и затворените PHP таговете като следва, подобно на екрана. Променливи в PHP. Всяка една променлива ще започне с знакът $, последвано от името на променливата. Сега, променливи в PHP са слабо напечатани, което означава, че не е нужно да посочи какви типа данни е, когато сте го декларирате. Все пак, това не означава, че те нямат никакви видове на всички. Така че, ако аз декларирам променлива и само в стаята то е равно на 1, а след това да декларира друга променлива, задайте го равен на "1" и после още една 1.0, добре, в зависимост от вида на равенство оператори да използвам, ако искам да се сравни във всички видове, тогава те ще бъдат равни. Но ако искате да се уверите, че видове са равни, PHP все още може да се направи които, макар и да не показват какъв тип е, когато ние първо направи файла. Сега, в PHP, въпреки че ние сме преминаването от програмиране езици от C, ние все още разполагаме със надежден, ако състоянието, точно като тази. Ние все още имаме нашите докато примки, просто като това, къде да поставите във вашата състояние и тогава тялото на цикъла. И тогава ние също разполагаме за линия, което обикновено изглежда така. Така че, ако аз исках да обхождане на всички девет psets и представи и се свържете с функция submitPset, тогава аз мога да го направя тук, които вие сте всички извършва от тази точка. Поздравления, между другото. За камерата, хората каза, благодаря ви. Сега, ако вие не искате просто да използвате този за линия, а след това PHP всъщност също е неща наречени foreach цикли. Така че, ако аз трябваше масив от цели числа, 0 до 8, се съхраняват в psets масив, тогава може да има foreach цикъл, който итерации над всеки номер в psets. И след това мога да се обадя на едни и същи функционира осем пъти, така, както аз направих преди. Така че това за всеки цикъл е хубаво, защото не разполагате с тях, ако не знаете точната дължина на масива, който са, а след това използването на този цикъл foreach ще се погрижи за това вместо вас. Така че аз направих psets като масив. Нека да разгледаме това. Масивите в PHP обикновено са същите, както тези, които сме имали в C, където Можете да декларирате масив. И тук, мога да заявя, празен масив и след това изгради динамично с помощта на индекси като цели числа. Така индекс 0, аз отивам да се съхранява цяло число име 1. В индекса на една от моя списък, аз ще за съхраняване на стойност 2. И в третия индекс но втори номер, аз ще съхраните номера 12. Сега, това е добре, че в работи тя работи добре. Но казват, че това има значение за мен какво всеки индекс притежава. За мен, индекс 0 означава как много котки, които имам. И индекса 1 означава, как много бухали, които имам. И на следващия един означава колко много кучета. Е, след това да се уточни, че вместо да трябва да помните 0 се отнася до котки и от 1 до сови, които мога да използвам асоциативни масиви, което означава, че вместо числа, като индексите ми, Аз всъщност може да използвате низове. Така че това е доста полезно. И вие сте основно само заменя целите числа със струни. И там имате асоциативен масив. Да. ПУБЛИКАТА: Има ли причина, поради която има долна черта за секунда част, защото моят списък има масива. ZAMYLA CHAN: Въпросът е, е Има ли причина, поради която има един подчертае между моето и списък? Не. Това е само как съм именуване ми променлива. ПУБЛИКАТА: На първо линия, тя е една дума. ZAMYLA CHAN: Моите извинения. Ще поправим това. Да. Те трябва да са на едно и също име на променлива. Добър улов. OK. Така че нека да преминем към низ конкатенация. Ако аз исках да взема две струни, тогава мога да ги свързвам с оператора на точка. Така че, ако имам Milo като първо име Banana и като фамилно име, а след това конкатенация с оператора на точка и след поставяне на пространството между ще направи низ, който съдържа Milo Banana, които след това мога да повторя или, по-скоро, разпечатате. Говорейки за ехо, нека да говорим за няколко полезни - Опа. Съжалявам. Няколко полезни функции PHP. Така че ние имаме - технически трудности. Една секунда. Изпратих го. Проблеми на PowerPoint. И ние сме назад с PHP функции. И ние сме назад с PHP функции. Така че ние имаме функция да изисква, когато ако премине във файл, тук е просто пример на файл, който I може да премине инча Тогава това ще включва код на PHP от този файл, който да посочи. И това ще се оцени, че инча След това ние също имаме ехо, което е успоредна ФОРМАТ. Exit е паралелно да се прекъсне, който напуска блока код, който сте инча И тогава празни проверки дали даден променлива е като нула или нула или каквото и да се приравни с това празно. Да. ПУБЛИКАТА: За съединяване на низове дот оператор едно, в PHP, е, че същото като в JavaScript, където това е използване на точката за конкатенация означава плюс? Така че за пълното име, бихте могли да имат долар подпише първи + + и след това да продължи? ZAMYLA CHAN: Да. Така че въпросът е дали в PHP ние могат да използват един и същ низ конкатенацията както в JavaScript с плюсове. И Йосиф ще влязат в това по-късно. Мисля, че той има пързалка за това. Всъщност, това е различно. Така че в JavaScript, ще трябва да използвате плюса да свързвам струни. И в PHP, което трябва да използвайте оператора за точка. Така че те са различни. OK. Така че сега ние сме обхванати всички PHP това, когато прави наистина дойде по-удобно? Е, това е по-удобен, когато ние може да го комбинирате с нашия HTML. Така че нашата PHP ще ни даде силата да променя дадена страница HTML съдържание, преди да нейното натоварване. Така въз основа на различни условия, Обикновено конкретната потребителя, че е влезете в профила си, можем да покажем различна информация. Linda, имахте ли един въпрос? ПУБЛИКАТА: Можете ли да свързвам цяло число също? ZAMYLA CHAN: Да, можете. Така че въпросът е, ако можете свързвам числа или други variable.s сега, да преминем към MVC, които парадигма, че се използва в pset7 и много уеб дизайнери използват за организиране на кода във файловете в сайта им. M означава Model. И в общи линии, модел файлове ще се занимават с взаимодействие с база данни. Преглед на файлове, те се отнасят до естетика на сайта. И дръжките на контролера заявките на потребителите, прави разбор данни и другата логика. В pset7, ние комбинирахме модела и контролера. И ние просто ги нарича контролери и сложете ги в публичен указател. И преглед на файлове, ние ги използват като шаблони в указателя за шаблони. Така че тази диаграма тук също представлява същия вид разделение с модел и контролера в лилаво тук в ляво и виждането на правото. Така че това е схематично, че някои от вас Може да сте виждали в работно време или диаграми, че сме били рисуване, колкото бяха фигуриращ си PSET. Така че тук, в даден контролер, модел контролер, имаме функции които се отнасят до заявки за SQL база данни, изпълняваща PHP логика. Може би вие ще погледнете нагоре запас в Yahoo! Finance. Или може би, просто ще провери вижте дали даден потребител е подал образуват още преди като посети вашия сайт. И тогава ти би направило Форма тук. След тази форма не е бил представен от потребителя, действието, което е посочено във формата на HTML тагове ще покаже страницата, която го връща тези данни. Така че всички на тази информация ще бъде изпраща обратно към вашия контролер. Тогава най-вероятно ще направя малко повече логика на това и може би изпълни няколко повече заявки в SQL база данни и След това, най-накрая, да излезе с добре опаковани набор от информация, която би премине в в някакъв друг шаблон показва, че тази информация. Сега, как ние всъщност пакетирате тази информация нагоре? Е, ние имаме една функция, наречена Render това беше във файла functions.php в pset7, където ще премине в името на файл, името на един шаблон. И тогава вие също да премине в асоциативен масив. И така, че асоциативен масив представлява различна информация , който искате да премине инча Сега, това, което ще бъде постоянна в тези примери е, че ключовете или, по-скоро, ключовете на асоциативната масиви, които са това, което ще бъде очаква да бъде постоянна от шаблона, защото тя знае, че се нуждае от нещо, наречено съобщение или нарече. И тогава нещата по отношение на правото, на действителните стойности, така че в този случай, който е добро момче и Мило, тези ще да са стойностите, които се променят че контролерът се променя всеки път, когато или въз основа на определени условия и ще мине, че инча Така че тук в шаблони, ние виждаме, че ние използвате HTML специални символи, които просто същество означава, че ние искаме за да получите партньорска низ че потребителското сложи инча И ние искаме да бъде заменен съобщение в тях. Така че след това, когато ние действително видите файла, специфичните информация се предава инча Имайте предвид, че ключът как правят дела е че ключовете на асоциативната масиви, които превръщат в променливи имена тук. И така, стойностите на този ключ в асоциативен масив, след това се превръща в стойност на променливата. Сега, нека да преминем към SQL. Това означава структурирана Query Language. И така, това е просто програмиране език проектиран за управление на бази данни. И той дойде по-удобно за нас в нашата pset7 финанси уебсайт. По същество, това е просто един лесен начин да проследяване и управление на обекти и таблици както и връзката им един към друг. Сега, мисля, че на вашия SQL база данни основно като файл Excel, може би, с множество табове листове. Така че, вие може да имате няколко таблици, може би, който свързва един с друг. И много като Excel, ние имаме много функционалността, която искаме. Например, можем да изберете някои редове. Ние можем да вмъкнете информация. Ние можем да актуализирате реда. И ние също може да изтриете неща. The SQL изберете произведения, като изберете редовете или ред на определени колони от една база данни, която съответства на определен критерии, които ви показват. Така че тук, когато виждам изберете * от магьосници, където къща = Рейвънклоу, след това Аз съм избиране *, което означава, че аз съм избиране на всяка една колона в тази ред от таблицата с магьосници, но само ако колоната къща равнява Рейвънклоу. Сега, това е чиста или SQL. Така че, ако аз отидох в PhpMyAdmin, което е специфичния начин, по който използвате, за да управлявате нашите SQL бази данни, тогава бих могъл да вмъкнете че в сайта PhpMyAdmin. И това ще се изпълни. Но ние всъщност искаме да направим че от страна на PHP. Е, как да го направим? Е, ние използваме функцията за заявка, която основно изпълнява че SQL заявка. Използването? като контейнер, ние може да премине в някои ценности на нашата поредица, че ние искате да смените. Така че може би аз съм съхраняване на различни стойности в curr_house, които представлява текущата къщата че аз съм преживяваш. Така че може да мине, че в като контейнер с въпросителен знак. И тогава аз ще основно изпълни едно и също нещо, както го направих и преди, с изключение на Сега, аз съм в PHP. И заявка ще върне асоциативен масив. И аз отивам да я съхранява в редове. Сега, заявка винаги може да се провали. Може би заявката за SQL не може да изпълни защото таблицата не съществува. Или може би, колоната не съществува. Нещо се е объркало. Е, в този случай, вие ще искате да направите уверете, че сте проверили дали заявка не върна фалшиво. И това е с помощта на тройната равнява на работа там. И тогава аз се извинявам, което е друг CS50 функция, която преминава в съобщение. И ако се вгледате в Извинявам се, всички го наистина прави, е да направи apology.php. Да. ПУБЛИКАТА: Бихте ли обяснили какво е това звезда прави между изберете и от? ZAMYLA CHAN: Да, абсолютно. Така звездата между изберете и от означава, че аз искам да изберете цялото цял ред от моята маса. Можех да посочи изберете име, година, къща. И аз ще получите само тези три колони в моята маса. Но ако кажа, изберете *, тогава ще получите всичко в тази колона. Тогава аз отивам да отидеш в гърба първия. ПУБЛИКАТА: Така че това е все още в SQL, нали? Дали тази заявка или това е PHP? ZAMYLA CHAN: Ние сме в една заявка. Така че това е в PHP. Така с помощта на заявката за PHP функция, ние сме изпълнение на заявка SQL. ПУБЛИКАТА: Има ли нещо в SQL главни и малки букви, като изберете или магьосници или къща? ZAMYLA CHAN: Има ли нещо в SQL случай-чувствителен? Вярвам, че е така, да. Аз вярвам, че SELECT и FROM И къде са малки и главни букви. Не? ROB BOWDEN: Значи, това е точно обратното. Имената на колоните и средствата на масата, всички от тях са малки и главни букви. Но нито един от ключовите думи MySQL, като SELECT, FROM и WHERE, тези, които не са малки и главни букви. OK. Така че, точно обратното на това, което казах. Така че всичко, от MySQL ключови думи - изберете,, къде - тези, не са малки и главни букви. Но всичко останало е. OK. Вие в предната част. ПУБЛИКАТА: Ако имате $ редове по отношение на повече от един ред, значи това е Просто става асоциативен масив? ZAMYLA CHAN: Така че въпросът беше дали редове има повече от един ред в нея, се го превърне в асоциативен масив? Така че това е масив от асоциативен масиви вече. Така че, дори ако има само един ред върната, след това ще трябва да отидете в индекс 0 от този резултат. И тогава ще трябва, че първият ред. Да, Белинда? ПУБЛИКАТА: Когато използвате ===, това ли е единствената инстанция? Или има ли други? ZAMYLA CHAN: Така че в този случай === е сравнение по видове. Извинете. === Е сравнение че сравнява видове. И тогава == сравнява във всички видове. ПУБЛИКАТА: Можете ли да обясните какво редове е в тази ситуация? Дали е ред на данни? ZAMYLA CHAN: В следващия слайд, аз съм ще обясня какво редове е. Така че, ако нямате нищо против да държите на разстояние от това. И тогава в гърба? ПУБЛИКАТА: За функции като заявка, направи и да се извини [недоловим]? ZAMYLA CHAN: Въпросът е дали тези функции - заявка, се извини, и ще направи - са общи за PHP. Те са тези, които CS50 пише за pset7. И Джей? ПУБЛИКАТА: Когато трябва да се каже, $ _SESSION, Е, че само за документи за самоличност? Или може ли да каже, че тук? ZAMYLA CHAN: Така че въпросът е, когато ние използваме $ _SESSION, че е специфичен глобална променлива, която ние използваме. Ето тази променлива ще да бъде местен в нашия функция. Така че ние просто се обявява за нова променлива. ПУБЛИКАТА: Как се извиня приложени? ZAMYLA CHAN: Въпросът е, как се извинявам приложени? И мисля, че това всъщност е доста добри практики за вас, момчета да отидат в секцията functions.php и погледнете Извинявам се и вижте как бихте могли да имат го направили сами. Така че може да оставя това на вас, но просто се каже, че ако се вгледате в извиня, След това е необходимо съобщението, което представено да се извини, а след това го прави това съобщение. Има ли още въпроси? Обичам въпроси. Така че да ги продължат да идват. ПУБЛИКАТА: [недоловим] ехо или печат там? ZAMYLA CHAN: Въпросът е, бихме могли не само да изведе ехо или печат там. Така че би направил нещо малко по-различен. Това щеше да отпечатва заявка се провали в това - Е, точно сега, ние сме всъщност в нашия контролер. Така че ние всъщност нямаме HTML създадена тук. Извини се от оказване apologize.php всъщност ви пренасочва към apology.php. OK. Така че сега, да вървим, за да се справи с въпрос от по-рано за това, което наистина е реда. Е, заявка ще се върне множество редове. И всеки ред е представен от асоциативен масив. Така че, ако аз съм изпълнен някои SQL заявка и Аз бях съхранява резултата в редове, а след това използване на foreach цикъл, тогава масив име е на първо едно там - редове. И тогава аз отивам да се обадя всеки ред там $ ред. Така итерации над това, аз може след това достъп до името на колоната в даден ред е, година колона, и къща колона. Имайте предвид, че аз не бих бил в състояние да направите това с редове, защото индекса редове име не съществува. Редове е просто набор от асоциативни масиви. Така че имате две нива там. След като имате набор от редове, вие трябва да получите в това. И след това можете да получите достъп до колоните. Знаете, че да стане ясно? Да, в предната част? ПУБЛИКАТА: [недоловим] отворите скоби за [недоловим]? ZAMYLA CHAN: Извинете ме? ПУБЛИКАТА: Откритите скоби. ZAMYLA CHAN: Това тук? Това ми позволи да се включи тази променлива. Да. ПУБЛИКАТА: Когато отпечатвате, вие сте отпечатване на HTML кода? ZAMYLA CHAN: Да. Когато печатате, това тук е вътре шаблон ми сега, така че моето виждане за метод MVC. Така че аз съм печат в HTML. ПУБЛИКАТА: Така че, ако ние отидохме в разработчик инструменти след използването на този, бихме могли да че всъщност в кода? ZAMYLA CHAN: Това е страхотна въпрос, да. Така че, ако отиде в инструментите за разработчици в Firefox използвайки Firebug или Chrome, тогава да, бихте могли да вижте конкретното HTML. Така че това не би показал $ ред ["Name"]. То ще демонстрира двете Име е в този ред. ПУБЛИКАТА: Просто е генерален въпрос, какво TR и TD определя като? Защо бихме [недоловим]? ZAMYLA CHAN: Таблица ред TR, маса, тогава TD колона. OK. Публика: Да, това е таблицата с данни. ZAMYLA CHAN: таблични данни. Да. ПУБЛИКАТА: Това е поредна, в която ред се третира като колона? ZAMYLA CHAN: Съжалявам. Може ли да повторите? ПУБЛИКАТА: Как бихте визуализира редове? ZAMYLA CHAN: Как бихте се визуализира редове в какъв смисъл? Да не говориш за тях редове и отбележете тук или редовете TR? ПУБЛИКАТА: Редовете. ZAMYLA CHAN: Тези редове и отбележете тук? Бих визуализира това като Аз изпълнявам моята заявка. И той казва, OK, имам или 0 до п размер на редове, които съответстват на критериите че си извикан. Така че аз имам някакъв брой редове. Така редове, на $ редовете, Магазини всеки един от тези редове в масив. Така че, дори ако това е само един от тях, това е още един набор от редове, които съответстват на това. Така че след това, например, това е подобно на когато пресилено кеша от потребителите. И критериите, там беше мястото, където ID равнява на ID на сесията. Там наистина е само един ред , които могат да съвпада. Но все още редове просто връщат един ред. Така че ще трябва да отидете до реда, индекс 0, индекс кеш да всъщност става дума за кеша. ПУБЛИКАТА: Има функция за печат ехо в едно и също нещо? ZAMYLA CHAN: Да. Да. Печат ехо от едни и същи. ПУБЛИКАТА: Дали примката на foreach начин само да се индексират в редове? ZAMYLA CHAN: Е foreach цикъл единственият начин, по който можете да превъртите през редовете? Не. Можете да използвате също и за линия, при условие, че знаете дължината на масив на ред е. ПУБЛИКАТА: Може ли да го отворите с помощта на ред, колкото [недоловим]? ZAMYLA CHAN: Така че не можете да получите достъп до нея само с помощта на ред, ако вие не разполагате с foreach цикъл при условие че не са декларирали ред. Да. Да, в белтъка. ПУБЛИКАТА: И така, какво TR и TD направя? ZAMYLA CHAN: Така TR и TD са HTML тагове. TR показва началото на ред на таблица. И всяка TD показва нова колона данни таблица. ПУБЛИКАТА: За визуална какво подред е като, представете си само на SQL, как те имат един ред. [Недоловим]. ZAMYLA CHAN: Да. Това е страхотна точка. Можете да визуализира реда, тъй като току-що като в таблица Excel, просто списъка на редовете. OK. Добре. Така че сега, че сме преминали над изберете, ако там не са повече въпроси, ние ще отида върху вложка. Така че, ако аз исках да вмъкнете в някои маса и поставете определена колона ценности, аз можах да се вмъкват в Рейвънклоу в седем години. Но понякога може да има два екземпляра ценности, както видяхме в pset7 когато ние бяха актуализиране на нашия портфейл. Така че в този случай, ние искаме да използваме ON ДУБЛИКАТ KEY UPDATE, така че ние не правим съхраняване на множество редове с еднакви стойност, но по-скоро го актуализира. Тогава ние всъщност имаме актуализация, което не е въвеждане. Това е просто една актуализация, където можете да актуализирате в определена маса с дадена критерии и след това, най-накрая, да изтриете, който върши много подобно нещо. ПУБЛИКАТА: Бихте ли накратко отида на дубликат ключа? ZAMYLA CHAN: Да. По същество тук, имам INSERT INTO Гринготс, е, галеони, тези стойности. Но ID, вероятно, е уникален ключ стойност, създадена в MySQL таблица. Така че, ако вече съм, че ID се създаде, след това не мога да вмъкнете нов ред. Така че, ако все още не съществува, тогава трябва да го актуализира. В средата в бяло. ПУБЛИКАТА: Така вмъкнете, актуализиране, изтриване, и изберете, са тези, цялата налична локално [недоловим]? ZAMYLA CHAN: Така вмъкнете, актуализиране, изтриване и изберете са всички SQL заявки. Така че, когато сте с помощта на SQL, ще имате наличните. ПУБЛИКАТА: назад към миналото викторини - Имаше един въпрос, който се справиха с ако имаше маса и искаше да поставете резултатите от тестовете в един и вмъквате името си, така че няма да ви разочарова [Недоловим] тест резултата си приятел. Как ще направите това с вложка? ZAMYLA CHAN: Така че въпросът е бил около предишна средносрочния въпрос. Аз не съм наясно с които един е в момента. Така че може би след това, ако искате да дойде и да ми покаже, тогава мога да със сигурност ще ви даде съвети. Но говорейки за вмъкване неща, като като резултат на някого, когато не трябва, нека да говорим за SQL инжекция атаки. Така че една SQL инжекция атака е по същество когато някой вземе предимство на ниска сигурност на начин, че вие ​​приемате в данните. Така че тук, точно като в CS50 финанси, когато влезете в системата, можем да влезем в потребителско име в логин формата, първото текстово поле, и След това въведете в паролата. Може би нашата PHP код може да изглежда нещо като това, където $ потребителско име е потребителското име и паролата, след данни е паролата пост-данни. И тогава ние просто изпълнява нашата заявка, да речем, Добре, добре, нашата заявка ще изберете от нашите потребители, където потребителското име е едно, че са представили. А паролата е паролата, което означава, че паролите съвпадат. Сега, какво ще стане ако вместо действително подаване на действителната парола, като 12345 и познае в направление, което казва парола и се опитва да проникна си сметка, какво ще стане ако вместо те твърдят това. Те биха могли да напишете в може би направи предположение парола. И тогава те ще завърши цитат после въведете или 1 = 1. Това би пестеше директно в SQL заявка да изглежда нещо като това. Изберете от потребители, където потребителско име = шипа и парола се равнява на лилия или 1 = 1. Така че или паролата има да бъде вярна или 1 = 1, което винаги е вярно. Така че в този случай, общо взето, един потребител може да да се възползват от това и просто да влезете себе си в и хак сметка на някого. Така че това е защо ние искаме да се избегне някой да се налага да направите това. Но за щастие, функцията за заявка от преминаване в контейнерите ще се грижи за това за вас. Също така, ще обикновено никога не искам действително да представят паролите себе си. Ето защо ние сегментира или криптирана тях в CS50 финанси. ПУБЛИКАТА: Изминалата викторината говорихме около MySQL евакуационните струни. Трябва ли да се тревожа за това? ZAMYLA CHAN: Това е добър въпрос. Евакуационните струните на MySQL е определено функция, която се използва в нашата заявка. Но определено изглежда в това. Бих казал, че това е честна игра да се знае че ще трябва да се обадя, че функционира на низ. Да, Белинда? ПУБЛИКАТА: Откъде знаеш, когато това е апострофи или двойни кавички? И също така, аз се чувствам като в лекция ви спомена нещо, за да не на [недоловим] или нещо такова или Вторият сингъл цитат в края. Мисля, че той изтъкна, че в лекция , което се очаква да има апостроф 1 и след това не трябва апострофи или нещо такова. ПУБЛИКАТА: [недоловим]. ПУБЛИКАТА: Работата е последният сингъл цитат вътре в тази втора кутия не трябва да има. [Недоловим] Защото, когато сте приели, че миналата единствен цитирам навън и съпоставяне за съдържание където паролата е, ако имате, че заявка, има един-единствен цитат на вече края. Вие искате да използвате този единствен цитат като този, който е изправен пред този [Недоловим]. Така че това, което е в действителност в този текст кутия не трябва да има това. ZAMYLA CHAN: Ще променим това. OK. Ако там не са всички въпроси, тогава ще тя премине към Joseph да говори за JavaScript, и така нататък. [APPLAUSE] JOSEPH ONG: Така ще се изпълняват малко по-назад. Така че, ако ви се наложи да напусне, това е ОК. Но ние искаме да държите главата си надолу ако сте в средата, така че да можете Не блокирайте фотоапарата и да използвате задния изход, ако се наложи. Аз съм Йосиф от пътя. Hi. Тест, тест. Дан, е, че доброто? Cool. Така че видеото ще бъде публикувано онлайн за тези, които Трябва да тръгнем веднага. Неудобни. OK. Така преглед тест. Това е котка. Сега, JavaScript, който може би не е Ооо като за някои от вас, момчета. OK. Така че това е на първо място, припомнят от Zamyla. Не забравяйте, че PHP е работи на сървъра. И много пъти, вие момчета пишеха примки в PHP да отпечатате HTML, нали? Така че след като този код се изпълнява, че HTML изход, който можете да разпечатате се предават на потребителя. И след като това се случи, не повече PHP може да работи, освен ако не се презарежда страницата, на Разбира се, който reexecutes на PHP. Но след като разпечатате, че HTML, вие не можете да отидете навсякъде. Така че HTML е изпратена към потребителя, който е браузърът тук, където Мило е с помощта на компютър. И така, добре, има няколко неща, веднъж ние изпращаме HTML за потребителя. Понякога ние искаме да направим нещо подобно , когато щракнете върху нещо, което искаме алармените кутии, за да поп, тези видове взаимодействия, като при натискане на ключ, когато щракнете върху нещо на страница, искам нещо да се случи. Е, не можеш да reexecute PHP код веднъж, че HTML е настроен. Е, как да направите това? Ние се въведе нов език, наречен JavaScript, който работи в браузъра която ви позволява да правите неща за HTML, след като получите ги от сървъра. И това е защо ние го от страна на клиента се обадите език за програмиране. Тя работи на вашия компютър - клиента. Всякакви въпроси за това досега? Тази парадигма има смисъл за хората? OK. Добре. Добре. Така че първото нещо, което да се отбележи, е JavaScript не е PHP. Те имат някои различни синтаксис, които ще отидат в. И те имат много различни цели. JavaScript, отново, за вашата браузър, за клиента. Сървър работи някъде на някой друг компютър, който изпраща информация да ти, нали? Така че, ако ви помоля да напишете PHP код на изпит въпрос, не пишете JavaScript и обратно. Вие просто ще загубят точки, и тя няма да бъде прав. Така че нека да получите в някои синтактичните разлики - JavaScript в ляво PHP и отдясно. Първото нещо, което ще забележите, с JavaScript, ние декларираме променливи с VaR, ключова дума - V-A-R. PHP се използва знака за долар, като Zamyla обсъдени по-рано. Ако искате да декларират асоциативен масив, виждаме познатия синтаксис на от дясната страна с PHP. От лявата страна, вместо използвате фигурни скоби. И после ключовете са в ляво. След това имате на дебелото черво. И тогава ще трябва стойностите , който искате. Така че това е начина, по който ще го направи в PHP от дясната страна на тази втора линия, която започва от Мило. И това е как ще го направите на лява страна в JavaScript, ако искате това, което ние наричаме обект. И обекти в JavaScript са само асоциативни масиви. Така че, ако искате достъп до области, в PHP използвате тази скоба синтаксис. И по този начин, вие можете да присвоите този собственик поле, за да Lauren. Е, в JavaScript, ако някой иска да достъп до поле и да я промените, можете да използват синтаксиса на точка. Можете също така да използвате синтаксиса на конзолата. Но вие не можете да използвате точка на синтаксиса в PHP. Това няма да работи. Тя работи само в PHP. И най-накрая, за да отпечатате неща, за да на конзола, вие използвате console.log, които момчета използват много в pset8. Можете да console.log това. Ако искате да отпечатате масив в PHP, вие трябва да използвате за печат R. И от дясната страна, виждаш ли, че хеш низове там. Някой попита по-рано. Аз използвам един плюс в JavaScript. Ако искам да свързвам нещо в PHP, аз използвам точката. Те са различни. Ако пишете PHP код, не използвайте плюс. Ако пишете JavaScript код, не пишете точка. Тя ще бъде погрешно. И вие ще бъдете тъжни. Така че синтактичните разлики. Знайте синтаксис, защото ако трябва да напиши въпрос и вие използвате синтаксис от грешен език, тя няма да работи. И това ще бъде погрешно. Така че нека да говорим за някакъв контрол тече разлики, как да използвате вериги във всяка от тях. Zamyla мина над дясната страна. Stuff от дясната страна трябва да сте запознати. Нека да разгледаме по левия фланг. Когато използвате за п линия в JavaScript, променливата контур, VAR аз ей там, контур на ключовете на масива. Така че, когато видите име, къща, и роля. Ако аз console.log аз, получавам име, къща, и роля. Това са ключовете. В JavaScript, за foreach цикъл отива над стойностите на този масив. Така че можете да забележите, че и двамата сме аз. Но тук от страна на PHP, той отпечатва от Milo, CS50, и талисман. Това са стойностите в PHP. Така че това са как тези двамата са различни в различните езици. Така че, ако сте с помощта на foreach контур, не мислете, че тя дава ключовете. И ако сте с помощта на за п линия, недей Предполагам, че това ви дава стойностите. Дали този смисъл досега? На следващия слайд ще ви покажа как можете да получите достъп до обратното в всеки от тях. Е, ако имате ключа в JavaScript и искате стойността навън, просто форум в масив с това. Така на Milo аз ще можете да получите това искате - стойностите. Има един различен синтаксис в PHP. Ако наистина искате да го знаете, аз не правя Мисля, че съм го показа още. Но ако се интересувате, можете да използвате тази допълнителна синтаксис на правото страна, че действително ще ви позволи да получите най- ключове в PHP, когато сте с помощта на foreach цикъл. Така че просто малко любопитни факти ако проявявате интерес. Така че това е само за да се докаже разлики между тези две линии. Не ги бъркам, когато сте програмиране въпрос. Всякакви въпроси за това. Cool. Добре. JavaScript обекти. Аз говорих за тях. Те са като асоциативни масиви. Единственото нещо, което бих искал да отбележа, тук е, че стойността в асоциативен масив може да бъде всичко в JavaScript. Тя дори може да бъде функция, като там. Имам една функция, която е стойността на един клавиш. И ако искам да се обадя на тази функция, Просто достъп до кора. И след това сложих скобите след това. И това работи. Така че някакви въпроси? Не? OK. Добре. JavaScript, като PHP, е хлабаво написали. Какво означава това? Той наистина има видове. Но когато Вие декларирате JavaScript променлива, вие казвате VAR аз. Вие не го кажа. Това не е нищо. Можете просто да кажа, че това е променлива. И тогава ще се справят с JavaScript видове под капака за вас. Ние може свободно да конвертирате между видове поради това. Така че аз започва като номер в този случай. И тогава имам низ. И да добавя, че към него. И аз я прехвърли обратно в аз. Така че в този първи ред, I е броят. На втория ред, аз сега става низ след правя пренасочването. И ето, Аз съм просто конкатенация този номер върху струната. Така че виждате, че въпреки че беше число и в първата част, тя е един вид на като се превръща в низ и след това се прибавя върху които здравей низ. И така, това е, което искам да кажа от хлабав пишете. Това е, че можете да конвертирате между видове много лесно. И това не хвърлят предупреждения най-ви харесва C прави. Така че аз сега съдържа здравей 123 в низа. Next. Можем също така свободно сравни между видовете. Така че, ако можете просто да използвате ==, много като в PHP, JavaScript прави подобно нещо. Низът 123 е равен на броя 123, когато използвате двойни равни. Когато се използва тройни равни, също иска да се увери, че типът е същото. Така, тъй като това е низ и че е номер, въпреки че и двамата са 123, когато използвате тройна се равнява на, можете да получите фалшив. По време на двойно равнява случай, можете да получите вярно, защото двойни равни не прави грижа за тип. Тройни равни го е грижа за тип. Въпроси? OK. И още нещо за JavaScript е обхват е един вид глобална освен ако не сте във функция. И тя работи по същия начин начин в PHP всъщност. Така че нека да мине през този пример. Задам аз до 999. И тогава ще отида в това за цикъл. Така че, ако аз съм печат и в този за контур, аз очаквам 0, 1, 2, 3, 4. Съм се да съм = 4. Това увеличава стойността аз сега до 5 в В края на цикъла за. И тогава се появи на линия, защото той не отговаря на обуслови вече. Какво мислите, че следващата console.log отпечатва? Така че това е, което той би направил в C. В C, защото, ако имате като VAR и извън и имате VAR аз вътре една линия, като за линия, след това го прави така, че това е с обхват, че две I са различни. В JavaScript, тя просто ще третират като едно и също аз. Получавам 5, защото това е стойността след като излезе от примката. Така че тези, които са на едно и също аз. Това прави ли смисъл? Добре, че има смисъл от гледна точка на JavaScript. Но същия парадигма не пренесе върху C. Те имат различни правила за обхват. Да. ПУБЛИКАТА: [недоловим] извън функцията [недоловим]? JOSEPH ONG: Така че, извън която функция? Така че аз ще стигнем до това само за секунди. Така че ние наричаме Foo (I). Това минава аз в Foo, стъпки него, и след това да го регистрира. Така че това е 5. Така тя става 6. Но това, което аз говоря е че аз в тази функция. Защото това е един параметър, това е с обхват до тази функция. Така че след като аз всъщност се измъкнем от този функция, сега ще отида обратно към Аз. Че аз се преодоляха само защото това е във функция. И ние имаме обхват и функции. Но ние не разполагат с обхват извън на функции в JavaScript. Това прави ли смисъл? Да. Въпрос. ПУБЛИКАТА: Same [недоловим]? JOSEPH ONG: Така че, да. В PHP, това е един и същи вид на нещо. Има лек финес всъщност. Но можете да ме питате за че след прегледа. Вие наистина не трябва да знаете че финес за теста. За всички намерения и цели, като променливи, глобални и PHP, освен ако те са в една функция, една и съща нещо в JavaScript. Да. ПУБЛИКАТА: Защо е това е позволено в JavaScript и няма къде другаде? JOSEPH ONG: Така че защо е позволено в JavaScript и не в C? Това е само този, който дойде с JavaScript реши, че това е ОК в JavaScript. Така че това е просто като език за програмиране конвенция, както бихме казали. Да. ПУБЛИКАТА: Така че, защо е направил мина 6-5? JOSEPH ONG: Така че отидох 6-5, защото, когато минах аз в Foo, че аз вътре на Foo сега е с обхват до Foo, защото съществува обхват функции в JavaScript. Но след като се измъкна от тук, тъй като тя е с обхват до функцията, аз съм просто с помощта на редовна съм, че е вътре останалата част от контрол на потока. Направи ли смисъл? Мога ли да продължим? Добре. Cool. Приемането на това е предмети са предадени по референция. Вие знаете как, когато минавате масив в C бихте могли всъщност променя масива? Това е едно и също нещо в JavaScript. Ако предавате обект, в този случай, аз преминал Milo в този catify функция. Milo започва. Неговото име е Milo Banana. Минавам покрай този обект в дадена функция защото това е един обект, асоциативен масив в JavaScript. Когато извършвате операция в тази функция, тя ще всъщност променя обекта. Така че това ще се случи само за обекти в JavaScript, точно като това се случва за масиви във вътрешността на име C. Така че Майло всъщност ще стане котка сега. Това прави ли смисъл? Така че това работи само за обекти. Обектите се предават по референция. Да. ПУБЛИКАТА: Значи казваш, че в контраст с променлива аз. JOSEPH ONG: Да. Кои променлива аз бях просто номер, нали? Това е като в C и ако предавате цяло число а, тя прави копие. И когато премине масив, тя всъщност променя действителното масив в C. Същото нещо се случва с JavaScript в този случай. Добре. И следващото, Майло е тъжен, защото сега той е котка. Това беше всъщност Milo след някои пътуване на ветеринар. Е, как да използваме JavaScript в уеб страница? Ние можем да го включим. Това е HTML код с таговете на лентата. Така че аз имам тагове ленти там. И тогава аз се въведе някакъв JavaScript код в рамките на тагове скрипт. И тогава той изпълнява това. Когато аз просто го направи по този начин, това е наречен инлайн JavaScript. Това е вид на разхвърлян, понеже JavaScript е всъщност в HTML. По-добър начин да направите това, много по-хубав, е да напишете своето JavaScript в външен файл и след това да се осигури маркера на скрипта с източник. И това ще отиде в тази JavaScript файл и чете кода на JavaScript от че вместо да подаде. И по този начин, не е нужно много JavaScript в началото на вашата HTML файл, който прави тя наистина разхвърлян. Можете просто да го поставите някъде другаде. И тогава той ще го прочете от там. Знаете, че има смисъл? Въпроси разположение. В този конкретен случай, скрипт е пред тялото. Така че, когато се изпълни, че има нищо в тялото си. Може би това ще направи малко по- смисъл, когато показвам тази следваща част. В този случай, скрипта идва след DIV. Така че всъщност се появява на DIV на първата страница. Точно тук, в този малък червен кръг, виждате появява текста. И след това сигналът се появи. В първия случай, защото скрипта беше преди DIV, на предупреждение се появява на първо място. И тогава DIV появява след ти отхвърли кутията. Така изпълнението значение. Така че ние ще пазят това в ума. Това ще бъде важно в малко. OK. Така че, добре, как да изчакате, докато цялата страница се зарежда след това преди да изпълнява някакъв код? Ще навлезете в тази малко Малко по-късно също. Но просто продължавай това разположение въпроси в ума за когато ние дойде към друг слайд. Така стигаме до DOM сега. И това, което е DOM? Така че, ако се вгледате в HTML код, това е просто един куп текст на екрана. И така, как знаете, че JavaScript това е един HTML елемент? Така че ние трябва да имаме някаква памет представяне на този структура, която имаме. И всеки път, когато ние имаме това в паметта представителство в JavaScript, ние наричаме че DOM. И това е просто начин, че хората са решили че ние трябва да представлява това HTML структура. И какво означава това DOM изглежда? Е, в представителството на паметта, ние приемаме този текст. И ние го превърне в паметта представителство. Така че това е HTML. Така че ние първо да разберете, че всеки DOM дърво има документ. Тя изглежда като дърво. И документа съдържа HTML тагове, всъщност всичко вътре в това сега. The HTML таг има две деца. Той разполага с глава. Тази глава, ако се вгледате в отстъп там как тя е структурирана между близки тагове, главата има дете. Детето е заглавието. Точно така. Сега, ние имаме дете тяло. И след това, че тялото има дете, наречено семейство. И че семейството има три деца - най-старият, среден, и най-младият. Така че вие ​​трябва да знаете как да се направи диаграма като този, когато ви попитам как да се направи схема, когато ние даваме ти на HTML в ляво. Знаеш ли как да се произведе DOM дървото. А вътре в тези неща, там е просто някакъв текст, който съм представлявана като малки кутийки. Дали това DOM дърво структура направи смисъл и какво е DOM? Е, какво значи п престои? Ето тук, на стр. там в този етикет представлява параграф тагове в HTML. Така че можете да го гледам. Но това просто означава, че е малко пространство за някакъв текст. И тя има някои подразбиране CSS стайлинг, защото това е таг параграф. Но наистина не се тревожи за тази част твърде много. Просто знам, че е контейнер за някакъв текст. Да. Въпрос? Да. ПУБЛИКАТА: Вие току-що споменах CSS. Семейството на хашиш и хашиш всичко това е в общи линии представляваща IDs в CSS? JOSEPH ONG: Да, точно така. Ще стигнем до това, което тези хешове означава в секунда. Когато Ангела мина над CSS, тя Говорихме за CSS селектори. Това са CSS селектори, че тя говори. Да, Роб? ROB BOWDEN: Бих искал също да коментирам DOM, че вътре в заглавието маркер е също текст възел. JOSEPH ONG: Точно така. Така вътре в заглавието маркер, Имам някакъв текст DOM. Така че наистина, това заглавие трябва да има като малка кутия идва на разстояние от него, както добре. Но това няма значение, твърде много в този случай. Ние не ми пука за текстови възли, както ние ги наричаме, твърде много. OK, което правим. Очевидно е, което правим. И аз ще се оправя, че когато Аз го качите отново. Това прави ли смисъл? Е, как да работим с DOM? Всеки път, когато се справят с DOM в JavaScript, има два етапа. Вие изберете DOM елемент. И след това, което правите неща, за да я. Така че в този случай, абстрактно, аз избран средната елемент. И тогава един пример за правене на неща да да се променя текста. Това се използва, за да бъде Bob. Сега, това, което направих беше да го смених Bob да Milo в този случай. И така, как ние всъщност правим това? Как да правим избиращия? И как ще го направим правенето неща, които да нещо веднъж сме го взели? Начинът, по който вие сте го научили в този клас е с помощта на нещо, което ние наречен Jquery. И така, какво е JQuery? Jquery е библиотека, която прави JavaScript-лесно да пиша. Значи някой е отделил време и пише Jquery. Jquery е действително написано в JavaScript. И след това, защото те направиха това, ние сега има един куп функции, които можем да използваме, които правят нашия живее много лесно. Така че това, което са някои от неща, нали? Това прави избора на елементи по-лесно. Това прави промяна на HTML, добавяне класове лесно. Това прави Ajax-лесно. Ние ще стигнем до това в секунда. И това е аналогична на C библиотеки. Така че можете да включва string.h, Вие се strlen. Можете да получите strcpy, всички тези неща. Когато включите Jquery, можете да получите хубава начина за избор на елементи към промяна неща, и така нататък. Можете да получите допълнителна функционалност, която JavaScript не ви дава. Така Jquery не е JavaScript. Jquery е библиотека, което е написано в JavaScript, което прави JavaScript по-лесно да пиша. Така Jquery не е програмиране език. Но JavaScript е. направи. Разбира се можете да получите вашата терминология прав. Някакви въпроси? Да. Това въпрос ли е? Добре. Е, как да използвате JQuery? Е, когато пишете някои JavaScript код и да включите Jquery в горната част на вашия файл като скрипт файл, можете да използвате знака за долар сега, за да получите достъп до Jquery. И това е различно от на знака за долар в PHP. Това е една и съща ли символ въведете от клавиатурата. Но те означават много различни неща. Dollar знак в PHP означава това е как аз декларирам променлива. В JavaScript, когато сте включени Jquery, това означава Jquery. Така че имайте това предвид. И така, как бихме могли да изберете DOM елементи? Е, когато го направи грозна JavaScript начин, който ползвате документира глобална променлива. И тогава можете да получите елемент от ID семейство. Това е наистина дълъг и многословен и не е много хубаво. Или можете да получите всички елементи които са р маркер. Това работи също в JavaScript. Но ние никога не сме наистина показа вие синтаксиса твърде много. Това, което показа, беше ти Jquery. Така че цялата селектор до там, че беше изразено в JavaScript ще става кондензира до този много хубав долар подпише hashtag семейство. И $ р, точно там, където това е така. Ако искате да изберете всички р тагове вътре в семейството, ние поставяме интервал между двете. И сега, ние получаваме всички п тагове вътре в семейството. И изглежда познато? Е, Ангела говорихме за CSS селектори. Дай ми една секунда. И така, за да изберете елемент, можете просто да използвате едно и също нещо, колкото би направил с режимен CSS. Ако сложите диез пред от него, той избира от ID. A точка избира по класове. Ако просто имате нещо, без да хешове или точки, той избира тези тагове. Въпроси. Да? ПУБЛИКАТА: Когато ние използваме точка в нашия HTML, е, че не JQuery? JOSEPH ONG: Dot в нашата HTML е нещо JavaScript. Това не е нещо, което JQuery. Начинът, по който вие го научили с Jquery е да се използва. HTML. И тогава тя премина каквото на HTML ще бъде. Така че аз ще се заемем с това само втори всъщност. Е, как да правим неща, които да елемент веднъж сме го избрали? Така че това е един пример за избиране на елемент. Така че сега, ние искаме да направим нещо за него. Така че в този случай, нека да се върнем към предишния слайд. Беше Боб преди. И аз искам да променя това вътре в HTML да Майло. Така че аз наричам HTML функцията от елемент. Това HTML функция е метод на елемент. И тогава аз го даде това, което Искам HTML да бъде. И той просто замества това, което е вътре в този етикет с каквото и аз я давам. Да. Въпрос? ПУБЛИКАТА: Използва се hashtag само за Jquery. [Недоловим] ние няма да използва това. JOSEPH ONG: Да, точно така. Но не се притеснявайте твърде много за чист JavaScript. Аз просто искам вие да се съсредоточи върху това как ще го направя с JQuery, защото това ще бъде най-важното част на теста. Точно така. Точно така. Така че виждате, че hashtag, така че съответства изберете елемент с ID на средата заради това hashtag. Hashtag означава ID. И този елемент има ID на средата. Така че това е елемент, ние подбираме. ПУБЛИКАТА: [недоловим]. знака за долар hashtag [недоловим]? JOSEPH ONG: Така че не. Въпросът е може ли да се използва. Стойност. И стойност. Работи само на елементи които са входове. В Jquery, че би било . Вал, не стойност.. Така че аз ще се заемем с един малък пример, че показва всичко това в комбинация в секунда. Но аз мисля, че това служи малко фрагмент има смисъл за хората досега. Искате ли да промените HTML, извикате метода HTML. Да. ПУБЛИКАТА: Можеш ли да обясниш отново метода? JOSEPH ONG: Така метод е просто функция, която принадлежи към един, в този случай, една от тези DOM елементи, защото виждам избран първия елемент. Всъщност, нека да използвате мишката. I първи избран елемент. И след това се обадих на този HTML функция, която го имаше. И тъй като тази функция принадлежи към това нещо, ние го наричаме метод. Това е просто измислено име за него. Кажи, че отново. Така че не забравяйте, ние избрахме елементът сега. И ние сме го постави вътре в променливата елемент. Вярно ли е? Така че, когато ние искаме да променим HTML на вътре, тъй като това е Боб преди, искате да промените този текст да Майло. Така че ние наричаме HTML. И ние го кажа какво HTML вътре този елемент трябва да бъде сега. И така той се превръща в Milo, защото аз го дадох Майло. ПУБЛИКАТА: Значи те работят заедно. [Недоловим] JOSEPH ONG: Да, да. Те работят заедно. Така един от тях избира на първия елемент. И вторият прави нещо към него. Да. ПУБЛИКАТА: [недоловим]. Ако този метод е различен от в HTML имате метода равен застроена. JOSEPH ONG: Да. Това е друг метод. Това е друг метод. И ние може да покрие, че само за секунда когато стигнем до един пример. Аз искам да се уверя, че ние се ускори защото ние сме изчерпване на времето. Но ние сме тичам начин с течение на времето сега. OK. Cool. Така че, ако искате да добавите клас, има също метод добавка клас. Това е само един пример за това какво можете да правите с JQuery. Това просто добавя един клас. Ако искате да го премахнете, можете да се обадите премахване. Това е просто още нещо, което мога да направя. Така че повече примери за неща, които можете да направите. Така че мога просто да го постави в на върха по този начин? Най-младият премахване. Ако аз просто се изпълни, че JavaScript в на върха на моя файл, ще стане ли? Точно така. Тъй като средната все още не съществува. Така че това няма да работи. Изпълнение на поръчката. Той отива до върха първи. Какво? Публика: Най-млад все още не съществува? JOSEPH ONG: Да. Най-млад все още не съществува. Точно така. Публика: Ти каза, средната. JOSEPH ONG: Съжалявам. Най-млад все още не съществува. И другото нещо е, че не трябва включваше Jquery подаде попитам скрипт SRC. Така, че няма да работи. Всъщност, аз не съм направил, че в следващия слайд, който е Трябваше да се определи, че един от двамата. Но начина, по който направи това е JavaScript е ориентирана към събития. Така че това, което ние правим, е да се използва едно събитие манипулатор, за да се случи това. И така, аз изберете документа определя първия. Аз казвам, OK, когато документът е готови, нека да стартирате функцията. Така че това е всичко, което синтактични средства. I избран документа. Сега, когато документът е готови, стартирайте функцията. И така тук, когато документът е готова, което означава всички HTML има зареден, после изпълни функцията която премахва този елемент. И така, сега, когато стартирате тази функция че съм преминала в готов, аз съм гарантирано, че всички HTML относно страница става първата да съществува. Да. Въпрос? ПУБЛИКАТА: Какво е ключовата дума за събитие във функцията? JOSEPH ONG: Така че това събитие ключова дума в функция е само параметър, който получава предава на функцията за всеки случай. Това е просто нещо, което можете да получите безплатно. Когато използвате ключови работещи в pset8, че събитието може да ви кажа, за Например, кой клавиш сте натиснали върху. В този случай, за готов случай тя всъщност не е супер полезно. Но за надолу събитие, това е по- полезно, защото ще можеш да се знае кои Ключови сте натиснали чрез достъп до ключ код изключва това събитие обект. Вярно ли е? Това прави ли смисъл? OK. Да. Въпрос? ПУБЛИКАТА: Значи може да ви постави на скрипт тагове по-надолу? JOSEPH ONG: Така че, да. Можете да поставите скрипта маркирам по-надолу. Но след това тя просто става напечено. И ние бихме искали да се централизират всички на нашия код на едно място. И това ще ни позволи да го направя. Запомни по-рано казах, че има по-хубав начин да се гарантира, че елементите са на страницата, преди да се изпълни код? И това е само един добър начин Вие ще постигнете това. ПУБЛИКАТА: [недоловим]. JOSEPH ONG: Да. Може би все пак трябва да, нали? Защото не забравяйте, вие включваше подават в горната част на страницата. Така, че ще изпълни първи преди да стигнем до дъното на страницата. OK. Така че можете да добавите различна тип събитие манипулатор. Това едно просто обработва кликвания. Когато кликнете върху най-младият, а след това тя ще се появи с предупреждение. Това е просто различен тип събитие. За разлика от готови случай, сега използвайте кликване случай, когато получите кликне върху един елемент. И така, в този случай, не забравяйте, с едно щракване манипулатор е прикрепен към най-малката. Така че това се случва само, когато Аз кликнете върху най-младият. И в другата, на готов събитието е прикрепен към документа. Така че чака за документа да бъдат готови. Направи ли смисъл? Мисля, че мога да продължа напред. Да. Въпрос? ПУБЛИКАТА: [недоловим]. В този случай можете да използвате [недоловим]. JOSEPH ONG: О, да, защото по този случай, аз трябва да чакам за най-малките елемент, който да се появи на екрана първо преди да мога да прикачите кликване манипулатор за това, което е защо аз го слагам вътре на документ готов. OK. И по-нататък, така че това е един голям пример за как ще се съчетаят всичко. Това е просто пример за валидиране форма което сте виждали в лекция. Така го направим стъпка по стъпка, както ти мине през това. И това ще бъде напълно OK. Просто го прочети от горе до долу. Имам една форма в долната част. Когато документът е готов, Прилагам представя манипулатор към формата, така че когато подам формата, получавам стойностите във всеки от тези входове. И да проверя дали това е празно. Ако е празно, се върна невярно, защото Аз не искам да се представя формата, защото формата не е наред. Ако паролата е празен или е по-малко от осем символа, не представи формата, защото това също е погрешно. И на връщане фалшиви само предотвратява формата от подаване и отивате на нова страница. И да се надяваме, това има смисъл. Мисля, че вие ​​трябва да преминете през този код стъпка по стъпка по своему. И след като веднъж сте разбрали какво Избор елементи и правя неща, които да го всъщност предполага, че това ще направи много смисъл за вас. Да? ПУБЛИКАТА: Какво прави име = име означава това? JOSEPH ONG: Така име = потребителско име и име = парола само означава поглед към атрибут на каквото , който сте избрали. И след това, което трябва да съвпадат. Така че отиваме в регистрацията. И тогава ние гледаме на всички входове и регистрация. И тогава ние вземем една, когато името атрибут е равна на потребителско име. Така че първата селектор само избира вход потребителско име. И второ, че само селектор избира паролата един, защото тези, които имат Тяхното име атрибути, определени като какво те би трябвало да бъде. Въпрос? ПУБЛИКАТА: При подаването, как прави долната част разрешаване на горната част? JOSEPH ONG: Така че това е, защото на манипулатора на събитие. Така че чакаме за представя събитие че получава уволнен от формата. И това е всичко, което е представи. Защо да се обадя, да представи там? Той казва, че когато се представя формата, Получавам представя събитие. Така че нека просто да се намеси, че и след това да изпълните този код вместо. Да? ПУБЛИКАТА: Защо имаш да има функция събитие? Защо не можеш просто [недоловим]? JOSEPH ONG: Защото в JavaScript, можете трябва да декларират функции. Това е просто как тя работи в JavaScript. Трябва да кажа, че става да тече функция. Значи тя казва, че ти си Очакваме функция тук вместо само фигурни скоби. Публика: А функцията е това, което следва? JOSEPH ONG: Да. Функцията е всичко, което е вътре фигурните скоби, след тази функция ключова дума. Да? ПУБЛИКАТА: [недоловим]. JOSEPH ONG: За подам? ПУБЛИКАТА: Не, за функция без случай. JOSEPH ONG: Да. Така без случай, можете да имате това. Ако нямате нужда от събитието, След това можете просто да го пропуснете. Но ако го направите, тогава вие просто го е сложил там. Да. Бърз въпрос? ПУБЛИКАТА: [недоловим]. JOSEPH ONG: Да. Защото това, което трябва да направите, за document.ready просто казва, изчакайте за всички на HTML кода на страницата, за да се зареди първия. И обикновено, вие искате вашите елементи в място, преди да пуснете някой код. Добре. Ние трябва да стигнем до Ajax. Ние не разполагаме с много време. Така че плюсове и минуси. JavaScript е по-лесно опит пиша с JQuery. Но Jquery е вид бавно. Това е като PHP е по-бавен от C, защото това е интерпретиран. И Jquery е малко по-бавно, отколкото JavaScript, защото тя е много неща под капака. И така, ако сте с помощта на JQuery, това е само малко по-бавно от JavaScript, въпреки че дава хубава елегантност. И най-накрая, Ajax. Досега с Ajax, което не сте виждали Ajax от гледна точка на pset7 все още, защото когато го направите, като изпратите форма да цитирам. Той зарежда нова страница. Така че, можете да получите тази голяма бяла светкавица на страницата, докато този втора страница се зарежда, нали? Би било много хубаво, ако можете не са имали този флаш. Подобно на Facebook, ако просто отидете на на дъното, добавя ново съдържание без освежаване на цялата страница. Така че нещо подобно би било хубаво. Това е JavaScript код от лявата страна. Можете да получите това, което е вътре в този вход. Можете да получите информация склад от Yahoo! И тогава ще направи голяма низ казва, добре, това е посланието, което искате да се покаже на екрана. И тогава ще ви постави това послание вътре на някои HTML елемент, който получава показва на екрана. Така че това е всичко, което се случва тук. В общи линии, тъй като това е Не се нуждаят от JavaScript и да стартирате Вече PHP, това ще се уверите, че страницата не се освежите. Така че това е просто една абстрактна идея че аз казвам, тук за сега. Абстрактната идея е, че ако го направя всички в JavaScript, вие не разполагате с страница опресняване. Но как всъщност се прави това? Ами, всъщност, нека да говорим за проблем с този първи. Един от проблемите е в JavaScript, изпълнение е в синхрон. Така че ще трябва да чакам за една линия, за да завърши, преди да изпълнение на следващия ред. И какво, ако аз отивам да Yahoo!, и техните сървъри са много бавни, и тя им отнема три секунди, за да върни ми тази информация склад? Когато ударих тази цена линия, ако изпълнение е в синхрон, тъй като тя е от подразбиране, какво е точно ще направя, е Вашия браузър се случва да се забави за три секунди. И ти няма да бъде в състояние да направи нещо докато получава тези данни. Това ще бъдат замразени. А това е лошо. Вие не искате на потребителя да има замразени уеб страница. Вярно ли е? Това е просто лош. Всички са съгласни? Ако сте браузване Facebook и да го замръзва и не можеш да направиш нищо, вие да наистина разочарован. Така че решението е да направим нещо асинхронни вместо. Така че всичко това асинхронен нещо казва е, аз отивам да питам това URL за някои данни. И тогава аз ще продължа. Аз съм просто ще запази изпълняващата независимо от кода, който беше след това. И тогава, когато тези данни са готови, тогава аз ще го обработим. Това е всичко, което се казва. Аудитория: Ajax просто прави код асинхронно? JOSEPH ONG: Това е един асинхронен начин на привлекателен данни. Така че първото нещо, за Ajax е това ми позволява да получите данни от външен сайт. И второто нещо е да го прави сигурен че страницата ми не се забави, докато съм извличане на тези данни. Това е асинхронен част от него. Защото тя отива някъде другаде, защото аз кажа, че продължавам, докато това е привлекателен, че данните, които го прави асинхронно. Продължавам да изпълнява. Така че пазете, че асинхронни идея в ума. И аз ще ви покажа това, което разликата е. Синхронното версия е от лявата страна. Асинхронният версия е от дясната страна. Вижте цифрите за да видите кои стъпки съответстват какво изпълнява при всяка линия. Ей там, сигналът се появява първо. Защото все склад информация от Yahoo! отнема три секунди го сергии в продължение на три секунди. И след това го предупреждава цена след тези три секунди. Така че сега, който показва алармените нагоре по това време - три секунди инча И след това го предупреждава от след това. Така че просто отива стъпка по стъпка. Това е като това, което момчета ще приеме, нали? При асинхронно изпълнение, ви предупредим, първо. След това отидете на разстояние до този URL. И вие казвате, аз отивам да просто питам за данните. И тогава аз ще я обработва по-късно. Така че веднага изпълнява следващия ред, след като се направи, че асинхронна заявка. Така 0.001 секунди, вие виждате предупреждение здрасти. Изпълнете тази функция, сигнал чао. И тъй като съм дал обещание, че аз да обработва данните по-късно, какво случва се, когато тези данни се връща три секунди по-късно, тогава аз тичам, че функция, която имам там. Да? ПУБЛИКАТА: Може ли да посочите или изясни какво означава Ajax? JOSEPH ONG: Така че Аякс е начин, че ако се нуждаят от данни, когато съм на един сайт и аз не искам да се обнови страницата, а след това Аз използвам тази технология, наречена Ajax. Това по същество означава само, отидете донесе данни от друг сайт. И го направи по начин, който само не се забави моята уеб страница. ПУБЛИКАТА: Така е, че присъща част от JavaScript или JQuery? JOSEPH ONG: Значи някой е написал начин да направите този в JavaScript преди много време. В един момент, тя не съществуваше. И така някой е измислил тази техника да се позволи на хората да поискат тези данни по този начин. И те написаха някои неща да го направя за теб. И Jquery просто ви дава тази много хубав начин да го направя с тази $. получите функция. въпроси? Мога да отговарям на въпроси за Ajax след това също. Аз ще бъда тук. Така че нека да ни донесе данни без опресняване на страницата. И нека да ни направите това в асинхронен начин, че не замръзва страницата. Твърде дълго, не съм чела, че ако обяснение е твърде дълъг за вас. И накрая, напречно сайт скриптови атаки. Видяхме това с Zamyla. Ако в базата данни ми някой има това име, който е този скрипт тагове, и аз има някакъв код на страницата си, че разпечатки от имената на хората в един ред, или имам някои JavaScript код, който въвежда това име в страницата, какво HTML получава произвежда? Е, аз разпечатате на HTML тагове. I разпечатате всички тези тагове. I стигнем до частта, където аз съм печат излизам с приятелите ми. Отпечатам Lauren навън. Той отпечатва Milo навън. И тогава името ми в базата данни е скрипт мнение незавидно Facebook статус. Защото аз добавя това в страницата защото прилича на JavaScript, когато тази страница получава изпраща на потребителя, то ще се изпълни, тъй като JavaScript. И така, това е, което ние наричаме крос-сайт скриптове атака. Някой поставя злонамерен информация в вашата база данни, която може да съответства на някои допълнителни низ или някои JavaScript низ. И когато тя стане отпечатва към страница по този начин, тогава какво се случва, е, че лошо код ще се изпълни, че аз не възнамерявам за да се изпълнява. И това е всичко, крос-сайт скриптове атака. И начина, по който се придвижва това е като Zamyla каза. Просто увийте неща в HTML специални символи. И тази HTML специални символи е PHP функция, която ще попречи на този вид на нещо да се случи на вас ако имате злонамерен низ във вашата база данни. Тя просто го измъква, така че това не е така се тълкува като HTML. То замества малки скоби с това, което ние наричаме лица. И ние отидохме над това в лекция също. Така че аз мисля, че вие, момчета, трябва да имат добро разбиране на това. Въпроси? Да. ПУБЛИКАТА: Е, как ще на [недоловим]? JOSEPH ONG: Кажи, че отново. ПУБЛИКАТА: Как би монитора - JOSEPH ONG: Точно така. Така че имате нещо, което казва, че когато Да се ​​регистрирам, напишете името ми. Просто напишете в това поле, името ми е съблякоха мнение незавидно Facebook статус близо скрипт маркер. И това също ще стане пуснати в база данни, защото аз не мога да кажа на някого в света все още няма име с лява стрелка в него или Думата скрипт в нея. Това не наистина да има смисъл. Така че аз просто трябва да се уверите, че дезинфекцирайте нещата, преди да го отпечатате до страницата. ПУБЛИКАТА: Значи специалните карти HTML предотвратява таговете скрипт? JOSEPH ONG: Да. Така че това не пречи на таговете скрипт. Той просто прави сигурни, че скрипт тагове не получават тълкува като HTML или - Да. Той просто идва като това, което е в действителност. Добре. Така че това е преглед на викторина. Cool. [APPLAUSE]