[Powered by Google Translate] [Тыдзень 9]
[David J. малая - Гарвардскі універсітэт]
[Гэта CS50. - CS50.TV]
Добра. Сардэчна запрашаем назад. Гэта CS50, і гэта пачатак тыдня 9.
Сёння мы сканцэнтраваны, у прыватнасці, на дызайн, больш не ў кантэксце C
але ў кантэксце PHP і трохі SQL і трохі JavaScript,
асабліва да канца і PSET 7, а таксама канчатковы праект.
На самай справе, калі вы знаходзіцеся ў дадзены момант ваш канчатковы праект
, Дзе, як мяркуецца на гадзіну або каля таго таму вы па крайняй меры, пачалі даваць некаторыя думкі
на ваш канчатковы праект, і вы думаеце вы хацелі б супрацоўнічаць з 1 ці 2 аднакласнікамі,
калі ў вас узніклі праблемы з падключэннем з названай аднакласнікаў,
не саромейцеся запоўніць форму на cs50.net/partners/form.
Ён проста пытаецца, хто ты, які праект вы думаеце пра тое,
дзе вы жывяце толькі па тэхнічных прычынах.
І потым, калі вы хочаце, каб трымаць вочы на ​​працягу наступнага тыдня або каля таго табліцу URL там,
Вы можаце ўбачыць, толькі для чытання версію Google Doc
, У якой мы збіраем гэтую інфармацыю.
Так што калі вы хочаце працаваць з кімсьці, усімі сродкамі, не саромейцеся звярнуцца да людзей
з дапамогай гэтага механізму.
Але большасць людзей працуюць сола. Гэта зусім нармальна.
Таму не лічу, што гэта ў любым выпадку абавязкова.
У пятніцу ён быў толькі я і яшчэ некалькі камандзе тут,
пустым тэатры, па большай частцы.
Там было 3 турысты сядзяць там, наверсе, так, каб было трохі няёмка.
Тое, што мы казалі толькі пра тое, баз дадзеных і мы гаварылі пра PSET 7 няшмат.
І калі вы выпадкова не злавіць, што на відэа прама зараз, гэта нармальна.
Я пастараюся, каб вызначыць любыя ўмовы, якія мы інакш ўспрымаем як належнае
на аснове лекцыі ў пятніцу.
>> Але сёння мы будзем старацца, каб вы ў кропку
не проста магчымасць зрабіць нешта накшталт PSET 7
але на самой справе разумеючы, што адбываецца пад капотам,
Асабліва некаторыя абстракцыі, якія мы ставім на месца ў файле functions.php
, Каб зрабіць вашу жыццё крыху лягчэй, але так, што вы ў канчатковым рахунку зразумець
так што, калі навучанне колы адарваліся праз некалькі тыдняў вы ўсё яшчэ можаце выжыць
У рэальным свеце і зрабіць гэты матэрыял без CS50 рамкі пад вамі.
Гэта $ _SESSION, для тых з вас, хто знаёмы
ці хто ўжо злавілі відэа ў пятніцу, што ж СЕСІІ давайце зробім
У PHP на аснове вэб-прыкладанняў?
Гэта суперглобальная зменнай, якая азначае, што ён падобны па духу GET і POST
і некаторыя іншыя, але што гэта за справа карысна?
>> Што такое СЕСІІ выкарыстоўваецца? Так. [Студэнт] ўваходу ў ўліковы запіс
Прабачце? [Студэнт] ўваходу ў уліковы запіс ўваходу ў уліковы запіс самай справе.
У PSET 7 мы выкарыстоўваем гэтую сесію суперглобальная для палягчэння ўваходу ў ўліковы запіс
І што прыемна аб гэтым суперглобальная тым, што гэта асацыятыўны масіў.
Асацыятыўны масіў, нагадаем, з'яўляецца толькі масіў, але чые паказчыкі не павінны быць нумары
як 012. Яны могуць быць лікамі або яны могуць быць нават радкоў.
І таму, калі вы нырнулі ў PSET 7 яшчэ, вы можаце ўспомніць, што мы захоўваем ключ, які завецца ID
Унутры гэта асацыятыўны масіў, значэнне якога з'яўляецца нешта накшталт 123 -
што ў цяперашні час увайшлі ў ID карыстальніка з'яўляецца.
Матывацыяй для гэтага з'яўляецца тое, што нават пасля таго, як карыстальнік наведаў лакальны
ці мой сайт у цэлым, а затым яны ўвайшлі ў сістэму,
нават калі яны не клікаюць па спасылцы або вярнуцца на свой сайт за 5 хвілін
ці нават гадзіну ці нават дзень, але яны пакідаюць іх адкрытымі вокны браўзэра,
праз гэты суперглобальная я магу памятаць, што яны зайшлі
>> Іншымі словамі, гэта дазваляе мне захоўваць некалькі доўгатэрміновых што я хачу пра карыстальніку.
І вы можаце думаць, гэта сапраўды як увасабленне кошыку.
Такія месцы, як Amazon, відавочна, дазволіць вам пакласці рэчы ў кошык,
але HTTP, пратакол, што паўнамоцтвы ў Інтэрнэце, з'яўляецца асобай без грамадзянства
У тым сэнсе, што, калі вы наведваеце вэб-сайт,
па большай частцы ў вас няма некаторай пастаяннай падлучэнне да сеткі
паміж браўзэрам і серверам.
Як толькі вы запампавалі HTML і выявы ў фармаце JPEG і GIF-файлы і ўсё такое,
злучэнне сыходзіць, і вы проста мець копію HTML і яшчэ шмат чаго з сервера.
Але калі сервер хоча ўспомніць нешта пра вас,
нагрузка на сервер на самай справе запісаць гэтую інфармацыю.
І таму вы праграміст, якія маюць кантроль над серверам
можна паставіць самы, што вы хочаце ўнутры гэтага суперглобальная асацыятыўны масіў
і яна будзе там у наступны раз, калі карыстальнік вяртаецца,
будзь то хвілін ці нават дзён, калі яны не закрываюць вокны браўзэра,
у які момант СЕСІІ знікае.
Такім чынам, гэта эфемернае захоўвання, гэта надзвычай нетрывалы, і гэта азначала, каб сысці
Як толькі карыстальнік закрывае свой браўзэр - не толькі гэтай ўкладцы, часта ўвесь браўзэр,
тым самым эфектыўна рэгістрацыі карыстальнікаў з.
Так як гэтая рэч на самай справе рэалізаваны?
Давайце кінем хуткі погляд на простым прыкладзе мы разгледзелі ў пятніцу.
Для тых, хто незнаёмы, гэта было так проста, як гэта.
Гэта вэб-старонкі, адзіная мэта ў жыцці, каб сказаць мне,
Колькі разоў я наведаў гэтую старонку.
Гэта першы раз у панядзелак, што я наведаў яго, гэтак ён кажа 0 раз.
>> Але калі я пачну перазагрузкі старонкі, яна кажа 1 раз, 2, 3, 4, 5,
і гэта ў канчатковым выніку проста трымаць на рахункі ўверх, уверх, уверх, уверх, уверх
кожны раз я на самой справе кнопкі Абнавіць на ім.
Так як жа гэта працуе? Дазвольце мне зайсці ўнутр гэтага файла пад назвай counter.php.
У верхняй частцы яно ўсё сінім каментароў, але самае цікавае тут.
У радку 13 мы называем гэтую функцыю session_start,
і што літаральна ўсё, што вам трэба зрабіць, калі вы хочаце мець доступ
гэтага спецыяльнага суперглобальная называецца $ _SESSION.
Гэта робіць усё гэта магчымым, і мы ўбачым праз імгненне, як такое ўвогуле магчыма.
У радку 16 апавяшчэнне, што я раблю.
Калі ключ, званы лічыльнікам - іншымі словамі, значэнне індэкса - "лічыльнік"
існуе ўнутры гэтага масіва называюць сесіі, тое, што я раблю з ёй у радку ніжэй?
Што такое радок 18 робіш?
>> [Неразборліва адказ студэнта] Што гэта? [Студэнт] Захаванне значэння. Добра.
Гэта захоўвання значэння, якое знаходзіцца ў СЕСІІ цяпер у новых лакальных часовых зменных,
$ Лічыльнікі ў ніжнім рэгістры.
Звярніце ўвагу, што PHP ўжо трохі гультаяваты тут.
Звярніце ўвагу, мы не маем ніякай згадкі пра Int або з якая плавае кропкай ці радок ці нешта ў гэтым родзе
таму што PHP тыпізаваных слаба, у якім вы не павінны ўказваць тып зменнай,
і ў гэтым выпадку тут я нават не абвешчаныя яшчэ.
Я абвясціўшы яго ўнутры гэтых фігурныя дужкі, і ў адрозненне ад C, гэта на самай справе добра.
Незалежна ад таго, наколькі глыбока ўкладзеных дэкларацыі зменнай у PHP -
Усярэдзіне фігурных дужак, усярэдзіне фігурнай дужкай і да т.п. -
яна будзе на той момант часу існуюць на астатнюю частку праграмы,
да лепшага ці да горшага.
Так што адразу становіцца глабальным, як толькі вы вызначылі яго, як мы робім тут.
>> У адваротным выпадку, калі я не знаходжу ў гэтым няма нічога ў СЕСІІ суперглобальная,
Я мабыць ініцыялізацыі гэтай зменнай лічыльніка ў 0,
такім чынам толькі пры ўмове, што карыстач ніколі не быў тут раней.
І тады гэта, вядома, павялічваючы лічыльнік як?
Я абнаўляе значэння, што знаходзіцца ўнутры гэтага асацыятыўны масіў
, Усталяваўшы яго роўным незалежна ад лічыльніка ў цяперашні час + 1.
Калі я пракруціць ўніз тут, каб HTML-старонкі, гэта на самай справе даволі простая.
Усё, што я ў целе гэтай старонкі: "Вы наведалі гэты сайт, каб і то-то часы".
І гэта канструкцыі PHP.
Калі вы робіце <? =, Гэта эквівалентна эфектыўнай, якія функцыі?
Гэта сапраўды эквівалентна нешта накшталт Printf, якія мы бачылі шмат разоў у C,
хоць, як вы ведаеце, ужо з спецыфікацыі ў PSET 7,
друк таксама з'яўляецца функцыяй, якая проста друкуе нешта, гэта на самай справе не выкарыстоўваць фармат кодаў,
і вы можаце сказаць рэха, а таксама.
Яны ўсе вельмі трохі розны, хоць сумарны эфект у канчатковым выніку тое ж самае.
Такім чынам, гэта выкарыстанне знака роўнасці з'яўляецца толькі выгляд элегантны спосаб зрабіць гэта
больш коратка, чым вы маглі б быць у стане.
Дык вось усё гэта робіць сайт. Яна выводзіць значэнне лічыльніка.
Як гэта ўсё адбываецца на самай справе?
Вы можаце ўспомніць, тыдзень таму мы пачалі шукаць пад капотам
на тое, як працуе вэб-старонкі з дапамогай гэтай ўкладкі інспектара.
>> Chrome мае гэта як у версіі для Mac, версія Windows, і нават Linux версіі,
і Firefox і IE маюць падобныя механізмы, з дапамогай якіх у вас ёсць гэта убудаваны адладчык
ўсярэдзіне браўзэра.
Давайце зірнем на наступны.
У нас ёсць цэлая куча ўкладак тут, і нагадаць, што левыя 1 Elements,
і, як ні godawful HTML і JavaScript у старонку,
Нагадаем, што з укладкі Элементы вы можаце перамяшчацца па HTML іерархічна
і прыгожа і акуратна.
Так што, калі вы спрабуеце даведацца з сайта, як Google або Facebook
ці сапраўды любы сайт, разумею, што вы, верагодна, лепш
гледзячы на ​​зыходны код такім чынам, у адрозненне ад прагляду зыходнага крыніцы,
, Які можа быць беспарадак, як мы бачылі, асабліва на сайт Google.
Так што, калі я замест гэтага пстрыкніце на ўкладцы Сетка тут,
Давайце паглядзім, што адбываецца, калі я наведваю гэтую старонку.
Перш за ўсё дазвольце мне ачысціць кэш.
Я збіраюся ісці ў налады ў Chrome, а затым перайсці да гісторыі
і зніміце ўсе дадзеныя аб прагледжаных старонках.
Вы маглі б быць выкарыстаны для раблю гэта для іншых мэтаў, [смех]
Але калі справа даходзіць да распрацоўкі вэб-сайтаў, на самай справе карысна -
калі вы смяецеся вы ведаеце. [Смех]
Гэта на самай справе вельмі карысная пры распрацоўцы вэб-сайтаў, таму што рэальнасць такая,
такія рэчы, як печыва і таму падобныя рэчы кэшаваных HTML файлы, кэшаваныя файлы JavaScript
сапраўды можа стаць вялікай галаўным болем, таму што калі па якіх-небудзь прычынах
браўзэр вырашае для кэшавання файлаў і ўсё ж вы ўнеслі змены ў гэты файл на сервер
але браўзэр сапраўды не зразумеў, што файл быў зменены
і, такім чынам, на самай справе не паўторна загрузіць яго, нават калі вы націснеце кнопку Абнавіць,
адна з самых верны спосаб проста пераканайцеся, што няспраўнасць не з кодам,
гэта з паводзінамі браўзэры, каб увайсці ў тут, у вашым браўзэры
і проста ачысціць усю гісторыю, так што няма ніякай блытаніны.
>> І потым, калі вы сапраўды хочаце быць параноікам, зачыніце браўзэр, перазапусціць яго,
, А затым пераканацца, што ўсё працуе так, як чакалася.
Карацей кажучы, ачыстка кэша добра, калі робіш развіцця.
Такім чынам, тут мы маем ўкладцы Сетку.
Я раней наведвалі сайт у 9 разоў, але дазвольце мне цяпер ісці наперад і націсніце кнопку Reload.
І я зноў да 0.
Давайце паглядзім, як на самой справе гэта тое, што гэтая сесія суперглобальная ператвараецца ў жыццё.
Я збіраюся націснуць на 1-HTTP-запыт, які быў зроблены,
і гэта акно адладкі дазваляе мне зазірнуць ўнутр гэтага.
Тут я бачу толькі адказ ад сервера, які не цікавыя.
Я бачыў гэта ў любым колькасці спосабамі.
Але тое, што тэхнічна цікавыя загалоўкі.
Калі я тут, пракруціць ўніз і засяродзіць увагу на загалоўкі запыту і націсніце прагледзець зыходны код,
што я буду бачыць літаральна запыце HTTP
што проста пайшоў з майго браўзэра да сервера,
GET з'яўляецца аператыўнае слова і / counter.php быць імя файла,
HTTP/1.1 проста быць версіі HTTP, што мой браўзэр выкарыстоўвае.
Гэтая лінія тут невялікае напамін ад браўзэра да сервера, што імя сервера
што ён хоча пагаварыць.
І тады астатнія часам гэта цікава, але не адпавядаюць прама цяпер.
>> Гэта проста нейкая цікаўнасць.
Cryptic хоць гэта радок, у любы час вашага браўзэра наведвае вэб-сайт
гэта інфармаванне сервера, які браўзэр вы выкарыстаеце
і якую аперацыйную сістэму вы карыстаецеся і якія варыянце.
Так што калі вы калі-небудзь задумваліся, як сайты, як CNN і яшчэ шмат чаго
ведаю, што працэнты карыстальнікаў Mac у сеткі, карыстальнікі ПК,
IE карыстальнікаў, карыстальнікі Chrome і да таго падобнае, гэта таму, што ўсе нашы браўзэры
кажуць кожны сайт, там якія мы ёсць.
Гэта не абавязкова ўтрымліваюць асабістую інфармацыю,
але гэта не сказаць серверу, што вашы IP адрасы і тое, што браўзэр і АС вы карыстаецеся.
Дык вось дзе гэтую інфармацыю.
Але што больш цікава зараз, калі справа даходзіць да гэтых сесій загалоўка адказу.
Дазвольце мне кнопку прагляду зыходнага кода побач з адказам.
Што цікава, вось некалькі рэчаў.
1, мы вярнуліся кодам стану 200.
Мы ніколі не бачым гэты статус код, таму што гэта азначае, што ўсё добра.
Гэта азначае літаральна ўсё ў парадку, у адрозненне ад чагосьці іншага.
Што такое лік, якое мы часам бачым, што гэта дрэнна? [Студэнт] 404.
404, файл не знойдзены, 403 Вы маглі б натрапіць на ўжо
што забаронена, а значыць, вы забыліся нешта CHMOD, хутчэй за ўсё.
І ёсць куча іншых.
>> Тут, унізе, гэта трохі вар'ят.
Я проста напісаў гэты файл некалькі хвілін таму, уставіўшы яго ў Gedit.
Чаму гэтай старонкі заканчваецца ў 1981 годзе, перш чым там сапраўды было Інтэрнэце?
Што там адбываецца?
>> [Неразборліва адказ студэнта] штамп часу. Але чаму?
Гэта некалькі адвольна, але гэта на самай справе карысна.
Што гэта казаў мой браўзэр гэта PHP файл, які вы толькі што прасілі ўжо мінуў.
На самай справе, ён скончыўся 30 гадоў таму.
Але што гэта азначае?
Гэта проста азначае, што ў наступны раз, калі карыстальнік наведвае гэтую старонку,
Ці шляхам перазагрузкі або набраўшы URL у адрасным радку,
пераканайцеся, што вы схадзіць за новай копіяй.
Гэта свайго роду прыкладам кэш перабору,
дурныя словы, якое азначае толькі спрабуе адбіць браўзэраў
ад фактычна кэшаванне HTML, які быў адпраўлены з сервера
так што вы не выпадкова трапілі перазагрузку, а затым убачыць тую ж версію файла.
Вы на самой справе хочаце, каб сервер адправіць новую копію.
Таму той факт, што гэта 1981 проста азначае, што гэта тое, што прыбор выбірае
як адвольную дату ў мінулым.
Але сапраўдная сакавітая лінія цяпер гэта адно.
Нават да 50 вы, верагодна, цьмяна знаёмыя з печывам.
Па стане на зараз, асабліва сярод тых, хто менш камфортна або паміж імі,
Што такое куки ў вашым разуменні прама зараз
хоць мы і збіраемся зрабіць ваша разуменне больш тэхнічны?
Што такое печыва? Так.
[Студэнт] Інфармацыя аб карыстальніку, як калі б яны напісалі сваё імя ці нешта яшчэ.
>> Добра. Гэта інфармацыя аб карыстальніку, будзь яны ўвялі ў свае імя карыстальніка ўжо.
Cookies з'яўляюцца адным са спосабаў якім серверы могуць успомніць нешта пра карыстальніку.
І тое, што печыва на самай справе ўяўляе сабой тэкставы файл ці некаторыя паслядоўнасці байтаў
які пасадзіў на сервер ў Вашым браўзэры,
а ўнутры яго файл ці з тых, байт з'яўляецца свайго роду ідэнтыфікатарам.
Можа быць, гэта літаральна вашага імя карыстальніка, але часцей за ўсё гэта нешта больш загадкавае выгляд
як гэтая рэч тут - bo8dal3ct і гэтак далей - гэта сапраўды вялікі літарна-лічбавы радок
гэта сапраўды проста хацеў быць унікальным ідэнтыфікатарам для вас.
Ці вы можаце думаць пра яго як свайго роду віртуальны штамп руку.
Калі вы ідзяце ў нейкім клубе або ў парку забаў, памятаць, што вы фактычна выплачанай
і сышлі ў, яны паклалі маленькую чырвоную налепку на вашай руцэ нейкі,
і што нагадвае людзям на лічыльнік, які вы ўжо заплацілі
і вы можаце прыходзіць і сыходзіць калі заўгодна.
Cookies трохі падобныя па духу на гэта.
У першы раз я наведаў гэты сайт, так як я толькі што зрабіў пасля вызвалення майго кэша,
вэб-сервер, прыбор у гэтым выпадку паставіць штамп на маёй руцэ
чыё імя PHPSESSID, ідэнтыфікатар сесіі,
, Значэнне якога гэта сапраўды доўгі літарна-лічбавы радком.
>> Так што цяпер накшталт красуецца на руцэ, так што ў наступны раз я ударыў перазагрузкі
або ўручную наведайце гэты URL у браўзэр,
мой браўзэр па вызначэнні HTTP збіраецца прадставіць ручной штамп
зноў і зноў, і зноў.
Таму, нават калі сервер не абавязкова ведаць, хто я,
яны па крайняй меры ведаюць, што я такі ж карыстач або, па крайняй меры, больш канкрэтна, таго ж браўзэра.
І гэта, у канчатковым рахунку, як сесіі суперглобальная рэалізаваны.
Сервер паняцця не мае, хто вы ёсць, калі вы зноў сайце у ​​другой ці ў трэці раз
калі вы ўяўляеце гэтую руку штамп.
І як толькі вы ўявіць, што рука штамп,
Вэб-сервер па сутнасці ідзе ў маленькую базу дадзеных свайго
і правярае, добра, я толькі што бачыў руку друк карыстальнік bo8dal3ct і гэтак далей.
Давайце паглядзім, якая інфармацыя захоўваецца праграміст
Усярэдзіне суперглобальная пра гэта карыстачу,
, А затым дазвольце мне пераканацца, што гэтыя дадзеныя зноў ўнутры сесіі суперглобальная
так што праграміст можа паўторна доступу да дадзеных
нават калі яно было ўстаноўлена некалькі хвілін або гадзін таму.
Такім чынам, іншымі словамі, печыва, якая атрымала дрэнную рэпутацыю на працягу некаторага часу
з-за няўпэўненасці ў браўзэрах і яны сапраўды могуць парушаць нашу прыватную жыццё, і ўсё гэта,
яны на самай справе маюць вялікую карыснасць, таму што без іх
Вы стала ўваходзе ў кожную старонку Facebook вы наведваеце
або кожны Gmail электроннай пошты вы чыталі, калі браўзэр не ёсць спосаб запамінання
што вы ўжо сапраўднасці.
>> Такім чынам, у гэтым выпадку печыва адпраўляюцца туды і назад праз провад.
Іншы цікаўнасць печыва, асабліва тут, у тым, што гэта цалкам у адкрытым выглядзе.
Там няма шыфравання адбываецца тут бы там ні было,
ды і наогул я выкарыстоўваю HTTP на дадзены момант.
Адзін з нашых любімых момантаў у CS50, які цяпер 2 гады таму,
было прыкладна ў той час інструмент пад назвай Firesheep выйшаў.
Гэта быў свабодны кавалак праграмнага забеспячэння, якое было зроблена даследчык бяспекі
як трывожны сігнал для грамадства, каб сказаць, наколькі жудасна рэалізаваны
пэўныя механізмы аўтэнтыфікацыі на Web былі.
Такім чынам, на працягу некаторага часу, Facebook была амаль цалкам па HTTP, HTTPS няма.
І нават калі вы не ўяўляеце, як крыпта працуе, S з'яўляецца бяспечным
такім чынам, гэта азначае, што па крайняй меры некаторыя шыфраваннем.
Facebook жа выкарыстоўваецца для шыфравання імёнаў карыстальнікаў і пароляў,
Але як толькі вы паглядзелі на вашым тыкае або паведамленняў або навін,
Усё, што было ў незашыфраваным выглядзе.
Так было да таго часу, пакуль Gmail яшчэ год ці 2 назад.
Кожны раз, калі вы ўвайшлі ў сістэму, так, яны выкарыстоўвалі шыфраваныя,
але пасля гэтага яны не зрабілі. І чаму гэта можа быць?
Чаму б не выкарыстоўваць крыптаграфію ўвесь час выкарыстання ў падобных выпадках?
Што гэта? Я думаю, што я нешта чуў. [Студэнт] Speed.
Хуткасць, праўда? Ёсць спосабы абыйсці гэта.
Але калі вы проста выгляд думаць пра гэта лагічна, калі вы нешта шыфравання,
Вы павінны зрабіць па крайняй меры, трохі больш працы.
У PSET 2, калі вы рэалізавалі Цэзара або Vigenere ці нават расколіны,
толькі пячатка радкі адносна лёгка.
Шыфраванне і друку радкі мінімальна патрабуе крыху больш працы.
>> Для супер папулярных сайтах, як Google і Facebook,
калі ў вас ёсць, каб зрабіць больш працы для кожнага карыстальніка, для кожнай вэб-старонкі яны наведваюць,
што проста займае больш працэсарнага часу.
А калі вам трэба больш працэсарнага часу, вам можа спатрэбіцца некалькі сервераў,
якая азначае, што вы, магчыма, спатрэбіцца больш грошай.
І так на працягу многіх гадоў гэта проста сапраўды не было лепшай практыкі.
Людзі будуць выкарыстоўваць SSL шыфраванне толькі тады, калі трэба.
Але аказалася, і як гэты хлопец з Firesheep зрабіў супер ясна,
калі вы, хлопцы, якія ў цяперашні час на Facebook прама цяпер -
З цікаўнасці, давайце паглядзім, калі вы будзеце прызнацца.
Калі вы знаходзіцеся на Facebook цяпер у некаторых ўкладкі, нават калі яна не на пярэднім плане,
Ваш URL HTTP ці HTTPS?
[Некалькі студэнтаў] S. S? [Смех]
Добра. Любое HTTP? Усяго ў 1? Добра.
Так што ўсё з нас могуць узламаць Facebook ўвагу, што хлопцу прама цяпер.
Па большай частцы гэта стала уключаны па змаўчанні, па меншай меры ў некаторых вэб-сайтах.
І Карацей кажучы, калі ваш вэб-трафік не шыфруецца,
не толькі HTML ісці наперад і назад праз WiFis незашыфраваным выглядзе,
так што такія рэчы, як печыва ісці наперад і назад па ўсім паветра
без якога-небудзь шыфравання.
Так што калі ў вас ёсць трохі здаровага сэнсу праграмавання або Пагугліўшы трошкі навыкі
знайсці свабоднае праграмнае забеспячэнне, што робіць гэта ўсё, што вам трэба зрабіць, гэта сядзець у Starbucks
або сядзець у аэрапорце, дзе там наогул незашыфраваным WiFi
і проста глядзець на ключавыя словы, як Set-Cookie: PHPSESSID або
таму што, калі ў вас ёсць тэхнічныя здаровы сэнс, каб проста назіраць за WiFi
для ўсіх бітаў, якія цякуць па ўсім паветра для гэтай мадэлі,
Вы можаце сказаць, што PHPSESSID хлопец, здараецца, bo8dal і гэтак далей.
І зноў жа, калі вы дастаткова тэхнічна падкаваным і мець правільны інструмент,
Вы можаце проста пераналадзіць свой браўзэр, каб пачаць ўяўленне, што ручной штамп
на Facebook.com і Facebook проста будзе лічыць, што вы, што хлопец
таму што ўсе яны ведаюць не тое, хто вы, але што ў вас ёсць гэта унікальны ідэнтыфікатар.
Так што, калі вы крадзеце, што унікальны ідэнтыфікатар, і прадставіць яго на вэб-сервер, як свае ўласныя,
яны проста збіраюся паказаць вам, стужка навінаў, што чалавек
ці што гэта асоба паведамленні або тыкае.
>> І я б Google Цяпер, як актываваць HTTPS для Facebook, магчыма.
Але гэта сапраўды так проста.
І таму Facebook і Google, і, як атрымаў сапраўды добрае ў гэтым,
але сачыць, тым больш для любых наведвальных вэб-сайтаў, якія не выкарыстоўваюць HTTP
і ёсць нейкі сакрэтнай інфармацыі на іх,
будзь то фінансавыя ці асабістыя ці таму падобнае.
Калі яны не выкарыстоўваюць гэта, цалкам магчыма, можа печыва, як гэта вельмі лёгка выкрасці
, А затым падробленыя, і гэта менавіта тое, што Firesheep зрабіў.
Вам не трэба быць праграмістам.
Усё, што вам трэба было мець падлучэнне да інтэрнэту, запампаваць бясплатны інструмент,
і што ён будзе рабіць гэта вы ўвайсці ў сістэму і тады было б паказаць вам Facebook імёны
усіх у Сандэрса, у дадзенай дэманстрацыі, вакол вас
і ўсё, што вам трэба было толькі націснуць на сваё імя і праграмнае забеспячэнне аўтаматызаваных працэсаў
з нюхае, што печыва, прадставіўшы яго ў Facebook як свае ўласныя,
і, вуаля, вы зайшлі
Так што гэта яшчэ адзін з тых "не рабіць гэтага" афіцыйна.
Калі ў вас ёсць свая хатняя сетка і вы хочаце важдацца, усе сродкі,
але разумеюць гэта робіць перасекчы лінію на універсітэцкай асяроддзі.
>> Але мэта тут сапраўды падкрэсліць не, як гэта зрабіць
Але як абараніцца ад такога роду рэчаў.
І тут трывіяльнае рашэнне, нават калі яно само з'яўляецца недасканалай,
гэта рэальна зменшыць выкарыстанне любых сайтаў, якія не выкарыстоўваюць HTTPS пастаянна.
Такім чынам, сайты, такія як Facebook і Google усё часцей даводзіцца сцяжкоў
дзе вы можаце выбраць, каб такога роду рэчы,
і банкаў было гэта на працягу многіх гадоў па аналагічным прычынах.
Так што проста трохі фактар ​​страху, калі мы можам. Але гэта ўсё ў двух словах.
Гэта значыць, як сервер памятае, хто вы ёсць.
І як толькі яны могуць успомніць, хто вы ёсць, яны могуць памятаць нічога пра вас
што праграміст захоўваюцца ўнутры гэтага спецыяльнага суперглобальная называецца $ _SESSION.
А для PSET 7 мы выкарыстоўваем гэта трывіяльна проста каб успомніць, INT,
а менавіта унікальны ідэнтыфікатар карыстальніка, які ўвайшоў у сістэму,
так што мы ведаем, што яны былі там раней.
Любыя пытанні, то на сесіях або печыва ці як?
Firesheep не працуе, а больш,
і вы павінны перавесці кампутар у спецыяльным мяшаным рэжыме
так што вы на самай справе праслухоўваць трафік, акрамя сябе.
Так што, калі вы ў цяперашні час загрузка Firesheep, разумею, што гэта не так проста,
як гэта было раней, каб прадэманстраваць.
Добра. І не рабіце гэтага ў Сандэрса. У яго дома.
Базы дадзеных.
Адна з рэчаў, якія мы зрабілі ў PSET 7 вельмі свядома
былі мы даем вам прыклад табліцы базы дадзеных для карыстальнікаў, якія мае некаторыя ідэнтыфікатары карыстальнікаў,
некаторыя імёны карыстальнікаў, і некаторыя зашыфраваныя паролі ў ім.
І, як вы ўбачыце, калі вы гэтага яшчэ не зрабілі, вы будзеце мець, каб змяніць табліцу няшмат.
Вы будзеце мець, каб дадаць кэш для кожнага з карыстальнікаў у гэтай табліцы,
і вы будзеце мець, каб дадаць яшчэ адну гісторыю стол, партфелі стол,
ці, магчыма, называць гэта нешта іншае.
Але з пункту гледжання думаць аб тым, як гэта зрабіць, давайце адкрыем гэты інструмент
, Які мы выкарыстоўвалі ў пятніцу, але калі незнаёмы, прыбор пастаўляецца з прыладай
называецца PHPMyAdmin які выпадкова напісана на PHP,
але яго мэта ў жыцці, пасля таго як я увайсці сюды, як jharvard з малінавым,
, Каб даць мне зручны спосаб прагляду і змяненні маёй базе дадзеных.
>> Базы дадзеных, што я бягу на прыбор называецца MySQL.
Гэта вельмі папулярная, і гэта бясплатна СКБД з адчыненым кодам, што гэта цудоўна просты ў выкарыстанні,
асабліва пярэднія канцы, як гэта.
Што гэты інструмент дазваляе мне зрабіць, напрыклад, з'яўляецца мяшку вакол сталоў.
Дазвольце мне ісці наперад і рабіць гэта.
У пятніцу мы стварылі табліцу з імем студэнтаў, што было супер проста.
Гэта было 3 калонкі - нумар, імя і электронную пошту, - і я ўручную ўстаўляецца пару радкоў
як Дэвід і Майк ў гэтым канкрэтным прыкладзе.
Давайце гэта крыху далей, і давайце выкажам здагадку, што мы хочам памятаць больш
чым проста імя і адрас электроннай аб карыстальніку.
Дазвольце мне Структура націсніце тут на самым версе.
І зноў, PSET правядзе вас праз неабходныя крокі тут,
так што не хвалюйцеся, калі некаторыя гэта трохі хутчэй.
Тады я збіраюся націсніце тут.
Я збіраюся дадаць некаторы колькасць слупкоў пасля электронную пошту
таму што я хачу дадаць нешта накшталт дома.
Я забыўся запісаць доме студэнта.
Дазвольце мне каманду Перайсці, і цяпер у нас ёсць гэтая форма, якая, на жаль, крыху шырокі злева направа,
але я буду называць імя гэтага поля доме,
а потым тыпу ў мяне зараз ёсць выбар.
Такім чынам, давайце коратка пагаварыць аб розных тыпаў у MySQL
таму што ў той час як PHP слаба тыпізаваных і ён накшталт гуляе хутка і свабодна з тыпамі,
ў базе дадзеных асабліва гэта супер важна, каб рэальна выкарыстоўваць набраўшы ў сваю карысць
таму што адна з рэчаў, MySQL і іншых СКБД можа зрабіць для вас
гэта пераканацца, што вы не ставіце фіктыўныя дадзеныя ў базу дадзеных.
Гэта свайго роду бясплатная праверка памылак даступныя для вас.
>> Для дома, мы, відавочна, не хачу, каб гэта INT, які ўяўляе сабой 32-бітнае значэнне ў MySQL.
Мы зрабілі коратка распавесці ў пятніцу аб VARCHAR, якая выступае за зменнай даўжыні знака.
Што гэта? Гэта дазваляе вам паказаць, што вы хочаце, каб гэта радок з какой-то.
Вы сапраўды не ведаеце загадзя, як доўга яна ёсць,
таму мы калі заўгодна казаць дом імя можа быць да 255 знакаў,
але вы можаце ісці з 32, 64 - любы лік на самай справе.
Але перавага выкарыстання VARCHAR над полем называецца знак які?
Проста інтуітыўна, калі я пракруціць ўніз тут, звернеце ўвагу, ёсць знак і ёсць VARCHAR.
Varchar зменнай даўжыні знакаў, сімвалаў з'яўляецца фіксаванай даўжынёй знакаў.
Такім чынам, грунтуючыся толькі на гэтым азначэнні, у чым перавага або недахоп кожнага з гэтых?
Іншымі словамі, хто клапоціцца аб адрозненні, ці чаму вы павінны клапаціцца?
>> Так. [Студэнт] Varchar валодае большай гнуткасцю, але займае больш памяці.
Добра. Varchar займае больш - Давайце паглядзім. Я не ўпэўнены, калі б я пачуў гэта права.
Ці можаце вы сказаць, што яшчэ раз?
[Студэнт] Я сказаў, VARCHAR, верагодна, мае вялікую гнуткасць, але гэта займае больш памяці.
Цікава. Добра. Varchar, верагодна, дае вам больш гнуткасці, але займае больш памяці.
Апошняе не абавязкова дакладна.
Гэта залежыць ад кантэксту, але давайце вернемся да гэтага.
>> [Неразборліва адказ студэнта] Менавіта так.
Гэта на самай справе так, што знак, як правіла, выкарыстоўваюць больш памяці
таму што знак, як і ў С, як струна, гэта масіў знакаў.
Так што, калі вы кажаце сімвал поле даўжынёй 255,
База дадзеных літаральна збіраюся даць вам 255 знакаў.
І калі ў доме заканчвае тым, што MATHER і 6 знакаў за ўсё,
вы марнуеце больш за 200 знакаў.
>> Так VARCHAR эфектыўна выкарыстоўвае толькі столькі знакаў, колькі неабходна
да максімальнай сумы.
Але цана, якую вы плаціце на самай справе прадукцыйнасць, патэнцыйна.
Калі вы загадзя ведаеце, што ўсе вашыя радкі будзе 8 сімвалаў -
Напрыклад, выкажам здагадку, што вам патрабуецца паролі даўжынёй 8 -
Станоўчым аспектам выкарыстання знакаў поля на выпадак, хоць і не часта,
гэта пазначыць фіксаваную даўжыню нешта накшталт пароля
таму што зараз база дадзеных можа быць нават разумней.
Калі ён ведае, што кожны знак поля, кожная радок у слупку той жа даўжыні,
Вы вяртаецеся функцыю выпадковага доступу.
Вы можаце скакаць паміж рознымі тэкставыя поля ў табліцы базы дадзеных
таму што думаеш базы дадзеных у выглядзе радкоў і слупкоў.
Такім чынам, калі кожны з струн аднолькавай даўжыні,
Вы ведаеце, што першы знаходзіцца ў байце 0, наступная знаходзіцца ў байце 8
а потым 16, а затым 24 і гэтак далей.
Так што, калі ўсе радкі аднолькавай даўжыні, вы можаце скакаць значна больш эфектыўна.
Так што можа быць карысць у плане прадукцыйнасці,
але звычайна ў вас няма такой раскошы, загадзя ведаючы,
так VARCHAR з'яўляецца шлях.
Вось яшчэ адна падрабязнасць, што нават пабег у Facebook у рэшце рэшт.
Ints вялікія, і мы накшталт як іх выкарыстоўваць па змаўчанні ў любы час мы хочам нумар,
але гэта толькі 32 біта.
>> І хоць Facebook не зусім ёсць 4 мільярда карыстачоў зараз,
ёсць вызначана некаторыя людзі там з некалькімі ўліковымі запісамі
ці рахункаў, якія былі адкрыты і закрыты,
Facebook і так сама я лічу, некалькі гадоў таму быў пераход ад Int
ў, як трапна назваў, BIGINT, які знаходзіцца ўсяго ў 64 біт замест гэтага.
Так што гэта таксама дызайнерскае рашэнне.
Вы б дзіўна пашанцавала, калі ваш канчатковы праект аказваецца запуску,
мае 4 млрд і 1 карыстальнікаў, даваць ці прымаць,
У гэтым выпадку выкарыстанне цэлых лікаў можа быць трохі блізарукі.
Але на самай справе, карыстальнікі стол, верагодна, добра з цэлымі.
Але за тое, як PSET 7, як ваша гісторыя сталом,
Вы маглі б мець тысячы, мільёны карыстальнікаў, калі вы развівацца ў etrade.com.
Такім чынам, у той час як вы не маглі б больш за 4 млрд карыстальнікаў,
тых карыстальнікаў, у вас ёсць, магчыма, больш за 4 мільярдаў аперацый з цягам часу -
купляе і прадае і рэчы ў іх гісторыі.
Так што калі вы прадбачыць - зноў жа, гэта добрыя праблемы мець, калі ў вас ёсць столькі дадзеных -
калі вы прадбачыць дадзеных перавышае памер INT,
збіраецца нешта накшталт BIGINT гэты кірунак не дастаткова часта, прынятыя дызайнераў
таму што людзі постаць, якая не будзе праблемай,
але гэта лёгка выбраць нешта большае, чым гэта.
Дзесятковая мы выкарыстоўваем у PSET 7, якая вызначае фіксаваную дакладнасць
так вы зможаце пазбегнуць пытанняў, звязаных з паплаўком і парным разрадзе, і рэчавыя ліку і таму падобнае.
>> А тут яшчэ некаторыя іншыя поля тут. Мы махаем рукамі ў іх у некаторай ступені.
Але даты, часу ва ўсіх прадпісаных ў фармаце MySQL,
і перавага захоўвання даты як даты, а не тыпу VARCHAR
азначае, што база дадзеных можа фактычна перафарматаваць іх у розных фарматах,
Ці фармат амерыканскага або еўрапейскага фармату і да т.п. - аднак вы хочаце яго -
значна больш эфектыўна, чым калі б гэта былі толькі некаторыя агульныя VARCHAR.
А тут яшчэ некаторыя іншыя BINARY, VARBINARY кроплі.
Гэтыя вялікія двайковыя аб'екты, і вы таксама можаце захоўваць дадзеныя
а таксама геаметрычныя дадзеныя ў базу дадзеных.
Але для нас, мы звычайна клапоцімся пра цэлых і тыпу VARCHAR і таму падобнае.
Давайце скончым гэты прыклад з домам.
Дома я збіраюся калі заўгодна казаць будзе 255 знакаў.
Тады значэнне па змаўчанні мы маглі б гэта зрабіць.
Мы маглі б па змаўчанні расставіць усё па Mather дома, напрыклад.
Вось як мы маглі б паказаць, што база дадзеных
павінны забяспечыць, каб хтосьці заўсёды мае значэнне. Але я пакіну гэта будзе.
На самай справе, для людзей, якія жывуць за межамі кампуса, а не ў доме,
Можа быць, я на самой справе хачу паказаць, што значэнне па змаўчанні для дома NULL,
, А потым мне трэба праверыць гэтую скрынку і сказаць базе дадзеных гэта добра, калі хаты карыстальніка з'яўляецца NULL.
>> Зноў жа, гэта яшчэ адзін ахоўны механізм, вы можаце паставіць на месца
так што вам нават не прыйдзецца пакласці яго ў PHP кода абавязкова.
Гэтая база дадзеных будзе гарантаваць, што рэчы з'яўляюцца або не з'яўляюцца NULL.
І тады, нарэшце, атрыбутаў.
Ні адзін з іх сапраўды актуальная.
Binary, без знака - ні адзін з тых, якія адносяцца да VARCHAR.
Індэкс.
Хто-небудзь ведае ці памятае ці ёсць здагадка аб тым, што індэкс
нешта накшталт дома?
Гэта таксама на самой справе з'яўляецца важным і адносна лёгка дызайнерскае рашэнне.
Для тых, хто яшчэ не бачыў, у пятніцу мы сцісла распавёў аб першасных ключоў.
У базе дадзеных табліцы, першасны ключ полі ці слупку
, Які адназначна ідэнтыфікуе радка ў табліцы.
Такім чынам, у бягучай табліцы ў нас ёсць ідэнтыфікатары, у нас ёсць імёны і адрасы.
Які з іх з'яўляецца лепшым кандыдатам, каб быць першасным ключом,
ролю якога складаецца ва ўнікальнай ідэнтыфікацыі радкоў?
Напэўна ID.
Магчыма, мы маглі б выкарыстоўваць тое, што хоць?
Можа быць, вы маглі б выкарыстоўваць электронную пошту, таму што ў тэорыі гэта унікальны
калі людзі дзеляцца уліковых запісаў электроннай пошты.
Але рэальнасць такая, што калі вы выкарыстоўваеце лічбавы ідэнтыфікатар тыпу 1234,
вось толькі 32 біта, у той час як адрас электроннай пошты, можа быць гэта колькасць байт, ці гэта шмат байт.
Такім чынам, з пункту гледжання эфектыўнасці для унікальных ідэнтыфікатараў,
ён мае тэндэнцыю быць добрая практыка проста выкарыстоўваць Int
нават калі ў вас ёсць радок кандыдата, што вы маглі магчыма выкарыстаць.
>> За тое, як дом, гэта не павінна быць першасным ключом
таму што тады толькі 1 чалавек мог жыць у Мазер і 1 чалавек у Currier і таму падобнае.
Акрамя таго, гэта не павінна быць унікальным.
Розніца паміж першасным і ўнікальная тым, што ў выпадку нашай бягучай табліцы,
ID будзе першасным, але ліст не з'яўляецца першасным па той прычыне, мы толькі што згадалі -
прадукцыйнасць - але ён усё роўна павінны быць унікальнымі.
Такім чынам, вы ўсё яшчэ можаце забяспечыць унікальнасць без прэтэнзій
што гэта супер важна першаснае поле.
Але гэтая з'яўляецца вельмі карысным: Індэкс.
Калі вы загадзя ведаеце, для канчатковага праекта, для PSET 7, або ў цэлым,
што гэта поле доме будзе тое, што вы пошук па шмат
дапамогай выбару ключавога слова ці яшчэ нешта,
, То вы можаце сказаць прэвентыўна базы дадзеных для працы сваёй магіі
і пераканайцеся, што яно стварае ў памяці любыя фантазіі структур дадзеных, неабходных
для паскарэння пошуку на аснове доме.
Можа быць, ён будзе выкарыстоўваць хэш-табліцы, можа быць, ён будзе выкарыстоўваць звязаны спіс.
На самай справе, ён імкнецца выкарыстоўваць дрэва, часта называюць структурай B-дрэва -
Ня бінарнае дрэва, але B-дрэва - які з'яўляецца вельмі шырокім дрэвам
што вы маглі бачыць у клас, як CS124, клас структур дадзеных.
Але ў агульным, вам не прыйдзецца турбавацца аб тым, што пры выкарыстанні інтэлектуальнае праграмнае забеспячэнне базы дадзеных.
Вы можаце проста сказаць, што гэта, "Індэкс гэтай галіне, таму я магу знайсці на яго больш эфектыўна".
>> Калі вы пакінеце гэтую выключаны і вы паспрабуйце пашукаць у любы базе даных, якая жыве ў Mather,
ён ператворыцца ў лінейны пошук.
І калі ў вас ёсць 6000 старшакурснікі ўсё жывое ў пэўным доме,
Вы збіраецеся выканаць пошук па ўсёй табліцы, каб знайсці Matherites,
а калі вы кажаце Index, спадзяемся, гэта будзе нешта блізкае да лагарыфмічныя пошук
каб знайсці тыя віды студэнтаў.
Гэта проста бясплатная функцыя ўключаецца,
нават калі яна прыйдзе па цане некаторы колькасць прасторы.
Нарэшце, аўтаматычнае прырашчэнне гэтай галіне А.І.,
які проста азначае, што калі гэта Int і вы не хочаце, каб клапаціцца, каб павялічыць гэта самі
кожны раз, калі ёсць новы карыстальнік, праверыць, што
і кожны карыстальнік, які атрымлівае адсутнічае аўтаматычна атрымаць новы ID.
Давайце націсніце кнопку Захаваць, а цяпер давайце чапляцца да гэтага дызайну.
Калі я іду на Browse, звярніце ўвагу, што абодва Майк і мой дом NULL.
Я магу выкарыстоўваць PHPMyAdmin рэдагаваць ўручную.
Я магу пайсці сюды і ўвядзіце Mather, а затым націсніце Enter,
і цяпер заўважаю табліцы розныя.
Але заўважце, што я мог бы зрабіць нешта яшчэ.
ID Дэвіда 1, так PHPMyAdmin зноў проста сродак адміністравання;
гэта не тое, што вашыя карыстальнікі ніколі не ўбачаць.
Так што, калі я замест гэтага націсніце на ўкладку SQL наверсе -
і зноў, PSET 7 пазнаёмім вас з больш з гэтых запытаў -
Я магу ўручную запусціць SQL структураванага мовы запытаў каманд
UPDATE карыстальнікаў SET доме = 'Pfoho' WHERE ID = 1.
Гэтыя SQL запытаў, прыемна досыць, даволі чытаецца злева направа.
Абнаўленне табліцы карыстальнікаў, усталюеце ў поле называюць дом Pfoho
дзе ідэнтыфікатар карыстальніка роўны 1.
Ці я мог бы яшчэ заняцца ў электронную = 'malan@harvard.edu.
Пакуль што адназначна ідэнтыфікуе мяне, што будзе працаваць таксама.
Але ID, як правіла, больш высокую прадукцыйнасць, так што давайце рабіць гэта.
Давайце націсніце кнопку Перайсці. Добра, lecture.users не існуе. Што мая памылка?
Што табліцы на самой справе завецца тут?
Гэта называецца студэнтаў толькі таму, што гэта тое, што мы зрабілі тут у верхнім левым куце.
Гэта называецца студэнтаў, а не карыстальнікаў. Такім чынам, націсніце кнопку Перайсці цяпер.
1 радок пацярпелых. Запыт затрачана 0.01 сек.
Калі я націсніце кнопку Агляд, зараз, зараз малая жыве ў Pfoho.
Так вось іншы смак SQL, але PSET, вы пройдзеце праз трохі больш аб гэтым.
>> Там вельмі неразумнае рашэнне я ўжо зрабіў тут.
Я б сказаў, што гэта праектаванне баз даных з'яўляецца неэфектыўнай
таму што чым больш людзей, якіх я дадаць у табліцу студэнтаў,
Чым больш нас я пачынаю дадаўшы, тым больш я пачынаю ТФ дадаўшы,
Мы збіраемся пачаць бачыць тое, што звальненняў у гэтай табліцы?
>> Так. [Студэнт] бачачы, што яна знаходзіцца ў студэнты, мы выкарыстоўваем той жа [неразборліва]
Тое ж самае - Так, сапраўды.
Так што калі 400 чалавек жывуць у Mather, плюс-мінус,
ў рэшце рэшт гэтая табліца будзе мець 400 радкоў, якія кажуць "Мазер", "Мазер,"
"Мазер", "Мазер", "Mather».
Мы губляем ўсе гэтыя байты, і ёсць пара вынас там.
1, ёсць вар'ятка выпадку кут, дзе, калі хто-то плаціць вялікія грошы
і пераназывае Mather, зараз мы павінны змяніць усю нашу табліцу базы дадзеных.
Гэта не будзе адбывацца часта, хоць Pfoho калісьці называлі Паўночнай дом 15 гадоў таму,
так бывае. Але гэта яшчэ не ўсё, што пераканаўча.
Больш за пераканаўчымі, чым кута выпадку, як у якія маюць патрэбу ў абнаўленні дадзеных у аб'ёмных
для базы дадзеных, чаму вы захоўваеце MATHER зноў і зноў і зноў і зноў?
Гэта шмат сімвалаў, 6 знакаў.
Хіба мы не можам зрабіць яшчэ лепш, чым, асабліва для Pforzheimer?
Вядома, мы можам зрабіць лепш, чым шмат знакаў.
Чаму б не звязаць унікальны ідэнтыфікатар з кожным домам
і крама, што для кожнага карыстальніка? Так давайце паспрабуем гэта.
Замест таго, каб проста выкарыстоўваць студэнты стала, адпусціў мяне да маёй лекцыі базу дадзеных тут, у верхнім левым куце.
Звярніце ўвагу, тут ён кажа Стварыць табліцу.
Дазвольце мне стварыць новую табліцу з імем дамоў.
Колькасць слупкоў будзе 2. Enter.
Цяпер у мяне ёсць 2 поля.
Я буду называць гэтае імя, і гэта будзе VARCHAR даўжынёй 255,
>> але гэта даволі адвольна. Дазвольце мне сказаць гэта тут па дамове.
Так што стаўце ID тут. Давайце кожны дом унікальным ідэнтыфікатарам.
Давайце кожны дом імя.
Удакладнім, што ідэнтыфікатар будзе без знака толькі па пагадненні выкарыстоўваць толькі станоўчыя ліку.
Давайце ісці наперад і даць гэтаму автоинкрементного поле на дадзены момант.
І ці трэба нам што-небудзь яшчэ?
Давайце ісці наперад і націсніце кнопку Захаваць.
Цяпер у мяне ёсць другі табліцы.
Звярніце ўвагу, як у бок гэта крыху загадкавае SQL каманды
што вы павінны былі б ўвесці ўручную, калі не выкарыстоўваецца адміністрацыйны інструмент, як PHPMyAdmin.
Такім чынам, яшчэ адна прычына, мы яе выкарыстоўваем.
Гэта дзіўна карысныя роду педагагічна, таму што вы можаце пстрыкнуць па
і высветліць, як працуюць рэчы простым капіяваннем і устаўкай, што PhpMyAdmin зрабіў.
Але каманду Стварыць табліцу што толькі што было выканана, і вось мой стол.
Дазвольце мне зараз ісці наперад і выкарыстоўваць сырыя SQL, а не спрашчаць, націснуўшы на ўкладку Устаўка.
Дазвольце мне зрабіць INSERT INTO дамоў,
і я збіраюся сказаць, што назва дома будзе мець значэнне 'Mather.
Вось і ўсё. Гэты сінтаксіс з'яўляецца трохі больш загадкавымі.
Гэта імя поля мы хочам ўставіць.
Гэта тыя каштоўнасці, якія трэба ўставіць у гэтых абласцях. Дазвольце мне кнопку Go.
1 радок ўстаўляецца ўзяў 0,02 секунды. Дазвольце мне цяпер націсніце кнопку Агляд.
>> Звярніце ўвагу, калі я націсніце кнопку Агляд, ёсць Mather, ідэнтыфікатар якога па аўтаматызацыі № 1.
Дазвольце мне зрабіць яшчэ адзін. Дазвольце мне перайсці ў закладку SQL.
INSERT INTO дамоў. Назва дома будзе мець значэнне Pfoho і гэтак далей.
Go. І я магу працягваць рабіць гэта зноў і зноў, і зноў.
Ці, калі вам сумна выкарыстаннем PHPMyAdmin, вы можаце проста выкарыстоўваць ўкладку Устаўка
і не прыйдзецца ўводзіць сырыя SQL.
Вы можаце проста стукнуць яго хутчэй, набраўшы, напрыклад, кур'ер, Enter
і цяпер, калі мы націсніце кнопку Агляд, ёсць курьер з ID 3.
Так гэта тое, што мы маем на ўвазе пад автоинкрементного.
Але цяпер мы павінны выправіць нешта ў студэнты.
У студэнтамі, што павінна тып дадзеных поля доме цяпер быць?
Гэта павінна быць цэлы лік, ці не так?
Такім чынам, мэта тут, каб вынесці за дужкі, інакш вядомы як нармалізацыя, табліцы
так што мы не захоўваем інфармацыю залішне ні ў адным з маіх табліц.
І зноў шлях, якім мы былі тут збіраецца сказаць Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, што вельмі залішніх
з пункту гледжання марнатраўнасці знакаў.
Такім чынам, дазвольце мне ісці наперад і змяніць гэта, націснуўшы структура,
і дазвольце мне пайсці далей і праверыць каля дома поля, націсніце кнопку Змяніць
і цяпер я збіраюся змяніць гэта, каб быць Int.
255 ўжо не актуальна.
Дазвольце мне пайсці далей і сказаць, што гэта добра, калі яна па-ранейшаму NULL. Захаваць.
Цяпер табліца студэнтаў быў зменены паспяхова,
і звярніце ўвагу, зноў дома Int.
Як у баку, ігнараваць лік у дужках, калі справа даходзіць да цэлых лікаў.
>> Гэта для старых прычынах.
Яшчэ ў той дзень, калі ў вас не было графічнага інтэрфейсу, вы замест гэтага быў асяроддзе каманднага радка,
10 і 11 адпаведна паказана, колькі знакаў вы павінны паказаць
у акне тэрмінала на самай справе адлюстравання палёў.
Гэта не мае нічога агульнага з бітавай даўжыні фактычнага поля, таму мы будзем проста ігнараваць, што ў цяперашні час.
Цяпер я павінен ісці ў гэтую табліцу.
І калі Дэвід жыве ў Mather, дом не павінен быць 0,
, Якая з'яўляецца значэннем па змаўчанні Int бліжэй да NULL.
Ён павінен жыць у доме 1.
Давайце калі заўгодна казаць, што Майк жыве ў Pfoho, таму дома нумар 2.
Цяпер мая табліца выглядае крыху больш загадкавымі.
Але разгледзім эфектыўнасць.
Я зараз выкарыстае толькі 32 біта для ідэнтыфікацыі дом,
што азначае, што толькі 1 кананічнага вызначэння майго дома Mather і Pfoho
і гэта ў табліцы дамоў.
Так што, калі я хачу цяпер вярнуцца гэтых табліц, падумайце вось пра што.
Вось у мяне ёсць мае вучні стол, а на правай баку ёсць гэтыя лічбы, 1 і 2.
1, Mather, 2, Pfoho.
У нас ёсць тыя ж чысла ў гэтай іншай табліцы, якая называецца дамоў,
1 і 2 і 3 для тых, 3 дома.
Тое, што мы зараз хочам зрабіць, гэта мець магчымасць у кодзе PHP і SQL,
да выгляду уз'яднацца з гэтымі табліцамі, дзе, калі яны з'яўляюцца студэнтамі і гэтыя дамы,
Мы хочам, каб неяк аб'яднаць іх такім чынам, што 1 лініі з 1,
2 лініі з 2, так што мы можам высветліць, дзе Давід
і дзе Майк і дзе ўсё яшчэ жыве.
Для гэтага мы можам выканаць SQL запыт накшталт наступнага.
SELECT * FROM студэнтаў далучыцца дамоў ON -
А цяпер, якія поля мы хочам ўступіць на?
Так students.house = houses.id.
>> Трохі загадкава, але гэтая частка літаральна азначае стварыць новую часовую табліцу
вось і вынік далучэння студэнтаў і дамоў.
А як вы хочаце сумясціць кончыкамі пальцаў тут?
Набор студэнтаў доме поля роўная дамоў поля ID.
І калі я зараз націсніце кнопку Перайсці, я вярнуся менавіта тое, што я спадзяваўся.
Давід у Mather, Майк знаходзіцца ў Pfoho, і я таксама ўбачыць унікальныя ідэнтыфікатары.
Але справа ў тым, зараз у мяне ёсць поўная табліца.
І так вынас тут PSET 7 або сапраўды для канчатковага праекта:
Калі вы выявіце, што вы захоўвання любой інфармацыі залішне,
будзь то дом, можа быць, гэта горад, штат і паштовы
ZIP, дзе, як правіла, але не заўсёды можа быць выкарыстаны ў якасці унікальнага ідэнтыфікатара,
давядзецца ехаць праз практыкаванні думках, а затым нешта накшталт PHPMyAdmin
факторынгу, што агульныя дадзеныя, так як асабліва ваш сайт становіцца больш добра выкарыстоўваць
і больш папулярнымі, гэта, як вы пераканаецеся, што ўсё супер хуткі,
шляхам прадастаўлення базы дадзеных, як многія намёкі на унікальнасць наколькі гэта магчыма.
Гэта было шмат.
Ёсць пытанні? Добра. Давайце 5-хвілінны перапынак там і перагрупавацца.
Добра.
Ніжэй прыведзены прыклад, які быў выкарыстаны некалькі гадоў таму, калі я ўзяў CS161,
якая з'яўляецца аперацыйных сістэм класа ў каледжы
якая вядомая тым, што дзіўна, але вар'ят аб'ём працы,
і ён засяроджаны на самай справе на некаторых з нізкага ўзроўню праблем, якія ўзнікаюць у аперацыйныя сістэмы
і нават у свеце баз дадзеных.
>> Гісторыя, якую распавёў мой прафесар, Марго Зэльцэр, што год быў наступным.
Выкажам здагадку, што ў вас ёсць маленькі халадзільнік інтэрната для вас і вашых суседзяў
і абодва вы сапраўды любіце малако.
Такім чынам, вы прыходзіце дадому з класа ў адзін цудоўны дзень, ваш сусед па пакоі яшчэ не было,
Вы адкрываеце халадзільнік, і вы разумееце: "О, чорт, мы з малака".
Такім чынам, вы зачыняеце халадзільнік, вы ідзяце па вуліцы, каб CVS
і атрымаць у больш доўгіх чэргах, каб купіць малака ў CVS.
Між тым, ваш сусед прыходзіць дадому з свайго класа,
уваходзіць у пакой, адкрывае халадзільнік сапраўды жадаючых малака,
адкрывае халадзільнік і "Чорт, няма малака".
Такім чынам, ён або яна закрывае халадзільнік, выходзіць за дзверы, і ідзе ў ABP
ці, можа, акрамя CVS, дзе вы не збіраецеся сутыкаюцца адзін з адным
пайсці атрымаць крыху малака.
Вядома, праз некалькі хвілін, вы абодва вернецеся дадому
і зараз у вас ёсць у два разы больш малака, як вы на самай справе хацелі.
І, малако, цяпер ён збіраецца ісці дрэнна, таму што вы любіце малако
але вы сапраўды не падабаецца малако, так што зараз у вас занадта шмат малака, таму гэта будзе псавацца.
Гэта жахліва, жахліва сітуацыі.
Што магло б вырашыць гэтую цяжкім становішчы, калі вы былі першым домам суседа па пакоі? Так.
[Студэнт] Вы павінны былі пакінуць запіску. [Смех]
Добра. Вы павінны былі пакінуць запіску.
Вы павінны былі пакласці Пост-гэта да ведама або, як кажуць, "Панесеныя для малака",
і тады ваш сусед па пакоі канцэптуальна была б заблакаваная на самай справе рабіць гэта.
Ці вы маглі б пайсці на 1 крок далей.
Вы маглі літаральна замкнуць халадзільнік з нейкай замак,
і зараз ваш сусед па пакоі ў літаральным сэнсе будзе заблакаваная з халадзільніка.
Калі абагульніць вярнуцца да праграмавання,
Вы можаце падумаць, з халадзільніка як нейкая пераменная або структура,
свайго роду кантэйнер для інфармацыі.
Праблема прынцыпова тут тое, што вы абодва былі дазволеныя для праверкі
або чытаць стан гэтай структуры дадзеных,
але вы разглядалі яго ў розныя часы і яшчэ вы абодва прынялі рашэнне
у залежнасці ад стану свету ў гэтыя розныя моманты часу.
Так, калі б вы зачыненыя ў халадзільніку, вы б па меншай меры, пазбегнуць ваш сусед па пакоі
ад таго, былі ў стане праверыць стан свету,
каб ён або яна не мог бы зрабіць тое ж рашэнне.
Так баз дадзеных, як высвятляецца, ёсць гэтая праблема пастаянна.
>> Давайце паглядзім, калі мы можам пабудаваць сцэнар.
Выкажам здагадку, што вы, здаецца, дрэннага хлопца, і вы ідзяце ў банк Амерыкі
або адной з іншых месцаў на плошчы, якія маюць бок пару банкаматаў з адным,
і нейкім чынам вы зразумелі, як дубляваць банкамат карту - не ўсё так складана.
Гэта ўсяго толькі магнітнай паласой.
І таму тое, што вы хочаце, каб паспрабаваць зрабіць, гэта гуляць у гэтую гульню
якому вы паклалі 1 карта на 1 машыну, яшчэ адну карту на іншую машыну,
і вы, па сутнасці хочаце, каб паспрабаваць зняць грошы адначасова,
таму што ўявіце сабе, што гісторыя ідзе наступным чынам.
Машына злева бярэ вашу карту і PIN-код,
і тады вы кажаце: "Дайце мне 100 даляраў».
Банкамат запраграмаваны спачатку зрабіць выбар на яго базе дадзеных або эквівалент -
усё, што база дадзеных ён выкарыстоўвае - бачыць нічога гэтага карыстальніка ёсць па меншай меры $ 100 у свой рахунак?
Калі так, то выплюнуць $ 100 і $ 100 адняць са свайго балансу.
Але, вядома, калі ёсць некалькі машын тут або некалькі спосабаў праверкі
стан гэтага свету, банкаўская сховішча, каб паглядзець, колькі ў вас грошай,
Выкажам здагадку, што проста выпадкова машыну на левай і правай
як задаць гэтае пытанне прыкладна ў той жа момант часу.
>> І гэта, безумоўна, можа здарыцца. Банкаматы кампутараў у гэтыя дні.
Такім чынам, калі машына злева кажа: "Так, у вас ёсць па меншай меры $ 100",
Тым часам машына на правым кажа: "Так, у вас ёсць па меншай меры $ 100",
Затым абодва дзейнічаць да канца сваіх праграмах і на самай справе выплюнуць $ 100
і кажуць: "Раней у вас была $ 200."
"Дазвольце мне абнавіць зменную цяпер будзе $ 100 пакінутых у кошт".
Але калі абодва з іх праверылі свае рахункі і выявіў, што гэта $ 200
і абодва з іх, то рабіць матэматыку і кажуць 200 - 100,
Машыны патэнцыйна пляваць два 100-доларавых купюр у кожнай машыне,
але яны абнаўляюцца толькі ваша сума балансу складзе $ 100.
Іншымі словамі, вы ўзялі на $ 200, але таму, што яны агледзелі стан свету
адначасова, а затым было прынята рашэнне на аснове гэтага значэння,
яны не маглі б зрабіць матэматыку ў канчатковым выніку правільна.
Такім чынам, у банку сітуацыю занадта вы сапраўды хочаце мець нейкія блакавання
так што, як толькі вы праверылі стан некаторых зменных
што сапраўды важна, як ваш баланс рахунку,
Не дазваляйце нікому прымаць рашэнні, грунтуючыся на гэтым, пакуль вы не зрабілі робяць сваю справу,
дзе ў гэтым выпадку вы банкамат злева.
Блакаванне ўсіх астатніх з.
Вы сапраўды можаце дасягнуць гэтага эфекту ў некалькі розных спосабаў.
>> Самы просты спосаб у MySQL з'яўляецца лінія SQL, што мы далі вам
у спецыфікацыі праблема набору, які выглядае гэтак жа, як гэта.
Устаўце ў табліцу - там гэта называецца - ідэнтыфікатар, сімвал, і акцыі, колькасць акцый,
наступных значэнняў, напрыклад.
Калі вы яшчэ не чыталі спецыфікацыю не менш, гэта прыклад, звязаны, як вы ідзяце аб
куплю 10 акцый гэтай запас пені на пасаду прэзідэнта Skroob,
якіх ідэнтыфікатар карыстальніка, здараецца, лік 7?
Гэта кажа INSERT INTO табліца наступны ідэнтыфікатар, сімвал, і колькасцю акцый
7, "DVN.V, і 10.
Але - але, але, але - другая лінія з'яўляецца важным.
ON DUPLICATE KEY UPDATE = акцыі акцыі + VALUES (акцый).
Такім чынам, зусім загадкавым перспектыўных на першы погляд.
Але справа ў тым, што гэты запыт SQL, нават калі яна пераносіцца на 2 лініі,
складае 1 доўгі запыт, гэта азначае, што гэта атамная
У тым сэнсе, што гэты запыт будзе альбо выкананы ўсе разам або няма наогул.
І па вызначэнні MySQL, то, як яны рэалізуюцца гэтага запыту.
Гэта, па вызначэнні, у кіраўніцтве гарантавана выконваць усе адразу ці не на ўсіх.
Матывацыяй для гэтага складаецца ў наступным.
Калі ў гэтым выпадку вы спрабуеце купіць 10 акцый,
гэта накшталт тая ж гісторыя, малака, гэта накшталт тая ж гісторыя, банкамат.
>> Калі вы зрабілі памылку, не выкарыстоўваючы наступны сінтаксіс
але замест выбару з базы дадзеных, каб убачыць, колькі акцый гэтай запас пені
Прэзідэнт жа Skroob ёсць, і думаю, што ён мае 10 акцый,
, А затым некаторыя долю секунды пазней вы выканаеце UPDATE заяву,
што з'яўляецца яшчэ адным заявай у SQL, які кажа пайсці далей і дадаць яшчэ 10 акцый
ў яго цяперашняй 10, так што ў ідэале агульная 20,
Праблема ў тым, што ў базе дадзеных сучасных сістэм і таму, што ў сучасных кампутарах
ў вас ёсць некалькі працэсараў, некалькіх ядраў -
Іншымі словамі, кампутар можа ў літаральным сэнсе рабіць некалькі рэчаў адначасова -
няма ніякай гарантыі, што ваш SELECT, UPDATE і ваша ў гэтым выпадку
будуць адбывацца спіной да спіны.
Так дрэнны сцэнар быў бы вы ВЫБАР
каб даведацца, колькі акцый гэтага запасу пені ж Skroob ёсць,
а потым проста выпадкова іншую базу дадзеных запыт будзе выкананы -
можа быць, яго Skroob ў іншым акне браўзэра спрабуе купіць 10 акцый
ў іншым акне ў цэлым, гэтак жа, як ATM -
і выкажам здагадку, што іншы запыт трапляе паміж SELECT, і UPDATE.
Гэта можа быць так, што Skroob зараз губляе некаторы колькасць акцый
таму што іншы працэс праверкі стану яго свет,
ці ён атрымлівае больш акцый, чым павінен быў бы.
Мы не будзем удавацца ў асабліва тое, што гэтыя канкрэтныя сюжэтныя лініі будзе,
але справа ў тым, калі вы павінны праверыць зменныя значэння, а затым прыняць рашэнне,
калі ёсць рызыка, што нехта іншы робіць нешта сярэдняе паміж гэтымі 2 заявы,
як можа здарыцца ў шматпрацэсарных сістэмах, у шмат'ядравых сістэмах,
кампутары з магчымасцю зрабіць некалькі рэчаў адначасова, дрэнныя рэчы могуць здарыцца
рахунках банкаў, як іх спісання няправільна, купляючы удвая больш малака,
ці ў дадзеным выпадку няправільнае колькасць акцый.
Але ёсць і больш просты спосаб думаць аб гэтым.
>> Аказваецца, што SQL таксама падтрымлівае, калі вы наладзіць табліцу правільна,
тое, што называецца здзелак, якія я б сказаў, на самай справе нават прасцей для разумення
чым гэта, але гэта не 1-лайнера, так што гэта на самай справе крыху больш складана.
Існуе літаральна з заявай, у SQL называецца START TRANSACTION.
Гэтак жа, як ёсць SELECT, UPDATE, INSERT, DELETE, і далучыцца і куча іншых,
Ёсць ключавыя словы, як пачаць транзакцыю.
І што вы тады робіце ў кантэксце PSET 7 -
Вы не павінны рабіць гэта для PSET 7; ён відавочна адмаўляў, як не трэба,
але для канчатковых праектаў гэта можа быць карысна -
калі вы тэлефануеце запыт START TRANSACTION, а затым іншы запыт
, А затым яшчэ адзін запыт, а затым яшчэ, яшчэ, і яшчэ,
гэтыя запыты фактычна не будзе выконвацца да выкліку SQL заяву COMMIT,
у гэты момант, будзь то 2 заявы або 20 заяў, усе яны будуць выкананы адразу,
гэта азначае, ніхто не можа выпадкова купіць занадта шмат малака або дэбетавай занадта шмат грошай
або купіць занадта шмат акцый, таму што ўсе вашыя запыты будзе выконваць
спіной да спіны, каб спіна да спіны.
І гэта вельмі важна, асабліва калі вы робіце нешта накшталт гэтага.
Гэта адвольны прыклад, які кажа давайце адновім банкаўскага рахунку
шляхам устанаўлення балансу роўная балансу - $ 1000, дзе нумар рахунку 2.
І тады другі аператар цяпер давайце дэпазіт, $ 1000
ў чужой банкаўскі рахунак, кошт якога нумар 1.
>> Іншымі словамі, гэта ідэальны прыклад таго, дзе вы хочаце, каб пераканацца,
што абодва гэтыя заявы адбыцца ці не на ўсіх
паколькі ў адваротным выпадку кліент збіраецца ўкручаны
і вы збіраецеся забраць свае грошы, а не ўнесці яго ў іншым месцы,
або банк будзе ўкручаны, дзе вы збіраецеся ўнесці грошы
але на самой справе не адняць яго з уліковага запісу карыстача.
Такім чынам, вы хочаце, каб яны абодва выконваць разам.
Такім чынам уваходзіць у свет аперацый.
Так што гэта нешта мець у задняй частцы вашага розуму,
не столькі для мэтаў толькі канчатковы праект,
Але калі вы хочаце прыняць ваш канчатковы праект дзесьці,
калі вы хочаце, каб запусціць некаторыя кампаніі вакол яго,
калі вы хочаце вырашыць праблему некаторыя студэнцкія групы на тэрыторыі кампуса
і на самай справе ёсць жывы, актыўны сайт, гэта свайго роду тонкія памылкі, якія могуць узнікнуць
калі вы не зусім прадумаць, што можа здарыцца, калі 2 чалавекі
спрабуюць атрымаць доступ да вашага сайту ў літаральным і той жа момант часу,
якой іх запыты маглі б атрымаць пераплятаюцца паміж сабой.
>> Гатовыя да некаторых JavaScript, тізер яго?
Гэта наш апошні мовы на працягу семестра. Добра.
На шчасце, JavaScript выглядае вельмі, вельмі, вельмі падобныя на 2-х мовах, C і PHP,
мы зрабілі да гэтага часу.
Там няма JavaScript у PSET 7, але гэта неверагодна карысны інструмент
калі справа даходзіць да вэб-праектаў або канчатковых сапраўды толькі вэб-праграмавання ў цэлым.
Такім чынам, кароткі агляд таго, што называецца DOM.
Вось гэта супер простую вэб-старонку, якая сапраўды проста кажа Добры дзень, свет!
як у назве і ў целе.
Як водступ было выказаць здагадку некаторы час,
сапраўды існуе іерархія вэб-старонак.
Я мог намаляваць гэты ж фрагмент HTML ў выглядзе дрэва,
успамінаючы нашы абмеркавання структур дадзеных у C, наступным чынам.
У мяне ёсць некаторыя адмысловыя каранёвай вузел завецца вузлом дакумента,
і мы ўбачым, аналаг гэтага ў наяўнасць у адну хвіліну.
Першым дзіцем і адзіным сынам, што ў дадзеным выпадку з'яўляецца HTML тэгаў.
Там няма прамога адлюстравання тыпу дакумента.
Гэта асаблівая рэч, таму мы павінны проста ігнараваць яго, калі справа даходзіць да гэтага DOM,
гэтая аб'ектная мадэль дакументаў дрэва.
Звярніце ўвагу, што тэг HTML, які я адвольна намаляваны ў выглядзе прастакутніка,
мае 2 дзяцей: галава і цела.
>> Тыя, якія гэтак жа малюецца як прастакутнікі.
Гэта мае сэнс наглядна, што галава злева ад цела.
Маецца на ўвазе, што галава ідзе першым у дрэва.
Так што там на самой справе заказ на дрэва, калі вы малюеце гэта так,
хоць формы і яшчэ шмат чаго з'яўляюцца адвольнымі.
Між тым кіраўнік мае аднаго дзіцяці, называюць назвы,
і назва на самой справе мае свой уласны дзіця, які з'яўляецца "прывітанне, свет",
якія я наўмысна звярнуў як авал тут, каб зрабіць гэта трохі адрозніваецца ад прамавугольніка.
Гэтыя прастакутнікі элементаў, у той час як прывітанне, свет сапраўды тэкставага вузла.
Так што гэта вузел у дрэве, але гэта іншы тып вузла
так што я звярнуў яго адвольна па-рознаму.
Сапраўды гэтак жа нічога целе ёсць дзіця называецца Hello, World, а таксама,
так іншай вузел нават калі яны выпадкова і той жа тэкст,
але я намаляваў яго, выкарыстоўваючы тую ж форму. Так каго гэта хвалюе?
Ну, што добрае пра HTML з'яўляецца тое, што ў яго ёсць гэтая іерархічная прырода.
І што прыемна аб JavaScript і, у прыватнасці бібліятэк, якія знаходзяцца ў вольным доступе
і папулярнай, як jQuery, вы можаце перамяшчацца па структуры дрэва так дзіўна лёгка.
Любы з матэрыялу, які мы зрабілі ў C з паказальнікамі і перамяшчэння дрэў і рэкурсіі на вузлах
левая дзіцяці правы дзіцяці, раптам мы можам сартаваць лічыць само сабой якія разумеюцца
як дзіўна асветніцкай калі зусім не хвалюе
але далёка не эфектыўны спосаб ісці аб праграмаванні.
І так з гэтым высокі ўзровень мовы, як JavaScript
мы зможам перамяшчацца па дрэве значна больш інтуітыўна.
>> І сапраўды, сінтаксіс будзе добра знаёмыя.
Калі вы ніколі не бачылі перш за JavaScript, гэта сапраўды добрая спасылка
ад Mozilla людзі, людзі, якія робяць Firefox,
так што не саромейцеся праглядаць, што ў вашым зручнасці.
Што вы знойдзеце - і гэтыя слайды ідэнтычныя тым, што мы выкарыстоўвалі другі дзень -
Аналагічна, асноўныя сышоў.
Таму, калі вы пішаце праграму ў JavaScript, няма галоўнай функцыі.
Вы проста пачаць пісаць код.
Але ключавое адрозненне паміж JavaScript і C і PHP
з'яўляецца тое, што ў той час як C і PHP да гэтага часу былі выкананы на боку сервера
на прыладу ў гэтым выпадку ці ў больш агульным-серверам,
Наяўнасць па канструкцыі звычайна выконваецца з дапамогай браўзэра.
Іншымі словамі, вы можаце напісаць код JavaScript, калі мы збіраемся,
на серверы ў прыбор, але ўключыць яе ў лік вашых HTML, сярод вашых CSS,
Сярод вашых GIF-і PNG-вашы і вашага выявы ў фармаце JPEG
так што, калі карыстальнік наведвае вэб-старонку, калі вы выкарыстоўваеце JavaScript,
, Што код JavaScript прыходзіць ад сервера да браўзэра,
і гэта браўзэр, які фактычна выконвае яго.
Так што гэта мае значныя наступствы нават для інтэлектуальнай уласнасці.
Гэта глупства нават думаць аб абароне вашага IP калі справа даходзіць да кода JavaScript
таму што па сваёй прыродзе мовы ён запускаецца на выкананне звычайна баку браўзэра.
>> Вы можаце схаваць яго, што азначае, што вы можаце зрабіць яго з розуму, і пачварнае
, Без прабелаў, жудасныя імёны зменных, каб зрабіць гэта цяжэй для людзей, каб скрасці ваш IP,
але галоўнае ў тым, што ён выкананы баку браўзэра.
Нават калі, як у бок JavaScript можа быць выкарыстаны на боку сервера,
Найбольш распаўсюджаны выпадак выкарыстання прама цяпер усё яшчэ знаходзіцца на браўзэр.
А вось як ён выглядае. Вось калі-інакш, калі-інакш будуецца так жа, як C, гэтак жа, як PHP.
Вось гэта лагічны выраз, калі вы "ці" 2 рэчы разам.
Вось калі вы "і" 2 рэчы разам.
Вось перамыкач заяву, якое падобна на PHP
у тым, што вы можаце перамыкацца на розныя тыпы каштоўнасцяў.
Завесы Аналагічна, для завес тут, якія структураваныя аднолькава да таго, што мы бачылі раней.
У той час як завесы, у нас ёсць рабіць падчас цыклаў.
Зменныя, зусім крыху іншая.
Вы аб'яўляць зменныя як вы робіце ў PHP і C,
але так жа з'яўляецца наяўнасць слаба тыпізаваных.
Вы не паказалі Int або з якая плавае кропкай або радок або што-небудзь падобнае, што звычайна.
Вы можаце задаць вобл.
Вам не трэба паказваць зменную, але гэта мае значэнне, калі вы не робіце.
Звычайна, калі вы апусціце Вар, вы выпадкова стварыць глабальную зменную, а не мясцовыя.
Такім чынам, дазвольце мне прапанаваць, што вы амаль заўсёды толькі сказаць, вар, а затым імя зменнай.
Гэта не тып, гэта проста VAR для зменнай.
Гэта было б, напрыклад, няхай гэта будзе 123 ці "прывітанне, свет".
Масівы прысутнічаюць і сінтаксічна падобныя на PHP.
Я скажу VAR нумары і затым выкарыстоўваць квадратныя дужкі зноў распачаць зменную
, Тып якога з'яўляецца масіў, які мае менавіта гэтыя нумары ў ім праз коску.
І тады, нарэшце, гэта адзінае, што сапраўды выглядае інакш.
Нагадаем, што ў PHP, мы б рэалізаваны асацыятыўны масіў для студэнтаў
як Zamyla, што можа выглядаць наступным чынам, дзе пераменная называецца студэнта.
Квадратныя дужкі азначаюць тут ідзе масіва.
>> Той факт, што я не выкарыстоўваю лікавыя індэксы, але радка - ID, дома, і назва -
азначае, што гэта асацыятыўны масіў,
і гэтыя стрэлкі з знак роўнасці і кутняй кранштэйны
азначае, што ключ "ID", значэнне роўна 1;
ключ "дом", значэнне Winthrop дома;
ключ "імя", значэнне Zamyla Чан.
Такім чынам, ёсць 3 ключа ўнутры гэтага асацыятыўны масіў, кожны з якіх мае сваё значэнне.
Мы бачылі, што ў PSET 7, ці вы хутка, у наяўнасць ж ідэю,
але гэта будзе выглядаць наступным чынам.
Так VAR студэнта - не знак даляра і ніякай згадкі тыпу да гэтага часу, але вар -
роўных, а затым адкрыць фігурныя дужкі, таму што ў JavaScript, калі ў вас пар ключ-значэнне,
вы на самой справе выкарыстоўваюць так званы аб'ект.
І тыя з вас, хто зойме АСК ТП і да т.п. маглі б узгадаць аб'ектаў Java
ці падобныя мовы.
JavaScript не з'яўляецца Java, у першую чаргу.
Гэта было наўмыснае гадоў таму дызайнерскае рашэнне, каб збіць нешта іншае, што было папулярна,
яго імя, нават калі яно не мае прынцыповага адносіны да сябе Яву.
JavaScript ёсць аб'екты, а іх стварэнні шляхам абазначэння фігурнай дужкай.
Аб'екты ў JavaScript з'яўляюцца ў значнай ступені эквівалентна асацыятыўныя масівы ў PHP
калі справа даходзіць да захоўвання дадзеных ўнутры іх.
>> Але яшчэ больш магутна у JavaScript вы можаце звязаць вельмі лёгка функцыямі
Унутры аб'екта, і, хоць вы можаце зрабіць гэта на іншых мовах,
гэта даволі распаўсюджаная парадыгма, як мы ўбачым.
Карацей кажучы, гэты аб'ект ўяўляе студэнта, які асабліва Zamyla,
і гэта падобна канцэптуальна, проста сінтаксічна адрозніваецца ад гэтага.
Давайце рэальна выкарыстоўваць JavaScript у файл.
Аказваецца, ёсць тэг.
Мы бачылі стылі тэгі і мы бачылі іншыя HTML тэгі.
Тэг на самай справе будзе ўтрымліваць некаторы код JavaScript.
Адпусціце мяне ў прыбор, дзе ў нас ёсць некаторыя зыходныя коды гатовых.
Я не адправіў яго яшчэ на сайце, але я зраблю гэта пасля заняткаў.
Давайце адкрыем да гэтага, blink.html.
Яшчэ ў 1990-х гадах, не было літаральна HTML тэгі называюць імгненне тэгаў,
і гэта была адна з самых цудоўна злоўжываць тэгамі у інтэрнэце
, У якім вы хочаце наведаць некаторыя стылі 1990-х гадах вэб-старонку і пачаць бачыць тэкст перарывістым вам, як гэта,
Вынікі маркіза тэг, які збіраецца тэксту, як гэта.
Адзін з нешматлікіх выпадкаў, калі свет фактычна пагадзіўся на вэб-стандарт,
усё праз борт забіў імгненне тэгі некалькі гадоў таму.
Але мы можам ўваскрэсіць яго наяўнасць у якасці дэманстрацыі сілы ў вас ёсць
калі вы можаце напісаць праграму, усярэдзіне вэб-старонкі.
Перш за ўсё, давайце прапусціць новы матэрыял і засяродзіцца толькі на старых.
>> Вось старыя рэчы ў гэтым прыкладзе.
У мяне ёсць тэгі HTML, кіраўнік тэгі і загаловак.
Тады ў мяне ёсць цела тэга тут спраў, якія Нагадаем, гэта проста прастакутная падзел старонкі
што я даў унікальны ідэнтыфікатар адвольна "прывітанне", каб,
менавіта так, у мяне ёсць спосаб адназначна спасылаючыся на яго, што ёсць вельмі просты тэкст:
Добры дзень, свет.
Цяпер дазвольце мне прагортку ўверх да вяршыні гэты файл і паглядзець, што новага.
Першае, што новага папаўнення з'яўляецца тэг,
і ўнутры апавяшчэнне тэгі сцэнару я абвясціў функцыю.
Каб абвясціць функцыю ў JavaScript, вельмі падобны на PHP,
Вы літаральна напісаць функцыю, то імя функцыі, дужкі,
і, магчыма, некаторыя аргументы, калі ён прымае любыя.
Тады ў мяне ёсць фігурныя дужкі, як звычайна, і цяпер у нас ёсць трохі новага кода
але давайце паглядзім, што гэта азначае.
Так VAR DIV, гэта проста азначае, дайце мне зменныя званых спраў.
Я мог бы назваць яе Foo, але я хацеў, каб яна выклікалася спраў
па прычынах, якія будуць ясныя ў секунду.
Тады атрымліваецца ў JavaScript - і гэта JavaScript код, укаранёны ў вэб-старонкі -
ёсць адмысловая глабальная пераменная роду называецца дакумент.
Наяўнасць у рэчаіснасці з'яўляецца аб'ектна-арыентаваным мовай.
Мы не будзем удавацца ў падрабязнасці ў 50 аб тым, што гэта азначае, што,
але цяпер ведаю, што аб'ект з'яўляецца ў значнай ступені як структуры.
Як мы бачылі, шлях назад, калі ў адной з першых праблемай ўсталёўвае
дзе мы паклалі шмат інфармацыі ў структуры,
Аналагічным з'яўляецца дакументам спецыяльнай структуры, якая пастаўляецца з браўзэрам,
пастаўляецца з любой вэб-старонкі. Гэта не тое, што я стварыў.
Унутры гэтай структуры дакумента, хоць, вы павінны не толькі дадзеныя
але вы таксама павінны функцый.
>> І ў любы час у вас ёсць функцыя ўнутры структуры, усярэдзіне аб'екта,
гэта называецца метадам. Але гэта тое ж самае.
Метад з'яўляецца функцыяй, якая проста так здараецца, усярэдзіне нешта іншае.
Такім чынам, гэта азначае, што спецыяльная глабальная пераменная дакументаў
ёсць функцыя, званая GetElementById, якая літаральна робіць гэта.
Гэта дапаможа вам элемент з DOM, Document Object Model дрэва,
ідэнтыфікатар якога ў гэтым выпадку прывітанне.
Іншымі словамі, увесь гэты час мы патрацілі на структуры дадзеных, у гульню ўступае тут.
Гэтая карціна DOM, што ў нас было хвіліну назад,
нават калі старонка выглядае крыху інакш, калі б я меў спраў у гэтай карціне,
document.getElementById, што вернецца да мяне будзе фактычна паказальнік
ў прастакутнік ў дрэве, спасылка на прастакутнік ў дрэве.
Дык вось што гэта азначае на самай справе патэлефанаваць па адным з гэтых функцый.
У гэтым выпадку зноў жа гэта гл. Гэта не цела або загаловак.
Такім чынам, давайце паглядзім, што я потым рабіць з гэтым спраў цяпер, што ў мяне ўнутры гэтай зменнай спраў.
Аказваецца, з JavaScript у вас ёсць магчымасць наладзіць CSS вашай старонкі дынамічна.
Да гэтага часу ўсе CSS мы зрабілі, хоць і абмежаваную, у атрыбуты стылю,
ці дзе яшчэ былі пакласці CSS?
Я збольшага сапсаваў той. У стылі тэгаў у верхняй частцы файла.
Ці трэцяе месца было ў?
>> Знешні файл, нешта. CSS.
Так што тыя 3 месца мы зрабілі CSS да гэтага часу,
але загваздка ў тым, што мы жорстка ўсё гэта.
Вы вырашылі, як вы нырнулі ў PSET 7, мы вырашылі, перш чым чытаць лекцыі, што наш CSS будзе.
Але калі вы хочаце змяніць свой CSS, вы можаце зрабіць гэта
калі ў вас ёсць фактычныя мовы праграмавання.
CSS, HTML - не мовы праграмавання. Наяўнасць ёсць.
Вось і атрымліваецца, што як толькі ў вас ёсць адзін з тых прастакутнікі з дрэва
называецца DOM, яна сама некаторых дадзеных ўнутры яго.
Так спраў, што я проста схапіла з дрэва мае тое, што мы называем уласнасці ўнутры яго
называецца стыль, і стыль уласнасці само ўласцівасць бачнасці.
Я ведаю, што гэта толькі гледзячы кіраўніцтва карыстальніка па CSS.
Аказваецца, ёсць ўласцівасць бачнасці CSS, што робіць тое, што ён кажа.
Гэта робіць нешта бачнае ці не, бачным ці не.
А як вы гэта зробіце гэта.
Я прашу праграмна, калі бачнасць гэтага DIV ўтоена,
тое, што я магу змяніць яго? Visible.
Інакш, калі бачнасць гэтай старонкі не хаваецца, па логіцы рэчаў я зрабіць яго схаваным.
Я паняцця не маю, чаму гэта бачныя і схаваныя, а не бачнага і нябачнага.
Гэта было дрэннае рашэнне дызайну па шляху.
Але гэта сапраўды супрацьлегласцяў ў CSS: бачныя і схаваныя.
Усё гэта ёсць, гэта азначае змяненне CSS майго файла і выключаецца, і выключаецца
для гэтага канкрэтнага спраў.
Але зноў жа, гэта функцыя называецца міргаць. Калі імгненне функцыя называецца?
Аказваецца, што ёсць іншы спецыяльнай глабальнай зменнай завецца акном,
блізкія па духу дакумента, але ў той час як дакумент адносіцца да вашай вэб-старонцы,
як дрэва DOM, HTML вы паслалі з сервера,
вокны ставіцца да хром вакол яго, у адраснай радку, у радку загалоўка,
і ўсё, што рэчы вакол вашай вэб-старонцы.
>> І атрымліваецца, што аб'ект вокны мае адмысловае ўнутры функцыі, званай setInterval
, Што робіць тое, што ён кажа.
Ён будзе ўсталёўваць інтэрвал - у гэтым выпадку кожныя 500 мілісекунд -
і зрабіць здагадку, што ён збіраецца рабіць кожныя 500 мілісекунд?
Гэта будзе выконваць гэтую функцыю мігцення.
І што прыемна тут з'яўляецца тое, што мы маглі б зрабіць гэта ў C, хоць мы ніколі не рабілі.
C сапраўды ёсць тое, што называецца паказальнікаў на функцыі, дзе вы можаце перадаць функцыі па
у якасці аргументаў.
Сапраўды гэтак жа ў наяўнасць Вы можаце перадаць імя функцыі ў іншую функцыю.
І звярніце ўвагу, што я раблю. Я не раблю гэтага.
Калі я стаўлю дужкі пасля міргаць, гэта азначае, тэлефануйце імгненне функцыі.
Калі б я іх апусціць, гэта азначае, што тут імгненне функцыі
так што setInterval можна назваць кожныя 500 мілісекунд.
Такім чынам, канчатковы вынік, зверскім, хоць гэта, што калі я іду ў лакальны і перайсці да blink.html,
Цяпер у мяне гэта адбываецца зноў і зноў.
А калі я на самай справе агляд элементаў, давайце паглядзім, калі мы можам гэта ўбачыць.
Дазвольце мне Агледзіце элемент, дазвольце мне проста пракруціць ўніз трохі,
Дазвольце мне выбраць элементы тут, і звярніце ўвагу на DOM ўнутры інспектар Chrome.
Гэта літаральна змяняецца і назад кожныя 500 мілісекунд.
Калі мы вернемся да нашага аднаму Нейт,
Калі вы калі-небудзь задумваліся, як гэта працуе, падобная ідэя з інтэрвалам,
Nate але на самой справе робіць вельмі эфектыўна выкарыстанне колеру ў дадзеным канкрэтным выпадку.
Так што яшчэ мы можам рэальна зрабіць з гэтым?
Давайце адкрыем яшчэ адзін прыклад і паспрабаваць нешта
гэта праграмна нават больш карысная, чым рабіць рэчы міргаць.
Адпусціце мяне ў нашым каталогу формы сёння і ідзем у form0.
Гэта быў самы пачварны магчымай форме, што я мог прыдумаць,
і дазвольце мне паказаць вам, як гэта выглядае ў браўзэры.
>> Дазвольце мне перайсці ў лакальны / формы, і гэта form0.
Гэта супер выродлівыя формы HTML, які мае некалькі палёў для электроннай пошты, пароляў,
пароль, а затым трохі сцяжок, каб пагадзіцца на некаторыя ўмовы.
Загваздка ў тым, калі я наведваю гэтую форму, і я не хачу, каб даць вам мой адрас электроннай пошты,
Я не хачу, каб пагадзіцца з умовамі, можа быць, я магу націснуць Рэгістрацыя
і гэта дазваляе мне праз так ці інакш.
Гэта адбываецца прадставіць дурныя файле PHP называецца dump.php.
Усё гэта робіць друк змесціва $ _GET толькі для дыягнастычных мэтаў.
Гэта тое, што было прадстаўлена карыстачу толькі цяпер.
Але выкажам здагадку, што мы на самай справе хочам праверыць форму прадстаўлення карыстальнікаў.
Адпусціце мяне ў версіі 1.
Гэта form1.html. Гэта выглядае эстэтычна гэтак жа дрэнна, але зьвярніце ўвагу, як гэта фантазіі.
Калі я націскаю Рэгістрацыя без супрацоўніцтва, я атрымліваю крыкнуў.
"Вы павінны пазначыць свой адрас электроннай пошты".
Добра. Такім чынам, дазвольце мне паспрабаваць. Так malan@harvard.edu. Мне не патрэбны пароль.
Зарэгіструйцеся. "Вы павінны ўвесці пароль". Добра.
Так што я буду падаваць пароль малінавы. Зарэгіструйцеся.
"Паролі не супадаюць". Я павінен зараз ўвесці ў малінавых тут.
Я выпадкова праверыў гэта. Зарэгіструйцеся.
"Вы павінны пагадзіцца з умовамі". Добра. Пагадзіцеся там. Зарэгіструйцеся.
І зараз ён паказвае мне дыягнастычныя там.
>> Так што ж здарылася?
У нас была гэтая магчымасць праверкі формы прадстаўлення.
На самай справе, калі вы зрабілі апусканне ў PSET 7, ёсць функцыя прабачэнні
, Што робіць яго даволі лёгка крычаць на карыстальнікаў з паведамленнем на экране.
Я выкарыстоўваю некалькі іншы механізм, функцыя папярэджання,
які не з'яўляецца функцыя, якая ўсміхнулася, паколькі яна робіць вельмі непрыгожа паведамленні карыстальніка.
Але давайце паглядзім, што я тут раблю.
Гэта form1.html, і заўважыў, што ў мяне ёсць некаторыя даволі знаёмы сінтаксіс:
цела тэга, тэг формы, дзеянне атрыбуту, метаду атрыбут.
Але заўважце, я даў маёй форме унікальны ідэнтыфікатар для выгоды.
Затым я атрымаў ліст поле, тып якога з'яўляецца тэкст,
Пароль поле, тып якога з'яўляецца пароль, пацверджанне поле, тып якога з'яўляецца паролем,
, А затым сцяжок, імя якога пагадненне сюды, тыпу сцяжок.
А то ў мяне ёсць кнопка адпраўкі.
Але зьвярніце ўвагу на верхнюю, што яшчэ ў мяне ёсць.
Перш за ўсё, ёсць іншы выкарыстаннем тэга сцэнара.
Калі ў вас ёсць код JavaScript у іншы файл, так жа, як з CSS вы можаце ўключыць яго.
І вы робіце гэта з дапамогай скрыпту крыніцы, а затым заўважыць, што я ўпэўнены, падлучэнне па-відаць
у googleapis.com на вельмі доўгі шлях, але чые назвы заканчваюцца ў jquery.min
для мінімуму. JS.
JQuery гэта супер папулярная бібліятэка для JavaScript, што проста робіць JavaScript
Тым больш зручнай у выкарыстанні.
Ён фактычна стаў стандартам дэ-факта.
Таму, нягледзячы на ​​тое, што вы збіраецеся глядзець, не з'яўляецца чыстым наяўнасць такога,
гэта бібліятэка на вяршыні JavaScript гэтак жа, як CS50 бібліятэка пласта
на вяршыні нізкаўзроўневага кода C; рэальнасць такая, амаль усе ў інтэрнэце выкарыстоўвае яго.
Так што гэта не навучанне колы. Гэта проста лепшая практыка ў гэтыя дні.
Зараз звернеце ўвагу ніжэй, чым мой уласны тэг сцэнара, і заўважыў, што я зрабіў тут.
Аказваецца, што JQuery робіць нешта трохі фантазіі.
JavaScript мае знак даляра, але яны не маюць сэнсу.
>> Яны падобныя на літары А ці B або C.
JQuery проста прыняла Канвенцыю альбо роду, прэтэндавалі на тое,
, Што $ будзе іх адмысловым знакам.
Таму, як толькі вы загрузіце гэты файл глабальных наяўнасць тут з тэг,
Вы маеце доступ да спецыяльнай глабальнай зменнай, якая называецца $.
Гэта больш правільна называць JQuery, але гэта не выглядае амаль гэтак жа сэксуальна, як $.
Але $ не мае асаблівага сэнсу. У PHP гэта мела асаблівы сэнс.
Вы павінны былі мець яго перад зменнай.
Гэта проста сэксуальная рэч, якую яны ўзялі на сябе.
Што тут адбываецца?
Звярніце ўвагу, што я перадаю ў JQuery функцыі мая глабальная пераменная дакументаў
а потым я тэлефаную. гатовы.
Што JQuery па сутнасці робіць гэта дазваляе рабіць некаторыя рэчы ванілі JavaScript
як аб'ект дакумента, акно аб'екта,
і калі вы перадаць яго ў JQuery функцыі -
і зноў, каб было зразумела, што гэта функцыя пад назвай jQuery -
што яна робіць, гэта вернецца да вас адмысловую версію дакумента
, Які мае больш функцыянальных магчымасцяў, звязаных з ім.
Такім чынам, у сырых JavaScript няма гатовых функцый,
але калі вы перадаеце дакумент у JQuery функцыі першага,
ён вяртаецца да вас адмысловую версію дакумента аб'ект
, Якая мае больш модныя функцыі.
І вось чаму людзям падабаецца. Ён проста робіць рэчы прасцей рабіць, бо мы збіраемся, каб бачыць.
Такім чынам, што ж гэты радок кода на ўвазе?
Гэты радок кода ў дадзеным выпадку азначае, калі дакумент гатовы -
Іншымі словамі, як толькі браўзэр скончыце чытаць гэты файл зверху ўніз -
ісці наперад і выканаць наступныя функцыі.
Што сапраўды цікава ў JavaScript - PHP і мае гэта, а таксама -
з'яўляецца ананімнай функцыі.
У JavaScript можна абвясціць функцыі, якія не маюць імя, але ў іх ёсць цела.
Звярніце ўвагу, што тут адбываецца.
>> Гэтая функцыя называецца гатовыя, і гэта проста азначае, выканайце наступныя
калі ўся вэб-старонка будзе гатовая, калі ўсё гэта было прачытана ў з сервера.
Што вы хочаце зрабіць? Я хачу, каб выканаць кавалак кода.
Звярніце ўвагу, што мы не хочам, каб выканаць гэты код адразу.
Калі я прапусціў гэта, гэта будзе азначаць, неадкладна пачаць выкананне гэтых радкоў кода.
Але тое, што я кажу, не, не, не, абгарнуць гэта ў ананімнай функцыі, як гэта
сродкі не выканаць яго яшчэ, называюць яго ў рэшце рэшт.
Мы бачылі гэтую хвіліну назад у нашым папярэднім прыкладзе формы.
Што ж функцыю мы называем у рэшце рэшт, 500 мілісекунд пазней? Blink.
Гэтак жа ідэю.
Зноў жа, нават калі гэта выглядае крыху дзіўна, проста ўзяць зараз на веры
абвясціць, што ананімная функцыя, якая выклікаецца ў рэшце рэшт,
Вы проста напісаць функцыю () {
Так што код мы будзем выконваць у рэшце рэшт? Наступнае.
Гэта таксама выглядае крыху новага, але гэта азначае вось JQuery функцыі,
і гэта цяпер з'яўляецца скарочаным.
Гэты фрагмент HTML у ніжняй частцы экрана, вядома, мае некаторае ўяўленне дрэва.
Гэта не ў гэтым. Гэтая старонка з'яўляецца больш цікавым, чым гэта прывітанне, свет прыклад.
Але ёсць некаторыя дрэва, які адпавядае гэтаму HTML.
Было б боль у шыі, каб рэалізаваць нейкую рэкурсіўнага функцыю
пачаць з каранёвага вузла, а затым знайсці вузел з ідэнтыфікатарам рэгістрацыі.
Так што JQuery робіць супер проста для нас з'яўляецца ў прамым сэнсе гэтага.
Ідзі і прынясі мне ўсё, што спраў або любой форме, незалежна HTML элемент
мае ідэнтыфікатар рэгістрацыі.
Гэта эквівалентна document.getElementById ('рэгістрацыя').
>> Чаму такія людзі, як JQuery?
Таму што гэта карацей, каб надрукаваць. Але гэта ўсё, што ёсць. Гэта тая самая ідэя.
Дайце мне тэг з ідэнтыфікатарам рэгістрацыі.
І калі гэта тэг, які бывае форме, уяўляецца,
ісці наперад і выканаць гэты код.
Такім чынам, давайце адзін погляд на тое, як цяпер мы робім форму праверкі.
Сінтаксіс праўда загадкавыя на першы, але тое, што адбываецца?
Калі гэты радок кода, праўда, я збіраюся крычаць на карыстальніка падаць свой адрас электроннай пошты.
Дык што ж гэта радкі кода?
$ Азначае, JQuery. Цяпер заўважыць гэта.
Гэта накшталт як CSS.
Калі вы нырнулі ў CSS ўсё ж, вы будзеце ведаць, што гэта азначае, што элемент з ідэнтыфікатарам рэгістрацыі.
Прасторы азначае знайсці дзіцяці або нашчадак рэгістрацыі, чыё імя ўваходу.
І тады гэтая рэч у квадратных дужках трохі фільтр.
І нават калі гэта выглядае загадкава, гэта проста азначае, перайдзіце ў форму з ідэнтыфікатарам рэгістрацыі,
перайсці да ўнутранай ўваходных элемент, што, чыё імя электроннай пошты,
, А затым атрымаць яго значэнне, незалежна ад яго значэння, здараецца, -
ASDF, калі гэта ўсё, што я набраў malan@harvard.edu або, калі гэта тое, што я набраў.
Такім чынам, калі значэнне электронную пошту формы поля == нічога, крычаць на карыстача.
Інакш, калі значэнне ў поле пароля == нічога, крычаць на карыстача.
>> Інакш, калі значэнне ў поле пароля не роўна значэнні пацверджання поле,
які быў сябрам элеменце формы, крычаць на карыстача.
І тады, нарэшце, - і гэты таксама мае некаторыя новыя сінтаксіс сваіх,
але як толькі вы бачылі яго, гэта хоць крыху больш разумным -
яшчэ, калі форма з ідэнтыфікатарам рэгістрацыі мае ўваходных элемент, імя якога пагадненне
і правяраем, ісці наперад і крычаць на карыстача.
Так што я цалкам прызнаю, што гэта цалкам пераважнай на першы погляд.
Гэта шмат новага сінтаксісу. Але ўсе гэтыя JQuery наступныя віды узораў.
І калі шчыра, я нават не ведаю, што гэта існавала толькі некалькі хвілін таму.
Я Googled, "Як вам праверыць, калі ўсталяваны сцяжок у JQuery?"
і гэта сінтаксіс, таму што ёсць розныя спосабы зрабіць гэта
з фактычным сырой код JavaScript.
Так як самыя першыя старонкі Праблема Set 7 падкрэсліваецца,
PSET 7 вельмі шмат практыкаванняў у сябе загрузку
дзе мы ўвялі, мы спадзяемся, канцэптуальная аснова, з якой па рашэнні PSET.
>> Але, як гэта часта бывае з вэб-дызайнам, гэта да вас сапраўды капацца,
ўключаць фрагменты кода і прыклады з Інтэрнэту, пакуль вы прывесці іх
у адпаведнасці з умовамі ў той першы ліст,
і разумеюць, што вывучэнне HTML, CSS, JavaScript і нават SQL
на самай справе прызначаныя для гэтага ў хатніх практыкаванняў, як мы прыступім да прыняцця гэтых навучальных колы прэч.
І разумею, таксама ёсць так шмат іншых рэчаў, якія вы можаце зрабіць з браўзэрам.
Усярэдзіне большасці з гэтых элементаў ёсць і іншыя рэчы называюцца апрацоўшчык падзей.
І хоць мы проста глядзелі на іх называюцца OnSubmit і onready,
Вы можаце рабіць рэчы, як OnKeyDown, OnKeyUp,
падабаецца, калі карыстальнік датыкаецца да ключавых, вы можаце слухаць, за што і ўверх.
Gmail мае клавіятуру.
Як Google ажыццяўлення спалучэння клавіш, як C для складаеце?
Яны слухаюць для падзей, як яны называюцца, як OnKeyPress або OnKeyUp і OnKeyDown.
Калі вы калі-небудзь лунаў курсор мышы на некаторых меню
і раптам, вуаля, з'явіцца меню або графічны змены колеру,
як яны гэта робяць?
Замест таго, каб праслухоўваць onready або OnSubmit, вы слухаеце для OnMouseOver або onmouseout.
>> Карацей кажучы, з гэтым вельмі простыя асновы, якія мы пачалі драпаць паверхню сёння
і мы будзем ныраць у далейшым у сераду, у вас ёсць, у большай ступені,
улады для рэалізацыі рэчы, якія вы ўжо знаёмыя.
Так што давайце заканчваецца, і мы будзем працягваць гэтую сераду.
>> [CS50.TV]