>> [Muziek]
DAVID J. MALAN: Oké.
Welkom terug.
Dit is CS50.
Dit is het einde van week 8.
En zoals u weet, hebben we vrij reguliere kantooruren in een paar
van de eetzalen, inclusief Annenberg.
En een aantal van het team vriendelijk nam een ​​aantal foto's de laatste tijd.
En ter ere van Halloween, we dachten dat we zouden
een die eerder gevangen ons door te delen verrassing hier in Annenberg Hall net
de andere nacht.
Uw klasgenoot Jacob poseerde voor deze foto, maar was meer amusant
was op Facebook, de daaruit voortvloeiende gesprek dat daarna gebeurde.
>> Zijn eerste post in reactie om zijn foto was dit.
Een paar minuten later, besloot hij één up zich met dit.
Het ging toen om naar deze, en dan, nog meer vermakelijk
is wanneer zijn moeder viel hem bij.
En dan uiteindelijk, lijkt dit was gewoon
een prachtige list voor een spelen die gaande is.
>> Dus, als je zou willen Jakob en anderen te zien,
onder hen Cynthia Meng, die is achter de schermen van CS50 zone personeel,
ga naar de volgende URL en dit stuk hier.
Dus zonder verder oponthoud, vandaag hebben we blijven deze blik op web programmeren,
en de feitelijke totstandkoming van programma's die niet draaien op je command line,
maar draaien binnen een browser.
>> Vermoedelijk nu of zeer kort, je gaat
te zijn in het midden van de uitvoering uw eigen webserver, die
verschilt van web programmeren.
De webserver in pset6 is alles over het schrijven van software die weet hoe te nemen
HTTP verzoeken van een browser, of zelfs van u, een mens,
met een programma genaamd Telnet, en dan reageren op deze verzoeken, hetzij
door uitspugen een HTML-bestand, of een jpeg of gif, of zelfs een .php bestand.
>> Maar met een webserver, is het niet verondersteld om gewoon open een PHP-bestand,
iets eindigend in php, en dan spugen de inhoud.
Het hoort te doen wat naar dat bestand eerst?
Zo te zeggen.
Niet compileren, zeiden we op maandag, maar rather-- Dus, interpreteren.
>> PHP is een geïnterpreteerde taal, en dus een van de belangrijkste functies in uw web
server, zij het uitgevoerd door ons, is dit vermogen voor uw webserver
op te merken, oh.
Dit is een bestand dat eindigt op .php.
Laat me niet alleen op te sturen naar de gebruiker alsof het statische content,
maar laat me lezen lijn door lijn, van links naar rechts, en interpreteren.
>> En te doen, dat je jongens zullen wezen
punter om een ​​programma in het toestel, en op een terrein van computer systemen,
belde net PHP.
Dat is de naam van de PHP eigen tolk taal's.
Zo, dat stuk implementeren we voor u, en wat er over is voor u,
Uiteindelijk, is een aantal van stukken, waaronder
implementeert ondersteuning voor statische inhoud.
>> Maar nu, en probleem stelde zeven, je bent
zal gaan overgang naar eigenlijk het schrijven van de PHP-code
dat wordt geïnterpreteerd in gesprek met een back-end
database die informatie opslaat.
Dus laten we beter eerst begrijpen een paar van deze superglobals
en hoeveel macht je uit de box gratis
met een taal zoals PHP.
Dingen die je niet hebt om jezelf te implementeren.
>> Dus, we zagen op maandag $ _GET, die een superglobal,
die net PHP is spreken voor een globale variabele kunt u overal toegang.
En wat er in zit van $ _GET?
Wat is de binnenkant van deze superglobal die we zien?
Zeker statistisch bij minste één persoon weet.
Wat zit er in van $ _GET?
Yeah?
>> Publiek: Het is de variabelen je in de query string.
>> DAVID J. MALAN: Perfect.
Het is de variabelen die u zet in de query string.
Dus, in onze oudere voorbeeld reimplementing Google als we hadden
een URL, en dan vraagteken, die het begin van HTTP bakent
parameters, dan hadden we q gelijk iets, als q gelijk aan katten,
wat zou automatisch naar binnen gaan van die $ _GET super global voor u,
door PHP, is een sleutel van Q, en van de waarde daarvan van katten.
>> Met andere woorden, $ _GET en alle deze dingen zijn associatieve arrays,
hash tabellen van soorten, dat store sleutels en waarden.
Nu, terug in pset5, de hash tafel je zou hebben geïmplementeerd,
of probeer je zou hebben geïmplementeerd, echt
was effectief een associatieve array, een datastructuur
waarbij u kunt associëren toetsen met waarden.
>> Maar in pset5, waren de waarden triviaal.
De waarde was in wezen waar of onwaar.
Is het woord in het woordenboek?
Dus, als je een woord als appel hash om te zien of appel is in het woordenboek,
uw controlefunctie vermoedelijk teruggekeerd waar of onwaar.
Dus, dat is in feite de waarde krijgen we terug.
>> Maar we zagen op maandag kort, kunt u zeker
associëren interessanter waarden dan waar of onwaar
met sleutels, zoals appel.
Je zou eigenlijk terug een willekeurige reeks tekens, en inderdaad,
dat is wat $ _GET en deze andere variabelen laten doen.
>> Dus $ _POST is vergelijkbaar in de geest, maar als je een formulier via post,
een andere methode die het HTTP gebruikt voor dingen zoals credit cards,
en prive-informatie, en zelfs binaire informatie zoals foto's,
die dingen uiteindelijk binnenkant van $ _POST.
En eigenlijk voor bestanden zoals JPEG's en wat al niet,
er is zelfs een ander dat is niet hier genoemd $ _FILES ook.
>> Dus, server zullen we niet te blijven stilstaan ​​bij veel, maar het geeft je toegang
voor het sorteren van lager niveau details over de server zelf die u gebruikt.
Cookie en sessie, hoewel, zullen we effectief zien nu.
De laatste is wat we gebruiken om te implementeren de notie van een winkelwagentje.
Een super eenvoudig, maar recall dat we dit voorbeeld hier,
tellen hoe vaak je had deze pagina eerder bezocht.
>> Maar vandaag de dag, in plaats van alleen te kijken naar het effect van deze, laten we open te stellen
Chrome Inspector, die kun je meestal
doen door rechts te klikken of Ctrl klikken ergens op een webpagina,
en kies vervolgens inspecteren element.
Of u kunt gaan door de menu's dat we beschrijven in spec pset6's.
En ik ga naar het tabblad Netwerk hier, en laten we kijken voor een moment
het HTTP-verkeer dat is heen en weer.
>> Laat ik eerst ga je gang en cache duidelijk Chrome.
Dus sommigen van jullie misschien bekend zijn met deze techniek al,
en we gaan om het te gebruiken voor het opsporen van fouten hier.
Nu wij als computer wetenschappers gaan beginnen
dit voor het debuggen doen doeleinden, waarbij
zullen we de cache te wissen, typisch, zodat we
kan ontdoen van de dingen genoemd cookies.
Dus je bent waarschijnlijk algemeen bekend wat cookies zijn, of althans
dat ze bestaan, maar wat is uw begrip van hen,
als slechts een gebruiker van computers, wat is een cookie?
Yeah.
>> Publiek: Het is een beetje van-- goed, niet beetje in een term van de informatica.
Het is een stukje data dat een website stuurt aan u om
om statistieken kunnen opnemen op je.
DAVID J. MALAN: OK, goed.
Dus het is een stukje data dat een server, zet op uw computer,
en laten we generaliseren het zelfs meer, het is een belangrijke value-- goed,
dat wordt steeds nauwkeuriger.
Het is een fluitje van een informatie, een stuk van de gegevens,
dat een server kan op uw computer te zetten
en heel vaak de server doet dit om zo te herinneren wie je bent.
Dus bijvoorbeeld, kansen bent u waarschijnlijk bent
aangemeld bij sites als Facebook, of Gmail, of anderen voor,
en je in te loggen met uw gebruikersnaam en wachtwoord,
en dan na dat, gedurende een aantal van minuten of uren of zelfs dagen,
de server herinnert zich dat je in feite ingelogd.
Nu, hoe is dat daadwerkelijk gebeurt?
Omdat je zeker niet overtypen uw gebruikersnaam en wachtwoord elke keer
u navigeren naar een verschillende pagina op Facebook.
Dus het blijkt dat de cookies zijn het antwoord.
>> Een cookie kunt u zien als, Een beetje zoals een digitale kant
stempel dat je zou kunnen krijgen bij een pretpark park of een club die in wezen
geeft aan dat u hier geweest voor, en je hebt al
getoond je ID aan de uitsmijter, voor Zo, en dat de club of het park
moet nu aan dat u al geverifieerd.
Je hebt al geïdentificeerd door haar.
>> Dus met dat in het achterhoofd, laten we openstellen teller hier.
Laat me ga je gang, ik deed gewoon, en verwijder alle van mijn cookies.
En nu, wat ik ga doen is Houd Shift, gewoon voor een goede maatregel,
en onder dwang de pagina geladen is.
Shift maar zorg ervoor dat er niets wordt gecached.
En hier is het verzoek dat ging heen en weer.
Dus hier hebben we een verzoek hebben, en laat me in te zoomen naar beneden hier, en veel van deze
is een soort van oninteressante informatie voor nu dat de browser automatisch
gezonden, maar laten we klik op Beeld Bron om de ruwe headers zien.
>> En als je hebt dook pset6 al, u zult zeker dingen herkennen
als dit, en misschien nog enkele van deze andere lijnen hier,
maar wat is interessanter voor vandaag als ik naar beneden scrollen, niet op het verzoek
maar de zogenaamde response, deze lijn ziet er waarschijnlijk bekend.
Dat is een goede zaak als je een 200 OK.
Blijkbaar is de datum en tijd op de server
en er is een heleboel dingen.
Oh, dit is interessant.
>> Blijkt dat wanneer u gebruik PHP, althans in deze server,
de server spuugt wat versie van PHP die u gebruikt.
Die, in feite, voor de veiligheid doeleinden, is geen goede zaak.
Maar, zullen we hierop terugkomen een andere keer misschien.
Maar nu is dit het sappige lijn vandaag, en we zagen in het kort een aantal van deze,
Ik denk dat met Facebook als we prikte rond de inspecteur op dat moment,
set cookie is wat is het planten dat kleine stukje informatie
op uw computer.
>> Dit is een HTTP-header dat is effectief
het vertellen van uw browser, Chrome, IE, wat dan ook,
hey browser winkel aan de gebruiker harde schijf of in het RAM van de gebruiker,
een sleutel genaamd PHPSESSID, die een korte notatie voor de sessie-ID,
en geef het een waarde van 0vlk8t, puntje, puntje, puntje.
Een hele lange pseudo willekeurige alfanumerieke string.
Het is gewoon een heel groot getal, maar het is gecodeerd met letters en cijfers
zodat de grootte ervan kan worden zelfs groter dan cijfers alleen.
En dan, door de manier, Path = /, dat betekent gewoon dat deze cookie zou moeten zijn
verbonden met de geheel van de website,
niet alleen een bepaalde pagina van de hele zaak.
Dus dit is die virtuele kant stempel.
Het is alsof de server, Facebook, of in ons geval het apparaat,
heeft letterlijk geschreven 0vlk8t enzovoort, op uw hand.
Let op wat de server, niet doen, is het niet
het opslaan van mijn gebruikersnaam, zeker mijn wachtwoord niet opslaan.
>> In plaats daarvan lijkt opslaan van pseudo-willekeurige informatie
zodat niemand kan raden wat mijn hand stempel is.
Aan de server kant, ondertussen, de server
zal herinneren, waarschijnlijk in een database of iets,
dat de gebruiker, die in de toekomst presenteert een hand stempel van 0vlk8t, dot,
dot, dot, moet worden geassocieerd met deze bijzonder winkelwagentje, om zo te zeggen.
Met andere woorden, als ik nu ga hier terug en laad deze pagina,
hoe werkt de server weet dat ik bezocht een keer?
>> Of als ik het opnieuw doen, hoe werkt de server weet dat ik het twee keer heb bezocht?
Nou als ik naar beneden om deze laatste verzoek, dat
is nu de derde die ik heb gestuurd in totaal, merk nu mijn verzoek.
Er is nog steeds vragen hier, dezelfde
als voorheen, is er nog een hele hoop van dingen die we hebben genegeerd als voorheen,
maar de allerlaatste header, deze tijd, omdat ik hier al eerder bent geweest,
is een presentatie van deze virtuele kant stempel.
>> Waarbij deze lijn hier, niet ingesteld cookies maar de cookie colon PHPSESSI = 0vlk8t,
dat is gewoon mijn browser automatisch presentatie van deze hand stempel zodat
Nu de server, zodra het beseft, ooh, dit is gebruiker 0vlk8t dot, dot, dot,
Ik kan nu herinneren wie hij of zij is en reassociëren met die gebruiker wat
informatie die ik wil, en al dat informatie kan worden opgeslagen door u,
de programmeur, in $ _SESSION.
>> Dus om duidelijk te zijn, als ik het openstellen echt snel in gedit dat werkelijke bestand, counter.php,
in mijn lokale host openbare gids als voorheen, merken dat inderdaad
Ik ben uiteindelijk het opslaan in $ _SESSION Citaat unquote "teller"
de waarde van de vorige teller die Ik krijg van deze lijnen hier dat we
keek vorige keer plus één.
Dus onder de motorkap, dat is alles wat cookies zijn.
Het is precies het soort van digitale handstempel heen en weer,
en eerlijk gezegd als je openen Chrome Inspecteur op een andere website
u vandaag bezoekt, met super hoge waarschijnlijkheid,
je gaat misschien een te zien, misschien een half dozijn cookies
wordt herinnerd door jou.
>> En erger nog, als die website die u bezoekt
hebben reclame, die is zeker heel gewoon vandaag,
en als die advertenties komen eraan van enkele centrale partij, iemand
zoals Google of AdWords als ze bel een van hun producten
of die andere leveranciers die verkopen advertenties, wat interessant,
en eerlijk gezegd wat is een beetje zorgelijk, over hoe HTTP werkt,
is dat als je een advertentie ingebed in Facebook.com en Google.com,
en Harvard.edu, elk nummer van websites, dus het is een dergelijke
dat er een middelbare man die dienst doet up advertenties voor alle drie van die websites,
het blijkt dat de koekjes zijn per domein.
>> Dus als je een advertentie uit de dezelfde onderneming op verschillende websites,
dat bedrijf effectief kan bijhouden wie u bent op al die websites.
Harvard misschien niet weet je een bezoek aan Facebook.
Facebook misschien niet weet en je een bezoek aan Harvard.
Maar wat advertentie-service ze gebruiken als dat domein
aanwezig in zowel Harvard.edu web pagina's en Facebook.com webpagina's,
deze middelste man weet toch wie je bent omdat van deze cookies worden gedeeld
over, veelmeer, die zogenaamde tussenpersoon.
>> Dus zullen we hierop terugkomen in security implicaties daarvan,
maar er is een hoop informatie wordt opgeslagen over u wanneer u maar
bezoeken de meeste elke webpagina op het internet en het is echt
vermindert dit zeer eenvoudig mechanisme.
Wat gebeurt, dan, indien je bent super paranoïde
en je besluit in Chrome of IE te gaan of wat dan ook en je cookies uitschakelen?
Wat gebeurt er?
Yeah?
Je really-- je dit recht hebt gedaan?
OK.
Nee, ga je gang.
>> Publiek: Bepaalde websites niet hebben een functie zonder dat het leuk Facebook.
DAVID J. MALAN: Yeah!
Dus bepaalde websites zal gewoon stoppen met werken.
En in de meeste websites deze dagen die fundamenteel afhankelijk cookies,
vooral als ze je inlogt in, zijn ze gewoon gaan breken.
Omdat rekening houden met de alternatief, indien de website
heeft geen manier om te herinneren wie je bent, en dus uw webbrowser is niet
die bij elke HTTP verzoek van deze hand-stempel,
effectief een website zoals Facebook's going
u te moeten vragen om log in elke darn tijd
je pagina's te wijzigen, of klik op een link, die is zeker niet een bijzonder goede user
ervaring.
>> Zodat ook daar is onder de trade offs.
Dus zonder verder oponthoud, laten we eens vanzelfsprekend dat met web programmeren,
in talen als PHP, kunt u zich herinneren informatie zoals die in probleem stellen
zeven wanneer u uw eigen implementeren E * Trade-achtige website met die te kopen
en verkopen van aandelen, dan heb je precies herinneren wat de gebruiker heeft gekocht en verkocht
en die hij of zij via deze sessie.
Maar we gaan nodig hebben een liefhebber manier dan e-mail
te gaan houden informatie rond.
Right?
>> Op maandag hebben we gesproken over Frosh IMs en hoe in versie één van die website,
jaar geleden, alles wat we deden was e-mail de Proctor who's
die verantwoordelijk is voor de intramurale sport programma, de naam en het geslacht,
en of ze een kapitein, en de slaapzaal van iemand die
registreren voor een intramurale sport.
Dus het is niet slecht, maar hij of zij dan moesten troll via hun e-mail,
maak een spreadsheet of iets dergelijks dat, om alles georganiseerd te houden.
Dus zeker wij als programmeurs kan dit voor die Proctor doen.
En dus vul in SQL, Structured Query Language,
die gaat mooi te kijken verschillende zowel C en PHP,
en je zult op te duiken in veel meer handen PHP en probleem stelde zeven, maar ook SQL,
of SQL, dit is een taal die u gebruikt om een ​​database te praten.
>> Maar wat is een database?
Nou je denken aan een databank, althans voor nu,
zo gewoon als een Excel-bestand, of als je een Mac-gebruiker een aantal bestand bent,
of als je een Google Apps gebruiker een Google spreadsheet,
het is in feite een database of echt bijzonder een relationele database.
Een relationele database is gewoon iets rijen en kolommen,
en je kunt elke vorm van slaan informatie in deze rijen of kolommen.
>> Maar wat is er leuk aan SQL, en over actuele databases, niet alleen
spreadsheets of Google spreadsheets, is dat je een taal kunt gebruiken
om daadwerkelijk queries uit te voeren om Gegevens invoegen, om gegevens te verwijderen,
zoeken naar gegevens, zelfs het belangrijkst, en je
hoeft niet het vrij handmatig gebruik zoals je misschien meestal een Google
spreadsheet als deze.
>> Dus in SQL, er is een heleboel fundamentele verklaringen of stukken
functionaliteit ingebouwd.
Er is veel meer dan deze, maar u kunt gaan een enorme afstand
gewoon door te weten dat deze taal genoemd
SQL ten minste vier uitspraken kun je benutten.
>> Verwijderen, voor het verwijderen van gegevens, Plaatst, voor het toevoegen van rijen,
Update, voor het veranderen rijen, en het selecteren,
voor het krijgen van terug rijen en dat is inderdaad wat SQL doet.
Het werkt volledig op rijen dus dat wanneer je plaatst of verwijdert,
of bij te werken, of selecteer wat je bent terug te krijgen als een zogenaamd resultaat set,
als een array van rijen.
Een bos van rijen uit een tabel.
>> Dus terug in de dag, en zelfs tot op de dag,
u kunt communiceren met de database met behulp van een opdrachtregel,
maar het is niet bijzonder leuk om te gebruiken deze zwart-witte stijl venster
en daadwerkelijk uit te voeren commando en snuffel rond in uw database.
Een grafische user interface, of GUI, is veel meer de voorkeur, misschien wel,
en dus het gereedschap dat we aanbevelen en voorgeïnstalleerd voor u het apparaat in
heet phpMyAdmin.
Het is een totale toeval dat de naam van dit ding heeft PHP in het,
het betekent gewoon dat de mensen die schreef dit programma zelf
schreef het in PHP.
>> Maar het gaat uiteindelijk over het beheren van een database server, zoals een MySQL server
dat u zou kunnen hebben, zoals u doen, in de CS50 apparaat.
Dus er is hier meer detail dan we nodig hebben om de zorg over vandaag,
maar wat is de belangrijkste is dat aan de linkerkant kant is een lijst van de databases
dat je op je computer, op uw CS50 apparaat,
of kom laatste projecten die je misschien hebben op een derde, van een bedrijf
website of webserver, dat je zou moeten betalen voor de ruimte.
Dus aan de linkerkant is de databases, waarvan
is pset7 die ik geleend van volgende weken PSET, en dan op de top
er merken is er een stel lippen, waarvan
is databases, SQL, status gebruikers, export enzovoort.
Dus je kunt gaan een lange manier gewoon door het realiseren van
dat de meeste gebruikersinterface is in de linker kolom
en aan de bovenkant recht daar.
Dus wat kunnen we eigenlijk doen met dit?
Nou, laten we beginnen met het maken van een stukje informatie als volgt.
>> Stel dat het volgende het geval, zoals zal in slechts een paar dagen,
u wilt uitvoeren van een website, genaamd CS50 Financiën,
en deze website kunt u kopen citeer unquote en verkopen voorraden.
En het gaat om erachter te komen de prijs van die aandelen,
uiteindelijk zoals u zult zien, door te praten met Yahoo Finance.
Die, heerlijk, heeft een gratis dienst waarbij u kunt passeren in een ticker
zoals GOOG voor Google, en het zal geven u terug actuele voorraad van Google
prijs in het verleden paar minuten op zijn minst.
>> Dus je zult gebruiken dat, uiteindelijk, om te doen alsof voor de gebruiker
te kopen en te verkopen werkelijke voorraden met behulp van virtueel geld,
maar het allereerste wat de gebruiker gaat zien
is dit inlogscherm die hen vraagt voor hun gebruikersnaam en wachtwoord.
Dus, één van de eerste uitdagingen voor u in pset7
gaat worden voor de uitvoering van de back-end databank, de spreadsheet als je wil,
dat gaat slaan gebruikers namen en wachtwoorden
en uiteindelijk wat aandelen die zij bezitten, en hoeveel, en hoeveel geld ze hebben,
dus een heleboel andere dingen in andere tabellen of spreadsheets.
>> Dus laten we eens kijken hoe dit kan lijken op het eerste gezicht.
Ik ga terug naar het apparaat en ik ben
ga deze URL hier te gaan phpMyAdmin localhost / phpmyadmin
en je zult zien dat het neemt me mee naar een interface
precies zoals we zagen op de screen shot, en hier ben
hebben een extra databank riep lezing voor vandaag
en laat me gaan vooruit eerste en klik op pset7.
>> Ik schijn een paar opties te hebben, één voor het nieuwe, voor het creëren van een nieuwe tabel,
en een link naar de gebruikers, die is een tabel heb ik al gemaakt.
Dus wat is een tafel?
Dus als je gewend Excel voor, en als je hebt
gebruikte nummers of Google Spreadsheets, u een venster openen
en je een hele hoop te krijgen rijen en kolommen,
maar dan heb je meestal werkbladen langs de onderkant, of afzonderlijke tabbladen.
U kunt denken aan elke werkblad als een tafel
zodat databank uiteindelijk een combinatie van één of meer tafels,
of meer werkbladen, in de wereld van een normale spreadsheet.
Dus laat me gaan en Klik op dit werkblad
dat ik premade, genaamd gebruikers, a.k.a.
Database tabel.
En als ik scroll hier naar beneden, laat me uitzoomen een beetje,
dit is wat phpMyAdmin vertelt ons is de binnenkant van deze tabel op dit moment.
Het is een beetje verwarrend op het eerste blik omdat de UI is niet
de mooiste zaak van de wereld, maar Wat interessant is, is dit deel hier.
ID, gebruikersnaam en hash.
>> Van te voren, en je zult handed zijn dit in probleem stelde zeven,
geven wij u een bestand met een super kleine database tabel, geleend eigenlijk
van de hacker editie van probleem set twee,
binnenzijde waarvan er zes rijen.
Eén voor Belinda alle weg naar een voor Zamyla,
en ziet links van de gebruikersnamen zijn unieke id's zoals een,
twee, drie, vier, vijf, zes, gehele getallen, en vervolgens naar rechts zijn hashes.
>> En als, kansen zijn, heb je niet doen de hacker editie probleem set twee,
maar een hash is net als een versleutelde wachtwoord met een paar kanttekeningen.
En ja, wat je hier ziet zijn de gecodeerde versies van alle zes
van onze wachtwoorden van probleem set twee-hacker editie.
Nu aan de linkerkant is slechts enkele GUI stuff, het bewerken van deze rij, het kopiëren van deze rij,
het verwijderen van deze rij.
>> Maar wat interessant nu is het volgende.
Ik kan eigenlijk beginnen experimenteren met deze tabel.
Dus als ik ga en klik op de SQL tab, krijg ik deze grote tekstvak.
En dit is niet hoe we gaan doe het toen eigenlijk het schrijven van code.
Voor alle duidelijkheid, phpMyAdmin is slechts een hulpmiddel dat is
gaan om ons te laten rondneuzen de database en laat ons experimenteren met queries.
>> Dus bijvoorbeeld, veronderstellen Ik voer precies dit.
Select, dat is een van die trefwoorden ik al eerder, ster,
die vertegenwoordigt alle de kolommen in een tabel.
Van wat tafel?
Nou, gebruikers.
En let er dit raar conventie in SQL
waar je eigenlijk gebruiken back teken normaalgesproken
geen enkele aanhalingstekens en geen dubbele aanhalingstekens als je praat over tafels namen,
zodat de achterkant citaat is het ding op de linksboven van je toetsenbord het meest
waarschijnlijk.
>> Dus laat me gaan nu vooruit en gewoon laat dat alleen
en scroll naar beneden en klik op Start, en we zijn daadwerkelijk gaat om hetzelfde te zien.
We hebben net geëxecuteerd een SQL-query zeggend select alles ster
uit tabel genaamd gebruikers, en wat je terug krijgt is dit.
Uiteindelijk zullen we in staat zijn om dat doet hetzelfde in de code,
maar voor nu alles wat ik wilde do was zie het in mijn browser.
Nou laten we iets doen een beetje anders.
Laat me teruggaan naar het tabblad SQL, en laten we gewoon zeggen dat wat?
Zamyla heeft al haar verloren geld, en daarom is het
tijd voor ons om haar te verwijderen als een gebruiker.
Ze is niet meer in te loggen.
>> Dus ik ga zeggen verwijderen van-- goed, onderhouden kapitalisatie
voor consistentie, verwijderen van gebruikers waar.
En zo kunnen we deze hebben predikaten, of deze
qualifiers, aan het einde van mijn verklaring waar en hoe kan ik Zamyla verwijderen?
Door haar naam Zamyla, zodat de kolom een ​​kolom
werd genoemd, dus waar name = "Zamyla".
En hier dubbel gebruik ik aanhalingstekens of enkele aanhalingstekens,
u alleen gebruik maken van de achterkant tikken wanneer over de namen bijvoorbeeld
tabellen of velden.
En laat me klik Ga hier.
En nu, de webpagina is een beetje gespannen.
>> Of, heb je echt wilt uitvoeren verwijderen van gebruikers, waar de naam gelijk is aan Zamyla?
Ja.
Dus nu, als we terug gaan naar mijn tafel door te klikken op gebruikers, merken dat Hm.
Ik goofed.
En in feite, ik soort van klikte weg zo snel
je niet eens zien de rode foutmelding, misschien.
Wat heb ik verkeerd gedaan?
Publiek: Je hoefde niet op haar naam te kapitaliseren.
DAVID J. MALAN: Yeah I gekapitaliseerd haar naam,
maar haar username-- eigenlijk I maakte een paar fouten, toch?
One, haar gebruikersnaam is zamyla, kleine letters Z,
en de naam van de kolom is de gebruikersnaam, niet te noemen, dus laten we dit opnieuw doen.
Laat me gaan en verwijderen van gebruikers waar
gebruikersnaam gelijk citaat unquote "Zamyla".
Oké?
Dus dit ziet er een beetje beter, laat me gaan scroll naar beneden en klik op Go.
Het is nog steeds te schreeuwen tegen me om zeker te zijn.
Ik klik op Ja, en nu zien we, eerlijk gezegd dat dit gebeurde, echt
snel, minder dan één tweede zeker, dit
is precies de vraag die werd geëxecuteerd.
Om te bevestigen, laat me klik gebruikers en inderdaad nu Zamyla is verdwenen.
Laten we nu het tegenovergestelde doen.
Stel dat Gabe wil registreren voor de website.
Wat is de SQL-query, wat is het command ik kon typen om Gabe toevoegen?
Nou het is vrij eenvoudig.
Invoegen in gebruikers, en nu het wordt een beetje cryptisch.
Ik moet opgeven, naar de server, welke velden ik wil toewijzen.
Ik heb niet echt schelen wat Gabe's ID getal is, dus ik ga slaan dat.
Ik ga in plaats daarvan gaan zeggen gebruikersnaam, hash, en vervolgens
de waarden die ik wil zetten Er zal Gabe zijn.
En dan zijn hash, ik weet het niet.
Dus voor nu, ik ga naar laat dat als een grote te doen.
We zullen terug te komen dat in het probleem te stellen
spec over hoe je eigenlijk dat te doen.
>> Dus opmerken, nogmaals, de syntax.
Invoegen in tabel naam, dan is een haakjes lijst van de velden,
de kolommen die u wilt toevoegen waarden, en dan gewoon
exact dezelfde volgorde van links naar rechts van de waarden die u wilt toevoegen,
en het is gewoon wikkelen omdat de tekst is een beetje lang.
Dus nu laat ik klik op Go.
Eén rij ingevoegd.
En nu als ik terug naar gebruikers, wat interessant
is dat niet alleen Gabe nu in de databank, wat blijkbaar zijn ID?
>> Nou het is zeven.
Waarom is het zeven toen ik niet toevoegen?
Dus ook dit is een van de functies die u krijgt van de database.
Veel ingebouwde functionaliteit.
Het blijkt dat wanneer creëerde deze tabel,
Ik voorgeconfigureerd is het automatisch toewijzen een ID zodanig
dat verhoogt.
Dus als je ooit rond prikte, en gekeken naar wat je Facebook ID
nummer is, deze dagen is het niet echt een ding om te doen, maar Facebook als een API,
Application Programming Interface, waarbij je terug kunt krijgen
een hele hoop gegevens over jezelf, over je vrienden,
en je connecties.
En wat vroeger aardig te zijn van koele, terug in de dag,
was om te kijken wat uw Facebook ID-nummer was.
Mark Zuckerberg's, bijvoorbeeld drie
want hij was de auteur van de site.
En zo gaat het verhaal, creëerde hij twee test-accounts, gebruikers een en twee,
die hij vervolgens verwijderd.
En dus, Zuck, net als zijn gebruikersnaam op Facebook, is het ID nummer drie,
en ieder van ons hebben veel nummers groter dan drie van deze dagen.
In feite, ergens Facebook verhuisd
zelfs van het gebruik van een int, die is een 32-bit waarde te gebruiken
de volgende stap, in wezen een lange lange dus
dat ze konden nog meer gebruikers registreren.
Dus een leuke kleine historisch feit.
>> Dus dat is nog maar het basissyntaxis waarmee
we misschien een paar te voeren query's, maar we kunnen eigenlijk
doe een heleboel meer dingen met SQL.
En je zult zien, uiteindelijk, in het probleem stelde zeven
dat moet je een te maken aantal ontwerpbeslissingen,
onder hen gaat worden welke soorten data te gebruiken.
Dus net als in C, zijn er gegevens soorten in een database, zoals MySQL,
en de data types moet je kiezen uit onder andere deze velden hier.
Char, varchar, Int, groot int, decimale datum en tijd, en vele anderen.
Dus laten we dit daadwerkelijk te doen.
Laten we doen alsof dat we niet hand geven table van deze gebruiker
en laat me gaan en te creëren, voor mezelf, in de lezingen database--
eigenlijk laat me gaan en te verwijderen de tafel heb ik hier al
zodat we werkelijk kunt creëren.
Whoops.
Ik ga deze laten vallen tafel, en nu ben ik
gaat weer naar de lezing-database hier,
Ik ga een tabel te maken riep gebruikers en laten we
gewoon doen drie kolommen aanvankelijk in en klik op Go.
>> Nu, grotendeels, nogmaals, dit is gewoon
met behulp van deze grafische tool genaamd phpMyAdmin, en wat we nu aan het doen
is het creëren van een tabel.
Dus dit is alsof je File, New, en het creëren van een nieuw Excel-bestand.
Dus het is een paar vragen me vragen, van links naar rechts,
wat is de naam van de eerste kolom, en vervolgens de naam van de tweede kolom,
en de naam van het derde.
Dus laten we opnieuw dit.
ID, en toen was gebruikersnaam één, en dan hash was een andere.
Dus wat moet het datatype zijn nu voor een veld als ID?
>> Hier is de volledige lijst met data types voor u beschikbaar in een database,
en voor nu laten we gewoon gaan met int.
32-bits waarde, dat doe ik niet denk realistisch ben ik
gaat om meer dan 4 miljard hebben gebruikers in mijn account, in mijn dienst,
dus ik ga om in beweging te houden naar de volgende vraag.
Ik ben niet van plan om op te geven lengte of waarden,
het is niet van toepassing hier een int, per se.
En nu kan ik opgeven, blijkbaar, een standaard
waarde, die ik ben niet van plan om op te geven.
Een vergelijking, ik weet niet wat dat is.
Een attribuut.
Nu zijn we eigenlijk doen hebben een ontwerp beslissing.
Dus er is een paar velden hier zijn niet alle waarvan toepassing, maar unsigned
betekent gewoon wat?
Dat de int moet zijn?
Gewoon niet-negatief.
Het heeft zo zijn 0 op maximaal.
Nee, ik ben niet van plan om te controleren omdat Ik wil dat elke gebruiker in staat om een ​​ID hebben,
het kan niet null zijn.
En dan krijgen we wat meer interessant ontwerp beslissingen als deze.
We zullen hierop terugkomen in een moment, maar wat een kenmerk database
is, is dat je kunt vertellen de database server ga je gang
en optimaliseren van uzelf, uw RAM-geheugen en ruimte op de vaste schijf,
zodat selecteert, en inserts, en verwijdert, en updates zijn echt snel.
Vergelijk dit met pset5.
>> Als je wilde iets opzoeken in je hash tabel, die
jullie zien als een database, die moest al het doen
werken voor het maken van uw hash table snel.
Het is net als, uiteraard, u.
Right?
Je had in de hele tijd prima te zetten tuning dingen, het krijgen van een hash-functie
rechts, het uitzoeken hoe veel emmers hebben.
>> Maar wat is leuk, nogmaals, over een database
je gewoon alles van punter dit anderen
die dit hebben gedacht door voor u, en wat
Ik ga hier zeggen onder index is dat mijn ID-veld
zal de belangrijkste manier van zijn het identificeren van gebruikers in deze databank.
Ik ben niet van plan om te denken van Zamyla als Zamyla,
Ik ga bedenken haar als het nummer 6.
>> Waarom is het misschien beter intuïtief te denken van en model
elk van uw individuele rijen met behulp van een nummer in plaats van iets
als een string, zoals de Zamyla of Gabe of langer touwtje nog?
Yeah?
>> Publiek: Een ID is uniek?
DAVID J. MALAN: weer zeggen?
Publiek: Een ID is uniek?
DAVID J. MALAN: Een ID is uniek, maar suppose--
zoals in het algemeen met gebruikersnamen, veronderstel
Ik zei ook dat er kan er maar één zijn Zamyla in de wereld, en slechts één Gabe.
Ik kon het unieke karakter op te leggen constraint op strings, ook, als ik wilde.
Dus geen slechte gedachte.
>> Publiek: Veiliger.
>> DAVID J. MALAN: Veiliger, waarom?
Publiek: Je kunt niet zeggen welke is die, zoals in de gebruiker.
DAVID J. MALAN: OK, je kan niet zeggen welke gebruiker
is die dus er is een privacy aspect aan,
vooral als de ID misschien te zien zijn in de URL's.
Zo zeker van, dat kon soort werk, ook.
Andere gedachten?
Yeah?
>> Publiek: Het is makkelijker om bewerkingen op int.
DAVID J. MALAN: Dat is de echte kicker.
Het is gewoon efficiënter, of gemakkelijker de computer,
om bewerkingen uit te voeren op een geheel getal.
Right?
Een int is gegarandeerd zijn 32-bit, terwijl Zamyla
is een paar tekens lang, Gabriel is nog een paar tekens lang,
Davenport is echt lang, en dus is het niet bijzonder efficiënt te gebruiken
strings te vergelijken waarden en kijk voor velden en bijwerken velden,
als je weg kunt krijgen met slechts een integer.
Slechts 32 bits.
Dus gebruikersnamen, ook, op deze manier, niet uniek zijn,
hoewel ze waarschijnlijk moeten zijn, en zelfs op deze manier te
een gebruiker kan worden toegestaan veranderen zijn of haar gebruikersnaam.
>> Dus laten we nu dit laten zoals het belangrijkste middel van het identificeren van de gebruiker.
Dit vertelt de database ga je gang en optimaliseren van jezelf
zodat blik ups op ID zijn super snel.
AI, afschuwelijk vernoemd, net betekent Auto increment
en dit is de cheque box die we nodig hebben om te controleren
om aan te geven dat het veld ID aan worden automatisch bijgewerkt voor mij,
en dan ga ik Scroll naar rechts hier
en eerlijk gezegd ben ik niet echt geïnteresseerd in meer van deze velden.
Zeker niet vandaag.
>> Dus ik ga hier terug te gaan, de eerste kolom, waarbij
Ik moet gebruikersnaam opgeven en hash, en laten we
tenminste focus op de tweede voor nu.
Int is waarschijnlijk niet de juiste oproep, dus wat is logischer misschien?
>> Publiek: Tekst.
DAVID J. MALAN: weer zeggen?
Publiek: Tekst.
DAVID J. MALAN: Tekst?
OK, ik hoorde tekst.
Wat anders?
We hebben een soort van een bos van keuzes die tekstuele aard.
Dus wanneer, en waarom, doen u een aantal van deze gebruiken?
Nou char, in tegenstelling tot wat je misschien denken, is geen enkel teken.
Het is een bepaald aantal tekens.
Dus als we weten dat alle gebruikersnamen moet zijn als acht tekens,
zoals gebruikt bij oudere worden computersystemen, ik kon char zeggen
en dan kon ik hier zeggen 8.
Dat is wanneer de derde kolom wordt toepassing is bij het maken van een tabel.
>> Maar dat is een beetje vervelend omdat sommige mensen zouden kunnen
willen een langere gebruikersnaam hebt dan acht tekens,
sommige mensen zouden willen een kortere gebruikersnaam,
dus waarom verbind mij een specifiek nummer?
Waarom een ​​variabele niet aantal tekens en net
zeggen dat de maximale lengte van een naam is, weet ik niet, net als 64 tekens.
Ik kan niet denken van een vrienden die hebben namen langer dan 64 tekens,
en zelfs als dat is te kort kon je zeker bump het op willekeur.
>> Dus varchar is een variabele Aantal tekens.
De tekst is geen slechte instinct, en eerlijk gezegd dat soort doet wat het zegt,
maar een tekstveld kan worden zoals 65.000 bytes tenminste.
Dat is waarschijnlijk overkill voor een veld, en in feite, yup, 65.535.
Dat is waarschijnlijk overkill voor een te noemen, nemen we ze gewoon, typisch,
met varchars voor tekstuele veld en hash, ook.
Hash, zo blijkt, konden we een doen varchar zo goed of iets dergelijks,
maar we zullen niet focussen vandaag op de cryptografie daar de nummers
dat we misschien wel willen gebruiken voor de lengte.
>> Maar laat me naar beneden scrollen naar rechts.
U kunt slechts één primaire index voor een tafel,
maar ik wil een van deze toe te passen, nu, om gebruikersnaam, zou je dan zeggen?
Wat moet gebruikersnaam worden gebaseerd op een vage begrip van deze vier opties?
Gewoon door hun namen?
>> Publiek: Unique.
>> DAVID J. MALAN: Zo uniek, toch?
Dus het blijkt dat niet alleen kon u een database te vertellen, bij voorbaat,
dit is de belangrijkste manier identificeren velden.
Je kunt ook zeggen dat dit zal een uniek veld.
Het gaat niet om zijn het ding ik vertrouw op,
maar ik zou graag de database wezen hebben dat als voorwaarde, zodat
dat als ik ooit geprobeerd om te registreren twee gebruikers met dezelfde naam,
de database flat out is niet van plan om me te laten.
Ik zou wat extra code hebben PHP dat maar verhindert,
maar de database te kunnen garanderen dat dat nooit gaat gebeuren.
>> Nu, als een terzijde, vooral als je denkt aan afstudeeropdrachten,
in gedachten is het index en vol te houden tekst zijn eigenlijk heel nuttig.
Als u een grotere database en niet met tientallen, maar honderden of duizenden
of zelfs miljoenen velden, kunt u Ook de database van tevoren vertellen
dit is een veld ga ik te zoeken op een terrein.
Misschien zijn gebruikersnaam, misschien is het bio, als je
het maken van een Facebook-achtige website die heeft alinea's die de gebruiker toegestaan
om op te slaan, en als je wilt vertellen de database van tevoren
Ik ga wel op zoek op dit gebied veel, maar het is niet per se uniek,
u kunt opgeven creëren me een index.
Of u kunt ook zeggen: laat mij doen soort van willekeurige zoekopdrachten zoals Command
of Ctrl F, zoals jij zou in een tekstverwerker,
dus je kan willekeurige strings kijken of substrings op dit gebied.
Met andere woorden, we krijgen naar het punt in het semester
waar je niet hoeft te maken over hoe ze dingen efficiënt te implementeren.
Je hoeft alleen maar te weten over wat ontwerpbeslissingen aan zodat je maken
met behulp van het juiste gereedschap voor de handel nodig om functies te benutten
die andere mensen hebben gemaakt voor jou.
Dus om samen te vatten, moet alleen de primaire hebt, kun je maar één,
en het is het ding dat je te verbinden aan met het identificeren velden uniek.
Uniek is gewoon in dezelfde geest, maar je zou slechts af en toe te gebruiken,
maar u wilt dat de database op te leggen.
Index betekent gewoon preemptively versnellen dingen in de toekomst
zodat ik kan zoeken naar dingen op dit gebied.
En dan volledige tekst is over het algemeen voor alinea's, of essays, of grote lichamen
van de tekst waar u zou ook willen hebben
wild cards als het equivalent van de ster.
Right.
>> Dus dat was een soort van veel om in een keer.
Laten we eens kijken of we niet kunnen destilleren een paar van deze functies
en dan iets op te bouwen vrij eenvoudig, maar krachtig.
Dus onder andere ontwerpbeslissingen je bent
uiteindelijk gaat hebben is langs de lijnen opslag motoren.
En laat me gewoon melding maken van deze in afwachting van de definitieve projecten,
en anticipatie van Let's say-- geen laten we dit doen.
Laten we bouwen dit kleine toepassing eerst.
Ik ga in mijn terminal te gaan venster, en hier is niet
alleen counter.php, die we nu gaan om zich te ontdoen van het zo niet langer germane,
maar we hebben een hele hoop van mappen en deze
gaat zeer vergelijkbaar in de geest te zijn om wat je ziet in probleem stelde zeven.
>> Dus hebben we drie directories omvat publieke en templates, die
is precies waar we af naar links op Maandag met onze hele MVC paradigma.
En om recap, in het openbaar zal gaan elk bestand dat ik wil dat gebruikers in staat om daadwerkelijk
v in staat zijn om te bezoeken in hun browser via URL.
Sjabloon.
Wat deden we in templates?
Wat voor spullen?
Er was niet veel, maar een paar dossier tenminste op maandag.
Yeah.
>> PUBLIEK: Koptekst en voettekst?
>> DAVID J. MALAN: Koptekst en voettekst.
Dus we hebben iets dergelijks vandaag, ook.
We hebben nog een paar bestanden, maar Footer Ik zie, Header ik zie,
en dan een heleboel andere bestanden.
Dus dit is het equivalent van de V MVC mening dat,
weer, zal een beetje meer duidelijk probleem stelde zeven,
maar dit is gewoon een map ben ik zetten een groot deel van mijn esthetiek.
Veel van mijn HTML, veel van mijn vormen.
Ondertussen omvat, is een directory dat deze drie dossiers heeft
en laten we eens een snelle blik op deze.
>> Ik ga om verder te gaan en open config.php.
Zo blijkt, veel zoals eerder in de term,
u scherp opgenomen CS50 dot h met pset7.
In voorbeeld van vandaag, je gaat het equivalent van doen
met een verlangen statement die effectief
omvat deze verschillende lijnen.
Dus om duidelijk te zijn, dit is een bestand genaamd config.php.
En let op wat het doet.
Het is blijkbaar iets te doen cryptisch, het inschakelen van foutmeldingen
zodat u ze kunt zien in de browser.
Het is dus blijkbaar waarbij twee andere bestanden
dus dit is zoals #include in C, en dan is dit degene die we zagen,
en we hebben vertrouwd op, deze gaat aan dat winkelmandje achtige functionaliteit.
>> Dit betekent een cookie wil heen en weer worden gestuurd.
Dus waarom is dit interessant?
Nou, als we terug gaan naar deze directory en open te stellen, bijvoorbeeld,
constance.php.
Merk op dat PHP ondersteunt wel constanten, het is niet helemaal zoals #define in C.
In plaats daarvan, je letterlijk zeggen gedefinieerd, en kennisgeving
die ik heb opgeslagen op voorhand vier constanten in dit bestand.
Een voor de database van vandaag, voor mijn wachtwoord voor mijn gebruikersnaam,
en de naam van de server.
Dus deze zijn eigenlijk gaat worden redelijk vergelijkbaar in probleem stelde zeven.
En tot slot, en dit is waar ik ben ga wat leuke functionaliteit te krijgen
van het personeel, in functions.php is een bos van de code die we hebben geschreven,
en Ik heb een aantal van deze van probleem stelde zeven
voor vandaag, dat doet een hoop dingen en laten we gewoon kijken naar een van hen
in het bijzonder.
Deze functie hier, query gaat worden
de PHP functie noemen we om SQL-code.
Een moment geleden waren we met behulp van phpMyAdmin, maar dat is slechts
voor soort leren doeleinden en diagnostische doeleinden
en het vergeten van uw database set.
Wanneer u daadwerkelijk gebruik maken van uw gegevensbestand, u, de mens,
zijn uiteraard niet van plan om te trekken van een web
pagina elke keer dat iemand registreert.
Je gaat om code te schrijven die inserts en verwijdert gebruikers op aanvraag,
en we gaan om dit te doen via de query functie.
Als ik nu naar beneden scrollen, er is zal zijn een paar meer functies.
Redirect gaat een functie zijn wij schreven
voor u die u toelaat om zenden de gebruiker naar een andere URL,
en maken is een functie, heel graag we zagen op maandag, die eigenlijk maakt
een sjabloon, maar meer in de volgende in de vorm van eigen walk pset7's door.
Voor nu, laten we gaan je gang en doe dit.
>> Laat me gaan in mijn colleges tafel en zien dat er op dit moment niets
hier gewoon nog niet, en laat me ook gaan in mijn openbare map, waar
er is gewoon een bestand, index.php.
Dit bestand wordt weergegeven super eenvoudig te zijn op het moment, het ziet er net als dit.
Heel graag hoe wij gebleven op maandag.
Ik ben die dit bestand, config.php, die in
een directory bevat, welke is in dot dot, mijn ouders,
en dan is het net waardoor dit bestand.
Dus wat is dit bestand?
>> Laten we openen in mijn templates form.php, en we zullen dit zien.
Super eenvoudig, blijkbaar deze vorm is gaan door een $ _GET of $ _POST te onderwerpen.
Quick sanity check.
Letterlijk visueel zoeken in de file.
Methode is gelijk na.
Dus het gaat niet om de URL te gebruiken, zoals Google doet, het gaat om te sorteren verstoppertje
de informatie achter de schermen en het is
gaan naar een in te dienen bestand genaamd register.php,
en dat is het bestand we zijn nog niet geschreven
maar wat dit gaat te lijken is dit.
>> Als ik naar een aparte pagina Dit is wat localhost / index.php eruit ziet.
En nogmaals, de server gewoon in de veronderstelling index.php.
Enter.
Dus dat is waar we zijn op, en wat ik wil doen
is in staat om dingen te typen als David, en vervolgens
mijn telefoonnummer, die zal zeggen 617-555-1212 voor nu, registreren
en nu register.php werd niet gevonden.
Dus ik nodig om dit te implementeren.
Dus laten we snel zweep iets als dit op.
Laat me gaan in mijn openbare map en doe gedit van register.php,
en nu ga ik verder te gaan en beginnen PHP-modus, zoals wij deden op maandag,
en dicht PHP-tag, en Laten we een paar dingen.
>> Zo één, ik weet het, van die vorm te hebben geschreven,
die ik wil controleren voor het volgende.
Als deze leeg is, wat de gebruiker getypt in het veld naam, dan
Ik ga iets zeggen zoals excuses ontbrekende naam.
Verontschuldigen, ondertussen, is niet een ingebouwde PHP ding,
het is een functie die we schreven in functions.php voor pset7
zodat je er toegang toe hebben.
Anders als het andere veld leeg is, nummer, dan ben ik
gaan om zich te verontschuldigen voor de gebruiker en ontbrekende getal zeggen.
Sla dit bestand op.
>> Laten we nu teruggaan naar mijn browser, ga terug naar de forum probeer het opnieuw.
Registreer.
OK.
Er is niets gebeurd, dat is goed.
Ik heb niet een foutmelding krijgen.
Maar als in plaats daarvan, laten we opnieuw deze pagina, en niet bieden iets.
Verdomme.
Doe dat.
Registreer.
Wat heb ik verkeerd gedaan?
Indien leeg, $ _POST naam.
Nog eens zeggen?
>> Oh, natuurlijk.
Ik vergat het belangrijkste deel, dat is vereist ("../ includes / config.php.").
Ik moet de toegang tot het hebben verontschuldigen functie, die
is de reden waarom er niets gebeurde.
De functie bestaat eigenlijk niet.
Dus laten we het opnieuw proberen dit.
Laten we de pagina geladen is, klik op Registreren.
OK.
Daar is het.
Dus, de output zijn we hier zien is het resultaat
van het bellen van een excuses functie, super eenvoudig,
en drukt het gewoon uit wat Ik geef het als een argument.
>> Oké, dus laten we samenwerken.
Laten we zorgen voor mijn naam als David, registreren,
ontbrekende aantal OK laten we bepalen dat, ook.
617-555-1212.
Registreer.
OK.
Dus alles is goed nu, gewoon niets interessant gebeurt.
Dus nu laten we iets meer interessante gebeuren als deze.
Laat me gaan in phpMyAdmin, en laten we daadwerkelijk aanmaken van een tabel genaamd gebruikers,
Ik ga het geven drie kolommen, en ik zal snel
creëren ID, en dan te noemen, en dan nummer,
en het ID-veld ben ik om te vertrekken als een int.
De veldnaam ik ga om te vertrekken als een varchar,
en wij zullen zeggen 64, enigszins arbitrair.
Het nummer dat ik ga te maken, weet je wat?
We gaan in Steun ons nummers hier,
dus ik ga iets doen als char en dan 10 tekens
max voor een netnummer en dan zeven cijfers.
En dan hier, ik ga specificeren autotoename dit gebied,
maken dit een primaire sleutel, en Ik ga je gang en niet gaan
controleren van een van deze andere dozen.
>> Dus als ik nu eindelijk op Opslaan klikt, en ik ga terug naar mijn gebruikers tafel,
Dit is hoe het eruit ziet als ik klik nu een nieuw tabblad structuur.
Dus dit, om duidelijk te zijn, is gewoon phpMyAdmin's weg
van te zeggen uw database tabel heeft een ID, een naam en een nummer
met de bijzondere configuraties en wij doen de rest van de velden te negeren
er voor nu.
>> Dus wat moet ik nu wil doen?
Dus als ik ga nu naar mijn broncode, als het goed is
Ik wil de volgende query uit te voeren.
Invoegen in, en ik kan alleen maar zeggen gebruikers Ik doe niet strikt
moeten die terug tikken als het niet een gevaarlijk woord als gebruikers.
Ik ga naam te zeggen, nummer, en dan hier ben ik
niet van plan om de harde code de cijfer van de waarden nog.
Ik ga twee vraagtekens gezet.
En dit is een conventie in vele talen
waarbij als je wilt hebben een tijdelijke aanduiding voor een string
je gaat om de vraag te gebruiken merken, om redenen die we zullen
terug te komen op ongeveer chatten veiligheid, en hier
Ik ga geschiedde in die twee velden te posten naam,
en dan te posten nummer, en nu sla het bestand op.
>> En nu ga ik naar naar beneden gaan is hier een super
gewoon rendersuccess.php, zeggen welke zal een template.
Ik ga echt snel te maken.
Geditsuccess.php en ik ga gewoon H1 succes in dat bestand te zeggen.
Prima.
Dus nu, laten we terug gaan naar de browser, waar ik eerder bezocht.
Laten we verder gaan en bevestig ik schreef in David, schreef ik in een telefoonnummer,
registreren.
Verdomme.
Wat heb ik verkeerd gedaan?
Dus ik ben het zien van een fout hier, u hebben een fout in uw SQL syntax.
Laat me terug naar gedit springen, laat me terug te gaan naar register.php,
en wat heb ik weglaten dat belangrijk was de vorige keer?
Ik heb dit nodig.
U wilt dat de ander dan uit weten hebben eerder opgevallen, maar ik heb dit nodig.
>> Dus laten we nu eens terug te gaan, en dit was nuttig om te zien in de browser
en dat is de reden waarom in config.php we spugen fouten.
Laten we verder gaan en opnieuw te laden, Klik op Doorgaan, succes.
Dus nu laat ik ga naar mijn databank hier en klik op Gebruikers,
en bladeren, en merk ik nu hebben David in mijn databank hier.
Nu technisch gezien is deze website nog niet op het openbare internet,
dus ik kan niet anders hebben mensen in te zetten hier,
maar als ik nu wilde, voor Zo stuur ik een SMS-bericht.
Laten we gaan op een ledemaat hier en zien of dit echt werkt.
Ik ga om verder te gaan en verwijder deze rij
en we zullen dit vervagen in de video later
dus we hebben niet de hele internet sms me,
en we zullen nu gaan naar de browser en we gaan over de les te lezen
en we zullen het type in verschillende nummer hier, registreren, succes.
>> Dus nu, mijn eigen nummer is vermoedelijk in de database, en nu het leuke gedeelte.
Laten we het daadwerkelijk gebruik maken van PHP te doen iets programmatisch,
hetzij vanaf de opdrachtregel lijn of van ergens anders,
en voor nu ben ik gewoon gaat om het simpel te houden
en ik ga in te gaan mijn directory hier en doe het volgende.
Gedit script laten we zeggen, we zullen noem het de tekst, #! / user / bin / env PHP,
zoals we zagen vorige keer.
PHP.
>> Nu ga ik nodig hebben omvat config.php,
ook al is deze macht induceert een lichte fout.
En nu ga ik verder gaan en zeggen: rijen, query, selecteert ster van gebruikers,
en nu hier ga ik een techniek doen van de vorige keer voor elke rijen als rij.
En ik ga iets simpels doen.
Printf laten we zeggen dat de naam is dit, en het nummer is dit, backslash n.
En nu ga ik te passeren in rij citeren unquote naam,
en rij citaat unquote nummer, en nu laten we gaan vooruit
en mijn terminal venster chmod dit een + x te maken
dit script met de naam tekst uitvoerbaar.
En laten we nu de tekst lopen.
>> OK, dus vooruitgang.
Dus ik heb nu geschreven een command line script,
in een taal genaamd PHP, dat, vanwege die vereisen lijn,
heeft toegang tot al die configuratie constanten die ik heb opgegeven.
De naam van de database enzovoort.
In feite, voor de duidelijkheid dat dit geen toevalstreffer,
laat me gaan en te registreren, echt snel, iemand anders als Rob
en zal hem het 555-1212 nummer geven.
>> En nu, als ik het script nogmaals, let op de macht
van wat we doen met de database.
Nu heb ik meteen gezien wat de andere twee rijen zijn in mijn database.
Dus nu laten we proberen om iets te doen zelfs liefhebber binnenkant van,
en dit is het deel we hebben niet getest vooraf
dus de laatste keer dat ik dit deed ging het vreselijk mis,
We hebben video van die strekking.
>> Eigenlijk, ja, grappig terzijde.
Dus de laatste keer, in een lezing als twee jaar geleden,
hebben we besloten, heb ik besloten, om Dit alles zou een geweldig idee zijn
om dynamisch genereren van e-mails in klasse, met behulp van de hele database CS50
studenten, die ons hun nummers had gegeven en hun mobiele telefoon dragers die je
zich nog wel herinneren uit pset0, hoe om te redeneren, het blijkt
Ik had een kleine bug in mijn programma en deed een paar fouten in 2012, denk ik.
>> Waarbij, degene die ik had voor de lus die deed precies dit soort dingen,
itereren over de database het krijgen van een naam uit de database,
de naam van de database, en vervolgens op elke iteratie van dat lus ik stuurde een e-mail.
Maar in plaats van het verzenden van een e-mail, ik stuurde een e-mail de eerste iteratie
en twee e-mails van een tweede iteratie, verzonden drie e-mails een tweede iteratie, die
zoals je misschien herinneren van onze bespreking van asymptotische notatie
deze grote O van slechte, zoals n kwadraat is hoeveel berichten ik heb verzonden,
maar het was niet eens e-mails het was tekstberichten.
>> En zoals u weet, deelname is niet super high tegen het einde van het semester
en dus ik dacht dat het leuk zou zijn bij de tijd om te zeggen: "Waarom ben je niet de klas? '
In het tekstbericht I naar de gehele klasse
en het was grappig om te willen 50% van de klasse, maar de overige 50%, van wie sommigen
flipte, ik stuurde ongelooflijk verontschuldigend zoete tonen
aan het personeel verontschuldigen voor de lezing gemist net
dit keer, toch?
>> Dus dat zou vreselijk mis.
Dus in die geest, laten we dit proberen weer maar gewoon met mijn nummer.
Vooraf, in functions.php, Ik heb deze functie hier geschreven.
Het is de tekst genoemd, en het neemt in drie argumenten.
Een nummer, een drager, en een boodschap.
>> Ik gebruik een switch statement, waarin heerlijk PHP nemen strings, niet alleen
integers, en ik wilde niet te implementeren maar alle voor deze,
Ik heb net gedaan AT & T en Verizon.
Want het blijkt dat met deze dragers
ze hebben e-mail naar SMS-gateways, waarbij u kunt eigenlijk
stuur dan een e-mail naar een adres zoals telefoonnummer vtext.com
en als de gebruiker heeft niet geblokkeerd de berichten, zal het gaan door
is een SMS-bericht.
>> Nu om dit te doen, ik ga te hebben om toe te voegen één veld echt snel naar mijn database.
Ik ga in te gaan mijn structuur, en ik ben
gaan om verder te gaan en voeg een veld aan het einde van de tabel.
Laten klik op Go, en ik ben ga deze carrier noemen
en nu ga ik naar laat dit als een bar tekst,
maar we kunnen liefhebber in de toekomst.
Ik ga snel naar naar mijn tafel, en ik ben
gaan om zich te ontdoen van Rob, want dat is een nep-nummer,
Ik ga hier in bewerken te gaan en ik ben ga mijn carrier handmatig wijzigen
Verizon, zijn die het is, en nu hier.
>> Laten we snel een sanity check.
Laten we het openstellen van onze tekst script, dat ziet er zo uit, drager is% s.
We doen veel meer fout controleren dan ik deed in 2012, drager.
En nu, ik ga om te gaan vooruit en re-run het script.
OK.
Carrier is Verizon, wat betekent nu hopelijk kan ik gewoon doen.
Juist dit jaar, hopelijk, hier gaan we.
>> Dus binnenkant van deze lus, ik ben zal niet alleen deze printf,
Ik ben ook gaan om tekst te bellen en het gebruik van deze functie recall
was het duurt een nummer, een drager, en een boodschap.
Dus laten we zien, is nummer gaan zijn rij citaat unquote "nummer,"
rij citaat unquote "drager" en de laatste was bericht.
Verknal het niet dit jaar, puntkomma.
>> OK.
Vingers gekruist.
Eens kijken of dit werkt.
Oké, dus.
Daar gaan we dan.
Laten we het ontgrendelen van de telefoon, kruis je vingers, verdomme.
Undefined variable may-- oh wacht, wacht, wacht, echt snel.
Echt snel, heel snel.
Dit is absoluut de moeite waard.
Laat me grijpen, laat me grijpen, uh-oh.
Dank u, de teksten hebben gestart vanuit iemand anders.
Laat me ga je gang en open echte snel, dropbox.php / mail in hier.
Standby.
Absoluut de moeite waard.
Downloads.
OK, bron src8m.
OK.
>> Nodig nog een regel hier.
Oh daar is het, het is in Frosh IM, het is in register op drie.
Oh hallo, Margo, dank u zeer.
OK, en ik miste deze lijn hier.
Dus laat me snel pakken deze regel code,
die de e-mail of bibliotheek bevat die ik eigenlijk wil gebruiken,
Ik ga snel ga terug naar functies,
Ik ga om te gaan naar de top van deze bestand en vereisen dit bestand als goed,
en nu ga ik echt door mijn vingers als ik ga terug naar de command
lijn script, dat is de binnenkant van de huidige lokale host directory.
Run tekst.
Enter.
Mail.
Standby.
Mail.
Oh, OK.
Daar gaan we dan.
>> Mail krijgt nieuwe PHP mailer.
Heb ik dit goed?
Verdomme.
To-- oh, wacht, wacht, wacht.
Stand-by.
Ik beloof, dit is ga zo de moeite waard te zijn.
Adres.
Dit is de reden waarom ik niet maken de voorbeelden recht voor de les.
Ugh.
De volgende ontvangers is mislukt.
Laten we proberen een laatste ding.
SMTP ingesteld van, voeg het adres, het adres is inderdaad dat.
Laten we proberen dit laatste deel in de adresbalk.
Ach, ik ben echt verdrietig nu.
Dank u.
Maar ik waardeer alle de teksten die u hebt verzonden.
Je hebt dit David.
Je waait het.
Laten we het daarbij laten en we zullen herstellen op maandag.
Zie je dan.
>> Daven FARNHAM: En nu Deep Gedachten door Daven Farnham.
Als een binaire boom valt in een bos en er niemand aanwezig is om C het-- [grinnikt].