[MUSIC JOC] DAVID J. MALAN: În regulă. Bine ai revenit. Acest lucru este CS50. Acesta este sfârșitul săptămânii 8. Și, după cum știți, avem destul de orelor normale în câteva din sălile de mese, inclusiv Annenberg. Și o parte din echipa de amabilitate a luat câteva fotografii în ultima vreme. Și în onoarea lui Halloween, ne-am gandit împărtășesc una care mai degrabă ne-a prins de către surpriză aici, în Annenberg Hall doar noaptea. Colegul tău Iacov a pozat pentru această fotografie, dar a fost mai mult amuzant a fost pe Facebook, a urmat conversație ce sa întâmplat după aceea. Primul său post răspuns pentru a fotografia lui a fost aceasta. Câteva minute mai târziu, el a decis una la el cu asta. A mers pe atunci pentru a merge la acest lucru, și apoi, chiar mai amuzant este atunci când mama lui chimed în. Și apoi în cele din urmă, se pare că acest lucru a fost doar un șiretlic minunat pentru o joacă ce se intampla. Așa că, dacă doriți pentru a vedea Iacov și alții, printre ei Cynthia Meng, cine e în spatele scenei de personal zone CS50, cap de la această adresă URL și acest joc aici. Deci, fără alte formalități, astazi am continua această gasiti programare web, și crearea efectivă a programelor care nu intră la linia de comandă, dar în loc să ruleze în interiorul unui browser. Probabil acum, sau aveti la scurt timp, veti pentru a fi în mijlocul de punere în aplicare serverul de web proprie, care este diferit de programare web. Serverul de web în pset6 este despre toate software-ul care știe cum să ia scris Cereri HTTP de la un browser, sau chiar de la tine, un om, cu un program numit Telnet, și apoi răspunde acestor solicitări, fie de scuipa un fișier HTML, sau un jpeg, gif sau o, sau chiar un fișier .php. Dar cu un server de web, nu e ar trebui să deschidă un fișier PHP, ceva se termină în .php, și apoi scuipa conținutul. Ar trebui să faci ceea ce la acel fișier în primul rând? Ca să spunem așa. Nu-l compilați, ne-a declarat, luni, dar rather-- Deci, interpreta. PHP este un limbaj interpretat, și așa una dintre caracteristicile cheie în dvs. de web serverul, deși pusă în aplicare de noi, este această abilitate pentru serverul de web pentru a observa, oh. Acesta este un fișier care se termină în PHP. Lasă-mă nu doar trimite-l la utilizator ca e conținut static, ci mai degrabă lasă-mă să citesc linie de linie, de la stânga la dreapta, și interpreteze. Și de a face, pentru ca tu baieti va esență, punt la un program în aparat, și pe o mulțime de sisteme informatice, Tocmai a sunat PHP. Care este numele de PSP interpret propria limbă a lui. Astfel, că piesa punem în aplicare pentru tu, și ceea ce a mai rămas pentru tine, în cele din urmă, este un număr de bucăți, dintre care este de punere în aplicare sprijin pentru conținut static. Dar acum, și cu problemă a seta șapte, ești va începe să trecerii la scris de fapt codul PHP care devine interpretat în a vorbi la un capăt înapoi bază de date care stochează informații. Deci, haideți să înțeleagă mai bine în primul rând o pereche de aceste superglobals și doar cât de mult putere iesi din cutie pentru drum liber cu un limbaj ca PHP. Lucruri pe care nu le au să te pună în aplicare. Așa că, am văzut pe luni $ _GET, care este o superglobale, care este doar PHP vorbi de un global variabila puteți accesa oriunde. Si ceea ce este în interiorul $ _GET? Ce e în interiorul acestei superglobale pe care o vedem? Cu siguranță statistic la cel puțin o persoană știe. Ce se află în interiorul de $ _GET? Da? Audiența: E variabilele ai pus în șirul de interogare. DAVID J. MALAN: Perfect. E variabilele te pune în șirul de interogare. Astfel, în exemplul nostru mai în vârstă de reimplementing Google atunci când am avut o adresă URL, iar apoi semn de întrebare, care delimitează începutul HTTP parametri, atunci am avut q egal ceva, cum ar fi q este egal cu pisici, ce s-ar merge în mod automat în interiorul din care _GET $ super-global pentru tine, din cauza PHP, este o cheie de Q, și de valoare a acestora de pisici. Cu alte cuvinte, $ _GET și toate aceste lucruri sunt tablouri asociative, tabele de dispersie de soiuri, care chei magazin și valori. Acum, înapoi în pset5, hash tabel s-ar putea fi puse în aplicare, sau să încercați-ar putea au pus în aplicare, într-adevăr a fost efectiv o asociativ matrice, o structură de date prin care puteți asocia chei cu valori. Dar, în pset5, valorile au fost banal. Valoarea a fost, în esență, adevărat sau fals. Este cuvântul în dicționar? Așa că, atunci când distribuit un cuvânt ca de mere pentru a vedea dacă Apple este în dicționar, funcția de verificare probabil a revenit adevărat sau fals. Deci, asta e eficient Valoarea primim înapoi. Dar am văzut pe luni pe scurt, puteți cu siguranță asocia mai interesant valori decât doar adevărat sau fals cu chei, cum ar fi mere. Ai putea reveni de fapt o șir arbitrar, și într-adevăr, asta e ceea ce $ _GET și acestea alte variabile lasa sa faci. Deci, $ _POST este similară în spirit, dar dacă trimiteți un formular prin poștă, o metodă HTTP diferit, care este folosit pentru lucruri cum ar fi carduri de credit, și informații private, și chiar informații binare cum ar fi fotografii, aceste lucruri pune in interiorul $ _POST. Și de fapt pentru fișiere cum ar fi JPEG-urile și fleacuri, există chiar și un altul care nu e aici numit $ _FILES la fel de bine. Așa că, serverul nu vom insista prea mult, dar îți dă acces pentru a sorta de mai mici detalii de nivel de aproximativ serverul în sine pe care îl utilizați. Cookie și sesiune, deși, vom vedea în mod eficient în prezent. Ultimul este ceea ce am folosi pentru a pune în aplicare noțiunea de un coș de cumpărături. O singura super-simplu, dar rechemare că am avut acest exemplu aici, de numărare de câte ori a vizitat aceasta pagina înainte. Dar astăzi, mai degrabă decât doar uita-te la efectul acestei, să deschidem Inspector Chrome, pe care le puteți, de obicei, face prin clic dreapta sau Control click oriunde pe o pagină web, și apoi alegeți inspecta elementului. Sau poti sa te duci prin meniuri pe care le descrie în spec pset6 lui. Și am de gând să fila Rețea aici, și să urmăriți pentru o clipă traficul HTTP care este merge înainte și înapoi. Lasă-mă să merg mai departe în primul rând și cache clar Chrome. Deci, unii dintre voi s-ar putea să fie familiarizați cu aceasta tehnica deja, și vom folosi pentru scopuri de depanare aici. Acum, noi, ca de calculator oamenii de stiinta sunt de gând să înceapă face acest lucru pentru depanare scopuri, în care vom șterge memoria cache, în mod tipic, astfel încât să ne poate scăpa de lucruri numite cookie-uri. Deci tu esti, probabil, în general familiar cu ce cookie-urile sunt, sau cel puțin că acestea există, dar ceea ce este înțelegerea dintre ei, ca doar un utilizator de computere, ceea ce este un cookie? Da. Audiența: E un pic de-- bine, nu bit într-un termen de informatică. E o bucată de date pe care un site-ul trimite la tine în ordine pentru a putea înregistra statisticile pe tine. DAVID J. MALAN: OK, bine. Deci, este o bucată de date pe care un serverul, pune pe computer, și să-l mai generală, chiar mai mult, este o cheie value-- bine, că din ce în ce mai precisă. Este o bucată de informații, o bucată de date, că un server este capabil pentru a pune pe computer și de foarte multe ori, serverul face acest lucru în așa fel încât să-și amintească cine ești. Deci, de exemplu, cote sunt esti, probabil, conectat la site-uri precum Facebook, sau Gmail, sau alții înainte, și vă conectați cu dvs. numele de utilizator și parola, și apoi, după care, pentru un numar de minute sau ore sau chiar zile, serverul își amintește că vă sunt, de fapt, autentificat. Acum, cum se întâmplă că, de fapt? Pentru că tu cu siguranță nu ești rescrie numele de utilizator și parola de fiecare dată navigați la o Pagina diferit pe Facebook. Deci, se dovedește cookie-urile sunt răspunsul. Un cookie vă puteți gândi ca, Un fel de, o mână digitală ștampila care v-ar ajunge la un distracții parc sau un club care, în esență, indică faptul că au fost aici înainte, și ai deja arată ID-ul dvs. de bouncer, pentru exemplu, și că clubul sau parc ar trebui să-și asume acum că te s-au autentificat deja. Ați fost deja identificate de aceasta. Deci, cu asta în minte, hai sa deschidem contra aici. Lasă-mă să merg mai departe, am făcut-o, și șterge toate cookie-urilor mele. Și acum, ce am de gând să faceți este să țineți apăsat Shift, doar pentru o bună măsură, și cu forța să reîncărcați pagina. Shift doar asigurați-vă că că nimic nu se memorat in cache. Și aici este cererea că mers înainte și înapoi. Deci, aici avem o cerere, apoi permiteți- mă apropia aici, și o mulțime de acest este un fel de detalii neinteresante pentru acum că browser-ul are în mod automat a trimis, dar haideți să faceți clic pe Vizualizare Sursă pentru a vedea antetele prime. Și dacă v-ați scufundat în pset6 deja, veți recunoaște cu siguranță lucrurile în acest fel, și poate că unele din aceste alte linii de aici, dar ceea ce este mai interesant pentru ziua de azi dacă am defilați în jos, nu la cererea dar la așa-numitul răspuns, această linie, probabil, pare familiar. Asta e un lucru bun când vezi un 200 OK. Aparent aceasta este data și ora de pe server și există o grămadă de lucruri. Oh, acest lucru este interesant. Se pare că de fiecare dată când utilizați PHP, cel puțin în acest server, serverul scuipă ce versiune de PHP pe care o utilizați. Ceea ce, de fapt, de securitate scopuri, nu este un lucru bun. Dar, ne vom întoarce la care altă dată, poate. Dar acum aceasta este linia suculent astăzi, și am văzut pe scurt unele dintre acestea, Cred ca te cu Facebook atunci când am bagat în jurul valorii de inspectorul la acel moment, set cookie este ceea ce este de plantare că bucățică de informație pe computer. Acesta este un antet HTTP care este efectiv spune browser-ul dvs., Chrome, IE, indiferent de, hei magazin browser-ul pe Consumatorului hard disk, sau în memoria RAM a utilizatorului, o cheie numita PHPSESSID, care este un notație prescurtare pentru ID-ul de sesiune, și dau o valoare de 0vlk8t, punct, punct, punct. Un pseudo foarte lung șir alfanumeric aleatoare. E doar un număr foarte mare, dar este codificat cu litere și cifre astfel încât dimensiunea aceasta poate fi chiar mai mare decât numere singur. Și apoi, apropo, Path = /, care înseamnă doar că acest cookie trebuie să fie Asociat cu totalitate a site-ului, nu doar de un anumit Pagina totul. Deci, aceasta este faptul că ștampila mână virtuală. E ca și cum server, Facebook, sau în cazul nostru aparatului, are 0vlk8t literalmente scris și așa mai departe, pe mâna ta. Observați ce a serverului, a nu face este nu e stocarea numele meu de utilizator, cu siguranță, Nu stocarea parola. În schimb, se pare a fi stocarea de informații pseudo-aleatoare astfel încât nimeni nu poate ghici ceea ce ștampila mâna mea este. Pe partea de server, Între timp, serverul este de gând să ne amintim, probabil, într-o bază de date sau ceva, că utilizatorul, care în viitor prezintă o ștampilă mână de 0vlk8t, dot, dot, dot, ar trebui să fie asociate cu acest special coș de cumpărături, ca să spunem așa. Cu alte cuvinte, dacă acum mă duc înapoi aici și reîncărcați această pagină, cum știe pe server că am vizitat o dată? Sau, dacă o fac din nou, cum se serverul știu că am vizitat o de două ori? Ei bine, dacă mă duc în jos la acest cel mai recent cerere, care este acum a treia pe care le-am trimis în total, observați cererea mea acum. Nu există încă acest solicita până aici, la fel ca și mai înainte, există încă o mulțime de lucruri pe care le-am ignorat ca și mai înainte, dar în ultimul antet, acest timp, pentru că am fost aici înainte, este o prezentare a acest timbru mână virtuală. Prin aceasta linie de aici, nu sunt setate cookie dar colon cookie PHPSESSI = 0vlk8t, asta e doar a browserului meu automată Prezentarea acestui timbru mână, astfel încât acum server, de îndată ce își dă seama, ooh, aceasta este utilizator 0vlk8t dot, dot, dot, Îmi amintesc acum care el sau ea este și reassociate cu acel utilizator, indiferent de Informații vreau, și toate aceste informații pot fi stocate de către tine, programator, în $ _SESSION. Deci, să fie clar, dacă am deschide foarte repede în gedit acel fișier real, counter.php, în directorul meu gazdă publică locală ca și mai înainte, observa că, într-adevăr, Sunt în cele din urmă de depozitare în $ _SESSION Citat unquote "contra", valoarea contorului precedent care I a lua de la aceste linii aici că noi sa uitat la ultima dată plus unu. Deci, sub capota, asta-i toate cookie-urile sunt. E doar un fel de digital ștampila mână merge înainte și înapoi, și sincer dacă deschideți Chrome Inspector pe orice site le vizitați astăzi, cu foarte mare probabilitate, veti vedea, poate, unul, poate o jumătate de duzină de cookie-uri fiind amintit de tine. Și mai rău, în cazul în care cei site-ul pe care îl vizitați au toate anunțuri, care este cu siguranță destul de comună astăzi, și dacă aceste anunțuri provin de la un partid de centru, cineva cum ar fi Google AdWords sau în care acestea suna la unul din produsele lor sau alte astfel de furnizori care vinde reclame, ceea ce este interesant, și sincer ceea ce este un pic ingrijoratoare, despre cum functioneaza HTTP, este că, dacă aveți un anunț încorporat în Facebook.com, și Google.com, și Harvard.edu, orice număr de site-uri, asa ca este o astfel că există un om de mijloc care ispășește up de anunțuri de toate cele trei dintre aceste site-uri, se dovedește că cookie-uri sunt pe domeniu. Deci, dacă aveți un anunț provenind din aceeași companie pe diferite site-uri web, care firma poate urmări în mod eficient care Dacă sunteți pe toate aceste site-uri. Harvard s-ar putea să nu știu sunteți vizita Facebook. Facebook ar putea să nu știe și sunteți vizita la Harvard. Dar, indiferent de serviciu de cautare ei folosesc în cazul în care domeniu este prezent în ambele Harvard.edu web pagini și pagini web Facebook.com, acest om de mijloc cu siguranță știe cine ești din cauza acestor cookie-uri partajat peste, sau mai degrabă a, că așa-numitul intermediar. Deci, vom reveni la acest lucru în implicațiile de securitate ale acestora, dar există o mulțime de informații fiind stocate despre tine orice moment vizitați cel mai orice pagina web pe internet și este într-adevăr reduce la acest mecanism foarte simplu. Ce se întâmplă, atunci, în cazul în care esti foarte paranoic și vă decideți să mergeți în Chrome sau IE sau orice altceva și apoi opriți cookie-urile? Ce se întâmplă? Da? Tu really-- ai făcut acest drept? OK. Nu, dă-i drumul. Audiența: Anumite site-uri nu au o funcție fără a-mi place Facebook. DAVID J. MALAN: Da! Deci, anumite site-uri se va opri doar de lucru. Și în cele mai multe site-uri web in aceste zile care se bazează fundamental pe cookie-uri, mai ales dacă acestea au autentifică în, ei doar va rupe. Pentru că ia în considerare alternativă, în cazul în care site-ul nu are nici o modalitate de a amintirii cine esti, și, prin urmare, browser-ul web nu este reprezentând cu fiecare HTTP cerere de acest timbru mână, în mod eficient un site web cum ar fi in curs de Facebook de a avea pentru a vă solicita să LOGIN fiecare dată naibii vă schimbați pagini, sau faceți clic pe un link, care nu este cu siguranță un utilizator deosebit de bun experiență. Astfel încât să existe, de asemenea, este printre compromisuri. Deci, fără alte formalități, haideți să aruncăm de la sine că, odată cu programarea web, în limbaje ca PHP, vă puteți aminti informații cum ar fi faptul că, în problema setat șapte, atunci când pune în aplicare propria ta Site-ul E * Trade asemănătoare cu ceea ce cumpara și vânzarea de stocuri, vă veți aminti exact ceea ce utilizatorul a cumpărat și vândut și care el sau ea este prin intermediul acestei sesiuni. Dar vom avea nevoie de un mod crescator decât de e-mail pentru a începe păstrarea informațiilor în jurul valorii. Dreapta? Luni, am vorbit despre Frosh AI și cum în versiunea una din acel site, cu ani în urmă, tot ce am făcut a fost trimite Proctor cine e care se ocupă de sport intramural Programul, numele, și de gen, si daca au sau nu le sunt căpitan, și căminul de cineva care este înregistrarea pentru un sport intramural. Deci, nu e rău, dar el sau ea atunci A trebuit să troll prin e-mail lor, face o foaie de calcul sau ceva de genul că, pentru a păstra totul organizat. Deci, cu siguranță noi ca programatori poate face acest lucru pentru că Proctor. Și astfel intră în SQL, Structured Query Language, care este de gând să se uite destul de diferit pentru ambii C și PHP, și veți arunca cu capul în mai multe mâini pe PHP și problemă a seta șapte, dar, de asemenea, SQL, sau SQL, aceasta este o limbă care utilizați pentru a vorbi la o bază de date. Dar ceea ce este o bază de date? Ei bine, te gandesti la un baze de date, cel puțin pentru moment, ca doar fiind ca un fișier Excel, sau daca esti un număr de utilizator un fișier Mac, sau daca esti un Apps Google utilizator o foaie de calcul Google, este efectiv o bază de date, sau într-adevăr în special o bază de date relațională. O bază de date relațională este doar ceva care are rânduri și coloane, și puteți stoca orice tip de informații în aceste rânduri sau coloane. Dar ceea ce este frumos despre SQL, și despre bazele de date reale, nu doar foi de calcul sau foi de calcul Google, este că puteți folosi un limbaj pentru a executa efectiv interogări la introduce date, pentru a elimina de date, să caute date, chiar cel mai important, și tu Nu trebuie să-l folosească destul de manual cum s-ar putea de obicei un Google foaie de calcul ca aceasta. Deci, în SQL, există o grămadă de Declarații fundamentale sau piese de funcționalitate construit în. E mai mult decât acestea multe, dar poti sa te duci o distanță foarte mare doar prin știind că acest limbaj numit SQL are cel puțin patru Declarații puteți utiliza. Șterge, pentru îndepărtarea de date, Introduceți, pentru adăugarea de rânduri, Update, pentru a schimba rânduri, și Selectarea, pentru a obține înapoi rânduri și asta e într-adevăr, ceea ce face SQL. Acesta funcționează în întregime pe rânduri astfel că, atunci când introduce, sau eliminați, sau de actualizare, sau pentru a selecta ce esti intrare din nou în calitate de așa-zisul set de rezultate, ca o serie de rânduri. Un buchet de rânduri dintr-un tabel. Deci, din nou în a doua zi, și chiar la această zi, puteți interacționa cu bază de date utilizând o linie de comandă, dar nu este deosebit de distractiv de utilizat această fereastră alb-negru stil și de fapt executa comenzi și scormoni în jurul valorii de baza de date. O interfață grafică cu utilizatorul, sau GUI, este mult mai de preferat, fără îndoială, și astfel instrumentul recomandăm și preinstalat pentru tine pe aparat este numit phpMyAdmin. E o coincidență totală care Numele de acest lucru are PHP în ea, aceasta înseamnă doar că oamenii care a scris acest program s-au a scris-o în PHP. Dar este în cele din urmă cu privire la administrarea un server de baze de date, cum ar fi un server MYSQL care le-ar putea avea, în timp ce face, în aparatul CS50. Deci, există mai multe detalii aici mult trebuie să ne pese de ziua de azi, dar ceea ce este esențial este că pe stânga în partea stângă este o listă a bazelor de date că aveți pe computer, pe aparatul CS50, sau vin proiecte finale pe care le-ar putea au pe o parte terță, o societate de site-ul sau web serverul, că s-ar putea să plătiți pentru spațiu. Deci, pe stânga este baze de date, dintre care unul este pset7 pe care am împrumutat de la viitor PSET săptămâni, iar apoi pe partea de sus nu observa există o buchet de file, dintre care unul Este baze de date, SQL, statut, utilizatori, export și așa mai departe. Astfel încât să puteți merge un lung mod doar prin realizarea că cea mai mare parte a interfeței utilizator este în coloana din stânga sus și în partea de sus dreapta sus acolo. Deci, ce putem face de fapt cu asta? Ei bine, să începem crearea unui bit de informație, după cum urmează. Să presupunem că următorul text este cazul, cum va fi în doar câteva zile, pe care doriți să pună în aplicare o site-ul, numit CS50 Finante, și acest site vă permite să cumpărați cita încheiat citatul și vânzarea de stocuri. Și o să dau seama prețul de aceste stocuri, în cele din urmă așa cum veți vedea, vorbind cu Yahoo Finance. Ceea ce, minunat, are un serviciu gratuit prin care puteți trece într-un ticker stoc ca GOOG pentru Google, și se va vă dau înapoi stocul curent Google Prețul în trecut câteva minute, cel puțin. Deci, veți utiliza că, în cele din urmă, de a pretinde pentru utilizator să cumpere și să vândă efectiv stocurile si folosind bani virtuali, dar primul lucru utilizatorul va vedea este acest ecran de conectare pe care le cere pentru numele de utilizator și parola. Și astfel, unul dintre primii provocări pentru tine în pset7 va fi să pună în aplicare la sfârșitul spate baze de date, foaia de calcul dacă vreți, care va stoca nume de utilizatori și parole și în cele din urmă ceea ce a stocurilor pe care le dețin, și cât de multe și cât de mult bani au, astfel încât o grămadă de alte lucruri în alte tabele sau foi de calcul,. Deci, haideți să aruncăm o privire la modul în care acest s-ar putea părea la prima vedere. Am de gând să mă întorc la aparatul și eu sunt de gând să meargă la această adresă URL aici phpMyAdmin localhost / phpMyAdmin și veți vedea că acesta mă duce la o interfață exact așa cum am văzut la captură de ecran, și aici am au o bază de date suplimentar chemat curs pentru ziua de azi și lasă-mă să mergeți mai departe în primul rând și apăsați pe pset7. Se pare că am o pereche de opțiuni, unul pentru noi, pentru a crea un tabel nou, precum și un link către utilizatori, care este un tabel deja l-am creat. Deci, ce este un tabel? Deci, dacă ați folosit Excel înainte, iar dacă ai numerele utilizate sau Google Foi de calcul, se va deschide o fereastră și veți obține o grămadă de rânduri și coloane, dar atunci ai de obicei, foi de lucru în partea de jos, sau file separate. Puteți să vă gândiți de fiecare foaie de lucru ca un tabel astfel încât baza de date, în cele din urmă, este o combinație de unul sau mai multe tabele, o sau mai multe foi de lucru, în lume a unei foi de calcul normale. Așa că lasă-mă să mergeți mai departe și click pe această foaie de lucru că am premade, numit utilizatori, a.k.a. Tabel de bază de date. Și dacă eu derula în jos aici, lasă-mă să micșora un pic, aceasta este ceea ce phpMyAdmin se spune noi este în interiorul acestui tabel chiar acum. E un pic confuz la început ochire pentru că interfața cu utilizatorul nu este cel mai frumos lucru din lume, dar ceea ce este interesant este această parte aici. ID-ul, numele de utilizator, și hash. În prealabil, și veți fi pronunțate această problemă în a seta șapte, vă oferim un fișier care conține un super- tabel de baze de date mic, împrumutat de fapt de la ediția hacker de problemă stabilit două, în interiorul cărora există șase rânduri. Una pentru Belinda toate modalitate de până la unul pentru Zamyla, și observați în stânga celor nume de utilizator sunt ID-uri unice, cum ar fi unul, doi, trei, patru, cinci, șase, numere întregi, și apoi la dreapta sunt hash-uri. Și dacă, cote de pariuri sunt, n-ai făcut problema ediție hacker stabilit două, dar un hash este la fel ca un criptat parolă cu câteva rezerve. Și astfel, ceea ce vedeți aici sunt versiunile criptate ale tuturor șase de parole noștri din problemă stabilit ediție hacker două lui. Acum, la stânga este doar unele chestii GUI, editarea acestei rând, copierea acest rând, ștergerea acest rând. Dar ceea ce este interesant acum este următoarea. Eu pot începe de fapt experimentarea cu acest tabel. Așa că, dacă mă duc și faceți clic pe SQL tab, I a lua această casetă de text mare. Și acest lucru nu este modul în care vom fă-o atunci când scrieți de fapt cod. Pentru a fi clar, phpMyAdmin este doar un instrument care este de gând să ne lase să scormoni în jurul bazei de date și să ne experimenteze cu interogări. Deci, de exemplu, să presupunem Am executa exact acest lucru. Selectați, care este unul dintre cei cuvinte-cheie am menționat mai devreme, stele, care reprezintă toate coloanele într-un tabel. Din ce masă? Ei bine, utilizatorii. Și Aviz acolo e asta convenție ciudat în SQL în cazul în care utilizați efectiv înapoi căpușe, de obicei, citate nu simple și citate nu duble cand vorbesti despre nume tabele, astfel citatul din spate este un lucru, pe de mana stanga sus a tastaturii cele mai probabil. Așa că lasă-mă să merg mai departe acum și lasă doar că în pace și defilați în jos și faceți clic pe Start, iar noi suntem de fapt, vom vedea același lucru. Tocmai am executat o interogare SQL spunând selectați tot stea din tabel numit utilizatori, și ceea ce veți obține înapoi este aceasta. În cele din urmă, vom fi în măsură să face același lucru în cod, dar pentru acum tot ce am vrut să nu a fost vedea în browser-ul meu. Ei bine, hai sa facem ceva un pic diferit. Lasă-mă să mă întorc la fila SQL, și să spunem doar că ce? Zamyla a pierdut toate de ei bani, și, prin urmare, este timp pentru noi, pentru ei a șterge ca un utilizator. Ea nu mai e logare. Așa că am de gând să spun șterge from-- bine, să mențină capitalizare pentru consecvență, șterge de la utilizatorii de unde. Și astfel, putem avea aceste predicate, sau acestea de calificare, la sfârșitul declarația mea unde și cum aș putea șterge Zamyla? De numele ei Zamyla, așa coloană, una dintre coloane a fost numit, astfel încât în ​​cazul în care name = "Zamyla". Și aici am folosi dublă citate sau ghilimele simple, utilizați numai partea din spate căpușe, atunci când vorbind despre numele, de exemplu, de tabele sau câmpuri. Și lasă-mă să faceți clic pe Du-te aici. Și acum, pagina de web este fiind un pic încordat. Sau, vrei într-adevăr să execute șterge de la utilizatorii de unde numele este egal cu Zamyla? Da. Deci, acum, dacă ne întoarcem la masa mea de către utilizatori clic, observați că Hm. I goofed. Și, de fapt, am facut un fel de clic distanță atât de repede N-ai văzut măcar mesaj de eroare roșu, poate. Ce am gresit? Audiența: Nu ai nevoie pentru a valorifica numele ei. DAVID J. MALAN: Da, capitalizate numele ei, dar ei de fapt username-- I a făcut câteva greșeli, nu? Unul, numele de utilizator ei este zamyla, litere mici Z, și numele de coloană este numele de utilizator, nu este numele, așa să facem acest lucru din nou. Lasă-mă să mergeți mai departe și șterge de la utilizatori în cazul în care numele de utilizator este egal cu citat unquote "Zamyla". În regulă? Deci, acest lucru pare un pic mai bine, lasă- mă să plec defilați în jos și faceți clic pe Start. E încă în desfășurare la țipa la mine pentru a fi sigur. Am faceți clic pe Da, iar acum vom vedea, sincer sa întâmplat acest lucru, într-adevăr rapid, mai puțin de o în al doilea rând cu siguranță, acest este exact interogarea care s-au executat. Pentru a confirma, lasă-mă să faceți clic utilizatori și într-adevăr, acum Zamyla este plecat. Acum, hai să facem exact opusul. Să presupunem că Gabe vrea să înregistra pentru site-ul web. Care este interogarea SQL, ceea ce este comandă aș putea să tastați pentru a adăuga Gabe? Ei bine, e destul de simplu. Introduceți în utilizatori, iar acum ea devine un pic criptic. Trebuie să precizeze, la server, ce domenii vreau să atribui. Nu-mi pasă cu adevărat ceea ce Gabe de identitate număr este, așa am de gând să săriți peste asta. Am în schimb să spun numele de utilizator, hash, iar apoi valorile vreau să pun acolo va fi Gabe. Și apoi hash lui, nu știu. Deci, de acum, am de gând să lăsa ca ca o mare de a face. Ne vom întoarce la că în stabilit problema spec ca la modul în care face de fapt asta. Deci, observa, din nou, sintaxa. Introduceți în nume tabelă, atunci o Lista paranteze domenii, coloanele pe care doriți să adăugați Valorile la, și apoi doar În același ordonarea exact la stânga la drept de valorile pe care doriți să le adăugați, și e doar de ambalaj pentru că textul este un pic cam lung. Deci, acum lasă-mă să faceți clic pe Start. Un rând inserat. Și acum, dacă mă întorc la utilizatori, ceea ce este interesant este faptul că nu numai că este Gabe acum în baze de date, ceea ce este aparent ID-ul lui? Ei bine, e șapte. De ce este șapte, atunci când nu l-am adăuga? Deci, aceasta, de asemenea, este unul dintre caracteristici ai bazei de date. O mulțime de construit în funcționalitate. Se pare că, atunci când a creat acest tabel, Am preconfigurat este în mod automat atribui un ID în așa fel că incrementează. Așadar, dacă ai bagat vreodată în jurul valorii de, si se uita la ID-ul ceea ce dvs. de Facebook Numărul este, in aceste zile nu e adevărat un lucru de făcut, dar Facebook ca un API, Interfata de programare a aplicațiilor, prin care puteți obține înapoi o grămadă de date despre le despre prietenii tăi, și conexiunile. Și ceea ce folosit pentru a fi un fel de rece, înapoi în a doua zi, a fost de a privi în sus ceea ce dvs. Facebook număr de identificare a fost. Mark Zuckerberg, de exemplu, este de trei deoarece el a fost autorul a site-ului. Și, după cum spune povestea, el a creat două conturi de test, utilizatorii unu și doi, pe care el apoi eliminat. Și astfel, Zuck, așa cum este numele lui pe Facebook, este ID-ul numărul trei, și noi toți avem un număr mult mai mult de trei aceste zile. De fapt, la un moment dat Facebook mutat departe de la chiar folosind un int, care este o valoare pe 32 de biți, pentru utilizarea pasul următor în sus, în esență, un lung lung, astfel încât că acestea ar putea găzdui chiar și mai mulți utilizatori înregistrarea. Deci, un fapt istoric pic de distracție. Așa că e doar sintaxa de bază cu care am putea executa o pereche de interogări, dar putem de fapt faci o grămadă mai multe lucruri cu SQL. Și veți vedea, în cele din urmă, în problema stabilit șapte care va trebui să facă o Numărul de deciziile de design, printre ei va fi ce tipuri de date pentru a utiliza. Deci, la fel ca în C, există date Tipuri într-o bază de date, cum ar fi MySQL, și tipurile de date pe care trebuie să alegeți de a include aceste domenii de aici. Char, VARCHAR, Int, Int mare, zecimal și de timp data, si multe altele. Deci, hai sa facem de fapt acest lucru. Să presupunem că nu am făcut- mână pe tabelă acestui utilizator și lasă-mă să mergeți mai departe și de a crea, pentru eu, în conferințele database-- de fapt, lasă-mă să merg mai departe și șterge tabelul am aici deja astfel încât să putem crea de fapt acest lucru. Ne pare rău. Am de gând să renunțe la acest masă, iar acum eu sunt de gând să meargă din nou la prelegeri bază de date de peste aici, Am de gând pentru a crea un tabel numitele utilizatori si sa face doar trei coloane inițial și faceți clic pe Start. Acum, pentru cea mai mare parte, din nou, aceasta este doar folosirea acestui instrument grafic numit phpMyAdmin, iar ceea ce facem noi acum creează un tabel. Deci, aceasta este ca merge File, New, și crearea unui nou fișier Excel. Așa că mă întreabă câteva întrebări, de la stânga la dreapta, Care este numele primei coloane, și apoi numele de a doua coloană, și numele celui de al treilea. Așa că haideți să recrea aceasta. ID-ul, iar apoi numele de utilizator a fost unul, și apoi hash a fost un alt. Deci, ce ar trebui tipul de date fi acum pentru un domeniu cum ar fi ID-ul? Aici este toata lista de tipuri de date disponibile în baza de date, și pentru acum hai să mergem cu int. Valoarea pe 32 de biți, eu nu fac cred că eu sunt realist O să aibă mai mult de 4 miliarde de euro utilizatorii din contul meu, în serviciul meu, așa că am de gând să păstreze în mișcare la următoarea întrebare. Eu nu am de gând să specificați o lungime sau valori, nu este aplicabil aici pentru un int, în sine. Și acum pot specifica, aparent, un default valoare, pe care nu am de gând să specificați. O colaționare, eu nu știu ce e asta. Un atribut. Acum facem de fapt au o decizie de design. Deci, există câteva domenii de aici, nu toate din care se aplică, dar fără semn înseamnă doar ce? Că int trebuie să fie? Doar non-negativ. Deci, trebuie să fie 0 pe sus. Nu, nu am de gând să verifice că Vreau ca fiecare utilizator să aibă o identitate, ea nu poate fi nul. Și apoi, ajungem la ceva mai mult deciziile de design interesante ca aceasta. Vom reveni la acest lucru într-o clipă, dar ce o altă caracteristică de bază de date este, este că vă pot spune serverul de baze de date merge mai departe și de a optimiza le-ul RAM și spațiu pe hard disk, astfel încât selectează, și inserții, și șterge, iar actualizările sunt foarte repede. In contrast cu pset5. Dacă ați vrut să se uite la ceva din tabelul hash, care te gandesti ca o bază de date, care a trebuit să facă tot de lucru pentru a face masa de hash rapid. E ca și cum, în mod evident, voi. Dreapta? Ai avut de a pune în toate amenzii de timp Tuning lucruri, printr-o funcție hash Bine, imaginind cum mai multe galeti de a avea. Dar ceea ce este frumos, din nou, despre o bază de date este doar tu punt toate aceasta a altor persoane care au crezut că acest lucru prin pentru tine, și ceea ce Am de gând să spun aici, sub index este faptul că domeniul meu de identitate va fi principalul mod de identificarea utilizatorilor în această bază de date. Eu nu am de gând să cred de Zamyla ca Zamyla, Am de gând să se gândească la ei ca numărul 6. De ce este, probabil, mai bine intuitiv să se gândească la și modelul fiecare dintre rânduri individuale, utilizând un număr în loc de ceva ca un șir de caractere, cum ar fi Zamyla sau Gabe sau șir mai lung încă? Da? Audiența: Un ID este unic? DAVID J. MALAN: Spune din nou? Audiența: Un ID este unic? DAVID J. MALAN: Un ID este unic, dar suppose-- după caz, în general cu nume de utilizator, să presupunem De asemenea, am spus nu poate exista decât un singur Zamyla în lume, și doar un singur Gabe. Aș putea impune unicitatea constrângere pe siruri de caractere, de asemenea, în cazul în care mi-am dorit. Deci, nu un gând rău. Audiența: Mai sigur. DAVID J. MALAN: Mai sigur, de ce? Audiența: Nu pot spune care este care, la fel ca în utilizatorul. DAVID J. MALAN: OK, tu Nu pot spune ce utilizator este care deci nu e un aspect intimitate la el, mai ales dacă ID-urile poate care apare în adresele URL. Deci, sigur, că ar putea fel de muncă, de asemenea. Alte gânduri? Da? Audiența: Este mai ușor să efectua operațiuni pe un int. DAVID J. MALAN: Asta e fotbalist adevărat. E doar mai eficient, sau mai ușor pentru calculator, de a efectua operațiuni pe un întreg. Dreapta? Un int este garantat de fie pe 32 de biți, în timp ce Zamyla este de câteva caractere, Gabriel este o câteva caractere, Davenport este foarte lung, și deci este nu deosebit de eficient de a utiliza siruri de caractere pentru a compara valorile si uita-te pentru câmpuri și câmpuri de actualizare, dacă puteți obține departe cu doar un singur număr întreg. Doar 32 de biți. Deci, nume de utilizator, de asemenea, în acest fel, nu trebuie să fie unic, deși, probabil, ar trebui fi, și de asemenea chiar și în acest fel un utilizator ar putea permite să schimba numele de utilizator lui sau a ei. Așa că haideți să lăsăm acum acest lucru ca mijloc principal de identificare a utilizatorului. Acest lucru este de a spune în baza de date mergeți mai departe și de a optimiza te astfel încât look up-uri pe ID sunt super rapid. AI, oribil pe nume, doar înseamnă Auto Increment, și aceasta este cecul caseta avem nevoie pentru a verifica să se precizeze că domeniul de identitate pentru a fi actualizate automat pentru mine, și apoi am de gând să derulați la dreapta aici si sincer eu nu sunt cu adevarat interesati în orice mai multe din aceste domenii. Desigur, nu azi. Așa că am de gând să mă întorc aici, pentru prima coloană, unde Trebuie să se precizeze numele de utilizator și hash, și să cel puțin FOCUS PE în al doilea rând una de acum. Int nu este, probabil, apelul dreapta, deci ceea ce face mai mult sens poate? Audiența: Text. DAVID J. MALAN: Spune din nou? Audiența: Text. DAVID J. MALAN: Text? OK, am auzit text. Ce altceva? Avem un fel de o grămadă de alegeri care sunt textuale în natură. Așa că, atunci când, și de ce, nu utilizați unele dintre acestea? Ei bine char, contrar a ceea ce s-ar putea cred, nu este un singur caracter. E un anumit număr de caractere. Deci, dacă știm că toate numele de utilizator trebuie să fie ca opt caractere, cum obisnuia sa fie comun în vârstă sisteme de calcul, am putea spune char și apoi am putea spune 8 aici. Asta e atunci când coloana a treia devine aplicabil la crearea unui tabel. Dar asta e un fel de enervant pentru că unii oameni s-ar putea doriți să aveți un nume de utilizator mai mult mult de opt caractere, unii oameni ar putea dori să au un nume de utilizator mai scurtă, așa că de ce mă angajez la un anumit număr? De ce nu au o variabilă numărul de caractere și doar spune că lungimea maximă a unui nume este, nu stiu, ca 64 de caractere. Nu mă pot gândi la orice prieteni care au nume lungi de 64 de caractere, și chiar dacă asta e prea scurt ai putea cu siguranță ciocni sus arbitrar. Deci, varchar este o variabilă numărul de caractere. Text nu este un instinct rău, și sincer la fel de bine face ceea ce spune, dar un câmp de text poate fi ca 65.000 de bytes cel puțin. Asta e, probabil, nejustificată de câmp, și, de fapt, Da, 65,535. Asta e, probabil, nejustificată de nume, așa că vom lipi, de obicei, cu varchars pentru textual câmp și hash, de asemenea. Hash, se pare, am putea face o varchar fel de bine sau ceva de genul asta, dar nu ne vom concentra astăzi cu privire la criptografie acolo și numerele pe care le-ar putea de fapt doriți să utilizați pentru lungimea sa. Dar permiteți-mi să defilați în jos la dreapta. Puteți avea doar un singur index primar pentru un tabel, dar nu vreau să se aplice oricare dintre acestea, acum, la numele de utilizator, ați spune? Ce ar trebui să username trebui să se bazeze pe un vag înțelegere a acestor patru opțiuni? Doar prin numele lor? Audiența: Unic. DAVID J. MALAN: Deci unic, nu? Deci, se dovedește că nu numai ar putea să vă spun o bază de date, în prealabil, aceasta este calea principală de identificare câmpuri. Se poate spune, de asemenea, acest lucru este Va fi un câmp unic. Aceasta nu va fi lucru pe care se bazează pe, dar aș dori baza de date a în esență, că, dacă au condiție, așa că dacă am încercat vreodată să se înregistreze doi utilizatori cu același nume, baza de date out plat nu este de gând să mă lase. Am putea avea un cod suplimentar în PHP care previne fel de mult, dar baza de date, de asemenea, poate asigura că niciodată nu se va întâmpla. Acum, ca o parte, mai ales ca ai despre proiectele finale, tineti minte index ea și complet Text sunt de fapt destul de util. Dacă aveți o bază de date mai mare, nu cu zeci, dar cu sute sau mii sau chiar milioane de domenii, puteți spune, de asemenea, baza de date în avans acesta este un domeniu am de gând care urmează să fie căutarea pe un lot. Poate că numele de utilizator sale, poate e bio, dacă ești a face un site web pe Facebook, cum ar fi faptul că are alineatele ca utilizator este permis pentru a salva, și, dacă doriți să spune bazei de date în avans Am de gând să fie în căutarea pe acest domeniu o mulțime, dar nu este neapărat unic, puteți specifica crea mi un index. Sau, se poate spune, de asemenea, permiteți-mi să fac un fel de căutări arbitrare, cum ar fi Command sau de control F, ca tine s-ar putea într-un procesor de text, deci ai putea sa te uiti siruri de caractere arbitrare sau siruri de caractere in acest domeniu. Cu alte cuvinte, ne apropiem la punctul în semestrul în cazul în care nu trebuie să vă faceți griji cu privire la cum să pună în aplicare lucrurile în mod eficient. Trebuie doar sa stii despre ce deciziile de design pentru a face în așa fel încât tu ești folosind instrumentele potrivite pentru Comert cu scopul de a mobiliza caracteristici ca alte persoane s-au construit pentru tine. Deci, pentru a recapitulare, primar ar trebui doar au unul, puteți avea doar una, și e un lucru ce te angaja în utilizați pentru a identifica domeniile unic. Unic este doar similară în spirit, dar s-ar putea doar ocazional-l folosească, dar doriți baza de date pentru a impune. Indicele înseamnă doar preventiv accelera lucrurile în viitor astfel încât să pot căuta lucruri în acest domeniu. Și apoi textul integral este, în general, pentru paragrafe, sau eseuri, sau organismele de mari dimensiuni de text în cazul în care s-ar putea dori, de asemenea, să aibă Carduri sălbatice, cum ar fi echivalentul de stele. Dreapta. Astfel că a fost un fel de o mulțime de toate odată. Să vedem dacă nu putem distilarea o pereche de aceste caracteristici și apoi construi ceva destul de simplu, dar puternic. Deci, printre celălalt deciziile de design esti în cele din urmă de gând să aibă de-a lungul este liniile de motoare de stocare. Și să-mi face doar o mentiune a acestui în anticiparea unor proiecte finale, și anticiparea Să say-- nu să facă acest lucru. Să construim acest mic aplicare în primul rând. Am de gând să merg în terminalul meu fereastră, și aici nu este numai counter.php, pe care vom merge acum pentru a scăpa de ca nu mai Germane, dar avem o grămadă de directoare și prezenta va fi foarte similare în spirit pentru ceea ce veți vedea în probleme stabilit șapte. Deci, avem trei directoare include publice și template-uri, care Este exact unde am rămas pe Luni cu întreaga noastră paradigmă MVC. Și pentru recapitulare, în public este de gând să meargă orice fișier pe care vreau utilizatori la realitate v posibilitatea de a vizita în Browser-ul lor, prin intermediul URL. Template. Ce am pus in template-uri? Ce fel de lucruri? Nu a fost mult, dar un cuplu Fișierele cel puțin pe luni. Da. Audiența: Antet și subsol? DAVID J. MALAN: antet și subsol. Deci avem ceva asemănător astăzi, de asemenea. Avem câteva mai multe fișiere, dar Subsol Văd, văd Antet, și apoi o grămadă de alte fișiere. Deci, aceasta este echivalentul consideră V MVC, care, din nou, va fi un pic mai mult clar în problema stabilit șapte, dar acest lucru este doar un dosar am pune o mulțime de estetica mele. O mulțime de HTML meu, o mulțime de forme mele. Intre timp, include, este un alt director care are aceste trei dosare și haideți să aruncăm o scurtă privire la acestea. Am de gând să merg mai departe și deschide config.php. După cum se pare, mult ca mai devreme în termen, ați inclus ascuțite CS50 dot h cu pset7. În exemplul de azi, ai de gând pentru a face echivalentul a care cu o declarație necesită că în mod eficient include aceste mai multe linii. Deci, să fie clar, aceasta este un fișier numit config.php. Și observați ce face. Se pare că face ceva cotitură pe mesaje criptice, de eroare astfel încât să le puteți vedea în browser-ul. Este, deci, aparent care necesită alte două fișiere astfel încât aceasta este ca # include în C, iar apoi acesta ne-am văzut, și ne-am bazat pe, aceasta se transformă pe care cosul de cumparaturi ca funcționalitate. Acest lucru înseamnă un testament cookie fie trimise înainte și înapoi. Deci, de ce este acest interesant? Ei bine, dacă ne întoarcem la acest director și deschide, de exemplu, constance.php. Observați că PHP are constante de sprijin, nu e destul ca #define în C. În schimb, literalmente spune definit, și aviz care le-am stocat în avans patru constante în acest dosar. Una pentru baza de date de astăzi, pentru parola, pentru numele meu de utilizator, și pentru numele serverului. Deci, acestea sunt de fapt vor fi destul de asemănătoare în probleme stabilit șapte. Și, în fine, și acest lucru este în cazul în care eu sunt mergi la a lua putea funcționa frumos de personal, în functions.php este o grămadă de cod care le-am scris, și am furat o parte din aceasta de problemă seta șapte pentru ziua de azi, care face o gramada de lucruri și hai să uităm la unul dintre ei în special. Această funcție aici, interogare, va fi funcția PHP numim în scopul de a executa SQL. Acum o clipă am fost utilizați phpMyAdmin, dar asta e doar de fel de scopuri de învățare și în scopuri de diagnosticare și uitând set de bază de date. Când utilizați efectiv ta baze de date, tu, omul, sunt, evident, nu vor care urmează să fie trăgând în sus un web pagina de fiecare dată când cineva înregistrează. Ai de gând să scrie cod care inserții și șterge utilizatori la cerere, și vom face acest lucru prin intermediul funcției de interogare. Dacă acum am defila în jos, nu e O să fie câteva caracteristici. Redirecționare este de gând să o funcție am scris pentru tine, care vă permite să trimite utilizatorul la o altă adresă URL, și face este o funcție, cum ar fi destul am văzut, luni, că, de fapt face un șablon, ci mai mult pe acestea în formă de pset7 propriu plimbare prin. Pentru moment, să mergem mai departe și de a face acest lucru. Lasă-mă să intru în masa mea prelegeri și a se vedea că nu există în prezent nimic aici doar încă, și lasă-mă să merg, de asemenea, în directorul mea publică, în cazul în care există doar un singur fișier, index.php. Acest fișier pare a fi foarte simplu în acest moment, se pare ca aceasta. Foarte mult ca modul în care ne rămas pe luni. Sunt necesită acest fișier, config.php, care este în o include director, care este în dot dot, părinții mei, și apoi e doar făcând acest fișier. Deci, ce este acest fișier? Să deschidem în șabloane mele form.php, și vom vedea acest lucru. Super-simplu, se pare că această formă este O să prezinte de o _GET $ _POST sau $. Check bun-simț rapid. Literalmente de căutare vizual dosar. Metoda este egal cu mesaj. Asa ca nu va utiliza adresa URL, cum ar fi Google nu, o să sortați din piele informațiile din spatele scenele și este de gând să prezinte o fișier numit register.php, și asta e dosarul încă nu am scris dar ceea ce acest lucru se întâmplă pentru a arata ca este aceasta. Dacă mă duc la o pagină separată Acest lucru este ceea ce localhost / index.php arată. Și din nou, a serverului doar asumarea index.php. Enter. Deci, asta e în cazul în care suntem la, și ceea ce vreau să fac Se putea să tastați lucruri cum ar fi David, și apoi numărul meu de telefon, care va spune 617-555-1212 pentru acum, inscrieti- iar acum register.php nu a fost găsit. Așa că am nevoie să pună în aplicare acest lucru. Deci, haideți să bici rapid ceva de genul asta. Lasă-mă să intru în directorul meu publice și de a face gedit de register.php, și acum am de gând să merg mai departe și porni modul PHP, așa cum am făcut-o, luni, și tag-ul aproape PHP, și hai sa facem o serie de lucruri. Deci, un, eu știu, de la au scris că forma, că vreau să verificați următoarele. În cazul în care este gol, indiferent de utilizatorul tastat în câmpul de nume, atunci Am de gând să spun ceva ca cer scuze lipsesc nume. Cerem scuze, între timp, este nu o construit în PHP lucru, este o funcție am scris în functions.php pentru pset7 astfel încât să aveți acces la ea. Altfel în cazul în care celălalt câmp este gol, număr, atunci eu sunt O să-mi cer scuze la utilizator și spune numărul lipsă. Salvați acest fișier. Acum, să ne întoarcem la browser-ul meu, du-te înapoi la forumul încercați din nou. Inregistreaza-te. OK. Nu sa întâmplat nimic, ceea ce este bine. Nu am primit un mesaj de eroare. Dar, dacă în schimb, să reîncărcați această pagină, și nu oferi nimic. La naiba. Face asta. Inregistreaza-te. Ce am gresit? În cazul în gol, nume $ _POST. Spune din nou? Oh, desigur. Am uitat partea cea mai importantă, care este nevoie ("../ include / config.php."). Am nevoie pentru a avea acces la Funcția cerem scuze, ceea ce De aceea, nimic nu se intampla. Funcția nu există în realitate. Așa că haideți să mai încercăm o dată. Să reîncărca pagina, faceți clic pe Register. OK. Acolo este. Așa că, de ieșire suntem vedeți aici este rezultatul a convoca un cer scuze funcție, super-simplu, și doar imprimă indiferent L-am da ca argument. În regulă, deci hai să coopereze. Să furnizeze numele meu cum ar fi David, inscrieti-, lipsă număr OK Să prevăd că, de asemenea. 617-555-1212. Inregistreaza-te. OK. Deci, totul este bine acum, doar nimic interesant se întâmplă. Deci, acum hai să facem ceva mai mult se întâmplă interesant ca aceasta. Lasă-mă să intru în phpMyAdmin, și să de fapt, a crea un tabel numit utilizatori, Am de gând să-l dea trei coloane, iar eu voi repede a crea ID-ul, și apoi numele, apoi numărul, și câmpul ID eu sunt de gând să plece ca un int. Câmpul nume am de gând să lase ca un varchar, și vom spune 64, oarecum arbitrar. Numărul Mă duc pentru a face, știi ce? Mergem în sprijini numere din SUA aici, așa că am de gând să fac ceva cum ar fi char și apoi 10 de caractere max pentru un cod de zonă și apoi șapte cifre. Și apoi aici, am de gând să specifica auto increment acest domeniu, face acest lucru o cheie primară, și Am de gând să merg mai departe și nu verifica oricare dintre aceste alte cutii. Așa că, atunci când faceți clic pe acum am în sfârșit pe Salvare, și mă întorc la masa de utilizatori mea, aceasta este ceea ce se pare ca daca am acum faceți clic pe o structură Filă nouă. Deci, acest lucru, să fie clar, este doar un fel de phpMyAdmin de a spune masa ta de baze de date are o identitate, un nume, și un număr cu acele configurații particulare și vom ignora restul domeniilor acolo pentru acum. Deci, acum ce vreau să fac? Deci, dacă mă duc acum în mea codul sursă, dacă totul este bine Vreau să execute următoarea interogare. Introduceți în, și eu pot doar spun utilizatorii Eu nu fac strict au nevoie de cele înapoi căpușe dacă e nu un cuvânt periculos ca utilizatorii. Am de gând să spun numele, număr, iar apoi aici am nu merge cu codul greu Format din cinci cifre valorilor încă. Am de gând să pun două semne de întrebare. Și aceasta este o convenție în mai multe limbi prin care, dacă doriți să aveți un înlocuitor pentru un șir ai de gând să folosească întrebare mărci, pentru motive pe care le vom vin înapoi pentru a vorbi despre securitate, și aici Am de gând să treacă în cele două câmpuri posta numele, și apoi introduceți un număr, iar acum salvați fișierul. Și acum am de gând să du-te jos de aici este un super- spune pur și simplu rendersuccess.php, care va fi un alt șablon. Am de gând pentru a crea foarte repede. Geditsuccess.php și Mă duc să spun succes H1 în acel dosar. Bine. Deci, acum, să ne întoarcem la Browser-ul, unde am vizitat înainte. Să mergem mai departe și să confirmați am scris David, am scris într-un număr de telefon, înregistrați. La naiba. Ce am gresit? Deci, eu văd o eroare aici, au o eroare în sintaxa SQL. Lasă-mă să sar înapoi la gedit, să mă să mă întorc la register.php, și ceea ce am omite faptul că a fost important ultima dată? Am nevoie de acest lucru. Vrei să știi că, altele decât din având în observat înainte, dar am nevoie de acest lucru. Deci, acum hai să mergem înapoi, iar acest lucru a fost de ajutor pentru a vedea în browser-ul și de aceea în config.php ne-am scuipat erori. Să mergem mai departe și să reîncărcați, faceți clic pe Continuare, succes. Deci, acum lasă-mă să merg pe la meu baza de date aici și faceți clic pe Utilizatori, și căuta, și observați eu acum Trebuie David în baza mea de date aici. Acum, punct de vedere tehnic acest site care nu sunt încă pe internet publice, asa ca nu pot avea alte oameni în a pune aici, dar dacă aș vrea acum să, pentru exemplu, mă trimite un mesaj text. Să mergem pe un diavol aici și a vedea dacă aceasta funcționează de fapt. Am de gând să merg mai departe și șterge acest rând și vom estompa aceasta în video mai târziu deci nu avem Întreaga internet îmi trimitea mesaje, și vom merge acum până la Browser-ul și vom merge pe la prelegere și vom introduce în diferite Numărul de aici, inscrieti-, succes. Deci, acum, propria ta numărul este probabil în baza de date, iar acum partea distractivă. Să folosim de fapt PHP pentru a face ceva programatic, fie de la comanda line sau din altă parte, și de acum eu sunt doar de gând să-l păstrați simplu și am de gând să intru în mea Director aici și procedați în felul următor. Script gedit să zicem, vom numesc text, #! / user / bin / env PHP, ca și cum am văzut ultima dată. PHP. Acum am de gând să nevoie include config.php, chiar dacă acest lucru s-ar putea induce o ușoară eroare. Și acum am de gând să merg mai departe și spune rânduri, interogare, selectați stea de la utilizatori, iar acum aici am de gând să fac o tehnica de la ultima dată pentru fiecare rânduri ca rând. Și am de gând să fac ceva simplu. Printf să spunem că numele este aceasta, iar numărul este aceasta, backslash n. Și acum am de gând să treacă în rândul cita numele încheiat citatul, și numărul de rând citat încheiat citatul, și acum să mergem mai departe și fereastra mea terminale chmod aceasta a + x pentru a face acest script numit executabil text. Si acum sa ruleze text. OK, deci progres. O așa l-am scris acum script linie de comandă, într-un limbaj numit PHP, care, din cauza că necesită linie, are acces la toate cele configurație constante pe care am specificat. Numele bazei de date și așa mai departe. De fapt, doar pentru a fi clar că aceasta nu este o întâmplare, lasă-mă să mergeți mai departe și registru, foarte repede, altcineva ca Rob și îi va da numarul 555-1212. Și acum, dacă am rula scriptul din nou, observați puterea de ceea ce facem cu baza de date. Acum l-am văzut imediat ce Celelalte două rânduri sunt în baza mea de date. Deci, acum, haideți să încercăm să facem ceva chiar crescator interiorul, iar aceasta este partea ne-am nu a fost testat în prealabil, astfel ultima dată când am făcut asta lucrurile au mers oribil razna, Avem videoclip în acest sens. De fapt, da, amuzant deoparte. Deci, ultima dată, într-o prelegere ca acum doi ani, ne-am decis, am decis, pentru a fi toate acestea ar fi o idee buna pentru a genera dinamic e-mailuri în clasă, utilizând întreaga bază de date CS50 studenți, care ne-a dat numerele lor și transportatorii lor telefoane mobile pe care le s-ar putea retrage de la pset0, cum de a raționa, se pare Am avut un bug minor în programul meu și a făcut câteva greșeli în 2012, cred. Prin care, o aveam pentru bucla care a făcut exact acest tip de lucru, iterarea peste baza de date, obtinerea unui nume din baza de date, numele din baza de date, și apoi la fiecare iterație a buclei am trimis un e-mail. Dar, în loc de a trimite un e-mail, I a trimis un e-mail la prima iterație, și două e-mailuri a doua repetare, a trimis trei e-mailuri a doua repetare, care cum s-ar putea retrage de la noastră discuție de notație asimptotic O mare de acest rău, ca n pătrat este cât de multe mesaje am trimis, dar nu a fost chiar e-mailuri a fost mesaje text. Și, după cum știți, participarea nu este foarte mare spre sfârșitul semestrului și așa m-am gândit că ar fi drăguț la timp pentru a spune, "De ce nu ești de clasă?" În mesaj text I trimis la întreaga clasă, și a fost amuzant să-i placă 50% de clasă, dar restul de 50%, dintre care unii speriat, am trimis incredibil note dulci apologetice a personalului scuze pentru după ce a ratat curs doar de data asta, nu? Așa că ar fi oribil gresit. Deci, în acest spirit, să încercăm această din nou, dar doar cu numărul meu. În prealabil, în functions.php, Am scris această funcție aici. Se numește text, și-l ia în trei argumente. Un număr, un purtător, și un mesaj. Sunt folosind o declarație comutator, care minunat PHP lua siruri de caractere, nu doar numere întregi, și nu a pus în aplicare tot sprijinul pentru acest lucru încă, Tocmai am făcut AT & T și Verizon. Pentru ca se pare că cu acești transportatori ei au de e-mail pentru a gateway SMS, prin care poți de fapt trimite un e-mail la o adresă cum ar fi numărul de telefon la vtext.com iar în cazul în care utilizatorul nu a blocat mesajele, acesta va trece prin este un mesaj text. Acum, pentru a face acest lucru, am de gând să trebuie să adăugați un câmp foarte repede la baza mea de date. Am de gând să merg în structura mea, și eu sunt de gând să meargă mai departe și se adaugă o câmp la sfârșitul tabelului. Să faceți clic pe Start, și eu sunt O să numesc acest transportator iar de acum am de gând să lăsa acest lucru ca un text bar, dar putem fi crescator in viitor. Am de gând să merg repede în masa mea, și eu sunt de gând să scape de Rob, pentru că este un număr de fals, Am de gând să merg în edita aici si eu sunt va schimba manual purtător meu pentru a fi Verizon, care se este, iar acum aici. Să facem o verificare bun-simț rapid. Să deschidem script-ul nostru de text, care Se pare ca aceasta, purtător este de% s. Facem o mult mai eroare verificarea decât am făcut-o în 2012, purtător. Și acum, am de gând să merg înainte și re-rula script-ul. OK. Carrier este Verizon, ceea ce înseamnă acum sperăm pot face doar acest lucru. În mod corect acest an, sperăm, aici vom merge. Deci, în interiorul de acest lucru pentru bucla, eu sunt Va trebui nu numai acest printf, Am, de asemenea, de gând pentru a apela text și utilizarea acestei funcții rechemare era nevoie de un număr, o purtător, și un mesaj. Deci, haideți să vedem, numărul este de gând să fi rândul citat unquote "număr", rând citat unquote "purtător", iar ultima a fost mesajul. Nu în bară acest an, punct și virgulă. OK. Pumnii. Să vedem dacă aceasta funcționează. Bine, așa. Aici vom merge. Să debloca telefonul, cruce degetele, la naiba. May-- variabila nedefinita oh stai, stai, stai, foarte repede. Foarte repede, foarte repede. Acest lucru este total meritat. Lasă-mă apuca, lasă-mă apuca, uh-oh. Vă mulțumesc, textele au a pornit de la altcineva. Lasă-mă să mergeți mai departe și să se deschidă reale rapid, dropbox.php / e-mail aici. Regimul de așteptare. Total meritat. Descărcări. OK, sursa src8m. OK. Aveti nevoie de mai mult de o linie de aici. Oh, asta e, se află într-Frosh AI, e în registru la trei. Oh Bună ziua, Margo, vă mulțumesc foarte mult. OK, și am fost lipsește această linie aici. Așa că lasă-mă apuca repede această linie de cod, care include e-mail sau biblioteca că eu de fapt vreau să utilizeze, Am de gând să rapid du-te înapoi în funcții, Am de gând să merg la partea de sus a acestei dosar și solicită acest fișier, de asemenea, și acum am de gând să treacă într-adevăr mea degetele atunci când mă întorc la comanda script linie, care este în interiorul Director gazdă locală de astăzi. Textul a alerga. Enter. Mail. Regimul de așteptare. Regimul de așteptare. Mail. Oh, OK. Aici vom merge. Mail are un nou PHP Mailer. Am făcut acest drept? La naiba. Sa-- oh, stai, stai, stai. Stand by. Promit, acest lucru este Va fi atât de meritat. Adresă. De aceea, nu fac Exemple de drept înainte de clasă. Ugh. Următorilor destinatari a eșuat. Să încercăm un ultim lucru. SMTP stabilit de la, adaugă adresa, adresa este într-adevăr că. Să încercăm această ultimă parte la adresă. Aw, eu sunt foarte trist acum. Mulțumesc. Dar eu chiar apreciez tot textele care le-ați trimis. Ai această David. Ești o suflare. Să-l lăsăm acolo și vom stabili pe luni. Ne vedem atunci. Daven FARNHAM: Și acum adâncime Gânduri de Daven Farnham. În cazul în care un arbore binar se încadrează într-o pădure și nimeni nu este în jurul valorii de la C it-- [chicotind].