[Powered by Google Translate] [Semajno 8, daŭrigis]
[Davido J. Malan] [Universitato Harvard]
[Jen CS50.] [CS50.TV]
>> Ĉi tiu estas CS50, do ĉi tiu estas la fino de Semajno 8 tie.
Ni kompreneble havis iom de uragano komence de ĉi tiu semajno,
tial nun estas vere nur vi kaj mi en ĉi tiu prelego halo,
sed hodiaŭ ni daŭrigos nian konversacion pri PHP
kaj pri ttt programado pli ĝenerale, kaj ankaŭ ni enkondukos la ideo
de datumbazoj, precipe unu nomita MySQL, kio estas sufiĉe populara tiuj tagoj,
en granda parto pro lia escalabilidad tiel kiel ĉar lia esti libera kaj malfermita kodo.
>> Sed unue, rigardu, kie ni cxesis lasta fojo.
Memori, ke ni rigardas la pluraj Frosh IMS ekzemploj,
kaj ĉi tiu estis la malbelega formo kiun mi eliris kun iuj 15 + jaroj
por havi studentoj sur kampuso registriĝi por freshman intramural sportoj
sen efektive devi trek plu trans la korton al Wigglesworth
gliti fizika peco de papero sub iuj Proctor la pordo.
Anstataŭe ni kopiis cxion interrete, sed fari tion ni bezonas por fari uzon
de kelka teknologioj, do, ni bezonis HTML, hiperteksta markado lingvo,
kiu denove estas ĉi markado lingvo per kiu vi faras retpaĝojn strukture.
>> Uzanta iom de CSS tiuj tagoj, akvofalo stilo littukoj,
per kiu ni uzas stylizations de la retpaĝo uzante malmulte malsama sintakso,
dum la HTML-ĉiu estis proksimume la strukturo largxo.
Ni ankaŭ bezonas enkonduki retejo programlingvo.
En ĉi tiu kazo, ni uzos PHP, kaj PHP tuj permesos nin
al dinamike eligo enhavo tiel kiel fari programita aĵojn kiel
sendi retpoŝtojn, kiel okazis en la noto ni forlasis lasta semajno.
>> Memoru ke la kodo por tio estis en 2 partoj.
Unu, ni havis froshims3.php,
kaj tio estis plejparte markado kun HTML formo ene de ĝi,
ete de CSS tien en la stilo atributoj
por ke la formo mem estus centrita sur la paĝo, sed preter tio
ni havis iuj reprezentanto formo enigoj, teksto kampo, checkbox,
iuj radio-butonoj, unuaranga menuo, kaj submeto-butonon.
Kaj tra ĉi tiu formo, ni donita al dosiero kiu ŝajne nomas register3.php,
kiuj sin rigardis iom io tiamaniere.
Nun, la plejparto de la kodo en register3.php, revokon, temis retpoŝto.
Ĝi faris iomete da kontrolada de la formo kiu estis afiŝita certigi
ke la kampoj estis efektive provizis kiuj atendis.
Tiam ni nomas iujn PHP funkcioj uzante iomete nova sintakso,
kvankam ĝi estas pruntita de C.
>> Ĉi sago operatoro ni permesas uzi iun nomita objekteman programadon.
Ni ne iros en tiun de neniu detalo tie, sed scias nun
ĝi estas maniero de havi funkcioj asociita kun celoj,
kiu estas speciala tipo de strukturo, kiel ni vidis en C.
Sed nuntempe, nur prenu sur fidon ke tiu estas la ĝusta sintaksa uzi
uzinte biblioteko kiel ĉi PHPMailer biblioteko.
Kaj poste por la fino de ĉi tiu dosiero ni dinamike generas retmesaĝon
ke got sendis al mia jharvard@cs50.net konton
de miaj jharvard@cs50.net konton,
kaj ni informis la uzanto laŭe ke ili estis registritaj por tiu sporto.
Ke estas preskaux kion la Frosh IMS retejo faris ĉiujn tiujn jarojn
kiam mi implementado ĝin, koncedis, en malsama lingvo,
sed montras al vi, eble la povon, ke vi havas
nun ke vi povas esprimi vin mem ne nur programmatically
je malalta nivelo en lingvo kiel C sed en multe pli alta nivelo
kun tiuj tre reala mondo aplikoj kiel retpoŝton al reale solvi
iuj reala mondo problemojn.
>> Nun, kompreneble, kvankam mi uzas tiun skripton por generi iujn
retmesaĝoj dinamike el jharvard@cs50.net, kiu estas ja konton
ke mi havas aliron al, do esti sufiĉe zorgema sendi
sendi nur de rakontoj, kiuj estas efektive viajn proprajn,
ke aĵoj vi en iom de varma akvo en la vivo.
Kun kiu diris, ni nun transiro al solvanta malsamaj problemo en aro,
tiu de konservante ŝtatoj.
Nun, kion signifas ĉi reale signifas?
HTTP, tio hiperteksto transigo protokolo,
estas fakte apátrida protokolo, kaj kion tiu signifas, ke
kiam vi elsxiros iu kiel Google.com kaj poste batis eniri
kutime via retumilo havas ian spinning ikono kiu tiam
rezultoj en iu retpaĝo esti malŝarĝitaj,
kaj poste tiu malgranda ikono detenas ŝpinita, kaj kiu efektive sugestas
ke HTTP kompletigis ian rilaton al la servilo kaj tio estas ĝi.
HTTP estas apátrida en la senco ke ĝi ne subtenas
konstanta konektiĝi al la servilo en la sama maniero Skype faras
aŭ Gchat faras ĉar kun HTTP
la supozo estas, ke iam vi prenis retpaĝo jen ĝi.
>> Nun, en realo tiuj tagoj en lokoj kiel Facebook kaj Google Maps
kaj Twitter kaj similaj ekzistas multe pli dinamismo per
eĉ post ke ikono ĉesu ŝpini vi povas fakte ricevas pli ĝisdatigojn
de la servilo, pli tweets, pli stato ĝisdatigojn en Facebook kaj similaj.
Sed eĉ tio estas uzanta teknika kiu ni raportas en unu-du semajnoj
konata kiel Ajax uzante lingvon nomata JavaScript,
sed fine de la tago, HTTP estas ankoraŭ apátrida.
Kaj tamen, se vi volas iel memoras aferojn pri uzanto
eĉ post kiam ili jam malkonektita de via servilo
PHP faras pagi al vi per fari tiun
ĉar, kiel ni vidis lasta fojo, PHP havas plurajn superglobals,
kaj superglobal estas, denove, speciala tutmonda variablo
ke tio enmanigis al vi per la TTT-servilo kaj per PHP mem.
>> Vi ne devas fari ion por meti valorojn en ĝi,
kaj inter la superglobals ni vidis ĝis nun estas akiri kaj afiŝi,
kio estas kie formo kampoj estas metitaj aŭtomate por vi,
tiel kiel paro de aliaj, kiuj ne vidis ankoraŭ.
Ene de $ _server kelkaj specialaj variabloj ligitaj al la servilo mem.
Kio estas la IP-adreso, kion protokolo, HTTP aŭ HTTPS vi uzas,
kio peto metodo vi uzas kaj similaj, do tie estas kelkaj interesaj,
suka detaloj pri la servilo, kaj fakte, la uzanto en tie ankaŭ.
Estas $ _cookie, kiu estas kie tion nomis kuketojn estas stokitaj.
Ni ne perdi tempon en kuketojn sin hodiaŭ,
sed sciu nun ke kuketo estas nur malgranda peco de informo
ke TTT-servilo povas planti sur retumilo
kaj laŭvice ĝia RAM aŭ lia komputilo malmola disko
por konservi informojn pri la uzanto, ekzemple, lia nomo de uzanto
por ke ili ne devas tajpi ĝin ĉiufoje ensaluti aŭ iu
unika cifero aŭ identigilo por ke uzanto
por ke vi ne devas Pester ilin kun la sama specoj de demandoj pri
preferojn en la estonteco, sed la plimulto de intereso
nun estas $ _session.
>> Ĉi superglobal, kiu, kiel la aliaj, estas transdonita por vi auxtomate per PHP
kiam vi skribas PHP-bazita retejoj
povas stoki ajn vi volas, kordoj, entjeroj,
flosanta punktoj, valoroj, tabeloj, celoj,
vere ion ke vi volas, kaj permesas vin por stoki ĝin en tia maniero
ke eĉ se la uzanto vizitas vin nun kaj poste
revenas unu minuto de nun aŭ 5 minutoj de nun ĉar
ili prenu sian tempon antaux klaki iun alian ligilon
PHP certigos, ke kion ajn vi metis en tiu kunsido superglobal
minuto aŭ 5 minutoj ankoraŭ estos tie kiam la uzanto revenas.
Kaj sub la kapuĉo ĉi superglobal estas realigita per vojo de
tion nomis kuketojn, sed por nun, estas nur abstraktaĵo
per tio ia la programita ekvivalento de komercaj ĉaro.
Kion ajn vi, la programisto, metu en tiu
superglobal asocieca tabelo estos tie iu nombro de minutoj poste
ĝis vi forigi ĝin aŭ ĝis la uzanto fermas sian retumilo aro.
>> Ni rigardu ekzemplon de kiel tion oni efektive uzas.
En counter.php inter hodiaŭa pecoj de kodo
ni havas la sekvan linion.
Je la komenco de ĉi tiu dosiero ni havas aron da blua komentoj, kiuj estas seninteresa por nun.
Sed en linio 13 ni havas novan linion,
session_start, kaj ke fakte faras precize kion ĝi diras.
Ĝi komenciĝas kunsidoj.
Ĝi ebligas vin uzi tiun grandan superglobal $ _session, kaj tio estas tiel simpla kiel tiu.
Nun, se ni procedi por rigardi linio 16, ni provu kompreni pri kio ĉi tiu retpaĝo tuj faros.
If (isset ($ _SESSION ["nombrilo"]) tiam iru antaŭen
kaj vendejon en la vendotablo variablo, minuskla vendotablo,
$ _SESSION ["Nombrilo"].
Ĉi tio ŝajnas esti deklarante lokan variablon nomis nombrilo
ene de kio ĝi estas meti kopion de kio ajn ene de la superglobal
nomita kunsido je la loko "nombrilo".
Alian, ŝajne, tiu malgranda loka variablo vendotablo, estas inicializado al 0.
>> Sed tiam kelkaj linioj poste en 26 avertas ke la kunsido de kopio de vendotablo,
lia ŝlosilo, havas novan valoron atribuita kiu estas lia aktuala valoro plus 1.
Unuvorte, tiu dosiero ŝajnas esti ĝisdatigo
kontraŭekzemplo ke tio stokita ene de la kunsido superglobal
per pliigante ĝin je 1, sed unue retenas kopion de la antaŭa valoro
per stoki ĝin en loka variablo nomita $ vendotablo,
kaj tiam ĉi tie ni vidu kion restas.
Ĝi rezultas estas preskaux nur HTML.
Ĉe la malsupro de tiu ĉi paĝo ni vidas en linio 37, kiun mi vizitis ĉi tiun retejon
nombrilo nombro de fojoj, do tie estas kelkaj interesaj trajtoj tie.
, Ĉi tiu estas klare variablo, sed tio ne suficxas por simple meti
$ Nombrilo en la korpo de via HTML ĉar kompreneble
se estas nur tie inter viaj HTML PHP tuj supozi ke estas nur HTML.
Vi laŭvorte volas $ nombrilo esti presita sur la ekrano.
>> Sed anstataŭ per delasante en PHP modo
kun tiu peco de sintakso povas dinamike enmeti valoron tie
tre simila en spirito al kion ni faris lastan fojon kun
enmeto valoroj en ĉenoj.
Fakte, ĉi tiu estas nur stenografio skribmaniero por diri ion kiel tiu laŭvorte,
print ($ counter) aŭ eĉ iu kiel printf (% s, vendotablo),
aŭ eĉ, kiel vi eble vidis en linio aŭ en lernolibroj,
ekzistas funkcio en PHP nomis eĥo
kiuj faras la samon, kaj ĉiuj el tiuj estas nur plu winded manieroj
diri <? =.
En ĉi tiu kazo ne bezonas meti
la vorto PHP post la demandosigno.
Ĉi tiu estas stenografio skribmaniero por, denove, kion ni ĵus vidis antaŭ momento
kiu estas eĥantaj iu valoro.
>> Ni vidu kion la fina rezulto de ĉi tiu reale estas.
Mi volas transiri en niajn counter.php dosiero,
kaj ni vidos, ke David simple eraris per ludante kun la kodo tie.
Ni iru riparas ajn li ŝraŭbita supren,
kaj la eraro ŝajnu esti tie, for, sur linio 37.
Laŭ la supro de tiu ĉi paĝo mi vizitis ĉi tiun retejon 0 fojojn.
Nu, ni iru antaŭen nun, kaj sur la supro de la retumilo alklaku la
reŝargi ikono, kaj mi alklakos reŝargi,
kaj nun mi vizitis la retejon 1 fojo, 2, 3, 4, 5, 6, 7, 8.
Kaj efektive, se ni rigardas la fonto de tiu ĉi paĝo la efektiva fontkodon ŝanĝas,
kaj rimarki la kompleta manko de PHP, kaj tio estas ĉar
PHP kodo estas taksita aŭ interpretitaj servilo flanko,
kaj por ke signifas, ke la eligo de la PHP skripto estas kio laste sendita al la retumilo,
kiu en ĉi tiu kazo estas iom krudan HTML kaj iuj krudaj tekston.
Kio okazas ĉi tie?
>> Nu, kun relative malmultaj linioj de kodo mi povas stoki
persiste kun la paso de pluraj sekundoj, aŭ se ni atendis sufiĉe longe,
minutoj, eĉ horoj, iu valoro en maniero kiu faras HTTP
ŝajnas stateful kvazaŭ ni konservis
Tiurilate al la servilo, kaj ĝi estas simple memori kion mi rakontis ĝin lasta fojo,
sed fakte ekzistas tuta aro da komplekseco okazas sub la kapuĉo
engaĝante kuketojn ke tio ebligas PHP doni al mi ĉi iluzio
de tiu komerca ĉaro-kiel karakterizaĵo.
Por la momento, bagatela ekzemplo kie ni ĵus stokante entjero,
sed ke trajto revenos al esti de granda valoro
kiam ni komencis paroli pri pli kompleksaj projektoj,
inter ili problemo starigis 7.
Tiu estas via tre lasta problemo starigis en CS50.
Mi scias, estas tiel malĝoja, sed kion vi trovos estas, ke ni tuj konkludi
ĉi tiu parto de la semestro de reale transiro
el la kunteksto de C certe al la kunteksto de PHP
sed dum uzante iu de la sama fundamentojn
ni jam parolis pri por iu tempo.
>> La objektivo kun pset 7 estas por apliki CS50 Financoj,
kio estas via propra versio de Yahoo Financoj aŭ Google Financoj
aŭ eĉ Etrade.com per vi havas la kapablon
serĉi stock prezoj por donita simboloj, sed eĉ pli ol tio
vi havas la kapablon "aĉeti" kaj "vendi" akcioj
kiuj komercis pri diversaj valoroj interŝanĝoj ĉar kiel ĉi hejmpaĝo
tie sugestas, kiu estas vere la grado kiu ni komencis
la problemo aro por vi, vi havas salutnomon formo ke tio petante uzantnomon kaj pasvorton.
Ĝi havas submeto-butonon, sed poste, kiam ni devos eventuale vidi,
estas nenio vere okazas sub la kapuĉo tamen ĉar ĝi
restas por vi apliki la kapablon registri novajn uzantojn,
la kapablo por aĉeti lignon, por vendi karcero;
por fakte serĉi nuna stock prezoj.
>> Kaj efektive, tiu estos kiel reala mondo kiel eble ĉar ni faris
inkluzivas iom da kodo kiu permesos al vi kun sola funkcio
por konsulti Yahoo Financoj, kiu mirinde faras disponebla libera datumoj
por suprenrigardinte akcivaloroj bazita sur la stock simbolo aŭ paperbenda simbolo,
kaj vi reiros la nuna stock prezo de la tago.
La datumoj vi reale vidi en ĉi tiu aparta pset estos
pri tiel reala mondo kiel ĝi povas alveni por ke vi efektive interconexión
kun reala mondo akcioj, reala mondo prezoj,
kaj ni vidos kiom da mono vi povas fari eble
dum la venontaj kelkaj tagoj de ludi kun via propra problemo aro.
>> Sed estu la unua starigis la scenejo por kiel desegni ion jen certe pli komplika
ol counter.php, ke estas pli komplika ol la tuta Frosh IMS ekzemploj tiel malproksime,
kaj ni provu enkonduki kelkajn paradigmoj tie kiuj permesas al ni
tiel por pset 7 kaj eble por via fina projekto se vi faras ion retejo bazita
teni vian kodo bone organizitaj, por gardi vin sana,
kaj preni paŝo al kunlabori, cxu en CS50 la fina projekto
aŭ preter se vi daŭrigas plani ion en la estonteco.
Estas ĉi tiu ĝenerala dezajno paradigmo
en komputiko kaj en programado pli ĝenerale
konata kiel MVC, modelo view adaptilo,
kaj ĉi tiu estas stulta akronimo kiu priskribas tre bona ideo,
kiu estas la disiĝo de malsamaj aspektoj de programo,
specife tenante apartajn la logiko aŭ la negoco logiko de afiŝinto
por ke io kiu implikas aĵojn kiel
nomante funkcioj kaj informpeti datumbazoj kaj similaj
okazas ne estas inter viaj HTML
sed prefere en apartan dosierojn, kaj ja, ekzistas ĉi tiu dosiero
tipe, ke vi nomis la adaptilo
ke vere la cerbon malantaŭ la operacio, kaj ni vidos ekzemplon
de ĉi tio en nur momento.
>> Jen modelo kiu estas programado kodo
kiu faras la parolante al via datumbazoj, kiu raportas al Yahoo Financoj kaj similaj,
kaj tiam tie estas la V en MVC, la opinioj,
ĉiuj aĵoj ke tio rilataj al estetiko, la dosieroj kiuj reale enhavi
vian HTML, eble via CSS kaj similaj.
La ideo cxi tie, kiel tiu bildo sugestas, estas ke la adaptilo
estas la dosiero, kiel ni baldaux vidos kaj kiel vi aparte vidas en pset 7,
ke la mondo parolas al tra iliaj TTT-legiloj.
Tio estas la dosiero kiun gets vizitis la publikan interreto,
sed la adaptilo parolas al potenciale modelo,
kiu estas unu aŭ pli aliaj dosieroj kiuj enhavas kodo rilataj datumoj,
kodo rilataj al datumbazoj kaj similaj, kaj poste ĝi parolas al
la controlador unu aŭ pli aliaj dosieroj konata kiel opinioj,
kiuj estas la estetiko de retpaĝo, ŝablonojn de varoj,
kiuj povus porti iun datumoj kiel enigo, sed fine de la tago
la sola logiko ene de vido devus esti la desegnadon de tiu datumo,
ripetanta super loop kaj reale kracxi iun
HTML-bazita lego gxiaj aŭ eĉ iu kiel PDF.
>> Kio estas agrable pri MVC estas ke vi povas havi malsamajn vidpunktojn
surbaze de la tipo de aparato, bazita sur la tipo de dosiero formato ke vi efektive
volas montri al la uzanto.
Ni rigardu kelkajn iom post iom pli kompleksa kaj bone desegnita ekzemploj
per startanta unue kun versio 0 tie.
Lasu min kaj malfermu en nia MVC katalogo hodiaŭ
dosiero nomata index.php en katalogo 0.
Rimarku ĉi estas super simpla kaj tre underwhelming afiŝinto
jen ia versio 0 de hejmpaĝo por CS50,
kaj rimarki kiom ni havas ligon al Prelegoj, ni havas ligon al Syllabus,
kaj se mi sekvas la ligilon al Prelegoj avertas ke la URL
supren supro tuj ŝanĝi lectures.php.
Se mi tiam sekvu la ligilon al Semajno 1 avertas ke la URL ŝanĝojn al week1.php.
Ŝajnas ke sufiĉe simpla hierarkia strukturo tie.
>> Ni prenu rapidan rigardon sub la kapuĉo, kiamaniere tiu estas metita ekstere,
kaj vere, se mi rigardas index.php ĝi estas bela simpla.
Fakte, kvankam mi nomis tion PHP-dosiero ne estas reala programado kodo.
Jen komento kiun mi skribis tie en PHP ĝuste tiel la uzanto ne finas vidi ĝin.
Kompreneble, kiel antaŭe, ion, kio estas en inter PHP etikedoj
gets interpretita, eĉ se ĝi estas komento, kaj interpreti komenton
signifas simple ĵeti ĝin for al la fino de la tago kaj ne reale
sendu ĝin al la retumilo, tia ĉio ĉi tie estas nur estetiko.
Se mi malfermas simile lectures.php ĉi tro estas nur malfacile kodita dosiero.
Ĝi okazas al nomi ion. Php,
sed vere estas justa. html, kaj week1.php, week2.php
simile estas nur markado, do tie estas faskon da mankoj de ĉi dezajno.
Unu, estas grandega kvanto de kopio / pasto.
Kvankam la sola afero ke tio ŝanĝas inter tiuj dosieroj estas la ordigita listo,
la li etikedoj, mi tamen havas doc tipo, HTML, kapo,
titolo, proksime korpo, proksime HTML kaj pli
en ĉiu unuopa dosiero, kiu signifas ke se mi iam volas restrukturi
ĉi retpaĝon aŭ restylize ĝin mi devas iri kaj ŝanĝu
cxiuj tiuj dosieroj permane aŭ kun iu amasa trovi kaj anstataŭigi.
>> Ni prenu unu paŝon direkte al pli inteligenta, pli longa pensante dezajno en versio 1 tie
per kiel por la legis mi, ke ni inkludis tiel ke vi povas ludi kune kun
tiuj pli malrapida hejme avizo, ke ni havas ĉi tie
resumo de la dosieroj en versio 1 de ĉi tiu retejo,
kaj ŝajnas ke mi prenis gxin sur min al faktoro ekster
iuj komunaj kodo, header.php kaj footer.php.
Nu, ni rigardu kio estas ene de la unuaj el tiuj.
Header.php aspektas familiaraj,
sed rimarkas, kie does it get ekstermos?
Ĝuste post linio 19, do tio estas ĉio, kio estis komuna
el la dosieroj index.php, lectures.php,
week1 kaj week2.php de la antaŭa ekzemplo.
Kion mi faris estis kopio kaj kortego ĉio kiu estis komuna al ĉiuj tiuj dosieroj,
meti ĝin en apartan header-dosiero, kaj simile en footer.php
ĉu mi aplikas la saman principon per la sola interesa linioj
en footer.php estas tiuj du, proksime korpo kaj proksimaj HTML.
>> Sed kion tio signifas nun estas ke en la nova versio
de index.php avizo kiom simplaj povas alveni.
Koncedis, iom pli kripta rigardas, iom malpli intuicia
sekvi supre sube, sed mia Dio, ĉiuj de tiu redundo estas nun for.
Ni postulas uzi PHP-a funkcio laŭvorte nomis postulas supren supro,
kio estas tre memorigas, memoras, de C estas # include mekanismo.
Ni postulas header.php ĉe la supro.
Ni postulas footer.php malsupre, kaj la sola kiu estas malsama
aŭ speciala pri ĉi tiu dosiero estas la enhavo ke tio signifis esti unika al ĝi.
Se do mi iros en, ni diru, lectures.php, la sama principo validas.
Denove, iuj komentoj supren supro, sed tiam mi postulos header, postulas piedlinio,
kaj inter ĝi estas nur la enhavon ke tio vere ŝanĝis.
Kaj se ni rigardis Semajno 1 kaj Semajno 2 ni volas vidi
ke la sama principo estis aplikita tie.
Nu, ni ne tute farita tie.
>> Ni rigardu versio 2, kiu havas similan strukturon,
sed rimarkas nun mi enkondukis ion alian.
En linio 10 Mi prezentis helpers.php,
kiu ŝajne enhavas helpanto funkcioj.
Al helpanto funkcio estas ĝenerale relative mallonga funkcio
ke vi skribas por helpi vin en diversaj lokoj,
kaj ni vidu kio estas interne de helpers.php.
En ĉi tiu kazo, ĝi aspektas kiel ĝi havas 2 funkciojn.
Memori de la alia tago kun niaj kubaj Ekzemplo
vi povas difini vian propran funkcioj en PHP, kaj kion mi faris nun estas mi havas
difinita funkcioj nomataj redonu piedlinio kaj redonu header,
la unua el kiuj prenas parametro nomita datumoj,
kies defaŭlta valoro estas malplena aro, kiel sugestis tie,
kaj ni povas reale skribi ĉi eĉ pli koncize en la lasta versio de PHP
dirante malfermita kvadrata krampo, fermita kvadrata krampo.
Tio signifas malplenan aron de amplekso 0 sed tamen tabelo.
>> Tiu ekstrakto funkcio estas iom speciala en tiu
kio faras estas prenas kiel ĝia argumento asocieca tabelo
kiu havas 0 aŭ pli ŝlosila valoro paroj, kaj se vi havas ŝlosilon de foo
kaj valoro de trinkejo la ekstrakto funkcio
kreas situacion en kiu nun, ekde linio 11,
vi havas lokan variablon nomita $ foo kies valoro estas trinkejo.
Kaj se vi havis pli klavoj kaj valoroj en la datumoj tabelo,
simile estus ili ĉerpi en la loka amplekso
aŭ nomo spaco por ke footer.php kaj
la sama ideo cxi tie por ke header.php
havas aliron al tiuj variabloj.
Fakte, mi malfermas denove header.php
kaj atentigi pri nun kio similas en ĉi tiu versio.
>> Anstataŭ malmola kodigo CS50 kiel titolo por ĉiu unuopa paĝo
rimarki la dinamismo kiun eblas nun.
En linio 5 Mi eĥantaj titolo variablo,
sed unue mi pasi tiu titolo variablo al funkcio nomita htmlspecialchars.
Al stulta nomo por funkcio, kondiĉe, ke ĝi estas, sed vere faras kion ĝi diras.
Ĝi certiĝas, ke iu supersignoj
en la kordo ke tio estas akceptitaj en ili ĝuste eskapis HTML.
Tiu estas fakte maniero de eviti iun nomita krucon retejo scripting atako
per iu povas malice aŭ hazarde
injekti siajn proprajn HTML en viajn afiŝinto
per intergluajn en iu formo, ekzemple,
iu kiu vi ne sufiĉe atendante, aparte aktivigi kodo,
kiel ni parolos pri en semajno aŭ du de tempo.
>> Tiu nun header.php, estas vido
en la senco ke ĝi ebligas al vi rigardi estetike la enhavon de iu aro de datumoj.
Sed pli konkrete, ĝi estas ŝablono.
Tio estas speco de blueprint nun pri tio, kion ni volas ke la kaploko de ĉiu paĝo por simili,
sed estas iuj dinamismo en kiun ni volas la titolon por esti dinamike insertos
bazita sur la titolo variablo
kiu ĉerpis kiam ni nomas, denove,
la render header funkcio.
Nun, se ni rigardis render piedlinio, tie fakte ne multe uzi de tiu nun
ĉar en footer.php mankas dinamismo ajn.
Povas esti, sed nuntempe ĝi estas malmola kodita listo de 2 etikedoj,
sed la sama ideo validas, tiel ke fakte sugestas kial
ni ne malŝparos tempon havante render header kaj footer render funkcio?
Lasu min iri anstataŭ nun en versio 3,
kaj en versio 3 en helpantoj mi decidis simpligi ĝin eĉ pli.
>> Donu al mi unu render funkcio.
Lasu min havi ĝin preni alian argumenton, ĉifoje nomita ŝablono,
kio estas intencita al esti la nomo de ŝablono,
kaj tiam Mi concatenate malhumila. php al tiu variablo estas valoro,
kaj tiam se ĝi ekzistas foo.php, bar.php aŭ header.php kaj footer.php,
tiam Mi tuj iros antaŭen kaj ĉerpi la variablo datumoj
kaj poste postulas, ke vojo.
Alivorte, por uzi ĉi nun, se mi malfermos index.php
rimarki, ke mi ne nomas render header plu.
Mi nur nomas redonu, sed mi pasas en citata valoro de kaplinio
fari klara kiu ŝablono mi vere volas ŝarĝi.
>> Tiam super tie rimarki kion mi faras.
Mi pasante en dinamike ŝlosilo de titolo,
valoron de CS50, kaj ankaux, kiel ni vidis antaŭe,
povus esti farita pli konciza en la lasta versio de PHP
kie mi povas anstataŭigi la tabelo funkcio kun kvadrataj krampoj,
kion mi proponas estas eĉ pli legebla kaj certe
iom pli facile tajpi.
Kaj kompreneble, kun la render piedlinio alvoko je la fundo,
ni ne tedis pasante en dua argumento tute ne, ne asocieca tabelo,
ĉar tie estas nenio dinamika ene de tiu piedlinio.
Estas nur kelkaj proksimaj etikedoj por HTML.
Bona, ni preni paŝojn al vere pureco aĵojn tie,
sed lasu min malfermi 2 fino ekzemploj.
Ĉi tiu, numero 4, avertas ke mi faris konscian decidon nun
plibonigi sur la antaŭa ekzemplo de fine uzante iu hierarkio al mia dosierojn.
>> Rimarku ke en ĉi tiu resumo, en ĉi tiu legi min, mi enkondukis
oni inkludas dosierujon kaj ŝablonoj katalogo
kies enhavo estas tuj estos la aĵoj mi volas inkludi
kaj la ŝablonojn kiujn mi volas redonu, respektive.
Tiu estas vere min esti anal kaj klopodante teni aĵojn ordigita,
teni rilataj dosieroj kune, sed la fina rezulto
estas ke ni nun havas iomete tidier instalinstrukciojn, sed ni devas memori nun
en, ekzemple, index.php
kiam ni bezonas la dosieron helpers.php
ni devas nun postulas tra inkludas / helpers.php
anstataŭ nur diri helpers.php ĉar nun estas reale en la sub dosierujo.
Nun, kiel flanken, vi vidos en ĉi tiuj ekzemploj kaj kelkaj aliaj
funkcioj kiel postulas, postulas unufoje.
Estas vere funkcio mem nomis inkludi, kaj ili ĉiuj havas iomete malsamajn kondutojn.
Jen mi diras postulas iam fari super certe ke mi nur volas tiujn
helpantoj inkludis en mia projekto samtempe.
Sed se Mi estas singarda kaj se mi vere pensas per mia logiko adekvate
ĝi devus sufiĉi tro simple diri postulas supren supro
tiel longe kiel mi mem ne hazarde postulas ke sama dosiero aliloke.
Fakte, ĉi tiu estas iomete pli efika maniero fari aferojn tiam uzanta
postulas fojon, do mi eltondas ĝin al nur postulas.
>> Ni prenu unu pasxon plu.
Tiu lasta ekzemplo nun, versio 5, havas eĉ pli pura dosierujo hierarkio.
Rimarku kion mi faris tie por la legis mi en ĉi tiu fina versio
nun mi havas mian HTML dosierujo, kiun mi havis tiun tutan tempon,
sed interne de tie nun estas nur index.php, lectures.php,
week1.php kaj week2.php.
La inkludas dosierujon nun vivas apud la HTML dosierujo,
tial al la sama nivelo kiel frato, por tiel diri.
Do faras la ŝablonoj dosierujo.
La ŝlosilo takeaway jen mi enkondukis iom pli strukturo,
sed la ŝlosilo karakterizaĵo nun estas ke nur la dosierojn
kiuj bezonas esti retejo alirebla, publike direccionables
per URL en la publika interreto estas en mia HTML dosierujo.
>> Dume, aliaj dosieroj, helpers.php, footer.php,
header.php, kiu estas argumenteble eble pli sentema,
eble helpantoj efektive havas iujn uzanto nomoj kaj pasvortoj aŭ iu intelekta
posedaĵo de mia, funkcias mi vere ne volas ke la mondo vidas, eĉ se hazarde.
Estas bona praktiko por subteni el la publika HTML katalogo
neniu dosierojn kiuj ne bezonas sin publiko.
Vi devas fari en ĉi tiu kazo, kiam rigardas, ekzemple,
la HTML-katalogo de index.php dosiero,
rimarki ni nur devas esti iom pli singarda kiam postulanta
aŭ postuli iam ĉi tiu dosiero.
Mi bezonas unue faru .. iri al la patro dosierujo,
do / inkludas / helpers.php
bucear posteniras en akiri la dosieron kiun mi prizorgas.
>> Demandojn tiam MVC
aŭ ĉi relative simplaj personigo gxiaj?
Kaj lasu min klarigi ke ni enfokusigis sufiĉe pri la
V tie, la opinioj kaj la faktoranta el tiuj ŝablonoj.
Ni ne vere distingas M de C ĝuste ankoraŭ.
Fakte, vere ne M tie, kaj eĉ nia C,
adaptilo, ĉu ne vere faras ĉion, kion multe, sed vi ricevos multe pli
familiara kun ambaŭ el tiuj 2 leteroj de MVC,
aŭ pli ĝuste, vi ricevos multe pli familiara kun la C
en MVC por problemo aro 7, do estas pli de tiu sur la horizonto.
Demandoj?
Estas vere neniu tie.
>> Konsentite, ni nun pluiri al la dua kaj lasta temo hodiaŭ.
Tio estas la enkonduko de datumbazo.
Ĝis tiu punkto ni havis kelkajn manierojn provizon datumoj.
Ni uzis variabloj.
Reen en nia C dosiero, / Aŭ diskuto ni komencis uzi teksto-dosieroj
kaj uzante dosierojn kiel fprintf, kaj tiam ni eĉ komencis
parolas CSV Fajlilo iomete, apartigita de komoj valoroj,
tial ĉiuj ĉi tiuj permesis al ni havas datumojn stokitaj
ĉu ne persiste aŭ persiste.
Sed eĉ CSVs ne estas vere favoraj por serĉado
kaj enmeto kaj viŝante.
Estas vere nur stulta teksta dosiero apartigitaj per komoj
linion post linio post linio post linio, do se vi volas
serĉi tiu dosiero la plej bona vi povas fari vere estas lineara serĉo.
Vi devas komenci sur la supro de la dosiero, legu la tutan aferon en,
kaj serĉas iun valoron de intereso.
Se vi volas enmeti en ĝin vi devas fari la samon,
ripetanta super ĝi kaj enmeto en apartan lokon,
kaj fakte, kion vi devas fari ĉiujn serĉado logiko mem.
>> Vi ne povas fari sprita ŝablona rekono sur CSV-dosiero krom se vi mem skribas la kodon.
Vi ne povas fari filtración de CSV-dosiero
krom se vi mem skribas la kodon.
Ĉu ne estus bela se iu alia metis en ĉiuj el la penado
al reale fari serĉado facila kaj inserción facila
kaj forigo kaj ĝisdatigante ktp?
Tio estas ekzakte kion datumbazo estas.
SQL, strukturita query lingvo, estas alia lingvo
ke ni enkondukas ĉi tie hodiaŭ, sed ĉi tiu estas ankaŭ sufiĉe atingebla,
kaj kion ni vere volas fari estas simple deŝiri el ĝi kelkajn el la plej elstaraj
trajtojn tiel ke por pset 7, kaj se vi faros ion retejo bazita,
Via fina projekto, vi havas la kapablon esprimi sin
en terminoj de datumoj demandoj.
Vi havas la kapablon por stoki iom aŭ multe da datumoj
en multe pli strukturita maniero kiu estos ĉe la fino de la tago
fari vian vivon pli facila ĉar kun SQL oni povas esprimi sin
multe pli precize, multe pli metode por
reiri iu subaro de datumoj el pli granda korpuso de datumoj.
>> Vi povas pensi pri datumbazo, en ĉi tiu kazo, SQL datumbazo, vere kiel Excel
aŭ Nombroj kie ĝi estas folio,
aŭ eble plurajn foliojn, kaj ŝtono, kompreneble,
havas vicoj kaj kolumnoj, kaj tio estas ĉar
SQL datumbazoj estas rilata, rilata en la senco
ke ili stokas datumojn en terminoj de tiuj tabloj,
vicoj kaj kolumnoj.
Ili estas pli altaj ol muzikistoj iu kiel folio,
kaj folio estas intencita al esti uzita de homo.
Al datumbazo estas intencita al esti uzita de programisto
skribi kodo kontraŭ ĝi, do la personigo de datumbazo
tuj estos ĉu komandlinio.
>> Unu el la plej popularaj rilata datumbazoj tie estas, denove, MySQL,
kiu estas mirinde libera, tre alta muzikistoj, kaj ĉi tiu estas kion
Facebook uzitaj tre frue kaj iugrade ankoraŭ hodiaŭ
stoki multe de liaj datumoj, kaj ni vidos en momento
ke uzi relative simplajn ordonojn
ni povas elekti datumojn, insert datumoj, ŝanĝo datumoj,
forviŝi datumoj kaj similaj, sed dankeme, estas pli afabla uzantinterfaco
ol tajpi en nigra kaj blanka prompto tie.
Ni uzos por pset 7 kaj tie libera ilo nomita phpMyAdmin.
La nomo estas coincidencia.
La ilo okazas al esti realigita en PHP,
sed tio estas fundamente pala.
Kio estas utila pri phpMyAdmin estas ke ĝi estas reta utileco.
Ni antaŭ-instalita en la aparaton por vi,
kaj per ĝi vi povas krei tabelojn en datumbazo,
vi povas enmeti datumojn, forviŝi datumojn, kaj ĝenerale vidas
viajn datumojn en sufiĉe uzantamika medio.
Via uzantoj ne tuj uzu phpMyAdmin.
>> Tio estas vere nur administra aŭ programisto estas ilo
kun kiu vidas kaj poke ĉirkaŭ viajn datumojn kaj malkovri kiel strukturi ĝin,
multe kiel vi mem povus uzi Excel aŭ Nombroj,
sed tuj estos granda vojo de bildiganta kio okazas sub la kapuĉo
por ke vi povas enfokusigi la interesa solvo de problemoj kaj ne tiom
sur la arkaikaj ordonojn.
Ni rigardu ekzemplon de datumoj, kiuj povus esti stokita tabularly
en rilata datumbazo.
Jen unu tia ekzemplo.
Nun, bedaŭrinde, phpMyAdmin eraris en la flanko de ĵetante vojo tro multaj vortoj
kaj grafikaĵoj pri vi, sed se vi agordi en nur en la
ID kolumno, vikipediista nomo kolumno, kaj la hash kolumno,
ĉi tiu estas efektive folio, sed tio okazas al esti fragmento
de tablo interne de la aparaton
uzante dosieron kiu ni ofertas al vi en problemo aro 7.
>> En aparta, ni donos al vi dosiero kiu reprezentas
uzanto tablo, do oni folio enhavas uzantoj kun 3 kolumnoj,
unu el kiuj estas unika ID startanta je 1 kaj esti incremented poste.
La dua kolumno estas nomo de uzanto, kaj tiuj el vi, kiuj faris Hacker,
la Hacker eldono por pset 2, povus rekoni kelkajn el tiuj uzanto nomoj almenaŭ.
Sur la dekstra flanko estas pasvortojn, sed ili ne estas laŭvorta pasvortojn.
Ili estas hashes gxiajn, do rezultas
ke stoki pasvortojn en datumbazo estas vere malbona ideo.
Vi ĉiuj probable legis en iu punkto de iu retejo
aŭ iu kompanio datumbazo esti kompromitita, kaj tiam vi devas
ŝanĝi vian pasvorton, vi bezonos akiri reintegra sur aĵoj
ĉar iuj malbonaj ulo fakte rompis en vian konton kiel rezulto.
>> Stoki pasvortojn en klara teksto, unencrypted en datumbazo
estas tute asinine, kaj tamen ĝi estas ege amuza
tiam legi pri iuj tre bone konata kompanioj
kelkfoje en la gazetaro kies datumbazoj estas kompromitita,
kaj tiu parto ne estas amuza, sed la fakto ke la datumbazoj enhavi unencrypted
pasvortoj estas ridinda ĉar laŭvorte kun unu linio de kodo
vi povas protekti kontraŭ tiu aparta minaco, kaj tio estas kion ni faris ĉi tie.
Eĉ por nia falsa iom CS50 Financoj versio
ni encrypting pasvortoj nur por bonan mezuron, kaj la fakto ke
ĉiuj el tiuj pasvortoj starti kun $ 1 $ estas nur konvencio.
Ke nur signifas ke ili estas koditaj aŭ vere hashed,
kio estas kiel unu-formo kodita funkcio
per vi ne povas inversigi liaj efektoj kun iu nomita MD5.
>> La fakto ke 50 estas post tio signifas ke salo valoro
de 50 estis uzita por Regionoj ĉiuj tiuj pasvortoj krom unu.
Mia, kompreneble, kiel vi povas vidi tie, HA,
Estis uzante malsamajn salo, tiel tiuj el vi, kiuj got iomete stumblis supren
eble en Hacker 2, kiu povus esti la rezulto de nia esti uzita
malsama hash ol la aliaj ĉar mia pasvorto estas fakte la sama
kiel iuj aliaj uzantoj tie supre.
Fakte, se vi atendis ĉiuj tiuj semajnoj por ekscii
kio tiuj pasvortoj estis tie estis la pasvortojn kiujn vi defiis
por fendi en la Hacker eldono de problemo aro 2, do neniu tro malfacila.
Fakte, Malan la estis la sama kiel jharvard,
sed se ni reiros ili aspektis malsama.
>> Enfokusigi jharvard en karmezina ĉar ili salita malsame.
La algoritmo perturbis en maniero, ke la
hash valoro, la ĉifrita valoro aspektas iom malsama
ĉar la enigoj estis iomete malsama, sed la pasvorton sub la kapuĉo
estis ankoraŭ finfine karmezina.
Nun, kiu zorgas pri tio?
Nu, ni havigas al vi kun la specimeno uzantoj, la specimeno uzanto nomoj
kaj hashes de ilia pasvortojn por ke vi efektive havas iujn
klientoj por CS50 Financoj kiam vi unue akiri surgrunde kun via kodo.
Vi devos apliki pli tabuloj interne de MySQL, ene de la datumbazo.
Vi devos krei pli ŝtono, efike, sed ni decidis doni al vi ĉi tiu
akiri vi komencis, kaj vi vidos ke la problemo aro specifo
promenas vin tra la procezo de importi ĉi tablo
kaj ankaŭ klarigante kion iuj el la trajtoj estas,
kaj vi ankaux vidos, ke ni ofertas al vi kun la kodo
manipuli la Regionoj aŭ la ĉifrado de tiuj pasvortoj,
tial vi ne bezonas zorgi tro multe pri kio MD5 aŭ kiel estas reale okazas.
>> Do, SQL, strukturita query lingvo.
Ĉi tio estas, tute simple, la lingvo ni estas sur ekuzi en pset 7
kaj eble preter peti datumoj de iuj datumbazo.
La datumoj estas, denove, stokitaj tabularly en tiuj rilataj tabeloj, kolumnoj kaj vicoj,
sed uzante iun relative simpla sintakso kiel delete,
enigi, ĝisdatigi kaj elektu ĉu ni povas fari precize tion.
Ni povas forviŝi el la datumbazo, enigi,
ĝisdatigi datumojn, tiel kiel unuaranga, tio estas, elsxuti datumoj el la datumbazo.
Kiel ni iras sur faras tion?
Lasu min en la aparaton.
Lasu min eltiri supren http://localhost,
kiu, denove, estas la loka aparaton mem.
Tio estas lia defaŭlta alnomo.
Kaj lasu min iri al / phpmyadmin.
Ĉi tio okazas al esti speciala URL ke la aparaton estas preconfigured kompreni
ke tuj instigas min por uzantnomon kaj pasvorton.
>> Kiel kutime, mi tuj tajpi jharvard kaj rugxa,
sed rimarkas ke estas la administranto konton en la komputilo.
Estas nur koincido ke ekzistas ankaŭ jharvard registrita por CS50 Financoj.
Jharvard, rugxa, enspezo donas al mi la uzulinterfaco, kiun ni vidis
ekvidis antaŭ momento, kaj estas iom blindiga unue,
sed estu certaj, ke vi neniam tuj devos klaki la plejparto de la ligiloj en tiu ilo.
Vi fini uzante malgrandan subaro kiuj estas super helpema,
la unua el kiuj estas datumbazoj tien.
Se mi iros al datumbazojn, rimarki ke mi instigis krei datumbazon.
Ĉi tio estas kiel krei novan Excel-dosiero, efektive.
Mi tuj iros antaŭen kaj nomas tiun prelegon, kaj mi simple tuj ignori la kampo tie, colación.
Ĝi devas vidi kun la reprezento de datumoj en gxi,
kaj mi tuj klaku krei, kaj nun rimarkis kiel mi lasis iri de krei
sur la maldekstra flanko kie diras neniu datumbazoj
Mi devus baldaŭ vidas la prelego datumbazo.
>> Se mi nun klaku ĉe la maldekstra flanko, la prelego datumbazo,
rimarki mian langetoj ŝanĝi iom.
Mi havas strukturon, SQL, eksportado, importado kaj kelkaj aliaj aĵoj.
Strukturo estas preskaux malplena.
Neniu tabloj trovita en datumbazo, kiel ĝi diras ĉi tie,
do ni krei tabulon, kaj ni iru antaŭen kaj krei tablo
kiel studentoj, kaj kiom da kolumnoj ni deziras?
Ni observu tiun simplan, kaj estu la rekordon por ĉiu studento
an ID numeron, nomo, kaj retadreso.
>> Ni konservos simpla kiel tiu, tiel 3 kolumnoj, iru.
La formo kiun vi vidas ĉi tie estas nun iom senorda kaj blindigaj,
sed ni nur devas iri tra ĝi linion post linio, do vere rapide donu
la unua kolumno en cxi tiu datenbazo nomon de ID por la sola ensalutilo.
Estos entjero. Mi povas fakte ignoras longa kaj valoroj.
An int tuj estos 32 bitoj negrave kion vi tajpas en tie, do ni lasu ĝin malplena.
Defaŭlta valoro, mi povus fari ĝin nula, kiel difinita.
Mi foriros ke nur. Lasu Ne zorgu pri defaŭlta valoroj.
Ni rulumi tra tie al la dekstra, atributoj.
Tio estas interesa.
Ni iru antaŭen kaj iom arbitre diras ke IDs devas esti sensigna.
Ni ne malŝpari neniun negativaj nombroj.
>> Ni iru 0 al 4 miliardoj, donu aŭ preni,
kaj tiam ni ne tuŝi iun el tiuj kampoj nur ankoraux tie,
sed tiam mi entajpi nomon cxi tie,
kaj tiam la aliaj iris retpoŝto, do la ruzo estas retpoŝto
kaj nomo, evidente ne entjeroj, do ni ŝanĝas tiujn al malsama kampo.
Ĝi rezultas varchar, ŝanĝiĝema longitudo char,
estas kiel ĉenon en SQL datumbazo
sed variablo longo, kaj vi vere devas diri ĝin anticipe la
maksimuma longo de la kordoj, do mi tuj iom arbitre
per konvencio tipo 255 signoj.
Mi povus tute diri 32. Mi povus diri 1.000.
Vi ia neceso decidi por vi mem bazita sur via demografio kio estas
la plej longa studenta nomo kaj iru kun tiu numero aŭ iom pli granda,
sed kio estas agrabla pri varchar estas ne iras malŝpari
255 bitokoj sur ĉiu studento nomo.
Se estas DAVIDO ĝi ne iras uzi tutan 255 bajtoj,
sed tio estas supera baro, do mi iros kun 255 nur konvencio,
sed ni povus debati ke por esti iu suba valoro, kaj por retadreso
nur por esti konsekvenca 255, sed denove, ni povus havi la saman debato.
Sed mi faros unu alia afero ol ĉi tie sur la dekstra flanko.
>> Kio estas potenca pri datumbazo estas kiu povas fari multe da pezaj ĉesigon
aŭ kompleksa verko por vi.
En aparta, mi vere ne gravas kion mia studenta ID nombroj estas.
Ĝi simple signifis esti unika identigilo en datumbazo
tial mi havas 32-bitan konciza prezento de tiu studento
por ke mi havas iujn vojo de unike identigi ilin
ke iel estos 2 Davids, ekzemple, en klaso.
Fakte, mi iros por kontroli ĉi AI skatolo, aŭtomata pliigo,
por ke la datumbazo, MySQL, figuroj el
kion ĉiu nove insertos studenta ID tuj estos.
Mi eĉ ne devas maltrankviligi, ke en mia kodo,
kaj mi ankaŭ tuj elekti ion sub la indekso menuo.
La indico faligi cxi tie estas primara, sola,
indekso kaj plena teksto.
Vi povas eble diveni kion paro el tiuj aferoj estas,
sed ĝi rezultas en rilata datumbazoj
vi la programisto aŭ la datenbazo administranto atingos preemptively
doni aludoj al la datumbazo pri kio kampoj
en tabulo estas iom speciala.
>> Ekzemple, en tiu kazo mi iros diri ke ID
tuj estos esenca indico, alie sciata kiel primara ŝlosilo.
Kion tio signifas por la difino estas ke ID nun
estos unike identigi lernantojn en ĉi tiu tabulo.
Neniu lernanto havos la saman ID ĉar mi impona ĉi limigo aŭ ĉi indekso.
Cetere, kio estas tiu tuj faros por mi estas tuj diros
MySQL ke ID estas speciala.
Mi zorgas aparte pri ID, do faru viajn fancy datumstrukturo la magion,
konstrui ian arbon.
Tipe estas iu nomis la B-arbo, kiun ni ne rigardas semajnoj,
sed estas alia tia datumstrukturo simila en spirito al la duuma arboj
kaj pretendas ke ni rigardis, sed tuj diros
al la datumbazo tiu kampo estas tiel grava, ke mi probable
volas povi sercxi sur ĝi, iru antaŭen kaj konstruos kelkajn fancy
datumstrukturo en memoro al agilizar serĉoj por ke ideale
ili estas konstanta tempo aŭ almenaŭ tiel proksima al tiu kiel eble
por ke ĝi ne devolve enen lineara serĉo, kiuj ne tuj estos
la plej alta plenumante alproksimiĝon.
Kontraste, retadreso povus esti estinta primara ŝlosilo.
>> En teorio, ĉies retadreso estas unika, krom se vi dividante iuj rakontas,
sed estas ĝenerale ne bone uzi iun kiel cxeno
kiel primara ŝlosilo ĉar se lia celo en la vivo estas por unike identigi
vicoj en via tablo ne estas kialo por uzi 255 bitokoj maksimume
por unike identigi iun, se vi povas foriri kun nur 4 bitokoj
aŭ 32-bita int.
En ĝenerala, primara ŝlosilo devas esti mallonga kaj konciza
kaj ideale iu kiel entjero aŭ granda int, kiu hazarde estas 64 bitoj.
Sed retadreso devus esti sola, kaj unu el la trajtoj de datumbazo tro
estas plenumi unikeco por mi.
Elektante solaj tie apud retpoŝto, kvankam email mem
estas scrolled for la ekrano, mi diras al la datumbazo
ne fidas min.
Ne lasu min enkonduki en la datumbazo
la sama retadreso dufoje, eĉ se mi estas idioto kaj mi ne
tre bona per mia IFS kaj alia IFS kaj realaj PHP kodo
kaj mi hazarde lasis la uzanto enskribas kun ekzistanta retadreson
la datumbazo estas alia nivelo de defendo por praveco
por certigi ke tiu duplikatajn retadreso ne finas en la tabulo.
>> Nun, per kontrasto, ĉar nomon vi verŝajne ne volas fari tiun solan
ĉar tiam tie neniam povus esti 2 Davids aŭ 2 Mike Smith, ekzemple,
en via datenbazo, tiel ke oni ni simple lasi sola.
Mi tuj iros antaŭen kaj klaku savi je fundo pravas,
kaj ĉiu aspektas bone, sed rimarkas tien
ĉi tiu estas parto kiu nuntempe ni ne pasigas tro da tempo en
ĉar la sintakso estas iom kompleksa, kaj ni ne devas krei tabelojn
cxio, kio ofte, sed SQL mem estas lingvo,
la sintakso por kiuj estas ĉi tie ke mi reliefigis.
Kio phpMyAdmin vere faras estas ĝi kreas ttt-bazita GUI por vi
kun kiu vi povas ŝpari tempon kaj ne devas permane tajpi eksteren
sufiĉe longa SQL query tiel.
>> En aliaj vortoj, se vi volas permane krei ĉi tablon,
ĉu en tiu nigra kaj blanka prompto aŭ eĉ en phpMyAdmin
uzante ĉi tiu alia langeto, ĉi SQL langeto kie vi povas entajpi ajnan SQL demandoj
vi volas, sincere, tiu estus preninta min minuto
por fakte memoru la tutan sintakson, kaj eĉ tiam mi probable havus
faris iujn typos, do ĉi tiu ilo estas utila por aĵoj kiel tiu, kaj ĝi estas ankaŭ instrua.
Vi povas komenci konkludi kion la sintakso estas
nur la agrabla koloro kodigo ke phpMyAdmin estas aldono
por nia vida komforto.
Sed nun ni faros ĉi loko.
Lasu min iri al la insert langeton supre, kaj lasu min antaŭeniri kaj enmeti ekzemple
an ID de let diru-efektive mi ne zorgas.
Ĝi tuj auto pliigo. Mi tuj lasis la datumbazo multe kun ĉi tiu.
Sed mi estos David kaj mia retpoŝto estu malan@harvard.edu.
>> Ni iru antaŭen tie kaj meti en Mike Smith kiel alia.
Mi donos al mi mem familinomo tiel,
kaj ni jam li estu smith@example.com,
kaj tiam kie mi iru poste?
Nu, tio aspektas kiel go estas la butonon por klaki, kaj voila.
Rimarki en la supera 2 vicojn insertos.
Ĉi tiu estas la reala SQL query.
Tio estas la phpMyAdmin ilo ekzekutita por mi,
sed la fina rezulto, rimarki, se mi nun iras al la esplor langeto,
estas vidi 2 vicojn en ĉi tiu tabulo, tre memorigas estetike
de la tablo ni vidis antaŭe por niaj uzantoj de pset 7,
unu el kiuj estas David Malan, unu el kiuj nun estas Mike Smith.
Sed nur por esti klara, mi ne bezonas uzi phpMyAdmin,
kaj ja, vi tuj baldaŭ skribi kodon por pset 7
ke aŭtomatigas la procezo de aldoni vicoj, viŝante vicoj, ĝisdatigante vicoj kaj similaj,
do lasu min anstataŭ iri al la SQL langeto tien
kaj tajpu en unuaranga * de studentoj kie
retpoŝto = "malan@harvard.edu."
>> Alivorte supozu nun vi havas
iuj HTML formo, kaj la uzanto tajpas en lia retadreso, inter aliaj kampoj,
kaj la golo nun estas en PHP sur la dorso fino kodo
por fakte serĉi tiu uzanto aliaj detaloj.
Kio estas via kompleta nomo? Kio estas via ID numeron?
Vi povus skribi SQL query kiel tiu, elektu * de studentoj
kie email = "malan@harvard.edu."
Kaj se mi tiam alklakos iru, rimarki ke mi, kaj ja mi, reiri nur unu vico.
Mike estas preterlasita de tiu rezulto aro, kiel la kolekto de vicoj
ĝenerale nomas, ĉar li ne havas la saman retadreson kiel mi.
>> Nun, denove, ĉi tie por pset 7 vi uzos phpMyAdmin kiel administra ilo
kaj pedagogia ilo por lerni vian vojon
tra la mondo de SQL, sed fine de la tago
vi tuj skribos tiujn demandojn ene de reala PHP kodo,
kaj tiel resti agorditaj en Zamyla la walkthrough en aparta
kie vi ricevos tour de la distribuo kodo por tiu problemo aro
kie ni donis al vi ne nur la estetiko por la ensaluta paĝo
kaj la bela sexy logo kiu diras CS50 Financoj, sed ni ankaŭ donis al vi
aron da funkcioj kiu faros vian vivon iom pli facila.
Ni ankaŭ skribis parton de la pset por vi,
la ensaluta parton de ĝi en aparta, por doni al vi la senton de reprezenta dezajno
ke efektive uzas adaptilo, ekzemple, index.php,
login.php kaj similaj, kaj tiam vi vidos la pset havas ankaŭ ŝablonoj katalogo
kiu havas ĉiujn viajn vidpunktojn, ĉiuj de la estetiko.
Kaj tial la entuta laborfluo en pset 7 tuj estos tiu
viaj uzantoj viziti controlador tra URL en foliumilo.
Ke controlador enhavas PHP kodon, kiun vi skribis, kaj ene de via PHP kodo
eble iuj linioj de SQL anidado en inter duoblaj citiloj
kaj pasis al funkcio ni skribis nomis query
kiu helpos vin paroli kun la datumaro sen uzi ion kiel
administra ilo kiel phpMyAdmin.
>> Vi povos skribi SQL deklaroj en PHP kodo
kaj reiri al PHP tabelo de la rezulto aro,
de la vicoj ke fakte kongruas kun tiu demando.
Kaj simile vi povos fari enmetas aŭ forigas
aŭ ĝisdatigoj aŭ similaj, la sintakso por kiu estas sufiĉe simila,
kaj vi vidos el iu linio referencoj, de la dissendo kodo
kaj el la pset paki sin ĝuste kiel irad fari tion.
Realigi finfine ni vere nur skrapi la surfaco de SQL
kaj de MySQL, sed la povo de vere estas ke ĝi liveras al vi
por fokusigi la problemojn vi volas solvi, la uzo kazoj vi volas apliki
sen devi zorgi tiom multe, almenaŭ la komenco,
pri kie kaj kiel stoki kaj sercxi vian datumbazon,
kaj ĉi tiu estas sufiĉe laŭvorte kie Facebook mem akiris lian komenco
uzante MySQL kaj tiam uzanta pli MySQL servantoj kaj tiam pli MySQL serviloj
post nelonge ĝis tiam devis vere komenci pensi malmola pri kiel
vendejo datumoj, kiel memori aĵojn eĉ pli efike,
do eĉ se ni prenos por donita la fakto ke indeksas kaj sola shtata
kaj tiel plu nur laboras tie estas tre interesa konversacio
ke tio povas ĉiu fine kondukos al, do kompreni ke ni simple skrapante la surfacon
de kio povus eventuale por vi aŭ via projektoj fariĝis sufiĉe granda de datumoj.
>> Kun kiu diris, ni fini tie, kaj ni vidos vin proksima semajno.
[CS50.TV]