[Powered by Google Translate] [Săptămâna 8, Continuare] [David J. Malan] [Universitatea Harvard] [Acest lucru este CS50.] [CS50.TV] Acest lucru este CS50, astfel încât acesta este sfârșitul săptămânii 8 aici. Am avut, desigur, un pic de un uragan la începutul acestei săptămâni, astfel încât acum este într-adevăr doar tu și cu mine în această sală de conferințe, dar astăzi vom continua conversația noastră despre PHP si despre programare web, în ​​general, mai mult, si vom introduce, de asemenea, ideea bazelor de date, în special unul numit MySQL, care este destul de popular in aceste zile, în mare parte din cauza scalabilității sale, precum și din cauza acesteia fiind sursă liberă și deschisă. Dar, mai întâi, o privire la unde am rămas data trecută. Amintiți-vă că am fost în căutarea la mai multe exemple Frosh AI, și aceasta a fost formular hidos pe care am venit cu aproximativ 15 ani în urmă + , în scopul de a avea elevi pe registrul campus pentru sport boboc intramurale , fără de fapt a fi nevoie să mai Trek peste șantierul să Wigglesworth să alunece o bucată de hârtie fizică sub ușa lui Proctor ceva. În schimb ne-am mutat totul on-line, dar pentru a face acest lucru avem nevoie să facă uz de câteva tehnologii, astfel încât unul, am nevoie de HTML, Hypertext Markup Language, care din nou este acest limbaj de marcare cu care faci pagini web structural. Folosind un pic de CSS aceste zile, foi de stil în cascadă, prin care vom folosi stilizari ale paginii web folosind o sintaxă ușor diferită, întrucât HTML a fost tot despre structura acestora. De asemenea, trebuie să se introducă un limbaj de programare web. În acest caz, vom folosi PHP, și PHP este de gând să ne permită la continut dinamic de ieșire, precum și face ca lucruri cum ar fi programatice trimiterea de email-uri, cum a fost cazul în nota am plecat săptămâna trecută. Amintiți-vă că acest cod pentru a fost în 2 părți. Unu, am avut froshims3.php, și acest lucru a fost în mare parte de marcare cu un formular HTML în interiorul său, un pic de CSS aici în atributele de stil astfel încât formularul în sine ar fi centrat pe pagină, dar dincolo de asta am avut unele intrări reprezentative formular, un câmp de text, o casetă de selectare, unele butoane de radio, un meniu de selectare, și un buton de submit. Și prin intermediul acestui formular, am prezentat un dosar care a fost aparent numit register3.php, care se uita un pic ceva de genul asta. Acum, cea mai mare parte din codul register3.php, retragerea, a fost vorba de e-mail. A făcut un pic de validare a formularului, care a fost prezentat pentru a vă asigura că domeniile au fost de fapt condiția care au fost de așteptat. Apoi am sunat unele funcții PHP folosind noua sintaxă ușor, chiar dacă este împrumutat de la C. Acest operator săgeată ne permite să facă uz de ceva numit programarea orientată pe obiecte. Nu vom intra în faptul că, în orice detaliu aici, dar știu de acum este un mod de a avea funcții asociate cu obiecte, care sunt un tip special de structură, așa cum am văzut în C. Dar pentru acum, ia doar pe credința că aceasta este sintaxa corectă pentru a utiliza atunci când se utilizează o bibliotecă ca această bibliotecă PHPMailer. Și apoi, până la sfârșitul acestui fișier am generat dinamic un e-mail care s-au trimis la contul meu jharvard@cs50.net din contul meu jharvard@cs50.net, și am informat utilizatorul în consecință, că acestea au fost înregistrate pentru acest sport. Asta este destul de mult ceea ce Frosh site-ul AI făcut în toți acei ani în urmă cand l-am pus în aplicare, a acordat, într-o altă limbă, dar tu, probabil, arata puterea pe care o aveți Acum, că vă puteți exprima nu numai prin programare la un nivel scăzut într-o limbă precum C, dar la un nivel mult mai mare cu aceste aplicații foarte reale, cum ar fi e-mail pentru a rezolva efectiv unele probleme din lumea reală. Acum, desigur, chiar dacă am folosi acest script pentru a genera unele e-mailuri de la jharvard@cs50.net dinamic, ceea ce este într-adevăr un cont că am avea acces la, nu fi destul de atent pentru a trimite prin poștă numai din conturi care sunt de fapt propriul dvs., ca nu cumva lucrurile pe care le obține într-un pic de apă caldă în viață. Cu care a spus, hai acum tranziția la rezolvarea unei probleme cu totul diferit, a statelor de fixare. Acum, ce înseamnă asta de fapt? HTTP, acest Hypertext Transfer Protocol, este de fapt un protocol de apatrid, și ce înseamnă acest lucru este faptul că atunci când vă trageți în sus ceva de genul Google.com și apoi a lovit introduceți de obicei, browser-ul dvs. are un fel de icoană filare, care apoi rezultate din unele pagini web să fie descărcate, și apoi că icoana mica oprește filare, și că într-adevăr sugerează HTTP care a finalizat un fel de conexiune la server și asta e tot. HTTP este apatrid, în sensul că nu se menține o conexiune persistentă la server în același mod Skype nu sau Gchat face, deoarece cu HTTP ipoteză este că, odată ce v-ați adus-o pagină web care este aceasta. Acum, în realitate, în aceste zile de pe site-uri precum Facebook si Google Maps și Twitter si ca nu e mult mai mult dinamism prin care chiar și după faptul că icoana se oprește filare puteți obține, de fapt, mai multe actualizări de la server, mai multe tweets, mai multe actualizări de stare de pe Facebook și cum ar fi. Dar chiar că este folosind o tehnica pe care vom vorbi despre într-o săptămână sau două cunoscut sub numele de Ajax folosind un limbaj numit JavaScript, dar la sfârșitul zilei, HTTP este încă apatrid. Și totuși, dacă doriți să vă amintiți cumva lucruri despre un utilizator chiar și după ce au deconectat de la server-ul dvs. PHP nu permite o cale de a face acest pentru că, așa cum am văzut ultima oară, PHP are un număr de superglobals, și o superglobale este, din nou, o variabilă specială la nivel mondial care este predat la tine de serverul de web și de PHP în sine. Nu trebuie să faceți nimic pentru a pune valorile în ea, iar printre superglobals le-am văzut până acum sunt GET si POST, care este în cazul în care câmpurile de formular sunt puse în mod automat pentru tine, precum și o serie de alte persoane pe care nu le-am văzut încă. In interiorul $ _SERVER sunt niste variabile speciale referitoare la serverul de sine. Care este adresa IP, ce protocol, HTTP sau HTTPS ai folosit, ce metodă cerere ai folosit si ca, deci nu e ceva interesant, detalii picante despre server, și de fapt, ghidul de acolo, de asemenea. Nu e $ _COOKIE, care este în cazul în care aceste lucruri numite cookie-uri sunt stocate. Noi nu va petrece timpul pe cookie-uri se astăzi, dar stiu acum ca un cookie este doar o mică bucată de informații faptul că un server web poate planta pe un browser Web și, la rândul său RAM sau drive-ul computerului său hard pentru a stoca informații despre un utilizator, de exemplu, numele lor de utilizator astfel încât acestea nu trebuie să-l introduceți de fiecare dată când se autentifică sau unele numărul unic de identificare sau pentru acel utilizator astfel încât să nu trebuie să le hartuiti cu aceleași tipuri de întrebări despre Preferințele în viitor, dar cele mai multe de interes acum este de $ _SESSION. Acest superglobale, care, la fel ca ceilalți, este predat la tine în mod automat de către PHP atunci când scrii PHP pe bază de site-uri web poate stoca tot ce vrei, siruri de caractere, numere întregi, puncte plutitoare, valori, tablouri, obiecte, într-adevăr tot ce vrei, și vă permite să stocați-l într-un mod că, chiar dacă utilizatorul pe care vizitează acum și apoi vine înapoi un minut de acum sau de 5 minute de acum, deoarece au nevoie de timp înainte de clic pe link-ul de unele alt PHP va asigura că orice ai pus în superglobale sesiune câteva minute de minute sau 5 în urmă vor fi în continuare acolo când se întoarce de utilizator. Și sub capota acestui superglobale este pus în aplicare prin intermediul aceste lucruri numite cookie-uri, dar pentru acum, e doar o abstracțiune prin care e un fel de echivalent al programatic un coș de cumpărături. Orice ai, programator, pus în matrice superglobale asociativ va fi acolo un numar de minute mai târziu, până când îl ștergeți sau până când utilizatorul iese browser-ul lui sau a ei cu totul. Să aruncăm o privire la un exemplu de modul în care acest lucru este, de fapt utilizat. În counter.php printre bucăți de astăzi de cod avem următoarea linie. La începutul acestui fișier avem o grămadă de comentarii albastre, care sunt neinteresante pentru acum. Dar în linia 13, avem o linie nouă, session_start, și că de fapt face exact ceea ce spune. Acesta începe sesiuni. Acesta vă permite să utilizați atât de mare superglobale $ _SESSION, și e la fel de simplu ca asta. Acum, dacă am proceda să se uite la linia 16, să încercăm să ne dăm seama ce această pagină web este de gând să facă. If (isset ($ _SESSION ["contra"]), apoi mergeți mai departe și se păstrează în variabila de contor, contor cu litere mici, $ _SESSION ["Contra"]. Acest lucru pare să fie de declarare a unei variabile locale numit contor în interiorul căreia se pune o copie a ceea ce este în interiorul superglobale numit sesiune la locația "contra". Altfel, se pare, acest contor mic locală variabilă, este initializat cu 0. Dar apoi câteva rânduri mai târziu, în 26 observați că exemplarul sesiunea de contra, cheia sa, are o valoare alocate nou, care este valoarea sa actuală, plus 1. Pe scurt, acest fișier pare să fi actualizarea un contor care este stocat în interiorul superglobale sesiunii prin incrementarea prin 1, dar păstrează prima o copie a valorii anterioare prin stocarea într-o variabilă locală numită $ contra, și apoi în jos aici să vedem ce rămâne. Se pare că e destul de mult doar HTML. La partea de jos a acestei pagini vom vedea în linia 37 care le-am vizitat acest site Numărul contor de ori, deci nu e un cuplu de caracteristici interesante aici. , Acest lucru este în mod clar o variabilă, dar nu suficient pentru a pune pur și simplu $ Contor în corpul HTML, deoarece, desigur, dacă e doar acolo, printre PHP HTML este de gând să presupunem că e doar HTML. Tu pur și simplu doriți $ contor pentru a fi imprimate pe ecran. Dar, în loc de cădere în modul PHP cu această bucată de sintaxă, putem insera dinamic o valoare aici foarte similare în spirit cu ceea ce am făcut ultima dată cu inserarea valori în siruri de caractere. De fapt, aceasta este doar o notație prescurtare pentru a spune ceva de genul asta literal, de imprimare ($ contor) sau chiar ceva de genul printf (% s, contra), sau chiar, cum poate ați văzut on-line sau în manuale, există o funcție în PHP numit ecou care face același lucru, și toate acestea sunt doar moduri mai tărăgănat de a spune <=.? În acest caz, cel pe care nu trebuie să afișezi PHP cuvânt după semnul de întrebare. Acest lucru este prescurtarea pentru notație, din nou, ceea ce tocmai am văzut o clipă în urmă care este un ecou o anumită valoare. Să vedem ce rezultatul final al acestui fapt este. Lasă-mă să merg într-un fișier de peste counter.php nostru, și vom vedea că David a făcut doar o greșeală de joc cu codul de acolo. Să mergem fix indiferent de el greșit, și eroarea pare a fi acolo, plecat, pe linia 37. Potrivit partea de sus a acestei pagini, am vizitat acest site de 0 ori. Ei bine, hai să mergem mai departe acum, și în partea de sus a browser-ului faceți clic pe reîncărcați pictograma, și am faceți clic pe reîncărca, si acum am vizitat site-ul 1 dată, 2, 3, 4, 5, 6, 7, 8. Și într-adevăr, dacă ne uităm la sursă a acestei pagini codul sursă reală se schimbă, și observați absența completă a oricărei PHP, și asta pentru că Cod PHP este evaluată sau interpretat partea de server, și astfel ceea ce înseamnă că producția de script-ul PHP este ceea ce în cele din urmă trimis la browser-ul, care în acest caz este un cod HTML crud și un text crud. Ce se întâmplă aici? Ei bine, cu linii de cod relativ puține I sînt capabil de a stoca persistent pe parcursul cateva secunde, sau în cazul în care am așteptat destul de mult, minute, ore, chiar și o anumită valoare într-un mod care face HTTP par dinamică ca și cum ne-am păstrat această conexiune la server, si e doar amintirea a ceea ce am spus data trecută, dar, în realitate, există o grămadă de complexitate se întâmplă sub capotă implicând cookie-uri care se permit PHP să-mi dea această iluzie din acest cos de cumparaturi-ca facilitate. Pentru moment, un exemplu banal în cazul în care vom stoca doar un număr întreg, dar această caracteristică va reveni pentru a fi de mare valoare când începem să vorbim despre mai multe proiecte complexe, printre ei problema stabilit 7. Aceasta este problema ta foarte ultima stabilit în CS50. Știu, e atât de trist, dar ceea ce veți găsi este că am de gând să încheie această parte a semestrului de fapt, trecerea de din cadrul C cu siguranță la contextul PHP dar în timp ce utilizați unele dintre fundamentele aceleași am vorbit despre de ceva timp. Obiectivul cu PSET 7 este de a pune în aplicare CS50 Finanțe, care este propria voastră versiune a Yahoo Finance sau de Finante Google sau chiar Etrade.com, prin care au capacitatea de a privi în sus prețurile acțiunilor pentru simboluri date, dar chiar mai mult decât atât aveți posibilitatea de a "cumpăra" și "vinde" stocurile de care sunt tranzacționate pe bursele de valori diferite, deoarece ca aceasta pagina de start aici sugerează, care este într-adevăr măsura în care am început setul problema pentru tine, ai un formular de autentificare care este asking pentru un nume de utilizator și o parolă. Ea are un buton de submit, dar ulterior, după cum vom vedea în cele din urmă, nu este nimic adevărat întâmplă sub capotă încă, deoarece rămâne pentru tine de a pune în aplicare capacitatea de a inregistra noi utilizatori, capacitatea de a cumpara actiuni, de a vinde stocurile, pentru a uita de fapt, creșterea prețurilor curente în stoc. Și într-adevăr, acest lucru va fi la fel de lumea reală cât posibil, deoarece am făcut includ un pic de cod care vă va permite cu o singură funcție pentru a interoga Yahoo Finance, ceea ce face minunat datele disponibile gratuit pentru căutarea prețurile acțiunilor bazate pe simbolul stoc sau simbolul bursier, și te-ai întors prețul curent al zilei. Datele pe care le ai de fapt, vedem în acest PSET special, va fi despre cum lumea reală ca se poate ajunge, astfel încât sunteți de fapt interfațare cu stocuri reale, locurile din lumea reală, și vom vedea cât de mult bani puteți face, probabil, peste următoarele câteva zile de joc cu un set problema ta proprie. Dar haideți să setați mai întâi scena pentru modul de a proiecta ceva care este cu siguranță mult mai complicat decât counter.php, asta e mai complicat decât oricare din exemplele de Frosh AI până în prezent, și să încerce să introducă o paradigme câteva aici, care ne permit atât pentru PSET 7 și poate pentru proiectul final dacă faci ceva pe web pentru a menține codul de bine organizat, pentru a te mentine sanatos, și să facă un pas spre colaborare, fie în proiectul final CS50 lui sau dincolo de cazul în care veți continua să programați ceva în viitor. E această paradigmă de proiectare generală în informatică și în dezvoltarea de software, în general, mai cunoscut sub numele de MVC, modelul vedere controler, și acest lucru este un acronim care descrie o prostie idee foarte frumos, care este separarea diferitelor aspecte ale unui program, păstrarea în special separat logica sau de logica de afaceri a unui site web astfel că orice implica lucruri cum ar fi apelând funcții și interogarea bazelor de date și cum ar fi se întâmplă nu printre HTML ci mai degrabă în fișiere separate, și într-adevăr, există un singur fișier cu acest de obicei, pe care le-au numit controler că e într-adevăr creierul din spatele operațiunii, și vom vedea un exemplu de acest lucru în doar un moment. E un model de programare care este codul că nu vorbesc cu bazele de date, care vorbeste cu Yahoo Finance și cum ar fi, și apoi există V în MVC, opiniile, toate lucrurile care are legătură cu estetica, fișierele care conțin de fapt, HTML, CSS si poate ca. Ideea aici, așa cum sugerează această imagine, este faptul că operatorul este fișierul, după cum vom vedea în curând și după cum veți vedea în special în PSET 7, că lumea vorbește prin intermediul browser-elor web ale acestora. Acesta este fișierul care se vizitat pe internet publice, dar operatorul vorbește cu un potential model, care este unul sau mai multe alte fișiere care conțin cod referitoare la date, Codul legate de bazele de date și cum ar fi, și apoi vorbește cu controller-unul sau mai multe alte fișiere cunoscute sub numele de vizualizări, care sunt estetica unei pagini web, template-uri de soiuri, care ar putea să ia unele date ca intrare, dar la sfârșitul zilei logica doar în interiorul unei viziuni ar trebui să fie de redare a acestor date, iterarea peste o buclă și de fapt scuipa unele HTML pe bază de extrădare a acestuia sau chiar ceva de genul un PDF. Ce e frumos despre MVC este că puteți avea puncte de vedere diferite bazează pe tipul de dispozitiv, în funcție de tipul de format de fișier pe care tu de fapt doresc să arate la utilizator. Să aruncăm o privire la câteva exemple ce în ce mai complexe și mai bine concepute pornind de prima versiune cu 0 aici. Lasă-mă să mergeți mai departe și să deschidă în directorul nostru de astăzi MVC un fișier numit index.php in directorul 0. Observa acest lucru este un site super-simplu și foarte underwhelming asta e un fel de versiune 0 din o pagina pentru CS50, și observați modul în care avem o legătură într-Prelegeri, avem un link către Programa, și dacă am urmați link-ul de la anunțul Prelegeri că adresa URL până top se va schimba la lectures.php. Dacă aș apoi urmați link-ul de la Săptămâna 1 Notă că modificările la week1.php URL. Nu pare a fi o structură destul de simplă, ierarhică aici. Să aruncăm o privire rapidă sub capota de la modul în care acest lucru este prevăzut afară, și într-adevăr, dacă mă uit la index.php e destul de simplu. De fapt, chiar dacă am numit acest fișier un PHP nu e nici un cod de programare actuale. E un comentariu pe care am scris aici, în PHP așa utilizatorul nu ajunge să-l vedem. Desigur, ca și înainte, nimic din ce e în între tag-uri PHP se interpretat, chiar dacă e un comentariu, și să interpreteze un comentariu înseamnă doar să-l arunce de la sfârșitul zilei și de fapt, nu trimite-l la browser-ul, așa că totul aici este doar estetica. Dacă aș deschide în mod similar lectures.php și aceasta este doar un fișier greu codificate. Se întâmplă să fie numit ceva. Php, dar de fapt este doar. html, și week1.php, week2.php În mod similar sunt doar de marcare, astfel încât există o grămadă de neajunsuri ale acestui design. Unul, este o mare cantitate de copy / paste. Chiar dacă singurul lucru care se schimba intre aceste fișiere este lista neordonată, tag-uri li, am totuși doc tip, HTML, cap, titlu, corpul aproape, aproape de HTML și mai mult în fiecare singur fișier, ceea ce înseamnă că, dacă am dori vreodată să restructureze această pagină de web sau restylize-l trebuie să mă duc și să modificați toate aceste fișiere manual sau cu unele masive găsi și înlocui. Să luăm un pas spre un design mai inteligent, mai gândește în versiunea 1 aici prin care ca pe mine citit că am inclus, astfel încât să puteți juca împreună cu Acestea mai pe îndelete în timp acasă pe care le avem aici un rezumat al dosarelor în versiunea 1 a acestui site, și se pare că l-am luat asupra mea să țină afară un cod comun, header.php si footer.php. Ei bine, haideți să aruncăm o privire la ceea ce este în interiorul Primul dintre acestea. Header.php pare familiar, dar observați în cazul în care nu se obține taie? Imediat după linia 19, astfel că e tot ceea ce era comun din index.php fișiere, lectures.php, week1 și week2.php din exemplul anterior. Ceea ce am făcut a fost copie și tot tăiat, care a fost comună la toate aceste fișiere, pune-l într-un fișier antet separat, și în mod similar, în footer.php am aplica același principiu prin care doar linii interesante în footer.php sunt acestea organism doi, aproape și aproape HTML. Dar ce înseamnă acest lucru acum este faptul că, în noua versiune de punere în index.php cât de mult se poate obține mai simplu. Acordate, un pic mai mult Cautati criptic, un pic mai puțin intuitivă să urmeze sus în jos, ci Dumnezeul meu, tot de concediere, care este acum plecat. Avem nevoie de ajutorul unei funcții PHP literalmente numit necesită până sus, care este foarte amintește, reamintim, a lui C # include mecanism. Avem nevoie de header.php în partea de sus. Avem nevoie de footer.php de la partea de jos, iar singurul lucru care este diferit sau speciale despre acest fisier este conținutul care este menit să fie unică pentru ea. Dacă mă duc apoi în, să zicem, lectures.php, același principiu se aplică. Din nou, unele comentarii de până sus, dar apoi am nevoie de antet, subsol necesită, și între acesta e doar conținutul care sa schimbat de fapt. Și dacă ne-am uitat în Săptămâna 1 Săptămâna 2 și vom vedea că același principiu a fost aplicat acolo. Ei bine, nu suntem destul de făcut acolo. Să aruncăm o privire la versiunea 2, care are o structură similară, dar observa acum am introdus altceva. În linia 10 am introdus helpers.php, care conține aparent funcții helper. O funcție helper este, în general, o funcție relativ scurt pe care le scriu pentru a vă ajuta în diferite locuri, și să vedem ce e în interiorul helpers.php. În acest caz, se pare ca acesta are 2 funcții. Retrag de la altă zi, cu exemplul nostru cub puteți defini propriile funcții în PHP, și ceea ce am făcut este acum Am Funcțiile definite numite face subsol și face antet, prima care ia un parametru numit de date, a cărui valoare implicită este o matrice goală, așa cum a sugerat acolo, și putem scrie de fapt, acest lucru chiar și mai succint, în cea mai recentă versiune a PHP prin a spune deschis suportul pătrat, pătrat închis suport. Asta înseamnă un array gol de mărimea 0, dar cu toate acestea, o matrice. Această funcție extract este un pic specială în care ceea ce face este nevoie de ca argument un tablou asociativ care are 0 sau mai multe perechi de chei de valoare, și, dacă aveți o cheie de foo și o valoare de bar funcția de extract creează o situație în care acum, din linia 11, aveți o variabilă locală numită $ foo a căror valoare este de bari. Și dacă ai avut mai multe chei și valori în matrice de date, în mod similar le-ar fi extrase în domeniul de aplicare locală sau numele spațiu, astfel încât footer.php și aceeași idee aici, astfel încât header.php să aibă acces la aceste variabile. De fapt, lasă-mă să deschid din nou header.php și se atrage atenția acum ceea ce se pare că în această versiune. Mai degrabă decât de codare greu CS50 ca titlu pentru fiecare pagina observați dinamismul pe care e posibil acum. În linia de 5 Mă ecou o variabilă titlu, dar mai întâi am treacăt că variabila titlu la o funcție numită htmlspecialchars. Un nume stupid pentru o funcție, atâta timp cât acesta este, dar chiar face ceea ce spune. Se asigură că orice caractere speciale în șir, care a fost adoptată în mod corespunzător sunt scăpat HTML. Aceasta este de fapt o modalitate de a evita ceea ce se numește o cruce atac site scripting prin care cineva poate rea-credință sau accidental injectați HTML propriul lor site-ul tău prin lipirea într-o formă, de exemplu, ceva ce nu ai fost destul de așteptam, în special cod JavaScript, cum vom vorbi despre într-o săptămână sau o perioadă de două lui. Acest header.php acum, este o imagine în sensul că vă permite să vizualizați punct de vedere estetic conținutul anumit set de date. Dar mai exact, e un șablon. Aceasta este un fel de plan acum de ceea ce ne dorim antetul fiecărei pagini pentru a arata ca, dar există unele dinamism în care dorim titlu să fie dinamic inserate bazează pe variabila titlu care a fost extras atunci când am sunat, din nou, tencuiala antetul funcției. Acum, dacă ne-am uitat la subsol face, nu e de fapt, nu folosi mai mult de faptul că, chiar acum pentru că, în footer.php nu exista nici un fel de dinamism. S-ar putea să fie, dar la moment este o listă greu codificate de 2 tag-uri, dar aceeași idee se aplică, astfel că, de fapt sugereaza de ce ne-am pierde timp cu un antet de randare și o funcție de randare subsol? Lasă-mă să merg în locul acum în versiunea 3, și în versiunea 3 din ajutoare am decis să-l simplifice și mai mult. Lasă-mă să aveți o singură funcție de randare. Lasă-mă să-l ia un alt argument, de data aceasta numit șablon, care este menit să fie numele unui șablon, și apoi voi înlănțui îndrăzneală php la valoarea acelei variabile lui., și apoi, dacă acesta există, sau bar.php foo.php header.php si footer.php, apoi m-am de gând să meargă mai departe și extrage date variabile și necesită apoi această cale. Cu alte cuvinte, pentru a utiliza aceasta acum, dacă aș deschide index.php observați că eu nu numesc header randare mai. Eu doar fac apel, dar am trecut într-o valoare citat de antet pentru a face clar pe care eu de fapt vreau șablonul să se încarce. Apoi peste observați aici ceea ce fac. Mă trec într-dinamic o cheie de titlu, o valoare de CS50, și asta, după cum am văzut mai înainte, ar putea fi mai succintă în cea mai recentă versiune a PHP unde pot înlocui funcția de matrice cu paranteze drepte, pe care o propunem este chiar mai ușor de citit și cu siguranță un pic mai ușor să tastați. Și, desigur, cu apelul de randare subsol în partea de jos, noi nu te deranja trece într-un al doilea argument, la toate, nu tablou asociativ, pentru că nu e nimic în interior dinamic din subsol. E doar cateva tag-uri HTML apropiate pentru. Bine, vom lua măsuri în vederea curățare într-adevăr lucrurile aici, dar lasă-mă să deschid 2 exemple finale. Acesta, numărul 4, observați că am luat o decizie conștientă acum pentru a îmbunătăți la exemplul anterior, prin utilizarea în cele din urmă unele ierarhie cu fișierele mele. Observați că în acest rezumat, în acest ma citesc, am introdus un director și include un director șabloane Conținutul ale căror vor fi lucrurile pe care vreau să le includă și șabloanele pe care doresc să facă, respectiv. Acest lucru este într-adevăr eu fiind anal și încearcă să mențină lucrurile ordonat, păstrați fișierele legate împreună, dar rezultatul final este că acum avem o configurare ușoară tidier, dar trebuie să ne amintim acum în, de exemplu, index.php atunci când avem nevoie de helpers.php fișierul trebuie să solicite acum prin intermediul include / helpers.php mai degrabă decât a spune doar că acum helpers.php este de fapt într-un director sub. Acum, ca o paranteză, veți vedea în aceste exemple și altele funcții, cum ar fi nevoie, nevoie de o singură dată. E de fapt o funcție de sine numită includ, și toate au un comportament ușor diferit. Aici am nevoie de o dată spun să super-clar că vreau doar pe cei ajutoare incluse în proiectul meu o dată. Dar dacă eu sunt atent și, dacă mă gândesc de fapt, prin logica mea în mod corespunzător aceasta ar trebui să suficient doar să spun prea solicita până sus atât timp cât eu însumi nu necesită accidental faptul că același fișier în altă parte. De fapt, aceasta este o modalitate ușor mai eficiente de a face lucrurile, atunci cu ajutorul impun o dată, așa că am să-l tăiați în jos pentru a cere doar. Să luăm un pas mai departe. Acest ultim exemplu acum, versiunea 5, are o ierarhie dosar mai curat. Observați ce am făcut aici, pe mine citit în această versiune finală acum am directorul meu HTML, pe care le-am avut în tot acest timp, dar în interior de-acolo acum este doar lectures.php index.php,, week1.php și week2.php. Include directorul de acum trăiește alături de directorul de HTML, astfel, la același nivel ca și un frate, ca să spunem așa. Deci, nu folderul template-uri. Cheia aici este livrata acasa, m-am prezentat structura de un pic mai mult, dar caracteristica cheie este faptul că acum numai fișierele care trebuie să fie accesibile de web, public adresabil printr-o adresă URL pe internet publice sunt în directorul meu HTML. Fișiere Între timp, alte, helpers.php, footer.php, header.php, care sunt, fără îndoială, poate mai sensibile, Poate că ajutoarele de fapt, are cateva nume de utilizator și parole sau unele intelectuală proprietatea mea, funcționează chiar nu vreau ca lumea să vadă, chiar dacă accidental. E o bună practică să țină departe de director publice HTML orice fișiere care nu se trebuie să fie publice. Tot ce trebuie să faceți în acest caz, atunci când se uită la, de exemplu, directorul HTML index.php fișier, observați trebuie doar sa fie un pic mai atenți atunci când solicită sau necesită o dată acest fișier. Am nevoie să faci prima dată .. pentru a merge la directorul părinte, atunci nu / include / helpers.php pentru a se arunca cu capul în jos în a obține fișierul pe care îmi pasă. Orice întrebări, apoi pe MVC sau aceasta incarnare relativ simplă cu privire la aceasta? Și permiteți-mi să fac clar faptul că ne-am concentrat destul de un pic pe V aici, punctele de vedere și de factoring din aceste șabloane. Noi nu am distins cu adevărat M din C doar încă. De fapt, există într-adevăr nu este aici M, C și chiar noastră, controler, nu se face într-adevăr tot atât de mult, dar veți obține mult mai mult familiarizați cu aceste două scrisori de la 2 MVC, sau, mai degrabă, veți obține mult mai familiarizați cu C în MVC pentru set de probleme 7, deci nu e mai mult de faptul că la orizont. Întrebări? Nu e nimeni aici, de fapt. Bine, să trecem acum la subiectul al doilea și ultimul pentru ziua de azi. Aceasta este introducerea unei baze de date. Până în acest moment am avut câteva modalități de stocare a datelor. Ne-am folosit variabile. Înapoi în fișierul nostru de C, I / O discuție pe care am inceput sa folosesc fisiere text și folosirea fișierelor cum ar fi fprintf, iar apoi am început chiar vorbesc despre CSV depune un pic, valori separate prin virgulă, astfel încât toate acestea ne-a permis să avem datele stocate fie non-persistent sau persistent. Dar chiar CSVs nu sunt cu adevărat favorabile pentru căutarea și inserarea și ștergerea. E într-adevăr doar un fișier text prost separate prin virgule rând de rând cu rând cu rând, deci, dacă doriți să cauta acel fișier tot ce poți face este într-adevăr căutare liniară. Trebuie să înceapă de la partea de sus a fișierului, citește totul în, și căutați pentru o anumită valoare a dobânzii. Dacă doriți să inserați în el va trebui să facă același lucru, iterarea peste ea și introducerea într-un loc special, și, de fapt, trebuie să faci tot logica căutare tine. Nu se poate face de model de potrivire inteligent pe un fișier CSV dacă nu vă scrie codul. Nu se poate face filtrarea a unui fișier CSV excepția cazului în care vă scrie codul. Nu ar fi frumos dacă cineva pune în toate eforturile pentru a face de fapt, căutarea ușoară și o inserare ușoară și ștergerea și actualizarea și așa mai departe? Asta e exact ceea ce este o bază de date. SQL, Structured Query Language, este încă o altă limbă că vom introduce astăzi aici, dar acest lucru este destul de accesibil si, și ceea ce ne adevărat de gând să faceți este să smulgă doar din ea unele dintre cele mai proeminent Caracteristicile astfel încât pentru PSET 7, și dacă faci ceva pe web, proiectul final, aveți posibilitatea de a vă exprima în termeni de interogări de date. Aveți posibilitatea de a stoca un pic sau o mulțime de date într-un mod mult mai structurat, care va la sfârșitul zilei face viața mai ușoară, deoarece cu SQL vă puteți exprima mult mai precis, mult mai metodic, în scopul de a mă întorc unele subset de date dintr-un corpus mare de date. Vă puteți gândi la o bază de date, în acest caz, o bază de date SQL, într-adevăr cum ar fi Excel sau Numere unde este o foaie de calcul, sau poate mai multe foi de calcul, precum și o foaie de calcul, desigur, are rânduri și coloane, și asta pentru că Baze de date SQL sunt relațional, relațional, în sensul pe care le stoca date în ceea ce privește aceste tabele, rânduri și coloane. Ele sunt mai mari performantă decât ceva ca o foaie de calcul, și o foaie de calcul este menit să fie folosit de un om. O bază de date este menit să fie folosit de un programator scrierea de cod împotriva sa, astfel încât întruparea unei baze de date este de gând să fie linia de comandă. Una dintre cele mai populare baze de date relationale acolo este, din nou, MySQL, care este minunat gratuit, de fapt foarte mari, iar acest lucru este ceea ce Facebook folosit foarte devreme și într-o oarecare măsură, și astăzi pentru a stoca o mulțime de date sale, și vom vedea într-o clipă că folosind comenzi relativ simple putem selecta date, date insera date, actualizare, șterge datele și cum ar fi, dar din fericire, există o mult mai user-friendly interfata decât tastarea într-un prompt alb-negru aici. Vom folosi pentru PSET 7 și dincolo de un instrument gratuit numit phpMyAdmin. Numele este o coincidență. Instrumentul se întâmplă să fie puse în aplicare în PHP, dar asta e irelevant fundamental. Ce e utile despre phpMyAdmin este că este un utilitar web-based. L-am pre-instalat în aparat pentru tine, și cu el puteți crea tabele într-o bază de date, aveți posibilitatea să inserați date, ștergeți datele, și, în general, a se vedea datele într-o destul de user-friendly mediu. Utilizatorii dvs. nu sunt de gând să folosească phpMyAdmin. Aceasta este de fapt doar un instrument administrativ sau dezvoltator cu care să vadă și să scormoni în jurul valorii de datele dumneavoastră și dea seama cum să-l structureze, mai mult ca te-ai putea folosi Excel sau numere, dar va fi o modalitate foarte bună de vizualizare ce se întâmplă sub capotă astfel încât să vă puteți concentra pe problema interesanta rezolvare și nu atât de mult privind comenzile arcane. Să aruncăm o privire la un exemplu de date care ar putea fi stocate tabularly într-o bază de date relațională. Iată un astfel de exemplu. Acum, din păcate, phpMyAdmin a săvârșit o eroare pe partea de modul arunca prea multe cuvinte și grafică la tine, dar dacă vă perfecționa în doar pe Coloana ID, numele de coloană de utilizator, iar coloana hash, aceasta este de fapt o foaie de calcul, dar se întâmplă să fie un fragment a unui tabel în interiorul aparatului de utilizând un fișier care vă oferim în set problema 7. În special, vă oferim un fișier care reprezintă unui utilizator tabel, astfel încât o foaie de calcul care conține utilizatorii cu 3 coloane, dintre care unul este un ID unic începând de la 1 și se crește ulterior. Doua coloană este un nume de utilizator, și aceia dintre voi care au facut Hacker, Ediție Hacker pentru PSET 2, s-ar putea să recunoască unele dintre aceste nume de utilizator, cel puțin. Pe partea dreaptă sunt parolele, dar nu sunt parolele literale. Sunt hash al acestuia, astfel încât se pare că stocarea parolelor într-o bază de date este o idee foarte proastă. Ati citit, probabil, toate la un moment dat de unele site-ul sau baza de date o companie a lui să fie compromise, iar apoi va trebui să schimbați parola, aveți nevoie pentru a obține restituiri asupra lucrurilor pentru că un tip rău, de fapt a intrat în contul dvs. ca un rezultat. Stocarea parolele în text clar, necriptate într-o bază de date este complet stupid, și totuși e foarte amuzant apoi pentru a citi despre unele companii foarte bine cunoscute uneori în bazele de date ale căror presa sunt compromise, și că o parte nu este amuzant, dar faptul că bazele de date conțin necriptate parole este ridicol, deoarece literalmente, cu o linie de cod vă puteți proteja împotriva acestei amenințări special, și asta e ceea ce am făcut aici. Chiar și pentru mica noastră fals CS50 versiune Finanțe suntem criptare parole doar pentru o bună măsură, și faptul că toate aceste parole încep cu $ 1 $ este doar o convenție. Asta înseamnă că sunt criptate sau foarte trunchiată, care este ca o funcție de criptare într-o direcție , prin care nu se poate inversa efectele sale cu ceva numit MD5. Faptul că 50 este, după ce inseamna ca o sare de valoare de 50 a fost folosit pentru hashing toate aceste parole, cu excepția pentru unul. A mea, desigur, după cum puteți vedea acolo, HA, a fost folosind o sare diferită, astfel încât cei dintre voi care s-au ușor piedică Poate că în Hacker 2, care ar fi putut fi rezultatul noastre au folosit un hash diferit decât altele, deoarece parola mea este de fapt aceeași ca unii alt utilizator acolo. De fapt, dacă ați fost de așteptare toate aceste săptămâni pentru a afla ce aceste parole au fost aici au fost parolele pe care le au fost contestate a sparge în ediția Hacker de set de probleme 2, deci nu prea complicat. De fapt, lui Malan a fost aceeași ca și jharvard, dar dacă ne întoarcem s-au uitat diferit. Concentrați-vă pe jharvard în purpura, deoarece acestea au fost sărate diferit. Algoritmul a fost perturbat într-un mod care hash valoare, valoarea criptat arată un pic diferit deoarece intrările au fost ușor diferite, dar sub capota parola era încă în cele din urmă Crimson. Acum, cui îi pasă de asta? Ei bine, vă oferim cu utilizatorii de eșantionare, numele de utilizator eșantion și rosturi ale lemnului de parolele lor, astfel că aveți de fapt, unele clienții pentru CS50 Finanțelor atunci când vei ajunge primul pe sol, cu codul. Va trebui să pună în aplicare mai multe mese in interiorul MySQL, în interiorul bazei de date. Va trebui să creați foi de calcul mai multe, în mod eficient, dar am decis să vă dau asta pentru a obține ai început, și veți vedea că problema setul caietul de sarcini merge de-a lungul procesului de import acestui tabel și, de asemenea, să explice ceea ce unii dintre caracteristici sunt, și veți vedea, de asemenea, că noi vă oferim cu codul să se ocupe de hashing sau de criptare a acestor parole, astfel încât nu aveți nevoie să vă faceți griji prea mult despre ceea ce MD5 sau ca este de fapt vorba. Deci, SQL, Structured Query Language. Acest lucru este, pur și simplu, limba suntem pe cale de a începe să utilizați în PSET 7 și, probabil, dincolo de a solicita date din baza de date ceva. Datele sunt, din nou, stocate tabularly în aceste tabele relationale, coloane, și rânduri, dar folosind unele sintaxă relativ simplu ca de ștergere, insera, actualiza și selectați putem face exact acest lucru. Putem șterge din baza de date, introduceți, actualizați datele, precum și selectați, care este, regăsirea datelor din baza de date. Cum putem merge despre a face acest lucru? Lasă-mă să merg înainte în aparat. Lasă-mă să trageți în sus http://localhost, care, din nou, este aparatul local de sine. Asta e porecla sa implicită. Și lasă-mă să merg la / phpMyAdmin. Acest lucru se întâmplă să fie un URL special care aparatul este preconfigurat pentru a înțelege că imediat mă solicită un nume de utilizator și o parolă. Ca de obicei, am de gând să tastați jharvard și crimson, dar seama că e cont de administrator pe computer. E doar o coincidență că există, de asemenea, un jharvard înregistrat pentru CS50 Finanțelor. Jharvard, Crimson, enter îmi dă interfața cu utilizatorul pe care am văzut- o bucatica de un moment în urmă, și este un pic coplesitoare la prima, dar fiți siguri, nu sunteți niciodată de gând să trebuie să faceți clic pe link-urile de cele mai multe în acest instrument. Vei ajunge folosind un subset mic, care sunt super utile, dintre care prima este de baze de date aici. Dacă mă duc până la baze de date, observăm că mă solicită să creați o bază de date. Aceasta este cum ar fi crearea unui nou fișier Excel, în mod eficient. Am de gând să merg mai departe și numesc acest curs, iar eu sunt doar de gând să ignore câmpul acolo, colaționare. Ea are de a face cu reprezentarea datelor în aceasta, și am de gând să faceți clic pe Creare, iar acum observa ca am dat drumul de a crea pe partea stângă în cazul în care acesta spune ca nu baze de date Ar trebui să vedem în curând baza de date curs. Dacă aș faceți clic pe acum la partea stângă, baza de date curs, observați file mele se schimba un pic. Am structură, SQL, export, import și alte lucruri. Structura este destul de mult gol. Nu există tabele găsit în baza de date, așa cum se spune aici, așa că hai să creați un tabel, și să mergem mai departe și de a crea un tabel ca elevii, și cât de multe coloane vrem? Record Să menținem acest simplu, și hai să pentru fiecare elev un număr de identificare, un nume, si o adresa de email. Vom păstrați-l simplu ca asta, deci 3 coloane, du-te. Forma pe care o vedeți aici este acum un pic dezordonat și copleșitoare, dar trebuie doar să treacă prin ea rând cu rând, astfel încât într-adevăr să dăm repede prima coloană din această bază de date un nume de identificare pentru identificatorul unic. Acesta va fi un număr întreg. Eu pot ignora de fapt, lungimea și valori. O int va fi 32 de biți indiferent de ceea ce tastați acolo, așa că hai să lăsați-l necompletat. Valoarea implicită, aș putea face asta nul, astfel cum este definită. Am de gând să părăsească în pace. Sa nu vă faceți griji despre valorile implicite. Să defila pe aici la atributele potrivite,. Acest lucru este interesant. Să mergem mai departe și oarecum arbitrar spun că ID-uri trebuie să fie nesemnat. Să nu pierdem nici numere negative. Să mergem 0-4 miliarde, da sau de a lua, și atunci să nu atingeți oricare dintre aceste domenii încă acolo, dar atunci să-mi scrieți numele aici jos, și apoi celălalt a fost de e-mail, astfel încât captură este de e-mail și numele, evident, nu întregi, așa că hai să schimbe acestea la un domeniu diferit. Se pare VARCHAR, lungime variabila char, este ca un șir într-o bază de date SQL dar o lungime variabilă, iar tu de fapt, trebuie să-l spun în avans Lungimea maximă a șirului, așa că am de gând să oarecum arbitrar de tipul convenție de 255 de caractere. Am putea spune cu totul 32. Am putea spune 1000. Ai un fel de nevoia de a decide pentru tine bazează pe datele demografice dvs. ceea ce este cel mai lung nume elevului și du-te cu acest număr sau un pic mai mare, dar ceea ce este frumos despre un varchar este nu este de gând să deșeuri 255 de octeți pe numele fiecărui student. Dacă e DAVID nu este de gând să utilizeze un întreg 255 octeți, dar asta e un legat de sus, așa că voi merge cu 255 doar prin convenție, dar am putea dezbate, care să fie o valoare mai mică, și pentru adresa de email doar pentru a fi în concordanță 255, dar, din nou, am putea avea aceeași dezbatere. Dar am de gând să fac un lucru pe aici, pe partea dreaptă. Ce este puternic despre o bază de date este că se poate face o mulțime de ridicare grele sau lucrări complexe pentru tine. În special, eu chiar nu-mi pasă ce numărul de studenți meu de identitate sunt. Este doar menit să fie un identificator unic într-o bază de date așa că am avea o reprezentare pe 32 de biți succintă a studenților astfel că am un mod de a identifica unic ele ca nu cumva exista 2 Davids, de exemplu, într-o clasă. De fapt, am de gând să bifați această casetă de AI, auto increment, astfel încât baza de date, MySQL, cifrele din ID-ul de ceea ce fiecare student nou introdusa se va fi. Eu nu am nici să le pese de faptul că, în codul meu, și am, de asemenea, de gând să aleagă ceva sub meniul index. Indicele drop jos aici a primară, unic, index și textul integral. Puteți ghici ce poate o pereche de aceste lucruri sunt, dar se pare că în baze de date relaționale vă programator sau administratorul bazei de date pentru a ajunge preventiv da indicii pentru a bazei de date cu privire la ce domenii într-un tabel sunt un pic aparte. De exemplu, în acest caz, am de gând să spun că ID-ul va fi un indice principal, altfel cunoscut ca o cheie primară. Ce înseamnă acest lucru este faptul că, prin definiție, ID-ul de acum înainte va identifica unic studenți în acest tabel. Nici un student nu va avea același ID pentru că eu sunt impunerea acestei constrângeri sau acest indice. Mai mult decât atât, ce se va face pentru mine este o să spună MySQL ca ID-ul este special. Îmi pasă în special despre ID-ul, merge atât de departe și de a face magie structura de date fantezie a lui, construi un fel de copac. De obicei e ceva numit B-arbore, pe care nu ne-am uita la săptămâni în urmă, dar e alta structura de date, cum ar similare în spirit copaci binare și încearcă pe care ne-am uitat la, dar se va spune la baza de date acest domeniu este atât de important că am, probabil, doresc să fie în măsură de a căuta pe el, mergeți mai departe și construi unele de lux structură de date în memorie pentru a accelera căutările, astfel încât în ​​mod ideal, sunt constanta de timp sau cel puțin la fel de apropiat de cel în care este posibil astfel încât să nu revină în căutare liniară, care nu va fi cel mai performant abordare. În schimb, adresa de e-mail ar fi putut fi o cheie primară. În teorie, adresa de e-mail a tuturor este unic, cu excepția cazului în ai împărtăși câteva cont, dar nu este, în general, bine să utilizați ceva de genul un șir ca o cheie primară pentru că, dacă scopul său în viață este de a identifica unic rândurile din tabel nu există nici un motiv pentru a utiliza la maximum 255 de octeți pentru a identifica unic cineva dacă puteți obține departe cu doar 4 octeți sau o int 32-biți. În general, o cheie primară trebuie să fie scurt și concis și în mod ideal, ceva de genul un întreg sau o int mare, care se întâmplă să fie pe 64 de biți. Dar o adresă de e-mail trebuie să fie unic, și una dintre caracteristicile unei baze de date prea este de a pune în aplicare unicitatea pentru mine. Prin selectarea unic de aici de lângă e-mail, chiar dacă el însuși e-mail este defilat în afara ecranului, spun la baza de date nu ai încredere în mine. Nu mă lăsa să introduceți în baza de date adresă e-mail de două ori același, chiar dacă eu sunt un idiot și nu sunt foarte bună cu IFS mele si IFS altă și cod PHP reală și am lăsat accidental utilizatorul inregistreaza-te cu o adresă de e-mail existentă Baza de date este încă un alt nivel de aparare pentru corectitudinea pentru a se asigura că această adresă de e-mail duplicat nu se termină în tabel. Acum, în schimb, pentru numele pe care, probabil, nu vor să facă asta unic pentru că atunci nu ar putea niciodată să fie 2 Davids sau 2 Smiths Mike, de exemplu, în baza de date, astfel încât unul vom lăsa pur și simplu în pace. Am de gând să merg mai departe și faceți clic pe Salvare dreapta jos, si totul arata bine, dar observați aici aceasta este o parte pentru că acum nu vom petrece prea mult timp pe deoarece sintaxa este un complex mic, iar noi nu trebuie să creeze tabele toate că de multe ori, dar SQL este un limbaj în sine, Sintaxa pentru care este chiar aici, pe care le-am subliniat. Ceea ce într-adevăr este phpMyAdmin se creează un GUI web-based pentru tine cu care puteți economisi timp și nu trebuie să tastați manual afară o interogare SQL destul de lungă de genul asta. Cu alte cuvinte, dacă ai vrut să creați manual acest tabel, fie la faptul că phpMyAdmin alb-negru rapidă sau chiar în prin folosirea acestui tab altă parte, această filă SQL în cazul în care aveți posibilitatea să tastați în orice interogări SQL vrei, sincer, acest lucru ar fi luat-mi un minut să-și amintească de fapt, întregul sintaxa, și chiar și atunci probabil că ar avea a făcut unele erorile de scriere, astfel încât acest instrument este util pentru lucruri de genul asta, si este, de asemenea instructivă. Puteți începe să deducem ceea ce este sintaxa doar prin culoare frumoasa de codificare, care phpMyAdmin este adăugarea pentru comfortul nostru vizual. Dar acum să faci asta în loc. Lasă-mă să merg la fila Inserare la partea de sus, și lasă-mă să merg mai departe și introduce, de exemplu, un ID de să zicem, de fapt, nu-mi pasă. Se va auto increment. Mă duc să lase afacerea baza de date cu asta. Dar eu trebuie să fie pe David, si e-mailul meu ar trebui să fie malan@harvard.edu. Să mergem mai departe aici și pune în Mike Smith ca un altul. Îți dau eu un nume de familie, precum și, și vom l-am fi smith@example.com, și apoi în cazul în care nu merg mai departe? Ei bine, se pare ca mergem este să faceți clic pe butonul, și voila. Observați la primele 2 rânduri inserate. Aceasta este, de fapt interogare SQL. Asta e unealta phpMyAdmin executat pentru mine, dar rezultatul final, preaviz, dacă mă duc acum la fila răsfoire, este de a vedea 2 rânduri în acest tabel, foarte amintește punct de vedere estetic din tabelul am văzut mai devreme pentru utilizatorii noștri din PSET 7, dintre care unul este David Malan, dintre care unul este acum Mike Smith. Dar, doar pentru a fi clar, nu am nevoie să utilizați phpMyAdmin, și într-adevăr, ai de gând să fi scris în curând codul pentru PSET 7 care automatizează procesul de adăugare rânduri, ștergerea rândurilor, actualizarea rânduri și cum ar fi, asa ca lasa-ma sa plec loc la fila SQL aici și de tip în * select de studenți în cazul în care email = "malan@harvard.edu." Cu alte cuvinte, să presupunem că aveți acum o anumită formă HTML, precum și tipurile de utilizatori din adresa de e-mail lor, printre alte domenii, și obiectivul este acum în PHP pe codul de back end pentru a uita de fapt, pana detaliile care altor utilizatori. Care este numele tău complet? Care este ID-ul dvs.? Ai putea scrie o interogare SQL ca aceasta, selectați * de la elevi în cazul în care e-mail = "malan@harvard.edu." Și dacă mă duc apoi faceți clic pe, observați că eu ar trebui, într-adevăr, și eu nu, mă întorc doar un singur rând. Mike este omis din acest set de rezultate, ca colectarea de rânduri este, în general, numit, pentru că el nu are adresă e-mail la fel ca mine. Acum, din nou, aici, pentru PSET 7 vei folosi phpMyAdmin ca un instrument administrativ și un instrument pedagogic pentru a afla calea ta în jurul valorii de lumea de SQL, dar la sfârșitul zilei ai de gând să fi scris aceste interogări în interiorul codul actual PHP, și stați așa acordat în prezentare Zamyla în special, în cazul în care veți obține un tur al codului de distribuție pentru acest set de probleme în cazul în care v-am dat nu numai de estetica pentru pagina de logare și logo-ul frumos sexy, care spune CS50 Finanțe, dar am dat de tine, de asemenea, o grămadă de funcții care vor face viața un pic mai ușor. Am scris, de asemenea, o parte din PSET pentru tine, porțiunea de conectare a acesteia, în special, pentru a vă oferi un sentiment de un design reprezentativ care utilizează un controler de fapt, de exemplu, index.php, login.php și cum ar fi, și apoi veți vedea PSET are de asemenea un director șabloane care are toate punctele de vedere, toate estetica. Și astfel fluxul de lucru general în PSET 7 se va fi faptul că utilizatorii vizitati o controler prin intermediul unui URL într-un browser. Că operatorul conține cod PHP pe care ai scris, si in interiorul codului PHP ar putea fi unele linii de SQL imbricate între ghilimele duble și a trecut la o funcție de interogare numit am scris care vă va ajuta să vorbești cu baza de date fără a utiliza ceva de genul un instrument administrativ ca phpMyAdmin. Vei fi capabil să scrie declarații SQL în cod PHP și mă întorc o matrice PHP a setului de rezultate, din rândurile care se potrivesc de fapt, acea interogare. Și în mod similar va fi capabil să facă insertii sau șterge sau actualizări sau similare, sintaxa pentru care este destul de similar, și veți vedea de la câteva referințe on-line, de la codul de distribuție și de la sine PSET ambalaj exact cum de a merge despre a face acest lucru. Seama în cele din urmă suntem cu adevărat doar zgarieturi suprafața de SQL și al MySQL, dar puterea într-adevăr este că te elibereaza să se concentreze pe problemele pe care doriți să rezolve, în cazuri de utilizare pe care doriți să pună în aplicare fără a fi nevoie să vă faceți griji la fel de mult, cel puțin la început, despre unde și cum să stocați și să căutați baza de date, și acest lucru este destul de literalmente în cazul în care Facebook a inceput sa se folosind MySQL și apoi folosind mai multe servere MySQL si apoi mai multe servere MySQL Înainte de mult timp până când, apoi a trebuit să înceapă cu adevărat gândesc mult la cum să stochează date, cum de a stoca lucrurile chiar mai eficient, Deci, chiar daca vom lua de la sine faptul că indicii și constrângerile unice și așa mai departe lucreze doar acolo e o conversație foarte interesantă că acest lucru poate duce în cele din urmă tot la, astfel seama că suntem zgarieturi doar de suprafata a ceea ce ar putea în cele din urmă pentru tine sau pentru proiectele tale devin destul de un pic de date mari. Cu care a spus, hai sa se termine aici, și ne vedem săptămâna viitoare. [CS50.TV]