[Powered by Google Translate] [Недела 9]
[Дејвид Џ Malan - Универзитетот Харвард]
[Ова е CS50. - CS50.TV]
Во ред. Добредојде назад. Ова е CS50, а тоа е почеток на недела 9.
Денес ние се фокусираат особено на дизајн, веќе не се во контекст на C
но во контекст на PHP и малку SQL и малку на JavaScript,
особено кон крајот на двете pset 7 и твојот последен проект.
Всушност, ако сте во тој момент во твојот последен проект
каде што се претпоставува дека од еден час или па пред вас барем почна да даде некои мисли
до финалниот проект и сте размислување би сакале да соработуваат со 1 или 2 соученици,
ако имаш проблеми со поврзување со изјави соученици,
се чувствуваат слободни да пополните формулар во cs50.net/partners/form.
Тоа само ќе ве праша кој сте, каков вид на проект сте размислување за,
каде што живеам само за логистичка причини.
А потоа, ако сакате да се внимава на текот на следната недела или така табела рачно таму,
тогаш може да се види само за читање верзија на Google doc
во која ние сме собирање таа информација.
Значи, ако сакате да работите со некого, со сите средства да се чувствуваат слободни да допрат до луѓето
преку тој механизам.
Но мнозинството на луѓето не работат соло. Тоа е сосема во ред.
Затоа, не се чувствуваат дека тоа е на кој било начин задолжително.
Во петокот тоа беше само мене и неколку од тимот овде,
празни театар во најголем дел.
Имало 3 туристи седи таму, така што беше малку непријатно.
Она што ние разговаравме за било бази на податоци и ние разговаравме за pset 7 малку.
И ако не се случи да се фати дека на видео само уште, тоа е во ред.
Ќе се обидам да се дефинираат сите услови што инаку би се здраво за готово
врз основа на предавање во петокот.
>> Но, денес ние ќе се обидеме да ви се дојде до точка
на не само да биде во можност да се направи нешто како pset 7
но, навистина разбирање она што се случува под хауба,
особено на некои од апстракции што ќе стави во место во functions.php датотека
да се направи вашиот живот малку полесно, но така што ќе конечно се разбере
така што кога обука тркала падне во неколку недели се уште може да преживее
во реалниот свет и го правиме ова работи без CS50 рамка под вас.
Оваа $ _SESSION, за оние од вас кои се запознаени
или кои веќе фатен на видео во петокот, што значи СЕДНИЦА нека направи
во PHP базирани веб апликација?
Ова е superglobal променлива, што значи дека е слични во духот со GET и POST
и уште неколку други, но она што е ова нешто корисно за?
>> Што е СЕДНИЦА користи за? Да. [Студент] влезете внатре
Жал ми е? [Студент] влезете внатре влезете внатре Навистина.
Во pset 7 ние сме со користење на овој СЕДНИЦА superglobal да се олесни влезете внатре
И она што е убаво за оваа superglobal е дека тоа е асоцијативна низа.
Асоцијативна низа, се потсетиме, е само низа, но чии индекси веќе не мора да бидат броеви
како 012. Тие можат да бидат броеви или тие можат да бидат дури и жици.
И така ако сте се нурна во pset 7, можете да се потсетиме дека ние сме чување на клучен наречен проект
внатрешноста на оваа асоцијативна низа чија вредност е нешто како 123 -
без оглед на моментално најавени ID корисникот е.
Мотивација за ова е тоа што дури по корисник го посети локалниот компјутер
или мојот вебсајт поопшто, а потоа тие влезете во системот,
дури и ако тие не кликнете на линкот или враќање на мојот вебсајт за 5 минути
или дури и еден час или па дури и еден ден, но тие ги напуштат своите прозорецот на прелистувачот отворена,
преку овој superglobal можам да се сетам дека тие се најавени
>> Со други зборови, тоа ми овозможува да ги чувате малку долгорочни што сакам за корисникот.
И можете да мислам на тоа навистина како инкарнација на количката.
Места како Амазон очигледно ви стави работите во количката,
но HTTP, протоколот дека овластувањата на веб, е без државјанство
во смисла дека кога ќе ја посетите веб-сајт,
во најголем дел немате некои постојано мрежна конекција
помеѓу вашиот интернет пребарувач и серверот.
Штом сте ја преземале од HTML и JPEG слики и GIFs и сето тоа,
врската оди далеку и вие само треба копија на HTML и какво ли не од серверот.
Но, ако Серверот сака да се сетам на нешто за Вас,
товарот е на серверот за да всушност ги сними таа информација.
И така да на програмерот кој има контрола врз серверот
може да се стави повеќето нешто што сакате во внатрешноста на оваа superglobal асоцијативна низа
и тоа ќе биде таму следниот пат кога корисникот се враќа,
дали тоа е минути или дури дена подоцна, освен ако тие не ги затвораат прозорецот на прелистувачот,
на која точка СЕДНИЦА исчезнува.
Така, тоа е ефемерни складирање, тоа е непостојана, а тоа е со цел да отидат
штом корисникот затвора нивниот интернет пребарувач - не само што табот, често целиот прелистувач,
на тој начин ефикасно да влезете на корисникот надвор.
Па, како е тоа нешто всушност спроведува?
Да го земеме еден брз поглед на едноставен пример ние погледна во петокот.
За оние кои се запознаени, тоа беше толку едноставно како ова.
Ова е веб страница, чија единствена цел во животот е да ми каже
колку пати сум го посетиле оваа страница.
Ова е прв пат овде во понеделникот изјави дека го посетиле, така што вели 0 пати.
>> Но, ако почнам претовар оваа страница, таа вели 1 време, 2, 3, 4, 5,
и оваа ќе крајот само продолжи пребројување нагоре, нагоре, нагоре, нагоре, нагоре
за секој пат кога јас всушност кликнете Освежи ја на неа.
Па, како е ова работа? Дозволете ми да оди во внатрешноста на оваа датотека наречена counter.php.
На горниот дел од сето тоа е сино коментари, но интересен дел е тука.
On-line 13 ние го нарекуваме оваа функција session_start,
и дека е буквално сите што треба да направите ако сакате да имате пристап
на оваа специјална superglobal нарекува $ _SESSION.
Што го прави сето тоа е можно, а ние ќе се види во еден момент како тоа е можно.
Во линија 16 известувањето што правам.
Ако клучот, наречен контра - со други зборови, индексот вредност - "контра"
постои внатрешноста на оваа низа наречен сесија, тогаш што правам со неа во линија подолу?
Што е линија 18 правиш?
>> [Нечујни студент одговор] Што е тоа? [Студент] Чување на вредност. Добро.
Тоа е чување на вредност која е во сесија во моментов во нов локален привремена променлива,
$ Контра во сите мали букви.
Забележете дека PHP е веќе малку мрзливи тука.
Забележите немаме било споменување на int или плови или стринг или нешто слично
затоа што PHP е слабо внеле, при што не мора да наведете тип на променлива,
и во овој случај тука јас не сум дури и го прогласи уште.
Јас сум тоа прогласување внатрешноста на овие големи загради и за разлика од C, ова е всушност во ред.
Без разлика колку длабоко вгнездена декларација променлива е во PHP -
внатрешноста на кадрава голема заграда, во внатрешноста на кадрава голема заграда и слично -
тоа ќе во тој момент во времето постои за преостанатиот дел од програмата,
за подобро или за полошо.
Така што веднаш станува глобална веднаш штом ќе го дефинираме како што го правиме тука.
>> Во спротивно, ако не се најде дека има нешто во СЕДНИЦА superglobal,
Јас сум очигледно иницијализацијата на оваа променлива контра на 0,
тоа само претпоставувајќи на корисникот никогаш не бил овде.
И тогаш ова се разбира е зголемување, контра како?
Јас сум ажурирање на вредност која е во внатрешноста на оваа асоцијативна низа
со поставување еднаква на она контра моментов е + 1.
Ако јас дојдете тука на HTML кодот на страницата, тоа е всушност прилично едноставна.
Сè што треба во телото на оваа страница се: "Ти го посетиле овој сајт тој-и-толку пати."
И ова е конструкт PHP.
Ако го направите <? =, Ова е еквивалент ефикасно да се она што функција?
Тоа е навистина еквивалент на нешто како printf, што сме виделе многу пати во C,
иако, како што можеби знаете веќе од спец во pset 7,
печатење е исто така функција која само печати нешто, тоа всушност не го користите формат кодови,
и навистина може да се каже ехо, како и.
Сите тие се некогаш толку малку различни, иако нето ефектот е на крајот на истата.
Значи оваа употреба на еднаквите знак е само вид на елегантен начин да се направи тоа
повеќе посочно отколку што инаку би можеле да бидат во можност да.
Значи тоа е сето ова место го прави тоа. Тоа отпечатоци од вредноста на бројачот.
Како е ова сите навистина се случува?
Може да се потсетиме една недела или така пред почнавме потрага под хаубата
колку веб-страница работи со користење на овој инспектор табот.
>> Хром има ова и во верзија Mac, Windows верзија, па дури и верзијата на Линукс,
и Firefox и IE имаат слични механизми при имате овој вграден дебагер
внатрешноста на прелистувачот.
Ајде да се погледне на следниве.
Имаме еден куп на јазичиња тука, и се сети дека најлева е Елементи,
и без разлика колку godawful HTML и JavaScript е во една страница,
потсетиме дека со Елементи јазичето всушност можете да отидете на HTML хиерархиски
и убаво и уредно.
Значи, ако сте се обидуваат да научат од веб-сајт како Google или Facebook
или навистина било која веб страница, сфати дека вие сте веројатно подобро
гледа во изворниот код на овој начин како што се противат на гледање на суровини извор,
кој може да биде хаос, како што видовме, особено на сајт на Google.
Значи, ако јас наместо кликнете на мрежата јазичето тука,
ајде да видиме што се случува кога ќе ја посетите оваа страница.
Прво дозволете ми да исчистам кешот.
Одам да се оди во Settings во Хром, а потоа одат на историја
а потоа Избришете ги сите бараат податоци.
Може да се користи за да го прават тоа за други цели, [смеа]
но кога станува збор за развој на веб-сајтови, тоа е всушност корисно -
ако сте смеење знаеш. [Смеа]
Тоа е всушност навистина корисни при развивање на веб-сајтови, бидејќи реалноста е
работи како cookies и работи како кеширани HTML датотеки, кеширани JavaScript датотеки
всушност може да стане голема главоболка, бидејќи ако за која било причина
на прелистувачот одлучува за кеширање на некои датотеки, а сепак сте направиле промени во таа датотека на серверот
но на пребарувачот не е навистина сфатија дека датотеката се промени
и затоа не всушност го преземете повторно, дури и кога ќе кликнете на Обнови копче,
една од најпознатите безпогрешен начини да се само бидете сигурни дека грешката не е со вашиот код,
тоа е со однесувањето на прелистувачот, е да се оди тука во вашиот интернет пребарувач
и само ја избришете целата историја, така што не постои конфузија.
>> А потоа, ако навистина сакате да бидете параноични, поднесе оставка на прелистувачот, рестартирајте,
и тогаш бидете сигурни дека сите работи како што се очекуваше.
Значи во кратки, расчистување кешот е добар кога го прави развој.
Значи тука имаме мрежа табот.
Јас претходно го посети местото 9 пати, но дозволете ми да оди напред сега и кликнете Reload.
И јас сум назад на 0.
Да, всушност се види како тоа е дека оваа седница superglobal се спроведува.
Одам да кликнете на 1 HTTP барањето што е направено,
и ова за дебагирање прозорец ми овозможува да се погледне внатре во тоа.
Еве гледам само одговор од серверот, што не е интересно.
Сум го видел ова во било кој број на начини.
Но, она што е технички интересни се заглавија.
Ако јас дојдете тука и се фокусира на барање заглавија и кликнете View извор,
она што јас ќе одам да видам е буквално HTTP барање
дека само отиде од мојот интернет пребарувач на серверот,
GET биде оперативна збор, а потоа / counter.php биде името на датотеката,
HTTP/1.1 само да биде верзијата на HTTP дека мојот интернет пребарувач е користење.
Оваа линија, тука е малку потсетување од прелистувачот на серверот што го името на серверот е
дека сака да разговара.
А потоа го остатокот од овој понекогаш е интересно, но не се релевантни во моментов.
>> Ова е само еден вид на љубопитност.
Криптичната иако овој стринг е, во секое време вашиот прелистувач посети веб-сајт
тоа е информирање на серверот што прелистувачот што го користите
и тоа што оперативниот систем што го користите и која верзија од него.
Значи, ако некогаш сте се прашувале како веб-сајтови како CNN и какво ли не
знаете што процентите се на Mac корисниците на интернет, PC корисници,
Корисниците на IE, Хром корисници и слично, тоа е затоа што сите наши прелистувачи
се кажува секој веб-сајт таму што сме.
Тоа не мора да содржи лични информации,
но тоа не му кажете на серверот она што вашата IP адреса е и она што прелистувачот и оперативниот систем кој го користите.
Значи тоа е каде што оваа информација е.
Но она што е поинтересно сега кога станува збор за овие сесии е одговор заглавието.
Дозволете ми да кликнете View извор до одговор.
Она што е интересно овде е неколку работи.
1, се вративме статус код 200.
Ние никогаш не го гледаме овој статус кодот, бидејќи тоа значи дека сите е добро.
Тоа значи буквално во ред за разлика од нешто друго.
Што е бројот понекогаш да се види дека е лошо? [Студент] 404.
404, датотеката не е пронајдена, 403 може да се сопнување врз веќе,
што е забрането, што значи дека заборавив да chmod нешто, најверојатно.
И има еден куп други.
>> Долу тука, ова е малку луд.
Јас навистина само напишав оваа датотека неколку минути од вметнување во gedit.
Зошто оваа страница истекува во 1981 година пред навистина беше интернет?
Што се случува таму?
>> [Нечујни студент одговор] На времето печат. Но, зошто?
Тоа е донекаде произволна, но тоа е всушност корисно.
Што ова кажува за мојот интернет пребарувач е ова датотеката PHP сте само бара веќе истечен.
Всушност, тоа истечен пред 30 години.
Но, она што не значи дека навистина?
Тоа само значи дека следниот пат кога корисникот ќе ја посети оваа страница,
дали со претовар или внесување на URL во полето за адреса,
бидете сигурни дека ќе одам да го викнам нова копија од неа.
Ова е вид на пример кеш разнебитувањето,
глупав збор кој едноставно значи се обидува да ги обесхрабри прелистувачи
од всушност кеширање HTML дека е пратена од серверот
така што не случајно хит Вчитај а потоа да видиме истата верзија на датотеката.
Ти всушност сакате серверот да испрати нова копија.
Значи фактот дека тоа е 1981 само значи дека тоа е она што уредот е изборот
како произволен датум во минатото.
Но, вистинскиот сочни линија е сега ова.
Дури и пред 50 најверојатно нејасно запознаени со колачиња.
Почнувајќи од сега, особено меѓу оние кои се помалку удобно или меѓу нив,
Што е колаче во вашето разбирање токму сега
иако ние сме за да се направи вашето разбирање повеќе технички?
Што е колаче? Да.
[Студент] Информации за корисникот, како ако тие го напишале своето корисничко име или нешто.
>> Добро. Тоа е информација за корисникот, без разлика дали тие го напишале во своите корисничко име веќе.
Колачињата се начин при сервери може да се сети нешто за корисникот.
И она што колаче навистина е е текстуална датотека или некои низа од бајти
која е поставена од страна на серверот во внатрешноста на вашиот прелистувач,
и во внатрешноста на оваа датотека или кај оние бајти е некој вид на идентификатор.
Можеби тоа е буквално вашето корисничко име, но почесто тоа е нешто повеќе криптичната изглед
вака нешто тука - bo8dal3ct и така натаму - ова навистина голема алфанумерички стринг
тоа е навистина само значи да се биде единствен идентификатор за вас.
Или можете да мислам на тоа како вид на виртуелна рака печат.
Ако одите на клуб или забавен парк, да се потсетиме дека сте вистински платената
и помина, тие се стави малку црвена налепница на вашата рака на некој вид,
и што потсетува луѓето на шалтерот дека веќе сте платени
и може да доаѓаат и си одат како што сакаш.
Колачињата се малку слични во духот со тоа.
Прв пат ја посетив оваа веб страна, како што скоро сторив по расчистување мојот кеш,
на веб серверот, уредот во овој случај, се стави печат на мојата рака
чие име е PHPSESSID, сесија ИД,
чија вредност е ова навистина долго алфанумерички стринг.
>> Значи тоа е сега вид на украсена на мојата рака, така што следниот пат кога ќе се погоди повторно
или рачно посетите оваа адреса во прелистувачот,
мојот интернет пребарувач по дефиниција на HTTP се случува да се претстават рака печат
повторно и повторно и повторно.
Значи иако на серверот не мора да знаете кој сум јас,
тие барем знам дека јас сум ист корисник или барем, поточно, истиот прелистувач.
И така ова е крајот како СЕДНИЦА superglobal се спроведува.
На серверот нема идеја кој сте кога ќе враќате веб-сајт за втор или трет пат
ако ви презентираме оваа страна печат.
И штом ќе го претстави дека рака печат,
на веб серверот суштина оди во малку база на сопствените
и проверки, добро, имам само видено рака печат на корисникот bo8dal3ct и така натаму.
Дозволете ми да видите какви информации на програмерот има складирано
внатрешноста на superglobal за овој корисник,
и тогаш дозволете ми да бидете сигурни дека тие податоци е повторно во внатрешноста на сесијата superglobal
така што на програмерот може да се ре-пристап до тие податоци
дури и ако тоа беше во собата неколку минути или часови.
Значи со други зборови, колачи, која доби лоша рап за некое време
поради несигурноста во пребарувачи и тие навистина може да се крши нашата приватност и сето ова,
тие всушност имаат голема корист, бидејќи без нив
вие постојано ќе биде да влезете во секоја страница Фејсбук ќе ја посетите
или секој Gmail мејл ќе прочитате ако на прелистувачот не имаат на некој начин на помнење
дека веќе сте најавени.
>> Така на овој начин cookies се испраќаат назад и напред низ жица.
Друга љубопитност за колачиња, особено тука, е дека ова е целосно во cleartext.
Нема енкрипција случува овде она,
и навистина сум користејќи HTTP во моментот.
Еден од нашите омилени моменти во CS50, кој сега е пред 2 години,
беше околу времето алатка наречена Firesheep излезе.
Ова беше слободна парче софтвер кој беше направен од страна на безбедносните истражувач
како повик за будење за заедницата да се каже колку atrociously спроведува
одредени автентикација механизми на интернет беа.
Па за некое време, Фејсбук е речиси целосно преку HTTP, без https.
Па дури и ако немаат идеја како крипто работи, s е безбедна
па тоа значи дека има барем некои енкрипциски вклучени.
Фејсбук се користи за криптирање на кориснички имиња и лозинки,
но веднаш штом ќе гледаше во вашиот боцка или вашите пораки или вашиот вести храна,
сето тоа беше енкриптирани.
Така беше Gmail додека само една година или 2 пред.
Во секое време ќе ме, да, тие се користат безбедна енкрипција,
но потоа тие не. И зошто тоа може да биде?
Зошто да не само користење криптографијата сите на време во употреба случаи како овој?
Што е тоа? Мислам дека слушнав нешто. [Студент] брзина.
Брзина, нели? Постојат начини околу ова.
Но ако сте само вид на се размислува за тоа логично, ако криптирате нешто,
што треба да направите барем малку повеќе работа.
Во pset 2 кога ќе спроведува Цезар или Vigenere или дури Crack,
само печати низа е релативно лесно.
Енкрипција, а потоа печати низа минимално бара малку повеќе работа.
>> За супер популарни сајтови како Google и Facebook,
ако треба да направат многу повеќе работа за секој корисник за секоја веб-страница тие посетуваат,
дека само се повеќе процесорско време.
И ако ви треба повеќе процесорот време, можеби ќе треба повеќе сервери,
што значи дека можеби ќе треба повеќе пари.
И така за многу години овој само навистина не беше најдобрата пракса.
Луѓето ќе ги користат SSL енкрипција само кога тие се потребни за да.
Но, се покажа и како овој човек со Firesheep направи супер јасен,
кога вие момци кои во моментов се на Фејсбук во моментов -
Од љубопитност, да видам дали ќе fess нагоре.
Ако сте на Фејсбук во моментов во некои табот, дури и ако тоа не е foregrounded,
е вашата рачно HTTP или HTTPS?
[Повеќе студенти] С С? [Смеа]
Во ред. Секое HTTP? Само 1? Во ред.
Така што сите од нас може да се пробие Фејсбук предвид дека момчето е во право сега.
За најголем дел ова стана вклучен по дифолт, барем во некои веб-сајтови.
И скратам приказната, ако вашиот веб сообраќај не е шифрирана,
не само што го HTML оди напред и назад низ WiFis енкриптирани,
па ги правите нештата како колачиња оди напред и назад низ воздухот
без каква било форма на енкрипција.
Значи, ако имате само малку програмирање такт или малку Googling вештини
да се најде слободен софтвер кој го прави ова, сите што треба да направите е да седиме во Старбакс
или седат во еден аеродром каде што има обично енкриптирани WiFi
и само да се види за клучни зборови, како set-Cookie: или PHPSESSID
затоа што ако имате технички такт само да се види на WiFi
за сите битови што тече низ воздухот за овој модел,
тогаш може да се каже дека PHPSESSID дечко се случува да биде bo8dal и така натаму.
А потоа повторно ако сте доволно технички такт или имаат право алатка,
можете да потоа само конфигурирате вашиот сопствен интернет пребарувач да започне презентирање дека рака печат
на Facebook.com, и Фејсбук е само ќе се претпостави дека сте тој тип
бидејќи сите знаат дека не е кој сте, но дека имате овој уникатен идентификатор.
Значи, ако украде дека единствен идентификатор и ја презентира на веб сервер како свој,
тие се само ќе ви покаже Новости на тоа лице
на тоа лице или пораки или боцка.
>> И јас би Google сега како да ја активирате HTTPS на Facebook за можеби.
Но тоа навистина е толку едноставно како што.
И така Фејсбук и Google и како го добиле навистина добар во тоа,
но да се внимава од сè повеќе и повеќе за сите веб-сајтови кои ги посетувате дека не користи HTTP
и има некој вид на чувствителни информации на нив,
дали тоа е финансиски или лични или слично.
Ако тие не го користите ова, сосема веројатно колачиња како ова може да биде многу лесно украдена
а потоа фалсификувани, а тоа е токму она Firesheep не.
Вие не треба да се биде програмер.
Сите ти мораше да ја направам е да имаат интернет конекција, симнете оваа бесплатна алатка,
и што ќе направите е да се најавите и тогаш тоа ќе ви покаже Фејсбук имиња
на сите во Сандерс, во овој конкретен демонстрации, околу вас
и сите ќе мораше да го направи беше кликнете на нивното име и софтверот автоматски процес
на душкаат дека куки, се презентира на Фејсбук како свој,
и Voila, ти си најавени
Значи ова е уште една од оние "не го направите тоа" официјално.
Ако имате свој домашна мрежа и дека сакате да нескопосник, со сите средства,
но сфати тоа не премине линија на еден универзитет животната средина.
>> Но цел тука е навистина да се нагласи не како да направите тоа
но како да се брани против овие видови на нештата.
И тривијална решение тука, иако тоа само по себе е недостатоци,
е навистина да се намали употребата на било кој веб-сајтови кои не се користење на HTTPS постојано.
Значи сајтови како Фејсбук и Google се повеќе имаат обележувачи
каде што може да се одлучат за овој вид на работа,
и банки имале со години за слични причини.
Па само малку страв фактор ако можеме. Но, тоа е тоа во мало.
Тоа е како на серверот се сеќава кој си.
И штом тие можат да се сеќавам на кој сте, тие можат да се сеќавам на ништо за вас
дека на програмерот има складирано во внатрешноста на оваа специјална superglobal нарекува $ _SESSION.
И за pset 7 ние го користите тривијално само да се сеќавам на цел број,
имено уникатен ID на корисникот кој сте најавени,
така што ние знаеме тие сте биле таму пред.
Било какви прашања, тогаш на седници или колачиња или слично?
Firesheep не функционира, како и повеќе,
и треба да се стави вашиот компјутер во посебен хаотичен режим
па ти си, всушност, слушање за сообраќај покрај себе.
Значи, ако сте моментално симнува Firesheep, сфати тоа не е толку лесно
како што некогаш беше да се демонстрира.
Во ред. И не го прават тоа во Сандерс. Направете го тоа дома.
Бази на податоци.
Една од работите што го правевме во pset 7 многу намерно
е ние да ви даде примерок база на податоци маса за корисници кои има неколку корисник ИД,
некои кориснички имиња, а некои криптирани лозинки него.
И како што ќе видиме, ако веќе не сте, ви се случува да мора да се промени на табелата малку.
Сте ќе треба да додадете некои кеш за секој од корисниците во таа табела,
и ви се случува да треба да додадете уште историја маса, портфолија маса,
или можеби го нарекуваат нешто друго.
Но во однос на размислување за тоа како да го направите ова, ајде да се отвори оваа алатка
кој се користи во петокот, но ако непознат, уредот доаѓа со алатка
наречен phpMyAdmin која е случајно напишана во PHP,
но неговата цел во животот, откако ќе се најавите тука како jharvard со црвено,
е да ми даде лесен начин на гледање и менување на мојата база на податоци.
>> База на податоци која јас се кандидирам на апаратот се нарекува MySQL.
Ова е многу популарна, а тоа е слободен софтвер со отворен код база на податоци која е прекрасно лесен за користење,
особено со предниот завршува вака.
Што е ова алатка ви овозможува да го направам, на пример, е ѕиркаат наоколу маси.
Дозволете ми да оди напред и да го направите тоа.
Во петокот ние направивме табела наречена студентите кои беше супер едноставна.
Тоа беше колоните 3 - ID, назив, и е-мејл - и јас рачно вметнува неколку редови
како Давид и Мајк во овој конкретен пример.
Да го земеме овој малку подалеку, и да претпоставиме дека сакаме да се сетам на повеќе
од само име и е-мејл за корисникот.
Дозволете ми да кликнете Структура се тука на врвот.
И повторно, pset ќе шета низ потребните чекори тука,
па не грижете се ако некои од тоа е малку брзо.
Потоа јас ќе одам да кликнете овде.
Одам да додадете некои број на колони по e-mail
бидејќи сакам да додадете нешто како куќа.
Јас заборавив да снима куќата на студентот.
Дозволете ми да кликнете на Оди, и сега имаме оваа форма која за жал е малку широк од лево кон десно,
но јас ќе одам да се јавите на името на ова поле куќа,
и тогаш типот јас сега треба да одберете.
Значи, да има краток разговор за различни видови во MySQL
затоа додека PHP е слабо внесе и вид на игра брзо и лежерно со видови,
во базата на податоци, особено тоа е супер важно да всушност употреба пишување за да ги искористат
бидејќи една од работите MySQL и други бази на податоци мотори може да направи за вас
се осигура дека вие не стави лажни податоци во базата на податоци.
Ова е вид на бесплатен грешка проверка на располагање на вас.
>> За куќа ние очигледно не сакаат тоа да биде цел број, кој е 32-битна вредност во MySQL.
Ние не зборуваме накратко во петокот околу varchar, која се залага за променлива должина знак.
Што е ова? Ова ви овозможува да наведете дека сакате ова да биде низа на некој вид.
Вие навистина не знаеме однапред колку долго е,
па ние произволно ќе кажам куќа името може да биде 255 карактери,
но вие би можеле да одат со 32, 64 - било кој број навистина.
Но, предноста на користење на varchar над областа наречена знак е она?
Само интуитивно ако дојдете тука, забележително е знак и има varchar.
Varchar е променлива должина знак; знак е фиксна должина знак.
Значи само врз основа на таа дефиниција, она што е предност или недостаток на секоја од овие?
Со други зборови, кој се грижи за разлика, или зошто треба да се грижите?
>> Да. [Студент] varchar има повеќе флексибилност, но зазема повеќе меморија.
Добро. Varchar зазема повеќе - Ајде да видиме. Не сум сигурен ако сум слушнал тоа право.
Може да се каже дека уште еднаш?
[Студент] реков varchar веројатно има повеќе флексибилност, но тоа трае повеќе меморија.
Интересно. Во ред. Varchar веројатно ви дава повеќе флексибилност, но зазема повеќе меморија.
Таа не е задолжително точно.
Тоа зависи од контекстот, но, ајде да се вратам на тоа.
>> [Нечујни студент одговор] Токму така.
Тоа е всушност случај знак обично ќе го користи повеќе меморија
бидејќи знак, како во C, е како стринг, тоа е низа од карактери.
Значи, ако се каже знак поле со должина од 255,
базата на податоци е буквално ќе ви даде 255 карактери.
И ако куќата завршува се Mather и 6 карактери,
ти си трошат повеќе од 200 карактери.
>> Па varchar ефикасно користи само како многу знаци што е потребно
до максимален износ.
Но цената што ја плаќате е, всушност, перформанси, потенцијално.
Ако знаете однапред дека сите ваши жици се случува да бидат 8 карактери -
На пример, да претпоставиме дека ви се потребни лозинки со должина од 8 -
главата на користење на знак област по повод, иако не често,
е да се одреди фиксна должина за нешто како лозинка
бидејќи сега базата на податоци може да биде дури и попаметни.
Ако таа знае дека секој знак поле, секој стринг во колона е иста должина,
ќе се вратам функција на случаен пристап.
Можете да скокаат околу помеѓу различните знак полиња во вашата база на податоци маса
бидејќи мислам на базата на податоци како редови и колони.
Значи, ако секој еден од стрингови е иста должина,
знаете дека првиот е во бајт 0, следниот е во бајт 8
а потоа 16, а потоа 24 и така натаму.
Значи, ако сите стрингови се со иста должина, можете да скокнете низ многу поефикасно.
Така што може да биде од корист во поглед на перформанси,
но обично немате луксузот на знаејќи однапред,
па varchar е начин да се оди.
Еве уште еден детаљ дека дури Фејсбук налетав на крајот.
Ints се големи, а ние вид од нив користат стандардно секое време сакаме број,
но тоа е само 32 бита.
>> И иако Фејсбук сосема не имаат 4 милијарди корисници сега,
таму е дефинитивно некои луѓе таму со повеќе сметки
или сметки, кои се отворени, а потоа затворен,
и така Фејсбук себе верувам дека пред неколку години мораше да се транзиција од int
да, како што е во потполност се нарекува, BIGINT, што е само 64 бита, наместо.
Значи ова е премногу е дизајнерска одлука.
Ќе биде неверојатно среќни ако твојот последен проект се врти стартување,
има 4 милијарди и 1 корисници, или дава да потрае,
во кој случај со користење ints може да биде малку избрзан.
Но, во реалноста, вашите корисници табелата е веројатно во ред со ints.
Но, за нешто како pset 7, како и вашата историја маса,
може да имаат илјадници, милиони корисници, ако прерасне во etrade.com.
Значи додека вие не би можеле да имаат повеќе од 4 милијарди корисници,
оние корисници, имате може да има повеќе од 4 милијарди трансакции со текот на времето -
купува и продава и работите во нивната историја.
Значи, ако правиш предвиди - повторно, овие се добри проблеми да имаат, ако имате ова многу податоци -
ако не се предвиди податоците надминува големината на int,
случува со нешто како BIGINT е правец често не е доволно усвоени од страна на дизајнерите
затоа што луѓето фигура која нема да биде проблем,
но тоа е тоа лесно да се избере нешто поголемо од тоа.
Децимална ние користиме во 7 pset, кој се одредува фиксно прецизност
па можете да се избегне прашања, вклучувајќи плови и двојки и reals и слично.
>> А потоа, тука е некои други области тука. Ќе бран нашите раце на нив до одреден степен.
Но, датуми, времиња сите имаат пропишаниот формат во MySQL,
и предноста на чување датуми како датуми и не varchars
значи дека базата на податоци, всушност може да ги реформатирате во различни формати,
дали формат САД или европските формат или слично - но што сакате -
многу поефикасно отколку ако тоа се само некои генерички varchar.
А потоа, тука е некои други бинарни, VARBINARY, грутки.
Овие се бинарни големи објекти, и вие исто така може да се сместат бинарни податоци
како и геометриски податоци во база на податоци.
Но, за нас ние обично ќе се грижи за ints и varchars и слично.
Да завршам овој пример со куќата.
Куќа Одам да произволно велат дека ќе биде 255 карактери.
Потоа Вообичаената вредност би можеле да го направите тоа.
Ние би можеле стандардно стави сите во Mather куќа, на пример.
Тоа е како ние би можеле да се каже дека базата на податоци
треба да обезбедат дека некој секогаш има вредност. Но јас ќе го оставиме тоа да биде.
Всушност, за луѓето кои живеат надвор од кампусот, а не во куќа,
можеби и јас всушност сакаат да се каже дека стандардната вредност за куќа е NULL,
и тогаш треба да се провери ова поле и да се каже база на податоци тоа е во ред ако куќата на корисникот е NULL.
>> Повторно, ова е уште еден одбранбен механизам може да се стави во место
па дури и не треба да го ставите во вашиот PHP код е задолжително.
Базата на податоци ќе се осигура дека работите се или не се NULL.
А потоа на крај, атрибути.
Ниту еден од овие се навистина релевантни.
Бинарни, непотпишана - ниту еден од тие се релевантни за varchar.
Индекс.
Дали некој знае или се сеќавам или имаат претпоставка за тоа што индексот е
за нешто како куќа?
Тоа исто така е всушност важен и релативно лесно дизајн одлука.
За оние кои се уште не го видел, во петокот ние разговаравме кратко за основно клучеви.
Во базата на податоци маса, примарен клуч е поле или колона
кои еднозначно ги идентификува редови во табелата.
Па во тековната маса имаме лични карти, имаме имиња и пораки.
Која од овие е најдобриот кандидат да биде примарен клуч,
чија улога е да се идентификуваат уникатно редови?
Веројатно проект.
Веројатно, ние исто така може да го користите она што иако?
Можеби можете да користите е-мејл затоа што во теорија тоа е единствен
доколку луѓето се делат мејл сметки.
Но, реалноста е дека ако сте со користење на нумерички проект како 1234,
тоа е само 32 бита, додека е-маил адреса може да биде толку многу бајти или ова многу бајти.
Па во смисла на ефикасност за единствени идентификатори,
тоа се стреми да биде добра практика само да се користи int
дури и ако имате некои стринг кандидат што веројатно може да се користи.
>> За нешто како куќата, ова не треба да биде примарен клуч
затоа што тогаш само 1 човек може да живее во Mather и 1 лице во Currier и слично.
Слично на тоа, ова не треба да биде уникатна.
Разликата помеѓу основното и уникатен е тоа што во случај на нашите сегашни маса,
ID ќе биде примарна но е-мејл не е основно за причината ние едноставно се споменати -
изведба - но сепак треба да биде уникатен.
Па се уште може да ја изврши уникатност без да се прави барањето
дека тоа е супер важно примарна област.
Но ова е доста корисни: Индекс.
Ако знаете однапред за вашите конечниот проект за pset 7, или во целина,
дека на ова поле куќа е ќе биде нешто што се бара на многу
користење на одберете клучен збор или нешто друго,
тогаш превентивно да кажам базата на податоци да работат својата магија
и бидете сигурни дека тоа создава во меморијата било фенси структури на податоци потребни
да се забрза пребарувања врз основа на куќа.
Можеби тоа ќе се користи хаш табелата, можеби тоа ќе се користи поврзани листа.
Во реалноста, тоа има тенденција да се користи дрво, често структура наречена B-дрво -
не е бинарно дрво туку B-дрво - што е многу широк дрво
кои може да се види во класа како CS124, на структури на податоци класа.
Но, на кратко, вие не мора да се грижите за тоа кога користите паметни база на податоци софтвер.
Вие само може да се каже, "Индекс ова поле за да можам да го бара на тоа поефикасно."
>> Ако го оставите ова исклучи и ќе се обидат да пребарување за секого во базата на податоци, кој живее во Mather,
тоа ќе се префрлат во линеарно пребарување.
И ако имаш 6000 undergrads сите живи во некои куќа,
ви се случува да пребарувате на целата маса да се најде Matherites,
а ако се каже индекс, се надевам дека тоа ќе биде нешто блиску до логаритамска пребарување
да се најдат оние видови на студенти.
Ова е само слободна функција да го вклучите,
иако тоа не дојде со одредена цена на некои сума на просторот.
И на крај, авто-прираст, оваа област АИ,
што само значи дека ако тоа е int и не сакате да се грижи за тоа зголемување се
секој пат кога има нов корисник, проверете,
и секој корисник кој добива вметнува автоматски ќе добие нов проект.
Да кликнете на Зачувај, а сега ајде да најде мана со овој дизајн.
Ако одам во Барајте, најава дека двете Мајк и мојата куќа е NULL.
Јас да го користите phpMyAdmin за уредување на тоа рачно.
Јас може да оди тука и напишете Mather, а потоа притиснете ентер,
и сега забележите на табелата е поинаква.
Но забележите можев да сторам нешто друго, како и.
ID Дејвид е 1, па phpMyAdmin повторно е само административна алатка;
ова не е нешто вашите корисници некогаш ќе се види.
Значи, ако јас наместо кликнете на SQL јазичето до врвот -
и повторно, pset 7 ќе ве запознаам со повеќе од овие прашања -
Јас рачно да се изврши SQL структуриран јазик за пребарување команда
Ажурирање корисници СЕТ куќа = 'Pfoho "КАДЕ id = 1.
Овие SQL queries се, убаво е доволно, многу може да се чита од лево кон десно.
Ажурирање на корисниците табела, поставете го полето наречен куќа Pfoho
каде ID на корисникот е 1.
Или јас дури и не можеше да стори каде внесувачот = 'malan@harvard.edu.
Толку долго како што уникатно ме идентификува, кои ќе работат како добро.
Но, проект има тенденција да биде повисоки перформанси, па ајде направите тоа.
Да кликнете на Оди. Океј, lecture.users не постои. Што ми е грешка?
Што е на масата, всушност, наречен тука?
Таа се вика студенти само затоа што тоа е она што ние го сторивме се тука во горниот лев агол.
Таа се вика студентите не корисници. Па кликнете на Оди сега.
1 ред погодени. Барањето траеше 0.01 секунди.
Ако јас кликнете Browse сега, сега Malan живее во Pfoho.
Значи тоа е уште еден вкус на SQL, но pset ќе ви прошетка низ малку повеќе од тоа.
>> Има еден глупав одлука јас веќе сте направиле тука.
Јас би рекол дека оваа база на податоци дизајн е неефикасна
затоа што повеќе луѓе додадам на студентите маса,
повеќе од нас да почнам додавање, повеќе од TFS почнам додавајќи,
ние ќе почнете да се види она технолошки вишок во оваа табела?
>> Да. [Студент] Гледајќи дека тоа е во учениците, ние сме со користење на истите [недоловим]
Иста - Точно, точно.
Значи, ако 400 луѓе живеат во Mather, или дава да потрае,
на крајот на оваа табела ќе има 400 редови, кои велат дека "Mather", "Mather"
"Mather", "Mather", "Mather".
Ние си трошат сите овие бајти, и има неколку takeaways таму.
1, тука е луд агол случај ако некој плаќа многу пари
и преименува Mather, ние сега мораме да го промениме нашиот целата база на податоци табела.
Тоа нема да се случи често, иако Pfoho што некогаш се нарекуваше Северна куќа пред 15 години,
па тоа се случува. Но, тоа не е сè што привлечни.
Повеќе привлечни од еден агол случај како оној на кои им е потребна да се ажурира податоците во рефус
за базата на податоци е зошто складирање Mather повторно и повторно и повторно и повторно?
Тоа е многу знаци, 6 карактери.
Не може да се направи дури и подобро од тоа, особено за Pforzheimer?
Сигурно можеме да направиме подобро отколку што многу ликови.
Зошто да не само дружат единствен идентификатор со секоја куќа
и продавница, во којашто за секој корисник? Значи, да се обидат ова.
Наместо само користење на учениците маса, дозволете ми да одам до моето предавање база на податоци се тука во горниот лев агол.
Забележете тука се вели Креирај табела.
Дозволете ми да креирате нова табела наречена куќи.
Бројот на колони ќе биде 2. Enter.
Сега имам 2 полиња.
Одам да се јавите ова име, и тоа ќе биде varchar должина од 255,
>> но тоа е прилично произволно. Дозволете ми да го стави ова овде долу на конвенцијата.
Па стави лична карта се тука. Да даде секоја куќа единствен идентификатор.
Да даде секоја куќа име.
Да се ​​каже дека идентификатор ќе биде непотпишана само со конвенцијата да користат само за позитивните бројки.
Ајде да одиме напред и да даде оваа авто-прираст поле за сега.
И не ни треба нешто друго?
Ајде да одиме напред и кликнете на Save.
Сега имам втората табела.
Забележи како настрана ова е малку криптичната SQL командата
дека би требало да напишеш рачно ако не користите административна алатка како phpMyAdmin.
Значи уште една причина ние го користиме.
Тоа е прекрасно корисни вид на педагогичен, бидејќи можете да кликнете на околу
и да дознаам како работите работа од само копирање и вметнување што phpMyAdmin не.
Но, на маса Креирај команда е она што беше само погубен, а тука е мојата маса.
Дозволете ми да оди напред сега и да употребуваат суровини со SQL наместо поедноставуваат со кликнување на Insert табот.
Дозволете ми да го вметнете во куќи,
и јас одам да го каже името на куќата се случува да имаат вредност на "Mather.
Тоа е тоа. Оваа синтакса е малку повеќе криптичната.
Ова е името на областа што сакате да го внесете.
Тоа се вредности што сакаме да го вметнете во тие области. Дозволете ми да кликнете на Оди.
1 ред вметнува презеде 0,02 секунди. Дозволете ми да кликнете Browse сега.
>> Забележите ако јас кликнете Browse, има Mather, чиј проект е со автоматизација на бројот 1.
Дозволете ми да направам уште еден. Дозволете ми да оди во табот SQL.
INSERT INTO куќи. Името на куќата се случува да имаат вредност на Pfoho и така натаму.
Оди. И можам да го задржи тоа повторно и повторно и повторно.
Или ако се досадуваат со користење phpMyAdmin, можете само да го користите Внеси јазиче
и не треба да напишете суровини SQL.
Вие само може да го тресне надвор побрзо од пишување, на пример, Currier, Enter,
и сега ако ние кликнете Browse, има Currier со проект на 3.
Значи тоа е она што ние подразбираме под авто-прираст.
Но сега мораме да поправи нешто и за учениците.
Во студентите што треба податочен тип на куќата областа сега да биде?
Тоа треба да биде цел број, нели?
Значи целта е да се фактор надвор, инаку позната како нормализација, маси
така што ние не ја запази информацијата redundantly во било кој од моите маси.
И повторно, на патот бевме овде се случува да кажам Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, што е многу непотребни
во однос на непотребност на карактери.
Па дозволете ми да оди напред и да го промените ова со кликнување структура,
и дозволете ми да оди напред и да се провери надвор од куќата поле, кликнете промени,
и сега ќе одам да ја промените оваа да биде int.
255 не е релевантен.
Дозволете ми да оди напред и да се каже дека е во ред, ако тоа е уште NULL. Зачувај.
Сега маса студентите е променет успешно,
и ќе забележите повторно куќа е int.
Како настрана, ги игнорира број во загради кога станува збор за ints.
>> Ова е за наследството причини.
Назад во денот, кога ти не треба GUIs, вие наместо имаше командната линија на животната средина,
на 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 query како што следува.
SELECT * FROM студентите ПРИДРУЖЕТЕ куќи -
И сега што полиња сакаме да се приклучат на?
Значи students.house = houses.id.
>> А малку криптичната, но овој дел значи буквално се создаде нова привремена табела
тоа е резултат на спојување на студентите и куќи.
И како сакаш да се комбинираат на врвот на прстите тука?
Постави куќата на полето еднаква на куќи 'на студентите ID поле.
И ако јас сега кликнете на Оди, ќе се вратам токму она што јас се надевав да.
Давид е во Mather, Мајк е во Pfoho, и јас исто така се види на единствени идентификатори.
Но поентата е сега имам комплетна табела.
И така готова брза тука за pset 7 или навистина за финалниот проект:
Ако мислите дека сте чување секое парче на информации redundantly,
дали тоа е куќа, можеби тоа е град, држава, и ZIP
каде ZIP може да обично, но не секогаш се користи како единствен идентификатор,
одат преку вежба ментално и потоа со нешто како phpMyAdmin
на факторинг дека заедничките податоци, бидејќи особено како вашиот сајт добива повеќе и користи
и повеќе станува популарен, ова е начинот на кој можете да бидете сигурни дека сè е супер брз,
со давање на базата на податоци како многу загатки како да уникатност како е можно.
Тоа беше многу.
Било какви прашања? Во ред. Да го земеме еден 5-минутната пауза таму и да се регрупираат.
Во ред.
Следниве е пример кој се користи пред неколку години кога отидов CS161,
која е оперативни системи класа на колеџ
кој е познат по тоа неверојатно, но луди сума на работа,
и се фокусира навистина на некои од ниско ниво проблеми кои се јавуваат во оперативни системи
а исто така и во светот на бази на податоци.
>> Приказната што беше кажано од страна на мојот професор, Марго сода, таа година беше како што следува.
Да претпоставиме дека имате малку dorm фрижидер за вас и вашиот цимер
и двајцата навистина ви се допаѓа млеко.
Значи ќе дојдеш дома од класа еден ден, вашиот цимер се уште не е таму,
ќе го отворите фрижидерот и да сфатите, "Ах проклето, ние сме надвор од млеко."
Па ќе го затворите фрижидер, ви прошетка низ улица да CVS
и да добијат во повеќе долги редици да купат млеко во CVS.
Во меѓувреме, вашиот цимер доаѓа дома од неговата или нејзината класа,
доаѓа во соба, го отвора фрижидерот навистина сакаат малку млеко,
отвора фрижидерот и "По ѓаволите, не млеко".
Па тој или таа ја затвора фрижидер, прошетки низ вратата, и оди до ABP
или некаде различна од CVS каде што не се случува да се судрат еден во друг
да одам да купам некои млеко.
Се разбира неколку минути подоцна, на двајцата ќе ви се вратам дома
и сега имате два пати повеќе млеко како што всушност сакаше.
И се млеко, сега тоа се случува да одат лошо, бидејќи ви се допаѓа млеко
Но, вие не навистина ми се допаѓа млеко, па сега имате премногу млеко, па затоа се случува да се влошат.
Ова е страшна, страшна ситуација.
Што може да се реши оваа дилема, ако бевте прв цимер дома? Да.
[Студент] Треба да се остави белешка. [Смеа]
Добро. Треба да се остави белешка.
Вие треба да се стави пост-тоа белешка или како да кажеш, "Однесено за млеко"
и потоа вашиот цимер концептуално би биле заклучени надвор од всушност тоа го прават.
Или можете да се обратите 1 чекор понатаму.
Вие буквално може да се заклучи фрижидер со некој вид на катанец,
и сега вашиот цимер буквално ќе бидат заклучени надвор од фрижидерот.
Ако ние се генерализира назад кон програмирање,
речиси може да се мисли на фрижидерот како некој вид на променлива или struct,
некој вид на сад за информации.
Проблемот фундаментално тука е дека и двете од вас им беше дозволено да изврши увид
или читаат состојбата на оваа податочна структура,
но го гледа во различни времиња и уште двајцата ќе ви донесе одлука
врз основа на состојбата на светот во овие различни моменти во времето.
Значи се сте затворени во фрижидер, ќе се барем избегнува вашиот цимер
од тоа што биле во можност да изврши увид во состојбата на светот,
па тој или таа не би можел да направи истата одлука.
Значи бази на податоци, како што се испоставува, имаат овој проблем постојано.
>> Ајде да видиме дали можеме да конструира сценарио.
Да претпоставиме дека сте вид на лош човек и ќе отидете на Банката на Америка
или еден од другите места на плоштадот, кои имаат неколку банкомати рамо до рамо,
и некако сте сфатиле како да се дуплираат банкомат картичка - не е толку тешко.
Тоа е само магнетна лента.
И уште па што сакате да се обидете да направите е да се игра оваа игра
при што ќе се стави 1 картичката во 1 машина, уште една картичка во друга машина,
и вие во суштина сакаат да се обидат да ги повлечат парите истовремено,
бидејќи замисли дека оди приказната како што следува.
Машината на левата зема вашиот картичка и вашиот PIN,
а потоа ќе каже: "Дај ми 100 $."
АТМ е програмиран прво да се направи изберете на својата база на податоци или еквивалент -
што базата на податоци тоа е користење - за да ја видите го овој корисник да има најмалку $ 100 во неговиот или нејзиниот профил?
Ако е така, тогаш плукаат од 100 долари и одземе 100 $ од нивниот биланс.
Но, се разбира, ако има повеќе машини тука или повеќе начини на контрола
состојбата на тој свет, банката свод, за да видите колку пари имате,
Претпоставувам дека само со шанса машина на левата и десната
и побара тоа прашање во приближно ист момент во времето.
>> И тоа сигурно може да се случи. Банкомати се компјутери, овие денови.
Значи, ако на машината на левата вели: "Да, имате најмалку $ 100"
Во меѓувреме машината на правото вели: "Да, имате најмалку $ 100"
потоа и од нив продолжи да ги заврши своите програми и всушност плукаат од 100 долари
и да каже, "Претходно сте имале 200 $."
"Дозволете ми да го ажурирате променлива да сега биде 100 $ лево на сметката."
Но, ако двете од нив се провери вашата сметка и сфатив дека тоа е $ 200
и двете од нив, тогаш направете математика и велат дека 200-100,
машините имаат потенцијално плукаат две од по 100 долари за секоја машина,
но тие само ажурирани вашиот сума сметка да биде $ 100.
Со други зборови, сте извадени 200 $, но бидејќи тие прегледано држава на светот
истовремено, а потоа донесе одлука врз основа на таа вредност,
тие не би можеле да го направите математика на крајот правилно.
Значи во банка ситуација премногу навистина сакаат да имаат некој вид на болест
така што веднаш штом ќе го проверува состојбата на некои променлива
тоа е навистина важно, како вашата сметка,
не дозволувајте некој друг да донесува одлуки врз основа на тоа се додека не се направи тоа нешто,
каде што во овој случај вие сте банкомат на левата страна.
Заклучите сите други надвор.
Ти всушност може да се постигне овој ефект во неколку различни начини.
>> Наједноставниот начин во MySQL е линија на SQL дека ти дал
во проблемот сет спецификација која изгледа токму вака.
Вметнете во табелата - она ​​што се вика - лична, симбол, а дел, голем број на акции,
следните вредности, на пример.
Ако не сте ги прочитале на спец сепак, ова е пример вклучуваат како да се обратите за
купување на 10 акции на оваа денар акции за претседател Skroob,
чии кориснички ID случува да биде број 7?
Ова се вели INSERT INTO маса следниве ID, симбол, и број на акции
од 7 'DVN.V, и 10.
Но - но, но, но - втората линија е важно.
ЗА дупликат клуч Ажурирање акции = акции + ВРЕДНОСТИ (акции).
Така целосно криптичната изглед на прв поглед.
Но, фактот дека оваа пребарување SQL, иако тоа завршува излез 2 линии,
е 1 долго пребарување, тоа значи дека атомската
во смисла дека ова прашање или ќе биде извршена сите заедно или не на сите.
И по дефиниција на MySQL, тоа е како тие ги применија ова пребарување.
Тоа е по дефиниција во упатството гарантирано да изврши одеднаш или не на сите.
Мотивација за ова е како што следува.
Ако во овој случај ќе се обидуваат да купи 10 акции на акции,
тоа е вид на истата приказна како млеко, тоа е вид на истата приказна како банкомат.
>> Ако се направи не е грешка на користење на оваа синтакса
но наместо избирање од базата на податоци за да видите колку акции на оваа денар акции
не претседател Skroob имаат, и да претпоставиме дека има 10 акции,
а потоа некои од секунда подоцна потоа направи Ажурирање на информациите,
што е уште една изјава во SQL кој се вели дека се оди напред и да додадете уште 10 акции
на неговата актуелна 10 така што идеално вкупниот е 20,
проблемот е затоа што во базата на податоци системи денес и затоа што во денешните компјутери
имаш повеќе процесори, повеќе јадра -
со други зборови, компјутери буквално може да се прави повеќе работи одеднаш -
нема гаранција дека вашиот изберете и вашиот Ажурирање во овој случај
се случува да се случи да се врати назад.
Така лошо сценарио би било да направите Избери
за да видите колку акции на овој парк денар не Skroob имаат,
а потоа само случајно друга база на податоци пребарување е извршена -
можеби тоа Skroob во друг прозорец на пребарувачот се обидува да купи 10 акции
во друг прозорец целосно, многу сличен на банкомат -
и да претпоставиме дека некој друг барањето добива помеѓу изберете и ажурирање.
Тоа може да биде случај дека Skroob сега губи некои број на акции
затоа што друг процес е контрола на состојбата на својот свет,
или тој добива повеќе акции отколку што треба да има.
Ние не би навлегувал во деталите на токму она што оние кои се особено приказна линии ќе биде,
но поентата е ако треба да се провери променливи вредност и потоа да се донесе одлука,
ако постои ризик од некој друг прави нешто помеѓу оние 2 извештаи,
како што може да се случи во мултипроцесорски системи, во повеќе јадрени системи,
компјутери со способноста да се направи повеќе работи одеднаш, лоши работи може да се случи
како банкарски сметки се дебитира погрешно, купување двојно повеќе млеко,
или во овој случај погрешен број на акции.
Но, има еден полесен начин да се размислува за тоа.
>> Излегува дека SQL, исто така, поддржува, ако конфигурирате вашата маса правилно,
нешто што се нарекува трансакции кои би рекол дека е всушност дури и полесно да се разбере
од ова, но тоа не е 1-лагер, па тоа е всушност малку повеќе вклучени.
Постои буквално изјава во SQL наречен СТАРТ трансакција.
Исто како таму е SELECT, UPDATE, INSERT, избришете и ПРИДРУЖЕТЕ и еден куп други,
постојат клучни зборови како СТАРТ трансакција.
И она што тогаш го стори во контекст на pset 7 -
вие не мора да го стори тоа за pset 7, тоа е експлицитно отфрлени како не е потребно,
но за конечниот проекти може да биде корисно -
ако ти се јавам за пребарување на СТАРТ трансакција, а потоа уште пребарување
а потоа уште пребарување и потоа уште, уште, и уште,
оние барања не, всушност ќе биде извршена додека не се јавите на SQL изјава COMMIT,
на која точка, без разлика дали тоа е 2 изјавите или 20 извештаи, сите тие ќе бидат извршени одеднаш,
што значи никој друг не случајно може да се купи премногу млеко или дебитна премногу пари
или купи премногу акции, бидејќи сите ваши пребарувања ќе се изврши
назад кон назад да се врати да се врати.
И ова е супер важно, особено кога правиш нешто како ова.
Ова е еден арбитрарен пример во која се вели ајде ажурирање на банкарска сметка
со поставување рамнотежа еднаква рамнотежа - $ 1000, каде што бројот на сметката е 2.
А потоа втората изјава е сега да депонира дека 1000 $
во нечија банкарска сметка чија сметка број е 1.
>> Со други зборови, ова е совршен пример за тоа каде сакате да бидете сигурни дека
дека и двете од овие извештаи се случи или воопшто не
затоа што во спротивно клиент нема да се зезнав
и ви се случува да ги преземе своите пари и не се депонира на друго место,
или банката ќе се зезнав каде што ви се случува да депонираат пари
но не и всушност го одземе од сметката на корисникот.
Значи сакате и двете од нив да се изврши заедно.
Така влегува во светот трансакции.
Значи тоа е нешто да се задржи во задниот дел на вашиот ум,
не толку за целите на само еден завршен проект,
но ако сакате да се земе вашата завршен проект некаде,
ако сакате да стартувате некоја компанија околу него,
ако сакате да го реши проблемот некои студент групата на кампусот
а всушност има жив, активен веб-сајт, тие се вид на суптилна грешки кои можат да настанат
ако не доста мислам преку она што може да се случи ако 2 лица
се обидуваат да пристапите до вашиот сајт во буквално истиот момент во времето,
при што нивните барања инаку би се испреплетени.
>> Подготвени за некои JavaScript, закачка од него?
Ова е нашиот последен јазик за семестар. Во ред.
За среќа, JavaScript изгледа многу, многу, многу сличен на 2 јазика, Ц и PHP,
ние го направивме досега.
Нема вклучите во pset 7, но тоа е неверојатно корисна алатка
кога станува збор за правење веб-базирани конечниот проекти или навистина само веб програмирање поопшто.
Така брз преглед на нешто што се нарекува ДОМ.
Тука е супер едноставна веб страница, која навистина само вели здраво, свет
и во насловот и во телото.
Како вовлекување е сугерирајќи за некое време,
навистина постои хиерархија на веб страници.
Јас може да привлече истата програмка на HTML како дрво,
размислување назад кон нашите дискусии на структури на податоци во C, како што следува.
Имам некои посебни root јазол наречен документот јазол,
и ќе видиме аналогни на ова JavaScript за само еден миг.
Првото дете и единствено дете на што во овој случај е HTML таг.
Нема директна мапирање на DOCTYPE.
Тоа е посебна работа, па ние само треба да го игнорира кога станува збор за овој ДОМ,
овој документ Object Model дрво.
Забележете дека таг HTML, која сум прикажан произволно како правоаголник,
има 2 деца: главата и телото.
>> Оние кои се слично подготвени како правоаголници.
Тоа е значајно сликовито дека главата е лево од телото.
Импликацијата е дека главата на прво место во дрво.
Па таму е всушност нарачување на дрвото кога ќе го нацрта тоа како оваа,
иако форми и какво ли не се произволни.
Главата во меѓувреме има еден дете вика насловот,
и насловот, всушност, има свои деца, што е "Здраво, свет",
која јас намерно привлече како овална тука за да се направи тоа малку различен од правоаголникот.
Овие правоаголници елементи, додека Здраво, светот е навистина еден текст јазол.
Така, тоа е еден јазол во стеблото, но тоа е друг тип на јазол
па јас го привлече произволно поинаку.
Слично е телото имате дете вика здраво, свет, како и,
толку различни јазол иако тие се случајно истиот текст,
но сум го извлечат со користење на ист облик. Па кој се грижи?
Па, она што е убаво за HTML е дека тоа ја имаат оваа хиерархиска природа.
И она што е убаво за JavaScript и особено библиотеки кои се слободно достапни
и популарна како jQuery, можете да отидете на дрво структура толку неверојатно лесно.
Секоја од работите што го правевме во C со покажувачи и traversing дрвја и recursing на јазли
левото дете на десно дете, одеднаш ние да ги сортирате на земаме здраво за готово
како неверојатно просветителската ако не е малку фрустрирачки
но не и скоро ефикасен начин да се обратите за програмирање.
И така со овие повисоко ниво јазици како JavaScript
ќе бидете во можност да се движите оваа дрво многу повеќе интуитивно.
>> И навистина синтаксата ќе биде сосема познато.
Ако никогаш не сте виделе вклучите Javascript пред, ова е навистина убаво референца
од Mozilla луѓе, на луѓе кои прават Firefox,
па се чувствуваат слободни да пребарувате дека во својата погодност.
Што ќе најдете - и овие слајдови се идентични со она што се користи пред некој ден -
Слично на тоа, главниот е нема.
Па кога ќе напише програма во JavaScript, не постои основна функција.
Вие само на проектот пишување код.
Но клучна разлика помеѓу вклучите Javascript-и C и PHP
е дека додека C и PHP досега биле извршени серверот
од страна на машината во овој случај или поопшто од страна на серверот,
JavaScript преку дизајн обично се извршува од страна на прелистувачот.
Со други зборови, може да напишете JavaScript код, како ние сме за да,
на сервер во апаратот, но го вклучуваат, меѓу вашите HTML, меѓу вашиот CSS код,
меѓу вашите GIFs и вашиот PNGs и вашите JPEG слики
така што кога корисникот посети вашиот веб страница, ако сте со користење на JavaScript,
дека JavaScript код доаѓа од серверот на интернет пребарувач,
и тоа е интернет пребарувач, кој всушност го извршува.
Значи ова има значајни импликации за дури интелектуална сопственост.
Тоа е вид на глупо да ни помислувај на заштита на вашиот ИП кога станува збор за JavaScript код
бидејќи по природа на јазикот станува погубен обично прелистувач страна.
>> Можете да го помрачавам, што значи дека може да го направите да изгледа лудо и грдото
без празни места, ужасна променлива имиња, да се направи тоа потешко за луѓето да крадат вашата IP,
но клучот е во тоа што се извршува прелистувач страна.
Иако како настрана вклучите може да се користи серверот,
најчестата употреба случај во моментов се уште е на прелистувачот.
И тука е она што изгледа. Тука е ако-else if-друго изгради само како C, исто како и PHP.
Тука е Булова израз кога ќе "или" 2 работи заедно.
Тука е кога вие "и" 2 работи заедно.
Тука е прекинувачот изјава, која е слична на PHP
во кои можете да се префрлиш на различни типови на вредности.
Петелки слично имаат за петелки тука, кои се структурирани идентично на она што сум го видел досега.
Додека петелки, имаме направите додека петелки.
Променливи, некогаш толку малку поинаква.
Вие не декларираат променливи како што направи во PHP и C,
но слично е да го вклучите Javascript слабо напишани.
Не одредите int или плови или стринг или нешто слично обично.
Можете да наведете var.
Вие не треба да се определи var, но тоа има импликации, ако не.
Обично ако изостави var, случајно сте се креира глобален променлива наместо на локално ниво.
Значи, да ми предложи дека речиси секогаш речеме var а потоа името на променливата.
Тоа не е тип, тоа е само var за променлива.
Ова ќе биде еден пример, дали е 123 или "Здраво, свет".
Низи се присутни и синтаксички сличен на PHP.
Јас ќе кажам var броеви и потоа јас го користам квадратни загради повторно да декларирате променлива
чиј тип е низа што ги има овие особено броеви во тоа одделени со запирки.
А потоа на крај, ова е само една, која навистина изгледа различно.
Потсетиме дека во PHP ќе се спроведува асоцијативна низа на студент
како Zamyla дека може да изгледа вака, каде променливата се вика студент.
На квадратни загради значи тука доаѓа низа.
>> Фактот дека јас не сум со користење на нумерички индекси, но жици - ID, куќа, и името -
значи дека ова е асоцијативна низа,
и овие стрели со еднаквите знаци и аголни заградата
значи дека клучот е "ID", вредноста е 1;
клучот е "куќа", вредноста е Winthrop куќа;
клучот е "име", вредноста е Zamyla Чан.
Значи има 3 копчиња во внатрешноста на оваа асоцијативна низа, од кои секоја има своја вредност.
Видовме дека во 7 pset, или наскоро ќе, во JavaScript истата идеја,
но тоа ќе изгледа вака.
Значи var студент - нема знакот за долар и не се споменуваат на типот уште, но var -
еднакви и потоа отворете кадрави загради бидејќи во JavaScript, кога имаш клучните вредност парови,
вие всушност го користите нешто што се нарекува еден објект.
И оние од вас кои не се оклопни транспортери или слично може да се сети предмети од Јава
или слични јазици.
Го вклучите Javascript-не е Јава, прв од сите.
Тоа беше намерно одлука години да намалам нешто друго што беше популарен,
своето име, иако тоа нема основен однос на себе Јава.
JavaScript има објекти, и ги создаде по пат на голема заграда кадрави нотација.
Објекти во вклучите Javascript-се доста еднакво на асоцијативни низи во PHP
кога станува збор за чување на податоци внатрешноста на нив.
>> Но, дури и уште посилна во JavaScript можете да се дружат многу лесно функции
во внатрешноста на објектот, и покрај тоа што можете да го направите и во други јазици,
тоа е прилично честа парадигма, како што ќе видиме.
На кратко, овој објект претставува еден студент, кој е особено Zamyla,
и тоа е слично концептуално, само синтаксички различна од оваа.
Да, всушност, користи JavaScript во датотека.
Излегува има скрипта таг.
Видовме стил таг и видовме други HTML тагови.
На сценариото таг, всушност, ќе содржи некои JavaScript код.
Дозволете ми да одат во уредот каде што имаме некои изворниот код претходна направени.
Не сум го испратиле уште на веб-сајт, но јас ќе го направи тоа по класа.
Да се ​​отвори овој, blink.html.
Назад во 1990-тите, имаше буквално HTML таг вика трепкање ознака,
и ова е една од најпознатите прекрасно overused тагови на интернет
при што сакате да ја посетите некои 1990 стил веб страница и започнете да гледате текст трепка ви се допаѓа ова,
резултатите од маркиз таг, кој текст ќе се допаѓа ова.
Еден од ретките моменти кога во светот, всушност, се согласија за веб стандард,
сите во одборот загинаа трепкање таг пред неколку години.
Но можеме да го воскресне со JavaScript како демонстрација на моќта имате
кога може да се напише програма во внатрешноста на веб-страница.
Прво нека прескокнете во текот на нови нешта и да се фокусира само на стариот.
>> Тука е стари работи во овој пример.
Имам таг HTML, шефот на тагот, и насловот таг.
Тогаш имам телото таг тука со div, кој се потсетиме е само правоаголна поделба на страница
дека јас сум се единствен број произволно на "поздрав" за,
само така имам начин на уникатно се однесуваат на него, дека има некои многу едноставни текст:
Здраво, свет.
Сега дозволете ми да дојдете до врвот на оваа датотека и да видиме што има ново.
Првото нешто што е ново до врвот е скрипта таг,
и во внатрешноста на сценариото таг известување сум прогласи функција.
Да се ​​изјасни за функција во JavaScript, прилично слична на PHP,
вие буквално пишувам функција, тогаш името на функцијата, загради,
а можеби и некои аргументи ако е потребно било.
Потоа имам мојата кадрава голема заграда, како и обично, и сега имаме некои малку нов код,
но ајде да видиме што тоа значи.
Значи var div, ова само значи ми даде променлива наречена div.
Можев да го нарече foo, но јас сакав да се нарече div
од причини што ќе биде јасно во секунда.
Потоа излегува во вклучите Javascript - и ова е JavaScript код вградени во мојот веб страница -
постои посебен глобалната променлива на сорти нарекува документ.
JavaScript е всушност објектно-ориентиран јазик.
Ние не би навлегувал во детали во 50 за тоа што тоа значи,
но сега за сега знаеме дека објектот е доста како struct.
Како што видовме на враќање, кога во еден од најраните проблем поставува
каде што ќе стави многу информации во структурата,
Слично е документ посебен struct што доаѓа со прелистувач,
доаѓа со било кој веб-страница. Тоа не е нешто што јас замислен.
Внатрешноста на овој документ структура, иако, мора не само податоци
но вие исто така имаат функции.
>> И секој пат кога ќе имаат функција внатрешноста на структурата, во внатрешноста на објектот,
тоа се нарекува метод. Но, тоа е иста работа.
Методот е функција која само така се случува да биде во внатрешноста на нешто друго.
Па тоа значи дека овој посебен глобалната променлива наречена документот
има функција наречена getElementById кои буквално го прави тоа.
Тоа ќе ти елемент од ДОМ, документ Object Model дрво,
чиј проект е во овој случај поздрав.
Со други зборови, за сето време поминато на структури на податоци доаѓа во игра тука.
Оваа слика на ДОМ дека имавме еден миг пред
иако страница е малку различен, ако имав div во оваа слика,
што document.getElementById ќе се врати да ме ефикасно ќе биде покажувач
на правоаголник во дрво, со повикување на правоаголник во дрво.
Значи тоа е она што значи да повика еден од тие функции.
Во овој случај, повторно тоа е DIV. Тоа не е тело или наслов.
Па ајде да видиме што јас тогаш направи со овој div сега дека јас го имаат во внатрешноста на оваа променлива наречена div.
Излезе со JavaScript имате можност да tweak на CSS на вашата страница динамично.
До сега, сите на CSS ние го направивме, иако ограничени, е во стилот атрибути,
или каде на друго место да се стави CSS?
Јас вид на расипуваат оној. Во стил таг на врвот на датотеката.
Или третото место е во?
>> Надворешен фајл, нешто. CSS.
Значи тоа се 3 места ние го направивме CSS досега,
но што се фати е ние сме хард кодирани сето тоа.
Решивте како ќе полноглавци во pset 7, решивме пред предавање она што нашите CSS ќе биде.
Но, ако сакате да го промените вашиот CSS код, всушност можете да го направите тоа
Откако ќе имаат вистински програмски јазик.
CSS, HTML - не програмски јазици. JavaScript е.
Значи излегува дека штом сте еден од оние правоаголници од дрво
нарекува ДОМ, таа се има некои податоци во него.
Па div дека јас само го грабнала од дрвото има она што ќе го наречеме имот во него
наречен стил, и стилот на имотот себе има имот наречен видливост.
Јас би го знаеме и ова само со гледање нагоре прирачник на корисникот CSS е.
Излегува има видливост CSS имотот што го прави она што го кажува.
Тоа го прави нешто видливи или не, видливи или не.
И како да го направите тоа е тоа.
Прашувам програмски ако видливоста на овој div се крие,
она што можам да го промени тоа во моментов? Видливи.
Друго, ако видливоста на оваа страница не е скриено, логично јас го прават тоа скриени.
Јас немам идеја зошто тоа е видливо и скриени и не се видливи и невидливи.
Ова беше лоша дизајн одлука на патот.
Но тие се навистина спротивностите во CSS: видливи и скриени.
Сето ова не е значи промена на CSS на мојата датотека и исклучување, и исклучување на
за што особено div.
Но, повторно, ова е функција наречена трепкање. Кога е трепкање функција наречена?
Излезе дека таму е уште еден посебен глобалната променлива наречена прозорецот,
слични во духот со документ, но со оглед на документот се однесува на вашата веб страница,
како дрво ДОМ, HTML ви испрати од серверот,
прозорецот се однесува на хром околу неа, полето за адреса, лентата со наслов,
и сето тоа работи околу вашата веб-страница.
>> И излегува дека прозорецот објектот има посебна функција во него наречена setInterval
што го прави она што го кажува.
Таа ќе се постави на интервалот - во овој случај секои 500 милисекунди -
и, да се погоди, што е тоа ќе направи секој 500 милисекунди?
Тоа се случува да се изврши таа функција трепкање.
И она што е убаво овде е дека ние би можеле да имаат направено ова во C иако никогаш не сме направиле.
Ц има нешто што се нарекува функцијата совети каде што може да помине функции околу
како аргументи.
Слично во JavaScript можете да го положат име на функција во друга функција.
И ќе забележите што правам. Јас не го правам тоа.
Ако го ставам заграда по трепкање, тоа би значело повик трепкање функција.
Ако јас ги изостави, тоа значи дека тука е трепкање функција
така што setInterval да го наречеме секои 500 милисекунди.
Значи крајниот резултат, крволочен и покрај тоа што е, е дека ако одам во локалниот компјутер и да одат во blink.html,
Јас сега имаат ова се случува повторно и повторно.
И ако јас всушност Увид елемент, ајде да видиме дали можеме да видиме тоа.
Дозволете ми Увид елемент, дозволете ми да дојдете долу само малку,
дозволете ми да изберете Елементи овде, и ќе забележите дека ДОМ внатрешноста на инспектор Хром.
Тоа е буквално менување и назад секои 500 милисекунди.
Ако одиме во нашиот пријател Нејт,
Ако некогаш се прашував како тоа функционира, слична идеја со интервал,
но Нејт е, всушност, прави многу ефикасно користење на бојата во овој конкретен случај.
Па што повеќе можеме да всушност направи со ова?
Да се ​​отвори уште еден пример и да се обиде нешто
тоа е програмски уште повеќе корисни отколку правејќи нешта трепкање.
Дозволете ми да одиме во нашиот форми директориум денес и да си одат во form0.
Ова е најгрдото можно форма која би можел да излезе со,
и дозволете ми да ви покаже како изгледа во прелистувачот.
>> Дозволете ми да одат во localhost / форми, и ова е form0.
Ова е супер грди HTML форма која има неколку полиња за е-мејл, за лозинка,
лозинка, а потоа малку наога да се согласат со некои рокови и услови.
Улов е ако ја посетите оваа форма и не сакам да ви даде мојот е-мејл адреса,
Не сакам да се согласувам со одредбите и условите можеби, кликнете може Регистрирај се
и тоа ми овозможува преку секој случај.
Ова се случува да ги достават до глупав PHP фајл наречен dump.php.
Сите тоа го прави е печатење на содржината на $ _GET само за дијагностички цели.
Тоа беше она што беше поднесена од страна на корисникот само сега.
Но, претпоставувам ние всушност сакате да се провери форма поднесување на корисникот.
Дозволете ми да одат во верзија 1.
Ова е form1.html. Тоа изгледа естетски само како лоша, но забележите колку фенси е.
Ако јас кликнете Регистрирај без соработуваат, јас се викна на.
"Мора да внесете вашата email адреса."
Во ред. Па дозволете ми да се обиде тоа. Значи malan@harvard.edu. Не е потребна лозинка.
Регистрирате. "Мора да внесете лозинка." Во ред.
Па јас ќе обезбеди лозинка за црвен. Регистрирате.
"Лозинките не се совпаѓаат." Морам да сега напишете црвен тука.
Јас случајно проверив тоа. Регистрирате.
"Мора да прифатите условите." Во ред. Се согласувам таму. Регистрирате.
И сега тоа ми го покажува дијагностички излез таму.
>> Така што едноставно се случи?
Имавме оваа способност да се провери форма поднесоци.
Всушност, ако не се нурне во pset 7, таму е се извини функција
што го прави доста лесно да се развикам на корисникот со порака на екранот.
Јас сум со користење на малку поинаков механизам, на алармирање функција,
која не е во функција и тоа е се насмеал на бидејќи тоа го прави многу грда корисникот пораки.
Но, да видиме што правам тука.
Ова е form1.html, и ќе забележите дека имам некои прилично запознаен синтакса:
телото таг, формата ознака, акција атрибут, метод атрибут.
Но забележите сум дадени моите форма единствен број за погодност.
Потоа имам е-маил областа чиј тип е текст,
полето за лозинка чиј тип е лозинката, потврда областа чиј тип е лозинка,
а потоа полето чие име е договор овде, тип е Обележувач.
А потоа имам копчето Submit.
Но забележите на врвот што повеќе имам.
Прво на сите, има уште една употреба на скрипта таг.
Ако имате некои JavaScript код во друга датотека, исто како и со CSS можете да го вклучат.
И да го направите тоа со скрипта извор, а потоа забележиш јас сум поврзување очигледно
да googleapis.com на многу долг пат, но чии името на датотеката завршува во jquery.min
за минимум. js.
jQuery е супер популарен библиотека за JavaScript дека само прави да вклучите
сè повеќе и повеќе user-friendly за употреба.
Тоа е ефикасно стане де факто стандард.
Значи иако она што сте за да се види не е чист вклучите Javascript по себе,
тоа е библиотека на врвот на JavaScript многу сличен на CS50 библиотека е слој
на врвот на ниско ниво C код, реалноста е речиси секого на интернет го користи.
Значи тие не се обука тркала. Ова е само најдобра практика овие денови.
Сега забележите подолу што е мојата скрипта таг, и ќе забележите она што го направив тука.
Излегува дека jQuery прави нешто малку фенси.
JavaScript има долар знаци, но тие се бесмислени.
>> Тие се како буквата А или Б или Ц
jQuery едноставно ја усвои Конвенцијата или вид на предвидени тврдење со фактот
дека $ ќе биде нивниот посебен симбол.
Така што веднаш штом ќе се вчита оваа глобална вклучите Javascript-датотека се тука со сценариото ознака,
вие имате пристап до посебна глобалната променлива која се вика $.
Тоа е посоодветно наречена jQuery, но тоа не изгледа скоро како секси како $.
Но $ нема посебно значење. Во PHP имаше посебно значење.
Ти мораше да го имаат пред променлива.
Ова е само секси нешто што тие добија.
Што се случува овде?
Забележиш јас сум полагање на jQuery функцијата мојот глобалната променлива документот
а потоа јас го повикувам. подготвена.
Што jQuery суштина не е тоа ти овозможува да преземат некои ванила вклучите нешта
како документ објектот, прозорецот објект,
и ако го помине во на jQuery функцијата -
и повторно, да биде јасно, ова е функција наречена jQuery -
она што го прави тоа е ви се враќа специјална верзија на документот
кој има повеќе функционалност поврзани со неа.
Значи во суровини вклучите постои подготвени функција,
но ако помине документ на jQuery функцијата прв,
ви се враќа специјална верзија на документ објектот
кој има повеќе фенси функции.
И тоа е зошто луѓето се допаѓа. Тоа само прави работите полесно да се направи, како ние сме за да ја видите.
Значи она што не оваа линија на кодот значи?
Оваа линија на код овде значи кога документот е подготвен -
со други зборови, откако прелистувач е направено читањето на оваа датотека врвот до дното -
оди напред и да се изврши следнава функција.
Она што е навистина интересно во вклучите Javascript - и PHP има оваа, како и -
е анонимен функции.
Во JavaScript можете да прогласи функции кои немаат име, но тие не го имаат телото.
Забележи она што се случува овде.
>> Ова е функција наречена подготвени, и тоа само значи направите следново
кога целата веб-страница е подготвена, кога тоа е сите се чита во од серверот.
Што сакате да направите? Сакам да изврши дел од кодот.
Забележете дека ние не сакаме да се изврши овој код веднаш.
Ако јас изоставени ова, тоа би значело дека веднаш почнуваат извршување на овие линии на код.
Но, фактот дека јас велам не, не, не, заврши тоа во анонимен функција вака
значи не го изврши уште, јавете се на крајот.
Видовме овој момент пред во нашите претходни форма пример.
Што функција не ни се јавите на крајот, 500 милисекунди подоцна? Трепка.
Значи истата идеја.
Повторно, дури и ако ова изгледа малку чудно, само да сега за сега на верата
што да се изјасни анонимен функција која се вика на крајот,
Вие едноставно напишете функција () {
Значи она код одиме да се изврши на крајот? Следниве.
Тоа исто така изгледа малку ново, но тоа значи дека тука е jQuery функцијата,
и ова сега е кратенка.
Оваа програмка на HTML на дното на екранот, се разбира, има некои дрвото застапеност.
Тоа не е тоа. Ова е многу поинтересна од оваа здраво, свет пример.
Но, има некои дрво кое одговара на овој HTML.
Тоа ќе биде болка во вратот мора да спроведе некои вид на рекурзивна функција
да започне на root јазол, а потоа се најде на јазол чии број е регистрација.
Значи она што jQuery прави супер лесно за нас е буквално тоа.
Оди напред и да ми правиш div или каква било форма, без оглед на HTML елемент
има лична карта за регистрација.
Ова е еквивалентно на document.getElementById ("регистрација").
>> Зошто луѓето како jQuery?
Затоа што тоа е пократок да напишеш. Но тоа е сè што е. Тоа е истата идеја.
Ме сфаќајте таг чиј проект е регистрација.
И кога тој таг, кој се случува да биде форма, се доставува,
оди напред и да ја извршите оваа код.
Значи, да се земе една изгледаат сега на тоа како правиме форма валидација.
Синтаксата е значително криптичната на прв, но она што се случува?
Ако оваа линија на кодот е вистина, јас одам да се развикам на корисникот за да го обезбеди неговото или нејзиниот е-мејл адреса.
Значи она што е оваа линија на кодот?
$ Значи jQuery. Сега забележите ова.
Ова е вид на како CSS.
Ако сте се нурна во CSS, сепак, ќе знаеш дека тоа значи дека елемент чиј проект е регистрација.
Просторот значи најдете дете или потомок на регистрација чие име е влез.
И тогаш тоа нешто во квадратни загради е малку филтер.
И дури и ако тоа изгледа криптичната, ова само значи одат на формата чија ID е регистрација,
одат на внесување елемент внатре во тоа чие име е-маил,
а потоа ја добие својата вредност, без оглед на неговата вредност се случува да биде -
asdf ако тоа е се што внесе или malan@harvard.edu ако тоа е она што го напишале.
Значи, ако вредноста на е-мејл областа форма на == ништо, се развикам на корисникот.
Друго, ако вредноста на полето за лозинка == ништо, се развикам на корисникот.
>> Друго, ако вредноста на полето за лозинка не е еднаква на вредноста на потврда поле,
која беше друга форма елемент, развикам на корисникот.
А потоа на крај - и оваа исто така, има некои нови синтаксата на свој,
но еднаш сте го виделе, тоа е барем малку повеќе разумни -
друго, ако форма чиј проект е регистрација има влезен елемент чие име е договор
и тоа се проверува, оди напред и да се развикам на корисникот.
Па јас целосно се признае ова е сосема огромна на прв поглед.
Тоа е многу нови синтакса. Но, сите на jQuery следи овие видови на дезени.
И искрено, јас дури и не знаат овој постоел до пред неколку минути.
Јас Googled "Како да се провери ако полето е проверено во jQuery?"
и ова е синтакса, бидејќи има различни начини на вршење на таа
со реалните суровини JavaScript код.
Така што на првата страница на проблемот Постави 7 нагласува,
pset 7 е многу вежба во bootstrapping себе
каде што се предвидени, се надевам, концептуална рамка со која ќе се справи со pset.
>> Но, како што е често случај со веб дизајн, тоа е до вас навистина да ѕиркаат наоколу,
вклучат фрагменти на кодот и примери од веб толку долго како што ги наведуваат
според условите на тој првиот лист,
и да сфати дека учење HTML, CSS, JavaScript, па дури и SQL
е навистина значи да се биде оваа at-home вежба како да почнеме да ги преземат овие обука тркала надвор.
И ќе сфати премногу има толку многу повеќе работи што можете да направите со интернет пребарувач.
Внатрешноста на повеќето од овие елементи постојат и други нешта наречени настан ракувачи.
И иако ние само погледна оние наречен onsubmit и onready,
можете да ги правите нештата како onkeydown, onkeyup,
како кога корисникот го допира клуч, можете да слушате за тоа и нагоре.
Gmail има кратенки на тастатурата.
Како работи Google спроведе кратенки на тастатурата како C за компонира?
Тие слушаат за настани, како што тие се нарекува, како onkeypress или onkeyup и onkeydown.
Ако некогаш сте се движи глувчето над некој опција од менито
и одеднаш, Voila, мени се појавува или графички менува бојата,
како се прави тоа?
Наместо да слуша за onready или onsubmit, ги слушаш за onmouseover или onmouseout.
>> Значи во кратки, со овие многу едноставна основите дека ние сме почнале да ја изгребат површината денес
а ние ќе се нурне во натамошниот да средата, имаш повеќе,
моќ за спроведување на видови на работи кои веќе сте запознаени со.
Значи, да заврши тука, и ние ќе продолжиме во средата.
>> [CS50.TV]