[Speel van musiek] David J. Malan Alle regte. Welkom terug. Dit is CS50. Dit is die einde van die week 8. En soos jy weet, het ons mooi gereelde kantoorure in 'n paar van die eetsale insluitend Annenberg. En 'n paar van die span vriendelik het 'n paar foto's die afgelope tyd. En in die eer van Halloween, het ons gedink ons ​​wil een wat ons eerder gevang deur deel verrassing hier in Annenberg Hall net die ander aand. Jou klasmaat Jakob gestel vir hierdie foto, maar was 'n meer amusante was op Facebook, die daaropvolgende gesprek wat daarna gebeur het. Sy eerste pos in reaksie na sy foto was nie. 'N Paar minute later, het hy besluit een homself met hierdie. Dit gaan oor dan gaan dit, en dan nog meer aantrekkelijke is toe sy ma chimed in. En dan uiteindelik, dit lyk dit was net 'n wonderlike slimmigheid vir 'n speel wat aangaan. Dus, as jy wil Jacob en ander om te sien, onder hulle Cynthia Meng, wie se agter die skerms van CS50 sone personeel, kop aan hierdie URL en dit speel. So sonder verdere uitstel het, het ons vandag voortgaan om hierdie blik op web ontwikkeling, en die werklike skepping van programme wat nie hardloop nie by jou opdrag lyn, maar loop binnekant van 'n leser. Vermoedelik nou, of baie kort, jy gaan te wees in die middel van die implementering jou eie web bediener, wat verskil van web ontwikkeling. Die web bediener in pset6 is alles oor skryf sagteware wat weet hoe om te neem HTTP versoeke van 'n leser, of selfs van jou, 'n mens, met 'n program met die naam Telnet, en dan reageer op die versoeke van die kant deur spoeg uit 'n HTML-lêer, of 'n jpeg, of 'n gif, of selfs 'n php lêer. Maar met 'n web bediener, dit is nie veronderstel om net 'n PHP-lêer oop te maak, iets wat eindig in Php, en dan spoeg uit die inhoud. Dit is veronderstel om te doen wat in die lêer eerste? Om so te praat. Nie stel nie, het ons gesê op Maandag, maar rather-- So, interpreteer dit. PHP is 'n geïnterpreteer taal, en so een van die belangrikste eienskappe in jou web bediener, al is dit in werking gestel word deur ons, is hierdie vermoë vir jou web bediener om te sien, o. Dit is 'n lêer wat eindig in Php. Laat my nie net stuur dit na die gebruiker soos dit is statiese inhoud, maar eerder laat my lees dit lyn deur lyn, links na regs, en dit interpreteer. En om te doen, dat jy ouens sal hoofsaaklik voorspel dat 'n program in die toestel, en op 'n baie van die rekenaar stelsels, net genoem PHP. Dit is die naam van die PHP taal se eie tolk. So, daardie stuk voer ons vir jy, en wat oorbly vir jou, Uiteindelik is 'n aantal stukke, waaronder is die uitvoering van ondersteuning vir statiese inhoud. Maar nou, en met probleem die sewe, is jy gaan om te begin om die oorgang na eintlik die skryf van die PHP-kode wat kry geïnterpreteer in gesprek met 'n agterkant databasis wat inligting stoor. So laat ons beter eers verstaan 'n paar van hierdie superglobals en net hoeveel krag jy kry uit die boks vir gratis met 'n taal soos PHP. Dinge wat jy nie het nie jouself te implementeer. So, ons het op Maandag $ _GET, Dit is 'n superglobal, wat net PHP praat vir 'n globale veranderlike kan jy enige plek toegang. En wat is binnekant van $ _GET? Wat is in hierdie superglobal wat ons sien? Sekerlik statisties by minstens een persoon weet. Wat is binnekant van $ _GET? Ja? Publiek: Dit is die veranderlikes jy sit in die soektog string. David J. Malan Perfect. Dit is die veranderlikes wat jy sit in die soektog string. So, in ons ouer voorbeeld van reimplementing Google toe ons 'n URL, en dan vraagteken, wat afgebaken die begin van HTTP parameters, dan moes ons Q gelyk iets soos Q gelyk katte, wat outomaties gaan binne van daardie $ _GET super globale vir jou, as gevolg van PHP, is 'n sleutel van Q, en waarde daarvan katte. Met ander woorde, $ _GET en al hierdie dinge is assosiatiewe skikkings, hash tabelle van spesies, wat winkel sleutels en waardes. Nou, terug in pset5, die hash tabel wat jy kan geïmplementeer het, of die probeer jy dalk geïmplementeer het, regtig was effektief 'n assosiatiewe skikking, 'n data struktuur waardeur jy kan assosieer sleutels met waardes. Maar in pset5, was die waardes triviaal. Die waarde was in wese waar of vals is. Is die woord in die woordeboek? So, as jy 'n woord soos appel hashed om te sien of die appel is in die woordeboek, u tjek funksie vermoedelik teruggekeer waar of vals is. So, dit is effektief die waarde wat ons kry terug. Maar ons het op Maandag kortliks, kan jy seker assosieer meer interessant waardes as net waar of vals met sleutels, soos appel. Jy kan eintlik terug 'n arbitrêre string, en inderdaad, dit is wat $ _GET en hierdie ander veranderlikes laat doen. So $ _POST is soortgelyk in die gees, maar as jy 'n vorm per pos, 'n ander HTTP metode wat gebruik vir dinge soos kredietkaarte, en private inligting, en selfs binêre inligting soos foto's, daardie dinge beland binnekant van $ _POST. En eintlik vir lêers soos JPEG en noem maar op, daar is selfs 'n ander dit is nie hier genoem $ _FILES as well. So, bediener sal ons nie die bewoners van te veel nie, maar dit gee jou toegang te sorteer van 'n laer vlak besonderhede oor die bediener self wat jy gebruik. Koekie en sessie, al is, ons sal effektief nou sien. Die laaste is wat ons gebruik om te implementeer die idee van 'n inkopie mandjie nie. 'N super eenvoudige een, maar onthou dat ons moes hierdie voorbeeld hier, tel hoeveel keer jy het voordat hierdie bladsy besoek. Maar vandag, eerder as om net te kyk na Die gevolg van hierdie, laat oopmaak Chrome se venster wat jy kan gewoonlik doen deur regs te klik of beheer kliek op enige plek op 'n webblad, en kies dan inspekteer element. Of jy kan gaan deur middel van die spyskaarte dat ons beskryf in pset6 se spec. En ek gaan na die blad Network hier, en laat ons kyk vir 'n oomblik die HTTP verkeer wat heen en weer. Laat my toe om eers te gaan voorlê en duidelik Chrome se kas. So 'n paar van julle vertroud kan wees met hierdie tegniek reeds en ons gaan om dit te gebruik vir die opsporing doeleindes hier. Nou het ons as rekenaar wetenskaplikes gaan om te begin om dit te doen vir ontfouting doeleindes, waardeur ons sal die kas skoon te maak, Tipies, sodat ons kan ontslae raak van die dinge wat genoem koekies. So is jy waarskynlik algemeen bekend met wat koekies is, of ten minste dat hulle bestaan, maar wat jou begrip van hulle, as net 'n gebruiker van rekenaars, wat is 'n koekie? Ja. Publiek: Dit is 'n bietjie of-- goed nie bietjie in 'n termyn van rekenaarwetenskap. Dit is 'n stukkie van die data dat 'n webwerf stuur aan jou in orde in staat wees om statistieke aan te teken op jou. David J. Malan OK, goed. So dit is 'n stukkie van die data dat 'n bediener, sit op jou rekenaar, en laat ons veralgemeen dit selfs meer is, is dit 'n belangrike value-- goed, dit is om meer akkuraat. Dit is 'n stuk inligting, 'n stukkie van die data, dat 'n bediener in staat is om op jou rekenaar te sit en baie dikwels, die bediener doen hierdie so as om te onthou wie jy is. So byvoorbeeld, is die kans is jy waarskynlik aangeteken in plekke soos Facebook, of Gmail of ander voor, en jy inteken met jou gebruikersnaam en wagwoord en dan na daardie, vir 'n paar nommer minute of ure of selfs dae, die bediener onthou dat jy is, in werklikheid, aangemeld. Nou, hoe is dit eintlik gebeur? Omdat jy beslis nie tik Het jy jou gebruikersnaam en wagwoord elke keer jy na 'n verskillende bladsy op Facebook. So dit blyk uit die koekies is die antwoord. 'N koekie wat jy kan dink as, soort van soos 'n digitale hand stempel dat jy kan kry in 'n pret park of 'n klub wat in wese dui aan dat u hier gewees het voor, en jy het reeds getoon jou ID aan die bouncer vir byvoorbeeld, en dat die klub of die park moet nou aanvaar dat jy het reeds bekragtig. Jy is reeds geïdentifiseer deur dit. So met dit in gedagte, laat oopmaak toonbank hier. Laat my voort te gaan, het ek net gedoen het, en duidelik al van my koekies. En nou wat ek gaan doen, is om hou die Shift, net vir 'n goeie maat, en geweld die bladsy te herlaai. Skuif maak net seker dat niks kry in die kas. En hier is die versoek wat gegaan het om heen en weer. So hier het ons 'n versoek, en laat my zoom in hier, en 'n baie van hierdie is 'n soort van vervelige besonderhede vir nou dat die leser het outomaties gestuur, maar laat ons kliek View Bron die rou kop te sien. En as jy in pset6 geduik het reeds, jy sal beslis dinge erken soos hierdie, en miskien 'n paar van hierdie ander lyne hier maar wat is meer interessant vir vandag As ek rol af, nie aan die versoek maar aan die sogenaamde reaksie, hierdie lyn waarskynlik lyk bekend. Dit is 'n goeie ding wanneer jy sien 'n 200 OK. Blykbaar is dit die datum en tyd op die bediener en daar is 'n klomp van die dinge. O, dit is interessant. Blyk wanneer jy gebruik PHP, ten minste in hierdie bediener die bediener spoeg uit wat weergawe van PHP wat jy gebruik. Wat eintlik vir sekuriteit doeleindes, is nie 'n goeie ding. Maar, ons sal terug te kom na wat 'n ander tyd miskien. Maar dit is nou die sappige lyn vandag en ons het kortliks sommige van hierdie, Ek dink met Facebook wanneer ons steek rondom die Inspekteur in daardie tyd, stel koekie is wat die plant daardie klein stukkie inligting op jou rekenaar. Dit is 'n HTTP header dit is effektief vertel jou leser, Chrome, Internet Explorer, wat ook al, hey leser winkel op die gebruiker se hardeskyf, of in die gebruiker se geheue, 'n sleutel genoem PHPSESSID, wat 'n snelskrif notasie vir sessie ID, en gee dit 'n waarde van 0vlk8t, dot, dot, dot. 'N baie lang pseudo ewekansige alfanumeriese string. Dit is net 'n baie groot aantal nie, maar dit is geïnkripteer met letters en nommers sodat die grootte van dit kan wees selfs groter as getalle alleen. En dan, op die pad, pad = / wat beteken net dat hierdie koekie moet wees wat verband hou met die geheel van die webwerf, nie net 'n spesifieke bladsy van die hele ding. So is dit dat virtuele hand stempel. Dit is asof die bediener, Facebook, of in ons geval die toestel, het letterlik geskryf 0vlk8t en so meer, op jou hand. Let op wat die bediener se, doen nie, is dit nie stoor my gebruikersnaam, beslis nie stoor my wagwoord. In plaas daarvan, dit blyk te wees stoor pseudo random inligting sodat niemand kan raai wat my hand stempel is. Op die bediener kant, Intussen het die bediener gaan om te onthou, waarskynlik in 'n databasis of iets, dat die gebruiker, wat in die toekoms bied 'n hand stempel van 0vlk8t, dot, dot, dot, moet geassosieer word met hierdie veral inkopie mandjie, so te sê. Met ander woorde, as ek nou gaan terug hier en herlaai die bladsy, hoe die bediener weet dat ek 'n besoek 'n tyd? Of as ek dit weer doen, hoe die bediener weet dat ek besoek dit twee keer? Wel, as ek neerdaal in hierdie Die mees onlangse versoek, wat is nou die derde wat ek gestuur In totaal, sien my versoek nou. Daar is nog steeds hierdie versoek hier, dieselfde soos voorheen, is daar nog 'n hele klomp van die dinge wat ons as voor geïgnoreer het, maar die heel laaste kop, hierdie tyd, want ek was al hier, is 'n aanbieding van hierdie virtuele hand stempel. Waardeur die lyn hier, nie ingestel koekie maar koekie kolon PHPSESSI = 0vlk8t, dit is net my leser se outomatiese aanbieding van hierdie hand stempel sodat nou die bediener, so gou as wat dit besef, ooh, is dit die gebruiker 0vlk8t dot, dot, dot, Ek kan nou onthou wat hy of sy en herassosieer met die gebruiker wat inligting wat ek wil, en al inligting kan gestoor word deur jou, die programmeerder, in $ _SESSION. So duidelik te wees, as ek oop ware vinnige in gedit dat die werklike lêer, counter.php, in my openbare gids plaaslike gasheer soos voorheen, kennis dat, wel, Ek is uiteindelik stoor in $ _SESSION Quote unquote "counter" die waarde van die vorige toonbank wat Ek kry van hierdie lyne hier dat ons kyk na die laaste keer plus een. So onder die enjinkap, dit is al wat koekies is. Dit is net die soort van digitale hand stempel heen en weer, en eerlik as jy Chrome se oop Inspekteur op enige webwerf jy besoek vandag, met super hoë waarskynlikheid, jy gaan dalk een te sien, Miskien 'n half dosyn koekies onthou word deur jou. En erger nog, as diegene webwerf wat jy besoek alle advertensies, het wat is beslis baie algemeen vandag, en as die advertensies kom van 'n paar sentrale party, iemand soos Google of AdWords as hulle noem een ​​van hul produkte of ander sodanige verskaffers wat verkoop advertensies, wat is interessant, en eerlik, wat is 'n bietjie kommerwekkende, oor hoe HTTP werk, is dat as jy 'n advertensie ingesluit in Facebook.com, en Google.com, en Harvard.edu, enige aantal webtuistes, so dit is so dat daar 'n middeljarige man wat die diens advertensies vir al drie van die webtuistes, dit blyk dat die koekies is per domein. So as jy 'n advertensie uit die dieselfde maatskappy op verskillende webwerwe, daardie maatskappy kan effektief te spoor wat jy is oor al die webtuistes. Harvard dalk nie weet jy besoek Facebook. Facebook kan nie weet nie en jy besoek Harvard. Maar wat ook al die advertensie diens hulle gebruik as dit domein is teenwoordig in beide Harvard.edu web bladsye en Facebook.com webblaaie, hierdie middel man sekerlik weet wie jy is As gevolg van hierdie koekies gedeel oor, of liewer, dat die sogenaamde middelman. So ons sal terug kom na hierdie in sekuriteit implikasies daarvan, maar daar is 'n baie inligting gestoor oor jou enige tyd wat jy besoek die meeste 'n webblad op die internet en dit is werklik verminder na hierdie baie eenvoudige meganisme. Wat gebeur dan as jy super paranoïes en jy besluit om te gaan in Chrome of IE of wat ook al en draai jou koekies? Wat gebeur? Ja? Jy really-- jy dit reg gedoen het? OK. Nee, gaan voort. Publiek: Sekere webwerwe het nie 'n funksie sonder dat dit soos Facebook. David J. MALAN: Ja! So sekere webtuistes sal net ophou werk. En in die meeste webtuistes hierdie dae wat fundamenteel afhanklik is van koekies, veral as hulle jy inteken in, hulle is net gaan om te breek. Omdat oorweeg die alternatief, indien die webwerf het geen manier om te onthou wie jy is, en dus jou web leser is nie verteenwoordig met elke HTTP versoek van die hand stempel, effektief 'n webwerf soos Facebook gaan het jy te vinnig te teken in elke darn tyd jy verander bladsye, of op 'n skakel, wat is sekerlik nie 'n besonder goeie gebruikers ervaring. Sodat daar is ook ' onder die handel offs. So sonder verdere uitstel het, laat ons neem ' vanselfsprekend dat met die web ontwikkeling, in tale soos PHP, kan jy onthou inligting soos dit in die probleem stel sewe wanneer jy jou eie implementeer E * Trade-agtige webwerf met wat te koop en verkoop aandele, sal jy presies onthou wat die gebruiker het gekoop en verkoop en wat hy of sy deur middel van hierdie sessie. Maar ons gaan nodig 'n liefhebber manier as e-pos te begin om inligting rondom. Reg? Op Maandag, het ons gepraat oor Frosh kitsboodskappe en hoe in die weergawe een van daardie webwerf, jaar gelede, al wat ons gedoen het, was E-pos die Proctor wie se in beheer van die binnemuurse sport program, die naam, en die geslag, en of hulle 'n kaptein, en die dorm van iemand wat registreer vir 'n binnemuurse sport. So dit is nie sleg nie, maar hy of sy dan moes sleep deur middel van hul e-pos, 'n sigblad of iets soos dat alles georganiseer te hou. So seker ons as programmeerders kan dit doen vir daardie Proctor. En so gaan in SQL, Structured Query Language, wat gaan kyk mooi verskillende beide C en PHP, en jy sal duik in baie meer hande op PHP en probleem die sewe maar ook SQL, of SQL, dit is 'n taal wat jy gebruik om te praat met 'n databasis. Maar wat is 'n databasis? Wel, jy dink aan 'n databasis, ten minste vir nou, as om net soos 'n Excel-lêer, of as jy 'n Mac-gebruiker 'n getalle lêer, of as jy 'n Google Apps gebruiker 'n Google-sigblad, dit is effektief 'n databasis of werklik spesifiek 'n relasionele databasis. 'N relasionele databasis is net iets wat rye en kolomme, en jy kan enige soort stoor inligting in hierdie rye of kolomme. Maar wat is lekker oor SQL, en oor die werklike databasisse, en nie net spread of Google sigblaaie, is dat jy kan 'n taal gebruik om werklik navrae uit te voer om voeg data, data te verwyder, om te kyk vir data, selfs die belangrikste, en jy nie hê om dit te regverdig met die hand gebruik Soos jy kan tipies 'n Google sigblad soos hierdie. So in SQL, daar is 'n klomp van die fundamentele stellings of stukke van die funksies gebou in. Daar is baie meer as dit, maar jy kan 'n groot afstand gaan net deur die wete dat hierdie taal genoem SQL het ten minste vier stellings wat jy kan benut. Verwyder, vir die verwydering van data, Voeg, vir die toevoeging van rye, Werk, vir die verandering rye, en die kies van, vir die kry terug rye en dit is inderdaad wat SQL doen. Dit werk geheel en al op rye so dat wanneer jy voeg of te verwyder, of werk, of kies wat jy om terug as 'n sogenaamde gevolg stel, soos 'n verskeidenheid van rye. 'N klomp van die rye van 'n tafel. So terug in die dag, en selfs tot vandag toe, jy kan interaksie met die databasis met 'n command line, maar dit is nie baie pret om te gebruik hierdie swart en wit styl venster en eintlik opdragte uit te voer en steek om jou databasis. 'N grafiese gebruikerskoppelvlak, of GUI, is veel meer verkieslik, waarskynlik, en so die instrument wat ons beveel en geïnstalleerde vir jou op die toestel is phpMyAdmin genoem. Dit is 'n totale toeval dat die naam van hierdie ding het PHP in dit, Dit beteken net dat die mense wat geskryf het hierdie program self het dit geskryf in PHP. Maar dit is uiteindelik oor die administrasie 'n databasis bediener, soos 'n MySQL bediener wat jy mag hê, soos jy doen, in die CS50 toestel. So is daar meer detail hier as ons nodig het om te sorg oor vandag, maar wat is die sleutel, is dat aan die linkerkant kant is 'n lys van die databasis wat jy op jou rekenaar, op jou CS50 toestel, of kom finale projekte wat jy dalk het op 'n derde party, 'n maatskappy se webwerf of web-bediener, wat jy kan betaal vir die ruimte. So aan die linkerkant is die databasisse, waarvan een is pset7 wat ek van volgende geleen weke pset, en dan op die top daar sien daar is 'n klomp van oortjies, waarvan een is databasis, SQL, status, gebruikers, uitvoer en so meer. Sodat jy kan gaan 'n lang manier net deur die besef dat die meeste van die gebruikerskoppelvlak is in die boonste linker kolom en oor die top reg tot daar. So, wat kan ons eintlik doen met dit? Wel, laat ons begin skep van 'n bietjie inligting soos volg. Veronderstel die volgende is die geval, soos in net 'n paar dae, jy wil 'n te implementeer webwerf, genaamd CS50 Finansies, en hierdie webwerf kan jy koop haal unquote en verkoop aandele. En dit gaan om uit te vind die prys van dié aandele, uiteindelik soos u sal sien, deur te praat met Yahoo Finansies. Wat wonderlik, het 'n gratis diens waardeur jy in 'n voorraad ENKELE kan slaag soos GOOG vir Google, en dit sal gee jou terug Google se huidige voorraad prys in die afgelope paar minute ten minste. So jy sal gebruik om dit uiteindelik om voor te gee vir die gebruiker te koop en te verkoop werklike voorrade met behulp van virtuele geld, maar die heel eerste ding die gebruiker gaan om te sien is hierdie aanmelding skerm wat vra hulle vir hul gebruikersnaam en wagwoord. En so, een van die eerste uitdagings vir jou in pset7 gaan wees om die agterkant te implementeer databasis, sigblad as jy wil, wat gaan om te slaan gebruikers name en wagwoorde en uiteindelik wat aandele wat hulle besit, en hoeveel, en hoeveel geld hulle het, so 'n klomp van die ander dinge in ander tafels, of spread. So laat ons neem 'n blik op hoe hierdie mag voorkom met die eerste oogopslag. Ek gaan om terug te gaan na die toestel en ek is gaan om te gaan na hierdie URL hier phpMyAdmin localhost / phpmyadmin en jy sal sien dat dit neem my na 'n koppelvlak presies soos ons gesien het op die screen shot, en hier is ek 'n addisionele databasis genoem lesing vir vandag en laat my gaan voort eerste en klik op pset7. Dit lyk asof ek 'n paar opsies te hê, een vir 'n nuwe, vir die skep van 'n nuwe tabel, en 'n skakel na die gebruikers, wat is 'n tabel wat ek reeds geskep. So, wat is 'n tafel? So as jy Excel gebruik voor, en as jy gebruik nommers of Google Sigblaaie, jy maak 'n venster en jy kry 'n hele klomp rye en kolomme, maar dan moet jy gewoonlik werkkaarte langs die onderkant, of aparte oortjies. Jy kan dink van elke werkblad as 'n tabel sodat databasis, uiteindelik, is 'n kombinasie van een of meer tafels, een of meer werkkaarte, in die wêreld van 'n normale sigblad. So laat my voort te gaan en Klik op hierdie werkblad dat ek gemaakte, genaamd gebruikers, a.k.a. Databasis. En as ek scroll down hier, laat my zoom uit 'n bietjie, dit is wat phpMyAdmin vertel ons is die binnekant van hierdie tabel nou. Dit is 'n bietjie verwarrend op die eerste oogopslag omdat die UI is nie die mooiste ding in die wêreld, maar wat interessant is, is hierdie deel hier. ID, gebruikersnaam, en hash. In advance, en jy sal gegee word dit in die probleem stel sewe, Ons gee jou 'n lêer met 'n super klein databasis, geleen eintlik uit die hacker uitgawe van die probleem sit twee, binnekant van wat daar is ses rye. Een vir Belinda al die pad af na een vir Zamyla, en kennisgewing aan die linkerkant van die gebruikers is uniek ID's soos een, twee, drie, vier, vyf, ses, heelgetalle, en dan aan die regterkant is twee velde. En as, is die kans, jy dit nie doen nie die hacker uitgawe probleem sit twee, maar 'n gemors is net soos 'n geënkripteerde wagwoord met 'n paar voorbehoude. En so, wat jy hier sien is die geïnkripteer weergawes van al ses van ons wagwoorde van probleem sit twee se hacker uitgawe. Nou aan die linkerkant is net 'n paar grafiese dinge, redigering hierdie ry, kopiëring hierdie ry, die verwydering van hierdie ry. Maar wat is interessant nou is die volgende. Ek kan eintlik begin eksperimenteer met hierdie tafel. So as ek gaan en klik op die SQL blad, ek kry hierdie groot teks boks. En dit is nie hoe ons gaan doen dit toe eintlik kode skryf. Om duidelik te wees, phpMyAdmin is net 'n instrument wat gaan om ons te laat sak om die databasis en laat ons eksperimenteer met navrae. So byvoorbeeld, veronderstel Ek voer presies dit. Select, wat is een van daardie sleutelwoorde wat ek vroeër genoem, ster, wat alle die kolomme in 'n tabel. Van wat tafel? Wel, gebruikers. En kennis is daar hierdie vreemde konvensie in SQL waar jy eintlik gebruik terug bosluise, tipies, nie enkele aanhalings en nie dubbel aanhalings wanneer jy praat oor tafels name, sodat die rug aanhaling is die ding op die boonste linker van jou sleutelbord mees waarskynlik. So laat my voort te gaan nou en net laat dit alleen en rol af en klik op Go, en ons is eintlik gaan dieselfde ding om te sien. Ons het nou net uitgevoer 'n SQL navraag sê select alles ster uit tabel genoem gebruikers, en wat jy terug kry, is hierdie. Uiteindelik, sal ons in staat wees om doen dieselfde ding in die kode, maar vir nou al wat ek wou nie was dit sien in my leser. Wel, laat ons iets doen 'n bietjie anders. Laat my terug te gaan na die blad SQL, en laat ons net sê dat wat? Zamyla verloor het al van haar geld, en daarom is dit tyd vir ons om haar as 'n gebruiker te verwyder. Sy is nie meer in te teken. So ek gaan om te sê verwyder from-- Wel, in stand te hou kapitalisasiekoerse vir konsekwentheid, verwyder van die gebruikers waar. En so kan ons hulle het predicaten, of hierdie kwalifiseerders, aan die einde van my verklaring waar en hoe kan ek Zamyla verwyder? Deur haar naam Zamyla, sodat die kolom, een van die kolomme vernoem is, so waar name = "Zamyla". En hier gebruik ek dubbel aanhalings of 'n enkele aanhalings, jy gebruik net die agterkant bosluise wanneer praat oor die naam, byvoorbeeld, tabelle of velde. En laat my klik op gaan hier. En nou, die webblad is 'n bietjie uptight. Of jy regtig wil uit te voer verwyder van die gebruikers waar naam gelyk Zamyla? Ja. So nou, as ons gaan terug na my tafel Gebruik gebruikers, sien dat Hm. Ek goofed. En in die feit, ek soort klik weg so vinnig jy het nie eens sien die rooi fout boodskap, miskien. Wat het ek verkeerd gedoen? Publiek: Jy het nie nodig haar naam te kapitaliseer. David J. Malan Ja ek gekapitaliseer haar naam, maar haar username-- eintlik ek het 'n paar foute, reg? Een, haar gebruikersnaam zamyla, klein Z, en die kolom naam is gebruikersnaam, noem nie, so kom ons doen dit weer. Laat my voort te gaan en verwyder van gebruikers waar gebruikersnaam gelyk quote unquote "Zamyla". Alle reg? So dit lyk 'n bietjie beter, laat my gaan rol af en klik op Go. Dit is nog steeds gaan gil op my om seker te wees. Ek kliek Ja, en nou is ons sien, eerlik dit gebeur het, regtig vinnig, minder as een tweede beslis, hierdie is presies die navraag wat uitgevoer het. Om te bevestig, laat my op gebruikers en inderdaad nou Zamyla is weg. Nou laat doen die teenoorgestelde. Veronderstel dat Gabe wil registreer vir die webwerf. Wat is die SQL navraag, wat is die opdrag kon ek tik Gabe te voeg? Wel, dit is redelik eenvoudig. Plaas in die gebruikers, en nou dit raak 'n bietjie kripties. Ek nodig het om te gee, aan die bediener, wat velde Ek wil toewys. Ek het nie regtig omgee wat Gabe se ID getal is, so ek gaan om dit te slaan. Ek plaas gaan om te sê gebruikersnaam, hash, en dan die waardes wat ek wil om te sit daar gaan wees Gabe. En dan sy hash, weet ek nie. So vir nou, ek gaan laat dit as 'n groot te doen nie. Ons sal terug te kom na wat in die probleem stel spec hoe jy eintlik doen nie. So sien, weer, die sintaksis. Voeg in tabel naam, dan 'n hakies lys van die velde, die kolomme wat jy wil by te voeg waardes, en dan net presies dieselfde bestel links na regterkant van die waardes wat jy wil byvoeg, en dit is net wikkel, want die teks is 'n bietjie lank. So nou laat my op Go. Een ry ingevoeg. En nou as ek gaan terug na gebruikers, wat is interessant is dat nie net is Gabe nou in die databasis, wat glo sy ID? Wel dit is sewe. Hoekom is dit sewe toe ek het dit nie voeg? So hierdie, ook, is een van die eienskappe wat jy kry van die databasis. Baie van die gebou in funksies. Dit blyk dat wanneer geskep hierdie tabel, Ek gedefinieerde dit outomaties toewys 'n ID in so 'n manier dat dit vermeerderings. So as jy ooit steek rond, en kyk na wat jou Facebook ID getal is, is dit deesdae nie regtig 'n ding om te doen nie, maar Facebook as 'n API, Aansoek Programming Interface, waardeur jy kan terug te kry 'n hele klomp van die data oor jouself, oor jou vriende, en jou verbindings. En wat gebruik word om te vriendelik wees koel, terug in die dag, was om te kyk wat jou Facebook ID-nommer was. Mark Zuckerberg se, byvoorbeeld, is drie want hy was die skrywer van die site. En as die storie gaan, het hy ' twee toets rekeninge, gebruikers een en twee, wat hy dan verwyder. En so, Zuck, soos sy gebruikersnaam op Facebook, is ID nommer drie, en almal van ons het getalle veel groter as drie hierdie dae. Trouens, op 'n sekere punt Facebook wegbeweeg uit selfs met behulp van 'n int, wat is 'n 32-bit waarde, vir die gebruik van die volgende stap, in wese 'n lang lang sodat dat hulle kan akkommodeer selfs meer gebruikers te registreer. So 'n prettige klein historiese feit. So dit is net die basiese sintaks waarmee ons dalk 'n paar van die uitvoer navrae, maar ons kan eintlik doen 'n klomp meer dinge met SQL. En jy sal sien, uiteindelik, in die probleem stel sewe dat jy 'n te maak aantal ontwerp besluite te neem, onder hulle gaan wees wat datatipes te gebruik. So, net soos in C, is daar data tipes in 'n databasis soos MySQL, en die data tipes wat jy het om van te kies vanaf sluit hierdie velde hier. Kar, varchar, Int, groot int, desimale en datum tyd, en vele ander. So laat ons eintlik doen. Kom ons maak dat ons nie hand wat jy hierdie gebruiker se tafel en laat my gaan voort en skep, myself, in die lesings database-- eintlik laat my voort te gaan en verwyder die tafel Ek het hier reeds sodat ons kan eintlik maak dit. Oeps. Ek gaan om dit te laat val tafel, en nou is ek gaan weer na die lesings databasis hier, Ek gaan 'n tafel te skep genoem gebruikers en laat doen net drie kolomme aanvanklik en klik op Go. Nou, vir die grootste deel, Weereens, dit is net die gebruik van hierdie grafiese hulpmiddel genoem phpMyAdmin, en wat ons nou doen skep 'n tafel. So, dit is soos om File, New, en die skep van 'n nuwe Excel lêer. So dit is wat my vra 'n paar vrae, van links na regs, Wat is die naam van die eerste kolom, En dan is die naam van die tweede kolom en die naam van die derde. So laat herskep nie. ID, en dan gebruikersnaam was een, en dan hash was 'n ander. So wat moet die data tipe wees nou vir 'n gebied soos ID? Hier is die hele lys van data tipes beskikbaar vir jou in 'n databasis, en vir nou, laat ons gaan net met int. 32-bietjie waarde, doen ek nie, dink realisties Ek is gaan meer as 4 miljard te hê gebruikers in my rekening, in my diens, so ek gaan beweeg te hou op na die volgende vraag. Ek gaan nie om te spesifiseer 'n lengte of waardes, dit is nie van toepassing hier vir 'n int, per se. En nou kan ek spesifiseer, blykbaar, 'n standaard waarde, wat ek gaan nie te spesifiseer. 'N samestelling, ek weet nie wat dit is nie. 'N kenmerk. Nou is ons werklik doen 'n ontwerp besluit. So is daar 'n paar velde hier, nie alle van wat van toepassing is nie, maar unsigned net beteken wat? Dat die int moet wees? Net nie-negatief. So dit het 0 op up. Nee, ek is nie van plan om te gaan, want Ek wil elke gebruiker 'n ID te hê, dit kan nie nul wees. En dan, ons kry om 'n paar meer interessante ontwerp besluite soos hierdie. Ons sal terug te kom na dit in 'n oomblik, maar wat nog 'n kenmerk van die databasis is, is dat jy kan vertel die databasis bediener voort te gaan en te optimaliseer jouself, jou RAM en hardeskyf ruimte, sodat kies, en inserts, en verwyder, en updates is baie vinnig. Vergelyk dit met pset5. As jy wil om te kyk om iets in jou hash tafel, wat jy dink van 'n databasis, wat moes al die om te doen werk vir die maak van jou hash tafel vinnig. Dit is soos, natuurlik, jy. Reg? Jy het om te sit in al die tyd fyn tuning dinge, kry 'n hash funksie reg, uitzoeken hoe baie emmers te hê. Maar wat is lekker, weer, oor 'n databasis jy net voorspel dat al hierdie aan ander mense wat gedink dit deur vir jou, en wat Ek gaan hier onder sê indeks is dat my ID-veld gaan na die primêre manier van wees identifisering van gebruikers in hierdie databasis. Ek gaan nie om te dink van Zamyla as Zamyla, Ek gaan om te dink aan haar as die nommer 6. Hoekom is dit dalk beter intuïtief te dink en model elk van jou individuele rye met behulp 'n aantal in plaas van iets soos 'n string, soos die Zamyla of Gabe of meer string nog? Ja? GEHOOR: 'n ID is uniek? David J. Malan weer sê? GEHOOR: 'n ID is uniek? David J. Malan 'n ID is uniek, maar suppose-- soos die geval in die algemeen met gebruikers, veronderstel Ek het ook gesê daar kan slegs een Zamyla in die wêreld, en slegs een Gabe. Ek kon die uniekheid lê beperking op snare, ook, as ek wou. So nie 'n slegte gedagte. Publiek: meer veilig is. David J. Malan Meer veilige, hoekom? Publiek: Jy kan nie sê watter is wat, soos in die gebruiker. David J. Malan OK, jy kan nie wat gebruikers vertel is wat so is daar 'n privaatheid aspek aan dit, veral as die ID's miskien verskyn in die URLs. So seker nie, wat kan soort werk ook. Ander gedagtes? Ja? Publiek: Dit is makliker om te voer bedrywighede op 'n int. David J. Malan Dit is die werklike skopper. Dit is net meer doeltreffende, of makliker vir die rekenaar, bedrywighede uit te voer op 'n heelgetal. Reg? 'N int is gewaarborg wees 32-bit, terwyl Zamyla is 'n paar karakters lank, Gabriel is nog 'n paar karakters lank, Davenport is baie lang, en dit is dus nie besonder doeltreffend te gebruik snare waardes te vergelyk en kyk vir velde, en werk velde, As jy kan wegkom met net een heelgetal. Net 32 ​​stukkies. So gebruikers, ook op hierdie manier, hoef nie te uniek wees, hoewel hulle waarskynlik moet wees, en selfs op hierdie manier te 'n gebruiker kan toegelaat word om te sy of haar gebruikersnaam verander. So laat ons nou gaan dit as die primêre middel van die identifisering van die gebruiker. Dit word vertel van die databasis voort te gaan en te optimaliseer jouself sodat kyk ups op ID is super vinnig. AI, verskriklik naam, net beteken Auto Vermeerder, en dit is die tjek boks wat ons nodig het om te kyk om te bepaal dat die ID-veld te word outomaties opgedateer vir my, en dan gaan ek gaan na die reg hier en eerlik ek is nie regtig belangstel in meer van hierdie velde nie. Beslis nie vandag nie. So ek gaan hier terug te gaan, die eerste kolom, waar Ek moet gebruikersnaam spesifiseer en hash, en laat ons ten minste fokus op die tweede een vir nou. Int is waarskynlik nie die regte oproep, So, wat maak meer sin miskien? Publiek: teks. David J. Malan weer sê? Publiek: teks. David J. Malan teks? OK, hoor ek die teks. Wat anders? Ons soort van 'n klomp van die keuses wat die teks in die natuur. So wanneer en waarom doen jy 'n paar van hierdie gebruik? Wel kar, in teenstelling met wat jy dalk dink, is nie 'n enkele karakter. Dit is 'n spesifieke aantal karakters. So as ons weet dat alle gebruikers moet wees soos agt karakters, soos gebruik te algemeen in ouer wees rekenaar stelsels, kan ek sê kar en dan kan ek sê 8 hier. Dit is wanneer die derde kolom word toepassing wanneer die skep van 'n tafel. Maar dit is soort van irriterende want sommige mense wil 'n langer gebruikersnaam te hê as agt karakters, sommige mense dalk wil 'n korter gebruikersnaam, so hoekom verbind myself aan 'n spesifieke nommer? Hoekom nie 'n veranderlike aantal karakters en net sê dat die maksimum lengte van 'n naam is, weet ek nie, soos 64 karakters. Ek kan nie dink aan enige vriende wat name het meer as 64 karakters, en selfs as dit is te kort om julle kon beslis stamp dit arbitrêr. So varchar is 'n veranderlike aantal karakters. Die teks is nie 'n slegte instink, en eerlik dat die soort van doen wat dit sê, maar 'n teks veld kan wees soos 65,000 grepe ten minste. Dit is waarskynlik overkill vir 'n gebied, en in die feit, yup, 65.535. Dit is waarskynlik overkill vir 'n noem, so ons sal vashou, tipies, met varchars vir tekstuele gebied en hash, ook. Hash, dit blyk, kan ons nie 'n varchar asook of iets soos dit, maar ons sal nie vandag fokus op die kriptografie daar en die getalle sodat ons kan eintlik wil gebruik vir sy lengte. Maar laat my gaan na die regterkant. Jy kan slegs een primêre indeks vir 'n tafel, maar wil ek nie enige van hierdie toe te pas, nou, gebruikersnaam, sou jy sê? Wat moet gebruikersnaam gebaseer op 'n vae begrip van hierdie vier opsies? Net deur hul name? Publiek: Unieke. David J. Malan So unieke, reg? So dit blyk dat nie net kon vertel 'n databasis in advance, dit is die primêre manier identifiseer velde. Jy kan ook sê dit is gaan 'n unieke gebied te wees. Dit gaan nie om te wees die ding wat ek staatmaak op, maar ek sou die databasis te hou wese het dat as toestand, sodat dat as ek ooit probeer om te registreer twee gebruikers met dieselfde naam, die databasis plat uit gaan nie om my te laat. Ek is dalk 'n addisionele kode het in PHP wat verhoed dat so veel nie, maar die databasis ook kan verseker dat dit is nooit gaan gebeur nie. Nou, as 'n eenkant, veral as jy dink oor die finale projekte, Hou in gedagte dit indeks en vol teks is eintlik baie nuttig. As jy 'n groter databasis, nie met dosyne, maar met honderde of duisende of selfs miljoene velde, kan jy ook vertel van die databasis in advance dit is 'n gebied gaan ek op te soek op 'n baie. Miskien is sy gebruikersnaam, Miskien is dit bio, as jy 'n Facebook-agtige webwerf wat het die lede wat die gebruiker se toegelaat te red, en as jy wil vertel die databasis in advance Ek gaan word soek op hierdie gebied 'n baie, maar dit is nie noodwendig uniek, jy kan spesifiseer te skep vir my 'n indeks. Of jy kan ook sê laat my toe om te doen soort van arbitrêre soektogte soos Command of Control F, soos jy dalk in 'n woordverwerker, sodat jy kan arbitrêre snare kyk of substrings in hierdie veld. Met ander woorde, is ons om tot op die punt in die semester waar jy nie hoef te bekommer oor hoe om dinge te doeltreffend toe te pas. Jy hoef net te weet wat ontwerp besluite te so dat jy maak die gebruik van die regte gereedskap vir die handel om sodoende funksies wat ander mense vir jou gebou. So om saam te vat, moet slegs primêre een het, kan jy net een, en dit is die ding wat jy pleeg deur die gebruik van die identifisering velde uniek. Unieke is net soortgelyke in gees nie, maar jy dalk net soms gebruik, maar jy wil die databasis om dit te lê. Indeks beteken net preemptively versnel dinge in die toekoms sodat ek kan soek vir dinge in hierdie veld. En dan volledige teks is algemeen vir paragrawe, of essays, of 'n groot liggame van die teks waar jy dalk ook wil hê wilde kaarte soos die ekwivalent van die sterre. Right. So dit was soort van 'n baie om te alles op een slag. Kom ons kyk of ons nie kan distilleer 'n paar van hierdie eienskappe en dan iets te bou baie eenvoudig, maar kragtig. So tussen die ander ontwerp besluite jy uiteindelik gaan hê is saam die lyne van die stoor enjins. En laat my net melding maak van hierdie in afwagting van finale projekte, en afwagting van Let's say-- geen laat doen. Kom ons bou hierdie klein aansoek eerste. Ek gaan om te gaan in my terminale venster, en hier is nie slegs counter.php, wat ons nou gaan om ontslae te raak van nie meer as related, maar ons het 'n hele klomp dopgehou en dit gaan wees baie soortgelyk in die gees na wat jy sien in die probleem stel sewe. So het ons drie dopgehou sluit openbare en templates, wat is presies waar ons op af links Maandag met ons hele MVC paradigma. En om herhaling in die openbaar gaan om te gaan enige lêer wat ek wil hê dat gebruikers om werklik v in staat wees om te besoek in die leser via URL. Sjabloon. Wat het ons in templates? Watter soort dinge? Daar was nie veel nie, maar 'n paar lêers ten minste op Maandag. Ja. Publiek: Opskrif en Voetskrif? David J. Malan Opskrif en Voetskrif. So ons het iets soortgelyks vandag ook. Ons het 'n paar lêers, maar Footer ek sien, Selected ek sien, en dan 'n klomp van die ander lêers. So, dit is die ekwivalent van die V MVC oog, wat weer, sal 'n bietjie meer duidelik in die probleem stel sewe, maar dit is net 'n gids ek om 'n baie van my estetika. Baie van my HTML, 'n baie van my vorms. Intussen sluit, is 'n ander gids wat hierdie drie lêers en laat ons neem 'n vinnige blik op hierdie. Ek gaan om voort te gaan en maak config.php. Soos dit blyk, baie soos vroeër in die kwartaal, jy skerp ingesluit CS50 dot h met pset7. In vandag se voorbeeld, jy gaan die ekwivalent van wat om te doen met 'n eis verklaring wat effektief sluit hierdie paar lyne. So duidelik te wees, is dit 'n lêer genaamd. En sien wat dit doen. Dit is blykbaar iets te doen kriptiese, draai op fout boodskappe sodat jy dit kan sien in die leser. Dit is dan blykbaar wat twee ander lêers sodat dit is soos # include in C, en dan is dit een wat ons gesien het, en ons het staatgemaak op, dit blyk op dat inkopie mandjie soos funksies. Dit beteken 'n koekie wil heen en weer gestuur. So hoekom is dit interessant? Wel, as ons gaan terug na hierdie gids en oop, byvoorbeeld, constance.php. Let daarop dat PHP doen ondersteuning konstantes, dit is nie heeltemal soos # define in C. In plaas daarvan, kan jy letterlik sê gedefinieer, en kennis dat ek by voorbaat het gestoor vier konstantes in hierdie lêer. Een vir vandag se databasis vir my wagwoord vir my gebruikersnaam, en die naam van die bediener. So dit is eintlik gaan wees redelik soortgelyk in probleem die sewe. En laastens, en dit is waar ek gaan 'n paar mooi funksie te kry uit die personeel, in functions.php is 'n klomp van die kode wat ons het geskryf, en ek gesteel het 'n paar van hierdie van die probleem die sewe vir vandag, wat nie 'n klomp van die dinge en laat ons net kyk na een van hulle in die besonder. Hierdie funksie hier, navraag, gaan wees die PHP funksie noem ons ten einde SQL te voer. 'N Oomblik gelede was ons met behulp van phpMyAdmin, maar dit is net vir soort leer doeleindes en diagnostiese doeleindes en vergeet jou databasis stel. Wanneer jy eintlik gebruik om jou databasis, julle, die mens, is natuurlik nie gaan word die trek van 'n web bladsy elke keer as iemand registreer. Jy gaan die kode te skryf wat inserts en verwyder gebruikers op aanvraag, en ons gaan om dit te doen deur middel van die soektog funksie. As ek blaai nou af, is daar gaan 'n paar meer funksies te wees. Redirect gaan 'n funksie wat ons geskryf het vir jou wat jy kan stuur die gebruiker na 'n ander URL, en lewer 'n funksie is, hou ons gesien het op Maandag, wat eintlik lewer 'n sjabloon, maar meer oor dit in die vorm van pset7 se eie loop deur. Vir nou, laat ons gaan voort en doen dit. Laat my gaan in my lesings tafel en sien dat daar tans niks hier net nog nie, en laat my ook gaan in my openbare gids, waar daar is net een lêer, index.php. Hierdie lêer blyk te wees, super eenvoudige Op die oomblik lyk dit net soos hierdie. Baie soos hoe ons links af op Maandag. Ek is wat hierdie lêer, config.php, wat in 'n sluit gids, wat is in dot dot, my ouers, en dan is dit net die lewering van hierdie lêer. So, wat is hierdie lêer? Kom ons oopmaak in my templates form.php, en ons sal dit sien. Super eenvoudige, glo hierdie vorm gaan dien deur 'n $ _GET of $ _POST. Vinnige gesonde verstand tjek. Letterlik visueel soek die lêer. Metode gelyk aan post. So dit gaan nie die URL te gebruik, soos Google doen, dit gaan soort van vel die inligting agter die skerms en dit is gaan om aan 'n lêer genaamd register.php, en dit is die lêer Ons het nog nie geskryf maar wat dit gaan lyk is dit. As ek na 'n aparte bladsy Dit is wat localhost / index.php lyk. En weer, die bediener se net die veronderstelling index.php. Betree. So dit is waar ons is op, en wat ek wil doen is in staat wees om dinge te tik soos Dawid, en dan my selfoon nommer, wat sal sê 617-555-1212 vir nou, registreer en nou register.php is nie gevind nie. So ek het dit nodig om te implementeer. So laat ons vinnig sweep iets soos hierdie op. Laat my gaan in my openbare gids en doen gedit van register.php, en nou is ek gaan om voort te gaan en begin PHP af, soos ons gedoen het op Maandag, en naby PHP se tag, en Kom ons doen 'n paar dinge. So een, ek ken, nadat skriftelike daardie vorm, wat ek wil om te kyk vir die volgende. As dit leeg is, wat die gebruiker getik in die naam veld, Ek gaan om iets te sê soos verskoning ontbreek naam. Verskoning, intussen, is nie 'n gebou in PHP ding, dit is 'n funksie wat ons geskryf het in functions.php vir pset7 sodat jy toegang tot dit. Anders as die ander gebied leeg, aantal, dan is ek gaan vra om verskoning vir die gebruiker en sê ontbrekende getal. Slaan hierdie lêer. Nou laat ons gaan terug na my leser, gaan terug na die forum probeer weer. Registreer nie. OK. Niks gebeur nie, wat goed is. Ek het nie 'n fout boodskap. Maar as in plaas daarvan, laat herlaai bladsy, en nie voorsien nie. Damn dit. Doen nie. Registreer nie. Wat het ek verkeerd gedoen? Indien leeg, $ _POST naam. Sê weer? O ja, natuurlik. Ek het vergeet om die belangrikste deel, wat is nodig ("../ sluit / config.php."). Ek moet toegang tot die te hê verskoning funksie, wat Daarom niks gebeur nie. Die funksie nie eintlik nie bestaan ​​nie. So kom ons probeer dit weer. Kom ons herlaai die bladsy, klik Register. OK. Daar is dit. So, die uitset ons sien hier is die resultaat van die roeping van 'n verskoning funksie, super eenvoudige, en dit net druk uit wat ookal Ek gee dit as 'n argument. Alle reg, so laat ons saam te werk. Kom ons verskaf my naam soos Dawid, registreer, ontbreek aantal OK Let's voorsiening te maak dat, ook. 617-555-1212. Registreer nie. OK. So alles is nou goed, net mooi niks interessante gebeur. So nou laat ons iets meer interessante gebeur soos hierdie. Laat my gaan in phpMyAdmin, en laat ons eintlik 'n tabel met die naam gebruikers Ek gaan om dit te gee drie kolomme, en ek sal vinnig skep ID, en dan noem, en dan die getal, en die ID veld Ek is gaan verlaat as 'n int. Die naam veld gaan ek te verlaat as 'n varchar, en ons sal sê 64, ietwat arbitrêr. Die getal gaan ek te maak, jy weet wat? Ons gaan Ondersteun ons getalle hier so ek gaan om iets te doen soos kar en dan 10 karakters Max vir 'n area kode en dan sewe syfers. En dan hier, ek gaan spesifiseer motor inkrement hierdie veld, maak dit 'n primêre sleutel, en Ek gaan voort en gaan nie check enige van hierdie ander bokse. So toe ek nou uiteindelik op Save, en ek gaan terug na my gebruikers tafel, dit is hoe dit lyk as ek nou op 'n nuwe blad struktuur. So hierdie, om duidelik te wees, is net phpMyAdmin se manier sê jou databasis 'n ID, 'n naam en 'n aantal met die spesifieke konfigurasies en ons sal die res van die velde ignoreer daar vir nou. So nou wat ek wil doen? So as ek gaan nou in my bron-kode, as alles goed gaan Ek wil graag die volgende soektog uit te voer. Voeg in, en ek kan net sê gebruikers ek doen nie streng nodig om daardie terug bosluise as dit nie 'n gevaarlike woord soos gebruikers. Ek gaan om te sê die naam, nommer, en dan hier Ek is gaan nie hard-kode van die syfer van die waardes nie. Ek gaan twee vraagtekens te sit. En dit is 'n konvensie in baie tale waardeur as jy wil hê 'n plekhouer vir 'n string jy gaan om die vraag te gebruik punte, om redes wat ons sal kom terug om te gesels oor sekuriteit, en hier Ek gaan in dié om te slaag twee velde plaas naam, en dan post nommer, En nou het die lêer stoor. En nou gaan ek gaan hier is 'n super net sê rendersuccess.php, wat gaan 'n ander sjabloon te wees. Ek gaan regtig vinnig skep. Ek en Geditsuccess.php gaan net H1 sukses in die lêer te sê. Alle regte. So nou, laat ons gaan terug na die leser, waar ek besoek voor. Kom ons gaan voort en bevestig ek geskryf Dawid, het ek in 'n telefoonnommer, registreer nie. Damn dit. Wat het ek verkeerd gedoen? So ek sien 'n fout hier, jy het 'n fout in jou SQL syntax. Laat my terug na gedit spring, laat my terug te gaan na register.php, en wat het ek laat dit was belangrik laaste tyd? Ek moet hierdie. Jy wil hê dat die ander as uit te ken wat voorheen opgemerk het, maar ek het dit nodig. So nou, laat ons gaan terug, en hierdie was nuttig om te sien in die leser en dit is die rede waarom in config.php Ons spoeg uit foute. Kom ons gaan voort en laai, kliek Gaan voort, sukses. So nou laat my gaan na my databasis hier en kliek op die gebruikers, en blaai en sien ek nou het Dawid in my databasis hier. Nou tegnies hierdie webwerf nog nie op die openbare internet, so ek kan nie ander het mense om hier, maar as ek nou wou vir Byvoorbeeld, stuur vir my 'n SMS-boodskap. Kom ons gaan uit op 'n ledemaat hier en sien of dit werklik werk. Ek gaan om voort te gaan en verwyder hierdie ry en ons sal vervaag hierdie in die video later so ons het nie die hele internet SMS my en ons sal nou gaan na die leser en ons sal gaan oor te doseer en ons sal tik in verskillende aantal hier, registreer, sukses. So nou, my eie nommer is vermoedelik in die databasis, en nou is die pret deel. Kom ons eintlik PHP gebruik om te doen iets programmaties, óf uit die opdrag lyn of van elders, en nou is ek net gaan dit eenvoudig te hou en ek gaan om te gaan in my gids hier en doen die volgende. Gedit script kom ons sê, ons sal noem dit teks, #! / gebruiker / bin / env PHP, soos ons gesien het die laaste keer. PHP. Nou gaan ek nie nodig sluit config.php, Selfs al sou veroorsaak 'n effense probleem. En nou is ek gaan om voort te gaan en sê rye, navraag, kies ster van die gebruikers, en nou hier gaan ek 'n tegniek om te doen van verlede tyd vir elke rye as ry. En ek gaan iets eenvoudig te doen. Printf kom ons sê die naam is dit, en die getal is dit, backslash n. En nou gaan ek slaag in ry quote unquote naam, en ry quote unquote nommer, En nou, laat ons gaan voort en my terminale venster chmod dit 'n + x te maak Dit script genoem teks uitvoerbare. En nou, laat ons hardloop teks. OK, so vorder. So ek het nou geskryf om 'n command line script, in 'n taal, die sogenaamde PHP, dat, as gevolg van wat vereis dat die lyn, het toegang tot al die opset konstantes wat ek verskaf. Die naam van die databasis en so meer. Trouens, net om duidelik te wees dat dit nie 'n gelukskoot, Laat my voort te gaan en te registreer, baie vinnig iemand anders soos Rob en Ek sal hom gee die 555-1212 nommer. En nou, as ek die script weer, neem kennis van die krag van wat ons doen met die databasis. Nou het ek dadelik gesien wat die twee ander rye is in my databasis. So nou, laat ons probeer om iets te doen selfs liefhebber binnekant van, en dit is die deel wat ons het nie vooraf getoets is, So het die laaste keer dat ek dit gedoen het dinge gaan verskriklik mis, ons het video tot daardie effek. Eintlik, ja, snaaks eenkant. So het die laaste tyd, in 'n lesings soos twee jaar gelede, het ons besluit, het ek besluit om te wees al sou dit 'n goeie idee wees om dinamiese e-pos in klas, die gebruik van die hele databasis CS50 Studente wat gegee het vir ons hul getalle en hulle selfoon draers wat jy kan onthou van pset0, hoe om te redeneer, dit blyk Ek het 'n klein fout in my program en het 'n paar foute in 2012, dink ek. Waardeur, een wat ek het vir lus wat het presies hierdie soort van ding, iterating oor die databasis, om 'n naam uit die databasis, naam uit die databasis, en dan op elke herhaling van die lus ek stuur 'n e-pos. Maar in plaas van die stuur van 'n e-pos, ek gestuur een e-pos die eerste iterasie, en twee e-pos 'n tweede iterasie, gestuur drie e-pos 'n tweede iterasie, wat as jy kan onthou van ons bespreking van asimptotiese notasie hierdie groot O slegte, soos n vierkant is hoe baie boodskappe wat ek gestuur het, maar dit was nie eens e-pos dit was die teks boodskappe. En soos jy weet, is die bywoning is nie super hoë teen die einde van die semester en so het ek gedink dit oulik op sou wees die tyd om te sê, "Hoekom is jy nie klas?" In die teks boodskap wat ek gestuur na die hele klas, en dit was snaaks 50% van die hou klas, maar die ander 50%, van wie sommige baie bang, ek het ongelooflik verskonend soet notas aan die personeel vra om verskoning vir nadat die lesing gemis net hierdie keer, reg? So wat sou verskriklik mis. So in die gees, laat ons probeer om hierdie weer, maar net met my nommer. Vooraf, in functions.php, Ek het hierdie funksie geskryf hier. Dit is bekend as die teks, en dit neem op drie argumente. 'N getal, 'n draer, en 'n boodskap. Ek gebruik 'n skakelaar verklaring, wat wonderlik PHP neem snare, nie net heelgetalle, en ek het nie implementeer al die ondersteuning vir hierdie nog, Ek het net gedoen AT & T en Verizon. Omdat dit blyk wat met hierdie draers hulle het e-pos na SMS poorte, waardeur jy kan eintlik stuur 'n e-pos na 'n adres soos telefoonnommer by vtext.com en indien die gebruiker het nie geblokkeer die boodskappe, sal dit gaan deur is 'n SMS-boodskap. Nou om dit te doen, ek gaan te hê om by te voeg een veld baie vinnig na my databasis. Ek gaan om te gaan in my struktuur, en ek is gaan om voort te gaan en voeg 'n gebied aan die einde van die tafel. Kom ons kliek Gaan, en ek is gaan hierdie draer te roep en nou is ek gaan laat dit as 'n bar teks, maar ons kan wees liefhebber in die toekoms. Ek gaan vinnig gaan in my tafel, en ek is gaan om ontslae te raak van Rob, want dit is 'n valse nommer, Ek gaan om te gaan in wysig hier en ek is gaan my draer met die hand te verander wees Verizon, wat dit is, en nou hier. Kom ons doen 'n vinnige gesonde verstand tjek. Kom ons open ons teks script, wat lyk soos hierdie, draer is% s. Ons het 'n baie meer fout doen nagaan as wat ek gedoen het in 2012, draer. En nou, ek gaan om te gaan voor en re-run die script. OK. Draer is Verizon, wat beteken nou hopelik kan ek net dit doen. Korrek vanjaar, hopelik, hier gaan ons. So binnekant van hierdie lus, ek is gaan nie net hierdie printf, Ek gaan ook die teks te roep en die gebruik van hierdie funksie herroep was dit 'n nommer, 'n karweier, en 'n boodskap. So laat ons sien, is die getal gaan wees ry quote unquote "nommer" ry quote unquote "draer" en die laaste een was die boodskap. Moet nie skroef hierdie jaar, kommapunt. OK. Vingers gekruis. Kom ons kyk of dit werk. Alle reg, so. Hier gaan ons. Kom ons ontsluit die telefoon, steek jou vingers, damn dit. Undefined variable may-- O Wag, wag, wag, ware vinnig. Real vinnig, baie vinnig. Dit is heeltemal die moeite werd. Laat my gryp, laat my gryp, uh-oh. Dankie, die tekste het begin van iemand anders. Laat my voort te gaan en maak werklike vinnig, dropbox.php / pos in hier. Bystand. Heeltemal die moeite werd. Afgelaai. OK, bron src8m. OK. Een nodig het meer lyn hier. O daar is dit, dit is in Frosh Chat, dit is in register op drie. Ag hello, Margo, baie dankie. OK, en ek mis hierdie lyn hier. So laat my vinnig gryp hierdie lyn van kode, Dit sluit die pos of biblioteek dat ek eintlik wil gebruik, Ek gaan vinnig terug te gaan na funksies, Ek gaan om te gaan na die top van hierdie lêer en vereis hierdie lêer, asook, en nou is ek gaan regtig oor my vingers wanneer ek gaan terug na die opdrag script, wat binne vandag se plaaslike gasheer gids. Begin teks. Betree. Pos. Bystand. Bystand. Pos. O, OK. Hier gaan ons. Pos kry nuwe PHP mail. Het ek dit reg? Damn dit. Aan- O, wag, wag, wag. Staan. Ek belowe, dit is gaan so die moeite werd wees. Adres. Dit is waarom ek nie die voorbeelde reg voor die klas. Ugh. Die volgende ontvangers misluk. Kom ons probeer om een ​​laaste ding. SMTP stel van, voeg adres, die adres is inderdaad dat. Kom ons probeer om hierdie laaste deel in adres. Ag, ek is regtig hartseer nou. Dankie. Maar ek waardeer regtig al die tekste wat jy het is die stuur. Jy het hierdie David. Jy blaas dit. Kom ons laat dit daar en ons sal dit regmaak op Maandag. Sien jy dan. DAVEN FARNHAM: En nou diep Gedagtes deur Daven Farnham. As 'n binêre boom val in 'n bos en niemand is om te C it-- [lag].