[Powered by Google Translate] [Week 9] [David J. Malan - Harvard University] [Dit is CS50. - CS50.TV] Oke. Welkom terug. Dit is CS50, en dit is het begin van week 9. Vandaag richten we ons met name op het ontwerp, niet meer in de context van C maar in de context van PHP en een beetje van SQL en een beetje JavaScript, in het bijzonder in de richting van een einde van zowel PSET 7 en ook uw uiteindelijke project. In feite, als u zich op dat moment in uw uiteindelijke project waar vermoedelijk vanaf een uur of zo geleden heeft u in ieder geval begonnen na te denken over om je afstudeerproject en je denkt je wilt samenwerken met 1 of 2 klasgenoten, Als u problemen ondervindt met het aansluiten zei klasgenoten, voel je vrij om het formulier invullen op cs50.net/partners/form. Het vraagt ​​je gewoon wie je bent, wat voor soort project dat u denkt over, waar je woont maar om logistieke redenen. En dan als je wilt in de gaten houden de komende week of zo de spreadsheet URL daar, U kunt dan zien een alleen-lezen versie van de Google doc waarin we verzamelen deze informatie. Dus als je wilt werken met iemand, met alle middelen te voelen vrij om uit te reiken naar mensen via dat mechanisme. Maar de meerderheid van de mensen doen het werk solo. Dat is helemaal goed. Dat wil niet zeggen dat dit op enigerlei wijze verplicht. Op vrijdag was het alleen ik en een paar van het team hier, leeg theater voor het grootste deel. Er waren 3 toeristen zitten daar boven, dus dat was een beetje lastig. Wat hadden we het over was databases en spraken we over PSET 7 een beetje. En als je niet toevallig dat vangen op video gewoon nog niet, dat is prima. Ik zal proberen om een ​​van de woorden te definiëren die we anders zouden als vanzelfsprekend gebaseerd op lezing van vrijdag. Maar vandaag gaan we proberen om u naar het punt van niet alleen in staat om zoiets te doen PSET 7 maar echt te begrijpen wat er aan de hand onder de motorkap, in het bijzonder een aantal van de abstracties die we in te voeren in de functions.php bestand om uw leven een stuk makkelijker, maar zo dat je uiteindelijk begrijpen zodat wanneer de zijwieltjes eraf in een paar weken kunt u nog steeds overleven in de echte wereld en doen dit spul zonder CS50 kader onder je. Deze $ _SESSION, voor degenen onder u die op de hoogte of die reeds de video betrapt op vrijdag, SESSIE wat doet laten we het doen in een PHP-gebaseerde web applicatie? Dit is een superglobal variabele, wat betekent dat het in dezelfde geest aan GET POST en en een paar anderen, maar wat is dit ding nuttig voor? Wat is SESSIE gebruikt? Ja. [Student] Logging in Sorry? [Student] Logging in Logging in inderdaad. In PSET 7 gebruiken we deze sessie superglobal te vergemakkelijken in te loggen En wat er leuk is aan dit superglobal is dat het een associatieve array. Een associatieve array, recall, ligt op slechts een array, maar waarvan de indexen niet meer te zijn getallen zoals 012. Ze kunnen getallen of ze kunnen zelfs strings. En dus als je dook PSET 7 nog, kunt u zich herinneren dat we een sleutel genaamd ID opslaan binnenkant van deze associatieve array waarvan de waarde is zoiets als 123 - ongeacht de momenteel aangemelde gebruiker ID's is. De motivatie hiervoor is dat zelfs nadat de gebruiker heeft bezocht localhost of mijn website meer in het algemeen en dan hebben ze ingelogd, zelfs als ze niet op een koppeling of terug te gaan naar mijn website gedurende 5 minuten of zelfs een uur of zelfs een dag, maar ze laten hun browservenster geopend, via deze superglobal kan ik herinner me dat ze ingelogd Met andere woorden, het stelt me ​​in staat om op te slaan een beetje op lange termijn wat ik wil over een gebruiker. En je kunt echt zien als de incarnatie van een winkelwagentje. Plaatsen als Amazon natuurlijk laat je dingen in een winkelwagentje, maar HTTP, het protocol dat drijft op het web, is staatloos in de zin dat wanneer u een website bezoekt, voor het grootste deel u niet beschikt over een aantal constante netwerkverbinding tussen uw browser en de server. Zodra u hebt gedownload van de HTML en de JPEG's en de GIF's en dat alles, de verbinding gaat weg en je hoeft alleen een kopie van de HTML en wat al niet van de server. Maar als de server wil herinner me iets over jou, de last is op de server om daadwerkelijk op te nemen die informatie. En zodat je de programmeur die de controle over de server kan zetten de meeste alles wat je wilt binnenkant van dit superglobal associatieve array en het zal er de volgende keer dat de gebruiker terugkomt, of het nu minuten of zelfs dagen later, tenzij ze sluiten hun browservenster, op welk punt SESSIE verdwijnt. Dus het is vluchtig opslag, het is niet-persistent, en het is bedoeld om weg te gaan zodra de gebruiker sluit de browser - niet alleen dat tabblad, vaak de hele browser, waardoor effectief het loggen van de gebruiker uit. Dus hoe is dit ding werkelijk geïmplementeerd? Laten we eens een snelle blik op een eenvoudig voorbeeld hebben we gekeken naar vrijdag. Voor wie niet vertrouwd, het was zo simpel als dit. Dit is een webpagina met als enige doel in het leven is om te vertellen hoe vaak ik heb bezocht deze pagina. Dit is de eerste keer hier op maandag dat ik het bezocht, dus er staat 0 keer. Maar als ik begin herladen deze pagina, het zegt 1 keer, 2, 3, 4, 5, en dit zal uiteindelijk gewoon blijven tellen omhoog, omhoog, omhoog, omhoog, omhoog voor elke keer dat ik echt klikt vernieuwen op. Dus hoe is deze manier van werken? Laat me naar binnen gaan van dit bestand met de naam counter.php. Het bovenste deel van dit alles is blauw commentaar, maar het interessante deel is hier. Op lijn 13 noemen we deze functie session_start, en dat is letterlijk alles wat je moet doen als u toegang wilt hebben om deze speciale superglobal genaamd $ _SESSION. Dat maakt het allemaal mogelijk, en we zullen zien in een moment hoe dat is allemaal mogelijk. In lijn 16 merk op wat ik doe. Als de sleutel, genaamd counter - met andere woorden, de indexwaarde - "counter" bestaat binnenkant van deze array genaamd SESSIE, wat doe ik met het in de regel eronder? Wat is regel 18 aan het doen? [Onverstaanbaar student reactie] Wat is dat? [Student] Het opslaan van de waarde. Goed. Het opslaan van de waarde die in SESSIE nu in een nieuw lokaal tijdelijke variabele, $ Teller in kleine letters. Merk op dat PHP al is een beetje lui hier. Let op dat we geen vermelding van int of float of string of iets dergelijks hebben dat omdat PHP is zwak getypt, waarbij je niet het type van een variabele op te geven, en in dit geval hier heb ik nog niet eens verklaard dat hij nog niet. Ik verklaar dat de binnenkant van deze accolades en in tegenstelling tot C, dit is eigenlijk oke. Het maakt niet uit hoe diep een variabele declaratie genest is in PHP - binnenkant van accolade, de binnenkant van accolade en dergelijke - zal op dat moment bestaan ​​in tijd voor de rest van het programma, ten goede of ten kwade. Dus wordt het onmiddellijk mondiale zodra je deze instelt als we hier doen. Anders, als ik niet vind dat er iets in de SESSION superglobal, Ik ben blijkbaar het initialiseren van deze variabele teller op 0, daardoor net de veronderstelling dat de gebruiker heeft hier nog nooit eerder geweest. En dan is dit natuurlijk is het verhogen van de teller hoe? Ik ben het bijwerken van de waarde die binnen is van deze associatieve array door het gelijk aan wat teller momenteel + 1. Als ik scroll naar beneden hier om de HTML van de pagina, het is eigenlijk vrij eenvoudig. Alles wat ik heb in het lichaam van deze pagina is: "U hebt deze site bezocht zo-en-zo tijden." En dit is een PHP-construct. Als je dat doet