[Powered by Google Translate] [Week 8, vervolg] [David J. Malan] [Harvard Universiteit] [Hierdie is CS50.] [CS50.TV] Dit is CS50, so dit is die einde van Week 8 hier. Ons het natuurlik 'n bietjie van 'n orkaan vroeër hierdie week, so nou is dit is regtig net ek en jy in hierdie lesingsaal, maar vandag het ons voortgaan om ons gesprek oor PHP en oor die web programmering meer in die algemeen, en ons het ook die idee om van databasisse, veral een wat geroep is MySQL, wat is baie gewild hierdie dae, in 'n groot deel as gevolg van sy scalability asook omdat sy gratis en open source. Maar eers 'n blik op waar ons opgehou het die laaste keer. Onthou dat ons is op soek na die verskeie Frosh kitsboodskappe voorbeelde, en dit was die afskuwelike vorm wat ek het met sowat 15 + jaar gelede ten einde studente op die kampus register vir eerstejaars binnemuurse sport te hê sonder om werklik om te trek meer oor die werf na Wigglesworth 'n fisiese stuk papier onder sommige Proctor se deur te skuif. In plaas daarvan het ons verhuis alles aanlyn, maar om te doen wat ons nodig het om gebruik te maak van 'n paar tegnologie, sodat die een, het ons nodig het HTML HyperText Markup Language, wat weer opmaak taal wat jy maak web bladsye struktureel. Met behulp van 'n bietjie van CSS van hierdie dae, Cascading Style Sheets, waardeur ons stylizations gebruik van die web bladsy met behulp van 'n effens anders sintaks, terwyl die HTML was al oor die struktuur daarvan. Ons moet ook 'n web-programmeertaal te voer. In hierdie geval, sal ons gebruik PHP, en PHP gaan toelaat dat ons dinamiese uitset inhoud sowel as programmatiese dinge doen soos die stuur van e-posse, soos die geval was op die kennis wat ons het verlede week. Onthou dat die kode vir hierdie was in 2 dele. Een, het ons froshims3.php, en dit was grootliks opmaak met 'n HTML-vorm binnekant van dit, 'n klein bietjie van CSS hier in die styl eienskappe sodat die vorm self op die bladsy gesentreer word, maar as dit ons het 'n paar verteenwoordigende vorm insette, 'n teks veld, 'n boks, sommige radio knoppies, 'n uitgesoekte spyskaart, en 'n submit-knoppie. En via hierdie vorm, het ons na 'n lêer wat was blykbaar genoem register3.php voorgelê, wat self kyk 'n bietjie iets soos hierdie. Nou, die meeste van die kode in register3.php, onthou, was al oor die e-pos. Dit het 'n bietjie van die validering van die vorm wat ingedien is om seker te maak dat die velde was eintlik wat verwag is. Toe ons noem 'n paar PHP funksies met behulp van effens nuwe sintaksis, selfs al is dit geleen van C. Hierdie arrow operateur stel ons in staat om die gebruik van iets genoem objek-georiënteerde programmering te maak. Ons sal nie daarop ingaan nie in enige detail hier, maar weet vir nou dit is 'n manier van die funksies wat verband hou met voorwerpe, wat is 'n spesiale tipe van struktuur, soos ons gesien het in C. Maar vir nou, net op die geloof dat dit die korrekte sintaks wat gebruik word wanneer die gebruik van 'n biblioteek soos hierdie PHPMailer biblioteek. En dan deur die einde van hierdie lêer het ons dinamies gegenereer 'n e-pos Dit het gestuur aan my jharvard@cs50.net rekening van my jharvard@cs50.net rekening, en ons in kennis gestel die gebruiker dienooreenkomstig dat hulle geregistreer is vir hierdie sport. Dit is pretty much wat die Frosh kitsboodskappe site al daardie jare gelede gedoen het toe ek dit geïmplementeer, toegestaan ​​word, in 'n ander taal, maar dit wys dat jy miskien die krag wat jy het nou dat jy jouself kan nie net programmaties druk op 'n lae vlak in 'n taal soos C, maar op 'n veel hoër vlak met hierdie baie werklike wêreld toepassings soos e-pos om werklik op te los n paar werklike wêreld probleme. Nou, natuurlik, selfs al het ek hierdie script gebruik te genereer e-pos dinamies van jharvard@cs50.net, wat is inderdaad 'n rekening wat ek het toegang tot, doen baie versigtig wees om te stuur e-pos net van rekeninge wat is eintlik jou eie, sodat die dinge kry jy in 'n bietjie van die warm water in die lewe. Met wat gesê het, laat ons nou die oorgang tot die oplossing van 'n ander probleem heeltemal, wat van die behoud van state. Nou, wat beteken dit eintlik beteken? HTTP, hierdie HyperText Transfer Protocol, is eintlik 'n staatlose protokol, en wat dit beteken is dat wanneer jy trek iets soos Google.com en dan Enter gewoonlik jou blaaier het 'n soort van die spin-ikoon wat dan resultate in 'n web bladsy afgelaai, en dan is daardie klein ikoon stop spin, en wat inderdaad dui daarop dat HTTP voltooi het 'n soort van verbinding met die bediener, en dit is dit. HTTP is staatloos in die sin dat dit nie in stand te hou 'n aanhoudende verbinding met die bediener in die dieselfde manier Skype nie of Gchat nie want met HTTP die aanname is dat wanneer jy 'n web bladsy wat is dit het gehaal. Nou, in werklikheid hierdie dae op webwerwe soos Facebook en Google Maps en Twitter en dies meer is daar 'n baie meer dinamika waarvolgens selfs nadat daardie ikoon stop spin wat jy kan kry in werklikheid meer updates van die bediener, meer tweets, meer status updates op Facebook en die wil. Maar selfs dit is die gebruik van 'n tegniek wat ons sal praat oor in 'n week of twee bekend as Ajax die gebruik van 'n taal, die sogenaamde JavaScript, maar aan die einde van die dag, HTTP is nog staatloos is nie. En tog as jy wil om een ​​of ander manier onthou dinge oor 'n gebruiker selfs nadat hulle van jou bediener het ontkoppel PHP nie bekostig om 'n manier om dit te doen want, soos ons gesien het die laaste keer, PHP 'n aantal superglobals, en 'n superglobal is, weer, 'n spesiale globale veranderlike wat aan u oorhandig word deur die webbediener en deur PHP self. Jy hoef nie iets te doen om waardes in te sit, en onder die superglobals het ons tot dusver gesien kry en plaas, en dit is waar vorm velde word outomaties vir jou, sowel as 'n paar ander wat ons nog nie gesien het nie. Binnekant van $ _server is 'n paar spesiale veranderlikes wat verband hou met die bediener self. Wat is die IP-adres, wat protokol, HTTP-of HTTPS het jy gebruik, wat versoek metode het jy gebruik en dies meer, so daar is 'n paar interessante, sappige besonderhede oor die bediener, en in die waarheid te sê, die gebruiker daar as well. Daar is $ _cookie, en dit is waar hierdie dinge genoem koekies gestoor word. Ons sal nie tyd spandeer op koekies self vandag, maar weet nou dat 'n koekie is net 'n klein stukkie van die inligting dat 'n web bediener op 'n webblaaier kan plant en op sy beurt sy RAM of sy rekenaar se hardeskyf inligting oor 'n gebruiker te stoor, byvoorbeeld, hul gebruikersnaam sodat hulle dit nie te tik elke keer wanneer hulle aanteken of 'n unieke nommer of identifiseerder vir hierdie gebruiker sodat jy nie om hulle te verpes met die dieselfde soort van vrae oor voorkeure in die toekoms, maar die meeste van belang reg nou is $ _session. Hierdie superglobal, wat, soos die ander, aan u oorhandig word outomaties deur PHP wanneer jy skryf PHP-gebaseerde webwerwe kan enigiets wat jy wil, strykers, heelgetalle stoor, swaai punte, waardes, skikkings, voorwerpe, regtig enigiets wat jy wil, en dit laat jou toe om dit op te slaan op so 'n wyse dat selfs indien die gebruiker besoek jy nou en dan kom terug 'n minuut van nou of 5 minute van nou, omdat hulle neem hul tyd voor te kliek op 'n ander skakel PHP sal verseker dat alles wat jy het in daardie sessie superglobal 'n minuut of 5 minute gelede sal nog steeds daar wees wanneer die gebruiker opbrengste. En onder die kap hierdie superglobal is geïmplementeer deur middel van daardie dinge genoem koekies, maar vir nou, dit is net 'n abstraksie waardeur dit is soort van die programmatiese ekwivalent van 'n shopping cart. Wat jy ook al, die programmeerder, in daardie superglobal assosiatiewe skikking sal daar 'n aantal minute later totdat jy dit verwyder of totdat die gebruiker sy of haar browser gesluit geheel en al. Kom ons neem 'n blik op 'n voorbeeld van hoe hierdie ding is eintlik gebruik word. In counter.php onder vandag se stukke van die kode ons het die volgende reël. Aan die begin van hierdie lêer het ons het 'n klomp blou kommentaar, wat oninteressant vir nou. Maar in lyn 13 het ons 'n nuwe lyn, session_start, en wat eintlik nie presies wat dit sê. Dit begin sessies. Dit stel jou in staat om daardie groot superglobal $ _session te gebruik, en dit is so eenvoudig soos dit. Nou, as ons voortgaan om te kyk na line 16, laat ons probeer om uit te vind wat hierdie webblad gaan doen. If (isset ($ _SESSION ["counter") dan voort te gaan en stoor in-die-toonbank veranderlike, klein toonbank, $ _SESSION ["Counter"]. Dit blyk te wees waarby 'n plaaslike veranderlike genoem counter binnekant van wat dit is om 'n afskrif van alles wat binnekant van die superglobal sessie op die plek "counter genoem." Anders, blykbaar, hierdie klein plaaslike veranderlike toonbank, is geïnisialiseer tot 0. Maar dan 'n paar reëls later in 26 kennisgewing dat die sessie se afskrif van die toonbank, sy sleutel, het 'n nuwe waarde wat wat is die huidige waarde plus 1. In kort, hierdie lêer blyk te wees afhangende van 'n teller wat se binnekant van die sessie gestoor superglobal deur dit te verhoog van 1, maar dit behou die eerste keer 'n afskrif van die vorige waarde deur die stoor dit in 'n plaaslike veranderlike genaamd $ toonbank, en dan af hier laat ons sien wat oorbly. Dit blyk dit is pretty much net HTML. Aan die onderkant van hierdie bladsy sien ons in lyn 37 dat ek hierdie webwerf besoek counter aantal kere, dus is daar 'n paar interessante eienskappe hier. Een, dit is duidelik 'n veranderlike, maar dit is nie voldoende om net te sit $ Toonbank in die liggaam van jou HTML, want natuurlik al is dit net daar onder jou HTML PHP gaan om te aanvaar dat net HTML. Wil jy letterlik $ toonbank gedruk word op die skerm. Maar in plaas daarvan deur die val in PHP mode met hierdie stuk van die sintaksis kan ons dinamiese voeg 'n waarde hier baie soortgelyk in die gees wat ons gedoen het die laaste keer met die invoeging van waardes in stringe. Trouens, dit is net 'n snelskrif notasie vir die sê van iets soos hierdie letterlik, druk ($ toonbank) of selfs iets soos printf (% s, counter), of selfs, soos jy gesien het aanlyn of in handboeke, daar is 'n funksie in PHP echo genoem wat nie die dieselfde ding, en almal van hulle is net meer asem maniere sê <=? In hierdie een geval jy hoef nie te sit die woord PHP na die vraagteken. Dit is snelskrifnotasie vir, weer, wat sien ons net 'n oomblik gelede wat aansluit by 'n waarde. Kom ons kyk wat die eindresultaat van hierdie is eintlik. Laat ek tog oorstap in ons counter.php lêer, en ons sal sien dat Dawid net 'n fout gemaak deur te speel met die kode. Kom ons gaan fix wat hy screwed up, en die fout blyk om daar te wees, weg, on line 37. Volgens die top van hierdie bladsy het ek hierdie webwerf besoek 0 times. Wel, laat ons nou voort te gaan, en op die top van die leser op die laai ikoon, en ek kliek herlaai, en nou is ek besoek die site 1 keer, 2, 3, 4, 5, 6, 7, 8. En inderdaad, as ons kyk na die bron van hierdie bladsy die werklike bron kode verander, en let op die totale afwesigheid van enige PHP, en dit is omdat PHP-kode geëvalueer word of vertolk bediener kant, en so dit beteken dat die uitset van die PHP skrip wat uiteindelik aan die leser gestuur, wat in hierdie geval is 'n paar rou HTML en 'n paar rou teks. Wat gaan hier aan? Wel, met relatief min lyne kode Ek is in staat om te slaan aanhoudend oor die verloop van 'n paar sekondes, of as ons lank genoeg gewag, minute, selfs ure, n waarde in 'n manier dat maak HTTP Stateful lyk asof ons het behou hierdie verbinding met die bediener, en dit is net onthou wat ek gesê dat dit die laaste keer, maar in werklikheid is daar is 'n hele klomp van die kompleksiteit gaan op onder die kap wat koekies wat in staat stel PHP my hierdie illusie te gee van hierdie shopping cart-agtige funksie. Vir nou, 'n triviale voorbeeld waar ons net 'n heelgetal stoor, maar dat die funksie sal terug kom om van groot waarde te wees wanneer ons begin praat oor meer komplekse projekte, onder hulle probleem gestel 7. Dit is jou heel laaste probleem in CS50. Ek weet, dit is so hartseer, maar wat jy sal vind, is dat ons gaan om tot die gevolgtrekking te kom hierdie deel van die semester deur eintlik die oorgang seker van die konteks van C na die konteks van PHP maar, terwyl die gebruik van 'n paar van die baie dieselfde grondbeginsels ons het gepraat oor vir 'n geruime tyd. Die doel met pset 7 CS50 Finansies te implementeer, wat is jou eie weergawe van Yahoo Finansies of Google Finansies of selfs Etrade.com waardeur jy het die vermoë om voorraad pryse vir gegewe simbole kyk, maar selfs meer as dit jy het die vermoë om te "koop" en "verkoop" aandele wat verhandel word op verskeie aandelebeurse, want as hierdie tuisblad hier aandui, wat is werklik die mate waarin ons het begin die probleem stel vir jou, jy het 'n login vorm wat vra vir 'n gebruikersnaam en 'n wagwoord. Dit het 'n submit knoppie, maar daarna, as ons sal uiteindelik sien, daar is niks wat regtig aan die gang onder die kap nie, omdat dit bly vir jou die vermoë om nuwe gebruikers aan te registreer te implementeer, die vermoë om aandele te koop, voorrade te verkoop, om werklik te kyk huidige voorraad pryse. En inderdaad, sal dit wees as die werklike wêreld as moontlik, want ons het sluit in 'n bietjie van die kode wat jou sal toelaat om met 'n enkele funksie Yahoo Finansies, wat wonderlik gratis beskikbaar data maak om navraag te doen vir die soek voorraad pryse wat gebaseer is op die beurs simbool of ENKELE simbool, en jy kry die huidige voorraad prys van die dag terug. Die data wat jy eintlik sien in hierdie spesifieke pset sal wees as die werklike wêreld soos dit kan so kry dat jy eintlik tussenbelegsel met werklike wêreld aandele, werklike wêreld pryse, Dan sal ons sien hoeveel geld jy dalk kan maak oor die volgende paar dae van die speel met jou eie probleem stel. Maar laat ons die eerste stel die stadium vir hoe om iets te ontwerp wat is seker meer ingewikkeld as counter.php, dit is meer ingewikkeld as enige van Frosh kitsboodskappe voorbeelde wat tot dusver, en laat ons probeer om 'n paar paradigmas te stel dat ons in staat stel om beide vir pset 7 en miskien vir jou finale projek as jy iets doen web-gebaseerde te hou om jou kode goed georganiseer, te hou jouself sane, en 'n stap in die rigting saam te neem, hetsy in CS50 se finale projek of buite as jy nog steeds om iets in die toekoms te programmeer. Daar is hierdie algemene ontwerp paradigma in rekenaarwetenskap en meer in die algemeen in die ontwikkeling van sagteware bekend as MVC, model-view-kontroleerder, en dit is 'n dom akroniem wat 'n baie nice idee beskryf, wat is die skeiding van die verskillende aspekte van 'n program, spesifiek die behoud van die logika of die besigheid logika van 'n webwerf sodat enigiets wat behels dinge soos roep funksies en bevraagteken databasisse en dies meer gebeur nie onder jou HTML maar eerder in afsonderlike lêers, en inderdaad, daar is hierdie 'n lêer gewoonlik dat jy die beheerder genoem wat is regtig die brein agter die operasie, en ons sal sien 'n voorbeeld in net 'n oomblik. Daar is 'n model wat programmering-kode wat doen die praat met jou databases, wat praat met Yahoo Finansies en dies meer, en dan is daar die V in MVC, die uitsig, al die dinge wat aan estetika, die lêers wat eintlik bevat wat verband hou jou HTML, miskien jou CSS en die wil. Die idee hier, soos hierdie foto suggereer, is dat die beheerder is die lêer, soos ons sal gou sien en as jy in die besonder sien in pset 7, dat die hele wêreld praat via hul webblaaiers. Dit is die lêer wat op die openbare internet besoek kry, maar die kontroleerder praat met potensieel 'n model, wat een of meer ander lêers wat kode bevat verwant aan data, kode wat verband hou met databasisse en die soos, en dan praat met die beheerder een of meer ander lêers bekend as views, wat is die estetika van 'n web bladsy, templates van spesies, dat sommige data as inset kon neem, maar aan die einde van die dag die enigste logika binnekant van 'n oog moet die lewering van daardie data, iterating oor 'n lus en eintlik spoeg 'n paar HTML-gebaseerde vertoning daarvan of selfs iets soos 'n PDF. Wat is mooi oor MVC is dat jy verskillende menings kan hê gebaseer op die tipe van apparaat, gebaseer op die tipe van die lêer formaat wat jy eintlik wil om te wys aan die gebruiker. Kom ons neem 'n blik op 'n paar progressief meer kompleks en goed ontwerpte voorbeelde deur eers met weergawe 0 hier te begin. Laat my voort te gaan en maak vandag in ons MVC-directory 'n lêer genaamd index.php in directory 0. Let op dit is 'n super eenvoudige en baie underwhelming webwerf wat is 'n soort van weergawe 0 van 'n tuisblad vir CS50, en let op hoe ons het 'n skakel na Lesings, ons het 'n skakel na Syllabus, en as ek die skakel na Lesings kennisgewing dat die URL tot bo gaan te verander lectures.php. As ek dan volg die skakel na Week 1 kennisgewing dat die URL verander tot week1.php. Daar blyk 'n redelik eenvoudige hiërargiese struktuur hier te wees. Kom ons neem 'n vinnige blik onder die kap hoe dit uitgelê, en inderdaad, as ek kyk na index.php dit is redelik maklik. Om die waarheid te sê, selfs al het ek noem dit 'n PHP-lêer daar is geen werklike programmeringskode uitmaak nie. Daar is 'n opmerking wat ek geskryf het hier in PHP net sodat die gebruiker nie beland dit sien. Natuurlik, is soos gister en eergister nie, enigiets wat in tussen PHP tags is kry dit vertaal word, beteken: selfs al is dit 'n kommentaar, en a comment te interpreteer beteken dit net aan die einde van die dag weg te gooi en nie eintlik stuur dit aan die leser, sodat alles hier is net die estetiese. As ek dit oopmaak insgelyks lectures.php dit is ook net 'n harde gekodeerde lêer. Dit gebeur genoem te word iets. Php, maar dit is regtig net html, en week1.php, week2.php insgelyks is net opmaak, so daar is 'n klomp van die tekortkominge van hierdie ontwerp. Een, dit is 'n groot hoeveelheid van die kopie / plak. Selfs al is die enigste ding wat onder hierdie lêers verander is die on-geordende lys, die li tags, Ek het egter doc tipe, HTML, kop, titel, beslote liggaam, naby HTML en meer in elke enkele lêer, wat beteken dat as ek ooit wil te herstruktureer hierdie webblad of restylize dit wat ek het om te gaan in en verander al hierdie lêers met die hand of met 'n paar massiewe vind en te vervang. Kom ons neem 'n stap in die rigting van 'n slimmer, meer dink ontwerp in weergawe 1 hier waardeur soos per die lees my dat ons so het ingesluit wat jy kan speel saam met hierdie meer rustig by die huis kennisgewing dat ons hier 'n opsomming van die lêers in die weergawe 1 van hierdie webwerf, en dit blyk dat ek het dit op my geneem om faktor n paar algemene kode header.php en footer.php. Wel, laat ons neem 'n blik op wat binne die eerste van die. Header.php lyk bekend, maar sien waar kom kap dit af? Reg na line 19, so dit is alles wat was algemeen van die lêers index.php, lectures.php, week1 en week2.php van die vorige voorbeeld. Wat ek gedoen het, was kopie en sny alles wat gemeenskaplik aan al die lêers, sit dit in 'n aparte header-lêer, en insgelyks in footer.php ek het dieselfde beginsel toe te pas waarvolgens die enigste interessante lyne in footer.php hierdie twee, beslote liggaam en naby HTML. Maar wat beteken dit nou is, is dat in die nuwe weergawe index.php kennisgewing hoeveel makliker dit kan kry. Toegegee, 'n bietjie meer kriptiese soek, 'n bietjie minder intuïtief van bo na onder te volg nie, maar my God, al van daardie ontslag is nou verby. Ons benodig met behulp van 'n PHP funksie letterlik genoem vereis tot bo, wat baie herinner, onthou, C # sluit meganisme. Ons benodig header.php aan die bokant. Ons benodig footer.php aan die onderkant, en die enigste ding wat anders is of spesiale oor hierdie lêer is die inhoud wat bedoel is om uniek te wees om dit te. As ek gaan dan in, sê, lectures.php, dieselfde beginsel van toepassing is. Weereens, 'n paar opmerkings tot bo, maar dan Ek benodig header, vereis footer, en tussen dit is net die inhoud wat is eintlik verander. En as ons kyk in Week 1 en week 2 wil ons sien dat dieselfde beginsel was daar toegepas word. Wel, ons het nie baie gedoen daar. Kom ons neem 'n blik op die weergawe 2, wat 'n soortgelyke struktuur, maar nou sien ek iets anders het ingestel. In lyn 10 Ek het 'helpers.php, wat bevat blykbaar helper funksies. 'N helper funksie is oor die algemeen 'n relatief kort funksie wat jy skryf om jou te help in verskillende plekke, en laat ons kyk wat binnekant van helpers.php is. In hierdie geval, dit lyk soos dit het 2 funksies. Onthou van die ander dag met ons kubus voorbeeld wat jy kan definieer jou eie funksies in PHP, en wat ek nou gedoen het, is ek gedefinieerde funksies genoem lewer footer en lewer header, die eerste wat 'n parameter genoem data, waarvan die standaard waarde is 'n leë verskeidenheid, soos voorgestel dat daar, en ons kan eintlik skryf dit selfs meer bondig in die nuutste weergawe van PHP deur die sê plein bracket, gesluit vierkante bracket. Dit beteken dat 'n leë skikking van grootte 0, maar nietemin 'n skikking. Hierdie uittreksel funksie is 'n bietjie spesiaal in daardie wat dit doen, is dit neem as sy argument 'n associatieve array wat 0 of meer sleutel waarde pare, en as jy 'n sleutel van foo en 'n waarde van bar die uittreksel funksie skep 'n situasie wat nou, soos van lyn 11, jy het 'n plaaslike veranderlike genaamd $ cat wie se waarde is bar. En as jy meer sleutels en waardes in die data verskeidenheid, insgelyks sou hulle onttrek word in die plaaslike omvang of naam ruimte sodat footer.php en dieselfde idee hier onder sodat header.php het toegang tot daardie veranderlikes. Om die waarheid te sê, laat my weer oopmaak header.php en die aandag vestig nou hoe dit lyk in hierdie weergawe. Eerder as om hard kodering CS50 as die titel vir elke enkele bladsy kennis van die dinamika wat moontlik nou. In reël 5 ek aansluit by 'n titel veranderlike, maar eers moet ek verby die titel veranderlike met 'n funksie genoem htmlspecialchars. 'N simpel naam vir 'n funksie, solank as wat dit is nie, maar is dit nie regtig wat dit sê. Dit verseker dat enige spesiale karakters in die tou wat geslaag is behoorlik ontsnap HTML. Dit is eintlik 'n manier van die voorkoms van iets genoem 'n cross-site scripting aanval waardeur iemand kan kwaadwillig of per ongeluk spuit hul eie HTML-kode op jou webwerf deur die plak in die een of ander vorm, byvoorbeeld, iets wat jy baie het nie verwag dat, veral JavaScript-kode, as ons praat oor in 'n week of twee tyd. Dit is nou header.php, dit is 'n oog in die sin dat dit jou toelaat om esteties kyk na die inhoud van sommige datastel. Maar meer spesifiek, dit is 'n sjabloon. Dit is 'n soort van 'n bloudruk nou van wat ons wil die bladsyboskrif ('header') van elke bladsy om te lyk soos, maar daar is 'n paar dinamika wat ons wil hê om die titel te dinamies ingevoeg word wat gebaseer is op die titel veranderlike wat is 'n uittreksel wanneer ons geroep het, weer, die lewer header funksie. Nou, as ons kyk na die lewer footer, daar is eintlik nie veel van daardie reg nou want in footer.php daar is hoegenaamd geen dinamika. Daar kon wees, maar op die oomblik is dit 'n harde gekodeerde lys van 2 tags, maar dieselfde idee van toepassing is, sodat eintlik noem hoekom het ons tyd mors met 'n lewer kop en 'n lewer footer funksie? Laat my plaas gaan nou in weergawe 3, en in weergawe 3 in helpers het ek besluit om dit nog meer vereenvoudig. Laat my een render funksie. Laat my dit neem om 'n ander argument, hierdie tyd genoem sjabloon, wat bedoel is om die naam van 'n sjabloon, en dan sal ek vermetel koppel php dat die veranderlike se waarde. en dan as dit bestaan ​​foo.php, bar.php of header.php en footer.php, dan gaan ek om voort te gaan en die veranderlike data te onttrek en dan vereis dat die pad. Met ander woorde, dit nou gebruik, as ek oopmaak index.php Let op dat ek nie noem lewer kop nie. Ek het net 'n beroep lewer, maar ek slaag in 'n aangehaal waarde van header om duidelik te maak watter sjabloon ek eintlik wil om te laai. Dan oor hier opmerk wat ek doen. Ek wat in dinamiese 'n sleutel van titel, 'n waarde van CS50, en dit ook, soos ons gesien het, gemaak kan word meer bondige in die nuutste weergawe van PHP waar kan ek die skikking funksie met vierkantige hakies vervang, wat ek stel, is selfs meer leesbare en seker 'n bietjie makliker om te tik. En natuurlik, met die lewer footer oproep aan die onderkant, ons nie die moeite doen wat in 'n tweede argument, geen associatieve array, want daar is niks dinamiese binnekant van daardie footer. Dit is net 'n paar noue tags for HTML. Goed, ons neem stappe in die rigting van die werklik skoonmaak dinge hier, maar laat my oopmaak 2 finale voorbeelde. Hierdie een, nommer 4, kennis dat ek 'n doelbewuste besluit gemaak het nou deur uiteindelik met behulp van 'n paar hiërargie aan my lêers om te verbeter op die vorige voorbeeld. Let op dat in hierdie opsomming, in hierdie lees my, ek ingevoer 'n gids en 'n templates directory waarvan die inhoud gaan wees die dinge wat ek wil in te sluit en die templates wat ek wil lewer, onderskeidelik. Dit is regtig my anale en probeer om dinge netjies te hou, verwante lêers hou saam, maar die eindresultaat is dat ons nou 'n effens tidier setup, maar ons moet nou onthou in, byvoorbeeld, index.php wanneer ons die lêer helpers.php ons nou dit nodig het via includes / helpers.php eerder as om net te sê helpers.php want nou dit is eintlik in 'n sub-directory. Nou, as 'n eenkant, sal jy sien in hierdie voorbeelde en 'n paar ander funksies soos vereis, sodra vereis. Daar is eintlik 'n funksie self genoem insluit, en hulle almal het effens verskillende gedrag. Ek sê hier vereis om een ​​maal te maak super duidelike dat ek slegs diegene wil helpers ingesluit in my projek. Maar as ek versigtig en as ek eintlik dink deur my logika behoorlik dit moet ook net voldoende om te sê vereis tot bo so lank as wat ek myself nie per ongeluk nie nodig dat dieselfde lêer elders. Trouens, dit is 'n bietjie meer doeltreffende manier van dinge doen, dan met behulp van vereis een keer, so ek sal dit trim af na net vereis. Laat 'n stap verder te neem. Hierdie laaste voorbeeld nou, weergawe 5, het selfs 'n skoner gids hiërargie. Let op wat ek hier gedoen het volgens die lees my in hierdie laaste weergawe is nou ek het my HTML-gids, wat ek al hierdie tyd het, maar binnekant is daar is nou net index.php, lectures.php, week1.php en week2.php. Die sluit directory woon nou saam met van die HTML-gids, op dieselfde vlak as 'n broer of suster, om so te praat nie. So doen die gids Sjablonen. Die sleutel afhaal hier is ek 'n bietjie meer struktuur het ingestel, maar die belangrikste funksie is nou dat slegs die lêers wat moet web toeganklik is, openbaar aanspreekbaar deur 'n URL op die openbare internet is in my HTML-gids. Intussen het ander lêers, helpers.php, footer.php, header.php, wat is waarskynlik miskien meer sensitief, miskien helpers het eintlik 'n paar gebruikers name en wagwoorde of 'n intellektuele eiendom van my, funksioneer ek wil regtig nie om die wêreld te sien, selfs al per ongeluk. Dit is goeie praktyk om uit te hou van die openbare HTML directory enige lêers wat nie self moet openbaar te wees. Al wat jy hoef te doen in hierdie geval wanneer jy soek op byvoorbeeld, die HTML-gids se index.php lêer, agterkom ons het net 'n bietjie meer versigtig te wees wanneer vereis of een keer van hierdie lêer vereis. Ek nodig het om eerste te doen .. om te gaan na die ouer gids, dan / includes / helpers.php terug in die lêer duik dat ek omgee te kry. Enige vrae dan op MVC of hierdie relatief eenvoudige inkarnasie daarvan? En laat my duidelik maak dat ons ons fokus nogal 'n bietjie op die V hier, die menings en die faktorontleding van hierdie voorleg. Ons het regtig nie onderskei M van C net nog nie. Trouens, daar is regtig geen M hier, en selfs ons C, kontroleerder, is regtig nie doen nie al dat daar nog baie, maar jy kry baie meer vertroud is met beide van daardie 2 briewe van MVC, of eerder, sal jy baie meer vertroud met die C in MVC vir probleem stel 7, dus is daar meer op die horison. Vrae? Daar is eintlik niemand hier. Goed, kom ons beweeg nou na die tweede en finale onderwerp vir vandag. Dit is die bekendstelling van 'n databasis. Tot op hierdie punt het ons het 'n paar maniere om van die stoor van data. Ons het gebruik veranderlikes. Terug in ons C lêer, I / O bespreking het ons begin met behulp van teks lêers en die gebruik van lêers soos fprintf, en dan het ons selfs begin praat oor CSV-lêers 'n bietjie, deur kommas geskei waardes, so al hierdie ons toegelaat om data wat gestoor word óf nie aanhoudend of aanhoudend. Maar selfs CSVs is nie regtig bevorderlik is vir soek en voeg en te verwyder. Dit is regtig net 'n dom teks lêer deur kommas geskei ry deur ry deur ry deur ry, so as jy wil soek dat lêer regtig die beste wat jy kan doen, is 'n lineêre soek. Jy het om te begin by die top van die lêer, lees die hele ding in, en kyk vir 'n paar waarde van belang. As jy wil plaas in dit wat jy het om dieselfde ding te doen, iterating oor dit en die invoeging in 'n spesifieke plek, en in die waarheid te sê, jy het om al van die soek logika jouself te doen. Jy nie kan doen slim ooreenstem met die patroon op 'n CSV-lêer tensy jy self skryf die kode. Jy nie kan doen filtrasie van 'n CSV-lêer tensy jy self skryf die kode. Sou dit nie lekker wees as iemand anders in al die moeite om werklik te soek maklik en invoeging maklik en skrap en opdatering en so meer? Dit is presies wat 'n databasis is. SQL, gestruktureerde navraagtaal, is nog 'n ander taal dat ons hier die bekendstelling van vandag, maar ook dit is redelik toeganklik, en wat ons regtig gaan om dit te doen is net pluk uit sommige van die belangrikste eienskappe sodat vir pset 7, en as jy iets doen web-gebaseerde, jou finale projek, jy het die vermoë om jouself uit te druk in terme van data navrae. Jy het die vermoë om 'n bietjie op te slaan of 'n baie van die data in 'n baie meer gestruktureerde wyse wat aan die einde van die dag maak jou lewe makliker, want met SQL jy jouself kan uitdruk baie meer presies, veel meer metodies ten einde te n subset van die data van 'n groter korpus van data terug te kry. Jy kan dink van 'n databasis, in hierdie geval, 'n SQL-databasis, regtig soos Excel of Nommers waar dit is 'n sigblad, of miskien verskeie sigblaaie, en 'n woordverwerker, sigblad, natuurlik, rye en kolomme, en dit is omdat SQL-databasisse is relationele, relationele in die sin dat hulle stoor data in terme van hierdie tabelle, rye en kolomme. Hulle is hoër presterende as iets soos 'n sigblad, en 'n spreadsheet is bedoel om gebruik te word deur 'n mens. 'N databasis is bedoel om gebruik te word deur 'n programmeerder kode skryf teen dit, sodat die inkarnasie van 'n databasis gaan om óf command line. Een van die mees gewilde relasionele databasisse daar buite is, weer, MySQL, wat is wonderlik gratis, baie hoog-presterende, en dit is wat Facebook gebruik baie vroeg op en tot 'n mate vandag nog 'n baie van die data op te slaan, en ons sal sien in 'n oomblik dat die gebruik van relatief eenvoudige instruksies ons kan kies data, voeg data, update data, vee data en die wil, maar gelukkig, is daar 'n meer gebruiker-vriendelike koppelvlak as net tik op 'n swart-en-wit vinnige hier. Ons sal gebruik vir pset 7 en buite 'n gratis program genaamd phpMyAdmin. Die naam is toevallig. Die instrument gebeur geïmplementeer word in PHP, maar dit is fundamenteel irrelevant. Wat is nuttig oor phpMyAdmin, is dat dit 'n web-gebaseerde nut. Ons het geïnstalleer dit in die toestel vir jou, en met dit wat jy kan skep tabelle in 'n databasis, jy kan plaas data, verwyder data, en in die algemeen sien jou data in 'n redelik gebruikers-vriendelike omgewing. Jou gebruikers gaan nie phpMyAdmin te gebruik. Hierdie is eintlik net 'n administratiewe of ontwikkelaar se instrument met wat om te sien en te steek om jou data en uit te vind hoe om dit te struktureer, baie soos jy self kan gebruik Excel of getalle, maar dit gaan om 'n goeie manier om van die visualisering van wat gaan aan onder die enjinkap sodat jy kan fokus op die interessante probleemoplossing en nie soseer op die arcane opdragte. Kom ons neem 'n blik op 'n voorbeeld van die data wat tabularly gestoor word in 'n relasionele databasis. Hier is een so 'n voorbeeld. Nou, ongelukkig phpMyAdmin afgedwaal op die kant van die pad te gooi te veel woorde en grafika by jou, maar as jy net op die slyp in ID kolom, die gebruiker naam kolom, en die hash kolom, dit is 'n sigblad effektief, maar dit gebeur om 'n uittreksel te wees van 'n tabel binnekant van die toestel die gebruik van 'n lêer wat ons u voorsien in probleem stel 7. In die besonder, ons gee jou 'n lêer wat verteenwoordig 'n gebruiker se tafel, so 'n sigblad wat gebruikers met 3 kolomme, waarvan een is 'n unieke ID wat begin op 1 en geïnkrementeer daarna. Die tweede kolom is 'n gebruikersnaam en dié van julle wat Hacker het, Hacker uitgawe vir pset 2, kan sommige van hierdie gebruikers name ten minste erken. Op die regterkant is wagwoorde, maar hulle is nie letterlike wagwoorde. Hulle is hashes daarvan, so dit blyk uit dat die stoor van wagwoorde in 'n databasis is 'n baie slegte idee. Jy het waarskynlik al gelees op 'n sekere punt van 'n paar webwerf of 'n paar maatskappy se databasis gedrang kom, en dan moet jy Om jou wagwoord te verander, moet jy terugbetalings op dinge te kry omdat 'n paar slegte man eintlik uitgebreek in jou rekening as 'n resultaat. Berging van wagwoorde in duidelike teks, ongeënkripteerde in 'n databasis is heeltemal asinine, en tog is dit baie amusant dan om te lees oor 'n paar baie bekende maatskappye soms in die pers wie se databasisse is gekompromitteer, en dat 'n deel is nie snaaks nie, maar die feit dat die databasisse bevat ongeënkripteerde wagwoorde is belaglik, want letterlik met een lyn van kode jy kan beskerm teen daardie spesifieke bedreiging, en dit is wat ons hier gedoen het. Selfs vir ons valse min CS50 Finansies weergawe ons versleutelen wagwoorde net vir 'n goeie maatreël, en die feit dat almal van hierdie wagwoorde begin met $ 1 $ is net 'n konvensie. Dit beteken net hulle is geïnkripteer of regtig hashed, wat is soos 'n one-way kodering funksie waardeur jy kan nie keer die gevolge daarvan met iets genoem MD5. Die feit dat 50 na daardie beteken dat 'n sout-waarde van 50 is wat gebruik word vir die hashing al behalwe vir een van hierdie wagwoorde. Myne, natuurlik, soos jy kan sien, HA, was die gebruik van 'n ander sout, so dié van julle wat het effens gepootjie miskien in Hacker 2, mag dit is die gevolg van ons gebruik 'n ander hash as die ander omdat my wagwoord is eintlik dieselfde as 'n ander gebruiker daar. In werklikheid, as jy al hierdie weke wag om uit te vind wat daardie wagwoorde is hier was die wagwoorde wat jy uitgedaag het om te kraak in die Hacker uitgawe van die probleem stel 2, sodat niemand te lastig. In werklikheid, Malan se was dieselfde as jharvard, maar as ons gaan terug na hulle anders lyk. Fokus op jharvard bloedrooi stowwe te bewerk, want hulle is anders gesout. Die algoritme is verwoes in 'n manier dat die hash waarde, die geënkripteerde waarde lyk 'n bietjie anders omdat die insette was effens anders, maar die wagwoord onder die kap was nog uiteindelik bloedrooi. Nou, wat omgee oor hierdie? Wel, is ons die verskaffing van u met die monster gebruikers, die monster gebruikers name en hashes van hul wagwoorde sodat jy eintlik 'n paar kliënte vir CS50 Finansies wanneer jy eers kry van die grond af met jou kode. Jy sal meer tabelle te implementeer binnekant van MySQL, binnekant van die databasis. Jy sal meer sigblaaie te skep, effektief, maar ons het besluit om te gee jy hierdie een te kry wat jy begin het, en jy sal sien dat die probleem stel spesifikasie stap vir stap deur die proses van die invoer van hierdie tabel en ook verduidelik wat sommige van die kenmerke is, en jy sal ook sien dat ons u voorsien van die kode die hashing of die kodering van hierdie wagwoorde te hanteer, so jy hoef nie te veel bekommerd wees oor wat MD5 of iets dergeliks is eintlik alles oor. So, SQL, gestruktureerde navraagtaal taal. Dit is, heel eenvoudig, die taal wat ons oor te begin gebruik in pset 7 en miskien buite data van sommige databasis aan te vra. Die data word weer gestoor tabularly in hierdie relasionele tabelle, kolomme en rye, maar met behulp van 'n paar relatief eenvoudige sintaksis soos delete, voeg, te werk en te kies kan ons doen presies dit. Ons kan uit die databasis verwyder, vul, opdatering van data, sowel as kies, dat is, haal uit die databasis. Hoe ons te werk gaan om dit te doen? Laat my voort te gaan in die toestel. Laat my trek http://localhost, wat, weer, is die plaaslike toestel self. Dit is die standaard bynaam. En laat my gaan na / phpMyAdmin. Dit gebeur met 'n spesiale URL wees dat die toestel is gedefinieerde om te verstaan wat vra my dadelik vir 'n gebruikersnaam en wagwoord. Soos gewoonlik, ek gaan jharvard en bloedrooi te tik, maar besef dit is die administrateur rekening op die rekenaar. Dit is net 'n toeval dat daar is ook 'n jharvard geregistreer vir CS50 Finansies. Jharvard, karmosyn, tik gee my die gebruiker koppelvlak wat ons gesien het, 'n glimp van 'n oomblik gelede, en dit is 'n bietjie oorweldigend op die eerste, maar wees verseker, jy nooit gaan hê om die meeste van die skakels in hierdie instrument te klik. Sal jy uiteindelik met behulp van 'n klein subset wat is super nuttig, waarvan die eerste is databasisse hier. As ek gaan op tot databasisse, opmerk dat ek gevra om 'n databasis te skep. Dit is soos die skep van 'n nuwe Excel-lêer, effektief. Ek gaan om voort te gaan en roep hierdie lesing, en ek gaan net die veld, kollasie te ignoreer. Dit het te doen met die voorstelling van data daarin, en ek gaan te kliek skep, en nou sien as ek laat gaan van die skep op die linker-kant, waar dit sê nie databasisse Gou sou Ek sien die lesing databasis. As ek nou kliek op die linkerkant, die lesing databasis, Let op my tabs 'n bietjie verander. Ek het perfekte struktuur, SQL, uitvoer, invoer en 'n paar ander dinge. Struktuur is pretty much leeg. Geen tabelle in die databasis gevind, soos dit hier sê, Kom ons skep 'n tafel, en laat ons gaan voort en die skep van 'n tabel graag studente, en hoeveel kolomme wil ons? Kom ons hou hierdie eenvoudige, en laat ons rekord vir elke student 'n ID-nommer, 'n naam en 'n e-pos adres. Ons hou dit eenvoudig soos dit, so 3 kolomme, gaan. Die vorm wat jy hier sien, is nou 'n bietjie slordig en oorweldigende, maar ons het om te gaan deur ry deur ry, so regtig vinnig laat ons gee die eerste kolom in die databasis 'n naam van ID vir die unieke identifikasienommer. Dit sal 'n heelgetal wees. Ek kan eintlik ignoreer lengte en waardes. 'N int gaan wees 32 bits nie saak wat jy tik in daar, so kom ons laat dit leeg. Standaard waarde, kan ek dit null, soos omskryf. Ek gaan uitlos. Laat ons nie bekommer oor die standaard waardes. Kom ons blaai hier aan die regterkant, eienskappe. Dit is interessant. Kom ons gaan voort en ietwat arbitrêr sê dat ID's moet unsigned. Kom ons mors nie enige negatiewe getalle. Kom ons gaan 0 4 miljard, gee of neem, en dan laat ons nie raak nie enige van hierdie velde net nog daar, maar laat my dan tik in die naam hier onder, en dan die ander e-pos, sodat die vangs is e-pos en naam, natuurlik nie heelgetalle, so laat ons verander dit na 'n ander veld. Dit blyk uit varchar, veranderlike lengte char, is soos 'n string in 'n SQL-databasis maar 'n veranderlike lengte, en jy werklik beskikbaar het om dit te vertel vooraf die die maksimum lengte van die string nie, so ek gaan ietwat arbitrêr deur konvensie tipe 255 karakters. Ek kon sê heeltemal 32. Ek kon sê 1000. Jy soort van die behoefte om te besluit vir jouself gebaseer op jou demografie wat die langste student se naam en gaan met daardie nommer of 'n bietjie groter, maar wat is mooi oor 'n varchar is dit nie gaan om te mors 255 bytes op elke student se naam. As dit is DAVID dit gaan nie 'n hele 255 bytes te gebruik, maar dit is 'n bogrens, so ek sal gaan met 255 net deur konvensie, maar ons kon debat wat tot 'n laer waarde wees, en vir e-pos adres net om konsekwent te wees 255, maar weer, ons kan dieselfde debat. Maar ek gaan 'n ander ding om te doen hier op die regterkant. Wat is kragtig oor 'n databasis is dat dit 'n baie swaar werk te doen of komplekse werk vir jou. In die besonder, het ek regtig omgee nie wat my student se ID-nommers is. Dit is net bedoel om 'n unieke identifikasienommer in 'n databasis so ek het 'n 32-bis bondige voorstelling van daardie student so dat ek een of ander manier van die uniek identifiseer sodat daar nie miskien 2 Davids, byvoorbeeld, in 'n klas. Om die waarheid te sê, ek gaan hierdie AI boks, motor inkrement om seker te maak, sodat die databasis, MySQL, figure uit wat elke nuut ingevoeg student se ID gaan wees. Ek hoef nie eens te bekommer oor wat in my kode, en ek gaan ook iets onder die indeks menu te kies. Die indeks drop down hier primêre, unieke, indeks en full text. Jy kan dalk raai wat 'n paar van hierdie dinge is, maar dit blyk in relasionele databasisse jy die programmeerder of die databasis administrateur preemptively gee wenke om die databasis as tot watter velde in 'n tabel is 'n bietjie spesiale. Byvoorbeeld, in hierdie geval ek gaan om te sê dat die ID gaan om 'n primêre indeks, andersins bekend as 'n primêre sleutel. Wat dit beteken per definisie is dat die ID voortaan sal identifiseer studente in hierdie tabel. Geen student sal dieselfde ID het omdat ek instelling van hierdie beperking of hierdie indeks. Verder, wat dit vir my gaan doen, is dit gaan om te sê MySQL dat ID is 'n spesiale. Ek is veral omgee ID, so gaan voort en doen jou fancy datastruktuur se magie, die opbou van 'n soort van die boom. Tipies is dit iets wat die B-boom, wat ons nie kyk na weke gelede genoem, maar dit is 'n ander so 'n datastruktuur soortgelyke in gees aan die binêre bome en probeer dat ons kyk na, maar dit gaan om te sê die databasis hierdie veld is so belangrik dat ek waarskynlik wil in staat wees om dit te soek op, gaan voort en die bou van 'n paar fancy data struktuur in die geheue soektogte te bespoedig sodat ideaal hulle is konstante tyd of ten minste so naby as moontlik sodat dit nie oorgaan in 'n lineêre soek, wat nie van plan om die mees hoë verrigting van benadering. In teenstelling hiermee, kan e-pos adres is 'n primêre sleutel. In teorie, almal se e-pos adres is uniek, tensy jou 'n paar rekening deel, maar dit is oor die algemeen nie goed nie iets soos 'n tou te gebruik as 'n primêre sleutel, want as sy doel in die lewe is om te identifiseer rye in jou tabel daar is geen rede om 255 bytes maksimaal te gebruik te identifiseer iemand as jy kan wegkom met net 4 bytes of 'n 32-bis int. In die algemeen moet 'n primêre sleutel kort en bondig wees en verkieslik iets soos 'n heelgetal of 'n groot int, wat gebeur met 64 stukkies. Maar 'n e-pos adres moet uniek wees en een van die kenmerke van 'n databasis te is uniekheid vir my af te dwing. Deur die kies van unieke hier langs e-pos, selfs al e-pos self is van die skerm af, ek sê vir die databasis vertrou my nie. Laat my nie voeg in die databasis dieselfde e-posadres twee keer, selfs as ek 'n idioot en ek kan nie baie goed met my ifs en anders ifs en werklike PHP-kode en Ek het per ongeluk laat die gebruiker te registreer met 'n bestaande e-pos adres die databasis is nog 'n ander vlak van verdediging vir korrektheid om te verseker dat duplikaat e-pos adres nie beland in die tabel. Nou, in teenstelling, vir naam jy waarskynlik wil nie te maak dat unieke want dan kon daar nooit 2 Davids of 2 Mike Smiths, byvoorbeeld, in jou databasis, sodat 'n mens sal ons net uitlos. Ek gaan om voort te gaan en kliek behalwe aan die onderkant reg, en alles lyk goed, maar let hier dit is 'n deel dat ons nou nie te veel tyd spandeer op omdat die sintaks is 'n bietjie ingewikkeld, en ons het nie om tabelle te skep alles wat dikwels, maar SQL self is 'n taal, die sintaks vir wat reg is hier wat ek uitgelig. Wat phpMyAdmin regtig nie, dit skep 'n web-gebaseerde GUI vir jou waarmee jy kan tyd bespaar en nie met die hand te tik 'n taamlike lang SQL navraag soos dit. Met ander woorde, as jy wil handmatig hierdie tabel, óf op daardie swart-en-wit vinnige of selfs in phpMyAdmin deur gebruik te maak van hierdie ander blad, hierdie SQL-blad waar jy kan tik in enige SQL-navrae jy wil, eerlik te wees, dit sou geneem het vir my 'n minuut om werklik te dink aan die hele sintaksis, en selfs dan het ek waarskynlik sou hê het 'n paar spelfoute, so hierdie hulpmiddel is nuttig vir dinge soos wat, en dit is ook insiggewend. Jy kan begin om af te lei wat die sintaks is net deur die mooi kleur kodering dat phpMyAdmin is die toevoeging van vir ons visuele gerief. Maar laat ons nou doen in plaas. Laat my gaan na die Voeg in-oortjie op die top, en laat my gaan voort en voeg byvoorbeeld 'n ID van Let's sê eintlik ek gee nie om nie. Dit gaan om motor inkrement. Ek gaan die databasis met hierdie transaksie te laat. Maar ek sal Dawid, en my e-pos moet malan@harvard.edu. Kom ons gaan voort hier en in Mike Smith as 'n ander een. Ek gee myself 'n laaste naam so goed, en ons sal hom smith@example.com, en dan waar ek volgende gaan? Wel, dit lyk soos die gaan, is die knoppie te klik, en voila. Kennisgewing aan die top 2 rye ingevoeg. Dit is die werklike SQL query. Dit is die phpMyAdmin instrument uitgevoer vir my, maar die eindresultaat, kennisgewing, as ek nou na die browse tab, 2 rye in hierdie tabel om te sien, baie herinner esteties van die tafel ons vroeër gesien het vir ons gebruikers uit pset 7, een van wie is David Malan, een van wie is nou Mike Smith. Maar net om duidelik te wees, het ek nie nodig phpMyAdmin te gebruik, en inderdaad, jy gaan binnekort skryf-kode vir pset 7 wat automatiseert die proses van die toevoeging van rye, die verwydering van rye, afhangende van rye en dies meer, so laat my plaas gaan na die SQL-blad hier en tik SELECT * FROM studente waar email = "malan@harvard.edu." Met ander woorde veronderstel nou jy het n HTML-vorm, en die gebruiker intik in hul e-pos adres, onder ander velde, en die doel is nou in PHP op die agterkant kode om werklik te kyk op daardie gebruiker se ander besonderhede. Wat is jou volle naam? Wat is jou ID-nommer? Jy kan 'n SQL-navraag soos hierdie skryf, kies * van studente waar e-pos = "malan@harvard.edu." En as ek klik op gaan, let op dat ek moet, en ek kry, nie net een ry terug. Mike is weggelaat uit hierdie resultaat te stel, as die versameling van rye is oor die algemeen genoem word, omdat hy nie die dieselfde e-pos adres as my. Nou, weer, hier vir pset 7 jy gebruik phpMyAdmin as 'n administratiewe hulpmiddel en 'n pedagogiese hulpmiddel om jou manier om te leer rondom die wêreld van SQL, maar aan die einde van die dag jy gaan om te skryf hierdie navrae binnekant van die werklike PHP-kode, en so gestem bly in Zamyla walkthrough in die besonder waar jy 'n toer van die verspreiding-kode vir hierdie probleem stel waar ons aan julle gegee het nie net die estetika vir die aanmelding bladsy en die mooi sexy logo wat sê CS50 Finansies, maar ons het ook aan julle gegee het 'n klomp van die funksies wat sal maak dat jou lewe 'n bietjie makliker. Ons het ook geskryf deel van die pset vir jou, die aanmelding gedeelte van dit in die besonder, te gee jou 'n gevoel van 'n verteenwoordigende ontwerp wat gebruik maak eintlik 'n kontroleerder, byvoorbeeld, jeug, login.php en dies meer, en dan sal jy sien die pset ook 'n templates directory wat al van jou siening, al die estetika. En so gaan die algehele workflow in pset 7 te wees dat jou gebruikers besoek 'n kontroleerder via 'n URL in 'n leser. Dat kontroleerder bevat PHP-kode wat jy geskryf het, en binnekant van jou PHP-kode kan 'n paar lyne van SQL Genestel tussen dubbele aanhalingstekens en geslaag aan 'n funksie wat ons geskryf genaamd navraag wat jou sal help jy praat met die databasis sonder die gebruik van iets soos 'n administratiewe hulpmiddel soos phpMyAdmin. Jy sal in staat wees om SQL-stellings in PHP-kode te skryf en terug te kry 'n PHP array van die resultaat te stel, van die rye wat eintlik ooreenstem met die soektog. En insgelyks sal jy in staat wees om inserts of verwyder om te doen of updates of iets dergeliks, die sintaksis waarvoor is redelik soortgelyk, en jy sal sien van 'n paar aanlyn verwysings, van die verspreiding kode en van die pset pak self presies hoe om te gaan oor om dit te doen. Besef uiteindelik het ons net regtig krap die oppervlak van SQL en van MySQL, maar die krag daarvan is regtig dat dit bevry u om te fokus op die probleme wat jy wil om op te los, die gebruik gevalle wat jy wil om te implementeer sonder om so veel bekommerd wees nie, ten minste vroeg op, oor waar en hoe om jou databasis te stoor en te deursoek, en dit is letterlik waar Facebook self het sy begin met behulp van MySQL en dan met behulp van meer MySQL bedieners en dan meer MySQL bedieners voor lank totdat hulle moes dan werklik begin dink hard oor hoe om stoor van data, hoe om dinge te selfs meer doeltreffend stoor, so selfs al sal ons as vanselfsprekend aanvaar die feit dat indekse en unieke beperkings en so meer net werk daar is 'n baie interessante gesprek dat dit kan uiteindelik almal lei tot, so besef dat ons net krap die oppervlak van wat uiteindelik vir jou of jou projekte raak nogal 'n bietjie van die groot data. Met wat gesê het, laat ons hier eindig nie, en ons sal jou volgende week sien. [CS50.TV]