[Powered by Google Translate] [Setmana 8, continuació] [David J. Malan] [Harvard University] [Aquesta és CS50.] [CS50.TV] Això és CS50, de manera que aquest és el final de la setmana 8 aquí. Nosaltres, per descomptat, tenia una mica d'un huracà a principis d'aquesta setmana, de manera que ara és realment només tu i jo en aquesta sala de conferències, però avui en dia continuem la nostra conversa sobre PHP i sobre la programació web en general, i també introduir la idea de bases de dades, especialment un anomenat MySQL, que és molt popular en aquests dies, en gran part a causa de la seva escalabilitat, així com per la seva ser lliure i de codi obert. Però primer, una mirada a on el deixem l'última vegada. Recordem que estàvem buscant en els diversos exemples Frosh missatges instantanis, i aquesta era la manera horrible en què va ocórrer amb uns 15 + anys amb la finalitat que els estudiants al campus de registre per als esports intramurs de primer any sense haver de caminar més pel pati a Wigglesworth la caiguda d'una peça física de paper sota la porta una mica de Proctor. En el seu lloc ens vam traslladar tot en línia, però per això és necessari fer un ús d'unes poques tecnologies, de manera que un, necessitàvem HTML, HyperText Markup Language, que al seu torn és aquest llenguatge de marcat amb la qual fer pàgines web estructuralment. Amb una mica de CSS en aquests dies, els fulls d'estil en cascada, en què puguem utilitzar estilitzacions de la pàgina web utilitzant una sintaxi lleugerament diferent, mentre que l'HTML és tot sobre l'estructura del mateix. També hem d'introduir un llenguatge de programació web. En aquest cas, utilitzarem PHP, PHP i ens permetrà al contingut de la sortida de forma dinàmica, així com fer les coses com programàtiques l'enviament de correus electrònics, com va ser el cas en la nota que va deixar la setmana passada. Recordem que el codi per això va ser en 2 parts. Un d'ells, vam tenir froshims3.php, i això va ser en gran mesura el marcat amb un formulari HTML dins d'ella, una mica de CSS aquí en els atributs d'estil de manera que la forma en si es centra en la pàgina, però més enllà vam tenir alguns insums forma representativa, un camp de text, una casella de verificació, Alguns botons de ràdio, un selecte menú i un botó submit. I a través d'aquest formulari, ens va presentar a un arxiu que es diu pel que sembla register3.php, que al seu torn es veia una mica d'alguna cosa com això. Ara, la major part del codi en register3.php, recordar, tractava de correu electrònic. Ho va fer una mica de la validació de la manera que es va presentar per assegurar-se que que els camps van ser realment que s'esperava. Després fem una crida a algunes funcions de PHP usant una mica nova sintaxi, tot i que està pres de C. Aquest operador de fletxa ens permet fer ús d'alguna cosa que es diu programació orientada a objectes. No entrarem en això en detall aquí, però sabem per ara que és una manera de tenir funcions associades amb els objectes, que són un tipus especial d'estructura, com vam veure en C. Però per ara, només té fe que aquesta és la sintaxi correcta per utilitzar quan s'utilitza una biblioteca com aquesta biblioteca PHPMailer. I després, al final d'aquest arxiu que havíem generat dinàmicament un correu electrònic que va ser enviat al meu compte jharvard@cs50.net del meu compte jharvard@cs50.net, i ens van informar a l'usuari en conseqüència que s'havien registrat per aquest esport. Això és més o menys el que el lloc Frosh IMS va fer fa tants anys quan la munta, és cert, en un idioma diferent, però potser et mostra el poder que té ara que vostè pot expressar-se no només mitjançant programació a un nivell baix en un llenguatge com C, però a un nivell molt més alt amb aquestes aplicacions en el món molt reals com el correu electrònic per resoldre realment alguns dels problemes del món real. Ara, és clar, encara que jo faig servir aquest script per generar algun correus electrònics de forma dinàmica jharvard@cs50.net, que és en realitat un compte que tinc accés, siguis molt acurat en enviar Missatges només dels comptes que estan en realitat el seu compte, no fos cas que les coses que et donen en una mica d'aigua calenta a la vida. Dit això, anem ara la transició a la solució d'un problema totalment diferent, la dels estats de retenció. Ara, què significa això realment? HTTP, el protocol de transferència d'hipertext, en realitat és un protocol sense estat, i el que això significa és que quan acabes d'arribar alguna cosa com Google.com i després prem enter en general el seu navegador té algun tipus d'icona volador que després resulta en alguna pàgina web que la descàrrega, i tan bon punt petita icona deixa de girar, i que en realitat suggereix HTTP que ha completat algun tipus de connexió amb el servidor i ja està. HTTP és l'estat en el sentit que no manté una connexió permanent amb el servidor de la mateixa manera que ho fa Skype o Gchat fa perquè amb HTTP el cas és que una vegada que va anar a buscar una pàgina web que ja està. Ara bé, en la realitat aquests dies en llocs com Facebook i Google Maps i Twitter i similars hi ha molt més dinamisme pel qual fins i tot després que la icona deixa de girar pot de fet tenir més actualitzacions des del servidor, més tweets, més actualitzacions d'estat a Facebook i similars. Però fins i tot això està utilitzant una tècnica que parlarem en una setmana o dues coneguda com Ajax usant un llenguatge anomenat JavaScript però al final de la dia, HTTP és encara sense estat. I no obstant això, si vostè vol recordar alguna manera les coses sobre un usuari fins i tot després d'haver desconnectat del servidor PHP fa permetre que un mitjà de fer això perquè, com vam veure per última vegada, PHP té una sèrie de superglobales, i un superglobal és, de nou, una variable global especial que és lliurat a vostè pel servidor web i PHP per si mateix. No ha de fer res per posar els valors en ella, i entre les superglobales que hem vist fins ara són GET i POST, que és on es col · loquen els camps de formulari de forma automàtica, així com un parell d'altres que no hem vist encara. Dins de $ _SERVER algunes variables especials relacionades amb el propi servidor. Quina és l'adreça IP, quin protocol, HTTP o HTTPS vas usar, quin mètode vas usar sol · licitud i similars, de manera que hi ha alguns interessants, sucosos detalls sobre el servidor, i de fet, l'usuari així com a allà. Hi ha $ _COOKIE, que és on aquestes coses anomenades cookies s'emmagatzemen. No anem a dedicar temps a si mateixes galetes avui, però sabem per ara que una galeta és una petita peça d'informació que un servidor web es pot plantar en un navegador web i al seu torn la seva memòria RAM o el disc dur del seu ordinador per emmagatzemar informació sobre un usuari, per exemple, nom d'usuari de manera que no hagi de escriure-cada vegada que inicien sessió en o alguns nombre únic o identificador per aquest usuari de manera que vostè no ha de molestar amb el mateix tipus de preguntes sobre preferències en el futur, però la majoria dels interessos en aquests moments és de $ _SESSION. Aquesta superglobal, que, com els altres, es lliura de forma automàtica per PHP quan escrius llocs web basats en PHP pot emmagatzemar el que vulguis, cadenes, enters, punts flotants, valors, matrius, objectes, Realment qualsevol cosa que desitgi, i li permet emmagatzemar de forma que fins i tot si l'usuari el visita de tant en tant torna un minut a partir d'ara o 5 minuts a partir d'ara, perquè es prenen el seu temps abans de prémer algun altre enllaç PHP s'assegurarà que el que poses en aquesta sessió superglobal minuts o 5 minuts fa encara estarà allà quan torni l'usuari. I sota la caputxa aquesta superglobal sigui implementada a través de aquestes coses anomenades galetes, però per ara, és només una abstracció per la qual cosa és una espècie d'equivalent programàtic d'un carret de compres. El que vostè, el programador, ja que en matriu associativa superglobal hi serà cert nombre de minuts més tard fins que l'elimini, o fins que l'usuari surt del seu navegador complet. Fem una ullada a un exemple de com això s'utilitza realment. En counter.php entre peces actuals de codi tenim la següent línia. A l'inici d'aquest arxiu tenim un munt d'observacions blaus, que són poc interessants per ara. No obstant això, en la línia 13 tenim una nova línia, session_start, i que en realitat fa exactament el que diu. S'inicia sessions. Permet utilitzar aquesta gran superglobal $ _SESSION, i és tan simple com això. Ara bé, si es procedeix a observar la línia 16, intentarem esbrinar el que aquesta pàgina web es farà. If (isset ($ _SESSION ["comptador"]) i després seguir endavant i guardar a la variable de comptador, comptador minúscules, $ _SESSION ["Comptador"]. Això sembla que es declara una variable local anomenada comptador dins dels quals es tracta de posar una còpia de tot el que està dins de la superglobal anomenat període de sessions a la ubicació "comptador". Si no, pel que sembla, aquest petit taulell variable local, s'inicialitza a 0. Però llavors, unes línies més endavant en el 26 avís que còpia de la sessió de taulell, seva clau, té un valor assignat nou que és el seu valor actual més 1. En resum, aquest arxiu sembla estar actualitzant un comptador que està emmagatzemat a l'interior de la superglobal sessió en un increment d'1, però primer conserva una còpia del valor anterior emmagatzemant en una variable local anomenada $ taulell, i llavors aquí veurem el que queda. Resulta que és més o menys només HTML. A la part inferior d'aquesta pàgina podem veure en la línia 37 que he visitat aquest lloc nombre del comptador de temps, així que hi ha un parell de característiques interessants. Un d'ells, es tracta clarament d'una variable, però no és suficient per posar només $ Contador al cos de l'HTML perquè clar si només hi ha entre la seva PHP HTML es suposarà que és només HTML. Vostè, literalment, vol $ comptador que s'imprimirà a la pantalla. Però en comptes de caure en la manera PHP amb aquest tros de sintaxi que dinàmicament es pot inserir un valor aquí molt similars en esperit al que vam fer l'última vegada amb inserir valors en cadenes. De fet, això és només una notació abreujada per dir alguna cosa com això en forma literal, print ($ comptador) o fins i tot alguna cosa com printf (% s, comptador), o fins i tot, com vostè va poder haver vist a Internet o en llibres de text, hi ha una funció en PHP anomenada ressò que fa el mateix, i tots aquests són només formes més prolixes de dir: