[Powered by Google Translate] [Walkthrough Problem Set 7] [Zamyla Chan] [Harvard University] [Dies ist CS50] [CS50.TV] Hallo an alle, und Walkthrough 7, CS50 Finance willkommen. Jetzt sind wir offiziell mit allen pset in CS50 getan, und wir nur mit einem mehr, die ein Spaß Umsetzung sein wird links einer Website, wo Nutzer einloggen können CS50 Finanzen und Aktien kaufen und verkaufen. Heute sind wir ein paar Werkzeuge zur Verfügung zu haben. Wir werden über Berechtigungen zu sprechen. Wenn Sie einen Web-Ordner, Sie gehen zu wollen, damit die Benutzer auf bestimmte Dateien ausführen sondern auch gerade gelesen anderen, so dass wir in Berechtigungen aussehen und wie können Sie die eingestellt. Dann werden wir in PHP, HTML und SQL-Code zu suchen. Zunächst Berechtigungen. Wenn Sie im Terminal in einem bestimmten Verzeichnis sind, dann, was Sie tun möchten, ist Sie die chmod Befehl auszuführen. Das ist entweder durch Buchstaben oder Zahlen folgen dem entspricht, was Sie wollen im Grunde die Welt zu sehen, Sie selbst zu sehen, etc. Zum Beispiel, wenn Sie einen Ordner haben, dann wollen Sie, dass Ordner ausführbar alle, die es versteht sein, so was Sie tun würden ist, könnten Sie den Befehl ausführen chmod a + x und dann den Namen des Ordners. Wenn Sie eine Datei wie CSS-Dateien oder Bilddateien - wie JPEGs oder Bitmaps, solche Dinge, oder jede JavaScript-Code - Sie möchten, dass sein für jedermann lesbar, so dann, was Sie tun, ist, könnten Sie das Wildcard - das ist ein Stern - alles in diesem Ordner - im Grunde in der CSS-Ordner angeben -  Ich werde sagen, dass das passiert zu sein für jedermann lesbar. Mit Berechtigungen, wenn wir die Buchstaben zu verwenden, Wir können auch Zahlen statt. Sie sehen also, dass letztlich, wenn man etwas ausführbar sein wollen - Das ist durch die Zahl 1 dargestellt - etwas lesbar ist die Zahl 4 und dann - beschreibbar ist die Nummer 2 - und so im wesentlichen, wenn Sie eine Kombination aus diesen wollen, dann fügen Sie sie. Wenn Sie etwas zu schreibbar, lesbar und ausführbar sein soll, dann würden Sie addieren Sie 4, 2 und 1, und das würde Ihnen 7, dann, wenn Sie einen Ordner haben und Sie möchten, dass die ausführbare Datei von allen sein - sowie lesbar und beschreibbar - dann machen Sie, dass 7, 1, 1. Das wäre 7 für Sie sein, dann 1 für den anderen Menschen. Wenn Sie die spec haben, werden sie tatsächlich angeben, welche Ordner und welche Dateien müssen chmod-ed spezifisch sein. Zum Beispiel, wenn Sie Ordner haben - das sind 7-1-1 - Wenn Sie Bilder oder HTML, CSS, JavaScript, dann diejenigen gehen bis 6, 0, 4 - oder 6, 4, 4 - und dann PHP-Dateien gehen bis 6, 0, 0 sein. Die Idee dahinter ist, dass die Benutzer nicht sehen Sie Ihre PHP-Code, aber nur in der Lage sein, um die Ausgabe zu sehen. Great! Umzug in PHP. Einfach, wenn Sie eine PHP-Datei wollen, ist die Dateiendung. Php. Sie können auch mischen HTML mit PHP-Code. Wenn Sie eine HTML-Datei, zum Beispiel, dann können Sie es mit der linken Winkel, Fragezeichen, php umschließen - legen Sie Ihre PHP-Code - und schließen, dass mit einem Fragezeichen und einem rechten Winkel. Variablen in PHP sind viel leichter zu behandeln als Variablen in C. umgehen Jede Variable gerade beginnt mit einem Dollar-Zeichen vor ihm, und sie sind schwach typisiert. Das bedeutet, dass Sie nicht brauchen, um über die Einstellung etwas Sorgen gleich einer Schnur oder einem ganzzahligen. Sie können einfach nur sagen, das ist mein Name der Variablen und dann dieser Wert hat, also wird es leichter zu sein, mit dort beschäftigen. Eine andere Sache ist, dass PHP Sie assoziative Arrays zu verwenden. Sie können einfach nur definieren ein Array wie man es in C mit den Worten: Dollar-Zeichen-der Name Ihres Array-Gleichen, und dann in eckigen Klammern sind im Grunde nur die Liste der Werte aller Elemente im Array. Aber in PHP, was man auch tun, ist anzugeben grundsätzlich - Es ist wie eine Art von Hash-Funktion. Sie können den Index - was wirst du es nennen - und dann, dass einem Wert entspricht. Wenn Sie tatsächlich in a = 1, b = 2, c = 3 übergeben, dann Ihr Array bei Index a würde Ihnen 1. Diese pset wird Aufwärmen mit einigen PHP in einem Abschnitt von Fragen, und dann werden wir in CS50 Finance tauchen. Wir haben ein paar - wir haben einige Funktionen, im Grunde, die auf dieser Webseite zu implementieren. Wir wollen, dass Benutzer auf unserer Webseite mit einem Benutzernamen und einem Passwort registrieren. Wir wollen es ihnen ermöglichen, suchen Sie nach einem Angebot, und dann würden wir drucken den Namen dieses Zitat als auch den aktuellen Preis, dass es ist. Wir wollen es ihnen ermöglichen, ein Portfolio aller Aktien, die sie bisher gekauft haben, zu sehen. Wir wollen auch ihnen zu ermöglichen, Aktien zu kaufen als auch verkaufen. Und schließlich wollen wir es ihnen ermöglichen, die Geschichte zu sehen aller Transaktionen, die sie gemacht haben. Dann, endlich, nachdem Sie all das umgesetzt, dann bist du frei, um eine zusätzliche Funktion zu implementieren. Wir werden in die zu gehen. Diese können entweder die Benutzer sein, um zusätzliches Geld durch Hinterlegung zusätzliches Geld zu bekommen, oder man könnte es ihnen ermöglichen, ihr Passwort oder so etwas zu ändern, E-Mail ihnen eine Quittung, wenn sie kaufen oder verkaufen eine Aktie. Es gibt eine begrenzte Liste von Funktionen, die Sie selbst implementieren könnte, so das ist der letzte dort. Da es sich um eine Website, euch auch viel Freiheit, um sie anzupassen. Wir tun bieten einige CSS Code, aber du bist definitiv frei, um es zu optimieren, machen es schöner aussehen, aber ihr zugrundeliegende ist eine grundlegende Funktionalität so dass immer der Spezifikation über das, was Sie wirklich brauchen, um dort gehören zu verweisen. Nach dem spec, werden wir verwenden das Gerät als auch einen Server. Es wird veranstaltet unsere Website für uns, auf dem lokalen Server. Wenn Sie diese Anweisungen befolgen und entpacken Sie die pset 7 Code der Verteilung in Ihrem virtuellen Host / local Host-Ordner,  dann besuchen Sie einfach http://localhost/ in Google Chrome im Gerät, und dann würden Sie erreichen den Code, in dem Sie pset 7 geschrieben habe. Pset 7 kommt mit einer Reihe von Vertriebs-Code, und hoffentlich we've - durch alle pset bevor diese - uns gewöhnt zu lesen über die Distribution Code zu verstehen, was Funktionen, die bereits vorhanden sind, und wie wir in der Lage sein zu verwenden diese und die anderen Funktionen, die wir gehst zu Umsetzung. In diesem Fall haben wir 3 Ordnern. Wir haben einen HTML-Ordner, ein enthält Ordner und einen Vorlagen-Ordner. Was werden wir mit diesem pset tun ist eine Art der Trennung von Denken - die Programmierung Denken - der PHP-Code mit der tatsächlichen visuellen Aspekt. Wir müssen ein PHP-Datei, die alle das Denken tut, liest in der Datenbank druckt die Dinge hat, wenn Aussagen - Dinge wie, dass - oder die Datei template.php - und dann das wird Daten in unserem Template-Datei übergeben. Was das tun wird die Daten lesen und dann wird es auszudrucken. Wir können Vorlagen als "dumm", dass wir nicht wirklich wollen, dass sie zu behandeln zu tun eine Menge Arbeit bei der Berechnung Dinge. Wir wollen, dass unsere Controller zu tun. Ein wenig auf, dass - lassen Sie uns einen Blick auf einige der Verteilung Code. Hier haben wir unsere index.html-Datei, und es ist ziemlich leer. Im Wesentlichen, was sie tut - es sagt, na ja, ich werde das configuration.php-Datei benötigen. Wir sehen nicht, dass genau dort, aber es ist im Grunde Aufruf der configuration.php Datei, und Ausführen des. Nachdem er das tut, es geht um das Portfolio zu machen. Rendering ist eine Funktion, so, wenn wir in einem Controller sind, wir render nennen, wir geben es die Datei und dann die Daten, die wir im Vorbeigehen, so dass es dann in portfolio.php--Art Pass, dass Daten aufrufen, sodass Portfolio damit umgehen können. Und jetzt, hier haben wir unsere login.php Form.  Dies ist die Steuerung, die im Grunde übernimmt den Protokollierung in. Hier wird geprüft, ob eine Form wurde diese Datei und befasst sich mit der Validierung der Vorlage vorgelegt. Wir werden in diesem entschuldigen Funktion anschauen. Wenn wir zum Ausdrucken eine Fehlermeldung möchten, wir entschuldigen und das wird den Benutzer zu einer bestimmten Seite umleiten das wird Ausdruck der spezifischen Fehlermeldung, dass wir anzuzeigen. Weiter auf, wird es die Datenbank abfragen - wir werden in mehr davon später. Dann sehen Sie, dass hier unten, wenn ein Formular nicht eingereicht wurde, dann ist es eine Form macht. Das bedeutet, dass es login_form.php geht, so lasst sieh dir das an. Login.php ist eigentlich, wo wir die HTML Umgang mit dem tatsächlichen visuellen Aspekt zu sehen. Hier haben wir ein input-Tag für den Benutzernamen, ein Eingang für das Passwort sowie ein Submit-Button. Das ist eigentlich, wo der visuelle Aspekt und das HTML-Formular wird stattfinden. Hier heißt es, dass es geht um eine bestimmte Methode vorgelegt werden, die so genannte Post. Wir werden in den Unterschieden zwischen den Methoden zu bekommen - Beitrag im Vergleich zu bekommen, gibt es auch so etwas wie gesagt - wir werden in diesen Verfahren später zu bekommen, aber für das Interesse dieser pset, Ich würde sehr empfehlen Ihnen, Beitrag benutzen. Wir wissen, dass grundsätzlich einmal diese Form vorgelegt wird - login_form.php aus-- dann wird es zu der Aktion gehen - login.php-- grundsätzlich in all diesen Parametern aus diesen Formen gehen in login.php. Die Ergebnisse aus dieser Form sind in diesem Beitrag assoziatives Array enthalten sind. Die Indizes der verschiedenen Elemente in der post-Array sind genau das, was Sie hier angeben. Sie sagen, dass der Name dieses Input-Benutzername ist. Der Name dieser ein password. Ebenso sehen Sie den Benutzernamen als Index des assoziativen Arrays gibt. Wenn wir auf die includes Ordner zu gehen, haben wir diese Funktionen Datei, die gehen sehr nützlich sein wird. Alle diese Funktionen sind für Sie umgesetzt. Sie brauchen nicht gezielt umsetzen jeder dieser selbst, aber sie sind recht nützlich gehen. Wir entschuldigen, die, wie ich schon sagte, wird grundsätzlich zu drucken eine Fehlermeldung für Sie auf einer bestimmten Seite - apology.php. Dann haben wir dump, so dass, wenn Sie rufen dump und dann passieren in der Variablen dann wird es Sie zu einer Seite, die diese Variable für Sie anzuzeigen bringen. Dann haben wir Abmeldung, die wird grundsätzlich am Ende eines bestimmten Benutzer-Session. Lookup wird nützlich sein. Da wir mit Zitaten und Aktien zu tun haben, werden wir in der Lage sein - und es ist im wesentlichen Echtzeit. Wir müssen wissen, was diese Lager Werte sind, so haben wir die Lookup-Funktion, die mit Yahoo in der Dokumentation von Beständen befasst. Sobald Sie sehen ein bestimmtes Symbol einer Aktie, wird es Ihnen das Börsenkürzel zurück sowie dem Namen und der aktuelle Preis dieser Aktie. Das ist die Lookup-Funktion. Dann werden wir mit MySQL zu tun haben, so werden wir sein wollen, um bestimmte Fragen zu unseren SQL-Datenbank auszuführen. Wir haben Abfrage umgehen - die Art abstrakter etwas von diesem aus. Wir werden in der gesamten Kette von unserer SQL-Abfrage werden vorbei - und alle Variablen, die in ihm zu gehen - und was dieser tut, ist tatsächlich auszuführen, dass für uns. Anstatt all dies aus jeder Zeit, dass Sie abfragen möchten schreiben - indem man alle Ergebnisse dieser Abfrage - dann kann man nur rufen Sie die Abfrage-Funktion, und es wird zu euch zurückkehren - je nachdem, was Sie für Ihre Abfrage mit - wahrscheinlich eine Reihe von all den Ergebnissen, die die Abfrage oder ähnliche entsprechen. Mehr dazu später though. Schließlich haben wir umzuleiten, welche, wie der Name schon vermuten lässt, leitet Sie zu einer anderen Seite. Und dann haben wir render, die wir zu rufen ein paar Mal sind. Wenn Sie in einem Controller sind, rufen Sie machen in den Template-Seite und dann in den Werten, die die Vorlage dann mit befassen wird passieren. Diese Werte sind wahrscheinlich mit der Art der Ausgabe, die Sie zu tun haben auf Ihrem Template-Seite angezeigt werden. Okay. Das sind die Funktionen, und es gibt noch viel mehr zu dieser Verteilung Code. Ich ermutige Sie, durch diese gehen und erkunden it yourself. Außerdem wird das spec wahrscheinlich gehen Sie durch einige andere Elemente der Verteilung Code. Hier ist eine Zusammenfassung der Funktionen in functions.php gefunden. Okay. Die erste Aufgabe ist es, Benutzern auf der Website registrieren. Gerade jetzt, es ist ein Login-Formular auf der Website, und Sie sind mit ein paar User mit Passwörtern versehen. Sie können diese Benutzernamen und melden Sie sich an, aber Sie möchten, dass die Menschen ihren eigenen Benutzernamen zu machen und fügen sich auf der Website. Das Layout für die Anmeldung ist ziemlich ähnlich wie die Login-Formular, außer der Benutzername nicht bereits vorhanden ist, und der Benutzer muss auch ein neues Kennwort angeben, und dann in der Regel haben wir ein Passwort Bestätigung. Sobald die Eingaben des Benutzers alle dieser Informationen wollen wir sie in unsere Datenbank der Benutzer hinzuzufügen. Wir gehen auf eine Datenbank haben - eine SQL-Datenbank - dass wir gehen zu verweisen. In dieser Datenbank werden wir eine Tabelle mit allen Benutzer haben mit ihrem Benutzernamen, das Passwort, und auch, wie viel Geld sie haben. Im Register, wollen wir es ihnen ermöglichen, diese Informationen zu gelangen. Wir wollen, dass die Form anzuzeigen. Wir wollen sicherstellen, dass ihr Passwort - dass sie trat ein, und dann auch, dass die Passwörter, wenn sie es zweimal eingeben lassen. Nach all das getan wird - vorausgesetzt, dass diese Fehler überprüft werden - dann wollen wir die Benutzer unserer Datenbank hinzuzufügen. Schließlich, nachdem Sie sich registriert haben, ist es ziemlich praktisch, wenn Sie nicht brauchen, um sich erneut anzumelden wenn Du angemeldet bist, also werden wir sie sich auf der Website, wenn sie erfolgreich registriert haben. Die erste Aufgabe ist es, das Formular anzuzeigen, und dies ist eigentlich los zu sein - diese ganze Registrierung wird ziemlich genau nach Anmeldung modelliert werden aber anstatt die login.php haben Sie vielleicht register.php. Statt login_form.php--dem ist die Vorlage - Sie haben registrieren Form. Sie wollen ein weiteres Feld hinzuzufügen - ein Passwort Bestätigungsfeld - anstatt nur einen Benutzernamen und einen Passwort. Als nächstes wollen wir überprüfen, ob die Passwörter übereinstimmen oder sind leer. Wir haben den Controller - register.php--was kümmert sich um zu tun, diese Kontrollen teilnehmen. Wenn ein Formular über die POST-Methode eingereicht, dann werden alle diese Variablen werden innerhalb der Post Array enthalten sind. Sie wollen sicherstellen, dass die Post-Array-Wert bei Index vergessen entspricht die Bestätigung Element. Sie wollen sicherstellen, dass sie nicht leer sind, und Sie wollen sicherstellen, dass sie die gleichen sind. Eine bequeme Sache über PHP ist, dass wir nicht brauchen, um Zeichenfolge verwenden zu vergleichen mehr. Wir können das gleich-Operator =  zu überprüfen, ob Strings gleich zueinander sind. Für die Fehlerbehandlung, Sie wollen sich zu entschuldigen. Um sich zu entschuldigen, rufen Sie einfach die Funktion  und geben Sie dann eine Art von Nachricht, die Sie ausgeben wollen. Sie wollen dann den Benutzer auf der Datenbank hinzuzufügen. Bis jetzt ist alles, was wir getan haben nur den Umgang vor Ort mit den Ergebnissen des Formulars. Nun, wir eigentlich wollen sie in unsere Datenbank aufzunehmen. Dazu wollen wir zunächst sicherstellen, dass der Benutzername nicht leer ist. Verstehen Sie, dass auf einer Website, können Sie nicht mehrere Benutzer mit dem gleichen Benutzernamen, so dass Sie wollen sicherstellen, dass, wenn Sie etwas einfügen in Ihre Datenbank - fügt einen neuen Benutzer - dann bekommt man nicht eine Kollision zwischen einem bereits existierenden Benutzernamen und der Benutzername, dass ein Benutzer versucht, sich zu unterwerfen. Für diese, wenn Sie eine Abfrage ausführen - Einfügen eines bestimmten Benutzers mit ihrem Passwort und eine anfängliche Menge an Bargeld - einmal rufen Sie die Abfrage, dann mySQL tatsächlich false zurück, wenn es scheitert. Die Struktur von Benutzern derart ist, dass der Benutzername ein einzigartiger Wert ist, so kann man nicht mehr als einen. Wenn Sie versuchen, eine neue Zeile einfügen mit einem Benutzernamen, der bereits vorhanden ist, das wird sich wieder falsch - wie ein Boolean-Wert false. Eine knifflige Sache hier ist, dass Sie überprüfen wollen, ob das Ergebnis ist das Ergebnis Ihrer Abfrage. Wenn es fehlschlägt, dann werden Sie wollen, um mit dem Triple-Gleich-Operator überprüfen. Das ist eigentlich los, um zu überprüfen, ob es ein Fehler ist oder nicht, der Erwägung, dass in nur einem einfachen gleich-gleich, wäre es dann, wenn die Zeile leer war. Die Folge eines Ausfalls, wenn es eine Kollision zwischen Nutzernamen ist der eigentliche Wert false. Hier ist, wie würden Sie in eine Datenbank einzufügen. Hier ist die Abfrage, die Sie strikt laufen in SQL. Eine Sache ist, dass man tatsächlich auf die Website, die Ihre SQL-Datenbank verwaltet gehen und um dort zu spielen, indem Sie manuell entweder Werte oder Zeilen. Es wird ausgegeben, was die SQL ausgegeben wird. Sie können auch SQL-Befehle in Ihrer Datenbank  und dann sehen, was die Syntax sein könnte, und dann, dass in der Abfrage-Funktion, die wir in pset 7 haben zu übersetzen, was sein wird, sehr ähnlich zu den Abfragen, die Sie tatsächlich ausgeführt. Wenn ich wollte eine neue Zeile in meine Benutzer-Tabelle einfügen, dann würde ich insert into Benutzer angeben, das ist der Name meiner Tabelle. Dann würde ich angeben, die Spaltennamen. Dann würde ich die Werte zusammen mit meinem Passwort. Passwörter in unseren Benutzern Tabelle nicht einfach als String gespeichert. Sie gelten als die verschlüsselte Version gespeichert, so dass Sie wollen, um die Funktion crypt auf dem tatsächlichen Passwort laufen, und das wird Ihnen die richtige Art der Speicherung für die Nutzer Array. Wird dies wird eine neue Zeile in Ihre Benutzer-Tabelle einfügen. Um mit der Abfrage-Funktion umgehen, zuvor in C verwendeten wir das Prozent-Zeichen als Platzhalter. Ebenso gilt das gleiche Konzept der Platzhalter hier. Mit Abfrage geben Sie die gesamte Abfrage, außer wenn Sie mit Variablen zu tun als Eingang in die Abfrage, dann anstelle der tatsächlich setzen sie innen - wie wenn wir printf Aussagen hatten in C. Wir setzen würde den String und dann einen Platzhalter dort, und dann nach jeder Komma, angeben, welche Variable, die wir hatten. Hier werden wir das Fragezeichen Zeichen wie unsere Platzhalter verwenden und dann in jede Variable übergeben, bzw. in Ordnung, für die Platzhalter - wo diese Variablen gehen sollte. Also hier wäre der erste Fragezeichen durch den tatsächlichen Benutzernamen ersetzt werden dann die zweite Fragezeichen durch das Passwort. Dann endlich, sobald Sie ihnen registriert und fügte sie in die Datenbank, dann wollen sie in der Webseite anzumelden. Wir haben eine Art Super-globale Variable namens Sitzung. Session dauert eine gewisse id, und dass id entspricht der Benutzer, der derzeit angemeldet ist in. Was Sie tun möchten, ist zu finden, was ihre Benutzer-ID ist und dann, dass die Session-ID als dieser bestimmten Benutzer-ID eingestellt. Eine Funktion, die Sie wollen hier verwenden ist ein SQL-Befehl das wird die letzte eingefügte ID-Nummer aus Ihrer Tabelle abzurufen. Dann Zeilen nennen - it'll rufen Sie die ID - it'll einen Namen zuweisen die Zahl, dass es zurückgibt. Es rufe, dass id. Jetzt sind wir fertig sind, und registrieren können wir weitergehen zu zitieren. Quote ermöglicht es einem Benutzer zur Eingabe des Namens eines bestimmten Aktien-, und dann wird es wieder die Qualitäten dieser Lager. Was Sie wollen hier tun haben, ist eine Steuerung und einige Vorlagen. In diesem Fall werden wir eine Steuerung, die gehen, um alle das Denken für uns tun wird müssen. Es wird zum Nachschlagen auf das Symbol und dann in Werte an den Vorlagen, die drucken können. Wir werden 2 Vorlagen hier zu haben. Wir werden ein Template, in welcher Form die Benutzer gehen bietet über geben Sie den Namen der Aktie - der Name der Aktie. Dann werden wir auch eine andere Vorlage, die diese Werte zeigt wollen. Sie können in Login für ein Beispiel, wie Sie ein Formular, das Input akzeptiert haben zu suchen, Ausnahme hier, wir wollen nur ein Feld. Wir wollen nicht einen Benutzernamen und ein Passwort-Feld. Wir wollen nur ein Textfeld, das den Benutzer zur Eingabe des Namens eines bestimmten Aktien ermöglicht. Dann möchten Sie, dass die Daten zu senden - sobald Sie haben diesen Bestand sah - um quote_form.php. Lookup zurückkehren wird das Symbol einer Aktie, den Namen, und einen Preis. Diese werden in einem assoziativen Array enthalten sind. Suchen Sie die Lookup-Funktion in der functions.php für weitere Informationen auf den Return-Typen von denen. Great! So schließlich, Sie wollen, um den Bestand anzuzeigen. Sie wollen wahrscheinlich angezeigt - du wirst wollen, dass diese Variablen zugreifen. Sobald Sie den Preis in einer Variablen - sowie den Namen und das Symbol - dann werden Sie wollen, um die in Ihrer Vorlage anzuzeigen. Das Template-Seite könnte show_quote.php oder etwas aufgerufen werden. Ihre quote.php Seite machen würde zeigen, Zitat und übergeben Sie dann in all dieser Werte. Dann in Ihrem PHP-Seite, die Sie tatsächlich drucken diese Werte an die HTML Aspekt der Seite. Sie benutzen Sie einfach die Druckfunktion und übergeben den Preis. Es gibt 2 Möglichkeiten - Sie können entweder verketten es mit dem Punkt-Operator, oder verwenden Sie einen Platzhalter. Die Benutzer schließlich sein werden, den Kauf und Verkauf von Aktien. Wir wollen es ihnen ermöglichen, einen Weg zu sehen, alle Aktien, die sie derzeit haben. Wir gehen zu rufen, dass ihr Portfolio. Portfolio würde, vermutlich für jeden Benutzer enthalten eine Reihe von Zeilen Auflistung der Art der Aktien, die sie haben und dann, wie viele von denen, die sie haben. Unsere bestehenden Tisch - jetzt haben wir eine Tabelle users in unserer Datenbank. Das enthält den Benutzernamen eines Benutzers sowie deren Passwort und wie viel Geld sie haben. Es gibt keine wirkliche Möglichkeit der Speicherung all ihre Aktien innerhalb dieser. Es ist nicht wie wir neue Spalten für jede Aktie einfügen können. Das wäre eine sehr, sehr lange Reihe sein, weil wir eine unendliche Menge haben Arten von Aktien, die sie haben könnte. Also, statt, was wir tun in der gleichen Datenbank, wir haben eine Benutzer-Tabelle, aber dann müssen wir auch ein Portfolio Tisch. Das Portfolio-Tabelle wird auf jeden Fall auf die Benutzer-Tabelle verknüpft werden, sondern das Portfolio Tabellenstruktur haben die Lagerbestände, wie viele Aktien aus diesem Bestand der Benutzer hat, sowie eines bestimmten Benutzers ID-Nummer. Sie haben die Benutzer-Tabelle, die eine ID hat, wie auch den Benutzernamen, die Hash - das ist das Passwort, das verschlüsselte Passwort - und dann wird die Menge an Bargeld sie haben. Die ID-Nummer würde die ID-Nummer aus dem Portfolio verknüpft werden. Das Portfolio würde nur noch das Symbol der Aktien sowie der Aktien - die Anzahl der Aktien aus diesem Bestand, die der Benutzer hat. In diesem Portfolio Tabelle Sie haben grundsätzlich alle Aktien besessen von allen Benutzern auf Ihrer Website. Später müssen nur einen bestimmten Benutzer-Aktie - nur ihr Portfolio - Sie würden die Werte aus Ihrem Portfolio Tisch, so dass abzurufen die ID-Nummer ist spezifisch für diesen Benutzer. Wenn Sie das Portfolio anzuzeigen, sollten Sie jede der Aktien in einem Benutzer-Portfolio zu berichten. Sie wollen die Anzahl der Aktien und den aktuellen Wert dieser Aktien zu melden. Das aktuelle Wert dieser Aktien wird nicht im Portfolio gespeichert denn das geht zu aktualisieren - bei Minimum - jeden Tag von Yahoo. Um diese Informationen zu erhalten, können Sie nicht auf das von Ihrem SQL-Abfrage. Welche Funktion bietet uns das an? Welche Funktion erhalten, der Preis? Das ist Lookup, so wird mit Lookup auf einem bestimmten Symbol geben Ihnen eine Vielzahl von Informationen. Es gebe Ihnen 3 Stück von Informationen - den Namen, das Symbol sowie den Preis. Sobald Sie ein bestimmtes Symbol Lookup, dann können Sie den Preis, und dann können Sie den Preis in Ihrem Portfolio angezeigt werden. Das Portfolio sollte zeigen auch die Benutzer der aktuellen Cash-Balance. Das Feld wird in Ihrem Benutzer-Tabelle gespeichert. Also erinnern, wie wir im Grunde mit zu - wir mit verschiedenen Arten von PHP-Dateien. Wir werden eine Steuerung, die im Grunde tut all das Denken für Sie haben. Und dann haben wir eine Vorlage, in der die Vorlage befasst sich mit Ausgabe von Daten. Sie müssen von dem, was Variablen der Controller ergreifen müssen, in. denken Wenn wir mit einem Portfolio, das alle Namen, das Symbol und Aktien Anzahl Ausgänge zu tun haben, sowie aktuelle Kurs einer Aktie, dann werden Sie wollen, einen Weg zu Grunde übergibt finden - Sie können in einem Array von Werten, die passend zu passieren. Lassen Sie uns in einem Beispiel, wie Sie all die Bestände abrufen gehen Besitz von einem bestimmten Benutzer. Dies ist nicht zu tun - noch - mit dem Preis der Aktie. Was dies tun würde, ist eine Abfrage ausführen. Es wäre das Symbol als auch die Anteile von zu erhalten - Ich rufe diese Tabelle, aber in diesem Fall, was wäre es? Was ist der Name der Tabelle, dass wir mit diesem hat Symbol und Aktien Umgang für einen bestimmten Benutzer? Es ist entweder Benutzer oder Portfolio. Portfolio. Was dies tun würde, ist query Portfolio für die Symbole und Aktien für einen bestimmten Benutzer. Hier sage ich, (SELECT Symbol, Aktien FROM tbl - sondern der Tabelle, wirst du das mit Portfolio zu ersetzen. 'Wo' ist im Grunde mein Zustand. Ich sage, ich will nur diese assoziative Arrays, entsprechen sich  dieser folgende Bedingung - id entspricht.  Dann kann ich einen Platzhalter dort und dann Session-ID. Was dies tun würde, ist für jede Zeile in Reihen sagen. Dies ist eine nette Art und Weise, anstatt wirklich mit zur Einrichtung einer for-Schleife das iteriert über alle Indizes, dann in PHP können Sie eine for-each-Schleife haben. Wenn Sie eine bestimmte Array haben, dann können Sie sagen, ich werde jede nachfolgende Element nennen - Ich werde rufen jedes Element dieser Name. Also, für jedes dieser Elemente, werde ich sie nennen dies dann kann ich dies tun. In diesem für jeden, müssen Sie Zeilen wie Ihre aktuelle Array, und jede Zeile wirst du Zeilen nennen sind. Jedes Mal, wenn er ausführt, den Körper, es geht und es wird Zeile auf das nächste Element in Reihen zu aktualisieren. Nun, in Bezug auf den Kauf von Aktien, was wir wollen, ist sich die Aktie, die der Benutzer kaufen will und die Anzahl der Aktien, die der Benutzer kaufen will, und dann - wenn sie wollen - fügen diesen Bestand zu ihrem Portfolio. Offensichtlich, wenn sie etwas kaufen wollen, dann, dass geht zu verringern die Menge an Geld, das sie haben, so, das wird ihr Geld abnehmen. Wir werden mit der Aktualisierung des Portfolios sowie die Benutzer-Tabelle zu tun, die enthält das Bargeld. Aber zuerst müssen Sie den aktuellen Bestand und Höhe der Aktien, die der Benutzer haben will. Dafür benötigen Sie ein HTML-Formular, das Symbol der Aktie fragen wird dass Sie so gut wie kaufen die Anzahl der Aktien wollen. Dann werden Sie hinzufügen möchten. Sie wollen bestimmte Werte auswählen. Wir haben durch diese ein wenig schon gegangen, aber wenn Sie versuchen, bestimmte Zeilen zu erhalten - Abrufen bestimmte Zeilen aus der SQL-Tabelle, dies ist die folgende Syntax. Sie haben zu wählen, und dann, wenn Sie einen Stern geben, das wird im Grunde wieder die ganze, ganze Zeile für Sie. Dann wieder, haben Sie die Bedingung, und dann geben Sie - Ich will nur den Benutzernamen, um gleich mail-in, so wird es nur abzurufen die Zeile in Benutzer, die Mail-In entspricht. Wenn ein Benutzer will eine Aktie zu einem Portfolio hinzufügen Sie brauchen, um für ein paar Fehler zu überprüfen. Sie wollen sicherstellen, dass der Benutzer sich tatsächlich leisten die Lager, so dass Sie wollen, um ihr Geld zu überprüfen. Früher haben wir Sterne, um eine ganze Zeile aus einer SQL-Tabelle abzurufen. Aber hier können wir eigentlich nur angeben, dass ich nur 1 Wert - Ich will nur Bargeld. Also hier wäre es das Geld für den Benutzer mit ID-Nummer 1 zurückzukehren. Wenn ein Benutzer bereits eine bestimmte Aktie gekauft, aber dann kauft mehr von diesem Lager, dann in Ihr Portfolio - Sie wollen nicht eine separate Zeile, eine andere Zeile, dass die neue Transaktion enthält. Sie wirklich wollen, um die Menge zu aktualisieren. All das verändert wirklich ist die Menge der Aktien, die dieser Benutzer besitzt. Wenn Sie die INSERT INTO-Abfrage verwenden - so ist es einfach in Ihr Portfolio legen alle diese Werte - Die Benutzer-ID-Nummer sowie das Symbol der Aktien, die sie kaufen und die Aktien, dann werden Sie wollen auch angeben, auch, wenn ich in einen doppelten Schlüssel laufen - in diesem Fall ist die doppelte Schlüssel nicht nur die Benutzer-ID, sondern auch das Börsenkürzel - weil man nur haben kann - unsere Prämisse ist, dass man nur 1 Zeile  das entspricht 1 spezifisches Symbol. Also, auf der doppelten Schlüssel - wenn Sie laufen in einer Kollision gibt - Sie gerade gehen, um Aktien auf den neuen Wert zu aktualisieren. Aktien entspricht, was wir vorher plus der Anzahl der Aktien, die der Benutzer kauft hatte. Nun, da wir das Portfolio-Tabelle aktualisiert, wir wollen die Benutzer-Cash zu aktualisieren. Das ist in der Tabelle users, so werden wir sein Subtrahieren einer bestimmten Menge von Bargeld. Vermutlich, es wird sein Geld gleich bar, abzüglich - und dann eine bestimmte Menge. Um das Geld zu aktualisieren, würden Sie - wenn ich zum Mitnehmen Geld von Mail-in wollte, dann würde ich diese Abfrage ausführen - 'Update Anwender und dann das Geld Spalte zur Cash - Ich würde zu entfernen 9.999 Dollar nur, wenn der Benutzername gleich mail-in. Aber in diesem Fall wollen wir nicht zu subtrahieren 9.999 speziell. Wir wollen festlegen, na ja, wollen wir den aktuellen Kurs der Aktie abgezogen multipliziert mit der Anzahl der Aktien, die sie kaufen. Jetzt haben wir ihnen erlaubt, alle Aktien, die sie sehen, sowie mehr kaufen Aktien. Wir haben auch vorher konnten sie auch den aktuellen Kurs einer Aktie. Hier möchten wir ihnen erlauben, sie zu verkaufen. Zuerst wollen wir grundsätzlich angezeigt - wollen wir es ihnen ermöglichen, alle Aktien, die sie sehen, so hier wollen wir alle Zeilen aus dem Portfolio anzuzeigen. Wenn sie wählen, um eine bestimmte Aktie zu verkaufen, dann sind wir davon ausgehen, dass sie alle von ihm verkaufen wollen. Sie sind nicht einfach so zu 50% ihrer Aktien zu verkaufen, sie werden zu 100% zu verkaufen. Wir können einfach löschen die gesamte Zeile aus dem Portfolio. Wir löschen mit dem Benutzerprofil des Aktien der bestimmten Symbol. Es ist die Syntax dafür. Dann wollen wir das Bargeld zu aktualisieren. Wir werden in den Barbetrag werden indem die Anzahl der Aktien, die sie verkaufen multipliziert mit dem aktuellen Kurs der Aktie - nicht der Preis, zu dem sie es gekauft, sondern der Preis, zu dem sie sich - der aktuelle Preis, wenn sie verkaufen. Um den aktuellen Kurs einer Aktie verweisen, Sie wollen Lookup verwenden, welches Ihnen den Kurs einer Aktie zu der aktuellen Zeit. Jetzt sind wir mit der Geschichte hinterlassen, die Sie möchten, dass ein Benutzer den Überblick über alle ihre Transaktionen zu halten - sehen will, wann immer sie etwas, wenn sie eine Aktie gekauft verkauft. Wir wollen den Zeitpunkt, an dem sie das täten, und wie viele sie haben geben und was hat es war. Haben wir keinen Strom, bestehende Struktur, die angibt,? Nun, wir haben Portfolio, das die Anzahl Aktien, die ein Benutzer zeigt für eine bestimmte Aktie. Aber wir strukturieren Portfolio in der Weise, dass sie aktualisiert, wenn wir mehrere kaufen, während der Geschichte sollte - wenn Sie kaufen Apple, 10 Aktien, und dann später auf sell 5, dann würden Sie wollen, um diese separat zu sehen, wie verschiedene Aktionen, separate Zeilen. Diese Aktion der in unserem Portfolio Tabelle visualisieren würde nur ein Update auf die jeweilige Zeile,  so dass wir wahrscheinlich zu einer anderen Tabelle wollen. In unserer Datenbank haben wir unsere Benutzer-Tabelle haben, haben wir unser Portfolio Tisch, und jetzt werden wir wahrscheinlich einen History-Tabelle. Diese Geschichte Tabelle verfolgen das aktuelle Datum, sowie die besondere Börsenkürzel sowie wie viele Aktien, und dann, welche Maßnahmen sie ist - ob Sie kauften diese Aktien oder ob Sie wurden zu verkaufen. Um mit Datum umgehen, gibt es ein paar Möglichkeiten, wie Sie dies tun können. PHP hat eine Art Verfolgung von Datum, das man nachschlagen kann selber. In SQL können Sie auch entweder jetzt oder aktuellen Zeitstempel. Das ist bis zu Ihnen. So stellen Sie sicher, dass jedes Mal ein Benutzer kauft oder verkauft, werden Sie die Aktualisierung ihrer Cash in der Tabelle users, werden Sie die Aktualisierung der Zeilen in der Portfolios Tisch, dann wirst du auch die Aktualisierung der Geschichte so gibt es werde 3 separate SQL-Abfragen, die Sie dort finden ruft sein. Wir haben eine Reihe von Funktionen jetzt. Nur ein paar Erinnerungen, die in Ihrem Index-Datei, wollen, dass Sie zumindest Ihre verknüpfen werde - aber Sie wollen, dass ein Benutzer auf die kaufen.php Seite verlinken. Das wird, dass ein Benutzer - kaufen.php die Steuerung, so dass das, entweder gehen Senden Sie - das wird Sie zu dem Formular, das Sie die Dinge schauen können senden. Wir haben Geschichte. Wir haben abzumelden, bekommen ein Angebot und dann verkaufen. Das sind bei minimaler, was Sie zeigen wollen. In Bezug auf das Portfolio wird das Portfolio tatsächlich in der Index-Seite angezeigt. Wenn wir zum Index, hier sehen wir, dass es portfolio.php macht und übergibt den assoziatives Array - im Grunde der Titel entspricht Portfolio. Dies ist also die Steuerung. Wenn wir gehen, um der Vorlage portfolio.php, dann werden alle es hat, ist - zeigt im Grunde ein Bild, das, sagt oh, diese Seite im Bau ist. Später, wenn Sie in Pass - du wirst in grundsätzlich genauere Informationen werden vorbei. Anstatt nur den Titel, werden Sie wahrscheinlich in mehr Dinge werden vorbei. Sobald Sie diese Werte haben, dann portfolio.php kann mit diesen Werten umgehen und drucken in jeder Art von Ordnung. Nachdem Sie all jene umgesetzt, müssen Sie auch ein weiteres Feature zu implementieren. Dies kann entweder einem Benutzer erlaubt, sein Passwort zu ändern, ihr Passwort zurücksetzen, wenn sie es vergessen haben - so für den Passwort-Reset, dann Sie werden wahrscheinlich auch registrieren möchten so bearbeiten, dass es ihnen eine E-Mail angeben können, so dass, wenn sie ihr Passwort vergessen haben, dann können sie bekommen, dass. Sie können wahrscheinlich in ihren Benutzernamen eingeben und dann eine E-Mail an sie geschickt werden mit einem Link zu der Lage sein, ihr Passwort zurücksetzen. Sie können etwas, das Benutzer Einnahmen erhalten können jedes Mal, wenn sie kaufen oder verkaufen etwas, und schließlich, damit sie Geld, um ihre Website hinzuzufügen. Nur um zurück in das Konzept von Controllern und Vorlagen ein wenig. Sie haben so etwas wie eine - so Sie einen Controller hier haben werde. Gerade jetzt, sind wir in der login.php Beispiel suchen. Wenn wir einen Controller verfügen, im Grunde, es wird in 2 Fällen zu nehmen. Wenn wir Controller verfügen, sind wir in diesem Stück, dass wir auch sind irgendwie Umgang mit wenn wir Formen. Der Regler wird grundsätzlich getrennte Aktionen - ein, wenn ein Formular wurde bereits eingereicht, und dann zwei, wenn der Benutzer auf diese Seite kommen für die erste Zeit und muss noch, dass Eingangs Form. Ich werde in diesem Fall zuerst zu springen, bevor sie bis zum ersten Fall mit der Form in. Hier sagen wir, wenn das Formular mit der Methode Post eingereicht - weiß nicht so ein bisschen Sorgen. Machen Sie sich keine allzu großen Sorgen machen, aber verstehen, dass im Grunde diese Funktion mit befasst ob ein Formular abgeschickt wurde oder nicht. Diese Bedingung ist wahr, wenn ein Benutzer das Formular ausgefüllt hat. Wenn nicht, dann werden wir gehen zu wollen, render login_form.php nennen, und dann in den Titel passieren. Dieser Titel wird im Grunde nur los in der Kopfzeile angezeigt. Was dies bedeutet ist im Grunde sagt, okay - gut, wenn ein Benutzer auf login.php und hat nicht wirklich eingeloggt, dann will ich sie an der Seite, die diese Form hat senden die ihnen erlaubt die Eingabe des Benutzernamens und des Passworts. Dann gehe ich zu login_form, und dann das hat die tatsächliche Form. Dann, wenn der Benutzer diese Formular abschickt, sie werde es login.php einreichen mit der Methode Post. Dann bin ich eigentlich los, um diesen Abschnitt meiner if-else-Schleife geben. Dann ist es hier, dass wir mit den Werten in das Formular eingegeben umzugehen. Es ist hier, dass wir mit denen umgehen. Dann, wenn Sie mit diesen Werten umgehen - wenn Sie es zu tun haben - sagen, dass wir mit dem quote.php Seite, wo jemand eingeben kann eine Aktie, dass der Umgang sie wollen zu schauen, und dann sehen, dass Anzeige - Das ist irgendwie ähnlich sind. Hier haben wir ein Login-Formular - you'd wahrscheinlich ein Angebot Form - aber dann, sobald der Benutzer tatsächlich, dass Informationen übermittelt wurden, dann werden Sie wollen die Steuerung in ein anderes Template übergeben das wird ihnen zeigen, dass aktuelle Informationen. So dann rechts hier in der Gegend, dann werden Sie wahrscheinlich - um das Ende Ihrer Erkrankung hier - die, wenn die Methode equals post - dann werden Sie wahrscheinlich wollen, um eine andere Seite zu machen - die Show Zitat - Dieser sendet Sie zu dieser Seite - show_quote.php-- und dann in dieser Datei wird verweisen diese Werte. Macht das Sinn? Wir haben eine Steuerung, die im Grunde befasst sich mit den 2 Fällen - egal ob Sie ein Formular oder nicht eingegeben. Wenn Sie noch kein Formular eingegeben, dann wird es Sie dieses Formular umleiten, die dann setzen Sie zurück zu dieser Seite. Dann, sobald Sie in der Steuerung haben, dass der Körper damit umgehen Informationen wie nötig - entweder Nachschlagen von Werten für die Aktie, und dann, sobald es sah diese Werte und hat sie in einem schön formatierte Array dann kann das Array in die Vorlage Seite übergeben  dass Angebote mit der Ausgabe dieser Informationen. Wieder, da es Web, es wird Spaß machen. Wir sind außerhalb des C, so dass wir nicht auf dem ASCII-und dem Terminal-Ausgabe beschränkt sind, Also viel Spaß mit diesem. Sie können es als visuelle wie Sie wollen. Sie können Benutzer zur Eingabe von Millionen von Dollar zu ermöglichen in einer Zeit, oder zu begrenzen und wirklich und es ihnen nur um 1 Cent zu einer Zeit geben oder so ähnlich. Definitiv sicher sein, um Spaß damit haben. PHP-Code ist ein bisschen einfacher, dass es ein bisschen leichter zu kartieren Ihre Pseudocode in der tatsächlichen Umsetzung. Also, auf jeden Fall viel Spaß mit diesem, weil es tatsächlich ist unser letztes Stück in CS50. Damit war dieser Walkthrough 7. Sobald Sie fertig sind gerade die Komplettlösung und beendete Ihren pset, Damals waren diese auch pset, und jetzt sind wir auf dem Endprodukt - nachdem wir durch quiz 1. Dann hoffentlich können Sie die Tools, die Sie aus den pset gelernt habe - nicht nur die Syntax, sondern die abstrakte Vorstellung davon, wie eine bestimmte nehmen - gerne möchte ich diese und dann die tatsächliche Umsetzung zu tun. Lernen, wie man über die Syntax und den Vertrieb Code zu kämpfen. Lesen anderer Leute, und dann die Interpretation, dass die Verwendung bereits vorhandenen Funktionen. Also, viel Glück mit dem letzten pset. Es war ein Vergnügen, die Komplettlösungen führen. Ich hoffe, sie waren hilfreich für Sie. Dies waren Walkthroughs und vielen Dank. [CS50.TV]