[Powered by Google Translate] [Vecka 9] [David J. Malan - Harvard University] [Detta är CS50. - CS50.TV] Okej. Välkommen tillbaka. Detta är CS50, och detta är början av vecka 9. Idag fokuserar vi särskilt på design, inte längre i samband med C- men i samband med PHP och lite av SQL och lite JavaScript, särskilt mot en ände av både pset 7 och även din sista projekt. Faktum är att om du är vid den punkten i ditt slutgiltiga projekt där förmodligen som en timme eller så sedan du åtminstone börjat fundera till din slutliga projektet och du tänker du vill samarbeta med 1 eller 2 klasskamrater, om du har problem med att ansluta med nämnda klasskamrater, gärna fylla i formuläret på cs50.net/partners/form. Man ställer bara du vem du är, vilken typ av projekt du funderar, där du bor bara av logistiska skäl. Och sedan om du vill hålla ett öga på under nästa vecka eller så kalkylbladet URL där, Du kan då se en skrivskyddad version av Google doc där vi samlar denna information. Så om du vill arbeta med någon, med alla medel gärna nå ut till människor genom denna mekanism. Men majoriteten av folk utföra arbete solo. Det är helt bra. Så tycker inte att det är på något sätt obligatoriskt. På fredag ​​var det bara jag och några i teamet här, tom teater för det mesta. Det fanns 3 turister sitter där, så det var lite pinsamt. Vad vi pratade om var databaser och vi pratade om pset 7 lite. Och om du inte råkar fånga det på video ännu, det är bra. Jag ska försöka definiera några termer som vi annars skulle ta för givet baserat på fredagens föreläsning. Men idag ska vi försöka få dig till den punkt att inte bara kunna göra något liknande pset 7 men egentligen förstå vad som händer under huven, särskilt några av de abstraktioner som vi infört i functions.php filen att göra era liv lite lättare, men så att du i slutändan förstår så att när stödhjul lossna om några veckor kan du fortfarande överleva i den verkliga världen och göra det här utan att någon CS50 ram under dig. Detta $ _SESSION, för dem av er som är bekanta eller som redan fångat videon på fredag, vad SESSION låt oss göra i en PHP-baserad webbapplikation? Detta är en superglobal variabel, vilket betyder att det är likadana i andemening som GET och POST och några andra, men vad är det här bra för? Vad är SESSION för? Ja. [Elev] Logga in Ursäkta? [Elev] Loggar in Logga in faktiskt. I pset 7 vi använder den här sessionen superglobal att underlätta logga in Och vad är trevligt om denna superglobal är att det är en associativ array. En associativ array, minns, är bara en array men vars index inte längre vara tal som 012. De kan vara tal eller de kan vara ännu strängar. Och så om du har dykt in pset 7 ännu, kanske ni minns att vi lagrar en nyckel som heter ID insidan av denna associativ array vars värde är något som 123 - oavsett inloggad användarens ID är. Motiveringen till detta är att även efter det att användaren har besökt localhost eller min hemsida mer generellt och sedan har loggat in, även om de inte klickar på en länk eller återgå till min hemsida i 5 minuter eller ens en timme eller ens en dag, men de lämnar sina fönster öppna, via denna superglobal kan jag komma ihåg att de loggat in Med andra ord, gör det mig att lagra något långsiktigt något jag vill om en användare. Och du kan tänka på det verkligen som en inkarnation av en kundvagn. Platser som Amazon låter självklart du sätter saker i en kundvagn, men HTTP protokollet som driver webben, är statslös i den meningen att när du besöker en webbplats, för det mesta du inte har någon konstant nätverksanslutning mellan din webbläsare och servern. Så snart du har hämtat HTML och JPEG och GIF och allt det där, anslutningen går bort och du behöver bara en kopia av HTML och allt från servern. Men om servern vill minnas något om dig, bördan är på servern att faktiskt registrera denna information. Och så programmeraren som har kontroll över servern kan sätta de flesta vad du vill inne i denna superglobal associativ array och det kommer att vara där nästa gång användaren kommer tillbaka, oavsett om det är minuter eller till och med dagar senare, om de inte stänger sina fönster, vid vilken punkt SESSION försvinner. Så det är flyktig lagring, är det icke-ihållande, och det är tänkt att försvinna så snart användaren stänger sin webbläsare - inte bara den fliken, ofta hela webbläsaren, därigenom effektivt logga användaren ut. Så hur är det här genomförs egentligen? Låt oss ta en snabb titt på ett enkelt exempel vi tittat på på fredag. För de som känner var det så enkelt som det. Detta är en webbsida vars enda syfte i livet är att berätta hur många gånger jag har besökt den här sidan. Detta är första gången här på måndag som jag besökte det, så det säger 0 gånger. Men om jag börjar ladda om den här sidan står det 1 gång, 2, 3, 4, 5, och detta kommer så småningom bara hålla på att räkna upp, upp, upp, upp, upp för varje gång jag faktiskt på Ladda om den. Så hur är det arbete? Låt mig gå in i denna fil som heter counter.php. Den övre delen av det är alla blå kommentarer, men den intressanta delen är här. På rad 13 vi kallar denna funktion session_start, och det är bokstavligen allt du behöver göra om du vill ha tillgång denna speciella superglobal kallas $ _SESSION. Det gör det möjligt, och vi kommer att se i ett ögonblick hur det är allt möjligt. I linje 16 meddelande vad jag gör. Om nyckeln, kallad mot - med andra ord, indexvärdet - "räknare" finns inuti denna array kallas sessionscookies, vad gör jag med den i raden nedan? Vad är linje 18 med? [Ohörbart elev svar] Vad är det? [Elev] Lagra värdet. Bra. Det lagrar det värde som finns i SESSION just nu i en ny lokal temporär variabel, $ Räknare i gemener. Lägg märke till att PHP redan är lite lat här. Märker vi inte har någon omnämnande av int eller float eller string eller något liknande eftersom PHP är svagt skrivit, där du inte behöver ange vilken typ av en variabel, och i detta fall här jag inte har ens förklarade det ännu. Jag förklarar det inne dessa klammerparenteser och till skillnad från C, är detta faktiskt okej. Oavsett hur djupt kapslade en variabel deklaration är i PHP - inne i klammerparentes, inuti klammerparentes och liknande - Det kommer vid denna tidpunkt finns för återstoden av programmet, på gott och ont. Så det blir omedelbart globala så snart du definiera det som vi gör här. Annars, om jag inte hittar att det finns något i SESSION superglobal, Jag tydligen initierar den här variabeln mot 0, vilket bara förutsatt att användaren aldrig har varit här förut. Och så detta är naturligtvis att inkrementera räknaren hur? Jag uppdaterar det värde som finns inuti denna associativ array genom att ställa det lika oavsett motströms är + 1. Om jag rulla ner hit till HTML av sidan, det är faktiskt ganska enkelt. Allt jag har i kroppen denna sida är: "Du har besökt denna webbplats så-och-så gånger." Och detta är en PHP konstruktion. Om du gör