[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. 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].