[Powered by Google Translate] [Uge 8, Fortsat]
[David J. Malan] [Harvard University]
[Dette er CS50.] [CS50.TV]
>> Det er CS50, så dette er slutningen af ​​uge 8 her.
Vi havde naturligvis lidt af en orkan tidligere på ugen,
så lige nu er det virkelig bare dig og mig i denne auditoriet,
men i dag fortsætter vi vores samtale om PHP
og om webprogrammering mere generelt, og vi også indføre idéen
af databaser, der kaldes især én MySQL, som er meget populære i disse dage,
en stor del på grund af sin skalerbarhed samt fordi det er gratis og open source.
>> Men først et kig på, hvor vi slap sidste gang.
Husk på, at vi ledte på de mange Frosh IMs eksempler,
og dette var den hæslige form, jeg kom op med nogle 15 + år siden
med henblik på at få studerende på campus register for freshman intramurale sportsgrene
uden egentlig at skulle trek længere på tværs af værftet til Wigglesworth
at glide en fysisk stykke papir nedenunder nogle Proctor dør.
I stedet flyttede vi alt online, men at gøre det vi behov for at gøre brug
af nogle få teknologier, så man vi havde brug for HTML, Hypertext Markup Language,
som igen er dette kodesprog, som du gøre websider strukturelt.
>> Ved hjælp af en smule af CSS i disse dage, cascading style sheets,
hvorved vi bruger stylizations på websiden ved hjælp af en lidt anden syntaks,
mens HTML var alt om struktur.
Vi er også nødt til at indføre en web programmeringssprog.
I dette tilfælde vil vi bruge PHP, og PHP vil give os
til dynamisk output indhold samt gøre programmatiske ting som
sende e-mails, som det var tilfældet på den note, vi forlod i sidste uge.
>> Husk på, at koden for dette var i 2 dele.
Én, vi havde froshims3.php,
og dette var stort set markup med en HTML-formular inde i det,
en lille smule af CSS heroppe i attributter
således at formen i sig selv ville være centreret på siden, men ud over det
vi havde nogle repræsentative danner indgange, et tekstfelt, et afkrydsningsfelt,
nogle radio knapper, en udsøgt menu, og en submit knap.
Og via denne formular, forelagde vi for en fil, der tilsyneladende var kaldt register3.php,
der selv kiggede lidt noget som dette.
Nu er de fleste af koden i register3.php, recall, handlede om e-mail.
Det gjorde en lille smule af validering af den formular, der blev forelagt for at sikre,
at felterne faktisk er afholdt, som blev forventet.
Så vi kaldte nogle PHP funktioner ved hjælp af lidt ny syntaks,
selv om det er lånt fra C.
>> Denne pil operatør giver os mulighed for at gøre brug af noget, der hedder objektorienteret programmering.
Vi vil ikke gå ind i det i detaljer her, men kender for nu
det er en måde at have funktioner knyttet til objekter,
der er en særlig form for struktur, som vi så i C.
Men for nu, tager bare på tro, at dette er den korrekte syntaks for at bruge
når der anvendes et bibliotek som denne PHPMailer bibliotek.
Og så i slutningen af ​​denne fil, vi havde dynamisk genereret en e-mail
der blev sendt til min jharvard@cs50.net konto
fra min jharvard@cs50.net konto,
og vi informeret brugeren derfor, at de var blevet registreret for denne sport.
Det er temmelig meget, hvad det Frosh IM stedet gjorde alle de år siden
når jeg gennemført det, indrømmet, på et andet sprog,
men det viser dig måske den magt, som du har
nu, at du kan udtrykke dig ikke kun programmatisk
på et lavt niveau i et sprog, som C, men på et meget højere niveau
med disse meget virkelige verden applikationer som e-mail til rent faktisk at løse
nogle virkelige verdens problemer.
>> Nu, selvfølgelig, selvom jeg bruger dette script til at generere nogle
emails dynamisk fra jharvard@cs50.net, der er faktisk en konto
at jeg har adgang til, skal du være ganske omhyggelig med at sende
mail kun fra konti, der faktisk din egen,
lest tingene bliver du i en smule varmt vand i livet.
Med det sagt, lad os nu overgang til at løse et andet problem helt,
der af støttekonstruktioner stater.
Nu, hvad det egentlig?
HTTP, denne Hypertext Transfer Protocol,
er faktisk en statsløs protokol, og hvad dette betyder, at
når du trækker op noget som Google.com og derefter tryk enter
normalt din browser har en slags spinning ikonet, der så
resulterer i nogle webside bliver downloadet,
og så den lille ikon stopper spinning, og som faktisk tyder
at HTTP har gennemført en eller anden form for forbindelse til serveren og det er det.
HTTP er statsløs i den forstand, at den ikke opretholder
en vedvarende forbindelse til serveren på samme måde, Skype gør
eller Gchat gør, fordi med HTTP
antagelsen er, at når du har hentet en webside, der er det.
>> Nu, i virkeligheden i disse dage på websteder som Facebook og Google Maps
og Twitter og lignende der er en masse mere dynamik, hvorved
selv efter dette ikon stopper spinding du kan faktisk få flere opdateringer
fra serveren, flere tweets, flere statusopdateringer på Facebook og lignende.
Men selv det er ved hjælp af en teknik, som vi vil tale om i en uge eller to
kendt som Ajax bruge et sprog kaldet JavaScript,
men i slutningen af ​​dagen, er HTTP stadig statsløs.
Og dog, hvis du vil en eller anden måde at huske ting om en bruger
selv efter at de har koblet fra din server
PHP gør give dig et middel til at gøre dette
fordi, som vi så sidste gang, PHP har en række superglobals,
og en superglobal er, igen, en særlig global variabel
der er udleveret til dig af webserveren og PHP selv.
>> Du behøver ikke at gøre noget for at sætte værdier i det,
og blandt de superglobals vi har set indtil nu, er få og sende,
som er hvor formularfelter sættes automatisk for dig,
samt et par andre, som vi ikke har set endnu.
Inde på $ _SERVER er nogle særlige variabler i relation til selve serveren.
Hvad er den IP-adresse, hvilken protokol, HTTP eller HTTPS brugte du,
hvad anmodning metode brugte du og lignende, så der er nogle interessante,
saftige detaljer om serveren, og i virkeligheden, brugeren i der.
Der er $ _cookie, som er der, hvor disse ting kaldet cookies gemmes.
Vi vil ikke bruge tid på cookies selv i dag,
men kender til nu, at en cookie er bare et lille stykke information
at en web-server kan plante på en web browser
og til gengæld sin RAM eller dens computers harddisk
at gemme oplysninger om en bruger, for eksempel, deres brugernavn
således at de ikke behøver at skrive det hver gang de logger på eller nogle
entydigt nummer eller identifikator for den pågældende bruger
så du ikke behøver at forpeste dem med de samme slags spørgsmål om
præferencer i fremtiden, men de fleste af interesse
lige nu er $ _SESSION.
>> Denne superglobal, der ligesom de andre, er afleveret til dig automatisk via PHP
når du skriver PHP-baserede websites
kan gemme noget, du vil, strygere, heltal,
flydende punkter, værdier, arrays, objekter,
virkelig noget, du ønsker, og det giver dig mulighed for at gemme det på en sådan måde,
at selv hvis brugeren besøger dig nu og da
kommer tilbage et minut fra nu eller 5 minutter fra nu, fordi
de tager deres tid, før du klikker nogle andre link
PHP vil sikre, at uanset hvad du lægger i denne session superglobal
et minut eller 5 minutter siden vil stadig være der, når brugeren kommer tilbage.
Og nedenunder hætten denne superglobal er gennemført ved hjælp af
disse ting kaldet cookies, men for nu er det bare en abstraktion
hvorved det er slags den programmæssige svarer til en indkøbsvogn.
Uanset hvad du, programmøren, kan du sætte det
superglobal associative array vil være der et bestemt antal minutter senere
indtil du sletter den, eller indtil brugeren afslutter sin browser helt.
>> Lad os tage et kig på et eksempel på, hvordan denne ting er faktisk bruges.
I counter.php blandt dagens stykker kode
har vi følgende linje.
I starten af ​​denne fil, vi har en flok blå kommentarer, som er uinteressante for nu.
Men i linje 13 har vi en ny linje,
session_start, og det faktisk gør præcis hvad den siger.
Det starter sessioner.
Det giver dig mulighed for at bruge den store superglobal $ _SESSION, og det er så simpelt er det.
Nu, hvis vi går over til at se på linie 16, lad os prøve at regne ud, hvad denne webside kommer til at gøre.
Hvis (isset ($ _SESSION ["counter"]) og derefter gå videre
og butik i tællervariablen, små bogstaver tæller,
$ _SESSION ["Counter"].
Dette synes at være at erklære en lokal variabel kaldet counter
inden i hvilken det er at sætte en kopi af det, der er inde i superglobal
kaldet session på location "tæller".
Else, tilsyneladende, denne lille lokal variabel tæller, er initialiseret til 0.
>> Men derefter et par linjer senere i 26 meddelelse om, at mødet eksemplar af tælleren,
sin nøgle, har en ny værdi er tildelt som er den aktuelle værdi plus 1.
Kort sagt, synes denne fil, der skal ajourføre
en tæller, der er gemt inde i sessionen superglobal
ved at forøge det med 1, men den først har en kopi af den tidligere værdi
ved at opbevare den i en lokal variabel kaldet $ counter,
og derefter ned her lad os se hvad der er tilbage.
Det viser sig, at det er stort set bare HTML.
Nederst på denne side ser vi på linje 37, at jeg har besøgt dette websted
tæller antal gange, så der er et par interessante funktioner her.
One, dette er tydeligvis en variabel, men det er ikke tilstrækkeligt bare at sætte
$ Tæller i kroppen af ​​din HTML, fordi selvfølgelig
hvis det er bare der blandt din HTML PHP vil antage det er bare HTML.
Du bogstaveligt talt ønsker $ tæller skal udskrives på skærmen.
>> Men i stedet ved at slippe ind i PHP mode
med dette stykke syntaks vi kan dynamisk indsætte en værdi her
meget ens i ånden til, hvad vi gjorde sidste gang med
indsætte værdier i strenge.
I virkeligheden er dette blot en forkortelse notation for at sige noget som dette bogstaveligt,
print ($ counter) eller endda noget lignende printf (% s, counter),
eller endda, som du måske har set på nettet eller i lærebøger,
der er en funktion i PHP kaldet echo
der gør det samme, og alle af dem er bare længere endeløse måder
at sige <? =.
I dette ene tilfælde behøver du ikke at sætte
ordet PHP efter spørgsmålstegnet.
Dette er en forkortelse notation for, igen, hvad vi lige har set et øjeblik siden
som ekko vis værdi.
>> Lad os se hvad det endelige resultat af dette faktisk er.
Lad mig gå over i vores counter.php fil,
og vi vil se, at David bare lavet en fejl ved at lege med den kode der.
Lad os gå fix, hvad han skruet op,
og fejlen synes at være der, væk, på ledningen 37.
Ifølge toppen af ​​denne side jeg har besøgt dette websted 0 gange.
Nå, lad os gå videre nu, og på toppen af ​​browseren klikke på
reload ikon, og jeg klikker genindlæse,
og nu har jeg besøgte stedet 1 gang, 2, 3, 4, 5, 6, 7, 8.
Og ja, hvis vi ser på kilden til denne side den faktiske kildekoden er under forandring,
og bemærk den fuldstændige mangel på enhver PHP, og det er fordi
PHP koden er evalueret eller fortolkes server side,
og så betyder, at produktionen af ​​PHP scriptet er, hvad der i sidste ende sendes til browseren,
som i dette tilfælde er nogle rå HTML og nogle rå tekst.
Hvad sker der her?
>> Nå, med forholdsvis få linjer kode jeg kunne gemme
vedholdende i løbet af nogle sekunder, eller hvis vi ventet længe nok,
minutter, selv timer, nogle værdier på en måde, der gør HTTP
synes stateful som om vi har bevaret
denne forbindelse til serveren, og det er bare at huske, hvad jeg fortalte det sidste gang,
men i virkeligheden er der en hel masse af kompleksitet foregår under kølerhjelmen
involverer cookies, der er gør det muligt PHP at give mig denne illusion
af denne shopping cart-lignende funktion.
For nu, en triviel eksempel, hvor vi bare opbevaring et heltal
men denne funktion vil vende tilbage til at være af stor værdi
når vi begynder at tale om mere komplekse projekter,
blandt dem problem indstille 7.
Dette er din sidste problem ligger i CS50.
Jeg ved, det er så trist, men hvad du vil finde, er, at vi kommer til at indgå
denne del af semestret ved faktisk skifter
af den sammenhæng, C, bestemt til forbindelse med PHP
men mens du bruger nogle af de samme fundamentale
vi har talt om i nogen tid.
>> Målet med Pset 7 er at gennemføre CS50 Finans,
som er din egen version af Yahoo Finance eller Google Finance
eller endda Etrade.com hvorved du har evnen til at
se op aktiekurserne for givne symboler, men endnu mere end det
du har evnen til at "købe" og "sælge" aktier
som handles på forskellige børser, fordi som denne hjemme side
her antyder, som er virkelig, i hvilket omfang vi er begyndt
problemet sæt til dig, har du en login-formular, der beder om et brugernavn og en adgangskode.
Det har en submit knap, men derefter, da vi til sidst vil se,
der er ikke noget egentlig foregår under kølerhjelmen endnu, fordi det
tilbage for dig at implementere muligheden for at registrere nye brugere,
evnen til at købe aktier, til at sælge lagre,
til rent faktisk at se op aktuelle aktiekurser.
>> Og ja, vil dette være så virkelige verden som muligt, fordi vi gjorde
indeholde en smule kode, der vil give dig med en enkelt funktion
at søge Yahoo Finance, som vidunderligt stiller gratis data
for at kigge op aktiekurserne baseret på aktiesymbol eller ticker symbol,
og du kommer tilbage den aktuelle aktiekurs på dagen.
De data, du faktisk ser i denne særlige Pset vil være
omtrent lige så virkelige verden som det kan få, så du rent faktisk er grænseflade
med virkelige verden lagre, virkelige verden priser,
og vi skal se, hvor mange penge du kan tjene måske
over de næste mange dage ved at spille med din egen problem sæt.
>> Men lad os først indstille scenen for hvordan man designer noget, der er helt sikkert mere kompliceret
end counter.php, er det mere kompliceret end nogen af ​​de Frosh IM eksempler hidtil,
og lad os prøve at indføre nogle paradigmer her at give os
både for Pset 7 og måske til dit afsluttende projekt, hvis du gør noget webbaseret
at holde din kode velorganiseret, til at holde dig rask,
og til at tage et skridt i retning samarbejde, uanset om CS50 endelige projekt
eller ud over hvis du fortsætter med at programmere noget i fremtiden.
Der er denne generelle design paradigme
i datalogi og i softwareudvikling mere generelt
kendt som MVC, model view controller,
og dette er en dum forkortelse, der beskriver en meget god idé,
som er adskillelsen af ​​forskellige aspekter af et program,
specifikt at holde separate logikken eller forretningslogikken af ​​en hjemmeside
så noget, der involverer ting som
kalde funktioner og forespørge databaser og lignende
sker ikke blandt din HTML
men snarere i separate filer, og ja, der er denne ene fil
typisk, at du har ringet til controlleren
det er virkelig hjernen bag operationen, og vi vil se et eksempel
af dette på bare et øjeblik.
>> Der er en model, der er programmering kode
, der taler til dine databaser, der taler til Yahoo Finance og lignende,
og så er der V i MVC, synspunkter,
alle de ting, der er relateret til æstetik, de filer, der faktisk indeholder
din HTML, måske din CSS og lignende.
Ideen her, da denne situation tyder på, er, at controlleren
er den fil, som vi snart vil se og som du særligt vil se i Pset 7,
at verden taler med via deres web-browsere.
Det er den fil, der bliver besøgt på det offentlige Internet,
men controlleren taler til potentielt en model,
der er en eller flere andre filer, der indeholder kode relateret til data,
kode relateret til databaser og lignende, og så det taler til
kontrolleren en eller flere andre filer, kendt som visninger,
som er de æstetik en webside, skabeloner slags,
der kan tage nogle data som input, men ved slutningen af ​​dagen
den eneste logik inde i en visning bør være gengivelse af disse oplysninger,
iteration over en løkke og faktisk spytte nogle
HTML-baseret overførsel deraf eller endog noget som en PDF-fil.
>> Hvad er rart om MVC er, at du kan have forskellige synspunkter
baseret på den type enhed, der er baseret på den type filformat, som du rent faktisk
ønsker at vise til brugeren.
Lad os tage et kig på et par gradvist mere komplekse og godt designet eksempler
ved at starte først med version 0 her.
Lad mig gå videre og åbne op i vores MVC bibliotek i dag
en fil kaldet index.php i mappen 0.
Bemærk dette er en super enkel og meget underwhelming website
Det er slags version 0 af en hjemmeside til CS50,
og læg mærke til, hvordan vi har et link til Forelæsninger, har vi et link til Syllabus,
og hvis jeg følger linket til Foredrag varsel at webadressen
up top vil skifte til lectures.php.
Hvis jeg så følg linket til Uge 1 bemærk, at URL skifter til week1.php.
Der synes at være en forholdsvis simpel hierarkisk struktur her.
>> Lad os tage et hurtigt kig under motorhjelmen på, hvordan denne er lagt ud,
og ja, hvis jeg ser på index.php det er ret simpelt.
Faktisk er der selvom jeg kaldte dette en PHP fil er ingen egentlige programmering kode.
Der er en kommentar, som jeg skrev her i PHP bare så brugeren ikke ender med at se det.
Selvfølgelig, som før, noget, der er i mellem PHP tags
bliver fortolket, selvom det er en kommentar, og at fortolke en kommentar
betyder bare at smide det væk i slutningen af ​​dagen og ikke faktisk
sende den til browseren, så alt i her er kun æstetik.
Hvis jeg åbner ligeledes lectures.php også dette er blot en hård kodet fil.
Det sker at blive kaldt noget. Php,
men det er virkelig bare. html, og week1.php, week2.php
ligeledes er bare markup, så der er en masse mangler i dette design.
One, det er en enorm mængde af copy / paste.
Selvom det eneste, der ændrer sig blandt disse filer er uordnet liste,
Li-tags, jeg alligevel har doc type, HTML, hoved,
titel, tæt organ, tæt HTML og mere
i hver enkelt fil, betyder der, at hvis jeg nogensinde vil omstrukturere
denne webside eller restylize det jeg nødt til at gå ind og ændre
alle disse filer manuelt eller med nogle massive finde og erstatte.
>> Lad os tage et skridt mod en mere intelligent, længere tænke design i version 1 her
hvorved som pr læse mig, at vi har inkluderet, så du kan spille sammen med
disse mere afslappet derhjemme meddelelse om, at vi har her
et resumé af de filer i version 1 af denne hjemmeside,
og det lader til, at jeg har påtaget mig at faktor ud
nogle fælles kodeks, header.php og footer.php.
Nå, lad os tage et kig på, hvad der er inde i den første af dem.
Header.php ser bekendt ud,
men bemærk hvor kommer det bliver afbrudt?
Lige efter linje 19, så det er alt, hvad der var fælles
fra filer index.php, lectures.php,
week1 og week2.php fra det foregående eksempel.
Hvad jeg gjorde var kopi og klippe alt, hvad der var fælles for alle disse filer,
sætte det i en separat header fil, og på samme måde i footer.php
jeg anvende det samme princip, hvorefter de eneste interessante linjer
i footer.php er disse to, tæt krop og tæt HTML.
>> Men hvad det betyder nu, er, at i den nye version
af index.php varsel hvor meget enklere det kan få.
Indrømmet, en lidt mere kryptisk leder, en lidt mindre intuitiv
at følge top til bund, men min Gud, er alt dette redundans nu væk.
Vi kræver bruger en PHP funktion bogstaveligt kaldet kræve op top,
som er meget minder, husker af C'er # include mekanisme.
Vi kræver header.php øverst.
Vi kræver footer.php i bunden, og det eneste, der er anderledes
eller særlige ved denne fil er det indhold, der er beregnet til at være unik for det.
Hvis jeg så gå ind i, siger, lectures.php, det samme princip gælder.
Igen, nogle bemærkninger op øverst, men så jeg kræver header, kræver footer,
og i mellem det er kun det indhold, der er faktisk ændret.
Og hvis vi så ind i uge 1 og uge 2 ville vi se
at det samme princip er blevet anvendt i denne region.
Tja, vi er ikke helt færdig der.
>> Lad os tage et kig på version 2, der har en lignende struktur,
men bemærk nu jeg har introduceret noget andet.
I linje 10 jeg har introduceret helpers.php,
som tilsyneladende indeholder hjælperfunktioner.
En hjælpefunktion er generelt en relativt kort funktion
at du skriver at hjælpe dig ud på forskellige steder,
og lad os se hvad der er inde i helpers.php.
I dette tilfælde ser det ud som det har 2 funktioner.
Genkald fra den anden dag med vores terning eksempel
du kan definere dine egne funktioner i PHP, og hvad jeg har gjort nu, er jeg har
definerede funktioner kaldet gøre sidefod og gøre header,
hvoraf den første tager en parameter kaldet data,
hvis standardværdi er en tom array, som foreslået her,
og vi kan faktisk skrive dette endnu mere rammende i den nyeste version af PHP
ved at sige åbent firkantet beslag, lukket firkantet beslag.
Det betyder et tomt array af størrelse 0, men ikke desto mindre et array.
>> Denne ekstrakt funktion er lidt speciel, da
hvad det gør, er det tager som sit argument et associativt array
der har 0 eller flere centrale værdipar, og hvis du har en nøgle af Foo
og en værdi på bar ekstrakt funktion
skaber en situation, som nu, som i ledningen 11,
du har en lokal variabel kaldet $ foo hvis værdi er bar.
Og hvis du havde flere nøgler og værdier i data array,
Tilsvarende vil de blive ekstraheret over i den lokale anvendelsesområde
eller navn plads, så footer.php og
den samme idé hernede, så header.php
have adgang til disse variabler.
Faktisk, lad mig åbne op igen header.php
og gøre opmærksom på nu, hvad det ser ud i denne version.
>> Snarere end hård kodning CS50 som titlen for hver enkelt side
mærke til den dynamik, der er muligt nu.
I linie 5 Jeg ekko en titel variabel,
men først jeg passerer denne titel variabel til en funktion kaldet htmlspecialchars.
En dum navn for en funktion, lang som den er, men det virkelig gør, hvad den siger.
Det sikrer, at eventuelle specialtegn
i strengen, der er blevet vedtaget i korrekt undsluppet HTML.
Dette er faktisk en måde at undgå noget, der hedder et cross site scripting angreb
hvorved en person kan ondskabsfuldt eller ved et uheld
injicere deres egen HTML ind på din hjemmeside
ved at indsætte i en form, for eksempel
noget, som du ikke var helt ventet, især JavaScript-kode,
som vi vil tale om i en uge eller to tid.
>> Dette nu header.php, det er en visning
i den forstand, at det giver dig mulighed for at se æstetisk indholdet af nogle datasæt.
Men mere specifikt, det er en skabelon.
Det er en slags blueprint nu, hvad vi ønsker, at overskriften på hver side til at ligne,
men der er en vis dynamik i at vi ønsker titlen, der skal dynamisk indsat
baseret på Titelvariablen
der blev udvundet da vi ringede igen,
Render header funktionen.
Nu, hvis vi kiggede på Render footer, er der faktisk ikke meget brug af det lige nu
fordi der i footer.php der er ingen dynamik overhovedet.
Der kunne være, men i det øjeblik, det er en hård kodet liste over 2 tags,
men den samme idé gælder, så der rent faktisk tyder på, hvorfor
gjorde vi spilde tid med en render overskrift og en render footer funktion?
Lad mig gå i stedet nu ind i version 3,
og i version 3 i hjælpere jeg besluttet at forenkle det endnu mere.
>> Lad mig få en Render funktion.
Lad mig få det tage endnu et argument, denne gang kaldet skabelon,
som menes at være navnet på en skabelon,
og så vil jeg sammenkæde formasteligt. php til at variablens værdi,
og derefter, hvis det findes foo.php, bar.php eller header.php og footer.php,
så jeg har tænkt mig at gå videre og udtrække de variable data
og derefter kræve, at sti.
Med andre ord, brug for det nu, hvis jeg åbner index.php
bemærke, at jeg ikke kalder Render header længere.
Jeg bare kalde gøre, men jeg passere i en noteret værdi på header
at gøre det klart, hvilken skabelon jeg faktisk ønsker at indlæse.
>> Så herovre mærke til, hvad jeg laver.
Jeg passerer i dynamisk en nøgle titel,
en værdi på CS50, og også dette, som vi så før,
kunne gøres mere kortfattet i den nyeste version af PHP
hvor jeg kan erstatte array-funktionen med kantede parenteser,
som jeg foreslår, er endnu mere læsbar og sikkert
lidt nemmere at skrive.
Og selvfølgelig, med render footer opkald i bunden
Vi gider ikke at passere i et andet argument på alle, ingen associative array,
fordi der er intet dynamisk indersiden af ​​denne footer.
Det er blot nogle nære tags til HTML.
Godt, vi tager skridt i retning af virkelig rengøring ting op her,
men lad mig åbne op 2 endelig eksempler.
Denne ene, nummer 4, meddelelse om, at jeg har lavet en bevidst beslutning nu
at forbedre det foregående eksempel ved endelig hjælp af nogle hierarki til mine filer.
>> Bemærk, at i dette resumé, i dette læse mig, jeg har introduceret
en omfatter bibliotek og en skabeloner bibliotek
hvis indhold vil være de ting, jeg ønsker at inkludere
og de skabeloner, jeg ønsker at gøre, hhv.
Dette er virkelig mig bliver anal og forsøger at holde orden,
holde relaterede filer sammen, men det endelige resultat
er, at vi nu har en lidt pænere opsætning, men vi er nødt til at huske nu
i f.eks index.php
når vi kræver filen helpers.php
vi er nødt til nu kræver det via includes / helpers.php
snarere end blot at sige helpers.php fordi nu er det faktisk i en undermappe.
Nu, som en sidebemærkning, vil du se i disse eksempler og nogle andre
funktioner som kræver, kræver én gang.
Der er faktisk en funktion selv kaldte omfatter, og de har alle lidt forskellige adfærd.
Her vil jeg sige kræve en gang at gøre super klart, at jeg kun ønsker dem
hjælpere indgår i mit projekt en gang.
Men hvis jeg er forsigtig, og hvis jeg faktisk tænker gennem min logik korrekt
bør det være tilstrækkeligt for bare at sige kræve op top
så længe jeg selv ikke ved et uheld kræve, at samme fil andetsteds.
Faktisk er det en lidt mere effektiv måde at gøre tingene derefter bruge
kræve en gang, så jeg vil trimme det ned til bare kræve.
>> Lad os tage et skridt videre.
Dette sidste eksempel nu, version 5, har en endnu renere mappehierarki.
Læg mærke til, hvad jeg har gjort her pr læse mig i denne endelige udgave
er nu har jeg min HTML mappen, som jeg har haft al den tid,
men inde i der nu kun er index.php, lectures.php,
week1.php og week2.php.
Den omfatter biblioteket nu bor sammen af ​​HTML bibliotek,
således på samme niveau som en søskende, så at sige.
Så gør mappen Skabeloner.
Det centrale takeaway her er, jeg har introduceret en lille smule mere struktur,
men den vigtigste funktion nu, er, at kun de filer
der skal være tilgængeligt på internettet, offentligt adresserbare
af en URL på det offentlige internet er i min HTML bibliotek.
>> Samtidig har andre filer, helpers.php, footer.php,
header.php, som er velsagtens måske mere følsomme,
måske hjælpere faktisk har nogle brugernavne og adgangskoder eller nogle intellektuelle
ejendom af mine, fungerer jeg virkelig ikke ønsker, at verden at se, selvom et uheld.
Det er god praksis at holde sig ude af det offentlige HTML directory
alle filer, som ikke behøver selv at være offentlig.
Alt du skal gøre i dette tilfælde, når man ser på, for eksempel,
HTML mappes index.php fil,
bemærker vi bare nødt til at være lidt mere forsigtig, når der kræves
eller kræve en gang denne fil.
Jeg skal først gøre .. at gå til det overordnede bibliotek,
så skal du / includes / helpers.php
at dykke ned i for at få den fil, jeg holder af.
>> Eventuelle spørgsmål derefter på MVC
eller denne relativt simple inkarnation deraf?
Og lad mig gøre det klart, at vi fokuserede ganske lidt om
V her, synspunkter og factoring ud af disse skabeloner.
Vi har ikke rigtig skelnes M fra C endnu.
I virkeligheden er der virkelig ingen M her, og selv vores C,
controller, er ikke virkelig gør så meget, men du får meget mere
bekendt med begge disse 2 breve fra MVC,
eller rettere, vil du få meget mere fortrolig med C
i MVC for problem set 7, så der er mere af det i horisonten.
Spørgsmål?
Der er faktisk ingen her.
>> Okay, lad os nu gå videre til den anden og sidste emne for i dag.
Det er indførelsen af ​​en database.
Indtil dette punkt, vi har haft et par metoder til at lagre data.
Vi har brugt variabler.
Tilbage i vores C-fil, I / O diskussion, vi begyndte at bruge tekstfiler
og bruge filer som fprintf, og så har vi endda begyndt
taler om csv-filer en lille smule, kommaseparerede værdier,
så alle disse tilladt os at have data lagret
enten ikke-vedvarende eller vedvarende.
Men selv CSVs er ikke rigtig befordrende for at søge
og indsætning og sletning.
Det er egentlig bare en dum tekstfil adskilt af kommaer
række for række efter række for række, så hvis du ønsker at
søge at file det bedste du kan gøre virkelig er lineær søgning.
Du er nødt til at starte i toppen af ​​filen, kan du læse det hele i,
og kigge efter nogle værdi af interesse.
Hvis du ønsker at indsætte i det du skal gøre det samme,
iteration over det og indsætte i et bestemt sted,
og i virkeligheden, er du nødt til at gøre alle de søge logik selv.
>> Du kan ikke gøre klog mønstertilpasning på en CSV-fil, medmindre du selv skriver koden.
Du kan ikke gøre filtrering af en CSV-fil
medmindre du selv skriver koden.
Ville det ikke være rart hvis en anden sætter i alt af indsatsen
til rent faktisk at gøre søgningen let og indsættelse let
og sletning og opdatering og så videre?
Det er præcis, hvad en database er.
SQL, Structured Query Language, er endnu et sprog
at vi indfører her i dag, men dette er også temmelig tilgængelig,
og hvad vi virkelig vil gøre, er bare plukke ud af det nogle af de mest fremtrædende
egenskaber, så der for Pset 7, hvis og du gør noget, der bygger web,
dit afsluttende projekt, du har evnen til at udtrykke dig
i form af data-forespørgsler.
Du har evnen til at gemme en lille eller en masse data
på en meget mere struktureret måde, der vil ved udgangen af ​​dagen
gøre dit liv lettere, fordi med SQL du kan udtrykke dig selv
langt mere præcist, meget mere metodisk for at
komme tilbage nogle delmængde af data fra en større samling af data.
>> Du kan tænke på en database, i dette tilfælde, en SQL-database, kan virkelig godt lide Excel
eller Numbers, hvor det er et regneark,
eller måske flere regneark, samt et regneark, naturligvis,
har rækker og kolonner, og det er fordi
SQL-databaser er relationel, relationelle i den forstand,
at de gemmer data i form af disse tabeller,
rækker og kolonner.
De er højere ydende end noget som et regneark,
og et regneark er beregnet til at blive brugt af et menneske.
En database er beregnet til at blive brugt af en programmør
skrive kode imod det, så inkarnationen af ​​en database
vil være enten kommandolinjen.
>> En af de mest populære relationelle databaser derude er, igen, MySQL,
som er vidunderligt fri, meget højt ydende, og det er det
Facebook bruges meget tidligt og til en vis grad stadig i dag
til at gemme en masse af sine data, og vi vil se om et øjeblik
at anvende relativt simple kommandoer
vi kan vælge data, indsætte data, opdatere data,
slette data og lignende, men heldigvis er der en mere brugervenlig grænseflade
end bare at skrive på en sort og hvid prompt her.
Vi vil bruge til Pset 7 og ud over et gratis værktøj kaldet phpMyAdmin.
Navnet er tilfældig.
Værktøjet sker for at være implementeret i PHP,
men det er fundamentalt irrelevant.
Hvad er nyttigt om phpMyAdmin er, at det er en web-baseret værktøj.
Vi har forudinstalleret det i apparatet for dig,
og med det kan du oprette tabeller i en database,
du kan indsætte data, slette data, og generelt se
dine data i en temmelig brugervenligt miljø.
Dine brugere vil ikke bruge phpMyAdmin.
>> Dette er egentlig bare en administrativ eller udviklerens værktøj
med til at se og stikke omkring dine data og finde ud af hvordan man skal strukturere det,
ligesom du selv kan bruge Excel eller Numbers,
men det vil være en fantastisk måde at visualisere, hvad der foregår under kølerhjelmen
så du kan fokusere på det interessante problemløsning og ikke så meget
de uforståelige kommandoer.
Lad os tage et kig på et eksempel på data, der kan lagres tabularly
i en relationel database.
Her er et sådant eksempel.
Nu desværre phpMyAdmin begået en fejl på siden af ​​at smide alt for mange ord
og grafik på dig, men hvis du slibe lige på
ID kolonne, brugernavnet kolonnen, og den hash kolonne,
Dette er faktisk et regneark, men det sker for at være et uddrag
af en tabel inde i apparatet
ved hjælp af en fil, som vi giver dig i problemet sæt 7.
>> I særdeleshed giver vi dig en fil, der repræsenterer
en brugers bord, så et regneark med brugere med 3 kolonner,
hvoraf den ene er et unikt ID begynder med 1, og de øges derefter.
Den anden kolonne er et brugernavn, og de af jer, der gjorde Hacker,
Hacker udgave for Pset 2, kan genkende nogle af disse brugernavne mindst.
På højre side er passwords, men de er ikke bogstavelige passwords.
De er hashes deraf, så det viser sig
at gemme adgangskoder i en database er en rigtig dårlig idé.
I har alle sikkert læst på et tidspunkt af nogle hjemmeside
eller nogle virksomhedens database bliver kompromitteret, og så er du nødt til
ændre din adgangskode, skal du få restitutioner på ting
fordi nogle dårlige fyr faktisk brød ind på din konto som følge heraf.
>> Gemme adgangskoder i klar tekst, ukrypteret i en database
er helt tåbelige, og alligevel er det meget morsomt
derefter at læse om nogle meget kendte virksomheder
undertiden i pressen hvis databaser er kompromitteret,
og den del er ikke sjovt, men det faktum, at databaser indeholder ukrypteret
passwords er latterligt, fordi bogstaveligt talt med én linje kode
du kan beskytte mod denne særlige trussel, og det er hvad vi har gjort her.
Selv for vores falske lille CS50 Finans udgave
vi kryptere adgangskoder bare for god foranstaltning, og det faktum, at
alle disse passwords starter med $ 1 $ er bare en konvention.
Det betyder bare, at de er krypteret eller virkelig hashet,
der er som en en-vejs krypteringsfunktion
hvorved du kan ikke vende dens virkninger med noget, der hedder MD5.
>> At 50 er efter det betyder, at et salt værdi
50 blev anvendt til hashing alle disse kodeord undtagen en.
Mine, selvfølgelig, som du kan se der, HA,
var med et andet salt, så de af jer, der fik lidt udløst op
måske i Hacker 2, kunne der have været resultatet af vores have brugt
en anden hash end de andre, fordi mit password er faktisk det samme
som en anden bruger deroppe.
Faktisk alle disse uger, hvis du har ventet at finde ud af
hvad disse passwords var her var de adgangskoder, du blev udfordret
at knække i Hacker udgave af problemet sæt 2, så ikke alt for tricky.
Faktisk var Malan er det samme som jharvard,
men hvis vi går tilbage de så anderledes.
>> Fokus på jharvard i purpur, fordi de blev saltet forskelligt.
Algoritmen blev rystet på en sådan måde, at
hashværdi, den krypterede værdi ser lidt anderledes
fordi indgangene var lidt anderledes, men adgangskoden under hætten
var stadig i sidste ende blodrød.
Nu, hvem bekymrer sig om det?
Nå, vi giver dig prøven brugere, prøvens brugernavne
og hashes af deres passwords, så du faktisk har nogle
kunder for CS50 Finans når du først får fra jorden med din kode.
Du bliver nødt til at gennemføre flere tabeller inde i MySQL, inde i databasen.
Du bliver nødt til at skabe flere regneark, effektivt, men vi besluttede at give dig denne ene
at få dig i gang, og du vil se, at problemet indstillede specifikation
fører dig gennem processen med at importere denne tabel
og også forklare hvad nogle af de kendetegn,
og du vil også se, at vi giver dig koden
at håndtere hashing eller kryptering af disse adgangskoder
så du behøver ikke at bekymre dig for meget om, hvad MD5 eller lignende er faktisk handler om.
>> Så, SQL, Structured Query Language.
Det er ganske enkelt det sprog, vi er ved at begynde at bruge i Pset 7
og måske ud over at anmode om data fra nogle database.
Dataene er, igen, lagres tabularly i disse relationelle tabeller, kolonner og rækker,
men ved hjælp af nogle relativt simple syntaks som slette,
indsætte, opdatere og vælge kan vi gøre netop det.
Vi kan slette fra databasen, indsætte,
opdatere data, såvel som udvalgte, som er, henter data fra databasen.
Hvordan får vi gå om at gøre dette?
Lad mig gå videre ind i apparatet.
Lad mig trække op http://localhost,
, som igen er den lokale selve apparatet.
Det er sin standard kaldenavn.
Og lad mig gå til / phpmyadmin.
Dette sker for at være en speciel URL, at apparatet er forudkonfigureret til at forstå
der straks beder mig om et brugernavn og en adgangskode.
>> Som sædvanlig vil jeg skrive jharvard og purpur,
men indse at det er administrator på computeren.
Det er bare en tilfældighed, at der er også en jharvard registreret for CS50 Finance.
Jharvard, crimson, enter giver mig brugergrænsefladen, som vi oplevede
et glimt af et øjeblik siden, og det er lidt overvældende i starten,
men bare rolig, du aldrig nødt til at klikke på de fleste af de links i dette værktøj.
Du vil ende med at bruge en lille delmængde, der er super hjælpsom,
hvoraf den første er databaser op her.
Hvis jeg går op til databaser, bemærke, at jeg er bedt om at oprette en database.
Det er som at skabe en ny Excel-fil, effektivt.
Jeg har tænkt mig at gå videre og kalde denne forelæsning, og jeg vil bare at ignorere feltet der, sortering.
Det har at gøre med repræsentationen af ​​data deri,
og jeg har tænkt mig at klikke skabe, og nu mærke til, da jeg giver slip på at skabe
på venstre side, hvor der står ingen databaser
Jeg burde snart se forelæsningen databasen.
>> Hvis jeg nu klikke på den venstre side, forelæsningen database,
mærke mine faner ændre en lille smule.
Jeg har struktur, SQL, eksport, import og nogle andre ting.
Struktur er temmelig meget blank.
Ingen tabeller fundet i databasen, som der står her,
så lad os oprette en tabel, og lad os gå videre og oprette en tabel
gerne studerende, og hvor mange kolonner ønsker vi?
Lad os holde det simpelt, og lad os rekord for alle elever
et id-nummer, et navn og en e-mailadresse.
>> Vi vil holde det simpelt sådan, så 3 kolonner, gå.
Den form, som du kan se her er nu en lille smule rodet og overvældende,
men vi bare nødt til at gå igennem det rækkevis, så virkelig hurtigt lad os give
den første kolonne i denne database et navn på ID for den entydige identifikator.
Det vil være et heltal. Jeg kan faktisk ignorere længde og værdier.
En int bliver 32 bit uanset hvad du skriver derinde, så lad os lade det stå tomt.
Standard værdi, kunne jeg gøre det null, som defineret.
Jeg har tænkt mig at forlade det alene. Lad os ikke bekymre dig om standardværdier.
Lad os rulle herovre til højre attributter.
Dette er interessant.
Lad os gå videre og lidt vilkårligt sige, at ID'er skal være usigneret.
Lad os ikke spilde nogen negative tal.
>> Lad os gå fra 0 til 4000000000, give eller tage,
og så lad os ikke røre nogen af ​​disse felter bare endnu derovre,
men så lad mig skrive navn hernede,
og så den anden var e-mail, så fangsten er e-mail
og navn, naturligvis ikke heltal, så lad os ændre disse til et andet felt.
Det viser sig, varchar, variabel længde char,
er som en streng i en SQL-database
men en variabel længde, og du faktisk nødt til at fortælle det på forhånd
maksimale længde af strengen, så jeg har tænkt mig at noget vilkårligt
efter sædvane typen 255 karakterer.
Jeg kunne helt sige 32. Jeg kunne sige 1.000.
Du slags behov for at beslutte for dig selv baseret på dine demografi hvad er
den længste studerendes navn og gå med det pågældende nummer eller lidt større,
men hvad er rart om en varchar er det kommer ikke til at spilde
255 byte på hver elevs navn.
Hvis det er DAVID det kommer ikke til at bruge en hel 255 bytes,
men det er en øvre grænse, så jeg vil gå med 255 lige ved konvention,
men vi kunne drøfte det at være nogle lavere værdi, og for e-mail-adresse
bare for at være konsekvent 255, men igen, vi kunne have den samme debat.
Men jeg har tænkt mig at gøre en ting herovre på den højre side.
>> Hvad er stærkt om en database er, at det kan gøre en masse tunge løft
eller komplekse arbejde for dig.
I særdeleshed, jeg virkelig ligeglad med, hvad min studerendes ID-numre er.
Det er bare ment som en entydig identifikator i en database
så jeg har en 32-bit kortfattet gengivelse af, at studerende
så jeg har en måde at entydigt identificerer dem
for at der være 2 Davids, for eksempel i en klasse.
Faktisk vil jeg tjekke denne AI boks, auto tilvækst,
så databasen, MySQL, finder ud
hvad enhver nyindsatte studerendes ID bliver.
Jeg behøver ikke engang at bekymre sig om det i min kode,
og jeg vil også vælge noget under indeks menuen.
Indekset falde ned her har primær, unikke,
indeks og fuld tekst.
Du kan måske gætte, hvad et par af disse ting er,
men det viser sig i relationsdatabaser
du programmør eller databasen administrator komme til forebyggende
giver hints til databasen om, hvilke felter
i en tabel er lidt speciel.
>> For eksempel, jeg i dette tilfælde har tænkt mig at sige, at ID
vil være en primær indeks, ellers kendt som en primær nøgle.
Hvad dette betyder per definition er, at id fremover
vil entydigt identificere de studerende i denne tabel.
Ingen studerende vil have samme ID, fordi jeg indføre denne begrænsning eller dette indeks.
Desuden, hvad det vil gøre for mig er det kommer til at fortælle
MySQL, at ID er speciel.
Jeg holder især om ID, så gå videre og gøre din smarte datastruktur magi,
opbygge en slags træ.
Typisk det er noget, der hedder B-træet, som vi ikke ser på uger siden,
men det er en anden sådan datastruktur samme ånd til de binære træer
og forsøger at vi kiggede på, men det kommer til at sige
til databasen dette felt er så vigtigt, at jeg nok
ønsker at være i stand til at søge på det, gå videre og opbygge nogle fancy
datastruktur i hukommelsen til at fremskynde søgninger, så ideelt set
de er konstant tid eller i det mindste så tæt som muligt
så det ikke udvikle sig til lineær søgning, hvilket ikke vil være
den mest højtydende tilgang.
I modsætning hertil kunne e-mailadresse have været en primær nøgle.
>> I teorien er alles e-mailadresse unik, medmindre du deler nogle konto,
men det er generelt ikke godt at bruge noget som en streng
som en primær nøgle, fordi hvis dens formål i livet er til entydigt at identificere
rækker i din tabel er der ingen grund til at bruge 255 bytes maksimalt
til entydigt at identificere en person, hvis du kan slippe af sted med kun 4 bytes
eller en 32-bit int.
Generelt bør en primær nøgle være korte og koncise
og ideelt set noget lignende et heltal eller en stor int, hvilket sker for at være 64 bit.
Men en e-mailadresse skal være unikt, og en af ​​funktionerne i en database for
er at håndhæve unikke for mig.
Ved at vælge unik her ved siden af ​​e-mail, selvom e-mail selv
er rullet ud af skærmbilledet, Jeg siger til databasen
ikke har tillid til mig.
Lad mig ikke indsætte i databasen
den samme e-mailadresse to gange, selvom jeg er en idiot, og jeg er ikke
meget godt med mine hvis'er og ellers IFs og faktiske PHP-kode
og jeg ved et uheld lade brugeren registrere med en eksisterende e-mail-adresse
databasen er endnu et niveau i forsvaret for korrekthed
at sikre, at denne kopi e-mail-adresse ikke ender i tabellen.
>> Nu, derimod, for navn, du sandsynligvis ikke ønsker at gøre dette unikke
fordi så der kunne aldrig være 2 Davids eller 2 Mike Smiths, for eksempel,
i din database, så vi, at man vil bare lade alene.
Jeg har tænkt mig at gå videre og klik på Gem nederst til højre,
og alt ser godt ud, men opsigelsesvarsel op her
dette er en del, der for nu vil vi ikke bruge for meget tid på
fordi syntaksen er en lidt kompliceret, og vi behøver ikke at oprette tabeller
så ofte, men SQL selv er et sprog,
syntaksen for der er lige her, at jeg har fremhævet.
Hvilke phpMyAdmin egentlig gør, er det skaber en web-baseret GUI til dig
som du kan spare tid og ikke nødt til manuelt at skrive ud
en temmelig lang SQL-forespørgsel sådan.
>> Med andre ord, manuelt, hvis du ønskede at skabe denne tabel,
enten ved at sorte og hvide hurtig eller endog i phpMyAdmin
ved hjælp af denne anden fane, hvor denne SQL fanebladet kan du indtaste alle SQL-forespørgsler
du ønsker, helt ærligt, det ville have taget mig et minut
til rent faktisk at huske hele syntaksen, og selv da jeg sandsynligvis ville have
lavet nogle stavefejl, så dette værktøj er brugbar for ting som det, og det er også lærerigt.
Du kan begynde at udlede, hvad er syntaksen
lige ved flot farvekodning at phpMyAdmin tilføjer
for vores visuelle komfort.
Men lad os nu gøre det i stedet.
Lad mig gå til fanen Indsæt i top, og lad mig gå videre og indsætte for eksempel
et id på lad os sige-jeg faktisk ligeglad.
Det kommer til at auto tilvækst. Jeg har tænkt mig at lade databasen beskæftige sig med dette.
Men jeg skal være David, og min e-mail skal være malan@harvard.edu.
>> Lad os gå videre her og sat i Mike Smith som en anden.
Jeg vil give mig selv en sidste navn så godt,
og vi vil have ham være smith@example.com,
og så hvor skal jeg hen?
Tja, det ligner go er knappen til at klikke, og voila.
Bemærk på de øverste 2 indsatte rækker.
Dette er den egentlige SQL-forespørgsel.
Det er phpMyAdmin værktøj henrettet for mig,
men det endelige resultat, varsel, hvis jeg nu gå til gennemse fanen,
er at se 2 rækker i denne tabel, minder meget om æstetisk
af bordet vi så tidligere for vores brugere fra Pset 7,
hvoraf den ene er David Malan, hvoraf den ene nu er Mike Smith.
Men bare for at være klar, behøver jeg ikke at bruge phpMyAdmin,
og ja, er du nødt til snart at skrive kode til Pset 7
der automatiserer processen med at tilføje rækker, slette rækker, opdatering rækker og lignende,
så lad mig i stedet gå til SQL fane op her
og skriv select * fra elever, hvor
email = "malan@harvard.edu."
>> Med andre ord formoder nu har du
nogle HTML-formular, og brugeren skriver i deres e-mailadresse, blandt andre områder,
og målet er nu i PHP på bagsiden ende kode
til rent faktisk at kigge op, at brugerens andre detaljer.
Hvad er dit fulde navn? Hvad er dit ID-nummer?
Du kan skrive en SQL-forespørgsel som denne, skal du vælge * fra studerende
hvor e-mail = "malan@harvard.edu."
Og hvis jeg så klikker gå, bemærke, at jeg skulle, og ja, jeg gør, kommer tilbage bare én række.
Mike er udeladt fra dette resultat sæt, som indsamling af rækker
kaldes generelt, fordi han ikke har den samme e-mail adresse som mig.
>> Nu, igen, her til Pset 7 du vil bruge phpMyAdmin som et administrativt værktøj
og et pædagogisk redskab til at lære din vej
rundt om i verden i SQL, ved men slutningen af ​​dagen
du kommer til at skrive disse forespørgsler inde i selve PHP-kode,
og så stay tuned i Zamyla s walkthrough i særdeleshed
hvor du får en rundvisning af distributionen koden til dette problem sæt
hvor vi har givet dig ikke kun æstetik for loginsiden
og nice sexet logo, siger CS50 Finans, men vi har også givet dig
en flok af funktioner, der vil gøre dit liv lidt lettere.
Vi har også skrevet en del af Pset for dig,
login del af det i særdeleshed, for at give dig en fornemmelse af et repræsentativt design
der faktisk anvender en styreenhed, f.eks index.php,
login.php og lignende, og så vil du se Pset har også en skabeloner bibliotek
der har alle dine synspunkter, alle æstetik.
Og så den samlede arbejdsgang i Pset 7 vil være at
dine brugere besøger en controller via en URL i en browser.
Denne controller indeholder PHP-kode, du skrev, og indersiden af ​​din PHP-kode
kan være nogle linjer af SQL indlejret i mellem dobbelte anførselstegn
og ledes til en funktion vi skrev kaldet forespørgsel
som vil hjælpe dig tale til databasen uden at bruge noget lignende
et administrativt værktøj som phpMyAdmin.
>> Du vil være i stand til at skrive SQL-sætninger i PHP-kode
og komme tilbage en PHP array af resultatet sæt,
af de rækker, der faktisk matcher denne forespørgsel.
Og tilsvarende vil du være i stand til at gøre indsætter eller sletter
eller opdateringer eller lignende, syntaks, som er nogenlunde ens,
og du vil se fra nogle online referencer, fra distributionen kode
og fra Pset pakke sig præcis, hvordan man kan gå om at gøre det.
Indse i sidste ende er vi virkelig bare skrabe overfladen af ​​SQL
og af MySQL, men kraften i det virkelig er, at det frigør dig
at fokusere på de problemer, du ønsker at løse, de use cases, du ønsker at gennemføre
uden at skulle bekymre sig helt så meget, i det mindste tidligt,
om, hvor og hvordan man kan gemme og søge din database,
og det er helt bogstaveligt, hvor Facebook selv fik sin start
bruger MySQL og derefter bruge flere MySQL-servere og derefter mere MySQL servere
inden længe, ​​indtil de havde derefter virkelig begynde at tænke hårdt om, hvordan du
gemme data, hvordan man kan gemme ting endnu mere effektivt,
så selvom vi tager for givet, at indekser og unikke begrænsninger
og så videre bare arbejde der er en meget interessant samtale
at alt dette kan i sidste ende føre til, så indse, at vi er lige ridse overfladen
af, hvad der i sidste ende kan for dig eller dine projekter bliver en hel del store data.
>> Med det sagt, lad os slutte her, og vi vil se dig næste uge.
[CS50.TV]