R.J. AQUINO: Давайте просто почати. Так що це Вікторина 1. Ось деяка інформація високого рівня. Про сторінки для вікторини є в цьому НЕ URL, більше не CS50.net, хоча це буде як і раніше працювати. Це CS50.harvard.edu/quizzes/2013/1. Це великий Про сторінку, кажу вам, де і коли, а саме в наступну середу в купу номерів. І в наступну середу, я значить через два дні. Вся ця інформація є. Але це накопичується. Так що все від першій половині рік потенційно на вікторині, тому що ви не можете дійсно зробити розширений речі в C без, якщо умови та для петель тощо. Але буде акцент на пройдений матеріал з Вікторина 0, починаючи з структурами і File Введення / виведення Це, як правило, більш складною, ніж Вікторина 0. Середня оцінка, як правило, нижче. Вчитися. У той час як ви вчитеся, не забудьте використовувати CS50/discuss щоб поставити свої запитання і читати питання інших людей. Так що, якщо ви не маєте будь-які питання, увійти і читати питання ваших друзів. Вони, ймовірно, хороші питання. І прийняти практичні тести. Ми даючи вікторини для сім чи вісім років. Вони всі в Інтернеті. Майбутні питання схожі щоб старі питання. Ось як ми робимо їх. Вікторина поки не існує. Ніхто з нас не бачив його. Але це буде виглядати попередні вікторини. З цієї оглядової сесії, це не вичерпний список тем. Ви не можете просто бути присутнім в цьому, а потім бути абсолютно готовий до вікторині. В іншому випадку, це не було б що більша частина вікторини. І це також не обов'язково все, що ви повинні знати про будь дана тема. Це призначається, щоб піддати вас речей ми розглянули, нагадати вам, що ми покриті, і те, як в які ми розглянули його. Але вам доведеться піти далі і глибше, коли ви вивчаєте, щоб перевірити ще раз що ви знаєте все про будь-який даний тема і що ви заповнили всі кути, які були покрита лекції. Тест відзначає сказати вам, щоб перейти до писец замітки, годинники лекцій відео. Це хороший спосіб переконатися, що ви маєте покриті всі ваші бази. Так починається, коли я зробив це слайди, я намагався поставити, де я знайшов інформація. Таким чином, для файлу введення / виводу, наприклад, тиждень 7, Понеділка лекція, і відповідав Розділ 6 і проблема Набір всіх є інформація про фото введення / виводу Я зробив це для кожної теми. Так що ті назву гірки можуть бути корисно для вас. Так от у нас файлу введення / виводу Пам'ятайте, що в Проблема Set 5, ми використовували FOPEN, FClose, FWRITE, FREAD і FSEEK. Оговтавшись 30ish у форматі JPEG і того, змінений і заплуталися з растрові зображення, ви повинні бути дуже знайомі з цими функціями і як вони працюють. НЕ Якщо ви більше не знайомі, виразно розглянути їх. І переконайтеся, що ви розумієте, що різні аргументи, коли вони використовуються. Але загальні пов'язаних з файлами помилки Вас можуть попросити про - добре, якщо ви забули, щоб перевірити, Еореп дійсно працював, перш ніж лягати змінити файл. Це може бути погано. Якщо ви забули FClose файл що ви fopened, що схоже на витік пам'яті. Це дуже погано. І, забувши перевірити, якщо у Вас є досягли кінця файлу перед вами почати писати до нього. Так що, якщо ви говорите, гей, я на кінця файлу. Дайте мені ще 5 байт. Ну, це, ймовірно, не збирається працювати так, як ви очікуєте. Ось вже це для файлового введення / виводу, тому що ми зробили так багато, з встановити проблема. Так що, якщо ви зрозуміли, що відбувається в Архів завдань 5, пам'ятаю bitmats і у форматі JPEG, то ви, мабуть все набір для файлового введення / виводу Якщо це трохи нечіткі, безумовно, переглянути цю проблему встановити і пов'язаний з ним матеріал. Структури були темою, що були на лінія між Quiz 0 та вікторини 1. Не цілком зробити розріз для вікторини 0. Таким чином, вони безумовно буде на Вікторина 1, тиждень 7, понеділок. Що це структура? Тут ми показуємо структуру. Це як нового типу. Це як контейнер для декількох полів. У цьому випадку, ми оголосили структуру студент, який має два поля - Рядок, ми називаємо ім'я та внутр що ми називаємо віку. Тому, коли я обійти студентів або я змінити студентів, я буду в змозі доступ до їх ім'я і їх вік. Давайте подивимося на код для цього. Тут ми бачимо, що я оголосив студент с, так само, як Я заявляю, будь-яку змінну - внутр х, внутр у, і так далі. Ось студент с. Він починає з чим на його полях. Так давайте встановимо їх. Ви встановлюєте поля структури з точки. Так що я сказав тут, що s.name = RJ. І s.age = 21. Ви також можете оновити поля так само, як ви б оновити Значення змінної. Тому я хочу, щоб змінити своє ім'я від RJ з немає періоди до R.J. пишеться правильний шлях. Було б s.name = RJ, те ж саме як ми сказали це спочатку. І тоді ви можете отримати до них доступ. Так ми встановили їх. Ми оновили їх. Ви також можете отримати доступ до них в тому ж самому шляху. Так от, я друкую R.J. Є 21 років. І я доступ до цих значення з s.name і s.age. Так от доступу Структури з точковою нотації. Так, питання? АУДИТОРІЯ: Чи є причина, по попередній слайд, що ви не ставив студент у верхньому рядку, як ЬурейеЕ структура студент, а потім студент в кінці? R.J. AQUINO: Таким чином, питання було, на На цьому слайді, ми зазвичай бачили ЬурейеЕ структури вузла, а потім поля в структурі і то слово вузол. І як же тут я не говорив, TypeDef структура студент, а потім поля в структурі, а потім студентом? Причина в тому, що я не потрібно доступ до нього всередині структури. Так що це нормально, щоб залишити його без імені. Я можу просто залишити його як анонімний структура. Причина ми робимо це для пов'язаних списків і речі в тому, що всередині ви повинні для посилання на ить вузлів зірку. Таким чином, структура повинна мати ім'я, так що ви можете отримати доступ до нього пізніше. Це незначна деталь. Але ви, як правило, см. ЬурейеЕ структури фігурні дужки, якщо вам не потрібно найменування та ЬурейеЕ структури деяких ім'я потім у фігурні дужки, якщо ви будете потрібно ім'я. Так що це хороший питання. І в той момент, ми, як правило, щоб змінити Структури і обійти Структури по довідка, а не за значенням. Так що ми просто обійти покажчики на Структури замість передачі навколо Структури себе. Таким чином, ви дуже часто буде використовуючи, в цьому випадку, студент * або структура вузла * або вузол * замість із студентів або вузлів. Так от, я сказав, добре, змінна PTR буде також адреса с. Це буде покажчик студенту R.J. Таким чином, ми можемо отримати в цих областях так само, як ми отримуємо нічого. По-перше, ID посилатися покажчик щоб отримати структуру. Це * покажчик, а потім точка, а потім вік. Так для доступу до поля, і я оновив його зараз до 22, тому що, давайте скажімо, це був мій день народження. Там в ярлик синтаксис за допомогою стрілки тут. Так PTR стрілка вік просто так само, як * ptr.age. Так от, це те, що ви будете мати запам'ятовувати і пам'ятати. Ви використовували його багато в pset6, орфографії PSET. Але це насправді те, що відбувається на під капотом. Це разименованія а потім до нього доступ. Питання? АУДИТОРІЯ: [нерозбірливо]. R.J. AQUINO: Так чому ж ми, використовуючи покажчики як структур замість Структури себе? Причина буде, якщо ви проходите структура в залежності, ви, ймовірно, хочу передати навколо тільки 4 або так байт, які представляють покажчик, як протилежність потенційно 30 або 40 байт, які структури. Так проходження щось у функцію легше, коли справа менше, коротше кажучи. Питання? АУДИТОРІЯ: Ви, можливо, згадав про це на початку, але є інші слайди на [нерозбірливо]? R.J. AQUINO: Ці слайди буде після сесії з проведення огляду. Ми опублікуємо їх на сайті. Так рухатися далі і рухатися по чуть-чуть швидше, ми збираємося говорити про дані структур. Є багато. Ми розглянули купу з них. Ось те, що ви повинні розуміти, про структуру даних. Ви повинні дійсно зрозуміти на високому рівень, що кожна структура є. Чи можете ви пояснити англійською мовою, щоб ваш друг, який не прийняв CS50, як ми організації наші дані і чому ми б використовувати щось на цьому шляху? Це річ один. Річ два, розуміють реалізація. Так розумію, як використовувати ці речі в C. І ми будемо йти з цього приводу. А потім, що три знатимуть працюють раз і обмеження різні структури, які ви використовуєте. Так розумію, чому ви повинні використовувати замість масиву хеш-таблиці. Зрозуміти, як швидко, в середньому, доступу до хеш-таблицю є. Зрозуміти, що операції швидко на зв'язаний список, але повільно на масивах і навпаки. Таким чином, щоб зрозуміти, що, вам доведеться зрозуміти позначення Big-O просто знати як говорити про них Мало що. І ми будемо говорити про це. Так перша річ, зв'язані списки. Ось високого рівня картинка пов'язаного списку. Покажемо це в класі. Ми зазвичай мають 10 осіб стоячи на сцені. Але у нас є ряд вузлів, де кожен вузол має деяке значення і покажчик його наступного значення. Таким чином, щоб добратися від одного вузла до іншого, ви просто сказати, дайте мені наступний вузол. У вас є, що вузол. Дайте мені наступний вузол. У вас є, що вузол. Дайте мені наступний вузол і т.д. поки немає вузол лівої. Так продовжують говорити про це на високому рівні. Це дуже легко вставити речі в зв'язний список. Якщо ви не дбаєте про порядок, ви можете просто кинути його на самому початку. Це постійна часу. Але важко знайти значення. Якщо ви намагаєтеся запитати, становить сім в моєму списку? Ви повинні пройти кожен значення. Це сім? Це сім? Це сім? Це сім? Знову і знову. І це О (п). Так при вивченні для вікторини, порівняйте це з масивами. Хіба що в порядку? Світло згасло тьмяним. ОК. Коли це зв'язаний список краще? Коли це масив краще? Так що давайте подивимося на код. Ось потенційний вузол. Це структура. Він має Int N, які буде наша цінність. І вона має структуру вузол * наступний, який наша покажчик на наступний вузол. Так от, ми бачимо, що ми випадково щоб поставили Int в нашому вузлі. Але якби це було пов'язано список гольца зірки або зв'язаний список поплавців, ми повністю може зробити це. Пам'ятаєте, в pset6, ви, ймовірно, мали зв'язаний список символьних зірок або просто статичні масиви символ. Давайте подивимося тут операції. Тому ми хочемо, щоб вставити новий п в нашій пов'язаного списку. Ми починаємо з голови покажчик, який покажчик на цей вузол, який має значення п-густо покажчика, що вказує на цей вузол є значенням п і найближчих нуль, тому що це останній вузол. Таким чином, з метою економії часу, я буду покласти весь код на екрані. І ми будемо йти через нього кілька рядків за один раз. Так ось код. Я сподіваюся, що це читається. Перше, що ми робимо, ми Malloc новий вузол. Так що має покажчик на новий вузол, що не зовсім є будь-яка постановка в ньому немає. Ми перевіряємо, щоб переконатися, що новий вузол не є нульовим. В іншому випадку, ми повинні здаватися. Так перевіривши, що, ми тепер встановити значення у вузлі. Таким чином, ми поставити новий п в нашу н області. І ми встановили наступний покажчик, щоб вказати на оригінальна голова, так що ми можемо зараз вставили це вузол в нашому списку. Нарешті, у нас є глобальну точку голови на наш новий вузол, так що якби ми мали починаються в голові, ми були б на це Новий перший вузол замість старий перший вузол. І коли ця функція виходить, не зміню новий вузол більше не існує, тому що це було локальними для функції. Так що цей стан світу. Наш глобальний керівник вказує на наш новий Перший вузол, який вказує на наш Оригінальний перший вузол, які точки до вузла після цього. Це було вставки. Я сподіваюся, що було відносно просто слідувати. Якщо ви сумніваєтеся, намалювати картину. Так що я вважаю, що говорити про зв'язані списки і дивлячись на Код дуже не корисно. У той час як, дивлячись на картини пов'язані список дозволяє мені думати, ох, як У мене є цей вузол тут. Але, якщо я оновлю цей покажчик, вона закінчується відключений. І я забув, де вузол йде. І код виходить. І у вас є кілька вузлів що відключені. І ви не в кінцевому підсумку з список ви хочете. Так що якщо ви малюєте картину і зробити це крок за кроком, ми сподіваємося, ви побачите правильний порядок речей в термінах оновлення вказівників, щоб переконатися, що список приходить разом. Вставка відносно проста. Більш складним буде вставки у відсортований список. Більш складна функція видалення і знайти, таким чином переглядаючи список на побачити, якщо там щось є. Може бути, ви зробили це в pset6 коли ви потрапили в ваш хеш-таблиці, і Ви сказали, ну, це слово яблуко в моєму пов'язаного списку? Таким чином, ви, можливо, вже зробили це. Але безумовно, освіжити вашу пам'ять і спробувати повторно реалізувати знахідку і перевизначити видалити для пов'язаного списку. Веселощі примітка боку, є також двусвязний списки, де у вас є покажчики, які вказують як вперед, так і назад, так що ви могли б піти на наступний вузол і до попереднього вузла. І постало питання про торішні вікторина цього типу, говорити про двусвязний списки. Так от, це структура, що ти щодо знайомі, тому що більшість з вас, ймовірно, використовували їх на pset6. Ось один, що трохи менш знайомі. В якості примітки, я думаю, що Вікторина 1 в першу чергу складніше, ніж Вікторина 0, тому що матеріал, який ви робите, ви не зробили більше. Щоб помістити це ще один спосіб, для Quiz 0, ви написали багато C. І ми питав вас про С. Для Вікторина 1, ми збираємося запитати вас про PHP і JavaScript, які ви не писав стільки. Ми збираємося запитати вас про C-коду, Ви не написали стільки, цей просунутий C матеріал. Так виразно, практика того, що ми говорили в лекції, що ви не обов'язково робити з проблеми встановити. Говорячи про це, ви не написали стек з проблеми встановити. Але це було в лекції. Ось високого рівня картина стеки, що ми показуємо щороку. Це стек літаків в Mather їдальня. На високому рівні, стеки в минулому прийшов, першим пішов структури даних. Це означає, що ви збираєтеся навести - 1, 3, 7, 12, 14, негативний 0. Єдине, що я не міг мати сказав - негативний 3, 0. Ви поставити всі ці речі дюйма І останнє ви поклали в першому той, який збирається вийти. Так у вас є дві операції - штовхати і поп-музики. Всі покласти в тому, що я був жестикулюючи, подібні цьому, поштовх. А потім, коли я досягаю, щоб захопити щось або досягти на вершині, щоб захопити щось, це поп-музики. Таким чином, ми збираємося реалізувати стеки. І ми показали їм у лекції використанні масивів. Але ви могли б зробити їх за допомогою пов'язаних списків. Стек являє собою концептуальну даних Структура, не подобається від конкретної реалізації однієї. Так що він має виглядати? Це буде виглядати ніби як це. Ви повинні були б ціле розмір. І вам доведеться масив значень, що ми називаємо лотки, тому що це що картина була для нам - Int лотки - , А потім деякі максимальна ємність. Так що наполягатиме виглядає? Ну, якщо у нас є стека с, потім натиснути щось на с, ми отримаємо розмір с. І що буде наступним відкрите місце нашого масиву. Так що, якщо у нас є три речі в нашому стека, Потім лотки 3 буде наступним відкрите місце, тому що 0, 1, і 2 вже заповнені. Таким чином, ми помістити значення в s.trays [s.size], третє місце. А потім ми збільшуємо s.size сказати, агов, у нас було три речі, перш ніж. Тепер у нас є чотири. Тому наступного разу ви натискаєте, ви збирається покласти щось в 4. Або наступного разу, коли ви поп, ви збираєтеся дивитися на 3, а не 4 або будь-який інший. А потім ми повернемося вірний скажімо, агов, нам це вдалося. Це працювало. Як правило, якщо функція це повинні повернутися істинним або брехня завжди повертає істину, ви можете зробили щось не так. Так це працює? Ну, вона відмінно працює протягом 1, і 2 і 3, і 4, і п'ять. Але, припустимо, я досягну своєї потужності. Я тоді зіткнулися з проблемою, тому що якщо розмір такої ж, як здатності, я зараз намагається покласти щось в масив, в якому у мене немає місця. Так коротка перевірка, щоб виправити це. Якщо s.size == ПОТУЖНОСТІ, повернення помилковим. В іншому випадку, піти і зробити те, що ми зробили. Так, що ще ми могли попросити про для стеків? Що ще слід вчитися? Що ще ви повинні практикувати? Ну, реалізації поп-музики. Ми вже зробили поштовх. Я це виправимо. Реалізація не-масив, де Ви використовуєте зв'язаний список, можливо. Реалізація без внутр. Ми зробили цілими тут. Але вона могла б бути поплавці. Я міг би бути рядками. Це могло б бути символьні зірки. Подивіться на останні тести для видів питання ми попросили про стеків. Скажу, що ми розглянули стеки навколо так само, як ми розглянули їх в останні роки. Так що питання вікторини повинні бути хорошим показником. Рухаючись вперед ще швидше, черги. Вони як стеки. Але вони спочатку увійшов, першим вийшов. Якщо ти англієць черзі слово ймовірно, зробив багато сенсу для вас. В іншому випадку, ви можете мати чули про нього у вигляді лінії. Вони працюють як лінії в магазині Apple. Першою людиною, щоб показати в 3:00 вранці перший людина, яка купить його IPad. Тому у нас є дві операції - поставити в чергу і з черги. Ставити ставить когось в лінії. Dequeue тягне перший людина з лінії. Знову ж, ми можемо реалізувати це з масивом. Так в чому ж структура у нас показав у лекції? Це був один. Знову ж, числа. Знову ж, розмір і ця нова річ фронт. Чому існує щось, зване передній? Це індекс на наступний елемент з черги. Це просто внутрішньо відстеження перший хлопець, щоб показати, щоб ми витягнути її, коли ми повинні. Виразно дивитися на лекцій і спробуйте для реалізації Enqueue і Dequeue при вивченні для вікторини. Важливі речі, щоб думати. Пакувальна навколо, якщо передня плюс Розмір закінчується більше, ніж можливостей. Знову ж, якщо ваша структура заповнена, Ви будете мати проблеми. Хеш-таблиці ви бачили раніше. Більшість з вас, ймовірно, реалізується їх на pset6. Це структура, яка прагне до O (1) вставки постійна часу і O (1) Постійна часу пошуку. У CS50, ми реалізували це як масив пов'язаних списків. Ключовим компонентом в хеш-таблицю є хеш-функція. Так він перетворює ваш внесок, скажімо, словникове слово, в число, яка буде наш індекс. І ми будемо використовувати цей індекс в нашому масиві. Отже, ось милий маленький картина від study.50.net. Кидаємо всі слова в наш хеш-функція. І хеш-функція говорить нам де поставити ці слова. Це все здорово на землі, де є тільки одне слово для кожного слота. Але, як ви пам'ятаєте з pset6, є більше слів, ніж слотів. Так що ж відбувається, коли ви отримати зіткнення? Замість того щоб зберігати одне значення в, скажімо, хеш-таблицю 3, ви зберігати зв'язаний список. І так замість того, диня тут, вам доведеться зв'язаний список, де перший вузол диня. А наступного вузол кішка. І третій вузол зіткнення, давайте сказати, тому що всі ці слова починаються з С. Так що більшість з вас зробили це для pset6. Якщо ви не зробили хеш-таблицю на pset6 і ви намагалися щось на зразок синтаксичного дерева, безумовно, переглянути хеш-таблиці. Якщо ти зробити це на pset6, безумовно, розглянути хеш-таблиці. І якщо ви зробили це на pset6 і це не так виробити абсолютно праві і вас було багато неприємностей з ним, безумовно, розглянути хеш-таблиці. Так що урок дійсно, безумовно, розглянути хеш-таблиці. Переважна меншість з вас пробував з приміряє pset6. Високого рівня зображення. Це щось на зразок цього, де кожен вузол має безліч дітей, де кожен дитина відповідає букві. І кожен вузол також говорить, агов, я ні слова. Таким чином, в даному випадку, слово Максвелл, якщо ви будете слідувати М до А до X-W-E-L-L, а потім слідувати йому ще один. І ви отримаєте цей символ, дельта, яка ми означають означає це слово. Так Максвелл це слово. Ці дельти всій означає які речі є слова і які речі не. Таким чином, в pset6, дані ми зберегли поряд будь-який з наших вузлів було "Я слово. "І здорово, що про спроб буде вони демонструють вставки і пошук в O (довжина слова). Так що просто пройти через Максвелла, це M-A-X-W-E-L-L. Так сім чи вісім - Я не можу порахувати - кроки, щоб отримати до кінця і перевірити речі. Так швидке впровадження тут. Роб пройшов пов'язані перерахувати до його посмертних. Так перевірити це. Вибачте. Пройшов вигляді дерева в його посмертних. Так перевірити це. Але ви в принципі є кожен вузол має 27 покажчики на найближчі вузлів і одного Boolean бо боюсь слово. Перевірте посмертно Роба за те, як це насправді реалізується. Наша остаточна структура, наші дерева і бінарні дерева пошуку. Так, дивлячись на них, вони були покриті зовсім недавно Тиждень 8, понеділок. Дерево схоже на вигляді дерева, крім вас не обов'язково повинні 27 вузлів на кожна точка. І у вас немає цих даних один на крок, який означає чи - шлях не має значення. У той час як синтаксичного дерева, шлях зверху знизу, Максвелл, було важливо для нас. Але кожен вузол має кілька діти, можливо. У нас є ще трохи словниковий запас. Корінь дерева є на самому верху. І ми говоримо, що дуже нижній вузли, які не мають діти листя. Так як синтаксичного дерева, дерево Структура вузлів. Поширений тип дерева, що ми збираємося поговорити про бінарне дерево, де кожен вузол не має дітей або одна дитина або двоє дітей. Так ця картина тут не бінарне дерево, тому що вузол 3 має трьох дітей. Але якби ми мали ігнорувати тих, інше цього є бінарне дерево, тому що це демонструється властивість, що кожен вузол має нуль, один або дві дитини. Так як же ми висловлюємо це в коді? Ми могли б мати вузол, де кожен вузол має цілим числом всередині нього, а також як покажчик на дерево зліва і покажчик на дереві Право, так двох дітей. Як це корисно? Ну, якщо ми зробимо правила про те, де ми покласти вузлів, ми можемо зробити пошук швидше. Так що є поняття бінарного пошуку дерево, де всі вузли ліве піддерево має менше значення ніж вузол, ми дивимося на. І всі вузли правого піддерева мають велику цінність ніж кореневого вузла. Тепер, що виглядає, як багато слів. Я збираюся поставити його усередині подвійної цитати і показати вам фотографію. Так ось приклад бінарне дерево. Дивіться, що ми починаємо з 10. Всі зліва 10 менше, ніж це. І все, що правіше більше, ніж це. Але більше, ніж, що кожен вузол в дерево висловлює цю нерухомість. Таким чином, вузол 7 має 3 до вліво і 9 вправо. Так що всі ті, менше, ніж 10. Але, дивлячись на тільки тих, 7 має Від 3 до зліва і 9 по його право. І точно так само праворуч, 15 має 14 щоб його ліва і 50 до його право. Таким чином, три вузла там, 15, 14, і 50, також діє бінарне дерево або дійсний бінарне дерево. І всі вони більше, ніж 10. Таким чином, вони можуть бути на право там. Є питання? АУДИТОРІЯ: Як ви справляєтеся, коли у вас є дві сімки? R.J. AQUINO: Так. Як ви справляєтеся з двома значеннями що одні й ті ж? Деякі бінарні дерева пошуку сказати, що вам ігнорувати дублікати, тому що мета полягає тільки, щоб сказати, що я бачив ці речі досі. Деякі бінарні дерева пошуку, можна сказати, є лічильник усередині вузла. Інші можуть сказати, що все в лівий менше або дорівнює. І все, що правіше більше. Все залежить від того, що Проблема в тому, ви вирішуєте. Так в словнику, наприклад, ви не піклуватиметься про дублікатів. Ви б викинути їх. Але інші проблеми ви могли б дбати. АУДИТОРІЯ: Чи можна їсти 1 ліворуч від 15, який менше 10? R.J. AQUINO: Ні. Якщо 14 тут були 1, то це же не бути допустимим бінарне дерево, тому що всі правіше 10 повинно бути більше, ніж це. І ми побачимо, чому. Якщо в землі пошуках моя мета знайти 14, я починаю в корені. Так що я з нетерпінням. ОК. Ми збираємося почати в корені. Подивіться на 10. Ну, 14, наша мета, більше, ніж 10. Так має бути справа. Це дуже схоже на всю телефону книга, що ми зробили, двійковий шукати там. Але замість довічного пошуку в масиві, ми двійковий пошук в цьому дереві. Таким чином, ми все ще шукаємо 14. Ну, 14 менше, ніж 15. Так що, якщо це в нашому дереві, він повинен бути в цій області тут. Вона повинна бути праворуч від 10 і вліво до 15 років. І тому ми перевіряємо цей вузол. І яй, ми знайшли 14. Я не збираюся йти через нього. Але ось код. Це насправді щодо просто, тому що це рекурсивної. Що ми могли запитати вас зробити на вікторині? Ми могли б попросити вас написати цей код. Ми могли б попросити вас, щоб подивитися на цього коду і змінити цей код і пояснити, що він робить. Так. Питання? АУДИТОРІЯ: Чи є ці гірки буде доступні, як вони були в останній раз? R.J. AQUINO: Так. Таким чином, ці гірки, безумовно, будуть розміщені. АУДИТОРІЯ: Вони насправді відповідав Прямо зараз на сайті. Девід тільки що зробив це. R.J. AQUINO: Гірки Прямо зараз на сайті. Я, ймовірно, залатати пару опечатки я відзначив і виправляти їх. Але є струм версія на сайті. Інші речі, які ми могли попросити вас зробити - написати вставки. Написати ітеративний версію рекурсивна функція, ми просто показали вам або говорити про ці речі, як і в пункти, на словах, в пропозиціях. Порівнюючи часу роботи і пояснюючи те, що ви хотіли б використовувати двійковий дерево пошуку для замість хеш-таблицю, наприклад. Так розумію, ці структури на досить глибокому рівні. Зрозуміти, як їх писати, як використовувати їх, як говорити про них. І ви будете все готово. Питання? АУДИТОРІЯ: Коли ви пишете бінарне дерево пошуку, як ви визначити, яке значення зробити це як корінь? R.J. AQUINO: Таким чином, питання було, що значення ви робите як корінь? Залежно від вашого коду, ви може мати глобальний корінь. Таким чином, ви, можливо, швидше за все, мав на pset6 глобальна хеш-таблиці. Або ви могли б пройти корінь як аргумент. Так що це функція пошуку тут приймає аргумент вузла *. І тому все, що вузол вам трапиться бути дивлячись на те, що вам лікуєте в якості кореня, коли ви проходите його дюйма І я все готово. Такі мої слайди. Наступна людина може прийти своп в ноутбуці і мікрофон. ROB BOWDEN: Я думаю, що, можливо, доведеться інтерпретувати це питання по-різному. Але я інтерпретував це як, якщо у вас є числа 1, 2, і 3, як ми знати, щоб зробити 2 корінь на відміну від 1 або 3? Якщо ми зробимо 2 кореня, то це красиво 1 і 3, щоб лівий і правий. Але якщо 1 є коренем, то це від 1 до зверху, 2 право, 3 вправо. Тому за замовчуванням ви не знаєте, що робити корінь. І для будь-якого алгоритму ми очікуємо, щоб дати вам, тільки перше, що ви вставка буде корінь. Або ми дамо вам бінарне дерево, що вже існує, що має корінь. Але інші алгоритми така, що корінь буде оновлювати, так що якщо вам в кінцевому підсумку в ситуації, де це 1, 2, 3 було б автоматично оновлювати в зробити 2 нового кореня, так що вона як і раніше добре збалансовані. АНЖЕЛА Л.І.: Круто. Гей, хлопці. Я Ангела. І я збираюся завершити наш C , А потім перейти до деяких з наших веб технології - HTTP, HTML, і CSS. Тому перше, що є буфер Переповнення атак. Так що давайте поглянемо на цей код. Це досить просто. Там у функції Foo. І це нічого не повертає. Але це займає в покажчик в рядок під назвою бар. І він збирається заявити про це буфер, який являє собою символ Масив, має 12 слотів. І він використовує тетсру, який знаходиться всього в функція, копії з однієї адреси в іншій. Так що це намагається скопіювати в наш буфер від того, що бар вказує на. Так хоч розумієте, що сталося з цим кодом? АУДИТОРІЯ: Якщо бар довше С, вони будуть перезаписані. АНЖЕЛА Л.І.: Так, саме так. У нас немає гарантій того, що бар буде менше, ніж 12. Ми просто зробили деякий довільне число 12. І ми були як, будемо сподіватися, що наш користувача введення менше 12 символів. Таким чином, в ідеальному світі, якби наш вхід завжди, як очікувалося, то ми отримаємо щось на кшталт: Привіт. Це менше, ніж 12 символів. Він отримує читати в символ с. А потім ми щось з ним зробити. Це дійсно не має значення. Але зловмисник міг зробити щось більше, як це, де вони дати нам все, що бар вказує на, це буде вказувати на цей величезний масив просто років. І це шлях довше, ніж 12 років. Так він збирається пройти весь шлях тут, де повернення адреса раніше. Так скажімо, цю функцію називається Foo. Може бути, Foo називали деякі інші Функція, яка називалася по основній. Тому, коли Foo працює, він повинен знати, де б повернутися. Якщо Foo називався деякою функцією імені Баз, він повинен знати, що це повинні повернутися до Баз. І ось що це зворотну адресу тут говорить нам. Але якщо ми перезаписати його з деякими іншими адреса, в даному випадку, це уявлення виступі на самого початку цього буфера, то що насправді відбудеться в тому, що замість того щоб повернутися назад в Баз, який називається наша функція, це просто збирається йти на фронт цього коду. І якщо це було там, тому що хакер чувак прийшов і вводять це, то, можливо, ця сума з п'ятірки насправді не років. І це насправді просто код, який перерви ваш комп'ютер або щось. Таким чином, щоб захищатися про такого роду річ, у вас є, щоб ніколи не припустити, що користувальницький введення певна кількість символів. Наприклад, коли ви робили орфографії, ви сказали, що слова були тільки буде 40 символів довго максимум. І це було добре. Але якщо ні, то ви повинні були б переконайтеся, що тільки для читання в 45 символів одночасно. В іншому випадку, ви можете перезаписати ваш буфер. Будь-які питання по що. Так. АУДИТОРІЯ: Не могли б ви просто поговорити трохи більше про них? АНЖЕЛА Л.І.: Вибачте. Так. АУДИТОРІЯ: мікрофон тільки для відео. Я постараюся і проект. Привіт, хлопці. Sup? Так що давайте перейдемо кілька речей у Бібліотека CS50, які ви використовуєте весь семестр, в основному щоб отримати користувача введення. Як ви знаєте, ви включаєте CS50 бібліотека, просто роблячи CS50.h, який містить всі прототипи Функції, які можна використовувати, як GetString і GetInt, і GetFloat, і так далі. І є в цьому одна лінія в CS50 бібліотека, яка визначає рядок, яка ви, хлопці, всі знаємо, до теперішнього часу це просто символ *. Але давайте поглянемо на як GetString працює. Це дуже скорочений варіант. Ви можете підтягти бібліотечні файли CS50 від, я думаю, manuals.CS50.net. І ви можете прочитати фактична функція. Але це покриває деякі з важливі частини. Таким чином, ми створили деякий буфер з деякою потужності. І те, що ми робимо, ми отримуємо один символ за один раз зі стандартного с. Ось де користувач вводить Текст в консолі. І таким чином ми збираємося, щоб читати в характер тих пір, поки це не нова лінія, і це не кінець файлу, який це кінець стандартного вводу. І для кожного символу, що ми читаємо в, якщо цей символ закінчується додавання до числа символів ми читали в, і це більше, ніж наших можливостей, то, що ми робимо, ми просто змінити розмір нашого буфер так, щоб це вдвічі довше. Отже, ще раз, це захищає від буфера Переповнення атаки, тому що ви прочитали в персонаж одночасно. І якщо в якийсь момент ви читаєте в занадто багато, ви просто розширити свій буфер. Ви помножте його на два. І тоді у вас є більше можливостей. В іншому випадку, ви просто додати персонаж в буфер. І після того як ви вважали всі персонажі, він буде зменшений буфер назад до нормального розміру, додати нуль термінатор, а потім повернутися. Тепер, давайте подивимося на GetInt. Може ви, хлопці це прочитати? Я можу збільшити небагато. Я не знаю, як комп'ютери працюють. Не беріть в голову. Я не можу збільшити належним чином. Це дійсно важко. Мені дуже шкода. Давайте просто подивимося на це. Так що GetInt робить це спочатку читає у рядку з GetString, який ми реалізували раніше. І важлива частина відзначити, чи є це обмін, що зрештою читання як насправді не в рядок, то ми просто повертаємо INT_MAX до представляють збій. Чому ми повертаємося INT_MAX замість негативного 1 або 1? Є ідеї? АУДИТОРІЯ: [нерозбірливо] негативний 1 на один. АНЖЕЛА Л.І.: Так, саме так. Так ти спосіб частіше просто хочу на вхід 1 або негативною 1 при запиті для п-го і все, що п вичерпаний. Це величезна. Ви, напевно, не буде його використовувати. Так що це, як дизайнерське рішення, щоб переконайтеся, що ви часом не повертає помилку або ви не повернути 1, який може бути розібраний як правильну відповідь. Так що, якщо рядок не існує, ми повернемося INT-MAX. В іншому випадку, ми використовуємо Sscanf, яка, як зсапЕ. Але він зчитує з рядка. І у нас є це відформатувати Рядок, яка є% I% с. І ми намагаємося і поєднувати це з що користувач дав нам. Ми хочемо, щоб кількість підібраних речей за 1, що означає, що ми тільки дійсно хочете, щоб відповідати ціле в оточенні, може бути, білий простір, може і ні. У цьому випадку, якщо ви покладете в чомусь як бар, бар не відповідає взагалі, тому що повинна бути ціле в самому початку. Так не sscan не включали 0. Так що вам не повернутися, що. З іншого боку, якщо ви покладете в чомусь як 1, 2, 3, A, B, C, яке відповідає як ціле, а й характер після нього. Так Sscanf повернеться 2, які теж не є ідеальним. Ви ж не хочете 1, 2, 3,, В, С, щоб бути дійсним внутр. Так що також не працює. Але сказати, ви поклали в щось на зразок 50. , Який буде відповідати% I, а це означає, він буде отримувати читати в п. А тепер, п буде містити число 50. І тоді ви можете повернути його. В іншому випадку, ви потрапили Повторити. А потім він просто не йде знову, поки ви отримуєте правильне введення від користувача. Є питання з цього приводу? АУДИТОРІЯ: Так що якщо ви були роздрукувати значення GetInt на [нерозбірливо] було б просто ціле число, а макс? АНЖЕЛА Л.І.: Так. Так що якщо ви використовуєте GetInt, ви повинні взяти на себе що ви не хочете п-й максимум до бути дійсним вхід, тому що ви збираєтеся припустити, що це було погано. АУДИТОРІЯ: Якщо у нас не було символ с і хтось поклав в 1, 2, 3, Сем, чи не так як і раніше працювати протягом 1, 2, 3? АНЖЕЛА Л.І.: Я думаю, що це буде працювати. Але ви не хочете, щоб 123Sam бути допустимим для введення користувачем. Це не зовсім внутр. Так що не здається справедливим розібрати його у вигляді цілого числа. ОК. У цьому випадку, давайте перейдемо на до Інтернету. Так HTTP не є мовою. HTTP це всього лише набір стандартів для як ви відправити речі від клієнтів, от ви, до серверів. Це інші люди в Інтернеті. Так HTTP виступає за гіпертексту Протокол передачі. Це серце і душа всієї мережі. Гіпертекст частина просто відноситься до HTML. Передача є клієнти, як ви будете відправляти запити сервери, які дають відповіді. І протокол просто, як зробити ви очікуєте сервер поводитися? І як ви припускаєте вести себе таким чином, що ви можете впорядкувати цей процес комунікації? Так HTTP запити дуже схожі в цьому. GET є тип запиту. Ви, хлопці, бачили запити GET і POST запити. Це друге, що там, / я, це тільки URI або URL, де ви хочу піти в господаря. Так це прохання просить сторінки, як www.facebook.com / мене. І це запит GET. А потім цей HTTP/1.1, от тільки версія HTTP ви використовуєте. Це майже завжди 1.1. А тут ще купа інших речей теж. Ви можете побачити їх, якщо ви відкрити консоль, коли ви перегляду веб-сторінок. Відповіді виглядати більше як це. У верхній частині, знову ж таки, тип HTTP ви використовуєте з наступним кодом стану. Так 200 ОК є все обійшлося. Ось ваш контент. Ваше зміст буде слідувати. А потім він розповість вам, які змісту та інші речі теж. Коди стану, є кілька важливі ті, які ви повинні знати. 200 ОК, як золотий все гаразд. Все працює. 403 Forbidden. Це ви, напевно, бачили, якщо ви забули встановити права щось неправильно. Це означає, що у вас немає прав на створення доступу, що на сервері. Це як, ні, ви не можете бачити це. 404 означає, що річ не існує. Не знайдено. Ви, напевно, бачили, що багато. 500 Внутрішня помилка сервера, як правило, як щось пішло не так на боці сервера. Отже, коли ви були реалізації pset7, якщо у вас помилки PHP, ви могли б фактично перейти на сторінку і подивитися ціла купа PHP помилки речі. Але це зазвичай не відбувається, тому сайти дійсно не хочу, щоб скажу вам, чому їх сайт зламаний. Вони, напевно, просто повернутися 500 Внутрішня помилка сервера. А тут ще 418 я чайник. Там ціла історія про чому це річ. Але ви можете прочитати про те, що у вільний час. Там ціла купа інші коди статусу теж. Але це ті, ви повинні знати. Отже, давайте поговоримо про HTML. HTML, пам'ятайте, що не мова програмування. Це мова розмітки. Це означає, що вона описує зміст. Це говорить вам, що HTML документ виглядає як або, як він виглядає але, як це структуроване. Так що визначає структуру і Семантика веб-сторінок. Це як, це пункт. Це впорядкований список. Це як частини моїй сторінці. Ось назву. Він робить такі речі, як, що. Це не стиль будь-який з що, оскільки це те, що ви робите в CSS. І це виглядає як серія вкладених тегів. Таким чином, щоб використовувати приклад дійсно основний HTML сторінки, у вас є DOCTYPE Декларація там. Це DOCTYPE декларація кажучи, ми за допомогою HTML5. Тоді у вас є великий HTML тег. Він містить голову і тіло. Усередині голови, у вас є титул. Це те, що йде в назві рядку вашого браузера. У нас є посилання тег, який пов'язує у зовнішній таблиці стилів. І тоді у нас є сценарій, який тягне від зовнішнього JavaScript, а також. А потім всередині нашого тіла насправді те, що можна на сторінці. У нас є пункт, а потім зображення всередині цього пункту. Це одна картина кошенят. Зверніть увагу, що зображення тег закриває себе. Таким чином, замість відкриття з зображенням а потім робить ще один / зображення, ви просто цю маленьку риску тут, який закриває його. І тег зображення також має цей ключ значення атрибуту називається ALT. Це альтернативний текст, що відбувається при наведенні миші на нього. Більшість елементів HTML є значення ключа речі, які ви можете дати його, різні налаштування. Так. АУДИТОРІЯ: [нерозбірливо]. АНЖЕЛА Л.І.: Ну, так що це атрибут тега. Так що якщо ви використовуєте JQuery, ви могли б зробити виберіть image.getAttribute. І тоді ви можете шукати отримати атрибут ALT. І це дасть вам кошенят. Якщо ви пам'ятаєте форми в HTML, вхід елементи будуть мати атрибути імен. І ось що PHP використовує для відправки запити, коли форми. АУДИТОРІЯ: Ви вже щось про те, як, якщо ви використовуєте kittens.jpg або те, що має зниклих без вести папки або інші файли файл? АНЖЕЛА Л.І.: Так. Так що це те, що називається відносної Шлях, тому що я не даю Ви повний шлях. Це як коли в C, якщо ви робите Еореп деякі файл, якщо ви Еореп hi.txt, що hi.txt як очікується, буде в той же самий каталог, якщо ви не дати йому більш Комплекс шлях. АУДИТОРІЯ: Таким чином, ви можете вказати в якій папці [нерозбірливо]? АНЖЕЛА Л.І.: Так. І ви можете подивитися, як це зробити. Але якби я хотів, щоб kittens.jpg з батьківського каталогу, я хотів би зробити .. / Kittens.jpg. Так. Вибачте. Так. Про людина, я забув питання. Який був питання? О, питання було їсти, kittens.jpg Очікується, що в тому ж каталозі? І в цьому випадку, це так. Але ви також можете дати йому певний шлях так, що він не повинен бути. Добре? CSS. Так CSS, як HTML, що не мова програмування. CSS це просто серія правил моделювання. Вона виступає за каскадні таблиці стилів. І ви використовувати його в поєднанні з HTML на сторінках стилю. Таким чином, є три способи Ви можете включити його. Один із способів ви можете зробити це в голові частина вашого HTML, ви можете просто відкрити тег стилі, а потім дотримуватися деякі CSS правила там. Це досить гаразд. Так. АУДИТОРІЯ: Не могли б ви поставити тих, Теги стилю між ними, давайте скажімо, тіло і / тіло. І тоді ви б стиль тільки в тілі. АНЖЕЛА Л.І.: Ви могли б. Вона працюватиме. Але ви не повинні, тому що укладання вид метаданих, які повинні йти в глава документа. Тіло повинне дійсно містять тільки що насправді відбувається, щоб відображатися на вашій сторінці. АУДИТОРІЯ: Таким чином, ви б поставив стиль у вашій голові, щоб стиль Вся веб-сторінки, чи не так? АНЖЕЛА Л.І.: Так. Так покласти стиль тут, ці правила CSS застосовуватиметься до всієї сторінці, заснованої на їх селектори. Таким чином, кращий спосіб зробити це замість наявності тег стиль у вашій голові, у вас є ця посилання на зовнішній стиль лист, як я показав вам в Попередній приклад. Це потрібно, він намагається і знаходить файл style.css, а потім тягне його і використовує в тому, що в якості стилі для сторінки. І ваш style.css б просто подивіться, як це. Це буде просто купа CSS. І, нарешті, є ще один спосіб, яким Ви може включати в себе CSS, які ви дійсно ніколи не повинні робити. Це виклик вбудованого стилю. І тому будь-який HTML елемент може також взяти атрибут стилю. А потім у цьому атрибут стилю, ви можете дати йому правила CSS. Таким чином, в цьому випадку, що б не справ я визначенні прямо тут, це буде є чорний фон і колір білий текст. Але ви не повинні цього робити, тому що це буде він ставить свій стиль всередині вашого HTML. І я знаю, що ми говорили про HTML є структура і CSS є стиль. Якщо ви зробите це, він змішується їх разом. І це не дуже чисто. Так що не робіть цього. На прикладі CSS, там, ми просто виберіть тіло HTML документальний фільм. І ми, як, все в буде Comic Sans. Я також не рекомендую. Але ви могли б зробити це. Друге правило прямо тут, це буде щоб вибрати елемент на сторінка з ID магістралі. Тому, що б HTML елемент, я сказав ID = Основний, я збираюся дати, що Рентабельність 20 пікселів і вирівняти всі, весь текст, до центру. Останнє, що вибирає по класу CSS. Таким чином, будь-який елемент на сторінці, що я дав клас розділ, я збираюся зробити це Колір фону світло-блакитний. Так. Ось все, що я отримав. Питання? АУДИТОРІЯ: Що означає хештегом перед основним робити? АНЖЕЛА Л.І.: Питання в тому, що робить хештегом перед головною справ? У цьому випадку, хеш в CSS означає виберіть по ID. Так що, якщо у мене були деякі HTML елемент, як DIVID = основні, це правила CSS вибирає річ з ID магістралі. І точно так само, період перед розділ Вибір по класу CSS або виберіть по HTML класу. АУДИТОРІЯ: Чому існує має перед 6 в колір фону? АНЖЕЛА Л.І.: Так. Таким чином, питання, чому існує хеш до 6? Це відрізняється від того хеш. Це означає, що ви даєте шістнадцяткове колір. Так шестигранні кольору, це просто являє собою колір. І ви пам'ятаєте RGB трійок, коли Ви зробили PSET судово-медичної експертизи? Це аналогічно. Перші дві цифри являють скільки червоний в кольорі. Другі два представляють скільки зелений. І третій представляє скільки синій. І хеш це буде представляти колір. Так що нічого від 0, 0, 0, 0, 0, 0 до F, F, F, F, F, F діє. Це якийсь дійсний колір, який може відображатися у вашому браузері. Питання? АУДИТОРІЯ: У чому різниця між користування ID і класу? АНЖЕЛА Л.І.: Питання в тому, що різниця між користування ID і класу? Ви можете мати тільки один елемент у HTML документ, який має даний ідентифікатор. Таким чином, тільки одна річ, на моїй сторінці дозволяється мати ID магістраль. Таким чином, ви використовувати його для цього є заголовок. Це навігації. Це підвал. Класи відрізняються, тому що ви можете застосовувати класи, як багато елементів HTML як ви хочете. Так, наприклад, я зробив розділ класу, тому що, напевно, більше, ніж один розділ на моїй сторінці. Ти просто дозволено мати до елементи на сторінці з тим же клас, але тільки один з певним ID. АУДИТОРІЯ: Так точка являє клас? АНЖЕЛА Л.І.: Так. Точка представляє клас. Круто. От і все, у мене, хлопці. Спасибо. [Оплески] ZAMYLA Чан: Привіт, всім. Я Zamyla. Я збираюся покривати PHP, MVC, і SQL сьогодні. Багато матеріалу, що я буду покриття буде в значній мірі прямо з pset7. Добре. Так що ж таке PHP? PHP розшифровується як PHP гіпертексту Препроцесор. Так що, само по собі, є рекурсивним ім'я, яке досить прохолодно. PHP являє собою сервер мова сценаріїв, і це забезпечує базову програму і логічні підкріплення на нашому сайті. Так Анжела багато говорили про HTML і CSS, що зробить структуру сайту. Але що, якщо ви хочете змінити, що Зміст динамічно або якщо він змінюється на основі користувача або певні умови? Ось де PHP приходить дюйма Тепер, як правило,, PHP може зайняти кілька менше лінії для здійснення те ж саме в С. Це тому, що PHP обробляє пам'ять Управління для програміста, на відміну від нас того, щоб Танос безкоштовно, тощо. Але так як PHP є інтерпретативна мова, як правило, це може виконати трохи повільніше, ніж C, яка є компільований мову. Тому що ми рухаємося програмування мови, давайте подивимося на те, як Синтаксис буде відрізнятися. Давайте бути дуже обережні, щоб не заплутатися з цим. Так з синтаксисом PHP, чи перебуваєте ви вкладення вашого PHP всередині від HTML файл або в межах. файл PHP себе, ви потрібно укладати код у відкритому PHP і закриті PHP теги, як наступним чином, як і на екрані. Змінні в PHP. Кожен мінлива почнеться з знак $ слідують по імені змінна. Тепер, змінні в PHP слабо набрали, Це означає, що вам не потрібно , Щоб вказати, який тип даних це коли ви оголосивши її. Однак це не означає, що вони не мають жодних видів на все. Так що якщо я оголосити змінну і просто встановити його рівним 1, а потім я оголошую ще одна змінна, встановіть його рівним "1" а потім ще один 1.0, ну, Залежно від типу рівності оператори я використовую, якщо я хочу, щоб порівняти всіх типів, а потім вони будуть рівні. Але якщо я хочу, щоб переконатися, що типи рівні, PHP може до цих пір що, хоча ми і не вказують який тип це, коли ми спочатку зробити файл. Тепер, в PHP, хоча ми перемикання з програмуванням язики з C, у нас ще є наш Надійний, якщо умова, так само, як це. У нас ще є наші рамки, будучи, як раз як це, де ви поклали у вашому стан, а потім Тіло циклу. А потім у нас теж є цикл, які зазвичай виглядає наступним чином. Так що, якщо я хотів перебрати всі дев'ять psets і представити і викликати Функція submitPset, то я можу зробити це тут, що ви, хлопці, все зроблено до цього моменту. Вітаємо, до речі. Для камери, люди сказав, спасибі. Тепер, якщо ви не хочете, щоб просто використовувати це цикл, то PHP насправді також є речі, називається FOREACH петлі. Так що, якщо у мене був масив цілих чисел, 0 по 8, зберігаються в psets масиву, то я міг би мати цикл по кожному елементу, що перебирає кожен номер в psets. А потім я міг би назвати те ж саме функціонувати у вісім разів, так само, як я робив раніше. Так що це для кожного циклу приємно, тому що Ви не повинні, якщо ви не знаєте, Точна довжина масиву, що ви вже, то за допомогою цього цикл по кожному елементу дбатиме про те, що для вас. Так що я зробив psets як масив. Давайте подивимося на це. Масиви в PHP, як правило, так само, як ті, які ми мали в С, де Ви можете оголосити масив. І тут, я можу оголосити порожній масив а потім створити динамічно за допомогою Індекси у вигляді цілих чисел. Так індекс 0, я збираюся зберігати ціле імені 1. У індексом 1 мого списку, я збираюся для зберігання значення 2. І на третьому індексувати дані, але Друге число, я збираюся зберегти номер 12. Тепер, це прекрасно, що працює він добре працює. Але сказати, що це має значення для мене що кожен індекс тримає. Для мене, індекс 0 означає, як багато кішки у мене є. А індекс 1 означає, як багато сови у мене є. А наступний означає, як багато собак. Ну, тоді це вказати, що, замість того, щоб того, щоб пам'ятати 0 відноситься до кішки і від 1 до сов, я можу використовувати асоціативні масиви, а це означає, що замість цілих чисел, як моїх показників, Я можу насправді використовувати рядка. Так що це досить корисно. І ви в основному просто замінити цілі числа з рядками. І там ви маєте асоціативний масив. Так. АУДИТОРІЯ: Чи є причина, чому існує підкреслення для другого частина, тому що мій список має масив. ZAMYLA Чан: Питання було, є Є причина, чому є підкреслюють між моїм і списку? Ні. Ось тільки, як я іменування мій змінної. АУДИТОРІЯ: На перший лінія, це одне слово. ZAMYLA Чан: Мої вибачення. Я це виправимо. Так. Вони повинні бути такими ж ім'я змінної. Хороший улов. ОК. Так що давайте перейдемо до рядка об'єднання. Якби я хотів взяти два рядки, то я можу об'єднати їх за допомогою оператора крапка. Так що, якщо у мене є Міло як ім'я і Банан як прізвища, а потім об'єднання з оператором точка і потім покласти простір між зробить рядок, що містить Milo Банан, який я можу потім відлуння або, швидше, роздрукувати. Говорячи про відлуння, давайте поговоримо про деякі корисно - упс. Мені дуже шкода. Кілька корисних функцій PHP. Тому у нас є - технічні труднощі. Одна секунда. Я послав його. Проблеми PowerPoint. І ми повернулися з PHP функцій. І ми повернулися з PHP функцій. Таким чином, ми функцію вимагають, де якщо ви передаєте у файлі, от тільки Приклад файлу, який Я міг би пройти дюйма Тоді, що включатиме в себе код PHP з цього файлу, що я вказувати. І він буде оцінювати, що дюйма Тоді у нас також є відлуння, яке є паралельно Е. Вихід паралельна зламати, який виходить з блоку код, який ви дюйма А потім порожні перевіряє, чи є даний змінна, як нуль або нуль або що прирівнюється до порожняком. Так. АУДИТОРІЯ: Для об'єднання рядків точка оператор один, в PHP, є те, що ж, як в JavaScript, де він за допомогою точка для об'єднання означає плюс? Таким чином, для повного імені, ви могли б долар підписати перший +, а потім + востаннє? ZAMYLA Чан: Так. Таким чином, питання, чи була в PHP ми можна використовувати той же об'єднання рядків як в JavaScript з плюсів. Йосип отримаєте в це пізніше. Я думаю, що у нього є слайд на що. Насправді, все по-іншому. Таким чином, в JavaScript, ви повинні використовувати плюс для об'єднання рядків. А в PHP, ви повинні використовувати оператор крапка. Так що вони різні. ОК. Так що тепер, коли ми розглянули всі це PHP, де робить це дійсно знадобиться? Ну, це дуже зручно, коли ми може об'єднати його з нашого HTML. Таким чином, наш PHP дасть нам силу змінити зміст HTML-сторінки перед його завантаження. Таким чином, на основі різних умов, звичайно конкретний користувач, це увійшли в систему, ми можемо показати різна інформація. Лінда, ти є запитання? АУДИТОРІЯ: Чи можете ви об'єднати ціле також? ZAMYLA Чан: Так, можна. Таким чином, питання було, якщо можна об'єднувати цілі або інші variable.s зараз, ми перейдемо до MVC, яка це парадигма, що ми використовували в pset7 і багато веб-дизайнерів використовувати для організації коду у файлах в їх веб-сайті. М позначає моделі. А в принципі, файли моделі буде займатися з взаємодії з базою даних. Перегляд файлів, вони відносяться до естетика сайті. І ручки контролера запити користувачів, аналізує Дані, робить іншу логіку. У pset7, ми об'єднали модель і контролер. І ми просто назвав їх контролери та помістити їх в загальний каталог. І переглядати файли, ми використовуємо їх як шаблони в каталог шаблонів. Так що це схема тут також представляє що ж це за поділ з модель і контролер у фіолетовий тут зліва і вид справа. Так що це схематичне, що деякі з вас Можливо, ви бачили в неробочий час або діаграми, які ми малювали, як ви були з'ясувати свій PSET. Таким чином, тут, в даному контролер, модель контролер, у нас є функції , Які відносяться до запитуючи SQL У базі, виконання логіки PHP. Може бути, ви буде шукати акція в Yahoo! Фінанси. Або може бути, ви б просто перевірити, см., чи були представлені користувач сформувати вже до того, зайшли на вашу сторінку. І тоді ви б надати утворюють тут. Після цього форма була представлена користувачем, дія, яка була зазначено у форми HTML тега вказувало б на стор що він повертає ці дані для. Так все, що інформація буде відправлені назад до контролера. Тоді ви, ймовірно, зробити трохи більше Логіка на що і, можливо, виконати кілька більше запитів у базі даних SQL і ось, нарешті, придумати красиво упаковані набір інформації, яку ви б пройде в в якусь іншу шаблону що відображається цю інформацію. Тепер, як ми насправді пакет що інформація до? Ну, у нас є функція під назвою Рендер що було у файлі functions.php в pset7, де ви проходите в ім'я файл, ім'я шаблону. І тоді ви також проходять в асоціативний масив. І так, що асоціативний масив являє різна інформація що ви хочете передати дюйма Тепер, те, що збирається бути постійним в Ці приклади в тому, що ключі, або, швидше, ключі від асоціативної масиви, ті, що буде Очікується, що константа шаблоном, бо знає, він повинен те, що називається повідомлення або називають ім'я. А потім речі про право, фактичні значення, так що в даному випадку, хто хороший хлопчик і Міло, ті збираються бути значення, які змінюються що контролер змінюється кожен раз, або на основі певного стану і пройде, що дюйма Так от в шаблонах, ми бачимо, що ми використовуєте HTML спеціальні символи, які просто в основному означає, що ми хочемо щоб отримати експертну рядок, Користувач вставив І ми хочемо, щоб замінити повідомлення є. Отже, коли ми насправді дивитися файл, питома Інформація передається дюйма Зверніть увагу, що ключ, як надати робіт є що ключі асоціативної масиви, ті стають змінної імена тут. І тому значення цього ключа в асоціативний масив стає Значення змінної. Тепер давайте перейдемо до SQL. Вона виступає за Структуроване Query Language. І так це просто програмування мова, розроблений для управління базами даних. І це стало в нагоді для нас в наш фінансовий сайт pset7. По суті, це просто легкий спосіб відстежувати і керувати об'єкти і таблиці і з'єднати їх один з одним. Тепер, думаю, вашої бази даних SQL в основному у вигляді файлу Excel, мабуть, з декількома вкладками аркушів. Таким чином, можна мати кілька таблиць, можливо, що пов'язані один з одним. І так само, як Excel, у нас є багато функціональні можливості, які ми хочемо. Наприклад, ми можемо вибрати певні рядки. Ми можемо вставити інформацію. Ми можемо оновлювати рядка. І ми можемо також видалити речі. SQL виберіть робіт вибравши рядків або ряд зазначених стовпців з база даних, яка відповідає певна критерії, які ви вказуєте. Так тут, коли я бачу SELECT * FROM чарівники, де будинок = Равенкло, то Я вибираю *, який означає, що я вибираючи кожен один стовпець в тому, що рядок з таблиці чарівників, але тільки тоді, коли стовпець будинок дорівнює Равенкло. Тепер, це в чистому вигляді або SQL. Так що, якщо я увійшов до PHPmyadmin, що конкретний спосіб, який ми використовуємо для управління наші бази даних SQL, то я міг би вставити що на веб-сайті PHPMyAdmin. І, що б виконати. Але ми насправді хочемо зробити що на РНР стороні. Так як же нам це зробити? Ну, ми використовуємо функцію запиту, який в основному виконує, що SQL-запит. Використання? як заповнювач, ми можемо передати в деяких значення в нашій рядки, що ми хочете замінити. Так що, можливо, я зберігаю різні Значення в curr_house, які представляє поточний будинок що я йду через. Так я можу передати, що як заповнювач із знаком питання. І тоді я буду в основному виконати ж саме, що я робив раніше, за винятком того, зараз, я в PHP. І запит поверне асоціативний масив. І я збираюся зберігати його в ряди. Тепер, запит завжди може потерпіти невдачу. Можливо, SQL запитів не вдалося виконати тому що таблиця не існує. Або, можливо, в стовпці не існує. Щось пішло не так. Ну, в такому разі, ви хочете, щоб зробити Переконайтеся, що ви перевіряєте запит повернув брехня. І ось за допомогою потрійної дорівнює операцію там. А потім я прошу вибачення, що є ще одним Функція CS50, проходячи в повідомленні. І якщо ви подивитеся на вибачення, все це дійсно є надання apology.php. Так. АУДИТОРІЯ: Не могли б ви пояснити, що це зірка робить між виберіть і від? ZAMYLA Чан: Так, абсолютно. Так зірка між виберіть і від означає, що я хочу, щоб вибрати весь весь ряд від мого столу. Я міг би вказано виберіть П.І.Б., рік, будинок. І я хотів би отримати тільки ті три стовпці в моєму столі. Але якщо я говорю SELECT *, то я буду отримати все в цьому стовпці. Тоді я піду вам в спину в першу чергу. АУДИТОРІЯ: Так що це ще в SQL, чи не так? Чи є це запит або це PHP? ZAMYLA Чан: Ми в запиті. Так що це в PHP. Таким чином, використовуючи функцію PHP запит, ми виконання SQL запиту. АУДИТОРІЯ: Щось в SQL з урахуванням регістру, як вибрати або майстра або будинок? ZAMYLA Чан: Що-небудь в SQL з урахуванням регістру? Я вірю в це, так. Я вважаю, що Виберіть і одну з і де вводяться з урахуванням регістру. Ні? ROB BOWDEN: Так, все навпаки. Імена стовпців і засоби стіл, всіх тих, з урахуванням регістру. Але будь-який з ключових слів MySQL, як ВИБІР, і куди, тим не з урахуванням регістру. ОК. Таким чином, протилежне тому, що я сказав. Так всі ключові слова, MySQL - вибрати, від, де - ті, не чутливі до регістру. Але все інше. ОК. Ви в передній частині. АУДИТОРІЯ: Якщо я $ рядків в термінах більше одного рядка, чи означає це є просто стає асоціативний масив? ZAMYLA Чан: Таким чином, питання було якщо рядки має більш ніж один рядок у ньому, робить вона стала асоціативним масивом? Так що це масив асоціативних масиви вже. Таким чином, навіть якщо є тільки один рядок повернувся, то ви повинні були б піти на індекс 0 з цього результату. І тоді вам доведеться, що перший ряд. Так, Белінда? АУДИТОРІЯ: При використанні ===, це єдиний випадок? Або є інші? ZAMYLA Чан: Так що в цьому випадку, === порівняння різних типів. Вибачте. === Порівняння , Який порівнює типи. А потім == порівнює всіх типів. АУДИТОРІЯ: Чи можете ви пояснити, що рядків у цій ситуації? Хіба рядок даних? ZAMYLA Чан: У наступному слайді, я збираюся пояснити, що рядки є. Так що, якщо ви не заперечуєте проведення геть на що. І тоді ви в спину? АУДИТОРІЯ: Для функцій, таких як запит, надати і вибачитися [нерозбірливо]? ZAMYLA Чан: Питання, чи був ці функції - запитів, вибачитися, і зробити - є загальними для PHP. Це ті, які CS50 написав для pset7. І Джей? АУДИТОРІЯ: Коли вам потрібно сказати $ _SESSION, Є те, що тільки для ідентифікаторів? Або, може, ви сказали, що тут? ZAMYLA Чан: Таким чином, питання було, коли ми використовуємо $ _SESSION, що був конкретний глобальна змінна, що ми використовуємо. Ось ця змінна буде бути локальним для нашої функції. Так що ми просто оголосивши нова змінна. АУДИТОРІЯ: Як вибачитися реалізовані? ZAMYLA Чан: Питання було, яким чином вибачитися реалізовані? І я думаю, що це насправді досить хороша практика для вас, хлопці, щоб увійти в секція functions.php і подивитися на Приносимо свої вибачення і подивитися, як ви могли б зроблено це самостійно. Так що я, можливо, залишу це для вас, але просто кажуть, що якщо ви подивитеся на свої вибачення, Потім він приймає повідомлення, яке ви представлені вибачитися, а потім надає це повідомлення. Є ще питання? Я люблю питання. Так що тримайте їх чекати. АУДИТОРІЯ: [нерозбірливо] відлуння або роздрукувати там? ZAMYLA Чан: Питання було, ми могли б не тільки поставили відлуння або роздрукувати там. Так що зробив би щось трохи відрізняється. Це було б надруковано запит не вдалося в тому, що - добре, прямо зараз, ми насправді в нашому контролері. Таким чином, ми насправді не мають HTML налаштувати тут. Apologize шляхом надання apologize.php насправді перенаправляє вас на apology.php. ОК. Так що тепер, давайте перейдемо до вирішення Запитання від раніше про те, що дійсно рядків. Ну, запит поверне масив рядків. І кожен рядок представлена на асоціативний масив. Так що, якщо я виконав кілька SQL запитів і Я зберігатися результат у рядках, то використовуючи цикл по кожному елементу, то масив Назва є першим там - рядки. І тоді я буду називати кожен рядок в там $ поспіль. Так ітерації, що, я можу доступ стовпець ім'я в даному ряду, в рік колонка, і будинок колонка. Зверніть увагу, що я не був би в стані зробити це з рядами, бо рядків індексу ім'я не існує. Рядки тільки масив асоціативні масиви. Так у вас є два рівня там. Якщо у вас є масив рядків, ви повинні отримати на це. І тоді ви можете отримати доступ стовпці. Хіба що дати зрозуміти? Так, перед? АУДИТОРІЯ: [нерозбірливо] відкрити кронштейни для [нерозбірливо]? ZAMYLA Чан: Вибачте мене? АУДИТОРІЯ: Відкриті дужки. ZAMYLA Чан: Вони тут? Ось що дозволило мені включити ця змінна. Так. АУДИТОРІЯ: При друку, ви друк на HTML коду? ZAMYLA Чан: Так. При друку, це ось всередині мій шаблон зараз, так мій вид методу MVC. Так що я друку в HTML. АУДИТОРІЯ: Так що, якщо ми увійшли в розробника інструменти після запуску цього, ми могли б що насправді в коді? ZAMYLA Чан: Це великий питання, так. Так що якщо ви увійшли в інструменти розробника в Firefox за допомогою Firebug або Хром, то так, ви могли б побачити конкретні HTML. Так що не буде показувати $ рядок ["Ім'я"]. Було б показати залежно від того, кличуть у цьому рядку. АУДИТОРІЯ: Просто загальна проблема, які ПДР і тд визначається як? Навіщо нам [нерозбірливо]? ZAMYLA Чан: Рядок таблиці тр, Таблиця потім т.д стовпець. ОК. АУДИТОРІЯ: Так, це табличні дані. ZAMYLA Чан: дані в таблиці. Так. АУДИТОРІЯ: Це рядок, в якій рядок трактується як колона? ZAMYLA Чан: Вибачте. Чи можете ви повторити? АУДИТОРІЯ: Як би ви візуалізувати рядків? ZAMYLA Чан: Як би ви собі рядка в який спосіб? Ви говорите про них рядків тут або ТР рядків? АУДИТОРІЯ: Рядки. ZAMYLA Чан: Ці рядки тут? Я б собі це як Я виконаю мій запит. І це говорить, добре, у мене є або 0 до п кількість рядків, які відповідають критеріям що ви піддав сумніву. Тому у мене є деяка кількість рядків. Так рядків, то $ ряди, магазини кожен один з тих рядків у масиві. Таким чином, навіть якщо це всього лише один з них, це ще масив рядків, які відповідають його. Таким чином, то, наприклад, це схоже на коли ви за вуха кеш від користувачів. І критерії було де ID дорівнює ідентифікатор сеансу. Там дійсно тільки один рядок , Які могли б відповідати. Але все ж рядків щойно повернувся один ряд. Таким чином, ви повинні були б піти на рядки, індекс 0, індекс кеша насправді отримати в кеш. АУДИТОРІЯ: Чи є функція друку в луна те ж саме? ZAMYLA Чан: Так. Так. Роздрукувати відлуння те ж саме. АУДИТОРІЯ: Чи є цикл по кожному елементу Єдиний спосіб індексу до лав? ZAMYLA Чан: Є цикл по кожному елементу єдиний спосіб, яким ви можете перебору рядків? Ні. Ви також можете використовувати для циклу, за умови, що ви знаєте довжину з масиву в рядки. АУДИТОРІЯ: Не могли б ви до нього доступ використовуючи рядок як [нерозбірливо]? ZAMYLA Чан: Таким чином, ви не можете отримати до нього доступ тільки за допомогою рядка, якщо у вас немає цикл по кожному елементу за умови, що Ви не заявили ряд. Так. Так, в білому. АУДИТОРІЯ: Так що ж тр і тд робити? ZAMYLA Чан: Так тр і TD є HTML-теги. тр вказує на початок з рядка таблиці. І кожен тд вказує новий стовпець даних таблиці. АУДИТОРІЯ: Для візуального що ряд все одно, що, уявіть собі SQL, як вони мають ряд. [Нерозбірливості]. ZAMYLA Чан: Так. Це відмінна точка. Ви можете візуалізувати рядків, просто як у таблиці Excel, просто Список рядків. ОК. Добре. Так що тепер ми перейшли виберіть, якщо немає ніяких більше питань, ми будемо перейти на вставки. Так що, якщо я хотів вставити до деяких стіл і вставити певний стовпець значення, я міг вставити собі в Рейвенкло на рік 7. Але іноді там може бути дублікатом значення, як ми бачили в pset7 коли ми оновлюють наш портфель. Таким чином, в цьому випадку, ми хочемо використовувати ПЗ Дублікат ключа UPDATE, так що ми не зберігати кілька рядків з тим же цінуємо, а оновити його. Тоді у нас дійсно є оновлення, яка не вставки. Це просто оновлення, де ви оновити в певному таблиці з заданим критерії і ось, нарешті, видалити, який робить дуже схожі речі. АУДИТОРІЯ: Не могли б ви коротко перейти дубліката ключа? ZAMYLA Чан: Так. По суті тут, у мене є INSERT INTO Грінготтс, є, галеони, ці значення. Але ID, мабуть, є унікальним ключем значення, встановлене в таблиці MySQL. Так що, якщо я вже, що ID налаштувати, то я не можу вставити новий рядок. Так що, якщо він не існує вже, то у мене є, щоб оновити його. У середині в білому. АУДИТОРІЯ: Так вставки, оновлення, видалення, і виберіть, ті всі наявні локально [нерозбірливо]? ZAMYLA Чан: Так вставити, оновлення, видалення, і вибрати всі запити SQL. Тому, коли ви використовуєте SQL, ви будете мати ті, які доступні. АУДИТОРІЯ: Назад у минуле вікторини - виникло питання, що мав справу з якщо ви були стіл і хотів вставити результати тестів в одному і вставці ваше ім'я, так що не дозволить вам [Нерозбірливості] оцінка тесту вашого друга. Як би ви це зробили з вкладишем? ZAMYLA Чан: Таким чином, питання було про попередня середньостроковий питання. Я не в курсі з яких один це прямо зараз. Тому, можливо, після цього, якщо ви хочете придумати і показати мені, то я можу безумовно, дасть вам поради. Але, кажучи про внесення речей, як приймаючи чиюсь рахунок, коли ви не повинно, давайте поговоримо про Атак з впровадженням SQL. Так атака ін'єкції SQL, по суті, де хтось бере Перевага низьку безпеку спосіб, що ви приймаєте в даних. Так тут, як і в CS50 фінансів, коли ми увійшли в систему, ми можемо увійти в ім'я користувача у формі входу, перший текстове поле, і потім введіть в паролі. Можливо, наш PHP код може виглядати щось на зразок цього, де $ ім'я користувача є ім'я користувача і пароль після даних паролем пост-даних. А потім ми просто виконати наш запит, скажімо, Добре, добре, наш запит буде вибрати з наших користувачів, де ім'я користувача є той, який вони представили. І пароль це пароль, Це означає, що паролі збігаються. Тепер, що якщо замість фактично подачі фактичний пароль, як 12345 і гадати на зубець, що говорить пароль і намагається зламати їх рахунок, що, якщо замість того, щоб вони представили це. Вони могли б ввести в можливо здогадка паролем. А потім вони б закінчити цитата потім введіть або 1 = 1. Це було б ходити безпосередньо в SQL запитувати дивитися щось на зразок цього. Виберіть з користувачів, де ім'я користувача = Зубці й пароль дорівнює лілії або 1 = 1. Так що або пароль має щоб бути правильним або 1 = 1, який завжди вірно. Таким чином, в цьому випадку, в основному, користувач може скористатися цим і просто увійти самі в і хак чийсь рахунок. Так ось чому ми хочемо уникнути хтось необхідності робити це. Але, на щастя, функція запиту на переходячи в заповнювачів відбудеться догляд за це для вас. Крім того, ви не будете зазвичай не хочу насправді уявити паролі самі. Ось чому ми хешіруется або зашифровані їх в CS50 фінансів. АУДИТОРІЯ: Минуле вікторини говорили про втечу рядка MySQL. Чи є у нас турбуватися про це? ZAMYLA Чан: Це хороше запитання. Управляючі рядка MySQL, безумовно, функція, яка використовувалася в нашому запиті. Але безумовно дивитися на це. Я б сказав, що це чесна гра, щоб знати що вам потрібно зателефонувати, що функціонувати на рядок. Так, Белінда? АУДИТОРІЯ: Як ви знаєте, коли це одинарні лапки або подвійні лапки? А також, я відчуваю, що в лекції ви згадав щось про що не мають [Нерозбірливо] або щось або Другий сингл цитатою в кінці. Я думаю, що він вказав у лекції, що ви повинні мати апостроф 1 а потім не мати апострофи або щось. АУДИТОРІЯ: [нерозбірливо]. АУДИТОРІЯ: Справа в тому, останній сингл цитата там в цьому другому вікні там бути не повинно. [Нерозбірливості] Тому що, коли ви берете, що останній сингл цитую, і вони збігаються на утримання де пароль, якщо у вас є, що запит, є одинарні лапки в кінець вже. Ви хочете використовувати цей одинарні лапки як той, який звернений до одного [Нерозбірливості]. Так що насправді в цьому тексті коробка не повинна мати, що. ZAMYLA Чан: Я буду змінити цю ситуацію. ОК. Якщо немає ніяких питань, то я буду передати його на Йосипу говорити про JavaScript, і так далі. [Оплески] ЙОСИП ОНГ: Так ми біжимо трохи позаду. Так що якщо у вас є, щоб піти, це нормально. Але ми просимо, щоб ви зберігаєте ваші голови вниз якщо ви знаходитесь в середині, так що ви не блокують камеру і використанні назад вихід, якщо вам доведеться. Я Йосип до речі. Привіт. Тест, тест. Ден, це добре? Круто. Таким чином, відео також будуть розміщені онлайн для тих, хто повинні піти зараз. Незграбний. ОК. Так вікторини відгук. Це кішка. Тепер, JavaScript, який, можливо, не як AWW для деяких з вас, хлопці. ОК. Так от спочатку, пам'ятаєте з Zamyla. Пам'ятайте, що PHP є виконуються на сервері. І багато разів, ви, хлопці, писав петлі в PHP роздрукувати HTML, вірно? Тому, як тільки що код виконується, що HTML вихід Вам роздрукувати відправляється користувачеві. І як тільки це відбудеться, не більше PHP може бути запущений, якщо ви не перезавантажте сторінку, з Курс, який повторно виконує на PHP. Але як тільки ви роздрукувати цієї HTML, ви не можете піти куди завгодно. Так що HTML надсилається до користувача, що браузер тут, де Міло використовує комп'ютер. І так добре, є кілька речей, як тільки ми посилаємо HTML для користувача. Іноді ми хочемо зробити щось на зразок при натисканні на щось, ми хочемо оповіщення коробки спливав, ті види взаємодії, як при натисканні клавіша при натисненні щось на сторінки, я хочу щоб щось сталося. Ну, ви не можете повторно виконати PHP Код раз, що HTML встановлений. Отже, як ви це робите? Введемо нову мову під назвою JavaScript, який працює в браузері що дозволяє робити речі в HTML після отримання їх з сервера. І саме тому ми називаємо це на стороні клієнта мова програмування. Він працює на вашому комп'ютері - клієнт. Будь-які питання про те, що до цих пір? Ця парадигма має сенс для людей? ОК. Добре. Добре. Таким чином, перше, що потрібно відзначити, є JavaScript не PHP. У них є трохи інший синтаксис, які ми підемо в. І у них є дуже різні застосування. JavaScript, знову ж таки, для вашого браузер, для клієнта. Сервер працює десь на чужій комп'ютер, який посилає інформацію Вам, правильно? Так що, якщо ми просимо вас написати PHP код на питання іспит, не пишіть JavaScript, і навпаки. Ви просто втратите окуляри, і це не буде правильно. Отже, давайте в деякі синтаксичні відмінності - JavaScript зліва і PHP справа. Перше, що ви помітите, з JavaScript, ми оголошуємо змінні з вар ключове слово - В-А-Р. PHP використовується знак долара, як Zamyla обговорювалося раніше. Якщо ви хочете оголосити асоціативну Масив, ми бачимо знайому синтаксисом права сторона з PHP. На лівій стороні, а не Ви використовувати фігурні дужки. І тоді ваші ключі зліва. Тоді у вас є двокрапка. І тоді у вас є значення що ви хочете. Так що це, як ви могли б зробити це в PHP на правій стороні з цією другу рядок, яка починається на Майло. І це, як ви могли б зробити це на Ліва сторона в JavaScript, якщо ви хочете що ми називаємо об'єкт. І об'єкти в JavaScript є всього асоціативні масиви. Так що якщо ви хочете отримати доступ до полів, в PHP ви використовуєте цей синтаксис кронштейн. І таким чином, ви можете перепризначити цей власник поле з Лорен. Ну, в JavaScript, якщо хочете доступ до поля і змінити його, ви можете використовувати синтаксис з крапкою. Ви також можете використовувати синтаксис кронштейн. Але ви не можете використовувати Синтаксис точка в PHP. Це не буде працювати. Вона працює тільки в PHP. І, нарешті, роздрукувати речі Консоль, ви використовуєте console.log, який ви, хлопці використовують багато в pset8. Ви можете console.log що. Якщо ви хочете надрукувати масив в PHP, ви повинні використовувати печатку р. І на правій стороні, ви бачите, я хеш об'єднання рядків там. Хтось запитав раніше. Я використовую плюс в JavaScript. Якщо я хочу об'єднати щось в PHP, я використовую точку. Вони відрізняються. Якщо ви пишете PHP код, не використовуйте в плюс. Якщо ви пишете наявність Код, не пишіть точку. Це буде неправильно. І ви будете сумувати. Так синтаксичні відмінності. Знай свого синтаксису, тому що, якщо у вас є, щоб написати запитання, і ви використовувати синтаксис від незрозумілою мовою, він не буде працювати. І це буде не так. Отже, давайте поговоримо про деякі контролю текти відмінності, як ви використовуєте петель в кожному з них. Zamyla підійшов з правого боку. Матеріал на правій стороні повинні бути знайомі. Давайте подивимося на на лівій стороні. При використанні для п петлі в JavaScript, ваша змінна циклу, змінна я там, цикл по ключів масиву. Отже, ви бачите ім'я, будинок, і роль. Якщо я console.log I, я отримую ім'я, будинок, і роль. Ті, ключі. У JavaScript, цикл по кожному елементу йде за значеннями цього масиву. Таким чином, ви помітите, що вони обидва я. Але тут на PHP стороні, він друкує з Міло, CS50, і Талісман. Такі значення в PHP. Так що це, як ці два відрізняються на різних мовах. Так що якщо ви використовуєте Еогеасп цикл, не думайте, що це дає вам ключі. І, якщо ви використовуєте для н петлі, що не Припустимо, що це дає вам значення. Чи має це сенс досі? На наступному слайді збирається показати вам, як ви можете отримати доступ протилежне в кожного з них. Ну, якщо у вас є ключ в JavaScript і ви хочете, щоб значення поза, ви просто індекс у Масив з цим. Так Міло я отримаю вам, що Ви хочете - значення. Там ця інший синтаксис в PHP. Якщо ви дійсно хочете знати, я не думаю, що ми показали його вам ще. Але якщо вам цікаво, ви можете використовувати цей додатковий синтаксис праворуч сторона, яка насправді дозволяють отримати Ключі в PHP, коли ви використовуєте цикл по кожному елементу. Так що просто трохи дрібниці якщо ви зацікавлені. Так от просто, щоб продемонструвати Відмінності між цими двома петлями. Не змішуйте їх, коли ви програмування питання. Будь-які питання про те, що. Круто. Добре. JavaScript об'єкти. Я говорив про них. Вони як асоціативні масиви. Єдине, що я хотів би звернути Вашу увагу в тому, що значення в асоціативної Масив може бути що завгодно в JavaScript. Він навіть може бути функцією, як там. У мене є функція, що це значення ключа. І якщо я хочу назвати цю функцію, Я просто доступ кору. А потім я поклав дужки після цього. І це працює. Тому будь-які питання? Ні? ОК. Добре. JavaScript, як PHP, вільно набрали. Що це означає? У нього є види. Але коли ви розкажете наявність змінна, ви говорите вар я. Ви не говорите це. Це не річ. Ви просто сказати, що це змінна. А потім JavaScript буде обробляти типи під капотом для вас. Ми можемо вільно конвертувати між типи за цього. Так що я починається як числа в цьому випадку. А потім мене є рядок. І я додати я йому. І я перепризначити його назад в I. Так що на цій першій лінії, я це число. На другій сходинці, я тепер стає рядок після я роблю перепризначення. І ось, я просто об'єднання що число на рядку. Отже, ви бачите, що навіть при тому, що я був ціле число в першій частині, це свого роду начебто були перетворені в рядок, а потім додаються на що Привіт рядка. І ось що я маю на увазі по пухкої друкувати. Ось, що ви конвертувати між типи дуже легко. І це не кидає попередження на вас, як Сі робить. Так що я тепер містить привіт 123 до рядка. Наступна. Ми також можемо вільно порівняти між типами. Так що якщо ви просто використовуєте ==, дуже як в PHP, JavaScript робить подібну річ. Рядок 123 таке ж, як кількість 123 при використанні подвійних рівних. При використанні потрійні рівних, він також хоче, щоб переконатися, що Тип такий же. Так тому, що це рядок, і це ряд, хоча вони обидва 123, при використанні потрійний одно, ви отримуєте помилкове. У подвійній дорівнює випадок, ви отримаєте справжнє, тому подвійні одно не піклуються про типу. Тримісний одно робить хвилює типу. Питання? ОК. І ще про JavaScript є Сфера почасти глобальна, якщо ви не у функції. І це працює так само, спосіб в PHP насправді. Так давайте пройдемо цьому прикладі. Я сеті я до 999. А потім я йду в цей цикл. Так що, якщо я друкую я в це для цикл, я очікую, 0, 1, 2, 3, 4. Я отримую г = 4. Це збільшує я тепер до 5 в кінець для петлі. А потім він ламає з петлі, тому що це не відповідає стан більше. Що ви думаєте, що наступного console.log друкує? Так от що він буде робити на C. У C, тому що, якщо у вас є, як вар я поза і у вас є УАГ I всередині циклу, як цикл, то це робить його таким чином, що це область видимості, що два я 'різні. У JavaScript, він просто буде розглядати його як одно я. Я отримую 5, тому що це було значення коли вона виходила з петлі. Так ті, які я є однаковими я. Чи має це сенс? Ну, це має сенс з точка зору JavaScript. Але те ж саме парадигма переносяться на C. Вони мають різні правила області. Так. АУДИТОРІЯ: [нерозбірливо] поза функції [нерозбірливо]? ЙОСИП ОНГ: Так, за межами якої функція? Так що я доберуся до цього всього за секунду. Так ми називаємо Foo (я). Це проходить, я в Фу, прирощення це, а потім реєструє його. Так було 5. Так він стає 6. Але те, що я говорю про те, що я в цій функції. Тому що це параметр, це обмежується тільки цим функції. Тому, як тільки я насправді вийти з цього Функція, то тепер буде йти повернутися до старого I. Це я тільки в області видимості, тому що це знаходиться у функції. І у нас є обсяг і функції. Але ми не маємо сферу за межами функцій в JavaScript. Чи має це сенс? Так. Питання. АУДИТОРІЯ: Те ж [нерозбірливо]? ЙОСИП ОНГ: Так що так. У PHP, це той же самий тип речі. Там в невеликий тонкість фактично. Але ви можете запитати мене про що після огляду. Ви дійсно не потрібно знати що тонкість для вікторини. Для всіх намірів і цілей, як змінні, глобальні і PHP, якщо вони знаходяться в залежності, такий же річ в JavaScript. Так. АУДИТОРІЯ: Чому це дозволило в JavaScript і не де ще? ЙОСИП ОНГ: Так чому ж це дозволило в JavaScript, а не в С? Це просто той, хто придумав JavaScript вирішив, що це було в порядку в JavaScript. Так що це просто, як мова програмування Конвенція як ми сказали б. Так. АУДИТОРІЯ: Так чому ж це піти від 6 до 5? ЙОСИП ОНГ: Так тривало від 6 до 5, тому що, коли я пройшов I в Foo, що я всередині Foo тепер в області видимості Foo, тому сфера існує у функції в JavaScript. Але як тільки я вийду звідси, тому що це був в області видимості функції, я просто з використанням регулярних I, який був усередині інша частина потоку управління. Сенс? Чи можу я рухатися далі? Добре. Круто. Ухвалення це об'єкти передаються за посиланням. Ви знаєте, як, коли ви проходите масив в C ви могли насправді змінити масив? Це те ж саме в JavaScript. Якби я передати об'єкт, в даному випадку, я пройшло Майло в цю функцію catify. Міло починається. Його звуть Міло Банан. Я передати цей об'єкт у функцію тому що це об'єкт, асоціативна Масив в JavaScript. Коли я виконати операцію в цій функції, він буде насправді змінити об'єкт. Так що це відбудеться тільки для об'єктів в JavaScript, так само, як це відбувається для масивів всередині імені С. Так що Майло насправді стане кішка зараз. Чи має це сенс? Так це працює тільки для об'єктів. Об'єкти передаються за посиланням. Так. АУДИТОРІЯ: Так ви говорите, що на відміну від змінної I. ЙОСИП ОНГ: Так. Які змінної я був просто ряд, чи не так? Це як у C, коли ви проходите ціле, він робить копію. І коли ви передати масив, насправді змінюється фактичне масив в С. Те ж саме відбувається з JavaScript в цьому випадку. Добре. А поруч, Майло сумно, тому що він тепер кішка. Це було насправді Міло після деякі поїздки до ветеринара. Так як ми використовуємо наявність на веб-сторінці? Ми можемо включити його. Це HTML код з тегами смуги. Так що у мене теги Газа. А потім я ставлю деякі наявність Код в тегах сценарію. А потім він виконує це. Коли я тільки зробити це так, що це називається вбудований JavaScript. Це свого роду брудним, тому що JavaScript насправді в HTML. Кращий спосіб зробити це, набагато приємніше, це написати свій наявність в зовнішній файл, а потім надати тег скрипт з джерелом. І це піде на цей файл JavaScript і прочитати код JavaScript з що файл замість. І таким чином, ви не повинні багато JavaScript на початку вашого HTML файл, що робить це дійсно брудно. Ви просто покласти його десь в іншому місці. А потім він буде читати його звідти. Хіба в цьому є сенс? Питання розміщення. У даному конкретному випадку Сценарій до тіла. Тому, коли я виконую, що є нічого в організмі ще. Може бути, це зробить трохи більше відчуваю, коли я показую цю наступну частину. У цьому випадку сценарій приходить після дів. Тому насправді з'явиться справ на сторінці в першу чергу. Прямо тут, в цій маленькій червоної окружністю, ви бачите відображається текст. І тоді тривога з'являється. У першому випадку, тому що сценарій було до DIV, попередження з'являється в першу чергу. І тоді справ з'являється після закриття вікна. Таким чином, виконання має значення. Таким чином ми будемо мати це на увазі. Це буде важливо в небагато. ОК. Так добре, що не ви зачекайте, поки вся сторінка завантажується, то перед вами виконувати деякий код? Ми увійдемо в це трохи Трохи пізніше теж. Але просто тримати це місце розміщення питання на увазі, коли ми прийти на другий слайд. Отже, ми отримуємо, щоб DOM тепер. А що таке DOM? Так що, якщо ви подивитеся на HTML коду, це просто купа тексту на екрані. Так, як JavaScript знаємо, що це HTML елемент? Таким чином, ми повинні мати певний обсяг пам'яті подання цього структура, яка у нас є. І всякий раз, коли у нас є це в пам'яті представництво в JavaScript, ми називаємо що DOM. І це всього лише спосіб, яким люди вирішили що ми повинні представити це Структура HTML як. І що ж це DOM виглядає? Ну, в поданні пам'яті, ми беремо цей текст. І ми перетворити його в пам'яті уявлення. Так що це HTML. Таким чином, ми вперше дізналися, що кожен ДІМ дерево має документ. Це виглядає як дерево. І документ містить HTML тег, насправді все всередині це зараз. HTML тегів має двох дітей. Він має голову. Це голова, якщо ви подивитеся на відступ там, як вона структурована між закриває тегами, головка має дитину. Дитина назву. Саме так. Тепер у нас є тіла дитини. А потім, що тіло має дитина називається сім'єю. І, що сім'я має трьох дітей - Найстаріший, середній і молодший. Таким чином, ви повинні знати, як намалювати схему як це, коли ми просимо вас, як намалювати діаграму, коли ми даємо Ви HTML зліва. Знати, як справити DOM дерево. А всередині цих речей, є тільки деякий текст, який я представляв як маленькі коробочки. Чи робить це DOM дерево структура зміст і те, що DOM є? Отже, що ж р означає? Сюди, стор там в цьому теге представляє тег пункт в HTML. Таким чином, ви можете подивитися його. Але це просто означає, що це деякі простір для деякого тексту. І в нього є CSS стиль за замовчуванням, тому що це пункт тег. Але насправді не турбуватися про що частина занадто багато. Просто знаю, що це заповнювач протягом деякого тексту. Так. Питання? Так. АУДИТОРІЯ: Ви щойно згадали CSS. Сім'я хеш та хеш все це добро в основному представляють ідентифікаторів в CSS? ЙОСИП ОНГ: Так, саме так. Я повернуся до якої ці хеши значить в секунду. Коли Анжела підійшла CSS, вона говорили про CSS селекторів. Такі CSS селектори, що вона говорить. Так, Роб? ROB BOWDEN: Я хотів би також прокоментувати що DOM всередині тег заголовка також текстовий вузол. ЙОСИП ОНГ: Вірно. Так всередині тег заголовка, У мене є текстовий DOM. Так насправді, це назва повинна бути як маленька коробочка сходить його також. Але це не має великого значення занадто багато в даному випадку. Ми дійсно не піклуються про текстових вузлів, як ми їх називаємо, занадто багато. Добре, що ми робимо. Судячи з усього, що ми робимо. І я буду це виправити, коли Я завантажити його знову. Чи має це сенс? Так як же ми працюємо з DOM? Всякий раз, коли ви маєте справу з DOM в JavaScript, є два кроки. Ви вибираєте DOM елемент. А потім ви робите речі до нього. Таким чином, в цьому випадку, абстрактно, у мене обраний середній елемент. А потім приклад робити речі до нього буде зміна тексту. Це раніше Боб. Тепер, що зробив Я з ним був я змінив Боб Майло в цьому випадку. Так як же ми насправді це зробити? Як ми це робимо вибору? І як ми робимо речі, щоб річ, як тільки ми взяли це? Ну, то, як ви, хлопці впізнали його в цьому класі є використання те, що ми називається JQuery. Так що ж таке JQuery? JQuery це бібліотека, яка робить JavaScript легше писати. Значить, хтось знайшов час, і написав JQuery. JQuery насправді написано в JavaScript. А потім, тому що вони зробили це, ми тепер є ціла купа функцій, ми можемо використовувати, що зробити наш живе дуже просто. Так що деякі з речі вона робить? Це робить вибору елементів легше. Це робить зміни HTML, додавання класів легше. Це робить Аякс легше. Ми повернемося до цього в секунду. І це аналогічно C бібліотек. Таким чином, ви включають string.h, ви отримуєте STRLEN. Ви отримуєте зЬгсру, всі ці речі. При включенні JQuery, ви отримуєте хороший способу вибору елементів на зміну речі, і так далі. Ви отримуєте додаткову функціональність, що JavaScript не дає вам. Так JQuery НЕ JavaScript. JQuery це бібліотека, яка написана в JavaScript, що робить наявність легше писати. Так JQuery НЕ програмування мову. Але в JavaScript є. зробити. Звичайно, ви отримаєте вашу термінологію прав. Є питання? Так. Це питання? Добре. Так як же ви використовуєте JQuery? Ну, коли ви пишете деякі JavaScript код і включити JQuery у верхній частині вашого файлу у вигляді файл сценарію, можна використовувати знак долара зараз, щоб отримати доступ до JQuery. І це відрізняється від знак долара в PHP. Це такий же символ вам друкувати на клавіатурі. Але вони мають на увазі зовсім різні речі. Знак долара в PHP означає, що цей як я оголосити змінну. У JavaScript, коли ви включили JQuery, він виступає за JQuery. Так що майте це на увазі. Отже, як ми могли б вибрати елементи DOM? Ну, а коли ви робите це потворне наявність чином, ви отримуєте доступ документувати глобальної змінної. І тоді ви отримаєте елемент, ID родини. Це дійсно довго і багатослівно і не дуже хороший. Або ви можете отримати всі елементи які є р тегів. Це теж працює в JavaScript. Але ми ніколи не показав Ви синтаксис занадто багато. Те, що ми показали вам було JQuery. Так що вся селектор вгору там, що була виражена в JavaScript просто отримує конденсується в цей дуже хороший долара підписати хештег сім'ю. І $ р, там, де це так. Якщо ви хочете вибрати все р теги всередині сім'ї, ми поставити пробіл між ними. А тепер, ми отримуємо все р теги всередині сім'ї. І виглядає знайомим? Ну, Анжела говорили про CSS селектори. Дайте мені одну секунду. І тому для того, щоб вибрати елемент, ви просто використовуєте те ж саме, як ви буде робити з селектором CSS. Якщо поставити хеш перед про це, він вибирає по ID. Точка вибирає по класах. Якщо ви просто мати річ, не хеши або точки, він вибирає ці теги. Питання. Так? АУДИТОРІЯ: Коли ми використовуємо крапку в нашому HTML, є те, що не JQuery? ЙОСИП ОНГ: Dot в нашому HTML це річ JavaScript. Це не річ JQuery. Те, як ви, хлопці впізнали його з JQuery є використання. HTML. І тоді ви передали його все HTML буде. Так що я доберуся до цього всього другий насправді. Так як же нам робити такі речі, до елементу як тільки ми вибрали його? Так ось приклад вибору елемента. Так що тепер, ми хочемо робити речі до нього. Таким чином, в цьому випадку, дозвольте мені повернутися до попереднього слайду. Це був Боб раніше. І я хочу, щоб змінити це всередині HTML до Майло. Так що я викликати функцію HTML від елемента. Це HTML функція Спосіб елемента. А потім я даю йому, що Я хочу, щоб HTML, щоб бути. І це якраз замінює, що всередині що тег з тим, що я даю йому. Так. Питання? АУДИТОРІЯ: хештег використовується тільки для JQuery. [Нерозбірливості] ми б не використати це. ЙОСИП ОНГ: Так, саме так. Але не хвилюйтеся занадто багато про чисту JavaScript. Я просто хочу, щоб ви, хлопці, щоб зосередитися на тому, як ви б зробити це з JQuery, тому що буде важливо частина на вікторині. Вірно. Саме так. Отже, ви бачите, що хештег, так що відповідає вибрати елемент з ID середнього через це хештегом. Hashtag означає ID. І цей елемент має ідентифікатор середині. Так ось елемент ми вибираємо. АУДИТОРІЯ: [нерозбірливо]. знак долара хештег [нерозбірливо]? ЙОСИП ОНГ: Так немає. Питання ви можете використовувати. Значення. І значення. Працює тільки на елементах що є входами. У JQuery, було б . Вал, чи не значення .. Так що я доберуся до невеликого прикладу, що демонструє все це в поєднанні в секунду. Але я думаю, що це служить невеликий уривок має сенс для людей, до цих пір. Хочете змінити HTML, викликати метод HTML. Так. АУДИТОРІЯ: Чи можете ви пояснити знову метод? ЙОСИП ОНГ: Так метод просто функція, яка належить до одного, в цьому так, один з цих DOM елементів, тому що ви бачите I перший обраний елемент. Насправді, дозвольте мені використовувати миша. Я вибрав елемент в першу чергу. І тоді я назвав цю HTML функціонувати, що це було. І тому, що ця функція належить ця річ, ми називаємо це метод. Це просто гарна назва для нього. Сказати, що знову. Так що пам'ятайте, ми вибрали елемент тепер. І ми ввели його всередині змінна елемент. Виправте? Тому, коли ми хочемо змінити HTML на всередині, тому що це було Боб і раніше, ви хочете змінити цей текст, щоб Майло. Так ми називаємо HTML. І ми сказати йому, що HTML всередині що елемент повинен бути зараз. І так він міняє його на Міло, тому що я дав йому Майло. АУДИТОРІЯ: Так вони працюють разом. [Нерозбірливості] ЙОСИП ОНГ: Так, так. Вони працюють разом. Так один з них вибирає елемент в першу чергу. І другий робить щось є. Так. АУДИТОРІЯ: [нерозбірливо]. Якщо цей метод відрізняється від в HTML у вас є метод рівного актуальною. ЙОСИП ОНГ: Так. Це інший спосіб. Це інший спосіб. І ми можемо покрити, що через секунду коли ми доберемося до прикладу. Я хочу переконатися, що ми прискорити тому що ми мало часу. Але ми запускаємо шлях протягом довгого часу тепер. ОК. Круто. Так що якщо ви хочете додати клас, є також метод додати клас. Це просто приклад того, що ви можете зробити з JQuery. Це просто додає клас. Якщо ви хочете, щоб видалити його, ви можете зателефонувати видалити. Ось тільки ще одна річ, ви можете зробити. Так більше прикладів того, що ви можете зробити. Так я можу просто покласти його на верхня, як це? Наймолодший видалити. Якщо я просто виконати цей наявність в верхня частина мого файлу, буде, що працює? Вірно. Тому що середній поки не існує. Так що це не буде працювати. Порядок виконання. Само в початок першого. Що? АУДИТОРІЯ: Наймолодший ще не існує? ЙОСИП ОНГ: Так. Наймолодший ще не існує. Саме так. АУДИТОРІЯ: Ви сказали, середній. ЙОСИП ОНГ: Вибачте. Наймолодший ще не існує. І інша справа, у мене немає включали JQuery подати запитати сценарію SRC. Так що не збирається працювати. Насправді, я не робив, що в Наступний слайд, який є передбачається зафіксувати, що небудь. Але те, як ми робимо це JavaScript наводиться подія. Так що ми робимо, ми використовуємо подія маніпулятора, щоб це відбулося. І тому я виберіть документ встановити в першу чергу. Я кажу, добре, коли документ готові, дозвольте мені виконати функцію. Так ось все, що синтаксичні засоби. Я вибрав цей документ. Тепер, коли документ готовий, запустити функцію. І так тут, коли документ готовий, який означає, що всі HTML має завантажений, то я запустити функцію який видаляє цей елемент. І ось тепер, коли я запускаю цю функцію що я перейшов в готовий, я Гарантується, що всі HTML на сторінка буде існувати в першу чергу. Так. Питання? АУДИТОРІЯ: Що таке ключове слово подія всередині функції? ЙОСИП ОНГ: Так що ключове слово подією в функція просто є параметром, який передається у функцію для будь-якої події. Це просто те, що Ви отримуєте безкоштовно. При використанні ключових обробники в pset8, що подія може сказати вам, для Наприклад, ключ, який ви натиснули на. У цьому випадку для готового випадку це насправді не супер корисно. Але для ключового вниз випадку, це більше корисно, тому що ви отримаєте знати, які Ключові ви натиснули шляхом доступу ключ Код від цього об'єкта події. Виправте? Чи має це сенс? ОК. Так. Питання? АУДИТОРІЯ: Так ви можете покласти тег сценарію нижче? ЙОСИП ОНГ: Так що так. Ви можете помістити сценарій помітити нижче. Але тоді він просто стає дійсно брудно. І ми хотіли б централізувати всі нашого коду в одному місці. І це дозволить нам це зробити. Пам'ятайте раніше я сказав, що є більш хороший спосіб гарантувати, що елементи на сторінці, перш ніж виконувати код? І це просто хороший спосіб ви б добитися цього. АУДИТОРІЯ: [нерозбірливо]. ЙОСИП ОНГ: Так. Ви все одно довелося б, вірно? Тому що пам'ятайте, що ви включені подати у верхній частині сторінки. Так він збирається виконати, перш ніж Ви добираєтеся до нижній частині сторінки. ОК. Таким чином, ви також можете додати інше тип обробника подій. Це один просто обробляє клацання. Коли я натискаю на молодий, то він буде спливаюче вікно з попередженням. Це просто інший Тип події. На відміну від готового разі, тепер використовувати подію клацання, коли ви отримуєте клацає на елементі. І тому в даному випадку, пам'ятайте, клацання обробник приєднується до молодих. Так буває тільки тоді, коли Я натискаю на молодий. І в іншому, готового випадку був прикріплений до документа. Так що чекає документа бути готовим. Сенс? Я думаю, що я можу рухатися далі. Так. Питання? АУДИТОРІЯ: [нерозбірливо]. в цьому випадку ви використовуєте [нерозбірливо]. ЙОСИП ОНГ: О, так, тому що в цьому так, я повинен чекати для найменших елемент з'являтися на екрані спочатку перш ніж я зможу докласти обробник клацання, щоб це, і саме тому я ставлю його в про наявність документа готовий. ОК. А поруч, так що це великий приклад як би ви поєднати все. Це всього лише приклад перевірки форми ви бачили в лекції. Так що беріть його крок за кроком, як ви йдете через це. І це буде повністю в порядку. Просто прочитайте його зверху до низу. У мене є форма в нижній частині. Коли документ буде готовий, я надаю представити обробник у форму таким чином, щоб коли я відправити форму, я отримую значення всередині кожного з цих входів. І я перевірити, якщо це порожній. Якщо це порожній, я повернутися помилковим, тому що Я не хочу, щоб відправити форму, тому що форма не так. Якщо пароль порожній або це менш більше восьми символів, я не уявити форма, тому що це теж неправильно. І повернення помилкових найбільше заважає форма від подання і збирається на нову сторінку. І будемо сподіватися, що це має сенс. Я думаю, що ви, хлопці, повинні ходити через цей код крок за кроком за своїм розсудом. І як тільки ви розумієте, що вибрати елементи і робити такі речі, до нього насправді тягне за собою, це зробить багато сенсу для вас. Так? АУДИТОРІЯ: При чому тут ім'я = ім'я користувача на увазі? ЙОСИП ОНГ: Таким чином, назва = ім'я користувача та Ім'я = пароль просто означає дивитися на атрибутом все Ви вибираєте. А потім, що повинен відповідати. Так ми йдемо в реєстрації. А потім ми дивимося на всіх входах і реєстрація. А потім ми вибираємо той, де ім'я атрибут дорівнює імені користувача. Так що перший селектор вибирає тільки Ім'я користувача введення. І, що другий селектор вибирає тільки пароль один, тому що ті, у їх атрибути ім'я встановити як те, що вони повинні бути. Питання? АУДИТОРІЯ: На уявлення, як же Нижня частина рішення верхню частину? ЙОСИП ОНГ: Так це тому, що обробника подій. Таким чином, ми чекали події відправки що звільняють з форми. І це все, що уявити. Чому я називаю представити там? Це говорить, коли форма була відправлена, Я отримую уявити подія. Отже, дозвольте мені просто перехопити, що і потім запустити замість цього коду. Так? АУДИТОРІЯ: Чому у вас мати функцію подію? Чому ти не можеш просто [нерозбірливо]? ЙОСИП ОНГ: Тому що в JavaScript, ви мають оголосити функції. Ось тільки як це працює в JavaScript. Ви повинні сказати, що це збирається запустити функцію. Так ти це, що ви очікуючи функцію тут замість всього фігурні дужки. АУДИТОРІЯ: А функція є те, що з цього випливає? ЙОСИП ОНГ: Так. Функція все, що всередині фігурні дужки після що функція ключовими словами. Так? АУДИТОРІЯ: [нерозбірливо]. ЙОСИП ОНГ: Для уявити? АУДИТОРІЯ: Ні, для функції без події. ЙОСИП ОНГ: Так. Так що без разі, ви можете мати це. Якщо вам не потрібно подія, то ви можете просто опускаємо. Але якщо ви робите, то ви просто покласти його там. Так. Швидкий питання? АУДИТОРІЯ: [нерозбірливо]. ЙОСИП ОНГ: Так. Тому що те, що вам потрібно зробити,, document.ready просто говорить чекати все HTML на сторінці, щоб спочатку завантажити. І, як правило, ви хочете, щоб ваші елементи на місці, перш ніж запускати будь-який код. Добре. Ми повинні дістатися до Ajax. Ми не так вже багато часу. Так плюси і мінуси. JavaScript легше спробувати писати з JQuery. Але JQuery є почасти повільним. Це як PHP працює повільніше, ніж C, тому що це інтерпретується. І JQuery трохи повільніше, ніж JavaScript, тому що це робить багато речі під капотом. І так, якщо ви використовуєте JQuery, це тільки трохи повільніше, ніж JavaScript, хоча і дає хороший елегантність. І, нарешті, Аякс. До цих пір з Ajax, ви ще не бачили Ajax з точки зору pset7 ще й тому, коли ви робите, ви уявити форма для цитати. Він завантажує нову сторінку. Таким чином, ви отримаєте цю велику білу спалах на сторінці в той час як друга сторінка завантажується, правильно? Було б дуже добре, якщо вам не було цього спалаху. Як Facebook, якщо ви просто виділіть нижня, він додає новий контент без оновлення всієї сторінки. Так щось на зразок цього було б добре. Це код JavaScript на лівій стороні. Ви отримаєте те, що знаходиться всередині цього входу. Ви отримуєте фондовий інформацію від Yahoo! А потім ви робите великий рядок, говорить, добре, це послання, яке я хочу показати на екрані. І тоді ви покласти, що повідомлення всередині деякого HTML елемента, який отримує відображається на екрані. Так що все, що тут відбувається. Так в основному, тому що це все JavaScript і вам не потрібно запускати більше PHP, це буде переконатися, що сторінка не оновлюється. Так що це просто абстрактна ідея що я говорю тут зараз. Абстрактною ідеєю є те, що якщо ви робите це все в JavaScript, ви не повинні оновлення сторінки. Але як ви насправді це зробити? Ну, насправді, давайте поговоримо про Проблема з цим в першу чергу. Проблема в тому, в JavaScript, виконання є синхронним. Таким чином, ви повинні чекати одного лінія закінчити перед вами виконати наступний рядок. А що, якщо я збираюся до Yahoo!, і їх сервери дуже повільно, і їм потрібно три секунди, щоб Віддай, що фондовий інформації? Коли я вдарив, що ціна лінії, якщо виконання є синхронним, як це по за замовчуванням, що це просто збираюся зробити, це Ваш браузер збирається тягти три секунди. І ви не збираєтеся бути в змозі зробити нічого поки він отримує ці дані. Це збирається бути заморожені. І це погано. Ви ж не хочете, щоб користувач мати заморожений веб-сторінки. Виправте? Ось тільки погано. Усі згодні з тим? Якщо ви переглядаєте Facebook і його замерзає, і ви нічого не можете зробити, ви отримати дійсно розчаровані. Таким чином, рішення ми зробити щось асинхронний замість цього. Так що все це асинхронний річ говорить Тобто, я збираюся запитати це URL для деяких даних. А потім я збираюся продовжувати йти. Я просто хочу, щоб тримати виконання будь-який код, який був після цього. А потім, коли, що дані готові, тоді я буду обробляти його. Це все, що говорить. АУДИТОРІЯ: Аякс просто робить Код асинхронний? ЙОСИП ОНГ: Це асинхронний спосіб вибірки даних. Тому перше, що про Ajax це дозволяє мені отримати дані від зовнішнього сайту. І друге це гарантує, що моя сторінка не зупиниться, поки я вилучення цих даних. Це асинхронна частиною. Тому що він йде десь в іншому місці, тому що я говорю, я продовжую на час це витяг цих даних, що робить його асинхронний. Я тримаю виконання. Так тримати, що асинхронний Ідея на увазі. І я покажу вам, що різниця. Синхронний версія знаходиться на лівій стороні. Асинхронная версія знаходиться на правій стороні. Подивіться на цифри, щоб побачити, які кроки відповідають тому, що виконує на кожному рядку. Он там, попередження з'являється в першу чергу. Тому що отримання зображення Інформація від Yahoo! займає три секунди, це кіосків протягом трьох секунд. А потім він попереджає ціну після цих трьох секунд. Так от, це оповіщення шоу до у той час - три секунди дюйма А потім він попереджає по після цього. Так що просто йде крок за кроком. Це як те, що ви, хлопці, прийме, правильно? З асинхронного виконання, Ви попередити в першу чергу. Тоді ви йдете за наступною адресою. А ви кажете, що я збираюся просто попросите даних. А потім я збираюся обробити його пізніше. Так що негайно виконує Наступний рядок після того як я зробити це Асинхронний запит. Таким чином, 0,001 секунд, ви бачите попередження привіт. Виконати цю функцію, оповіщення до побачення. І тому, що я дав обіцянку, що я б обробляти дані пізніше, ніж відбувається, коли ці дані повертається через три секунди, то я біжу, що функція, яка у мене є там. Так? АУДИТОРІЯ: Не могли б ви вказати або уточнити, що означає Аякс? ЙОСИП ОНГ: Так Аякс це спосіб, що якщо я потрібні дані, коли я на сайті і я не хочу, щоб оновити сторінку, то Я використовую цю технологію під назвою Ajax. Це по суті тільки означає, піди, принеси дані з іншої веб-сайт. І зробити це таким чином, що тільки НЕ затихне мою веб-сторінку. АУДИТОРІЯ: Так це те, що притаманне частина JavaScript або JQuery? ЙОСИП ОНГ: Значить, хтось написав спосіб зробити це в JavaScript давним-давно. У якийсь момент, вона не існує. І таким чином, хтось винайшов цю техніку щоб дозволити людям, щоб просити ці дані таким чином. І вони написали деякі речі щоб зробити це за вас. І JQuery просто дає вам це Дуже хороший спосіб зробити це з цим $. отримати функцію. питання? Я можу відповісти на питання про Аякс потім теж. Я буду тут. Так що давайте нам отримати дані без оновити сторінку. І це давайте нам зробити це в асинхронний спосіб, яким не замерзає сторінку. Занадто довго, не читав, якщо це Пояснення було занадто довго для вас. Отже, нарешті, міжсайтовий сценаріїв атак. Ми бачили це з Zamyla. Якщо в моєму когось бази даних має це ім'я, що цей сценарій тег, і я є код на моїй сторінці, яка друкує з імен людей в ряд, або у мене є деякий код JavaScript, який вставляє це ім'я в сторінку, що HTML отримує виробляється? Ну, я роздрукувати HTML тег. Я роздрукувати всі ці теги. Я дістатися до частини, де я друк з моїми друзями. Роздрукувати Лорен поза. Це друк Майло поза. А потім моє ім'я в базі даних є сценарій повідомлення невтішно статус Facebook. Тому що я вставив це в сторінці тому що це схоже JavaScript, коли цю сторінку відправляється користувачеві, він запускається на виконання, як JavaScript. І так це те, що ми називаємо міжсайтовий скриптинг атаки. Хтось ставить шкідливий інформацію в Ваша база даних, які могли б відповідати деякі додаткові рядки або деяка рядок JavaScript. І коли він отримує виводиться на сторінки таким чином, те, що відбувається те, що поганий код запускається на виконання що я не маю наміру для того, щоб отримати виконаний. І це все, міжсайтовий сценаріїв атаки. І те, як ви обійти це як Zamyla сказав. Ви просто обернути речі в HTML спеціальні символи. І це HTML спеціальні символи є PHP функція, яка дозволить запобігти такого роду речі з відбувається з вами якщо у вас є зловмисний рядок в базі даних. Це просто уникає його, так що це не так інтерпретуються як HTML. Він замінює маленькі дужки з тим, що ми називаємо об'єкти. І ми пішли цим в лекції теж. Тому я думаю, ви, хлопці, повинні мати гарне уявлення про те, що. Питання? Так. АУДИТОРІЯ: Отже, як би [Нерозбірливо]? ЙОСИП ОНГ: Сказати, що знову. АУДИТОРІЯ: Як би монітор - ЙОСИП ОНГ: Вірно. Так у вас є щось, що говорить, коли Зареєструватися, тип на моє ім'я. Я просто наберіть в цій області, мене звуть зняли повідомлення невтішні Facebook Статус близько тег сценарію. І це просто отримує введений в У базі, тому що я не можу сказати, що хтось в світі не є ім'я з лівою стрілкою в ньому або Слово сценарій в ньому. Це насправді не має сенсу. Так що я просто повинні переконатися, що я санувати матеріал перш, ніж я роздрукувати його до цієї сторінки. АУДИТОРІЯ: Так спеціальні картки HTML запобігає теги сценарію? ЙОСИП ОНГ: Так. Так це не заважає теги сценарію. Це просто гарантує, що теги сценарію не отримують інтерпретується як HTML або - да. Це просто придумує, як те, що є насправді. Добре. Так, щоб був огляд вікторини. Круто. [Оплески]