[Powered by Google Translate] [Week 8, vervolg]
[David J. Malan] [Harvard Universiteit]
[Hierdie is CS50.] [CS50.TV]
>> Dit is CS50, so dit is die einde van Week 8 hier.
Ons het natuurlik 'n bietjie van 'n orkaan vroeër hierdie week,
so nou is dit is regtig net ek en jy in hierdie lesingsaal,
maar vandag het ons voortgaan om ons gesprek oor PHP
en oor die web programmering meer in die algemeen, en ons het ook die idee om
van databasisse, veral een wat geroep is MySQL, wat is baie gewild hierdie dae,
in 'n groot deel as gevolg van sy scalability asook omdat sy gratis en open source.
>> Maar eers 'n blik op waar ons opgehou het die laaste keer.
Onthou dat ons is op soek na die verskeie Frosh kitsboodskappe voorbeelde,
en dit was die afskuwelike vorm wat ek het met sowat 15 + jaar gelede
ten einde studente op die kampus register vir eerstejaars binnemuurse sport te hê
sonder om werklik om te trek meer oor die werf na Wigglesworth
'n fisiese stuk papier onder sommige Proctor se deur te skuif.
In plaas daarvan het ons verhuis alles aanlyn, maar om te doen wat ons nodig het om gebruik te maak
van 'n paar tegnologie, sodat die een, het ons nodig het HTML HyperText Markup Language,
wat weer opmaak taal wat jy maak web bladsye struktureel.
>> Met behulp van 'n bietjie van CSS van hierdie dae, Cascading Style Sheets,
waardeur ons stylizations gebruik van die web bladsy met behulp van 'n effens anders sintaks,
terwyl die HTML was al oor die struktuur daarvan.
Ons moet ook 'n web-programmeertaal te voer.
In hierdie geval, sal ons gebruik PHP, en PHP gaan toelaat dat ons
dinamiese uitset inhoud sowel as programmatiese dinge doen soos
die stuur van e-posse, soos die geval was op die kennis wat ons het verlede week.
>> Onthou dat die kode vir hierdie was in 2 dele.
Een, het ons froshims3.php,
en dit was grootliks opmaak met 'n HTML-vorm binnekant van dit,
'n klein bietjie van CSS hier in die styl eienskappe
sodat die vorm self op die bladsy gesentreer word, maar as dit
ons het 'n paar verteenwoordigende vorm insette, 'n teks veld, 'n boks,
sommige radio knoppies, 'n uitgesoekte spyskaart, en 'n submit-knoppie.
En via hierdie vorm, het ons na 'n lêer wat was blykbaar genoem register3.php voorgelê,
wat self kyk 'n bietjie iets soos hierdie.
Nou, die meeste van die kode in register3.php, onthou, was al oor die e-pos.
Dit het 'n bietjie van die validering van die vorm wat ingedien is om seker te maak
dat die velde was eintlik wat verwag is.
Toe ons noem 'n paar PHP funksies met behulp van effens nuwe sintaksis,
selfs al is dit geleen van C.
>> Hierdie arrow operateur stel ons in staat om die gebruik van iets genoem objek-georiënteerde programmering te maak.
Ons sal nie daarop ingaan nie in enige detail hier, maar weet vir nou
dit is 'n manier van die funksies wat verband hou met voorwerpe,
wat is 'n spesiale tipe van struktuur, soos ons gesien het in C.
Maar vir nou, net op die geloof dat dit die korrekte sintaks wat gebruik word
wanneer die gebruik van 'n biblioteek soos hierdie PHPMailer biblioteek.
En dan deur die einde van hierdie lêer het ons dinamies gegenereer 'n e-pos
Dit het gestuur aan my jharvard@cs50.net rekening
van my jharvard@cs50.net rekening,
en ons in kennis gestel die gebruiker dienooreenkomstig dat hulle geregistreer is vir hierdie sport.
Dit is pretty much wat die Frosh kitsboodskappe site al daardie jare gelede gedoen het
toe ek dit geïmplementeer, toegestaan ​​word, in 'n ander taal,
maar dit wys dat jy miskien die krag wat jy het
nou dat jy jouself kan nie net programmaties druk
op 'n lae vlak in 'n taal soos C, maar op 'n veel hoër vlak
met hierdie baie werklike wêreld toepassings soos e-pos om werklik op te los
n paar werklike wêreld probleme.
>> Nou, natuurlik, selfs al het ek hierdie script gebruik te genereer
e-pos dinamies van jharvard@cs50.net, wat is inderdaad 'n rekening
wat ek het toegang tot, doen baie versigtig wees om te stuur
e-pos net van rekeninge wat is eintlik jou eie,
sodat die dinge kry jy in 'n bietjie van die warm water in die lewe.
Met wat gesê het, laat ons nou die oorgang tot die oplossing van 'n ander probleem heeltemal,
wat van die behoud van state.
Nou, wat beteken dit eintlik beteken?
HTTP, hierdie HyperText Transfer Protocol,
is eintlik 'n staatlose protokol, en wat dit beteken is dat
wanneer jy trek iets soos Google.com en dan Enter
gewoonlik jou blaaier het 'n soort van die spin-ikoon wat dan
resultate in 'n web bladsy afgelaai,
en dan is daardie klein ikoon stop spin, en wat inderdaad dui daarop
dat HTTP voltooi het 'n soort van verbinding met die bediener, en dit is dit.
HTTP is staatloos in die sin dat dit nie in stand te hou
'n aanhoudende verbinding met die bediener in die dieselfde manier Skype nie
of Gchat nie want met HTTP
die aanname is dat wanneer jy 'n web bladsy wat is dit het gehaal.
>> Nou, in werklikheid hierdie dae op webwerwe soos Facebook en Google Maps
en Twitter en dies meer is daar 'n baie meer dinamika waarvolgens
selfs nadat daardie ikoon stop spin wat jy kan kry in werklikheid meer updates
van die bediener, meer tweets, meer status updates op Facebook en die wil.
Maar selfs dit is die gebruik van 'n tegniek wat ons sal praat oor in 'n week of twee
bekend as Ajax die gebruik van 'n taal, die sogenaamde JavaScript,
maar aan die einde van die dag, HTTP is nog staatloos is nie.
En tog as jy wil om een ​​of ander manier onthou dinge oor 'n gebruiker
selfs nadat hulle van jou bediener het ontkoppel
PHP nie bekostig om 'n manier om dit te doen
want, soos ons gesien het die laaste keer, PHP 'n aantal superglobals,
en 'n superglobal is, weer, 'n spesiale globale veranderlike
wat aan u oorhandig word deur die webbediener en deur PHP self.
>> Jy hoef nie iets te doen om waardes in te sit,
en onder die superglobals het ons tot dusver gesien kry en plaas,
en dit is waar vorm velde word outomaties vir jou,
sowel as 'n paar ander wat ons nog nie gesien het nie.
Binnekant van $ _server is 'n paar spesiale veranderlikes wat verband hou met die bediener self.
Wat is die IP-adres, wat protokol, HTTP-of HTTPS het jy gebruik,
wat versoek metode het jy gebruik en dies meer, so daar is 'n paar interessante,
sappige besonderhede oor die bediener, en in die waarheid te sê, die gebruiker daar as well.
Daar is $ _cookie, en dit is waar hierdie dinge genoem koekies gestoor word.
Ons sal nie tyd spandeer op koekies self vandag,
maar weet nou dat 'n koekie is net 'n klein stukkie van die inligting
dat 'n web bediener op 'n webblaaier kan plant
en op sy beurt sy RAM of sy rekenaar se hardeskyf
inligting oor 'n gebruiker te stoor, byvoorbeeld, hul gebruikersnaam
sodat hulle dit nie te tik elke keer wanneer hulle aanteken of 'n
unieke nommer of identifiseerder vir hierdie gebruiker
sodat jy nie om hulle te verpes met die dieselfde soort van vrae oor
voorkeure in die toekoms, maar die meeste van belang
reg nou is $ _session.
>> Hierdie superglobal, wat, soos die ander, aan u oorhandig word outomaties deur PHP
wanneer jy skryf PHP-gebaseerde webwerwe
kan enigiets wat jy wil, strykers, heelgetalle stoor,
swaai punte, waardes, skikkings, voorwerpe,
regtig enigiets wat jy wil, en dit laat jou toe om dit op te slaan op so 'n wyse
dat selfs indien die gebruiker besoek jy nou en dan
kom terug 'n minuut van nou of 5 minute van nou, omdat
hulle neem hul tyd voor te kliek op 'n ander skakel
PHP sal verseker dat alles wat jy het in daardie sessie superglobal
'n minuut of 5 minute gelede sal nog steeds daar wees wanneer die gebruiker opbrengste.
En onder die kap hierdie superglobal is geïmplementeer deur middel van
daardie dinge genoem koekies, maar vir nou, dit is net 'n abstraksie
waardeur dit is soort van die programmatiese ekwivalent van 'n shopping cart.
Wat jy ook al, die programmeerder, in daardie
superglobal assosiatiewe skikking sal daar 'n aantal minute later
totdat jy dit verwyder of totdat die gebruiker sy of haar browser gesluit geheel en al.
>> Kom ons neem 'n blik op 'n voorbeeld van hoe hierdie ding is eintlik gebruik word.
In counter.php onder vandag se stukke van die kode
ons het die volgende reël.
Aan die begin van hierdie lêer het ons het 'n klomp blou kommentaar, wat oninteressant vir nou.
Maar in lyn 13 het ons 'n nuwe lyn,
session_start, en wat eintlik nie presies wat dit sê.
Dit begin sessies.
Dit stel jou in staat om daardie groot superglobal $ _session te gebruik, en dit is so eenvoudig soos dit.
Nou, as ons voortgaan om te kyk na line 16, laat ons probeer om uit te vind wat hierdie webblad gaan doen.
If (isset ($ _SESSION ["counter") dan voort te gaan
en stoor in-die-toonbank veranderlike, klein toonbank,
$ _SESSION ["Counter"].
Dit blyk te wees waarby 'n plaaslike veranderlike genoem counter
binnekant van wat dit is om 'n afskrif van alles wat binnekant van die superglobal
sessie op die plek "counter genoem."
Anders, blykbaar, hierdie klein plaaslike veranderlike toonbank, is geïnisialiseer tot 0.
>> Maar dan 'n paar reëls later in 26 kennisgewing dat die sessie se afskrif van die toonbank,
sy sleutel, het 'n nuwe waarde wat wat is die huidige waarde plus 1.
In kort, hierdie lêer blyk te wees afhangende van
'n teller wat se binnekant van die sessie gestoor superglobal
deur dit te verhoog van 1, maar dit behou die eerste keer 'n afskrif van die vorige waarde
deur die stoor dit in 'n plaaslike veranderlike genaamd $ toonbank,
en dan af hier laat ons sien wat oorbly.
Dit blyk dit is pretty much net HTML.
Aan die onderkant van hierdie bladsy sien ons in lyn 37 dat ek hierdie webwerf besoek
counter aantal kere, dus is daar 'n paar interessante eienskappe hier.
Een, dit is duidelik 'n veranderlike, maar dit is nie voldoende om net te sit
$ Toonbank in die liggaam van jou HTML, want natuurlik
al is dit net daar onder jou HTML PHP gaan om te aanvaar dat net HTML.
Wil jy letterlik $ toonbank gedruk word op die skerm.
>> Maar in plaas daarvan deur die val in PHP mode
met hierdie stuk van die sintaksis kan ons dinamiese voeg 'n waarde hier
baie soortgelyk in die gees wat ons gedoen het die laaste keer met
die invoeging van waardes in stringe.
Trouens, dit is net 'n snelskrif notasie vir die sê van iets soos hierdie letterlik,
druk ($ toonbank) of selfs iets soos printf (% s, counter),
of selfs, soos jy gesien het aanlyn of in handboeke,
daar is 'n funksie in PHP echo genoem
wat nie die dieselfde ding, en almal van hulle is net meer asem maniere
sê <=?
In hierdie een geval jy hoef nie te sit
die woord PHP na die vraagteken.
Dit is snelskrifnotasie vir, weer, wat sien ons net 'n oomblik gelede
wat aansluit by 'n waarde.
>> Kom ons kyk wat die eindresultaat van hierdie is eintlik.
Laat ek tog oorstap in ons counter.php lêer,
en ons sal sien dat Dawid net 'n fout gemaak deur te speel met die kode.
Kom ons gaan fix wat hy screwed up,
en die fout blyk om daar te wees, weg, on line 37.
Volgens die top van hierdie bladsy het ek hierdie webwerf besoek 0 times.
Wel, laat ons nou voort te gaan, en op die top van die leser op die
laai ikoon, en ek kliek herlaai,
en nou is ek besoek die site 1 keer, 2, 3, 4, 5, 6, 7, 8.
En inderdaad, as ons kyk na die bron van hierdie bladsy die werklike bron kode verander,
en let op die totale afwesigheid van enige PHP, en dit is omdat
PHP-kode geëvalueer word of vertolk bediener kant,
en so dit beteken dat die uitset van die PHP skrip wat uiteindelik aan die leser gestuur,
wat in hierdie geval is 'n paar rou HTML en 'n paar rou teks.
Wat gaan hier aan?
>> Wel, met relatief min lyne kode Ek is in staat om te slaan
aanhoudend oor die verloop van 'n paar sekondes, of as ons lank genoeg gewag,
minute, selfs ure, n waarde in 'n manier dat maak HTTP
Stateful lyk asof ons het behou
hierdie verbinding met die bediener, en dit is net onthou wat ek gesê dat dit die laaste keer,
maar in werklikheid is daar is 'n hele klomp van die kompleksiteit gaan op onder die kap
wat koekies wat in staat stel PHP my hierdie illusie te gee
van hierdie shopping cart-agtige funksie.
Vir nou, 'n triviale voorbeeld waar ons net 'n heelgetal stoor,
maar dat die funksie sal terug kom om van groot waarde te wees
wanneer ons begin praat oor meer komplekse projekte,
onder hulle probleem gestel 7.
Dit is jou heel laaste probleem in CS50.
Ek weet, dit is so hartseer, maar wat jy sal vind, is dat ons gaan om tot die gevolgtrekking te kom
hierdie deel van die semester deur eintlik die oorgang
seker van die konteks van C na die konteks van PHP
maar, terwyl die gebruik van 'n paar van die baie dieselfde grondbeginsels
ons het gepraat oor vir 'n geruime tyd.
>> Die doel met pset 7 CS50 Finansies te implementeer,
wat is jou eie weergawe van Yahoo Finansies of Google Finansies
of selfs Etrade.com waardeur jy het die vermoë om
voorraad pryse vir gegewe simbole kyk, maar selfs meer as dit
jy het die vermoë om te "koop" en "verkoop" aandele
wat verhandel word op verskeie aandelebeurse, want as hierdie tuisblad
hier aandui, wat is werklik die mate waarin ons het begin
die probleem stel vir jou, jy het 'n login vorm wat vra vir 'n gebruikersnaam en 'n wagwoord.
Dit het 'n submit knoppie, maar daarna, as ons sal uiteindelik sien,
daar is niks wat regtig aan die gang onder die kap nie, omdat dit
bly vir jou die vermoë om nuwe gebruikers aan te registreer te implementeer,
die vermoë om aandele te koop, voorrade te verkoop,
om werklik te kyk huidige voorraad pryse.
>> En inderdaad, sal dit wees as die werklike wêreld as moontlik, want ons het
sluit in 'n bietjie van die kode wat jou sal toelaat om met 'n enkele funksie
Yahoo Finansies, wat wonderlik gratis beskikbaar data maak om navraag te doen
vir die soek voorraad pryse wat gebaseer is op die beurs simbool of ENKELE simbool,
en jy kry die huidige voorraad prys van die dag terug.
Die data wat jy eintlik sien in hierdie spesifieke pset sal wees
as die werklike wêreld soos dit kan so kry dat jy eintlik tussenbelegsel
met werklike wêreld aandele, werklike wêreld pryse,
Dan sal ons sien hoeveel geld jy dalk kan maak
oor die volgende paar dae van die speel met jou eie probleem stel.
>> Maar laat ons die eerste stel die stadium vir hoe om iets te ontwerp wat is seker meer ingewikkeld
as counter.php, dit is meer ingewikkeld as enige van Frosh kitsboodskappe voorbeelde wat tot dusver,
en laat ons probeer om 'n paar paradigmas te stel dat ons in staat stel om
beide vir pset 7 en miskien vir jou finale projek as jy iets doen web-gebaseerde
te hou om jou kode goed georganiseer, te hou jouself sane,
en 'n stap in die rigting saam te neem, hetsy in CS50 se finale projek
of buite as jy nog steeds om iets in die toekoms te programmeer.
Daar is hierdie algemene ontwerp paradigma
in rekenaarwetenskap en meer in die algemeen in die ontwikkeling van sagteware
bekend as MVC, model-view-kontroleerder,
en dit is 'n dom akroniem wat 'n baie nice idee beskryf,
wat is die skeiding van die verskillende aspekte van 'n program,
spesifiek die behoud van die logika of die besigheid logika van 'n webwerf
sodat enigiets wat behels dinge soos
roep funksies en bevraagteken databasisse en dies meer
gebeur nie onder jou HTML
maar eerder in afsonderlike lêers, en inderdaad, daar is hierdie 'n lêer
gewoonlik dat jy die beheerder genoem
wat is regtig die brein agter die operasie, en ons sal sien 'n voorbeeld
in net 'n oomblik.
>> Daar is 'n model wat programmering-kode
wat doen die praat met jou databases, wat praat met Yahoo Finansies en dies meer,
en dan is daar die V in MVC, die uitsig,
al die dinge wat aan estetika, die lêers wat eintlik bevat wat verband hou
jou HTML, miskien jou CSS en die wil.
Die idee hier, soos hierdie foto suggereer, is dat die beheerder
is die lêer, soos ons sal gou sien en as jy in die besonder sien in pset 7,
dat die hele wêreld praat via hul webblaaiers.
Dit is die lêer wat op die openbare internet besoek kry,
maar die kontroleerder praat met potensieel 'n model,
wat een of meer ander lêers wat kode bevat verwant aan data,
kode wat verband hou met databasisse en die soos, en dan praat met
die beheerder een of meer ander lêers bekend as views,
wat is die estetika van 'n web bladsy, templates van spesies,
dat sommige data as inset kon neem, maar aan die einde van die dag
die enigste logika binnekant van 'n oog moet die lewering van daardie data,
iterating oor 'n lus en eintlik spoeg 'n paar
HTML-gebaseerde vertoning daarvan of selfs iets soos 'n PDF.
>> Wat is mooi oor MVC is dat jy verskillende menings kan hê
gebaseer op die tipe van apparaat, gebaseer op die tipe van die lêer formaat wat jy eintlik
wil om te wys aan die gebruiker.
Kom ons neem 'n blik op 'n paar progressief meer kompleks en goed ontwerpte voorbeelde
deur eers met weergawe 0 hier te begin.
Laat my voort te gaan en maak vandag in ons MVC-directory
'n lêer genaamd index.php in directory 0.
Let op dit is 'n super eenvoudige en baie underwhelming webwerf
wat is 'n soort van weergawe 0 van 'n tuisblad vir CS50,
en let op hoe ons het 'n skakel na Lesings, ons het 'n skakel na Syllabus,
en as ek die skakel na Lesings kennisgewing dat die URL
tot bo gaan te verander lectures.php.
As ek dan volg die skakel na Week 1 kennisgewing dat die URL verander tot week1.php.
Daar blyk 'n redelik eenvoudige hiërargiese struktuur hier te wees.
>> Kom ons neem 'n vinnige blik onder die kap hoe dit uitgelê,
en inderdaad, as ek kyk na index.php dit is redelik maklik.
Om die waarheid te sê, selfs al het ek noem dit 'n PHP-lêer daar is geen werklike programmeringskode uitmaak nie.
Daar is 'n opmerking wat ek geskryf het hier in PHP net sodat die gebruiker nie beland dit sien.
Natuurlik, is soos gister en eergister nie, enigiets wat in tussen PHP tags is
kry dit vertaal word, beteken: selfs al is dit 'n kommentaar, en a comment te interpreteer
beteken dit net aan die einde van die dag weg te gooi en nie eintlik
stuur dit aan die leser, sodat alles hier is net die estetiese.
As ek dit oopmaak insgelyks lectures.php dit is ook net 'n harde gekodeerde lêer.
Dit gebeur genoem te word iets. Php,
maar dit is regtig net html, en week1.php, week2.php
insgelyks is net opmaak, so daar is 'n klomp van die tekortkominge van hierdie ontwerp.
Een, dit is 'n groot hoeveelheid van die kopie / plak.
Selfs al is die enigste ding wat onder hierdie lêers verander is die on-geordende lys,
die li tags, Ek het egter doc tipe, HTML, kop,
titel, beslote liggaam, naby HTML en meer
in elke enkele lêer, wat beteken dat as ek ooit wil te herstruktureer
hierdie webblad of restylize dit wat ek het om te gaan in en verander
al hierdie lêers met die hand of met 'n paar massiewe vind en te vervang.
>> Kom ons neem 'n stap in die rigting van 'n slimmer, meer dink ontwerp in weergawe 1 hier
waardeur soos per die lees my dat ons so het ingesluit wat jy kan speel saam met
hierdie meer rustig by die huis kennisgewing dat ons hier
'n opsomming van die lêers in die weergawe 1 van hierdie webwerf,
en dit blyk dat ek het dit op my geneem om faktor
n paar algemene kode header.php en footer.php.
Wel, laat ons neem 'n blik op wat binne die eerste van die.
Header.php lyk bekend,
maar sien waar kom kap dit af?
Reg na line 19, so dit is alles wat was algemeen
van die lêers index.php, lectures.php,
week1 en week2.php van die vorige voorbeeld.
Wat ek gedoen het, was kopie en sny alles wat gemeenskaplik aan al die lêers,
sit dit in 'n aparte header-lêer, en insgelyks in footer.php
ek het dieselfde beginsel toe te pas waarvolgens die enigste interessante lyne
in footer.php hierdie twee, beslote liggaam en naby HTML.
>> Maar wat beteken dit nou is, is dat in die nuwe weergawe
index.php kennisgewing hoeveel makliker dit kan kry.
Toegegee, 'n bietjie meer kriptiese soek, 'n bietjie minder intuïtief
van bo na onder te volg nie, maar my God, al van daardie ontslag is nou verby.
Ons benodig met behulp van 'n PHP funksie letterlik genoem vereis tot bo,
wat baie herinner, onthou, C # sluit meganisme.
Ons benodig header.php aan die bokant.
Ons benodig footer.php aan die onderkant, en die enigste ding wat anders is
of spesiale oor hierdie lêer is die inhoud wat bedoel is om uniek te wees om dit te.
As ek gaan dan in, sê, lectures.php, dieselfde beginsel van toepassing is.
Weereens, 'n paar opmerkings tot bo, maar dan Ek benodig header, vereis footer,
en tussen dit is net die inhoud wat is eintlik verander.
En as ons kyk in Week 1 en week 2 wil ons sien
dat dieselfde beginsel was daar toegepas word.
Wel, ons het nie baie gedoen daar.
>> Kom ons neem 'n blik op die weergawe 2, wat 'n soortgelyke struktuur,
maar nou sien ek iets anders het ingestel.
In lyn 10 Ek het 'helpers.php,
wat bevat blykbaar helper funksies.
'N helper funksie is oor die algemeen 'n relatief kort funksie
wat jy skryf om jou te help in verskillende plekke,
en laat ons kyk wat binnekant van helpers.php is.
In hierdie geval, dit lyk soos dit het 2 funksies.
Onthou van die ander dag met ons kubus voorbeeld
wat jy kan definieer jou eie funksies in PHP, en wat ek nou gedoen het, is ek
gedefinieerde funksies genoem lewer footer en lewer header,
die eerste wat 'n parameter genoem data,
waarvan die standaard waarde is 'n leë verskeidenheid, soos voorgestel dat daar,
en ons kan eintlik skryf dit selfs meer bondig in die nuutste weergawe van PHP
deur die sê plein bracket, gesluit vierkante bracket.
Dit beteken dat 'n leë skikking van grootte 0, maar nietemin 'n skikking.
>> Hierdie uittreksel funksie is 'n bietjie spesiaal in daardie
wat dit doen, is dit neem as sy argument 'n associatieve array
wat 0 of meer sleutel waarde pare, en as jy 'n sleutel van foo
en 'n waarde van bar die uittreksel funksie
skep 'n situasie wat nou, soos van lyn 11,
jy het 'n plaaslike veranderlike genaamd $ cat wie se waarde is bar.
En as jy meer sleutels en waardes in die data verskeidenheid,
insgelyks sou hulle onttrek word in die plaaslike omvang
of naam ruimte sodat footer.php en
dieselfde idee hier onder sodat header.php
het toegang tot daardie veranderlikes.
Om die waarheid te sê, laat my weer oopmaak header.php
en die aandag vestig nou hoe dit lyk in hierdie weergawe.
>> Eerder as om hard kodering CS50 as die titel vir elke enkele bladsy
kennis van die dinamika wat moontlik nou.
In reël 5 ek aansluit by 'n titel veranderlike,
maar eers moet ek verby die titel veranderlike met 'n funksie genoem htmlspecialchars.
'N simpel naam vir 'n funksie, solank as wat dit is nie, maar is dit nie regtig wat dit sê.
Dit verseker dat enige spesiale karakters
in die tou wat geslaag is behoorlik ontsnap HTML.
Dit is eintlik 'n manier van die voorkoms van iets genoem 'n cross-site scripting aanval
waardeur iemand kan kwaadwillig of per ongeluk
spuit hul eie HTML-kode op jou webwerf
deur die plak in die een of ander vorm, byvoorbeeld,
iets wat jy baie het nie verwag dat, veral JavaScript-kode,
as ons praat oor in 'n week of twee tyd.
>> Dit is nou header.php, dit is 'n oog
in die sin dat dit jou toelaat om esteties kyk na die inhoud van sommige datastel.
Maar meer spesifiek, dit is 'n sjabloon.
Dit is 'n soort van 'n bloudruk nou van wat ons wil die bladsyboskrif ('header') van elke bladsy om te lyk soos,
maar daar is 'n paar dinamika wat ons wil hê om die titel te dinamies ingevoeg word
wat gebaseer is op die titel veranderlike
wat is 'n uittreksel wanneer ons geroep het, weer,
die lewer header funksie.
Nou, as ons kyk na die lewer footer, daar is eintlik nie veel van daardie reg nou
want in footer.php daar is hoegenaamd geen dinamika.
Daar kon wees, maar op die oomblik is dit 'n harde gekodeerde lys van 2 tags,
maar dieselfde idee van toepassing is, sodat eintlik noem hoekom
het ons tyd mors met 'n lewer kop en 'n lewer footer funksie?
Laat my plaas gaan nou in weergawe 3,
en in weergawe 3 in helpers het ek besluit om dit nog meer vereenvoudig.
>> Laat my een render funksie.
Laat my dit neem om 'n ander argument, hierdie tyd genoem sjabloon,
wat bedoel is om die naam van 'n sjabloon,
en dan sal ek vermetel koppel php dat die veranderlike se waarde.
en dan as dit bestaan ​​foo.php, bar.php of header.php en footer.php,
dan gaan ek om voort te gaan en die veranderlike data te onttrek
en dan vereis dat die pad.
Met ander woorde, dit nou gebruik, as ek oopmaak index.php
Let op dat ek nie noem lewer kop nie.
Ek het net 'n beroep lewer, maar ek slaag in 'n aangehaal waarde van header
om duidelik te maak watter sjabloon ek eintlik wil om te laai.
>> Dan oor hier opmerk wat ek doen.
Ek wat in dinamiese 'n sleutel van titel,
'n waarde van CS50, en dit ook, soos ons gesien het,
gemaak kan word meer bondige in die nuutste weergawe van PHP
waar kan ek die skikking funksie met vierkantige hakies vervang,
wat ek stel, is selfs meer leesbare en seker
'n bietjie makliker om te tik.
En natuurlik, met die lewer footer oproep aan die onderkant,
ons nie die moeite doen wat in 'n tweede argument, geen associatieve array,
want daar is niks dinamiese binnekant van daardie footer.
Dit is net 'n paar noue tags for HTML.
Goed, ons neem stappe in die rigting van die werklik skoonmaak dinge hier,
maar laat my oopmaak 2 finale voorbeelde.
Hierdie een, nommer 4, kennis dat ek 'n doelbewuste besluit gemaak het nou
deur uiteindelik met behulp van 'n paar hiërargie aan my lêers om te verbeter op die vorige voorbeeld.
>> Let op dat in hierdie opsomming, in hierdie lees my, ek ingevoer
'n gids en 'n templates directory
waarvan die inhoud gaan wees die dinge wat ek wil in te sluit
en die templates wat ek wil lewer, onderskeidelik.
Dit is regtig my anale en probeer om dinge netjies te hou,
verwante lêers hou saam, maar die eindresultaat
is dat ons nou 'n effens tidier setup, maar ons moet nou onthou
in, byvoorbeeld, index.php
wanneer ons die lêer helpers.php
ons nou dit nodig het via includes / helpers.php
eerder as om net te sê helpers.php want nou dit is eintlik in 'n sub-directory.
Nou, as 'n eenkant, sal jy sien in hierdie voorbeelde en 'n paar ander
funksies soos vereis, sodra vereis.
Daar is eintlik 'n funksie self genoem insluit, en hulle almal het effens verskillende gedrag.
Ek sê hier vereis om een ​​maal te maak super duidelike dat ek slegs diegene wil
helpers ingesluit in my projek.
Maar as ek versigtig en as ek eintlik dink deur my logika behoorlik
dit moet ook net voldoende om te sê vereis tot bo
so lank as wat ek myself nie per ongeluk nie nodig dat dieselfde lêer elders.
Trouens, dit is 'n bietjie meer doeltreffende manier van dinge doen, dan met behulp van
vereis een keer, so ek sal dit trim af na net vereis.
>> Laat 'n stap verder te neem.
Hierdie laaste voorbeeld nou, weergawe 5, het selfs 'n skoner gids hiërargie.
Let op wat ek hier gedoen het volgens die lees my in hierdie laaste weergawe
is nou ek het my HTML-gids, wat ek al hierdie tyd het,
maar binnekant is daar is nou net index.php, lectures.php,
week1.php en week2.php.
Die sluit directory woon nou saam met van die HTML-gids,
op dieselfde vlak as 'n broer of suster, om so te praat nie.
So doen die gids Sjablonen.
Die sleutel afhaal hier is ek 'n bietjie meer struktuur het ingestel,
maar die belangrikste funksie is nou dat slegs die lêers
wat moet web toeganklik is, openbaar aanspreekbaar
deur 'n URL op die openbare internet is in my HTML-gids.
>> Intussen het ander lêers, helpers.php, footer.php,
header.php, wat is waarskynlik miskien meer sensitief,
miskien helpers het eintlik 'n paar gebruikers name en wagwoorde of 'n intellektuele
eiendom van my, funksioneer ek wil regtig nie om die wêreld te sien, selfs al per ongeluk.
Dit is goeie praktyk om uit te hou van die openbare HTML directory
enige lêers wat nie self moet openbaar te wees.
Al wat jy hoef te doen in hierdie geval wanneer jy soek op byvoorbeeld,
die HTML-gids se index.php lêer,
agterkom ons het net 'n bietjie meer versigtig te wees wanneer vereis
of een keer van hierdie lêer vereis.
Ek nodig het om eerste te doen .. om te gaan na die ouer gids,
dan / includes / helpers.php
terug in die lêer duik dat ek omgee te kry.
>> Enige vrae dan op MVC
of hierdie relatief eenvoudige inkarnasie daarvan?
En laat my duidelik maak dat ons ons fokus nogal 'n bietjie op die
V hier, die menings en die faktorontleding van hierdie voorleg.
Ons het regtig nie onderskei M van C net nog nie.
Trouens, daar is regtig geen M hier, en selfs ons C,
kontroleerder, is regtig nie doen nie al dat daar nog baie, maar jy kry baie meer
vertroud is met beide van daardie 2 briewe van MVC,
of eerder, sal jy baie meer vertroud met die C
in MVC vir probleem stel 7, dus is daar meer op die horison.
Vrae?
Daar is eintlik niemand hier.
>> Goed, kom ons beweeg nou na die tweede en finale onderwerp vir vandag.
Dit is die bekendstelling van 'n databasis.
Tot op hierdie punt het ons het 'n paar maniere om van die stoor van data.
Ons het gebruik veranderlikes.
Terug in ons C lêer, I / O bespreking het ons begin met behulp van teks lêers
en die gebruik van lêers soos fprintf, en dan het ons selfs begin
praat oor CSV-lêers 'n bietjie, deur kommas geskei waardes,
so al hierdie ons toegelaat om data wat gestoor word
óf nie aanhoudend of aanhoudend.
Maar selfs CSVs is nie regtig bevorderlik is vir soek
en voeg en te verwyder.
Dit is regtig net 'n dom teks lêer deur kommas geskei
ry deur ry deur ry deur ry, so as jy wil
soek dat lêer regtig die beste wat jy kan doen, is 'n lineêre soek.
Jy het om te begin by die top van die lêer, lees die hele ding in,
en kyk vir 'n paar waarde van belang.
As jy wil plaas in dit wat jy het om dieselfde ding te doen,
iterating oor dit en die invoeging in 'n spesifieke plek,
en in die waarheid te sê, jy het om al van die soek logika jouself te doen.
>> Jy nie kan doen slim ooreenstem met die patroon op 'n CSV-lêer tensy jy self skryf die kode.
Jy nie kan doen filtrasie van 'n CSV-lêer
tensy jy self skryf die kode.
Sou dit nie lekker wees as iemand anders in al die moeite
om werklik te soek maklik en invoeging maklik
en skrap en opdatering en so meer?
Dit is presies wat 'n databasis is.
SQL, gestruktureerde navraagtaal, is nog 'n ander taal
dat ons hier die bekendstelling van vandag, maar ook dit is redelik toeganklik,
en wat ons regtig gaan om dit te doen is net pluk uit sommige van die belangrikste
eienskappe sodat vir pset 7, en as jy iets doen web-gebaseerde,
jou finale projek, jy het die vermoë om jouself uit te druk
in terme van data navrae.
Jy het die vermoë om 'n bietjie op te slaan of 'n baie van die data
in 'n baie meer gestruktureerde wyse wat aan die einde van die dag
maak jou lewe makliker, want met SQL jy jouself kan uitdruk
baie meer presies, veel meer metodies ten einde te
n subset van die data van 'n groter korpus van data terug te kry.
>> Jy kan dink van 'n databasis, in hierdie geval, 'n SQL-databasis, regtig soos Excel
of Nommers waar dit is 'n sigblad,
of miskien verskeie sigblaaie, en 'n woordverwerker, sigblad, natuurlik,
rye en kolomme, en dit is omdat
SQL-databasisse is relationele, relationele in die sin
dat hulle stoor data in terme van hierdie tabelle,
rye en kolomme.
Hulle is hoër presterende as iets soos 'n sigblad,
en 'n spreadsheet is bedoel om gebruik te word deur 'n mens.
'N databasis is bedoel om gebruik te word deur 'n programmeerder
kode skryf teen dit, sodat die inkarnasie van 'n databasis
gaan om óf command line.
>> Een van die mees gewilde relasionele databasisse daar buite is, weer, MySQL,
wat is wonderlik gratis, baie hoog-presterende, en dit is wat
Facebook gebruik baie vroeg op en tot 'n mate vandag nog
'n baie van die data op te slaan, en ons sal sien in 'n oomblik
dat die gebruik van relatief eenvoudige instruksies
ons kan kies data, voeg data, update data,
vee data en die wil, maar gelukkig, is daar 'n meer gebruiker-vriendelike koppelvlak
as net tik op 'n swart-en-wit vinnige hier.
Ons sal gebruik vir pset 7 en buite 'n gratis program genaamd phpMyAdmin.
Die naam is toevallig.
Die instrument gebeur geïmplementeer word in PHP,
maar dit is fundamenteel irrelevant.
Wat is nuttig oor phpMyAdmin, is dat dit 'n web-gebaseerde nut.
Ons het geïnstalleer dit in die toestel vir jou,
en met dit wat jy kan skep tabelle in 'n databasis,
jy kan plaas data, verwyder data, en in die algemeen sien
jou data in 'n redelik gebruikers-vriendelike omgewing.
Jou gebruikers gaan nie phpMyAdmin te gebruik.
>> Hierdie is eintlik net 'n administratiewe of ontwikkelaar se instrument
met wat om te sien en te steek om jou data en uit te vind hoe om dit te struktureer,
baie soos jy self kan gebruik Excel of getalle,
maar dit gaan om 'n goeie manier om van die visualisering van wat gaan aan onder die enjinkap
sodat jy kan fokus op die interessante probleemoplossing en nie soseer
op die arcane opdragte.
Kom ons neem 'n blik op 'n voorbeeld van die data wat tabularly gestoor word
in 'n relasionele databasis.
Hier is een so 'n voorbeeld.
Nou, ongelukkig phpMyAdmin afgedwaal op die kant van die pad te gooi te veel woorde
en grafika by jou, maar as jy net op die slyp in
ID kolom, die gebruiker naam kolom, en die hash kolom,
dit is 'n sigblad effektief, maar dit gebeur om 'n uittreksel te wees
van 'n tabel binnekant van die toestel
die gebruik van 'n lêer wat ons u voorsien in probleem stel 7.
>> In die besonder, ons gee jou 'n lêer wat verteenwoordig
'n gebruiker se tafel, so 'n sigblad wat gebruikers met 3 kolomme,
waarvan een is 'n unieke ID wat begin op 1 en geïnkrementeer daarna.
Die tweede kolom is 'n gebruikersnaam en dié van julle wat Hacker het,
Hacker uitgawe vir pset 2, kan sommige van hierdie gebruikers name ten minste erken.
Op die regterkant is wagwoorde, maar hulle is nie letterlike wagwoorde.
Hulle is hashes daarvan, so dit blyk uit
dat die stoor van wagwoorde in 'n databasis is 'n baie slegte idee.
Jy het waarskynlik al gelees op 'n sekere punt van 'n paar webwerf
of 'n paar maatskappy se databasis gedrang kom, en dan moet jy
Om jou wagwoord te verander, moet jy terugbetalings op dinge te kry
omdat 'n paar slegte man eintlik uitgebreek in jou rekening as 'n resultaat.
>> Berging van wagwoorde in duidelike teks, ongeënkripteerde in 'n databasis
is heeltemal asinine, en tog is dit baie amusant
dan om te lees oor 'n paar baie bekende maatskappye
soms in die pers wie se databasisse is gekompromitteer,
en dat 'n deel is nie snaaks nie, maar die feit dat die databasisse bevat ongeënkripteerde
wagwoorde is belaglik, want letterlik met een lyn van kode
jy kan beskerm teen daardie spesifieke bedreiging, en dit is wat ons hier gedoen het.
Selfs vir ons valse min CS50 Finansies weergawe
ons versleutelen wagwoorde net vir 'n goeie maatreël, en die feit dat
almal van hierdie wagwoorde begin met $ 1 $ is net 'n konvensie.
Dit beteken net hulle is geïnkripteer of regtig hashed,
wat is soos 'n one-way kodering funksie
waardeur jy kan nie keer die gevolge daarvan met iets genoem MD5.
>> Die feit dat 50 na daardie beteken dat 'n sout-waarde
van 50 is wat gebruik word vir die hashing al behalwe vir een van hierdie wagwoorde.
Myne, natuurlik, soos jy kan sien, HA,
was die gebruik van 'n ander sout, so dié van julle wat het effens gepootjie
miskien in Hacker 2, mag dit is die gevolg van ons gebruik
'n ander hash as die ander omdat my wagwoord is eintlik dieselfde
as 'n ander gebruiker daar.
In werklikheid, as jy al hierdie weke wag om uit te vind
wat daardie wagwoorde is hier was die wagwoorde wat jy uitgedaag het
om te kraak in die Hacker uitgawe van die probleem stel 2, sodat niemand te lastig.
In werklikheid, Malan se was dieselfde as jharvard,
maar as ons gaan terug na hulle anders lyk.
>> Fokus op jharvard bloedrooi stowwe te bewerk, want hulle is anders gesout.
Die algoritme is verwoes in 'n manier dat die
hash waarde, die geënkripteerde waarde lyk 'n bietjie anders
omdat die insette was effens anders, maar die wagwoord onder die kap
was nog uiteindelik bloedrooi.
Nou, wat omgee oor hierdie?
Wel, is ons die verskaffing van u met die monster gebruikers, die monster gebruikers name
en hashes van hul wagwoorde sodat jy eintlik 'n paar
kliënte vir CS50 Finansies wanneer jy eers kry van die grond af met jou kode.
Jy sal meer tabelle te implementeer binnekant van MySQL, binnekant van die databasis.
Jy sal meer sigblaaie te skep, effektief, maar ons het besluit om te gee jy hierdie een
te kry wat jy begin het, en jy sal sien dat die probleem stel spesifikasie
stap vir stap deur die proses van die invoer van hierdie tabel
en ook verduidelik wat sommige van die kenmerke is,
en jy sal ook sien dat ons u voorsien van die kode
die hashing of die kodering van hierdie wagwoorde te hanteer,
so jy hoef nie te veel bekommerd wees oor wat MD5 of iets dergeliks is eintlik alles oor.
>> So, SQL, gestruktureerde navraagtaal taal.
Dit is, heel eenvoudig, die taal wat ons oor te begin gebruik in pset 7
en miskien buite data van sommige databasis aan te vra.
Die data word weer gestoor tabularly in hierdie relasionele tabelle, kolomme en rye,
maar met behulp van 'n paar relatief eenvoudige sintaksis soos delete,
voeg, te werk en te kies kan ons doen presies dit.
Ons kan uit die databasis verwyder, vul,
opdatering van data, sowel as kies, dat is, haal uit die databasis.
Hoe ons te werk gaan om dit te doen?
Laat my voort te gaan in die toestel.
Laat my trek http://localhost,
wat, weer, is die plaaslike toestel self.
Dit is die standaard bynaam.
En laat my gaan na / phpMyAdmin.
Dit gebeur met 'n spesiale URL wees dat die toestel is gedefinieerde om te verstaan
wat vra my dadelik vir 'n gebruikersnaam en wagwoord.
>> Soos gewoonlik, ek gaan jharvard en bloedrooi te tik,
maar besef dit is die administrateur rekening op die rekenaar.
Dit is net 'n toeval dat daar is ook 'n jharvard geregistreer vir CS50 Finansies.
Jharvard, karmosyn, tik gee my die gebruiker koppelvlak wat ons gesien het,
'n glimp van 'n oomblik gelede, en dit is 'n bietjie oorweldigend op die eerste,
maar wees verseker, jy nooit gaan hê om die meeste van die skakels in hierdie instrument te klik.
Sal jy uiteindelik met behulp van 'n klein subset wat is super nuttig,
waarvan die eerste is databasisse hier.
As ek gaan op tot databasisse, opmerk dat ek gevra om 'n databasis te skep.
Dit is soos die skep van 'n nuwe Excel-lêer, effektief.
Ek gaan om voort te gaan en roep hierdie lesing, en ek gaan net die veld, kollasie te ignoreer.
Dit het te doen met die voorstelling van data daarin,
en ek gaan te kliek skep, en nou sien as ek laat gaan van die skep
op die linker-kant, waar dit sê nie databasisse
Gou sou Ek sien die lesing databasis.
>> As ek nou kliek op die linkerkant, die lesing databasis,
Let op my tabs 'n bietjie verander.
Ek het perfekte struktuur, SQL, uitvoer, invoer en 'n paar ander dinge.
Struktuur is pretty much leeg.
Geen tabelle in die databasis gevind, soos dit hier sê,
Kom ons skep 'n tafel, en laat ons gaan voort en die skep van 'n tabel
graag studente, en hoeveel kolomme wil ons?
Kom ons hou hierdie eenvoudige, en laat ons rekord vir elke student
'n ID-nommer, 'n naam en 'n e-pos adres.
>> Ons hou dit eenvoudig soos dit, so 3 kolomme, gaan.
Die vorm wat jy hier sien, is nou 'n bietjie slordig en oorweldigende,
maar ons het om te gaan deur ry deur ry, so regtig vinnig laat ons gee
die eerste kolom in die databasis 'n naam van ID vir die unieke identifikasienommer.
Dit sal 'n heelgetal wees. Ek kan eintlik ignoreer lengte en waardes.
'N int gaan wees 32 bits nie saak wat jy tik in daar, so kom ons laat dit leeg.
Standaard waarde, kan ek dit null, soos omskryf.
Ek gaan uitlos. Laat ons nie bekommer oor die standaard waardes.
Kom ons blaai hier aan die regterkant, eienskappe.
Dit is interessant.
Kom ons gaan voort en ietwat arbitrêr sê dat ID's moet unsigned.
Kom ons mors nie enige negatiewe getalle.
>> Kom ons gaan 0 4 miljard, gee of neem,
en dan laat ons nie raak nie enige van hierdie velde net nog daar,
maar laat my dan tik in die naam hier onder,
en dan die ander e-pos, sodat die vangs is e-pos
en naam, natuurlik nie heelgetalle, so laat ons verander dit na 'n ander veld.
Dit blyk uit varchar, veranderlike lengte char,
is soos 'n string in 'n SQL-databasis
maar 'n veranderlike lengte, en jy werklik beskikbaar het om dit te vertel vooraf die
die maksimum lengte van die string nie, so ek gaan ietwat arbitrêr
deur konvensie tipe 255 karakters.
Ek kon sê heeltemal 32. Ek kon sê 1000.
Jy soort van die behoefte om te besluit vir jouself gebaseer op jou demografie wat
die langste student se naam en gaan met daardie nommer of 'n bietjie groter,
maar wat is mooi oor 'n varchar is dit nie gaan om te mors
255 bytes op elke student se naam.
As dit is DAVID dit gaan nie 'n hele 255 bytes te gebruik,
maar dit is 'n bogrens, so ek sal gaan met 255 net deur konvensie,
maar ons kon debat wat tot 'n laer waarde wees, en vir e-pos adres
net om konsekwent te wees 255, maar weer, ons kan dieselfde debat.
Maar ek gaan 'n ander ding om te doen hier op die regterkant.
>> Wat is kragtig oor 'n databasis is dat dit 'n baie swaar werk te doen
of komplekse werk vir jou.
In die besonder, het ek regtig omgee nie wat my student se ID-nommers is.
Dit is net bedoel om 'n unieke identifikasienommer in 'n databasis
so ek het 'n 32-bis bondige voorstelling van daardie student
so dat ek een of ander manier van die uniek identifiseer
sodat daar nie miskien 2 Davids, byvoorbeeld, in 'n klas.
Om die waarheid te sê, ek gaan hierdie AI boks, motor inkrement om seker te maak,
sodat die databasis, MySQL, figure uit
wat elke nuut ingevoeg student se ID gaan wees.
Ek hoef nie eens te bekommer oor wat in my kode,
en ek gaan ook iets onder die indeks menu te kies.
Die indeks drop down hier primêre, unieke,
indeks en full text.
Jy kan dalk raai wat 'n paar van hierdie dinge is,
maar dit blyk in relasionele databasisse
jy die programmeerder of die databasis administrateur preemptively
gee wenke om die databasis as tot watter velde
in 'n tabel is 'n bietjie spesiale.
>> Byvoorbeeld, in hierdie geval ek gaan om te sê dat die ID
gaan om 'n primêre indeks, andersins bekend as 'n primêre sleutel.
Wat dit beteken per definisie is dat die ID voortaan
sal identifiseer studente in hierdie tabel.
Geen student sal dieselfde ID het omdat ek instelling van hierdie beperking of hierdie indeks.
Verder, wat dit vir my gaan doen, is dit gaan om te sê
MySQL dat ID is 'n spesiale.
Ek is veral omgee ID, so gaan voort en doen jou fancy datastruktuur se magie,
die opbou van 'n soort van die boom.
Tipies is dit iets wat die B-boom, wat ons nie kyk na weke gelede genoem,
maar dit is 'n ander so 'n datastruktuur soortgelyke in gees aan die binêre bome
en probeer dat ons kyk na, maar dit gaan om te sê
die databasis hierdie veld is so belangrik dat ek waarskynlik
wil in staat wees om dit te soek op, gaan voort en die bou van 'n paar fancy
data struktuur in die geheue soektogte te bespoedig sodat ideaal
hulle is konstante tyd of ten minste so naby as moontlik
sodat dit nie oorgaan in 'n lineêre soek, wat nie van plan om
die mees hoë verrigting van benadering.
In teenstelling hiermee, kan e-pos adres is 'n primêre sleutel.
>> In teorie, almal se e-pos adres is uniek, tensy jou 'n paar rekening deel,
maar dit is oor die algemeen nie goed nie iets soos 'n tou te gebruik
as 'n primêre sleutel, want as sy doel in die lewe is om te identifiseer
rye in jou tabel daar is geen rede om 255 bytes maksimaal te gebruik
te identifiseer iemand as jy kan wegkom met net 4 bytes
of 'n 32-bis int.
In die algemeen moet 'n primêre sleutel kort en bondig wees
en verkieslik iets soos 'n heelgetal of 'n groot int, wat gebeur met 64 stukkies.
Maar 'n e-pos adres moet uniek wees en een van die kenmerke van 'n databasis te
is uniekheid vir my af te dwing.
Deur die kies van unieke hier langs e-pos, selfs al e-pos self
is van die skerm af, ek sê vir die databasis
vertrou my nie.
Laat my nie voeg in die databasis
dieselfde e-posadres twee keer, selfs as ek 'n idioot en ek kan nie
baie goed met my ifs en anders ifs en werklike PHP-kode
en Ek het per ongeluk laat die gebruiker te registreer met 'n bestaande e-pos adres
die databasis is nog 'n ander vlak van verdediging vir korrektheid
om te verseker dat duplikaat e-pos adres nie beland in die tabel.
>> Nou, in teenstelling, vir naam jy waarskynlik wil nie te maak dat unieke
want dan kon daar nooit 2 Davids of 2 Mike Smiths, byvoorbeeld,
in jou databasis, sodat 'n mens sal ons net uitlos.
Ek gaan om voort te gaan en kliek behalwe aan die onderkant reg,
en alles lyk goed, maar let hier
dit is 'n deel dat ons nou nie te veel tyd spandeer op
omdat die sintaks is 'n bietjie ingewikkeld, en ons het nie om tabelle te skep
alles wat dikwels, maar SQL self is 'n taal,
die sintaks vir wat reg is hier wat ek uitgelig.
Wat phpMyAdmin regtig nie, dit skep 'n web-gebaseerde GUI vir jou
waarmee jy kan tyd bespaar en nie met die hand te tik
'n taamlike lang SQL navraag soos dit.
>> Met ander woorde, as jy wil handmatig hierdie tabel,
óf op daardie swart-en-wit vinnige of selfs in phpMyAdmin
deur gebruik te maak van hierdie ander blad, hierdie SQL-blad waar jy kan tik in enige SQL-navrae
jy wil, eerlik te wees, dit sou geneem het vir my 'n minuut
om werklik te dink aan die hele sintaksis, en selfs dan het ek waarskynlik sou hê
het 'n paar spelfoute, so hierdie hulpmiddel is nuttig vir dinge soos wat, en dit is ook insiggewend.
Jy kan begin om af te lei wat die sintaks is
net deur die mooi kleur kodering dat phpMyAdmin is die toevoeging van
vir ons visuele gerief.
Maar laat ons nou doen in plaas.
Laat my gaan na die Voeg in-oortjie op die top, en laat my gaan voort en voeg byvoorbeeld
'n ID van Let's sê eintlik ek gee nie om nie.
Dit gaan om motor inkrement. Ek gaan die databasis met hierdie transaksie te laat.
Maar ek sal Dawid, en my e-pos moet malan@harvard.edu.
>> Kom ons gaan voort hier en in Mike Smith as 'n ander een.
Ek gee myself 'n laaste naam so goed,
en ons sal hom smith@example.com,
en dan waar ek volgende gaan?
Wel, dit lyk soos die gaan, is die knoppie te klik, en voila.
Kennisgewing aan die top 2 rye ingevoeg.
Dit is die werklike SQL query.
Dit is die phpMyAdmin instrument uitgevoer vir my,
maar die eindresultaat, kennisgewing, as ek nou na die browse tab,
2 rye in hierdie tabel om te sien, baie herinner esteties
van die tafel ons vroeër gesien het vir ons gebruikers uit pset 7,
een van wie is David Malan, een van wie is nou Mike Smith.
Maar net om duidelik te wees, het ek nie nodig phpMyAdmin te gebruik,
en inderdaad, jy gaan binnekort skryf-kode vir pset 7
wat automatiseert die proses van die toevoeging van rye, die verwydering van rye, afhangende van rye en dies meer,
so laat my plaas gaan na die SQL-blad hier
en tik SELECT * FROM studente waar
email = "malan@harvard.edu."
>> Met ander woorde veronderstel nou jy het
n HTML-vorm, en die gebruiker intik in hul e-pos adres, onder ander velde,
en die doel is nou in PHP op die agterkant kode
om werklik te kyk op daardie gebruiker se ander besonderhede.
Wat is jou volle naam? Wat is jou ID-nommer?
Jy kan 'n SQL-navraag soos hierdie skryf, kies * van studente
waar e-pos = "malan@harvard.edu."
En as ek klik op gaan, let op dat ek moet, en ek kry, nie net een ry terug.
Mike is weggelaat uit hierdie resultaat te stel, as die versameling van rye
is oor die algemeen genoem word, omdat hy nie die dieselfde e-pos adres as my.
>> Nou, weer, hier vir pset 7 jy gebruik phpMyAdmin as 'n administratiewe hulpmiddel
en 'n pedagogiese hulpmiddel om jou manier om te leer
rondom die wêreld van SQL, maar aan die einde van die dag
jy gaan om te skryf hierdie navrae binnekant van die werklike PHP-kode,
en so gestem bly in Zamyla walkthrough in die besonder
waar jy 'n toer van die verspreiding-kode vir hierdie probleem stel
waar ons aan julle gegee het nie net die estetika vir die aanmelding bladsy
en die mooi sexy logo wat sê CS50 Finansies, maar ons het ook aan julle gegee het
'n klomp van die funksies wat sal maak dat jou lewe 'n bietjie makliker.
Ons het ook geskryf deel van die pset vir jou,
die aanmelding gedeelte van dit in die besonder, te gee jou 'n gevoel van 'n verteenwoordigende ontwerp
wat gebruik maak eintlik 'n kontroleerder, byvoorbeeld, jeug,
login.php en dies meer, en dan sal jy sien die pset ook 'n templates directory
wat al van jou siening, al die estetika.
En so gaan die algehele workflow in pset 7 te wees dat
jou gebruikers besoek 'n kontroleerder via 'n URL in 'n leser.
Dat kontroleerder bevat PHP-kode wat jy geskryf het, en binnekant van jou PHP-kode
kan 'n paar lyne van SQL Genestel tussen dubbele aanhalingstekens
en geslaag aan 'n funksie wat ons geskryf genaamd navraag
wat jou sal help jy praat met die databasis sonder die gebruik van iets soos
'n administratiewe hulpmiddel soos phpMyAdmin.
>> Jy sal in staat wees om SQL-stellings in PHP-kode te skryf
en terug te kry 'n PHP array van die resultaat te stel,
van die rye wat eintlik ooreenstem met die soektog.
En insgelyks sal jy in staat wees om inserts of verwyder om te doen
of updates of iets dergeliks, die sintaksis waarvoor is redelik soortgelyk,
en jy sal sien van 'n paar aanlyn verwysings, van die verspreiding kode
en van die pset pak self presies hoe om te gaan oor om dit te doen.
Besef uiteindelik het ons net regtig krap die oppervlak van SQL
en van MySQL, maar die krag daarvan is regtig dat dit bevry u
om te fokus op die probleme wat jy wil om op te los, die gebruik gevalle wat jy wil om te implementeer
sonder om so veel bekommerd wees nie, ten minste vroeg op,
oor waar en hoe om jou databasis te stoor en te deursoek,
en dit is letterlik waar Facebook self het sy begin
met behulp van MySQL en dan met behulp van meer MySQL bedieners en dan meer MySQL bedieners
voor lank totdat hulle moes dan werklik begin dink hard oor hoe om
stoor van data, hoe om dinge te selfs meer doeltreffend stoor,
so selfs al sal ons as vanselfsprekend aanvaar die feit dat indekse en unieke beperkings
en so meer net werk daar is 'n baie interessante gesprek
dat dit kan uiteindelik almal lei tot, so besef dat ons net krap die oppervlak
van wat uiteindelik vir jou of jou projekte raak nogal 'n bietjie van die groot data.
>> Met wat gesê het, laat ons hier eindig nie, en ons sal jou volgende week sien.
[CS50.TV]