[Powered by Google Translate] [Problema Tutorial 7 set] [Zamyla Chan] [Harvard University] [Aquesta és CS50] [CS50.TV] Hola a tots i benvinguts a Tutorial 7, CS50 Finances. Ara estem oficialment acabat amb tots els conjunts de processadors al CS50, i ens acaba d'anar amb un més que serà una aplicació divertida d'un lloc web on els usuaris poden iniciar sessió en CS50 Finances i comprar i vendre accions. Avui en dia, tindrem algunes eines a la nostra disposició. Estarem parlant de permisos. Sempre que tingui una carpeta web, vostè va a voler que els usuaris puguin executar certs arxius però també acaba de llegir els altres, així que anem a veure en els permisos i com es poden establir aquests. A continuació, anem a mirar en PHP, HTML i el codi SQL. Primer, els permisos. Quan ets al terminal en un directori determinat, llavors el que vull fer és que vol executar la comanda chmod. Això és seguit per lletres o números que correspon al que bàsicament vol que el món vegi, et a veure, etc Per exemple, cada vegada que tingui una carpeta, llavors vostè vol que la carpeta sigui executable per tothom que la veu, així que el que faria és que es podria executar la comanda chmod a + x i després el nom de la carpeta. Quan vostè té un arxiu, com arxius CSS o arxius d'imatge - com mapes de bits, JPEG i coses per l'estil, o qualsevol altre codi JavaScript - desitja que pugui ser llegit per tots, Llavors el que fas és que es podria utilitzar el comodí - que és un asterisc - per indicar bàsicament a la carpeta CSS - tot en aquesta carpeta -  Vaig a dir que això serà llegit per tot el món. Amb els permisos, quan fem servir les lletres, també podem utilitzar nombres. Així, es veu que en última instància, quan es vol que alguna cosa sigui executable - que està representat pel número 1 - una cosa que sigui llegible és el número 4 i, a continuació - escriptura és el número 2 - i tan essencialment quan es desitja una combinació d'ells, després s'agreguen. Si vols alguna cosa que llegir, escriure i executable, llavors sumaria 4, 2, i 1 i que li donaria 7, llavors cada vegada que tingui una carpeta que desitja que sigui executable per tots - així com de lectura i escriptura - llavors vostè fa que el 7, 1, 1. Aquest seria el 7 per tu, llavors 1 per les altres persones. Quan es té l'especificació, que en realitat va a especificar quines carpetes i arxius que Has de ser chmod-ed específicament. Per exemple, quan vostè té carpetes - aquests són 7-1-1 - quan tens imatges o HTML, CSS, JavaScript, llavors aquests seran 6, 0 4, - o 6, 4, 4 - i després els arxius PHP serà de 6, 0, 0. La idea darrere d'això és que els usuaris no realment ha de veure al seu codi PHP, però només ser capaç de veure la sortida. Great! Entrant en PHP. Simplement, cada vegada que desitgi un arxiu PHP, el sufix de fitxer és. Php. També pot barrejar HTML amb codi PHP. Si vostè té un arxiu HTML, per exemple, llavors vostè pot presentar juntament amb l'angle esquerre, signe d'interrogació, php - posar el codi php - i tancament que amb un altre signe d'interrogació i un angle recte. Variables en PHP són molt més fàcils de tractar que les variables en C. Qualsevol variable només s'inicia amb un signe de dòlar en front d'ella, i estan escrits amb veu feble. Això vol dir que vostè no ha de preocupar sobre la configuració d'alguna cosa igual a una cadena o un enter. Vostè pot simplement dir que aquest és el meu nom de la variable i llavors aquest és el seu valor, així que serà més fàcil de tractar allà. Una altra cosa és que PHP permet utilitzar matrius associatives. Vostè pot simplement definir un acord com ho faria en C dient, signe de dòlar, el nom de la matriu-iguals, i, a continuació entre claudàtors tenen bàsicament només la llista dels valors de tots els elements de la matriu. Però, pel que PHP també es pot fer és especificar bàsicament - és una mena de funció hash. Es pot especificar l'índex - el que anomenarem - i llavors que correspon a un valor. Si realment passa en a = 1, b = 2, c = 3, llavors la seva matriu en un índex li posaries a 1. Aquest conjunt de processadors d'entrar en calor amb una mica de PHP en una secció de preguntes, i després submergir-se en CS50 Finances. Tenim un parell de - tenim part de la funcionalitat, en el fons, d'implementar en aquest lloc web. Volem que els usuaris puguin registrar a la nostra pàgina web amb un nom d'usuari i una contrasenya. Volem que els permeti buscar una cita, i llavors podríem imprimir el nom d'aquesta cita, així com el preu que avui està. Volem permetre'ls veure un portafoli de totes les accions que han comprat fins ara. També volem que els permeti comprar accions i vendre-les. I, finalment, volem que puguin veure la història de totes les transaccions que s'han realitzat. Llavors, finalment, després d'haver implementat tot això, llavors vostè és lliure d'fer la funció extra. Anem a entrar en això. Aquests poden ser o bé permetent als usuaris obtenir diners extra mitjançant el dipòsit de diners extra, o pot permetre que canviïn la seva contrasenya, o alguna cosa així, enviar per correu electrònic un rebut en comprar o vendre una acció. Hi ha una llista limitada de característiques que vostè podria aplicar, així que és l'últim allà. Com es tracta d'un lloc web, vostès també tenen molta llibertat per personalitzar. Nosaltres oferim una mica de codi CSS, però definitivament ets lliure de modificar, fer que es vegi més bonic, però per sota és una funcionalitat bàsica de manera que sempre es refereixen a l'especificació del que realment es necessita per incloure-hi. Arran de l'especulació, utilitzarem l'aparell com també un servidor. Serà amfitrions de la nostra pàgina web per a nosaltres, del seu servidor local. Si vostè segueix aquestes instruccions i descomprimir el codi pset 7 Distribució en la seva carpeta virtual host host / local,  a continuació, pots visitar http://localhost/ a Google Chrome en l'aparell, i després aconseguiria el codi en què has escrit pset 7. Pset 7 ve amb un munt de codi de distribució, i és d'esperar We'veu - a través de tots els conjunts de processadors abans d'això - ens va acostumar a la lectura per mitjà del codi de distribució, entendre quines funcions ja estan previstes, i com els podem utilitzar aquestes i les altres funcions que anem a implementar. En aquest cas, tenim 3 carpetes. Tenim una carpeta HTML, inclou una carpeta, i una carpeta de plantilles. Què farem amb aquest conjunt de processadors és una espècie de separar el pensament - el pensament de programació - que el codi PHP amb l'aspecte visual actual. Tindrem un arxiu PHP que fa tot el pensament, es llegeix a la base de dades, imprimeix les coses, té les sentències if - coses com aquestes - i després que passarà les dades al nostre fitxer de plantilla - o arxiu template.php. El que farà és llegir les dades i després ho imprimirà. Podem tractar plantilles com "ximple", ja que en realitat no els volen a estar fent un munt de treball en el càlcul de les coses. Volem que els nostres controladors per fer-ho. Una mica sobre això - anem a fer una ullada a alguns dels codis de distribució. Aquí tenim el nostre arxiu index.html, i és bastant buida. Bàsicament el que fa - que diu, bé, vaig a necessitar l'arxiu configuration.php. No veiem que allà mateix, però és bàsicament una crida a l'arxiu configuration.php, i executar aquest. Després que ho fa, farà que la cartera. El processament és una funció, de manera que cada vegada que estem en un controlador, anomenarem render, donarem a l'arxiu i després les dades que estem passant a, pel que dirà portfolio.php--tipus de passada en aquestes dades de manera que la cartera pot lluitar amb això. I ara, aquí, tenim la nostra manera login.php.  Aquest és el controlador que bàsicament s'encarrega de la tala polz A continuació, comprova si el formulari es va enviar a aquesta imatge i s'ocupa de la validació de la presentació. Veurem en aquesta funció disculpes. Quan volem imprimir un missatge d'error, fem servir disculpes i que es redirigeix ​​l'usuari a una pàgina específica que s'imprimirà el missatge d'error específic que li indiquem. Continuant, es consulta la base de dades - ens tornarem a aconseguir més d'això més tard. Llavors vostè veu que aquí si un formulari no es va presentar, llavors es torna un formulari. Això vol dir que va a login_form.php, així que donem una ullada a això. Login.php és en realitat on veiem el tracte HTML amb l'aspecte visual actual. Aquí tenim una etiqueta d'entrada del nom d'usuari, una entrada per a la contrasenya, així com un botó d'enviament. Això és en realitat on l'aspecte visual i la forma HTML se celebrarà. En aquest cas, es diu que serà presentada per un cert mètode, anomenat post. Entrem a les diferències entre els mètodes - davant publicar aconseguir, també hi ha alguna cosa que es diu put - entrarem en aquests mètodes tard, però per l'interès d'aquest conjunt de processadors, El recomano animem a utilitzar correus. Sabem que, bàsicament, un cop aquest formulari es presenta - de login_form.php-- després anirà a l'acció - login.php-- bàsicament en passar tots els paràmetres de les formes en login.php. Els resultats d'aquesta manera estan continguts dins d'aquesta matriu associativa post. Els índexs dels diferents elements de la matriu de missatge són exactament el que especifiqui aquí. Vostè diu que el nom d'aquesta entrada és nom d'usuari. El nom d'aquest és password. De la mateixa manera, veurà el nom d'usuari com l'índex de la matriu associativa allà. Si ens anem a la carpeta inclou, tenim aquest fitxer funcions que serà molt útil. Totes aquestes funcions es duen a terme per a vostè. No és necessari el compliment específic de qualsevol d'aquests vostè mateix, però van a bastant útil. Hem disculpes, que com he dit abans, bàsicament, s'imprimirà un missatge d'error per a vostè en una pàgina específica - apology.php. Llavors tenim abocador, pel que si vostè acaba de cridar dump i després passar a la variable, a continuació, el portarà a una pàgina que mostrarà aquesta variable per a vostè. Després hem de tancament de sessió, que bàsicament va a acabar la sessió d'un usuari determinat de. Lookup serà útil. Ja que estem tractant amb cites i accions, serem capaços - i és essencialment temps real. Hem de saber quins són aquests valors borsaris són, així que tenim la funció de recerca que tracta de documentació de Yahoo de les existències. Una vegada de buscar un cert símbol d'una acció, es tornarà a vosaltres el símbol de cotització així com el nom i el preu actual d'aquesta població. Aquesta és la funció de cerca. Llavors estem tractant amb mySQL, així que anem a voler executar algunes consultes a la base de dades SQL. Hem de tractar de consultes - a algun tipus de resum de compte d'això. Estarem passant en tota la cadena de la nostra consulta SQL - i totes les variables que van en ella - i el que fa en realitat és executar això per a nosaltres. En lloc d'haver de escriure tot això cada vegada que desitja consultar - en obtenir tots els resultats d'aquesta consulta - llavors vostè pot cridar a la funció de consulta, i tornarà a vostè - depenent del que vostè està utilitzant per a la consulta - probablement una fila de tots els resultats que coincideixen amb la consulta o similar. Més sobre això més endavant però. Finalment, hem de reorientar la qual, com el seu nom indica, redirigeix ​​a una pàgina diferent. I llavors hem de fer, que estarem trucant un parell de vegades. Quan estàs en un controlador, es diu a fer a la pàgina de la plantilla i després passar als valors que la plantilla i després es tracten. Aquests valors són probablement estarà tractant amb el tipus de sortida que voleu que es mostrarà a la seva pàgina de la plantilla. Bé. Aquestes són les funcions, i hi ha molt més en aquest codi distribució. Us animo a passar per això i explorar pel seu compte. A més, l'especificació probablement explica el procés d'alguns altres elements del codi de distribució. Heus aquí un resum de les funcions que es troben en functions.php. Bé. La primera tasca és permetre als usuaris registrar-se al lloc web. En aquests moments, hi ha un formulari d'accés al lloc web, i està proveït d'uns pocs usuaris amb contrasenyes. Podeu utilitzar els noms d'usuari i dins, però vol permetre a la gent fer els seus propis noms d'usuari i se sumen a la pàgina web. La disposició per al registre és bastant similar a la forma d'accés, excepte el nom d'usuari no és preexistent, i l'usuari també ha de proporcionar una nova contrasenya, i després en general tenim una confirmació de la contrasenya. Quan l'usuari introdueix tots els d'aquesta informació, volem afegir a la nostra base de dades d'usuaris. Anem a tenir una base de dades - una base de dades SQL - que farem referència. En aquesta base de dades, tindrem una taula amb tots els usuaris que conté el seu nom d'usuari, contrasenya, i també la quantitat de diners que tenen. En el registre, volem permetre que introdueixi la informació. Volem mostrar que la forma. Volem assegurar-nos que la contrasenya - que van entrar en un, i després també que les contrasenyes coincideixen quan l'ingressi dues vegades. Després de tot el que es fa - si s'assumeix que els errors són revisats - després volem afegir els usuaris a la nostra base de dades. Finalment, un cop que s'hagi registrat, és molt convenient si vostè no ha de connectar-se de nou una vegada que t'hagis registrat, així que anem a iniciar sessió al lloc web si han registre correcte. La primera tasca és mostrar la forma, i això és en realitat serà - aquest procés de registre sencer serà modelat molt de prop després d'anunciar-se però en lloc de login.php és possible que tingui register.php. En lloc de login_form.php--que és la plantilla - hauràs formulari de registre. Vostè voldrà afegir un camp més - un camp de confirmació de contrasenya - en lloc de només el nom d'usuari i la contrasenya d'un un. A continuació, volem comprovar si les contrasenyes coincideixen o estan en blanc. Tenim el controlador - register.php--que es farà càrrec de fer aquestes comprovacions. Quan s'envia un formulari a través del mètode post, després, d'aquestes variables estan contingudes dins de la matriu d'entrada. Vostè vol assegurar-se que el valor de la matriu lloc en índex de contrasenya coincideix amb l'element de confirmació. Vostè vol assegurar-se que no estan en blanc, i vostè voldrà assegurar-se que són el mateix. Una cosa convenient sobre PHP és que no és necessari utilitzar cadenes comparar més. Podem utilitzar l'operador igual a igual-  per comprovar si les cadenes són iguals una a una altra. Per al tractament d'errors, et vull demanar disculpes. Per disculpar, només ha de trucar a la funció  a continuació, especifiqueu un tipus de missatge que voleu enviar el resultat. A continuació, voleu afegir l'usuari a la base de dades. Fins ara, tot el que he estat fent és negociant localment amb els resultats de la forma. Ara, en realitat vol afegir-los a la nostra base de dades. Per això, el primer que vol assegurar-se que el nom d'usuari no està en blanc. Entendre que en un lloc web, vostè no pot tenir diversos usuaris amb el mateix nom d'usuari, pel que vostè vol assegurar-se que en inserir alguna cosa a la base de dades - inserir un nou usuari - llavors vostè no rep una col · lisió entre un nom d'usuari preexistent i el nom d'usuari que l'usuari està tractant d'enviar. Per això, una vegada que s'executa una consulta - la inserció d'un determinat usuari amb la seva contrasenya i una quantitat inicial de diners en efectiu - una vegada que es cridi a aquesta consulta, a continuació, en realitat MySQL retornarà false si no. L'estructura dels usuaris és tal que el nom d'usuari és un valor únic, pel que no pot tenir més d'un. En tractar d'inserir una nova fila amb un nom que ja existeix, que tornarà fals - com un fals booleà valor. Una cosa difícil aquí és que vostè voldrà comprovar si el resultat és el resultat de la consulta. Si falla, llavors vostè voldrà consultar amb l'operador de triple iguals. Això és en realitat va a comprovar si es produeix una fallada o no, mentre que, en tan sols un senzill iguals-iguals, seria cert si la fila era buida. El resultat d'una fallada si hi ha una col · lisió entre noms d'usuaris és el valor fals real. Així és com es s'inseriria en una base de dades. Aquesta és la consulta que s'executa estrictament de SQL. Una cosa és que vostè pot anar a la pàgina web que administra la base de dades SQL i jugar allà introduint manualment valors o files. Es donarà sortida al que la sortida és SQL. També pot executar ordres SQL a la base de dades  i després veure el que la sintaxi sigui, i després traduir això en la funció de consulta que tenim en pset 7, que serà molt similar a les consultes que s'executen realment. Si volgués inserir una nova fila a la meva taula d'usuaris, llavors m'agradaria especificar inserció en els usuaris, que és el nom de la meva taula. Llavors vaig tenir desig d'especificar els noms de les columnes. Llavors em proporcionaria els valors juntament amb la contrasenya. Les contrasenyes en la nostra taula d'usuaris no s'emmagatzemen com acaba la corda. S'emmagatzemen com la versió xifrada, pel que vostè vol executar la cripta funció de la contrasenya actual, i que li donarà el tipus correcte d'emmagatzematge de la matriu dels usuaris. L'execució d'aquest s'inserirà una nova fila a la taula d'usuaris. Per fer front a la funció de consulta, abans en C que utilitza el signe de percentatge com un marcador de posició. De la mateixa manera, el concepte mateix d'un marcador de posició s'aplica aquí. Amb consulta, s'especifica tota la consulta, excepte quan es tracta amb variables com la seva aportació a la consulta, llavors en comptes de realment posar dins - com quan teníem instruccions printf en C. Ens agradaria posar la cadena i després tenir un marcador de posició d'allà, i després després de cada coma, especificar quina variable que teníem. Aquí, utilitzarem el signe signe d'interrogació com el nostre marcador de posició i després passar a cada variable, respectivament, en ordre, per als marcadors de posició - on les variables han d'anar. Així que aquí, el signe d'interrogació primer es substitueix pel nom d'usuari real llavors el signe d'interrogació segon per la contrasenya. Llavors, finalment, un cop has registrat i les ha afegit a la base de dades, llavors vostè desitja per iniciar sessió al lloc web. Tenim una mena de súper-global variable de sessió anomenada. Sessió pren un identificador determinat, i que correspon a la ID d'usuari que està actualment connectat El que vostè voldrà fer és trobar quin és el seu identificador d'usuari és i després posant-identificació de la sessió com aquest usuari id particular. Una funció que vostè vol utilitzar aquí és una ordre SQL que recuperarà el darrer número introduït id de la taula. Llavors dirà a files - it'll trucar al id - it'll assignar un nom al nombre que retorna. Es va a trucar a aquest id. Ara que hem acabat de registrar, i podem passar a citar. Cita permet a un usuari introduir el nom d'un determinat estoc, i llavors va a tornar les qualitats d'aquest estoc. El que vostè voldrà fer és tenir un controlador i algunes plantilles. En aquest cas, tindrem un controlador que es farà tot el pensament per a nosaltres. Va a buscar el símbol i després passar valors al templet que s'imprimirà. Tindrem dues plantilles aquí. Anem a tenir una plantilla que proporciona la manera com els usuaris van a introduir el nom de la població - el nom del recurs compartit. Llavors també voldrem altra plantilla que mostra aquests valors. Vostè pot mirar inici de sessió per un exemple de com es té un formulari que accepta l'entrada, excepte aquí, només volem un camp. No volem un nom d'usuari i un camp de contrasenya. Només volem un camp de text que permet a l'usuari introduir el nom d'una determinada població. Llavors vostè vol enviar les dades - una vegada que vostè ha mirat cap amunt d'aquesta població - a quote_form.php. Lookup retorna el símbol d'una acció, el nom, i un preu. Els que estan continguts dins d'una matriu associativa. Busqueu la funció de cerca dins la functions.php per més informació en els tipus de devolució d'aquells. Great! Així que, finalment, haurà de mostrar la informació. Vostè voldrà mostrar probable - vol tenir accés a aquestes variables. Una vegada que tingui el preu en una variable - així com el nom i el símbol - llavors vostè voldrà mostrar a aquells a la seva pàgina de la plantilla. Aquesta pàgina de la plantilla que es podria anomenar show_quote.php o alguna cosa així. La seva pàgina quote.php faria cita xou i després passar en tots aquests valors. Després, a la seva pàgina php, en realitat imprimir aquests valors a l'aspecte HTML de la pàgina. Vostè només ha d'utilitzar la funció d'impressió i passi el preu. Hi ha 2 maneres - vostè pot o concatenar amb l'operador punt, o utilitzar un marcador de posició. Els usuaris amb el temps estaran comprant i venent accions. Volem permetre alguna forma de veure totes les accions que tenen actualment. Anem a dir-ho així la seva cartera. Portfolio, presumiblement per a cada usuari, conté un munt de files enumerant el tipus de participació que tenen i després quants dels que tenen. La nostra taula existent - en aquest moment tenim una taula d'usuaris a la base de dades. Que conté nom d'usuari d'un usuari i la seva contrasenya i la quantitat de diners que tenen. No hi ha manera real d'emmagatzemar la totalitat de les seves accions que inclou. No és com podem inserir noves columnes per a cada estoc. Això seria una fila molt, molt llarg perquè tenim una quantitat infinita dels tipus d'accions que puguin tenir. Així, en lloc el que farem és dins de la mateixa base de dades, tindrem una taula d'usuaris, però també tindrem una taula de cartera. La taula cartera quedarà definitivament lligat a la taula d'usuaris, sinó que l'estructura de la taula cartera tindrà la informació, quantes accions d'aquesta població té l'usuari, així com un número d'identificació d'usuari particular. Vostè té la taula d'usuaris que té una identificació així com el nom d'usuari, el hash - que és la contrasenya, la contrasenya xifrada - i llavors la quantitat d'efectiu que tenen. El número d'identificació es vincularien amb el número d'identificació de la cartera. La cartera només tindria el símbol de les accions, així com les accions - el nombre d'accions de què les accions que l'usuari té. En aquesta taula cartera hauria de bàsicament totes les accions que posseeix tots els usuaris del seu lloc. Més tard, per especificar només les accions d'un usuari determinat de la seva cartera - només - podrà recuperar els valors de la taula de la seva cartera de manera que el número d'identificació és específica d'aquest usuari. Quan es mostra la cartera, haurà de reportar cadascuna de les accions en cartera d'un usuari. Vostè voldrà informar el nombre d'accions i el valor actual d'aquestes accions. Aquest valor actual d'aquestes accions no s'emmagatzema a la taula de cartera perquè això serà la actualització - com a mínim - cada dia per Yahoo. Per obtenir aquesta informació, no es pot fer referència al fet que a partir de la consulta SQL. Quina funció li importa a nosaltres? Quina funció tindrà el preu? Això és de recerca, de manera que utilitzar lookup en un símbol particular li donarà una gran quantitat d'informació. Et donarà 3 peces d'informació - el nom, el símbol, així com el preu. Una vegada de buscar un símbol determinat, llavors vostè pot aconseguir el preu, i llavors vostè pot utilitzar el preu que es mostrarà en la seva cartera. La cartera també ha de mostrar l'equilibri de l'usuari efectiu actual. Aquest camp s'emmagatzema a la taula d'usuaris. Així que recordant com estem, bàsicament, haver de - tindrem diferents tipus d'arxius PHP. Tindrem un controlador que fa, bàsicament, tot el pensament per a tu. I després tenim una plantilla en la qual la plantilla s'ocupa de les dades de sortida. Vostè ha de pensar en el que les variables del controlador haurà de prendre polz Si estem tractant amb una cartera que emet cada nom, el símbol i el nombre d'accions, així com el preu actual d'una acció, llavors vostè haurà de trobar alguna manera de passar bàsicament en - pot passar una matriu de valors que responen a això. Entrarem en un exemple de com es pot recuperar tots els poblacions propietat d'un usuari particular. Això no es tracta - encara - amb el preu de les accions. El que això faria és executar una consulta. Seria obtenir el símbol, així com les accions de - Vaig a trucar a aquesta taula, però en aquest cas, quin seria? Quin és el nom de la taula que estem tractant que té un símbol i accions per un usuari particular? És dels usuaris o de cartera. Cartera. El que això faria seria cartera de consulta per als símbols i accions per un usuari particular. Aquí, dic, (SELECT, símbol accions de TBL - però en lloc de la taula, vostè va a reemplaçar que amb la cartera. 'On' és bàsicament la meva condició. Estic dient que només vol aconseguir aquestes matrius associatives que corresponen  a aquesta condició següent - id iguals.  Llavors em vaig a posar un marcador de posició en l'acte ID de sessió. El que això faria és a dir per a cada fila en fila. Aquesta és una clara forma en lloc d'haver de crear un bucle for que es repeteix en tots els índexs, després en PHP que pot tenir una forma each loop. Si vostè té una matriu determinada, llavors es pot dir que vaig a trucar a cada element successiu - Vaig a trucar a cada element d'aquest nom. Així, per a cada un d'aquests elements, vaig a anomenar això, llavors puc fer això. En això per a cada un, té la seva matriu de files com a real, i cada fila que es va a cridar a files. Cada vegada que s'executa el cos, que pujarà i s'actualitzarà la fila al següent element en files. Ara, en termes de la compra d'accions, el que volem fer és aconseguir l'acció que l'usuari vol comprar i la quantitat d'accions que l'usuari vol comprar, i després - si es vol - afegir que les accions de la seva cartera. Òbviament, si vas a comprar alguna cosa, llavors això disminuirà la quantitat de diners que tenen, pel que disminuirà els seus diners. Tindrem tracte amb l'actualització de la cartera, així com la taula d'usuaris, que conté la caixa. Però primer, vostè necessita per obtenir l'estoc actual i la quantitat d'accions que l'usuari desitgi. Per això, necessitarà un formulari HTML que li demanarà el símbol de les accions que vol comprar, així com el nombre d'accions. Llavors vostè desitgi afegir. Vostè haurà de seleccionar certs valors. Hem passat per això una mica ja, però quan vostè està tractant d'obtenir certes files - recuperar certes files de la taula de SQL, aquesta és la sintaxi següent. Heu seleccionat, i després, si s'especifica un estel, que bàsicament va a tornar la fila sencera, tota per a tu. D'altra banda, té la condició en la qual, a continuació, especifica - Només vull que el nom d'usuari per a ser igual a per correu, de manera que només es recupera la fila dels usuaris que correspon al correu. Quan un usuari vol afegir una acció a una cartera, cal comprovar per uns pocs errors. Vostè vol assegurar-se que l'usuari realment pot pagar les accions, pel que vostè vol comprovar el seu efectiu. Abans, solíem estrella per recuperar tota una fila d'una taula de SQL. Però aquí, en realitat es pot simplement especificar que només desitja un valor - Només vull diners. Així que aquí, tornaria els diners en efectiu per a l'usuari amb número d'identificació 1. Si un usuari ja ha comprat una acció determinada, però després compra més d'aquesta població, llavors en la seva cartera - que no desitja una línia separada, altra fila que conté aquesta nova transacció. Segur que vol actualitzar la quantitat. Tot el que realment està canviant és la quantitat d'accions que posseeix aquest usuari. Si utilitzeu la consulta INSERT INTO - pel que acaba d'inserir en la seva cartera tots aquests valors - el número d'identificació de l'usuari, així com el símbol de les accions que estan comprant i les accions, llavors vostè també vol especificar, bé, si em trobo amb un duplicat de la clau - en aquest cas, la clau duplicada no és només l'ID de l'usuari, sinó també el símbol de l'acció - perquè només es pot tenir - la nostra premissa és que només es pot tenir una fila  que correspon a 1 símbol específic. Així, en el duplicat de la clau - si arribes a tenir un accident aquí - et vas a actualitzar accions al seu nou valor. Accions igual al que teníem abans, més el nombre d'accions que l'usuari està comprant. Ara que hem actualitzat la taula de la cartera, anem a voler actualitzar efectiu de l'usuari. Això és a la taula d'usuaris, de manera que anem a restar una certa quantitat de diners en efectiu. És de suposar que serà efectiu és igual a menys diners en efectiu - i després de certa quantitat. Per actualitzar els diners, ho faria - si volia endur els diners de correu, llavors m'agradaria executar aquesta consulta - 'Actualització dels usuaris ia continuació, estableixi la columna d'efectiu a efectiu - Jo eliminaria 9.999 $ només si el nom d'usuari és igual al correu. Però, en aquest cas, no volem restar 9.999 específicament. Volem precisar, a més, volem restar el preu actual de l'acció multiplicat pel nombre d'accions que estan comprant. Ara que hem permès que vegin totes les accions que tenen, així com comprar més accions. També hem prèviament els va permetre buscar el preu actual d'una acció. Aquí volem permetre que els venen. En primer lloc volem mostrar bàsicament - volem que puguin veure totes les accions que tenen, així que aquí volem mostrar totes les files de la cartera. Si opten per vendre una acció determinada, llavors anem a suposar que ells volen vendre tot. No només es va a vendre el 50% de les seves accions, que van a vendre el 100% d'aquesta. Només pot eliminar la fila completa de la cartera. Podem eliminar les accions de l'usuari en particular del símbol determinat. Aquí està la sintaxi per això. Llavors volem actualitzar l'efectiu. Anem a afegir en l'efectiu equivalent a l'import de les accions que s'estan venent multiplicada pel preu actual de l'acció - no el preu al qual es va comprar, sinó el preu a què estan - el preu actual quan ho estan venent. Per fer referència al preu actual d'una acció, vostè haurà d'utilitzar de recerca, que li donarà el preu d'una acció en el moment actual. Ara ens queda la història, la qual desitja permetre a un usuari fer un seguiment de totes les seves operacions - vol veure cada vegada que es ven alguna cosa, cada vegada que comprem una acció. Volem especificar l'hora a la que ho van fer i quants van comprar i quines accions de la mateixa era. Tenim alguna estructura actual, vigent que estableix que? Bé, tenim cartera que mostra els estocs de nombres que té un usuari una proporció donada. Però estem estructurant cartera en la forma en què s'actualitza quan comprem múltiple, mentre que la història hauria - si vostè compra 10 accions d'Apple, de la mateixa, i més tard vendre 5, llavors vostè vol veure a aquells per separat com accions separades, files separades. Considerant que l'acció de visualitzar que a la nostra taula cartera només seria una actualització d'aquesta fila en particular,  pel que probablement voldrà altra taula. En la nostra base de dades, tenim la nostra taula d'usuaris, tenim la nostra taula de la cartera, i ara és probable que voldrà una taula d'historial. Aquesta taula d'historial pot realitzar un seguiment de la data actual, així com el símbol de l'acció particular, així com quantes accions, i llavors, quina acció és - si es compra les accions o si se'ls ven. Per fer front a la data, hi ha un parell de maneres que vostè pot fer això. PHP té una manera de fer el seguiment de la data, que es pot veure a tu mateix. En SQL també es pot utilitzar ja sigui ara o indicació de l'hora actual. Això depèn de tu. Només assegureu-vos que cada vegada que un usuari compra o ven, se li actualitza els seus diners a la taula d'usuaris, se li actualitza les files a la taula de carteres, llavors també estarem actualitzant la història, per la qual cosa seran de 3 consultes individuals de SQL que se li diuen allà. Tenim un munt de funcionalitat ara. Només un parell de recordatoris que en el seu arxiu d'índex, vol establir el vincle almenys seva - però vostè voldrà permetre a un usuari per accedir a la pàgina buy.php. Això permetrà a un usuari - buy.php és el controlador, per la qual cosa va a qualsevol dels dos enviar a vostè - que enviarà a la manera que li permet mirar les coses. Tenim la història. Hem de tancar la sessió, per aconseguir una cita i després vendre. Aquests són, com a mínim, el que vol mostrar. En termes de la cartera, la cartera s'ha de mostrar a la pàgina d'índex. Si anem a l'índex, aquí veiem que es fa portfolio.php i passa a la matriu associativa - bàsicament el títol és igual a la cartera. Per tant, aquest és el controlador. Si ens anem a la plantilla de portfolio.php, llavors tot el que té és - bàsicament mostra un quadre que diu, oh, aquest lloc està en construcció. Més tard, una vegada que passi a - vostè pot passar en la informació, bàsicament, més específic. En lloc de només el títol, és probable que es passi en més coses. Una vegada que té aquests valors, llavors portfolio.php pot fer front a aquests valors i els imprimir en qualsevol tipus d'ordre. Quan hagueu executat la totalitat d'ells, també cal fer la funció més. Això es pot permetre que un usuari canviar la seva contrasenya, per restablir la contrasenya si l'ha oblidat - de manera que per al restabliment de la contrasenya, i després és probable que també voleu editar registrar perquè els permet especificar una adreça de correu electrònic, pel que si se'ls oblida la contrasenya, llavors es pot aconseguir això. És probable que pugui entrar en el seu nom d'usuari, i després un correu electrònic serà enviat a ells amb un enllaç per poder restablir la contrasenya. Vostè pot tenir alguna cosa que permet als usuaris obtenir ingressos cada vegada que compren o venen alguna cosa, i, finalment, els permeten afegir diners a la seva pàgina web. Només per anar de nou al concepte dels controladors i les plantilles una mica. Tindràs una mena - de manera que tindrà un controlador d'aquí. Ara mateix, estem veient l'exemple login.php. Quan tenim un controlador, bàsicament es va a prendre 2 casos. Quan tinguem els controladors, que estem en aquesta peça que també estem tractant amb tipus de quan tenim formes també. El controlador tindrà bàsicament accions separades - un si un formulari ja ha estat presentada, i després dos, si l'usuari s'apropa a aquesta pàgina per primera vegada i encara necessita d'entrada que forma. Vaig a anar a aquest primer cas abans de pujar al primer cas de tenir la forma polz Aquí diem, si el formulari ha estat enviat amb el mètode post - no et preocupis per això una mica. No et preocupis per això molt, però entenc que bàsicament s'ocupa d'aquesta funció si un formulari ha estat enviat o no. Aquesta condició es compleix si un usuari ha enviat el formulari. Si no, llavors anem a voler cridar login_form.php render, i després passar en el títol. Aquest títol només està bàsicament apareixerà a la capçalera. El que això fa és, bàsicament, diu, està bé - bé, si un usuari va a login.php i en realitat no ha iniciat sessió, llavors vull enviar a la pàgina que té aquesta forma el que els permet introduir el nom d'usuari i la contrasenya. Després vaig a login_form, a continuació, que té la forma actual. Després, una vegada que l'usuari envia aquesta manera, presentarem a login.php amb el mètode post. Després de fet vaig a entrar en aquesta secció del meu if-else bucle. Llavors, és aquí que ens ocupem dels valors introduïts en el formulari. És aquí on ens ocupem d'ells. Llavors una vegada que s'ocupa d'aquests valors - si vostè està tractant amb - dir que estem tractant amb la pàgina quote.php on algú pot introduir una acció que que voleu cercar, i després veure que la pantalla - això és una cosa semblant aquí. Aquí tenim un formulari d'accés - you'd probablement tingui un formulari de cotització - però una vegada que l'usuari ha fet que la informació presentada, llavors vostè desitja que el controlador passi a una altra plantilla que els mostrarà que la informació real. Així que per aquí, llavors és probable que - cap al final de la seva condició aquí - el si el mètode és igual post - llavors vostè probablement voldrà fer una altra pàgina - la cita show - que li envia a aquesta pàgina - show_quote.php-- i després en aquest arxiu farà referència a aquests valors. Això té sentit? Tenim un controlador que bàsicament s'ocupa dels 2 casos - si vostè ha entrat en un formulari o no. Si no s'ha introduït un formulari, llavors se li redirigirà a aquest formulari, que al seu torn ho ha de posar de nou a la pàgina. Després, una vegada que tingui la informació al controlador, aquest cos s'ocuparà que informació necessària - ja sigui mirant cap amunt els valors de les accions, i després una vegada que es va aixecar la vista i té aquests valors en una matriu amb un format agradable, A continuació, pot passar la matriu a la pàgina de la plantilla  que tracta de la sortida d'aquesta informació. Un cop més, des de la seva web, que serà divertit. Estem fora de C, així que no està limitat a la ASCII i que la producció terminal, així que es diverteix amb això. Potser és el més visual que vulguis. Pot permetre als usuaris a milions de dòlars d'entrada al mateix temps, o limitar-los i ser realment significa i només permetre'ls entrar un cèntim al mateix temps o alguna cosa per l'estil. Definitivament, assegureu-vos de tenir diversió amb això. El codi PHP és una mica més simple en que és una mica més fàcil de traçar la seva pseudocodi en l'aplicació real. Així que, definitivament es diverteixen amb això perquè és realment la nostra última peça CS50. Amb això, aquest va ser Tutorial 7. Quan hagi acabat de veure el tutorial i va acabar el seu conjunt de processadors, llavors aquests també eren conjunts de processadors, i ara estem en el producte final - després que rebem a través quiz 1. Llavors espero que vostè pot utilitzar les eines que he après dels conjunts de processadors - no només la sintaxi, però més la noció abstracta de com prendre una certa - agrada, jo vull fer això i després implementar realment això. Aprendre a lluitar a través de la sintaxi i el codi de distribució. Lectura de codi d'altres persones, i després la interpretació que l'ús de les funcions ja existents. Per tant, bona sort amb el conjunt de processadors passat. Ha estat un plaer per conduir les visites guiades. Espero que hagi estat d'ajuda per a vostè. Aquests van ser Tutorials i moltes gràcies. [CS50.TV]