[Powered by Google Translate] [Uke 8, Fortsatt] [David J. Malan] [Harvard University] [Dette er CS50.] [CS50.TV] Dette er CS50, så dette er slutten av uke 8 her. Vi selvfølgelig hadde litt av en orkan tidligere denne uken, så akkurat nå er det egentlig bare deg og meg i denne forelesningssal men i dag fortsetter vi vår samtale om PHP og om webprogrammering mer generelt, og vi har også introdusere ideen av databaser, kalt spesielt en MySQL, som er ganske populær i disse dager, i stor grad på grunn av sin skalerbarhet samt fordi det blir gratis og åpen kildekode. Men først en titt på hvor vi slapp forrige gang. Husker at vi var ute på flere Frosh direktemeldinger eksempler, og dette var det heslig form at jeg kom opp med noen 15 + år siden for å ha studenter på campus register for freshman egenutført idrett uten egentlig å måtte trek lenger over tunet til Wigglesworth å skyve en fysisk stykke papir under noen Proctor dør. I stedet har vi flyttet alt på nettet, men å gjøre det vi trengte å gjøre bruk av noen få teknologier, slik at en, vi trengte HTML, HyperText Markup Language, som er igjen denne markup language som du gjør websider strukturelt. Ved hjelp av en bit av CSS i disse dager, stilark, der vi bruker stiliseringer av websiden ved hjelp av en litt annen syntaks, mens HTML var alt om strukturen av disse. Vi trenger også å innføre en web-programmeringsspråk. I dette tilfellet vil vi bruke PHP og PHP kommer til å tillate oss til dynamisk effekt innhold samt gjøre programmatiske ting som sende e-post, slik tilfellet var på lappen vi forlot forrige uke. Husker at koden for dette var i 2 deler. En, hadde vi froshims3.php, og dette var i stor grad markup med et HTML-skjema på innsiden av det, en liten bit av CSS her oppe i malattributtene slik at selve skjemaet ville være sentrert på siden, men utover det Vi hadde noen representative skjema innganger, et tekstfelt, en avmerkingsboks, noen radio knapper, en utvalgt meny, og en send-knappen. Og via dette skjemaet, sendte vi til en fil som ble tilsynelatende kalt register3.php, som selv så litt noe sånt som dette. Nå var det meste av koden i register3.php, husker, om e-post. Det gjorde litt av validering av skjemaet som ble sendt for å sikre at at feltene ble faktisk gitt som ble forventet. Så vi kalte noen PHP-funksjoner ved hjelp av litt ny syntaks, selv om det er lånt fra C. Denne pilen operatør tillater oss å gjøre bruk av noe som kalles objektorientert programmering. Vi vil ikke gå inn på det i detalj her, men vet for nå det er en måte å ha funksjoner knyttet til objekter, som er en spesiell type struktur, som vi så i C. Men for nå, bare ta på tro at dette er riktig syntaks å bruke når du bruker et bibliotek som dette PHPMailer biblioteket. Og deretter ved utgangen av denne filen hadde vi dynamisk generert en e-post som fikk sendt til min jharvard@cs50.net konto fra min jharvard@cs50.net konto, og vi informert brukeren derfor at de hadde blitt registrert for denne sporten. Det er ganske mye hva Frosh direktemeldinger området gjorde alle disse år siden når jeg implementert det, gitt, på et annet språk, men det viser deg kanskje den kraften du har nå som du kan uttrykke deg selv, ikke bare programmatisk på et lavt nivå på et språk som C, men på et mye høyere nivå med disse svært virkelige verden programmer som e-post til å faktisk løse noen reelle problemstillinger. Nå, selvfølgelig, selv om jeg bruker dette skriptet til å generere noen e-post dynamisk fra jharvard@cs50.net, som faktisk er en konto at jeg har tilgang til, vær ganske forsiktig med å sende post bare fra kontoer som er faktisk din egen, lest ting får du i litt varmt vann i livet. Med det sagt, la oss nå gjøre overgangen til å løse et annet problem helt, at av støttemurer stater. Nå, hva dette egentlig betyr? HTTP, dette HyperText Transfer Protocol, er faktisk en statsløs protokoll, og hva dette betyr er at når du trekker opp noe som Google.com og trykk enter vanligvis din nettleser har en slags spinne ikonet som da resulterer i noen nettside lastes ned, og deretter det lille ikonet slutter å spinne, og som faktisk antyder at HTTP har gjennomført noen form for tilkobling til serveren og det er det. HTTP er statsløs i den forstand at det ikke holder en vedvarende tilkobling til serveren på samme måte Skype gjør eller Gchat gjør fordi med HTTP antagelsen er at når du har hentet en nettside som er det. Nå i realiteten i disse dager på nettsteder som Facebook og Google Maps og Twitter og lignende det er mye mer dynamikk der selv etter at ikonet slutter å spinne du kan faktisk få flere oppdateringer fra serveren, flere tweets, flere statusoppdateringer på Facebook og lignende. Men selv det er ved hjelp av en teknikk som vi skal snakke om i en uke eller to kjent som Ajax bruker et språk som kalles JavaScript, men på slutten av dagen, er HTTP fortsatt statsløs. Og likevel hvis du ønsker å liksom huske ting om en bruker selv etter at de har koblet fra serveren din PHP gjør gi deg et redskap til å gjøre dette fordi, som vi så forrige gang, har PHP en rekke superglobals, og en superglobal er, igjen, en spesiell global variabel som er levert til deg av webserveren og PHP selv. Du trenger ikke å gjøre noe for å sette verdier i det, og blant de superglobals vi har sett så langt er få og legge ut, som er der skjemafelt settes automatisk for deg, samt et par andre som vi ikke har sett ennå. Innsiden av $ _SERVER er noen spesielle variabler knyttet til selve serveren. Hva er IP-adressen, hvilken protokoll, HTTP eller HTTPS brukte du, hva forespørsel metode brukte du og lignende, så det er litt interessant, saftige detaljer om serveren, og faktisk bruker der også. Det er $ _cookie, som er der disse tingene kalles cookies lagres. Vi vil ikke bruke tid på cookies selv i dag, men vet nå at en cookie er bare en liten del av informasjonen at en web-server kan plante i en nettleser og i sin tur RAM eller dets datamaskinens harddisk å lagre informasjon om en bruker, for eksempel, brukernavn slik at de ikke behøver å skrive det hver gang de logger seg eller noen unikt nummer eller identifikator for denne brukeren slik at du ikke trenger å plage dem med de samme typer spørsmål om preferanser i fremtiden, men de fleste av interesse akkurat nå er $ _SESSION. Dette superglobal, som i likhet med andre, er levert til deg automatisk av PHP når du skriver PHP-baserte nettsteder kan lagre alt du vil, strenger, heltall, flytende punkter, verdier, matriser, gjenstander, virkelig noe som du ønsker, og det tillater deg å lagre det på en slik måte at selv om brukeren besøker du nå og da kommer tilbake et minutt fra nå eller 5 minutter fra nå fordi de tar sin tid før du klikker noen annen link PHP vil sikre at det du putter i den økten superglobal et minutt eller 5 minutter siden vil fortsatt være der når brukeren er tilbake. Og under panseret denne superglobal er implementert ved hjelp av disse tingene kalles cookies, men for nå, det er bare en abstraksjon der det er liksom den programmatiske tilsvarer en handlevogn. Uansett hva du, programmerer, satt i at superglobal assosiativ array vil være der et antall minutter senere til du sletter den, eller til brukeren avslutter sin nettleser helt. La oss ta en titt på et eksempel på hvordan denne saken er faktisk brukes. I counter.php blant dagens deler av koden Vi har følgende linje. Ved starten av denne filen har vi en haug med blå kommentarer, som uinteressante for nå. Men i linje 13 har vi en ny linje, session_start, og som faktisk gjør akkurat det den sier. Det begynner økter. Det gjør at du kan bruke den store superglobal $ _SESSION, og det er så enkelt som det. Nå, hvis vi fortsetter å se på linje 16, la oss prøve å finne ut hva denne nettsiden kommer til å gjøre. If (isset ($ _SESSION ["counter"]) og deretter gå videre og butikk i tellervariabelen, små bokstaver teller, $ _SESSION ["Counter"]. Dette synes å være å erklære en lokal variabel kalt teller innsiden av som det er å sette en kopi av det som er på innsiden av den superglobal kalt session på stedet "teller". Else, tilsynelatende, denne lille lokale variable telleren, er initialisert til 0. Men da noen linjer senere i 26 varsel om at økten kopi av disken, styringsrenten, har en ny verdi som er tilordnet som er dens nåværende verdi pluss en. Kort sagt, synes denne filen til å oppdatere en teller som er lagret inne i økten superglobal ved å øke den med 1, men beholder det først en kopi av den forrige verdien ved å oppbevare det i en lokal variabel kalt $ teller, og deretter ned her la oss se hva som gjenstår. Det viser seg at det er ganske mye bare HTML. Nederst på denne siden ser vi på linje 37 som jeg har besøkt dette nettstedet teller antall ganger, så det er et par interessante funksjoner her. En, er dette helt klart en variabel, men det er nok ikke å bare sette $ Teller i kroppen i HTML fordi selvfølgelig hvis det er bare der blant HTML PHP kommer til å anta det er bare HTML. Du bokstavelig talt ønsker $ teller skal skrives ut på skjermen. Men i stedet ved å slippe inn PHP-modus med dette stykke syntaks kan vi dynamisk sette en verdi her svært lik i ånden til hva vi gjorde sist gang med sette verdier inn strenger. Faktisk er dette bare en forkortelse notasjon for å si noe sånt som dette bokstavelig, print ($ teller) eller noe sånt printf (% s, counter), eller, som du kanskje har sett på nettet eller i lærebøker, det er en funksjon i PHP kalles ekko som gjør det samme, og alle av dem er bare lengre winded måter for å si