[Powered by Google Translate] [Walkthrough Problemo Ŝanĝu 7] [Zamyla Chan] [Universitato Harvard] [Jen CS50] [CS50.TV] Saluton ĉiuj, kaj bonvenon al Walkthrough 7, CS50 Financoj. Nun ni estas oficiale farita kun ĉiuj psets en CS50, kaj ni ĵus forlasis kun pli kiu tuj estos amuza realigo de retejo kie uzantoj povas ensaluti por CS50 Financoj kaj aĉeti kaj vendi trabon. Hodiaŭ, ni tuj havos kelkajn ilojn je nia dispono. Ni tuj parolos pri permesoj. Kiam ajn vi havas TTT-dosierujo, vi tuj volas permesi al la uzantoj ekzekuti iuj dosieroj sed ankaŭ nur legi aliaj, do ni rigardas permesoj kaj kiel vi povas agordi tiujn. Tiam ni iras por rigardi en PHP, HTML, kaj SQL-kodo. Unue, permesoj. Kiam vi estas en la fina en certa dosierujo, tiam tion, kion vi volas fari estas vi volas lanĉi la chmod komando. Tio sekvis per ĉu literoj aŭ numeroj responda al kio vi esence volas ke la mondo vidas, vi mem vidi, ktp Ekzemple, kiam vi havas dosierujo, tiam vi volas ke dosierujo esti ruleblan de ĉiuj kiuj vidas, do kion vi faras estas vi povus ruli la komandon chmod a + x kaj tiam la nomo de via dosierujo. Kiam vi havas dosieron kiel CSS dosierojn aŭ bildon dosieroj - kiel JPEG-oj kaj bitmaps, aĵoj kiel tiu, aŭ ajna kodo JavaScript - vi volas, ke por esti legebla per ĉiuj, tiel do, kion vi faras estas vi povus uzi la Wildcard - kio estas asterisko - al esence indiki en la CSS dosierujo - ĉio en tiu dosierujo -  Mi intencis diri, ke tiu tuj estos legebla de ĉiuj. Kun permesoj, kiam ni uzas la literojn, ni povas uzi ankaŭ ciferojn anstataŭe. Do, vi vidas ke finfine, kiam vi volas ion por esti ruleblan - ke tio reprezentas la numeron 1 - ion por esti legebla estas la numero 4 kaj tiam - skribebla estas la numero 2 - kaj tiel esence kiam vi volas kombino de tiuj, do vi aldonas ilin. Se vi volas ion por esti legebla, skribebla, kaj plenumebla, tiam vi aldonus ĉe 4, 2, kaj 1 kaj kiu donus al vi 7, tiam kiam vi havas dosierujo vi volas, ke esti ruleblan de ĉiuj - tiel kiel legebla kaj skribebla - tiam vi faras ke 7, 1, 1. Tio estus 7 por vi, tiam 1 por la aliaj homoj. Kiam vi havas la specifo, ĝi devos vere precizigi kion dosierujojn kaj kiuj dosieroj bezonas esti chmod-ed specife. Ekzemple, kiam vi havas dosierujoj - tiuj estas 7-1-1 - kiam vi havas bildojn aŭ HTML, CSS, JavaScript, tiam tiuj tuj estos 6, 0, 4 - aŭ 6, 4, 4 - kaj tiam PHP dosierojn tuj estos 6, 0, 0. La ideo malantaŭ tio estas ke la uzantoj ne vere vidi vian PHP kodo, sed gxuste povos vidi la eligo. Bonega! Enirante en PHP. Simple, kiam vi volas PHP-dosiero, la dosiera sufikso estas. Php. Vi povas ankaŭ miksi HTML kun PHP-kodo. Se vi havas HTML-dosiero, ekzemple, tiam vi povas kunsendi gxin per la maldekstra angulo, demandosigno, php - meti vian php kodo - kaj tiam fermi ke kun alia demandosigno kaj dekstra angulo. Variabloj en PHP estas multe pli facile trakti ol variabloj en C. Neniu variablo nur komencas kun dolaro signo antaŭ ĝin, kaj ili estas malforte tajpita. Tio signifas ke vi ne bezonas zorgi pri opcio ion egala al ĉeno aŭ entjero. Vi povas simple diri simple, ĉi tiu estas mia nomo de la variablo kaj tiam ĉi tiu estas ĝia valoro, tial ĝi tuj estos pli facile trakti tie. Alia afero estas ke PHP permesas vin uzi asocian tabeloj. Vi povas simple simple difini aron kiel vi farus en C dirante, dolaro signo-la nomo de via tabelo-egaluloj, kaj poste en kvadrataj krampoj havas esence nur la liston de valoroj de ĉiuj eroj en la tabelo. Sed, en PHP, kion vi povas ankaŭ fari estas precizigi esence la - ĝi estas speco de kiel krada funkcio. Vi povas specifi la indekso - kion vi tuj nomas ĝin - kaj tiam kiu respondas al valoro. Se vi vere pasi en = 1, b = 2, c = 3, tiam via tabelo en indekso de donus al vi 1. Ĉi pset estos varmigi vin kun iuj PHP en sekcio de demandoj, kaj poste ni plonĝi en CS50 Financoj. Ni havas kelkajn - ni havas iujn funkciojn, esence, apliki en ĉi tiu retejo. Ni volas permesi al la uzantoj enskribis en nia retejo kun uzantonomo kaj pasvorto. Ni volas ilin permesas serĉi oni citas, kaj tiam ni devus presi la nomo de tiu citaĵo kaj ankaŭ la nuna prezo, ke ĝi estas en. Ni volas ilin permesas vidi biletujo de ĉiuj el la agoj, kiujn ili aĉetis ĝis nun. Ni ankaŭ volas permesi ilin por aĉeti akcioj tiel kiel vendi ilin. Kaj poste fine, ni volas ilin permesas vidi la historion de ĉiuj el la transakcioj kiuj ili jam faris. Tiam, fine, post vi implementado ĉiuj de tiu, tiam vi estas libera por apliki unu ekstra karakterizaĵo. Ni iru en tiuj. Tiuj povas esti ĉu permesante uzantoj akiri ekstran monon por deponi ekstran monon, aŭ vi povus permesi ilin ŝanĝi sian pasvorton, aŭ io simila, retpoŝti ilin ricevon kiam aĉeti aŭ vendi akciojn. Estas limigita listo de trajtoj, ke vi povus apliki vin, do tio estas la lasta tie. Ekde ĉi tiu estas retejo, vi infanoj ankaŭ havas multajn liberaj adapti ĝin. Ni faras havigi iujn CSS kodo, sed vi estas ja libera tweak ĝin, fari ĝin rigardi pli agrablan, sed formas ĝian bazon estas baza funcionalidad tiel ĉiam rilatas al la specifo pri kio vi vere bezonas inkluzivi tie. Post la specifo, ni tuj estos uzi la aparaton kiel ankaŭ servilo. Oni tuj estos gastigi nian retejon por ni, sur ĝia loka servilo. Se vi sekvas tiujn instrukciojn kaj maldensigi la pset 7 dissendo kodo en viajn virtualajn gastiganto / loka gastiganto dosierujo,  tiam vi povas simple viziti http://localhost/ en Google Chrome en la aparaton, kaj tiam vi atingus la kodo kiun vi skribis pset 7. Pset 7 venas kun amaso de dissendo kodo, kaj espereble we've - tra ĉiuj psets antaux tio - alkutimiĝis al ni legas tra dissendo kodo, kompreni kion funkcioj estas jam havigita, kaj kiel ni eble povus uzi tiuj kaj la aliaj funkcioj kiuj ni tuj estos apliki. En ĉi tiu kazo, ni havas 3 dosierujoj. Ni havas HTML dosierujo, oni inkludas dosierujon, kaj ŝablonoj dosierujo. Kion ni tuj faros kun ĉi pset estas speco de disigi la pensado - la programado pensado - de la PHP kodo kun la efektiva vida aspekto. Ni devos unu PHP-dosiero kiu faras ĉiujn pensado, legas en la datumbazo, impresoj el aferoj, havas se deklaroj - aĵoj kiel tiu - kaj do devos pasi datumojn en nia ŝablono dosiero - aŭ template.php dosiero. Kion tio faros oni legas la datumojn kaj tiam estos presi ĝin. Ni povas trakti ŝablonoj kiel "muta" en kiun ni ne vere volas ilin esti faras multe da laboro en kalkulanta aĵoj. Ni volas nian controladores fari tion. Iom iom de tiu - ni rigardu iujn de la dissendo-kodo. Ĉi tie ni havas niajn index.html dosieron, kaj ĝi estas sufiĉe malplena. Esence kio faras - gxi diras, bone, mi tuj postulos la configuration.php dosiero. Ni ne vidas, ke dekstra tie, sed ĝi estas esence nomante la configuration.php dosiero, kaj ekzekuti tio. Post tio faras ke, ĝi tuj redonu la biletujo. Rendering estas funkcio, do kiam ajn ni estas en controlador, ni vokos render, ni donos al ĝi la dosieron kaj poste la datumoj kiuj ni pasante en, por ke ĝi vokos en portfolio.php--ia pasas en tiu datumo por ke biletujo povas trakti tion. Kaj nun, jen, ni havas niajn login.php formo.  Ĉi tiu estas la controlador kiu esence prizorgas la tala in Ĉi tie, ĝi kontrolas se formo donita al ĉi tiu dosiero kaj traktas validigi la submetiĝo. Ni rigardu en tiun senkulpigi funkcio. Kiam ni volas presi erarmesagxon, ni uzas senkulpigi kaj tio alidirektilo al la uzanto specifa paĝo ke estos presi la specifa erarmesaĝon ke ni indikas. Daŭrigante plu, gxi konsulti la datumbazo - we'll enir pli de tiu poste. Tiam vi vidos ke cxi tie se formo ne afiŝita, tiam ĝi laude formo. Tio signifas ke iras al login_form.php, do ni rigardu tion. Login.php estas reale kie ni vidas la HTML komerci kun la efektiva vida aspekto. Jen ni havas enigo etikedo por la uzanto nomo, enigo, enigi la pasvorton, tiel kiel submeto-butonon. Tio estas vere kie la vida aspekto kaj la HTML-formo tuj okazos. Ĉi tie, diras ke ĝi estas tuj estos afiŝita per certa metodo, nomita post. Ni ricevos en la diferencoj inter metodoj - afiŝi kontre get, estas ankaŭ iu nomita pezo - ni ricevos en tiujn metodojn poste, sed por la intereso de ĉi pset, Mi tre kuraĝigas vin por uzi post. Ni scias ke esence fojo ĉi formo estas afiŝita - el login_form.php-- tiam iros al la ago - login.php-- esence pasi en ĉiuj tiuj parametroj de tiuj formoj en login.php. La rezultoj de tiu formo enhavas ene afiŝo asocieca tabelo. La indeksoj de la malsamaj elementoj en la post tabelo Estas precize kion vi specifi tie. Vi diras ke la nomo de ĉi tiu enigo estas uzantnomon. La nomo de ĉi tiu estas pasvorto. Simile, oni vidas la uzantnomon kiel la indekso de la asocieca tabelo tie. Se ni iras al la inkludas dosierujon, ni havas ĉi funkcioj dosiero kiu tuj estos tre utila. Ĉiuj de ĉi tiuj funkcioj estas implementado por vi. Vi ne bezonas specife apliki iun el tiuj mem, sed ili tuj sufiĉe utila. Ni pardonpetas, kiu kiel mi diris antaŭe, estos esence presi eraron mesaĝon por vi sur specifa paĝo - apology.php. Tiam ni havas escorial, do se vi simple nomas dump kaj poste pasos en la variablo, tiam venigos vin al paĝo kiu montras ke variablo por vi. Tiam ni logout, kio esence fini iun uzanto kunsido. Lookup tuj estos utila. Ekde ni pritraktas citaĵoj kaj akcioj, ni tuj povos - kaj estas esence reala tempo. Ni bezonas scii kio tiuj valoroj valoroj estas, do ni havos la lookup funkcio, kiu traktas pri Yahoo la dokumentado de akcioj. Iam vin serĉi iun simbolon de la sako, li revenos al vi la stock simbolo tiel kiel la nomo kaj la nuna prezo de tiu stoko. Tio estas la lookup funkcio. Tiam ni pritraktas mySQL, tial ni tuj estos voli ekzekuti iuj demandoj de nia SQL datumbazo. Ni havas query trakti - al ia abstrakta iom de tiu eksteren. Ni tuj estos pasante en la tuta ĉeno de nia SQL query - kaj ĉiuj variabloj kiuj iras sur ĝi - kaj kion tiu faras, estas reale ekzekuti ke por ni. Anstataŭ havi por skribi ĉiujn ĉi ekster ĉiu tempo kiu vi volas konsulti - per prenantaj ĉiuj el la rezultoj de tiu konsulto - tiam vi povas simple nomi la konsulto funkcio, kaj ĝi revenos al vi - depende kion vi uzas por via demando - probable vico de ĉiu el la rezultojn kiuj kongruas al la konsulto aŭ simila. Pli sur kiu poste tamen. Fine, ni havas alidirektilo kiu, kiel la nomo sugestas, alidirektilojn vi al malsama paĝo. Kaj tiam ni havas render, kiun ni iras al nomante kelkajn fojojn. Kiam vi estas en controlador, vi nomas redonu al la ŝablono paĝo kaj poste pasos en la valoroj kiujn la ŝablono estos tiam trakti. Tiuj valoroj probable tuj estos kontraktanta kun la tipo de eliro, ke vi volas esti montrita en via ŝablono paĝo. Okay. Tiuj estas la funkcioj, kaj estas multe pli al ĉi tiu dissendo kodo. Mi kuraĝigas vin por iri tra ĉi kaj esplori ĝin mem. Ankaŭ, la specifo verŝajne promeni vin per kelkaj aliaj elementoj de la dissendo-kodo. Jen resumo de la funkcioj trovita en functions.php. Okay. La unua tasko estas permesi al la uzantoj enskribis en la retejo. Ĝuste nun, estas ensalutu formo sur la retejo, kaj vi estas provizitaj kun kelkaj uzantoj kun pasvortoj. Vi povas uzi tiujn usernames kaj ensaluti, sed vi volas permesi personojn por fari siajn proprajn usernames kaj aldoni al la retejo. La aranĝo por registriĝo estas sufiĉe simila al la ensaluto formo, krom la salutnomo ne estas antaŭ-ekzistanta, kaj la uzanto ankaŭ bezonas havigi novan pasvorton, kaj tiam tipe ni havas pasvorton konfirmon. Iam la uzanto enigas ĉiuj de tiu informo, ni volas aldoni ilin al nia datumbazo de uzantoj. Ni tuj havos datumbazo - la SQL datumbazo - ke ni iras por referenci. En tiu datumbazo, ni havos tablon kun ĉiuj la uzantoj enhavanta liajn salutnomo, iliaj pasvorton, kaj ankaŭ kiom kontanta ili havas. En registro, ni volas permesi al ili eniri tiun informon. Ni volas montri ke formo. Ni volas certigi ke ilia pasvorton - ke ili eniris, kaj tiam ankaŭ ke la pasvortoj kongruas kiam ili eniras ĝin dufoje. Post ĉiu el kiuj estas farataj - supozante ke tiuj eraroj estas kontrolata - tiam ni volas aldoni tiujn uzantojn al nia datenbazo. Fine, kiam vi registris, estas bela oportune se vi ne bezonas reensaluti iam vi registris, do ni tuj ensaluti ilin en la retpaĝon, se ili jam registrita en sukcese. La unua tasko estas montri la formo, kaj tion oni efektive tuj estos - ĉi tiu tuta procezo de registro tuj esti modelita bela apude post ensaluto krom anstataŭ login.php vi havu register.php. Anstataŭ login_form.php--kiu estas la ŝablono - vi jam registri formo. Vi volas aldoni unu pli kampo - pasvorto konfirmo kampo - anstataŭ nur unu uzantnomon kaj la pasvorto. Poste, ni volas kontroli ĉu la pasvortojn egali aŭ estas malplena. Ni havas la adaptilo - register.php--kio tuj prizorgi faras tiuj kontroloj. Kiam formo estas donita per la post metodo, tiam ĉiuj el tiuj variabloj estas enhavita en la post tabelo. Vi volas certigi ke la post tabelo valoro je indekso pasvorton kongruas kun la konfirmo elemento. Vi volas certigi ke ne estas blanka, kaj vi volas certigi ke ili estas la sama. Unu oportuna afero pri PHP estas ke ni ne bezonas uzi string kompari plu. Ni povas uzi la egalaj-egalas operatoro  por kontroli ĉu kordoj estas egalaj unu al la alia. Por eraro uzado, vi volas pardonpeti. Senkulpigi, vi simple nomas la funkcio  kaj tiam specifi tipon de mesaĝo, kiun vi volas eligo. Vi tiam volas aldoni la uzanton al la datumbazo. Ĝis nun, ĉiuj ni estis farante estas simple pritraktas surloke kun la rezultoj de la formo. Nun, ni vere volas aldoni ilin al nia datenbazo. Por tio, ni unue volas certigi ke la salutnomo ne estas malplena. Komprenas, ke en retejo, vi ne povas havi plurajn uzantojn kun la samaj uzantnomo, tiel vi volas certigi ke kiam vi enmetas ion en vian datumbazon - enigi novan uzanto - tiam vi ne ricevos kolizio inter antaŭ-ekzistantaj salutnomo kaj la uzantnomo ke uzanto provas sendi. Por tio, kiam vi ekzekuti konsulto - enmeto certa uzanto kun iliaj pasvorton kaj komenca sumo de mono - iam vi nomas ke konsulto, tiam mySQL efektive reveni malvera se malsukcesas. La strukturo de uzantoj estas tia ke la kromnomo estas unika valoro, tial vi ne povas havi pli ol unu. Kiam vi provas kaj enmeti novan vicon kun uzantnomo kiu jam ekzistas, ke tuj revenos falsaj - kiel Bulea valoro falsaj. Al malfacila afero estas, ke vi volas kontroli, ĉu la rezulto estas la rezulto de via demando. Se ĝi mankas, tiam vi volas kontroli la triobla egalas operatoro. Tio fakte tuj kontroli ĉu estas fiasko aŭ ne, dum kiu, en nur simpla egalas-egalas, estus vera se la vico estis malplena. La rezulto de fiasko se estas kolizio inter uzanto estas la reala falsa valoro. Jen kiel vi enmetas en datumbazo. Jen estas la demando kiun vi kurus strikte en SQL. Unu afero estas ke oni povas vere iru al la retejo kiu sukcesas vian SQL datumbazo kaj ludi ĉirkaŭ tie por eniri permane aŭ valorojn aŭ vicoj. Ĝi Eligo kion la SQL eligo estas. Vi ankaŭ povas kuri SQL ordonojn ene de via datumbazo  kaj tiam vidi kion la sintakso povus esti, kaj poste traduki ke en la konsulto funkcio kiu havas en pset 7, kiu iras al esti tre simila al la demandoj kiujn vi vere kuri. Se mi volis enmeti novan vicon en mian uzantoj tablo, tiam mi precizigi insert sur uzantoj, kiu estas la nomo de mia tablo. Tiam mi estus specifi la kolumno nomoj. Tiam mi devus provizi la valoroj kune kun mian pasvorton. Pasvortoj en niaj uzantoj tablo ne stokitaj kiel nur la kordoj. Ili estas stokitaj kiel la ĉifrita versio, tiel vi volas lanĉi la funkcio kripto en la efektiva pasvorto, kaj kiu donos al vi la ĝusta tipo de stokado por la uzantoj tabelo. Kurante ĉi estos enmeti novan vicon en viajn uzantoj tablo. Por trakti la konsulto funkcio, antaŭe en C ni uzis la procentsigno kiel lokokupilo. Simile, la sama koncepto de lokokupilo validas ĉi tie. Kun konsulto, vi specifas la tuta demando, krom kiam ajn vi kontraktanta kun variabloj kiel via eniro en la konsulto, tiam anstataŭ efektive metante ilin ene - kiel kiam ni havis printf deklaroj en C. Ni devus meti la ŝnuron kaj poste havi lokokupilo tie, kaj post ĉiu komo, specifi kiuj variablo ni havis. Tie, ni iras al uzi la demandosigno signo kiel nia lokokupilo kaj poste pasos en ĉiu variablo, respektive en ordo, por la anstataŭiloj - kie tiuj variabloj devus iri. Do jen, la unua demando marko estus anstataŭita de la reala salutnomo tiam la dua demando marko de la pasvorto. Tiam fine, unufoje vi jam registris ilin kaj aldonis ilin al la datumbazo, tiam vi volas saluti ilin en la retejo. Ni havas specon de la super-malloka variablo nomita kunsido. Kunsido prenas iun id, kaj ke id respondas al la uzanto ke tio aktuale ensaltata Kion vi volas fari estas trovi kion liaj uzanto id estas kaj poste starigis tiu kunsido id kiel tiu aparta uzanto id. Funkcio kiun vi volas uzi ĉi tie estas SQL komando ke estos elsxuti la lastan insertos id numeron de via tablo. Tiam vicoj nomos - it'll alvoki id - it'll atribui nomon al la nombro kiu revenas. Ĝi vokos ke id. Nun ni finis registri, kaj ni povas movi sur citi. Citaĵo permesas al uzanto enigo la nomo de certa ago, kaj tiam revenos la kvalitoj de tiu stoko. Kion vi volas fari ĉi tie estas havi adaptilo kaj kelkaj ŝablonoj. En ĉi tiu kazo, ni tuj havos adaptilo kiu tuj faros ĉiujn pensado por ni. Ĝi tuj serĉi la simbolo kaj poste pasos en valoroj al la ŝablonoj kiu presi. Ni tuj havas 2 ŝablonoj ĉi tie. Ni tuj havas 1 ŝablono kiu havigas la formo kiun la uzantoj tuj enigo la nomo de la valoroj - la nomo de la ago. Tiam ni ankaŭ tuj volis alia ŝablono kiu montras tiujn valorojn. Vi povas rigardi en ensalutu por ekzemplo de kiel vi havus formon kiu akceptas enigo, krom en tie, ni nur volas 1 kampo. Ni ne volas uzantonomon kaj pasvorton kampo. Ni volas nur 1 tekston kampo kiu permesas al la uzanto serĉi la nomo de certa ago. Tiam vi volas sendi tiu datumo - kiam vi rigardis supren, ke agoj - al quote_form.php. Pririgardi redonos la simbolo de la sako, la nomo, kaj prezo. Tiuj estas enhavita en asocieca tabelo. Serĉi la lookup funkcio ene la functions.php por pliaj informoj sur la reveno tipoj de tiuj. Bonega! Tial fine, vi volas montri la stock informo. Vi volas probable montri - you'll volas aliri tiujn variablojn. Kiam vi havos la prezon en variablo - tiel kiel la nomo kaj la simbolo - tiam vi volas montri tiujn en via ŝablono paĝo. Ke ŝablono paĝo povus nomi show_quote.php aŭ iu. Via quote.php paĝo farus show citaĵo kaj poste pasos en ĉiuj tiuj ĉi valoroj. Tiam en via php paĝo, vi vere presi tiujn valorojn al la HTML aspekton de la paĝo. Vi nur uzu la impreso funkcio kaj pasi en la prezo. Estas 2 manieroj - vi povas ĉu concatenate ĝin kun la skalara operatoro, aŭ uzi lokokupilo. La uzantoj eventuale tuj estos aĉeti kaj vendi trabon. Ni volas ilin permesas iel vidi ĉiujn agojn kiuj aktuale havas. Ni tuj voki ke ilia biletujo. Biletujo estus, supozeble por ĉiu uzanto, enhavas aron da vicoj printi la tipo de share ke ili havas kaj poste kiel multaj el tiuj kiuj havas. Nia ekzistanta tabelo - nun ni havas uzantoj tablo en nia datenbazo. Kiu enhavas uzanto salutnomo tiel kiel iliaj pasvorton kaj kiom kontanta ili havas. Estas neniu reala maniero konservi ĉiujn iliajn agojn ene de tiu. Ne kiel ni povas enigi novan kolumnoj por ĉiu ago. Tio estus tre, tre longa vico ĉar ni havas malfinia kvanto de tipoj de akcioj, ke ili povis havi. Do, anstataŭ tio, kion ni faros estas ene de la sama datumbazo, ni havos uzantoj tablo, sed tiam ni ankaŭ havas biletujo tablo. La biletujo tablo estos definitive ligitaj al la uzantoj tablo, sed anstataŭ la biletujo tablo strukturo havos la stock informo, kiom da agoj de tiu stock la uzanto havas, tiel kiel uzanto aparta id nombro. Vi havas la uzantoj tablo kiu havas id tiel kiel la uzantnomon, la hash - kiu estas la pasvorto, la ĉifrita pasvorto - kaj tiam la kvanto de mono ili havas. La id nombro devus esti ligitaj al la id nombro de la biletujo. La biletujo estus nur devas la simbolo de la borsa tiel kiel la agoj - la nombro de agoj de tiu stock ke la uzanto havas. En tiu biletujo tablo vi havus esence ĉiuj agoj posedita de ĉiuj uzantoj de via retejo. Poste, specifi nur certa uzanto agoj - nur lia biletujo - vi elsxuti la valoroj de via biletujo tablo tiaj ke la id nombro estas specifa al tiu uzanto. Kiam vi montri la biletujo, vi volas raporti ĉiu de la akcioj en uzanto biletujo. Vi volas informi la nombro de agoj kaj la aktuala valoro de tiuj agoj. Tio aktuala valoro de tiuj agoj ne stokitaj en la biletujo tablo ĉar tio tuj estos ĝisdatigi - je minimuma - ĉiutage por Yahoo. Por ricevi tiun informon, vi ne povas referenci ke el via SQL query. Kio funkcio havigas ke al ni? Kio funkcio ricevos la prezon? Tio lookup, do uzante lookup sur aparta simbolo donos al vi multe da informo. Ĝi donos al vi 3 pecoj de informo - la nomo, la simbolo, tiel kiel la prezo. Kiam vi lookup iu simbolo, tiam vi povas ricevi la prezon, kaj tiam vi povos uzi la prezo esti montrata en via biletujo. La biletujo devus ankaŭ montri la uzanto nuna kontanta ekvilibro. Tiu kampo estas stokita en viaj uzantoj tablo. Tial rememorante kiom ni esence devi - ni havi malsamajn tipojn de PHP dosierojn. Ni tuj havos controlador kiu esence faras ĉiujn pensado por vi. Kaj tiam ni havas ŝablonon en kiu la ŝablono traktas elirigi datumoj. Vi devas pensi pri kio variabloj la controlador bezonos preni in Se ni pritraktas biletujo kiu eligas cxia nomo, simbolo, kaj dividi numeron, tiel kiel nuna prezo de stock, tiam vi volas trovi metodon de esence pasante en - vi povas pasi en tabelo de valoroj kiuj kongruas kun tiu. Ni iru en ekzemplo de kiel vi eble elsxuti ĉiuj akcioj posedata de aparta uzanto. Tiu ne estas kontraktanta - tamen - kun la prezo de la stoko. Kion tio do estas kuri konsulto. Akirus la simbolo tiel kiel la agoj de - Mi vokas ĉi tablon, sed en tiu kazo kio ĝi estas? Kio estas la nomo de la tabulo kiu ni pritraktas kiu havas simbolon kaj agoj por aparta uzanto? Estas jam uzantoj aŭ biletujo. Biletujo. Kion tio do estas demando biletujo por la simboloj kaj agoj por aparta uzanto. Jen, mi diras, (SELECT simbolo, ĝi dividas EL TBL - sed anstataŭ tablo, vi tuj anstataŭigi ke kun biletujo. 'Kie estas esence mia kondiĉo. Mi diris nur volas akiri tiujn asociaj tabeloj kiuj respondas  al ĉi sekvan kondiĉon - id egalas.  Tiam mi metas lokokupilo tie kaj tiam kunsido id. Kion tio do estas diri por ĉiu vico en vicoj. Tio estas neta maniero anstataŭ reale devi starigis por buklo ke iterates super ĉiuj el la indeksoj, tiam en PHP vi povas havi por-ĉiu ciklo. Se vi havas donita tabelo, tiam vi povas diri mi iros por voki ĉiu plua elemento - Mi iros por voki ĉiu ero ĉi nomo. Do, por ĉiu el tiuj elementoj, mi tuj nomos ilin ĉi, tiam mi povas fari ĉi tion. En ĉi por ĉiu, vi havas vicojn kiel via reala tabelo, kaj ĉiu vico vi iras por voki vico. Ĉiufoje ĝi ekzekutas la korpo, ĝi iros kaj ĝisdatigos vico al la sekvanta elemento en vicoj. Nun, en terminoj de aĉeti karcero; kion ni volas fari estas atingi la stock ke la uzanto volas aĉeti kaj la kvanto de agoj kiujn la uzanto volas aĉeti, kaj poste - se ili volas - aldoni ke stock iliaj biletujo. Evidente, se ili estas aĉeti ion, tiam tiu tuj malgrandiĝi la kvanto de mono ili havas, por ke tuj malpliiĝas liaj efektivaj. Ni tuj estos pritraktas ĝisdatigi la biletujo tiel kiel la uzantoj tablo, kiu enhavas la kontanta mono. Sed unue, vi bezonos akiri la efektiva ago kaj kvanto de agoj kiujn la uzanto volas. Por tio, vi bezonas HTML formo kiu petos la simbolo de la borsa ke vi volas aĉeti tiel kiel la nombro de agoj. Tiam vi volas aldoni. Vi volas elekti certaj valoroj. Ni trapasis ĉi iom jam, sed kiam vi provas akiri iujn vicojn - elsxuti iuj vicoj de la SQL tablo, ĉi tiu estas la jenan sintakson. Vi elektu, kaj poste, se vi specifas stelo, tio estos esence redoni la tuton, tuta vico por vi. Tiam denove, vi havas la kondiĉo, kie, kaj tiam vi specifi - Mi nur volas ke la uzantnomo por esti egalaj al poŝto-in, do ĝi nur elsxuti la vico uzanti kiu respondas al poŝto-in. Kiam uzanto volas aldoni kotizon al biletujo, Vi devas kontroli por kelkaj eraroj. Vi volas certigi ke la uzanto povas reale alfronti la stock, tiel vi volas kontroli siajn kontanta. Antaŭe, ni uzis stelo por elsxuti tutan vicon de SQL tablo. Sed cxi tie, ni povas reale nur precizigi, ke mi nur volas 1 valoro - Mi nur volas kontanta. Do jen, denove la mono por la uzanto kun id numero 1. Se uzanto jam aĉetis iujn stock sed tiam aĉetas pli de tiu cepa, tiam en via biletujo - vi ne volas apartan linion, alia vico kiu enhavas tiu nova transakcio. Vi vere volas ĝisdatigi la kvanto. Ĉiuj ke tio ŝanĝas vere estas la kvanto de agoj, ke tiu uzanto posedas. Se vi uzas la insert en konsulto - tiel ĝi estas simple enŝovi en viajn biletujo ĉiuj tiuj valoroj - la uzanto id nombro tiel kiel la simbolo de la borsa ke ili estas aĉeti kaj la agoj, tiam vi ankaŭ volas precizigi, nu, se mi kuros en duplikatajn klavo - en ĉi tiu kazo, la duplikatajn ŝlosilo estas ne nur la uzanto id sed ankaŭ la sako simbolo - ĉar vi nur povas havi - nia premiso estas, ke vi povas havi nur 1 vico  kiu respondas al 1 specifa simbolo. Do, en la duobligita klavo - se vi trafos kolizio tie - vi simple tuj ĝisdatigi agoj al lia nova valoro. Agoj egalas kion ajn ni havis antaŭ pli la nombro de agoj kiujn la uzanto aĉeti. Nun ke ni ĝisdatigis la biletujo tablo, ni volas ĝisdatigi la uzanto kontanta. Tio estas en la uzantoj tablo, do ni tuj estos subtrahanta certa kvanto de mono. Supozeble, ĝi tuj estos kontanta egalas kontanta minus - kaj tiam iu kvanto. Ĝisdatigi la kontanta mono, vi farus - se mi volis forpreni monon de mail-en, tiam mi kurus ĉi query - 'Update uzantoj kaj poste starigis la kontanta kolumno al kontanta - Mi eltirus 9.999 dolaroj nur se la uzantonomo estas egala al poŝto-in. Sed, en ĉi tiu kazo, ni ne volas subtrahi 9.999 specife. Ni volas precizigi, nu, ni volas subtrahi la nuna prezo de la sako multiplikita per la nombro de agoj kiuj ili estas aĉeti. Nun ni ilin permesis vidi ĉiujn agojn kiuj ili havas, tiel kiel aĉeti pli trabon. Ni ankaŭ antaŭe permesis ilin serĉi la nuna prezo de stoko. Ĉi tie ni volas ilin permesas vendi ilin. Unue ni volas montri esence - ni volas ilin permesas vidi ĉiujn agojn kiuj ili havas, tial jen ni volas montri ĉiujn vicojn de la biletujo. Se ili elektas vendi iun stock, tiam ni tuj supozi ke ili volas vendi ĉiujn ĝin. Ili estas ne nur tuj vendi 50% de siaj agoj, ili tuj vendi 100% de ĝi. Ni povas nur forigi la tutan vicon de biletujo. Ni povas forviŝi la donata uzanto agoj de la iu simbolo. Jen la sintakso por tio. Tiam ni volas ĝisdatigi la kontanta mono. Ni tuj aldonos en la kontanta egala al la kvanto de agoj ili vendas multiplikita de la nuna prezo de la valoroj - ne la prezo, je kiu ili aĉetis ĝin, sed pli ĝuste la prezo je kiu ili estas - la nuna prezo kiam vendas ĝin. Por referenci la nuna prezo de stock, Vi volas uzi lookup, kiu donos al vi la prezon de la sako en la nuna tempo. Nun ni restas kun la historio, kion vi volas permesi al uzanto kontroli kiu faras ĉiujn siajn transakciojn - volas vidi kiam ili vendis ion, kiam ajn ili aĉetis akciojn. Ni volas specifi la epoko en kiu ili faris tion tiel kiel kiom ili aĉetis kaj kion stock estis. Ĉu ni havas neniun fluo, ekzistanta strukturo kiu specifas kiun? Nu, ni havas biletujo kiu montras la nombron akcioj ke uzanto havas por donita parto. Sed ni strukturi biletujo en la maniero ke ĝisdatigas kiam ni aĉetas multnombraj, dum historio devus - se vi aĉetas Apple, 10 agoj de ĝi, kaj tiam poste vendas 5, tiam vi volas vidi tiujn aparte kiel apartaj agoj, apartajn vicojn. Dum tiu ago de visualizar ke en nia katalogo tablo estus nur ĝisdatigon al tiu aparta vico,  do ni probable tuj volas alian tablo. En nia datumbazo, ni havas niajn uzantojn tablo, ni havas niajn biletujo tablo, kaj nun ni probable volas historion tablo. Ke la historio tablo povu kontroli kiu faras la nunan daton, tiel kiel la aparta stock simbolo, tiel kiel kiom agoj, kaj tiam kio ago estas - ĉu vi aĉetis tiujn agojn aŭ ĉu vi vendas ilin. Trakti dato, estas kelkaj manieroj kiujn vi povas fari ĉi tion. PHP havas formon de konservanta trako de dato, kiun vi povas serĉi mem. En SQL vi povas uzi ankaŭ ĉu nun aŭ nuna timestamp. Tio dependas de vi. Nur certigi ke ĉiufoje uzanto aĉetas aŭ vendas, vi povas ĝisdatigi liaj efektivaj en la uzantoj tablo, vi povas ĝisdatigi la vicoj en la teko tablo, tiam vi ankaŭ ĝisdatigi la historio, do tuj estos 3 apartajn SQL sercxoj per kiuj vi povas nomi tie. Ni havas aron da funcionalidad nun. Nur kelkaj recordatorios ke en via indico dosiero, vi volas ligi al almenaŭ sian - sed vi volos permesi al uzanto ligi al la buy.php paĝo. Tio okazas por ebligi al uzanto - buy.php estas la regilo, tiel ke tuj ĉiu sendi al vi - ke tuj sendos vin al la formo kiu permesas vin rigardi aĵojn. Ni havas historion. Ni adiaŭis, akirante citaĵo kaj poste vendi. Tiuj estas je minimuma, kion vi volas montri. En terminoj de la biletujo, la biletujo estas vere montritaj en la indekso paĝo. Se ni iras al indekso, tie ni vidas ke laude portfolio.php kaj pasas en la asocia tabelo - esence la titolo egalas biletujo. Do, ĉi tiu estas la regilo. Se ni iras al la ŝablono el portfolio.php, tiam ĉiuj havas estas - montras esence bildon kiu diras, ho, tiu retejo estas en konstruo. Poste, kiam vi pasos en - you'll esti pasante en esence pli specifa informo. Anstataŭ simple la titolo, vi probable pasante en pli aĵojn. Kiam vi havos tiujn valorojn, tiam portfolio.php povas trakti tiujn valorojn kaj presi ilin en ia ordo. Kiam vi implementado ĉiuj el tiuj, vi ankaŭ bezonos apliki ankoraŭ 1 karakterizaĵo. Tiu povas ĉu esti permesante uzanto ŝanĝi sian pasvorton, al retrovu siajn pasvorton se ili forgesis ĝin - tiel por la pasvorton reset, tiam vi probable ankaŭ volas redakti registri por ke ĝi permesas al ili indiki retpoŝtan, do se ili forgesos lian pasvorton, tiam ili povas atingi tiun. Ili povas eniri probable en siaj uzantnomo kaj poste retmesaĝon sendiĝos al ili per ligilo por povi nuligi sian pasvorton. Vi povas havi iun kiu permesas al la uzantoj preni ricevoj ĉiufoje aĉeti aŭ vendi ion, kaj tiam fine, ili permesas aldoni kontanta iliaj retejo. Nur reiri al la koncepto de komandoj kaj ŝablonoj iom. Vi havas ion kiel - tiel vi havos controlador tie. Ĝuste nun, ni rigardis la login.php ekzemplo. Kiam ni havas controlador, esence ĝi estas tuj prenos 2 kazoj. Kiam ni havas controladores, ni estas en ĉi tiu peco kiu ni estas ankaŭ speco de kontraktanta kun kiam ni havas formojn ankaŭ. La regilo estos esence havi apartan agoj - oni se formo jam estis afiŝita, kaj tiam du, se la uzanto venas al tiu paĝo por la unua fojo kaj ankoraŭ bezonas al enigo tiu formo. Mi tuj salti al tiu kazo unue antaŭ suprenirantaj en la unua kazo de havi la formon in Ĉi tie ni diras, se la formo estis prezentita kun la metodo post - Ne zorgu pri tio iom. Ne maltrankviliĝu pri tio tro multe sed komprenas ke esence ĉi tiu funkcio traktas ĉu formo estis prezentita aŭ ne. Ĉi tiu kondiĉo estas vera se uzanto prezentis la formo. Se ne, tiam ni tuj volas nomi render login_form.php, kaj poste pasos en la titolo. Tiu titolo estas nur esence tuj aperos en la kaploko. Kion ĉi tio estas esence diras, okay - nu, se uzanto iras al login.php kaj ne reale ensalutinta, do mi volas sendi ilin al la paĝo kiu havas tiun formon kio permesas al ili indikas salutnomon kaj la pasvorton. Poste mi iros al login_form, kaj tiam kiu havas la reala formo. Tiam, tuj la uzanto prezentas tiu formo, ili tuj sendi ĝin al login.php kun la metodo post. Tiam mi vere tuj eniros ĉi tiu sekcio de mia se-ajn ciklo. Tiam ĝi estas en ĉi tie ke ni trakti kun la valoroj eniris en la formon. Estas ĉi tie ke ni trakti kun tiuj. Tiam kiam vi pritrakti tiujn valorojn - se vi pritraktas - diru ni pritraktas la quote.php paĝo kie iu povas serĉi sako ke ili volas rigardi supren, kaj tiam vidas, ke ekrano - jen speco de simila tie. Ĉi tie ni havas salutnomon formo - you'd probable havas citaĵo formo - sed tiam tuj la uzanto reale afiŝita tiu informo, tiam vi volas la controlador pasi en alian ŝablonon kiu montros al ili, ke reala informo. Tial dekstra ĉi tie, tiam vi verŝajne - ĉirkaŭ la fino de via kondiĉo tie - la se la metodo egalas post - tiam vi verŝajne volas redonu alia paĝo - la spektaklo citaĵo - kiu sendas vin al tiu paĝo - show_quote.php-- kaj poste en tiu dosiero referenci tiuj valoroj. Ĉu tio havas sencon? Ni havas controlador kiu esence traktas la 2 kazoj - ĉu vi jam eniris en formo aŭ ne. Se vi ne eniris en formo, tiam estos alidirektilo vi tiun formon, kiu tiam metis vin sur tiu paĝo. Tiam, kiam vi havas informon en la regilo, tiu korpo agos kun tiu informoj kiel necesa - ĉu suprenrigardinte valoroj por la valoroj, kaj poste unu fojon ĝi estas suprenrigardis tiujn valorojn kaj havas ilin en bele formatitan tabelo, tiam povas preterpasonta tabelo en la ŝablono paĝo  kiu traktas elirigi tiun informon. Denove, pro tio Reton, ĝi tuj estos amuza. Ni estas ekstere de C do ni ne limigas al la ASCII kaj tiu fina eligo, tiom amuzi kun ĉi. Vi povas fari ĝin kiel vida kiel vi volas. Vi povas permesi al la uzantoj enigo milionojn da dolaroj samtempe, aŭ limigi ilin kaj povas vere diri kaj lasi ilin nur por eniri 1 centonon samtempe aŭ io kiel tio. Definitive certi amuzi kun ĉi. PHP kodo estas iom pli simpla en tiu ĝi estas iom pli facile mapaj vian _pseudocode_ en la reala aplikado. Do, certe havos amuzon kun ĉi ĉar ĝi estas fakte nia lasta peco en CS50. Kun tiu, ĉi tiu estis Walkthrough 7. Iam vi finos rigardante la walkthrough kaj finis vian pset, tiam tiuj estis ankaŭ psets, kaj nun ni estas en la fina produkto - post ni finos kvizo 1. Tiam espereble vi povas uzi la ilojn kiujn vi lernis de la psets - ne nur la sintakson, sed pli la abstrakta nocio de kiel preni iun - kiel, mi volas fari ĉi tion kaj tiam reale efektivigi tion. Lerni la barakti tra sintakso kaj dissendo kodo. Legi fremdajn kodo, kaj poste interpreti ke uzi antaŭ-ekzistantaj funkcioj. Do, bonan sorton kun la lasta pset. Jam pasis plezurigos gvidi la walkthroughs. Mi esperas, ke ili vizitis helpema por vi. Tiuj estis Walkthroughs, kaj dankas tre multe. [CS50.TV]