SAM LEVATICH:欢迎 节这个星期。 我不是安迪。 安迪生了病这一天,和我 那种被称为在最后一分钟 接管。 这是流感季节,所以一定要确保你 是住干净,洗手, 和饮食健康,使 你也一样,不是卧床不起。 但是,如果没有进一步的 废话不多说,让我们开始吧。 今天,我们要谈论 关于PHP bit--如何一点点 PHP涉及到HTML,它是如何 涉及CSS和一些纸幅的 东西你做了最后一次转让。 我们要谈 有关SQL一点 以及如何使用数据库的工作, 这是P的一个非常关键的组成部分 设置8- P设定7。 P设定7。 然后,我们要谈一点 有关视图控制器是如何工作的位 为什么这是一个理念背后的一些 现代的网页和不同的设计。 差不多了很多类型的应用程序 和应用程序,你可能会出货 利用该模型, 视图控制器架构, 你会使用 P中设置7,所以我会 讲一点点 为什么这已经成为 流行的,为什么它是重要的和漂亮的。 然后,我将最终转移到 关于解决P的一些技巧设置7。 如果我们有时间 剩下的底, 我们实际上可以做一些 上一起工作。 因此,PHP。 事实上,你可能已经注意到this-- 你真的没有潜入它 - 但P设定6有一些PHP 这是怎么回事代码。 而由于PHP是一种类似C 语言,PHP,不像HTML和CSS, 是一种编程语言, 而HTML和CSS是静态的。 他们是处理标记语言 与风格和视觉布局。 PHP是实打实的。 PHP有循环,它具有条件 - 所有的东西,很有趣约C. 它有几件事情是一个小 位比C,我们将看到更好的, 但我认为,最简单的方法谈 关于PHP只是潜水研究。 所以我要去权 到IDE在此点。 我们要的第一件事情 这样做实际上是看 在一些一点点 PHP代码,这是P中设置6。 让我们做that--方式 之前,我们正在运行的方式 服务器为家电 是,我们将不得不类型 - 既可以使用您的实现 或员工实施 server.c通过进入目录 并运行server.c与不用 arguments--所以叫它的 本地主机,这就是你大概是什么 做了大部分的时间 - 的 然后喂养它 有directory-- 其中作为其根使用 其中,网站将 运行,基本上是这样。 本周的p设置7,如 伟大的,因为我们的代码server.c 是,还有人谁已经 在CS50写这些美好的事情了 有一点点 更多的功能, 一个服务器程序,它是能够 处理多一点 错综复杂的关系,我们将 看到在P组7和P设置8。 并且您启动的方式 服务器只需键入“apache50。” 你做任何事情之前, 你要确保 阿帕奇50不 已经运行,因为它是 在我的机器,我做到了,以测试它。 而你做到这一点通过调用apache50。 停下来,你会看到它停 Web服务器,如果你能在那里寻找 在终端窗口的底部。 然后刚开始,我们 要叫,“apache50开始。” 然后我们要去 给它一个目录。 现在,因为我们想看看 在一些为P的设置6个码 我们已经实施了,其实我 复制的P一点点 设置6码到我自己的文件夹中, 您可以在左边有看到。 这就是所谓的“SECTION8” 在所有大写字母 因为我只是太激动了 以视频直播的今天。 因此,如果我们运行它,它应该 一切都非常有效地开展工作。 它说,好了,我们的网站现在 可在IDE的地址, 基本上,这是你正在使用 正是因为它是在P设定7-- P设定6。 我所有的指标是当今一个索引。 因此,我们可以去那 地址,如果你还记得, 只需点击这个小 按钮在右上角。 你还记得这个代码,这 当你走进hello.php发生。 和哪些代码被设计成 做的是,当你在一个名字类型 这里 - 如果你说山姆 因为这是我name-- 我点击打招呼,当 我们去到下一个页面, 该名称应该显示。 它会说,“喂,山姆” 或“你好,”任意名称 投入它,即使我们去 以一个全新的网页。 这是诸如此类的事情, PHP可以为你做。 PHP是能够通过数据 在两个网页。 这是一个完全不同的页面。 你会看到标题为“Hello”在这里。 实际上,它们具有 同样的冠军,但我 保证它们是不同的网络 网页如果我们看看源。 你可以通过这就是数据 在这个文本字段中输入, 你提交给下一个 页面正在被叫了起来, 然后该数据能够 在那里以其目前的形式。 现在我们还没有实现 这个我们自己,这 就是我们要做的,现在到 排序得到了香精,用于PHP是如何工作的, 但关键的想法是,PHP--可以 那种认为它像一个功能。 东西PHP可以让你 做的是它可以带参数 您输入到HTML页面 通过使用PHP和形式, 它可以通过那些作为参数 给它加载了下一个页面。 在这种情况下,我们加载了这个 页的“打个招呼”按钮。 但现在,其实我 删除了一些代码 在hello.php当时正在运行 这实际上显示了“你好, 世界“或”你好,萨姆“或 “你好,”无论是刚投入。 因此,对于现在,我们 要做到这一点,基本上是这样。 我们将重新创建和 还添加一些更多的功能, 做多一点吧,看 PHP是什么真正的能力。 因此,首先,让我们来谈谈 该文件,hello.php。 因此,如果我们放大了 小bit--现在我 那种试图滚动所有 顺便around--我们走吧。 你会看到它被称为 hello.php,但语法它 看起来像一个HTML文件。 这是因为 在该文件中的实际的PHP 在所有的这些卡之间 问号插入符块。 这里的一切 被认为是PHP代码。 而且你会发现, 当我做了评论, 你会看到熟悉的 两个正斜杠。 如果你还记得,在 HTML,如果我输入评论, 它看起来更接近于 这一点,这是HTML注释。 之间,真是应有尽有 这两个尖括号 现在是PHP代码,这 反映在实际上 这个小注释符号 变成一个注释。 所以每次你写PHP代码,甚至 如果有在它之外没有HTML代码, 它总是将是 括在这些尖括号 带有问号的。 那种你可以考虑一下它 - 怎么回事 跑在你的C程序代码 被封闭在一个int主,无效的, 大括号,结束大括号的语句。 你会看到在大括号 PHP也一样,但这是有点 像PHP的主要方法。 所以,现在,我们该怎么做在PHP什么? 现在,PHP是一种编程 语言这是非常类似C, 但它的运作在网络上。 所以一件事, 你会immediately-- 1 你真的跟做的第一件事 ℃的你打印的东西了,对吧? 因此,在C中,我们做到了 用printf函数。 我们给它一个字符串, 可能有一个新的生产线, 然后我们终止 它与一个分号。 所以说我们要做到这一点的方式 在PHP--因为它不是相当的printf。 这是不同的语法一点点。 我们打​​印的东西出路 在PHP是我们说,“回声你好” 或“回声”的任何文字。 并且具有这样做的效果 printf输出字符串,“你好。” 并增加了新的生产线给它。 因此,让我们现在做sure-- 我会再次缩小了一点bit-- 让我们确保 该代码工作 因为很可能会 以及在这个代码中的错误 我们将必须解决。 因此,服务器已经在运行。 因此,如果我们滚动回落至底部, 是啊,在服务器仍在运行。 因此,如果我们只需轻按在此 有点右这里 - welcome--我们应该get--很大。 我们仍然拥有的 熟悉的“问好”的对话, 但是当我输入“喜”,我们拭目以待 文本“你好”确实是 打印出来,这是完全一样 我们预计,由于回响在PHP 就像是一个printf语句。 于是回到代码,如何在P设定6那样 您提供的发行代码 让这个PHP会 输出的东西,你 上一个屏幕上键入的? 而要排序的研究 为什么出现这种情况,我们 要进入的index.html,这 是原始的文件,该文件是 显示了这个屏幕上 与“打个招呼”按钮。 您会注意到有 所有的经典的东西 我们来自HTML这样的期待 因为这些东西,这些标签封闭 在尖括号,如PHP 但没有问号, 这表明一个特别的事情为HTML。 我们有称号,这是“你好”。 而且你会发现,正如我们所看到的, 标题是在两种情况下的“hello”。 让我们改变这一个 以“说”只是让我们 能够区分自己哪里了。 但是,我们已经有了一个身体。 然后是有趣的一点,在 位,显示了在HTML, 是这样的表单元素。 因此,我们有一个形式。 这是关键。 这是我们如何使用PHP。 的动作参数 形式表示,hello.php 就是我们要发送的 在这种形式的值。 这是我们传递 参数,可以这么说。 你会注意到这里还有一件事 是,该方法是“获取”。 有两个主 方法通过在后 可以使用PHP来传递数据 websites--网页之间, rather--此分配。 而这些方法都是“get”和“后”。 有一些微妙 GET和POST之间的区别 我们会得到into--我们 将“得”到,如果你愿意。 但是,对于所有的意图和 目的,get和post 都只是方式 你传递参数 略有不同的执行。 现在,我们要使用get因为 得到的是什么最初使用 在P的PHP文件中设置6。 而实际上,如果我们进去看看 之前我们已经别的编辑什么, 我会打个招呼 用于:你叫什么名字? 听众:艾略特。 SAM LEVATICH:哦,天哪。 我不知道如何拼写的。 你能拼一下吗? 听众:E-L-L-I-O-T。 SAM LEVATICH:我-O-T? 听众:是的。 SAM LEVATICH:完美。 好。 我想我确实知道如何拼写的。 对于那个很抱歉。 但是,如果我们说“打招呼,”这不是 它不会显示在屏幕上 然而,由于我们修改 代码一点点。 但是,如果我们“打个招呼” - 好了,“你好”就在这里。 但是,如果我们仔细 看看URL本身, 我们将看到它结束 与hello.php?NAME =埃利奥特。 所以,这是一种方式 连通到下一个网页 我们已经传递的参数。 我们说的名字=埃利奥特。 而这最终P如何设置6 访问我们通过在变量 通过形式。 这是东西 所特有的GET请求。 GET请求,使参数 在网站的URL已知的。 你会记得,太多, P中设置6,你 只好写一个函数 该处理的事实 这个查询字符串 一个文件后,可能存在。 有可能是一个问号,后面跟随 通过基本上任意数目的字符。 而这正是这里发生了。 你有原因解析 在P中实现server.c的 设定6是使你能告诉 PHP代码的NAME =埃利奥特。 您需要能够以 解析出的URL 使有问题的PHP文件 知道它处理。 因此,希望这给 动机server.c 现在我们继续前进 的C外到PHP。 因此,让我们真正专注于访问 通过GET请求事情现在 在此刻。 我要保存这个。 我们没有改变任何东西。 看起来我们已经有了一个输入栏。 我们设置一些属性, 因为我们可以做一个HTML。 这些都是简单的事情。 我们不需要这些。 但是,我们已经有了自动完成了, 这基本上says--你知道, 当你输入的东西 入网络,有时 它试图填补的为您服务。 所以这是一个很好的事情。 我们要关闭它用于此目的。 这是一个CS50的决定。 因此,我们可以删除,如果我们想要的。 自动对焦刚粘光标 在开始时的形式的权利。 同样,没有太重要了。 但NAME =“名” - 这是一个有点 棘手,因为它的名字和名称。 但我们可以已经改变 这对别的东西。 而事实上,这是 我们要做的现在。 我们会说“的人,”这 有点像名 如果一个人是由他们的名字来定义。 因此,让我们关闭此, 重新打开了我们的网站: 因为我们的服务器仍在运行 Apache的50,我们会说,你好,这里是 艾略特一次。 为什么不呢? 您好。 如果我们走在这里,我们将看到 而不是名称,则=埃利奥特, 它说:人=埃利奥特。 这就是这一事实的直接结果 我们只是改变了名称=“人”。 因此在一个输入元件 HTML表单的名称字段 是标识符的 这正在被传递的参数。 这就像如果你创建一个函数 “加”是参加了两个整数 你说的INT A和INT湾 这将是一个名称,并且如果 你想要的另一种形式,这 我们可以通过复制做到公正, 粘贴,那么我们将不得不名湾 所以,现在我们有两个参数: 正在通过传递 到达下一个website-- 下一个网页,hello.php。 我们可以清楚地看到 这一次,如果我们想要的。 这是处理最简单的方法 在IDE的网页代码,基本上是这样。 你启动服务器,把它 运行,然后每一次 做出一些改变,只需关闭 该文件只是为了安全起见。 按后退按钮 是有点棘手 因为它可能会加载一个较早 版本,而不是最更新之一。 然后你只需点击 按钮再次,弹出右键up--哦, 现在有两种形式。 因此,如果我们输入一件事到每个 埃德蒙顿“贾森赫什霍恩,”对于instance-- 我们打​​招呼。 我们仰望我们的参数。 看起来我们已经得到了,因为 预计,A =杰森和b =赫什霍恩, 它代表了两个参数 我们传递给这个函数。 所以,现在,让我们真正得到 实现该功能,我们 有P中设置6。 所以现在我们只是呼应打招呼。 而这还不是非常有用的。 我们要回应一些变量 这是传递给我们。 我们也知道这个变量的名称。 我们有一个,我们已经湾 因此,我们可以选择回声任何一个。 但是,我们如何获得呢? 嗯,也有一定的 在PHP中的全局变量。 而且我会写 他们在这里评论。 这两个最重要的是GET 并张贴我们的目的现在。 这些是阵列或, 技术上,该词典 在那里我们的变量,我们是 传递到下一个网页直播。 我们将很快看到如何使用它们。 关于PHP代码的另一个简要说明 而它 - 在C中的一些细节, 声明变量 或者使用变量, 你首先必须声明它们。 而你又做什么,当你 宣称他们是说INT一个或炭湾 你必须申报这些类型 之前变量创造了他们。 PHP--你不需要做任何的。 PHP不要求 变量的类型。 和使用的方式 创建一个变量 - 而 不是说INT,CHAR,string-- 这是真正的char *,因为我们知道 - 而不是做所有的 即,因为一切 是相同类型的, 无类型,我们只要 使用一个字符,这 是美元符号。 你会看到它已经弹出 起来,小自动完成的事情。 而且它说_GET和彦博 有两种选择,我有可用 对我来说。 其中的一些其他的东西 在PHP中其它全局变量 您将使用过 P的过程设置7​​。 现在我们要 注重GET和POST。 但是,这是一个有益的 该IDE做的事情 一旦你输入的地方 在美元符号, 它会开始填充全局变量 或者你已经定义的变量。 所以,如果你想定义 一个叫做变量“字符串” 你可以只将其设置为“喜”。 而且它基本上是这么简单。 然后我们可以做 像“回声$字符串。” IDE将要抛出一些 错误,如果我做错什么, 所以希望我做的一切权利。 但错误总是这样出现的。 关于另一个棘手的事情 PHP是,它不是编译。 因此,与C程序,你会怎么做 日常of--基本上, 你会做编辑 你的代码,你会来救它, 然后你会 使,在化妆是 调用该编译器的步骤中, 铛,使你的代码,该文本 文件,到可执行。 PHP是C类,但它的执行 在通过Web浏览器飞。 因此,有没有办法知道。 请将引发这些 有用的错误,对吧? 这将是一样,你 没有宣布这个变量 你尝试过使用它。 你做了这一切坏stuff--段错误, 段错误,所有诸如此类的有趣的时代 随化妆。 PHP是一种双刃剑 因为你不会得到这些错误, 但是这也意味着你不会知道 真的有什么错你的程序 如果你只是运行它,它不工作。 但调试器应该指出 一些希望有用的小事情 语法就可以解决。 因此,如果我们去了用于: 说了,让我们关闭了。 重新打开。 我们又回到了这里。 所以,我们已经有了一个变量 和一变量b。 而这些都不会最终无所谓。 我们会打电话给他们^ h和g 无特殊原因。 而我们打招呼。 现在看来,我们的字符串 “喜”确实打印。 我们创建了一个名为变量 “弦”,将其设置为“喜”。 请注意,我们没有做 的malloc或作出一个字符数组。 在PHP中,由于变量 是无类型,一个字符串 是一样的字符为 所有意图和目的。 这可能是“喜”。 这可能只是角色k。 这可以是一个数字1。 而且它并不关心。 PHP不关心 你的变量的类型。 或者,它确实照顾。 当您尝试它关心 和做的事情吧, 但它并不关心在 声明一步。 就这样你就可以在C,你可以 栈像这样的声明串 虽然说“栈”是一个小 一个潜在的用词不当,当位 我们谈论的PHP。 但是,我们不必担心。 因此,我们得到了我们的字符串 “嗨,”我们回显字符串。 所以,现在我们已经讨论了变数。 所以,现在我们需要谈谈get和 发布并执行的最后一件事那 需要真正得到这个备份 到P的功能设置6。 所以现在我们 呼应字符串,但我们 确实有这些变量GET和POST。 而且因为我们使用 该方法得到的,它 很自然,我们的变量 我们感兴趣的,A和B, 将位于在阵列中 或字典,在技术上得到。 所以,如果我们成立了得到这样 你groups--我按下进入 它不喜欢它 - 但在这里,我们有得到。 并因此获得已经存在。 因此,我们已经可以开始访问 有些人会的元素。 如果我们得到的,这个语法 在PHP中的数组非常类似C。 我们有我们的两个方括号。 所以,如果我们说得​​到一个正常的 数组,我们就可以访问 第零指数,第一索引。 PHP是零指标。 我们可以说零,一, two--这样的东西。 而且我一直在说,得到 在技​​术上是一本字典。 那么,什么PHP做的引擎盖下, 这是比C一点点更好, 是它已经是给你一些 词典功能,这 真的是哈希表, 或尝试,据说。 或者,在技术上它 可以一试为好。 但是PHP正在实施一个哈希表, 形成一个有效的词典。 因此,我们知道这个名字 我们的变量,对不对? 它被传递 通过PHP查询字符串。 我们有A = H且b =克,其中和b 是变量的名称。 这样的方式,我们可以访问 对应于密钥值 在我们的词典 只是说_GET_GET [“一个”。 所以现在我们有_GET [“一”。 如果我们只需更换里面 我们的回声,如果我们回声_GET_GET [“A”] - 我们会如果调试器看到 抛出约this--任何错误 我们将保存并关闭了这一点。 打开它。 所以,我们只是做了正确的 现在,所以B不应该的问题。 “她”和“他” - “哼。” “她”和“哼哼。” 听起来不错。 它打印出来 “她说,”这太疯狂了。 但是,这到底是什么 是发生P中设置6。 基本上,P设定6 是doing--回声你好, name--其中它有一个 变量的名称,它只是 问你在文本的位输入。 以前也有一些 额外的代码在哪里 它包括if语句, 这是我们现在可以做。 我们可以说,如果存在,其 是PHP中的功能, _GET用下划线,“名” - 这基本上是说, “如果名字已经填充了”,因为 我们只需单击按钮 无需提交表单 输入任何内容到该领域。 而我们总结了在我们的 友好的大括号。 我们可以有一个else语句。 而这一切在PHP的角度 支架,问号,尖括号, 如果你愿意。 现在我们可以看到,如果这个工程。 我一直在等待它调试 和废话了我,基本上, 但它没有。 也许这将现在 因为我讲了。 对。 它做到了,其实。 那么,什么也没有显示出来。 这是因为一些错误 我写在PHP代码。 而我所提到的调试 是棘手,因为在PHP中,我们 没有预先编译 而编译器是不喜欢, 这里的地方你的错误。 但是,我们能做些什么 is--做的人记住 如何看待不同的网络 该PHP--或网站请求 发送? [?马林?]这样做的 讲座一次或两次。 你还记得我们去哪里找 不同的债务和200 OKS, 正在发送的所有这些代码 通过HTTP的网页,网页? 曾记否 我们去哪里做? 听众:页面源代码。 SAM LEVATICH:页面源。 究竟。 如果你去页Source--完美的。 所以页面源代码拉起督察。 而我使用的Safari浏览器。 你们很多人大概会 可以使用Chrome或Firefox。 但只要你 在任何现代browser-- 并随时跟进 同时,如果你想要的。 您最多可以输入此代码或 只是看在P组6的内部 目录中一些类似的东西。 hello.php是我们 目前正在仿效。 所以有各种标签。 我们可以看一下所有的资源。 我们可以看到的源代码。 所以看起来它没有 闯过身体到底。 它在PHP中,它发现了一个错误 停止加载整个网页。 我们甚至没有结束 标记HTML或任何东西。 如果我们看一下网络,我们可以 看到我们正在发送的请求。 这是域。 这是地址。 这是一个文档。 我们使用get方法。 而且它是红色的。 或者,它是红色的,当我 不选择它。 我怎么不选择呢? 那么,它是红色的。 让我刷新。 在那里,它是。 现在,它是红色。 因此,它是红色的,这意味着 它失败了,这是不好的。 所以,让我们来看看它为什么失败。 因此,所有的页面源可以 基本上告诉你,是你的事 没有工作,我们已经可以看到。 因此,理想情况下将有 是更为有用的工具。 还有一些浏览器扩展 ,让您的PHP调试, 但我们不打算 可以写一吨的PHP, 所以它可能只是最好的 翻阅你的代码 仔细,只要确保 它没有做别的事情。 因此,让我们来看看,如果这个格式 if语句是问题的所在。 我想加载备份在这里。 你好。 所以这是一个问题。 因此,对于正确的语法 PHP的,PHP是怎么回事 为C类的,你会看到循环。 if语句,你会看到的。 你会看到所有的这些朋友 你已经熟悉 超过课程 这CS50学期。 但是,最好的办法弄清楚如何 做一下PHP是谷歌, 还是要看PHP代码的一些例子 因为你知道的功能。 你知道你能 做的程序。 你可以循环。 您可以根据需要循环多次。 您可以循环中的所有 各种不同的方式。 您可以创建功能。 您可以创建函数 呼叫等功能,功能 那个自称。 而且你的名字,这些概念。 你有递归,循环, 如果,其他的控制流。 所以,谷歌是你最好的朋友。 甚至说,“PHP如果 声明“,并有会 要吨,职位 答案给其他人 谁已经有类似的问题给你, 谁是刚刚开始接触PHP 和好奇语法的事情。 因为我们拥有的是奢侈品 能看P中集6的代码中, 我们实际上拉起来,看到 好了,下面是一些有趣的事情。 因此,这是它实际上 看起来像P中设置6。 因此,如果我们通过这个, 我们可以看到,我们已经 有几个这些小的 PHP般的问号位。 而且不会有大括号。 有冒号。 而且有大 括号中的PHP,但是这 是一种格式和做的一种方式 PHP与HTML效果很好 因为如你所见,我们现在要关门 关闭这些PHP bits--了别人的 而如果和所有that--后的 我们在他们里面穿插HTML 同时还继 控制流设置由PHP。 所以我只是要 通过这个快走 因为它是一个很大的相同 概念,我们之前做的事情。 如果不为空,我们已经得到了, 括号,_GET_GET [“名称”]。 这都是一样的东西。 我们使用的_GET字典, PHP将根据表格的要求, 因为它是的参数 动作,并且该方法是获得。 然后,该结束了。 冒号是一个能指只做到这一点 如果if语句的计算结果为真。 这就像一个大括号。 而事实上,这是一个大括号 在其他语言如Python, 您可能,如果你只是遇到 这样做,对你的最终项目。 然后这条线,你好。 然后,我们已经得到了这个奇怪的事情。 我们有更多的括号内。 有没有HTTP那里 - 或者PHP,对不起。 但有一个等号。 然后我们有一个函数, 用htmlspecialchars(_GEThtmlspecialchars(_GET [“名称”])。 这有点像一个更 高级版本回声。 就像我们已经回应的一种方式 打印出来的东西在PHP。 这是一个函数,是 在PHP中定义 将处理一些更讨厌 字符和字节值 你可以通过它。 它总是最安全的使用。 但是,回声会做的工作 就好了,如果我们不 处理任何事情太讨厌。 所以这具有相同的 基本上效果, 这个东西在这个问题之间 标记是由PHP评估。 用htmlspecialchars返回一个不错的HTML _GET_GET [“名称”],即印刷价值 无论我们输入的形式。 然后它会打个招呼, 逗号空间,然后将该。 之间的整个事情 尖括号 将取代任何 用htmlspecialchars推出。 所以这是基本相似 以我们正在做的。 我们有一个else语句是 世界你好,这是有道理的。 所以,现在,让我们回到我们 代码,看看exactly--哦。 我说存在,这是不 一个事情,我们想做的事。 我们想说的话不是空的。 所以这应该有点 好一点,不为空_GET_GET [“名称”]。 而这大括号 匹配大括号。 现在我们得到我们的大括号内。 回声你好_GET [“名称”]。 让我们来看看这效果更好一点。 我们仍然运行在我们的服务器。 您好杰森。 您好杰森。 和它的工作这一次。 所以这是一个证明 你的确可以 使用大括号,你 熟悉和喜爱在HTML PHP代码。 提供给PHP代码 您在PSET 6-- PSET 6-- 提供了另一种方式 这样做同样的事情。 所以,现在我们有力量。 我们有功能来实现 我们在PSET 6看到的PHP代码 由我们自己,基本上是这样。 在我继续前进,有哪些的 你必须在这一点上的问题? 是[听不清]。 听众:所以在pset6的版本, 当你运行它,有一个空间。 我能看到的空间 后面的逗号。 [听不清]启动 开放的支架。 你怎么把的空间 你写你自己的代码的方法是什么? 演讲嘉宾:这是一个很好的问题。 因此,让我们明白这一点。 所以这是一个非常好的问题 一,我没有考虑。 但是,让我们一起做吧。 所以首先,是什么 我做的回声 当我们刚刚回声 你好,你好输出。 如果我们现在呼应这个获得独立 行,让我们看看会发生什么。 所以我们点击这里。 我们一直在说,喜贾森。 所以,再一次,我们没有这个空间。 那是因为,在 PHP的,当我们有回声, 无论有多少 spaces--不,不是V-- 无论有多少空间,我们投放 这里 - 如果我们现在再重新装了起来, 喜贾森。 是啊,看,所有这些 空间得到了吃掉。 而这件事情, 回声功能一样。 所以要照顾 空间,而这是 的原因之一 你为什么不使用echo 并使用用htmlspecialchars代替。 我很好奇会是什么 如果我们没有这种情况发生 在这里我们封闭在一个字符串的空间。 我真的不知道是什么 当我这样做会出现这种情况。 所以,这是一种方式。 这是要照顾它的一种方式。 如果包裹的空间 一个字符串,则空间 将输出很好地通过回声。 做最安全的事情是 做用htmlspecialchars。 这始终是安全的赌注。 但是,现在我们有办法做到 它的回声,如果有必要的。 并以类似的方式,我们可以 回声新的生产线,所有的排序 东西你熟悉做在PHP。 任何人,什么是更多 问题是其他人都 在这一点上关于PHP? 如果人们出现了一个有点晚, 我很高兴留后一点点 说说一些开始。 而且这也是所有livestreamed, 和存档,这太疯狂了。 无论如何,所以现在让我们做一些 更先进的东西用PHP。 而最早的事情之一,你 被引入到C组的循环。 和PHP拥有更强大的 所谓循环foreach循环。 它看起来像this--每空 为空白,大括号,该做的事。 因此,这基本上是一个简写。 你看,在for循环中一 句法结构 被设计在C和汇编 语言之类的东西。 设计出C,准确的说,作为一个速记 对于很多循环的类型的 人们会看到的。 当你写一个循环,有没有像 常常是一个初始化步骤 一开始,右执行 调节在环路将stop-- 这就是功能 这只是在一个while循环, 或者说一段时间恰有 只是feature--然后 一个增量步骤在末端。 所以你会经常发现自己 编写代码如下所示。 我要删除一些这方面的。 但是,如果我们迭代通过 以阵列的字符, 举例来说,像我们已经 得到的字符阵列。 对不起带回C.我知道, 你以为你做了。 但是,这只是为目的 学习PHP的,我保证。 所以,如果你有一个char海峡 长度为8,让我们 说这说Hellooo 后面有个空。 太好了,所以这是我们的字符串。 然后我们有一个for循环。 我们是int i等于0。 我们想退出str的时候 我等于不等于空, 因为我们退出的时候它等于空。 然后我们做我++在每 点在for循环。 做一些与我海峡。 因此,基本公式是, 我们有这个数组,我们 想当作单独的元素。 但是,我们必须做的是,我们不得不 基本上创建一个单独的整数 变量是计数每 一次,我们通过循环去了。 然后,我们就必须再调用 的strstr [我]当我们真正想做的事 刚去的性格 按字符,对不对? 我们不希望增加的 整数,然后使用该整数 访问每一个字符。 我们真正想要的字符一个字符。 所以,每个智能 计算,对我们来说。 如果我们有一个数组,其中 我们可以在PHP声明 作为just--如果我们有一个变量 所谓的,让我们称之为数组。 不用打字的奇迹,这是 就像任何其他变量。 这只是一个数组。 我们有一点点[听不清]像1, 2,3,只是一种初始化数组。 这是确定的,它不喜欢我的foreach。 但是,如果我们foreach--实际上 我输入了一个有点不对劲。 有两种方法可以做到foreach循环。 还有的在语法和作为语法。 而我们要做的 首先在语法,还不如。 这是我的错误。 在阵列所以的foreach NUM,回声NUM。 而PHP吼 我出于某种原因。 它的发现一个意想不到的 在东西, 这是一个麻烦一点点。 但是,我们会找出 这是为什么在某一时刻。 所以不喜欢这样。 让我们尝试使用的。 它更喜欢的语法似乎。 因此,让我们做的foreach阵列为num。 那么一点点的解释 对刚刚发生了什么 是因为语法saying--那么首先, 让我们来看看这是什么打印出来。 因此,我们打开我们的IDE。 我们去这里。 我们说,你好杰森。 它做到了123,这是内容 我们创建了上面的数组。 因此,在深入这个foreach循环, 我们有一个可变称为阵列 这是三个数的阵列。 然后,我们正在做的foreach 阵列为num,回声NUM。 而这更 直观的比对LOP。 我们说,对待每一个 事情的数组NUM中, 我要你给我的NUM。 而这也正是它在做什么。 PHP是计算的 当你说的foreach阵列, 而你处理的是一个数组,什么 你将要遍历 是在该阵列中的字符, 在该数组的整数, 是在该数组中的元素。 而且它让你存储 这些变量为num, 然后只输出NUM 马上而不是说, 我有一个叫我的变量, 那么我想输出的strstr [1]。 所以,让我们做很酷的事情。 基本上一样,我们没有创造 这些变量像我的,并尽一切 这个增量的东西在最后。 PHP需要照顾所有这一切为您。 所以,现在让我们来谈谈的foreach作为 它适用于我们_GET字典。 因此,我们将快速地注释了这一点。 因此,我们有我们的_GET数组。 我们有这个变量。 而且它有它的一些东西。 现在,我们只有一个变量 被传递到它,这是名称。 但是,如果我们按Enter键,现在 我们可以有两个变量。 我们可以有姓名和年龄,例如, 如果我们想获得的年龄,也 一个人的名字,有趣的是。 所以,现在_GET将是一个 字典中有两个元素, 有两个关键值对。 而第一key--我要去 写这篇文章一上来就板了。 我们有我们的字典是_GET。 对不起,这是一个有点难以看到。 但是我们的字典里面,我们有 名字,这将是什么 我们正在给定的。 我们将有年龄,这也是 将是我们正在思考的东西。 这就是整体 我们的字典中。 所以它有它的两个元素。 所以,因为的foreach 循环是聪明的,我们 可能会认为,正确 可能会认为的foreach 可以通过这个迭代 字典,打印出 给出姓名和年龄的值。 因此,让我们其实做到这一点。 让我们构造一个foreach循环。 而我们要做的_GET的。 而我们要做到以下几点。 因此,让我们看看如果我们输入会发生什么 只是字,然后说回声字。 我们也将呼应新行 这只是为了更清晰一点, 这是怎么回事。 所以,让我们来看看。 它没有给我任何错误。 我们将关闭此。 在我们的网站,你会做 很多,超过pset7的过程。 所以我们说我的名字叫萨姆。 我的年龄是45。 不是。 但它打印出来,符合市场预期,萨姆45。 所以你会发现, 什么foreach循环在这里did--, 让我们回到那个,所以它的 在board--我们得到_GET的字。 并有四样东西在_GET。 但只打印出两件事情。 的foreach,是其智能的自我, 假设我们真正想要的 是数值,而不是键。 但有一种方式,我们可以打印 出键为好,如果我们想。 如果我们想也知道是什么 这些变量被称为, 有一个办法,我们 可以访问这一点。 而方式排序做到这一点, 所以我们可以说,让我们真正 它拆分成键值对。 让我们看看现在发生了什么。 因此,我们有钥匙。 我们的价值。 我们有另一个新 行以提高可读性。 让我们看看会发生什么 当我们这样做了。 我不知道贾森有多老。 Jason的15。 因此,我们有名字杰森,15岁。 所以我们能够访问该键 和值对本词典 刚才说的关键点值。 这就是一个foreach语法 糖位,使 您访问在字典中的东西。 因此,希望这种强调 foreach循环的力量。 你几乎可以扔 事情,似乎可迭代的, 像什么,有多个 像数组中的元素, 像dictionary--这是两个 你将要使用的主要的事情 无论是在生活和PSET 7。 所以,你可以扔的东西 它,它会找出 你想用它做什么。 它会说,好吧,我会得到 这些东西从数据 传递给我。 而这,你是什么 要在PSET 7使用了很多。 我要快速滚动 下来正好看到我在哪里。 人们是否有在这一点上的问题? 在所有的问题吗? 是? 听众:所以与键和值, 你能说出它什么都重要 它仍然工作? 演讲嘉宾:哎呀。 哇,我完全删除整条生产线。 做得好。 所以,一个。 键和值仅仅是一个惯例。 这是有帮助的。 你会得到一些设计 点,也许有些造型加分 这样做,因为这 真正传达的意图。 但是,我们说和y​​arp。 听众:你不必 在HTML文件中改变什么 为了反映? 演讲嘉宾:不是。 听众:它只是知道 因为等于更大的than-- 演讲嘉宾:是的。 听众:那that's-- --that指标 演讲嘉宾:是的。 这是一个foreach语法,惟命是从。 听众:有没有类型。 所以,如果你想要的是什么 年龄只是一个数字? 有没有办法做到这一点? 演讲嘉宾:有办法检查 变量符合一定的类型。 所以PHP请求从多一点 你因为没有类型研究。 某些方面,它要求较少。 在某些方面,它要求更多。 因为如果你刚 东西在变, 你不知道它是什么类型。 但是,如果你是聪明的变量 您分配类型,并确保 该功能仅re​​turn--您 要功能只返回 一种类型的值,以便 你基本上可以 预计该变量你回来 从函数将是类型 你觉得会,基本上是这样。 但也有一些方法 通过它,你可以检查。 我不记得他们 从我的头顶。 我等着它变成蓝色。 isint? ISSTR? 有方法 内置入PHP可以 检查你的变量的类型。 但是,如果您分配变量 聪明,你不应该 要做到这一点太多PSET 7。 但这些方法确实存在。 而这件事情, 在语言本身。 我不记得确切的语法。 我们甚至可以查找。 但是,时间是至关重要的。 有没有任何其他人 有什么问题吗? 是。 听众:我只有一个了。 所以你提到的GET方法,但 你没有提到的POST方法。 难道我们回来了吗? 演讲嘉宾:是的,我们将 可回来了。 这正是我一直在寻找 在我的电话,现在睡着了, 但我会找到的。 只是确保我们打 所有的PHP笔记。 是的,没有调试版本。 是的,我们有一些更多的东西, 我们现在要做到这一点。 因此,谈到POST, 你所提到的, 唯一的区别 之间的GET和POST是 该记得,当我们看着 在此URL,我们看到,哦, 名等于和年龄等于yarp 是正确的网址为我们那里。 POST是多了几分神秘的 其传递的信息。 所以,如果你不想用户 要知道,比如说你 不想用户名 和该人的口令 当前登录到显示在 的URL,这是一个合理的事 到不希望在URL, 因为对方能看到它。 如果有人链接到一个网页,你 不希望自己的网址贴满了那里, 因为这将让人们登录 只是一个URL的粘贴,而不是 实际上填写表格。 POST是有点更隐秘。 而唯一的东西, 我们必须改变 此方法,改变 从得到张贴。 然后在HTTP里面,而不是 访问阵列_GET的, 我们要访问阵列_POST。 我们会发现,如果 我们打​​开这再度回升, 杰森缓慢下降的年龄。 杰森的名字,14岁。 同样的东西弹出。 但我们去的网址, 这些变量不存在。 而方式POST passes--所以要记住 如何看待一个页面的源代码。 我们去到网络。 我们刷新。 这是另一件事, POST将要给大家介绍的警告。 你可能已经看到了一个箱子,一个文本 盒这样的浏览器。 你确定你想 再次发送的一种形式? POST是的发送这些表格。 因为基本上,如果你发送的 信用卡信息的人, 这不是要显示在URL。 这将是一个POST请求。 所以,当你刷新页面, 它重新发送POST请求。 所以,现在我们确实想发送 再次形成,因为它不会 创建任何重复购买。 我们会发现,到这里, 我们使用的方法是POST。 它确实传输字节。 它转移其中的401。 计划漂亮的渺小。 但是,没有什么地方,我们可以看到 正在传递的值。 该网页本身可以看出, 但我们作为用户不能够看到, 除非你是一个黑客。 如果你是一个优秀的黑客,你可以看看。 如果你知道基本 在HTML格式, 该值将 自己在页面知。 你就可以看到。 该值将在那里,他们是 只是一个小的你不太明显 访问,基本上是这样。 我们有更多的 有关GET,POST问题 before--就是我们接下来要做 实际上是看一些代码 那你给pset中7,说说 它如何使用这些概念, 而谈 东西,你会 有做的pset 7一点点。 在此之前,还有什么问题吗? 你们更多的问题有哪些? 大。 好吧,让我们来看看 在PSET 7一点点, 毫无疑问,你是什么 所有最激动的。 我的意思是,这是一件 大卫经过一点点。 但是,我们必须在三个目录 顶部,以及一个配置文件。 这对数据库,我们将 在大约五分钟谈。 包括,你永远需要 看此目录中 如果你不想,但它是很好的 知道有各种各样的帮手。 助手就像是有帮助的功能。 然后我们有配置, 其中设置一些东西了。 有一些功能CS50具有 撰文指出,在助手和配置。 而一些PHP的那 已经存在的文件 会做很多更几分 为您的钝专家组的工作。 就像如果我们进入公众 的login.php,这是什么 显示了权当你进入PSET 7。 我们会看到有 这需要声明。 这有点像 犀利包括,包括hashtag 包括如果你是一个新的一代。 但是,这基本上 说我需要访问 要在config.php所有功能。 你可以有一个要求 对于各种各样的其他东西。 配置实际上需要帮手。 所以每当你需要 配置,你也 其中,也不需要助手为好。 这样,您可以访问所有的 很酷的功能,我们要使用, 事情喜欢渲染。 实际上,我来缓解 下来一点点。 所以,函数,那么我们是 要穿行 就在我们移动到SQL一点 位是login.php中的功能,只是 因为它使用的一些话题 我们刚才谈到了PHP。 你看到的第一件事情是,如果$ _ SERVER。 这又是一个全局变量, 你将要处理。 这就像_GET和_POST,但什么 服务器包含在这可以让你 知道如果请求方法 是一个GET或POST的。 就像以前我们在做什么 就在我们的代码,我们写的, 我们只是改变它是GET和 POST取决于什么HTML有。 但也有可能的页面 与这两种类型的请求访问。 你可能想要做的 根据不同的事情 上的请求的类型, 就像登录一样。 所以,你可以检查的要求 通过访问密钥的方法, 通过使用键和获取 东西在字典中的价值 _服务器。 所以这是另一次全球 变像_GET和_POST。 如果我们得到,我们要 呈现登录表单。 渲染是一个函数,基本上 刚搭设相应的HTML 并将其传递一些参数。 这个称号是一个参数,它是 在显示,奇怪的是使用, 网页中的标题 问题的东西在这里, 说还是招呼我们上面的例子。 现在我们有一个不同的东西。 否则,如果它的文章中,我们 做一些其他的东西。 我们使用的空方法。 它是不存在的,它是空的。 而且我们看到之前,PHP 有建相当数量的 在方法大卫will--如果有 是那些对你有用的方法, 他们会提醒你 通过大卫走 给出一开始概述, 也Zamyla的有益位。 她回来了每一个人。 我们都感到欢欣鼓舞。 道歉是适当命名的功能 这基本上只是打印出 一些错误消息, 因为CS50很有礼貌。 而现在这个,这是一个 因为这有点棘手 在这里我们要查询数据库。 现在,我们还没有谈到数据库。 而我们将在接下来的 五分钟左右,最大。 但是,这是一个函数 这CS50写 从数据库获取表基本 我们正在pset中7个有。 我真的很糟糕我 零索引今天。 但是,是的,这是7。 因此,查询它会返回一个 阵列,主要是键位。 而且因为这些东西没有 打字,所以行是一个数组的数组。 因为当我们正在考虑 一个表,我们将做什么 是,当你在pset中了解到 喜欢游戏的15,反正 在这里你不得不使用 双阵列,我们基本上 还有其他的数组 阵列来生成表。 而且你有行和列。 然后你就可以访问它们像 [0] [1],你得到的[0] [1]。 基本的东西一样。 所以,我们在做什么 这里在此功能, 我们要求数据库 如果用户那 试图登录,这将是 通过POST方法发送。 我们会看到我们得到 用户名从彦博。 他们将有发送,用户 或者你会送一个价值 穿过POST一个形式,因为 它的用户名和密码的东西。 我们正在检查用户名 看,这是在表中? 因为,如果用户正在记录 在,那么他们的用户名 应存储在的表 存在此网站的用户。 所以基本上,如果 用户是在数据库中, 查询是否会返回 该行,这是一个数组。 但棘手的问题是,如果即使 双阵列只有一行, 即使它是一个行array-- 就像你有basically-- 如果你有一个大小为一数组 这是抱着另一个数组, 你真的处理的一列。 但它仍然是处理 就像一个双阵列。 而这正是它有时可以得到 棘手的,因为现在我们得到的行。 我们的变量行。 然后我们要创建 一个新的变量叫做行 并将其设置等于 行的第一行。 而且你会发现,意见 说,这是第一个也是唯一的行。 因此,这是很棘手 部分在哪里,现在功能 可以返回数组非常容易。 这里没有mallocs。 你不会看到mallocs。 所以你不会看到赛格故障。 但是功能仍然会通过 围绕阵列和数据分组。 而且你必须要警惕的是什么 正是你的函数将返回。 即使它的One 类似这样的专栏,查询 仍然会返回一个双阵列。 因此,要访问该column--或者您 能想到这一切作为倒 因为我们正在谈论的行。 但访问一行, 你不能只是说行。 即使是一排,你必须 样的不rowsrows [0]来消除这种 阵列的外位和 刚才你一行。 做一些其他的事情。 有一个函数 所谓password_verify 这验证 密码被张贴。 然后,我们看到另一个全球 可变这里,_SESSION。 基本会话ID 你是怎么保持跟踪 如果有人登录与否。 所以现在用的login.php, 我们正在登录的用户。 所以我们想要做的是我们要 说会话ID是等于行 ID,这很有道理,因为 每一行都会有不同的ID 号作为表的一部分。 我们将进入SQL中 第二,因此,如果任何的这 似乎是胡说一点点, 那么一切都将被清除了。 但是,我们要设置id等于 正确的事情,登录用户。 很抱歉,如果有什么差错。 这是在登录的目的 生活马兰教授会说。 所以这是的login.php。 和很多你写的PHP代码 在PSET 7,他们会一点点。 不要忘记chmod命令 适当的权限。 将有大约一点点 在规格中的开头。 但是,你的PHP 写入将是 做的东西,这与此类似。 你会成为 访问一些事情, 在是给你 PHP的全局变量 正在处理当前 登录的用户,是否有 有发送到这个被请求 页上,这样的不同的东西。 它也将是潜在的 迭代通过行的这件事情。 在一个不同的功能,查询 不会返回这双阵列。 如果有更多的 比中已有一个行, 如果有are--是,如果有 在它超过一个的行, 那么这将是一个表。 你可能要遍历 在这个数组中使用的行 我们描述的foreach循环。 所以,如果你做的foreach上双 阵列,会出现什么word--在这里, 我其实写。 我会写它很快在这里。 如果我们有行一个foreach 为行,什么是行的类型? 有谁知道? 你说对了? 因此,行是一个双阵列。 那么,什么是的foreach去推断 我们从该双阵列希望 如果我们遍历了吗? 我们基本可以假定, 这将是两种元素, 或行或列,基本上是这样。 所以行和列的我们 可以当作一回事。 基本上什么foreach循环是怎么回事 做的是它会返回行。 行会是类型行的, 而行是一个双阵列。 所以,如果你给的foreach 双阵列,它的 不会迭代 不止一层。 这基本上是,如果说有 八个细胞在这个table-- 1,2, 3 4,5,6,7,8-所述 foreach循环不 要去通过每个这些细胞。 什么foreach循环会做 是它会经过此行, 给你这个整行。 然后它会通过该行。 因此,它只能迭代一层。 如果添加了嵌套 foreach循环,那么你 可以把从返回的每一行 行,你做的foreach行作为元素, 比如说。 然后你可以呼应的元素。 所以这是一个简单的 如何少进修 你可能会使用的foreach 循环中的查询的上下文。 是否有关于PHP什么问题? 任何事情之前都我们 转移到谈论的SQL 和数据库的乐趣? 感觉不错? 感觉不错。 好吧。 让我们在回移到 PowerPoint中,您可能会错过。 SQL,耶。 人们谁是我的部分典型 就知道缩略词的副标题 永远只是第一个字 我认为,比赛的 算法 - 这首字母缩写。 这不是一种算法。 因此,SQL是一种数据库。 它是一种语言, 适用于数据库。 并且所有数据库都为 表,至少在方式 该SQL代表他们。 另一种方式来思考数据库是 数据库是一组键和值 基本上。 你可以想想一个数据库 一个词典,也可以作为表。 基本上这是一个方法,关联 不同的数据与其他数据, 常常通过行和列。 这就是方式 这是SQL效果最好。 因此,这是一个表的一个例子。 我有几个例子 人在我的部分,它 我没有时间来改变。 但是,我们已经有了像ID, 名,超级大国,和家乡。 我不知道任何人的 从我的部分, 所以我只是要承担 每个人从纽约 市,因为我有很高的统计学 可能性是正确的。 SQL会自动取 关心你的ID列。 如果您插入新行 成一个SQL数据库, 这将增加的 ID号和刚 基本上坚持到五的名字, 超级大国的故乡,谁就 到该表的末端。 所以,ID是一列,你会 永远不用担心。 但是,像在的情况下 login.php中,当我们 都拿到会话ID 从表中,只是用ID, ID是一种方法,唯一地标识 一个数据库中的一个元素。 因此,如果我们有两个萨姆斯,两者的 这本书教会了CS50,以及两者的谁 来自密尔沃基,那些会 还是有不同的ID号 因而是不同的 表中的情况下。 因此,这是SQL正在处理 有,在后端工作。 现在,这些都是四个命令 ,你需要使用SQL工作。 而我把它们全部在一个幻灯片。 但是,我们要经过 他们都分别。 第一个命令是UPDATE, 这不,你可能期望。 说你有一些数据 该表是过时了。 如果你保存像 赛道人的名字 和年龄,如果谁家 年龄的增长,那么 你会想进去, 更新只是人的年龄。 对于工作的例子 我们的第一个table-- 不用担心写的是 这些命令在同一时间。 但是,如果你有更新了, 这将有利于这部分, 因为我们要 回到表。 因此,如果我们回到桌子上, 比方说,事情发生 在发生地震或 断层线直接拆分 通过纽约市。 我们想更新大家 谁住在纽约市。 他们都不得不搬到宾夕法尼亚州。 这不是一个故乡。 他们都不得不搬到纽黑文。 在那里,我们走了。 所以每个人都在纽约 移动到纽黑文。 而这样的东西,是 编辑该表中三行。 但在SQL中,你可以做 在短短一个语句。 因此,我们重新更新。 让我再次快速擦除这款主板。 当我们谈论 更新,有 一些部件是关键的语法。 好了,所有的语法是关键。 但在绿色的东西是可选的。 白是必需的, 像预定义的名字。 而淡蓝色的事情 根据表而变化。 所以,这就是同回事 配色方案在这里,那里。 因此,如果我们要更新只是那些行 谁住在纽约的人, 所以我们想,如果我们说的更新呢? 因此,表是我们放 我们的表的名称。 远的不说名字 我们的表是表中的一个。 因此,我们要更新表之一。 我们要set-- 我们需要什么设置? 好了,我们想说的是,这么column-- PHP 把行作为唯一标识符。 然后列 不同领域 的数据库的那些元件。 这样的数据库的第一元件 有山,CS50的超级大国的名字, 和雄鹿的故乡。 所以如果我们所说的设置,让我们来看看 再参数设定需要。 我们有列等于价值。 因此,我们要说出一些 column--这记 是field--我们希望看到一个 字段等于新的东西。 因此,如果我们刚才说的更新 表1,设置名称等于艾略特。 得到一些人的 在这个新的章节。 但是,如果我们只是做了更新表1 集名称相同艾略特,会是什么 该表的样子之后呢? 人们有什么想法? 是啊。 听众:一切都在那 行会成为埃利奥特。 演讲嘉宾:这行的一切吗? 听众:在第一行中。 扬声器:在第一行? 为什么第一排? 我不是说要接你。 听众:也许一切 在整个表? 演讲嘉宾:一切 整个表,是的。 这是完全正确的因为 - 我 刚刚帮你出一点点 那里 - 因为我们忽略 可选的WHERE子句。 如果你没有在WHERE 条款,这是什么命令会做 是它会与每 在表中的一行。 每个人的名字将 成为埃利奥特,基本上, 这艾略特是非常高兴的事情。 或雅尼,两个中的一个。 但是,每个人的名字会发生变化。 所以这样我们使用WHERE clause-- 这适用于所有何在的 这是在每个 这些不同的东西。 所以,你会发现,SET 有列同等价值。 所以呢在哪里。 但这些不同的 类型的语句。 因此,列等于值 在SET中分配。 就像我们说我们要 设置名称等于埃利奥特。 但在WHERE子句, 这些都是平等的陈述。 所以我们可以说,我们只是想 改变人的名字埃利奥特 如果他们的名字是瑞恩,让我们说。 所以,当我们说 其中name等于瑞安,那 成功将唯一的变化 在name--那只 改变行的名称字段 其中名称字段等于瑞安。 所以,如果我们有多人 名为瑞安,他们所有的名字 将改变埃利奥特。 这是类似于实施例 如果断层线分裂 纽约市和每个人都有 搬到纽黑文,一路上我们可以 这样做,在一个语句是UPDATE 表1 SET家乡=纽黑文 其中,故乡相当于纽约市。 这是功率 UPDATE语句。 我们可以选择任意数量的 通过真实的陈述行 关于在那些行中的字段。 我们不能说UPDATE表1集 名称=埃利奥特其中row = 1, 不同之处在于,我们可以的,如果我们说的ID = 1。 因此,我们将要 平等合作 字段,列平等。 但使用ID字段是一种能够 选择单个行具体而言, 因为ID字段是一个唯一的 标识符在SQL数据库中。 因此,如更新一行,ID等于1。 更新两排,只 改变该ID号。 但是的力量 WHERE语句是我们 可以基于什么东西更新其 对某些事物的电流值。 是艾略特? 听众:如果你想用于:什么 再次,这是另外一个问题。 但我的第一个问题是, 其中,出现这样的情况? 我在哪里升级呢? 这是在一个PHP代码? 演讲嘉宾:你在哪里更新,是的。 我们要谈 在哪里这一切 发生那种一旦我们去 通过所有的命令。 但是,你需要什么 知道现在基本上 您的SQL数据库 存在的东西 到由查询来访问 功能,这CS50定义。 如果你使用的查询功能,因此, 你可以访问此表。 所以,你会发送这些 命令你的表中的PHP文件 通过查询功能。 您也可以玩 与你的表直接。 这就是以最好的方式 测试这类命令。 我们将经历究竟如何 要做到这一点的只是一点点。 所以这是UPDATE命令。 和命令的其余 将要排序相似, 从事类似的事情。 在INSERT INTO可能 最不同的更新。 我要离开了那里的 只是一点点和工作在这里。 所以INSERT INTO,你会看到 该表仍然是相同的。 你想插入到。 资本化,SQL 不区分大小写。 所以,你不必 利用这些东西。 按照惯例,词语 白色予以资本化。 但我也颜色编码他们。 你利用的唯一原因 这些,当你键入它们 只是强调 这些是常数。 所以你可以看一下 资本或事实 我已经不同颜色的他们。 所以,我们已经有了INSERT INTO, 让我们再来一次表1。 这是所有在一行上。 我只是通过分离其 不同的语句。 所以,不要担心的是, 表1使它到第二行。 因此,我们要插入 INTO表1中的值。 你会发现可选 位,我会在第二。 因此,我们已经得到了价值观。 所以我们可以说,我们要添加安迪 我们的表,因为我们错过安迪。 安迪生病。 因此,让我们加入安迪到我们的餐桌。 请记住,ID号 自动更新。 因此,唯一的领域,我们 需要担心 包括名称,超级大国,和家乡。 所以我们这样做的方式, 看着我们的语法,是我们 只是得到了括号,用逗号 分隔值,其中每一个 是一个值。 因此,如果我们想安迪插入到我们的 表中,我们所要做的就是正确的安迪。 什么是安迪的超级大国, 人们在安迪的部分? 她喜欢飞行,还是喜欢 速度,什么的。 什么是我们已经在那里? 我们有CS50,飞行, 速度和力量。 听众:时间旅行。 演讲嘉宾:时间旅行,令人叹为观止。 因此,我们已经得到了安迪,时间 旅游,和她的家乡。 这是一个非常好的问题。 纽约市,除非有人知道。 每个人都是从纽约的 教训从今天带走。 所以,这种说法会 插入,作为第五行, 与超级大国时间旅行 和纽约市的故乡。 但可选字段 基本上是一个方式 准确指定哪些列 要插入的东西研究。 我们正在做它现在的样子, 岸堤,时间旅行,纽约市, 打算在的确切顺序我们 table--名称,超级大国的家乡。 如果你想做的事 东西以外, 好比说,你不知道 别人的超级大国, 像我怎么不知道安迪的 超级大国开头。 所以,我只知道她 的名字和她的故乡。 我能做的就是我可以 do--我会删除这个快速。 我想只更新列。 而这正是可选 列清单的用武之地。 我只是想更新的名字和家乡。 然后我会说价值观。 我会做安迪和纽约市。 如果我忽略列的列表 而刚刚做这两件事, 其中,将纽约市都到哪里去了? 这列将纽约 市被放置在? 人们有什么想法? 超级大国,没错。 因此,这将刚进去的顺序。 而一旦它到达的结束 列表,它会只停留填充物研究。 而价值观,它会坚持在 所有列也只是空。 所以,因为我们规定 名字和家乡, 我们将有ID 5, 安迪的名字,超级大国空。 所以超级大国是未初始化值。 你不一定会得到 如果你尝试相同的Valgrind的错误 并访问它。 一切都将被很好地归零 出来,因为NULL是SQL中的价值。 这是一个常数。 然后,家乡将纽约市。 所以这是INSERT INTO命令。 在我们继续之前,有 两个命令。 人们是否有任何问题, UPDATE,关于INSERT INTO,有关SQL 一般在我们继续之前 到我们最后的位? 人们感觉很好,很棒。 爱它。 因此,让我们来谈谈选择。 去沟更新在这里。 并选择将是非常相似的。 选择的目标, 在人生选择的目的 就是给你一堆列 满足一定的条件。 当我说满意 某些条件下, 你的心可能会立即 回到那个WHERE子句 在UPDATE上来。 这子句 正是有在SELECT。 如果我们不把WHERE 条款和我们说选择名称, hometown--拼了一点点 wrong--名字,家乡FROM表1。 如果我们只是说,有什么选择 是想给我们的是它的 要给我们 double--一个表,而。 双数组,如果我们 想在PHP检测。 但它只是要给我们 两个columns--名双阵列, 和家乡。 它会忽略ID。 它会忽略超级大国。 而且它会只给我们每一个 该表中单列。 因此,如果我们只是插入 岸堤,我们将有安迪。 我们将有原四。 如果他们一直在更新,这将 被反射,等等,等等。 因此,这是因为我们 没有使用WHERE子句。 但是,我们可以在完全使用 同样,我们用它在更新。 如果我们只希望名表 与人超能力的生活 在纽约,我们可以执行一个语句 像选择名称,superpower-- 我只是要离开that-- FROM 表1 WHERE家乡=纽约市。 因此,这正好说明,你可以 得到完全不同的列, 然后把列,你是不是 即使取回WHERE子句。 我们甚至不希望 故乡大家。 但是,我们希望的名称和 人们的超级大国 他的家乡纽约市。 所以,这是我们 可以用在何处? 子句,我们可以列处理 我们不一定要回去。 在UPDATE同样的方法,我们就可以处理 与列,我们不一定 要进行更新。 我们可以更新这个城市所有人的 谁的名字是山姆,例如。 我们可以更新的城市 每个人的ID号为2。 所以才更新 市第二排 在这里,我们没有处理 必要时常见的问题。 和删除的,因为你会 预计,DELETE FROM表1。 然后我们有另外一个WHERE子句。 所以我们可以说WHERE ID = 1。 删除的第一行。 并删除将始终删除行, 或者,将删除的行的一些数。 DELETE FROM表WHERE 家乡=纽约市 将删除每个人都在纽约市。 这就是,如果有一个 突如其来的悲剧瘟疫 而你只是想删除 大家从表中谁 生活在某个城市 被击中的瘟疫。 愿他们安息。 这些是四个SQL命令 你将需要使用。 你甚至不需要使用它们。 但这些都是四 这CS50希望你 是舒适与进入 这两个测验1,也pset7和pset8。 这里只是表了。 在这其中,罗伊的超级大国 被更新,以激光束,它 是一个例子,我没有使用。 我不知道哪一个 罗伊喜欢,而是实力。 罗伊有实力的超级大国。 凯瑟琳没能成功的今天。 那真不幸。 但她具有超强的速度。 嗯,这是PHP。 在我们讨论MVC,不 任何人有关于PHP的问题? 现在SQL或PHP,如果你突然有 拿出一个关于PHP的问题? 大。 好吧,我们都设置即可。 所以说话有点 关于模型视图控制器, 让我们回到一些 在pset7的东西。 那么,什么模型视图 控制器is--我不是 要救我的修改登录 因为我完全屠杀了。 但基本上我们有两个 独立的东西怎么回事。 我们有一个公开 目录中包含 代码,那将被执行 并且,将要访问的网页。 而且我们也有这个意见的目录。 和视图中包含的模板。 这就是功能 render--我们看到了渲染 在一堆的PHP代码的功能 这CS50已经为你写的, 该取入某些参数。 什么代码正在做 在它进入的观点, 这是一组像 预写HTML代码, 和它的插入值 到某些地方。 这就是当你 进入CS50金融, 相同的标题是每一个页面上。 同样的页脚是在每一页上。 这是因为这样 这使得作品是它会 在头自动修补和 浏览器,你可以在视图中找到。 事实上,我们可以进入标题, 看起来,这是一个头的HTML文件。 它有一些样式表。 你并不需要看的CSS 为pset7,如果你不想。 但是你可以修改 他们,如果你想,做 您的财务看起来有些不同。 它有一些PHP的 头有点看 如果有一个不同的标题 应该把这个头。 但只是一些其他脚本, 和链接,和其他的东西。 头端,身体开始,并哎呀, 我们有这个古灵精怪的小端位。 而且还有一个div,就像 一个无形的元素种类 这中间有一个想法。 然后,当我们看到尾, 我们有一个div的末端。 我们有一个底部,这是 其中页脚文本。 结束DIV,身体结束,HTML月底。 那么,什么渲染是 做的是呈现几分 修修补补的头,一 不同的PHP文件 将包含实际的东西, 你会看到,像你的股票的表 如果你是购买或出售股票。 然后,它会添加在页脚。 而模型视图 控制器的想法是,我们 要分开怎么样 事情看起来从代码。 这是我们要分开的前端 和后端,其中,前端为 用户可以看到的东西,漂亮的 visuals-- HTML,CSS,这样的事情, 图像,等等。 而后端PHP。 这是你写的代码。 这是其中的代码那 这样做的实际行动。 这是当你添加 一只股票你的表, 当你买进 销售,这是后台。 我们可以,就像你看到的, 直接包括PHP在HTML中。 因此,我们可能会对做 这种指派刚 对于每一页的HTML文件,像登录。 然后在该网页上,只 有PHP代码巨大的块, 包括所有的代码是 该网页特别需要。 然后,我们可以有 做到这一点的投资组合。 我们可以做所有的买盘 和销售的各个页面中。 但是,因为我们正在绘制 分别从哪儿 我们正在编写后台 代码中,我们可以很容易地 改变的事情怎么看不 改变每一个文件。 我们做这样的事情只是添加 一个新的div底部 of--你好,我修改了脚注。 你可以做类似的东西。 但同时,你可以改变 整个视觉布局 在不影响什么 要在后端。 你可以改变 整个后端,仍然 有它看起来就像以前那样。 本 是模型视图控制器的想法。 它实际上是一种强加的范例 在一些编程语言 你可能想使用 最终项目。 如果你这样做iOS开发, 他们有意见, 这是你在​​iPhone上看到的, 那么后端的像一个独立的东西。 你可以想想一点点。 有很多的二进制文件的 计算机科学,这是有趣的, 因为一切都在二进制。 我不打算说。 这是一个双关语意外。 是的,双关语并非意。 但是,像.h文件和.c文件,有 很多东西分离的,我们 可能不需要。 因此,我们可以只修改的H文件,或 有人可以只看到.h文件,知道 正是在该功能 而不一定知道.c文件 其执行情况。 分离成分的这种想法 依赖于彼此 但那种互相访问 通过不同的渠道,传递 的变量,只 包括陈述,事情 这样,这一原则 有助于创造应用 这可以更容易地 由多人编辑, 可更容易地改变 或修改的规模很大, 和更容易 调试在很多方面。 真快,我有 对于pset7的一些技巧, 我将充分屏幕,所以你不 只看the--窍门TIPPEE。 有没有那么多的技巧。 但我提到的PHP是难以调试。 双重和三重检查。 如果你的代码是不 显示在页面上, 它可能是一个PHP的错误,对不起。 你永远需要看看 如果你不想CSS。 但是,一旦你完成,也可以是 一个可爱的小有趣的事情,只是去 和乱用CSS的参数。 CSS和HTML是一模型的一个例子 视图控制器风格的事情太多了吧? 你可以有风格的标签 在HTML元素。 但是,如果你的排序 它们外包给CSS, 它们更容易编辑和播放 周围,​​并有乐趣。 治疗CS50帮手 作为黑盒子。 不需要知道 正是渲染在做什么, 但相信它总是做正确的 这取决于你传递的东西, 这样的事情。 我会推荐 看大卫的演练, 经历所有的 的东西,而不仅仅是待办事项, 但你真的能治疗 这些黑盒子。 不要进入这些 功能寻找漏洞。 并欢迎回报 我们的霸主Zamyla。 大。 是否有之前的任何最终的问题 那种我们反弹的一天? 我仍然活着? 大。 嗨livestream人。 大。 是否存在了问题吗? 没有? 然后,我想我们 好走的今天。 我会坚持围绕一点点 之后,如果人们有问题 他们也不敢问在流。 但除此之外,有一个美好的一天。