[Powered by Google Translate] [ウォークスルーの問題セット7] [Zamylaチャン] [ハーバード大学] [これはCS50です] [CS50.TV] みなさん、こんにちは、そしてチュートリアル7、CS50ファイナンスへようこそ。 今我々は正式に、CS50でのpsetのすべてで行われて そして我々はちょうど楽しみの実装であることを行っているもう一つが残っている ユーザーはCS50ファイナンスにログインすることができ、ウェブサイトの や株式を売買する。 今日、私達は私達の処分で、いくつかのツールを持っているとしている。 私たちは、権限の話をすることになるだろう。 あなたは、Webフォルダがあるとき、 ユーザーが特定のファイルを実行できるようにするつもりだ だけでなく、ただ、他のものを読んで ので、我々は権限に見ていきますと、あなたはそれらを設定する方法について説明します。 その後、我々は、PHP、HTML、およびSQLコードに見ていくつもりです。 まず、パーミッション。 あなたが特定のディレクトリ内に端末にいるとき、 次にあなたが何をしたいあなたは、chmodコマンドを実行したいです。 文字または数字のいずれかが続くだ あなたは基本的に世界が見たいものに対応し、 あなたに会うと自分など たとえば、フォルダを持っているときはいつでも、 次にそのフォルダが、それを見て誰もが実行できるようにしたい そう、何をするだろうすると、コマンドはchmod + xを実行する可能性がある してから、フォルダの名前です。 あなたは、このようなCSSファイルや画像ファイルなどのファイルを持っている場合 - - JPEGやビットマップ、そのようなこと、または任意のJavaScriptコードのような あなたは、誰もが読めるようにすることを望む それでは、あなたが何をするか、ワイルドカードを使用することができます - これはアスタリスクです - そのフォルダ内のすべてのもの - - 基本的にはCSSのフォルダ内に示す  私はそれがすべての人が読めるようになるだろうと言うつもりです。 権限を持つ、我々は文字を使用する場合、 我々はまた、代わりに番号を使用することができます。 だから、あなたは最終的にあなたが実行可能であるために何かをしたいときがわかり - - 番号1で表されるということ 読み出しを可能にするには何かが数字の4、その後です - 書き込みは数2である - ので、本質的にはそれらの組み合わせをしたい場合、あなたはそれらを追加します。 あなたは、読み込み、書き込み、実行可能であるために何かをしたい場合は、 その後、あなたは4、2、1を追加することになり、それはあなたに7を与えるだろう その後、あなたが誰でも実行できるようにすることを目的のフォルダがあるとき - 同様に読み書き可能 - 次にその7、1、1を加える。 それはその後、他の人のための1あなたのための7となります。 あなたがスペックを持っている場合、実際には、どのフォルダを指定して、どのファイルがあります 具体的にします。chmod-EDにする必要があります。 例えば、あなたがフォルダを持っているとき - それらは7-1-1です - あなたは、画像、または、HTML、CSS、JavaScriptを、持っているとき または6、4、4 - それらは、6、0、4になるだろうしている - その後PHPファイルは、6、0、0になるだろうしている。 背後にある考え方は、ユーザーが実際にあなたのPHPコードを見てはいけないということです、 しかし単に出力を見ることができ。 すばらしい! PHPに移動。 単に、あなたがPHPファイルを必要なときに、ファイルの拡張子は。phpの。 また、PHPのコードとHTMLを混在させることができます。 例えば、あなたがHTMLファイルがある場合 その後、左の角には、疑問符は、phpとそれを囲むことができます - あなたのPHPコードを入れる - そして、もう一つの疑問符と直角であることを閉じます。 PHPでは変数は、C言語の変数より対処する方がずっと楽アール すべての変数はそれの前にドル記号で始まり、それらが弱く型付けしている。 それはあなたが何かを設定することを心配する必要がないことを意味します 文字列または整数に等しい。 あなたはただ単に言うことができる、これは変数の私の名前です そして、これは、その値である ので、そこに対処しやすくなるだろう。 もう一つは、PHPは連想配列を使用することができるということです。 あなたはただ単にあなたがC言語の場合と似た配列を定義することができます あなたのサイン名配列と等しいドル、言って、 その後角括弧内は、基本的には、配列内のすべての要素の値のリストだけを持っています。 しかし、PHPで何も出来ることは基本的に指定されている - それは、ハッシュ関数のような種類の一つだ。 あなたは、インデックスを指定することができます - あなたがそれを呼び出すうとしているもの - そして、その値に対応する。 あなたは実際に、B = 2、C = 3、a = 1を渡した場合 その後、インデックスであなたの配列を使用すると、1を与えるだろう。 このpsetには、質問の部分でいくつかのPHPであなたを暖めます それから私達はCS50ファイナンスに飛び込む。 私達はのカップルを持っている - 私たちは、基本的には、いくつかの機能を持っている、 このウェブサイトで実装します。 我々は、ユーザーがユーザー名とパスワードを使用して私達のウェブサイトに登録できるようにしたい。 我々は、彼らが引用符をルックアップするようにしたい それから私達はその引用の名前だけでなく、それが時だと、現在の価格をプリントアウトするだろう。 我々は、彼らがこれまでに購入した株式の全部のポートフォリオを参照できるようにしたい。 我々はまた、彼らは株を買うだけでなく、それらを販売することを許可する。 そして最後に、我々は彼らの履歴を参照できるようにしたい 彼らが作ってきたすべてのトランザクションの。 そして、最後に、あなたはそれのすべてを実装した後、 それから1つの余分な機能を実装することは自由です。 我々は、それらに行くつもりです。 これらは、ユーザーが余分な現金を堆積させることによって、余分な現金を得るのを許容することができるか、 またはあなたは、彼らが自分のパスワード、またはそのような何かを変更する可能性があります 彼らが株式を売買領収書を電子メールで送信します。 あなたは自分自身を実装できる機能の制限されたリストは、あります そう、そこは最後の一つだ。 これはウェブサイトですので、皆さんもそれを自由にカスタマイズする事がたくさんある。 、我々はいくつかのCSSコードを提供していますか、あなたは間違いなくそれを微調整することは自由です それは見た目が良くなりますが、それの基礎となる基本的な機能である ので、常にあなたが実際にそこに含まれるように必要なものについて仕様を参照してください。 スペックに続いて、我々はサーバーとしてもアプライアンスを使用することになるだろう。 それはローカルサーバー上で、私たちのために私達のウェブサイトをホストすることになるだろう。 あなたは、これらの指示に従ってくださいとPSET 7流通コードを解凍した場合 あなたの仮想ホスト/ローカルホストのフォルダに、  あなただけの、アプライアンスでGoogle Chromeでhttp://localhost/を訪問することができます その後、あなたはPSET 7を書いたするコードに達するだろう。 PSET 7は、流通コードの束が付属しています うまくいけば、we've - この前のpsetのすべてを通して - ディストリビューションのコードを通して読むことに慣れている私たちを、 機能がすでに提供しているかを理解して、そして我々は使用することができるかもしれない方法 それらと我々が実装されようとしていることを他の機能。 この場合において、我々は3フォルダーがあります。 私たちは、HTMLフォルダ、フォルダが含まれており、テンプレートフォルダを持っています。 我々はこのPSETでやってことになるだろうと思考を分離の一種である - プログラミングの考え方 - 実際の視覚的な側面を持つPHPコード。 我々は、思考のすべてを行いつのPHPファイルを持っているデータベースに読み込みます 物事をプリントアウトし、if文を持っています - そのようなもの - やtemplate.php - そして、それは我々のテンプレート·ファイルにデータを渡します。 何をするかは、データを読み取られ、それをプリントアウトします。 我々は、我々が実際にそれらをしたくないという点で、 "ダム"としてテンプレートを扱うことができます 物事を計算する際に多くの作業を行うことができる。 私たちは、コントローラがそれをやってみたい。 少し上の - のは、ディストリビューションのコードの一部を見てみましょう。 ここに私達は私達のindex.htmlファイルを持っている、それはかなり空です。 本質的にそれが何をするか - それは言う、まあ、私はconfiguration.phpファイルを必要とするつもりです。 、我々はすぐそこにあることを見ることはありませんが、それは基本的にconfiguration.phpファイルを呼び出している とすることを実行する。 それはそれをした後、それはポートフォリオをレンダリングするために起こっている。 レンダリングとは、我々がコントローラにいるときはいつでも、関数である 我々はレンダリングと呼ぶことにします、我々はそれをファイルを与えるでしょうし、我々はで渡しているデータ、 そのポートフォリオはそれに対処できるように、そのデータを渡すのportfolio.phpオンリーで呼ぶことにしますように。 そして今、ここで、我々は考えられる理由フォームを持っています。  これは、基本的にインチロギングの世話をするコントローラである フォームがサブミットの検証を使用してこのファイルやお得な情報に提出された場合、ここでは、それはチェックします。 我々は、この謝罪する機能に見ていきます。 我々は、エラーメッセージを出力したい場合は、 我々は謝罪を使用して、その特定のページにユーザーをリダイレクトします それは我々が示していることを具体的なエラーメッセージを出力します。 に引き続き、データベースにクエリを送信します - we'llは後で、より入る。 その後、フォームが送信されなかった場合はここでダウン、それがフォームをレンダリングすることがわかります。 それはlogin_form.phpに行くことを意味し、その結果を見てみましょう。 我々は実際の視覚的な側面を持つHTML取引を参照してくださいどこに考えられる理由は、実際には。 ここでは、ユーザー名の入力タグは、パスワードの入力を持っている 同様にsubmitボタンとして。 視覚的な側面とHTMLフォームが開催されようとしている場所、それは実際にあります。 ここでは、それがポストと呼ばれる特定の方法により提出することになるだろうと述べている。 我々は方法の違いに買ってあげる - 投稿に対してGET、PUTと呼ばれるものもあります - 我々は、後でそれらのメソッドに入るが、このpsetの利益のためによ 私は非常には、ポストを使用することを勧めます。 私たちは基本的に一度このフォームが送信されることを知っている - からlogin_form.php- - それはアクションに行きます - 。へ戻る- - 基本的に考えられる理由にそれらのフォームからのすべてのそれらのパラメータを渡します。 そのフォームからの結果は、この後の連想配列内に含まれています。 ポスト·アレイ内の異なる要素のインデックス ここで指定するかを正確にされています。 この入力の名前がユーザ名であると言う。この1つの名前がパスワードです。 同様に、あなたはそこに連想配列のインデックスとしてユーザ名を参照してください。 我々は含まれていたフォルダに移動した場合、我々は非常に有用であることを行っているこの関数のファイルがあります。 これらの機能はすべて実装されます。 あなたは、具体的には、これらを自分のいずれかを実装する必要はありません しかし、彼らは非常に便利になるだろう。 我々は、私が前に言ったように、基本的にエラーメッセージが出力されている、謝罪しました apology.php - 特定のページのあなたのために。 その後、我々は、あなただけのダンプを呼び出すそうだとすれば、ダンプを持っているし、変数を渡す それはあなたのために、その変数を表示するページが開きます。 その後、我々は基本的に特定のユーザーのセッションを終わるか、ログアウトしています。 ルックアップは便利になるだろう。 我々は、引用符や株式を扱っているので、我々はできるようにするつもりだ - そして、それは本質的にはリアルタイムです。 我々は、これらの株式価値が何であるかを知っておく必要があり、 ので、我々は株式のYahooのドキュメントを扱うルックアップ機能を持っています。 あなたが一定の株式のシンボルを検索したら、それはあなたの銘柄記号に戻ります 同様に名前と、その株式の現在の価格として。 ことは、ルックアップ関数です。 その後、我々は、MySQLを扱っている だから我々はSQLデータベースに特定のクエリを実行したいということになるだろう。 我々は対処するクエリがある - そのうちのいくつかの抽象の種類に。 私たちは、SQLクエリの全体の文字列を渡すことになるだろう - そしてそれに行くすべての変数 - そしてこれは何、実際には私たちのためにそれを実行することです。 代わりに照会したいたびにアウトこれのすべてを記述しなければならない - そのクエリーの結果のすべてを取得することで - 次に、あなただけのクエリ関数を呼び出すことができ、そしてそれはあなたに戻ります - あなたのクエリに使用しているものに応じて - おそらく、クエリまたは類似と一致する結果のすべての行。 それについては後述しますが。 最後に、我々はその名が示すように、別のページにリダイレクトされ、リダイレクトされています。 そして、我々は、我々は数回呼び出すことになるだろうレンダリングを持っています。 あなたはコントローラにいるときには、テンプレートのページにレンダリング呼び出す その後テンプレートがその後に対処する値を渡します。 これらの値は、おそらくあなたがしたい出力のタイプを扱うことにしようとしている テンプレートのページに表示されます。 オーケー。それらは関数であり、このディストリビューション·コードにもっとたくさんあり​​ます。 私はあなたがこれを通過し、それを自分で探索することをお勧めします。 また、仕様はおそらく流通コードのいくつかの他の要素を見ていきます。 ここのfunctions.phpで見つかる機能の概要です。 オーケー。最初のタスクは、ユーザーがウェブサイトに登録できるようにすることです。 現時点では、ウェブサイト上のログインフォームは、があります 、あなたがパスワードを持つ少数のユーザーに提供されています。 あなたは、それらのユーザー名を使用してログインできます しかし、あなたは人々が自分のユーザー名を作成することを許可する とウェブサイトに自分自身を追加します。 登録のためのレイアウトは、ログインフォームにかなり似ていますが、 ユーザ名は、既存のではない場合を除き、 そしてまた、ユーザーは、新しいパスワードを提供する必要があります その後、我々は一般的にパスワードの確認を持っています。 一度ユーザが入力する情報のすべて、 我々は、ユーザーの私達のデータベースに追加したいと考えています。 SQLデータベース - 我々は、データベースを持っているつもりです - 我々は、参照しようとしている。 そのデータベースでは、すべてのユーザーを持つテ​​ーブルがあるでしょう 自分のユーザー名、そのパスワード、また、どのくらいの現金は持っているが含まれている。 レジスタでは、我々は彼らがその情報を入力できるようにしたい。 我々は、フォームを表示したい。 我々は、自分のパスワードを確認したい - ことを彼らは2回入力したときに、パスワードが一致していることも、1つに入った、と。 すべてのことをした後に行われます - これらのエラーがチェックされていることを仮定して - それから私達は私達のデータベースにそれらのユーザーを追加したい。 ご登録を行った後で、再度ログインする必要がない場合は、最後に、それはかなり便利だ 一度、登録した ので、我々は彼らが正常に登録されている場合のウェブサイトにログインしようとしている。 最初のタスクは、フォームを表示することであり、これは実際にあることを行っている - この全体の登録プロセスは、ログイン後にかなり密接にモデル化されようとしている 代わりに考えられる理由を除いては、register.phpがあるかもしれません。 代わりにlogin_form.php-そのうちテンプレートです - あなたは、フォームを登録する必要があります。 パスワード確認フィールド - あなたはもう一つのフィールドを追加したいと思う - 1つだけでなく、ユーザ名とパスワードの1。 次に、我々は、パスワードが一致するか、空白かどうかを確認したいと思います。 これらのチェックを行うの世話をするために起こっているregister.php- - 私たちは、コントローラーを持っている。 フォームがPOSTメソッドで送信されると、 その後、それらのすべての変数がポスト配列内に含まれています。 あなたは、インデックスパスワードでポスト配列の値ことを確認したい 確認の要素と一致します。 あなたは、彼らが空白でないことを確認したい そしてあなたは彼らが同じだということを確認する必要があります。 PHPに関する一つの便利なところは、もはや比較する文字列を使用する必要がないことです。 我々は等しく、等しい演算子を使用できます  文字列が互いに同等であるかどうかをチェックします。 エラー処理のために、あなたは謝罪したいと思う。 謝罪するには、単に関数を呼び出す  してから、出力したいメッセージのタイプを指定します。 その後、データベースにユーザを追加したいと思います。 今まで、我々が行ってきたすべてがちょうどフォームの結果を使用してローカルに扱っている。 今、私たちは、実際に私たちのデータベースに追加したいと思います。 このため、我々は最初のユーザ名が空白でないことを確認したい。 ウェブサイト上では、同じユーザー名を持つ複数のユーザーを持つことができないことを理解し、 ので、あなたはあなたのデータベースに何かを挿入したときにあることを確認したいと思う - 新しいユーザを追加 - その後は、既存のユーザ名との衝突を得ることはありません そしてユーザーが送信しようとしているユーザ名。 このため、一度クエリを実行 - 個人のパスワードとキャッシュの初期量を持つ特定のユーザを挿入する - それが失敗した場合、一度そのクエリを呼び出す場合、mysqlは実際にはfalseを返します。 ユーザーの構造は、ユーザ名は一意の値であるようなものである ので、複数を持つことはできません。 あなたがしようとするとすでに存在するユーザー名で新しい行を挿入すると、 ブール値がfalseのように - それはfalseを返すようになるだろう。 ここでトリッキーなことは、結果は、クエリの結果であるかどうかをチェックしたいと思うということです。 それが失敗した場合は、三重イコール演算子を使用して確認するとよいでしょう。 実際に故障かどうかは、そこにあるかどうかを確認するつもりだ 単なる内のequals-等しく、一方行が空であった場合、それは本当だろう。 ユーザ名の間に衝突があった場合の失敗の結果 実際の偽の値である。 ここでは、データベースに挿入する方法である。 ここでは、SQLで厳密に実行するクエリです。 一つのことは、あなたが実際にあなたのSQLデータベースを管理するウェブサイトに行くことができるということです 手動で値または行のいずれかを入力して、そこに遊んでみましょう。 これは、SQL出力が何であるかを出力します。 また、データベース内のSQLコマンドを実行することができます  その後、構文が何であるかを参照してください その後、我々はPSET 7に持っているquery関数に変換 それはあなたが実際に実行したクエリと非常によく似ているために起こっている。 私はusersテーブルに新しい行を挿入したい場合は、 その後、私はテーブルの名前ですユーザ、INSERT INTOを指定することになります。 それから私は、列名を指定することになります。 それから私は自分のパスワードと一緒に値を提供するであろう。 私たちのユーザテーブル内のパスワードは単なる文字列として格納されません。 彼らは、暗号化されたバージョンとして保存されている ので、実際のパスワードに関数cryptを実行したいと思う それはあなたのユーザアレイ用のストレージの正しい型を与える。 これを実行すると、usersテーブルに新しい行を挿入します。 クエリ機能に対処するために、 Cの前に我々は、プレースホルダとしてパーセント記号を使用していました。 同様に、プレースホルダの同じ概念はここに適用されます。 クエリを使用すると、クエリ全体を指定 クエリに入力変数として扱っているたびに、を除いて、 その後、代わりに実際に内部に置くこと - 私たちは、C言語でprintf文を持っていたときのように 私たちは、それぞれの後に、文字列を配置し、そこにプレースホルダーを持っているでしょう、そして、 カンマは、私たちが持っていた変数を指定します。 ここでは、私たちのプレースホルダとして疑問符記号を使用するつもりだ その後のプレースホルダを、順番にそれぞれ、各変数を渡す - どこでこれらの変数は行く必要があります。 そこでここでは、最初の疑問符は、実際のユーザ名に置き換えられます パスワードによる次に2番目の疑問符。 そして最後に、一度あなたがそれらを登録し、それをデータベースに追加しました その後、あなたがウェブサイトにそれらを記録したい。 我々は、スーパーグローバル変数と呼ばれるセッションの種類を持っている。 セッションは、特定のIDを取得 そのidは、現在ログインしているユーザに対応 自分のユーザーIDとは何かを見つけることですあなたがやりたいよ何 その後、その特定のユーザのIDと、そのセッションIDを設定します。 ここで使用したくなる関数はSQLコマンドです それはあなたのテーブルから最後に挿入されたID番号を取得します。 その後、行が呼び出します - it'llがidを呼び出す - it'llが返す番号に名前を割り当てます。 それは、そのidを呼ぶことにします。 今、私たちは、登録が完了してきたが、我々は、引用することで移動することができます。 引用は、ユーザーが特定の株式の名前を入力することができます そしてそれはその株式の資質を返しています。 ここでの操作したいと思うことは、コントローラといくつかのテンプレートを持っていることです。 この場合、私たちは私たちのための思考のすべてをやろうとすると、コントローラを持っているつもりです。 これは、シンボルをルックアップし、プリントアウトしますテンプレートに値を渡すことになるだろう。 私たちはここで2のテンプレートを持っているつもりです。 我々は、ユーザーがに行くされているフォームが用意されています1テンプレートを持っているつもりです 株式の入力名 - 共有の名前。 その後、我々はまた、それらの値を表示し、別のテンプレートをするつもりだ。 あなたが入力を受け付けるフォームを持っているであろう方法の例については、ログインに見ることができ、 ここ以外では、我々は1つのフィールドのみを求めています。 我々は、ユーザ名とパスワードのフィールドを望んでいない。 我々だけで、ユーザーが入力、特定の株式の名前をすることができます1のテキストフ​​ィールドを求めています。 かつては、その株式を見上げている - そして、あなたはそのデータを送信したい - quote_form.phpへ。 Lookupは、株式のシンボル、名前、および価格を返します。 それらは連想配列内に含まれています。 詳細はfunctions.phpに内部ルックアップ機能を見上げて それらの戻り値の型に。 すばらしい!それでは最後に、株式情報を表示したいと思う。 おそらく、表示したいと思う - you'llは、これらの変数にアクセスしたい。 一度は、変数内の価格を持っている - 同様に名前とシンボルとして - 次にあなたのテンプレートのページでそれらを表示したいと思う。 そのテンプレートのページはshow_quote.phpか何かを呼び出すことができます。 あなたのquote.phpページはショーの引用をレンダリングしてから、それらの値のすべてに渡すことになります。 それをあなたのPHPページでは、実際にはページのHTML側面にそれらの値をプリントアウトする。 あなただけの印刷機能を使用し、価格を渡します。 2つの方法があります - あなたはどちらか、ドット演算子とそれを連結することができます またはプレースホルダを使用しています。 ユーザが最終的に株式を売買しようとしている。 我々は、彼らが現在持っている株式のすべてを見ていくつかの方法を許可したい。 我々は彼らのポートフォリオを呼び出すことになるだろう。 ポートフォリオは、おそらくすべてのユーザーに対して、列の束を含んでいるでしょう 彼らが持っているし、それらがどのように持っているそれらの多くが共有の種類が一覧表示されます。 当社の既存のテーブルには - 今私達は私達のデータベースにusersテーブルを持っています。 それは、ユーザのユーザ名だけでなく、そのパスワードとどのくらいの現金は持っているが含まれています。 その内に彼らの株式のすべてを格納する本当の方法はありません。 我々は、すべての株式の新しい列を挿入することができますようにそうではありません。 私たちは無限の量を持っているので、それは非常に、非常に長い行であろう 彼らが持っている可能性が株式の種類。 だから、代わりに私たちが何をしようとし、同じデータベース内にある 我々はユーザーのテーブルを持っていますが、その後、我々はまた、ポートフォリオテーブルがあるでしょう。 ポートフォリオテーブルは間違いなく、usersテーブルにリンクされます その代わりポートフォリオテーブル構造は、株式情報を持っています ユーザーが持っている株式の株式数は何株、 同様に、ユーザーの特定のID番号。 あなたがIDを持っていてusersテーブルと同様に、ユーザー名、ハッシュ値を持っている - パスワードは、暗号化パスワードはどちらです - その後現金の金額は、彼らが持っている。 ID番号は、ポートフォリオからのID番号にリンクされます。 ポートフォリオは、単に株式のシンボルとしてだけでなく、株式を持っているだろう - ユーザーが持っているその株式の数。 そのポートフォリオの表では、基本的に持っているであろう 全株式は、サイト上のすべてのユーザーが持っている。 その後、唯一の特定のユーザの共有を指定する - だけ彼らのポートフォリオ - あなたはそのようなあなたのポートフォリオのテーブルから値を取得するであろう ID番号は、そのユーザーに固有のものです。 あなたがポートフォリオを表示するときは、ユーザーのポートフォリオの株式をそれぞれ報告したいと思う。 あなたは株式の数とそれらの株式の現在の値を報告したいと思う。 これらの株式の現在の値は、ポートフォリオ·テーブルに格納されていないこと 最低でも - - 毎日Yahooはそれが更新されようとしているからだ。 その情報を得るために、あなたのSQLクエリーからそれを参照することはできません。 どのような機能は、私たちにそれを提供しています?価格はどのような機能を得るのだろうか? ルックだので、特定のシンボルにルックアップを使用すると、たくさんの情報を提供します。 名称、記号、ならびに価格 - それはあなたの3情報の断片を与えるでしょう。 あなたが特定のシンボルを検索したら、あなたは、価格を得ることができる その後、あなたのポートフォリオに表示する価格を使用することができます。 ポートフォリオには、ユーザの現在の現金残高が表示されるはずです。 そのフィールドは、ユーザーテーブル内に格納されます。 それでは、我々は基本的にして抱えている思い返す - 我々は、PHPファイルの種類を抱えている。 私たちは基本的にあなたのためのすべての思考を行い、コントローラを持っているつもりです。 そして、我々は、テンプレートが出力するデータを扱っているテンプレートを持っています。 あなたは、コントローラはインチをする必要がある場合、どのような変数を考えなければなら 我々は、すべての名称、記号、および共有番号を出力するポートフォリオを扱っているのなら、 株式だけでなく、現在の価格は、 その後、あなたは基本的に通過するいくつかの方法を見つけたいと思ってます - あなたはその一致する値の配列を渡すことができます。 Let 'sは、あなたが株式のすべてを取得する方法の例に入る 特定のユーザーによって所有されています。 これは、処理していない - まだ - 株式の価格で。 これは何をするだろうと、クエリを実行するだけです。 それはからのシンボルだけでなく、株式を取得することになり - 私はこのテーブルを呼んでいるが、この場合、それは何でしょうか? 我々がシンボルと株式を持つことを扱っているテーブルの名前は何ですか 特定のユーザのために? これは、ユーザーまたはポートフォリオのいずれかです。 ポートフォリオ。 これは何をするだろうと、シンボルと株式に対するクエリポートフォリオです 特定のユーザーの。 ここでは、私が言うには、(SELECTシンボルは、tblから株式 - しかし、テーブルの代わりに、あなたはポートフォリオであることを交換するつもりです。 'WHERE'は、基本的に私の条件です。 私は唯一対応するそれらの連想配列を取得したいと言っている  この次の条件に - idは等しくなります。  それから私は、そこにプレースホルダーを入れ、次にセッションIDだ。 これは何をするだろうと、行の行ごとに言うさ。 これはきちんとした方法の代わりに、実際にループ用に設定する必要がある すべての索引を反復していると、PHPには、for-eachループを持つことができます。 あなたは与えられた配列を持っている場合は、私はすべての連続する要素を呼び出すつもりだと言うことができます - 私はすべての要素がこの名前を呼ぶつもりです。 だから、これらの要素のそれぞれについて、私は、それらの本呼び出しするつもりです それから私はこれを行うことができます。 ごとに、このでは、あなたの実際の配列、あなたが行を呼び出すつもりだとして各行の行があります。 毎回それは、bodyを実行 それは上がるだろうし、それは、行の次の要素に行を更新します。 さて、株式を購入の面で、 私たちがやりたいことは、ユーザが購入しようとしている株式を取得することです その後、ユーザーが購入したい株式の金額、 - 彼らがしたい場合 - 彼らのポートフォリオにその株式を追加します。 彼らが何かを購入している場合、明らかに、その後は減少することになるだろう 彼らが持っているお金の量、それらの現金を減少させるために起こっているそう。 我々は、ポートフォリオだけでなく、ユーザーテーブルを更新を扱うことになるだろう これは、現金が入っています。 しかし、最初に、ユーザーが望んでいる株式の実際の在庫と金額を取得する必要があります。 そのためには、株式のシンボルを求められますHTMLフォームが必要になります あなただけでなく、株式数を購入したい。 次に、追加したくなるかもしれません。 あなたは、特定の値を選択するとよいでしょう。 我々はすでに、この少しを経てきましたが、あなたは、特定の行を取得しようとしているとき - 、SQLテーブルから特定の行を取得 これは、次のような構文です。 あなたは星を指定する場合は、次に選択して、き それは基本的にあなたのための全体、行全体を返しています。 その後、再び、あなたが指定し、次にその条件を持っている - 私は唯一のユーザー名が、メール受信に等しくなるようにしたい ので、それが唯一のメール受信に対応してユーザーが行を取得します。 ユーザーは、ポートフォリオへの共有を追加したいときは、 あなたは、いくつかのエラーをチェックする必要があります。 あなたは、ユーザーが実際に株式を買う余裕ができることを確認したい ので、彼らの現金を確認したいと思う。 前に、我々は、SQLテーブルから行全体を取得するためにスターを使用していました。 しかし、ここで、私たちは実際にちょうど私が1つだけの値が必要であることを指定することができます - 私は現金のみを求めています。 そこでここでは、ID番号1を持つユーザーのために現金を返すことになります。 ユーザーはすでに、特定の株式を買ったが、その株式の多くを購入している場合 その後、あなたのポートフォリオの中で - あなたは、別の行をしたくない その新しいトランザクションを含む別の行。 あなたは実際に金額を更新したい。 本当に変化しているすべてのことは、そのユーザが所有している株式の金額です。 あなたは、INSERT INTOクエリを使用する場合 - そうそれはちょうどあなたのポートフォリオにこれらすべての値を挿入している - ユーザのID番号だけでなく、彼らが買っていることを株式のシンボル 私は重複したキーに実行する場合、及び株式は、その後も、まあ、指定する方が良いでしょう - この場合、重複キーは、ユーザのIDだけでなく、銘柄記号だけではありません - あなただけ持つことができるので - 私たちの前提は、あなただけの1行を持つことができるということです  それは、1特定のシンボルに対応する。 だから、重複キーで - あなたがそこに衝突に実行する場合 - あなただけの新しい値に株式を更新するつもりです。 株式は、我々はユーザが購入されている株式数に加えて前に持っていたものは何でも等しくなります。 さてポートフォリオ表を更新しましたことを、 我々は、ユーザーのキャッシュを更新したいと思う。 usersテーブルにだね、私たちは現金から一定の金額を差し引くことになるだろうので。 一定量のその後と - おそらく、それは現金、現金マイナスに等しいことになるだろう。 キャッシュを更新するには、次のように - 私はメール受信からお金を奪うようにしたい場合、その後、私はこのクエリを実行するだろう - その後 "更新ユーザー 'と現金に現金列を設定 - ユーザー名はメール受信に等しい場合にだけ、私は9999ドルを取り除くでしょう。 しかし、このケースでは、我々は、特に9999減算する必要はありません。 我々は、指定したい、まあ、我々は、株式の現在の価格を減算したい 彼らが買っていることを株式数を乗じた。 今、私たちは、彼らが持っている株式のすべてを見ることができました だけでなく、より多くの株式を購入する。 我々はまた、以前に彼らは株式の現在の価格を調べることができました。 ここで我々は彼らがそれらを販売できるようにしたい。 まず、基本的に表示したい - 我々は、彼らが持っている株式のすべてを見ることができるようにしたい そこでここでは、ポートフォリオからすべての行を表示したい。 彼らは、特定の株式を売却することを選択した場合 次に我々は、彼らがそれのすべてを売却したいと仮定するつもりです。 彼らはちょうど彼らの株式の50%を売却するつもりはありません、彼らはそれの100%を売却するつもりです。 私達はちょうどポートフォリオから行全体を削除することができます。 我々は、特定のシンボルの特定のユーザーの共有を削除することができます。 そのための構文があります。 その後、我々はキャッシュを更新する必要があります。 我々は、彼らが販売している株式の金額と同額の現金で追加することになるだろう 株式の現在の株価を乗じた - ではない、彼らはそれを買った価格ではなく、彼らがされる​​ときの価格 - 彼らはそれを販売している現在の価格。 株式の現在の価格を参照するには、 あなたはあなたの株式の価格を与えることとなる、ルックアップを使用したいと思うでしょう 現在の時点で。 今、私たちは、歴史が残されています どのユーザーが自分の取引のすべてを追跡できるようにしたい - 彼らは株を買ったときに何かを販売したときに見たいと思っています。 我々は、彼らが買ってどのように多くのと同様にすることをやった時刻を指定したい そしてそれは何株だった。 私たちは、それを指定する任意の現在、既存の構造を持っていますか? まあ、我々は、ユーザーが持っている数の在庫を表示ポートフォリオを持っている 与えられた共有のため。 しかし、我々は、我々は複数買うとき、それが更新される方法でポートフォリオを構築している あなたは、Apple、それの10株を購入し、その後に5を販売する場合は、 - 歴史あるべき一方 その後は別々のアクション、別々の行として別にそれらを見たいと思う。 そのアクションは、当社のポートフォリオのテーブルでそれを視覚化するのに対し、 ただ、その特定の行への更新になります  ので、我々はおそらく、別のテーブルをするつもりだ。 私達のデータベースでは、我々のユーザーのテーブルを持って、我々は、我々のポートフォリオテーブルを持っている そして今我々は、おそらく履歴テーブルを用意すると良いでしょう。 その履歴テーブルは、現在の日付を追跡することができます 同様に特定の銘柄記号と同様、どのように多くの株式、 その後どのようなアクション、それは - あなたはこれらの株式を買っていたかどうか、あなたがそれらを販売していたかどうかを指定します。 日付を扱うために、あなたがこれを行うことができますいくつかの方法があります。 PHPは、あなたが自分自身を調べることができます日付を追跡する方法を持っています。 SQLでは、あなたも今すぐ、または現在のタイムスタンプのいずれかを使用できます。それはあなた次第です。 ただ毎回、ユーザーが購入または販売していることを確認してください、あなたはそれらの現金を更新することでしょう usersテーブルには、ポートフォリオのテーブルの行を更新することでしょう、 その後、あなたはまた、履歴の更新されます そう、あなたがそこに呼び出しするようになると3つの別々のSQLクエリがあるように起こっています。 我々は今の機能の束を持っている。 あなたのインデックスファイルには、少なくともあなたにリンクしたいと思うリマインダーだけのカップル - しかし、あなたは、ユーザーがbuy.phpページにリンクできるようにしたいと思う。 buy.phpはコントローラなので、そのどちらかになるだろう - それは、ユーザーを許可するために起こっている にあなたを送信する - それは、あなたが物事をルックアップできるようにするためのフォームにあなたを送信するために起こっている。 我々は歴史を持っています。我々は、ログアウト見積もりを取得し、その後販売しています。 それらはあなたが表示したいもの最低でもあります。 ポートフォリオの観点から、ポートフォリオは、実際には索引ページに示されている。 我々がインデックスに行けば、ここで我々はそれがportfolio.phpレンダリングしていることがわかり と連想配列を渡す - 基本的にはタイトルがポートフォリオに等しい。 だから、これはコントローラです。 我々はportfolio.phpのテンプレートに行けば、 それが持っているすべては - ああ、このサイトは工事中ですが、基本的に言って画像を表示します。 その後、一度に渡す - you'llは、基本的には、より具体的な情報を渡すこと。 だけではなく、タイトルの、おそらくより多くのものを渡すことになります。 あなたはそれらの値を取得したら、次にportfolio.phpは、これらの値を扱うことができます と秩序の任意の並べ替えでそれらをプリントアウト。 一度あなたがそれらのすべてを実装しました、また、1以上の機能を実装する必要があります。 これは、いずれかのユーザーが自分のパスワードを変更させることができ、 彼らはそれを忘れてしまった場合、そのパスワードをリセットする - ので、パスワードのリセットのために、次に それは彼らが電子メールを指定することができますように、あなたはおそらく、また、登録を編集したいと思う 彼らは自分のパスワードを忘れた場合はそうだとすれば、彼らはそれを得ることができます。 おそらく彼らは、自分のユーザー名に入力することができますし、電子メールはそれらに送信されます 自分のパスワードをリセットできるようにするリンクが書かれた。 あなたは、ユーザーが領収書を取得することができます何かを持つことができます 彼らは何かを買ったり売ったりするたびに、 そして最後に、彼らは彼らのウェブサイトに現金を追加することができます。 ただコントローラとテンプレート少しのコンセプトに戻ります。 あなたのような何かを持っています - あなたがここにコントローラーを持ってますので。 今、我々は考えられる理由の例を見ている。 我々は、コントローラを持っている場合、基本的には2例を取るつもりです。 我々がコントローラを持っているとき、我々は我々はまた、扱うの一種だということ、この作品にしている 我々としても、フォームを持っているとき。 コントローラーは基本的に別々のアクションを持ちます - フォームが既に送信された場合、1と入力し、[2ユーザーは、このページに来ている場合 初めてしている場合は、その形式は、入力する必要があります。 私はインチのフォームを持っていることの最初のケースに上がる前に、まずこのような場合にジャンプするつもりです フォームがPOSTメソッドで送信された場合、ここでは、と言う - 少しそのことについて心配する必要はありません。 あまりにも多くのことを心配するが、基本的にこの関数が扱っていることを理解していない フォームが送信されたかどうか。 ユーザーがフォームを送信した場合、この条件はtrueになります。 そうでない場合は、次に我々はレンダリングlogin_form.phpを呼び出すことをお勧めしていくつもりですが、その後タイトルに渡す。 このタイトルはちょうど基本的にヘッダに掲載される予定です。 これは何といい、基本的に言っている - まあ、考えられる理由は、ユーザーに送られる場合 そして、実際にログインしていないし、私はそのフォームを持つページにそれらを送りたい その彼らは、ユーザー名とパスワード入力をすることができます。 それから私はlogin_formに移動し、それが実際の形をしている。 その後、一度ユーザーがフォームを送信すると、彼らは考えられる理由にそれを提出するつもりだ POSTメソッドを持つ。 その後、私は実際に私のif-elseループのこのセクションに入るつもりです。 それはここではフォームに入力された値を扱うという点でだ。 それは、我々はそれらに対処することをここにあるのです。 その後、一度にそれらの値を扱う - あなたが扱っている場合 - 我々は、誰かがその株式を入力することができますquote.phpページで扱っていると言う 彼らは見てみたいし、その表示を見る - それがここに似たようなのようなものだ。 ここでは、ログインフォームを持っている - you'dはおそらく見積もりフォームを持っている - しかし、一旦ユーザーが実際にその情報を送信してしまい、 その後、コントローラが別のテンプレートに渡したいと思う それは、彼らにその実際の情報が表示されます。 この辺りそれでは右、あなたはおそらくう - ここにあなたの状態の終わり頃 - このメソッドがポストに等しい場合 - ショーの引用 - あなたはおそらく別のページをレンダリングしたいと思う - これは、そのページにあなたを送信する - show_quote.php- - して、そのファイル内のこれらの値を参照します。 お分かりでしょうか? 私たちは基本的に2例を扱うコントローラを持っている - あなたはでないかのフォームを入力したかどうかを指定します。 あなたは、フォームを入力していない場合は、 それは、そのページに戻され、そのフォームにリダイレクトされます。 その後、一度コントローラの情報を持って、その身体はそれで対処します 必要に応じて情報 - のいずれか、在庫の値をルックアップ その後、一度は、それらの値を見て、きれいにフォーマットされた配列にそれらを持っている 次に、テンプレートのページにその配列を渡すことができます  その情報を出力すると、その扱っています。 繰り返しますが、それのWebので、それが楽しいものになるだろう。 我々は、ASCIIとその端末出力に限定していないように、我々は、Cの外にいる ので、この楽しみを持っている。 あなたが望むようにそれが視覚的にすることができます。 一度ドルの入力百万人にユーザーを許可することができ、 またはそれらを制限し、本当に意味し、それらを一度に1ペニーを入力できるようになる そのような、または何か。 間違いなく、これを楽しんでいるようにしてください。 PHPコードは、それがあなたの擬似コードをマップアウトする少し簡単だという点で、もう少し簡単です 実際の実装に。 それはCS50で、実際に私たちの最後の作品であるためこのように、間違いなく、これを楽しんでいる。 ということで、これはチュートリアル7であった。 一度は、チュートリアルを見終えて、あなたのpsetを終了している 次に、これらはまたのpsetたし、今、私たちは最終製品に上にある - 私たちは、クイズ1を介して取得した後。 その後、願わくはあなたがpsetをから学んだことをツールを使用することができます - 構文が、特定をする方法のより抽象的な概念だけではなく - 同じように、私はこれをやってみたいし、実際にあることを実現している。 構文および流通コードを介して闘争する方法を学ぶ。 他の人のコードを読んで、その後、既存の関数を使用している解釈。 だから、最後のpsetと幸運。 これは、チュートリアルを導く光栄でした。 私は、彼らはあなたにとって参考にしてきたいと考えています。 これらのチュートリアルであって、非常に感謝しています。 [CS50.TV]