[Powered by Google Translate] [的演练习题集7] [Zamyla陈] [哈佛大学] [这是CS50] [CS50.TV] 大家好,欢迎演练,CS50金融。 现在,我们正式完成所有pset时,CS50 我们剩下的就只有一个这将是一个有趣的实施 一个网站,用户可以登录到CS50金融 买入和卖出股票。 今天,我们将在我们的处置有几个工具。 我们要去谈论的权限。 只要你有一个Web文件夹, 你会想允许用户执行某些文件 但也只是阅读其他的, 让我们来看看权限和如何设置这些。 然后我们要看看到PHP,HTML,SQL代码。 首先,权限。 当你在一个特定的目录中的终端, 然后你想要做的是你要运行的chmod命令。 这是其次是字母或数字 相应的,你基本上希望世界看到, 你看,等等。 例如,当你有一个文件夹, 那么,您希望该文件夹中的每个人都认为它是可执行的, 所以你会做什么,你可以运行命令chmod A + X 然后你的文件夹的名称。 当你有一个文件,如CSS文件或图像文件 - 像JPEG和位图之类的东西,或任何JavaScript代码 - 你想成为人人可读的, 这样的话,你要做的就是,你可以使用通配符 - 这是一个星号 - 基本上表明在CSS文件夹 - 在该文件夹中的一切 -  我会说,这将是人人可读的。 使用权限,当我们使用字母, 我们也可以用数字来代替。 所以,你看,最终当你想要的东西必须是可执行的 - 所表示的数字1 - 是可读的东西是多少,然后 - 写的是2号 - ,所以基本上这些当你想要一个组合,那么你将它们添加。 如果你想要的东西可读,可写,可执行文件, 那么你会增加4,2,1,能够让你7, 然后,只要你有一个文件夹,你想,每个人都必须是可执行的 - 以及为可读和可写的 - 那么你做,7,1,1。 这将是7你,那么其他人。 当你有规范,实际上,它会指定哪些文件夹和文件 需要搭配chmod - 特别。 例如,当你有文件夹 - 这些是7-1-1 - 当你有图像,HTML,CSS,JavaScript的, 那么这些都将是6,0,4 - 或6个,4个,4 - PHP文件,然后将要6,0,0。 背后的想法是,用户不应该真正看到你的PHP代码, 但仅仅是能够看到的输出。 太好了!移动到PHP。 简单地说,只要你想有一个PHP文件时,文件的后缀是。PHP。 您也可以混合使用HTML与PHP代码。 如果你有一个HTML文件,例如, 那么你就可以将其括在左边的角,问号,PHP - 把你的PHP代码 - 然后关闭,另一个问号和一个直角。 PHP中的变量是一个更容易比C中的​​变量处理 任何变量都在它的前面有一个美元符号,刚开始他们是弱类型的。 这意味着,你不必担心设置的东西 等于一个字符串或一个整数。 您可以只是简单的说,这是我的变量名 然后,这是它的值, 所以它会更容易处理有。 另一件事是,PHP也允许你使用关联数组。 您可以简单地定义一个数组,就像你会在C 说,美元符号的名称,您的阵列等于, 然后在方括号中基本上只是在数组中的所有元素的值列表。 但是,在PHP中,你也可以做的是指定基本上是 - 它有点像一个哈希函数。 您可以指定索引 - 你打算把它称为 - 然后,对应于值。 如果你确实通过在A = 1,B = 2,C = 3, 那么你的索引数组的一个给你。 这pset的会让你暖和了一些PHP中的部分问题, 然后我们潜水到CS50融资。 我们有一对夫妇 - 我们有一些功能,基本上, 在这个网站实现。 我们希望允许用户在我们的网站上注册的用户名和密码。 我们希望,让他们看报价, ,那我们就打印出了名的,报价以及目前的价格,它是在。 我们希望让他们看到一个组合,他们已经买了迄今为止的所有股份。 我们也希望让他们买股票卖给他们。 最后,我们想要让他们看到了历史 所有的交易,他们已经取得了。 然后,终于,你已经实现了这一切, 那么,你是自由的实现一个额外的功能。 我们将进入这些。 这些可以是让用户获得额外的现金存入额外的现金, 或者你可以让他们改变自己的密码,或类似的东西, 给他们发邮件的收据时,他们买进或卖出股票。 有一个有限的列表,你可以实现自己的功能, 所以这是最后一个。 由于这是一个网站,你们也有很大的自由度来定制它。 我们提供一些CSS代码,但你绝对自由调整, 使它看起来更好,但背后是一个基本的功能 所以你的实际需要,包括有参考的规范。 规范,我们将要使用的设备也是一个服务器。 这将承载我们的网站对我们来说,它的本地服务器上。 如果您按照这些说明并解压缩在pset分配代码 到您的虚拟主机/本地主机文件夹,  那么你就可以访问http://localhost/在谷歌浏览器在家电, 然后你会达到你写的代码中,pset中7。 PSET 7自带的分布一堆代码, 并希望我们已经 - 在此之前的所有pset时 - 习惯我们读通过分配代码, 了解已经提供了哪些功能,以及我们如何能够使用 那些和我们将要实施的其他功能。 在这种情况下,我们有3个文件夹。 我们有一个HTML的文件夹,包括文件夹,文件夹和模板“文件夹。 我们将做这个pset的是一种分离的思想 - 编程思想 - 与实际视觉方面的PHP代码。 我们将有一个PHP文件,它所有的思想,读入数据库, 打印出来的东西,有,如果的报表 - 这样的事情 - ,然后将数据传递到我们的模板文件 - 或template.php文件。 什么,会做的就是读取数据,然后将其打印出来。 我们可以把为“哑”,因为我们真的不希望他们的模板 被计算的东西,做了很多的工作。 我们希望我们的控制器来做到这一点。 - 一点点,让我们来看看一些分配代码。 在这里,我们有我们的index.html文件,这是很空的。 从本质上讲它做什么 - 它说,好,我会要求configuration.php文件。 我们没有看到,就在那里,但它基本上是调用configuration.php文件, 和执行。 后,这将导致投资组合。 渲染是一个函数,所以每当我们在一个控制器, 我们将调用render,我们会给它的文件,然后我们传递的数据中, 因此,它会调用在portfolio.php种传中的数据,这样的组合可以处理这个问题。 而现在,在这里,我们有我们的login.php形式。  这是控制器,基本上需要照顾的日志记录中。 在这里,它会检查是否提交表单这个文件,交易确认提交。 我们来看看这表示歉意功能。 当我们要打印出一条错误消息, 我们使用的道歉,这将用户重定向到一个特定的页面 ,将打印出具体的错误信息,我们表示。 持续,它会查询数据库 - 我们就会得到更多的后来。 然后你就看到,在这里,如果一个表单没有提交,那么它呈现的一种形式。 这意味着它去login_form.php的,所以让我们来看看这个。 login.php的是,其实我们看到的HTML交易的实际视觉方面。 在这里,我们有一个输入标签的用户名,输入的密码, 以及一个提交按钮。 这实际上是将要举行的视觉效果和HTML形式。 在这里,它说,它要提交通过一定的方法,称为后。 我们将进入方法之间的差异 - 发布与获取,也称为放的东西 - 稍后我们将进入这些方法,但本的pset的利益, 我会强烈建议您使用后。 我们知道,基本上,一旦该表单被提交 - 从login_form.php - 然后,它会去行动 - login.php的 - 基本上通过这些形式在所有这些参数到login.php的。 这种形式的结果都包含在这个职位的关联数组。 后数组中的不同元素的索引 正是您在此处指定。 你说,该输入的是用户名的名称。这个名称是密码。 同样的,你的用户名作为关联数组的索引。 如果我们去的包括文件夹,我们有这个功能的文件,该文件将是非常有用的。 所有这些功能都实现了你。 你并不需要具体落实这些自己, 但他们会非常有用。 我们已经道歉,正如我之前说的,基本上会打印出一个错误信息 你在一个特定的页面 - apology.php。 然后,我们有转储,因此,如果你只需要调用转储,然后通过在变量, 然后,它会带给你一个页面,显示该变量。 然后,我们已经注销,这将基本结束一个特定用户的会话。 查找将是有益的。 由于我们的报价和股票,我们将能够 - 它本质上是实时的。 我们需要知道这些股票价值是什么, 所以我们有查找功能,雅虎股票的文档处理。 一旦你看到了一定的符号的股票,它会返回到您的股票代码 以及该股票的名称和目前的价格。 这就是查找功能。 然后,我们使用MySQL, 所以我们想在我们的SQL数据库执行某些查询。 我们有查询处理 - 一些抽象出来的​​一种。 我们要通过我们的SQL查询整个字符串 - 和所有的变量去 - 这是什么做的是,我们实际执行。 而不是写每次要查询出来的这一切 - 从该查询得到的结果 - 那么你可以致电查询功能,它会返回给你 - 这取决于你正在使用您的查询 - 可能是一个行与查询匹配的或类似的所有的结果。 更多关于了。 最后,我们有,重定向,正如其名称所暗示的,将您重定向到一个不同的页面。 然后我们有渲染,我们将要调用几次。 当你在一个控制器,可以调用渲染到模板页 然后通过该模板​​将处理的值。 这些值可能是将要处理的输出,你要的类型 显示在模板页。 好吧。这些功能,并有更多的特定此分发代码。 我鼓励你去探索自己。 此外,该规范可能会引导你通过一些其他元素的分布代码。 下面是总结的functions.php中发现的功能。 好吧。第一项任务就是让用户在网站上注册。 现在,在网站上有一个登录表单, 为您提供了几个用户的密码。 您可以使用这些用户名和登录, 但你想要让人们作出自己的用户名 并添加自己的网站。 登记的布局是非常相似的登录表单, 除了用户名是不存在的, 用户还需要提供一个新的密码, 然后通常我们有一个密码确认。 一旦用户输入的所有信息, 我们想将它们添加到我们的数据库中的用户。 我们将有一个数据库 - SQL数据库 - 我们将引用。 在该数据库中,我们将有一个表的所有用户 包含自己的用户名,密码,也多少现金。 在寄存器中,我们要允许他们进入该信息。 我们希望显示形式。 我们要确保他们的密码 - ,他们进入了一个,然后也该密码匹配时,输入两次。 所有这一切都完成 - 假设这些错误检查 - 那么,我们希望这些用户添加到我们的数据库。 最后,一​​旦你已经注册了,这是很方便的,如果你不需要重新登录 一旦你注册, 所以,我们要登录他们的网站,如果他们已经注册成功。 第一个任务是显示的形式,这实际上是将是 - 整个注册过程进行建模非常密切登录后 除了没有login.php的,你可能有注册页面register.php。 而是login_form.php- - 这是模板 - 你就已经登记表。 您需要添加更多的领域 - 密码确认字段 - 而不是只是一个用户名和一个密码。 接下来,我们要检查的密码是否匹配,或者是空白的。 我们的控制器 - 注册页面register.php - 这是要照顾做这些检查。 通过POST方法提交表单时, 那么所有这些变量都包含在后阵列。 你想,以确保指数的密码后数组的值 确认元素相匹配。 你想,以确保他们不为空, 你想,以确保它们是相同的。 关于PHP的一个方便的事情是,我们并不需要使用字符串比较了。 我们可以使用等于等于运算符  检查字符串是否是彼此相等的。 对于错误处理,你要道歉。 要道歉,你只需调用该函数  然后指定一个要输出的消息类型。 然后,您要添加到数据库中的用户。 到现在为止,我们一直在做的只是当地交易形式的结果。 现在,我们确实希望将它们添加到我们的数据库。 对于这一点,我们首先要确保不为空的用户名。 了解,在网站上,你可以有多个用户相同的用户名, 所以你要确保当你插入到你的数据库中的东西 - 添加一个新用户 - 然后你没有得到一个预先存在的用户名之间的冲突 和用户名,用户试图提交。 对于这一点,一旦你执行一个查询 - 插入一个特定的用户与他们的密码和一个初始量的现金 - 一旦你调用查询,那么MySQL将实际返回false,如果它失败。 结构的用户的用户名是一个独特的价值, 所以你不能有一个以上的。 当您尝试插入新行的用户名已经存在, 将返回错误的 - 就像一个布尔值false。 这里是一个棘手的事情,你要检查的结果是,如果您的查询结果。 如果失败的话,那么你将要检查的三等于运算符。 这实际上是要检查是否有故障或不, 而在只是一个简单的等于,等于,这将是真实的,如果该行是空的。 失败的结果,如果有一个用户名之间的碰撞 是实际的错误值。 这里是你如何将插入到数据库中。 这里是,你会严格执行SQL查询。 有一件事是,你可以真正去管理您的SQL数据库的网站, 和玩耍通过手动或者输入值或行。 它将输出的SQL输出是什么。 您也可以在数据库中执行SQL命令  然后看语法可能是什么, 然后转换到查询功能,我们在pset中7, 这将是非常相似的查询,在实际运行。 如果我希望我的用户表中插入新行, 然后,我会指定插入到用户,这是我的表的名称。 然后,我将指定列名。 然后,我会随着我的密码提供的值。 在我们的用户表中的密码不只是存储为字符串。 它们被存储为加密的版本, 所以你要运行的函数crypt实际的密码, ,而且会给你正确的用户数组的存储类型。 运行此将插入一个新行插入到用户表。 要处理的查询功能, 我们以前在C百分号作为占位符。 同样的一个占位符,同样的概念适用于这里。 通过查询,您可以指定整个查询, 但只要你正在处理的变量作为输入到查询, 然后,而不是把他们里面 - 就像在C中的printf语句,当我们有 我们将字符串,然后在那里有一个占位符,然后在每个 逗号,指定的变量,我们有。 在这里,我们要使用我们的占位符问号标志 ,然后通过每个变量中,分别按顺序的占位符 - 这些变量应该去的地方。 所以在这里,第一个问号将被替换为实际的用户名 然后第二个问号的账号和密码。 最后,一​​旦你注册了它们,并将它们添加到数据库中, 然后,你要登录到网站。 我们有一个超全局变量称为会话种。 会话需要一定的id, 该标识对应于当前登录的用户 你会想要做的就是找​​到自己的用户名是什么 然后设置特定的用户ID,会话ID。 你要在这里使用的函数是一个SQL命令 从表中,将检索最后插入的ID号。 行会调用 - it'll调用的ID - it'll指定一个名称,它返回的数量。 它会调用该ID。 现在,我们已经完成了注册,我们可以将引用。 报价允许用户输入的名称,一定的库存, 然后它会返回该股票的素质。 你会想在这里做的是有一个控制器和一些模板。 在这种情况下,我们将有一个控制器,这是要为我们做所有的思想。 要查找符号,然后传递值,将打印出的模板。 我们要在这里有2个模板。 我们将有1个模板,提供的表格中,用户要 输入股票名称 - 这个名字的份额。 然后我们也将要显示这些值的另一个模板。 你可以看的一个例子,如何你想有一个接受输入的形式,登录, 除了在这里,我们只需要1场。 我们不希望一个用户名和密码字段。 我们只是想让文本字段,允许用户输入某只股票的名称。 然后,你要发送的数据 - 一旦你抬起头来,股票 - 到quote_form.php。 查询将返回符号A股股票的名称,以及价格。 这些都包含在一个关联数组。 查一查的functions.php内查找功能的更多信息 者的返回类型。 太好了!那么最后,你将要显示的股票信息。 您可能会想显示 - 你要访问这些变量。 一旦你的价格在一个变量 - 的名称和符号,以及 - 然后,你将要显示在模板页。 该模板的页面可以被称为,show_quote.php或东西。 你的quote.php页会导致显示的报价,然后通过在所有这些值。 然后,在你的PHP页面,你居然打印出这些值在页面的HTML方面。 你只需要使用打印功能和价格传递。 有2种方式 - 你可以将它连接点操作符, 或者使用一个占位符。 最终用户将要购买和出售股票。 我们希望,让他们看到所有的股票,他们目前有一些方式。 我们会打电话给他们的投资组合。 组合,大概为每一位用户,包含了一堆行 列出了他们,然后他们有多少份额的类型。 我们现有的表 - 现在我们有一个在我们的数据库中的用户表。 它包含一个用户的用户名以及密码多少现金。 有没有真正的方式存储所有的内,他们的股票。 它不象所有的股票,我们可以插入新列。 因为我们有一个无限的数量,这将是一个很长很长的行 类型的股票,他们可以有。 所以,我们要做的是在同一个数据库, 我们将有一个用户表,但我们也将有一个投资组合表。 肯定会有联系的投资组合表的用户表, 而是投资组合表结构将有股票信息, 有多少用户拥有该股票的股份, 以及用户的特定的ID号。 您的用户表,其中有一个ID和用户名,哈希 - 这是密码,加密后的密码 - 然后的现金数额。 的ID号,将投资组合的ID号。 投资组合将有符号的股票,以及股份 - 的用户拥有该股票的股份数。 在这个组合表,基本上你将有 所有股份所拥有的所有的用户在您的网站上。 后来,只指定一个特定的用户股份 - 只有他们的投资组合 - 你会从投资组合的表检索值 是特定于该用户的ID号。 当显示的组合,你要报告每个用户的投资组合中的股票。 你会想报告的股份,这些股份的价值。 ,目前这些股份的价值不存储在投资组合表 因为那是要更新 - 最低 - 每一天的雅虎。 要获得这些信息,你可以不引用,从您的SQL查询。 什么样的功能,提供给我们吗?什么样的功能将得到价格是多少? 这是查找,因此使用查找一个特定的符号会给你很多信息。 它会给你3个信息 - 名称,符号,以及价格。 一旦你查找一个特定的符号,那么你可以得到的价格, 然后你就可以使用的价格,将显示在你的投资组合。 投资组合也应该显示用户的当前现金余额。 那场被存储在用户表。 那么记住我们基本上有 - 我们有不同类型的PHP文件。 我们将有一个控制器,它基本上是你所有的思想。 然后我们有一个模板,该模板输出数据的处理。 你必须考虑哪些变量控制器将需要采取英寸 如果我们正在处理的组合输出的每一个名字,符号和股数, 以及当前的股票价格, 然后,你要找到某种方式,基本上通过 - 你可以通过在一个数组中的值匹配。 让我们进入一个例子,你可以检索所有的股票 所拥有的一个特定的用户。 这不是买卖 - 还 - 股票的价格。 这将是运行一个查询。 将获得的符号,以及股份 - 我打电话来,此表,但在这种情况下,你会做什么? 叫什么名字的表,我们正在处理的有符号和股份 对于一个特定的用户? 这是用户或组合。 投资组合。 这将是查询的符号和股份的组合 对于一个特定的用户。 在这里,我要说,“(SELECT符号,股份TBL - 但表,而不是要取代与组合。 “去哪儿”基本上是我的条件。 我说我只想要得到的关联数组对应  这以下条件 - id等于。  然后,我把一个占位符,然后会话ID。 这是说行中的每一行。 这是一个不错的方式,而不是设置一个for循环, 遍历所有索引,然后在PHP中,你可以有一个for-each循环。 如果你有一个给定的数组,那么你可以说,我现在就打电话给每一个连续的元素 - 我现在就打电话给每一个元素这个名字。 因此,对于每一个这些元素,我会打电话给他们这个, 然后我就可以做到这一点。 在对每个有实际的数组,你要叫行,每一行的行。 每次执行主体, 它会,它会更新一行行的下一个元素。 现在,在买股票, 我们想要做的就是让用户希望购买的股票 和股份数额的,用户想购买,然后 - 如果他们想 - 补充说,股票的投资组合。 很显然,如果他们买了一些东西,那是怎么回事减少 他们的钱的数量,所以这会减少他们的现金。 我们将要处理,更新的产品组合以及用户表, 其中包含了现金。 但首先,你需要获得股份的实际库存量,用户希望。 对于这一点,你需要一个HTML的形式,将要求符号的股票 您要购买的股份数目。 然后你需要添加。 您需要选择特定的值。 我们已经经历这有点了,但是当你试图获取某些行 - 从SQL表中检索某些行, 这是下面的语法。 您已经选择,然后如果你指定一个明星, ,整体而言,整个行会基本上恢复。 再说,你具备条件的地方,然后指定 - 我只想要的用户名是平等的邮件, 因此它只会在用户中检索该行相对应的邮件。 当一个用户要添加共享一个投资组合, 你需要检查的几个错误。 你想,以确保用户实际上可以负担得起的股票, 所以你要检查他们的现金。 在此之前,我们用星从一个SQL表中检索一整行。 但在这里,我们可以只指定,我只想要一值 - 我只想要现金。 所以在这里,它会返回现金的用户ID号为1。 如果用户已经买了某只股票,然后购买更多的该股票, 然后在你的投资组合 - 你不想要一个单独的行, 另一行包含新的交易。 您要更新量。 所有这一切的改变确实是该用户所拥有的股份数额。 如果您使用插入查询 - 只需要插入到你的投资组合中,所有的这些值 - 用户的ID号以及他们所购买的股票的象征 的股份,那么你也将要指定,好了,如果我遇到重复的键 - 在这种情况下,重复的键不仅是用户的ID,但也股票符号 - 因为你只能有 - 我们的前提是,你只能有1个行  对应到1特定符号。 因此,在重复键 - 如果你遇到了一个碰撞 - 你只是要更新其新的价值的股份。 股份相等于我们以前加,用户购买的股份数。 现在,我们已经更新了投资组合表, 我们将要更新用户的现金。 这是在用户表,所以我们将要减去一定数额的现金。 据推测,这将是现金等于减去现金 - 然后一定量。 要更新的现金,你会 - 如果我想从邮件中拿走钱,然后我将运行此查询 - “更新用户”,然后设置列的现金的现金 - 如果用户名是平等的邮件,我会删除9,999美元。 但是,在这种情况下,我们不希望具体减去9999。 我们要指定,那么,我们要减去当前的股票价格 ,他们所购买的股份数乘以。 现在,我们已经让他们看到所有的股票,他们有, 以及买入更多的股票。 我们以前也使他们能够查看当前的股票价格。 在这里,我们要允许他们卖给他们。 首先,我们要基本显示 - 我们希望让他们看到他们有所有的股票, 所以在这里我们要显示的所有行的投资组合。 如果他们选择卖出某只股票, 然后,我们要假设他们想出售它的所有。 他们不只是要出售50%的股份,他们将出售100%。 我们可以从投资组合中删除整行。 我们可以删除给定用户的某个符号的股份。 是的语法。 然后,我们要更新的现金。 我们要在他们所销售的股份数额的现金增加 乘以当前的股票价格 - 不是这个价了,他们买了它,而是他们的价格 - 目前的价格时,他们所销售的时候。 来引用当前的股票价格, 你将要使用的查询,这会给你一个股票的价格 在当前时间。 现在留给我们的历史, 你想允许用户跟踪他们的交易 - 要看到,每当他们卖的东西,只要他们买了股票。 我们要指定的时间,他们在这样做,以及他们买了多少 什么股票了。 我们是否有任何指定的电流,现有的结构? 好了,我们的组合,其中显示用户的数量的股票, 为一个给定的共享。 但是,我们构建投资组合的方式,它更新时,我们买多, 而历史应该 - 如果你买了苹果,股吧,然后后来就卖出5, 那么你想看到那些分别作为单独的行动,单独的行。 鉴于该操作可视化,在我们的投资组合表 也只是特定行的更新,  所以我们可能会想另一个表。 在我们的数据库中,我们有我们的用户表,我们有我们的投资组合表, 现在我们可能要一个历史表中。 这历史表可以跟踪当前的日期, 以及特定股票的符号,以及多少股份, 然后它是什么样的行动 - 你是否在购买这些股票,或者是否进行销售。 要处理的日期,有一对夫妇的方式,你可以做到这一点。 PHP有办法跟踪的日期,你可以看一下你自己。 在SQL中,你也可以使用,不论是现在或当前时间戳。这是给你的。 只要确保在用户每次购买或出售,你会被更新他们的现金 在用户表,你就可以更新的投资组合表中的行, 然后你也可更新的历史, 所以有打算是,你将调用有3个独立的SQL查询。 我们现在有一堆的功能。 只是一对夫妇的提醒,在您的索引文件,你要链接到至少你的 - 但你会希望允许用户连接的buy.php页面。 这会允许一个用户 - buy.php的控制器,所以,要既 送你去 - 这就是要送你去的形式,让你看的东西。 我们有历史。我们已经记录,得到一个报价,然后销售。 这些都是你想要在最低。 在投资组合方面,投资组合的实际显示在索引页。 如果我们去索引,在这里我们看到它呈现portfolio.php的 并通过关联数组中的标题 - 基本上等于投资组合。 所以,这是控制器。 如果我们去模板portfolio.php, 那么它是 - 基本上是一个显示的画面,说,哦,这个网站正在建设中。 后来,当你传递 - 你基本上更具体的信息传递。 ,而不仅仅是标题,你可能会被传递更多的东西。 一旦你有了这些值,,然后portfolio.php可以处理这些值 打印出来任何形式的秩序。 一旦你实现了所有这些,你还需要实现更多的功能。 这可以允许用户更改其密码, 重设密码,如果他们已经忘记了 - 这样的密码重置,然后 ,你可能还需要编辑注册,以便让他们到指定的电子邮件, 所以,如果他们忘记了自己的密码,然后他们可以得到的。 他们或许可以输入他们的用户名,然后一封电子邮件将被发送到他们的 可以重设密码的链接。 你可以拥有的东西,可以让用户获得收入 每次他们买或卖的东西, 然后终于,让他们增加现金到他们的网站。 只是为了重新回到控制器和模板的概念一点点。 你必须像一个 - 所以您在这里有一个控制器。 现在,我们正在寻找在login.php的例子。 当我们有一个控制器,基本上这将需要2例。 当我们有控制器,我们在这一块,我们也种处理 当我们有形式为好。 控制器将基本上都有独立的行动 - 如果一个表单已经提交,然后两个,如果用户到该页面 在第一次和仍需要输入该表单。 我要跳这种情况下,前第一案的形式中。 在这里,我们说的方法后,如果表单已提交 - 不用担心,有点。 不要担心太多,但明白,基本上是这样的函数处理 表单是否已被提交或没有。 这种情况是真实的,如果用户提交了表单。 如果没有的话,我们会到要调用render login_form.php,然后通过在标题中。 这个称号是基本上要出现在标题中。 这基本上是说,好了 - 好了,如果用户进入的login.php 并没有实际登录的话,我想送他们到该表单的页面,有 这使得他们能够输入用户名和密码。 然后我去login_form,然后有实际的形式。 然后,一旦用户提交该表单时,他们将提交到login.php的 与POST方法。 实际上,我进入这个部分,我的if-else循环。 然后,它在这里,我们处理输入到表单中的值。 在这里,我们处理这些。 然后,一旦你处理这些值 - 如果你正在处理的 - 说我们正在处理的quote.php页面,可以输入一个股票 他们想看看,然后看到显示 - 这是一种类似在这里。 在这里,我们有一个登录表单 - ,you'd可能有一个报价表 - 但然后一旦用户已实际提交该信息, 那么你会希望控制传递到另一个模板 ,将显示他们的实际信息。 在这里,那么正确,那么你就可能 - 您的病情年底左右 - 如果该方法等于后 - 然后你可能会想要呈现的另一页 - 展会报价 - 发送到该页面 - show_quote.php - 然后在该文件中引用这些值。 这是否有意义吗? 我们有一个控制器,基本上与2例 - 您是否已经进入或没有的一种形式。 如果你还没有进入的一种形式, 然后将您重定向到该窗体,然后把你返回到该页面。 然后,一旦你有在控制器的信息,该机构将处理 必要的信息 - 无论是值的股票, ,那么,当它抬头一看这些价值观,并有一个很好的格式化阵列, 那么可以通过该数组的模板页面  该输出该信息。 同样,因为它的网络,它将会很有趣。 我们的C之外,所以我们不仅限于ASCII字符,而终端输出, 因此,有乐趣与此有关。 你可以把它作为视觉的,只要你想。 您可以允许用户输入数百万美元的时间, 或限制他们真正的意思,并让他们只一次进入1分钱 或类似的东西。 一定会确保有乐趣。 PHP代码是简单一点的,因为它更容易一些伪代码 到实际的实现。 因此,绝对有乐趣,因为它实际上是我们的最后一块CS50。 考虑到这,这是演练7。 一旦你看完演练,完成你的pset中, 那么这些也pset的,和我们现在是在最终产品 - 后我们通过测验1。 希望你能使用的工具,你所学到的pset时 - 不仅是语法,但更多的是抽象的概念,如何采取一定的 - 喜欢,我要做到这一点,那么实际执行。 学习如何奋斗通过语法和分布代码。 阅读其他人的代码,然后解释,使用预先存在的功能。 所以,运气好的话,最后的pset。 这是一个很高兴导致的演练。 我希望他们已经对你有所帮助。 这些演练,非常感谢。 [CS50.TV]