[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]