[Powered by Google Translate] [Week 8, Vervolg]
[David J. Malan] [Harvard University]
[Dit is CS50.] [CS50.TV]
>> Dit is CS50, dus dit is het einde van week 8 hier.
We hadden natuurlijk een beetje een orkaan eerder deze week,
dus nu is het eigenlijk alleen maar jij en ik in deze zaal,
maar vandaag blijven we ons gesprek over PHP
en over web programmeren meer in het algemeen, en we introduceren ook het idee
van databases, in het bijzonder een zogenaamde MySQL, dat is heel populair deze dagen,
voor een groot deel vanwege de schaalbaarheid en omdat de vrij en open source.
>> Maar eerst een blik op waar we gebleven vorige keer.
Bedenk dat we kijken naar de verschillende Frosh IM's voorbeelden,
en dit was de afschuwelijke vorm die ik kwam met een aantal 15 + jaar geleden
om studenten op de campus register voor eerstejaars intramurale sport hebben
zonder echt te hoeven tocht meer over het erf naar Wigglesworth
een fysieke stuk papier onder de deur een aantal Proctor's schuiven.
In plaats daarvan zijn we verhuisd alles online, maar om te doen dat we nodig hadden om gebruik te maken
van een paar technologieën, zodat een, we moesten HTML, Hypertext Markup Language,
dat is ook dit opmaaktaal waarmee u webpagina's structureel.
>> Met behulp van een beetje CSS deze dagen, cascading style sheets,
waarbij we gebruik maken van stileringen van de webpagina met behulp van een iets andere syntax,
terwijl de HTML was alles over de structuur ervan.
We moeten ook een web-programmeertaal te introduceren.
In dit geval, zullen we gebruik maken van PHP en PHP zal ons in staat stellen
om dynamisch vermogen zowel inhoudelijk als doen programmatische zaken als
het verzenden van e-mails, zoals het geval was op het briefje we vertrokken vorige week.
>> Bedenk dat de code voor dit was in 2 delen.
Een, hadden we froshims3.php,
en dit was grotendeels opmaak met een HTML-formulier binnenkant van het,
een klein beetje CSS hier in de stijl attributen
zodat het formulier zelf zou worden gecentreerd op de pagina, maar verder dan dat
we hadden een aantal representatieve vorm ingangen, een tekstveld, een checkbox,
sommige keuzerondjes, een select menu, en een submit knop.
En via dit formulier, we voorgelegd aan een bestand dat blijkbaar heette register3.php,
die zelf zag er een beetje iets als dit.
Nu, de meeste van de code in register3.php, recall, was alles over e-mail.
Het deed een beetje validatie van het formulier dat werd ingediend om ervoor te zorgen
dat de velden waren eigenlijk op voorwaarde dat werd verwacht.
Dan hebben we wel een aantal PHP-functies met behulp van een beetje nieuwe syntax,
ook al is het geleend van C.
>> Deze pijl exploitant stelt ons in staat om gebruik te maken van een zogenaamde object-georiënteerd programmeren.
We zullen niet ingaan in detail hier, maar weet voor nu
het is een manier van het hebben van functies gekoppeld aan objecten,
die zijn een speciaal type van structuur, zoals we zagen in C.
Maar voor nu, gewoon op het geloof dat dit de juiste syntax te gebruiken
bij het gebruik van een bibliotheek als deze PHPMailer bibliotheek.
En dan aan het eind van dit bestand hadden we dynamisch gegenereerde een e-mail
die werd verstuurd naar mijn jharvard@cs50.net rekening
van mijn jharvard@cs50.net account,
en we geïnformeerd dat de gebruiker dan ook dat zij zijn ingeschreven voor deze sport.
Dat is zo ongeveer wat de Frosh IM's site heeft al die jaren geleden
toen ik het uitgevoerd, verleend, in een andere taal,
maar het toont je misschien wel de kracht die je hebt
nu dat je jezelf kunt uitdrukken, niet alleen programmatisch
op een laag niveau in een taal zoals C maar op een veel hoger niveau
met deze zeer echte wereld toepassingen zoals e-mail om daadwerkelijk op te lossen
echte wereld problemen.
>> Nu, natuurlijk, hoewel ik dit script gebruiken om een ​​aantal te genereren
e-mails dynamisch uit jharvard@cs50.net, die inderdaad een account
dat ik toegang tot heb, wees heel voorzichtig met het verzenden
mail alleen van accounts die eigenlijk uw eigen,
opdat dingen krijg je in een beetje heet water in het leven.
Met dat gezegd, laten we nu de overgang naar het oplossen van een ander probleem helemaal,
dat het behouden staten.
Nu, dit betekent wat eigenlijk?
HTTP, deze hypertext transfer protocol,
is eigenlijk een staatloze protocol, en wat dit betekent is dat
als je omhoog trekken iets als Google.com en druk op enter
meestal uw browser heeft een soort van spinnen pictogram dat dan
resultaten in sommige webpagina wordt gedownload,
en dan dat kleine icoon niet langer ronddraait, en dat is inderdaad suggereert
dat HTTP heeft afgerond een soort van verbinding met de server en dat is het.
HTTP is stateless in de zin dat het niet te handhaven
een persistente verbinding naar de server op dezelfde manier Skype doet
of Gchat doet, want met HTTP
de veronderstelling is dat als je eenmaal hebt een webpagina dat is het opgehaald.
>> Nu, in werkelijkheid deze dagen op sites als Facebook en Google Maps
en Twitter en dergelijke er is veel meer dynamiek, waarbij
zelfs na die icoon niet langer ronddraait kun je in feite meer updates
van de server, meer tweets, meer status-updates op Facebook en dergelijke.
Maar zelfs dat is met behulp van een techniek die we over praten in een week of twee
bekend als Ajax met een JavaScript taal genaamd,
maar aan het eind van de dag, HTTP nog stateless.
En toch, als je wilt een of andere manier herinneren dingen over een door de gebruiker
zelfs nadat ze losgekoppeld van uw server
PHP doet veroorloven u een middel om dit te doen
omdat, zoals we zagen vorige keer, PHP heeft een aantal superglobals,
en een superglobal is, nogmaals, een speciale globale variabele
dat is overhandigd door de webserver en PHP zelf.
>> Je hoeft niets te doen om de waarden in te doen,
en onder de superglobals we hebben tot nu toe gezien zijn GET en POST,
dat is waar formuliervelden worden automatisch voor u,
evenals een paar anderen die we nog niet hebben gezien.
Binnenkant van $ _SERVER zijn enkele speciale variabelen met betrekking tot de server zelf.
Wat is het IP-adres, welk protocol, HTTP of HTTPS heeft u gebruikt,
Wat de aanvraag methode heb je gebruikt en dergelijke, dus er is een aantal interessante,
sappige details over de server, en in feite de gebruiker daar ook.
Er is $ _COOKIE, dat is waar deze dingen wel cookies worden opgeslagen.
We zullen geen tijd over cookies zichzelf vandaag de dag,
maar weet nu dat een cookie is slechts een klein stukje informatie
die een webserver kunt de plant op een web browser
en op zijn beurt de RAM of haar computer de harde schijf
het opslaan van informatie over een gebruiker, bijvoorbeeld de gebruiker zijn naam
zodat ze niet hoeven te typen elke keer dat ze inloggen of sommige
uniek nummer of identificatienummer voor dat de gebruiker
zodat u niet hoeft te pesten met dezelfde soort vragen over
voorkeuren in de toekomst, maar de meeste plaats
op dit moment is $ _SESSION.
>> Dit superglobal, die net als de anderen, wordt overhandigd automatisch door PHP
als je het schrijven van PHP gebaseerde websites
kunt opslaan wat je maar wilt, strings, integers,
Floating Points, waarden, arrays, objecten,
echt alles wat je wilt, en het u toestaat om het op te slaan op een zodanige wijze
dat zelfs als de gebruiker zo nu en dan
komt terug een minuut vanaf nu of 5 minuten vanaf nu, omdat
zij nemen hun tijd voordat u op andere banden
PHP zal ervoor zorgen dat wat je in die sessie superglobal
een minuut of 5 minuten geleden zal er nog zijn als de gebruiker terugkeert.
En onder de motorkap dit superglobal wordt uitgevoerd door middel van
die dingen geroepen koekjes, maar voor nu, het is gewoon een abstractie
waarbij het is een soort van de programmatische equivalent van een winkelwagentje.
Wat je ook, de programmeur, zet in dat
superglobal associatieve array zal er een bepaald aantal minuten later
totdat u deze verwijdert of totdat de gebruiker stopt met zijn of haar browser helemaal.
>> Laten we eens een kijkje nemen op een voorbeeld van hoe dit ding daadwerkelijk wordt gebruikt.
In counter.php in stukken van vandaag van code
hebben we de volgende regel.
Aan het begin van dit bestand hebben we een heleboel blauwe opmerkingen, die zijn oninteressant voor nu.
Maar in lijn 13 hebben we een nieuwe lijn,
session_start, en dat daadwerkelijk doet precies wat het zegt.
Begint sessies.
Hiermee kunt u gebruik maken van die grote superglobal $ _SESSION, en het is zo simpel als dat.
Nu, als we gaan kijken naar lijn 16, laten we proberen om erachter te komen wat deze webpagina gaat doen.
If (isset ($ _SESSION ["counter"]), dan ga je gang
en op te slaan in de teller variabele, kleine toonbank,
$ _SESSION ["Teller"].
Dit lijkt te worden waarbij een lokale variabele genaamd teller
binnenkant waarvan het is waardoor een kopie van wat binnenkant van de superglobal
riep sessie op de locatie "teller".
Else, blijkbaar, deze kleine lokale variabele teller, wordt geïnitialiseerd op 0.
>> Maar dan een paar regels later in 26 bericht dat de sessie kopie van de teller,
de belangrijkste, heeft een nieuwe waarde toegewezen die is de huidige waarde plus 1.
In het kort, dit bestand lijkt te updaten
een teller die binnen is opgeslagen van de sessie superglobal
door het verhogen van het door 1, maar behoudt eerst een kopie van de vorige waarde
door te slaan in een lokale variabele met de naam $ teller,
en dan naar beneden hier laten we eens kijken wat er overblijft.
Het blijkt dat het vrijwel alleen HTML.
Aan de onderkant van deze pagina zien we in regel 37 dat ik deze site bezocht
teller aantal keren, dus er is hier een paar interessante eigenschappen.
One, dit is duidelijk een variabele, maar het is niet voldoende om zomaar
$ Teller in het lichaam van uw HTML-want natuurlijk
als het er gewoon onder uw HTML PHP gaat ervan uit dat het gewoon HTML.
Je letterlijk wilt $ teller worden afgedrukt op het scherm.
>> Maar in plaats van te laten vallen in PHP-modus
met dit stukje syntax kunnen we dynamisch hier plaatst u een waarde
zeer vergelijkbaar in de geest van wat we de vorige keer met
het plaatsen van waarden in strings.
In feite is dit gewoon een verkorte schrijfwijze voor te zeggen iets als dit letterlijk,
print ($ teller) of zelfs zoiets als printf (% s, teller),
of zelfs, zoals je misschien al gezien online of in leerboeken,
er is een functie in PHP genaamd echo
die doet hetzelfde, en al die zijn gewoon langer adem manieren
te zeggen <? =.
In dit ene geval hoeft u niet te zetten
het woord PHP na het vraagteken.
Dit is een afkorting notatie voor, nogmaals, wat we net zagen een moment geleden
die echo enkele waarde.
>> Laten we eens kijken wat het eindresultaat van deze eigenlijk is.
Laat me dan gaan in onze counter.php bestand,
en we zullen zien dat David gewoon een fout heeft gemaakt door te spelen met de code daar.
Laten we fix wat hij verpest te gaan,
en de fout lijkt om daar te zijn, weg, op lijn 37.
Volgens de bovenkant van deze pagina ik heb bezocht deze site 0 keer.
Nou, laten we nu gaan, en aan de bovenkant van de browser klikt u op de
reload icoon, en ik klik op laden,
en nu heb ik een bezoek aan de site 1 keer, 2, 3, 4, 5, 6, 7, 8.
En inderdaad, als we kijken naar de bron van deze pagina het eigenlijke broncode is aan het veranderen,
en let op de volledige afwezigheid van PHP, en dat komt omdat
PHP-code wordt geëvalueerd of geïnterpreteerd server-side,
en dus dat betekent dat de uitgang van de PHP script is wat uiteindelijk naar de browser,
die in dit geval is wat rauwe HTML en kale tekst.
Wat is hier aan de hand?
>> Nou, met relatief weinig regels code kan ik op te slaan
voortdurend in de loop van enkele seconden, of als we lang genoeg gewacht,
minuten, zelfs uren, een bepaalde waarde op een manier die HTTP maakt
lijken stateful alsof we behouden
deze verbinding met de server, en het is gewoon herinneren wat ik het vertelde vorige keer,
maar in werkelijkheid is er een hele hoop van complexiteit aan de hand onder de motorkap
met betrekking tot cookies die is waardoor PHP om mij deze illusie
van deze winkelwagentje-achtige functie.
Voor nu, een triviaal voorbeeld waar we gewoon het opslaan van een geheel getal,
maar die functie zal terugkeren naar zijn van grote waarde
wanneer we beginnen te praten over meer complexe projecten,
onder hen probleem te stellen 7.
Dit is je allerlaatste probleem in CS50.
Ik weet het, het is zo triest, maar wat je vindt is dat we gaan om te concluderen
dit deel van het semester door daadwerkelijk de overgang
uit de context van C zeker naar de context van PHP
maar tijdens het gebruik van een aantal van de zeer dezelfde fundamenten
We hebben gesproken over enige tijd.
>> De doelstelling met PSET 7 is te implementeren CS50 Financiën,
dat is je eigen versie van Yahoo Finance of Google Finance
of zelfs Etrade.com waarbij je de mogelijkheid om
kijk omhoog aandelenkoersen voor bepaalde symbolen, maar zelfs meer dan dat
heb je de mogelijkheid om te "kopen" en "verkopen" voorraden
die worden verhandeld op verschillende beurzen, want als deze home page
hier doet vermoeden, dat is echt de mate waarin we begonnen
het probleem set voor je, heb je een login formulier dat is vragen om een ​​gebruikersnaam en een wachtwoord.
Het heeft een submit knop, maar daarna, zoals we zullen uiteindelijk zien,
er is werkelijk niets aan de hand onder de kap nog, omdat het
blijft voor u uit te voeren de mogelijkheid om nieuwe gebruikers te registreren,
de mogelijkheid om aandelen te kopen, om de voorraden te verkopen,
om daadwerkelijk opzoeken huidige aandelenkoersen.
>> En inderdaad, dit zal zo echte wereld mogelijk, want we deden
voorzien van een stukje code die u zal toestaan ​​met een enkele functie
aan Yahoo Finance, die heerlijk is gratis verkrijgbaar gegevens opgevraagd
voor het opzoeken van de aandelenkoersen op basis van de voorraad symbool of ticker symbool,
en je krijgt weer de actuele koers van de dag.
De gegevens die je eigenlijk ziet in deze specifieke PSET zal zijn
ongeveer net zo echte wereld als het kan krijgen zodat je eigenlijk interfacing
met echte aandelen wereldwijd, echte wereld prijzen,
en we zullen zien hoeveel geld u wellicht kunt maken
in de komende paar dagen van het spelen met uw eigen probleem set.
>> Maar laten we eerst het podium voor hoe je iets dat is zeker ingewikkelder ontwerpen
dan counter.php, dat is ingewikkelder dan een van de Frosh IM voorbeelden tot nu toe,
en laten we hier proberen om een ​​paar paradigma's te introduceren die ons in staat
zowel voor PSET 7 en misschien voor uw afstudeerproject als je op basis iets web
om uw code goed georganiseerd, om jezelf gezond,
en een stap in de richting van samenwerking te nemen, of het nu afstudeerproject CS50's
of voorbij als u doorgaat met iets in de toekomst te programmeren.
Er is een algemene ontwerp paradigma
in de informatica en in software ontwikkeling in het algemeen
bekend als MVC, model view controller,
en dit is een domme acroniem dat een heel leuk idee beschrijft,
dat de scheiding van verschillende aspecten van een programma,
specifiek gescheiden houden van de logica of de business logica van een website
zodat alles wat betreft zaken als
belfuncties en databases te kunnen ondervragen en dergelijke
gebeurt niet bij je HTML
maar in aparte bestanden, en inderdaad, er is dit een bestand
meestal dat u hebt gebeld de controller
dat is echt het brein achter de operatie, en we zullen zien een voorbeeld
van deze in slechts een moment.
>> Er is een model dat het programmeren van code
dat doet de praten met uw databases, die praat met Yahoo Finance en dergelijke,
en dan is er de V in MVC, het uitzicht,
al het spul dat met betrekking tot esthetiek, de bestanden die daadwerkelijk bevatten
uw HTML, misschien je CSS en dergelijke.
Het idee, aangezien dit beeld erop wijst, dat de controller
is het bestand, zoals we zullen snel te zien en als je vooral zien in PSET 7,
dat de wereld praat via hun webbrowsers.
Dat is het bestand dat wordt bezocht op het publieke internet,
maar de controller praat met mogelijk een model,
dat een of meer bestanden die code gerelateerde gegevens bevatten,
code met betrekking tot databases en dergelijke, en dan praat met
de controller een of meer andere bestandjes uitzicht
die de esthetiek van een webpagina, sjablonen van soorten,
mogelijk bepaalde gegevens als invoer nemen, maar aan het eind van de dag
de enige logica binnenkant van het oog moet de weergave van die gegevens zijn,
itereren over een lus en eigenlijk uitspugen van een aantal
HTML-gebaseerde weergave daarvan of zelfs zoiets als een PDF.
>> Wat is er leuk over MVC is dat je kunt hebben verschillende weergaven
op basis van het type apparaat, gebaseerd op het type bestand formaat dat u daadwerkelijk
wil laten zien aan de gebruiker.
Laten we eens een kijkje nemen op een paar geleidelijk meer complexe en goed ontworpen voorbeelden
door te beginnen eerst met versie 0 hier.
Laat me gaan en open te stellen in onze MVC directory vandaag
een bestand met de naam index.php in de map: 0.
Let op dit is een super eenvoudig en zeer underwhelming website
dat is een soort van versie 0 van een homepage voor de CS50,
en merk op hoe we een link naar Lezingen, we hebben een link naar Syllabus,
en als ik volg de link naar Lezingen bericht dat de URL
up top gaat veranderen aan lectures.php.
Als ik dan op de link naar week 1 merk op dat de URL verandert in week1.php.
Er lijkt een vrij eenvoudige hiërarchische structuur hier te zijn.
>> Laten we eens een snelle blik onder de motorkap te nemen op hoe deze is aangelegd,
en inderdaad, als ik kijk naar index.php het is vrij eenvoudig.
In feite, zelfs al heb ik noemde dit een PHP-bestand is er geen werkelijke programmeercode.
Er is een opmerking die ik hier schreef in PHP gewoon zo de gebruiker niet uiteindelijk te zien.
Natuurlijk, als voorheen, alles wat er in tussen PHP-tags
wordt geïnterpreteerd, ook al is het een reactie, en interpreteren een reactie
betekent alleen maar om het weg te gooien aan het eind van de dag en niet echt
stuur het naar de browser, dus alles hier is gewoon esthetiek.
Als ik open net lectures.php ook dit is gewoon een hard gecodeerde bestand.
Het gebeurt te noemen iets. Php,
maar het is eigenlijk gewoon. html, en week1.php, week2.php
vergelijkbaar zijn gewoon opmaak, dus er is een heleboel tekortkomingen van dit ontwerp.
Een, het is een enorme hoeveelheid copy / paste.
Hoewel het enige dat verandert onder deze bestanden is de ongeordende lijst,
de li-tags, ik toch het pakket doc-type, HTML, hoofd,
titel, in de buurt lichaam, in de buurt HTML en meer
in elk bestand, wat betekent dat als ik ooit wil herstructureren om
Deze webpagina of restylize het ik moet gaan en te veranderen
al deze bestanden handmatig of met een massieve zoeken en vervangen.
>> Laten we eens een stap in de richting van een slimmere, meer denken design in versie 1 hier
waarbij volgens de read me dat we zo hebben begrepen dat u kunt meespelen met
deze meer ontspannen thuis merken dat we hier hebben
een overzicht van de bestanden in een versie van deze site,
en het lijkt erop dat ik heb het op mij genomen om factor uit
een aantal gemeenschappelijke code, header.php en footer.php.
Nou, laten we een kijkje nemen op wat er in de eerste van deze.
Header.php ziet er bekend uit,
maar let op waar komt het krijgen afgesneden?
Direct na lijn 19, dus dat is alles wat gebruikelijk was
van de bestanden index.php, lectures.php,
week1 en week2.php uit het vorige voorbeeld.
Wat ik deed was kopiëren en knippen alles wat gebruikelijk was om al die bestanden,
zet het in een apart header-bestand, en evenzo in footer.php
heb ik passen dezelfde beginsel dat de enige interessante lijnen
in footer.php zijn deze twee, dicht lichaam en dicht HTML.
>> Wat dit betekent nu dat in de nieuwe versie
van index.php merk op hoe veel eenvoudiger het kan krijgen.
Toegegeven, een beetje meer cryptische kijken, een beetje minder intuïtief
te volgen boven naar beneden, maar mijn God, dat alles redundantie is nu verdwenen.
Wij eisen het gebruik van een PHP functie letterlijk opgeroepen nodig tot boven,
dat is erg doet denken, herinneren, van C's # mechanisme op te nemen.
Wij eisen dat header.php aan de top.
Wij eisen footer.php aan de onderkant, en het enige dat anders is
of bijzondere van dit bestand is de inhoud die is bedoeld om uniek te zijn om het te.
Als ik ga dan in, zeg, lectures.php, hetzelfde principe geldt.
Nogmaals, een aantal opmerkingen tot boven, maar dan heb ik nodig koptekst, voettekst vereisen,
en tussen het is alleen de inhoud die daadwerkelijk is veranderd.
En als we gekeken naar Week 1 en Week 2 zouden we zien
dat hetzelfde principe was er toegepast.
Nou, we er nog niet helemaal klaar.
>> Laten we eens een kijkje nemen op versie 2, die een soortgelijke structuur heeft,
maar nu merk ik heb iets anders geïntroduceerd.
In regel 10 heb ik geïntroduceerd helpers.php,
die bevat blijkbaar helper functies.
Een helper functie is over het algemeen een relatief korte functie
dat je schrijft om u te helpen op verschillende plaatsen,
en laten we eens kijken wat er in helpers.php.
In dit geval, het lijkt alsof het heeft 2 functies.
Recall van de andere dag met onze kubus voorbeeld
kunt u uw eigen functies in PHP, en wat ik heb nu gedaan is heb ik
gedefinieerde functies genoemd maken footer en maken header,
waarvan de eerste is een parameter data,
waarvan de standaardwaarde is een lege array, omdat er gesuggereerd,
en we kunnen eigenlijk dit schrijven nog beknopter in de nieuwste versie van PHP
door te zeggen open plein beugel, gesloten vierkante haken.
Dat betekent dat een lege array van grootte 0 maar toch een array.
>> Dit extract functie is een beetje speciaal in die
wat het doet is het neemt als argument een associatieve array
dat heeft 0 of meer essentiële waarde-paren, en als je een sleutel van foo
en een waarde van de bar van het extract functie
creëert een situatie die nu als van lijn 11,
u een lokale variabele genaamd $ foo waarvan de waarde bar.
En als u meer sleutels en waarden hadden in de data array,
eveneens zouden ze worden uitgepakt in de lokale scope
of de naam van de ruimte, zodat footer.php en
hetzelfde idee hier beneden, zodat header.php
toegang tot deze variabelen.
In feite, laat me weer open te stellen header.php
en de aandacht vestigen op nu hoe het eruit ziet in deze versie.
>> In plaats van harde codering CS50 als titel voor elke pagina
let op de dynamiek die is nu mogelijk.
In lijn 5 Ik ben echo een titel variabele,
maar eerst ga ik langs die titel variabele naar een functie genaamd htmlspecialchars.
Een domme naam voor een functie, zolang het is, maar het doet echt wat het zegt.
Het zorgt ervoor dat geen speciale tekens
in de string die is doorgegeven in goed escaped HTML.
Dit is eigenlijk een manier om te voorkomen zoiets als een cross site scripting-aanval
waarbij iemand kan kwaadwillig of per ongeluk
injecteren hun eigen HTML in uw website
door plakken in een vorm, bijvoorbeeld
iets dat je niet helemaal verwacht, in het bijzonder JavaScript-code,
zoals we over praten in een week of twee de tijd.
>> Dit nu header.php, het is een uitzicht
in de zin dat het u toestaat om esthetisch de inhoud van bepaalde gegevens set.
Maar meer in het bijzonder, het is een sjabloon.
Dit is een soort van een blauwdruk nu uit wat we willen de header van elke pagina om te kijken als,
maar er is een aantal dynamiek in dat we de titel wilt dynamisch worden ingevoegd
gebaseerd op de titel variabele
dat werd gewonnen als we belden, nogmaals,
de render header functie.
Nu, als we keken naar render voettekst, is er eigenlijk niet veel nu gebruik van dat recht
want in footer.php er geen dynamiek dan ook.
Er kunnen, maar op dit moment is het een hard gecodeerde lijst van 2 tags,
maar hetzelfde idee geldt, zodat in feite suggereert waarom
hebben we tijd verspillen met een render-header en een render voettekst functie?
Laat me nu maar gaan in versie 3,
en in versie 3 in helpers heb ik besloten om het te vereenvoudigen zelfs meer.
>> Laat me nog een render functie.
Laat mij het nog een argument, dit keer genaamd sjabloon,
die bedoeld is om de naam van een sjabloon,
en dan zal ik aanmatigend samenvoegen. php om de waarde van die variabele,
en dan als het bestaat foo.php, bar.php of header.php en footer.php,
dan ga ik om verder te gaan en de variabele gegevens op te halen
en dan moet dat pad.
Met andere woorden, om nu met dit, als ik open index.php
merken dat ik niet render header meer bellen.
Ik noem te maken, maar ik pas in een genoteerde waarde van header
om duidelijk te maken welke sjabloon ik eigenlijk wilt laden.
>> Dan hier op wat ik doe.
Ik passeren in dynamisch een sleutel van de titel,
een waarde van CS50, en ook dit, zoals we eerder zagen,
kunnen worden gemaakt beknopter in de nieuwste versie van PHP
waar ik kan de plaats van de array functie met vierkante haken,
die ik voorstel is nog beter leesbaar en zeker
een beetje makkelijker te typen.
En natuurlijk, met de render voettekst oproep aan de onderkant,
we niet de moeite passeren in een tweede argument helemaal niet, geen associatieve array,
want er is niets dynamische binnenkant van die voettekst.
Het is gewoon een nauwe tags voor HTML.
Goed, we nemen stappen op weg naar echt schoonmaken dingen hier,
maar laat me open te stellen 2 def voorbeelden.
Deze, nummer 4, mede dat ik heb een bewuste keuze nu gemaakt
tot uitwerking van het vorige voorbeeld te verbeteren door eindelijk met behulp van enkele hiërarchie om mijn bestanden.
>> Merk op dat in deze samenvatting, in dit leest mij, ik heb geïntroduceerd
een omvat directory en een templates directory
waarvan de inhoud zullen worden van de dingen die ik wil zijn
en de sjablonen die ik wil, respectievelijk te maken,.
Dit is echt me being anale en proberen om dingen netjes,
bij elkaar te houden gerelateerde bestanden, maar het eindresultaat
is dat we nu een iets netter setup hebben, maar we moeten nu niet vergeten
in bijvoorbeeld index.php
toen hebben we de file helpers.php
moeten we nu nodig hebben via includes / helpers.php
in plaats van alleen maar te zeggen helpers.php want nu is het eigenlijk in een subdirectory.
Nu, als een terzijde, zie je in deze voorbeelden en enkele anderen
functies zoals vereist eenmaal nodig.
Er is eigenlijk een functie zelf heet zijn, en ze hebben allemaal iets anders gedrag.
Hier zeg ik nodig een keer te maken super duidelijk zijn dat ik alleen wil die
helpers in mijn project een keer.
Maar als ik voorzichtig ben en als ik ben eigenlijk denken door mijn logica goed
het moet ook gewoon volstaan ​​met te zeggen tot boven vereisen
zolang ik zelf niet per ongeluk elders vereist dat hetzelfde bestand.
In feite is dit een iets efficiëntere manier van doen dan met behulp van
vereisen een keer, dus ik zal het trimmen tot slechts vereisen.
>> Laten we nog een stap verder.
Dit laatste voorbeeld nu, versie 5, heeft een nog schonere mappenstructuur.
Let op wat ik hier heb gedaan per de mij lezen in deze definitieve versie
is nu heb ik mijn HTML directory, die ik heb al die tijd had,
maar binnen daar is nu alleen index.php, lectures.php,
week1.php en week2.php.
Het omvat directory woont nu samen met de HTML-directory,
dus op hetzelfde niveau als een broer of zus, om zo te zeggen.
Hetzelfde geldt voor de templates map.
De sleutel mee te nemen is hier Ik heb een beetje meer structuur ingevoerd,
maar dat de spil is nu dat alleen de bestanden
die moeten worden web toegankelijk, publiek adresseerbare
door een URL op het openbare internet zijn in mijn HTML-directory.
>> Ondertussen andere bestanden, helpers.php, footer.php,
header.php, dat zijn misschien wel misschien gevoeliger,
misschien helpers heeft eigenlijk een aantal gebruikersnamen en wachtwoorden of andere intellectuele
eigendom van mij, functioneert ik echt niet willen dat de wereld om te zien, zelfs als het per ongeluk.
Het is een goede gewoonte om buiten te houden van het publiek HTML directory
alle bestanden die niet hoeven zichzelf als het publiek.
Het enige wat je hoeft te doen in dit geval als we kijken naar, bijvoorbeeld,
de HTML-directory index.php bestand,
merken we moeten gewoon een beetje meer voorzichtig zijn bij die
of een keer nodig dit bestand.
Ik moet eerst doen .. om naar de bovenliggende directory,
kies dan / includes / helpers.php
om terug naar beneden te duiken om het bestand dat ik de zorg over te krijgen.
>> Hebt u vragen dan op MVC
of deze relatief eenvoudige incarnatie daarvan?
En laat me duidelijk maken dat we wel een beetje op de gerichte
V hier, het uitzicht en de factoring uit deze sjablonen.
We hebben niet echt onderscheiden M van C gewoon nog niet.
In feite, is er echt geen M hier, en zelfs onze C,
controller, is niet echt doen al veel, maar je krijgt veel meer
vertrouwd zijn met deze beide 2 letters van MVC,
of liever gezegd, krijg je veel meer vertrouwd met de C
in MVC voor probleem set 7, dus er is meer van dat aan de horizon.
Vragen?
Er is eigenlijk niemand hier.
>> Oke, laten we nu overgaan tot de tweede en laatste onderwerp voor vandaag.
Dat is de introductie van een database.
Tot op dit punt hebben we een paar manieren van het opslaan van gegevens.
We hebben gebruikte variabelen.
Terug in onze C-bestand, I / O-discussie zijn we begonnen met het gebruik van tekst-bestanden
en het gebruik van bestanden zoals fprintf, en dan hebben we zelfs begonnen
praten over CSV-bestanden een beetje, door komma's gescheiden waarden,
dus al deze konden we hebben opgeslagen
ofwel niet-aanhoudend of voortdurend.
Maar zelfs CSV-bestanden zijn niet echt bevorderlijk voor het zoeken
en het invoegen van en verwijderen.
Het is eigenlijk gewoon een domme tekstbestand gescheiden door komma's
rij voor rij op rij voor rij, dus als je wilt
zoeken dat bestand echt het beste wat je kunt doen is lineair zoeken.
Je moet beginnen aan de top van het bestand, lees het hele ding in,
en zoek naar een zekere waarde van belang.
Als u wilt invoegen in het moet je hetzelfde doen,
itereren over het en het invoegen op een bepaalde plaats,
en in feite, moet u al het zoeken logica zelf doen.
>> Je kunt het niet slim patroon matching op een CSV-bestand, tenzij u zelf de code schrijven.
Je kunt niet doen filtratie van een CSV-bestand
tenzij u zelf de code schrijven.
Zou het niet mooi zijn als iemand anders zetten in alle van de inspanning
om daadwerkelijk het zoeken eenvoudig en gemakkelijk inbrengen
en verwijdering en het bijwerken enzovoort?
Dat is precies wat een database is.
SQL, Structured Query Language, is nog een andere taal
dat we hier introduceren vandaag, maar ook dit is vrij toegankelijk,
en wat we echt gaan doen is gewoon uit rukken van het aantal van de meest opvallende
kenmerken zodat voor PSET 7, en als je dat doet op basis iets web,
je laatste project, heb je de mogelijkheid om jezelf te uiten
op het gebied van data queries.
U de mogelijkheid om een ​​kleine winkel of veel data
in veel meer gestructureerd dat deze aan het eind van de dag
uw leven gemakkelijker maken, want met SQL je jezelf kan uitdrukken
veel nauwkeuriger, veel om methodisch
weer een subset van gegevens van een groter corpus van data.
>> U kunt denken aan een database, in dit geval, een SQL-database, echt als Excel
of getallen waarbij het is een spreadsheet,
of misschien meerdere spreadsheets, en een spreadsheet, natuurlijk,
bestaat uit rijen en kolommen, en dat komt omdat
SQL-databases zijn relationeel, relationeel in de zin
dat ze gegevens opslaan op het gebied van deze tabellen,
rijen en kolommen.
Ze zijn beter presterende dan iets als een spreadsheet,
en een spreadsheet is bedoeld voor gebruik door een mens.
Een database is bedoeld voor gebruik door een programmeur
het schrijven van code tegen, zodat de incarnatie van een database
gaat om ofwel command line zijn.
>> Een van de meest populaire relationele databases die er is, nogmaals, MySQL,
die heerlijk vrij, zeer hoge presterende, en dit is wat
Facebook gebruikt heel vroeg op en tot op zekere hoogte nog steeds
om veel van zijn gegevens op te slaan, en we zullen zien in een ogenblik
dat met relatief eenvoudige commando
kunnen we gegevens selecteren, invoegen van gegevens, update-gegevens,
verwijderen van gegevens en dergelijke, maar gelukkig is er een meer gebruiksvriendelijke interface
dan alleen maar te typen op een zwart-wit prompt hier.
We gebruiken voor PSET 7 en dan een gratis tool genaamd phpMyAdmin.
De naam is toeval.
De tool toevallig worden geïmplementeerd in PHP,
maar dat is fundamenteel niet relevant.
Wat is handig over phpMyAdmin is dat het een web-based programma.
We hebben vooraf geïnstalleerd in het apparaat voor u,
en daarmee kunt u tabellen in een database,
U kunt gegevens, gegevens wissen, en in het algemeen zien
uw gegevens in een vrij gebruiksvriendelijke omgeving.
Uw gebruikers zijn niet van plan om phpMyAdmin te gebruiken.
>> Dit is eigenlijk gewoon een administratieve of ontwikkelaar's tool
waarmee te zien en te porren rond uw gegevens en hoe te om het structureren achterhalen,
net zoals je jezelf zou kunnen gebruiken Excel of Numbers,
maar het gaat om een ​​geweldige manier om te visualiseren wat er onder de motorkap te
zodat u zich kunt concentreren op de interessante problemen op te lossen en niet zozeer
op de mysterieuze opdrachten.
Laten we eens een kijkje nemen op een voorbeeld van gegevens die tabularly kunnen worden opgeslagen
in een relationele database.
Hier is een voorbeeld van.
Nu, helaas, phpMyAdmin gedwaald aan de kant van het gooien van veel te veel woorden
en afbeeldingen naar je, maar als je gewoon slijpen op de
ID-kolom, de gebruikersnaam kolom en de hash kolom,
Dit is in feite een spreadsheet, maar het gebeurt te zijn een fragment
van een tabel binnenkant van het apparaat
met behulp van een bestand dat wij u voorzien van in probleem set 7.
>> In het bijzonder geven we u een bestand dat is
van een gebruiker tafel, dus een spreadsheet met gebruikers met 3 kolommen,
waarvan een unieke ID 1 begint en wordt daarna verhoogd.
De tweede kolom is een gebruikersnaam en degenen onder u die wel Hacker,
de Hacker editie voor PSET 2, Misschien herkent een aantal van deze gebruikersnamen op zijn minst.
Aan de rechterkant zijn wachtwoorden, maar ze zijn niet letterlijk wachtwoorden.
Ze zijn hashes daarvan, zo blijkt
dat het opslaan van wachtwoorden in een database is een heel slecht idee.
Jullie hebben allemaal kunnen lezen op een bepaald punt van een aantal website
of een bedrijf databank in gevaar wordt gebracht, en dan moet je
uw wachtwoord wijzigen, moet u restitutie krijgen op dingen
omdat sommige slechte kerel eigenlijk brak in uw account als gevolg.
>> Het opslaan van wachtwoorden in leesbare tekst, ongecodeerde in een database
is volledig stompzinnige, en toch is het zeer vermakelijk
vervolgens om te lezen over een aantal zeer gerenommeerde bedrijven
soms in de pers waarvan de databanken gecompromitteerd,
en dat deel is niet grappig, maar het feit dat de databases bevatten niet-versleutelde
wachtwoorden is belachelijk, want letterlijk met een regel code
je kan beschermen tegen die bepaalde dreiging, en dat is wat we hier hebben gedaan.
Zelfs voor onze nep kleine CS50 Financiën versie
we zijn het versleutelen van wachtwoorden gewoon voor een goede maatregel, en het feit dat
al deze wachtwoorden te beginnen met $ 1 $ is slechts een conventie.
Dat betekent gewoon dat ze gecodeerd of echt hashed,
die is als een one-way encryptie-functie
waarbij je niet naar achteren kunt de effecten ervan met iets genaamd MD5.
>> Aangezien 50 is daarna betekent dat een zout waarde
van 50 werd gebruikt voor hashing al deze wachtwoorden behalve een.
Mine, natuurlijk, zoals je daar kunt zien, HA,
was het gebruik van een ander zout, zodat degenen onder u die een beetje werd struikelen
misschien in Hacker 2, zou dat geweest zijn het resultaat van onze te hebben gebruikt
een andere hash dan de anderen, want mijn wachtwoord is eigenlijk hetzelfde
als een andere gebruiker daar.
In feite, als je hebt gewacht al die weken om uit te vinden
wat die wachtwoorden werden hier waren de wachtwoorden die u werden uitgedaagd
te kraken in de Hacker editie van het probleem set 2, dus niet al te lastig.
In feite Malans was hetzelfde als jharvard,
maar als we terug gaan ze er anders uitzagen.
>> Focus op jharvard in karmozijnrood, omdat ze anders werden gezouten.
Het algoritme werd verstoord op een manier die de
hash-waarde, de versleutelde waarde gaat een beetje anders
omdat de ingangen waren iets anders, maar het wachtwoord onder de motorkap
was nog steeds uiteindelijk crimson.
Nu, die geeft om dit?
Nou, we zijn u te voorzien van het monster gebruikers, het monster gebruikersnamen
en hashes van hun wachtwoorden, zodat je eigenlijk een aantal
klanten voor CS50 Financiën als u voor het eerst de grond te krijgen met uw code.
Je moet meer tabellen implementeren binnenkant van MySQL, de binnenkant van de database.
Je moet meer spreadsheets te maken, effectief, maar we besloten om u deze
om mee te beginnen, en je zult zien dat het probleem set specificatie
loopt u door het proces van het importeren van deze tabel
en ook uit te leggen wat een aantal van de kenmerken,
en je zult ook zien dat we u voorzien van de code
aan de hashing of de codering van deze wachtwoorden te behandelen,
dus je hoeft niet al te veel zorgen te maken over wat MD5 of iets dergelijks is eigenlijk allemaal om draait.
>> Dus, SQL, Structured Query Language.
Dit is, heel eenvoudig, de taal die we staan ​​op het punt om met behulp van start in PSET 7
en misschien daarbuiten om gegevens uit een database aan te vragen.
De gegevens worden, nogmaals, tabularly opgeslagen in deze relationele tabellen, kolommen en rijen,
maar met behulp van enkele relatief eenvoudige syntax als verwijder,
invoegen, bijwerken en selecteer kunnen we doen precies dat.
We kunnen verwijderen uit de database, invoegen,
gegevens te wijzigen, evenals select, dat wil zeggen, gegevens ophalen uit de database.
Hoe gaan we dat doen?
Laat me gaan in het apparaat.
Laat me pull up http://localhost,
die weer is het lokale apparaat zelf.
Dat is de standaard bijnaam.
En laat mij gaan naar / phpmyadmin.
Dit gebeurt om een ​​speciale URL dat het apparaat is vooraf geconfigureerd om te begrijpen
dat vraagt ​​me meteen voor een gebruikersnaam en wachtwoord.
>> Zoals gewoonlijk, ik ga jharvard en karmozijn typen,
maar beseffen dat is de Administrator-account op de computer.
Het is gewoon toeval dat er ook een jharvard geregistreerd voor CS50 Financiën.
Jharvard, karmozijnrood, enter geeft mij de user interface die we zagen
een glimp van een moment geleden, en het is een beetje overweldigend op het eerste,
maar wees gerust, je bent nooit te hebben om de meeste van de links klikt in deze tool.
Je zult uiteindelijk met behulp van een kleine subset die zijn super vriendelijk,
waarvan de eerste is databases hier.
Als ik tot databanken, merken dat ik gevraagd om een ​​database te maken.
Dit is zoals het maken van een nieuw Excel-bestand, effectief.
Ik ga om verder te gaan en deze lezing te bellen, en ik ga gewoon naar het veld daar, collatie negeren.
Het heeft te maken met daarin het weergeven van gegevens,
en ik ga om te klikken te maken, en nu merk als ik loslaat creëren
aan de linkerkant waar het zegt geen databases
Ik moet binnenkort de lezing database.
>> Als ik nu klik op de linkerkant, de lezing database,
merkt mijn tabbladen veranderen een beetje.
Ik heb structuur, SQL, export, import en enkele andere dingen.
Structuur is vrij veel leeg.
Geen tabellen gevonden in de database, zoals hier staat,
dus laten we een tabel maken, en laten we verder gaan en een tabel maken
zoals studenten, en hoeveel kolommen willen we?
Laten we dit eenvoudig, en laten we record voor elke student
een ID-nummer, een naam, en een e-mailadres.
>> We zullen het simpel te houden als dat, dus 3 kolommen, gaan.
Het formulier dat u hier ziet is nu een beetje rommelig en overweldigend,
maar we moeten er doorheen rij gaan rij, dus echt snel laten we
de eerste kolom in deze database een naam van ID voor de unieke identificatie.
Het een integer is. Ik kan eigenlijk negeren lengte en waarden.
Een int gaat worden 32 bits niet uit wat je typt daar, dus laten we deze leeg laten.
Standaardwaarde, kon ik het null, zoals gedefinieerd.
Ik ga dat met rust te laten. Laten we niet zorgen te maken over de standaardwaarden.
Laten we scrollen hier naar rechts, attributen.
Dit is interessant.
Laten we verder gaan en enigszins willekeurig zeggen dat ID's moeten ondertekend zijn.
Laten we er geen gras over negatieve getallen.
>> Laten we 0 tot 4 miljard, geven of te nemen,
en dan laten we niet een van deze velden te raken gewoon nog niet daar,
maar dan laat ik typ in de naam van hier beneden,
en dan de andere email is, zodat de vangst email is
en naam, natuurlijk niet gehele getallen, dus laten we deze veranderen naar een ander veld.
Het blijkt varchar, variabele lengte char,
is als een string in een SQL-database
maar een variabele lengte, en je eigenlijk moet het hem vertellen van te voren de
maximale lengte van de string, dus ik ga enigszins arbitrair
volgens afspraak soort 255 tekens.
Ik kon helemaal zeggen 32. Ik zou kunnen zeggen 1.000.
Je gebaseerd soort van behoefte om te beslissen voor jezelf op je demografische wat
de langste leerling de naam en ga met dat nummer of een beetje groter,
maar wat er leuk is aan een varchar is dat het niet gaat om afval
255 bytes op de naam van iedere student.
Als het DAVID dat het niet gaat om een ​​hele 255 bytes gebruiken,
maar dat is een bovengrens, dus ik zal met 255 gaan gewoon volgens afspraak,
maar we konden debatteren dat om wat lagere waarde zijn, en voor e-mail adres
alleen maar om consequent 255, maar nogmaals, we kunnen dezelfde debat.
Maar ik ga nog iets doen hier aan de rechter kant.
>> Wat is krachtig over een database is dat het kan doen een heleboel zwaar tillen
of complexe werk voor u.
In het bijzonder, heb ik echt niet schelen wat mijn student ID-nummers zijn.
Het is gewoon bedoeld als een unieke identificatie in een database worden
dus ik heb een 32-bits beknopte weergave van die student
zodat ik een of andere manier van uniek om ze te identificeren
opdat er 2 Davids, bijvoorbeeld in een klas.
In feite, ik ga deze AI box, auto increment controleren,
zodat de database, MySQL, cijfers uit
wat elke nieuw geplaatste student ID gaat worden.
Ik weet niet eens zorgen te maken over die zorg in mijn code,
en ik ga ook iets kiezen onder de index menu.
De index hier drop-down is primair, unieke,
index en de volledige tekst.
U kunt misschien raden wat een paar van deze dingen zijn,
maar het blijkt in relationele databases
u de programmeur of de databasebeheerder krijgen om preventief
geven tips om de database over wat velden
in een tabel zijn een beetje speciaal.
>> Bijvoorbeeld, in dit geval ga ik dat ID zeggen
wordt een primaire index, ook wel bekend als primaire sleutel.
Wat dit betekent per definitie dat ID voortaan
zal uniek te identificeren studenten in deze tabel.
Geen student zal dezelfde ID hebben, want ik ben opleggen van deze beperking of deze index.
Bovendien, wat deze gaat doen voor mij is dat het gaat vertellen
MySQL dat ID is bijzonder.
Ik geef in het bijzonder over ID, dus ga je gang en doe je mooie datastructuur's magie,
bouwen een soort boom.
Typisch het is iets genaamd de B-boom, die we niet geleden te kijken naar weken,
maar het is een andere dergelijke datastructuur in dezelfde geest aan de binaire bomen
en probeert die we bekeken, maar het gaat om te zeggen
aan de database dit veld is zo belangrijk dat ik waarschijnlijk
willen kunnen zoeken op het, ga je gang en bouwen een aantal mooie
datastructuur in het geheugen om zoekopdrachten te versnellen, zodat idealiter
ze zijn constante tijd of in ieder geval zo dicht mogelijk bij die mogelijk
zodat het niet evolueren in lineair zoeken, dat niet zal worden
de meest high performing aanpak.
Daarentegen kan e-mail adres zijn een primaire sleutel.
>> In theorie ieders e-mailadres is uniek, tenzij je enigszins rekening te delen,
maar het is over het algemeen niet goed te gebruiken iets als een string
als primaire sleutel, want als zijn doel in het leven is voor de unieke identificatie
rijen in de tabel is er geen reden om maximaal te gebruiken 255 bytes
voor de unieke identificatie iemand als je weg kan komen met slechts 4 bytes
of een 32-bits int.
In het algemeen moet een primaire sleutel kort en bondig
en idealiter iets als een geheel getal of een grote int, die toevallig ook 64 bits.
Maar een e-mailadres moet uniek zijn, en een van de kenmerken van een database te
is om uniciteit af te dwingen voor mij.
Door het selecteren van unieke hier naast e-mail, ook al is e-mail zelf
wordt het scherm rolde, ik zeg tot de database
vertrouwt me niet.
Laat me niet invoegen in de database
hetzelfde e-mailadres twee keer, ook al ben ik een idioot en ik ben niet
heel goed met mijn mitsen en anders mitsen en werkelijke PHP-code
en ik per ongeluk laat de gebruiker zich registreert bij een bestaand e-mailadres
de database is nog een ander niveau van de verdediging op juistheid
om ervoor te zorgen dat die dubbele e-mailadres niet eindigen in de tabel.
>> Nu, daarentegen, naar de naam van je waarschijnlijk niet wilt dat uniek maken
want dan zou er nooit twee Davids of 2 Mike Smiths, bijvoorbeeld,
in uw database, zodat men we gewoon met rust laten.
Ik ga om verder te gaan en op te slaan onderaan klik met de rechtermuisknop,
en alles ziet er goed uit, maar hier merken up
Dit is een onderdeel dat voor nu zullen we niet te veel tijd te besteden aan
omdat de syntax is een beetje ingewikkeld, en we hebben niet om tabellen te maken
zo vaak, maar SQL zelf is een taal,
de syntaxis voor wat recht is hier dat ik heb gemarkeerd.
Wat phpMyAdmin echt doet is het creëert een web-based GUI voor u
waarmee u tijd besparen en niet handmatig hoeft te typen uit
een vrij lange SQL-query als dat.
>> Met andere woorden, als je wilde het handmatig maken van deze tabel,
hetzij op die zwarte en witte prompt of zelfs in phpMyAdmin
door het gebruik van deze andere tab, deze SQL-tabblad waar u kunt typen in een SQL-query's
je wilt, eerlijk gezegd, dit zou hebben genomen me een minuut
om daadwerkelijk herinner me de hele syntax, en zelfs dan zou ik waarschijnlijk hebben
maakte een aantal typefouten, dus deze tool is handig voor dat soort dingen, en het is ook leerzaam.
U kunt beginnen af ​​te leiden wat de syntax is
alleen door de mooie kleur codering die phpMyAdmin is het toevoegen van
voor onze visuele comfort.
Maar nu laten we dit doen in plaats daarvan.
Laat me naar het tabblad Invoegen boven, en laat mij ga je gang en steek bijvoorbeeld
een ID van laten we zeggen-eigenlijk kan me niet schelen.
Het gaat om auto increment. Ik ga naar de database deal laat met deze.
Maar ik zal David, en mijn e-mail moeten worden malan@harvard.edu.
>> Laten we hier ga je gang en zet in Mike Smith als een andere.
Ik geef mezelf een achternaam als goed,
en we zullen hem hebben zijn smith@example.com,
en dan waar moet ik heen?
Nou, het lijkt erop dat go is de knop te klikken, en voila.
Let op de top geplaatst 2 rijen.
Dit is de daadwerkelijke SQL-query.
Dat is de phpMyAdmin instrument uitgevoerd voor mij,
maar het eindresultaat, let op, als ik nu naar het tabblad Bladeren,
is om 2 rijen te zien in deze tabel, sterk denken esthetisch
van de tafel zagen we eerder voor onze gebruikers uit PSET 7,
een van hen is David Malan, van wie er nu is Mike Smith.
Maar om duidelijk te zijn, ik heb geen phpMyAdmin hoeft te gebruiken,
en inderdaad, je gaat binnenkort schrijven van code voor PSET 7
dat automatiseert het proces van het toevoegen van rijen, verwijderen van rijen, het bijwerken van rijen en dergelijke,
dus laat me in plaats daarvan naar de SQL tab hier
en typ in select * from studenten waar
email = "malan@harvard.edu."
>> Met andere woorden: stel nu heb je
sommige HTML-formulier, en de gebruiker typt in hun e-mail adres, onder andere gebieden,
en het doel is nu in PHP op de back-end code
om daadwerkelijk zoeken van die gebruiker andere details.
Wat is uw volledige naam? Wat is uw ID-nummer?
Je kon een SQL-query als deze schrijven, selecteert u * van studenten
waar e-mail = "malan@harvard.edu."
En als ik klik op ga, merk dat ik inderdaad en ik, terug slechts een rij.
Mike is weggelaten uit dit resultaat set, als de verzameling van rijen
wordt over het algemeen genoemd, omdat hij niet dezelfde e-mail-adres hebben als ik.
>> Nu, nogmaals, hier voor PSET 7 u gebruikt phpMyAdmin als administratief hulpmiddel
en een pedagogisch instrument om je weg te leren
wereldwijd van SQL, maar aan het eind van de dag
je gaat worden het schrijven van deze vragen binnen van de werkelijke PHP-code,
en dus stay tuned in walkthrough Zamyla's in het bijzonder
waar krijg je een rondleiding door de verdeelsleutel voor dit probleem set
waar we hebben u niet alleen de esthetiek voor de login pagina
en de mooie sexy logo dat CS50 Financiën zegt, maar we hebben ook gegeven
een aantal functies die ervoor zorgt dat uw leven een stuk makkelijker.
We hebben ook schriftelijke gedeelte van het PSET voor u,
de login deel ervan in het bijzonder, om u een gevoel van een representatieve vormgeving
dat gebruikt namelijk controller bijvoorbeeld index.php,
login.php en dergelijke, en dan zie je de PSET ook een templates directory
dat alle van de weergaven, alle esthetiek.
En dus is de totale workflow in PSET 7 zal zijn dat
uw gebruikers bezoeken een controller via een URL in een browser.
Die controller bevat PHP-code die je hebt geschreven, en de binnenkant van uw PHP-code
kunnen sommige lijnen van SQL worden genest in tussen dubbele aanhalingstekens
en doorgegeven aan een functie schreven we geroepen vraag
dat zal je praat met de database te helpen zonder het gebruik van iets als
een administratieve tool zoals phpMyAdmin.
>> Je zult in staat zijn om SQL-statements in PHP code te schrijven
en terug te krijgen een PHP array van het resultaat set,
van de rijen die daadwerkelijk overeenkomen met die zoekopdracht.
En evenzo zult u in staat om te inzetstukken of verwijdert te doen
of updates of iets dergelijks, de syntaxis voor die redelijk vergelijkbaar,
en je zult zien van een aantal online referenties, van de verdeelsleutel
en verpakken van de PSET zelf precies hoe om te gaan doen dat.
Realiseer uiteindelijk we echt alleen het oppervlak van SQL krassen
en van MySQL, maar de kracht van het is echt dat het je bevrijdt
zich te richten op de problemen die u wilt oplossen, de use cases u wilt implementeren
zonder dat u net zo veel zorgen te maken, in ieder geval vroeg op,
over waar en hoe op te slaan en zoek uw database,
en dit is letterlijk waar Facebook zelf is begonnen
met behulp van MySQL en vervolgens met behulp van meer MySQL servers en vervolgens meer MySQL servers
het duurde niet lang totdat ze vervolgens moesten echt beginnen hard nadenken over hoe je
opslaan van gegevens, hoe je dingen op te slaan nog efficiënter,
dus ook al nemen we voor lief dat indexen en unieke beperkingen
enzovoort gewoon werken is er een zeer interessant gesprek
dat dit kan allemaal uiteindelijk leiden tot, dus beseffen dat we nog maar net de oppervlakte krabben
van wat zou uiteindelijk voor u of uw projecten worden heel wat grote data.
>> Met dat gezegd, laten we hier stoppen, en we zien jullie volgende week.
[CS50.TV]