[REPRODUCCIÓ DE MÚSICA] DAVID J. Malan: D'acord. Benvingut / a. Això és CS50. Aquest és el final de la setmana 8. I com vostè sap, tenim prou les hores d'oficina en uns pocs dels menjadors, incloent Annenberg. I alguns dels equip de l'amabilitat va prendre algunes fotos últimament. I en honor a Halloween, vam pensar que seria millor compartir un lloc que ens va agafar per sorpresa aquí a Annenberg Saló just l'altra nit. El seu company Jacob va posar per aquesta foto, però era més divertit estava a Facebook, el següent conversa que va passar després. El seu primer missatge en resposta a la seva foto va ser això. Uns minuts més tard, va decidir a un a si mateix amb aquest. Va continuar després anar a aquest, i després, encara més divertida és quan la seva mare va intervenir. I a continuació, en última instància, sembla que això era només un truc meravellós per a una obra de teatre que està passant. Per tant, si voleu a veure a Jacob i els altres, entre ells Cynthia Meng, qui és darrere de les escenes de personal zona CS50, dirigir-se a aquesta adreça URL i aquí aquesta obra. Així que sense més preàmbuls, avui continuar amb aquesta mirada a la programació web, i la creació real dels programes que no s'executen en la seva línia de comandes, però en lloc d'executar-se dins d'un navegador. Presumiblement ara, o molt poc, vas per estar al mig de la implementació el seu propi servidor web, que és diferent de la programació web. El servidor web en pset6 es tracta programari que sap escriure com prendre Peticions HTTP d'un navegador, o fins i tot de vostè, un ésser humà, amb un programa anomenat Telnet, i a continuació, respondre a aquestes peticions, ja sigui per escopir un arxiu HTML, o jpeg, gif o un, o fins i tot un arxiu .php. Però amb un servidor web, no és suposa que només cal obrir un arxiu PHP, cosa que acaba en .php, i després escopir el contingut. Se suposa que ha de fer el que a aquest arxiu per primera vegada? Per dir-ho. No compilar, vam dir dilluns, però rather-- Així, interpretar-lo. PHP és un llenguatge interpretat, i així una de les característiques clau a la seva web servidor, encara que implementat per nosaltres, És aquesta capacitat del servidor web a notar, oh. Aquest fitxer amb l'extensió .php. No em deixis sol enviament a la usuari com si fos contingut estàtic, sinó més aviat m'ho dius a mi llegir línia per línia, d'esquerra a dreta, i d'interpretar-lo. I per fer-ho, que nois faran essencialment punt a un programa en l'aparell, i en molts dels sistemes informàtics, simplement anomenat PHP. Aquest és el nom de la PHP propi intèrpret del llenguatge. Per tant, aquesta peça que implementem per vostè, i el que queda per a vostè, en última instància, és un nombre de peces, entre les quals es està implementant suport per a contingut estàtic. Però ara, i amb problema estableix set, ets va a començar a fer la transició a realment escriure el codi PHP que aconsegueix interpretar en parlar amb un back-end base de dades que emmagatzema la informació. Així que anem a millor entendre primer un parell d'aquests superglobals i només la quantitat d'energia que sortir de la caixa de forma gratuïta amb un llenguatge com PHP. Coses que vostè no té per aplicar a tu mateix. Així, vam veure el dilluns $ _GET, que és un superglobal, que s'acaba de parlar de PHP per a un mundial variable que pot accedir en qualsevol lloc. I el que hi ha dins de $ _GET? Què hi ha dins d'aquest superglobal que veiem? Segurament estadísticament en almenys una persona sap. Què hi ha dins de $ _GET? Sí? AUDIÈNCIA: És les variables es posa en la cadena de consulta. DAVID J. Malan: Perfecte. Són les variables que lloc en la cadena de consulta. Per tant, en el nostre exemple anterior de reimplementar Google quan vam tenir un URL, i després el signe d'interrogació, que demarca el començament d'HTTP paràmetres, llavors vam tenir q igual alguna cosa, com q és igual als gats, el que aniria automàticament dins que $ _GET súper mundial per a vostè, perquè de PHP, és una clau de Q, i de valor dels mateixos dels gats. En altres paraules, $ _GET i tots aquestes coses són matrius associatives, taules hash de classe, que emmagatzemar claus i valors. Ara, de tornada a pset5, el hash taula en la que podria haver aplicat, o el que vostè podria intentar han posat en marxa, de veritat era efectivament un associativa array, una estructura de dades mitjançant el qual es pot associar claus amb valors. Però en pset5, els valors van ser trivial. El valor era essencialment veritables o falses. És la paraula en el diccionari? Així que, quan vostè HASHED una paraula com poma per veure si la poma és al diccionari, la seva funció de comprovació presumiblement retornat vertader o fals. Llavors, això és efectivament el valor que està rebent de tornada. Però vam veure el dilluns breument, que sens dubte pot associar més interessant valors que només vertader o fals amb tecles, com la poma. Vostè podria retornar un cadena arbitrària, i de fet, això és el que $ _GET i aquests altres variables li permeten fer. Així que $ _POST és similar en esperit, però si vostè envia un formulari a través de correus, un mètode HTTP que és diferent usat per a coses com targetes de crèdit, i la informació privada, i fins i tot informació binària com fotos, aquestes coses acaben dins de $ _POST. I en realitat els arxius com jpeg i tot això, fins i tot hi ha un altre que no és aquí anomenat $ _FILES també. Per tant, el servidor no ens aturarem en massa molt, però et dóna accés per ordenar els detalls de baix nivell sobre el mateix servidor que utilitzeu. Galetes i reunió, però, veurem efectivament ara. L'últim és el que utilitzem per implementar la noció d'un carret de la compra. A un super simple, però el record que vam tenir aquest exemple aquí, comptant quantes vegades havia visitat aquesta pàgina abans. Però avui en dia, en lloc de només mirar l'efecte d'això, anem a obrir fins Inspector de Chrome, que en general pot fer fent clic dret o control en fer clic en qualsevol part d'una pàgina web, i després triar inspeccionar element. O vostè pot anar a través dels menús que es descriuen en les especificacions de pset6. I jo vaig a la pestanya Xarxa aquí, i anem a veure per un moment el trànsit HTTP que és anant i venint. Déjame primer anar per davant i esborrar memòria cau de Chrome. Així que alguns de vostès podrien estar familiaritzats amb aquesta tècnica ja, i anem a utilitzar- per a propòsits de depuració aquí. Ara nosaltres, com a equip els científics van a començar fent això per a la depuració fins, amb la qual cosa anem a esborrar la memòria cau, normalment, per la qual cosa pot desfer-se de coses anomenades cookies. Així que és probable que estiguis familiaritzat general amb el que les galetes són, o almenys que hi ha, però el que és la seva comprensió d'ells, com només un usuari de ordinadors, el que és una galeta? Sí. AUDIÈNCIA: És una mica de-- així, no bit en un termini de ciències de la computació. És una peça de dades que un lloc web envia a vostè per tal ser capaç de registrar les estadístiques en vostè. DAVID J. Malan: OK, bé. Així que és una peça de dades que un servidor, posa en el seu ordinador, i anem a generalitzar encara més, és una clau value-- bé, això és cada vegada més precisa. Es tracta d'una peça de informació, una peça de dades, que un servidor és capaç per posar a l'ordinador i molt sovint, el servidor fa això amb la finalitat de recordar qui ets. Així, per exemple, les probabilitats és probablement estàs iniciat la sessió en llocs com Facebook, o Gmail, o altres abans, i que es connecti amb la seva nom d'usuari i contrasenya, i després d'això, per a algun nombre de minuts, hores o fins i tot dies, el servidor recorda que que són, de fet, ha identificat. Ara, com és que realment està succeint? Perquè certament no està tornar a escriure el seu nom d'usuari i contrasenya cada vegada que es desplaça a un pàgina diferent a Facebook. Així resulta que el les galetes són la resposta. Una galeta que es pugui imaginar com, Una cosa així com, una mà digitals segell que vostè pot aconseguir en una diversió parc o un club que en essència Indica que vostè ha estat aquí abans, i que ja ha mostra la seva identificació amb el goril·la, per instància, i que el club o el parc ara ha d'assumir que vostè ja s'han autenticat. Vostè ja ha estat identificat pel mateix. Així que amb això en ment, anem a obrir fins comptador aquí. Déjame anar per davant, que acabo de fer, i esborrar tots els meus galetes. I ara el que faré és mantingui Maj, només per si de cas, i tornar a carregar la pàgina per la força. Shift només vos que no s'emmagatzema a la memòria cau. I aquí hi ha la petició que anava i venia. Així que aquí tenim una sol·licitud, i anem mi el zoom aquí baix, i molt d'això és una espècie de detalls poc interessants per ara que el navegador ha automàticament enviar, però anem a feu clic a Veure Font per veure les capçaleres de primes. I si vostè ha capbussat en pset6 ja, que sens dubte va a reconèixer les coses d'aquesta manera, i potser alguns d'aquestes altres línies aquí, però el que és més interessant per avui si em desplaço cap avall, no a la sol·licitud però a la resposta de la trucada, aquesta línia probablement sembla familiar. Això és una bona cosa quan veus a un 200 OK. Pel que sembla aquest és el data i hora al servidor i hi ha un munt de coses. Oh, això és interessant. Resulta que cada vegada que utilitzi PHP, almenys en aquest servidor, el servidor escup el versió de PHP que utilitzeu. La qual cosa, en realitat, per a la seguretat propòsits, no és una bona cosa. Però, anem a tornar a això en un altre moment, potser. Però ara es tracta de la línia sucosa avui, i vam veure breument alguns d'aquests, Crec que amb això quan ens clavaven al voltant de l'inspector en aquest moment, conjunt galeta és el que està plantant aquesta petita peça d'informació en el seu ordinador. Aquest és un encapçalament HTTP això és efectivament dir-li al seu navegador, Chrome, IE, el que sigui, Hey botiga navegador en l'usuari de disc dur o en la memòria RAM de l'usuari, 1 clau anomenada PHPSESSID, que és una notació abreujada per a l'ID de sessió, i donar-li un valor de 0vlk8t, punt, punt, punt. Una molt llarga pseudo cadena alfanumèrica aleatòria. És només un nombre molt gran, però que està codificat amb lletres i números de manera que la mida de la mateixa pot ser fins i tot més gran que números per si sols. I després, per cert, Path = /, que Només vol dir que la galeta hauria de ser associat amb el totalitat de la pàgina web, no només una específica La pàgina de tot l'assumpte. Així que aquest és el segell que la mà virtual. És com si el servidor, Facebook, o en el nostre cas l'aparell, té 0vlk8t literalment escrit i així successivament, a la mà. Noti el del servidor, no fer-ho és que no és emmagatzemar el meu nom d'usuari, sens dubte no emmagatzemar la contrasenya. En lloc d'això, sembla ser emmagatzemar informació pseudoaleatòria de manera que ningú pot endevinar el que el meu segell a la mà és. A la banda del servidor, Mentrestant, el servidor recordarà, probablement en una base de dades o alguna cosa així, que l'usuari, que en el futur presenta un segell de mà d'0vlk8t, punt, dot, dot, ha de ser associat amb aquesta particular, cistella de la compra, per així dir-ho. En altres paraules, si em vaig ara tornar aquí i tornar a carregar aquesta pàgina, Com sap el servidor que vaig visitar una vegada? O si ho faig de nou, com funciona el servidor Sé que he visitat que dues vegades? Bé, si vaig a aquesta més recent sol·licitud, que ara és la tercera que he enviat en total, compte la meva petició ara. Encara hi ha aquesta sol·licitar fins aquí, mateix com abans, encara hi ha un munt de coses que hem ignorat com abans, però l'últim encapçalat, aquest temps, perquè he estat aquí abans, és una presentació de aquest segell virtual de la mà. Per la qual cosa aquesta línia de galetes aquí, no s'estableix però dos punts de galetes PHPSESSI = 0vlk8t, això és d'automàtic només el meu navegador presentació d'aquest segell a la mà perquè Ara el servidor, tan aviat com se n'adona, ooh, aquesta és punt 0vlk8t usuari, punt, punt, Ara puc recordar que ell o ella és i tornar a associar amb el que l'usuari informació Marcar, i tots que la informació es pot emmagatzemar per vostè, el programador, a $ _SESSION. Així que per ser clars, si obro molt ràpid en gedit aquest arxiu real, counter.php, en el meu directori públic host local com abans, observi que, de fet, Estic en última instància, l'emmagatzematge en $ _SESSION Comillas "comptador" el valor del comptador anterior, que Que rebut d'aquestes línies fins aquí que nosaltres mirat temps passat més un. Així que sota de la capella, això és totes les galetes són. És just el tipus de la tecnologia digital segell a la mà que van i vénen, i, francament, si obre Chrome Inspector en qualsevol lloc web vostè visita avui, amb super alta probabilitat, vostè va a veure potser un, potser mitja dotzena de galetes ser recordat per vostè. I pitjor encara, si els lloc web que està visitant totes tenen anuncis, el qual és certament molt comú avui en dia, i si aquests anuncis estan arribant d'algun partit central, algú com Google o Google, ja que truqui a un dels seus productes o altres proveïdors que vendre anuncis, el que és interessant, i, francament, el que és una mica preocupant, sobre el funcionament d'HTTP, és que si vostè té un anunci encastat en Facebook.com i Google.com, i Harvard.edu, qualsevol nombre de llocs web, per la qual cosa és tal que hi ha un intermediari que està complint fins als anuncis per als tres d'aquests llocs web, resulta que la les galetes són per domini. Així que si vostè té un anunci que ve de la mateixa empresa en diferents llocs web, que l'empresa pot realitzar un seguiment eficaç que vostè és a través de tots els llocs web. Harvard podria no saber vostè visita Facebook. Facebook podria no saber i vostè visita Harvard. Però sigui quin sigui el servei d'anuncis Estan utilitzant si aquest domini és present tant en Harvard.edu web pàgines i pàgines web Facebook.com, aquest home de mitjana segurament sap qui és vostè perquè d'aquestes galetes es comparteixen a través de, o en lloc de, que els anomenats intermediaris. Així que anem a tornar a això en implicacions per a la seguretat dels mateixos, però hi ha una gran quantitat d'informació sent emmagatzemat sobre vostè en qualsevol moment que visitar la majoria de qualsevol pàgina web en internet i el que realment redueix a aquest mecanisme molt simple. ¿Què passa, llavors, si ets molt paranoic i vostè decideix anar a Chrome o IE o el que sigui i desactivar les galetes? El que passa? Sí? Vostè realmente-- que has fet aquest dret? Okay. No, endavant. AUDIÈNCIA: Alguns llocs web no tenen una funció sense ella com Facebook. DAVID J. Malan: Sí! Així que alguns llocs web s'acaba de deixar de treballar. I en la majoria dels llocs web d'aquests dies que fonamentalment es basen en cookies, especialment si han de entreu en, només ho van a trencar. A causa de considerar la alternativa, si el lloc no té manera de recordar qui ets, i, per tant, el seu navegador web no és representa amb cada HTTP sol·licitud d'aquest segell a la mà, efectivament un lloc web com anar de Facebook a haver de li demanarà que connectar-se cada vegada maleït que canviï de pàgina, o feu clic a un enllaç, que No és sens dubte una particularment bona d'usuari experiència. Així que allà, també, és entre les compensacions. Així que sense més preàmbuls, anem a fer per descomptat que amb la programació web, en llenguatges com PHP, vostè pot recordar informació com la que en el problema establert set a l'implementar el seu propi Lloc web d'E * Trade-com amb els de comprar i vendre accions, vostè recordarà exactament el que l'usuari ha comprat i venut i que ell o ella és a través d'aquest període de sessions. Però necessitarem una manera més elegant que el correu electrònic per començar a mantenir la informació al voltant. Dreta? Dilluns, parlem sobre Frosh missatges instantanis i com en la versió un d'aquest lloc web, Fa anys, tot el que vam fer va ser correu electrònic el Proctor qui és a càrrec dels esports intramurs programa, el nom i el gènere, i si són o no són un capità, i el dormitori d'algú que és inscriure en un esport intramural. Així que no és dolent, però ell o ella llavors tenia per recórrer a través del seu correu electrònic, fer un full de càlcul o alguna cosa així que, per mantenir tot organitzat. Així que segurament nosaltres com a programadors pot fer això perquè Proctor. I així entrar en SQL, Structured Query Language, que es va a semblar bastant diferent a banda i C i PHP, i et submergeixis en molt més mans a PHP i establir set problema sinó també de SQL, o SQL, aquest és un llenguatge que que s'utilitza per parlar amb una base de dades. Però el que és una base de dades? Bé vostè pensa en un base de dades, almenys per ara, com acaba de ser com un arxiu d'Excel, o si vostè és un arxiu de nombres d'usuari d'un Mac, o si vostè és una de Google Apps usuari un full de càlcul Google, és efectivament una base de dades, o realment específicament una base de dades relacional. Una base de dades relacional és només cosa que té files i columnes, i vostè pot emmagatzemar qualsevol tipus de informació en aquestes files o columnes. Però el que és bo de SQL, i sobre bases de dades reals, no només fulls de càlcul o Google fulls de càlcul, és que es pot utilitzar un llenguatge per executar realment les consultes per inserir dades, per eliminar les dades, per buscar les dades, fins i tot el més important, i que no han de fer-lo servir bastant manualment com vostè pot ser típicament un Google full de càlcul com aquest. Així que en SQL, hi ha un munt de declaracions o peces fonamentals de funcionalitat incorporada. Hi ha molts més que aquests, però vostè pot anar a una enorme distància amb només saber que aquest llenguatge anomenat SQL té almenys quatre declaracions que vostè pot aprofitar. Eliminar, per a l'eliminació de les dades, Inseriu, per afegir files, Actualització, per canviar files, i Selecció, per tornar a les files i això és precisament el que fa SQL. S'opera per complet en files de manera que en inserir o treure, o actualització, o seleccionar el que ets tornar a estar com un conjunt de resultats de la trucada, com un conjunt de files. Un munt de files d'una taula. Així que de tornada al dia, i encara avui en dia, es pot interactuar amb el base de dades mitjançant una línia d'ordres, però no és particularment divertit d'usar aquesta finestra d'estil en blanc i negre i, de fet executar ordres i ficar al voltant de la base de dades. Una interfície gràfica d'usuari o GUI, és molt més preferible, sens dubte, i pel que l'eina es recomana i preinstal·lat per a vostè en l'aparell es diu phpMyAdmin. És una coincidència total que el nom d'aquesta cosa té PHP en el mateix, només significa que les persones qui va escriure aquest programa ells mateixos escriure en PHP. Però és en última instància sobre l'administració un servidor de base de dades, com un servidor MySQL que vostè pot ser que tingui, com vostè fer, en l'aparell CS50. Així que no hi ha més detall aquí que hem de cuidar el d'avui, però el que és clau és la de l'esquerra banda és una llista de les bases de dades que vostè té en el seu ordinador, en el seu electrodomèstic CS50, o venir projectes finals que et poden tenir a un tercer, una empresa de lloc web o servidor web, que vostè podria estar pagant per l'espai. Així que a l'esquerra és el bases de dades, un dels quals és pset7 que vaig demanar prestat a partir del pròxim pset setmanes, i després a la part superior no noten que hi ha una munt de pestanyes, una de les quals és les bases de dades, SQL, estat, usuaris, exportació i així successivament. Així que vostè pot recórrer un llarg camí només per adonar- que la majoria de la interfície d'usuari està a la columna superior esquerra i en la part superior a l'altura. Llavors, ¿què podem fer realment amb això? Bé, anem a començar la creació d'un bit d'informació de la següent manera. Suposem que el següent és el cas, com serà en pocs dies, vol implementar un lloc web, anomenat CS50 Finances, i aquest lloc web li permet comprar entre cometes i vendre accions. I que va a esbrinar el preu d'aquestes accions, en última instància, com es veurà, parlant amb Yahoo Finance. La qual cosa, meravellosament, té un servei gratuït pel que pot passar en un tauler de cotitzacions com GOOG per a Google, i ho farà donar-li de nou estoc actual de Google preu en el passat pocs minuts com a mínim. Així que anem a utilitzar que, en última instància, fingir per a l'usuari per comprar i vendre real estocs utilitzant diners virtuals, però la primera cosa l'usuari va a veure és aquesta pantalla d'inici de sessió que els demana pel seu nom d'usuari i contrasenya. I així, un dels primers reptes per a vostè a pset7 serà la implementació de la part de darrere base de dades, full de càlcul si es vol, això va a emmagatzemar noms d'usuaris i contrasenyes i en última instància, el que les existències que tenen, i quants, i quants diners tenen, de manera que un munt d'altres coses a altres taules o fulls de càlcul. Així que donem una ullada a com aquesta podria semblar a primera vista. Vaig a tornar a l'aparell i estic va a anar a aquesta URL aquí phpMyAdmin localhost / phpmyadmin i veuràs que em porta a una interfície exactament com ho vam veure en el captura de pantalla, i aquí tenir una base de dades addicional anomenada conferència per avui i m'ho dius a mi anar per davant primera i feu clic a pset7. Em sembla que tenen un parell d'opcions, un per a nova, per a la creació d'una nova taula, i un enllaç als usuaris, que és una taula que ja creat. Llavors, què és una taula? Així que si vostè va utilitzar Excel abans, i si vostè té nombres usats o Google Els fulls de càlcul, que obren una finestra i et donen un munt de files i columnes, però en general tenen fulls de treball al llarg de la part inferior, o pestanyes separades. Vostè pot pensar en cada full de càlcul com una taula de manera que la base de dades, en última instància, és una combinació d'una o més taules, un o més fulls de treball, en el món d'un full de càlcul normal. Així que m'ho dius a mi anar per davant i feu clic en aquest full de treball que premade, anomenats usuaris, àlies Taula de base de dades. I si em desplaço fins aquí, m'ho dius a mi Allunyar una mica, això és el que està dient phpMyAdmin nosaltres és dins d'aquesta taula en aquest moment. És una mica confús al principi mirada perquè la interfície d'usuari no és la cosa més bonica del món, però l'interessant és aquesta part aquí. Identificació, nom d'usuari i hash. Per endavant, i podràs mà això en un problema establert set, et donem un arxiu que conté un super petita taula de base de dades, prestat en realitat de l'edició pirata del problema va fixar dos, dins dels quals hi ha sis files. Un Belinda tota la fins a arribar a un Zamyla, i notar a l'esquerra dels noms d'usuaris són identificadors únics com un, dos, tres, quatre, cinc, sis, nombres enters, i després a la dreta són els hashes. I si, les probabilitats són, vostè no va fer el problema edició pirata informàtic va fixar dos, però un hash és igual que un xifrat contrasenya amb alguns advertiments. I així, el que es veu aquí són les versions xifrades dels sis de les nostres contrasenyes de problema configurar l'edició de dos pirates cibernètics. Ara a l'esquerra és només una mica de matèria GUI, edició d'aquesta fila, copiar aquesta fila, la supressió d'aquesta fila. Però el que és interessant ara és el següent. Puc començar en realitat experimentar amb aquesta taula. Així que si em fos i feu clic al SQL fitxa, em surt aquest quadre de text gran. I aquesta no és la forma en què anem a fer-ho quan en realitat l'escriptura de codi. Per ser clars, phpMyAdmin és només una eina que és deixarà que ens furgar la base de dades i anem a experimentar amb les consultes. Així, per exemple, suposem que Executo exactament això. Select, que és un dels paraules clau que he esmentat abans, estrella, que representa a tots les columnes d'una taula. Pel que la taula? Bé, els usuaris. I avís no és això convenció rar en SQL on realment es fa servir tornar paparres, en general, cotitzacions no individuals i dobles cometes no quan es parla de taules de noms, per la qual cosa la cotització d'esquena és la cosa en la superior esquerra del seu teclat més probable. Així que me n'aniré per davant ara i simplement deixar que sols i desplaceu-vos cap avall i feu clic a Vés, i estem en realitat va a veure el mateix. Acabem d'executar una consulta SQL dient seleccioneu tot estrella de taula anomenat als usuaris, i el que rep és això. En última instància, serem capaços de fer això mateix en codi, però per ara tot el que volia no era veure-la en el meu navegador. Bé anem a fer alguna cosa una mica diferent. Permetin-me tornar a la pestanya SQL, i anem a dir que el que? Zamyla ha perdut tota la seva diners, i per tant és temps per a nosaltres per esborrar ella com un usuari. Ella ja no està en sessió. Així que vaig a dir eliminar de-- així, mantenir la capitalització per coherència, eliminar des d'on els usuaris. I així, podem tenir aquests predicats, o aquests qualificadors, al final de la meva declaració on i com podria eliminar Zamyla? Pel seu nom Zamyla, de manera que el columna, una de les columnes va ser nomenat, per la qual cosa on nom = "Zamyla". I aquí jo ús doble frases o cites individuals, només utilitza la part de darrere, quan les paparres parlant dels noms, per exemple, de taules o camps. I permetin-me feu clic a Vés aquí. I ara, la pàgina web és sent una mica tens. O, el que realment vols per executar delete dels usuaris on nom és igual Zamyla? Sí. Així que ara, si ens remuntem a la meva taula els usuaris fan clic, observi que Hm. Em vaig equivocar. I, de fet, quin tipus de fet clic de distància tan ràpid que ni tan sols veu el missatge d'error de color vermell, potser. Què vaig fer malament? AUDIÈNCIA: No necessita per capitalitzar el seu nom. DAVID J. Malan: Sí jo capitalitzat el seu nom, però la seva username-- realitat jo va fer un parell d'errors, no? Un d'ells, el seu nom d'usuari és zamyla, Z minúscula, i el nom de la columna és nom d'usuari, no el nom, de manera que anem a fer això de nou. Déjame anar per davant i eliminar dels usuaris en la seva nom d'usuari és igual entre cometes "Zamyla". Bé? Així que això es veu una mica millor, anem em vaig desplaceu-vos cap avall i feu clic a Vés. Encara va a cridar per estar segur. Faig clic a Sí, i ara veig, Francament això va succeir, realment ràpid, menys d'una segon, sens dubte, aquesta és exactament la pregunta que va quedar executat. Per confirmar, deixa feu clic a Usuaris i de fet ara Zamyla s'ha anat. Ara anem a fer el contrari. Suposem que vol Gabe registrar-se al lloc web. Quina és la consulta SQL, ¿quina és la comandament que podia escriure per afegir Gabe? Bé, és bastant senzill. Inserir en els usuaris, i ara es posa una mica críptic. He d'especificar, en el servidor, el que els camps que voleu assignar. Realment no m'importa el de Gabe ID nombre, així que vaig a ometre això. Estic en comptes d'anar a dir nom d'usuari, haixix, i després els valors que volen posar no serà Gabe. I llavors la seva haixix, no sé. Així que per ara, vaig a deixar que com un gran per fer. Tornarem a que en el conjunt del problema especificació de com en realitat es fa això. Així notar, de nou, la sintaxi. Inserir en el nom de la taula, a continuació, un llista entre parèntesi dels camps, les columnes que voleu afegir valors a, i després només el mateix ordre exacte d'esquerra a dreta dels valors que voleu afegir, I és només perquè embolicar el text és una mica llarg. Així que ara m'ho dius a mi feu clic a Vés. Insereix una fila. I ara si em vaig de nou a els usuaris, el que és interessant és que no només és Gabe ara al base de dades, el que aparentment és la seva identificació? Bé, és de set. Per què és set anys quan jo no afegir? Així que això, també, és una de les característiques s'obté de la base de dades. Un munt de construït en la funcionalitat. Resulta que quan creat aquesta taula, Jo predeterminat és automàticament assignar una ID de tal manera que s'incrementa. Així que si alguna vegada has furgar, i vist el que tu Facebook ID nombre és, en aquests dies no és realment una cosa que fer, però Facebook com una API, Interfície de programació d'aplicacions, pel que vostè pugui tornar un munt de dades sobre a tu mateix, dels teus amics, i les seves connexions. I el que solia ser amable de fresc, de nou en el dia, va anar a buscar el que el seu Facebook va ser el número d'identificació. Mark Zuckerberg, de, per exemple, és tres ja que va ser l'autor del lloc. I com diu la història, que ell va crear dos comptes de prova, els usuaris d'un i dos, que després s'elimina. I així, Zuck, com és el seu nom d'usuari a Facebook, és ID nombre tres, i tots nosaltres tenim un nombre molt més gran que aquests tres dies. De fet, en algun moment Facebook es va allunyar des fins i tot emprant un int, que és un valor de 32 bits, a la utilització de el següent pas, essencialment un llarg temps pel que que podien acomodar fins i tot més usuaris es registrin. Així que una mica de diversió fet històric. Així que això és només el sintaxi bàsica amb la qual podríem executar un parell de consultes, però en realitat el que puguem fer un munt més coses amb SQL. I veuràs, en última instància, en el conjunt de problemes de set que vostè ha de fer una nombre de decisions de disseny, entre ells serà quins tipus de dades a utilitzar. Així que igual que a C, hi ha dades tipus en una base de dades, com MySQL, i els tipus de dades que han de triar d'aquests camps inclouen aquí. Char, VARCHAR, int, int gran, decimal i de data i hora, i molts altres. Així que anem a fer això realitat. Fem de compte que no ho vam fer mà que la taula d'aquest usuari i m'ho dius a mi seguir endavant i crear, per jo mateix, en les conferències database-- en realitat em va deixar anar endavant i eliminar la taula que tinc aquí ja pel que en realitat podem crear això. Vaja. Vaig a deixar això taula, i ara estic va a anar de nou a la donar una conferència sobre la base de dades aquí, Vaig a crear una taula anomenats usuaris i anem a només fer tres columnes inicialment i feu clic a Vés. Ara, en la seva major part, de nou, això és només l'ús d'aquesta eina gràfica anomenada phpMyAdmin, i el que estem fent ara és la creació d'una taula. Així que això és com anar a Arxiu, Nou, i la creació d'un nou arxiu d'Excel. Així que em demana uns pocs preguntes, d'esquerra a dreta, Quin és el nom de la primera columna, i després el nom de la segona columna, i el nom de la tercera. Així que anem a recrear aquest. Identificació, nom d'usuari i després va ser un, i després de hash era un altre. Llavors, ¿què si el tipus de dades ara per ser un camp com el ID? Aquesta és la llista completa de tipus de dades disponibles per a vostè en una base de dades, i per ara anirem amb int. Valor de 32 bits, no ho faig crec que sóc realista tindrà més de 4 mil millons usuaris al meu compte, en el meu servei, així que vaig a mantenir en moviment a la següent pregunta. Jo no vaig a especificar una longitud o valors, que no és aplicable aquí per un int, per se. I ara puc especificar, pel que sembla, un defecte valor, que no vaig a especificar. A col·lació, no sé el que és això. Un atribut. Ara que realment fem tenir una decisió de disseny. Així que hi ha un parell de camps d'aquí, no tots dels quals són aplicables, però sense signe només significa què? Que l'int ha de ser? Simplement no negatiu. Així que ha de ser 0 en endavant. No, jo no vaig a comprovar perquè Vull que cada usuari tingui una identificació, no pot ser nul. I llavors, arribem a una mica més de interessants decisions de disseny com aquest. Tornarem a això en un moment, però el que una altra de les característiques de la base de dades És a dir, és que es pot dir el servidor de bases de dades que endavant i optimitzar a tu mateix, la teva RAM i espai en disc dur, de manera que selecciona, i s'insereix, i esborra, i les actualitzacions són molt ràpid. Contrast això amb pset5. Si vostè volia buscar alguna cosa en la seva taula hash, que que pensen com una base de dades, que va haver de fer tot el treballar per fer la seva taula hash ràpid. És com, òbviament, vostè. Dreta? Calia posar en tot moment la multa tuning coses, aconseguir una funció hash dret, trobar la manera molts cullerots tinguin. Però el que és bo, de nou, sobre una base de dades és que acaba de Punt tots això a altres persones qui han pensat que això a través de vostè, i el que Jo vaig a dir ací baix índex és que el meu camp ID serà la forma principal de la identificació dels usuaris en aquesta base de dades. No vaig a pensar de Zamyla com Zamyla, Vaig a pensar en ella com el número 6. Per què és, potser, millor intuïtivament a pensar i model cadascuna de les seves files individuals utilitzant un nombre en lloc d'alguna cosa com una corda, com el Zamyla o Gabe o cadena més llarga encara? Sí? AUDIÈNCIA: Un ID és únic? DAVID J. Malan: Digui una altra vegada? AUDIÈNCIA: Un ID és únic? DAVID J. Malan: Un ID és únic, però suppose-- segons sigui el cas en general amb els noms d'usuari, suposem També vaig dir que només pot haver-hi un Zamyla en el món, i només un Gabe. Jo podria imposar la unicitat restricció en les cadenes, també, si volia. Així que no és una mala idea. AUDIÈNCIA: Més segur. DAVID J. Malan: Més segur, per què? AUDIÈNCIA: No pot dir que és que, com en l'usuari. DAVID J. Malan: OK, no es pot saber quin usuari és que el que hi ha una privacitat aspecte a ella, especialment si els ID potser que apareix en les URL. Tan segur, que pogués tipus de treball, també. Altres pensaments? Sí? AUDIÈNCIA: És més fàcil realitzar operacions en un int. DAVID J. Malan: Aquest és el veritable truc. És només més eficient, o més fàcil per a l'equip, per realitzar operacions en un nombre enter. Dreta? Un int està garantit per ser de 32 bits, mentre que Zamyla és un parell de caràcters, Gabriel és una mica més caràcters de longitud, Davenport és molt llarg, i pel que és no és particularment eficient d'usar cordes per comparar valors i busquen per als camps, i els camps d'actualització, si vostè pot aconseguir lluny amb un sol número sencer. A només 32 bits. Així que els noms d'usuari, també, d'aquesta manera, no ha de ser únic, tot i que probablement hauria ser, i fins i tot en aquesta manera també un usuari podria permetre que canviar el seu nom d'usuari. Així que deixarem ara aquesta com la mitjans primaris d'identificar l'usuari. Això li està dient a la base de dades seguir endavant i optimitzar a tu mateix per la qual cosa es veuen ups en I + D són super ràpid. AI, horriblement anomenat, simplement significa Increment automàtic, i aquest és el xec Box nosaltres necessitem comprovar per especificar que el camp ID de s'actualitzarà automàticament per a mi, i després em vaig a desplaçar-se a la dreta aquí i, francament, no estic realment interessat en més d'aquests camps. Certament, avui no. Així que em vaig a tornar aquí, a la primera columna, on He d'especificar nom d'usuari i haixix, i anem a almenys enfocament en el segon per ara. Int probablement no és la decisió correcta, així que el que té més sentit, potser? AUDIÈNCIA: Text. DAVID J. Malan: Digui una altra vegada? AUDIÈNCIA: Text. DAVID J. Malan: Text? OK, jo vaig escoltar text. Quina altra cosa? És com que tenim un munt d'opcions que són textual en la naturalesa. Per això, quan, i per què, fer utilitza alguns d'aquests? Bé char, al contrari del que et poden pensar, no és un sol personatge. És un nombre específic de caràcters. Així que si sabem que tots els noms d'usuari ha de ser com de vuit caràcters, com solia ser comú en la gent gran sistemes informàtics, podria dir Char i llavors jo podria dir 8 aquí. Va ser llavors quan es converteix en la tercera columna aplicable en crear una taula. Però això és una mica molest perquè algunes persones podrien vull tenir un nom d'usuari ja de vuit caràcters, algunes persones podrien voler tenir un nom d'usuari més curt, així que per què comprometre a un nombre específic? Per què no tenir una variable nombre de caràcters i només dir que la longitud màxima d'un nom és, no sé, com 64 caràcters. No puc pensar en cap amics que tenir noms més de 64 caràcters, i fins i tot si això és massa curt poguessis certament topar cap amunt arbitràriament. Així varchar és una variable nombre de caràcters. El text no és un mal instint, i francament quin tipus de fa el que diu, però un camp de text pot ser com 65.000 bytes, com a mínim. Això és una cosa excessiu per a un camp, i de fet, yup, 65.535. Això és una cosa excessiu per a un nom, així que em quedo, en general, amb varchars per Proves camp i haixix, també. Hash, resulta que, podríem fer un varchar tan bé o alguna cosa per l'estil, però no centrarem avui a la criptografia allà i els números perquè puguem realment que vulgui utilitzar per a la seva longitud. Però permetin-me desplaceu-vos cap a baix a la dreta. Només pot tenir una índex principal d'una taula, però és el que vull per aplicar qualsevol d'aquests, ara, a nom d'usuari, què li diries? Quin ha nom d'usuari basar-se en una vaga comprensió d'aquestes quatre opcions? Només pels seus noms? AUDIÈNCIA: Únic. DAVID J. Malan: Tan únic, oi? Així que resulta que no només podria li dius a una base de dades, per endavant, aquesta és la forma primària d'identificar els camps. També es pot dir que això és serà un camp únic. No serà la cosa Confio que, però m'agradaria que la base de dades per essencialment ha de si la condició, per la qual cosa que si alguna vegada vaig intentar donar d'alta dos usuaris amb el mateix nom, la base de dades a tota màquina no em deixarà. Pot ser que tingui una mica de codi addicional en PHP que impedeix tant, però la base de dades, també pot assegurar que això mai passarà. Ara, com un a part, especialment pel que es pensa en els projectes finals, tenir en compte que l'índex i el ple text són en realitat molt útil. Si vostè té una base de dades més gran, no amb desenes, però amb centenars o milers o fins i tot milions de camps, pot També digui a la base de dades amb antelació aquest és un camp que vaig estar buscant en un terreny. Potser el seu nom d'usuari, potser és bio, si estàs fer un lloc web de Facebook-com ha paràgrafs que l'usuari que està permès per estalviar, i si vols dir la base de dades amb antelació Vaig a estar buscant en aquest camp molt, però no és necessàriament únic, pot especificar mi crear un índex. O bé, es pot dir també que em permeti fer tipus de registres arbitraris com Comando o Control F, com tu podria en un processador de textos, per la qual cosa podria buscar cadenes arbitràries o subsèries de caràcters en aquest camp. En altres paraules, estem rebent fins al punt en el semestre on vostè no ha de preocupar sobre com posar en pràctica les coses de manera eficient. Vostè només ha de saber sobre el que les decisions de disseny per a fer de manera que vostè és utilitzant les eines adequades per al el comerç per tal d'aprofitar les característiques que altres persones han construït per a vostè. Així que per recapitular, primària només ha de tenir-ne un, només es pot tenir un, i que és el que vostè està cometent a utilitzant a la identificació de camps de forma única. Steam és similar en esperit, però és possible que només de tant en tant usar-lo, però desitja que la base de dades per a imposar-la. Índex només significa preventivament accelerar les coses en el futur perquè jo pugui buscar les coses en aquest camp. I a continuació, el text complet és generalment per paràgrafs, o assajos, o grans cossos de text en el qual També pot ser que vulgueu comodins com l'equivalent de l'estrella. Dreta. Així que era una mena de molt per tots alhora. Anem a veure si no podem destil·lar un parell d'aquestes característiques i després construir alguna cosa bastant simple, però de gran abast. Així que entre l'altre les decisions de disseny que vostè està en última instància, tindrà és al llarg de les línies de motors d'emmagatzematge. I permetin-me fer esment d'això en previsió de projectes fi de carrera, i l'anticipació de la let de dir-- no farem això. Anem a construir aquest petit primera aplicació. Vaig a entrar en el meu terminal finestra, i aquí no és només counter.php, que ara anem per desfer-se de com ja no pertinent, però tenim un munt de directoris i aquest serà molt similar en esperit al que vostè veurà en el problema creat set. Així que tenim tres directoris inclou pública i les plantilles, que és exactament on ho deixem en Dilluns amb tot el nostre paradigma MVC. I per recapitular, en públic es va a anar qualsevol arxiu que desitja que els usuaris realment v la possibilitat de visitar en el seu navegador a través de la URL. Plantilla. Què hem posat en les plantilles? Quin tipus de coses? No hi havia molt, però un parell arxius, com a mínim dilluns. Sí. AUDIÈNCIA: Capçalera i peu de pàgina? DAVID J. Malan: Capçalera i peu de pàgina. Així que tenim alguna cosa similar avui en dia, també. Tenim uns pocs arxius més però Peu de pàgina Veig, veig Capçalera, i després un munt d'altres arxius. Així que aquest és l'equivalent de la vista V MVC, que, de nou, serà una mica més clar en set de problemes, però això és només una carpeta que sóc posar un munt de la meva estètica. Una gran part de la meva HTML, molts dels meus formes. Mentrestant, inclou, és una altra directori que té aquests tres arxius i anem a fer una ullada ràpida als mateixos. Vaig a seguir endavant i obrir config.php. Com a resultat, gran part com abans en el terme, vostè agut inclòs CS50 dot h amb pset7. En l'exemple d'avui, vas fer que l'equivalent de amb una declaració requerir que efectivament inclou aquestes diverses línies. Així que per ser clars, això és un fitxer anomenat config.php. I noti el que està fent. És aparentment fent alguna cosa que donen tornada en els missatges críptics, d'error de manera que vostè pot veure en el navegador. És, doncs, pel que sembla, que requereix altres dos arxius així que això és com # include en C, i llavors aquest ens vam veure, i nosaltres hem confiat en, aquesta s'encén que la cistella de compres com la funcionalitat. Això significa una voluntat de galetes ser enviat de tornada i tornada. Per què és interessant? Bé, si ens remuntem a aquesta directori i obrir, per exemple, constance.php. Tingueu en compte que PHP fa constants de suport, no és absolutament com #define en C. En el seu lloc, literalment dir definit, i previ avís que ha emmagatzemat amb antelació 04:00 constants en aquest arxiu. Un per a la base de dades d'avui en dia, per la meva contrasenya, pel meu nom d'usuari, i per el nom del servidor. Així que aquests són en realitat serà bastant similar en set de problemes. I finalment, i aquí és on sóc va a aconseguir una mica de funcionalitat agradable des del personal, en functions.php és un paquet de programes que hem escrit, i jo vaig robar una mica d'això del problema estableix set per avui, que fa un munt de coses i anem a veure a un d'ells En particular. Aquesta funció aquí, consulta, serà la funció de PHP que anomenem a fi d'executar SQL. Fa un moment estàvem fent servir phpMyAdmin, però això és només per sort dels propòsits d'aprenentatge i amb fins de diagnòstic i oblidant el seu conjunt de bases de dades. Quan vostè utilitza realment la seva base de dades, vostè, l'ésser humà, són, òbviament, no va per a ser tirant cap amunt d'una web pàgina cada vegada que una persona es registra. Has de redactar codi que insercions i eliminacions usuaris en la demanda, i farem això per mitjà de la funció de consulta. Si ara em desplaço cap avall, hi ha serà una mica més característiques. Redireccionament va a ser una funció que escrivim per a vostè que li permet enviar a l'usuari a una altra URL, i fer que és una funció, que se li sembli vam veure el dilluns, que en realitat fa una plantilla, però més sobre aquests en el forma de mateix passeig de pset7 través. Per ara, anem a seguir endavant i fer això. Deixa anar a la meva taula de conferències i veure que hi ha actualment res aquí encara, i me n'aniré també en el meu directori públic, on hi ha només un arxiu, index.php. Aquest fitxer sembla ser super simple de moment, que s'assembla a això. Molt semblant a la forma en què deixat el dilluns. Estic requerint aquest arxiu, config.php, que està en un directori inclou, que està en punt punt, els meus pares, i llavors és només la representació aquest fitxer. Llavors, què és aquest arxiu? Obrirem a les meves plantilles form.php, i anem a veure això. Súper simple, aparentment aquest formulari és presentarà per un $ _GET o $ _POST. Comprovació de validesa ràpida. Literalment buscar visualment l'arxiu. Mètode és igual lloc. Així que no va a utilitzar l'adreça URL, com Google ho fa, va a ordenar de pell la informació darrere de les escenes i que és va a sotmetre a una arxiu anomenat register.php, i això és l'arxiu encara no hem escrit però què va això perquè sembli és això. Si vaig a una pàgina separada Aquesta és el localhost / index.php s'assembla. I de nou, el servidor de només assumint index.php. Retorn. Així que aquí és on estem a, i el que vull fer és ser capaç d'escriure coses com David, i després el meu número de telèfon, el que va a dir 617-555-1212 per ara, registreu-vos i ara no s'ha trobat register.php. Així que necessito per implementar això. Així que anem a fuet ràpidament alguna cosa com això. Deixa anar al meu directori públic i fer gedit de register.php, i ara vaig a seguir endavant i iniciar la manera PHP, com ho vam fer el dilluns, i l'etiqueta de tancament de PHP, i farem un parell de coses. Així que un, ho sé, des haver escrit aquesta forma, que vull comprovar el següent. Si és buit, el que l'usuari escrit en el camp de nom, a continuació, Vaig a dir alguna cosa com demanar disculpes que falta nom. Demanar disculpes, per la seva banda, és no una cosa construïda en PHP, és una funció que escrivim en functions.php per pset7 perquè vostè tingui accés. Perquè si l'altre camp és buit, nombre, llavors estic va a demanar disculpes a la usuari i digui el nombre que falta. Deseu aquest fitxer. Ara anem a tornar a la meva navegador, tornar al fòrum torni a intentar-ho. Registrar. Okay. No va passar res, la qual cosa és bo. No vaig rebre un missatge d'error. Però si per contra, anem a Recarregar pàgina, i no proporciona res. Maleïda sigui. Fes això. Registrar. Què vaig fer malament? Si és buit, el nom $ _POST. Digui una altra vegada? Oh, és clar. Em vaig oblidar de la part més important, que és requereix ("../ includes / config.php."). Cal disposar d'accés a la funció de demanar disculpes, que És per això que no passava res. La funció en realitat no existeix. Així que anem a intentar-ho de nou. Anem a recarregar la pàgina, feu clic a Registre. Okay. Aquí està. Així, la sortida que estem veient aquí és el resultat de cridar a un disculpar- funció, super senzill, i que només s'imprimeix el que sigui Li dono com a argument. Molt bé, així que anem a cooperar. Anem a proporcionar meu nom com David, registreu-vos, que falta nombre Acceptar let de disposar que, massa. 617-555-1212. Registrar. Okay. Així que tot està bé ara, res interessant està passant. Així que ara farem alguna cosa més interessant succeeixi així. Déjame anar a phpMyAdmin, i anem a en realitat a crear una taula anomenada usuaris, Vaig a donar-li 3 columnes, i em dóna gust crear ID, i després nomenar, i després el nombre, i el camp ID estic deixarà com un int. El camp de nom que vaig a deixar com un VARCHAR, i anem a dir 64, una mica arbitràriament. El número que vaig per fer, saps què? Anem a donar suport als números dels Estats Units aquí, així que vaig a fer alguna cosa com carbó i després 10 caràcters max per un codi d'àrea i després set dígits. I després per aquí, vaig a especificar increment automàtic aquest camp, fer d'això una clau principal, i Vaig a seguir endavant i no revisar qualsevol d'aquestes altres caixes. Així que quan per fi feu clic a Desa, i torno a la meva taula als usuaris, això és el que es veu com si jo Ara feu clic a una estructura nova pestanya. Així que això, que quedi clar, és simplement la manera de phpMyAdmin de dir la seva taula de base de dades té un ID, un nom, i un nombre amb aquestes configuracions particulars i anem a ignorar la resta dels camps hi ha per ara. I ara què és el que vull fer? Així que si em vaig ara a la meva codi font, si tot està bé Vull executar la següent consulta. Inserir en, i puc només diuen els usuaris no fan estrictament necessiten els de tornada paparres si és no és una paraula perillosa com a usuaris. Jo vaig a dir el nom, nombre, i llavors aquí estic no va a codificar la dígits dels valors encara. Vaig a posar dos signes d'interrogació. I això és una convenció en molts idiomes pel que si vostè vol tenir un marcador de posició per a una cadena vostè va a utilitzar la qüestió marques, per raons que anem a tornar a xerrar sobre seguretat, i aquí Vaig a passar en els dos camps de publicar el nom, i després publicar el nombre, i ara desar el fitxer. I ara vaig a baixar aquí és un super simplement dir rendersuccess.php, que serà una altra plantilla. Vaig a crear molt ràpid. Geditsuccess.php i jo només vaig dir èxit H1 en aquest arxiu. Bé. Així que ara, anem a tornar a la navegador, on vaig visitar abans. Seguirem endavant i confirmi que vaig escriure en David, que vaig escriure en un nombre de telèfon, registreu-vos. Maleïda sigui. Què vaig fer malament? Així que estic veient un error aquí, tenir un error en la seva sintaxi SQL. Déjame saltar de nou a gedit, deixo em torno a register.php, i què Deixo de banda que Va ser important l'última vegada? Necessito això. Vols saber que, a banda de havent notat abans, però necessito això. Així que ara anem a tornar, i aquest va ser útil per veure en el navegador i és per això que en el config.php ens escopim errors. Seguirem endavant i tornar a carregar, feu clic a Continua, l'èxit. Així que ara em deixis anar al meu base de dades d'aquí i feu clic a Usuaris, i navegar, i compta ara tenir a David a la meva base de dades aquí. Ara tècnicament aquesta pàgina web és però, no en l'Internet públic, així que no puc tenir una altra persones a posar aquí, però si jo ara volia, per exemple, enviar un missatge de text a mi mateix. Anem a sortir a un membre aquí i veure si això realment funciona. Vaig a seguir endavant i esborrar aquesta fila i anem a difuminamos aquest al vídeo més tard així que no tenim la Internet m'assabento de missatges de text, i ara anem a anar fins al navegador i anirem a fer una conferència i nosaltres escrivim en diferent número aquí, registre, l'èxit. Així que ara, el meu número és presumiblement a la base de dades, i ara la part divertida. Anem a realment utilitzar PHP per fer alguna cosa mitjançant programació, ja sigui des de la comanda línia o d'algun altre lloc, i per ara estic sol mantindrà la senzillesa i jo vaig a anar al meu directori d'aquí i feu el següent. Guió Gedit diguem, anem a cridar text, #! / usuari / bin / env PHP, com vam veure per última vegada. PHP. Ara em faré requerir inclou config.php, tot i que això podria induir un lleuger error. I ara vaig a seguir endavant i dir files, consulta, seleccioneu l'estrella dels usuaris, i ara aquí em faré una tècnica des de l'última vegada per a cada fila com fila. I jo vaig a fer alguna cosa simple. Printf diguem nom és aquest, i el nombre és aquesta, la barra invertida n. I ara vaig a passar a la fila citar nom final de la cita, i el nombre de fila entre cometes, i ara anem a seguir endavant i la finestra de la meva terminal chmod aquest a + x per fer aquest script executable anomenat text. I ara anem a córrer text. OK, així progressar. Una Així que ara que he escrit script de línia de comandes, en un llenguatge anomenat PHP, que, pel fet que requereixen de línia, té accés a tots els de configuració constants que ha especificat. El nom de la base de dades i així successivament. De fet, només per ser clars que això no és una casualitat, m'ho dius a mi anar per davant i registre, molt ràpid, algú més com Rob i li donarà el nombre 555-1212. I ara, si em quedo el guió de nou, observi el poder del que estem fent amb la base de dades. Ara que he vist immediatament el que el dues files estan en la meva base de dades. Així que ara anem a tractar de fer alguna cosa fins i tot més elegant a l'interior de, i aquesta és la part que hem no provat per endavant, de manera que l'última vegada que va fer això les coses van ser horriblement malament, tenim vídeo a aquest efecte. En realitat, sí, divertit a un costat. Així que l'última vegada, en una donar una conferència de la mateixa manera que fa dos anys, decidir, vaig decidir, per ser tot això seria una gran idea per generar dinàmicament els correus electrònics en classe, utilitzant la totalitat de la base de dades CS50 estudiants, que ens havia donat els seus números i les seves companyies de telefonia mòbil que podria recordar de pset0, com raonar, resulta Vaig tenir un petit error en el meu programa i va fer un parell d'errors en 2012, crec. Per la qual cosa, un que tenia per a bucle que va fer exactament aquest tipus de coses, iterar sobre la base de dades, aconseguir un nom de la base de dades, nom de la base de dades, i després en cada iteració del bucle que em va enviar un correu electrònic. Però en lloc d'enviar un correu electrònic, enviat un correu electrònic la primera iteració, i dos missatges de correu electrònic una segona iteració, enviats tres missatges de correu electrònic una segona iteració, que com es pot recordar del nostre discussió de la notació asimptòtica aquest gran O de la dolenta, com n al quadrat és la quantitat de missatges que vaig enviar, però no va ser fins i tot missatges de correu electrònic era missatges de text. I com vostè sap, l'assistència no és super alta cap al final del semestre i així que vaig pensar que seria bonic a el temps per dir: "Per què no és vostè la classe?" En el missatge de text que enviat a tota la classe, i que era graciós d'agradar el 50% de la classe, però l'altre 50%, alguns dels quals espantat, jo vaig enviar increïblement dolces notes apologètiques per al personal demanant disculpes per havent perdut la conferència només aquesta vegada, oi? Així que seria horriblement malament. Així que en aquest esperit, anem a tractar aquest de nou, però només amb el meu número. Per endavant, a functions.php, He escrit aquesta funció aquí. Es diu el text, i presa en tres arguments. Un nombre, un portador, i un missatge. Estic usant una sentència switch, que meravellosament PHP prengui cordes, no només nombres enters, i jo no implementen tot el suport per a això encara, Jo només he fet AT & T i Verizon. Com que resulta que amb aquests transportistes tenen correu electrònic a gateways SMS, pel que en realitat es pot enviar un correu electrònic a una adreça com el nombre de telèfon a vtext.com i si l'usuari no ha bloquejat els missatges, que aniran a través de és un missatge de text. Ara, per fer això, vaig a haver d'afegir un camp molt ràpid a la meva base de dades. Vaig a entrar en la meva estructura, i jo sóc seguirà endavant i afegir un de camp a l'extrem de la taula. Anem feu clic a Vés, i estic va a trucar a aquest portador i per ara em vaig a deixar això com un text de la barra, però podem ser més elegant en el futur. Vaig a anar ràpidament a la meva taula, i jo sóc va a desfer-se de Rob, perquè això és un nombre fals, Vaig a anar a editar aquí i estic canviarà la meva carrera manualment ser Verizon, que és, i ara aquí. Anem a fer una comprovació de validesa ràpida. Anem a obrir la nostra escriptura de text, que són aquestes, portador és% s. Estem fent molt més error la comprovació del que vaig fer el 2012, portador. I ara, me'n vaig a anar per davant i tornar a executar l'script. Okay. Carrier és Verizon, el que significa ara espero que pugui fer precisament això. Correctament aquest any, amb sort, aquí anem. Així que dins d'aquest bucle, estic va a no només tenir aquest printf, Jo també vaig a trucar text i l'ús d'aquesta funció de recuperació va ser que es necessita un nombre, un portador, i un missatge. Així que anem a veure, el nombre va a ser fila entre cometes "nombre" cita fila "portador", fi de la cita i l'últim va ser el missatge. No cargoli fins a aquest any, punt i coma. Okay. Creuem els dits. Anem a veure si això funciona. Molt bé, així. Aquí anem. Anem a desbloquejar el telèfon, creuar els dits, maleïda sigui. Indefinit may-- variables oh espera, espera, espera, molt ràpid. Molt ràpid, molt ràpid. Això és totalment la pena. Permetin-me agafo, deixa agafar, uh-oh. Gràcies, els textos tenen iniciat d'una altra persona. Déjame anar per davant i obrir de veritat ràpid, dropbox.php / electrònic aquí. Espera. Val la pena. Descàrregues. Acceptar, src8m font. Okay. Necessites una línia més aquí. Oh aquí està, és a Frosh Missatges instantanis, és en el registre a les tres. Oh hola, Margo, moltes gràcies. Acceptar, i em faltava aquesta línia aquí. Així que m'ho dius a mi agafar ràpidament aquesta línia de codi, que inclou el correu o biblioteca que jo realment vull fer servir, Vaig a ràpidament tornar a entrar en funcions, Vaig a anar a la part superior d'aquesta presentar i requereixen d'aquest arxiu, així, i ara em vaig a creuar realment el meu dits quan torni a l'ordre script de línia, que està dins de directori de sistema local d'avui. Text Executar. Retorn. Mail. Espera. Espera. Mail. Oh, OK. Aquí anem. Correu aconsegueix nou gestor de correu de PHP. Vaig fer bé? Maleïda sigui. A-- oh, espera, espera, espera. Col·locar-se. T'ho prometo, això és serà tan digne d'ell. Direcció. És per això que jo no faig la exemples dreta abans de la classe. Ugh. Els següents destinataris han fallat. Intentarem una última cosa. SMTP fixar de, afegir l'adreça, la direcció és de fet això. Anem a provar aquesta última part en la direcció. Aw, estic molt trist en aquest moment. Gràcies. Però realment estima tot els textos que han estat enviant. Tens aquesta David. Vostè està bufant. Deixem-ho aquí i arreglarem dilluns. Ens veiem llavors. Daven FARNHAM: I ara Profund Pensaments d'Daven Farnham. Si un arbre binari cau en un bosc i no hi ha ningú al voltant per a C it-- [Rient].