[Powered by Google Translate] [Uge 8, Fortsat] [David J. Malan] [Harvard University] [Dette er CS50.] [CS50.TV] Det er CS50, så dette er slutningen af ​​uge 8 her. Vi havde naturligvis lidt af en orkan tidligere på ugen, så lige nu er det virkelig bare dig og mig i denne auditoriet, men i dag fortsætter vi vores samtale om PHP og om webprogrammering mere generelt, og vi også indføre idéen af databaser, der kaldes især én MySQL, som er meget populære i disse dage, en stor del på grund af sin skalerbarhed samt fordi det er gratis og open source. Men først et kig på, hvor vi slap sidste gang. Husk på, at vi ledte på de mange Frosh IMs eksempler, og dette var den hæslige form, jeg kom op med nogle 15 + år siden med henblik på at få studerende på campus register for freshman intramurale sportsgrene uden egentlig at skulle trek længere på tværs af værftet til Wigglesworth at glide en fysisk stykke papir nedenunder nogle Proctor dør. I stedet flyttede vi alt online, men at gøre det vi behov for at gøre brug af nogle få teknologier, så man vi havde brug for HTML, Hypertext Markup Language, som igen er dette kodesprog, som du gøre websider strukturelt. Ved hjælp af en smule af CSS i disse dage, cascading style sheets, hvorved vi bruger stylizations på websiden ved hjælp af en lidt anden syntaks, mens HTML var alt om struktur. Vi er også nødt til at indføre en web programmeringssprog. I dette tilfælde vil vi bruge PHP, og PHP vil give os til dynamisk output indhold samt gøre programmatiske ting som sende e-mails, som det var tilfældet på den note, vi forlod i sidste uge. Husk på, at koden for dette var i 2 dele. Én, vi havde froshims3.php, og dette var stort set markup med en HTML-formular inde i det, en lille smule af CSS heroppe i attributter således at formen i sig selv ville være centreret på siden, men ud over det vi havde nogle repræsentative danner indgange, et tekstfelt, et afkrydsningsfelt, nogle radio knapper, en udsøgt menu, og en submit knap. Og via denne formular, forelagde vi for en fil, der tilsyneladende var kaldt register3.php, der selv kiggede lidt noget som dette. Nu er de fleste af koden i register3.php, recall, handlede om e-mail. Det gjorde en lille smule af validering af den formular, der blev forelagt for at sikre, at felterne faktisk er afholdt, som blev forventet. Så vi kaldte nogle PHP funktioner ved hjælp af lidt ny syntaks, selv om det er lånt fra C. Denne pil operatør giver os mulighed for at gøre brug af noget, der hedder objektorienteret programmering. Vi vil ikke gå ind i det i detaljer her, men kender for nu det er en måde at have funktioner knyttet til objekter, der er en særlig form for struktur, som vi så i C. Men for nu, tager bare på tro, at dette er den korrekte syntaks for at bruge når der anvendes et bibliotek som denne PHPMailer bibliotek. Og så i slutningen af ​​denne fil, vi havde dynamisk genereret en e-mail der blev sendt til min jharvard@cs50.net konto fra min jharvard@cs50.net konto, og vi informeret brugeren derfor, at de var blevet registreret for denne sport. Det er temmelig meget, hvad det Frosh IM stedet gjorde alle de år siden når jeg gennemført det, indrømmet, på et andet sprog, men det viser dig måske den magt, som du har nu, at du kan udtrykke dig ikke kun programmatisk på et lavt niveau i et sprog, som C, men på et meget højere niveau med disse meget virkelige verden applikationer som e-mail til rent faktisk at løse nogle virkelige verdens problemer. Nu, selvfølgelig, selvom jeg bruger dette script til at generere nogle emails dynamisk fra jharvard@cs50.net, der er faktisk en konto at jeg har adgang til, skal du være ganske omhyggelig med at sende mail kun fra konti, der faktisk din egen, lest tingene bliver du i en smule varmt vand i livet. Med det sagt, lad os nu overgang til at løse et andet problem helt, der af støttekonstruktioner stater. Nu, hvad det egentlig? HTTP, denne Hypertext Transfer Protocol, er faktisk en statsløs protokol, og hvad dette betyder, at når du trækker op noget som Google.com og derefter tryk enter normalt din browser har en slags spinning ikonet, der så resulterer i nogle webside bliver downloadet, og så den lille ikon stopper spinning, og som faktisk tyder at HTTP har gennemført en eller anden form for forbindelse til serveren og det er det. HTTP er statsløs i den forstand, at den ikke opretholder en vedvarende forbindelse til serveren på samme måde, Skype gør eller Gchat gør, fordi med HTTP antagelsen er, at når du har hentet en webside, der er det. Nu, i virkeligheden i disse dage på websteder som Facebook og Google Maps og Twitter og lignende der er en masse mere dynamik, hvorved selv efter dette ikon stopper spinding du kan faktisk få flere opdateringer fra serveren, flere tweets, flere statusopdateringer på Facebook og lignende. Men selv det er ved hjælp af en teknik, som vi vil tale om i en uge eller to kendt som Ajax bruge et sprog kaldet JavaScript, men i slutningen af ​​dagen, er HTTP stadig statsløs. Og dog, hvis du vil en eller anden måde at huske ting om en bruger selv efter at de har koblet fra din server PHP gør give dig et middel til at gøre dette fordi, som vi så sidste gang, PHP har en række superglobals, og en superglobal er, igen, en særlig global variabel der er udleveret til dig af webserveren og PHP selv. Du behøver ikke at gøre noget for at sætte værdier i det, og blandt de superglobals vi har set indtil nu, er få og sende, som er hvor formularfelter sættes automatisk for dig, samt et par andre, som vi ikke har set endnu. Inde på $ _SERVER er nogle særlige variabler i relation til selve serveren. Hvad er den IP-adresse, hvilken protokol, HTTP eller HTTPS brugte du, hvad anmodning metode brugte du og lignende, så der er nogle interessante, saftige detaljer om serveren, og i virkeligheden, brugeren i der. Der er $ _cookie, som er der, hvor disse ting kaldet cookies gemmes. Vi vil ikke bruge tid på cookies selv i dag, men kender til nu, at en cookie er bare et lille stykke information at en web-server kan plante på en web browser og til gengæld sin RAM eller dens computers harddisk at gemme oplysninger om en bruger, for eksempel, deres brugernavn således at de ikke behøver at skrive det hver gang de logger på eller nogle entydigt nummer eller identifikator for den pågældende bruger så du ikke behøver at forpeste dem med de samme slags spørgsmål om præferencer i fremtiden, men de fleste af interesse lige nu er $ _SESSION. Denne superglobal, der ligesom de andre, er afleveret til dig automatisk via PHP når du skriver PHP-baserede websites kan gemme noget, du vil, strygere, heltal, flydende punkter, værdier, arrays, objekter, virkelig noget, du ønsker, og det giver dig mulighed for at gemme det på en sådan måde, at selv hvis brugeren besøger dig nu og da kommer tilbage et minut fra nu eller 5 minutter fra nu, fordi de tager deres tid, før du klikker nogle andre link PHP vil sikre, at uanset hvad du lægger i denne session superglobal et minut eller 5 minutter siden vil stadig være der, når brugeren kommer tilbage. Og nedenunder hætten denne superglobal er gennemført ved hjælp af disse ting kaldet cookies, men for nu er det bare en abstraktion hvorved det er slags den programmæssige svarer til en indkøbsvogn. Uanset hvad du, programmøren, kan du sætte det superglobal associative array vil være der et bestemt antal minutter senere indtil du sletter den, eller indtil brugeren afslutter sin browser helt. Lad os tage et kig på et eksempel på, hvordan denne ting er faktisk bruges. I counter.php blandt dagens stykker kode har vi følgende linje. I starten af ​​denne fil, vi har en flok blå kommentarer, som er uinteressante for nu. Men i linje 13 har vi en ny linje, session_start, og det faktisk gør præcis hvad den siger. Det starter sessioner. Det giver dig mulighed for at bruge den store superglobal $ _SESSION, og det er så simpelt er det. Nu, hvis vi går over til at se på linie 16, lad os prøve at regne ud, hvad denne webside kommer til at gøre. Hvis (isset ($ _SESSION ["counter"]) og derefter gå videre og butik i tællervariablen, små bogstaver tæller, $ _SESSION ["Counter"]. Dette synes at være at erklære en lokal variabel kaldet counter inden i hvilken det er at sætte en kopi af det, der er inde i superglobal kaldet session på location "tæller". Else, tilsyneladende, denne lille lokal variabel tæller, er initialiseret til 0. Men derefter et par linjer senere i 26 meddelelse om, at mødet eksemplar af tælleren, sin nøgle, har en ny værdi er tildelt som er den aktuelle værdi plus 1. Kort sagt, synes denne fil, der skal ajourføre en tæller, der er gemt inde i sessionen superglobal ved at forøge det med 1, men den først har en kopi af den tidligere værdi ved at opbevare den i en lokal variabel kaldet $ counter, og derefter ned her lad os se hvad der er tilbage. Det viser sig, at det er stort set bare HTML. Nederst på denne side ser vi på linje 37, at jeg har besøgt dette websted tæller antal gange, så der er et par interessante funktioner her. One, dette er tydeligvis en variabel, men det er ikke tilstrækkeligt bare at sætte $ Tæller i kroppen af ​​din HTML, fordi selvfølgelig hvis det er bare der blandt din HTML PHP vil antage det er bare HTML. Du bogstaveligt talt ønsker $ tæller skal udskrives på skærmen. Men i stedet ved at slippe ind i PHP mode med dette stykke syntaks vi kan dynamisk indsætte en værdi her meget ens i ånden til, hvad vi gjorde sidste gang med indsætte værdier i strenge. I virkeligheden er dette blot en forkortelse notation for at sige noget som dette bogstaveligt, print ($ counter) eller endda noget lignende printf (% s, counter), eller endda, som du måske har set på nettet eller i lærebøger, der er en funktion i PHP kaldet echo der gør det samme, og alle af dem er bare længere endeløse måder at sige