[Powered by Google Translate] [Walkthrough Probleem Set 7] [Zamyla Chan] [Harvard University] [Dit is CS50] [CS50.TV] Hallo allemaal, en welkom bij Walkthrough 7, CS50 Financiën. Nu zijn we officieel klaar met alle psets in CS50, en we zijn net vertrokken met een meer dat wordt een leuk implementatie van een website waar gebruikers kunnen inloggen op CS50 Financiën en kopen en verkopen voorraden. Vandaag gaan we een paar tools tot onze beschikking hebben. We gaan om te praten over machtigingen. Wanneer u een web-map, je gaat te willen toestaan ​​dat gebruikers bepaalde bestanden uit te voeren maar ook net gelezen anderen, dus we zullen kijken naar rechten en hoe u kunt instellen die. Dan gaan we kijken naar PHP, HTML en SQL-code. Ten eerste, machtigingen. Als je in de terminal in een bepaalde directory, dan wat je wilt doen is je het chmod commando uit te voeren. Dat is gevolgd door ofwel letters of cijfers overeenkomt met wat je eigenlijk wilt dat de wereld om te zien, je jezelf te zien, etc. Bijvoorbeeld, wanneer u een map hebt, dan wil je die map om uitvoerbare door iedereen die het ziet is, dus wat je zou doen is je kon het commando chmod a + x en dan de naam van uw map. Wanneer u een bestand, zoals CSS-bestanden of afbeeldingsbestanden - zoals JPEG's en bitmaps, dat soort dingen, of een JavaScript-code - u wilt dat om leesbaar door iedereen, dus dan wat je doet is dat je zou kunnen gebruik maken van de wildcard - die een asterisk - in principe aangeven in de CSS map - alles in die map -  Ik ga om te zeggen dat dat gaat leesbaar door iedereen. Met machtigingen, als we de letters te gebruiken, kunnen we ook gebruiken in plaats nummers. Dus, zie je dat uiteindelijk als je iets uitvoerbaar te zijn willen - dat is vertegenwoordigd door het aantal 1 - iets om leesbaar is het nummer 4 en dan - beschrijfbaar is nummer 2 - en dus in wezen als je een combinatie van deze wil, dan moet je ze toevoegen. Als je wilt dat iets leesbaar, schrijfbaar en uitvoerbaar zijn, dan zou je optelt 4, 2, en 1 en dat zou je 7, dan wanneer u een map hebt u wilt dat dit uitvoerbaar door iedereen worden - evenals lees-en schrijfbaar - dan maak je dat 7, 1, 1. Dat zou 7 voor u, dan 1 voor de andere mensen. Wanneer u de spec hebben, zal het eigenlijk aangeven welke mappen en welke bestanden specifiek hoeft te worden chmod-ed. Bijvoorbeeld, wanneer u mappen hebben - dat zijn 7-1-1 - wanneer u afbeeldingen of HTML, CSS, JavaScript, dan die zullen worden 6, 0, 4 - of 6, 4, 4 - en PHP bestanden zullen worden 6, 0, 0. Het idee daarachter is dat gebruikers niet zou eigenlijk zien uw PHP-code, maar alleen in staat om de uitvoer te bekijken. Geweldig! Verhuizen naar PHP. Gewoon, als je een PHP-bestand wilt, het bestand achtervoegsel is. Php. U kunt ook mengen HTML met PHP-code. Als u een HTML-bestand, bijvoorbeeld, dan kunt u meesturen met de linker hoek, vraagteken, php - zet je php code - en sluit dat met een ander vraagteken en een rechte hoek. Variabelen in PHP zijn een stuk gemakkelijker te behandelen dan variabelen in C. Elke variabele begint net met een dollar teken in de voorkant van het, en ze zijn zwak getypt. Dat betekent dat je niet hoeft te maken over het instellen van iets gelijk aan een tekenreeks of een geheel getal. Je kunt gewoon zeggen, dit is mijn naam van de variabele en dan is dit de waarde, dus het zal makkelijker om te gaan met hun. Een ander ding is dat PHP kunt u gebruik maken van associatieve arrays. U kunt gewoon definiëren een array zoals je zou doen in C door te zeggen, dollarteken-de naam van de array-gelijken, en tussen haakjes hebben eigenlijk alleen de zoeklijst van alle elementen in de array. Maar, in PHP wat je kunt dit ook doen is aangeven in feite de - het is net zoiets als een hash-functie. U kunt de index - wat je gaat om het te noemen - en die overeenkomt met een waarde. Als u daadwerkelijk passeren in a = 1, b = 2, c = 3, vervolgens de array bij index een zou geven u 1. Dit PSET zal u opwarmen met een aantal PHP in een sectie van de vragen, en dan gaan we duiken in CS50 Finance. We hebben een paar - hebben we een aantal functies, in principe, te implementeren in deze website. We willen dat gebruikers op onze website te registreren met een gebruikersnaam en een wachtwoord. We willen hen in staat stellen het opzoeken van een offerte, en dan zouden we afdrukken van de naam van dat citaat, alsmede de huidige prijs dat het is. We willen hen in staat stellen om een ​​portfolio van alle aandelen die zij hebben tot nu toe gekocht te zien. We willen ook hen in staat stellen om aandelen te kopen en te verkopen. En dan tot slot, willen we hen in staat stellen om de geschiedenis te zien van alle transacties die zij hebben gemaakt. En dan, eindelijk, nadat je hebt geïmplementeerd dat alles, dan ben je vrij om een ​​extra functie te implementeren. We gaan naar die. Die kan zowel zodat gebruikers extra geld te krijgen door het storten van extra geld, of je kan hen in staat stellen om hun wachtwoord, of iets dergelijks te veranderen, ze e-mailen een ontvangstbewijs bij de aankoop of verkoop van een voorraad. Er is een beperkte lijst van functies dat u uzelf uit te voeren, dus dat is de laatste daar. Aangezien dit een website, jullie hebben ook een veel vrijheid om het aan te passen. Wij geven wel een aantal CSS-code, maar je bent zeker vrij om het te tweaken, zodat het lijkt mooier, maar de onderliggende het is een basisfunctionaliteit dus altijd verwijzen naar de spec over wat je eigenlijk nodig hebt om daar te zijn. Naar aanleiding van de spec, we gaan gebruiken het apparaat als ook een server. Het gaat om het hosten van onze website voor ons, op de lokale server. Als u deze instructies en unzip het PSET 7 verdeelsleutel in uw virtuele host / local host map,  dan kun je gewoon naar http://localhost/ in Google Chrome in het apparaat, en dan zou je bij de code in die je hebt geschreven PSET 7. Pset 7 wordt geleverd met een stel verdeelsleutel, en hopelijk we've - door alle van de psets voordat deze - gewend ons te lezen door middel van distributie-code, begrijpen welke functies al worden geleverd, en hoe we zouden kunnen gebruiken deze en de andere functies die we gaan te implementeren. In dit geval hebben we 3 mappen. We hebben een HTML-map, een map bevat, en een map voor sjablonen. Wat we gaan doen met deze PSET is een soort van het scheiden van het denken - de programmering denken - van de PHP-code met de werkelijke visuele aspect. We hebben een PHP-bestand dat alle denken doet, leest in de database, prenten uit dingen, heeft if-statements - dat soort dingen - en dan dat zal het doorgeven van gegevens in onze template-bestand - of template.php bestand. Wat dat zal doen is de data te lezen en dan zal het uitprinten. We kunnen behandelen sjablonen als "dom" in dat we niet echt willen dat ze moeten doen een hoop werk bij de berekening van dingen. We willen dat onze controllers om dat te doen. Een beetje op die - laten we eens een kijkje bij enkele van de verdeelsleutel. Hier hebben we onze index.html bestand, en het is vrij leeg. In wezen wat het doet - het zegt, nou, ik ga naar het configuration.php bestand nodig. We zien niet dat daar, maar het is in feite het aanroepen van de configuration.php bestand, en uitvoeren dat. Nadat het dat doet, gaat het om het portfolio te maken. Rendering is een functie, dus wanneer we in een controller, we render noemen, geven we het het bestand en vervolgens de gegevens die we passeren in, zodat het bellen in portfolio.php--soort pas in die gegevens, zodat portefeuille kan gaan met dat. En nu, hier, hebben we onze login.php vorm.  Dit is de controller die in principe zorg draagt ​​voor de in te loggen Hier, kijkt het of een vorm werd voorgelegd aan dit bestand en gaat over het valideren van de inzending. We zullen kijken naar deze excuses functie. Als we willen afdrukken van een foutmelding, gebruiken we verontschuldigen en dat zal de gebruiker omleiden naar een specifieke pagina dat drukt de specifieke foutbericht dat wij geven. Voortbordurend op, zal het query de database - we zullen later in nog meer van dat. Dan zie je dat hier beneden als een vorm is niet verzonden, dan is het een vorm maakt. Dat betekent dat het gaat om login_form.php, dus laten we eens kijken naar dat. Login.php is eigenlijk waar we de HTML omgaan met de werkelijke visuele aspect. Hier hebben we een input-tag voor de gebruikersnaam, een ingang voor het wachtwoord, en een verzendknop. Dat is eigenlijk waar het visuele aspect en de HTML-formulier zal worden gehouden. Hier, het zegt dat het gaat om worden ingediend door een bepaalde methode, genaamd post. We krijgen in de verschillen tussen methoden - plaatsen te krijgen ten opzichte van, is er ook zoiets als gezegd - we later zullen krijgen in deze methoden, maar voor het belang van deze PSET, Ik zou zeer raden u aan na het gebruik. We weten dat in principe een keer dit formulier wordt ingediend - van login_form.php-- dan zal het naar de actie - login.php-- In principe past in al die parameters van die vormen in login.php. De resultaten van die vorm op deze plaats associatieve array. De indexen van de verschillende elementen in de post-array zijn precies wat u hier opgeeft. U zegt dat de naam van deze input is gebruikersnaam. De naam van deze ene is met een wachtwoord. Ook zie je de gebruikersnaam als de index van de associatieve array daar. Als we naar de includes map, hebben we deze functies-bestand dat zal zeer nuttig zijn. Al deze functies zijn geïmplementeerd voor u. U hoeft niet specifiek te implementeren een van deze zelf, maar ze gaan heel nuttig. We hebben excuses, die zoals ik al eerder zei, in principe zal afdrukken van een foutmelding voor u op een specifieke pagina - apology.php. Dan hebben we dump, dus als je gewoon bellen dump en gaan vervolgens in de variabele, dan brengt u naar een pagina die die variabele worden weergegeven voor u. Dan hebben we logout, die in feite zal het einde van een bepaalde gebruiker de sessie. Lookup gaat om bruikbaar te zijn. Omdat we te maken hebben met citaten en voorraden, we gaan om te kunnen - en het is in wezen real time. We moeten weten wat die voorraad waarden zijn, dus we hebben de lookup functie die zich bezighoudt met documentatie Yahoo's van de voorraden. Zodra u het opzoeken van een bepaald symbool van een aandeel, zal het terug naar u de voorraad symbool alsmede de naam en de huidige prijs van dat bestand. Dat is de lookup functie. Dan hebben we hier te maken met MySQL, dus we gaan worden willen bepaalde queries uit te voeren op onze SQL-database. We moeten vragen om te gaan - van de soort abstracte sommige van die uit. We gaan passeren in de hele reeks van onze SQL-query - en alle variabelen die verder gaan in het - en wat dit doet is eigenlijk dat uit te voeren voor ons. In plaats van dit alles schrijven elke keer dat u wilt opvragen - door het verkrijgen van alle van de resultaten van die query - dan kun je gewoon bellen met de query functie, en het zal tot u terugkeren - afhankelijk van wat je gebruikt voor uw zoekopdracht - waarschijnlijk een rij van alle resultaten die de query of soortgelijke passen. Meer daarover later wel. Tot slot hebben we redirect die, zoals de naam al doet vermoeden, kunt u doorlinken naar een andere pagina. En dan hebben we render, die we gaan moeten bellen een paar keer. Als je in een controller, belt u maken in de template pagina en dan pas in de waarden die de sjabloon zal dan behandelen. Die waarden zijn waarschijnlijk zal te maken hebben met de aard van de uitgang die u wilt worden weergegeven op uw sjabloon pagina. Oke. Dat zijn de functies en er is veel meer aan deze verdeling code. Ik moedig u om te gaan door dit en het verkennen van jezelf. Ook zal de spec waarschijnlijk loop je door een aantal andere elementen van de verdeelsleutel. Hier is een overzicht van de functies in functions.php. Oke. De eerste taak is om gebruikers in staat te registreren op de website. Op dit moment is er een login formulier op de website, en bent u voorzien van een aantal gebruikers met wachtwoorden. U kunt gebruik maken van de gebruikersnamen en log in, maar u wilt toestaan ​​dat mensen hun eigen gebruikersnamen te maken en voeg zelf op de website. De lay-out voor inschrijving is redelijk vergelijkbaar met het login-formulier, behalve de gebruikersnaam is niet reeds bestaande, en de gebruiker moet ook een nieuw wachtwoord en dan meestal hebben we een wachtwoord bevestiging. Zodra de gebruiker voert al die informatie, willen we ze toe te voegen aan onze database van gebruikers. We gaan een database hebben - een SQL-database - dat we gaan verwijzen. In die database, zullen we een tabel hebben met alle gebruikers met hun gebruikersnaam, het wachtwoord, en ook hoeveel geld ze hebben. In register, willen we hen in staat stellen om die informatie in te voeren. We willen die vorm weer te geven. We willen ervoor zorgen dat hun wachtwoord - dat gingen ze een, en dan ook dat de wachtwoorden overeenkomen wanneer ze het twee keer. Na al dat wordt gedaan - in de veronderstelling dat deze fouten worden gecontroleerd - dan willen we die gebruikers toe te voegen aan onze database. Tot slot, als je eenmaal hebt geregistreerd, het is vrij handig als je niet opnieuw aan te melden in als je eenmaal hebt geregistreerd, dus we gaan om deze te loggen op de website of ze geregistreerd zijn in het succesvol. De eerste taak is om te laten zien in de vorm, en dit is eigenlijk gaat worden - dit hele registratieproces gaat vrij nauwkeurig worden gemodelleerd na het inloggen behalve in plaats van login.php u zou kunnen hebben register.php. In plaats van login_form.php--dat het template - je hebt Inschrijfformulier. U wilt nog een veld toe te voegen - een wachtwoord bevestiging veld - in plaats van alleen de een gebruikersnaam en de een wachtwoord. Vervolgens willen we nagaan of de wachtwoorden overeenkomen of zijn leeg. We hebben de controller - register.php--die zal zorgen voor het doen van deze controles. Wanneer een formulier wordt ingediend via de post methode, dan al deze variabelen zijn vervat in de post array. U wilt er zeker van zijn dat de post-array waarde bij index wachtwoord overeenkomt met de bevestiging element. U wilt ervoor zorgen dat ze niet leeg zijn, en u wilt er zeker van dat ze hetzelfde zijn. Een handig ding over PHP is dat we niet hoeven te gebruiken touw vergelijken meer. We kunnen gebruik maken van de gelijk-gelijk operator  te controleren of strings gelijk zijn aan elkaar. Voor de afhandeling van fouten, zult u wilt om zich te verontschuldigen. Om zich te verontschuldigen, je gewoon bellen met de functie  en geef vervolgens een type bericht dat u wilt uitvoeren. Vervolgens willen de gebruiker toe te voegen aan de database. Tot nu toe is alles wat we hebben gedaan gewoon plaatselijk te handelen met de resultaten van het formulier. Nu, we eigenlijk willen ze toe te voegen aan onze database. Hiervoor maken we eerst willen ervoor zorgen dat de gebruikersnaam niet leeg is. Begrijp dat op een website, kunt u niet meerdere gebruikers met dezelfde gebruikersnaam hebben, dus je zult willen ervoor zorgen dat als je iets invoegen in uw database - plaatst u een nieuwe gebruiker - dan krijg je niet een botsing tussen een reeds bestaande gebruikersnaam en de gebruikersnaam die een gebruiker probeert in te dienen. Voor deze, als je eenmaal een query wordt uitgevoerd - het plaatsen van een bepaalde gebruiker met hun wachtwoord en een initieel bedrag van contant geld - als je eenmaal belt die vraag dan, mySQL daadwerkelijk valse terug als het niet lukt. De structuur van de gebruikers is zodanig dat de gebruikersnaam een ​​unieke waarde, dus je kunt niet meer dan een. Wanneer u probeert en plaats een nieuwe rij met een gebruikersnaam die al bestaat, dat gaat return false - als een Booleaanse waarde false. Een lastige hier is dat je wilt controleren of het resultaat is het resultaat van uw zoekopdracht. Als het niet lukt, dan zult u wilt controleren met de triple-gelijk operator. Dat is eigenlijk gaat om te controleren of er een storing is of niet, dat in slechts een eenvoudige gelijk-gelijk, zou het waar zijn als de rij was leeg. Het resultaat van een storing als er een botsing tussen gebruikersnamen is de werkelijke valse waarde. Hier is hoe je zou voegen in een database. Hier is de query die u strikt zou lopen in SQL. Een ding is dat je eigenlijk kunt gaan naar de website die uw SQL database beheert en er rond te spelen door het invoeren van handmatig, hetzij waarden of rijen. Het zal uitvoeren wat de SQL-uitgang is. U kunt ook SQL-commando's in uw database  en dan zien wat de syntaxis zou kunnen zijn, en dan vertalen in de query functie die we hebben in PSET 7, die zal zeer vergelijkbaar met de query's die u daadwerkelijk uit te voeren. Als ik wilde een nieuwe rij in te voegen in mijn gebruikers tabel, dan zou ik geef het inzetstuk in gebruikers, wat is de naam van mijn tafel. Dan zou ik geef de kolomnamen. Dan zou ik zorgen voor de waarden samen met mijn wachtwoord. Wachtwoorden in onze gebruikers tabel worden niet opgeslagen als gewoon de string. Ze zijn opgeslagen als de versleutelde versie dus je zult de functie wilt crypte lopen vanaf de eigenlijke wachtwoord, en dat geeft je het juiste type van opslag voor de gebruikers array. Het uitvoeren van deze voegt een nieuwe rij in uw gebruikers tabel. Om te gaan met de query-functie, voordat in C gebruikten we het procentteken als een tijdelijke aanduiding. Ook hetzelfde concept van een tijdelijke aanduiding is hier van toepassing. Met query, geeft u de hele query, behalve wanneer je te maken hebt met variabelen als input in de query, dan in plaats van het daadwerkelijk kunnen hen binnen - als toen we printf verklaringen hadden in C. We zouden een string te zetten en er een tijdelijke aanduiding, en vervolgens na elke komma, specificeren welke variabele we hadden. Hier gaan we het vraagteken teken te gebruiken als onze tijdelijke aanduiding en leid in elke variabele respectievelijk in volgorde, voor de tijdelijke aanduidingen - waar deze variabelen moet gaan. Dus hier, zou de eerste vraagteken worden vervangen door de werkelijke gebruikersnaam dan is de tweede vraag merk door het wachtwoord. Dan tot slot, als je eenmaal hebt ze registreerde en toegevoegd aan de database, dan moet je ze wilt inloggen op de website. We hebben een soort van een super-globale variabele genaamd sessie. Sessie duurt een bepaalde id, en dat id overeenkomt met de gebruiker die momenteel is ingelogd Wat je wilt doen is het vinden van wat hun gebruikers-ID is en vervolgens die sessie-ID als id die bepaalde gebruiker. Een functie die je wilt hier gebruiken is een SQL-opdracht dat haalt de laatst ingevoegde id-nummer van uw tafel. Dan rijen zullen noemen - it'll bellen met de id - it'll een naam toewijzen aan het nummer dat het terugkeert. Het zal noemen dat id. Nu we klaar zijn te registreren, en we kunnen verder gaan om te citeren. Citeren kan een gebruiker om de naam van een bepaalde aandelen, en dan is het weer terug de kwaliteiten van dat bestand. Wat je hier wilt doen is een controller en een aantal sjablonen. In dit geval gaan we een controller, die gaat naar alle denken te doen voor ons hebben. Het gaat opzoeken op het symbool en dan in waarden doorgeven aan de sjablonen die zal afdrukken. We gaan hier hebben 2 sjablonen. We gaan een sjabloon dat de vorm waarin gebruikers zullen hun biedt het invoeren van de naam van de voorraad - de naam van het aandeel. Dan hebben we ook weer een sjabloon die deze waarden weergeeft willen. U kunt kijken naar login voor een voorbeeld van hoe je een formulier dat gegevens kunnen worden ingevoerd hebben, behalve hier, we willen alleen maar 1 veld. We willen niet dat een gebruikersnaam en een wachtwoord veld. We willen gewoon een tekstveld waarmee de gebruiker het invoeren van de naam van een bepaalde aandelen. Dan wil je die gegevens te verzenden - als je eenmaal hebt opgezocht dat bestand - naar quote_form.php. Lookup terug het symbool van een aandeel, de naam, en een prijs. Die bevinden zich in een associatieve array. Zoek de lookup functie binnen de functions.php voor meer informatie op het rendement van deze types. Geweldig! Zo dan eindelijk, wil je de voorraad weer te geven. U wilt waarschijnlijk weer te geven - u zult willen deze variabelen te openen. Zodra u de prijs in een variabele - alsmede de naam en het symbool - dan zul je met die in uw sjabloon pagina weer te geven. Dat sjabloon pagina genoemd kan worden show_quote.php of zoiets. Uw quote.php pagina zou tonen citaat dan maken en passeren in al die waarden. Dan in je php pagina, je eigenlijk af te drukken die waarden aan de HTML-aspect van de pagina. Je gebruikt gewoon de printfunctie en doorberekenen in de prijs. Er zijn 2 manieren - u kunt het samenvoegen met de puntoperator, of gebruik een tijdelijke aanduiding. De gebruikers uiteindelijk zullen worden het kopen en verkopen van aandelen. We willen hen in staat stellen een of andere manier van het zien van alle van de aandelen die zij momenteel hebben. We gaan noemen hun portefeuille. Portfolio zou, vermoedelijk voor iedere gebruiker, een boel rijen voor elke soort van het aandeel dat zij hebben en dan hoeveel van de mensen die ze hebben. Onze bestaande tabel - op dit moment hebben we een gebruikers tabel in onze database. Dat bevat een gebruiker gebruikersnaam en het wachtwoord en hoeveel geld ze hebben. Er is geen echte manier van het opslaan van al hun aandelen binnen dat. Het is niet zo dat we kunnen nieuwe kolommen wilt invoegen voor elk aandeel. Dat zou een zeer, zeer lange rij te zijn, want we hebben een oneindige hoeveelheid van de soorten aandelen die ze zouden kunnen hebben. Dus, in plaats wat we doen, is binnen dezelfde database, hebben we een gebruikers tabel, maar dan zullen we ook een portfolio tafel. De portefeuille tafel zal zeker worden gekoppeld aan de gebruikers tabel, maar in plaats daarvan de portefeuille tabelstructuur zal de voorraad informatie, hoeveel aandelen van dat bestand de gebruiker heeft, en een gebruiker bepaalde id nummer. U hebt de gebruikers tabel, die een id heeft, evenals de gebruikersnaam, de hash - dat is het wachtwoord, het versleutelde wachtwoord - en dan de hoeveelheid geld die ze hebben. Het id-nummer wordt gekoppeld aan het ID-nummer van de portefeuille. De portefeuille zou gewoon het symbool van de voorraad en de aandelen - het aantal aandelen van dat bestand die de gebruiker heeft. In die portefeuille tabel zou je in principe alle aandelen bezeten door alle gebruikers op uw site. Later, om alleen nog een bepaalde gebruiker de aandelen - alleen hun portefeuille - zou je ophalen van de waarden uit de tabel uw portefeuille zodanig dat het id-nummer is specifiek voor die gebruiker. Wanneer u de portefeuille weer te geven, wil je aan elk van de voorraden rapporteren in de portefeuille van een gebruiker. U wilt het aantal aandelen en de huidige waarde van die aandelen te melden. Dat de huidige waarde van die aandelen wordt niet opgeslagen in de portefeuille tabel want dat gaat worden bijgewerkt - minimaal - elke dag door Yahoo. Om die informatie te krijgen, kunt u niet verwijzen naar die van uw SQL-query. Welke functie wordt bepaald dat voor ons? Welke functie krijgt de prijs? Dat lookup is, zal dus het gebruik lookup op een bepaald symbool geeft je een heleboel informatie. Het zal u 3 stukjes informatie - de naam, het symbool, evenals de prijs. Zodra je lookup een bepaald symbool, dan kun je de prijs, en dan kun je gebruik maken van de prijs die moet worden weergegeven in uw portefeuille. Het portfolio moet ook weer van de gebruiker huidige kaspositie. Dat veld wordt opgeslagen in uw gebruikers tabel. Dus dan herinneren hoe we in feite zijn dat u - we hebben verschillende soorten PHP-bestanden. We gaan een controller die in feite doet al het denkwerk voor u. En dan hebben we een sjabloon waarin de sjabloon zich bezighoudt met het uitvoeren van gegevens. Je moet denken aan wat variabelen de controller zal moeten nemen inch Als we te maken hebben met een portfolio die elke naam, symbool, en delen het aantal uitgangen, alsmede de huidige prijs van een aandeel, dan zul je een manier van in principe passeren in vinden - u kunt doorgeven in een array van waarden die die overeenkomen. Laten we naar een voorbeeld van hoe u halen alle voorraden bezit van een bepaalde gebruiker. Dit is niet te maken - nog - met de prijs van het aandeel. Wat dit zou doen is een query uitvoert. Het zou krijgen het symbool en de aandelen van - Ik bel deze tafel, maar in dit geval wat zou het zijn? Wat is de naam van de tabel die we mee te maken hebben dat heeft symbool en aandelen voor een bepaalde gebruiker? Het is of gebruikers of portfolio. Portfolio. Wat dit zou doen is vraag portfolio voor de symbolen en aandelen voor een bepaalde gebruiker. Hier, zeg ik, (SELECT symbool, aandelen van tbl - maar in plaats van tafel, zul je die vervangen door portfolio. 'Waar' is eigenlijk mijn conditie. Ik zeg dat ik alleen wil die associatieve arrays die overeenkomen krijgen  deze volgende voorwaarde - id is gelijk aan.  Dan sluit ik een tijdelijke aanduiding daar en toen sessie-id. Wat dit zou doen is zeggen dat voor elke rij in rijen. Dit is een nette manier in plaats van daadwerkelijk te hebben om een ​​for-lus dat doorloopt over alle van de indexen, dan in PHP kunt u een for-each-lus. Als u een gegeven array, dan kun je zeggen ik ga elke opeenvolgende element noemen - Ik ga elk element deze naam noemen. Dus, voor elk van deze elementen, ga ik noem ze dit, dan kan ik dit doen. In dit voor elk, heb je toeren als uw werkelijke array, en elke rij je gaat rij bellen. Elke keer als het filter het lichaam, het zal omhoog gaan en het zal rij updaten naar het volgende element in rijen. Nu, in termen van het kopen voorraden wat we willen doen is de voorraad die de gebruiker wil kopen en het bedrag van de aandelen die de gebruiker wil kopen, en dan - als ze dat willen - toe te voegen dat bestand aan hun portefeuille. Uiteraard, als ze het kopen van iets, dan is dat gaat afnemen de hoeveelheid geld die ze hebben, dus dat gaat om hun geld te verminderen. We gaan te maken hebben met het updaten van de portefeuille en de gebruikers tabel, die bevat het geld. Maar eerst, moet u de actuele voorraad en de hoeveelheid van de aandelen die de gebruiker wil. Daarvoor moet u een HTML-formulier dat zal vragen voor het symbool van de voorraad die u wilt en kopen van het aantal aandelen. Dan zult u wilt toevoegen. U wilt bepaalde waarden te selecteren. We hebben doorgemaakt dit een beetje al, maar als je probeert om bepaalde rijen te verkrijgen - halen bepaalde rijen uit de SQL-tabel, dat is de volgende syntax. Je hebt te selecteren en als u een ster, dat in principe zal de terugkeer van de hele, hele rij voor je. Dan weer, heb je de toestand waarin, en dan geeft u - Ik wil alleen de gebruikersnaam gelijk te zijn aan mail-in, dus alleen ophalen rij gebruikers die overeenkomt met mail-in. Wanneer een gebruiker wil een aandeel op een portefeuille, je nodig hebt om te controleren op een paar fouten. U wilt er zeker van zijn dat de gebruiker daadwerkelijk kan de voorraad veroorloven, dus je zult willen hun geld te controleren. Voorheen gebruikten we ster om een ​​hele rij van een SQL-tabel op te halen. Maar hier kunnen we eigenlijk alleen maar aangeven dat ik alleen maar 1 waarde wilt - Ik wil alleen maar geld. Dus hier, het zou het geld terug voor de gebruiker met id nummer 1. Als een gebruiker al gekocht een bepaalde aandelen-maar dan koopt meer van dat bestand, dan in uw portefeuille - u niet wilt dat een aparte regel, een andere rij dat die nieuwe transactie bevat. Je eigenlijk wilt van het bedrag bij te werken. Het enige dat echt aan het veranderen is de hoeveelheid aandelen die die gebruiker eigenaar is. Als u het inzetstuk in query - dus het is gewoon in te voegen in uw portefeuille al deze waarden - van de gebruiker-ID-nummer, evenals het symbool van de voorraad die ze kopen en de aandelen, dan zul je ook wilt opgeven, nou, als ik lopen in een dubbele sleutel - in dit geval de tweede sleutel niet alleen de gebruiker id maar ook beurssymbool - want je kunt alleen maar - ons uitgangspunt is dat je alleen kan bestaan ​​uit 1 rij  die overeenkomt met een specifiek symbool. Dus, op de dubbele sleutel - als je in de een botsing daar - je gaat gewoon om aandelen te updaten naar de nieuwe waarde. Aandelen gelijk aan wat we hadden voordat plus het aantal aandelen dat de gebruiker is het kopen. Nu we de portefeuille tabel bijgewerkt, we willen de gebruiker contant geld bij te werken. Dat is in de gebruikers tabel, dus we gaan te trekken een bepaalde hoeveelheid van cash. Vermoedelijk gaat het om contant geld is gelijk aan liquide middelen verminderd - en dan een bepaald bedrag. Om het geld bij te werken, zou je - als ik wilde weg te nemen geld van mail-in, dan zou ik deze query - 'Update gebruikers en stel vervolgens het geld kolom om contant geld - Ik zou verwijderen 9.999 dollar alleen als de gebruikersnaam is gelijk aan e-mail-in. Maar, in dit geval, we willen niet specifiek af te trekken 9999. We willen geven, wel, willen we de huidige prijs van het aandeel af te trekken vermenigvuldigd met het aantal aandelen dat ze kopen. Nu hebben we konden ze alle van de aandelen die zij hebben te zien, alsook meer kopen voorraden. We hebben ook eerder konden ze op te zoeken van de huidige prijs van een aandeel. Hier willen we hen in staat stellen om ze te verkopen. Eerst willen we in principe weer te geven - willen zodat zij alle bestanden dat zij zien, dus even willen we alle rijen weer te geven van de portefeuille. Als ze ervoor kiezen om een ​​bepaalde aandelen te verkopen, dan gaan we ervan uit dat ze willen alles verkopen. Ze zijn gewoon niet van plan om 50% van hun aandelen te verkopen, ze gaan tot 100% van het te verkopen. We kunnen gewoon verwijderen van de gehele rij uit portefeuille. We kunnen verwijderen de gegeven gebruiker aandelen van de bepaald symbool. Er is de syntax voor. Dan willen we het geld bij te werken. We gaan het toevoegen in de cash gelijk aan het bedrag van de aandelen die zij verkopen vermenigvuldigd met de huidige prijs van de voorraad - niet de prijs waartegen zij het gekocht, maar de prijs waartegen zij zijn - de huidige prijs als ze het verkopen. Om de huidige prijs van een aandeel verwijzen, wil je lookup gebruiken, die geeft je de prijs van een aandeel in de huidige tijd. Nu zijn we vertrokken met de geschiedenis, die u wilt toestaan ​​dat een gebruiker bij te houden van al hun transacties te houden - wil zien wanneer ze iets verkocht, wanneer zij een voorraad gekocht. We willen het tijdstip waarop ze dat deden en hoeveel ze gekocht specificeren en wat voorraad was. Hebben we alle huidige, bestaande structuur die die aangeeft? Nou, we hebben portefeuille waarin het aantal aandelen die een gebruiker heeft geeft voor een bepaalde aandeel. Maar we zijn het structureren van portfolio in de manier waarop het werkt wanneer we meerdere, terwijl de geschiedenis moet - als je koopt Apple, 10 aandelen van, en dan later verkopen 5, dan je zou willen om die afzonderlijk te zien als afzonderlijke acties, afzonderlijke rijen. Overwegende dat maatregelen om dat te visualiseren in onze portfolio tabel zou gewoon een update die bepaalde rij,  dus we waarschijnlijk gaan om een ​​andere tafel willen. In onze databank hebben wij onze gebruikers tafel, we hebben onze portefeuille tafel, en nu zullen we waarschijnlijk willen een geschiedenis tafel. Die geschiedenis tafel kan bijhouden van de huidige datum, en de bijzondere aandelensymbool alsmede hoeveel aandelen en dan welke actie het is - of je koopt die aandelen of dat je ze te verkopen. Om te gaan met datum, er zijn een paar manieren waarop u dit kunt doen. PHP heeft een manier van het bijhouden van datum, die u kunt opzoeken jezelf. In SQL kunt u ook gebruik maken van zowel nu of de huidige timestamp. Dat is aan jou. Zorg er wel voor dat iedere keer dat een gebruiker koopt of verkoopt, wordt u het updaten van hun geld in de gebruikers tabel, wordt u het bijwerken van de rijen in de portefeuilles tabel, dan zul je ook het updaten van de geschiedenis, dus er zullen zijn 3 aparte SQL-query's dat je daar bellen. We hebben een heleboel functionaliteit nu. Gewoon een paar herinneringen die in uw index-bestand, zult u wilt koppelen ten minste uw - maar je wilt kan een gebruiker een link naar de buy.php pagina. Dat zal toestaan ​​dat een gebruiker - buy.php is de controller, zodat dat gaat om ofwel stuur je naar - dat gaat u naar het formulier waarmee u dingen op te zoeken. We hebben de geschiedenis. Wij hebben uit te loggen, aanvragen van een offerte en vervolgens te verkopen. Dat zijn minimaal wat je wilt laten zien. In termen van de portefeuille, wordt de portefeuille daadwerkelijk in de index pagina. Als we naar index hier zien we dat het portfolio.php maakt en gaat in de associatieve array - in principe de titel gelijk is aan portfolio. Dit is dus de controller. Als we naar het model van portfolio.php, dan alles wat het is - geeft in feite een beeld dat zegt, oh, deze site is onder constructie. Later, als je eenmaal voorbij in - u zult passeren in principe meer specifieke informatie. In plaats van alleen de titel, zult u waarschijnlijk passeren in meer dingen. Zodra u deze waarden, dan portfolio.php kan omgaan met deze waarden en ze af te drukken in een soort van orde. Als je eenmaal hebt geïmplementeerd al die, moet u ook nog 1 functie te implementeren. Dit kan worden waardoor een gebruiker om hun wachtwoord te wijzigen, om hun wachtwoord te veranderen indien ze vergeten - dus voor het wachtwoord resetten, dan U wilt waarschijnlijk ook te registreren bewerken, zodat het hen in staat stelt om aan te geven een e-mail, dus als ze vergeten hun wachtwoord, dan kunnen ze krijgen die. Ze kunnen waarschijnlijk invoeren in hun gebruikersnaam en vervolgens een e-mail worden verzonden naar hen met een link om te kunnen hun wachtwoord opnieuw in te stellen. U kunt iets dat gebruikers in staat stelt om zich te ontvangstbewijzen elke keer als ze iets kopen of verkopen, en dan eindelijk, laat ze om geld toe te voegen aan hun website. Gewoon om terug te gaan naar het concept van de controllers en sjablonen een beetje. Je hebt iets als een - zodat je een controller hier. Op dit moment zijn we op zoek naar de login.php voorbeeld. Wanneer we een controller hebben, kort gezegd: het gaat om twee gevallen. Als we controllers hebben, zitten we in dit stuk, dat wij ook zijn soort van omgaan met wanneer er vormen ook. De controller zal in principe afzonderlijke acties - een als een formulier werd reeds ingediend, en dan twee als de gebruiker komt naar die pagina voor het eerst en moet nog ingang die vorm. Ik ga eerst naar die zaak voor te gaan tot het eerste geval van het hebben van de vorm binnen Hier zeggen we, als het formulier is ingediend met de methode post - maak je geen zorgen over dat een beetje. Maak je geen zorgen over dat te veel, maar begrijpen dat in principe deze functie bezig met of een formulier is ingediend of niet. Deze voorwaarde geldt als een gebruiker heeft ingediend in de vorm. Zo niet, dan gaan we willen render login_form.php te bellen, en dan pas in de titel. Deze titel wordt alleen maar in principe zal verschijnen in de kop. Wat dit doet is in feite zegt, oke - nou ja, als een gebruiker gaat naar login.php en heeft niet echt ingelogd, dan wil ik ze naar de pagina die dat formulier die hen in staat stelt het invoeren van de gebruikersnaam en het wachtwoord. Dan ga ik naar login_form, en dan dat is de werkelijke vorm. Dan, als de gebruiker dat formulier indient, zullen ze voor te leggen aan login.php de methode post. Dan ga ik echt ga dit deel van mijn if-else lus in te voeren. Dan is het hier dat we omgaan met de waarden ingevoerd in het formulier. Het is hier dat we te maken met die. Dan zodra je om met die waarden - als je te maken hebt met - zeggen dat we te maken hebben met de quote.php pagina waar iemand kan invoeren een aandeel dat ze willen opzoeken, en dan zien dat display - dat soort gelijke hier. Hier hebben we een login formulier - you'd waarschijnlijk een offerte formulier - maar dan zodra de gebruiker daadwerkelijk gesteld dat informatie, dan zul je de controller door te geven in een andere template dat zal laten zien dat actuele informatie. Dus dan rechts hier in de buurt, dan zul je waarschijnlijk - rond het einde van uw aandoening hier - het als de methode is gelijk aan post - dan zul je waarschijnlijk nog een pagina wilt maken - de show quote - die stuurt je naar die pagina - show_quote.php-- en dan in dat bestand zal verwijzen die waarden. Is dat logisch? We hebben een controller die in principe betrekking heeft op de 2 gevallen - of die u hebt ingevoerd een formulier in of niet. Als u nog niet hebt opgegeven een formulier, dan leidt u naar die vorm, die dan zal je terug naar die pagina. Dan, als je eenmaal informatie in de controller, zal dat lichaam gaan met dat informatie die nodig is - hetzij het opzoeken van waarden voor de voorraad, en dan als het eenmaal is opgezocht die waarden en heeft ze in een mooi opgemaakte array, dan kan passeren die array in de template pagina  dat zich bezighoudt met het uitvoeren van die informatie. Nogmaals, omdat het web, het gaat leuk worden. We zijn buiten de C dus we zijn niet beperkt tot de ASCII en die terminal output, dus veel plezier met deze. Je kunt het zo beeldend als je wilt. U kunt gebruikers toestaan ​​om ingang miljoenen dollars in een tijd, of ze beperken en worden eigenlijk en alleen hen in staat stellen tot 1 cent in te voeren op een moment of iets dergelijks. Zeker zeker om plezier te hebben met deze. PHP-code is een beetje eenvoudiger in dat het een beetje makkelijker op om uw pseudocode in de feitelijke tenuitvoerlegging. Dus, zeker veel plezier met deze want het is eigenlijk onze laatste stuk in CS50. Daarmee was Walkthrough 7. Zodra u klaar bent met het kijken naar de walkthrough en eindigde uw PSET, dan zijn deze waren ook psets, en nu zijn we op het eindproduct - nadat we er doorheen quiz 1. Dan hopelijk kunt u gebruik maken van de tools die je hebt geleerd van de psets - niet alleen de syntax, maar meer het abstracte begrip van hoe je een bepaalde te nemen - graag wil ik dit en vervolgens daadwerkelijk uitvoering van dat te doen. Leren hoe te worstelen door middel van syntax en distributie code. Het lezen van andere mensen in en druk vervolgens interpreteren dat het gebruik van reeds bestaande functies. Dus, veel succes met de laatste PSET. Het was een genoegen om de walkthroughs leiden. Ik hoop dat ze zijn geweest nuttig voor je. Dit waren Walkthroughs, en heel erg bedankt. [CS50.TV]