[Powered by Google Translate] [8-та седмица Продължава]
[Дейвид Дж. Малан] [Харвардския университет]
[Това е CS50. [CS50.TV]
>> Това е CS50, така че това е краят на седмица 8 тук.
Ние разбира се, имат малко ураган по-рано тази седмица,
така че сега това е наистина само аз и ти в тази лекция зала,
но днес ние продължаваме нашия разговор за PHP
и за уеб програмиране по-общо, и ние също се въведе идеята
на бази данни, по-специално един, наречен MySQL, която е доста популярна в наши дни,
в голяма степен благодарение на своята мащабируемост, както и, тъй като е свободен и с отворен код.
>> Но първо, погледнете там, където бяхме последния път.
Спомнете си, че гледах няколко примера Frosh УИ,
и това е отвратителна форма, че съм дошъл с около 15 + години
, за да имат студентите в университета регистър за първокурсници интрамурални спорт
без да се налага дълго и мъчително пътуване през двора вече да Уигълзуърт
да се плъзга физическо парче хартия под вратата някои Проктър.
Вместо това ние се преместихме всичко онлайн, но да се направи, че трябва да се възползват
на няколко технологии, така че, нямаме нужда от HTML, Hypertext Markup Language,
което отново е този език за маркиране, с които да направите уеб страници структурно.
>> С помощта на малко CSS тези дни, Cascading Style Sheets,
което ние използваме стилизация на уеб страница с помощта на малко по-различен синтаксис,
като има предвид, че HTML е за структурата него.
Ние също трябва да въведе уеб език за програмиране.
В този случай, ние ще използваме PHP и PHP ще ни позволи
за динамично изход съдържание, както и програмни неща като
изпращане на имейли, както беше случаят на бележката, напусна миналата седмица.
>> Спомнете си, че кодът за това е в две части.
Едно, имахме froshims3.php,
и това е до голяма степен маркиране с HTML форма вътре в него,
една малка част от CSS тук в стила атрибути
така че самата форма ще бъде центрирано на страницата, но освен това
имахме някои представителни входове форма, текстово поле, Checkbox,
някои радио бутони, изберете меню и бутон "Изпращане".
И чрез този формуляр, ние внесохме в файл, който очевидно е бил наречен register3.php,
което от своя страна изглеждаше малко нещо подобно.
Сега, по-голямата част от код в register3.php, изземване, за електронна поща.
Малко валидиране на формуляр, който бе представен, за да се уверите,
че полетата са били действително при условие, че се очаква.
После се обадихме някои PHP функции чрез малко по-нов синтаксис,
въпреки че е взаимствана от C.
>> Тази стрелка оператор ни позволява да направим използването на нещо, което се нарича обектно-ориентираното програмиране.
Ние няма да отида в това в подробности тук, но знам за сега
това е начин на функции, свързани с обекти,
които са специално типа на конструкцията, както видяхме в C.
Но за сега, просто вземете на вярата, че това е правилния синтаксис за използване
при използване на библиотека като тази библиотека PHPMailer.
И след това, до края на този файл бяхме динамично генерирани имейл
, които се изпращат да ми jharvard@cs50.net сметка
от моя jharvard@cs50.net сметка,
и ние информира потребителя, че те са били регистрирани за този спорт.
Това е до голяма степен това Frosh УИ сайт всички тези години
когато го реализира, предоставени на друг език,
но може би той ви показва силата, която имате
сега, че можете да изразите себе си не само програмно
на ниско ниво на език, като C, но на много по-високо ниво
с тези съвсем реални приложения по света като имейл, за да решават
някои реални световните проблеми.
>> Сега, разбира се, макар че аз използвам този скрипт за генериране на някои
имейли динамично от jharvard@cs50.net, която всъщност е на сметка
, че имам достъп до, да бъдат доста внимателни, за да изпратите
поща само от сметки, които всъщност са вашите собствени,
да не би нещата, които можете да получите в малко топла вода в живота.
С това каза, нека сега преход към решаването на друг проблем като цяло,
че на подпорни държави.
Сега, какво означава това всъщност означава?
HTTP, този хипертекст трансфер протокол,
всъщност е без гражданство протокол, и какво означава това е, че
когато дръпнете нещо като Google.com и след това натиснете Enter
обикновено браузърът ви има някаква на предене иконата, че тогава
резултатите в някои уеб страница се изтеглят,
спре да се върти и след това, че малка икона, и че в действителност предполага
HTTP е завършил някаква връзка със сървъра и това е всичко.
HTTP е без гражданство, в смисъл, че не поддържа
постоянна връзка със сървъра по същия начин Skype
или Gchat прави, защото с HTTP
предположението е, че след като веднъж сте пресилено уеб страница, че това е.
>> Сега, в действителност тези дни в сайтове като Facebook и Google Maps
и Twitter и други подобни има много по-голяма динамика, при която
дори и след тази икона ви спре да се върти в действителност може да получите повече актуализации
от сървър, повече туитове, повече актуализации на статуса на Facebook и други подобни.
Но дори и това е с помощта на техника, която ние ще говорим за една или две седмици
известен като Аякс с помощта на език, наречен JavaScript,
но в края на деня, HTTP все още е без гражданство.
И все пак, ако искате по някакъв начин да си спомня неща за потребител
дори след като са откъснати от вашия сървър
PHP си позволят сте средство за постигане на тази
защото, както видяхме последния път, PHP има редица свръхглобални
и супер отново е специална глобална променлива
, който е предаден от уеб сървъра и от самия PHP.
>> Не е нужно да се направи нещо, за да се сложи стойности в него,
и сред свръхглобални, които сме виждали до този момент са се и публикуват,
което е мястото, където автоматично за вас форма полета са,
, както и няколко други, които все още не сме виждали.
Вътре $ _SERVER някои специални променливи, свързани с самия сървър.
Какво е IP адрес, какъв протокол HTTP или HTTPS сте използвали,
искане метод да използвате и други подобни, така че има някои интересни,
пикантни подробности за сървъра, а в действителност, потребителят там, както добре.
Има $ _COOKIE, което е мястото, където тези неща, наречени бисквитки се съхраняват.
Ние няма да прекарват времето си на "бисквитки" се днес,
но знам, че сега "бисквитката" е само една малка част от информацията
уеб сървър може да засадят в уеб браузъра
и на свой ред си RAM или твърд диск на неговия компютър
да съхранява информация за даден потребител, например, тяхното потребителско име
, така че те не трябва да го въвеждате всеки път, когато влезете в или някои
уникален номер или идентификатор за този потребител
, така че да не се налага да ги тормозя със същите всякакви въпроси относно
преференции в бъдеще, но повечето от интерес
точно сега е $ _SESSION.
>> Този супер, които, подобно на другите, се връчва автоматично от PHP
когато пишете PHP-базирани уеб сайтове
може да се съхранява всичко, което искате, низове, числа,
плаващи точки, ценности, масиви, обекти,
наистина всичко, което искате, и ви позволява да я съхранява по такъв начин,
че дори ако потребителят посети сега и тогава
се връща минути или 5 минути от сега, защото
те вземат своето време, преди да кликнете някаква друга връзка
PHP ще гарантира, че каквото и да ви постави в тази сесия свръхглобална
минути или 5 минути преди все още ще бъде там, когато потребителят се връща.
И под капака свръхглобална се осъществява чрез
тези неща, наречени "бисквитки", но за сега, това е просто една абстракция
което е вид програмно еквивалент на количка за пазаруване.
Каквото и да програмист, в това
свръхглобална асоциативен масив ще бъде там известен брой минути по-късно
докато не го изтриете или докато потребителят не се затваря браузъра си напълно.
>> Нека да разгледаме един пример как това нещо действително се използва.
В counter.php между броя днешните код
имаме следния ред.
В началото на този файл имаме един куп сини коментари, които са безинтересни за сега.
Но в ред 13 имаме нов ред,
session_start, и че всъщност прави точно това, което казва.
Тя започва сесии.
Тя ви позволява да използвате този голям супер $ _SESSION, и това е толкова просто, колкото това.
Сега, ако ние продължим да изглежда на ред 16, нека се опитам да разбера какво е това уеб страница ще направи.
Ако (isset ($ _SESSION ["гише"), тогава давай
и се съхранява в контра променлива, малки брояч,
$ _SESSION ["Гише"].
Това изглежда се обявяване на локална променлива, наречена брояч
вътрешността на която е копие на всичко, което е вътре на свръхглобална
нарича сесия на мястото "контра".
Иначе, както изглежда, тази малка локална променлива брояч, се инициализира с 0.
>> Но след това няколко реда по-късно в 26 известие, че копие на сесията на борбата,
ключа му, има нов присвоена стойност, която е сегашната му стойност плюс един.
Накратко, този файл изглежда да се актуализира
един брояч, който се съхранява в рамките на сесията свръхглобална
от него увеличаване с 1, но за първи път запазва копие от предходната стойност
, като го поставите в локална променлива, наречена $ брояч,
и след това тук да видим това, което остава.
Оказва се, че е доста просто HTML.
В долната част на тази страница виждаме в линия 37, че съм посещавал този сайт
брояч няколко пъти, така че има няколко интересни функции.
Първо, това е ясно променлива, но това не е достатъчно просто да си сложи
$ Брояч в тялото на HTML, защото, разбира се
ако това е само между вашия PHP HTML е да се предположи, че е просто HTML.
Вие буквално искат $ брояч, за да се отпечата на екрана.
>> Но вместо от отпадане в режим на PHP
с това парче на синтаксиса, могат динамично да въведете стойност
много сходни в духа на това, което направихме миналия път с
вмъкване стойности в низове.
В действителност, това е само една съкратена нотация се казва, че нещо подобно буквално,
печат (контра) или дори нещо като ФОРМАТ (% S, брояч),
или дори, както може би сте онлайн или в учебниците,
има функция в PHP нарича ехо
който прави същото нещо, и всички от тях са просто вече многословни
казва <=
В този случай не е нужно да се сложи
думата PHP след въпросителния знак.
Това е съкратена нотация, отново, това, което току-що видяхме преди малко
който се отекна някаква стойност.
>> Нека да видим какво всъщност е крайният резултат от това.
Оставете ме да премина в нашия counter.php файл,
и ние ще видим, че Дейвид просто е направил грешка, като играят с кода.
Да вървим определят каквото и да е провалил,
и грешката изглежда да е там, няма по линия 37.
Според горната част на тази страница са посетили този сайт 0 пъти.
Ами, нека да вървим напред сега, и в горната част на браузъра щракнете върху
презаредите иконата и аз щракнете върху презареди,
и сега сте посетили сайта 1 път, 2, 3, 4, 5, 6, 7, 8.
И наистина, ако погледнем към източника на тази страница действителната изходния код се променя,
и забележите, че пълната липса на всяко PHP, и това е, защото
PHP код се оценява или тълкува страна на сървъра,
и така това означава, че на изхода на PHP скрипт е това, което в крайна сметка изпраща към браузъра,
което в този случай е някои суровини HTML и някои суровини текст.
Какво става тук?
>> Е, с относително няколко реда код, аз съм в състояние да се съхранява
постоянно в течение на няколко секунди, или ако ние чакахме достатъчно дълго,
минута, дори час, някаква стойност по начин, който прави HTTP
изглежда динамична, като че ли сме запазени
тази връзка със сървъра, и просто си спомня как го каза миналия път,
но в действителност има един куп на сложност става под капака
с участието на "бисквитки", които позволяват PHP да ми даде тази илюзия
на тази кошница като функция.
За сега, тривиален пример, при който просто съхраняване на цяло число,
но тази функция ще се върне, за да бъде от голяма полза
когато започнем да говорим за по-сложни проекти,
сред тях проблем определила 7.
Това е последния проблем в CS50.
Знам, че е толкова тъжно, но това, което ще намерите е, че отиваме да се заключи,
тази част на семестъра от действително преход
от контекста на C сигурност контекста на PHP
но, докато се използват някои от същите основи
сме говорили за известно време.
>> На целта с pset 7 е да се приложи CS50 финансите,
коя е вашата собствена версия на Yahoo Finance или Google Finance
или дори Etrade.com, при която имате възможност да
погледнете цените на акциите за дадени символи, но дори и повече от това
имате възможност да "купува" и "продава" запаси
, които се търгуват на различни фондови борси, тъй като тази начална страница
тук предполага, което наистина е степента, до която сме започнали
проблема за вас, имате логин формата, която пита за потребителско име и парола.
Има бутон Submit, но след това, тъй като в крайна сметка ние ще видим,
няма нищо наистина се случва под капака, тъй като все още
остава да приложи възможността да се регистрират нови потребители,
способността да се купуват акции, за да продават акции,
всъщност изглеждат текущите цени на акциите.
>> И наистина, това ще бъде като реалния свят е възможно, защото ние направихме
включва малко код, който ще ви позволи с една функция
да се обръщате Yahoo Finance, който чудесно прави свободни данни
за търсене на цените на акциите на фондовата символ или борсов символ,
и ще получите текущата цена на акцията на ден.
Данните, които действително виждат в този конкретен pset ще бъде
за реалния свят, тъй като той може да получи, така че вие ​​сте действително взаимодействие
с реални световни запаси, цените на недвижимите свят,
и ще видим колко пари може да направи може би
през следващите няколко дни играе със свой собствен набор проблем.
>> Но нека първо постави на сцената за това как да проектирате нещо, което със сигурност е по-сложно
от counter.php, че е по-сложно, отколкото всеки от примерите Frosh УИ до този момент,
и нека се опитаме да представим няколко парадигми, че ни позволи
както за pset 7 и може би за своя окончателен проект, ако направиш нещо уеб базиран
да поддържате кода си добре организиран, да пазят себе си нормален,
и да предприеме стъпка към сътрудничество, независимо дали в окончателния проект CS50
или извън нея, ако продължите да програмирате нещо в бъдещето.
Има тази обща парадигма дизайн
по компютърни науки и в разработката на софтуер по-общо
известен като MVC, модел оглед контролер,
и това е глупаво акроним, който описва една много хубава идея,
е разделянето на различни аспекти на програмата,
специално съхраняването поотделно на логиката или на бизнес логиката на уеб сайт
, така че всичко, което включва неща като
призовава функции и заявки бази данни и други подобни
се случва не между вашия HTML
а в отделни файлове, а всъщност е това, има един файл
обикновено, че сте нарича контролер
това е наистина мозъкът зад операцията, и ние ще видим един пример
от това само за миг.
>> Има един модел, който е програмен код
че говорите с вашите бази данни, че говори с Yahoo Finance и други подобни,
и тогава там е V в MVC, възгледите,
всички неща, които е свързана с естетика, файлове, които всъщност съдържат
HTML, може би вашата CSS и други подобни.
Идеята тук, както подсказва и тази картина, е, че администраторът
е файлът, тъй като ние скоро ще видите и ще особено в pset 7,
че светът говори чрез своите уеб браузъри.
Това е файл, който получава посетен на обществения интернет,
но контролера говори с потенциално модел,
който е един или повече други файлове, които съдържат код, свързани с данни,
код, свързани с бази данни и други подобни, а след това говори с
контролер един или повече други файлове, известни като гледка,
които са естетиката на дадена уеб страница, образци на видове,
, които биха могли да се вземат някои данни като вход, но в края на деня
единствената логика вътрешността на оглед трябва да бъде предоставяне на тези данни,
итерации една линия и всъщност плюе някои
HTML-предаване от него или дори нещо като PDF.
>> Това, което е хубаво за MVC е, че може да има различни гледни точки
въз основа на вида на устройството, в зависимост от вида на файлов формат, който всъщност
искаме да покажем на потребителя.
Нека да разгледаме няколко все по-сложни и добре проектирана примери
като се започне първо с версия 0 тук.
Нека вървим напред и да се отворят в нашия каталог MVC днес
файл с име index.php в директорията 0.
Забележете, това е супер проста и много underwhelming сайт
това е нещо на версия 0 на началната страница за CS50
и забележете как имаме връзка към Лекции, ние имаме линк към учебния план,
и ако аз следвайте връзката към Лекции известие, че URL
отгоре ще да преминете към lectures.php.
Ако след това следвайте връзката към Седмица едно известие, че URL промени на week1.php.
Изглежда има доста проста йерархична структура.
>> Нека хвърлим един бърз поглед под капака как е изложена,
И наистина, ако гледам index.php това е доста проста.
В действителност, въпреки че се обадих на този файл PHP няма реална програмен код.
Има коментар, че съм написал тук в PHP, така че потребителят не я види.
Разбира се, както и преди, всичко, което е между тагове PHP
получава тълкува, дори ако това е коментар, а да се тълкува коментар
означава просто да го изхвърлим в края на деня, а не действително
го изпраща към браузъра, така че всичко тук е само естетика.
Ако отворя подобно lectures.php това също е трудно кодиран файл.
Това се случва, да се нарича нещо. PHP,
но това наистина е само HTML и week1.php, week2.php
по подобен начин са само за маркиране, така че има един куп недостатъци на този дизайн.
Едно, че е огромно количество Copy / Paste.
Въпреки че единственото нещо, което се променя сред тези файлове е неподреден списък,
таговете Ли, аз все пак док тип, HTML, главата,
заглавие, плътно тяло, в близост HTML и повече
във всеки един файл, което означава, че ако някога искате да се преструктурират
тази уеб страница или да го restylize аз трябва да отида и да промените
всички тези файлове ръчно или с някакъв масивен и замяна.
>> Нека вземем една стъпка към една по-интелигентна, по-дълго мислене дизайн във версия 1 тук
което според мен прочетох, че сме включени, така че можете да играете заедно с
те по-спокойно у дома известие, че имаме тук
обобщение на файловете във версия 1 на този сайт,
и изглежда, че съм го вземат при себе си да вземе предвид
някакъв общ код, header.php и footer.php.
Е, нека да разгледаме какво има вътре първата от тези.
Header.php изглежда познато,
но забележете къде се отсече?
Веднага след ред 19, така че това е всичко, което е обща
от файловете index.php, lectures.php,
week1 и week2.php от предишния пример.
Това, което направих, беше копие и всичко прическа, която е обща за всички тези файлове,
го поставя в отделен файл заглавието, и съответно в footer.php
съм да прилага същия принцип като единствените интересни линии
в footer.php са тези две, плътно тяло и тясно HTML.
>> Но какво означава това сега е, че в новата версия
на index.php известие, колко просто може да получи.
Разбира се, малко по-загадъчен, малко по-малко интуитивен
да следват горе до долу, но Боже мой, всичко на този съкращения вече го няма.
Ние изискваме, използва PHP функция буквално призова изисква отгоре,
което е много напомнят, припомни на C # включват механизъм.
Ние изискваме header.php на върха.
Ние изискват footer.php в долната част, а единственото нещо, което е различно
или специално за този файл е съдържание, което е писано да бъде уникален за него.
Ако аз ли да ида, да речем, lectures.php, същият принцип се прилага.
Отново, някои коментари до върха, но след това изискват заглавието, изискват долен колонтитул,
и между това е само съдържание, което всъщност се променя.
И ако ние погледна в седмица 1 и седмица две, че ще видим
, че същият принцип е била приложена.
Е, ние не сме съвсем прави.
>> Нека хвърлим един поглед към версия 2, която има подобна структура,
но забележете, сега съм се въведе нещо друго.
В съответствие 10 въведохме helpers.php,
, което очевидно съдържа помощни функции.
Помощната функция по принцип е сравнително кратък функция
че ти пиша да ви помогне в различни места,
и нека видим какво има вътре в helpers.php.
В този случай, то изглежда, че има две функции.
Спомнете си онзи ден с нашия куб например
можете да дефинирате ваши собствени функции в PHP, и това, което съм направил сега е, че аз съм
дефинирани функции, наречени направи долен колонтитул и да направи заглавието,
на първия, което отнема параметър, наречен данни,
, чиято стойност по подразбиране е празен масив, както се предлага там,
и ние действително могат да напиша това още по-накратко в най-новата версия на PHP
казва площад скоба, затворени квадратна скоба.
Това означава, че празен масив с размер 0, но все пак масив.
>> Този екстракт функция е малко по-специално в
това, което прави е, че отнема за аргумент асоциативен масив
че има 0 или повече ключови двойки стойност и ако имате ключ на Foo
и стойността на бар екстракт функция
създава ситуация, в която сега, както и на ред 11,
имате локална променлива, наречена $ Foo чиято стойност е бар.
И ако сте имали повече ключове и стойности в данните масив,
по същия начин те ще бъдат извлечени в местната обхват
или името на пространството, така че footer.php и
същата идея тук, така че header.php
да имат достъп до тези променливи.
Всъщност, нека се отворят отново header.php
и привлече вниманието сега това, което изглежда като в тази версия.
>> Вместо твърд кодиране CS50 като заглавие за всяка една страница
забележите динамиката, че това е възможно сега.
В съответствие 5 Аз съм ехото заглавие променлива,
но първо аз мимоходом, че заглавието променлива функция, наречена htmlspecialchars.
Тъпо име за дадена функция, стига да е, но това наистина прави това, което казва.
Той гарантира, че всички специални символи
в низа, който е бил приет през правилно избягал HTML.
Това всъщност е начин за избягване на нещо, наречено кръста сайт скриптове атака
, при която някой може злонамерено или случайно
инжектира своя HTML във вашия сайт
чрез поставяне в някаква форма, например,
нещо, което не бяха доста очаква, особено JavaScript код,
, тъй като ние ще говорим за след седмица или две на път.
>> Това сега header.php, това е
в смисъл, че тя ви позволява да видите естетически съдържанието на някои данни.
Но по-конкретно, това е шаблон.
Това е вид на план от това, което искаме заглавната част на всяка страница, за да изглежда като
но има някаква динамика в това, че искаме титлата динамично да се добавят
въз основа на заглавието променлива
, която е извлечена, отново, когато се обадихме
функцията мазилка заглавието.
Сега, ако погледна мазилка долен колонтитул, има действително не е много, че точно сега
,, защото в footer.php има не динамика, каквато.
Може да има, но в момента това е трудно кодиран списък на два тагове,
но същата идея се прилага, така че всъщност обяснява защо
губим време с мазилка горен и мазилка букмейкър функция?
Нека вместо това сега във версия 3,
и във версия 3 помощници реших да го опростят още повече.
>> Нека мен има един рендер функция.
Нека да го вземе още един аргумент, този път наречен шаблон,
, чиято цел е да бъде името на шаблона,
и тогава ще се слеят надменно. PHP стойността на тази променлива,
и тогава, ако той съществува foo.php, bar.php или header.php и footer.php
тогава аз ще да вървим напред и извличане на променливи данни
и след това изисква по този път.
С други думи, да се използват сега, ако отворя index.php
забележите, че не се обадя вече заглавието мазилка.
Аз просто се обадете правят, но аз преминават в цитирания стойността на заглавната
да стане ясно кои шаблон Аз всъщност искате да заредите.
>> Тогава тук забележите това, което правя.
Съм преминаване в динамично ключ на правото на собственост,
стойността на CS50, и това също, както видяхме преди,
може да се направи по-кратка в последната версия на PHP
къде мога да заменят функцията на масива с квадратни скоби,
, който предлагам е дори по-четивен и сигурност
малко по-лесно да въвеждате.
И разбира се, с мазилка букмейкър покана на дъното,
ние не се притеснява да преминават във втори аргумент на всички, не асоциативен масив,
защото няма нищо динамично вътрешността на този долен колонтитул.
Той е само на някои близки тагове за HTML.
Добре, ние сме като стъпки към наистина почистване нещата тук,
но нека се отворят два крайни примера.
Това, номер 4, забележете, че съм направил съзнателно решение
да се подобри предишния пример като най-накрая с някаква йерархия с моите файлове.
>> Забележете, че в тази справка, в това ми прочете, аз въведохме
на включва директория и директорията с шаблоните
, чието съдържание ще бъдат нещата, които искате да включите
и шаблони, които искат да правят, съответно.
Това е наистина ме е анален и се опитват да пазят нещата подредено,
съхраняват файлове, свързани заедно, но крайният резултат
е, че сега имаме малко tidier настройка, но ние трябва да помним
, например, index.php
, когато се изисква преписката helpers.php
сега ние трябва да го изиска чрез включва / helpers.php
, отколкото просто казвам helpers.php, защото сега това е действително в под директория.
Сега, като настрана, вие ще видите в тези примери и някои други
функции като изискват, да поиска веднъж.
Има функция се наричаше включват, и всички те имат малко по-различно поведение.
Тук казвам да поиска веднъж, за да направи супер ясно, че искат само тези
помощници, включени в проекта си веднъж.
Но ако аз съм внимателни и ако аз съм всъщност мисли чрез моята логика правилно
тя също би трябвало да са достатъчни само за да се каже, изискват отгоре
толкова дълго, както аз самият не случайно се изисква един и същи файл другаде.
В действителност, това е малко по-ефикасен начин за правене на нещата след това с помощта
да поиска веднъж, така че ще го отрежете просто изискват.
>> Нека вземем една стъпка по-нататък.
Този последен пример, версия 5, има дори по-чист йерархията на папките.
Забележете, какво съм направил тук според мен се чете в тази финална версия
е сега аз имам HTML директория, която аз съм имал през цялото това време,
но вътре от там сега е само index.php, lectures.php,
week1.php и week2.php.
Включва сега живее заедно на HTML директория,
на същото ниво като братя и сестри, така да се каже.
Така че папката с шаблони.
Ключът за вкъщи тук е, че въведохме малко по-сложна структура,
но ключова характеристика е, че само файлове
, които трябва да станат уеб достъпни, публично адресируема
URL на обществения интернет в HTML моята директория.
>> Междувременно, други файлове, helpers.php, footer.php
header.php, че може би може би са по-чувствителни,
може би помощници действително има някои потребителски имена и пароли или някакво интелектуално
собственост на мина, функционира, аз наистина не искам светът да види, дори и ако случайно.
Това е добра практика да се пази от публичната директория на HTML
всички файлове, които сами по себе си не трябва да са публични.
Всичко, което трябва да се направи в този случай, когато, например,
index.php директорията на HTML файл,
ние просто трябва да бъдем малко по-внимателни, когато се изисква
или да поиска веднъж този файл.
Първо трябва да направя .. да отиде в директория,
тогава / включва / helpers.php
да се потопите обратно, за да получите файла, че ме е грижа за.
>> Всякакви въпроси относно MVC
или този сравнително прост въплъщение него?
И нека да е ясно, че ние се фокусирахме съвсем малко по
V, мнения и факторинг, от тези шаблони.
Ние наистина не съм отличава м от C, просто все още.
В действителност, има наистина не съм тук, и дори C
контролер, наистина не се прави чак толкова много, но вие ще получите много повече
запознати с двете тези две писма от MVC,
или по-скоро, вие ще получите много по-запознати с C
в MVC за проблем набор 7, така че е повече от това на хоризонта.
Въпроси?
Има всъщност няма никой.
>> Добре, нека сега се движат на втората и последна тема за днес.
Това е въвеждането на база данни.
До този момент сме имали няколко начина за съхраняване на данни.
Ние сме използвали променливи.
Обратно в нашия файл C, I / O дискусия започнахме да използваме текстови файлове
и използване на файлове като fprintf, а след това дори започна
говорим за CSV файлове малко, стойности, разделени със запетая,
така че всичко това ни позволи да има данни, съхранявани
или без постоянно или систематично.
Но дори CSVs не са наистина води до търсене
и вмъкване и изтриване.
Това е наистина просто глупав текстов файл, разделени със запетаи
ред по ред по ред по ред, така че ако искате да
търси този файл най-доброто, което можете да направите наистина е линейна търсене.
Трябва да започне в началото на файла, прочетете всичко в
и гледам за някои стойност на интереси.
Ако искате да се вмъкнете в нея, което трябва да направите същото нещо,
итерации върху него и вмъкване на определено място,
и в действителност, трябва да направим всичко на търсещата себе си логика.
>> Вие не може да направи умен модел за съвпадение на CSV файл, освен ако не се напише код.
Не можете да направите филтриране на CSV файл
освен ако не се напише код.
Не би ли било хубаво, ако някой друг във всички усилия
действително да търсите лесен и вмъкване лесно
и заличаване и актуализиране и т. н.?
Това е точно какво е база данни.
SQL, Structured Query Language, е още един език
, че ние ви представяме тук днес, но това също е доста достъпна,
и това, което ние наистина ще направим е просто извади от него някои от най-важните
характеристики, така, че за pset 7, и ако правиш нещо, уеб базиран,
своя окончателен проект, имате възможност да изразите себе си
на данни заявки.
Вие имате възможност да съхранявате малко или много на данни
в много по-структуриран начин, че в края на деня
направят живота ви по-лесно, защото с SQL можете да изразиш себе си
много по-прецизно, много по-методично, за да се
се върна някакво подмножество от данни от по-голям корпус на данни.
>> Можете да мислите за база данни, в този случай, SQL база данни, наистина като Excel
или номера, когато това е електронна таблица,
или може би няколко електронни таблици, както и за електронни таблици, разбира се,
редове и колони, както и че е така, защото
SQL бази данни са релационни, релационна в смисъл,
че те съхраняват данни по отношение на тези таблици,
редове и колони.
Те са по-високоефективен от нещо като електронна таблица,
и електронна таблица е предназначена да бъде използвана от човека.
Базата данни е предназначен да се използва от един програмист
писане на код срещу него, така че въплъщението на база данни
ще бъде която и да е от командния ред.
>> Един от най-популярните релационни бази данни там е, отново, MySQL,
, което е чудесно безплатно, много високо изпълнение, и това е, което
Facebook се използва много по-рано и до известна степен и до днес
да се съхранява много от данните си, и ще видим в един момент
че използването на сравнително прости команди
ние можем да изберете данни, вмъкване на данни, актуализиране на данните,
изтриване на данни и други подобни, но слава Богу, има по-лесен за употреба интерфейс
, отколкото просто напишете в черно и бяло ред тук.
Ние ще използваме за pset 7 и извън безплатен инструмент, наречен PhpMyAdmin.
Името не е случайно.
Инструментът се случва, да се реализира в PHP,
но това е фундаментално без значение.
Какво е полезно за PhpMyAdmin е, че това е уеб-базиран полезност.
Сме го предварително инсталирани в уреда за вас,
и с него можете да създавате таблици в база данни,
можете да вмъкнете данни, изтриване на данни, и обикновено виждам
вашите данни в доста лесен за употреба среда.
Вашите потребители няма да използвате PhpMyAdmin.
>> Това е наистина само една административна или средство за разработчика
, с която да се види и да се мушкам около вашите данни и да разбера как да го структурира,
много като теб себе си може да използвате Excel или номера,
но това ще бъде един чудесен начин за визуализиране какво става под капака
така че да можете да се съсредоточите върху интересен проблем за решаване, а не толкова
на мистериозните команди.
Нека да разгледаме един пример на данни, които могат да се съхраняват tabularly
в релационна база данни.
Ето един такъв пример.
Сега, за съжаление, все пак е допуснал грешка от страна на хвърлят твърде много думи
и графика при вас, но ако се усъвършенствате в само на
ID колона, колоната потребителско име и хеш колона,
това е ефективно електронна таблица, но се случва да бъде фрагмент
на таблица вътрешността на уреда
файл, който ние Ви предлагаме в проблем набор 7.
>> По-специално, ние ви даваме файл, който представлява
на потребителя масата, така таблица, съдържаща потребители с три колони,
един от които е уникален идентификатор, започвайки от 1 и да бъдат увеличени след това.
Втората колона е потребителското име, както и тези от вас, които направих Hacker,
Hacker издание за pset 2, може да признае някои от тези потребителски имена най-малко.
От дясната страна са пароли, но те не са буквални пароли.
Те са хешове от него, така че се оказва,
че съхраняване на пароли в база данни е наистина лоша идея.
Ти вероятно всички четат в някакъв момент от някои сайт
или някаква компания база данни компрометиран и тогава ще трябва да
смените паролата си, което трябва да получи възстановяване на нещата
защото някои лош човек всъщност се разби в профила си като резултат.
>> Съхранение на пароли в чист текст, некриптиран в база данни
е напълно магаретата, и все пак това е много забавен
след това да прочетете за някои много добре познати компании
понякога в пресата, чиито бази данни са изложени на риск,
и тази част не е смешно, но факта, че базите данни съдържат некриптиран
пароли е нелепо, защото буквално с един ред код
можете да защитите срещу тази конкретна заплаха, и това е, което ние сме направили тук.
Дори и за нашата фалшива малко CS50 финансите версия
ние се криптира пароли за добра мярка, и факта, че
всички тези пароли започват с $ 1 $ е само конвенция.
Това просто означава, че те са криптирани или наистина сегментира,
което е като еднопосочна функция за криптиране
, с което не може да се обърне неговите ефекти с нещо, наречено MD5.
>> Фактът, че 50 е след това означава, че сол стойност
на 50 е била използвана за хеширане на всички тези пароли, с изключение на една.
Mine, разбира се, както можете да видите там, ха,
използване на различна сол, така че тези от вас, които се леко спънал
може би в Hacker 2, които биха могли да са резултат от нашата, които са използвали
различна хеш от другите, защото паролата ми е всъщност един и същ
като някой друг потребител там.
В действителност, ако сте били чака всички тези седмици, за да разберете
какви са тези пароли са тук са паролите, които са били оспорени
да се справи в Hacker издание на проблем набор две, така че никой твърде сложен.
В действителност, Малан беше същото като jharvard,
но ако се върнем изглеждаше различно.
>> Съсредоточете се върху jharvard в пурпурно, защото те са били осолени различно.
Алгоритъмът е смутен в начина, по който
хеш стойност, криптирана стойност изглежда малко по-различно
защото входовете са малко по-различни, но паролата под капака
все още е в крайна сметка пурпурно.
Сега, на кого му пука за това?
Е, ние сме с примерни потребители, потребителски имена примерни
и на хешовете на паролите си, така, че вие ​​всъщност имат някаква
клиенти за CS50 финансите, когато за първи път сляза на земята с кода си.
Ще трябва да се прилагат повече маси вътре в MySQL, в рамките на базата данни.
Ще трябва да се създадат повече електронни таблици, ефективно, но ние решихме да ви давам този един
, за да започна, и ще видите, че спецификацията проблем набор
ходи през процеса на вноса на тази таблица
, а също и обяснява какво някои от характеристиките са
и вие ще видите, че ние ви предоставяме с код
да се справят с хеширане или криптиране на тези пароли,
така че не е нужно да се притеснявате твърде много за MD5 или като всъщност е всичко това.
>> Така че, SQL, Structured Query Language.
Това е съвсем просто, на езика, ние сме на път да започнете да използвате в pset 7
а може би и извън нея, за да поиска данни от бази от данни.
Данните се, отново, съхранявани tabularly в тези релационни таблици, колони и редове,
но използването на някои сравнително прост синтаксис като изтриване,
вписване, актуализиране и изберете можем да направим точно това.
Можем да изтрием от базата данни, поставете
актуализиране на данни, както и да изберете, това е, извличане на данни от базата данни.
Как да направим това?
Нека вървим напред в уреда.
Остави ме да извадя на http://localhost,
което, отново, е местната самия уред.
Това е по подразбиране псевдоним.
И ме пусна / PhpMyAdmin.
Това се случва да бъде специален URL, че уредът е предварително конфигурирано да се разбере
, което веднага ме пита за потребителско име и парола.
>> Както обикновено, аз отивам да въведете jharvard и червено,
но осъзнават, че е администраторски акаунт на компютъра.
Това е просто съвпадение, че има и jharvard регистрирани за CS50 финансите.
Jharvard, пурпурен, въведете ми дава потребителски интерфейс, който видяхме
преди да зърне за момент, и това е малко поразителен на първо,
но Бъдете сигурни, вие никога няма да бъдете ще трябва да щракнете върху по-голямата част от връзките в този инструмент.
Ще се използва една малка част, които са супер полезни,
първият от които е базите данни тук.
Ако отида до бази данни, обърнете внимание, че аз съм подканени да създадете база данни.
Това е като създаването на нов файл на Excel, ефективно.
Отивам да вървим напред и да се обадя тази лекция, а аз съм просто ще игнорира областта там, съпоставяне.
Той е свързан с представяне на данни в него,
и аз отивам да щракнете върху Създаване и сега забележите, като пусна на създаване на
на лявата страна, където се казва, не бази данни
Скоро трябва да видите базата данни на лекция.
>> Ако аз сега кликнете на лявата страна, лекцията база данни,
забележите разделите ми се промени малко.
Имам структура, SQL, износ, внос и някои други неща.
Структура е почти празен.
Не са намерени таблици в базата данни, както се казва тук,
така че нека да създадете таблица, и да вървим напред и да създадете таблица
искали студентите, както и колко колони искате?
Нека запазим тази проста, и нека рекорд за всеки ученик
идентификационен номер, име и имейл адрес.
>> Ние ще продължаваме да го прости подобно, така че три колони, отидете.
Форма, която виждате тук, е малко разхвърлян и завладяващ,
но ние просто трябва да отидете през него ред по ред, така че наистина бързо да дадем
първата колона в тази база данни името на ID за единен идентификатор.
Тя ще бъде цяло число. Всъщност мога да игнорира дължина и ценности.
Едно цяло число ще бъде 32 бита Без значение какво ще пишете там, така че нека оставим празно.
Стойност по подразбиране, бих могъл да го направи нула, както е определено.
Отивам да напусне сам. Нека не се тревожи за стойности по подразбиране.
Да превъртете тук надясно, атрибути.
Това е интересно.
Да вървим напред и донякъде произволно да се каже, че документи за самоличност трябва да бъде грозен.
Нека не губим никакви отрицателни числа.
>> Да вървим 0-4000000000, или да даде,
и след това да не се докосва някоя от тези области, просто все още там,
но тогава нека да въведете име тук,
и след това другата е електронна поща, така че уловът е имейл
и име, очевидно не цели числа, така че нека променим тези на друго поле.
Оказва се, VARCHAR, с променлива дължина Чар,
е като низ в база данни SQL
но с различна дължина, а всъщност трябва да го кажа предварително
Максималната дължина на низа, така че аз ще съм до известна степен произволно
от тип конвенция 255 знака.
Бих могъл напълно да се каже 32. Мога да кажа, 1000.
Вид необходимостта да реши за себе си въз основа на демографски какво е
най-дългото име на студента и с този номер или малко по-голям,
но това, което е хубаво около VARCHAR е, че не става за губене
255 байта на името на всеки студент.
Ако Дейвид няма да се използват цял ​​255 байта,
но това е горната граница, така че аз просто ще отида с 255 от конвенцията,
но бихме могли дебат, който да бъде по-ниска стойност, както и за имейл адрес
само за да бъде последователен 255, но отново, бихме могли да имаме същия дебат.
Но аз ще направя нещо друго тук на дясната страна.
>> Какво е мощен за база данни е, че той може да направи много вдигане на тежки предмети
или сложна работа за вас.
По-специално, аз наистина не ми пука какво са ми идентификационните номера на ученика.
Това е просто писано да бъде уникален идентификатор в базата данни
така че имам 32-битов сбито представяне на този ученик
така, че да има някакъв начин да ги идентифицира еднозначно
не би да има две Давидс, например, в един клас.
В действителност, аз отивам да се провери това поле AI, автоматично увеличение,
така, че базата данни, MySQL, разбира,
ID всеки добавя студент ще бъде.
Аз дори не трябва да се грижат за това в моя код,
и аз също ще избере нещо под менюто на индекса.
Индексът падащото тук е първична, уникален,
индекс и пълен текст.
Вие може би Предполагам, че това, което няколко от тези неща са,
но се оказва, в релационни бази данни
сте програмист или администратор на база данни стигнем до изпреварващо
даде съвети към базата данни кои области
в таблица са малко по-специален.
>> Така например, в този случай аз отивам да се каже, че ID
ще бъде основен индекс, иначе известни като първичен ключ.
Какво означава това по дефиниция е, че ID занапред
ще идентифицира по уникален начин учениците в тази таблица.
На студентите ще имат същия ID, защото аз съм налагането на това ограничение, или този индекс.
Освен това, за какво ще направиш за мен, е, че ще каже
MySQL, че ID е специален.
Ми пука особено за ID, така че давай напред и да направим магия ви харесва структура на данните,
изграждане на някакво дърво.
Обикновено това е нещо, наречено B-дърво, което ние не погледна седмици,
но това е друга такава структура на данните, подобни по дух на двоични дървета
и се опитва, че ние погледна, но тя ще каже
до базата данни тази област е толкова важно, че вероятно
искам да бъде в състояние да се търси по него, давай напред и да изградят някаква фантазия
структурата на данните в паметта, за да се ускори търсенето, така че в идеалния случай
те са константно време или поне толкова близо, че е възможно
така че да не се прехвърлят в линейно търсене, което няма да бъде
най-високо изпълнение подход.
От друга страна, имейл адрес, може да бъде първичен ключ.
>> На теория, имейл адрес на всеки е уникален, освен ако не сте споделяне на някои сметка,
но това по принцип не е добре да се използва нещо като низ
като първичен ключ, защото ако своята цел в живота е да идентифицира по уникален начин
редове в таблицата си, че няма причина да се използва 255 байта максимално
за да може еднозначно да идентифицира някой, ако може да се размине само с 4 байта
или 32-битова вътр.
Като цяло, първичен ключ трябва да бъде кратък и по-кратка
и в идеалния случай нещо като цяло число или голяма INT, което се случва да е 64 бита.
Но имейл адрес трябва да бъде уникален, и една от характеристиките на база данни
е да наложат уникалност за мен.
С избирането на уникален тук до имейл, въпреки че самата имейл
се превъртат на разстояние от екрана, аз казвам на база данни
не ми се довериш.
Не ме оставяй да вмъкнете в базата данни
същия имейл адрес два пъти, дори и ако аз съм идиот и не съм
много добре с моите федерации и другаде федерации и действителното PHP код
и аз случайно позволи на потребителите да се регистрират със съществуващ имейл адрес
базата данни е още едно ниво на защита за коректността
да се гарантира, че няма дублиране имейл адрес не се окажете в таблицата.
>> Сега, от друга страна, за името вероятно не искате да направите това уникално
защото тогава никога не може да бъде два Давидс или две Майк Смит, например,
в базата данни, така че един ще оставим на мира.
Отивам да вървим напред и щракнете върху Запиши в долния десен ъгъл,
и всичко изглежда добре, но забележите тук
това е част, че за сега няма да прекарват твърде много време в
защото синтаксисът е малко по-сложен, и ние не трябва да създавате таблици
всички, че често, но SQL сама по себе си е език,
синтаксиса, за които е точно тук, че съм подчертано.
PhpMyAdmin наистина е тя създава уеб-базиран GUI за вас
, с която можете да спестите време и не трябва ръчно да въведете
доста дълго SQL заявка подобно.
>> С други думи, ако искате да създадете ръчно тази таблица,
или, че черно и бяло ред или дори в PhpMyAdmin
с помощта на този друг раздел, SQL този раздел, където можете да въведете всички въпроси, SQL
искате, честно казано, това щеше да ми отнеме минута
действително помня целия синтаксис, но дори и тогава вероятно ще има
направи някои правописни грешки, така че този инструмент е полезен за такива неща, а тя също е поучително.
Можете да започнете да си представите какво е синтаксиса
само с хубав цвят кодиране, че PhpMyAdmin е добавянето
зрителната ни удобство.
Но сега нека да направим това, вместо.
Нека отидете на раздела Вмъкване на върха, и ме пусна напред и поставете например
ID да кажа, всъщност не ми пука.
Това ще Авто инкремент. Аз няма да позволя на сделката база данни с това.
Но аз се Дейвид, и моя имейл трябва да бъде malan@harvard.edu.
>> Да вървим напред тук и във филма на Майк Смит като друг.
Ще се даде последен име, както и,
и ние ще му бъде smith@example.com,
и след това къде да отида следващия?
Е, това прилича на движение е бутона, за да кликнете върху него и готово.
Бележка на върха 2 вмъкнатите редове.
Това е реалната заявка SQL.
Това е на PhpMyAdmin инструмент, екзекутиран за мен,
но крайният резултат, забележка, ако сега отидете на раздела разглеждане,
е да се види два реда в тази таблица, много напомнящ естетически
на масата видяхме по-рано за нашите потребители от pset 7
един от които е Дейвид Малан, единият от които сега е Майк Смит.
Но само за да бъде ясно, че не е нужно да използвате PhpMyAdmin,
и наистина, вие сте най-скоро време ще се пише код за pset 7
, която автоматизира процеса на добавяне на редове, изтриване редове, актуализиране на редове и подобни,
така че нека, вместо да отидете на раздела на SQL тук
и вида Изберете * от студенти, където
електронна поща = "malan@harvard.edu".
>> С други думи Предполагам, че сега имате
някои HTML форма, и типове потребители в електронния си адрес, наред с други области,
и целта сега е на гърба края код в PHP
действително да търсите други подробности на този потребител.
Какво е вашето пълно име? Какъв е вашият ID номер?
Можете да напишете SQL заявка като тази, изберете * от студенти
където имейл = "malan@harvard.edu".
И ако след това щракнете върху, забележете, че трябва да и наистина аз, да се върнат само един ред.
Майк е пропуснато от този резултат, тъй като събирането на редове
обикновено се нарича, защото той не разполага с същия имейл адрес като мен.
>> Сега, отново, тук за pset 7 ще използва PhpMyAdmin като административен инструмент
и педагогически инструмент, за да научат своя път
около света на SQL, но в края на деня
ти започваш да се пише на тези въпроси вътре в действителният код, PHP,
и така следете в репетиция Zamyla по-специално
където ще получите една обиколка на разпространение на кодове за този проблем,
където сме ви даде не само естетиката на страницата за вход
и хубаво секси лого, което казва CS50 финансите, но ние сме също ви е дал
един куп функции, които ще направят живота ви по-лесно.
Ние също така писмената част на pset за вас,
вход част от него по-специално, за да ви даде чувство на представител дизайн
че всъщност използва контролер, например, index.php,
login.php и други подобни, и тогава ще видите pset също има шаблони директория
, която има всички вашите възгледи, на естетиката.
И така цялостния работен процес в pset 7 ще бъде, че
вашите потребители посещават контролер чрез URL адрес в браузъра.
Контролер съдържа PHP код, който сте написали, и вътрешността на PHP код
биха могли да бъдат вложени в някои линии на SQL между двойни кавички
и подава на функцията писахме заявка
, които ще ви помогнат да говоря с базата данни, без да използвате нещо подобно
административен инструмент като PhpMyAdmin.
>> Вие ще бъдете в състояние да напише SQL отчети в PHP код
и да се върнат PHP масив от резултати,
на редовете, които съответстват на тази заявка.
И по същия начин вие ще бъдете в състояние да направи вмъква или изтрива
или ъпдейти или подобни, синтаксиса, за която е доста сходна,
и ще видите от някои онлайн препратки, от разпространение на кодове
и от самата pset пакет как точно да отида за това.
Осъзнайте, в крайна сметка ние сме наистина само надраскване на повърхността на SQL
и на MySQL, но силата на наистина е, че тя ви освобождава
да се съсредоточи върху проблемите, които искате да се реши, случаите на употреба, които искат да приложат
без да се налага да се притеснявате толкова много, поне в началото на
как и къде да се съхранява и търси в база данни,
и това е съвсем буквално, където Facebook си има своето начало
използване на MySQL и след това с помощта на повече сървъри MySQL и след това повече сървъри MySQL
преди дълго, докато след това те трябва наистина да започнем да мислим усилено за това как да
съхраняване на данни, как да съхранявате нещата още по-ефективно,
така че дори и ние ще приемаме за даденост факта, че индекси и уникални ограничения
и така нататък просто работа, има един много интересен разговор
че това може всички в крайна сметка да доведе до, така осъзнават, че ние просто чесане на повърхността
на това, което може в крайна сметка за вас или вашите проекти стават доста големи данни.
>> С това каза, нека да приключим тук, и ние ще се видим следващата седмица.
[CS50.TV]