[Powered by Google Translate] [Walkthrough Problem Set 7]
[Zamyla Chan] [Harvard University]
[Detta är CS50] [CS50.TV]
>> Hej alla, och välkomna till Walkthrough 7, CS50 Finans.
Nu är vi officiellt klar med alla psets i CS50,
och vi bara kvar med en mer som kommer att bli en rolig implementering
en webbplats där användare kan logga in på CS50 Finans
och köpa och sälja aktier.
>> Idag kommer vi att ha några verktyg till vårt förfogande.
Vi kommer att tala om rättigheter.
När du har en webbmapp
du kommer att vilja tillåta användare att köra vissa filer
men också bara läsa andra,
så vi ska titta på behörigheter och hur du kan ställa in dem.
Sen ska vi undersöka PHP, HTML och SQL-kod.
>> Först behörigheter.
När du är i terminalen i en viss katalog,
vad du vill göra är att du vill köra kommandot chmod.
Det är följt av antingen bokstäver eller siffror
motsvarande vad du i princip vill att världen ska se,
du själv se, etc.
Till exempel, när du har en mapp,
då du vill att mappen kunna köras av alla som ser det,
så vad du skulle göra är att du kan köra kommandot chmod a + x
och sedan namnet på mappen.
När du har en fil som CSS-filer eller bildfiler -
som JPEG och bitmappar, saker, eller någon JavaScript-kod -
du vill att vara läsbar av alla,
så vad du gör är att du kan använda jokertecken -
vilket är en asterisk -
att i princip ange i CSS-mappen - allt i den mappen -
Jag ska säga att det kommer att vara läsbar av alla.
Med behörigheter, när vi använder bokstäverna,
Vi kan också använda siffror i stället.
Så ser du att i slutändan när du vill ha något att vara körbar -
som är representerad av siffran 1 -
något att vara läsbar är antalet 4 och sedan -
skrivbar är nummer 2 -
och så väsentligt när du vill ha en kombination av dessa, då du lägger till dem.
Om du vill ha något att vara läsbar, skrivbar och körbar,
då du skulle lägga upp 4, 2 och 1 och som skulle ge dig 7,
då när du har en mapp som du vill att det ska kunna köras av alla -
samt läs-och skrivbara - då du gör att 7, 1, 1.
Det skulle vara 7 för dig, då 1 för andra människor.
När du har spec, det ska ange faktiskt vilka mappar och vilka filer
måste chmod-ed specifikt.
Till exempel, när du har mappar - de är 7-1-1 -
när du har bilder eller HTML, CSS, JavaScript,
då de kommer att vara 6, 0, 4 - eller 6, 4, 4 -
och sedan PHP-filer kommer att vara 6, 0, 0.
Tanken bakom detta är att användarna inte faktiskt borde se din PHP-kod,
men bara kunna se utgången.
>> Bra! Flytta till PHP.
Enkelt, när du vill ha en PHP-fil, är filen ändelsen. Php.
Du kan också blanda HTML med PHP-kod.
Om du har en HTML-fil, till exempel,
då kan du bifoga den med vänster vinkel, frågetecken, php -
sätta din PHP-kod - och sedan stänga den med en annan frågetecken och en rät vinkel.
Variabler i PHP är mycket lättare att hantera än variabler i C.
Varje variabel börjar bara med ett dollartecken framför den, och de är svagt skrivit.
Det innebär att du inte behöver oroa dig för att ställa något
lika med en sträng eller ett heltal.
Du kan bara helt enkelt säga, detta är mitt namn på variabeln
och då detta är dess värde,
så det kommer att bli lättare att hantera det.
>> En annan sak är att PHP kan du använda associativa arrayer.
Du kan helt enkelt definiera en array som du skulle i C
genom att säga, dollartecken, namnet på din array-lika,
och sedan inom hakparenteser har i princip bara en lista över värden för alla element i arrayen.
Men i PHP vad du kan också göra är att ange grunden -
Det är ungefär som en hashfunktion.
Du kan ange index - vad du ska kalla det -
och sedan som motsvarar ett värde.
Om du skickar faktiskt i en = 1, b = 2, C = 3,
då din array vid index en skulle ge dig 1.
Denna pset kommer att värma dig med lite PHP i en del av frågorna,
och då vi dyka in CS50 Finans.
>> Vi har ett par - vi har vissa funktioner, i princip,
att genomföra i denna webbplats.
Vi vill tillåta användare att registrera sig på vår hemsida med ett användarnamn och ett lösenord.
Vi vill ge dem möjlighet att slå upp ett citat,
och då skulle vi skriva ut namnet på det citatet samt det aktuella priset att det är på.
Vi vill ge dem möjlighet att se en portfölj av samtliga aktier som de har köpt hittills.
Vi vill också ge dem möjlighet att köpa aktier samt sälja dem.
Och slutligen vill vi låta dem se historiken
av alla transaktioner som de har gjort.
Sedan, slutligen, efter att du har genomfört allt detta,
då är du fri att genomföra en extra funktion.
Vi går in i de.
De kan antingen vara så att användarna kan få extra pengar genom att deponera extra pengar,
eller du kan låta dem ändra sitt lösenord, eller något liknande,
maila dem ett kvitto när de köper eller säljer en aktie.
Det finns en begränsad lista över funktioner som du kan genomföra själv,
så det är det sista där.
>> Eftersom detta är en webbplats, ni har också en stor frihet att anpassa den.
Vi ger viss CSS-kod, men du är definitivt fri att justera det,
få det att se trevligare, men underliggande är en grundläggande funktionalitet
så alltid hänvisa till spec om vad du faktiskt behöver för att inkludera det.
Efter spec, vi ska använda apparaten som också en server.
Det kommer att vara värd vår hemsida för oss på sin lokala servern.
Om du följer dessa instruktioner och packa upp pset 7 distributionen kod
i din virtuella värd / lokal värd mappen
då kan du bara besöka http://localhost/ i Google Chrome i apparaten,
och sedan skulle nå koden som du har skrivit pset 7.
>> Pset 7 levereras med ett gäng fördelning kod,
och förhoppningsvis we've - genom alla psets innan detta -
vant oss att läsa igenom utdelning kod,
förstå vilka funktioner som redan finns, och hur vi skulle kunna använda
dessa och andra funktioner som vi kommer att genomföra.
I det här fallet har vi 3 mappar.
Vi har en HTML-mapp, en inkluderar mapp och en Mallar.
Vad vi ska göra med denna pset är typ att separera tänkande -
programmering tänkande - av PHP-koden med den faktiska visuella aspekten.
Vi kommer att ha en PHP-fil som gör allt tänkande, läser i databasen,
Skriver ut saker, har om uttalanden - sånt -
och då kommer skicka data i vår mallfil - eller template.php fil.
Vad som kommer att göra är att läsa data och så kommer det att skriva ut den.
>> Vi kan behandla mallar som "dum" eftersom vi inte verkligen vill ha dem
att göra en hel del arbete för att beräkna saker.
Vi vill att våra styrenheter att göra det.
En liten bit på det - låt oss ta en titt på några av distributionen koden.
Här har vi vår index.html fil, och det är ganska tom.
I huvudsak vad den gör - det säger, ja, jag kommer att kräva configuration.php filen.
Vi ser inte att just där, men det är i princip ringa configuration.php filen,
och verkställande det.
Efter det gör det, kommer det att göra portföljen.
Rendering är en funktion, så när vi är i en styrenhet,
vi kallar render, vi ge den filen och sedan de data som vi passerar i,
så att det ringer i portfolio.php--typ av pass i dessa uppgifter så att portföljen kan hantera detta.
>> Och nu, här har vi vår login.php form.
Det är regulatorn som i grunden tar hand om att logga in
Här kontrollerar det om en form lämnades till den här filen och behandlar validera ansökan.
Vi ska undersöka detta Apologize funktion.
När vi vill skriva ut ett felmeddelande,
Vi använder be om ursäkt och som kommer att omdirigera användaren till en viss sida
som kommer att skriva ut det specifika felmeddelandet som vi visar.
Fortsätter, kommer det att söka i databasen - we'll komma in mer av det senare.
Då kan du se att här nere om en form som inte lämnades, så gör ett formulär.
Det innebär att det går att login_form.php, så låt oss titta på det.
>> Login.php är faktiskt där vi ser HTML befattning med den aktuella visuella aspekten.
Här har vi en ingång tagg för användarnamn, en ingång för lösenordet,
samt en submit-knapp.
Det är faktiskt där den visuella aspekten och HTML-formulär kommer att hållas.
Här står det att det kommer att läggas fram av en viss metod, kallad post.
Vi kommer få in skillnaderna mellan metoderna -
posta kontra få, det finns också något som kallas lagt -
vi får in de metoder senare, men för det intresse av detta pset,
Jag skulle starkt uppmuntra er att använda tjänsten.
>> Vi vet att i princip när denna formuläret skickas -
från login_form.php--
så kommer det att gå till handling - login.php--
princip godkänt på alla dessa parametrar från dessa former i login.php.
Resultaten från den formen finns i det här inlägget associativ array.
Indexen för de olika elementen i posten array
är exakt vad du anger här.
Du säger att namnet på denna ingång är användarnamn. Namnet på denna är lösenord.
Likaså ser du användarnamnet som index för associativ array där.
Om vi ​​går till inkluderar mappen har vi denna funktion fil som kommer att vara mycket användbar.
>> Alla dessa funktioner är implementerade för dig.
Du behöver inte att specifikt tillämpa någon av dessa själv,
men de kommer att ganska bra.
Vi har ursäkt, vilket som jag sa tidigare, i princip kommer att skriva ut ett felmeddelande
för dig på en specifik sida - apology.php.
Sen har vi dumpa, så om du bara ringa dumpa och sedan passera i variabeln,
så kommer det att ta dig till en sida som visar den variabeln för dig.
Då har vi logga ut, som i princip kommer att avsluta en viss användares session.
Uppslagning kommer att vara användbar.
Eftersom vi har att göra med citat och lager, kommer vi att kunna -
och det är i huvudsak i realtid.
Vi behöver veta vad dessa lager värden,
så vi har funktionen LETAUPP som handlar Yahoos dokumentation av bestånden.
När du tittar upp en viss symbol för en aktie, återgår den till dig aktiesymbol
samt namn och det aktuella priset på detta bestånd.
Det är funktionen LETAUPP.
>> Då vi har att göra med MySQL,
så vi kommer att vilja utföra vissa frågor på vår SQL-databas.
Vi har en fråga att ta itu - till typ av abstrakta del av denna ut.
Vi kommer att passera i hela raden av våra SQL-fråga -
och alla variabler som går i den -
och vad detta innebär är faktiskt genomföra det för oss.
Istället för att behöva skriva allt detta ut varje gång som du vill söka -
genom att få alla resultat från denna fråga -
då kan du bara ringa frågan funktion och det kommer tillbaka till dig -
beroende på vad du använder för din fråga -
förmodligen en rad av alla de resultat som matchar sökfrågan eller liknande.
Mer om det senare ändå.
>> Slutligen har vi omdirigera som, vilket namnet antyder, omdirigerar dig till en annan sida.
Och så har vi render, som vi kommer att kalla ett par gånger.
När du är i en styrenhet, kallar du göra i mallen sidan
och sedan passera i de värderingar som mallen kommer då hantera.
Dessa värden är förmodligen kommer att göra med den typ av produktion som du vill
som visas på din mall sida.
Okej. Det är funktioner, och det finns mycket mer att denna fördelning kod.
Jag uppmuntrar dig att gå igenom detta och utforska det själv.
Dessutom kommer spec gå förmodligen dig genom några andra delar av distributionen koden.
Här är en sammanfattning av de funktioner som finns i functions.php.
>> Okej. Den första uppgiften är att tillåta användare att registrera sig på webbplatsen.
Just nu finns det en inloggning form på webbplatsen,
och du har tillgång till ett fåtal användare med lösenord.
Du kan använda dessa användarnamn och logga in,
men du vill tillåta människor att göra sina egna användarnamn
och lägga sig på webbplatsen.
Layouten för registrering är ganska lik inloggningsformuläret,
utom användarnamnet inte tidigare,
och användaren måste också tillhandahålla ett nytt lösenord,
och sedan vanligtvis har vi ett lösenord bekräftelse.
När användaren matar alla av denna information,
Vi vill lägga till dem i vår databas med användare.
Vi kommer att ha en databas - en SQL-databas -
att vi kommer att referera till.
I denna databas kommer vi att ha en tabell med alla användare
innehåller deras användarnamn, sitt lösenord, och även hur mycket pengar de har.
>> I registret vill vi låta dem komma in denna information.
Vi vill visa detta formulär.
Vi vill se till att deras lösenord -
att de kom in en, och sedan också att lösenorden stämmer när de går in det två gånger.
Efter allt detta är gjort - förutsatt att dessa fel kontrolleras -
då vill vi lägga till dessa användare till vår databas.
Slutligen, när du har registrerat, det är ganska bekvämt om du inte behöver logga in igen
När du har registrerat,
så vi kommer att logga dem på webbplatsen om de har registrerats i framgångsrikt.
>> Den första uppgiften är att visa form och det faktiskt kommer att bli -
hela denna registreringsprocess kommer att modelleras ganska tätt efter inloggning
utom i stället för login.php du kanske har register.php.
Istället för login_form.php--vilket är mallen -
du ha register form.
Du vill lägga till ytterligare en fält - ett lösenord bekräftelse fält -
istället för att bara ett användarnamn och ett lösenord.
Sedan vill vi att kontrollera om lösenorden matchar eller är tomma.
Vi har den registeransvarige - register.php--som kommer att ta hand om att göra dessa kontroller.
När ett formulär skickas via posten metoden,
då alla dessa variabler finns i stolpen arrayen.
Du vill vara säker på att efter array värde vid index lösenord
matchar bekräftelse elementet.
Du vill vara säker på att de inte är tomma,
och du vill vara säker på att de är samma.
>> En bekväm sak om PHP är att vi inte behöver använda sträng jämföra längre.
Vi kan använda lika-lika operatör
att kontrollera om strängarna är lika med varandra.
För felhantering, du vill be om ursäkt.
Att be om ursäkt, ringa dig bara funktionen
och sedan ange en typ av meddelande som du vill utdata.
Du vill då lägga till användaren till databasen.
Hittills är allt vi har gjort handlar bara lokalt med resultaten från formuläret.
Nu vill vi verkligen att lägga till dem till vår databas.
För detta vill vi först se till att användarnamnet inte är tomt.
Förstå att på en webbplats, kan du inte ha flera användare med samma användarnamn,
så du vill vara säker på att när du sätter något i din databas -
infoga en ny användare - då du inte får en kollision mellan ett befintligt användarnamn
och användarnamnet som en användare försöker skicka.
För detta, när du kör en fråga -
sätta in en viss användare med deras lösenord och en initial summa pengar -
när du kallar den frågan, då mySQL faktiskt returnera false om det misslyckas.
>> Strukturen av användare är sådan att användarnamnet är ett unikt värde,
så du kan inte ha mer än en.
När du försöker och infoga en ny rad med ett användarnamn som redan finns,
det kommer att returnera false - som ett booleskt värde falskt.
En knepig sak här är att du vill kontrollera om resultatet är resultatet av din sökning.
Om det misslyckas, då du kommer att vilja kontrollera med trippel-lika operatör.
Som faktiskt kommer att kontrollera om det finns ett fel eller inte,
Med bara en enkel lika-lika, skulle det vara sant om raden var tom.
Resultatet av ett misslyckande om det finns en kollision mellan användarnamn
är det faktiska falskt värde.
>> Här är hur du skulle infoga i en databas.
Här är frågan som du skulle köra strikt SQL.
En sak är att du faktiskt kan gå till den webbplats som hanterar din SQL databas
och leka där genom att ange manuellt antingen värden eller rader.
Det kommer att mata vad SQL utgången är.
Du kan också köra SQL-kommandon i din databas
och sedan se vad syntaxen kan vara,
och sedan översätta det till frågan funktion som vi har i pset 7,
som kommer att vara mycket lika de frågor som du faktiskt kör.
>> Om jag ville infoga en ny rad i min användare bord,
då skulle jag ange insatsen i användare, vilket är namnet på mitt bord.
Då skulle jag ange kolumnnamn.
Då skulle jag ge värden tillsammans med mitt lösenord.
Lösenord i våra användare tabellen lagras inte som bara strängen.
De lagras som den krypterade versionen,
så du vill köra funktionen kryptan på själva lösenordet
och som ger dig rätt typ av lagring för användare arrayen.
Kör det här kommer att sätta in en ny rad i din användare tabellen.
>> För att hantera frågan funktion,
innan i C vi använt procenttecken som platshållare.
Likaså gäller samma begreppet platshållare här.
Med frågan anger du hela frågan,
utom när du arbetar med variabler som din input i frågan,
då istället för att faktiskt sätta dem inne - som när vi hade printf uttalanden i C.
Vi skulle sätta strängen och sedan ha en platshållare där, och sedan efter varje
kommatecken, ange vilken variabel som vi hade.
Här kommer vi att använda kännetecknet frågetecken som vår platshållare
och sedan passera i varje variabel, respektive i ordning, för platshållare -
där dessa variabler ska gå.
Så här skulle den första frågetecknet ersättas med den faktiska användarnamn
sedan den andra frågetecknet av lösenordet.
>> Sedan slutligen, när du har registrerat dem och lagt dem i databasen,
då du vill logga in dem i webbplatsen.
Vi har typ av en super-global variabel som kallas session.
Session tar en viss id,
och att id motsvarar den användare som för närvarande är inloggad
Vad du vill göra är att hitta vad deras användarnamn är
och ställ sedan in den Session ID som just användarens ID.
En funktion som du vill använda här är en SQL-kommando
som kommer att hämta den senast insatt id-nummer från tabellen.
Då rader kommer att ringa - it'll ringa ID - it'll tilldela ett namn till numret som returneras.
Det ringer detta ID.
Nu har vi registrera klar och vi kan gå vidare för att citera.
>> Citat tillåter en användare att mata in namnet på en viss aktie,
och sedan kommer tillbaka de kvaliteter detta bestånd.
Vad du vill göra här är att ha en styrenhet och en del mallar.
I det här fallet kommer vi att ha en regulator som kommer att göra allt det tänkande för oss.
Det kommer att slå upp symbolen och sedan passera i värden till de mallar som kommer att skriva ut.
Vi kommer att ha 2 mallar här.
Vi kommer att ha 1 mall som ger den form som användarna kommer att
mata in namnet på lager - namnet på aktien.
Då vi även kommer att vilja en annan mall som visar dessa värden.
Du kan titta på inloggning för ett exempel på hur du skulle ha en form som accepterar indata,
utom i här, vill vi bara 1 fält.
Vi vill inte ha ett användarnamn och ett lösenord.
Vi vill bara 1 textfält som tillåter användaren att mata in namnet på en viss aktie.
Då du vill skicka dessa data - när du har tittat upp det beståndet -
till quote_form.php.
Lookup kommer tillbaka en symbol för en aktie, namn, och ett pris.
De finns i en associativ array.
Slå upp funktionen LETAUPP inuti functions.php för mer information
på avkastningen typerna av dessa.
>> Bra! Så slutligen, vill du visa aktieinformation.
Du vill förmodligen visa - du vill komma åt dessa variabler.
När du har priset i en variabel -
samt namn och symbolen -
då du vill visa dem i din mall sida.
Det mallsida kan kallas show_quote.php eller något.
Din quote.php sida skulle göra visa citat och sedan passera i alla dessa värden.
Sedan i din PHP-sida, skriver du faktiskt ut dessa värden till HTML aspekten av sidan.
Du använder bara utskrift och passerar i priset.
Det finns 2 sätt - du kan antingen sammanfoga den med punktoperatorn,
eller använda en platshållare.
>> Användarna så småningom kommer att köpa och sälja aktier.
Vi vill ge dem något sätt att se alla de lager som de för närvarande har.
Vi kommer att kalla det sin portfölj.
Portfölj skulle förmodligen för varje användare, innehåller en massa rader
lista vilken typ av aktie som de har och sedan hur många av dem de har.
Vår befintlig tabell - just nu har vi en användare bord i vår databas.
Som innehåller en användares användarnamn samt deras lösenord och hur mycket pengar de har.
Det finns ingen verklig sätt att lagra alla sina lager inom det.
Det är inte som om vi kan infoga nya kolumner för varje lager.
Det skulle vara en mycket, mycket lång rad eftersom vi har en oändlig mängd
typer av lager som de kan ha.
Så, är i stället vad vi ska göra inom samma databas,
Vi kommer att ha en användare bord, men vi kommer också att ha en portfölj bord.
Portföljen tabellen kommer att definitivt kopplat till användarna bordet,
utan portfölj tabellstrukturen kommer att ha information om aktier,
hur många aktier i det beståndet användaren har,
liksom en användares särskild id-nummer.
Du har användare tabellen som har ett id samt användarnamn, hash -
vilket är lösenordet, det krypterade lösenordet -
och sedan hur mycket pengar de har.
ID-numret kommer att kopplas till ID-numret från portföljen.
Portföljen skulle bara ha en symbol för beståndet samt aktier -
det antal aktier i det lager som användaren har.
I den portfölj tabellen du skulle ha i princip
samtliga aktier innehas av alla användare på din webbplats.
Senare, att ange endast en viss användares aktier - endast deras portfölj -
skulle du hämta värden från din portfölj bord så att
ID-numret är specifikt för användaren.
>> När du visar portföljen, kommer du vill rapportera varje lager i en användares portfölj.
Du vill rapportera antalet aktier och det aktuella värdet av dessa aktier.
Det aktuella värdet på dessa aktier lagras inte i portföljen tabellen
eftersom det kommer att bli uppdatering - vid minsta - varje dag av Yahoo.
För att få denna information, kan du referera inte att från din SQL-fråga.
Vilken funktion har det för oss? Vilken funktion får priset?
Det är lookup, så kommer med uppslag på en viss symbol ger dig en hel del information.
Det kommer att ge dig 3 bitar av information - namn, symbol, liksom priset.
När du slå en viss symbol, då kan du få priset,
och sedan kan du använda det pris som skall visas i din portfölj.
>> Portföljen ska också visa användarens aktuella kassa.
Detta område lagras i din användare tabellen.
Så då ihåg hur vi i grund och botten ska ha till -
vi ska ha olika typer av PHP-filer.
Vi kommer att ha en regulator som i princip gör allt tänkande åt dig.
Och så har vi en mall där mallen handlar utmatning data.
Du måste tänka på vad variabler kontrollenheten kommer att behöva ta i.
Om vi ​​har att göra med en portfölj som matar ut alla namn, symbol och dela nummer,
samt nuvarande priset på en aktie,
då du kommer att vilja hitta ett sätt att i grund och botten går i -
du kan skicka i en matris med värden som matchar det.
>> Låt oss gå in ett exempel på hur du kan hämta alla lager
som ägs av en viss användare.
Detta är inte att göra - ännu - med priset på aktien.
Vad skulle göra är att köra en fråga.
Det skulle få symbolen samt aktier från -
Jag ringer denna tabell, men i detta fall vad skulle det vara?
Vad är namnet på den tabell som vi har att göra med som har symbolen och aktier
för en viss användare?
Det är antingen användare eller portfölj.
Portfölj.
Vad skulle göra är fråga portfölj för symbolerna och aktier
för en viss användare.
Här, säger jag, (Välj symbol, aktier från TBL -
men istället för bord, du kommer att ersätta det med portfölj.
"Var är i grunden mitt tillstånd.
Jag säger att jag bara vill få de associativa arrayer som motsvarar
denna följande villkor - id jämlikar.
Då får jag slå en platshållare där och då Session ID.
Vad skulle göra är att säga för varje rad i rader.
Detta är ett snyggt sätt istället för att faktiskt behöva upprätta en for-slinga
som itererar över alla index, då i PHP kan du ha en för-varje slinga.
>> Om du har en viss uppsättning, kan du säga att jag ska ringa varje efterföljande element -
Jag ska ringa varje element detta namn.
Så för var och en av dessa element, kommer jag att kalla dem det,
då kan jag göra det här.
I denna för varje, har du rader som din faktiska matris och varje rad du ska ringa rad.
Varje gång den utför kroppen,
det kommer att gå upp och det kommer att uppdatera raden till nästa element i rader.
>> Nu, när det gäller att köpa aktier,
vad vi vill göra är att få beståndet att användaren vill köpa
och det antal aktier som användaren vill köpa, och sedan - om de vill -
tillägga att lager till sin portfölj.
Självklart, om de ska köpa något, då det kommer att minska
hur mycket pengar de har, så det kommer att minska sina pengar.
Vi kommer att ha att göra med att uppdatera portföljen samt användarnas tabellen,
som innehåller kontanter.
Men först måste du få den verkliga lager och antal aktier som användaren vill.
För det behöver du ett HTML-formulär som kommer att be om symbolen för beståndet
som du vill köpa samt antal aktier.
Då kommer du vill lägga till.
Du vill välja vissa värden.
Vi har gått igenom detta lite redan, men när du försöker få vissa rader -
hämta vissa rader från SQL-tabell,
Detta är följande syntax.
Du har att välja, och sedan om du anger en stjärna,
som i princip kommer tillbaka det hela, hela raden för dig.
Då igen, har du tillstånd då, och sedan anger du -
Jag vill bara användarnamnet att vara lika med post-i,
så det kommer bara hämta raden användare som motsvarar post-i.
>> När en användare vill lägga till en aktie till en portfölj,
måste du kontrollera några fel.
Du vill vara säker på att användaren faktiskt har råd beståndet,
så du vill kontrollera sina pengar.
Förr använde vi stjärnan för att hämta en hel rad från en SQL-tabell.
Men här kan vi faktiskt bara ange att jag vill bara 1 värde -
Jag vill bara kontanter.
Så här skulle det tillbaka pengar för användaren med id-nummer 1.
Om en användare har redan köpt ett visst bestånd, men sedan köper mer av detta bestånd,
sedan i din portfölj - vill du inte en separat rad,
annan rad som innehåller den nya transaktionen.
Du vill verkligen att uppdatera beloppet.
Allt som förändras verkligen är det antal aktier som den användaren äger.
Om du använder insatsen i frågan - så det är in precis i din portfölj alla dessa värden -
användarens id-nummer samt symbol för beståndet att de köper
och aktierna, så kommer du också vill ange, ja, om jag stöter på en dubblett nyckel -
I detta fall är den dubblerade nyckeln inte bara användarens id utan också aktiesymbol -
eftersom du kan bara ha - vår utgångspunkt är att du bara kan ha 1 rad
som motsvarar 1 särskild symbol.
Så, på den dubblerade nyckel - Om du stöter på en kollision där -
du bara kommer att uppdatera aktier till sitt nya värde.
Aktier motsvarar vad vi hade innan plus antal aktier som användaren köper.
>> Nu när vi har uppdaterat portföljen bordet,
vi vill uppdatera användarens kontanter.
Det är i användarnas tabellen, så vi kommer att subtrahera en viss mängd från kontanter.
Förmodligen kommer det att bli pengar motsvarar medel minus - och sedan ett visst belopp.
För att uppdatera pengar, skulle du -
om jag ville ta bort pengar från post-i, då skulle jag köra den här frågan -
'Update användare och ställ sedan in den kontanta kolumnen till kontanter -
>> Jag skulle ta bort 9.999 dollar om användarnamnet är lika med post-i.
Men i det här fallet vill vi inte att subtrahera 9.999 specifikt.
Vi vill specificera, ja, vi vill subtrahera det nuvarande priset på aktien
multiplicerat med det antal aktier som de köper.
>> Nu har vi tillät dem att se alla de lager som de har,
samt köpa fler aktier.
Vi har också tidigare tillät dem att slå upp det nuvarande priset på en aktie.
Här vill vi låta dem sälja dem.
Först vill vi visa i stort sett -
Vi vill låta dem se alla de lager som de har,
så här vill vi visa alla rader från portföljen.
Om de väljer att sälja en viss aktie,
då ska vi anta att de vill sälja allt.
De är inte bara att sälja 50% av sina aktier, kommer de att sälja 100% av det.
Vi kan bara ta bort hela raden från portföljen.
Vi kan ta bort den givna användarens andelar av viss symbol.
Det finns syntaxen för det.
>> Sen vill vi uppdatera kontanter.
Vi kommer att lägga i pengar motsvarar det antal aktier som de säljer
multiplicerat med det aktuella priset på aktien -
inte det pris som de köpte den, utan snarare det pris som de är -
det aktuella priset när de säljer den.
Att referera till nuvarande priset på en aktie,
du kommer att vilja använda lookup, vilket ger dig priset på en aktie
vid den aktuella tidpunkten.
>> Nu är vi kvar med historia,
som du vill tillåta en användare att hålla reda på alla sina transaktioner -
vill se när de sålde något, när de köpte ett lager.
Vi vill ange den tid då de gjorde det och hur många de köpte
och vilken materiel det var.
Har vi någon ström, befintlig struktur som anger det?
Tja, vi har portfölj som visar antalet aktier som en användare har
för en given andel.
Men vi strukturera portföljen på det sätt att det uppdateras när vi köper flera,
medan historien bör - om du köper Apple, 10 aktier i det, och sedan på sälja 5,
då du skulle vilja se dem separat som separata åtgärder, separata rader.
Med beaktande av att åtgärder för att visualisera det i vår portfölj tabell
skulle bara vara en uppdatering till just raden,
så vi förmodligen kommer att vilja en annan tabell.
I vår databas har vi våra användare bord, har vi vår portfölj bord,
och nu ska vi förmodligen ha en historia bord.
Att historien tabell kan hålla reda på aktuellt datum,
liksom den särskilda aktiesymbol, liksom hur många aktier,
och sedan vilka åtgärder den är -
om du köpte dessa aktier eller om du säljer dem.
>> För att hantera datum, det finns ett par sätt som du kan göra här.
PHP har ett sätt att hålla koll på datum, som du kan slå upp själv.
I SQL kan du också använda antingen nu eller nuvarande tidsstämpel. Det är upp till dig.
Bara se till att varje gång en användare köper eller säljer, kommer du att uppdatera sin kassa
i användarens tabellen, kommer du att uppdatera raderna i portföljer tabellen,
så kommer du också att uppdatera historien,
så det kommer att bli 3 separata SQL-frågor som du kommer att ringa dit.
Vi har ett gäng funktionalitet nu.
>> Bara ett par påminnelser som i indexfilen kommer du vill länka till minst din -
men du vill tillåta en användare att länka till buy.php sidan.
Det kommer att tillåta en användare - buy.php är regulatorn, så att det kommer att antingen
skicka dig till - det kommer att skicka dig till den form som låter dig söka upp saker.
Vi har historia. Vi har logga ut, att få en offert och sedan sälja.
De är vid minsta vad du vill visa.
När det gäller portföljen är portföljen faktiskt visas i indexsidan.
Om vi ​​går till index Här ser vi att den gör portfolio.php
och passerar i associativ array - i grund och botten titeln lika portföljen.
Så det här är styrenheten.
Om vi ​​går till mallen för portfolio.php,
så allt det har är - visar i princip en bild som säger, åh, det här platsen under uppbyggnad.
Senare, när du passerar i - du kan passera i grunden mer specifik information.
Istället för att bara titeln, kommer du förmodligen att passera i fler saker.
När du har dessa värden, så portfolio.php kan hantera dessa värden
och skriva ut dem i någon form av ordning.
>> När du har genomfört alla dessa, måste du också implementera 1 fler funktioner.
Detta kan antingen tillåta en användare att ändra sitt lösenord,
att återställa sitt lösenord om de har glömt det - så för återställning av lösenord, sedan
du förmodligen också vill redigera registrera så att det tillåter dem att ange en e-post,
så om de glömmer sitt lösenord, så de kan få det.
De kan nog i sina användarnamn och sedan ett e-postmeddelande kommer att skickas till dem
med en länk för att kunna återställa sitt lösenord.
Du kan ha något som tillåter användare att få kvitton
varje gång de köper eller säljer något,
och slutligen, att de kan lägga pengar på deras hemsida.
Bara att gå tillbaka till begreppet flygledare och mallar lite.
Du har något som liknar en - så att du har en styrenhet här.
Just nu är vi tittar på login.php exempel.
När vi har en styrenhet, i grund och botten att det kommer att ta 2 fall.
När vi har regulatorer, vi i denna pjäs som vi också typ av hantera
när vi har formulär också.
Regulatorn kommer i huvudsak att ha separata åtgärder -
en om en form redan lämnats in, och sedan två om användaren kommer till den sidan
för första gången och fortfarande behöver ingång som formen.
>> Jag ska hoppa till det målet innan gå upp till det första fallet av att ha formen i.
Här säger vi, om formuläret har lämnats in med metoden efter -
oroa dig inte om det lite.
Oroa dig inte om det för mycket men förstår att grunden denna funktion handlar
om ett formulär har skickats eller inte.
Detta tillstånd gäller om en användare har lämnat på formuläret.
Om inte, så vi kommer att vilja ringa render login_form.php och sedan passera i titeln.
Denna titel är bara grunden kommer att visas i sidhuvudet.
Vad detta innebär är i grunden säger, okej - ja, om en användare går till login.php
och har faktiskt inte inloggad, då jag vill skicka dem till sidan som har denna form
som tillåter dem att mata in användarnamn och lösenord.
Sedan går jag till login_form och då har den verkliga formen.
Sedan, när användaren har gjort gällande att formen kommer de att överlämna den till login.php
med metoden inlägget.
Då jag faktiskt kommer att gå in på denna del av mitt if-else slinga.
Då är det här som vi behandlar de värden som anges i formuläret.
Det är här som vi hanterar dem.
>> Sen när du handskas med dessa värden - om du arbetar med -
säga att vi arbetar med quote.php sidan där någon kan mata in ett bestånd som
de vill slå upp, och sedan se till att displayen -
det är ganska liknande här.
Här har vi ett inloggningsformulär - you'd förmodligen en offert form -
men sedan när användaren faktiskt lämnat denna information,
då du vill regulatorn att passera in en annan mall
som kommer att visa dem att aktuell information.
Så sedan höger här, så kommer du förmodligen -
i slutet av ditt tillstånd här - om metoden är lika efter -
då du förmodligen vill göra en annan sida - showen citat -
som skickar dig till den sidan - show_quote.php--
och sedan i den filen refererar dessa värden.
Verkar det vettigt?
>> Vi har en styrenhet som i grunden handlar om de 2 fall -
om du har angett ett formulär i eller inte.
Om du inte har angett ett formulär,
så kommer det att omdirigera dig till den form som sedan kommer att sätta dig tillbaka till den sidan.
Sedan, när du har information i regulatorn kommer detta organ ta itu med det
information som behövs - antingen leta upp värden för beståndet,
och sedan när det tittade upp dessa värden och har dem i en vackert formaterad array,
då kan passera den arrayen i mallen sidan
som handlar mata denna information.
>> Återigen, eftersom det är webb, det kommer att bli kul.
Vi är utanför C så att vi inte är begränsad till ASCII och att terminalen utgång,
så ha kul med det här.
Du kan göra det så visuellt som du vill.
Du kan tillåta användare att mata in miljontals dollar i taget,
eller begränsa dem och bli riktigt menar och låta dem bara ange 1 öre åt gången
eller något liknande.
Definitivt se till att ha kul med denna.
>> PHP-kod är lite enklare att det är lite lättare att kartlägga din pseudokod
i det faktiska genomförandet.
Så definitivt ha kul med detta eftersom det är faktiskt vår sista bit i CS50.
Därmed var Walkthrough 7.
När du är klar tittar på genomgång och avslutat din pset,
då dessa var också psets, och nu är vi på den slutliga produkten -
efter att vi kommer igenom frågesport 1.
Sedan förhoppningsvis kan du använda de verktyg som du har lärt från psets -
inte bara syntaxen, men mer abstrakta begreppet hur man tar en viss -
gillar, jag vill göra detta och sedan faktiskt genomföra det.
Att lära sig att kämpa igenom syntax och distribution kod.
Läsa andras kod och sedan tolka att använda befintliga funktioner.
>> Så, lycka till med den sista pset.
Det har varit ett nöje att leda genomgångar.
Jag hoppas att de har varit till hjälp för dig.
Det var genomgångar och tack så mycket.
[CS50.TV]