[Powered by Google Translate] [Problem Walkthrough Bëje 7]
[Zamyla Chan] [Universiteti i Harvardit]
[Kjo është CS50] [CS50.TV]
>> Përshëndetje të gjithëve, dhe i mirëpritur për walkthrough 7, CS50 Financave.
Tani ne jemi duke bërë zyrtarisht me të gjitha psets në CS50,
dhe ne jemi lënë vetëm me një shumë e cila do të jetë një zbatimi fun
i një faqe interneti ku përdoruesit mund të hyni në CS50 Financave
dhe për të blerë dhe shitur stoqe.
>> Sot, ne do të kemi disa mjete në dispozicionin tonë.
Ne jemi duke shkuar për të folur në lidhje me lejet.
Kurdo që ju keni një dosje web,
ju jeni do të duan për të lejuar përdoruesit për të ekzekutuar disa dosjeve
por edhe vetëm lexuar ato të tjera,
kështu që ne do të shohim në leje dhe se si ju mund të vendosni ato.
Atëherë ne do të shikojmë në PHP, HTML, dhe kodin SQL.
>> Së pari, lejet.
Kur ju jeni në terminal në një directory të caktuar,
atëherë çfarë ju doni të bëni është që ju doni të drejtuar komandës chmod.
Kjo është pasuar nga numra ose shkronja ose
korrespondon me atë që ju dëshironi në thelb bota për të parë,
ju vetë të parë, etj
Për shembull, kur ju keni një dosje,
atëherë ju dëshironi që të jetë i ekzekutueshëm dosje nga të gjithë që e sheh atë,
kështu që ajo që ju do të bëni është që ju mund të drejtuar komandën chmod a + x
dhe pastaj emri i dosjen tuaj.
Kur ju keni një fotografi të tilla si fotografi ose fotografi CSS imazhit -
si JPEG dhe bitmaps, gjëra si kjo, ose ndonjë kod javascript -
ju doni që të jetë i lexueshëm nga të gjithë,
kështu atëherë ajo që ju bëni është që ju mund të përdorni wildcard -
cila është një asterisk -
në thelb tregojnë në dosjen CSS - Çdo gjë në atë dosje -
Unë jam duke shkuar për të thonë se ai do të jetë i lexueshëm nga të gjithë.
Me leje, kur ne përdorim letrat,
ne gjithashtu mund të përdorni numrat në vend.
Pra, ju shihni se në fund të fundit kur ju doni diçka për të të jetë i ekzekutueshëm -
që është të përfaqësuara nga numri 1 -
diçka për të të jetë i lexueshëm është numri 4 dhe pastaj -
shkruajtshme është numri 2 -
dhe kështu në thelb, kur ju doni një kombinim të atyre, atëherë ju shtoni ato.
Nëse ju doni diçka për të të jetë i lexueshëm, shkruhet, dhe i ekzekutueshëm,
atëherë ju do të shtoni deri 4, 2 dhe 1 dhe që do t'ju japë 7,
atëherë kur ju keni një dosje që ju dëshironi që të jetë i ekzekutueshëm nga të gjithë -
si dhe i lexueshëm dhe të shkruhet - atëherë ju e bëni atë 7, 1, 1.
Kjo do të jetë 7 për ju, pastaj 1 për njerëzit e tjerë.
Kur ju keni spekulim, kjo në fakt do të përcaktojë se cila dosje dhe fotografi të cilat
duhet të jenë chmod-ed specifike.
Për shembull, kur ju keni dosje - ato janë 7-1-1 -
kur ju keni imazhe, ose HTML, CSS, JavaScript,
atëherë ato janë do të jetë 6, 0, 4 - ose 6, 4, 4 -
dhe pastaj fotografi PHP do të jetë 6, 0, 0.
Ideja prapa kësaj është se përdoruesit nuk duhet të shikoni në fakt PHP kodin tuaj,
por vetëm të jenë në gjendje për të parë të prodhimit.
>> E madhe! Moving në PHP.
Thjesht, sa herë që ju doni një skedar PHP, prapashtesë fotografi është. Php.
Ju gjithashtu mund të përzierje HTML me kodin PHP.
Nëse ju keni një skedar HTML, për shembull,
atëherë ju mund të rrethoni atë me kënd majtë, pikëpyetje, php -
vënë kodin tuaj php - dhe pastaj të mbyllë që me një pikëpyetje dhe një kënd të drejtë.
Variablat në PHP janë një shumë e lehtë për t'u marrë me shumë se variablave në C.
Çdo ndryshueshme vetëm fillon me një shenjë e dollarit në frontin e tij, dhe ata janë shtypur dobët.
Kjo do të thotë që ju nuk duhet të shqetësohen për vendosjen diçka
barabartë me një varg ose një numër të plotë.
Ju mund thjesht të them, ky është emri im i ndryshueshëm
dhe pastaj kjo është vlera e tij,
kështu ajo do të jetë më e lehtë për t'u marrë me atje.
>> Një tjetër gjë është se PHP ju lejon të përdorni vargjeve associative.
Ju mund thjesht të përcaktojë një grup si ju do në C
duke thënë, dollar shenjë-emri i juaj array-barabartë,
dhe pastaj në kllapa katrore të ketë në thelb vetëm listën e vlerave të të gjitha elementeve në array.
Por, në PHP atë që ju mund të bëni është të specifikojë në thelb -
kjo është lloj i si një funksion hash.
Ju mund të specifikoni indeks - atë që ju jeni duke shkuar për të thirrur atë -
dhe pastaj që korrespondon me një vlerë.
Nëse jeni të vërtetë të kalojë në një = 1, b = 2, c = 3,
atëherë array tuaj në indeksin a do të ju jap 1.
Kjo pset do të ngrohtë ju deri me disa PHP në një pjesë të pyetjeve,
dhe pastaj ne pikiatë në CS50 Financave.
>> Ne kemi një çift të - ne kemi disa funksionalitetin, në thelb,
për të zbatuar në këtë website.
Ne duam për të lejuar përdoruesit të regjistrohen në faqen tonë të internetit me një emër përdoruesi dhe një fjalëkalim.
Ne duam të lejuar ata që të shikoni një kuotë,
dhe pastaj ne do të shtypura nga emri i asaj, si dhe kuotë çmimin aktual se kjo është në të.
Ne duam që të lejojnë ata të shohin një portofol të të gjitha aksioneve që ata kanë blerë deri tani.
Ne duam gjithashtu të lejojë që ata të blejnë aksione, si dhe i shesin.
Dhe pastaj në fund, ne duam që të lejojnë ata të shohin historinë
e të gjitha transaksioneve që ata kanë bërë.
Pastaj, në fund, pasi ju keni zbatuar të gjithë se,
atëherë ju jeni të lirë për të zbatuar një funksion shtesë.
Ne do të shkojnë në ato.
Ata mund të jenë ose përdoruesit e lejuar për të marrë para ekstra duke depozituar para ekstra,
ose ju mund të lejojë që ata të ndryshojnë fjalëkalimin e tyre, ose diçka të tillë,
email atyre një faturë kur ata të blerë ose shitur një aksioneve.
Ka një listë të kufizuar të karakteristika që ju mund të zbatojnë veten,
kështu që është e fundit atje.
>> Që kjo është një website, ju djema të ketë gjithashtu një shumë e lirisë për të rregulloje atë.
Ne bëjmë të japë disa kodin CSS, por ju jeni patjetër të lirë për të shkulje atë,
bërë atë të duket nicer, por në themel është një funksionalitet bazë
kështu që gjithmonë i referohen spekulim në lidhje me atë që ju në të vërtetë duhet të përfshijë atje.
Pas spekulim, ne do të jetë duke përdorur aparatin si edhe një server.
Ajo do të jetë hosting faqen tonë të internetit për ne, në serverin lokal.
Nëse ju do të ndiqni këto udhëzime dhe unzip kodin pset 7 shpërndarjes
në dosjen tuaj virtuale pritës / lokale pritës,
atëherë ju mund vetëm të vizitoni http://localhost/ në Google Chrome në aplikim,
dhe pastaj ju do të arrijnë kodin në të cilën ju keni shkruar pset 7.
>> Pset 7 vjen me një bandë të kodit të shpërndarjes,
dhe shpresojmë we've - nëpër të gjitha psets para këtë -
mësuar të na leximit nëpërmjet kodit të shpërndarjes,
të kuptuarit se çfarë funksione janë dhënë tashmë, dhe se si ne mund të jetë në gjendje të përdorin
ata dhe funksionet e tjera që ne jemi duke shkuar për të zbatuar.
Në këtë rast, ne kemi 3 dosje.
Ne kemi një dosje HTML, një dosje, dhe përfshin një dosje templates.
Ajo që ne jemi duke shkuar për të bërë me këtë pset është lloj i ndan menduarit -
mendimi programimit - i kodit PHP me aspektin aktuale vizuale.
Ne do të kemi një skedar PHP që e bën të gjithë të menduarit, thuhet në bazën e të dhënave,
printime jashtë gjërave, ka nëse deklaratat - gjëra të tilla si se -
dhe pastaj se do të kalojë të dhënat në dosjen tonë - template ose file template.php.
Se çfarë do të bëni është të lexoni të dhënat dhe pastaj ajo do të shtypura it out.
>> Ne mund të trajtojnë templates si "memec", në atë që ne të vërtetë nuk duan ata
për të bërë një punë shumë e në llogaritjen gjëra.
Ne duam kontrolluesit tanë për të bërë këtë.
A pak në se - le të marrin një vështrim në disa nga kodin e distribuimit.
Këtu kemi dosjen tonë index.html, dhe kjo është goxha bosh.
Në thelb ajo që e bën - ai thotë, mirë, unë jam duke shkuar për të kërkuar dosjen configuration.php.
Ne nuk e shohim se ka të drejtë, por kjo është në thelb duke e quajtur dosjen configuration.php,
dhe ekzekutimin se.
Pasi që e bën këtë, ajo do të bëjë portofolin.
Pasqyrim është një funksion, kështu që sa herë që ne jemi në një kontrollues,
ne do të thërrasë Render, ne do të të jap file dhe pastaj të dhënat që ne jemi duke kaluar në,
në mënyrë që ajo do të thërrasë në portfolio.php-lloj-e ndodhë që të dhënat në mënyrë që portofoli mund të merren me këtë.
>> Dhe tani, këtu, ne kemi formën tonë login.php.
Kjo është kontrollues që në thelb kujdeset për logging in
Këtu, ai kontrollon nëse një formë u dërgua tek kjo skedë dhe merret me Vleresimin paraqitjen.
Ne do të shikojmë në këtë funksion falje.
Kur ne duam të shtypura nga një mesazh gabimi,
ne përdorim falje dhe që do të përcjellim përdoruesit në një faqe të veçantë
që do të shtypura nga specifik mesazh gabimi që kemi treguar.
Vazhdimi në, ajo do të query bazës së të dhënave - we'll merrni në më shumë se më vonë.
Pastaj ju shihni se këtu poshtë në qoftë se një formë nuk është dorëzuar, atëherë ajo bën një formë.
Që do të thotë se ajo shkon në login_form.php, kështu që le të shohim në atë.
>> Login.php është në të vërtetë, ku ne shohim që merret me HTML aspektin aktuale vizuale.
Këtu ne kemi një tag input per emrin e përdoruesit, një input për fjalëkalim,
si dhe një buton paraqesë.
Kjo është në fakt ku aspekti vizual dhe forma HTML është do të mbahet.
Këtu, ai thotë se ajo do të paraqitet me një metodë të caktuar, të quajtur pas.
Ne do të merrni në dallimet ndërmjet metodave -
postoni kundrejt merrni, ka edhe diçka që quhet vënë -
ne do të merrni në ato metoda më vonë, por për interes të kësaj pset,
Unë do të highly ju inkurajojmë që të përdorni post.
>> Ne e dimë se në thelb një herë kjo formë është dorëzuar -
nga login_form.php--
atëherë ajo do të shkojë në veprim - login.php--
në thelb të kalojë në të gjitha ato parametrat nga ato forma në login.php.
Rezultatet nga kjo forme janë të përfshira në kuadër të kësaj grup pas asociative.
Treguesit e elementeve të ndryshme në grup pas
janë pikërisht ajo që ju specifikoni këtu.
Ju thoni se emri i këtij input është emër përdoruesi. Emri i kësaj një është fjalëkalimi.
Në mënyrë të ngjashme, ju shihni emrin si indeksin e vektorit associative atje.
Nëse ne do të shkojmë në dosje përfshin, ne kemi këtë skedë funksionet e cila do të jetë shumë i dobishëm.
>> Të gjitha këto funksione janë zbatuar për ju.
Ju nuk keni nevojë për të zbatuar konkretisht ndonjë nga këto veten,
por ata do të mjaft të dobishme.
Ne kemi kërkuar falje, që siç kam thënë më parë, në thelb do të shtypura nga një mesazh gabimi
për ju në një faqe të veçantë - apology.php.
Pastaj kemi hale, kështu që nëse ju vetëm thirrje hale dhe pastaj kalojnë në variablin,
atëherë ajo do t'ju sjellë në një faqe që do të shfaqin atë ndryshore për ju.
Atëherë ne kemi logout, e cila në thelb do të përfundojë seancën e një përdorues të caktuar të.
Lookup do të jenë të dobishme.
Që ne jemi që kanë të bëjnë me kuotat dhe rezervat, ne do të jetë në gjendje -
dhe kjo është në thelb kohë reale.
Ne duhet të dimë se çfarë janë ato vlera e aksioneve,
kështu që ne kemi funksionin lookup cila merret me dokumentacionin Yahoo-së stoqeve.
Pasi ju shikoni një simbol të caktuar të një gjendje, ai do të kthehet tek ju simbol të aksioneve
si dhe emrin dhe çmimin aktual të aksioneve atë.
Kjo është funksioni lookup.
>> Pastaj ne jemi që kanë të bëjnë me MySQL,
kështu që ne do të jeni të dashur për të ekzekutuar pyetje të caktuara në database tonë SQL.
Ne kemi query të merren - llojit të disa abstrakte e asaj jashtë.
Ne jemi duke shkuar për të kaluar në vargun e tërë e query SQL tonë -
dhe të gjitha variablave që shkojnë në të -
dhe çfarë është në të vërtetë kjo nuk ekzekutuar që për ne.
Në vend që të shkruajnë të gjithë këtë, çdo herë që ju doni të query -
duke marrë të gjitha rezultatet nga ajo pyetje -
atëherë ju mund vetëm thirrje funksionin query, dhe ajo do të kthehet tek ju -
në varësi të asaj që ju jeni duke përdorur për pyetjen tuaj -
ndoshta një rresht të gjitha rezultatet që përputhen me pyetje ose të ngjashme.
Më shumë për këtë më vonë pse.
>> Së fundi, ne kemi përcjellëse e cila, siç sugjeron emri, ju përcjellëse në një faqe të veçantë.
Dhe pastaj ne kemi bëjë, që ne jemi duke shkuar për të bërë thirrje disa herë.
Kur ju jeni në një kontrollues, që ju e quani bëjnë në faqe template
dhe pastaj kalojnë në vlerat që template pastaj do të merren me të.
Këto vlera janë ndoshta do të jetë që kanë të bëjnë me llojin e prodhimit që ju dëshironi
për të treguar në faqen tuaj template.
Rregull. Ata janë funksionet, dhe ka shumë më tepër për këtë kod shpërndarjes.
Unë ju inkurajoj që të shkoni nëpër këtë dhe eksplorojnë atë vetë.
Gjithashtu, spekulim ndoshta do të ecin ju nëpërmjet disa elementeve të tjera të kodit të shpërndarjes.
Këtu është një përmbledhje e funksioneve të gjenden në functions.php.
>> Rregull. Detyra e parë është për të lejuar përdoruesit të regjistrohen në faqen e internetit.
Tani për tani, nuk është një formë login në faqen e internetit,
dhe ju jeni të pajisur me një përdorues pak me fjalëkalime.
Ju mund të përdorni këto përdoruesve dhe të hyni në,
por ju doni të lejojnë njerëzit të bëjnë përdoruesve tyre
dhe të shtoni veten në faqen e internetit.
Layout për regjistrimin është shumë e ngjashme me formën e hyrjes,
përveç emrin nuk është e para-ekzistuese,
dhe përdoruesit gjithashtu duhet të sigurojë një fjalëkalim të ri,
dhe pastaj zakonisht ne kemi një konfirmim fjalëkalimin.
Pasi inputeve përdorues gjithë këtë informacion,
ne duam të shtoni ato në database tonë të përdoruesit.
Ne do të kemi një bazë të dhënash - një bazë të dhënash SQL -
që ne jemi duke shkuar për referencë.
Në këtë bazë të dhënash, ne do të kemi një tryezë me të gjithë përdoruesit
përmban emrin e tyre, kalimin e tyre, dhe gjithashtu se sa të holla që ata kanë.
>> Në regjistër, ne duam të lejojë që ata të hyjnë në këtë informacion.
Ne duam për të shfaqur atë formë.
Ne duam të sigurohemi që fjalëkalimi tyre -
që ata hynë një, dhe pastaj gjithashtu se fjalëkalimet ndeshjen kur ata hyjnë në atë dy herë.
Pas të gjitha që është bërë - duke supozuar se këto gabime janë kontrolluar -
atëherë ne duam të shtoni ato në database tonë përdoruesit.
Së fundi, një herë ju keni regjistruar, kjo është goxha e përshtatshëm, nëse ju nuk keni nevojë të hyni brënda përsëri
një herë ju keni regjistruar,
kështu që ne jemi duke shkuar për të hyni ato në faqen e internetit, nëse ata kanë regjistruar në sukses.
>> Detyra e parë është për të shfaqur formë, dhe kjo është në të vërtetë do të jetë -
I gjithë ky proces i regjistrimit do të jetë modeluar nga afër pas login shumë
përveç në vend të login.php ju mund të keni register.php.
Në vend të login_form.php--cila është shablloni -
ju do të keni formë regjistroheni.
Ju do të dëshironi të shtoni një fushë më shumë - një konfirmim fjalëkalimi fushë -
në vend të vetëm e një emrin dhe një fjalëkalim.
Tjetra, ne duam të kontrolloni nëse fjalëkalimet përputhen ose janë bosh.
Ne kemi kontrollues - register.php--cila do të kujdeset për të bërë këto kontrolle.
Kur një formë është paraqitur nëpërmjet metodës post,
atëherë të gjithë atyre variablave janë të përfshira brenda array post.
Ju dëshironi të bëni të sigurtë që pas array vlera në indeksin fjalëkalim
përputhet me elementin e konfirmimit.
Ju dëshironi të bëni të sigurtë që ata nuk janë bosh,
dhe ju doni të bëni të sigurtë që ata janë të njëjta.
>> Një gjë të përshtatshme në lidhje me PHP është se ne nuk kemi nevojë për të përdorur varg krahasuar më.
Ne mund të përdorim operatorin e barabartë-barabartë
për të kontrolluar nëse vargjet janë të barabartë me njëri-tjetrin.
Për trajtimin e gabimit, ju do të dëshironi të kërkoj falje.
Të kërkoj falje, ju thjesht telefononi funksionin
dhe pastaj specifikoni një lloj mesazhi që ju doni të prodhimit.
Ju pastaj doni të shtoni përdorues në bazën e të dhënave.
Deri tani, të gjithë ne kemi qenë duke bërë është vetëm në nivel lokal që kanë të bëjnë me rezultatet e formularit.
Tani, ne të vërtetë duan të shtoni ato në database tonë.
Për këtë, ne së pari dëshirojmë të sigurohemi se emrin nuk është bosh.
Kuptoni se në një faqe interneti, ju nuk mund të ketë përdoruesve të shumta me emrin e njëjtë,
kështu që ju do të dëshironi të bëni të sigurtë se kur ju futur diçka në database tuaj -
futur një përdorues të ri - atëherë ju nuk merrni një përplasje midis një username para-ekzistuese
dhe emrin që një përdorues është duke u përpjekur të paraqesë.
Për këtë, sapo ju të ekzekutuar një pyetje -
futur një përdorues të caktuar me fjalëkalim të tyre dhe një sasi e parave të gatshme fillestar -
një herë ju e quani atë pyetje, atëherë vërtetë do të kthehen mySQL rreme, nëse ajo dështon.
>> Struktura e përdoruesve është i tillë që emrin është një vlerë unike,
kështu që ju nuk mund të ketë më shumë se një.
Kur ju provoni dhe të futur një rresht të ri me emrin që tashmë ekziston,
që do të kthehen rreme - si një vlerë Boolean-false.
Një gjë e ndërlikuar këtu është se ju do të dëshironi të kontrolloni nëse rezultati është rezultat i pyetjes suaj.
Nëse kjo dështon, atëherë ju do të dëshironi të kontrolloni me operatorin trefishtë-barabartë.
Kjo është në të vërtetë do të kontrolloni nëse ka një dështim apo jo,
ndërsa, në vetëm thjeshtë një është e barabartë me-barabartë, ajo do të jetë e vërtetë nëse rresht ishte bosh.
Rezultati i një dështimi në qoftë se ka një përplasje mes përdoruesve
është vlera aktuale e rreme.
>> Këtu është se si ju do të futur në një bazë të dhënash.
Këtu është pyetje që ju do të kandidojë në mënyrë rigoroze në SQL.
Një gjë është se ju në fakt mund të shkoni në faqen e internetit që menaxhon databazën tuaj SQL
dhe luajnë rreth atje nga hyrja dorë as vlerat apo rreshtave.
Kjo do të prodhimit çfarë prodhimi SQL është.
Ju gjithashtu mund të kandidojë komandat SQL brenda bazës së të dhënave tuaja
dhe pastaj të shohim se çfarë mund të jetë sintaksë,
dhe pastaj përkthehet se në funksion query që ne kemi në pset 7,
e cila do të jetë shumë e ngjashme me pyetjet që ju në të vërtetë të kandidojë.
>> Nëse kam kërkuar për të futur një rresht të ri në përdoruesit tryezën time,
atëherë unë do të specifikojë futur në përdoruesit, i cili është emri i tryezën time.
Atëherë unë do të specifikojnë emrat kolonë.
Atëherë unë do të japë vlerat së bashku me fjalëkalimin tim.
Fjalëkalimet në tabelën e përdoruesve tonë nuk janë ruajtur vetëm si string.
Ata janë ruajtur si versionin e koduar,
kështu që ju do të dëshironi të drejtuar Crypt në funksion fjalëkalim aktuale,
dhe që do t'ju japë llojin e saktë të magazinimit për rrjet përdoruesit.
Drejtimin e kjo do të futur një rresht të ri në përdoruesit tryezën tuaj.
>> Të merret me funksion query,
më parë në C kemi përdorur si një shenjë qind placeholder.
Në mënyrë të ngjashme, i njëjti koncept i një placeholder vlen edhe këtu.
Me pyetje, ju specifikoni pyetje tërë,
përveç kur ju jeni që kanë të bëjnë me të variablave si input tuaj në pyetje,
pastaj në vend të vërtetë vënë ato brenda - si kur kemi pasur deklarata printf në C.
Ne do të vënë të vargut dhe pastaj të ketë një placeholder atje, dhe pastaj pas çdo
presje, të përcaktojë se cila ndryshueshme kemi pasur.
Këtu, ne jemi duke shkuar për të përdorur shenjë pikëpyetje si placeholder tonë
dhe pastaj të kalojnë në çdo variabël, përkatësisht në mënyrë që, për placeholders -
ku këto variabla duhet të shkoni.
Kështu që këtu, shenja e parë çështja do të zëvendësohet me emrin aktual
atëherë shënojë dytë pyetja nga fjalëkalim.
>> Pastaj në fund, një herë ju keni regjistruar ata dhe shtoi ato në bazën e të dhënave,
atëherë ju doni të hyni në faqen e internetit e tyre.
Ne kemi lloj të një sesioni super-globale ndryshueshme quajtur.
Sesioni merr një ID të caktuar,
dhe që korrespondon me id përdoruesit që është regjistruar aktualisht in
Çfarë ju do të dëshironi të bëni është të gjeni atë që përdoruesi është id tyre
dhe pastaj atë sesion id si id këtë përdorues të veçantë.
Një funksion që ju do të dëshironi të përdorni këtu është një komandë SQL
që do të rifitoj numrin e fundit futur id nga tabela tuaj.
Pastaj do të thërrasë rreshtave - it'll telefononi id - it'll caktojë një emër për numrin se ajo e kthimit.
Ajo do të thërrasë atë id.
Tani ne kemi përfunduar regjistroheni, dhe ne mund të lëvizin për të japin kuotën e.
>> Cituar lejon një përdorues të input emrin e një gjendje të caktuar,
dhe pastaj ajo do të kthehet cilësitë e atij aksioneve.
Çfarë ju do të dëshironi të bëni këtu është të ketë një kontrollues dhe disa templates.
Në këtë rast, ne do të kemi një kontrollues i cili do të bëjë të gjithë të menduarit për ne.
Ajo do të shikoni simbolin dhe pastaj të kalojë në vlera të templates që do të shtypura jashtë.
Ne do të kemi 2 templates këtu.
Ne do të kemi 1 template që jep formën në të cilën përdoruesit do të
emri kontributin e aksioneve - emri i pjesës.
Pastaj ne jemi gjithashtu do të duan një tjetër template që tregon këto vlera.
Ju mund të shikoni në hyrje për një shembull se si ju do të keni një formë që pranon të dhëna,
përveç në këtu, ne duam vetëm 1 fushë.
Ne nuk duam një username dhe një fjalëkalim fushë.
Ne vetëm duam 1 fushë teksti që lejon përdoruesin të dhëna emrin e një gjendje të caktuar.
Pastaj ju dëshironi të dërgoni që të dhënat - një herë ju keni shikuar deri se aksioneve -
të quote_form.php.
Lookup do të kthehen simbolin e aksioneve, emri, dhe një çmim.
Ata janë të përfshira në një grup shoqëruese.
Look up funksionin lookup brenda functions.php për më shumë informacion
mbi llojet e kthimit të atyre.
>> E madhe! Pra pastaj në fund, ju do të dëshironi për të shfaqur informacion aksioneve.
Ju ndoshta do të dëshironi të shfaqur - you'll duan të hyni në këto variabla.
Pasi të keni çmimin në një variabël -
si dhe emrin dhe simbol -
atëherë ju do të dëshironi për të shfaqur ato në faqen tuaj template.
Kjo faqe template mund të quhet show_quote.php apo diçka.
Faqja juaj quote.php do të bëjë të japin kuotën e tregojnë dhe pastaj të kalojnë në të gjitha këtyre vlerave.
Pastaj në faqen tuaj php, ju në të vërtetë të shtypura nga ato vlera në aspektin HTML të faqes.
Ju vetëm përdorni funksionin shtypura dhe të kalojë në çmim.
Ka 2 mënyra - ju mund ta lidh atë me operatorin dot,
ose përdorin një placeholder.
>> Përdoruesit e përfundimisht do të jetë blerjen dhe shitjen e stoqeve.
Ne duam që të lejojë atyre ndonjë mënyrë për të parë të gjitha rezervat që ata aktualisht kanë.
Ne jemi duke shkuar për të thirrur që të portofolit të tyre.
Portofoli do, me sa duket për çdo përdorues, të përmbajë një bandë e rreshtave
renditur llojin e aksioneve që ata kanë dhe pastaj sa prej atyre që ata kanë.
Tabela tona ekzistuese - tani ne kemi një tryezë të përdoruesit në database tonë.
Që përmban emrin e përdoruesit, si dhe kalimin e tyre dhe sa të holla që ata kanë.
Nuk ka asnjë mënyrë të vërtetë për ruajtjen e të gjitha rezervat e tyre brenda se.
Ajo nuk është si ne mund të futur kolona të reja për çdo magazinë.
Kjo do të jetë një rresht shumë, shumë të gjatë, sepse ne kemi një sasi të pafund
e llojeve të stoqeve që ata mund të kenë.
Pra, në vend se çfarë ne do të bëjmë është brenda bazës së të dhënave të njëjtë,
ne do të kemi një tryezë të përdoruesit, por atëherë ne do të kemi një tryezë të portofolit.
Tabela Portofoli do të lidhet patjetër në tryezë përdoruesit,
por në vend tabela portofolit struktura do të ketë informacion të aksioneve,
sa aksionet e aksioneve që përdoruesi ka,
si një përdorues të veçantë numri id.
Ju keni tabelën e përdoruesit i cili ka një id, si dhe emrin, i hash -
cila është fjalëkalimi, fjalëkalimi Encrypted -
dhe pastaj shuma e parave që ata kanë.
Numri id do të lidhet me numrin id nga portofoli.
Portofoli i vetëm do të ketë simbolin e aksioneve, si dhe aksionet -
numri i aksioneve të aksioneve të atij që përdoruesi ka.
Në këtë tryezë të portofolit ju do të keni në thelb
të gjitha aksionet e pushtuar nga të gjithë përdoruesit në faqen tuaj.
Më vonë, të specifikojë vetëm aksionet e një përdorues të caktuar të portofolit të tyre - vetëm -
ju do të marrim vlerat nga tabela portofolin tuaj të tilla që
numri id është specifik për këtë përdorues.
>> Kur ju shfaq portofolin, ju do të dëshironi të raportojnë çdo stoqeve në portofolin e një përdorues.
Ju do të dëshironi të raportojnë numrin e aksioneve dhe vlera aktuale e këtyre aksioneve.
Se vlera aktuale e këtyre aksioneve nuk është ruajtur në tabelën e portofolit
sepse kjo do të jetë përditësimin - në minimum - për çdo ditë nga Yahoo.
Për të marrë këtë informacion, ti nuk mund referencë se nga query tuaj SQL.
Çfarë funksioni parashikon që për ne? Çfarë funksioni do të marrë çmimin?
Kjo është lookup, kështu që duke përdorur lookup në një simbol të veçantë do t'ju japë një shumë të informacionit.
Kjo do të ju jap 3 pjesë të informacionit - emrin, simbolin, si dhe çmimi.
Sapo ju të lookup një simbol të caktuar, atëherë ju mund të merrni çmimin,
dhe pastaj ju mund të përdorni çmimin që do të shfaqet në portofolin tuaj.
>> Portofoli duhet të shfaqin bilancin e përdoruesit të holla.
Kjo fushë është ruajtur brenda përdoruesit tryezën tuaj.
Kështu atëherë kujtohet se si ne jemi në thelb ka për -
ne jemi të paturit e lloje të ndryshme të dosjeve PHP.
Ne do të kemi një kontrollues i cili në thelb bën të gjithë të menduarit për ju.
Dhe pastaj ne kanë një template në të cilën shablloni merret me të dhëna outputting.
Ju duhet të mendoni për atë variabla kontrollues do të duhet të marrë in
Nëse ne jemi që kanë të bëjnë me një portofol që rezultatet çdo emër, simbol, dhe numri i ndajnë,
si dhe çmimi aktual i aksioneve,
atëherë ju do të dëshironi të gjeni një mënyrë për të kaluar në thelb -
ju mund të kalojë në një grup të vlerave që përputhen me këtë.
>> Le të shkojë në një shembull se si ju mund të marrim të gjitha rezervave
në pronësi nga një përdorues të veçantë.
Kjo nuk ka të bëjë - ende - me çmimin e aksioneve.
Çfarë kjo do të bëni është të drejtuar një pyetje.
Ajo do të marrë si simbol të aksioneve nga -
Unë jam duke e quajtur këtë tryezë, por në këtë rast çfarë do të jetë?
Cili është emri i tabelës që ne jemi që kanë të bëjnë me atë që ka simbol dhe aksionet
për një përdorues të veçantë?
Kjo është ose përdoruesit ose portofol.
Portofolit.
Çfarë kjo do të bëjë është portofoli query për simbolet dhe aksionet
për një përdorues të veçantë.
Ja, unë të them, (simbol SELECT, aksionet NGA TBL -
por në vend të tabelës, ju jeni do të zëvendësojë atë me portofolin.
"Ku" në thelb është kushti im.
Unë jam duke thënë unë vetëm dua të të marrë ato vargjeve associative që korrespondojnë
për këtë gjendje në vijim - id barabartë.
Atëherë unë jam duke i dhënë një placeholder atje dhe pastaj id sesion.
Çfarë kjo do të bëni është të thonë për çdo rresht në rreshta.
Kjo është një mënyrë i zoti në vend të vërtetë ka për të ngritur një për lak
se iterates mbi të gjitha indekseve, pastaj në PHP ju mund të ketë një për-çdo lak.
>> Nëse ju keni një koleksion të caktuar, atëherë ju mund të thonë se unë jam duke shkuar për të thirrur çdo element të njëpasnjëshme -
Unë jam duke shkuar për të thirrur çdo element ky emër.
Pra, për çdo një nga këto elemente, unë jam duke shkuar për të thirrur ata këtë,
atëherë unë mund ta bëjë këtë.
Në këtë për çdo, ju keni rreshtave si grup tuaj aktuale, si dhe çdo rresht ju jeni do të thërrasë rresht.
Çdo herë ajo ekzekuton trupin,
ajo do të shkojë dhe ajo do update rresht për elementin tjetër në rreshta.
>> Tani, në drejtim të blerë stoqe,
ajo që ne duam të bëjmë është të marrë të aksioneve që përdoruesi dëshiron të blejë
dhe shumën e aksioneve që përdoruesi dëshiron të blejë, dhe pastaj - në qoftë se ata duan -
shtoj se aksioneve në portofolin e tyre.
Natyrisht, në qoftë se ata janë të blerë diçka, atëherë kjo do të zvogëlohet
shuma e parave që ata kanë, kështu që do të ulet para tyre.
Ne jemi duke shkuar për të merret me përditësimin e portofolit si dhe tabelën e përdoruesit,
cila përmban të holla.
Por së pari, ju duhet të merrni të aksioneve aktuale dhe shumën e aksioneve që përdoruesi dëshiron.
Për këtë, ju do të duhet një formë HTML që do të kërkojë për simbol të aksioneve
se ju dëshironi të blini, si dhe numrin e aksioneve.
Pastaj ju do të dëshironi të shtoni.
Ju do të dëshironi të zgjidhni vlera të caktuara.
Ne kemi kaluar nëpër këtë pak pak tashmë, por kur ju jeni duke u përpjekur për të marrë disa rreshtave -
rifitoj rreshtave të caktuara nga tabela SQL,
kjo është sintaksë e mëposhtme.
Ju keni zgjedhur, dhe pastaj nëse ju specifikoni një yll,
që do të kthehen në thelb tërë rresht, të gjithë për ju.
Pastaj përsëri, ju keni gjendjen ku, dhe pastaj ju të specifikojë -
Unë vetëm dua emrin të jetë e barabartë me email-in,
kështu që ai vetëm do të rifitoj rresht në përdoruesit që korrespondon me email-in.
>> Kur një përdorues kërkon të shtojë një pjesë të një portofol,
ju duhet të shikoni për disa gabime.
Ju dëshironi të bëni të sigurtë që përdoruesi mund të vërtetë të përballojë të aksioneve,
kështu që ju do të dëshironi të kontrolloni para tyre.
Para, kemi përdorur yll të rifitoj një rresht të tërë nga një tryezë SQL.
Por këtu, ne mund të vërtetë vetëm të specifikojë se unë vetëm dua 1 vlerë -
Unë vetëm dua të holla.
Kështu që këtu, ajo do të kthehet të holla për përdoruesit me id numrin 1.
Nëse një përdorues ka blerë tashmë një gjendje të caktuar, por pastaj blen më shumë se aksioneve,
pastaj në portofolin tuaj - ju nuk doni një linjë të veçantë,
një tjetër rresht që përmban këtë transaksion të ri.
Ju në fakt doni të rinovuar shumën.
Të gjitha që është duke ndryshuar me të vërtetë është sasia e aksioneve që zotëron që përdoruesi.
Në qoftë se ju përdorni futur në pyetje - kështu që është vetëm futur në portofolin tuaj të gjitha këtyre vlerave -
numri i anëtarit id, si dhe simbol i aksioneve që ata jeni duke blerë
dhe aksionet, atëherë ju do të dëshironi të specifikojë, mirë, në qoftë se unë të drejtuar në një çelës kopjuar -
në këtë rast, çelësi kopjuar nuk është vetëm id e përdoruesit, por edhe simbol të aksioneve -
sepse ju mund të ketë vetëm - Premisa jonë është se ju mund të ketë vetëm 1 rresht
që korrespondon me 1 simbol të veçantë.
Pra, në kyçe kopjuar - në qoftë se keni drejtuar në një përplasje atje -
ju jeni vetëm duke shkuar për të rinovuar aksione me vlerën e saj të ri.
Aksionet e barabartë me çdo gjë që kishim para plus numrin e aksioneve që përdoruesi është blerja.
>> Tani që ne kemi përditësuar tabelën e portofolit,
Ne do të duan për të rinovuar të holla e përdoruesit.
Kjo është në tabelën e përdoruesit, kështu që ne jemi duke shkuar për të zbritur një sasi të caktuar nga të holla.
Me sa duket, ajo do të jetë e barabartë me të holla minus holla - dhe pastaj një sasi të caktuar.
Për të rinovuar të holla, ju do të -
nëse kam kërkuar për të marrë para nga larg-mail në, atëherë unë do të drejtuar këtë query -
'Freskimi' përdoruesit dhe pastaj vendoset në kolonën holla për të holla -
>> Unë do të heqë dollarë 9999 vetëm nëse emri i përdoruesit është e barabartë me email-in.
Por, në këtë rast, ne nuk duam të zbres 9.999 specifike.
Ne duam që të specifikojë, mirë, ne duam të zbresim çmimin aktual të aksioneve
shumëzuar me numrin e aksioneve që ata janë të blerë.
>> Tani ne kemi lejuar që ata të parë të gjitha rezervat që ata kanë,
si dhe të blej aksione më shumë.
Ne gjithashtu kemi lejuar parë ata të shikoni çmimin aktual të aksioneve një.
Këtu duam të lejojë që ata të shesin ato.
Së pari ne duam të shfaqur në thelb -
ne duam të lejojnë ata të shohin të gjitha rezervat që ata kanë,
kështu që këtu ne duam të shfaqur të gjitha rreshtave nga portofoli.
Në qoftë se ata zgjedhin për të shitur një gjendje të caktuar,
atëherë ne do të supozojmë se ata duan të shesin të gjithë atë.
Ata nuk janë vetëm do të shesë 50% të aksioneve të tyre, ata do të shesë 100% të saj.
Ne vetëm mund të fshini rreshtin e tërë nga portofoli.
Ne mund të fshini aksionet e përdoruesit caktuar të të simbolit të caktuar.
Ka sintaksë për këtë.
>> Atëherë ne duam të rinovuar të holla.
Ne jemi duke shkuar për të shtuar në të holla të barabartë me shumën e aksioneve që ata janë të shitur
shumëzuar me çmimin aktual të aksioneve -
jo çmimi me të cilin ata e bleu atë, por çmimi me të cilin ata janë -
çmimi aktual, kur ata janë të shitur atë.
Për referencë çmimin aktual të aksioneve një,
ju do të dëshironi të përdorni lookup, e cila do të ju jap çmimin e një gjendje
në kohën e tanishme.
>> Tani ne jemi të majtë me historinë,
të cilën ju doni të lejojë një përdorues që të mbajnë gjurmët e të gjitha transaksioneve të tyre -
dëshiron të shohë kur ata shiten diçka, sa herë që ata blerë një gjendje.
Ne duam të specifikojë kohën në të cilën ata e bëri atë, si dhe sa ata blenë
dhe çfarë e aksioneve ishte.
A kemi ndonjë strukturë aktuale, ekzistuese që përcakton se?
E pra, ne kemi portofolin e cila tregon numrin e stoqeve që një përdorues ka
për një pjesë të caktuar.
Por ne jemi strukturimin e portofolit në mënyrë që ajo përditësime kur kemi blerë të shumta,
kurse historia duhet të - në qoftë se ju bleni mollë, 10 aksione të saj, dhe pastaj më vonë të shitur 5,
atëherë ju do të duan të shohin ata vete si veprime të veçanta, të ndara rreshtave.
Ndërsa që veprimi të kujtoj se në tryezën tonë të portofolit
do të jetë vetëm një update për këtë rresht të veçantë,
kështu që ne jemi ndoshta do të duan një tjetër tryezë.
Në database tonë, ne kemi përdoruesit tabelën tonë, ne kemi tabelën tonë të portofolit,
dhe tani ne ndoshta do të duan një tryezë histori.
Kjo tabelë historia mund të ruaj gjurmët e datës aktuale,
si simbol të veçantë të aksioneve, si dhe sa aksione,
dhe pastaj çfarë veprimi është -
nëse ju jeni duke blerë ato aksione ose nëse keni qenë shitjen e tyre.
>> Për t'u marrë me sot, ka disa mënyra që ju mund ta bëni këtë.
PHP ka një mënyrë për të mbajtur gjurmët e datës, të cilat ju mund të kërkoni vetë.
Në SQL ju gjithashtu mund të përdorni ose tani ose timestamp aktuale. Kjo është deri tek ju.
Vetëm sigurohuni që çdo herë që një përdorues blen ose shet, ju do të jetë përditësimin e tyre të holla
në tabelën e përdoruesve, ju do të jetë përditësimin e rreshtave në tabelë portofoleve,
atëherë ju do të jetë përditësimin e historisë,
kështu që nuk do të jetë 3 pyetje të veçanta SQL që ju do të jetë quajtur atje.
Ne kemi një bandë e funksionalitetit tani.
>> Vetëm një çift të lajmërimeve që në dosjen tuaj tregues, ju do të duan për të lidhur të paktën tuaja -
por ju do të dëshironi të lejojnë një përdorues për të link-faqen buy.php.
Kjo do të lejojë një përdorues - buy.php është kontrollues, kështu që do të ose
ju dërgojnë të - që do të ju dërgojnë në formën që ju lejon të shikoni gjërat.
Ne kemi histori. Ne kemi të dilni, duke marrë një kuotë dhe pastaj shitjen.
Ata janë në minimum atë që ju dëshironi për të treguar.
Në kushtet e portofolit, portofoli është treguar në fakt në faqen e indeks.
Nëse ne do të shkojmë për të indeksit, këtu ne shohim se ai bën portfolio.php
dhe kalon në rrjet associative - në thelb titullin e barabartë me portofolin.
Pra, kjo është kontrollues.
Nëse ne do të shkojmë në shabllonin e portfolio.php,
atëherë të gjitha ajo ka është - tregon në thelb një foto që thotë, oh, kjo faqe është në ndërtim e sipër.
Më vonë, sapo ju të kalojë në - you'll të kalonte në informacion në thelb më specifike.
Në vend të vetëm titullin, ju ndoshta do të kalonte në gjëra më shumë.
Pasi të keni këto vlera, atëherë portfolio.php mund të merren me ato vlera
dhe shtypjen e tyre në çdo lloj të rendit.
>> Pasi të keni zbatuar të gjithë ata, ju gjithashtu duhet të zbatojë funksion 1 më shumë.
Kjo mund të jetë ose duke lejuar një përdorues që të ndryshojnë fjalëkalimin e tyre,
për të rivendosur fjalëkalimin e tyre në qoftë se ata kanë harruar atë - kështu që për të rivendosni fjalëkalimin, pastaj
ju ndoshta do të dëshironi të redaktoni regjistroheni në mënyrë që ajo u lejon atyre të specifikoni një email,
kështu që nëse ata harrojnë fjalëkalimin e tyre, atëherë ata mund të merrni atë.
Ata ndoshta mund të hyjë në emrin e tyre, dhe pastaj një email do të dërgohet ndaj tyre
me një lidhje të jetë në gjendje për të rivendosur fjalëkalimin e tyre.
Ju mund të keni diçka që lejon përdoruesit për të marrë faturat
çdo herë që ata blejnë apo shesin diçka,
dhe pastaj në fund, do të lejojë që ata të shtoni të holla për web faqen e tyre.
Vetëm për të shkuar përsëri në konceptin e kontrollorëve dhe templates pak.
Ju do të keni diçka si një - kështu që ju do të keni një kontrollues këtu.
Tani për tani, ne jemi duke kërkuar në shembull login.php.
Kur kemi një kontrollues, në thelb ajo do të marrë 2 raste.
Kur kemi kontrollorëve, ne jemi në këtë pjesë që ne jemi gjithashtu kanë të bëjnë me lloj
kur kemi forma si.
Kontrollues në thelb do të ketë veprime të veçanta -
një, nëse një formë tashmë është dorëzuar, dhe pastaj dy në qoftë se përdoruesi po vjen në këtë faqe
për herë të parë dhe ende ka nevojë për të dhëna se forma.
>> Unë jam duke shkuar për të kërcejnë në atë rast të parë para se të shkojnë deri në rastin e parë të pasurit formularin in
Këtu ne themi, nëse forma është dorëzuar me postë metodë -
mos u bëni merak për këtë një grimë.
Mos u shqetësoni për këtë shumë, por e kuptojnë se në thelb ky funksion ka të bëjë me
nëse një formë është dorëzuar apo jo.
Kjo gjendje është e vërtetë në qoftë se një përdorues ka dorëzuar formularin.
Nëse jo, atëherë ne do të duan të thërrasë login_form.php bëjnë, dhe pastaj kalojnë në titull.
Ky titull është vetëm në thelb do të shfaqet në kokë.
Çfarë kjo nuk është në thelb thotë, në rregull - mirë, në qoftë se një përdorues shkon në login.php
dhe nuk ka të vërtetë në Anglisht, atëherë unë dua të dërgoni ato tek faqja e që ka këtë formë
e cila u lejon atyre të dhëna emrin dhe fjalëkalimin.
Pastaj unë po shkoj tek login_form, dhe pastaj që ka formën aktuale.
Pastaj, pasi përdoruesi paraqet atë formë, ata do të dërgojë atë në login.php
me postin metodë.
Atëherë unë jam në të vërtetë do të hyjë në këtë seksion të nëse-tjetër lak tim.
Atëherë ajo është këtu që të merremi me vlerat hyrë në formë.
Është këtu që të merremi me ato.
>> Pastaj një herë ju të merren me ato vlera - në qoftë se ju jeni që kanë të bëjnë me të -
thonë se ne jemi që kanë të bëjnë me faqen quote.php ku dikush mund të input një gjendje që
ata duan për të parë, dhe pastaj të shohim se ekranit -
kjo është lloj i ngjashëm këtu.
Këtu kemi një formë login - you'd ndoshta kanë një formë të japin kuotën e -
por pastaj kur përdoruesi ka paraqitur këtë informacion të vërtetë,
atëherë ju do të dëshironi kontrollues për të kaluar në një tjetër template
që do të tregojnë atyre se informacion aktual.
Kështu, pra, të drejtë rreth këtu, atëherë ju ndoshta do të -
rreth përfundimit të gjendjes tuaj këtu - nëse metoda e barabartë me postin -
atëherë ju ndoshta do të duan të bëjnë një tjetër faqe - të japin kuotën e tregojnë -
e cila ju dërgon në atë faqe - show_quote.php--
dhe pastaj në atë dosje do të referohen këto vlera.
Bën që të bëjnë kuptim?
>> Ne kemi një kontrollues që në thelb merret me 2 raste -
nëse ju keni hyrë në një formë apo jo.
Nëse ju nuk keni hyrë në një formë,
atëherë ajo do të ju përcjellim në atë formë, e cila pastaj do të ju vë përsëri në atë faqe.
Pastaj, një herë ju keni informacion në kontrollues, se trupi do të merret me këtë
Informata të nevojshme - qoftë duke kërkuar deri vlerat për magazinë,
dhe pastaj një herë ajo dukej deri ato vlera dhe i ka ato në një grup të bukur formatuar,
atëherë mund të kalojë atë grup në faqe template
që merret me outputting këtë informacion.
>> Përsëri, pasi ajo web, ajo do të jetë kënaqësi.
Ne jemi jashtë C kështu që ne nuk jemi të kufizuar në ASCII dhe se prodhimit terminal,
kështu që të argëtohen me këtë.
Ju mund të bëni atë si vizual si ju dëshironi.
Ju mund të lejojë përdoruesve për të dhëna miliona dollarë në një kohë,
ose kufizojnë ato dhe të vërtetë do të thotë dhe do të lejojë ato vetëm për të hyrë 1 qindarkë në një kohë
ose diçka të tillë.
Patjetër të jetë i sigurt që të ketë fun me këtë.
>> Kodi PHP është pak më e thjeshtë në atë që është pak më e lehtë të ndajë pseudokod tuaj
në zbatimin aktual.
Pra, definitivisht have fun me këtë, sepse kjo është në fakt pjesë e jonë e fundit në CS50.
Me që, kjo ishte Walkthrough 7.
Pasi të keni mbaruar shikuar walkthrough dhe përfundoi pset tuaj,
atëherë këto ishin gjithashtu psets, dhe tani ne jemi në të produktit final -
pasi kemi marrë përmes quiz 1.
Atëherë shpresojmë se ju mund të përdorni mjetet që ju keni mësuar nga psets -
jo vetëm sintaksë, por më shumë nocion abstrakt se si për të marrë një të caktuar -
si, unë dua të bëj këtë dhe pastaj të vërtetë e zbatuar atë.
Mësoni se si të luftojnë përmes sintaksës dhe kodin e shpërndarjes.
Leximi kodin e njerëzve të tjerë, dhe pastaj interpretimin se përdorimi i para-ekzistuese funksione.
>> Pra, fat i mirë me pset fundit.
Kjo është një kënaqësi për të udhëhequr walkthroughs.
Unë shpresoj se ata kanë qenë të dobishme për ju.
Këto ishin Walkthroughs, dhe falë shumë.
[CS50.TV]