[Powered by Google Translate] [Недеља 8, наставак] [Давид Ј. Малан] [Универзитет Харвард] [Ово је ЦС50.] [ЦС50.ТВ] Ово је ЦС50, тако да је ово крај недеље 8 овде. Ми смо наравно имали мало ураган раније ове недеље, па сада је то заиста само ти и ја у овом амфитеатру, али данас настављамо наш разговор о ПХП и око веб програмирања уопште, и ми смо такође увести идеју база података, посебно оне називају МиСКЛ, што је прилично популаран ових дана, у великој мери због свог скалабилности, као и зато што је сада слободан и опен соурце. Али прво, поглед на којој смо стали прошли пут. Подсетимо се да смо гледали неколико Фросх Ћаскање примера, и то је било грозно облик који сам дошао до неких 15 + година како би се студентима на универзитету регистра за бруцоша интрамуралне спортове без потребе да заправо више сеоба преко дворишта до Вигглесвортх да клизи физичку парче папира испод врата неког Прокторов. Уместо тога преселили смо све онлине, али да то нам је потребно да искористите од неколико технологија, тако да један, морали смо ХТМЛ, ХиперТект Маркуп Лангуаге, што је опет тај језик за означавање са којим правите структурално веб странице. Користећи мало ЦСС ових дана, Цасцадинг Стиле Схеетс, чиме ми користимо стилизатионс на веб страници користи мало другачију синтаксу, док ХТМЛ је све о структури истог. Ми такође треба да уведе језик веб програмирање. У овом случају, ми ћемо користити ПХП и ПХП ће нам омогућити динамички садржај излазног као и раде програмске ствари као слање е-поште, као што је био случај на напомену смо отишли ​​прошле недеље. Подсетимо се да код за ово је у 2 дела. Један, имали смо фросхимс3.пхп, и то је у великој мери означавање са ХТМЛ форми унутар ње, малкице ЦСС овде у стилу атрибута тако да је сама форма ће бити усмерена на страници, али више од тога ми смо имали неке репрезентативне форме улаза, поље за текст, кућицу, Неке радио дугмад, изаберите Мени, па субмит дугме. И преко овог обрасца, можемо поднети фајл који је наводно зове регистер3.пхп, која је и сама изгледала мало овако нешто. Сада, већина кода у регистер3.пхп, сећам се, била је све о е-поште. Јесте мало провере у облику који је поднет да се уверите да поља су заправо под условом да се очекује. Онда смо звали неке ПХП функције помоћу помало нову синтаксу, иако је позајмљен из Ц. Ова стрелица оператер нам омогућава да искористе нешто што се зове објектно оријентисано програмирање. Нећемо ићи у то у детаље овде, али знам за сада то је начин да функције повезане са објектима, који су посебна врста структуре, као што смо видели у Ц. Али, за сада, само се на вери да је то исправна синтакса за коришћење када се користи библиотеку као овај ПХПМаилер библиотеку. И онда на крају овог фајла смо динамички генерисан је емаил који је добио послао на мој рачун јхарвард@цс50.нет из мог јхарвард@цс50.нет рачуна, и ми смо обавестили корисника томе да су регистрована за бављење овим спортом. То је управо оно што Фросх Ћаскање сајт урадио све те године пре када сам га спроводи, готово, у другом језику, али то вам показује можда моћ коју имате Сада да ли се изрази не само програмски на ниском нивоу, у језику Ц, као што је већ на много вишем нивоу са овим веома реалним апликацијама као што су е-маил да се заиста решити неки стварни свет проблеми. Сада, наравно, иако ја користим ову скрипту за генерисање неких емаил динамички из јхарвард@цс50.нет, што је заиста рачун да имам приступ, не сасвим опрезни да шаљете маил само налоге који су заправо сопствени, не би те ствари у мало топле воде у животу. Уз то је рекао, хајде да сада прелазак на решавању потпуно другачији проблем, да од потпорних држава. Сада, шта то заправо значи? ХТТП, ово Хипертект Трансфер Протоцол, је заправо без држављанства протокол, и шта то значи да када се попнете нешто попут Гоогле.цом, а затим притисните ентер Обично ваш прегледач има неку врсту окреће икону која тада резултати у некој веб страници се преузимају, и онда то мало икона престаје предење, и да заиста сугерише који ХТТП је завршио неку врсту везе са сервером и то је то. ХТТП је без држављанства у смислу да се не одржи упорни веза са сервером на исти начин Скипе ради или Гцхат ради јер са ХТТП претпоставка је да када сте учитани веб страницу то је то. Сада, у стварности ових дана на сајтовима као што су Фацебоок и Гоогле мапама и Твиттер и као да је много више динамизам којим чак и након тога икона зауставља окретање можете, у ствари, добити више исправке са сервера, више твеетс, више ажурирања статуса на Фејсбуку и слично. Али чак и да се користи технику коју ћемо говорити о томе у недељу или две познат као Ајакс користи језик зове ЈаваСцрипт, али на крају крајева, ХТТП је и даље без држављанства. А ипак, ако желите да се некако сете ствари о кориснику чак и након што сте повезани са сервером ПХП ради приуштити вам средства радиш јер, као што смо видели у последње време, ПХП има неколико суперглобалс, и суперглобал је, опет, посебна глобална променљива који је дао вама путем веб сервер и ПХП сама. Не морате ништа да радите да ставимо вредности у њему, а међу суперглобалс смо видели до сада су добили и постављати, што је место где поља обрасца се аутоматски ставља на тебе, као и пар других које још нисмо видели. Унутар $ _СЕРВЕР неке посебне променљиве односе на самом серверу. Која је ИП адреса, шта је протокол, ХТТП или ХТТПС сте користили, Шта захтев метод сте користили и слично, тако да је нека занимљива, сочно детаље о серверу и, у ствари, корисник у тамо. Ту је $ _ЦООКИЕ, где се ове ствари називају колачићи су ускладиштени. Нећемо трошити време на колачића се данас, али знам да је за сада колачић је само мали део информација да веб сервер може посадити на веб бровсер и окренути РАМ или хард диск свог рачунара за складиштење информација о кориснику, на пример, своје корисничко име тако да не морате да куцате сваки пут када се пријавите или неку јединствени број или идентификатор за тог корисника тако да не морате да их малтретира са истим врстама питања о преференције у будућности, али већина од интереса сада је $ _СЕССИОН. Ово суперглобал, који, као и остали, је предат вама аутоматски ПХП када пишете ПХП-базиране сајтове може да ускладишти све што желите, ниске, целих бројева, плутајуће тачке, вредности, низови, објекти, стварно све што желите, и омогућава вам да га сачувате на такав начин да чак и ако вам корисник посети сада и онда врати мало од сада, или 5 минута од сада, јер они узимају своје време пре него што кликнете неки други линк ПХП ће осигурати да све што сте ставили у том дужином суперглобал Пре минут или 5 минута и даље ће бити ту када се корисник врати. А испод хаубе овај суперглобал реализује путем те ствари се зове колачиће, али за сада, то је само апстракција чиме је врста програмског еквивалент корпи. Шта год да је програмер, стави у то суперглобал асоцијативни низ ће бити одређени број минута касније док га не избришете или док корисник напусти сасвим свој бровсер. Хајде да погледамо пример како ово заправо користи. У цоунтер.пхп међу комада данашњих кода имамо следећу линију. На почетку овог фајла имамо гомилу плавих коментарима, који су незанимљива за сада. Али, у линији 13 имамо нову линију, сессион_старт, а да заправо ради управо оно што пише. Почиње седница. То вам омогућава да користите тај велики суперглобал $ _СЕССИОН, и то је једноставно тако. Сада, ако наставимо да погледате на линији 16, хајде да покушамо да схватимо шта је то веб страница ће да уради. Иф (иссет ($ _СЕССИОН ["контра"]), онда само напред а радња у шалтер променљиву, мала контра, $ _СЕССИОН ["Контра"]. Чини се проглашава локалну променљиву зове контра унутар којих се ставља копију год је унутра од суперглобал позвао седница на локацији "контра". Иначе, очигледно, ова мала локална променљива бројач, је иницијализован на 0. Али касније онда неколико редова у 26 обавештења да је седница је копија шалтеру, њен кључ, има нову вредност Доделио која је њена тренутна вредност, плус 1. Укратко, овај фајл изгледа да се ажурира бројач који је у складиште на седници суперглобал тако да увецава за 1, али је прво задржава копију претходне вредности тако да је чување у локалној променљивој $ зове бројач, и онда овде доле да видимо ста даље. Испоставило се да је то прилично једноставно ХТМЛ. На дну ове странице видимо у складу 37 које сам посетио овај сајт Бројач број пута, па овде има неколико занимљивих могућности. Један, то је јасно променљива, али не довољно да само стави $ Контра у телу вашег ХТМЛ због курса ако је само тамо међу ХТМЛ ПХП ће претпоставити да је само ХТМЛ. Ви буквално желе $ контра да се штампају на екрану. Али уместо испуштањем у ПХП режим са овим комадом синтаксе можемо динамички овде убаците вредност веома слично у духу на оно што смо урадили последњи пут са убацивање вредности у жицама. У ствари, ово је само скраћеница за нотацију каже дословно овако нешто, принт ($ контра), или чак нешто попут принтф (% с пулта) или чак, као што сте можда видели на мрежи или у уџбеницима, постоји функција у ПХП зове ехо који ради исту ствар, и сви они су само више начина даха се каже <=. У том једном случају не треба да се стави Реч ПХП после знака питања. То је скраћеница за нотација, опет, оно што смо управо видели малочас који одзвања неку вредност. Хајде да видимо шта је крајњи резултат то заправо јесте. Пусти ме да идем преко у нашу датотеку цоунтер.пхп, па ћемо видети да Дејвид управо направио грешку играјући са шифром тамо. Идемо поправити шта год забрљали, и грешка изгледа да буде тамо, нема, на линији 37. Према врху ове странице сам посетио овај сајт 0 пута. Па, хајде да идемо напред сада, а на врху прегледача кликните на релоад икону, а ја кликните садрлајима и сада сам посетио сајт 1 пут, 2, 3, 4, 5, 6, 7, 8. И заиста, ако погледамо на извору ове странице стварни изворни код се мења, и приметимо потпуно одсуство било каквог ПХП, а то је зато што ПХП код се процењује или тумачи страни сервера, па то значи да је излаз из ПХП скрипта је оно што је на крају послат на претраживачу, која је у овом случају неки сиров ХТМЛ и неки сирови текст. Шта се овде дешава? Па, са релативно мало линија кода сам у стању да складишти упорно током неколико секунди, или ако смо чекали довољно дуго, минута, чак и сати, неки вредност на начин који чини ХТТП Изгледа као да Статефул смо задржали ова веза са сервером, а то је само сећање оно што сам рекао прошли пут, али у стварности постоји читава гомила сложености дешава испод хаубе укључујући колачиће који је омогућавају ПХП да ми дају ту илузију овог корпи карактеристика слична. За сада, тривијалан пример где смо се упише неки цео број, али да функција ће се вратити да буде од велике вредности када почнем да причам о сложенијим пројектима, међу њима проблем сет 7. Ово је твоја последња проблем постављен у ЦС50. Знам, то је тако тужно, али шта ћете наћи је да ћемо да закључимо овај део семестра самим транзицији из контекста Ц свакако у контексту ПХП али док се користе неке од истих основама Разговарали смо о томе већ неко време. Циљ са псет 7 је спровести ЦС50 Финанце, која је ваша верзија Иахоо Финанце или Гоогле финансије или чак Етраде.цом где имате могућност да погледати цене акција датих симбола, али још више од тога имате могућност да "купи" и "продају" залихе којима се тргује на различитим берзама, јер као овај почетну страну Овде сугерише, што је заиста у којој мери смо почели проблем сет за тебе, имате пријаву образац који се тражи за корисничко име и лозинку. Има Субмит дугме, али после тога, као што смо на крају ћемо видети, нема ништа стварно дешава испод хаубе ипак због тога Остаје да се спроведе могућност да региструју нове кориснике, способност да купи акције, да прода акције, да стварно изгледају до актуелне цене акција. И заиста, ово ће бити стварном свету могуће, јер смо урадили укључују мало кода који ће вам омогућити са једном функцијом да упита Иахоо Финанце, који чудесно чини доступним податке бесплатне за гледајући цене акција на основу акција симбола или тикер, а ти се врати тренутну цену акција дана. Подаци сте заправо видели у овом псет ће бити као о стварном свету, јер може тако да се да сте заправо интерфејс са реалним светским залихама, реалних светских цена, па ћемо видети колико новца можете да направите можда у наредних неколико дана играо са својим проблем сету. Али хајде да прво поставили сцену за како дизајнирати нешто што је свакако компликованији него цоунтер.пхп, то је компликованије од било које Фросх Ћаскање примерима до сада, и да покушамо да представимо неколико парадигми овде да нам дозволи како за псет 7, а можда и за коначни пројекат ако урадите нешто веб базиран да ваш код добро организован, да се нормалан, и да се корак ка сарађују, да ли у ЦС50 коначног пројекта или изван ако наставите да програмирате нешто у будућности. Ту је ово идејно парадигма за компјутерске науке и развоја софтвера генерално познат као МВЦ, модел поглед контролер, и ово је глупо акроним који описује веома леп идеју, што је раздвајање различитих аспеката програма, посебно имајући одвојити логику или пословну логику веб сајта тако да све што укључује ствари као што су позивање функције и упита базе података и слично дешава не међу ХТМЛ већ у одвојеним фајловима, и заиста, ту је тај један фајл типично да сте звали контролер То је стварно мозак иза операције, па ћемо видети пример ово у само једном тренутку. Ту је модел који је програмирање код да не говорим својим базама података, да разговара са Иахоо финансија и слично, а онда је В у МВЦ, ставови, све ствари које се односе на естетици, датотеке које заправо садрже Ваш ХТМЛ, можда ваш ЦСС и слично. Идеја овде, јер ова слика говори, јесте да је контролер је датотека, као што ускоро видети и као што ћете видети у посебно псет 7, да свет говори да преко својих веб читачима. То је фајл који добија посетили на јавном интернету, али контролор разговара потенцијално модела, што је један или више других датотека које садрже код у вези са подацима, Код вези са базама података и слично, а онда се говори да Контролер један или више других датотека познат као приказа, који су естетика веб странице, шаблоне врста, да би предузети неке податке као улаз, али на крају дана само логика унутар погледом треба да буде пружање тих података, итератинг преко петље и заправо пљување на неке ХТМЛ-басед излагање о томе, или чак нешто као ПДФ-у. Шта је лепо о МВЦ је да имате различите погледе на основу врсте уређаја, на основу врсте формата које заправо желимо да покажемо да се кориснику. Хајде да погледамо неколико прогресивно сложенијим и добро осмишљен примерима покретањем прво са верзијом 0 овде. Дозволите ми да иде напред и отвори у нашем каталогу МВЦ данас фајл који се зове индек.пхп у директоријуму 0. Обратите пажњу да је ово супер једноставан и врло ундервхелминг сајт То је врста верзији 0 на почетну за ЦС50, и приметили како имамо везу са предавања, имамо везу са наставни план и програм, и ако сам пратите линк да се најаве предавања које је УРЛ до врха ће се променити у лецтурес.пхп. Ако сам тада пратите везу до недеља 1 најаве да ће УРЛ промене веек1.пхп. Изгледа да овде буде прилично једноставна хијерархијска структура. Хајде да брзи поглед испод хаубе како је то изнео, и заиста, ако погледамо индекс.пхп је прилично једноставно. У ствари, иако сам назвао ово ПХП фајл не постоји стварна програмског кода. Постоји коментар који сам овде написао у ПХП само тако да корисник не заврши видим га. Наравно, као и до сада, све што је између ПХП тагова добија тумачити, чак и ако је коментар, као и да тумаче коментар значи само да га баци на крају дана и заправо не пошаљите га на претраживачу, тако да је све овде је само естетике. Ако сам отворити сличан лецтурес.пхп је и то само тешко кодирани фајл. То се дешава да се зове нешто пхп., али то је заиста само хтмл, и веек1.пхп, веек2.пхп. Слично су само ознаке, тако да је гомила недостатака овог дизајна. Један, то је огромна количина цопи / пасте. Иако је једина ствар која се мења међу овим фајловима је несређене листе Ли ознаке, ја ипак морати доц тип, ХТМЛ, глава, наслов, близу тела, близу ХТМЛ и више у сваком појединачном фајлу, што значи да ако сам икада желео да реструктурира Ова веб страница или рестилизе га морам да идем и променити сви ови фајлови ручно или са неким масивна наћи и заменити. Узмимо корак ка паметнији, дуже размишља дизајна у верзији 1 овде при чему је наведена у реад ме да смо толико укључен да играте заједно са ово више лежерно код куће обавештење да смо ми овде имамо резиме фајлова у верзији 1. овог сајта, и изгледа да сам узео на себе да факторишу неки заједнички код, хеадер.пхп и фоотер.пхп. Па, хајде да погледамо шта је унутра прва од њих. Хеадер.пхп изгледа познато, али приметио одакле се одсече? Одмах након линије 19, тако да је то све што је било уобичајено из датотеке индекс.пхп, лецтурес.пхп, ВЕЕК 1 и веек2.пхп из претходног примера. Оно што сам урадио било је копирање и рез све што је заједничко за све те фајлове, стави га у посебној датотеци заглавља, а на сличан начин фоотер.пхп сам применити исти принцип којим су једине занимљиве линије у фоотер.пхп су њих двојица, у близини тела и близу ХТМЛ. Али, шта то значи сада је да у новој верзији од индек.пхп обавештења колико једноставније може добити. Додуше, мало више криптично гледа, мало мање интуитивно да прате врха до дна, али Боже мој, све те редундантности је сада нестало. Ми захтевамо помоћу ПХП функцију буквално зове захтевају до врха, што је веома подсећа, подсјетимо, у Ц # је укључити механизам. Ми захтевамо хеадер.пхп на врху. Ми захтевамо фоотер.пхп на дну, а једина ствар која је другачија или специјалне о овом фајлу је садржај који је требало да буде јединствена за њега. Ако сам онда у, рецимо, лецтурес.пхп, исти принцип важи. Опет, неки коментари до врха, али онда сам захтевају заглавља, захтевају подножје, а између то је само садржај који је заправо променило. И ако смо гледали на Недељи 1 и 2 Недеље ћемо видети да је исти принцип је тамо примењују. Па, нисмо баш урађено тамо. Хајде да погледамо верзија 2, која има сличну структуру, али приметио сада сам увео нешто друго. У линији 10 сам увео хелперс.пхп, која очигледно садржи помоћне функције. Помагач функција је углавном релативно кратак функција да пишете да вам помогне у разним местима, па да видимо шта је унутар хелперс.пхп. У овом случају, изгледа да има 2 функције. Подсетимо од пре неки дан са нашим коцке примеру можете да дефинишете сопствене функције у ПХП-у, а шта сам сада урадио је да сам сам дефинисане функције зову донети подножје и пруже заглавље, од којих прва траје параметар назван податке, чија вредност је празан низ, како је предложио ту, и заправо може да пише још више језгровито у најновијој верзији ПХП рекавши отворену угласту заграду, затворена угласте заграде. То значи празан низ величине 0, али ипак низа. Ова функција је екстракт мало посебан по томе оно што ради је то узима као аргумент асоцијативну низ који има 0 или више кључних вредности парове, а ако имате кључ фоо и вредност бар екстракта ФУНКЦИЈА ствара ситуацију у којој се сада, као линије 11, имате локалну променљиву под називом $ фоо чија је вредност бар. А ако сте имали више кључева и вредности у низу података, Слично би се издвојити у локалном оквиру или име простор, тако да фоотер.пхп и иста идеја овде, тако да хеадер.пхп имају приступ тим варијаблама. У ствари, дозволите ми да отворим опет хеадер.пхп и скрене пажњу на шта сада изгледа у овој верзији. Уместо тешко кодирање ЦС50 као наслов за сваку једну страну Приметићете динамику која је сад могуће. У складу 5 сам одјек наслов променљиву, али прво сам пролазећи ту титулу променљиву у функцији зове хтмлспециалцхарс. Глупо име за функцију, док је, али то заиста оно што пише. То осигурава да било специјалних знакова у низу који је изгласан у правилно побегао ХТМЛ. То је заправо начин да се избегне нешто зове Цросс Сите Сцриптинг напад којим неко може злонамерно или случајно убризгавају своју ХТМЛ на свој сајт по лепљење у неком облику, на пример, нешто што нисте били прилично очекивали, нарочито ЈаваСцрипт код, као што ћемо говорити о томе у недељу или две је време. Ово је сада хеадер.пхп, то је поглед у смислу да вам омогућава да естетски преглед садржаја неких скупа података. Али конкретно, то је шаблон. То је нека врста матрице сада од онога што желимо да у заглављу сваке странице да изгледа, али постоји нека динамика у томе желимо наслов који се динамички убаци заснива на насловној променљиву који је издвојен, када смо позвали, опет, рендер заглавље функције. Сада, ако смо гледали на рендеринг подножје, заправо нема много коришћења тог права данас јер у фоотер.пхп нема динамизам уопште. Могло би да буде, али у овом тренутку то је тешко кодирана листа 2 ознаке, али иста идеја односи, тако да заправо сугерише зашто смо губили време има рендер заглавље и малтера подножја функцију? Дозволите ми да уместо иде сада у верзији 3, ау верзији 3 у помагача сам одлучио да га још више поједноставити. Дозволите ми да имају један рендер функцију. Дозволите ми да га узме још један аргумент, овај пут под називом шаблон, која је требало да буде име предлошка, и онда ћу дрско повезати у облику ланца ПХП да вредност тог варијабле., а затим, ако она постоји, фоо.пхп бар.пхп или хеадер.пхп и фоотер.пхп, онда ћу да наставим и издвојите променљивих података и онда захтевају да путању. Другим речима, да користе сад ово, ако отвори индек.пхп приметити да више не зову заглавља малтера. Ја само зовем донесе, али проћи у цитираном вредности заглавља да јасно који предложак ја заправо желим да се учита. Онда овде приметити шта радим. Ја пролазу у динамично кључ за титулу, вредност ЦС50, и ово, као што смо раније видели, могла да буде још језгровит у најновијој верзији ПХП где могу заменити функције низа са угластим заградама, што ја предлажем је још читљив и сигурно мало лакше да куцате. И наравно, са рендеринг подножја позива на дну, ми не смета пролази у други аргумент уопште не асоцијативну низ, јер не постоји ништа динамичан унутар тог подножје. То је само неки блиски ознаке за ХТМЛ. Добро, ми предузимамо кораке ка стварно чишћење ствари овде, али дозволите ми да отворим 2 Финал примере. Ово је један, број 4, обавештење да сам сада направио свесну одлуку да се побољша на претходни пример, коначно користи неку хијерархију мојим фајловима. Обратите пажњу да у овом резимеу, у то ме читате, ја сам увео укључује директоријум и директоријум шаблона чији садржај ће бити ствари које желим да укључе и предлошци који сам желе да пруже, респективно. Ово је стварно ми је што аналног и покушава да ствари уредно, држати заједно сродне фајлове, али крајњи резултат је да сада имамо нешто тидиер подешавање, али сада морамо да се сетим у, на пример, индек.пхп када смо захтевају датотеке хелперс.пхп сада морамо да то захтевају преко инцлудес / хелперс.пхп него само кажем хелперс.пхп јер сада је то заправо у под директоријуму. Сада, као и на страну, што ћете видети у овим примерима и неких других функције као што захтевају, захтевају једном. Постоји заправо је функција сама зове укључите, а сви они имају нешто другачије понашање. Ево ја кажем захтевају једном да супер јасно да желим само оне помагачи укључен у мом пројекту једном. Али ако сам опрезан и када сам заправо размишљам кроз мој логике правилно требало би довољно само да кажем превише захтевати до врха Докле год ја не случајно захтевају другде тај исти фајл. У ствари, ово је нешто ефикаснији начин обављања посла затим користећи захтевају једном, па ћу га исећи доле само да захтевају. Узмимо један корак даље. Сада Овај последњи пример, верзија 5, има још чистији фолдер хијерархију. Приметите шта сам овде урадио по мене прочитао у овој последњој верзији сада имам ХТМЛ директоријум, који сам имао све ово време, али унутра одатле сада је само индек.пхп, лецтурес.пхп, веек1.пхп и веек2.пхп. Обухвата каталог сада живи поред ХТМЛ директоријум, тако да је на истом нивоу као брата, да тако кажем. Дакле, да ли шаблони фасцикла. Кључ ПОНЕТИ овде је сам увео мало више структуру, али је кључна карактеристика јесте да су само фајлови који треба да буду доступни веб, јавно адресабилни са УРЛ на јавном интернету су у мом ХТМЛ директоријуму. У међувремену, други фајлови, хелперс.пхп, фоотер.пхп, хеадер.пхп, које су вероватно можда и више осетљиви, Можда помагачи заправо има нека корисничка имена и лозинке или неке интелектуалне имовина рудника, функционише ја стварно не желим да видим свет, чак и ако случајно. То је добра пракса да се јавне ХТМЛ директоријум све датотеке које себе не треба да буде јавно. Све што треба да урадите у овом случају када се гледа, на пример, индек.пхп фајл ХТМЛ директоријума приметити само морамо бити мало опрезнији када захтевају или захтевати једном овај фајл. Морам прво да урадите .. да иде у родитељски директоријум, онда немој / инцлудес / хелперс.пхп да зароните доле у ​​да се фајл који сам стало. Сва питања онда о МВЦ или ово релативно једноставно инкарнација истог? И дозволите ми да јасно смо фокусирани доста о В овде, ставови и факторинг ван ових шаблона. Није смо заиста разликује од М Ц још увек. У ствари, заиста нема М. овде, па чак и наш Ц контролер, није стварно раде све толико, али ћете добити много више упознат са оба та 2 слова из МВЦ, односно, ви ћете добити много више упознати са Ц у МВЦ за проблем сету 7, тако да нема више да се на хоризонту. Питања? Заправо нема никога. Ок, хајде да пређемо на другу тему, а коначна за данас. То је увођење базе података. До овог тренутка смо имали неколико начина чувања података. Употребили смо променљиве. Назад у нашем Ц фајлу, И / О дискусија смо почели помоћу текстуалних фајлова и коришћењем датотека као што су иф, а онда смо почели чак и говорим о ЦСВ поднесе мало, вредности раздвојене зарезима, па све то нам је омогућило да имамо податке ускладиштене или не упорно и истрајно. Али чак и ЦСВс нису баш погодна за тражење и уметање и брисање. То је заиста само глупи текст фајл одвојен зарезима ред по ред по ред по ред, па ако желите да тражи тај фајл најбоље што можете да урадите је заиста линеарна претрага. Морате почети на врху датотеке, прочитајте целу ствар, и тражити неку вредност интереса. Ако желите да убаците у њу морате да урадите исту ствар, итератинг преко њега и убацивањем у одређеном месту, и, у ствари, морате да урадите све сами потрази логике. Ви не можете паметан образац који одговара на ЦСВ датотеку уколико ви сами пишете код. Ви не можете филтрацију ЦСВ датотеке осим ако сами напишете код. Зар не би било лепо ако неко стави у све напоре да се заиста чини тражење лако и једноставно постављање и брисање и ажурирање и тако даље? То је управо оно што је база података. СКЛ Струцтуред Куери Лангуаге, је још један језик да ми овде уводи и данас, али ово је такође прилично приступачне, и шта смо стварно ћемо да урадимо је само ишчупати из ње неких од најупадљивије карактеристике, тако да се за псет 7, и ако ти нешто веб заснован, ваш коначни пројекат, имате могућност да се изразе у смислу података упита. Имате могућност да сачувате мало или много података на много структуриран тако да ће на крају дана би ваш живот лакшим јер са СКЛ можете сами изразе много прецизније, много више методично у циљу гет бацк неки подскуп података из већег корпуса података. Можете да мислите базе података, у овом случају, СКЛ базе података, стварно као Екцел Бројеви или где је табела, или можда више табеле и прорачуне, наравно, има редове и колоне, а то је зато што СКЛ базе података су релационе, релациона у смислу да складиште податке у смислу ове табеле, редови и колоне. Они су већи него извођачки нешто попут табеле, и табела је требало да се користи од стране човека. База података је требало да се користи од стране програмера писања кода против ње, тако инкарнација базе података ће бити или командна линија. Један од најпопуларнијих релационим базама података тамо је, опет, МиСКЛ, што је предивно бесплатан, врло високе ефикасни, и то је оно што Фацебоок користи веома рано и да донекле данас за складиштење доста својих података, па ћемо видети у једном тренутку да коришћење релативно једноставне команде можемо изабрати податке, унос података, ажурирање података, брисање података и слично, али срећом, постоји још разумљив интерфејс него само куцате на црно-белој линији овде. Ми ћемо користити за псет 7 и даље бесплатан алат зове пхпМиАдмин. Име је случајна. Алатка се дешава да се реализује у ПХП, али то је суштински небитно. Шта је корисно у вези пхпМиАдмин је да је веб-басед утилити. Смо га претходно инсталиран на апарату за вас, и са њим можете да креирате табеле у бази података, можете унети податке, избрише податке, и генерално види ваши подаци у прилично усер-фриендли окружењу. Ваши корисници неће користити пхпМиАдмин. То је заиста само административни или програмер је алат са којима се види и џаку око ваших података и смислити како да га структурирају, налик Вама лично могу да користе Екцел или бројева, али то ће бити одличан начин да визуелно шта се дешава испод хаубе тако да можете да се фокусирате на занимљив решавања проблема и није толико на тајанственим команди. Хајде да погледамо пример података који могу бити ускладиштени табуларли у релационој бази података. Ево једног примера. Сада, нажалост, погрешно пхпМиАдмин на страни бацајући начин превише речи и графика у тебе, али ако сте брусити само на Колона ИД, корисничко име колоне, а хеш колона, ово је ефикасно табеле, али се дешава да се фрагмент стола унутрашњости апарата помоћу фајл који Вам нудимо у проблем сету 7. Конкретно, ми вам дати фајл који представља кориснички табели, тако да табела садржи кориснике са 3 колоне, од којих је један јединствени ИД почевши од 1 и након тога се увећава. Друга колона је корисничко име, а они од вас који је хакер, Тхе Хацкер издање псет 2, можда препознати неке од ових корисничких имена најмање. На десној страни су лозинке, али нису буквални лозинке. Они су хасхес истог, па испада да чување лозинки у бази података је стварно лоша идеја. Смо сви Ви вероватно прочитали у неком тренутку неки сајт Или неки компаније база буде компромитован, и онда морате да промените лозинку, потребно је да се повраћај новца на ствари јер неки лош момак стварно провалио у обзир као резултат. Чување лозинки у јасном тексту некриптовану у бази података је потпуно глуп, а ипак то је у великој мери забавно онда да читам о неким веома познатих компанија понекад у штампи чији су базе података компромитована, и тај део није смешно, али је чињеница да су базе података садрже некодиране Лозинке је смешно, јер буквално са једном линијом кода можете да заштитите од тог претња, и то је оно што смо овде урадили. Чак и за нашу малу лажну ЦС50 финансија верзије смо криптовање лозинки само за добру меру, као и чињеница да свих ових лозинки почети са $ 1 $ је само конвенција. То само значи да су заштићени или стварно хеширају, који је као једносмерној шифровање функције при чему не може да преокрене своје ефекте са нечим што се зове МД5. Чињеница да 50 је након што значи да вредност соли од 50 је коришћен за уситњавања свих ових лозинки, осим једног. Рудник је, наравно, као што можете видети тамо, ХА, је користио другачији соли, тако да они од вас који је добио нешто саплео се можда у Хацкер 2, да би био резултат наше су користили другачији хасх од других, јер моја лозинка је заправо иста као неки други корисник уп тхере. У ствари, ако сте чекали све ове недеље да сазнам шта те шифре су овде биле лозинке које су оспоравани сте да пуца у Хацкер издању проблем сета 2, тако да нико превише лукав. У ствари, Малан је била иста као и јхарвард, али ако се вратимо изгледали су другачије. Усредсредите се на јхарвард у Цримсон јер су другачије осолити. Алгоритам је засметало на начин да су хасх вредност, шифрована вредност изгледа мало другачије јер су инпути су мало другачији, али лозинка испод хаубе је још увек на крају тамно црвен. Сада, кога је брига за то? Па, ми смо Вам пружимо узорка корисника, узорак корисничка имена и хешеве њихових лозинки, тако да заиста имате неке купци ЦС50 финансија, када сте први пут сићи ​​на земљу са вашим кодом. Мораћете да спроведе више табела у МиСКЛ, унутар базе података. Мораћете да створи више табеле, ефикасно, али смо одлучили да вам дам ово да сте почели, па ћете видети да је проблем скуп спецификација шетње вас кроз процес увоза ову табелу и објашњава шта је неке од карактеристика су, и видећете да вам пружимо шифром да рукује уситњавања или енкрипцију ових лозинки, тако да не морате да бринете превише о томе шта МД5 или слично је заправо све о томе. Дакле, СКЛ, Струцтуред Куери Лангуаге. То је, једноставно, језик ми смо о томе да почнете да користите у псет 7 а можда и шире да тражи податке из неког базе података. Подаци се, опет, складиште табуларли у овим релационих табела, колона и редова, али користећи неке релативно једноставну синтаксу као брисање, убаците, ажурирање и изаберите можемо учинити управо то. Можемо избрисати из базе података, уметање ажурирају податке, као и изабрали, односно, преузимање података из базе података. Како ћемо ићи око радиш ово? Пусти ме напред у апарату. Дозволите ми да попните хттп://лоцалхост, која, опет, локална сама апарат. То је његова стандардна надимак. И дозволите ми да одем на / пхпМиАдмин. То се дешава да се посебна УРЛ који је уређај конфигурисан да разуме који ме је одмах затражити корисничко име и лозинку. Као и обично, ја ћу да откуцате јхарвард и црвац, али схвата да је администраторски налог на рачунару. То је само случајност која такође има јхарвард регистрована за ЦС50 финансија. Јхарвард, гримизна, унесите ми даје кориснички интерфејс који смо видели Пре осврт на тренутак, а то је мало неодољив на први поглед, али будите уверени, што никада нећете морати да кликнете већину линкова у овој алатки. Завршићеш користећи мали подскуп који су супер помоћи, први који је база овде. Ако ја одем до база података, приметићете да сам затражено да креирате базу података. То је као стварање новог Екцел фајл, ефикасно. Идем да иде напред и позвати ово предавање, а ја ћу само да игноришу поље тамо, сврставање. То има везе са заступљеност података у њима, и ја ћу да кликнете стварају, а сада приметио, као што сам пустио на креирање на левој страни, где се каже да није базе Ускоро би требало да видим базу података предавање. Ако сада кликнете на левој страни, предавање базе података, приметити моје картице промените мало. Имам структуру, СКЛ, извоз, увоз и неке друге ствари. Структура је прилично празно. Нема табеле налазе у бази података, као што овде пише, па хајде да креирамо табелу, па идемо напред и направите табелу као студенти, а колико колона желимо? Нека ово буде једноставна, и хајде да евиденција за сваког студента ИД број, име и адреса е-поште. Ми ћемо наставити да се једноставно тако, па 3 колоне, иди. Образац који видите овде је сада мало неуредна и неодољив, али ми само треба да прође кроз њега ред по ред, па веома брзо дајмо Прва колона у овој бази назив артикла за јединствени идентификатор. То ће бити цео број. Ја стварно могу да игноришем дужину и вредности. Инт ће бити 32 бита без обзира укуцате тамо, тако да оставимо празно. Иницијална вредност, ја сам могао да га нулл, како је то дефинисано. Ја ћу да оставим на миру. Хајде да се не брину о подразумеваним вредностима. Идемо помицати овде да правим, атрибута. Ово је занимљиво. Идемо напред и помало произвољно рећи да ИД мора бити неознацен. Не губимо никакве негативне бројеве. Идемо од 0 до 4 милијарде евра, дати или узети, па немојмо додиривати било који од ових области још увек тамо, али онда нека ми укуца име овде доле, и онда други је е-маил, тако да је цака је е-маил и име, очигледно не цели бројеви, па хајде да променимо ове на другу област. Испада ВАРЦХАР, променљива дужина цхар, је као стринг у СКЛ бази података али променљиве дужине, а ви заправо имате да кажете унапред Максимална дужина линије, тако да ћу нешто произвољно по конвенцији типа 255 карактера. Потпуно сам могао да кажем 32. Могу да кажем 1.000. Какав треба да одлучи за себе на вас на демографију шта је Тхе Лонгест ученика Име и иде са тим бројем, или мало веће, али оно што је лепо о варцхар је то неће губити 255 бајтова на име сваког студента. Ако је Давид то неће да користите читав 255 бајтова, али то је горња граница, тако да ћу ићи са 255 само по обичају, али можемо расправљати да је то нека нижа вредност, као и за е-маил адресу само да буде доследна 255, али опет, могли бисмо да имамо исти дебату. Али ја ћу да урадим једну другу ствар овде на десној страни. Шта је моћна о бази података која може да уради много тешких тегова или комплексни посао за вас. Конкретно, ја стварно не занима шта мој студентски ИД бројеви. То је само требало да буде јединствен идентификатор у бази података па ја имам 32-битну сажето представљање тог студента тако да ја имам неки начин јединствено њихово идентификовање да не би било 2 Давидс, на пример, у класи. У ствари, ја ћу да проверим ту АИ пољу, ауто прираст, тако да база података, МиСКЛ, схвати Шта Сваки Новоубачена ученика ИД ће бити. Ја чак и не морају да брину о томе да се у мом коду, и ја ћу изабрати нешто испод индекса менију. Индекс спустите овде је основно, јединствен, индекс и цео текст. Ви можда можете погодити шта пар ових ствари су, али испоставило се у релационим базама података ти програмер или администратор база података доћи до превентивно дају савете на бази тога шта поља у табели су мало посебан. На пример, у овом случају ја ћу да кажем да је ИД ће бити примарни индекс, иначе познат као примарни кључ. Шта то значи по дефиницији је убудуће да ИД ће идентификује ученике у овој табели. Не студент ће имати исти ИД јер сам намеће ово ограничење или овај индекс. Штавише, оно ће то урадити за мене је то ће рећи МиСКЛ да ИД је посебан. Ја посебно стало ИД, тако да идемо напред и магију своје фенси структура података је, изградити неку врсту дрвета. Обично је то нешто зове Б-стабло, које нисмо гледају недеља пре, али то је још једна таква структура података слично у духу са бинарним стаблима и покушава да смо гледали, али то ће рећи бази података ово поље је толико важно да сам вероватно Желим да будем у стању да претражују на њега, иди напред и градити неку машту Структура података у меморији да убрза претраге, тако да идеално они су константно време, или барем што ближе да што је могуће тако да не пренесу у линеарно претраживање, која неће бити Свевишњи обављање приступ. Насупрот томе, е-маил адреса је могла бити примарни кључ. У теорији, емаил адреса свачији је јединствен, уколико сте поделили неке рачун, али генерално није добро користити нешто као стринг као примарни кључ јер ако је његов циљ у животу је да идентификује редова у табели не постоји разлог да се максимално користе 255 бајтова да идентификује некога ако можете извући са само 4 бајта или 32-битни инт. У принципу, примарни кључ треба да буде кратак и језгровит и идеално је нешто као цео број или великом инт, која се дешава да се 64 бита. Али е-маил адреса треба да буде јединствена, а једна од одлика базе података сувише је да се спроведе јединственост за мене. Избором јединствена овде, поред поште, иако се пошаљи помера са екрана, ја говорим са базом Не веруј ми. Не дозволите да убаците у базу података Исти емаил адреса двапут, чак и ако сам идиот и ја не веома добро са мојим оклијевања и другде ИФС и стварне ПХП кода и ја случајно да корисник региструје са постојећим емаил адресу база је још један ниво одбране за исправност како би се осигурало да је дупликат емаил адреса не завршавају у табели. Сада, са друге стране, за име вероватно не желите да се то јединствена јер онда никада не може бити 2 или 2 Давидс Мике Смитхс, на пример, у бази података, тако да је један само ћемо сами отићи. Идем да иде напред и кликните на саве у доњем десном углу, и све изгледа добро, али приметите овде ово је део који за сада нећемо трошити превише времена на јер је синтакса је мало комплексна, и не морамо креирати табеле све то често, али СКЛ сама језик, синтакса за које је овде да сам истакнута. Оно што заиста јесте пхпМиАдмин ствара на вебу ГУИ за вас са којима можете да уштедите време и не морају да се ручно откуцати прилично дуго СКЛ упит тако. Другим речима, ако сте желели да ручно креирате ову табелу, било на тој црној и белој линији, или чак у пхпМиАдмин користећи ову другу картицу, ова картица СКЛ где можете унети било СКЛ упитима хоћеш, искрено, то би ми узети минут да заиста запамтите целу синтаксу, па чак и тада вероватно не бих имао направио неке грешке у куцању, тако да је ово средство је корисно за ствари као што су то, и то је такође поучно. Можете да почнете да закључимо шта је синтакса само по лепом бојом кодирање које пхпМиАдмин је додао за наше визуелне удобности. Али сада хајде да урадимо то уместо ње. Пусти ме да идем на картици Уметање на врху, и дозволите ми да иде напред и ставите на пример ИД рецимо, заправо не занима. То ће ауто прираста. Ја ћу пустити договор базе са овим. Али ја ћу бити Дејвид, и мој е-маил треба да буде малан@харвард.еду. Идемо напред и овде ставити у Мајк Смит другу. Ја ћу себи дати презиме као и, и ми ћемо да га се смитх@екампле.цом, и онда, где да идем даље? Па, изгледа као да иду је дугме да кликнете, и воила. Обратите пажњу на врх 2 реда уметнуте. Ово је стварна СКЛ упита. То је алат пхпМиАдмин погубљен због мене, али је крајњи резултат, обавештење, ако сад идем у бровсе картици је да се види 2 редове у овој табели, веома подсећа естетски стола смо раније видели нашим корисницима из псет 7, од којих је Давид Малан, од којих је сада Мајк Смит. Али само да буде јасно, не треба да користите пхпМиАдмин, и заиста, ти ћеш ускоро бити писање кода за псет 7 која аутоматизује процес додавања редова, брисање редова, ажурирање редове и слично, па пусти ме већ идите на СКЛ таб овде и укуцајте СЕЛЕЦТ * ФРОМ студенти којима емаил = "малан@харвард.еду". Другим речима, претпостављам да сада имате неки ХТМЛ образац, а корисник укуцава у њиховом е-маил адресу, између осталих области, а циљ је сада у ПХП на задњој крају кода да стварно изгледају до друге да корисничке податке. Које је ваше пуно име? Који је ваш број ИД? Могли написати СКЛ упит овако, изаберите * од студената где је е = "малан@харвард.еду". И ако сам затим кликните одем, приметићете да сам, и заиста радим, да се вратим само један ред. Мајк је изостављен из овог скупа резултата, као колекције редова се обично назива, јер он нема исту адресу као и ја. Сада, опет, овде псет 7 ћете користити пхпМиАдмин као административна алатка и педагошки алат за учење на свој начин око света СКЛ, али на крају дана ћеш писати ове упите унутар стварног ПХП кода, па Останите у објашњења Замила у посебно где ћете добити турнеју дистрибутивне кода за овај проблем сет где смо вам дали не само естетика за пријављивање а лепо секси лого који каже ЦС50 финансија, али смо вам такође дали гомила функција које ће учинити ваш живот мало лакше. Такође смо писмени део псет за тебе, за пријављивање део њега посебно, да вам дају осећај репрезентативном дизајна који заправо користи контролер, на пример, индек.пхп, логин.пхп и слично, а онда ћете видети псет има шаблона директоријум која има све своје погледа, све естетике. И тако је укупан ток у псет 7 ће бити да ваши корисници посете контролер преко УРЛ-а у прегледачу. Тај контролер садржи ПХП код који си написао, а унутар вашег ПХП кода Можда неки линије СКЛ угнездио између двоструких наводника и прослеђује функцији смо писали зове упит који ће вам помоћи да разговарате са базом података без коришћења нешто слично административна алатка као пхпМиАдмин. Моћи ћете да напишете СКЛ изјаве у ПХП коду и добити назад ПХП низ резултатом сету, редови који заправо одговарају тај упит. И слично ћете бити у стању да уради убацује или брише или исправке или слично, синтакса за који је прилично сличан, па ћете видети из неких онлајн референце, од дистрибуције кода и од псет се спакују тачно како да се о то да радим. Схватите крају смо стварно само загребали површину СКЛ и МиСКЛ, али снага га је стварно да вас ослобађа да се фокусира на проблеме које желите да решите, употреба случајеви желите да спроведе без потребе да бринете толико много, бар на почетку, о томе где и како да сачувате и претраживање базе података, и ово је буквално где Фејсбук сама добила почетак коришћењем МиСКЛ, а затим користи више МиСКЛ сервере а затим више МиСКЛ сервере пре него што дуго док су они тада имали заиста почнете да размишљате о томе како да је тешко складиште податке, како да сачувате ствари још ефикасније, па иако ћемо узети здраво за готово чињеницу да индексира и јединствене ограничења и тако даље само радим тамо веома занимљив разговор да могу на крају да доведе до тако схватити да смо само ми загребали површину од чега би евентуално могло да ви или ваши пројекти постану веома мало великих података. Уз то је рекао, хајде да завршимо овде, а ми ћемо вас видети следеће недеље. [ЦС50.ТВ]