[Powered by Google Translate] [Setmana 8, continuació]
[David J. Malan] [Harvard University]
[Aquesta és CS50.] [CS50.TV]
>> Això és CS50, de manera que aquest és el final de la setmana 8 aquí.
Nosaltres, per descomptat, tenia una mica d'un huracà a principis d'aquesta setmana,
de manera que ara és realment només tu i jo en aquesta sala de conferències,
però avui en dia continuem la nostra conversa sobre PHP
i sobre la programació web en general, i també introduir la idea
de bases de dades, especialment un anomenat MySQL, que és molt popular en aquests dies,
en gran part a causa de la seva escalabilitat, així com per la seva ser lliure i de codi obert.
>> Però primer, una mirada a on el deixem l'última vegada.
Recordem que estàvem buscant en els diversos exemples Frosh missatges instantanis,
i aquesta era la manera horrible en què va ocórrer amb uns 15 + anys
amb la finalitat que els estudiants al campus de registre per als esports intramurs de primer any
sense haver de caminar més pel pati a Wigglesworth
la caiguda d'una peça física de paper sota la porta una mica de Proctor.
En el seu lloc ens vam traslladar tot en línia, però per això és necessari fer un ús
d'unes poques tecnologies, de manera que un, necessitàvem HTML, HyperText Markup Language,
que al seu torn és aquest llenguatge de marcat amb la qual fer pàgines web estructuralment.
>> Amb una mica de CSS en aquests dies, els fulls d'estil en cascada,
en què puguem utilitzar estilitzacions de la pàgina web utilitzant una sintaxi lleugerament diferent,
mentre que l'HTML és tot sobre l'estructura del mateix.
També hem d'introduir un llenguatge de programació web.
En aquest cas, utilitzarem PHP, PHP i ens permetrà
al contingut de la sortida de forma dinàmica, així com fer les coses com programàtiques
l'enviament de correus electrònics, com va ser el cas en la nota que va deixar la setmana passada.
>> Recordem que el codi per això va ser en 2 parts.
Un d'ells, vam tenir froshims3.php,
i això va ser en gran mesura el marcat amb un formulari HTML dins d'ella,
una mica de CSS aquí en els atributs d'estil
de manera que la forma en si es centra en la pàgina, però més enllà
vam tenir alguns insums forma representativa, un camp de text, una casella de verificació,
Alguns botons de ràdio, un selecte menú i un botó submit.
I a través d'aquest formulari, ens va presentar a un arxiu que es diu pel que sembla register3.php,
que al seu torn es veia una mica d'alguna cosa com això.
Ara, la major part del codi en register3.php, recordar, tractava de correu electrònic.
Ho va fer una mica de la validació de la manera que es va presentar per assegurar-se que
que els camps van ser realment que s'esperava.
Després fem una crida a algunes funcions de PHP usant una mica nova sintaxi,
tot i que està pres de C.
>> Aquest operador de fletxa ens permet fer ús d'alguna cosa que es diu programació orientada a objectes.
No entrarem en això en detall aquí, però sabem per ara
que és una manera de tenir funcions associades amb els objectes,
que són un tipus especial d'estructura, com vam veure en C.
Però per ara, només té fe que aquesta és la sintaxi correcta per utilitzar
quan s'utilitza una biblioteca com aquesta biblioteca PHPMailer.
I després, al final d'aquest arxiu que havíem generat dinàmicament un correu electrònic
que va ser enviat al meu compte jharvard@cs50.net
del meu compte jharvard@cs50.net,
i ens van informar a l'usuari en conseqüència que s'havien registrat per aquest esport.
Això és més o menys el que el lloc Frosh IMS va fer fa tants anys
quan la munta, és cert, en un idioma diferent,
però potser et mostra el poder que té
ara que vostè pot expressar-se no només mitjançant programació
a un nivell baix en un llenguatge com C, però a un nivell molt més alt
amb aquestes aplicacions en el món molt reals com el correu electrònic per resoldre realment
alguns dels problemes del món real.
>> Ara, és clar, encara que jo faig servir aquest script per generar algun
correus electrònics de forma dinàmica jharvard@cs50.net, que és en realitat un compte
que tinc accés, siguis molt acurat en enviar
Missatges només dels comptes que estan en realitat el seu compte,
no fos cas que les coses que et donen en una mica d'aigua calenta a la vida.
Dit això, anem ara la transició a la solució d'un problema totalment diferent,
la dels estats de retenció.
Ara, què significa això realment?
HTTP, el protocol de transferència d'hipertext,
en realitat és un protocol sense estat, i el que això significa és que
quan acabes d'arribar alguna cosa com Google.com i després prem enter
en general el seu navegador té algun tipus d'icona volador que després
resulta en alguna pàgina web que la descàrrega,
i tan bon punt petita icona deixa de girar, i que en realitat suggereix
HTTP que ha completat algun tipus de connexió amb el servidor i ja està.
HTTP és l'estat en el sentit que no manté
una connexió permanent amb el servidor de la mateixa manera que ho fa Skype
o Gchat fa perquè amb HTTP
el cas és que una vegada que va anar a buscar una pàgina web que ja està.
>> Ara bé, en la realitat aquests dies en llocs com Facebook i Google Maps
i Twitter i similars hi ha molt més dinamisme pel qual
fins i tot després que la icona deixa de girar pot de fet tenir més actualitzacions
des del servidor, més tweets, més actualitzacions d'estat a Facebook i similars.
Però fins i tot això està utilitzant una tècnica que parlarem en una setmana o dues
coneguda com Ajax usant un llenguatge anomenat JavaScript
però al final de la dia, HTTP és encara sense estat.
I no obstant això, si vostè vol recordar alguna manera les coses sobre un usuari
fins i tot després d'haver desconnectat del servidor
PHP fa permetre que un mitjà de fer això
perquè, com vam veure per última vegada, PHP té una sèrie de superglobales,
i un superglobal és, de nou, una variable global especial
que és lliurat a vostè pel servidor web i PHP per si mateix.
>> No ha de fer res per posar els valors en ella,
i entre les superglobales que hem vist fins ara són GET i POST,
que és on es col · loquen els camps de formulari de forma automàtica,
així com un parell d'altres que no hem vist encara.
Dins de $ _SERVER algunes variables especials relacionades amb el propi servidor.
Quina és l'adreça IP, quin protocol, HTTP o HTTPS vas usar,
quin mètode vas usar sol · licitud i similars, de manera que hi ha alguns interessants,
sucosos detalls sobre el servidor, i de fet, l'usuari així com a allà.
Hi ha $ _COOKIE, que és on aquestes coses anomenades cookies s'emmagatzemen.
No anem a dedicar temps a si mateixes galetes avui,
però sabem per ara que una galeta és una petita peça d'informació
que un servidor web es pot plantar en un navegador web
i al seu torn la seva memòria RAM o el disc dur del seu ordinador
per emmagatzemar informació sobre un usuari, per exemple, nom d'usuari
de manera que no hagi de escriure-cada vegada que inicien sessió en o alguns
nombre únic o identificador per aquest usuari
de manera que vostè no ha de molestar amb el mateix tipus de preguntes sobre
preferències en el futur, però la majoria dels interessos
en aquests moments és de $ _SESSION.
>> Aquesta superglobal, que, com els altres, es lliura de forma automàtica per PHP
quan escrius llocs web basats en PHP
pot emmagatzemar el que vulguis, cadenes, enters,
punts flotants, valors, matrius, objectes,
Realment qualsevol cosa que desitgi, i li permet emmagatzemar de forma
que fins i tot si l'usuari el visita de tant en tant
torna un minut a partir d'ara o 5 minuts a partir d'ara, perquè
es prenen el seu temps abans de prémer algun altre enllaç
PHP s'assegurarà que el que poses en aquesta sessió superglobal
minuts o 5 minuts fa encara estarà allà quan torni l'usuari.
I sota la caputxa aquesta superglobal sigui implementada a través de
aquestes coses anomenades galetes, però per ara, és només una abstracció
per la qual cosa és una espècie d'equivalent programàtic d'un carret de compres.
El que vostè, el programador, ja que en
matriu associativa superglobal hi serà cert nombre de minuts més tard
fins que l'elimini, o fins que l'usuari surt del seu navegador complet.
>> Fem una ullada a un exemple de com això s'utilitza realment.
En counter.php entre peces actuals de codi
tenim la següent línia.
A l'inici d'aquest arxiu tenim un munt d'observacions blaus, que són poc interessants per ara.
No obstant això, en la línia 13 tenim una nova línia,
session_start, i que en realitat fa exactament el que diu.
S'inicia sessions.
Permet utilitzar aquesta gran superglobal $ _SESSION, i és tan simple com això.
Ara bé, si es procedeix a observar la línia 16, intentarem esbrinar el que aquesta pàgina web es farà.
If (isset ($ _SESSION ["comptador"]) i després seguir endavant
i guardar a la variable de comptador, comptador minúscules,
$ _SESSION ["Comptador"].
Això sembla que es declara una variable local anomenada comptador
dins dels quals es tracta de posar una còpia de tot el que està dins de la superglobal
anomenat període de sessions a la ubicació "comptador".
Si no, pel que sembla, aquest petit taulell variable local, s'inicialitza a 0.
>> Però llavors, unes línies més endavant en el 26 avís que còpia de la sessió de taulell,
seva clau, té un valor assignat nou que és el seu valor actual més 1.
En resum, aquest arxiu sembla estar actualitzant
un comptador que està emmagatzemat a l'interior de la superglobal sessió
en un increment d'1, però primer conserva una còpia del valor anterior
emmagatzemant en una variable local anomenada $ taulell,
i llavors aquí veurem el que queda.
Resulta que és més o menys només HTML.
A la part inferior d'aquesta pàgina podem veure en la línia 37 que he visitat aquest lloc
nombre del comptador de temps, així que hi ha un parell de característiques interessants.
Un d'ells, es tracta clarament d'una variable, però no és suficient per posar només
$ Contador al cos de l'HTML perquè clar
si només hi ha entre la seva PHP HTML es suposarà que és només HTML.
Vostè, literalment, vol $ comptador que s'imprimirà a la pantalla.
>> Però en comptes de caure en la manera PHP
amb aquest tros de sintaxi que dinàmicament es pot inserir un valor aquí
molt similars en esperit al que vam fer l'última vegada amb
inserir valors en cadenes.
De fet, això és només una notació abreujada per dir alguna cosa com això en forma literal,
print ($ comptador) o fins i tot alguna cosa com printf (% s, comptador),
o fins i tot, com vostè va poder haver vist a Internet o en llibres de text,
hi ha una funció en PHP anomenada ressò
que fa el mateix, i tots aquests són només formes més prolixes
de dir: <? =.
En aquest cas un que no és necessari posar
el PHP paraula després del signe d'interrogació.
Aquesta és la notació abreujada per, de nou, el que acabem de veure fa un moment
que es fa ressò d'algun valor.
>> Anem a veure el que el resultat final d'això és en realitat.
Permetin-me repassar en el nostre fitxer counter.php,
i anem a veure que David va cometre un error en jugar amb el codi allà.
Anem a arreglar el que sigui que la pota,
i l'error sembla ser-hi, anat, en la línia 37.
D'acord amb la part superior d'aquesta pàgina que ha visitat aquest lloc 0 vegades.
Bé, seguirem endavant, ara i en la part superior del navegador, feu clic al
tornar a carregar icona, i feu clic a recarregar,
i ara he visitat el lloc 1 vegada, 2, 3, 4, 5, 6, 7, 8.
I de fet, si ens fixem en la font d'aquesta pàgina el codi font actual està canviant,
i notarà l'absència total de PHP, i això és perquè
Codi PHP s'avalua o interpretats del costat del servidor,
i pel que significa que la sortida de la seqüència de comandaments PHP és el que en última instància s'envia al navegador,
que en aquest cas és un HTML crua i alguns caràcters en brut.
Què està passant aquí?
>> Bé, amb relativament poques línies de codi que sóc capaç d'emmagatzemar
persistentment en el transcurs de diversos segons, o si esperar prou,
minuts, fins i tot hores, un valor d'una manera que fa HTTP
sembla amb estat com si ja haguéssim retingut
aquesta connexió amb el servidor, i és només recordar el que li vaig dir l'última vegada,
però en realitat hi ha un munt de complexitat passant sota la caputxa
participació de les galetes que permetin PHP per donar-me aquesta il · lusió
de la cistella de la compra-com a característica.
Per ara, un exemple trivial, on només estem emmagatzemant un nombre enter,
però aquesta característica tornarà a ser de gran valor
quan vam començar a parlar sobre els projectes més complexos,
entre ells Problema 7.
Aquesta és el teu problema últim lloc en CS50.
Ho sé, és molt trist, però el que trobarà és que anem a concloure
aquesta part del semestre per fet la transició
a partir del context de C certament per al context de PHP
però durant l'ús d'alguns dels fonaments mateixos
hem parlat fa algun temps.
>> L'objectiu conjunt de processadors amb 7 és implementar CS50 Finances,
que és la seva pròpia versió de Yahoo Finance o Google Finance
o fins i tot Etrade.com pel que vostè té la capacitat de
consultar preus de les accions dels símbols donats, però encara més que això
vostè té la possibilitat de "comprar" i "vendre" accions
que es negocien en les borses de valors diferents, perquè com aquesta teva pàgina d'inici
aquí suggereix, que és realment la mesura que hem començat
el conjunt de problemes per a vostè, vostè té un formulari d'accés que està demanant un nom d'usuari i una contrasenya.
Disposa d'un botó d'enviament, però a partir de llavors, a mesura que el temps ho veuràs,
no hi ha res que realment està passant sota la caputxa encara, ja que
queda per implementar la possibilitat de registrar nous usuaris,
la possibilitat de comprar accions, la venda d'accions,
mirar realment els preus actuals de les accions.
>> I de fet, aquesta serà com a món real com sigui possible perquè vam
incloure una mica de codi que li permetrà amb una sola funció
per consultar Yahoo Finances, que meravellosament posa a disposició de les dades lliures
per buscar preus de les accions basades en el símbol de l'acció o símbol ticker,
i obté novament el preu actual de les accions del dia.
Les dades que en realitat estàs veient en aquest conjunt de processadors en particular serà
sobre com el món real, ja que es pot obtenir de manera que en realitat estàs interfície
amb les accions del món real, els preus del món real,
i anem a veure quants diners vostè pot fer potser
llarg dels següents dies de jugar amb el seu conjunt propi problema.
>> Però primer anem a establir les bases per a la forma de dissenyar una cosa que és certament més complicat
que counter.php, que és més complicat que qualsevol dels exemples Frosh IMS fins ara,
i tractarem d'introduir uns pocs paradigmes aquí que ens permeten
tant per al conjunt de processadors 7 i potser per al seu projecte final, si vostè fa alguna cosa basat web
per mantenir el seu codi ben organitzat, per mantenir-se sa,
i fer un pas cap a la col · laboració, ja sigui en el projecte final CS50
o més enllà de si continua programar alguna cosa en el futur.
Hi ha un paradigma de disseny en general
en la informàtica i en el desenvolupament de programari en general, més
conegut com MVC, model vista controlador,
i això és un acrònim que descriu una tonta idea molt bonica,
que és la separació dels diferents aspectes d'un programa,
específicament mantenir separada la lògica o la lògica empresarial d'un lloc web
de manera que tot el que implica coses com
trucar a les funcions i consultar bases de dades i similars
no succeeix entre l'HTML
sinó més aviat en arxius separats i, de fet, hi ha un arxiu d'un
típicament que vostè ha anomenat el controlador
això és realment el cervell darrere de l'operació, i anem a veure un exemple
d'això en un moment.
>> Hi ha un model que està programant codi
que fa parlar a les seves bases de dades, que es refereix a Yahoo Finance i similars,
i després hi ha la V en MVC, les vistes,
totes les coses que està relacionat amb l'estètica, els arxius que en realitat contenen
el codi HTML, CSS potser tu i similars.
La idea, com suggereix aquesta imatge, és que el controlador
és l'arxiu, com aviat veurem com es veurà en particular pset 7,
que el món parla a través dels seus navegadors web.
Aquest és l'arxiu que es van visitar a l'Internet públic,
però el controlador parla potencialment un model,
que és un o més d'altres arxius que contenen codi relacionada amb dades,
codi relacionat amb bases de dades i similars, i llavors es parla
el controlador d'un o més arxius d'altres coneguts com a punts de vista,
que són l'estètica d'una pàgina web, plantilles de classes,
que podria prendre algunes dades com a entrada, però al final de la dia
l'única lògica dins d'una vista ha de ser la representació de les dades,
iteració en un bucle i realment escopint una mica de
Basat en HTML interpretació d'aquest o fins i tot una mena PDF.
>> El millor de MVC és que vostè pot tenir diferents punts de vista
basant-se en el tipus de dispositiu, basant-se en el tipus de format d'arxiu que en realitat
volem mostrar a l'usuari.
Fem una ullada a alguns exemples cada vegada més complexos i ben dissenyat
començant primer amb la versió 0 aquí.
Deixin-me seguir endavant i obrir en el nostre directori MVC avui
un arxiu anomenat index.php al directori de 0.
Tingueu en compte aquest és un lloc molt simples i molt decebedor
que és una espècie de versió 0 de una pàgina d'inici per CS50,
i observi com tenim un enllaç a conferències, comptem amb un enllaç a Syllabus,
i si segueix l'enllaç a l'avís Lectures que la direcció URL
sobre de la tapa canviarà a lectures.php.
Si seguiu l'enllaç a la Setmana 1 avís que els canvis d'URL a week1.php.
Sembla que hi ha una estructura jeràrquica bastant simple aquí.
>> Anem a fer una ullada sota el capó com això es presenta,
i de fet, si miro index.php és bastant simple.
De fet, tot i que es diu a aquesta imatge PHP no hi ha codi de programació real.
Hi ha un comentari que he escrit en PHP aquí només perquè l'usuari no arriba a veure-ho.
Per descomptat, com abans, tot el que hi ha entre les etiquetes PHP
s'interpreta, fins i tot si es tracta d'un comentari, i per interpretar un comentari
significa simplement llençar-la al final del dia i en realitat no
enviar-lo al navegador, de manera que tot aquí és només estètica.
Si obro de manera similar lectures.php això també és només un arxiu codificat dur.
Li passa a anomenar alguna cosa així. Php,
però el que realment és just. html, i week1.php, week2.php
igualment són només marcat, així que hi ha un munt d'inconvenients d'aquest disseny.
Un, que és una quantitat enorme de copiar / enganxar.
Tot i que l'únic que canvia entre aquests arxius és la llista desordenada,
les etiquetes li, que no obstant això tenen el tipus doc, html, head,
títol, el cos de tancament, HTML i més
a cada arxiu, el que significa que si mai vol reestructurar
aquesta pàgina web o restylize el que he d'entrar i canviar
tots aquests arxius manualment o amb una mica de recerca i reemplaçament massiu.
>> Anem a fer un pas cap a un disseny més elegant, més temps pensant en la versió 1 aquí
de manera que segons la lectura que m'ho he inclòs perquè pugui jugar juntament amb
aquests més tranquil · lament a casa avís que tenim aquí
un resum dels arxius en la versió 1 d'aquest lloc,
i sembla que he pres sobre mi mateix per excloure
un codi comú, header.php i footer.php.
Bé, donem una ullada al que hi ha dins de la primera.
Header.php sembla familiar,
notar, d'on es talli?
Just després de la línia 19, així que això és tot el que era comú
des del index.php arxius, lectures.php,
semana1 i week2.php de l'exemple anterior.
El que vaig fer va ser copiar i tallar tot el que era comú a tots els arxius,
posar-lo en un arxiu de capçalera per separat i de manera similar a footer.php
es va aplicar el mateix principi pel qual les úniques línies interessants
en footer.php són aquests dos cossos, propera i estreta HTML.
>> Però el que això significa és que en la nova versió
de notificació index.php quant més simple que pugui aconseguir.
Per descomptat, una mica més críptic buscant, una mica menys intuïtiu
per seguir a dalt a baix, però el meu Déu, tot això ha desaparegut ara redundància.
Cal d'una funció de PHP anomenada literalment requerir fins a dalt,
que recorda molt, record, de C # include mecanisme.
Requerim header.php a la part superior.
Es requereix footer.php a la part inferior, i l'única cosa que és diferent
o especial quant a aquest fitxer és el contingut que està destinat a ser únic per a ella.
Doncs, jo entrar a, diguem, lectures.php, el mateix principi s'aplica.
Un cop més, alguns comentaris a la part alta, però després em exigeixen, requereixen encapçalat peu de pàgina,
i en el medi és només el contingut que ha canviat realment.
I si ens fixem en la Setmana 1 i Setmana 2 veuríem
que el mateix principi s'havia aplicat allà.
Bé, no estem molt fet allà.
>> Anem a fer una ullada a la versió 2, que té una estructura similar,
però noto ara que he introduït alguna cosa més.
En la línia 10 que he introduït helpers.php,
que aparentment conté funcions auxiliars.
Una funció auxiliar és generalment una funció relativament curt
que s'escriu per ajudar-lo en diversos llocs,
i anem a veure el que hi ha dins de helpers.php.
En aquest cas, sembla que té 2 funcions.
Recordeu que a l'altre dia amb el nostre exemple de la galleda
pot definir les seves pròpies funcions en PHP, i el que he fet ara és que he
funcions definides per l'anomenat peu de pàgina i fer rendir capçalera,
la primera de les quals té un paràmetre anomenat dades,
el valor predeterminat és una matriu buida, com es suggereix allà,
i que en realitat pot escriure això encara més succinta en l'última versió de PHP
dient claudàtor obert, tancat claudàtor.
Això significa que una matriu buida de mida 0, però no obstant això una matriu.
>> Aquesta funció extracte és una mica especial en què
el que fa és que pren com a argument una matriu associativa
que té 0 o més parells de valors clau, i si té una clau de foo
i un valor de la barra de la funció d'extracció
crea una situació en què ara, a partir de la línia 11,
té una variable local anomenada $ foo el valor és bar.
I si tinguessis més claus i valors en la matriu de dades,
De la mateixa manera que es pot extreure en l'àmbit local
o el nom d'espai de manera que footer.php i
la mateixa idea aquí sota perquè header.php
tenen accés a aquestes variables.
De fet, obrirem de nou header.php
i cridar l'atenció ara el que sembla en aquesta versió.
>> En lloc de codificar dur CS50 com títol per a cada pàgina
observar el dinamisme que és possible ara.
En la línia 5 que estic repetint una variable title,
però primer em vaig a passar aquesta variable títol a una funció anomenada htmlspecialchars.
Un nom estúpid per a una funció, sempre que ho és, però el que realment fa el que diu.
S'assegura que tots els caràcters especials
en la cadena que es passa en els caràcters d'escapament HTML.
Això és en realitat una forma d'evitar el que es diu un cross site scripting atac
pel qual algú pot maliciosa o accidental
injectar el seu propi codi HTML al seu lloc web
perquè colpeja alguna manera, per exemple,
cosa que no s'esperava bastant, sobretot el codi JavaScript,
com parlarem en una setmana o dues de temps.
>> Això header.php ara, és una visió
en el sentit que permet veure estèticament el contingut d'un conjunt de dades.
Però més específicament, és una plantilla.
Aquesta és una espècie de model del que ara volem que l'encapçalament de cada pàgina perquè sembli,
però hi ha una mica de dinamisme en què volem que el títol que s'insereixen dinàmicament
sobre la base de la variable de títol
que s'extreu quan diem, de nou,
la funció del cap de render.
Ara bé, si ens fixem en peu de render, hi ha realment no serveix de molt d'això en aquest moment
perquè en footer.php no hi ha dinamisme en absolut.
No pot ser, però de moment es tracta d'una llista codificada dur de 2 etiquetes,
però la mateixa idea s'aplica, de manera que en realitat suggereix per què
vam perdre el temps amb una capçalera i una funció render render peu de pàgina?
Deixa anar al seu lloc, ara a la versió 3,
i en la versió 3 d'ajudants que em vaig decidir a simplificar encara més.
>> Deixa tenir una funció de representació.
Deixa haver de prendre un altre argument, aquesta vegada anomenat plantilla,
que està destinat a ser el nom d'una plantilla,
i després vaig a concatenar amb presumpció. php al valor d'aquesta variable,
i després, si és que existeix, o Bar.php foo.php header.php i footer.php,
llavors jo seguiré endavant i extreure les dades variables
i després requerir aquest camí.
En altres paraules, per utilitzar això ara, si obro index.php
adonar que jo no en dic encapçalat rendeixen més.
Acabo de trucar a retre, però em passa un valor de cotització de la capçalera
per deixar en clar que la plantilla que en realitat vol carregar.
>> Llavors aquí adonar del que estic fent.
Estic de pas en una dinàmica clau del títol,
un valor de CS50, i això també, com vam veure abans,
podria ser més breu en l'última versió de PHP
on puc reemplaçar la funció de matriu amb claudàtors,
que proposo és encara més fàcil de llegir i, certament,
una mica més fàcil d'escriure.
I, per descomptat, amb l'anomenada render peu de pàgina a la part inferior,
no ens preocupem passant un segon argument en absolut, cap conjunt associatiu,
perquè no hi ha res dins d'aquesta dinàmica peu de pàgina.
Són només algunes etiquetes de tancament per a HTML.
Bé, estem fent passos cap realment netejant les coses aquí,
però m'ho dius a mi obrir dos últims exemples.
Aquest, número 4, observi que he pres una decisió conscient ara
per millorar l'exemple anterior finalment utilitzant alguna jerarquia per als meus arxius.
>> Noteu que en aquest resum, en aquest llegir-me, m'he introduït
inclou un directori i un directori de plantilles
els continguts seran les coses que voleu incloure
i les plantilles que vull fer, respectivament.
Això és realment ser jo anal i tractant de mantenir les coses ordenades,
mantenir els arxius relacionats entre si, però el resultat final
és que ara té una configuració una mica més ordenat, però hem de recordar ara
a, per exemple, index.php
quan es requereix l'arxiu helpers.php
tenim que ara ho requereixin a través includes / helpers.php
en comptes de dir helpers.php perquè ara és realitat en un subdirectori.
Ara, en un apart, podràs veure en aquests exemples i alguns altres
funcions com requereixen, requereixen una vegada.
De fet, hi ha una funció es va cridar inclouen, i tots ells tenen un comportament lleugerament diferent.
Aquí em diuen necessitar un cop per fer súper clar que jo només vull que aquells
ajudants inclòs en el meu projecte un cop.
Però si sóc acurat i si realment estic pensant en la meva lògica correctament
hauria de ser suficient també per dir requerir fins a dalt
sempre que jo mateix no voler exigir aquest mateix arxiu en un altre lloc.
De fet, aquesta és una forma lleugerament més eficient de fer les coses a continuació, utilitzant
exigir una vegada, així que vaig a retallar a només requereixen.
>> Anem a fer un pas més.
Aquest últim exemple ara, la versió 5, té una jerarquia de carpetes encara més net.
Noti el que he fet aquí per la llegir-me en aquesta versió final
Ara tinc el meu directori HTML, que he tingut tot aquest temps,
però dins d'allí ara és només lectures.php index.php,
week1.php i week2.php.
El directori inclou ara conviu amb el directori d'HTML,
almenys el mateix nivell com un germà, per dir-ho.
El mateix succeeix amb la carpeta de plantilles.
El punt clau aquí és que he introduït estructura una mica més,
però la característica principal ara és que només els arxius
que necessiten estar web accessible públicament direccionable
per una direcció URL al Internet estan en el meu directori HTML.
>> Arxius Mentrestant, altres, helpers.php, footer.php,
header.php, que són sens dubte potser més sensibles,
potser ajudants en realitat té alguns noms d'usuari i contrasenyes o algun intel · lectual
propietat de la mina, funciona de veritat no volen que el món vegi, encara que accidentalment.
És una bona pràctica per mantenir fora del directori públic d'HTML
tots els arxius que no siguin necessaris per ser públic.
Tot el que has de fer en aquest cas, en mirar, per exemple,
arxiu index.php del directori en HTML,
compte que només hem de ser una mica més curosos quan es requereix
o requereixen un cop aquest arxiu.
Que he de fer primer .. anar al directori pare,
Llavors, / includes / helpers.php
per submergir-se de nou en descarregar el fitxer que m'importa.
>> Qualsevol pregunta llavors sobre MVC
o aquesta encarnació relativament senzilla d'aquests?
I vull deixar clar que ens centrem una mica en el
V aquí, les vistes i el factoring fora d'aquestes plantilles.
No hem realment distingeix M de C encara.
De fet, realment no hi ha M aquí i fins i tot el nostre C,
controlador, no està realment fent gairebé res, però vostè aconseguirà molt més
familiaritzats amb aquests dos 2 cartes de MVC,
o millor dit, vostè obtindrà molt més familiaritzats amb la C
MVC en conjunt per al problema 7, així que hi ha més d'això a l'horitzó.
Preguntes?
En realitat hi ha ningú aquí.
>> Bé, passarem ara al segon tema i última per avui.
Que és la introducció d'una base de dades.
Fins aquest punt hem tingut algunes maneres d'emmagatzemar dades.
Hem utilitzat variables.
De tornada al nostre arxiu de C, I / O discussió que vam començar a utilitzar arxius de text
i de l'ús de com fprintf, i després va començar fins i tot
parlant csv una mica, valors separats per comes,
pel que tots ells ens ha permès disposar de dades emmagatzemades
o bé no persistent o persistent.
Però fins i tot CSV en realitat no són propícies per a la recerca
i la inserció i eliminació.
En realitat és un arxiu de text separat per comes estúpid
fila per fila a fila per fila, de manera que si voleu
buscar aquest arxiu el millor que pots fer realment és la recerca lineal.
Vostè ha de començar a la part superior de l'arxiu, llegir-ho tot en,
i buscar algun valor d'interès.
Per inserir-hi que ha de fer la mateixa cosa,
iterar sobre ella i la inserció en un determinat lloc,
i de fet, vostè ha de fer tota la lògica de la recerca vostè mateix.
>> No es pot fer disseny intel · ligent corresponent en un arxiu CSV si no s'escriu el codi.
No es pot fer la filtració d'un arxiu CSV
llevat que s'escriu el codi.
No seria bo si algú va posar tot l'esforç
per fer realitat la recerca senzilla i una fàcil inserció
i eliminació i actualització i així successivament?
Això és exactament el que és una base de dades.
SQL, llenguatge de consulta estructurat, és un altre idioma
que estem presentant aquí avui, però això també és bastant accessible,
i el que realment farem és simplement arrencar d'ella alguns dels més destacats
característiques de manera que per pset 7, i si ho fa alguna cosa basat web,
seu projecte final, vostè té la capacitat d'expressar-
en termes de consultes de dades.
Vostè té la capacitat d'emmagatzemar una petita o una gran quantitat de dades
d'una manera molt més estructurat que al final de la dia
fer la seva vida més fàcil, perquè amb SQL pot expressar
amb molta més precisió, molt més metòdica per tal de
tornar algun subconjunt de dades d'un corpus més gran de dades.
>> Vostè pot pensar en una base de dades, en aquest cas, una base de dades SQL, realment com Excel
o Els nombres en què és un full de càlcul,
o potser múltiples fulls de càlcul, i un full de càlcul, per descomptat,
té files i columnes, i això és perquè
Bases de dades SQL són relacionals, relacionals, en el sentit
que emmagatzemen les dades en termes d'aquestes taules,
files i columnes.
Són de major rendiment que alguna cosa així com un full de càlcul,
i un full de càlcul està destinat a ser usat per un humà.
Una base de dades està destinada a ser utilitzada pel programador
escriure codi en contra, de manera que l'encarnació d'una base de dades
serà la línia d'ordres.
>> Una de les bases de dades relacionals més populars que hi ha és, de nou, MySQL,
que és meravellosament lliure, rendiment molt alt, i això és el
Facebook utilitza molt d'hora i fins a cert punt encara avui
per emmagatzemar una gran quantitat de les seves dades, i ens veurem en un moment
que l'ús de comandaments relativament simples
podem seleccionar les dades, les dades d'inserció, actualització de dades,
supressió de les dades i similars, però per sort, hi ha una més fàcil d'usar interfície
que simplement escrivint en l'intèrpret de negre i blanc.
Farem servir per pset 7 i més enllà d'una eina gratuïta anomenada phpMyAdmin.
El nom és una coincidència.
L'eina passa a ser implementat en PHP,
però això és bàsicament irrellevant.
Quina és important sobre phpMyAdmin és que és una utilitat basada en web.
L'hem pre-instal · lat al dispositiu per a vostè,
i amb ell es poden crear taules en una base de dades,
pot inserir dades, eliminar dades, i vegeu en general
seves dades d'una manera bastant fàcil d'usar entorn.
Els usuaris no podran utilitzar phpMyAdmin.
>> Això és realment només una eina administrativa o desenvolupador
amb la qual veure i furgar seves dades i trobar la manera d'estructurar,
igual que vostè podria utilitzar Excel o Numbers,
però serà una gran manera de visualitzar el que està passant sota la caputxa
de manera que vostè pugui centrar-se en resoldre el problema interessant i no tant
relativa a les ordres arcans.
Fem una ullada a un exemple de les dades que puguin ser emmagatzemats tabularly
en una base de dades relacional.
Heus aquí un exemple.
Ara, per desgràcia, phpMyAdmin va cometre un error en el costat de manera que llança massa moltes paraules
i gràfics en vostè, però si vostè acaba d'afinar en la
Columna ID, la columna de nom d'usuari i la columna de hash,
això és en realitat un full de càlcul, sinó que passa a ser un fragment
d'una taula dins de l'aparell
Un fitxer que posem a la seva disposició en conjunt de problemes 7.
>> En particular, li donem un arxiu que representa
taula d'un usuari, de manera que un full de càlcul que conté els usuaris amb 3 columnes,
un dels quals és un identificador únic a partir de l'1 i s'incrementa a partir de llavors.
La segona columna és un nom d'usuari i aquells de vostès que van fer Hacker,
l'edició de Hacker per pset 2, podria reconèixer alguns d'aquests noms d'usuari com a mínim.
Pel costat de la dreta són les contrasenyes, però no són contrasenyes literals.
Són els hashes dels mateixos, de manera que resulta
que l'emmagatzematge de contrasenyes en una base de dades és una idea realment dolenta.
Tots vostès han llegit probablement en algun moment d'un lloc web
base de dades o alguna empresa es vegi compromesa, i llavors vostè ha de
canviar la contrasenya, vostè necessita per obtenir reemborsaments en les coses
perquè un tipus dolent en realitat es va trencar en el seu compte com a resultat.
>> Emmagatzemar les contrasenyes en text clar, sense xifrar en una base de dades
és completament estúpid, i no obstant això és molt divertit
després de llegir sobre algunes companyies molt conegudes
de vegades en la premsa les bases de dades estan en perill,
i aquesta part no és graciós, però sense encriptar el fet que les bases de dades contenen
contrasenyes és ridícul, perquè, literalment, amb una línia de codi
vostè pot protegir contra aquesta amenaça en particular, i això és el que hem fet aquí.
Fins i tot per a la nostra petita versió falsa Finances CS50
estem encriptar contrasenyes només per si de cas, i que el fet de
totes aquestes contrasenyes començar amb $ 1 $ és només una convenció.
Això només vol dir que estan encriptats o hash en realitat,
que és com una funció d'encriptació d'un sol sentit
per la qual cosa no es pot revertir els seus efectes amb una cosa anomenada MD5.
>> El fet que és 50 després que significa que un valor de la sal
de 50 es va utilitzar per hash totes aquestes contrasenyes a excepció d'una.
Mines, per descomptat, com vostè pot veure que hi ha, HA,
estava usant una sal diferent, de manera que aquells de vostès que he disparat lleugerament cap amunt
potser en Hacker 2, que podria haver estat el resultat d'haver utilitzat
un hash diferent als altres, perquè la contrasenya és en realitat la mateixa
com algun altre usuari-hi.
De fet, si vostè ha estat esperant totes aquestes setmanes per esbrinar
el que les contrasenyes estaven aquí eren les contrasenyes que van ser impugnats
per acabar en l'edició del butlletí de problemes Hacker 2, així que no és massa difícil.
De fet, de Malan era el mateix que jharvard,
però si ens remuntem es veia diferent.
>> Centrar-se en jharvard a carmesí, ja que van ser salades diferent.
L'algorisme va ser pertorbat de manera que la
hash de valor, el valor xifrat es veu una mica diferent
perquè les entrades eren lleugerament diferents, però la contrasenya sota el capó
seguia sent en última instància carmesí.
Ara, qui es preocupa per això?
Bé, nosaltres estem proporcionant als usuaris de la mostra, els noms d'usuari de mostra
i els hashes de les contrasenyes perquè vostè realment té alguna cosa de
clients per CS50 Finances quan vostè arriba fora de la terra amb el seu codi.
Vas a haver d'implementar més taules a l'interior de MySQL, a l'interior de la base de dades.
Vas a haver de crear més fulls de càlcul, de manera efectiva, però vam decidir que donar a aquest un
per començar, i veuràs que l'especificació conjunt de problemes
el guia durant el procés d'importació d'aquesta taula
i també explicar quins són algunes de les característiques són,
i vostè també veurà que posem a la seva disposició el codi
per manejar el hashing o el xifrat d'aquestes contrasenyes,
de manera que no cal preocupar-se massa sobre el MD5 o similars és realment tot.
>> Per tant, SQL, llenguatge de consulta estructurat.
Això és, simplement, el llenguatge que està a punt de començar a utilitzar en pset 7
i potser més enllà per sol · licitar dades d'alguna base de dades.
Les dades són, de nou, emmagatzemada tabularly en aquestes taules relacionals, columnes i files,
però utilitzant una sintaxi relativament simple com esborrar,
inserir, actualitzar i seleccioneu podem fer exactament això.
Podem eliminar de la base de dades, inserir,
actualitzar les dades, així com seleccionar, és a dir, recuperar dades de la base de dades.
Com podem fer això?
Deixa anar per davant en l'aparell.
Deixa aixecar http://localhost,
que, de nou, és l'aparell local en si.
Aquesta és el seu sobrenom per defecte.
I m'ho dius a mi anar a / phpmyadmin.
Això passa a ser una URL especial que el dispositiu està preconfigurat per entendre
que immediatament em demana un nom d'usuari i contrasenya.
>> Com de costum, vaig a escriure jharvard i carmesí,
però s'adonen que aquest compte d'administrador a l'ordinador.
És només una coincidència que també hi ha una jharvard registrat per CS50 Finances.
Jharvard, carmesí, enter em dóna la interfície d'usuari que hem vist
una idea de fa un moment, i és una mica aclaparador al principi,
però pot estar segur, mai hauràs de fer clic a la majoria dels enllaços en aquesta eina.
Vostè va a acabar amb un petit subconjunt que és super útil,
la primera de les quals és bases de dades fins aquí.
Si pujo a bases de dades, observi que estic demanarà que creï una base de dades.
Això és com crear un nou arxiu d'Excel, amb eficàcia.
Vaig a seguir endavant i anomenar aquesta conferència, i jo només vaig a ignorar el camp allà, la confrontació.
Té a veure amb la representació de dades en el mateix,
i jo vaig a crear, feu clic a, i ara adonar que em deixo portar per crear
a la banda esquerra on diu sense bases de dades
Aviat hauria de veure la base de dades de lectura.
>> Si jo ara feu clic al costat esquerre, la base de dades de conferències,
compte dels meus pestanyes canvien una mica.
Tinc estructura, SQL, exportació, importació i algunes altres coses.
L'estructura és gairebé blanc.
No hi ha taules es troben a la base de dades, com es diu aquí,
així que crearem una taula, i seguirem endavant i crear una taula
com els estudiants, i el nombre de columnes que volem?
Anem a mantenir aquest senzill, i ens va deixar registre de cada estudiant
un número d'identificació, un nom i una adreça de correu electrònic.
>> Anem a mantenir simple com això, així que 3 columnes, vaja.
La manera com vostè veu aquí és ara una mica més complicat i aclaparador,
però només hem d'anar a través d'ell fila per fila, de manera molt ràpid donarem
la primera columna d'aquesta base de dades un nom de ID per l'identificador únic.
Serà un nombre enter. De fet, em pot passar per alt la longitud i els valors.
Un String que serà de 32 bits no importa el que escrigui en allà, així que anem a deixar-ho en blanc.
El valor per defecte, jo podria fer nul, com es defineix.
Vaig a deixar que sol. No cal preocupar-se pels valors per defecte.
Anem a desplaçar-se cap aquí als atributs correctes,.
Això és interessant.
Seguirem endavant i dir que alguna cosa arbitràriament ID han de ser signats.
No perdem els nombres negatius.
>> Anirem des 0-4000000000, més o menys,
i llavors no tocarem qualsevol d'aquests camps encara per allà,
però després em deixa escriure el nom aquí baix,
i després l'altre era el correu electrònic, de manera que la captura és el correu electrònic
i el nom, òbviament no sencers, així que anem a canviar aquests termes en un camp diferent.
Resulta VARCHAR, longitud variable char,
És com una cadena en una base de dades SQL
però una longitud variable, i que realment ha de saber per endavant el
longitud màxima de la cadena, així que vaig a un tant arbitràriament
per tipus de convencions de 255 caràcters.
Estic totalment d'pot dir 32. Podria dir 1.000.
D'alguna manera la necessitat de decidir per si mateix sobre la base del que és la seva demografia
el més llarg el nom de l'estudiant i vagi amb aquest nombre o una mica més gran,
però el que és bo d'un VARCHAR és que no perdrà
255 bytes en el nom de cada estudiant.
Si es tracta d'DAVID no va a utilitzar en el seu conjunt 255 bytes,
però això és un límit superior, així que vaig a anar amb 255 només per convenció,
però podria debatre que per ser un valor més baix, i per adreça de correu electrònic
només per ser coherent 255, però de nou, podríem tenir el mateix debat.
Però jo vaig a fer una altra cosa aquí al costat dret.
>> Què és poderós sobre una base de dades és que es pot fer un munt de treball pesat
o el treball complex per a tu.
En particular, realment no m'importa el que el meu número d'identificació de l'estudiant són.
És només pretén ser un identificador únic en una base de dades
així que tinc una representació concisa de 32-bit d'aquest estudiant
així que tinc alguna forma d'identificació de manera única els
que no hi hagi 2 Davids, per exemple, en una classe.
De fet, vaig a marcar aquesta casella AI, increment automàtic,
de manera que la base de dades MySQL, es dóna compte de
què ID de cada estudiant recentment inserit serà.
Ni tan sols ha de preocupar-se perquè en el meu codi,
i jo també vaig a triar alguna cosa del menú d'índex.
L'índex de caure per aquí ha primari, únic,
índex i text complet.
Vostè potser pot endevinar el que un parell d'aquestes coses,
però resulta que en les bases de dades relacionals
que el programador o l'administrador de base de dades per obtenir preventivament
donar pistes a la base de dades pel que fa a quins camps
en una taula són una mica especial.
>> Per exemple, en aquest cas, jo vaig a dir que el DI
serà un índex principal, també coneguda com a clau principal.
El que això significa és que, per definició, d'ara endavant ID
identificarà de manera única als estudiants en aquesta taula.
Cap estudiant tindrà la mateixa identificació perquè estic imposar aquesta restricció o índex d'això.
A més, el que això farà per mi és el que dirà
MySQL ID que és especial.
Em preocupo especialment sobre identificació, així que endavant i fer màgia a la seva estructura de dades de la fantasia,
construir una espècie d'arbre.
En general es tracta d'una cosa anomenada el B-tree, cosa que no ens fixem en setmanes,
però és una altra estructura de dades similar en esperit als arbres binaris
i tracta que ens mirem, però que dirà
a la base de dades d'aquest camp és tan important que probablement
Vull ser capaç de cercar-hi, seguir endavant i construir una mica de fantasia
estructura de dades en la memòria per agilitzar les recerques de manera que idealment
són la constant de temps o almenys el més a prop possible a la qual
de manera que no delegar en recerca lineal, que no serà
el més alt rendiment enfocament.
Per contra, l'adreça de correu electrònic podria haver estat una clau principal.
>> En teoria, l'adreça de correu electrònic de cada un és únic, llevat que vostè està compartint una mica de consideració,
però no és generalment bona per utilitzar alguna cosa com una cadena
com clau principal, perquè si el seu propòsit en la vida és la identificació exclusiva
files de la taula no hi ha cap raó per utilitzar al màxim 255 bytes
per identificar algú si vostè pot aconseguir lluny amb només 4 bytes
o un int de 32-bit.
En general, una clau principal ha de ser curt i concís
i l'ideal seria com un nombre enter o un int gran, que passa a ser de 64 bits.
No obstant això, una adreça de correu electrònic ha de ser únic, i una de les característiques d'una base de dades molt
és per exigir l'exclusivitat per a mi.
En seleccionar únic aquí al costat del correu electrònic, tot de si mateix per correu electrònic
es desplaça fora de la pantalla, el que dic a la base de dades
no confia en mi.
No em deixis inserir a la base de dades
la mateixa direcció dues vegades, encara que jo sóc un idiota i no sóc
molt bé amb els meus IFS i IFS altre lloc i el codi PHP real
i accidentalment deixa que l'usuari es registra en una adreça de correu electrònic existent
la base de dades és un altre nivell de defensa per a la correcció
per garantir que aquesta adreça de correu electrònic duplicats no acabi a la taula.
>> Ara, per contra, per al nom és probable que no volen fer aquest únic
perquè llavors no podria ser de 2 o 2 Davids Mike Smith, per exemple,
a la base de dades, de manera que un de sol haurem de deixar-lo sol.
Vaig a seguir endavant i feu clic a Desa a la part inferior dreta,
i tot es veu bé, però noti aquí
aquesta és una part que per ara no passarà molt de temps en
perquè la sintaxi és una mica complex, i no és necessari crear taules
molt sovint, però el propi SQL és un llenguatge,
la sintaxi que aquí que he ressaltat.
Què phpMyAdmin realment fa és que crea una interfície gràfica d'usuari basada en web per a vostè
amb la qual es pot estalviar temps i no haver d'escriure manualment fora
una consulta SQL bastant llarg així.
>> En altres paraules, si voleu crear manualment aquesta taula,
ja sigui en aquest phpMyAdmin en blanc i negre del sistema o fins i tot en
mitjançant l'ús d'aquesta altra pestanya, aquesta pestanya SQL on pot escriure en qualsevol de les consultes SQL
que desitja, francament, això m'hauria portat un minut
per recordar en realitat la sintaxi completa, i fins i tot llavors probablement seria
va fer alguns errors tipogràfics, pel que aquesta eina és molt útil per a coses com aquestes, i és també instructiu.
Vostè pot començar a inferir el que la sintaxi és
només pel color bonic de codificació que phpMyAdmin és l'addició de
per a la nostra comoditat visual.
Però ara anem a fer això al seu lloc.
Deixa anar a la pestanya Inserir en la part superior, i m'ho dius a mi seguir endavant i introduir, per exemple,
una identificació de, diguem, la veritat és que no m'importa.
Va a increment automàtic. Vaig a deixar que la base de dades d'acord amb això.
Però seré David, i el meu correu electrònic ha de ser malan@harvard.edu.
>> Seguirem endavant i posar aquí a Mike Smith com un altre.
Me'n vaig a donar un cognom al seu torn,
i haurem ell sigui smith@example.com,
i llavors, on puc anar ara?
Bé, sembla que va és el botó per fer clic, i llest.
Observeu en les 2 primeres files inserides.
Aquesta és l'actual consulta SQL.
Aquesta és l'eina phpMyAdmin executat per mi,
però el resultat final, avís, si ara anem a la pestanya de navegació,
és veure dues files en aquesta taula, recorda molt estèticament
de la taula que vam veure anteriorment per als nostres usuaris de pset 7,
un d'ells és David Malan, un dels quals ara és Mike Smith.
Però per ser clars, no cal utilitzar phpMyAdmin,
i, de fet, serà aviat l'escriptura de codi per pset 7
que automatitza el procés d'agregar files, eliminació de files, l'actualització de files i similars,
així que permetin-me en lloc d'anar a la pestanya SQL aquí
i escriviu select * from on els estudiants
email = "malan@harvard.edu".
>> En altres paraules, suposem que ara té
algun tipus HTML, i l'usuari tecleja la seva adreça de correu electrònic, entre d'altres camps,
i l'objectiu ara és en el codi PHP en part posterior
mirar realment fins altres detalls d'aquest usuari.
Quin és el seu nom complet? Quin és el número d'identificació?
Es pot escriure una consulta SQL com això, select * from estudiants
on el correu electrònic = "malan@harvard.edu".
I si jo faci clic a GO, nota que jo, i de fet ho fan, tornar una sola fila.
Mike s'omet d'aquest conjunt de resultats, com la col · lecció de files
que generalment es diu, perquè ell no té la mateixa adreça electrònica que jo.
>> Ara, de nou, aquí per pset 7 farem servir phpMyAdmin com eina administrativa
i una eina pedagògica per aprendre la seva manera
a tot el món de SQL, però al final de la dia
vostè estarà escrivint aquestes consultes dins de l'actual codi PHP,
i així que estigueu atents a Zamyla tutorial en particular,
on obtindrà un recorregut pel codi de distribució d'aquest butlletí de problemes
on ens hem donat no només l'estètica de la pàgina d'inici de sessió
i el bonic logo sexy que diu CS50 Finances, però també hem donat
un munt de funcions que faran de la seva vida una mica més fàcil.
També hem escrit part del conjunt de processadors per a vostè,
la porció d'entrada d'aquest, en particular, per donar-li un sentit d'un disseny representatiu
que utilitza realment un controlador, per exemple, index.php,
login.php i similars, i llavors podràs veure el conjunt de processadors també té un directori de plantilles
que té tots els seus punts de vista, totes les estètiques.
I així, el flux de treball general en pset 7 va a ser que
els usuaris visiten un controlador a través d'una URL en un navegador.
Aquest controlador conté codi PHP que vostè va escriure, i dins del seu codi PHP
podrien ser algunes línies de SQL niat entre cometes dobles
i es passa a una funció que escrivim consulta denominat
que l'ajudarà a parlar amb la base de dades sense necessitat d'utilitzar alguna cosa com
una eina administrativa com phpMyAdmin.
>> Vostè serà capaç d'escriure sentències SQL en codi PHP
i recuperar una matriu de PHP del conjunt de resultats,
de les files que en realitat responen a aquesta consulta.
I de la mateixa manera serà capaç de fer insercions o eliminacions
o actualitzacions o similars, la sintaxi per a això és bastant similar,
i veuràs algunes de les referències en línia, des del codi de distribució
i des del mateix conjunt de processadors empacar exactament com fer per fer això.
Adonar-se que realment estem en última instància, només esgarrapant la superfície de SQL
i de MySQL, però el poder de la veritat és que t'allibera
per centrar-se en els problemes que vol resoldre, els casos d'ús que desitja implementar
sense haver de preocupar absolutament tant, si més no al principi,
sobre on i com emmagatzemar i buscar a la base de dades,
i això és literalment el mateix Facebook, on té el seu inici
usant MySQL i utilitzant més servidors MySQL i després més servidors MySQL
en poc temps, fins que va haver de començar a pensar realment dur sobre com
emmagatzemen les dades, la forma d'emmagatzemar les coses encara més eficient,
així que, encara que donarem per fet el fet que els índexs i restriccions únics
i així successivament només el treball hi ha una conversa molt interessant
que tot això pot eventualment conduir a, així que adonar-se que només estem esgarrapant la superfície
del que podria arribar per ell i els seus projectes siguin una mica de dades grans.
>> Dit això, anem a acabar aquí, i ens veiem la setmana que ve.
[CS50.TV]