SAM Levatich: Benvingut a secció per a aquesta setmana. No sóc Andi. Andi ha caigut malalt el dia d'avui, i jo han estat una espècie de crida d'últim minut per fer-se càrrec de. És la temporada de grip, així que assegureu-vos que vostè són mantenir net, rentar-se les mans, i menjar sa perquè vostè, també, no està postrat al llit. Però sense més preàmbuls, anem a començar. Avui, parlarem sobre PHP una mica bit-- com PHP es refereix a HTML, la forma en què es refereix a CSS, i alguns dels web coses que vas fer en l'última assignació. Anem a parlar una poc sobre SQL i com es pot treballar amb les bases de dades, que és un component clau de la P bastant estableix 8-- P va fixar juliol. P va fixar juliol. I després anem a parlar una mica mica sobre com funcionen els controladors de vista i per què això és una filosofia darrere d'alguns pàgines web modernes i un disseny diferent. Més o menys una gran quantitat de tipus d'aplicacions i les aplicacions que et poden enviar estan utilitzant aquest model, marc regulador de vista, que vostè va a utilitzar a P lloc 7, així que vaig a parlar una mica sobre per què que s'ha convertit popular, per què és important i agradable. I després vaig a fi de passar a alguns consells sobre la lluita contra P fixi juliol. I si tenim temps sobrant al final, realment podem fer alguna cosa treballar en això junts. Així, PHP. De fet, t'hauràs adonat esto-- que realment no ha de submergir-se en it-- però P lloc 6 tingut algun PHP codi que estava passant. I pel fet que PHP és un C-com idioma, PHP, a diferència d'HTML i CSS, és un llenguatge de programació, mentre que HTML i CSS són estàtiques. Són llenguatges de marques que tracten amb l'estil i el disseny visual. PHP és el veritable negoci. PHP té bucles, té conditions-- totes aquestes coses que és divertit sobre C. Té algunes coses que són una mica mica millor que C, que ja veurem, però crec que la forma més fàcil de parlar sobre el PHP és només per a bussejar. Així que em vaig a anar a la dreta en l'IDE en aquest punt. El primer que anem de fer és mirar realment una mica a alguns dels Codi PHP que estava en P va fixar juny. Així que la manera que ho fem que-- abans, la forma en què estàvem corrent el servidor per a l'aparell va ser que hauríem de type-- o bé utilitzar la seva aplicació o implementació del personal de server.c per entrar a directori i corrent server.c amb cap arguments-- de manera que només en diuen a la host local, que és el que, probablement, va fer la major part del temps-- i després alimentant 1 directory-- amb que per utilitzar com la seva arrel on el lloc web faria ser córrer, bàsicament. Aquesta setmana per a P va fixar 7, com gran com el nostre codi de server.c És a dir, hi ha persones que ja tenen escrit aquestes coses fines sobre en CS50 que tenen una mica més funcionalitat, un programa de servidor que és capaç de treballar amb una mica més de de les complexitats que anem a veure tant a P lloc 7 i P lloc 8. I la forma en què s'inicia el servidor és amb només teclejar "apache50." I abans de fer res, vostè vol assegurar-se que que Apache 50 no és ja s'està executant, ja que és en la meva màquina, el que vaig fer per provar-ho. I ho fa cridant apache50. Deixa, i veuràs que està parant el servidor web, si vostè pot mirar allà a la part inferior de la finestra de terminal. I a continuació, només per començar, estem va a cridar, "apache50 començar." I després anem per alimentar un directori. Ara, perquè volem veure a alguns dels P lloc 6 Codi que havíem implementat, en realitat copiat una mica de la P setembre 6 codi en la meva pròpia carpeta, que es pot veure a l'esquerra allà. Es diu "SECCIÓ 8" en lletres majúscules perquè estic tan emocionada per a ser transmès en viu-en l'actualitat. Així que si correm això, ha de tota la feina bastant eficaç. Diu, OK, el nostre lloc és ara disponible a l'adreça de la IDE, bàsicament, que és el que estava fent servir exactament com ho va ser a P estableix 7-- P va fixar juny. Tots els meus índexs són un índex d'avui. Així que podem anar a aquesta direcció, si vostè recordarà, amb només fer clic aquest petit botó a la part superior dreta. I vostè recordarà aquest codi, que va passar quan vas entrar a hello.php. I el que el codi està dissenyat per fer és l'escriure un nom aquí-- si vostè diu Sam perquè aquest és el meu nom-- i faig clic Say Hello, quan ens vam anar a la pàgina següent, Se suposava que el nom que es mostrarà. Es deia: "Hola, Sam" o "Hola," el que sigui que el nom posem en ell tot i que ens vam anar a una nova pàgina web. I aquest és el tipus de coses que PHP pot fer per vostè. PHP és capaç de passar les dades entre dues pàgines web. Aquesta és una pàgina totalment diferent. Veureu el títol és "hola" aquí. En realitat, tenen el mateix títol, però jo prometen són diferents web pàgines si ens fixem en la font. I vostè pot passar les dades que és introduït en aquest camp de text, enviar-lo a la següent pàgina que està sent cridat a files, i després que les dades és capaç de ser-hi en la seva forma actual. Ara encara no hem implementat això nosaltres mateixos, que és el que farem ara mateix per espècie aconseguir un gust de com funciona PHP, però la idea fonamental és que PHP-- puguis espècie de pensar-hi com una funció. Una cosa que PHP pot deixar-te do és que pot prendre paràmetres que l'entrada en una pàgina HTML mitjançant l'ús de PHP i formes, i pot passar com a paràmetres els a la següent pàgina que es carrega cap amunt. En aquest cas, estem carregant aquest pàgina amb el botó de "Say hello". Però, per ara, en realitat eliminat alguns d'aquest codi en el hello.php que estava sent dirigit que va ser realment Veient el "hola, món "o" hola, Sam "o "hola," el que era l'entrada sol. Així que per ara, estem va a fer això, bàsicament. Anem a recrear aquest i També afegir una mica més funcionalitat, fer una mica més amb ella, consulteu el que PHP és realment capaç de fer. Així que primer, anem a parlar de aquest arxiu, hello.php. Així que si ens acostem en un poc bit-- i ara estic espècie de tractar de desplaçar tots el camí around-- allà anem. Veuràs que es diu hello.php, però la sintaxi d'ella s'assembla a un arxiu HTML. Això és perquè el PHP real en aquest arxiu és tot encallat entre aquests interrogació blocs mark-caret. Tot aquí es considera codi PHP. I t'adonaràs que quan vaig fer un comentari, veuràs el familiar de dues barres diagonals. I si vostè recordarà, en HTML, si escric un comentari, es veu una mica més a prop això, que és un comentari en HTML. Així que en realitat tot el que entre aquests dos claus angulars ara és de codi PHP, que es reflecteix en el fet que aquest petit comentari símbol es va convertir en un comentari. Així que cada vegada que escriure codi PHP, fins i tot si no hi ha codi HTML a fora, Sempre serà tancat en aquests claus angulars amb signes d'interrogació. Pot espècie de pensar it-- com tot del codi que corria en els seus programes en C va ser tancat en una principal int, nul·la, claudàtor, extrem declaració claudàtor. I veuràs claus en PHP, també, però això és una espècie de com el principal ús de PHP. Així que ara, com ho fem res en PHP? Ara, PHP és una programació llenguatge que és molt similar a C, però opera a la web. Així que una cosa que podràs immediately-- un sol de les primeres coses que realment va fer amb C se li imprimeix coses, oi? Així que en C el vam fer amb una funció printf. Li vam donar una cadena, probablement amb una nova línia, i després ens vam acabar amb un punt i coma. Així que la forma en què farem això en PHP-- perquè no és prou printf. És una mica de sintaxi diferent. La forma en què imprimim coses en PHP és que diem, "echo hola" o "eco" paraula. I això té l'efecte de fer printf amb una cadena, "hola". I afegeix la nova línia a la mateixa. Així que farem en aquest moment sure-- Vaig a allunyar el zoom de nou una mica bit-- anem a fer de que el codi està treballant perquè pot molt bé d'un error en el codi que haurem d'afrontar. Així que el servidor ja s'està executant. Així que si ens desplacem cap avall fins al fons, yup, el servidor continua funcionant. Així que si simplement fem tapping en aquest poc adequat aquí-- welcome-- hem get-- gran. Seguim tenint la familiar "Saluda" diàleg, però quan escric en "hola", ja veurem que el text "hola" era de fet imprès, que és exactament com que esperàvem degut ressò en PHP és com una declaració printf. Així que de tornada al codi, la forma en P lloc 6 ho van fer el codi de distribució se li proporciona fer-ho de manera que ho faria PHP sortida del que vostè teclejat a la pantalla anterior? I per sort d'examinar per què passa això, estem va entrar en index.html, que és l'arxiu original, l'arxiu que apareix en aquesta pantalla amb el botó "Saluda". T'adones que hi ha totes les coses clàssiques que hem arribat a esperar d'HTML, com ja que aquestes coses, aquestes etiquetes tancades entre parèntesis angulars, com PHP però sense els signes d'interrogació, la qual cosa indica una cosa especial a HTML. Hem títol, que és "hola". I t'adonaràs que, com hem vist, el títol és "hola" en tots dos casos. Anem a canviar aquest "dir" el que només pot distingir-nos on som. Però tenim un cos. I llavors el poc interessant, el bits que apareix en el codi HTML, És aquest element de formulari. I així que tenim un formulari. I aquesta és la clau. Així és com estem treballant amb PHP. El paràmetre d'acció de manera diu que hello.php és el que anem a enviar els valors d'aquesta manera a. Aquí és on estem passant els paràmetres, per així dir-ho. Es donarà compte d'una altra cosa aquí és que el mètode és "arribar". Hi ha dos principals mètodes pels quals serà a utilitzar PHP per passar dades entre les pàgines web websites--, rather-- en aquesta assignació. I aquests mètodes són "get" i "post". Hi ha algunes subtils diferències entre GET i POST que obtindrem into-- ens serà "arribar" a, si es vol. Però per a tots els intents i fins, obtenir i post són a formes que passar paràmetres amb una mica diferents execucions. Per ara, utilitzarem aconseguir perquè aconseguir era el que s'usava originalment a l'arxiu PHP de P lloc 6. I de fet, si anem en i buscar abans que hàgim editat qualsevol altra cosa, Vaig a dir hola A-- ¿com et dius? AUDIÈNCIA: Elliot. Levatich SAM: Oh, Déu meu. No sé com s'escriu això. Podria explicar això per mi? AUDIÈNCIA: E-L-L-Me-O-T. Levatich SAM: Me-O-T? AUDIÈNCIA: Sí. SAM Levatich: Perfecte. D'ACORD. Suposo que ho vaig fer saber com s'escriu això. Em sap greu això. Però si diem "Vaig donar hola," no és no va a aparèixer a la pantalla encara perquè modifiquem el codi una mica. Però si "Say Hello" - OK, així que "hola" és aquí. Però si prenem un cerrador mirar a la pròpia adreça URL, veurem que acaba amb hello.php? name = Elliot. Per tant, aquesta és una manera de comunicar a la següent pàgina web els paràmetres que hem passat. Vam dir name = Elliot. I això és en última instància com P va fixar juny accedit a la variable que vam passar a a través del formulari. I això és una cosa que és peculiar a una petició GET. Una petició get fa que els paràmetres conegut a l'URL de la pàgina web. I vostè recordarà, també, a P lloc 6 que havia d'escriure una funció que es va referir al fet que aquesta cadena de consulta podria existir després d'un arxiu. Podria haver-hi un signe d'interrogació seguit per, bàsicament, qualsevol nombre de caràcters. I això és exactament el que està passant aquí. I la raó per la qual calia analitzar que en la seva implementació de server.c a P setembre 6 és perquè es notava el codi PHP que name = Elliot. Necessitaves poder analitzar que de la URL perquè l'arxiu PHP en qüestió sabia el que estava tractant. Així que espero que això li dóna la motivació per server.c ara que ens estem movent en fora del C en PHP. Així que anem a realment se centren en l'accés a la les coses passen a través d'una petició GET ara en aquest punt. Vaig a guardar aquest. No canviem res. Sembla que tenim un camp d'entrada. Estem establint algunes propietats, com podem fer un HTML. Aquestes són les coses simples. No necessitem aquests. Però tenim autocompletat apagat, que bàsicament says-- ja saps, quan escriu coses a la web, de vegades es tracta d'omplir que per a vostè. Així que és una bona cosa. Volem que apagar per a aquest propòsit. Aquesta va ser una decisió CS50. Així que podem eliminar que si volíem. L'enfocament automàtic simplement pega el cursor en la forma com en el principi. Un cop més, no és massa important. Però name = "nom" - que és una mica difícil perquè el seu nom i el nom. Però podríem haver canviat això a alguna cosa més. I de fet, això és el que farem ara. Anem a dir "persona", que és una cosa així com el nom si una persona es defineix pel seu nom. Així que anem a tancar aquesta, obrir de nou fins al nostre lloc web ja que el nostre servidor encara està en execució Apache 50, i ens diran, hola, aquí està Elliot de nou. Perquè no? Hola. I si anem per aquí, ja veurem llavors en lloc de name = Elliot, diu persona = Elliot. I això és un resultat directe del fet que simplement canviem name = "persona". Així, en un element d'entrada de un formulari HTML, el camp de nom és l'identificador per al paràmetre que està sent passat. És com si crearà una funció "afegir" que es va dur a dos enters i vas dir int a i b int. Això seria un nom, i si volies una altra manera, que que podem fer amb només copiar i enganxar, llavors tindria nom b. Així que ara tindrem dos paràmetres que s'estan passant a través de arribar al següent website-- la següent pàgina web, hello.php. I en realitat podem veure que de nou si volem. Aquesta és la forma més fàcil per fer front a el codi web al IDE, bàsicament. Comences el servidor, ho aconsegueix córrer, i després cada vegada que fer alguns canvis, just a prop aquest arxiu només per estar segur. En prémer el botó de retrocés és una mica difícil perquè podria carregar una anterior versió, no la més actualitzada. I després simplement feu clic al botó de nou, pop up-- dreta oh, i ara hi ha dos formes. I pel que si escrivim una cosa a cada un-- "Hirshhorn jason," per instance-- diem hola. Mirem cap als nostres paràmetres. Sembla que tenim, com era d'esperar, a = jason ib = Hirshhorn, que representa els dos paràmetres que passem a aquesta funció. Així que ara anem a realment arribar a l'aplicació d'aquesta funcionalitat que ens tingut en P lloc 6. Així que en aquest moment només estem fent ressò hola. I això no és molt útil. Volem fer ressò d'alguna variable que es va passar a nosaltres. I sabem el nom d'aquesta variable. Tenim una i hem b. Així que podríem optar per repetir qualsevol d'ells. Però, com accedir-hi? Bé, hi ha certa variables globals en PHP. I jo vaig a escriure en comentaris aquí. Els dos més importants són get i després per als nostres propòsits en aquest moment. Aquestes són les matrius o, Tècnicament, els diccionaris on les nostres variables que estem que passa a la següent pàgina web en directe. I aviat veurem com usar-los. Una altra breu nota sobre el codi PHP i alguns detalls de it-- en C, per declarar una variable o utilitzar variables, que primer calia declarar-los. I el que havia de fer quan van declarar ells era dir int a carbó o b. Vostè va haver de declarar els tipus d'aquests les variables abans que els va crear. PHP-- vostè no ha de fer res d'això. PHP no demana el tipus de variable. I la forma en què vostè crear un lloc variable-- de dir int, char, string-- que és realment char *, ja que sabes-- en lloc de fer tot això, perquè tot és del mateix tipus, sense tipus, podem simplement utilitzar un caràcter, el qual és el signe de dòlar. I veuràs que ja està apareixent dalt, petites coses d'autocompletar. I està dient que _GET i _POST dues opcions que tinc disponible a mi. Algunes d'aquestes altres coses són altres variables globals en PHP que vostè va a utilitzar més de el curs de P fixar juliol. Per ara anem a centrar-se en GET i POST. Però aquest és un útil cosa que l'IDE fa on una vegada que has escrit en aquest signe de dòlar, que va començar a omplir les variables globals o variables que ja han definit. Així que si volia definir una variable anomenada "cadena" vostè podria posar-lo igual a "hola". I és, bàsicament, tan simple com això. I llavors podríem fer una cosa així com "$ string ressò." L'IDE s'ha de llençar algunes errors si estic fent alguna cosa malament, així que espero que estic fent les coses bé. Però els errors sempre es presenten. Una altra cosa difícil sobre PHP és que no està compilat. Així que amb els programes en C, que faria la rutina diària de-- bàsicament, vostè fer canvis a el codi, havia guardar-lo, i després ho faria fan, on era maquillatge el pas que diu el compilador, Clang, per fer que el seu codi, aquest text presentar, en un arxiu executable. PHP és similar a C, però ha executat sobre la marxa del seu navegador web. Així que no hi ha forma de saber-ho. Fer llançaria els errors vots, no? Seria com, vostè no va declarar aquesta variable abans d'intentar usar-lo. Vas fer tot aquest mal segfault stuff--, violació de segment, tot aquest tipus de moments de diversió que van venir amb maquillatge. PHP és una arma de doble tall perquè no aconseguirà aquests errors, però això també vol dir que vostè no sabrà realment el que està malament amb el seu programa si vostè acaba d'executar i no està treballant. Però el depurador d'assenyalar algunes petites coses esperem vots sintàcticament que es pot arreglar. Així que ara si anem més A-- diuen, anem a tancar això. Torneu a obrir. I estem de tornada aquí. Així que tenim una variable i una variable b. I aquests no importa en última instància. Anem als anomenem hi g per cap raó en particular. I diem hola. Ara sembla que la nostra cadena "hola" és de fet la impressió. Creem una variable anomenada "cadena", el va posar igual a "hola". Tingueu en compte que no havíem de fer malloc o fer un arranjament de caràcters. En PHP, ja que les variables són sense tipus, una cadena és la mateixa que per a un char tots els efectes. Això podria ser "hi". Això podria ser només el caràcter k. Aquest pot ser un número 1. I no li importa. PHP no es preocupa per el tipus de la variable. O bé, es preocupa. Es preocupa quan intenta i fer coses amb ell, però no li importa en el pas de la declaració. I igual que es pot en C, pot declarar cadenes a la pila com aquest encara que dir "pila" és una mica nom poc apropiat potencial quan estem parlant de PHP. Però no hem de preocupar-nos per això. Així que ens van donar la nostra cadena "hola", i ens fem ressò de la cadena. Així que ara que hem discutit variables. Així que ara hem de parlar sobre get i publicar i fer l'última cosa que és necessària per aconseguir realment la còpia de seguretat a la funcionalitat de la P lloc 6. Així que ara mateix estem fent-se ressò de la cadena, però no tenen aquestes variables GET i POST. I pel fet que estem utilitzant El mètode GET, que Sembla natural que la nostra variable que ens interessa, tant A com B, s'ubicarà a la matriu o diccionari, tècnicament aconseguir. Així que si establim aconseguir d'aquesta manera amb el seu groups-- premeu ENTRAR i no li agradava it-- però aquí tenim aconseguir. I així que ja existeix. Així que ja podem començar amb l'accés alguns dels elements d'aconseguir. Si nosaltres aconseguim, aquesta sintaxi per matrius en PHP és molt similar a C. Tenim els nostres dos claudàtors. Així que si diem arribar de manera normal array, podríem accedir l'índex d'ordre zero, el primer índex. PHP és l'índex zero. Podríem dir zero, un, coses dos-- com aquest. I he estat dient que aconsegueixen és tècnicament un diccionari. Així que el que PHP està fent sota el capó, que és una mica millor que C, és que ja està donant alguns funcionalitat diccionari, que és realment taules de hash, o intenta, suposadament. O, tècnicament podria ser una oportunitat així. Però PHP està implementant una taula hash, que forma un diccionari eficaç. I pel que sabem el nom de la nostra variable, oi? Es tracta de ser aprovada en la cadena de consulta per PHP. Tenim a = h i b = g on a i b són els noms de les variables. Així que la forma en què podem accedir a la valor que correspon a la tecla en el diccionari és només dir _GET_GET ["a"]. Així que ara tenim _GET ["a"]. I si simplement reemplacem l'interior nostre eco, si ens fem ressò _GET_GET ["a"] - i veurem si el depurador llança qualsevol error del voltant esto-- anem a guardar això i tanquem això. Obre'l. Així que estem fent un dret ara, perquè b no hauria d'importar. "ella" i "ell" - "hum". "ella" i "brunzit". Sona bé. I imprimeix "ella", que és una bogeria. Però això és exactament el que estava succeint en P lloc 6. Bàsicament, el que estableix P 6 va ser doing-- tiro hola, nom-- on va tenir un nom de la variable i que només li demana que escrigui en aquest poc de text. També hi va haver alguna codi addicional en incloïa sentències if, que podem fer en aquest moment. Podem dir, si existeix, que és una funcionalitat dins de PHP, _GET Amb el subratllat, "nom" - que és bàsicament dient: "si el nom ha estat emplenat" perquè podríem haver fet clic al botó per enviar el formulari sense escriure res en aquest camp. I ens emboliquem que en la nostra amistoses entre claus. Podem tenir una declaració més. I això és tot dins l'angle de PHP suport, signe d'interrogació, suport en angle, si es vol. I ara anem a veure si això funciona. Segueixo esperant que la depuració i merda sobre mi, bàsicament, però encara no ho ha fet. Potser ho farà ara perquè jo vaig parlar. SIP. Ho va fer, de fet. Així, res està apareixent. Això es deu a alguna cosa malament que vaig escriure en el codi PHP. I vaig esmentar la depuració és difícil perquè en PHP, que no compilar endavant i el compilador no era com, aquí és on els seus errors són. Però el que podem fer és-- fer la gent recorda com mirar a les diferents xarxes sol·licituds que PHP-- o que els llocs web enviar? [? Malin?] Va fer això en donar una conferència una vegada o dues vegades. Te'n recordes d'on trobarem les diferents deutes i 200 aprova, tots aquests codis que s'estan enviant a través d'HTTP de la pàgina web a la pàgina web? Algú recorda on farem això? AUDIÈNCIA: Pàgina Font. SAM Levatich: origen de la pàgina. Exactament. Si vostè va a la pàgina Source-- perfecte. Així Pàgina Font deté l'inspector. I jo estic fent servir Safari. Molts de vosaltres probablement a utilitzar Chrome o Firefox. Però mentre estàs en qualsevol browser-- moderna i no dubteu a seguir junt, si vols. Pot escriure fins a aquest codi o només cal veure l'interior del conjunt P 6 directori per a algunes coses similars. hello.php és el que estem Actualment treballa en l'emulació. Així que hi ha una varietat de fitxes. Podem mirar a tots els recursos. Podem veure el codi font. Així que sembla que no ho va fer aconseguir el cos passat a la final. Es va trobar un error en PHP i deixat de carregar tota la pàgina web. Ni tan sols tenim un cap etiqueta per HTML ni res. I si ens fixem en la xarxa, podem veiem que estem sent enviat una sol·licitud. Aquest és el domini. Aquesta és l'adreça. És un document. Estem utilitzant el mètode get. I és vermell. O, va ser vermell quan No el selecciona. Com puc eliminar la selecció? Bé, era de color vermell. Permetin-me Actualitza. Aquí està. Ara és el vermell. Així que és de color vermell, el que significa va fracassar, el que és dolent. Així que anem a examinar per què es va deixar. Així que tot el que la font de la pàgina pot bàsicament diuen és el teu no treballem, que ja podem veure. Així que l'ideal no hauria ser una eina més útil. I hi ha algunes extensions del navegador que li permeten depurar PHP, però nosaltres no anem a estar escrivint un munt de PHP, per la qual cosa és probable que només el millor mirar a través del seu codi amb cura i només assegureu-vos que no està fent una altra cosa. Així que anem a veure si el format d'aquest si la declaració és on està el problema. Vull carregar de tornar aquí. Hola Hola. Així que hi ha un problema allà. Així que per la sintaxi correcta de PHP, PHP va sent C-com en què veuràs bucles. Vas a veure si les declaracions. Vas a veure tots aquests amics que t'has convertit en familiaritzats amb en el transcurs d'aquest semestre CS50. Però la millor manera de trobar la manera de fer alguna cosa en PHP és Google que o mirar alguns exemples de codi PHP perquè vostè sap la funcionalitat. Vostè sap el que pugui veure amb el programa. Vostè pot recórrer. Vostè pot bucle tantes vegades com vulguis. Vostè pot recórrer en tota tipus de maneres diferents. Podeu crear funcions. Vostè pot crear funcions que trucar a altres funcions, funcions que diuen a si mateixos. I vostè té noms per a aquests conceptes. Tens recursivitat, loops, si, altres fluxos de control. I pel que Google és el seu millor amic. Fins i tot dir, "si PHP declaració "i que hi haurà ser tones de missatges amb respostes a altres persones que he tingut preguntes similars a vostè, que estan començant a terme amb PHP i tenen curiositat per una cosa sintaxi. Perquè tenim el luxe de ser capaç de mirar el codi a P sèrie 6, que realment tiri cap amunt i veiem que OK, aquí hi ha alguna cosa interessant. Així que això és el que realment semblava a P lloc 6. Així que si passem per això, podem veure que hem té diversos d'aquests petits Bits de signe d'interrogació en PHP similars. I no hi ha claus. Hi ha dos punts. I hi ha arrissat suports en PHP, però això és un format i una forma de fer PHP que funciona bé amb HTML perquè com veurà, estem tancant fora d'aquests PHP bits-- la vigilés i l'IFS i tot això-- i després estem intercalant HTML dins d'ells mentre que encara després de la flux de control establert per PHP. Així que només vaig a ràpid passeig a través d'aquest perquè és una gran part de la mateixa conceptes que estàvem fent abans. Tenim, si no està buit, parèntesi, _GET_GET ["nom"]. Això és tot el mateix. Estem utilitzant el diccionari que _GET PHP envia a petició de les formes, perquè és els paràmetres de acció, i el mètode és aconseguir. I a continuació, que acaba això. El còlon és un significant només fer això si la sentència if s'avalua com a veritable. És com una clau. I de fet, és una clau en altres llenguatges com Python, que pot trobar si només fer això per al seu projecte final. I després aquesta línia, hola. Llavors tenim aquesta cosa rara. Tenim més suports. No hi ha HTTP allà- o PHP, ho sento. Però hi ha un signe igual. I després tenim una funció, htmlspecialchars (_GEThtmlspecialchars (_GET ["name"]). Això és una cosa així com una major versió avançada de l'eco. Com havíem fet com una forma per imprimir coses en PHP. Aquesta és una funció que és es defineix en el qual PHP s'ocuparà d'alguns més desagradable personatges i valors de bytes que podria passar. Sempre és més segur que usar això. Però trobo farà el treball bé si no estem es tracta d'una cosa massa desagradable. I pel que aquest té el mateix efecte que, bàsicament, aquestes coses en el medi la qüestió marques s'avalua per PHP. htmlspecialchars retorna un bonic HTML valor imprès de _GET_GET ["nom"], és a dir, ho hem escrit en el formulari. I llavors va a dir hola, espai de coma, i després d'això. Tota aquesta cosa entre els parèntesis angulars serà reemplaçat pel que sigui htmlspecialchars posa a terme. Així que això és bàsicament similar al que estem fent. I tenim una sentència else que és hola món, cosa que té sentit. Així que ara anem a tornar al nostre codi i veure exactly-- oh. Vaig dir existeix, que no és una cosa que volíem fer. Volíem dir no està buit. I el que aquest ha de treballar una mica mica millor, no _GET_GET buit ["nom"]. I això claudàtor partits que claudàtor. Tenim les nostres claus aquí. trobo hola _GET ["nom"]. Anem a veure si això funciona una mica millor. Estem encara en marxa el nostre servidor. Hola Jason. Hola Jason. I va funcionar aquesta vegada. I això és una prova que pugui de fet utilitzar les claus que conèixer i estimar en codi PHP en HTML. El codi PHP proporcionada a que en conjunt de processadors 6-- pset 6-- proporciona una altra manera de fent la mateixa cosa. Així que ara tenim el poder. Tenim la funcionalitat per implementar el codi PHP que vam veure en el conjunt de processadors juny per nosaltres mateixos, bàsicament. Abans de passar, quins són alguns dels preguntes que vostè té en aquest moment? Sí [inaudible]. AUDIÈNCIA: Llavors, en la versió en pset6, quan s'executa, hi ha un espai. I puc veure que l'espai és després de la coma. [Inaudible] inici el suport obert. Com incorporar l'espai la forma en què va escriure els seus propis codis? ALTAVEU: Aquesta és una bona pregunta. I així anem a donar-se compte d'això. Així que això és una molt bona pregunta i un que no em considero. Però anem a fer-ho junts. Així que en primer lloc, el que Que estic fent amb ressò és quan acabem d'eco hola, emet hola. Si ens fem ressò ara això pujar a un independent línia, anem a examinar el que succeeix. Així fem clic això. Seguim dient hola Jason. Així que de nou, no tenim aquest espai. I és que, en PHP, quan hem fet, no importa quantes spaces-- doncs no, no la V-- no importa quants espais que posem en aquí-- si ara carreguem que de nou, hola Jason. Sí, veure, tots aquells espais van aconseguir devorats. I això és una cosa que la funció d'eco fa. Així que per tenir cura de aquest espai, i això és una de les raons ¿Per què no utilitza el ressò i utilitza htmlspecialchars lloc. Tinc curiositat pel faria passaria si féssim això on adjuntem un espai en una cadena. Sincerament, no estic segur del passarà quan faig això. Així que aquesta és una forma. Aquesta és una manera de tenir cura d'ell. Si embolica l'espai una cadena, llavors l'espai s'emetrà molt bé pel ressò. El més segur és fer htmlspecialchars. Això sempre és l'aposta segura. Però ara tenim una manera de fer- amb ressò en cas necessari. I de manera similar, podem ressò noves línies, tota la classe de coses que vostè està familiaritzat fer-ho en PHP. Qualsevol altra persona, el que són més preguntes que altres persones tenen en aquest punt sobre PHP? Si la gent es va presentar una mica tard, Estic feliç d'estar després d'una mica i parlar d'alguns dels principis. I està també tota livestreamed, i arxivats, que és una bogeria. De totes maneres, així que ara farem alguns més coses avançades amb PHP. I una de les primeres coses que vostè es van introduir al C va ser de bucles. I PHP té un motor més potent per llaç diu el bucle foreach. I sembla que esto-- per a cada espai en blanc com, entre claus en blanc, fer la cosa. Així que això és bàsicament una drecera. Vegeu, el bucle for com una construcció sintàctica va ser ideat en C i en assemblea llengua i coses així. Ideat en C, precisament, com una abreviatura per a molts dels tipus de bucles que la gent vegi. Com quan vostè va escriure un bucle, hi ha era sovint un pas d'inicialització executat des del principi, un condició en la qual el bucle seria stop-- i aquesta és la característica això és només en un bucle while, o que fa temps té exactament només que feature-- i després un pas d'increment a l'extrem. I així que li trobes sovint escriure codi com el següent. Vaig a esborrar una mica d'això. Però si estem iteració a través de personatges d'una matriu, per exemple, de la mateixa manera que hem té una gran varietat de personatges. Ho sentim per portar de tornada C. Ja ho sé, vostè pensava que estava fet. Però és només amb el propòsit d'aprenentatge de PHP, ho prometo. Així que si tens un str carbó de longitud 8, i anem a diuen que diu Hellooo amb un nul final. Gran, així que això és la nostra cadena. I després vam tenir un bucle for. Tenim int i és igual a 0. I volem sortir quan str d'i no és igual a igual a null, perquè vam sortir quan és igual a zero. I després fem i ++ en cada punt en el bucle for. Fer alguna cosa amb str de i. Així la fórmula bàsica era, vam tenir aquesta matriu que volgut tractar com a elements separats. Però el que havíem de fer és que vam haver bàsicament crear un nombre enter separada variable que va anar explicant cada vegada que vam anar a través del bucle. I llavors hauríem de després trucar strstr [i] quan el que realment volia fer és anar personatge pel personatge, no? No volem incrementar la nombre enter i aleshores utilitzar aquest sencer per accedir a cada caràcter individual. Tenim moltes ganes de caràcter per caràcter. I així per a cada un de forma intel·ligent calcula que per a nosaltres. Si tenim una matriu, que podem declarar en PHP com sol-- si tenim una variable flama, anem a dir-matriu. Els miracles de cap tipificació, és de la mateixa manera que qualsevol altra variable. És només una matriu. I tenim una mica de [inaudible] com 1, 2, 3, només una espècie de matriu inicialitzat. Està bé, no li agrada el meu foreach. Però si foreach-- realitat He escrit que una mica malament. Hi ha dues maneres de fer un bucle foreach. Aquí està la sintaxi i el com sintaxi. I nosaltres farem en primera sintaxi, no com. Aquesta és la meva error. Num Així foreach en ordenança, eco num. I PHP està cridant a mi per alguna raó. Es tracta de trobar un inesperat en en alguna cosa, que és una mica d'una molèstia. Però anem a esbrinar per què és això en un moment. Així que no li agrada això. Anem a tractar d'usar el com. Prefereix la sintaxi és com sembla. Així que farem array foreach com num. Així que una mica d'explicació del que acaba de succeir es la com sintaxi es dient-- bé primer, donem una ullada al que aquest imprimeix. Així que vam obrir la nostra IDE. Anem aquí. Diem: Hola Jason. I ho va fer 123, que eren els continguts de la matriu que hem creat fins a la part superior. Així que submergir-se en aquest bucle foreach, tenim una gamma variable anomenada que és un conjunt de tres nombres. I després estem fent foreach matriu com num, eco num. I això és més intuïtiu que una de llop. Estem dient, el tractament de cada un les coses en la matriu com num, Vull que em donis num. I això és exactament el que està fent. PHP és el càlcul que quan dius gamma foreach, i que està tractant amb una matriu, el que vostè va a voler per repetir són els personatges d'aquesta matriu, són els sencers en aquesta matriu, són els elements de la matriu. I és el que li permet emmagatzemar aquelles variables com num, i num continuació, només de sortida immediatament en lloc de dir, Tinc una variable anomenada i, i llavors vull strstr sortida [i]. I perquè ens permet fer coses interessants. Igual que, bàsicament, no tenim per crear aquestes variables com l'i de i fer tot aquestes coses d'increment al final. PHP s'encarrega de tot això per a vostè. Així que ara anem a parlar de foreach com s'aplica al nostre diccionari _GET. Així que anem a comentar aquesta ràpidament. Així que tenim la nostra matriu _GET. Tenim aquesta variable. I té algunes coses en ella. En aquest moment, només tenim una variable es passa a ella, que és nom. Però si prem ENTER, ara podem tenir dues variables. Podem tenir el nom i l'edat, per exemple, si volem obtenir l'edat i també el nom d'una persona, curiosament. Així que ara _GET serà un diccionari amb dos elements, amb dos parells de valors clau. I la primera key-- vaig a escriure aquesta en el tauler també. Tenim el nostre diccionari és _GET. Ho sento, és que és una mica difícil de veure. Però dins del nostre diccionari tenim nomenar, que serà una cosa que se'ns dóna. I tindrem l'edat, que és també serà una cosa que se'ns dóna. I aquesta és la totalitat del nostre diccionari. Així que té dos elements en els mateixos. I així perquè foreach bucles són intel·ligents, que podria pensar, i correcta podria pensar que foreach pot recórrer aquest diccionari, imprimint els valors donats pel seu nom i edat. Així que anem, de fet, ho fan precisament això. Anem a construir un bucle foreach. I farem per _GET com. I farem el següent. Així que anem a veure què passa si teclegem simplement la paraula, i després dir paraula ressò. També anem a fer-se ressò d'una nova línia només perquè sigui una mica més clar, què està passant. Així que anem a veure. No em dóna cap error. I anem a tancar això. A la nostra pàgina web, vas a estar fent molt d'això en el transcurs de pset7. Per això diem que el meu nom és Sam. La meva edat és 45. No és. Però imprimeix, com s'esperava, Sam 45. I així t'adonaràs que el que bucle foreach did-- aquí, tornarem a això pel que toca al board-- obtenim _GET com a paraula. I hi havia quatre coses en _GET. Però només imprimeix dues coses. foreach, sent el seu acte d'intel·ligència, per descomptat que el que realment volíem era dels valors, no les claus. Però hi ha una manera que poguéssim imprimir les claus, així, si volíem. Si volguéssim també saber què es deien aquestes variables, hi ha una manera que pot accedir a aquest també. I la forma d'una espècie de fer això, pel que podem dir, permet en realitat dividir-lo en parells de valors clau. Així que anem a veure què passa ara. Així que tenim la clau. Tenim valor. Tenim un altre nou line per facilitar la lectura. I ja veurem què passa quan fem això ara. No sé l'edat que Jason és. Jason de 15. Així que tenim el nom de Jason, de 15 anys. Així que vam poder accedir a la clau i parells de valors d'aquest diccionari només dir com a punts clau per valorar. I això és una sintàctica foreach poc sucre que permet tenir accés a les coses al diccionari. Així que espero que aquest tipus de emfatitza la potència del bucle foreach. Vostè pot gairebé tir qualsevol cosa que iterable sembla, com tot el que té múltiples elements com una matriu, com un dictionary-- aquests són de dos coses principals que va a treballar amb tant en la vida i en el conjunt de processadors juliol. Així que vostè pot llançar aquest material en ella, i s'adonaran el que vol fer amb ella. Es dirà, OK, vaig a aconseguir aquestes coses de les dades que es va passar a mi. I això és una cosa que vostè és utilitzarà una gran quantitat d'en pset juliol. Vaig a desplaçament ràpid baix només per veure on sóc. ¿Les persones tenen preguntes en aquest moment? Preguntes en absolut? Sí? AUDIÈNCIA: Així que amb la clau i el valor, vostè podria anomenar una altra cosa i no per això deixa treballar? ALTAVEU: Vaya. Wow, estic totalment eliminat tota la línia. Gran obra. Així que una, a. Key i el valor és només una convenció. És útil. Es podria aconseguir una mica de disseny punts, potser alguns punts d'estil per fer això, ja que realment transmet la intenció. Però nosaltres diem una vegada i yarp. AUDIÈNCIA: No ha de canviar res a l'arxiu HTML amb la finalitat de reflectir això? ALTAVEU: No, en absolut. AUDIÈNCIA: I que només sap que causa de la major és igual a no sigui: ALTAVEU: Sí. AUDIÈNCIA: indicador --que que Això és-- ALTAVEU: Sí. Aquesta és una sintaxi foreach, però si. AUDIÈNCIA: No són tipus. Llavors, què si volia edat solament ser un nombre? Hi ha una manera de fer això? ALTAVEU: Hi ha maneres de comprovar si variables que s'ajusten a certs tipus. Així PHP demana una mica més de perquè no hi ha tipus a. Algunes formes en què demana menys. En certa manera, demana més. Perquè si vostè té només alguna cosa en una variable, vostè no té idea de quin tipus és. Però si vostè és intel ligent sobre les variables que s'assigna als tipus i asseguri que funciona només li return-- vull funcions a només retorn un tipus de valor, de manera que pugui bàsicament esperar que la variable de tornar a partir d'una funció serà del tipus que vostè pensa que serà, bàsicament. Però hi ha alguns mètodes pel qual es pot comprovar. No em recordo d'ells la part superior del meu cap. Estic esperant que es torna blau. isint? ISSTR? Hi ha mètodes incorporat en PHP que pot comprovar el tipus de variables per a vostè. Però si assigna les variables intel·ligentment, no ha de haver de fer això massa en pset juliol. Però sí que hi ha aquests mètodes. I això és una cosa que és en el llenguatge mateix. I no recordo la sintaxi precisa. Fins i tot podríem mirar cap amunt. Però el temps és l'essència. Algú més té tenen alguna pregunta més? Sí. AUDIÈNCIA: Tinc només una més. Així que vostè ha esmentat el mètode GET, però No va esmentar el mètode POST. Estem tornant a això? ALTAVEU: Sí, ho farem tornarem a això. Això és exactament el que estava buscant en el meu telèfon, que ara es va quedar adormit, però el trobaré. Només m'assegurava que colpegem totes les notes de PHP. Sí, no hi ha versió de depuració. Sí, tenim un parell de coses més que volem fer ara en aquest punt. Així que parlant de POST, que vostè ha esmentat, l'única diferència entre GET i POST és que recorden quan mirem en aquesta direcció URL i vam veure, oh, és igual a un nom i edat és igual a yarp estan just a la URL aquí per a nosaltres. POST és una mica més reservat amb el seu pas de la informació. Així que si vostè no desitja que un usuari a saber, per exemple, No volia que el nom d'usuari i la contrasenya de la persona actualment connectat a mostrar en la URL, que és una cosa raonable a no voler a la URL, perquè algú pot veure-ho. Si es vinculen a algú a una pàgina, no volen que el seu URL enganxat allà, perquè això seria permetre que la gent entreu només amb el pegat d'una URL en lloc del fet d'emplenar un formulari. POST és una mica més reservat. I l'únic que anem a haver de canviar són aquest mètode, el canvi d'arribar a publicar. I després a l'interior de l'HTTP, en lloc d'accedir a la _GET matriu, anem a accedir al _POST matriu. I ens vam adonar que, si obrim aquest nou una altra vegada, Jason declina lentament en edat. nomenar Jason, de 14 anys. El mateix material apareix. Però anem a la URL i aquestes variables no hi són. I la forma en què la POST passes-- per tal de recordar com mirar a la font d'una pàgina. Ens anem a la xarxa. Ens refresquem. I aquesta és una altra cosa que PAL li donarà advertències sobre. És possible que hagi vist un quadre, un text boxejar com aquest al seu navegador. Esteu segur que voleu per enviar un formulari de nou? POST és el que està enviant aquestes formes. A causa de que, bàsicament, si envia el seu informació de targeta de crèdit a algú, això no va a aparèixer a la URL. Això serà una sol·licitud POST. Així que quan s'actualitza la pàgina, que és tornar a enviar aquesta sol·licitud posterior. Així que ara sí que volem enviar el formar de nou perquè no va per crear les compres duplicades. I ens vam adonar que aquí baix, el mètode que estem utilitzant és POST. I, efectivament, la transferència de bytes. Es transfereix 401 d'ells. De molt petit programa. Però no hi ha cap lloc que podem veure els valors que es passen. Les pàgines web en si poden veure, però nosaltres com a usuaris no som capaços de veure, a menys que siguis un hacker. Si ets un bon hacker, vostè pot mirar. Si coneix el bàsic format de la HTML, els valors faran donar-se a conèixer a les pàgines. Vostè serà capaç de veure. Els valors estaran allà, són només una mica menys obvi per a vostè d'accés, bàsicament. Tenim més preguntes sobre GET, POST abans-- el que farem a continuació en realitat és mirar a una part del codi que s'està donant en el conjunt de processadors 7, parla de la forma en què utilitza alguns d'aquests conceptes, i parlar sobre el les coses que es van a haver de fer una mica de pset juliol. Alguna pregunta més abans d'això? Més preguntes que vostès tenen? Gran. Molt bé, anem a veure una mica al conjunt de processadors 7, sens dubte el que ets tot més entusiasmat. Vull dir, això és una cosa que David passa per una mica. Però anem a tenir tres directoris al la part superior, així com un fitxer de configuració. Això és per a les bases de dades, el que anem a parlar en uns cinc minuts. Inclou, mai es necessita per buscar en aquest directori si no vols, però és bo saben que hi ha tota mena d'ajudants. Ajudants és com funcions útils. I després tenim config, que estableix algunes coses. Hi ha algunes funcions que té CS50 escrit que estan en ajudant i config. I alguns dels que PHP ja surt en els arxius va a fer una gran quantitat de l'espècie més treball de la cama de obtús per a vostè. Igual que si entrem en públic login.php, que és el que mostra a la dreta quan s'entra en pset juliol. Veurem que hi ha això requereix declaració. I això com una mena de aguda inclouen, hashtag incloure si ets d'una generació més recent. Però això, bàsicament, diu que necessito accés a totes les funcions en config.php. I vostè podria tenir una requerir per a tot tipus d'altres coses. config en realitat requereix ajudants. Així que cada vegada que vostè requereix config, vostè és també incloent o que requereixen ajudants també. Així que li dóna accés a tota la funcions interessants que utilitzarem, coses com render. Estic realment va a alleujar això baix un poc. Així la funció llavors estem anar a caminar a través d' just abans de passar a SQL una mica bit és la funció login.php, just ja que utilitza alguns dels temes que acabem de parlar en PHP. Vostè veu la primera cosa és si $ _SERVER. Aquesta és una altra variable global que vostè va a estar tractant. És com _GET i _POST, però el servidor conté està això pot deixar-te saber si el mètode de la petició ser un GET o POST. Igual que anteriorment el que estàvem fent és només en el nostre codi que escrivim, estàvem canviant que sigui GET i PAL depenent del que té l'HTML. Però hi ha pàgines que poden ser visitada amb ambdós tipus de peticions. I és possible que vulgueu fer diferents coses depenent en el tipus de sol·licitud, de la mateixa manera que ho fa d'inici de sessió. Així es pot comprovar que la sol·licitud mètode a través de les tecles amb l'accés, mitjançant l'ús d'una clau i obtenir el valor d'alguna cosa en el diccionari _SERVER. Així que aquesta és una altra mundial variables com _GET i _POST. Si es tracta de GET, volem fer que el formulari d'accés. Render és una funció que, bàsicament, simplement posa l'HTML adequat i el passa alguns paràmetres. Aquest títol és un paràmetre que és utilitzat en la visualització, per estrany que sembli, el títol de la pàgina en qüestió, la cosa aquí, dir o saludar al nostre exemple anterior. Ara tenim una cosa diferent. Perquè si és POST, que fer algunes altres coses. Estem usant aquest mètode buida. No és existeix, està buit. I vam veure abans, PHP té una bona quantitat de construïda en mètodes que David voluntat-- si hi ha són mètodes que són útils per a vostè, seran alertats que al passeig a través que David dóna en la visió general que comença, i també vots trossos de Zamyla. Ella està de tornada cadascú. Tots podem alegrar. demanar disculpes és una funció ben anomenat que, bàsicament, només imprimeix alguns missatges d'error, perquè CS50 és molt educat. I ara això, aquesta és una mica complicat perquè aquest és on estem consultant la base de dades. Ara no hem parlat de les bases de dades. I anem a la propera cinc minuts més o menys, com a màxim. Però aquesta és una funció que CS50 ha escrit per aconseguir una taula, bàsicament, d'una base de dades que estem treballant amb en el conjunt de processadors juliol. Sóc molt dolent amb el meu indexació avui dia zero. Però sí, és 7. Així consulta que va a tornar un matriu, bàsicament és el paletó. I perquè aquestes coses no tenen mecanografia, així files és una matriu de matrius. Perquè quan estem pensant en una taula, què farem és, com vostè va aprendre en conjunts de processadors com el joc de 15, de totes maneres on calia utilitzar una doble matriu, que bàsicament tenen gran varietat d'altres arrays fa una taula. I tens files i columnes. I llavors vostè pot accedir-hi com [0] [1], s'obté la [0] [1]. Coses bàsiques com això. Així que el que estem fent aquí en aquesta funció, estem demanant a la base de dades si l'usuari que és tractar d'iniciar sessió, que serà enviat a través del mètode POST. Ja veurem que estem rebent el nom d'usuari de _POST. Ells t'han enviat, l'usuari o, s'enviarà un valor a través d'un formulari a través de la POST perquè és nom d'usuari i la contrasenya de coses. Estem comprovant el nom d'usuari per veure, ¿és això a la taula? Perquè si un usuari inicia sessió en, a continuació, el seu nom d'usuari ha de ser emmagatzemat en la taula de els usuaris que hi ha per aquest lloc. Així que, bàsicament, si el usuari està a la base de dades, consulta es va a tornar aquesta fila, que és una matriu. Però la part difícil és que si fins i tot si la matriu doble és només una fila, fins i tot si és una fila d'un array-- com si tinguessis basically-- si vostè té una mida d'un array això és la celebració d'una altra matriu, vostè està realment fer front a una columna. Però encara és tractada com una doble matriu. I aquí és on de vegades pot arribar difícil, perquè tenim files aquí. La nostra variable és files. I llavors estem creant una fila nova variable anomenada i s'estableix igual a la primera fila de les files. I t'adonaràs que el comentari diu que és la primera i única fila. Així que aquest és el complicat funcions parcials, on ara pot tornar matrius molt fàcilment. No hi ha mallocs. Vostè no veurà mallocs. Així que vostè no veurà faltes seg. Però les funcions seguiran passant al voltant de les matrius i les dades en grups. I cal anar amb compte amb el que exactament les seves funcions tornaran. I fins i tot si és un columna com aquesta, consultar Encara va a retornar una doble matriu. Així que perquè l'accés o column-- pot pensar en tot això com invertida ja que estem parlant de files. No obstant això, per accedir a aquesta una fila, vostè no pot simplement dir files. Tot i que és una fila, vostè ha de Què rowsrows [0] per eliminar l'espècie d'aquest bit exterior de la matriu i tenir només la seva una fila. Feu una mica d'altres coses. Hi ha una funció anomenada password_verify que verifica la contrasenya que va ser publicada. I després veiem un altre mundial variable d'aquí, _SESSION. Bàsicament identificació de la sessió és la forma de portar un registre de si algú està connectat o no. Així que en aquest moment amb login.php, estem registrar un usuari en. Així que el que volem fer és que volem diuen que l'identificador de sessió és igual a la fila aneu, que només té sentit perquè cada fila tindrà un ID diferent nombre com a part de la taula. Entrarem en SQL en un segon, per la qual cosa si alguna cosa d'això Sembla una mica com bla, llavors tot serà aclarit. Però anem a establir l'id igual a el mateix, registrant l'usuari en. Demanar disculpes si alguna cosa surt malament. I és que els inicis de sessió propòsit en la vida com a professor Malan diria. Així que això va ser login.php. I una gran part del codi PHP que escrius en pset 7, seran una mica. No t'oblidis de chmod a els permisos adequats. Hi haurà una mica sobre que en el principi de l'especificació. Però el PHP que ets escriptura serà fent coses que són similars a aquest. Vostè va a estar accedir a algunes coses que es donen a vostè en la variables globals de PHP que es tracta del corrent usuari connectat, si hi tenen peticions estat enviats a aquesta pàgina, diferents coses com això. I també serà potencialment iteració a través de les files d'aquesta cosa. En una funció diferent, consulta no retorni aquest doble matriu. I si hi ha més d'un files al mateix, si no tracti: si, si hi ha són més d'un files al mateix, llavors serà una taula. I és possible que vulgueu repetir a través de les files d'aquesta matriu utilitzant el bucle foreach que descrivim. Així que si vostè fa foreach en un doble matriu, quin serà el paraula-- aquí, Vaig realitat escric. El escriuré ràpid aquí. Si tenim un foreach de files com fila, quin és el tipus de la fila? Algú sap? Ho tens? Així files és una doble matriu. Llavors, què es va a inferir foreach que nosaltres volem d'aquesta doble matriu si estem iterant sobre ell? Bàsicament Podem suposar que que serà o elements, o files o columnes, bàsicament. I així files i columnes nosaltres pot tractar com la mateixa cosa. Bàsicament el que el bucle foreach va de fer és que va a tornar files. fila serà de la fila tipus, mentre que les files és una doble matriu. Així que si vostè dóna foreach una doble matriu, que és no va a repetir més d'un nivell de profunditat. Que és bàsicament per dir si hi ha són vuit cèl·lules en aquesta table-- 1,2, Març 4, 5, 6, 7, la 8-- bucle foreach no és va a anar a través de cadascuna d'aquestes cèl·lules. El que el bucle foreach farà es va a anar a través d'aquesta fila, donar-li tota aquesta fila. I llavors va a anar a través d'aquesta fila. Per tant, només es itera un nivell de profunditat. Si afegiu un niada bucle foreach, llavors vostè pot tractar cada fila de tornar de files, fan fila foreach com a element, diguem. I llavors es podria repetir l'element. Així que això és una breu petit repàs sobre com vostè podria estar utilitzant foreach bucles en el context de consulta. Hi ha alguna pregunta sobre PHP? Qualsevol cosa abans que passar a parlar de SQL i la diversió de la base de dades? Sentir-se bé? Sentir-se bé. Tot bé. Anem a passar de nou a la PowerPoint, que és probable que es perdi. SQL, yay. Les persones que estan en la meva secció normalment sabrà que subpartides d'acrònims sempre són només les primeres paraules Crec que d'aquest partit que algorithm-- aquesta sigla. No és un algoritme. Així que és una base de dades SQL. És un llenguatge que treballa amb bases de dades. I totes les bases de dades són és taules, almenys en la forma que SQL els representa. Una altra forma de pensar sobre les bases de dades és bases de dades són un conjunt de claus i valors bàsicament. Vostè pot pensar en una base de dades com un diccionari i també com una taula. Bàsicament es tracta d'una manera d'associar diferents dades amb altres dades, sovint a través de files i columnes. I aquesta és la forma això és SQL funciona millor. Així que aquest és un exemple d'una taula. Tinc un parell d'exemples de persones en la meva secció, que No vaig tenir temps de canviar. Però tenim coses com ID, nom, superpotència, i ciutat natal. No sé on qualsevol és en de la meva secció, així que només vaig a assumir tothom és de Nova York Ciutat perquè tinc una alta estadística probabilitat de ser correcta. SQL prendrà automàticament la cura de la columna ID per a vostè. Si s'insereix una nova fila en una base de dades SQL, s'incrementarà que Número d'identificació i just bàsicament s'adhereixen com cinc noms, superpotència, ciutat natal, qualsevol a l'extrem d'aquesta taula. Així ID és una columna que va a mai ha de preocupar. Però, igual que en el cas de login.php, quan estaven rebent l'ID de sessió d'una taula i sols recórrer ID, ID és una manera d'identificar de forma exclusiva un element d'una base de dades. Així que si teníem dos Sams, tots dos que ensenyava CS50, i tots dos dels quals eren de Milwaukee, els faria encara tenen números d'identificació diferents i per tant ser diferent en el context de la taula. Així que això és el que està tractant de SQL amb, treballant amb en l'extrem posterior. I aquests són els quatre comandaments que vostè necessita per treballar amb SQL. I tots ells vaig vomitar en una diapositiva. Però anem a anar a través de tots ells individualment. El primer comanda és UPDATE, el que fa el que es podria esperar. Diguem que tens algunes dades en la taula que està fora de data. Igual que si vostè està mantenint registre de noms de les persones i les edats, si algú augmenta l'edat, llavors vostè va a voler entrar i actualitzar edat només que la persona. Per a un exemple que funciona amb la nostra primera table-- no et preocupis per escriure tots aquestes comandes al mateix temps. Però si tens l'actualització baix, que serà bo per aquesta banda, perquè anem a tornar a la taula. Així que si ens remuntem a la taula, diguem que alguna cosa que va succeir Es va haver un terratrèmol o una línia de falla que divideix directament a través de la ciutat de Nova York. I volíem actualitzar tot el món que vivia a la ciutat de Nova York. Tots ells van haver de mudar-se a Pennsilvània. Això no és un poble d'origen. Tots ells van haver de mudar-se a New Haven. Som-hi. Així que tothom a Nova York es trasllada a New Haven. I això és una cosa que és edició de tres files d'aquesta taula. Però en SQL, pot fer- que en només un comunicat. Així que tornem a actualitzar. Permetin-me ràpida esborrar aquest tauler nou. Quan estem parlant de actualització, hi ha algunes parts de la sintaxi que són clau. Bé, tota la sintaxi és la clau. Però les coses en verd és opcional. Es requereix que el blanc, noms predefinits similars. I el blau clar són les coses que varien en funció de la taula. Així que això és el que està passant amb la combinació de colors aquí, allà dalt. Així que si volem actualitzar només aquests files de les persones que viuen a Nova York, així que el que faríem si ens va dir ACTUALITZACIÓ? Així taula és on posem el nom de la nostra taula. Diguem que el nom de la nostra taula és taula un. Així que volem actualitzar la taula un. I volem definido-- ¿Què és el que volem establir? Doncs volem dir, PHP ho column-- tracta a files com a identificadors únics. I a continuació, són columnes els diferents camps d'aquells elements de la base de dades. Així que el primer element de la base de dades té un nom de Sam, superpotència del CS50, i una ciutat natal de Milwaukee. Així que si aquest conjunt, donem una ullada a els paràmetres de nou aquest conjunt pren. Tenim la columna és igual valor. Per això volem dir que alguns column-- recordar és una field-- volem veure un camp igual a alguna cosa nova. Així que si acabem de dir d'actualització taula 1, nom del conjunt de la igualtat d'Elliot. Obtenir algunes persones de la nova secció en això. Però si acabem de fer taula d'actualització 1 nom del conjunt de la igualtat d'Elliot, ho faria la mirada taula com després d'això? La gent té alguna idea? Sí. AUDIÈNCIA: Tot en aquesta fila es convertiria Elliot. ALTAVEU: Tot a la fila? AUDIÈNCIA: A la primera fila. ALTAVEU: A la primera fila? Per què la primera fila? No em refereixo a ficar-se amb vostè. AUDIÈNCIA: Potser tot en tota la taula? ALTAVEU: Tot en tota la taula, si. I això és exactament correcte que porque-- va ser simplement ajudar a sortir una mica allà- perquè ometem la clàusula opcional WHERE. Si vostè no té el ON clàusula, el que farà aquesta comanda es va a treballar amb cada una sola fila a la taula. El nom de tot el món es convertit Elliott, bàsicament, que Elliot és molt feliç. O Yanni, un dels dos. Però el nom de tot el món canviarà. Així que la forma en que utilitza el ON clause-- i això s'aplica a tots els Where que es troben en cada un aquestes coses diferents. Així t'adonaràs que la SET té columna de valor igual. I el mateix passa amb WHERE. Però aquestes són diferents tipus de declaracions. Així que la columna és igual al valor en SET està en assignació. Igual que estem dient que volem per establir el nom igual a Elliot. Però en les clàusules WHERE, aquests són declaracions d'igualtat. Així que diguem que només volíem canviar el nom de la persona a Elliot si el seu nom era Ryan, diguem. Així que quan diem ON nom és igual a Ryan, que faria èxit únic canvi el nom-- que només ho faria canviar el camp Nom en files on el camp de nom és igual a Ryan. Així que si teníem diverses persones anomenat Ryan, tots els seus noms canviaria a Elliot. Això és similar a l'exemple de si una línia de falla es divideix Ciutat i tothom de Nova York ha de traslladar-se a New Haven, la forma en què podem fer això en una declaració és ACTUALITZACIÓ taula1 SET ciutat natal = New Haven on la ciutat natal és igual a la ciutat de Nova York. Aquest és el poder de la instrucció UPDATE. Podem seleccionar tants files a través d'enunciats vertaders sobre els camps en aquestes files. No podem dir conjunt taula1 ACTUALITZACIÓ name = Elliot ON fila = 1, excepte que puguem si diem ID = 1. Així que estarem treballar amb la igualtat de camps, la igualtat de columnes. Però utilitzant el camp ID és una manera de seleccionar files individuals específicament, perquè el camp ID és una única identificador en una base de dades SQL. Així que, com l'actualització de la fila un, ID és igual a 1. Actualització de la segona fila, just canviar aquest número d'identificació. Però la potència de la ON declaració és que ens pot actualitzar les coses en base al que el seu valors actuals de certes coses. Sí Elliot? AUDIÈNCIA: ¿I què passa si vols A-- de nou, aquesta és una altra qüestió. Però la meva primera pregunta va ser: on passa això? On estic actualitzant això? És això en un codi PHP? ALTAVEU: Quan actualitzes, si. Anem a parlar sobre on tot això succeeix espècie d'una vegada ens anem a través de tots els ordres. Però el que vostè necessita saber per ara és, bàsicament, que la seva base de dades SQL existeix com una cosa per a ser visitada per la consulta funció, que CS50 defineix. Així que si vostè utilitza la funció de consulta, es pot accedir a aquesta taula. Així que va enviar aquests ordres a la seva taula en arxius PHP a través de la funció de consulta. També pot jugar amb la seva taula directament. I aquesta és la millor manera de provar aquest tipus de comandes. I anirem a través de exactament com a veure que en tan sols una mica. Així que això és ordre UPDATE. I la resta dels comandaments seran una mena de similars, treballant en coses similars. El INSERT INTO és probablement el més diferent de UPDATE. Vaig a deixar que fins allà per només una mica i treballar aquí. Així INSERT INTO, veuràs aquesta taula segueix sent el mateix. Vostè vol INSERT INTO. La capitalització, SQL és sensible a majúscules. Així que vostè no ha de capitalitzar aquestes coses. Per convenció, les paraules en blanc es capitalitzen. Però també el color d'ells codificats. L'única raó per la qual a capitalitzar aquells en què vostè els està escrivint s'acaba de posar en relleu que aquells són constants. I pel que pot mirar a la capitalització o el fet que jo els he de diferents colors. Així que tenim INSERT INTO, fem-ho taula1 nou. Això és tot en una línia. Només estic separant per els diferents estats. Així que no es preocupi pel fet que taula1 ho va fer en la segona línia. Així que volem inserir A taula1 alguns valors. I et donaràs compte de l'opcional bits, el que vaig a arribar a en un segon. Així que tenim VALORS. Així que diguem que volem afegir Andi a la nostra taula, perquè ens perdem Andi. Andi està malalt. Així que anem a afegir Andi a la nostra taula. Recordeu que el número d'identificació s'actualitza automàticament. Així que els únics camps que ha de preocupar són nom, superpotència, i ciutat natal. I així, la forma en què ho fem, mirar la nostra sintaxi, és que hem acaba de rebre un parèntesi, amb comes valors separats, cadascun dels quals és un valor. Així que si volíem inserir Andi a la nostra taula, tot el que hem de fer és correcte Andi. Quina és la superpotència d'Andi, persones en la secció d'Andi? Ella, com el vol, o com velocitat, o alguna cosa així. Què és el que ja tenim aquí dalt? Tenim CS50, vol, velocitat i força. AUDIÈNCIA: Viatge en el temps. ALTAVEU: Viatge en el temps, increïble. Així que tenim Andi, el temps viatges, i la seva ciutat natal. Aquesta és una molt bona pregunta. Ciutat de Nova York, llevat que algú ho sap. Tothom és de Nova York és el lliçó per dur a partir d'avui. Així que aquesta declaració seria inserir, com una cinquena fila, amb el viatge en el temps superpotència i una ciutat natal de la ciutat de Nova York. No obstant això, el camp opcional és bàsicament una manera per especificar exactament quines columnes voleu inserir coses. La forma en què ho estem fent ara, Andi, viatges en el temps, la ciutat de Nova York, que està passant en l'ordre exacte de la nostra Nom table--, superpotència, ciutat natal. I si volies fer alguna cosa més que això, com dius que no ho sabia superpotència d'algú, com la forma en què no sabia d'Andi superpotència al principi. Així que tot el que sabia era el seu nom i la seva ciutat natal. El que podria fer és que vaig poder fer-- vaig a esborrar això ràpid. Vull actualitzar únicament les columnes. I aquí és on l'opcional llista de columnes entra en joc. Només vull actualitzar nom i ciutat natal. I després vaig a dir VALORS. Faré Andi i la ciutat de Nova York. Si hagués omès la llista de columnes i acaba de fer aquestes dues coses, on seria la ciutat de Nova York han anat? Què columna faria Nova York Ciutat han estat col·locats en? La gent té alguna idea? Superpotència, exactament. Així que això s'acaba d'anar en ordre. I un cop que arriba al final de la llista, només deixarà d'omplir les coses en. I els valors que em quedo a totes les columnes només serà NULL. Així doncs especifiquem nom i ciutat natal, tindrem ID 5, nomenar Andi, NULL superpotència. Així superpotència és un valor sense inicialitzar. No necessàriament obtenir la mateixos errors Valgrind si intenta i accedir-hi. Tot estarà bé a zero , Perquè NULL és un valor en SQL. Aquesta és una constant. I llavors ciutat natal serà la ciutat de Nova York. Així que aquest és la comanda INSERT INTO. Abans de continuar, hi ha dos comandaments més. ¿Les persones tenen alguna pregunta sobre UPDATE sobre INSERT INTO, sobre SQL en general, abans de passar en els nostres trossets finals? La gent se sent bé, molt bé. M'encanta. Així que anem a parlar de SELECT. Anant ACTUALITZACIÓ rasa per aquí. I SELECT serà molt similar. L'objectiu de SELECT, El propòsit de SELECT en la vida és per donar-li un munt de columnes que satisfan certes condicions. I quan dic satisfer determinades condicions, la seva ment podria immediatament tornar a aquesta clàusula WHERE que va sorgir en UPDATE. I aquesta clàusula és exactament allà a SELECT. Si no posem l'ON clàusula i diem SELECT nom, ciutat natal-- lletrejat que una mica de Nom wrong--, ciutat natal de la Taula1. Si ens limitem a dir que, el SELECT ens va a donar és que és ens va a donar una double-- una taula, en lloc. Una matriu de doble si som pensant en PHP detecta. Però només va a donar-nos una doble gamma de de dos nom columns--, i la ciutat natal. I va ignorar ID. I va ignorar superpotència. I només ens donarà tots els sola fila d'aquesta taula. Així que si ens inserim Andi, tindrem Andi. I tindrem els quatre originals. Si han estat actualitzats, que ho farà reflectir-se, etcètera, etcètera. Així que això es deu al fet que no utilitzar la clàusula WHERE. Però podem utilitzar-la en exactament el mateixa manera que ho fem servir en UPDATE. Si només volem una taula dels noms i súper poders de les persones que viuen a Nova York, es pot executar una instrucció com SELECT nom, superpower-- Jo només vaig a deixar que-- DE taula1 ON ciutat natal = la ciutat de Nova York. Així que això ve a demostrar que es pot aconseguir totalment diferents columnes, i després posar les columnes que no estàs fins i tot tornar a estar a la clàusula WHERE. Ni tan sols volem que el ciutat natal de tots. Però volem que el nom i la la superpotència de la gent la ciutat natal és la ciutat de Nova York. Així que això és una cosa que pot fer amb el ON clàusula és que podem fer front a columnes que no necessàriament volem tornar. De la mateixa manera en l'actualització, podem tractar amb columnes que nosaltres no necessàriament voleu actualitzar. Podem actualitzar la ciutat de tothom el nom és Sam, per exemple. Podem actualitzar la ciutat de tots aquells el número d'identificació és 2. Així que només actualitzar el ciutat de la segona fila on no hem de lluitar amb necessària la pregunta comuna. I ESBORRAR és, com era d' esperar, DELETE FROM taula1. I després tenim una altra clàusula WHERE. Així que podem dir on aneu = 1. Eliminar la primera fila. I ELIMINAR sempre eliminar una fila, o s'elimini algun nombre de files. DELETE FROM taula WHERE Ciutat natal = Nova York eliminarà tot el món a la ciutat de Nova York. Això és si hi havia una plaga tràgica sobtada i que només volia treure tots, des de la taula que viscut en una ciutat que va ser colpejat per la plaga. Que descansin en pau. Aquests són els quatre comandes SQL que haurà d'utilitzar. Ni tan sols pot ser que necessiti utilitzar tots ells. Però aquests són els quatre que CS50 t'espera per sentir-se còmode amb entrar a tant qüestionari 1 i també pset7 i pset8. Només hi ha aquesta taula de nou. En aquest, la superpotència de Roy té ha actualitzat per raigs làser, que és un exemple que no fem servir. No sé quin Roy prefereix, però la força. Roy té una superpotència de força. Katherine no ho fan avui dia. Això és lamentable. Però ella té super velocitat. Bé, això va ser PHP. Abans de parlar de MVC, fa Algú té preguntes sobre PHP? Ara SQL, PHP o si de sobte tens arribar a una pregunta sobre PHP? Gran. Molt bé, està tot a punt llavors. Així que parlar una mica sobre de vista del model controladors, tornem a alguna de les coses en pset7. Llavors, què vista de model controlador és-- No estic va a guardar els meus canvis per iniciar sessió perquè estic totalment massacrat ell. Però bàsicament tenim dos coses separades passant. Tenim un públic directori que conté el codi que serà executat i les pàgines web que es visitaran. I també tenim aquest directori vistes. I vistes conté plantilles. Això és el que la funció render-- vam veure el render funció en un munt de codi PHP que CS50 ja ha escrit per a vostè, que pren en certs paràmetres. El que el codi està fent es va a vistes, que són conjunts d'igual codi HTML escrit prèviament, i s'està inserint valors en certs llocs. Així és com quan vostè entrar en CS50 Finances, la mateixa capçalera és a cada pàgina. El mateix peu de pàgina és en cada pàgina. Això es deu a la forma de fer obres és que va a posar pegats automàticament en aquesta capçalera i visualitzador d'imatges que es poden trobar a les vistes. En realitat podem entrar a la capçalera, i mira, és un arxiu HTML amb un cap. Té unes fulles d'estil. No ha de mirar CSS per pset7 si no vols. Però vostè pot modificar si vostè vol, fan la seva Hisenda es veuen una mica diferent. Té una mica de PHP en la capçalera una mica per veure si hi ha un títol diferent s'ha de posar en aquesta capçalera. Però només alguns altres guions, i enllaços, i altres coses. Cap acaba, el cos comença, i perdó, tenim aquest poc extrem rar. I hi ha un div, igual que una mena sense forma d'element que té una idea del medi. I després, quan veiem a peu de pàgina, tenim el final d'un div. Tenim un fons, que és on el text de peu de pàgina és. Fi de la div, extrem del cos, al final de l'HTML. Llavors, què fer és fent és fer que és una espècie de apedaçar capçalera, 1 diferent arxiu PHP que contindrà les coses reals que podràs veure, igual que la seva taula dels estocs si va a comprar o vendre accions. I llavors va a posar al peu de pàgina. I la vista del model idea és que el controlador voler separar la forma les coses es veuen des del codi. És que volem separar el frontend i el backend, on el frontend és les coses que l'usuari veu, el bon visuals-- HTML, CSS, coses per l'estil, imatges, etcètera. I el backend és PHP. Aquest és el codi que escriviu. Aquí és on el codi que és fer operacions reals. Això és quan es va a afegir una acció a la seva taula, quan vostè està comprant i venda, que és backend. I podem, com vostè va veure, incloent PHP directament en HTML. Així que el que podríem haver fet per aquesta assignació s'acaba de tenir un arxiu HTML per a cada pàgina, com a inici de sessió. I llavors en aquesta pàgina, simplement tingut un enorme bloc de codi PHP, incloent tot el codi que aquesta pàgina en concret necessitaria. I llavors podríem tenir fet que per a la cartera. Podríem haver fet tot de la compra i venda dins de les pàgines individuals. Però com que estem fent separat des d'on estem escrivint el backend codi, podem fàcilment canviar la forma de les coses es veuen sense canviant cada arxiu. Fem coses com simplement afegeix un nou div a la part inferior de-- Hola he modificat el peu de pàgina. Vostè només pot fer coses per l'estil. Però també, pot canviar tot el disseny visual sense afectar el que és anar al backend. I vostè pot canviar el tota backend i encara ha que es vegi igual que ho feia abans. Això És la idea de controlador de vista del model. I en realitat és un paradigma impost en alguns dels llenguatges de programació és possible que vulgueu utilitzar per als projectes finals. Si ho fa el desenvolupament de iOS, tenen punts de vista, que és el que es veu en l'iPhone, i llavors backend com com una cosa separada. Vostè pot pensar una mica. Hi ha un munt de binaris en ciències de la computació, que és divertit, perquè tot és en binari. No pensava això. Això era un joc de paraules intencionat. Sí, joc de paraules no previst. Però igual que els arxius .h i arxius .c, hi ha una gran quantitat de separació de les coses que nosaltres podria no necessitar. Així que només podem editar els arxius H, o algú només pot veure un arxiu .h i saber exactament les funcions que es troben al arxiu .c sense necessàriament saber la seva implementació. Aquesta idea dels components que separen que depenen els uns dels altres però alguna cosa es pot accedir d'una a altra a través de diferents canals, que passa de variables, simplement incloure declaracions, coses així, aquest principi ajuda a crear aplicacions que pot ser més fàcilment editat per diverses persones, es pot canviar més fàcilment o modificat en gran escala, i són més fàcils depurar en molts sentits. Molt ràpid, tinc alguns consells per pset7, que vaig a fer de pantalla completa perquè no només mirar ell-- Tippee punta punta. No hi ha que molts consells. Però he esmentat PHP és difícil de depurar. Doble i triple comprovar-ho. Si el codi no és només aparèixer a la pàgina, és probable que sigui un error de PHP, ho sento. Vostè mai ha de mirar CSS si no vols. Però una vegada que hagi acabat, pot ser una cosa agradable poc divertit per anar a i ficar-se amb els paràmetres d'estil CSS. CSS i HTML són un exemple d'un model cosa també, a la dreta vista d'estil controlador? Vostè podria tenir etiquetes d'estil a l'interior dels elements HTML. Però si una mena de l'externalització a CSS, són més fàcils d'editar, i el joc voltant amb, i divertir-se amb. Tractar CS50 ajudant funciona com caixes negres. Vostè no necessita saber exactament el que està fent render, però confia que fer sempre la dreta cosa depenent del que li passa, coses com aquesta. I jo recomanaria veient tutorial de David, passant per tot el coses, no només els tots, però que realment pot tractar aquestes caixes com negres. No entre en aquestes funcions a la recerca d'errors. I donar la benvinguda al retorn del nostre senyor Zamyla. Gran. Hi ha alguna pregunta abans de finals quin tipus de rebotar per al dia? Estic encara viu? Gran. Persones livestream Hola. Gran. Hi ha més preguntes? No? I llavors crec que estem bo anar per avui. Em quedaré una mica després si la gent tenia preguntes tenien por de preguntar sobre la riera. Però d'altra banda, tenir un bon dia.