>> R.J.阿基諾：讓剛上手。
因此，這是測驗1。
下面是一些高層次的信息。
在關於頁面的測驗是在這個 的URL，不再CS50.net，儘管這
仍然可以工作。
這是CS50.harvard.edu/quizzes/2013/1。
這是很大的關於頁面，告訴你 何時何地，也就是下週三
在一堆室。
並通過下週三，我 意味著從現在開始兩天。
所有這些信息是存在的。
但它是累積的。
>> 所以一切從第一的一半 今年是潛在的測驗，
因為你不能真正做到先進 事情在C無，如果條​​件和
for循環等。
但會有一重 材料，因為測驗0覆蓋，
首先是結構和文件 I / O。這是典型的多
比測驗0有挑戰性。
平均得分通常較低。
努力學習。
>> 當你在學習時，一定要使用 CS50/discuss張貼您的問題
和閱讀其他人的問題。
所以，如果你沒有任何問題， 登錄並閱讀
您的朋友的問題。
他們很可能好問題。
並採取實踐測驗。
我們已經給測驗的 七八年了。
他們在網上的所有。
未來的問題是相似的 老問題。
這就是我們如何讓他們。
>> 測驗還不存在。
我們沒有看到它。
但它看起來像 以前的測驗。
對於這種審查會議，這是不 專題的詳盡清單。
你不能只是出席本，然後 是完全準備好測驗。
否則，它不會是 太大的測驗。
這也是不一定 你需要知道的任何一切
給定的主題。
它的意思是暴露你的東西 我們已經介紹了，提醒你我們
覆蓋，並在途中 我們覆蓋它。
但是你將不得不更進一步， 更深層次的，當你學習到仔細檢查
你知道一切關於任何給定的 主題，你已經填寫
一切是那樣的角落 涵蓋講座。
>> 測驗筆記告訴你去 抄寫筆記，觀看講座視頻。
這是一個很好的方式，以確保你已經 涵蓋了所有你的基地。
所以起步，當我做這些 幻燈片中，我試圖把在那裡我發現
信息。
因此，對於文件I / O，例如，第7週， 週一的演講和張貼
第6條和習題集都有 有關文件信息的I / O。我已經做了
這對每一個議題。
因此，那些標題幻燈片可能 對你有所幫助。
>> 所以在這裡我們有文件I / O。請記住，在 習題集5，我們使用的fopen，fclose的，
FWRITE，用fread和fseek的。
經回收30ish JPEG和 經調整大小和混亂
位圖，你應該很熟悉 這些功能
以及它們如何工作。
如果你不再熟悉， 絕對檢討。
並確保您了解什麼 不同的論點是，
當他們使用。
>> 但共同文件相關的錯誤 你可能會問 -
好吧，如果你忘了檢查 FOPEN實際工作之前，你去
修改文件。
這可能是壞的。
如果你忘了FCLOSE文件 你已經fopened，這是類似於
內存洩漏。
這是非常糟糕的。
而忘記檢查，如果你已經 之前你到達了文件的末尾
開始寫吧。
>> 所以，如果你說，嘿，我在 該文件的末尾。
給我5個字節。
嗯，這可能不會 計算出你所期望的方式。
這真的是對文件I / O， 因為我們做了這麼多了
這個問題設定。
所以，如果你明白發生了什麼事情 在習題集5，記得bitmats
和JPEG文件，那麼你很可能所有 為文件設置I / O。如果這是一個有點
模糊，進行檢討這個問題 置和相關材料。
>> 結構都認為是對的話題 0測驗測驗和1之間的線。
並沒有引起太大的削減測驗0。
所以他們一定會放在 測驗1，第7週，週一。
什麼是結構？
這裡我們給出一個結構。
這就像一個新類型。
這就像一個容器 為多個字段。
>> 在這種情況下，我們聲明一個struct 學生有兩個字段 -
我們正在調用一個字符串名稱和 我們正在調用的年齡為int。
所以，當我通過各地的學生​​或I 修改學生，我就可以
訪問他們的名字和他們的年齡。
讓我們來看看一些代碼的。
在這裡，我們可以看到，我已經聲明 一個學生的，就像
我聲明任何變量 -
詮釋十，詮釋y，等等。
>> 這裡的學生的。
他開始沒有在他的領域。
因此，讓我們設置它們。
你設置點一個struct的領域。
所以，我在這裡說s.name = RJ。
和s.age = 21。
您也可以更新字段 你會更新以同樣的方式
一個變量的值。
所以我想從RJ改變我的名字與 無期限至R.J.拼寫
正確的做法。
這將是s.name = RJ，同樣 正如我們所說的它最初。
然後你就可以訪問它們。
>> 因此，我們已經設置它們。
我們已經更新了他們。
您也可以訪問它們 在非常相同的方式。
所以在這裡，我打印出 R.J.是21歲。
而且我訪問這些值 與s.name和s.age。
所以這存取結構 用點符號。
是的，問題嗎？
>> 觀眾：有沒有對一個原因 前一張幻燈片，你沒有把
學生在頂行，像的typedef 結構的學生，然後
學生在結束了嗎？
>> R.J.阿基諾：所以現在的問題是，在 這張幻燈片，我們通常看到的
typedef結構節點，然後 該結構的字段和
然後字節點。
以及如何來到這裡我就不說了，的typedef 結構的學生，然後
的結構，然後學生的領域？
原因是，我不需要 該結構的內部訪問它。
所以，它的確定要離開它沒有名字。
我只能把它作為 匿名結構。
>> 我們這樣做是對鍊錶和原因 事情是因為你內心需要
引用一個結構節點明星。
因此，該結構必須有一個名字， 所以你以後可以訪問它。
這是一個小細節。
但你通常會看到typedef結構 大括號，如果你不需要
的名稱和typedef結構部分名稱 其次是大括號，如果你願意
所需要的名字。
所以這是一個很好的問題。
>> 而在這一點上，我們傾向於修改 結構，並通過周圍結構由
引用，而不是價值。
所以我們只指針傳遞給周圍 結構，而不是在繞過
結構本身。
所以你很頻繁將是 使用，在這種情況下，學生*或
結構*節點或節點，而不是* 培養出來的學生或節點。
所以在這裡，我已經說過了，OK，變量PTR 將是s的地址。
這將是指針 向學生R.J.
>> 因此，我們可以在這些領域得到 因為我們得到什麼一樣。
首先，身份證引用指針 得到的結構。
這就是* PTR，然後 一個點和年齡。
因此，要訪問字段，我已經更新 現在到22，因為，讓我們
說，這是我的生日。
有一個快捷方式語法 這裡使用的箭頭。
所以PTR箭頭年齡只是 一樣* ptr.age。
現在，這件事情你必須 背誦和記憶。
>> 你用了很多的pset6， 在拼寫檢查pset中。
但其實這是怎麼回事 在發動機罩的下面。
它取消引用指針 然後訪問它。
問題？
>> 觀眾：[聽不清]。
>> R.J.阿基諾：那麼，為什麼我們使用 指針作為結構代替
結構本身？
究其原因是，如果你傳遞 一個結構體給一個函數，你可能
要繞過只是4左右 表示指針的字節，作為
相對於潛在的30或 40字節屬於結構。
所以傳遞的東西給一個函數 是容易當的東西
在短較小。
問題？
>> 觀眾：你可能會提到這 在開始的時候，但在那裡
其他幻燈片上[聽不清]？
>> R.J.阿基諾：這些幻燈片將 了審查會議之後。
我們將張貼在網站上。
因此，在移動和移動上略有 快，我們要談的數據
結構。
也有很多。
我們覆蓋的一群人。
這裡是你應該了解 關於數據結構。
>> 你應該明白在一個較高的 每級結構是什麼。
你可以用英語解釋給你 這並沒有採取CS50朋友如何
我們組織我們的數據，以及我們為什麼會 可以使用的東西以這種方式？
這就是事情之一。
東西兩，理解 的實施。
因此，了解如何使用這些東西 在C中，我們會去在這。
>> 然後三件事會被知道 運行時間和的局限性
你使用各種結構。
所以，理解你為什麼會用 哈希表，而不是一個數組。
了解如何快速，平均而言， 訪問一個哈希表。
了解操作速度快什麼 鍊錶但對數組慢，
反之亦然。
因此，要理解這一點，你就必須 了解大O符號只知道
如何談論這些 各種各樣的東西。
我們會談論。
>> 所以第一件事情，鍊錶。
這裡是一個高層次的圖像 的一個鍊錶。
我們發現這在課堂上。
我們通常有10人 站在舞台上。
但我們有一系列節點，其中每個 節點有一定的價值和指針
它的下一個值。
因此，為了從一個節點到下一個，你 只是說，給我的下一個節點。
您有節點。
給我的下一個節點。
您有節點。
給我的下一個節點等 直到沒有節點的左邊。
>> 所以繼續談 它在一個較高的水平。
這是很容易插入的東西 成一個鍊錶。
如果你不關心順序， 你能把它
權利開頭。
這是恆定的時間。
但很難找到一個值。
如果你要問， 是在我的名單7？
你必須要經過 每一個值。
這是7？
一遍又一遍。
這就是為O（n）。
因此，研究在答題時， 使用數組進行比較。
>> 這樣可以嗎？
燈滅暗淡​​。
確定。
當是一個鍊錶更好？
如果是一個數組更好？
因此，讓我們來看看一些代碼。
這裡是一個可能的節點。
這是一個結構。
它有一個int n，它 將是我們的價值。
它有一個結構節點*未來，這 是我們的指針到下一個節點。
所以在這裡，我們可以看到，我們發生了 已經把一個int在我們的節點。
但如果這是字符的鍊錶 星或漂浮的鍊錶，我們
完全可以做到這一點。
>> 記得在pset6，你可能有一個 焦炭星或只是鍊錶
靜態字符數組。
讓我們來看看在這裡的操作。
因此，我們要插入一個新的 n為進我們的鍊錶。
我們有一個頭指針是開始了 一個指向該節點具有
的n值和一個下一個指針的那 指向這個節點是一個值
n和下一個空的，因為 它的最後一個節點。
因此，在時間的關係，我會 把所有的代碼在屏幕上。
我們將通過它走 幾行的時間。
>> 因此，這裡的代碼。
我希望它是可讀的。
我們做的第一件事是 我們用malloc一個新的節點。
因此，它使一個指針到一個新的節點 不太有什麼設置
在它。
我們檢查，以確保 新節點不為null。
否則，我們不得不放棄。
因此，檢查了這一點，我們現在 在節點中設置的值。
所以我們把新的N到我們的n場。
我們設置下一個指針指向 原來的頭，這樣我們就可以
現在已插入此 節點進入我們的名單。
>> 最後，我們有全球主管點 我們的新節點，所以，如果我們要
在開始的頭，我們將在此 新的第一個節點，而不是
舊的第一個節點。
當這個函數退出時， 變量新的節點不再存在，
因為它是本地的功能。
因此，這是世界的狀態。
我們的全球頭指向我們的新 第一結點，它指向了
原來的第一個節點，這點 到後，該節點。
>> 這是插入。
我希望這是相對 簡單的跟隨。
如有疑問，畫一幅畫。
所以，我覺得談論 鍊錶和看
代碼是非常無益的。
而在尋找的鏈接圖片 列表可以讓我覺得，哦，所以
我有這個節點在這裡。
但是，如果我更新指針， 它結束了斷開。
我已經忘了在那裡 節點去。
和代碼退出。
和你有多個節點 被斷開。
而你不結了 你想要的名單。
>> 所以，如果你畫的圖畫和做 一步一步，希望，你會看到
事情來講的正確順序 更新指針，以確保
該列表走到一起。
插入相對比較簡單。
更複雜的是 插入到排序的列表。
一個更複雜的功能是刪除 和發現，所以期待通過列表
看看是否有出現。
也許你在pset6這樣做，當你 鑽進你的哈希表和你說了，
好，這個詞的蘋果 在我的鏈接列表？
>> 所以，你可能已經做到了這一點。
但可以肯定，刷新你的記憶 並嘗試重新實現查找和
重寫刪除一個鍊錶。
有趣的旁注，也有雙重鏈接 列表，在那裡你必須
指向正向和指針 落後的，這樣你可以去
下一個節點，並以前面的節點。
而且是在去年的一個問題 測驗該類型的，會說話
關於雙鍊錶。
>> 現在，這是你的結構 比較熟悉的，因為大多數
你可能使用它們pset6。
這裡有一個有點不太熟悉。
作為一個方面說明，我認為測驗1 主要測驗比0更難，因為
你在做什麼，你的東西 沒有做一樣多。
把那個另一種方式，對於測驗0， 你已經寫了很多C的我們
問你下
>> 對於測驗1，我們要問你 PHP和JavaScript，您
沒有寫一樣的。
我們要問你的C代碼的 你還沒有寫成多少，
這個先進的C的東西。
所以肯定，實踐的東西，我們 演講中談到，你
並不一定做 關於這個問題集。
>> 說到這，你有沒有寫 一個堆棧上的一個問題集。
但它是在課堂上。
這裡有一個高層次的畫面 棧，我們表明，每年。
它的托盤堆疊中 在奧美食堂。
在較高的水平，棧是最後的 入先出的數據結構。
這意味著你要去 把東西 -
1，3，7，12，14，負0。
有一件事我不能有 說 - 負3，0。
你把所有這些東西英寸
，最後一個你把是第一 一個的走出來。
>> 所以，你有兩個操作 -
壓入和彈出。
所有投入，我是 手勢像這樣的推動。
然後當我在搶達到 東西或頂部到達搶
什麼東西，這就是流行。
所以，我們要實現堆棧。
而且我們發現他們在講座 使用數組。
但你可以做他們 使用鍊錶。
棧是一種概念上的數據 結構，不喜歡的
特定實現的。
>> 那麼，什麼將是什麼樣子？
它看起來有點像這樣。
你必須為整數的大小。
而且你已經有了值的數組 我們調用托盤，因為這是
圖片是什麼 我們 - INT托盤 -
然後一些最大容量。
那麼，什麼將推動樣子？
那麼，如果我們有一個堆棧s，則推 東西到的，相信我們會得到
s的大小。
而這將是下一個 我們的數組的空位。
所以，如果我們有三個東西在我們的協議棧， 然後盤3將是下一個
開放的現場，因為0，1，和 2頃已經填滿。
>> 所以我們把值放入 s.trays [s.size]，第三位。
然後我們增加s.size說， 哎，我們之前有三件事情。
現在，我們有四個。
因此，下一次你推，你 打算把東西放到4。
或者下一次你彈出，你會 來看看3而不是4或什麼的。
然後我們將返回true 比方說，嘿，我們成功了。
這個工作。
作為一個經驗法則，如果一個函數是 應該返回true或
假的總是返回true，則可能 做錯事。
所以做這項工作？
>> 好吧，它工作正常1，和 2，和3和4，和5。
但是，讓我們說我達到我的能力。
然後，我遇到了一個問題，因為 如果大小是一樣的能力，我
現在試圖把東西放到一個 數組，其中我沒有空間。
所以簡單的檢查，以解決這個問題。
如果s.size ==容量，返回false。
否則，去做我們所做的事情。
那麼，我們還有什麼可以問 有關棧？
還有什麼你應該學習？
還有什麼你應該練習？
>> 好吧，實施彈出。
我們已經做了推送。
我會解決這個問題。
非數組實現，其中 你用一個鍊錶，也許。
非整數實現。
我們做了整型這裡。
但它可能是花車。
我本來是字符串。
它可能是字符明星。
看看以往測驗的種類 問題我們已經問棧。
>> 我會說，我們周圍覆蓋棧 正如我們已經討論了他們在同一個
過去幾年。
因此，問答題應 是一個很好的跡象。
展望未來更快，排隊。
他們就像棧。
但他們是先入先出。
如果你是英國人，字隊列 大概做了很多有意義的你。
否則，你可能有 聽說它作為一條線。
他們的工作就像行 在蘋果商店。
的第一人出現在3:00 早晨是第一
人買他的iPad。
>> 因此，我們有兩個操作 -
入隊和出隊。
入隊把別人的線。
出列拉第一 人斷了線。
同樣，我們可以實現 這同一個數組。
那麼，什麼是結構我們 在演講顯示？
它是這一個。
再次，數字。
再次，大小和這個新事物面前。
為什麼會出現一些所謂的面前？
它的下一個索引 元素出列。
這只是內部保持跟踪 第一個人展現出來，讓大家
可以拉出來的時候，我們需要。
>> 一定要看看講義，並嘗試 實施入隊和出隊
攻讀測驗時。
重要的事情要思考的問題。
環繞著，如果前面加上 大小最終大於能力。
同樣，如果你​​的結構是完整的， 你將有問題。
哈希你以前見過的表。
大多數時候，你可能實現 這些對pset6。
這是一個結構，其目的是為O（1） 固定時間的插入和O（1）
恆定的時間查找。
>> 在CS50，我們實施這個作為 鍊錶的數組。
關鍵部件到一個哈希表 是散列函數。
所以它轉換成你的輸入，讓我們說， 字典中的詞，變成一個數字，
這將是我們的索引。
我們將使用該索引 進入我們的數組。
所以這裡有一個可愛的小圖片 從study.50.net。
我們扔掉所有的話到 我們的哈希函數。
和散列函數告訴我們 在哪裡把這些話。
>> 這是所有偉大的土地上 這裡只有一個用於每個時隙字。
但是當你從pset6記得，有 比插槽更多的單詞。
所以會發生什麼，當你 得到一個碰撞？
相反，在存儲一個值 讓我們說，哈希表3，你
存儲一個鍊錶。
並因此而不必哈密瓜 在這裡，你將有一個鍊錶，
其中的第一個節點是香瓜。
和下一個節點是貓。
和第三節點是碰撞，讓我們 就是說，因為所有的這些詞開始
與C
>> 所以，你最該做的pset6。
如果你沒有做一個哈希表上pset6 而您試圖像
一個線索，進行檢討哈希表。
如果你確實這樣做了就pset6，絕對 檢查哈希表。
如果你做到了對pset6才沒有 制定出完全正確，你
有很多麻煩吧，絕對 檢查哈希表。
所以，真正的教訓肯定是 檢查哈希表。
>> 你試過廣大少數民族 出試穿pset6。
高層次的圖片。
它是這樣的，其中每個 節點有一組兒童，其中每個
孩子對應一個字母。
並且每個節點還表示， 哎，我是一個字。
所以在這種情況下，字麥克斯韋 如果你按照M來了A到
X-W-E-L-L，然後按照它多。
你會得到這個符號，三角形，這 我們要表明的意思是這是一個詞。
因此，麥克斯韋是一個詞。
這些增量在整個符號化 這東西的話，哪些
東西都沒有。
>> 所以在pset6，數據存儲我們 沿著我們的任何節點是“我是一個
一句話。“而關於嘗試的很酷的事情 是他們表現出的插入和
查找在O（一個字的長度）。
因此，只要打通麥克斯韋，它的 M-A-X-W-E-L-L。所以，七，八 -
我不能指望 -
步驟到達終點 並檢查出來的東西。
這麼快實現這裡。
羅布通過鏈接去 列出在他死後。
因此，檢查了這一點。
抱歉。
通過他死後一個線索去了。
因此，檢查了這一點。
>> 但你基本上每個節點有27個 指針到下一個節點和一個
布爾對我是一個字。
退房Rob的死後如何 這實際上是落實。
我們的最終結構，我們的樹 和二叉搜索樹。
所以，看著這些，這些被覆蓋 最近8週，週一。
樹是類似於特里，除了你 不一定必須在27個節點
每個點。
而你沒有在每一個有這種數據 一步，標誌著是否 -
路徑無所謂。
而一個線索，該路徑從頂部到 底，麥克斯韋，重要的是我們。
>> 但每個節點有多個 孩子，也許。
我們有更多的詞彙。
樹的根 是在最高層。
而我們說的很底層 有沒有節點
孩子是樹葉。
所以，像特里，一棵樹是 節點的結構。
樹，我們要去一個常見類型 談的是一個二叉樹，其中
每個節點沒有子節點或 一個孩子或兩個孩子。
所以，這幅畫在這裡就不 一個二叉樹，因為
節點3有三個孩子。
>> 但如果我們忽視這些，剩下的 它是一個二叉樹，因為它
表明每個節點的屬性 具有零個，一個或兩個孩子。
所以，我們怎麼能表達這種代碼？
我們可以有一個節點，其中每個節點有 在它的內部的一個整數，以及
作為指向左側的樹 和一個指向上的樹
對，所以這兩個孩子。
這是怎麼有用嗎？
那麼，如果我們做出有關規定，我們 把節點，我們可以使搜索更快。
>> 所以這是一個二分查找的概念 樹，在那裡上的所有節點
左子樹有一個較小的值 比節點，我們正在尋找。
和右子樹的所有節點 有一個更大的價值
比根節點。
現在，看起來像很多的話。
我打算把它的內部雙 報價和展示你的照片。
因此，這裡是一個例子 二叉搜索樹。
看到我們開始10。
一切向左側 圖10是比它小。
和我的一切的權利 大於它。
>> 但更重要的是，在每個節點 樹表示這個屬性。
所以，節點7具有3到 左和9到右側。
因此，所有這些都小於10。
但看著眼前這些時，有7 3到它的左和9在它的右邊。
同樣在右側，15有14個 到它的左和50在其右側。
所以那邊的三個節點，15，14， 和50，也是一個有效的二進制樹
或有效的二叉搜索樹。
而且他們都大於10。
因此，他們被允許為 就在那裡。
有沒有問題？
>> 觀眾：你如何處理時， 你有兩個七人欖球賽？
>> R.J.阿基諾：是啊。
你如何處理與兩個值 這是一樣的嗎？
一些二叉搜索樹說，你 忽略重複的，因為我們的目標是
只是說，我見過 這些事情至今。
一些二叉搜索樹，你可以說 有節點的內部計數。
其他人可能會說，一切以 左邊是小於或等於。
和我的一切的權利 大於。
>> 這只是取決於什麼 問題是你正在解決。
因此，在一個字典，例如，你 不會在乎重複。
你會扔出來。
但其他一些問題，你可能會在乎。
>> 觀眾：是否有可能有 一個1到​​15的左側，而
小於10？
>> R.J.阿基諾：號
如果這裡的14是一個1，這將 不是一個有效的二叉搜索樹，
因為一切的權利 10必須是大於它。
我們就會明白為什麼。
如果在搜索的土地我的目標是 找到14，我從根開始。
所以我期待。
確定。
我們打算從根開始。
看10。
>> 好了，14，我們的目標， 大於10。
因此它必須是在右側。
這是非常相似的整個電話 本書的事情，我們所做的，二進制
搜索那裡。
但是，而不是二進制搜索 在陣列中，我們的二進制
在搜索這棵樹。
因此，我們仍然在尋找14。
以及，圖14是小於15。
所以，如果它在我們的樹，它必須 在這個區域在這裡。
它必須向右側 10和15的左側。
>> 因此，我們檢查這個節點。
和耶，我們發現有14條。
我不打算走過它。
但這裡的代碼。
它實際上是相對 簡單，
因為這是遞歸的。
還有什麼比我們要求你做一個小測驗？
我們可以要求你寫這段代碼。
我們可以請你看看這個代碼 並修改這個代碼，並解釋
它在幹什麼。
是啊。
問題？
>> 觀眾：難道這些幻燈片將是 提供，因為他們是最後一次？
>> R.J.阿基諾：是的。
所以，這些幻燈片肯定會 發布。
>> 觀眾：他們實際上張貼 現在在網站上。
大衛只是做了。
>> R.J.阿基諾：該幻燈片 現在在網站上。
我可能會修補了幾個 錯別字我注意到和解決這些問題。
但是有一個電流 版本在網站上。
其他的事情，我們可以要求你做 -
寫插件。
寫一個迭代版本的 遞歸函數，我們剛才給你看
或談論這些事情，就像在 段落，文字，句子。
比較運行時間，並解釋 你想使用二進制什麼
供，而不是一個搜索樹 哈希表，例如。
>> 因此，了解這些結構 在一個相當深的程度。
了解如何編寫它們，如何 使用它們，如何談論他們。
，你會被所有的設置。
問題？
>> 觀眾：當你寫的 二叉搜索樹，你怎麼了
確定什麼樣的價值，以 把它作為根？
>> R.J.阿基諾：所以現在的問題是，是什麼 值做才能讓你以root？
根據你的代碼，你 可能有一個全球性的根源。
所以，你可能已經可能在過 pset6一個全球性的哈希表。
或者你可以通過根 作為一個參數。
所以這個搜索功能在這裡 需要一個參數，一個節點*。
所以任何節點你碰巧是 看到的是你對待一個
作為你的根，當你通過它。
和我都準備好。
這些都是我的幻燈片。
旁邊的人可以來交換 在一台筆記本電腦和麥克風。
>> ROB BOWDEN：我想我可能有 不同的解釋這個問題。
但我把它理解成，如果你有 數字1，2和3，我們如何
知道要2根 相對於1或3？
如果我們讓2根，那麼它的好聽 1和3的左側和右側。
但是，如果1是根，那麼它的1到 頂，2右，3到右側。
因此默認情況下，你不知道 怎樣弄根。
而對於任何算法，我們正在期待 給你，只是你首先
插入將是根。
或者，我們會給您一個二進制樹 已存在有一個根。
但其他的算法存在，使得 根將更新，所以，如果
結束的情況下，其中它的1，2， 3，它會自動更新到
使2新根，使 它還是很好的平衡。
>> 安琪拉李：酷。
嘿，伙計們。
我是安吉拉。
我要去幹掉我們的C 然後進入我們的一些網頁
技術 -
HTTP，HTML和CSS。
所以，第一件事就是緩衝 溢出攻擊。
因此，讓我們來看看這段代碼。
這是很簡單的。
有一個函數foo。
它不返回任何東西。
但它需要在一個指針 一個叫巴字符串。
>> 並且它要聲明這個 緩衝器，它是一個字符
陣列有12個插槽。
它使用的memcpy，這僅僅是一個 函數，從一個地址拷貝
到另一個。
因此，這是試圖複製到 我們無論從任何緩衝
酒吧指向。
所以任何想法什麼是錯的 與此代碼？
>> 觀眾：如果酒吧是長於 C，它們將覆蓋。
>> 安琪拉李：是的，沒錯。
我們不能保證吧 將是小於12。
我們只是做了一些任意數量的12。
和我們一樣，讓我們希望， 我們的用戶輸入小於
12個字符長。
因此，在一個理想的世界，如果我們的輸入是 總是不如預期，那麼我們會得到
類似的東西，你好。
這是少於12個字符。
它被讀入字符角
然後我們用它做什麼。
這其實並不重要。
>> 但是惡意的人可以做 更多的東西像這樣，他們在那裡
給我們什麼吧指向， 它會指向這個巨大的數組
只是A的。
這是比12路更長。
所以它會一路走下去 到這裡，以那裡的回報
地址曾經是。
所以我們可以說這個功能 被叫做foo。
也許富被稱為由其他 功能，這是由主程序調用的。
因此，當foo的運行，它需要 知道在哪裡返回。
>> 如果foo調用一些函數命名 巴茲，它必須知道它​​的
得回去巴茲。
而這正是這個返回地址 這兒告訴我們。
但是，如果我們覆蓋它與其他一些 地址，在這種情況下，這是一個
在地址的表示 最開始這個緩衝區，然後
什麼實際將要發生的是， 而不是返回回巴茲，
這被稱為我們的函數，它只是 要去這段代碼的前面。
>> 如果這是因為有一個 惡意黑客的傢伙來了，
注射這一點，那麼也許這個數額 A的實際上不是的。
它實際上只是代碼的休息 你的電腦什麼的。
因此，為了防守這類型的 首先，你必須永遠不能假定
用戶輸入是在一定 數目的字符。
例如，當你在做 拼寫檢查，你被告知的話是
只有將是40個字符 長的最大值。
那是不錯的。
>> 但如果沒有，那麼你就必須 請務必閱讀只是在45
字符的時間。
否則，你可能會覆蓋 您的緩衝區。
上的任何問題。
是啊。
>> 觀眾：你能不能談談 多一點關於這些？
>> 安琪拉李：對不起。
是。
>> 觀眾：麥克只是視頻。
我會盡量和項目。
嗨，伙計們。
燮？
所以，讓我們在不多的事在 CS50庫，你一直在使用這
所有學期，主要是 獲取用戶輸入。
如你所知，你包括CS50 只是在做CS50.h，圖書館，
包含了所有的原型 功能，您可以使用，像
GetString和調用getInt，並 GetFloat和等等。
還有的這一行中的CS50 庫，它定義了一個字符串，它
你們都知道了吧 僅僅是一個char *。
>> 但是，讓我們看一下在 GetString的是如何工作的。
這是一個非常刪節版。
你可以拉起CS50庫文件 從，我認為，manuals.CS50.net。
而且你可以通過閱讀 實際的功能。
但是，這涉及一些 的重要組成部分。
因此，我們已經創造了一些緩衝 有一些能力。
而我們做的是我們得到一個字符 從標準的N時間。
這就是用戶輸入 在文本控制台。
>> 所以我們要讀入 字符，只要它不是一個新的
行，它不是最終的文件，其中 是標準輸入的結束。
為此，我們在閱讀每一個字， 如果該字符結束了加入
到的字符數，我們讀過 在那超過我們的能力，
那麼我們做的是我們剛剛調整了 緩衝區，以便它的兩倍長。
如此反复，這樣可以防止緩存 溢出攻擊，因為你讀的
一個字符的時間。
如果在任何時候你在閱讀過 許多人來說，你只是擴大你的緩衝區。
你乘以2。
然後你有更多的空間。
>> 否則，你只需要添加 一個字符緩衝區。
和你讀過的所有後 字符，它會收縮緩衝
回落到正常大小，加 null結束，然後返回。
現在，讓我們來看看調用getInt。
你們可以看嗎？
我可以在一個位放大。
我不知道怎麼的計算機。
沒關係。
我不能放大正常。
>> 這真的很難。
對不起。
就讓我們看看這個。
那麼，什麼調用getInt所做的是它首先讀取 從GetString的，一個字符串，它
我們之前已經實現。
和重要組成部分，這裡要注意 如果是這種共享，它結束了
閱讀是像也不是一個字符串， 那麼我們就返回到INT_MAX
代表失敗。
為什麼我們返回INT_MAX而不是 負1或1？
任何想法？
>> 觀眾：[聽不清] 負1的之一。
>> 安琪拉李：是的，沒錯。
所以你的方式更可能只是想 輸入1或負1時提示
為第n個和第n個什麼馬克塞斯。
這是巨大的。
你可能不打算使用它。
因此，這就像一個設計決定 確保你不小心
返回一個錯誤或你不回 1，可能被解析
作為一個正確的答案。
因此，如果一個行不存在，則 我們返回INT-MAX。
否則，我們使用sscanf的， 這就好比scanf函數。
但它讀取一個字符串。
>> 我們有這樣的格式化 字符串，是我％％C。
我們嘗試和匹配，與 無論用戶給我們。
我們要的東西​​相匹配的數量 為1，這意味著我們只
確實想匹配一個整數 由也許包圍的白色
空間，也許不是。
在這種情況下，如果你把東西 像酒吧，酒吧不匹配可言，
因為需要有 在開始的整數。
所以sscan從來沒有把0。
這樣你就不會返回。
>> 另外，如果你把東西 如1，2，3，A，B，C，那場比賽
無論是整數，但也 後的字符。
這樣的sscanf會返回2，這 也並不理想。
你不想1，2，3，A， B，C是有效的int。
這樣也不起作用。
但是，說你把喜歡的東西50。
我就要匹配％，這意味著 它會讀成n。
而現在，正將包含數50。
然後你就可以返回。
>> 否則，你打重試。
然後它只是一次又一次，直到 您從用戶得到正確的輸入。
上有問題嗎？
>> 觀眾：所以，如果你要打印出 調用getInt在[聽不清]的值
會是公正的整數和最大？
>> 安琪拉李：是啊。
所以，如果你使用調用getInt，你應該假設 你不希望第n為最大
是一個有效的輸入，因為你會 假設這是不好的。
>> 觀眾：如果我們沒有字符c和 有人把在1，2，3，山姆，它會
1，2，3還有效嗎？
>> 安琪拉李：我覺得這是可行的。
但你不想123Sam到 是有效的由用戶輸入的。
這是不是一個真正的整數。
因此，它似乎不公平 解析它作為一個int。
確定。
在這種情況下，讓我們繼續前進 上到互聯網。
因此，HTTP是不是一種語言。
HTTP是只是一組標準 你如何從客戶端發送的東西，
這就是你，給服務器。
這是其他人在網絡上。
>> 所以HTTP代表超文本 傳輸協議。
它的心臟和靈魂 整個網絡的。
超文本只是部分 指的是HTML。
轉移是像客戶端 您將請求發送到
服務器，這給反應。
而協議只是，怎麼辦 你期望一個服務器的行為？
怎麼是你應該表現 這樣，您可以簡化這個
溝通過程？
>> 所以HTTP請求看起來很像這個。
GET是請求的類型。
你們已經看到的GET請求 和POST請求。
這第二件事情有，/我來說，這 只是URI或您所在的URL
要在主機內去。
因此，這要求是要求有 頁，像www.facebook.com /我。
這是一個GET請求。
然後這個HTTP/1.1，這只是 HTTP的你正在使用的版本。
它幾乎總是1.1。
>> 然後有一堆 其他的東西了。
實際上，你可以看到這些，如果你 打開你的控制台，當你
瀏覽網頁。
反應看起來 更多同類產品。
頂部的部分是，同樣， 您正在使用HTTP的類型
其次是狀態代碼。
所以200 OK是一切工作。
這裡是您的內容。
您的內容將會隨之而來。
然後它會告訴你什麼樣的 的內容和其他東西太多。
>> 該狀態碼，也有少數 重要的是你應該知道。
200 OK是像一切的金色。
一切正常。
403禁止。
這一點，你可能已經看到了，如果你忘了 正確搭配chmod東西。
這意味著，你不必 正確的權限
訪問該服務器上。
這就像，不，你不能看到它。
404指的事情不存在。
沒有找到。
你可能已經看到了很多。
>> 500內部服務器錯誤通常是 好像出事了就在身邊
服務器。
所以，當你正在實施pset7， 如果你有PHP錯誤，你可以
其實去的網頁，看到一個 一大堆的PHP的錯誤的東西。
但是，這並不常發生， 因為網站並不真的想
告訴你為什麼他們的網站被打破。
他們可能會只返回一個 500內部服務器錯誤。
>> 再有就是418我是一個茶壺。
有大約原委 為什麼這是一個事。
但你可以閱讀有關 在你自己的時間。
還有一大堆的 其他狀態碼了。
但這些是那些 你應該知道。
因此，讓我們來談談HTML。
HTML，記住，不是 編程語言。
這是一種標記語言。
這意味著它描述的內容。
它會告訴你什麼是HTML文檔看起來 喜歡與否是什麼樣子
但它是如何構成的。
>> 因此它定義了一個結構和 網頁的語義。
這就像，這是一個段落。
這是一個有序列表。
這就像我的網頁的一部分。
這裡的標題。
它類似的東西。
它沒有任何樣式的，由於 這就是你在CSS中做。
它看起來像一個系列 嵌套標籤。
因此，要使用的一個非常基本的一個例子 HTML頁面，您可以在DOCTYPE
聲明那裡。
>> 這DOCTYPE聲明 說，我們正在使用HTML5。
那麼你有很大的HTML標籤。
它包含一個頭部和主體。
裡面的頭，你的標題。
這就是所發生的稱號 巴您的瀏覽器。
我們有一個鏈接一個鏈接標籤 在外部的樣式表。
然後我們有一個拉一個腳本 從外部JavaScript以及。
>> 然後我們的身體裡面實際上是 什麼被顯示在頁面上。
我們已經有了一個段落，然後一個 像那款內。
這一個是小貓的圖片。
請注意，該圖像 標籤關閉本身。
所以不是開口與圖像 然後做一套/圖像，你
只是有這個小斜線 在這裡，它會關閉它。
和圖像標籤也有這個鍵 value屬性稱為ALT。
這就是替代文本 當你懸停發生。
>> 大多數HTML元素有一定的鍵值 的東西，你可以給它，各種
定制。
是啊。
>> 觀眾：[聽不清]。
>> 安琪拉李：嗯，所以它是一個 標籤的屬性。
所以，如果你使用jQuery，你可以 做選擇image.getAttribute。
然後你就可以搜索 得到的alt屬性。
它會給你的小貓。
如果你還記得的形式在HTML中，輸入 元素將名稱屬性。
而這正是PHP使用發送 當表單被提交請求。
>> 觀眾：你提的東西 有關如何如果你使用kittens.jpg或
一些有缺失 文件夾或其他文件？
>> 安琪拉李：是的。
因此，這是什麼所謂的相對 路徑，因為我不會放棄
您的完整路徑。
這就像當以C，如果你做的fopen 一些文件，如果你的fopen hi.txt，那
hi.txt預計是在同一 目錄，除非你給它一個更
複雜的路徑。
>> 觀眾：所以，你可以指定 該文件夾[聽不清]？
>> 安琪拉李：是啊。
並且你可以看看該怎麼做。
但是，如果我想獲得kittens.jpg出 父目錄的，我會做
。/ kittens.jpg。
是啊。
抱歉。
是啊。
哦，天哪，我忘了這個問題。
究竟是什麼問題？
呵呵，問題是就是，kittens.jpg 預計將在同一目錄下？
在這種情況下，它是。
但你也可以給它一定的路徑 例如，它不必須是。
好？
>> CSS。
這樣的CSS，HTML一樣，是不是 一種編程語言。
CSS是只是一系列的樣式規則。
它代表了層疊樣式表。
和你一起使用 使用HTML樣式的頁面。
因此，有三種方式 你可以包含它。
你可以做到這一點的方法之一是在頭部 你的HTML的一部分，你可以只
打開一個風格標籤，然後堅持 一些CSS規則在裡面。
這是非常確定。
是啊。
>> 觀眾：你能不能把那些 風格標籤之間，讓我們
比方說，身體和/身體。
然後你會造型 只有在身體。
>> 安琪拉李：你能。
它會工作。
但你不應該，因為造型 一種元數據，應該在去
您的文檔的頭部。
身體真的應該只包含 什麼是究竟要
顯示您的網頁上。
>> 觀眾：所以你把風格 在你的腦袋樣式化
整個網頁，對不對？
>> 安琪拉李：是啊。
所以把這裡的風格，這些CSS規則 將適用於基於整個頁面
他們的選擇。
所以更好的方式來做到這一點是不是 具有在你的腦袋風格標籤，
你有這樣的鏈接到一個外部的樣式 表像我在向您展示
前面的例子。
這裡做的事情是它嘗試並找到 文件style.css文件，然後拉它
中，並將其用作本 樣式的頁面。
和你的style.css會 只是看起來像這樣。
這純粹是一堆的CSS。
>> 最後，還有另一種方式，你 可以包括CSS，真的你
不應該永遠做。
這是調用內聯樣式。
所以任何HTML元素也可以 取樣式屬性。
然後在該樣式屬性， 你可以給它的CSS規則。
因此，在這種情況下，我是什麼格 定義就在這裡，它要
有一個黑色的背景和 白色的文字顏色。
但你不應該這樣做，因為什麼 但這是它把你的造型
在你的HTML。
>> 我知道，我們一直在談論的HTML 是結構和CSS是樣式。
如果你這樣做，它混合 它們連接在一起。
它不是很乾淨。
所以不要做。
使用CSS的一個例子，在那裡，我們 只需選擇HTML的身體
紀錄片。
和我們一樣，一切都 將是Comic Sans字體。
我也不建議。
但你能做到這一點。
>> 第二條規則就在這裡，這是怎麼回事 選擇的元素
頁面ID為主要。
所以，無論HTML元素，我說的ID =主，我要去給一個
20像素的邊距和對齊的一切， 所有的文字，到中心。
過去的事情由CSS類選擇。
所以，在頁面上，我給任何元素 一節課，我要使它
淡藍色的背景色。
沒錯。
這就是我的一切。
問題？
>> 觀眾：什麼包括hashtag 之前主要做什麼？
>> 安琪拉李：現在的問題是有哪些呢 之前主要做這個標籤？
在這種情況下，在哈希 CSS是指通過ID選擇。
所以，如果我有一些HTML元素，如 DIVID =主，這個CSS規則選擇
東西用的ID為主。
類似地，在週期中的前 部分是通過CSS類選擇或
通過HTML類選擇。
>> 觀眾：為什麼會出現一個有前 在背景顏色6？
>> 安琪拉李：是啊。
所以，問題是，為什麼會出現 6前一個哈希？
這是比散列不同。
這意味著，你給 一個十六進制顏色。
所以十六進制的顏色，這只是 代表色。
你還記得的RGB三元組時， 你做了取證PSET？
這是類似的。
前兩個數字代表 多少是紅色的顏色。
後兩個代表 多少綠色。
和第三指 多少藍。
和散列這是怎麼回事 來表示一種顏色。
>> 所以從0，0，0，0，0，0的任何 高達F，F，F，F，F，F是有效的。
這是一些有效的顏色，可以 您的瀏覽器顯示。
問題？
>> 觀眾：什麼是之間的區別 利用ID和類？
>> 安琪拉李：現在的問題是什麼 之間的差
利用ID和類？
你只能有一個一個元素 具有給定的ID的HTML文檔。
所以只有一件事在我的網頁 允許有ID為主。
所以你使用它，這是頭。
這是導航。
這是頁腳。
類是不同的，因為你可以 應用類，以盡可能多的HTML元素
只要你想。
>> 因此，舉例來說，我做了類部分， 因為有可能不止一個
部分在我的網頁。
你只是允許有多達 用相同的頁面上的元素
類，但只有一個具有一定標識。
>> 觀眾：所以圓點代表 類？
>> 安琪拉李：是啊。
一個點代表一個類。
涼爽。
這就是我的一切，伙計們。
謝謝。
>> [掌聲]
>> ZAMYLA陳：嗨，大家好。
我Zamyla。
我將要覆蓋的PHP， MVC和SQL今天。
很多，我會的材料 覆蓋將是相當多
右出pset7的。
好的。
那麼，什麼是PHP？
PHP代表PHP超文本 預處理器。
所以，本身是一個遞歸 命名，這是很酷。
PHP是一種服務器端腳本語言， 和它所提供的後端
和邏輯基礎 我們的網站。
>> 所以安吉拉談了很多有關HTML 和CSS，這將使結構
本網站。
但是，如果你想改變什麼 動態或者如果它的內容各不相同
基於用戶或 一定條件下？
這就是PHP的用武之地。
現在，通常情況下，PHP可能需要幾分鐘 少來實現同樣的事情線
在C這是因為PHP處理內存 管理的程序員，
而不是我們不得不的malloc 自由，這樣的事情。
>> 但是，由於PHP是一種解釋 語言，典型地，它可能執行
比C多一點緩慢，這 是編譯型語言。
因為我們正在規劃 語言，讓我們來看看如何
語法將有所不同。
讓我們必須非常小心，不要 感到困惑與此有關。
綜上所述，使用PHP語法，無論你是 嵌入你的PHP的HTML裡面
文件或在。php文件本身，你 需要附上代碼開放
PHP和封閉的PHP標籤像 如下，喜歡在屏幕上。
>> PHP中的變量。
每一個變量將開始 $符號後面的名字
您的變量。
現在，在PHP中的變量鬆散類型， 這意味著你不需要
要說明什麼數據類型 是當你聲明它。
然而，這並不意味著它們 不具有任何類型的。
所以，如果我聲明了一個變量，只設置 它等於1，然後我聲明
另一個變量，將其設置為“1” 然後另外一個1.0，好了，
根據平等的類型 運營商我用，如果我想比較
在所有類型，然後 他們將是平等的。
但是，如果我想確保了 類型相同，PHP還可以做
如此，即使我們並不表明 它是什麼類型時，我們
先使文件。
>> 現在，在PHP中，即使我們 從編程切換
在C語言中，我們仍然有我們的 值得信賴的if條件，就是這樣。
我們仍然有我們的while循環，只 這樣，你把你的
狀態，然後在 體循環。
然後我們也有我們的for循環， 通常看起來像這樣。
所以，如果我想遍歷所有 9 pset和提交，並調用
功能submitPset，那麼我就可以做到這一點 在這裡，這你們都
由這點做的。
恭喜，順便說一句。
>> 對於攝像頭，人 說，謝謝你。
現在，如果你不想只是用這個 for循環，那麼PHP居然還
有東西叫做foreach循環。
所以，如果我有一個整數數組，0 通過8中，存儲在陣列的pset，
然後我可以有一個foreach循環， 遍歷在pset中的每一個數字。
然後我可以調用相同 功能8倍，
就像我以前那樣。
因此，這對每個迴路是好的，因為 你不必，如果你不知道
陣列的確切長度，你 有，然後使用這個foreach循環
將採取照顧你。
>> 所以我做的pset為一個數組。
讓我們來看看這個。
在PHP數組通常是一樣的 我們已經在C中，那些地方
你可以聲明一個數組。
在這裡，我可以聲明一個空數組 然後動態地使用建立
指數為整數。
所以索引0，我要存儲 一個整數命名1。
在我的清單索引1，我要去 存儲值2。
以及第三索引，但在 第二個數字，我要去
儲存號碼12。
>> 現在，這是罰款，這 工作效果很好。
但說是我的問題 什麼每個索引保存。
對於我來說，索引0表示如何 許多貓我有。
和索引1表示如何 許多貓頭鷹我。
和下一個意思有多少狗。
好吧，那麼它來指定，而不是 不必記住0涉及
貓和1至貓頭鷹，我可以使用 關聯數組，表示
而不是整數作為我的指標， 其實我可以使用字符串。
>> 所以這是非常有用的。
你已經基本上只是更換 整數與字符串。
有你有一個 關聯數組。
是啊。
>> 觀眾：還有一個原因為什麼有 下劃線第二
的一部分，因為我的列表中有數組。
>> ZAMYLA陳：現在的問題是，現在是 還有一個原因是有一個
我和列表之間的底線？
號
這只是我如何命名 我的變量。
>> 觀眾：在第一 線，它的一個字。
>> ZAMYLA陳：我的道歉。
我會解決這個問題。
是啊。
他們應該是相同的變量名。
良好的漁獲物。
確定。
所以，讓我們繼續為字符串 串聯。
如果我想採取兩個字符串， 然後我就可以將它們串聯
用點操作符。
所以，如果我有米洛的名字 與香蕉作為姓氏，然後
與點運算符和串聯 然後把一個空間之間
將包含米洛的字符串 香蕉，我就可以回顯或，
相反，打印出來。
>> 說到迴聲，讓我們來談談 約了幾個有用的 -
哎呀。
對不起。
一些有用的PHP函數。
所以，我們有 -
技術上的困難。
一秒鐘。
我送它。
PowerPoint中的問題。
我們回來了PHP函數。
>> 因此，我們需要的函數，其中 如果你傳遞一個文件，這裡的只是
一個文件的一個例子是 我可能會傳遞英寸
然後，將包含PHP代碼 從該文件中，我指出。
它會評估，在。
那麼我們也有回音，這 是一個平行的printf。
退出是一個平行的斷裂， 其中出口的塊
你是英寸代碼
然後空檢查是否給定的 變量就像是null或零或
無論是等同於為空。
是啊。
>> 觀眾：對於字符串連接 點運算符之一，在PHP中，就是
相同的JavaScript那裡它使用 點串聯的意思加？
因此，對於全名，你可以有美元 簽署第一+，然後+持續多久？
>> ZAMYLA陳：是的。
所以現在的問題是，是否在PHP中，我們 可以使用相同的字符串連接
如在JavaScript中的加號。
約瑟將進入的後來。
我想他對一個幻燈片。
其實，這是不同的。
所以在JavaScript中，你需要使用 加來連接字符串。
而在PHP中，你必須 使用點運算符。
因此，它們是不同的。
>> 確定。
所以，現在我們已經涵蓋了所有 這個PHP，它在哪裡
真正派上用場？
那麼，它派上用場的時候，我們 可以與我們的HTML相結合。
所以，我們的PHP會給我們的力量 改變頁面的HTML內容之前，
它的加載。
這樣根據不同的條件， 通常在特定的用戶那
登錄後，我們就可以顯示 不同的信息。
琳達，你有問題嗎？
>> 觀眾：你能串連 一個整數也？
>> ZAMYLA陳：是的，可以。
所以現在的問題是，如果你能 串連整數或其他
variable.s現在，我們進入到MVC，這 的是，我們在使用一個範例
pset7和很多網頁設計者使用 組織代碼中的文件
在他們的網站。
M代表模型。
基本上，模型文件將處理 與數據庫交互。
查看文件，它們涉及到了 本網站的美觀性。
和控制器處理 用戶請求，解析
數據，做其他的邏輯。
>> 在pset7，我們結合模型 和控制器。
我們只是叫他們和控制器 把它們放在公共目錄。
和視圖文件，我們把它們作為 模板中的模板目錄。
所以這裡這個圖也代表 與同類型的劃分
模型和紫色控制器 這裡在左邊和
右邊的圖。
因此，這是一個示意圖，是你們中的一些 可能已經看到在辦公時間或
我們被繪製為您圖解 是搞清楚你的​​pset中。
>> 因此，這裡，在一個給定的控制器，一個模型 控制器，我們有功能
這涉及到查詢的SQL 數據庫，PHP的執行邏輯。
也許你會抬頭 在雅虎股票
財務。
或許，你只是要檢查 看看用戶是否提交了一份
有之前就已經形成 訪問你的頁面。
然後你會渲染 一個形成在這裡。
已提交的表單後曾 由用戶，這是動作
在表單的HTML標記指定 將指示該頁面，它
返回的數據。
>> 因此，所有這些信息將 發送回您的控制器。
那麼你可能會做多一點 在這一邏輯，也許執行了幾個
在SQL數據庫的詳細查詢和 然後，終於，想出了一個很好的
包裝組信息，你會 傳遞到一些其他的模板
所顯示的信息。
現在，我們到底怎麼打包 這些信息呢？
好了，我們有一個叫做渲染功能 那是在functions.php文件
pset7，在那裡你傳遞的名義 一個文件，一個模板的名稱。
>> 然後你也傳遞 一個關聯數組。
並且使關聯數組表示 不同的信息
要傳遞英寸
現在，將是在不斷的 這些例子是，鑰匙，或
而是，關聯的鍵 數組，這些都是正在發生的事情是
預期由模板常數， 因為它知道它需要
一些所謂的消息 或者叫名字。
然後在右邊的東西，在 實際值，所以在這種情況下，誰的
一個好男孩和米洛，那些打算 是正在改變的值
該控制器每一次改變 或基於某一條件和
將傳遞英寸
>> 所以在這裡在模板中，我們看到我們 使用HTML特殊字符，
這只是基本上意味著我們要 得到同行的字符串，該
用戶放進去。
我們想替換 在那裡的消息。
所以後來當我們真正看到 該文件，該特定
信息傳入
請注意，關鍵是如何呈現的作品是 該締合的鍵
數組，這些成為變量 名字在這裡。
所以在該鍵的值 關聯數組，然後成為
該變量的值。
>> 現在，讓我們進入到SQL。
它代表結構 查詢語言。
所以這只是一個編程 語言設計
用於管理數據庫。
它派上了用場，我們在 我們pset7財經網站。
從本質上講，它只是一個簡單的方法來 跟踪和管理對象和表
並將其鏈接到對方。
現在，想想你的SQL數據庫中 基本上作為一個Excel文件，或許，
多標籤頁。
>> 所以，你可以有多個表， 也許，彼此連接。
而就像Excel中，我們有很多的 我們想要的功能。
例如，我們可以選擇 某些行。
我們可以插入信息。
我們可以更新的行。
而且我們還可以刪除的東西。
>> 通過選擇行的SQL選擇作品 或行從一個指定的列
數據庫匹配有一定 標準，你指出。
所以，在這裡，當我看到選擇*從 巫師那裡的房子=拉文克勞，然後
我選擇*，這意味著我 在選擇每一個列
從奇才表，但只有當排 房子列等於拉文克勞。
現在，這是純粹的或SQL。
所以，如果我進入phpMyAdmin的，這是 我們使用管理的具體辦法
我們的SQL數據庫，那麼我可以插入 即進入phpMyAdmin的網站。
並且將執行。
>> 但我們真正想要做的 這在PHP端。
那麼，如何才能做到這一點？
好了，我們使用查詢功能， 基本上執行的SQL查詢。
使用？
作為一個佔位符，我們可以通過在某些 值，以我們的字符串，我們
要更換。
所以也許我存儲不同 在curr_house值，這
代表了目前房子 我正在經歷的一切。
這樣我就可以把它傳遞作為佔位符 與問號。
然後我就基本上執行 同樣的事情，我做之前，除
現在，我在PHP。
>> 和查詢將返回一個 關聯數組。
我要去把它存儲在列。
現在，查詢可以總是失敗。
也許SQL查詢不能執行 因為表不存在。
或者，該列中不存在。
出事了。
那麼，在這種情況下，你會希望 確保您檢查是否
查詢返回false。
這就是使用三 等於操作有。
>> 然後我道歉，這是另一種 CS50函數，傳遞一個消息。
如果你看看道歉，這一切 確實是呈現apology.php。
是啊。
>> 觀眾：你能解釋一下是什麼 選擇並從恆星之間呢？
>> ZAMYLA陳：是的，絕對。
因此，在選擇和之間的明星 也就是說，我要選擇整個
從我的桌子整行。
我可能已經表示選擇 名稱，年份，房子。
而我只得到這三個 列在我的表。
但如果我說選擇*，然後我會 得到一切在該列中。
然後我會去你 在後面的第一個。
>> 觀眾：所以這仍然是 在SQL中，對不對？
這是查詢還是這個PHP？
>> ZAMYLA陳：我們正處在一個查詢中。
所以這是在PHP。
因此，使用PHP函數查詢， 我們正在執行一個SQL查詢。
>> 觀眾：是在SQL什麼 區分大小寫，如選擇
或嚮導或房子？
>> ZAMYLA陳：是什麼 在SQL區分大小寫？
我相信是這樣，是的。
我相信，選擇和 和WHERE是區分大小寫的。
沒有？
>> ROB BOWDEN：所以，這是相反的。
列名和表的手段， 所有這些都是區分大小寫的。
但任何MySQL的關鍵詞，如 SELECT，FROM和WHERE，這些都不是
區分大小寫。
確定。
所以，我說的是相反的。
因此，所有的MySQL的關鍵字 -
選擇從，在那裡 - 那些 不區分大小寫。
但一切是。
確定。
你在前面。
>> 觀眾：如果我有$來講行 多行，意思是
只是變成一個關聯數組？
>> ZAMYLA陳：所以現在的問題是，如果行 有一個以上的列在其中，並
它成為一個關聯數組？
因此它是可結合的陣列 陣列了。
所以，即使只有一個行 回來了，那麼你必須去
這一結果的索引為0。
然後你就會有第一行。
是的，貝琳達？
>> 觀眾：當你使用===， 這是唯一的實例？
還是有其他人呢？
>> ZAMYLA陳：所以在這種情況下，=== 是跨類型的比較。
抱歉。 ===是一個比較 用於比較的類型。
然後==在所有類型的比較。
>> 觀眾：你能解釋一下 行是在這種情況呢？
它是一行數據？
>> ZAMYLA陳：在接下來的幻燈片，我 將解釋什麼是行。
所以，如果你不介意持有 關上了。
然後你在後面？
>> 觀眾：對於像查詢功能， 渲染和道歉[聽不清]？
>> ZAMYLA陳：現在的問題是，是否 這些功能 - 查詢，道歉，
和渲染 -
是通用的PHP。
這些都是那些CS50 寫了pset7。
和傑伊？
>> 觀眾：當你需要說 $ _SESSION，是只為ID嗎？
或者可能你說過嗎？
>> ZAMYLA陳：所以現在的問題是，當 我們使用$ _SESSION，這是一個特定的
我們正在使用的全局變量。
在這裡，這個變量將 是本地的我們的函數。
所以，我們只是聲明 一個新的變量。
>> 觀眾：如何道歉 實施？
>> ZAMYLA陳：現在的問題是， 是如何實現的道歉？
我認為這實際上是一個非常 好習慣為你們進入
在functions.php的部分和看 道歉，看看你可以有
做你自己。
所以，我可以留給你，但只是 說，如果你道歉，
那麼它需要的信息是，你 提交道歉，然後將其
呈現該消息。
還有什麼問題嗎？
我愛的問題。
所以回頭率。
>> 觀眾：[聽不清]
echo或print那裡？
>> ZAMYLA陳：現在的問題是， 我們不能只是已經把
echo或print那裡。
讓會做什麼 略有不同。
那將打印出來的查詢 沒成 -
好了，現在，我們實際上 在我們的控制器。
所以我們實際上沒有 HTML設在這裡。
通過渲染apologize.php道歉 實際上將您重定向到apology.php。
確定。
>> 所以，現在，讓我們去解決 從早期的問題是關於什麼
真的是行。
那麼，查詢將返回 列的陣列。
而每一行代表 通過一個關聯數組。
所以，如果我執行一些SQL查詢， 我已經存儲的結果行，然後
使用foreach循環，那麼陣列 名字是有第一個 - 行。
然後我要去打電話 每一行中有$行。
>> 這樣遍歷了，然後我就可以 訪問給定行的名稱列，
年柱，和房子列。
請注意，我不會已經能夠 做這個行，因為行的索引
名稱不存在。
行是只是一個數組 關聯數組。
所以，你有兩個層面存在。
一旦你有行的數組， 你必須去那個。
然後你就可以訪問該列。
這是否說清楚？
是啊，在前面？
>> 觀眾：[聽不清]打開 括號內為[聽不清]？
>> ZAMYLA陳：請原諒我嗎？
>> 觀眾：開括號。
>> ZAMYLA陳：這些嗎？
這讓我有 該變量。
是啊。
>> 觀眾：當您打印，是您 打印到的HTML代碼？
>> ZAMYLA陳：是的。
當我打印，這在這裡是內 我的模板，因此
我的看法MVC的方法。
所以我打印到HTML。
>> 觀眾：所以，如果我們走進開發商 運行此工具後，我們可以
實際上在代碼中？
>> ZAMYLA陳：這是一個偉大的 的問題，是的。
所以，如果你走進了開發者工具 使用Firebug的或Firefox中
Chrome瀏覽器，那麼是的，你可以 請參閱特定的HTML。
所以它不會顯示$行[“名稱”]。
它會顯示為準 名字是該行。
>> 觀眾：只是一個一般性的問題， 什麼是TR和TD定義為？
為什麼我們[聽不清]？
>> ZAMYLA陳：表列TR， 表，然後TD列。
確定。
>> 觀眾：是的，這是表中的數據。
>> ZAMYLA陳：表數據。
是啊。
>> 觀眾：這是一個排在其中 行被視為一個列？
>> ZAMYLA陳：對不起。
你能再說一遍嗎？
>> 觀眾：你將如何 可視化行？
>> ZAMYLA陳：你將如何顯現 以什麼樣的方式行？
你說的是這些 這裡的行或TR行？
>> 觀眾：該行。
>> ZAMYLA陳：這裡這些行？
我會想像這是 我執行我的查詢。
它說，好吧，我是0到n 符合條件的行的金額
你曾質疑。
所以，我有行的某個數字。
所以行時，$行，每個門店 1陣列中的那些行。
因此，即使它只是其中之一，它的 還是它相匹配的行的數組。
>> 是這樣，那麼，舉例來說，這是 類似的，當你取出
從用戶的緩存。
與標準有地方 ID等於會話ID。
真的只能是一行 可能匹配。
但仍行剛剛返回一行。
所以你必須去行， 指數為0，索引緩存到
實際進行緩存。
>> 觀眾：是對打印功能 在呼應同樣的事情？
>> ZAMYLA陳：是的。
是。
打印相同的迴聲。
>> 觀眾：是對foreach循環的 只有這樣，才能索引行？
>> ZAMYLA陳：是foreach循環 唯一的辦法，你可以
通過行迭代？
號
您也可以使用for循環，提供 你知道的長度
行的數組。
>> 觀眾：你能訪問它 使用行為[聽不清]？
>> ZAMYLA陳：所以你不能訪問它 只是使用行，如果你沒有一個
foreach循環條件是 您還沒有宣布一行。
是。
是啊，在白色的。
>> 聽眾：那TR和TD呢？
>> ZAMYLA陳：所以tr和 TD是HTML標籤。
TR表示開始 的表行。
而每個TD表示 新表中的數據列。
>> 觀眾：對於一個視覺的東西一排 很喜歡，只是想像中的SQL語句，如何
它們具有一排。
[聽不清]。
>> ZAMYLA陳：是的。
這是一個很大的問題。
你可以想像行作為剛 像在Excel表中，只
的行的列表。
確定。
好的。
所以，現在我們已經討論了選擇，如果 不會有任何問題，我們將
在去到插入。
所以，如果我想插入一些 表並插入某些列
價值觀，我可以自己插入 進入拉文克勞的7年。
但有時可能會有重複的 價值觀，正如我們在pset7看到，當我們
更新了我們的產品組合。
>> 因此，在這種情況下，我們希望使用開啟 重複鍵更新，讓我們不
存儲多個行具有相同 珍惜而是對其進行更新。
那麼我們其實有更新， 這不是一個插入。
它只是在那裡你更新的更新 在一定的表與一個給定
條件，然後，最後，刪除 這確實一個非常類似的事情。
>> 您能否簡要：觀眾 走在重複鍵？
>> ZAMYLA陳：是的。
從本質上講這裡，我有INSERT INTO 古靈閣，是，帆船，這些值。
但ID，想必，是一個獨特的關鍵 值設置在MySQL表。
所以，如果我已經有了這個ID設置， 然後我不能插入新行。
因此，如果它不存在，則 那我也來更新它。
在白色的中間。
>> 觀眾：所以插入，更新，刪除， 和選擇，是那些所有可用
當地[聽不清]？
>> ZAMYLA陳：所以插入， 更新，刪除和
選擇是所有的SQL查詢。
所以每當你使用SQL， 你有那些可用。
>> 觀眾：回到過去的測驗 -
有一個問題，處理 如果你有一個表，並希望
插入測試成績中的一個，你插入 你的名字，所以它不會讓你
[聽不清]你的朋友的測試成績。
你會怎麼做，與插入？
>> ZAMYLA陳：所以現在的問題是關於 前一期中的問題。
我不知道其中的 一方面，這是現在。
因此，也許以後，如果你想 上來，告訴我，然後我就可以
肯定給你提示。
但講的東西插入，像 走別人的分數，當你
不應該，讓我們來談談 SQL注入攻擊。
因此，SQL注入攻擊本質上是 如果有人需要
優勢的低安全性 你正在服用的數據的方式。
>> 所以在這裡，就像在CS50金融， 當我們登錄的，我們可以在輸入
用戶名的登錄表單， 第一個文本框，
然後在密碼輸入。
也許我們的PHP代碼看起來可能 這樣的事情，$ username的
是後數據的用戶名和密碼 是後數據的密碼。
然後，我們只是執行我們的查詢，比如， 好了，好了，我們的查詢是要
從我們的用戶選擇，其中 用戶名是
一個他們提交。
而密碼是密碼， 這意味著口令匹配。
>> 現在，如果不是實際 提交一個實際的密碼，如
12345和猜測叉，上面寫著 密碼，並試圖破解他們的
帳戶，如果有什麼，而不是 他們提交了這一點。
他們可以鍵入也許 一個猜測的密碼。
然後，他們將完成 報價然後輸入或1 = 1。
這將直接踱步到SQL 查詢到是這個樣子。
從用戶選擇其中的username =插腳和密碼
等於百合或1 = 1。
>> 因此，無論密碼有 為正確或1 = 1，
這始終是真實的。
所以在這種情況下，基本上，使用者可 利用這一優勢，只要登錄
自己在和黑客 別人的賬戶。
所以這就是為什麼我們要避免 有人不得不這樣做。
但幸運的是，通過查詢功能 通過在佔位符會
這種照顧你。
此外，你通常會永遠都不想 實際提交的密碼
他們自己。
這就是為什麼我們散列或加密 他們在CS50融資。
>> 觀眾：過去談到測驗 關於MySQL的轉義字符串。
我們要擔心？
>> ZAMYLA陳：這是一個很好的問題。
MySQL的轉義字符串肯定是一個 函數是在我們的查詢中使用。
但一定要看看那。
我會說這是公平的遊戲知道 那你需要調用
功能上的繩子。
是啊，貝琳達？
>> 觀眾：你怎麼知道什麼時候 單引號或雙引號？
而且，我覺得自己像在課堂上你 提及有關沒有
在[聽不清]或某事或 在結束第二個單引號。
我覺得他指出，在該演講 你應該有撇號1
再沒有撇號 什麼的。
>> 觀眾：[聽不清]。
>> 觀眾：事情是最後一個 報價有在第二個框
不應該存在。
[聽不清]
因為當你把去年單 引述出來，匹配這些內容
其中的密碼，如果你有 查詢中，有在一個單引號
結束了。
你要使用單引號 作為面向1所述一個
[聽不清]。
那麼什麼是真正的文本 盒子不應該有。
>> ZAMYLA陳：我會改變這種狀況。
確定。
如果沒有任何問題，然後我會 將它傳遞給約瑟夫談
有關JavaScript的，等等。
>> [掌聲]
>> 王陽：所以我們正在運行 有點落後。
所以，如果你要離開，那也無妨。
但我們要求你保持你的頭向下 如果你是在中間，所以你
不要擋住相機，並使用 如果你有到後面退出。
我是約瑟夫的方式。
你好。
測試，測試。
丹，是好？
涼爽。
>> 因此視頻也將發布 網上的那些
現在不得不離開。
彆扭。
確定。
所以測驗複習。
這是一隻貓。
現在，JavaScript中，這也許是不 作為AWW一些你們的。
確定。
所以這是第一次，記得Zamyla。
請記住，PHP是 在服務器上運行。
和很多次，你們寫循環 在PHP中打印出來的HTML，對不對？
所以一旦該代碼執行，即 你打印出HTML輸出
被發送給用戶。
而一旦出現這種情況，沒有更多的PHP可以 運行的，除非你重新加載頁面，
當然，這重新執行PHP的。
但是，一旦你打印出的HTML， 你不能去任何地方。
>> 使得HTML被發送給用戶， 這是瀏覽器在這裡，在這裡
高粱是使用計算機。
和這麼好，有幾件事情 一旦我們發送HTML給用戶。
有時候，我們想這樣做 當你點擊的東西，我們要
彈出，那些各種各​​樣的警告框 相互作用，當您按下喜歡
鍵，當您單擊上的東西 頁，我想要的東西發生。
嗯，你可以不重新執行PHP 一旦代碼的HTML設置。
那麼，你如何做到這一點？
>> 我們引入了一個新的語言稱為 JavaScript中，它運行在瀏覽器中
可以讓你做的事情 您收到後為HTML
他們從服務器。
這就是為什麼我們稱之為客戶端 編程語言。
它可以在電腦上 -
客戶端。
有關迄今有問題嗎？
這種格局是有道理的人呢？
確定。
好。
好的。
所以，首先要注意 是JavaScript是不是PHP。
>> 他們有一些不同的語法， 我們將去成。
和他們有很不同的用途。
JavaScript中，再次為您 瀏覽器，用於客戶端。
服務器在某處運行在別人的 計算機發送信息
對你，對不對？
因此，如果我們要求你寫PHP代碼 關於考試的問題，不寫
JavaScript的，反之亦然。
你只失分， 它不會是正確的。
>> 所以，讓我們來看看一些 語法差異 -
JavaScript的左側 而右邊的PHP。
你會注意到的第一件事情 JavaScript中，我們聲明變量
var關鍵字 -
V-A-R。 PHP中的美元符號， 作為Zamyla前面所討論的。
如果你想聲明一個關聯 數組，我們看到了熟悉的語法上
右側用PHP。
在左邊，而不是 您使用大括號。
然後你的鑰匙是在左邊。
那麼你有一個冒號。
然後你有值 你想要的。
>> 因此，這是你將如何做到這一點在PHP 在右側與該第二
，在米洛啟動線。
那就是你將如何做到這一點的 左側在JavaScript中，如果你想
我們所說的對象。
而在JavaScript中的對象是 只是關聯數組。
所以，如果您要訪問的字段，在 PHP中使用這種支架的語法。
而這樣一來，您可以重新分配 這個所有者字段勞倫。
>> 那麼，在JavaScript中，如果一個人想 訪問一個字段並改變它，你可以
使用點語法。
您也可以使用括號語法。
但你不能使用 點語法在PHP。
這是行不通的。
它僅適用於PHP的。
最後，要打印的東西到 控制台，您可以使用console.log的，這
你們在pset8使用了很多。
您可以CONSOLE.LOG的。
>> 如果你想在打印一個數組 PHP中，你必須使用打印河
而在右邊，你看我哈希 字符串串聯那邊。
早些時候有人問。
我在JavaScript中使用一個加號。
如果我想的東西串連 在PHP中，我使用點。
這些是不同的。
如果你正在編寫PHP代碼， 不要用一個加號。
如果你正在編寫的JavaScript 代碼，不寫一個點。
這將是錯誤的。
，你會傷心。
>> 所以語法的差異。
了解你的語法，因為如果你有 寫一個問題，你用語法
從錯誤的語言， 它不會工作。
這將是錯誤的。
因此，讓我們來談談一些控制 流的差異，你如何使用
循環在他們每個人。
Zamyla走到右邊。
東西的右側 應該很熟悉。
讓我們來看看在左側。
>> 當您使用在JavaScriptÑ環， 你的循環變量，變種我在那邊，
遍歷數組的鍵。
所以你看名字，房子和作用。
如果我CONSOLE.LOG我，我得到 名稱，門牌和作用。
這些是密鑰。
在JavaScript中，foreach循環進入 在這個數組的值。
那麼，你注意到他們倆都是我。
但在這裡在PHP端，它打印 出米洛，CS50，和吉祥物。
這些都是在PHP中的值。
>> 因此，這些都是怎麼這兩個是不同的 在不同的語言。
所以，如果你正在使用一個foreach 循環，不要以為它
給你鑰匙。
如果您使用的是n個循環，不 假設它可以讓你的價值觀。
這是否有道理這麼遠嗎？
下一張幻燈片是要告訴你 您如何訪問在對面
他們每個人。
>> 好吧，如果你有鑰匙在JavaScript 和你想要的值了，
你只是索引到 數組這一點。
所以我米洛將讓你什麼 你想要的 - 值。
有一個在PHP中，這不同的語法。
如果你真的想知道的話，我不 認為我們已經把它拿給你呢。
但是，如果你有興趣，你可以使用 右邊這個附加的語法
側，實際上將讓你的 當你使用PHP的一鍵
foreach循環。
瑣事所以只是一點點 如果你有興趣。
>> 所以，這只是為了演示 這兩個循環之間的差異。
不要混淆起來，當你 編程的問題。
有關的任何問題。
涼爽。
好的。
JavaScript對象。
我談到了他們。
他們就像關聯數組。
有一件事我想請你注意 這裡是在關聯的值
數組可以在JavaScript的任何東西。
>> 它甚至可以是一個函數， 就像那邊。
我有一個函數， 是一個關鍵的值。
如果我想調用該函數， 我剛剛接觸樹皮。
然後我把括號 後。
並且工作。
因此，任何問題嗎？
沒有？
確定。
好。
JavaScript中，如PHP， 是弱類型。
這是什麼意思？
>> 它也有類型。
但是，當你聲明一個JavaScript 變量，你說我變種。
你不用說了吧。
這不是一個東西。
你剛才說這是一個變量。
然後用JavaScript處理 引擎蓋為你種下的。
我們之間自由轉換 類型，因為這個原因。
所以我開始了作為一個數 在這種情況下。
然後，我有一個字符串。
而我想補充我給它。
我重新分配它放回我。
>> 因此，在首行， i是數量。
在第二行，我現在變成了 字符串後，我做了重新分配。
在這裡，我只是串連 該數字到字符串。
所以你看，即使我是一個 在第一部分的整數，它的排序
像被轉換為 字符串，然後被添加
到那個打招呼的字符串。
所以這就是我的意思 由鬆散打字。
這就是你轉換之間 類型變得非常容易。
而且它不會拋出警告 在你如同C那樣。
>> 所以我現在包含打招呼 123的字符串。
下一步。
我們還可以比較自如 類型之間。
所以，如果你只是用==，很 像在PHP中，JavaScript的
做了類似的事情。
字符串123是相同的數 123，當你使用雙等號。
當使用三重等號，但也 要確保
的類型是一樣的。
所以，因為這是一個字符串，這是 一個數字，儘管它們都是
123，當你使用三 等於，你會得到錯誤的。
在雙相等的情況下，你會得到真正的， 因為雙等於沒有
在乎的類型。
三重等號並不關心類型。
有問題嗎？
確定。
>> 而關於JavaScript的另一件事是 範圍是一種全球除非你
中的函數。
它的工作原理相同 方法在PHP實際上。
所以，讓我們通過這個例子。
我設置我999。
然後，我進入這個循環。
所以，如果我打印我在此對 環，我希望0，1，2，3，4。
我得到到i = 4。
它增加我現在到5日 在fo​​r循環的結束。
然後它打破跳出循環， 因為它不符合
調理了。
>> 什麼你認為你未來 的console.log打印出來？
所以，這就是它會做在C在C中， 因為如果你有一個像我變種外
和你有一個循環內變種我，像一個 for循環，那麼它使得如
它的範圍內的，兩 我的是不同的。
在JavaScript中，它只是 把它當作同一個我。
我得到5，因為那是價值 後退出圈外。
因此，那些我的是一樣的我。
這是否有道理？
>> 嗯，這是有道理的 一個JavaScript的立場。
但是，同樣的模式不 結轉到下他們有
不同的作用域規則。
是。
>> 觀眾：[聽不清]
在函數外[聽不清]？
>> 王陽：所以外面哪個函數？
所以，我會得到，在短短一秒鐘。
所以我們調用foo（i）條。
這傳遞我到foo中，增量 它，然後記錄它。
所以這是5。
因此它成為6。
但我說的是 我在該函數。
因為它是一個參數，它的 作用域的函數。
所以一旦我真正擺脫這 功能，它現在打算去
回到舊我。
我只是因為範圍 它是在一個函數。
我們有範圍和職能。
但我們沒有範圍 在JavaScript函數。
這是否有道理？
是。
問題。
>> 觀眾：同[聽不清]？
>> 王陽：所以呀。
在PHP中，這是同樣的類型的東西。
有一個輕微的微妙實際。
但是你可以問我 該複查。
你並不真正需要知道的 這微妙的測驗。
對於所有意圖和目的，如 變量，全局和PHP，除非
他們是在一個函數，同一 在JavaScript中的事情。
是。
>> 觀眾：這是為什麼在允許 JavaScript和沒有別的地方？
>> 王陽：那麼，為什麼它讓 在JavaScript中，而不是C語言？
這只是誰想出了 JavaScript的決定，這是在確定
JavaScript的。
所以，它就像一門編程語言 約定我們會說。
是。
>> 觀眾：那麼，為什麼 他走6至5？
>> 王陽：所以從6到5， 因為當我通過我到foo中，該
我的foo裡面，現在範圍為foo， 因為範圍存在於功能
JavaScript的。
但是，一旦我離開這裡，因為它 在作用域的功能，我只是
使用常規的我這是內 控制流的其餘部分。
有意義嗎？
我可以繼續前進？
好的。
涼爽。
>> 這樣做的接受對象是 通過引用傳遞。
你知道當你通過 一個數組轉換成C你可以
其實修改數組？
這是在JavaScript中同樣的事情。
如果我通過一個對象，在這種情況下，我 米洛傳遞到這個catify功能。
米洛開始了。
他的名字叫米洛香蕉。
我通過該對象到一個函數 因為它是一個對象，一個關聯
數組中的JavaScript。
>> 當我執行一個操作 在該函數中，它會
真正改變的對象。
因此，這只會發生的對象 在JavaScript中，就像它發生
為C。所以米羅的名字裡面陣列 實際上將變成貓了。
這是否有道理？
因此，這僅適用於對象。
對象是通過引用傳遞。
是。
>> 觀眾：所以你說 相反，變量i。
>> 王陽：是啊。
其中變量i只是 一個數字，對不對？
這就像C語言，當你傳遞一個 一個整數，它使一個副本。
而當你傳遞一個數組，它實際上 改變了實際的數組
C.同樣的事情發生與 中的JavaScript這種情況。
好的。
而接下來，米洛是可悲的，因為 他現在是一隻貓。
這實際上米洛後 一些一趟獸醫。
>> 那麼，我們如何使用JavaScript 在一個網頁？
我們可以將其包含。
這是與帶標籤的HTML代碼。
所以，我必須帶標籤存在。
然後我把一些JavaScript 腳本標籤中的代碼。
然後執行此。
當我只是不喜歡這樣，它的 所謂內聯JavaScript。
這有點凌亂，因為 JavaScript是實際上在HTML。
>> 一個更好的方法來做到這一點，更漂亮， 是寫在你的JavaScript
外部文件，然後提供 腳本標記與源。
這將轉到該JavaScript文件 和讀取JavaScript代碼
該文件來代替。
而這樣一來，你沒有很多的 JavaScript的在你的開始
HTML文件，這使得 它非常的混亂。
你只要把它在其他地方。
然後它會從那裡讀取它。
這樣做是有道理的？
>> 安置事宜。
在這種特殊情況下， 劇本是身體。
所以，當我執行了，有 沒有在身體呢。
也許這會讓多一點點 當我告訴這下一部分的感覺。
在這種情況下，腳本 自帶的分區之後。
因此，格實際上出現 在第一頁上。
在這裡，在這個小小的紅色圓圈， 你看到顯示的文本。
然後警報顯示出來。
>> 在第一種情況中，因為腳本 是格前，
警報顯示第一。
然後在div後顯示出來 您關閉了對話框。
所以執行事項。
因此，我們將記住這一點。
這將是非常重要 在一點點。
確定。
這麼好，你怎麼等到 加載那麼在你整個頁面
執行一些代碼？
我們將進入這個有點 位以後了。
但只要保持這個位置 記事項時，我們
走到另一張幻燈片。
>> 所以我們得到的DOM現在。
什麼是DOM？
所以，如果你看一下HTML代碼，它只是 一群在屏幕上的文字。
那麼，如何的JavaScript知道 這是一個HTML元素？
因此，我們必須有一些記憶 這種表示法
結構，我們有。
每當我們有這個在內存中 在JavaScript中表示，我們稱之為
該DOM。
它只是一種方式，人們決定 我們應該代表這
HTML結構。
>> 而這是什麼DOM的樣子？
那麼，在內存中的表示， 我們把這個文本。
我們把它變成記憶 表示。
因此，這是HTML。
所以，我們首先發現，每 DOM樹中有一個文件。
它看起來像一棵樹。
並且文檔包含HTML 標籤，其實一切
在這裡面，現在。
HTML標記有兩個孩子。
它有一個頭。
這頭，如果你看一下縮進 那邊怎麼它的結構
結束標籤之間， 頭上有一個孩子。
孩子是冠軍。
沒錯。
>> 現在，我們有一個身體的孩子。
然後是身體有 孩子所謂的家庭。
而且家裡有三個孩子 -
最古老的，中間和最年輕的。
所以，你應該知道如何畫一個圖 這樣，當我們問你怎麼
畫一個圖，當我們給 您左方的HTML。
知道如何生產的DOM樹。
而這些東西在裡面，但只是 一些文字，我已經代表
作為小盒子。
>> 這是否DOM樹結構，使 感和DOM是什麼？
那麼，在p代表什麼？
在這裡，在p那邊 在該標籤代表一個
段落標記在HTML中。
所以，你可以看看它。
但它只是意味著它的一些 空間的一些文字。
它有一些默認的CSS樣式， 因為它是一個段落標記。
但真的不擔心 該部分太多。
只知道它是一個佔位符 對於一些文字。
是。
問題？
是。
>> 觀眾：你剛才提到的CSS。
哈希家庭和散列 所有的東西基本上是
即在CSS中的ID？
>> 王陽：是的，沒錯。
我會得到什麼這些哈希 是指在一秒鐘。
當安吉拉走過去的CSS，她 談到CSS選擇器。
這些是CSS選擇器的 她在說什麼。
是的，羅布？
>> ROB BOWDEN：我也想發表評論 標題標籤裡面的DOM
也是一個文本節點。
>> 王陽：對。
所以標題標籤裡面， 我有一些文字的DOM。
因此，其實，這個稱號應該有一個像 小箱脫落的它。
但它其實並不重要 在這種情況下，太多。
我們真的不關心文本節點， 當我們打電話給他們，太多了。
OK，我們做的。
顯然，我們做的。
我會解決，當 我再次上​​傳。
這是否有道理？
>> 那麼，我們如何使用DOM工作？
每當你處理DOM中 JavaScript中，有兩個步驟。
你選擇一個DOM元素。
然後你做的東西出來。
因此，在這種情況下，抽象的，我 選擇的中間元素。
然後做的東西的一個例子 它會改變的文本。
曾經是鮑勃。
現在，我所做的是我改變 鮑勃米洛在這種情況下。
>> 那麼，我們實際上做如何？
我們如何做選擇？
我們如何做的做的東西 事情一旦我們去的嗎？
嗯，順便你們已經學會了 在這個類是通過使用我們的東西
所謂的jQuery。
那麼，什麼是jQuery的？
jQuery是一個庫，它使得 JavaScript的更容易編寫。
所以有人花時間 並寫了jQuery的。
>> jQuery的實際寫入 在JavaScript中。
然後，因為他們現在這樣做，我們 有一大堆的函數，
我們可以使用，使我們的 生活真的很容易。
那麼，什麼是一些 它的東西呢？
這使得選擇的元素更容易。
這使得改變的HTML， 添加類更容易。
它使阿賈克斯更容易。
我們會得到，在第二。
>> 而且它類似於C庫。
所以，你有string.h中， 你得到strlen的。
你得到的strcpy，所有這些事情。
當你有jQuery的，你會得到很好的 方式選擇要素的變化
活動，等等。
你會得到額外的功能， JavaScript不給你。
所以jQuery的JavaScript不。
jQuery是那是寫在庫 的JavaScript，使JavaScript的
更容易編寫。
>> 所以，jQuery是不是一種編程 語言。
但JavaScript。
做。
確保你正確的術語。
有問題嗎？
是。
那是一個問題嗎？
好的。
那麼，你如何使用jQuery？
那麼，當你在寫一些 JavaScript代碼和你有一個
jQuery的在您的文件的頂部為 腳本文件，可以使用美元符號
現在可以訪問jQuery的。
這是從不同的 美元符號在PHP。
>> 這是相同的符號，你 輸入您的鍵盤上。
但他們的意思非常不同的事情。
在PHP中美元符號表示該 是我聲明一個變量。
在JavaScript中，當你拍了 jQuery的，它代表的jQuery。
所以記住這一點。
那麼，如何可能，我們選擇DOM元素？
那麼，當你這樣做的醜陋的JavaScript 這樣，您訪問
記錄全局變量。
然後你通過ID家人得到元素。
這真是漫長而羅嗦 而且不是很好。
>> 或者，你可以得到所有元素 這是一個p標籤。
這在JavaScript中工作過。
但我們從來沒有真正表現出 你的語法太多。
我們向您展示了jQuery的。
使整個選擇了那裡， 有人在JavaScript中只是得到
濃縮至這個很不錯的美元 簽署包括hashtag家庭。
和$ P，只是它是這樣的。
如果你想選擇所有p標籤 一個家庭裡面，我們把空間
兩者之間。
而現在，我們得到所有的p 標記一個家庭裡面。
>> 和看起來很熟悉？
那麼，安吉拉談到 CSS選擇器。
給我一秒鐘。
因此，為了選擇一個元素， 你只需要使用同樣的事情，你
會做一個CSS選擇器。
如果你把一個哈希在前面 它，它會選擇通過ID。
一個點按類選擇。
如果你只是有一點不 哈希或點，它選擇這些標籤。
的問題。
是嗎？
>> 觀眾：當我們使用點在我們的 HTML，是不jQuery的？
>> 王陽：點在我們的HTML 是一個JavaScript的事情。
這不是一個jQuery的事情。
你們學會了它的方式 jQuery是使用。HTML。
然後你通過它的任何 在HTML將是。
所以，我會得到，在剛剛 第二個實際上。
那麼，我們如何做的東西到元 一旦我們選擇了它？
所以這是一個例子 選擇一個元素。
所以，現在，我們想要做的東西給它。
>> 因此，在這種情況下，讓我回去 到上一張幻燈片。
之前，它是鮑勃。
我想改變這種狀況 裡面的HTML米洛。
所以，我所說的HTML功能 從元素。
該HTML功能 元件的方法。
然後我給它什麼 我想在HTML的人。
它只是取代了什麼裡面 該標籤與任何我給它。
是。
問題？
>> 觀眾：這個標籤是用來 只對jQuery的。
[聽不清]
我們不會使用它。
>> 王陽：是的，沒錯。
不過不要太擔心 關於純JavaScript。
我只是想讓你們把重點放在如何 會做它用jQuery，因為
這將是重要的 部分的測驗。
右。
沒錯。
所以你看到，包括hashtag，使 對應於與選擇元件
因為該主題標籤的ID中。
包括hashtag指證。
而這種元素具有中等的ID。
所以這是我們選擇的元素。
>> 觀眾：[聽不清]。
美元符號包括hashtag [聽不清]？
>> 王陽：因此，沒有。
現在的問題是，您可以使用。值。
和。值僅適用於元素 是輸入。
在jQuery中，這將是 ，纈氨酸，不是。價值。
所以，我會得到一個小例子， 演示這一切組合
在第二個。
但我認為這提供一個小片段 有意義的人為止。
要更改HTML， 調用HTML的方法。
是。
>> 觀眾：你能解釋一下 再次的方法？
>> 王陽：所以一個方法僅僅是一個 功能屬於1，在該
情況下，這些DOM元素之一， 因為你看到我
第一個選擇的元素。
其實，讓我用鼠標。
我選擇的第一個元素。
然後我打電話給這個HTML 功能，它有。
而且由於該功能屬於 這件事情，我們把它的方法。
這是因為它只是一個花哨的名字。
再說一遍。
所以請記住，我們選擇 現在的元素。
我們已經把它的內部 元素變量。
正確嗎？
>> 因此，當我們想改變的HTML上 在裡面，因為它是鮑勃之前，您
希望該文本更改為米洛。
所以我們稱之為的HTML。
我們告訴它什麼是HTML中 該元素應該是現在。
所以它改變它米洛， 因為我給它米洛。
>> 觀眾：所以他們一起工作。
[聽不清]
>> 王陽：是啊，是啊。
他們一起工作。
所以，他們中的一個選擇 該元素。
和第二個不 什麼東西。
是。
>> 觀眾：[聽不清]。
如果此方法是從不同的HTML 你有法等於實際。
>> 王陽：是啊。
這是一種不同的方法。
我們可以覆蓋，在短短一秒鐘 當我們到達一個例子。
我想確保我們加快 因為我們的時間不多了。
但是我們現在運行的方式隨著時間的推移。
確定。
涼爽。
所以，如果你想添加一個類，有 還有一個附加的類方法。
這是什麼只是一個例子 你可以使用jQuery做。
這只是增加了一個類。
>> 如果你想刪除它， 你可以調用刪除。
這只是另一件你可以做的。
因此，更多的例子可以做的事。
所以，我可以只把它放在 像這樣的頂部？
老三刪除。
如果我只是執行的JavaScript在 我的文件的頂部，將這項工作？
右。
因為中間不存在。
因此，這是行不通的。
執行順序。
它去頂第一。
什麼？
>> 觀眾：老三不存在了嗎？
>> 王陽：是啊。
年齡最小的還不存在。
沒錯。
>> 觀眾：你說中間。
>> 王陽：對不起。
年齡最小的還不存在。
而另一件事是我沒有 包含了jQuery
文件要求腳本的src。
所以這是行不通的。
其實，我並沒有這樣做，在 下一張幻燈片，這是
應該解決，要么。
但我們這樣做的方式是JavaScript的 是事件驅動的。
所以，我們做的是我們使用一個事件 處理程序來實現這一目標。
所以，我選擇文檔 設置第一。
我說好，當文檔 準備好了，讓我運行一個函數。
所以，這是所有的語法手段。
>> 我選擇的文件。
現在，當該文件是 準備好後，運行該函數。
所以在這裡當文檔 準備好了，這意味著所有的HTML有
裝，然後我運行功能 去除該元素。
所以現在，當我運行這個功能 我傳遞給準備好了，我
保證在所有的HTML 頁面會先存在。
是。
問題？
>> 觀眾：什麼是事件關鍵字 中的函數？
>> 王陽：所以在該事件關鍵字 功能僅僅是一個參數，
被傳遞給函數 對於任何事件。
這只是一些 你得到免費的。
當您在使用密鑰句柄 pset8，該事件可以告訴你，對
你壓上的例子，其中的關鍵。
在這種情況下，一個準備好的情況下， 它實際上不是超級有用。
但是，對於一個鍵按下的事件，它更 有用的，因為你知道哪些
關鍵你通過訪問鍵按下 代碼關閉該事件的對象。
正確嗎？
這是否有道理？
確定。
是。
問題？
>> 觀眾：所以你能放 腳本標記低了下去？
>> 王陽：所以呀。
你可以把腳本 標記低了下去。
但當時它只是變得非常凌亂。
我們想集中所有 我們在一個地方的代碼。
這將使我們能夠做到這一點。
還記得前面我說，有一個更好的 這樣才能保證元素
在頁面上你執行代碼之前？
而這僅僅是一個很好的方式 你會做到這一點。
>> 觀眾：[聽不清]。
>> 王陽：是啊。
您仍然必須，對不對？
因為記得，你包括 文件在頁面的頂部。
所以它會之前，先執行 你到了頁面底部。
確定。
所以你也可以添加不同的 類型的事件處理程序。
這其中只是處理點擊。
當我點擊老三，然後 它會彈出一個警告。
這僅僅是一個不同的 類型的事件。
相對於ready事件，你現在 使用click事件，當您收到
點擊一個元素。
>> 所以在這種情況下，請記住，點擊 處理程序附加到最小。
因此，它只能發生在 我點擊最小。
而在另一篇ready事件 被附加到文檔。
所以它會等待該文件 要準備好。
有意義嗎？
我想我可以繼續前進。
是。
問題？
>> 觀眾：[聽不清]。
在這種情況下，你使用[聽不清]。
>> 王陽：哦，是的，因為在這個 情況下，我必須等待最年輕的
元素出現在屏幕上第一 之前，我可以附加一個單擊處理程序
它，這就是為什麼我把它放在裡面 的文件準備好。
確定。
而接下來的，所以這是一個很大的例子 你將如何結合起來的一切。
這僅僅是一個表單驗證的例子 你已經看到了講座。
因此，需要一步一步來的 你通過這個。
這將是完全確定。
剛讀它從上到下。
>> 我有一個窗體底部。
當文檔準備好了，我附上 提交處理程序的形式，這樣，
當我提交表單，我得到的值 裡面每個這些投入。
我檢查它是否為空。
如果是空白的，我返回false，因為 我並不想提交表單，
因為形式是錯誤的。
如果密碼為空或者它的不足 超過八個字符，不提交
的形式，因為這也是錯誤的。
而返回false只是防止 從提交和表單
去到一個新的頁面。
>> 並希望，這是有道理的。
我想你們應該走通 這段代碼一步你自己的一步。
一旦你明白什麼叫做選擇 元素和做的東西給它
實際上涉及，這將使 很多道理給你。
是嗎？
>> 觀眾：什麼的 名稱=用戶名是什麼意思？
>> 王陽：所以名=用戶名和 名=密碼只是意味著看
不論屬性 你選擇。
再有相匹配。
所以我們進入註冊。
然後我們來看看所有輸入 和登記。
然後我們挑了一個地方的名字 屬性等於用戶名。
因此，首先選擇只有選擇 用戶名輸入。
而這第二個選擇只選擇 密碼之一，因為那些有
他們的名字屬性設置為什麼 他們應該是。
問題？
>> 觀眾：在提交，請問該怎麼做 底部化解頂部？
>> 王陽：所以，這是因為 事件處理程序。
所以，我們正在等待提交事件 任何從形式發射。
而這一切都是服從。
為什麼我打電話提交了那裡？
它說，當提交表單時， 我得到一個提交事件。
所以我只截取和 然後運行此代碼來代替。
是嗎？
>> 觀眾：你為什麼有 有功能的事件？
為什麼你就不能[聽不清]？
>> 王陽：因為在JavaScript中，你 要聲明的函數。
這就是它是如何工作的 在JavaScript中。
你不得不說這是怎麼回事 運行一個函數。
所以，你告訴它你 期待一個函數在這裡，而不是
只是大括號。
>> 觀眾：和函數 是什麼如下？
>> 王陽：是啊。
該功能是什麼在裡面 後花括號
該函數的關鍵字。
是嗎？
>> 觀眾：[聽不清]。
>> 王陽：對於提交？
>> 觀眾：不，對於功能 沒有事件。
>> 王陽：是啊。
因此，如果沒有的情況下， 你可以有。
如果你並不需要的情況下， 那麼你可以忽略它。
但如果這樣做，那麼你 只是把它放在那裡。
是。
快速的問題？
>> 觀眾：[聽不清]。
>> 王陽：是啊。
因為你需要做的 的document.ready只是說等待所有
在頁面上的HTML來首先加載。
通常，你希望你的元素 在地方，你運行任何代碼之前。
好的。
我們必須讓阿賈克斯。
我們沒有多少時間了。
所以利弊。
JavaScript是比較容易的嘗試 寫與jQuery。
但jQuery是一種緩慢。
>> 這就像PHP是比C慢， 因為它的解釋。
和jQuery是不是有點慢 JavaScript的，因為它做了很多
引擎蓋下的東西。
所以，如果你正在使用jQuery，它是 不只是一點點慢
JavaScript的，儘管它 為您提供了很好的優雅。
最後，阿賈克斯。
因此，與阿賈克斯遠，你沒見過的Ajax 在pset7的詞條，因為
當你這樣做，你提交 一種形式的報價。
它加載一個新的頁面。
所以，你得到這個大的白色閃光 在頁面上，而
第二個頁面加載時，是否正確？
>> 這將是非常好的，如果你 沒有這個閃光燈。
像Facebook，如果你只是滾動到 底部，它增加了新的內容
而無需刷新整個頁面。
因此，像這樣就好了。
這是JavaScript代碼 在左側。
你得到的是輸入的內部。
你從雅虎股票信息
然後你犯了一個很大的字符串， 說，OK，這是我要留言
顯示在屏幕上。
然後你把這個信息裡面 這得到了一些HTML元素
顯示在屏幕上。
>> 所以，這一切發生的事情在這裡。
所以基本上，因為這是所有 JavaScript和你不需要運行
了PHP的，這將確保 該頁面不刷新。
所以這只是一個抽象的概念 我是說這裡現在。
抽象的想法是，如果你這樣做 所有在JavaScript中，你沒有一個
頁面刷新。
但你如何真正做到這一點？
>> 嗯，事實上，讓我們來談談 一個問題，這第一。
一個問題是在JavaScript中， 執行是同步的。
所以，你必須等待一個 行前，你完成
執行下一行。
而如果我要去了雅虎， 和他們的服務器是很慢，和
他們花三秒鐘 給我回該股票的信息？
當我打的價格線，如果 執行是同步的，因為它是由
默認情況下，它只是要做的是 您的瀏覽器會拖延
三秒鐘。
而且你不會是能夠做到 任何事情，而它得到的數據。
這將被凍結。
>> 這就是壞的。
你不希望用戶 具有冷凍網頁。
正確嗎？
這只是壞。
每個人都同意？
如果你在瀏覽Facebook和它 凍結，你不能做任何事情，你
得到真正沮喪。
所以，解決的辦法是我們做什麼 異步代替。
因此，所有這種異步的事情說 是，我要問這個
的URL的一些數據。
然後我會堅持下去。
我只是要保持執行 不管那是以後的代碼。
>> 然後每當該數據已準備就緒， 然後，我會處理它。
這就是它在說什麼。
>> 觀眾：阿賈克斯只是使 代碼異步？
>> 王陽：這是一個異步 取數據的方法。
所以，關於Ajax的第一件事 是它讓我得到的數據
從外部網站。
第二件事是它可以確保 我的頁面不熄火，而我
取該數據。
這就是它的異步的一部分。
因為它熄滅別的地方， 因為我說我堅持去做，而
它讀取該數據，即 使得異步的。
我一直在執行。
>> 因此，保持異步 心裡有數。
我會告訴你什麼是 所不同的是。
同步版本 是在左邊。
異步版本 是在右側。
看數字，看哪個 步驟對應於哪
執行在每一行。
那邊，警報顯示第一。
因為得到股票信息從雅虎
需要三秒鐘，停轉 三秒鐘。
然後它會提醒價格 那些在三秒鐘後。
>> 所以，現在，該警報顯示 向上當時 -
3秒英寸
再後，提醒了。
所以它只是一步一步來。
這就像你們什麼 會接受，是否正確？
與異步執行， 你第一次提醒。
然後你去上這個網址。
和你說，我要去 只要求該數據。
然後我要去 以後再處理它。
所以它會立即執行 接下來之後，我做這行
異步請求。
>> 所以0.001秒，你看到警報喜。
執行該功能，警報再見。
因為我做了一個承諾，我 以後會處理數據，有什麼
發生時的數據回來 三秒鐘後，然後我運行
功能，我有在那裡。
是嗎？
>> 觀眾：你可以指定或 澄清一下Ajax的意思嗎？
>> 王陽：那麼Ajax是一種方式，如果我 需要數據時，我在一個網站，我
不想刷新頁面，則 我使用名為Ajax的這種技術。
這本質上只是手段，去獲取 從其他網站的數據。
而做到這一點的方式，只是 不熄火我的網頁。
>> 觀眾：所以是一種內在的 JavaScript或jQuery的一部分嗎？
>> 王陽：所以有人寫了一個方法來做到 這在JavaScript中很長一段時間以前。
在一個點上，它是不存在的。
於是有人發明了這種技術 讓人們請求此數據
以這種方式。
他們寫了一些東西 要為你做它。
和jQuery只是給你這個 很不錯的辦法做到這一點
與此$。get函數。
問題？
我可以回答有關問題 阿賈克斯之後了。
我會在這裡。
>> 所以，讓我們我們獲取數據而不 刷新頁面。
它讓我們在這樣做 異步方式
不凍結的頁面。
太長了，沒看過，如果是 解釋是太長了你。
所以最後，跨站點 腳本攻擊。
我們認為這與Zamyla。
如果我的數據庫有人有這個名字， 這是這個腳本標記，而我
有我的網頁上一些代碼，打印 出人的一排名字，或者我有
中插入JavaScript代碼 這名進入頁面，
什麼Html獲取產生的？
好吧，我打印出來的HTML標記。
我打印出所有這些標籤。
>> 我去哪裡，我打印的部分 和朋友們聚會。
我打印出來勞倫。
它打印出來米洛。
然後我在數據庫名稱 是劇本後
直言不諱的Facebook狀態。
因為我這個插入到頁面 因為它看起來像JavaScript中，當
當前頁被發送給用戶， 它被執行為JavaScript。
所以這就是我們所說的 跨站點腳本攻擊。
有人把惡意信息 您可能對應於數據庫
一些額外的字符串或 一些JavaScript字符串。
>> 而當它被打印出來的 以這種方式頁面，那麼什麼
發生的情況是不好的代碼被執行 我沒打算
它得到執行。
而這一切，一個跨站點 腳本攻擊。
和你周圍的路 這就像Zamyla說。
你只是包裝的東西 HTML特殊字符。
與此HTML特殊字符是一個PHP 功能，以防止這種
從發生在你身上的事情 如果你有一個惡意的
字符串在數據庫中。
它只是逃脫它，所以它不 得到解釋為HTML。
它取代了小括號 我們所說的實體。
於是我們過了這個講座中也。
所以，我想你們應該有 把握好這一點。
有問題嗎？
是。
>> 觀眾：那麼，如何將 在[聽不清]？
>> 王陽：再說了。
>> 觀眾：如何將顯示器 -
>> 王陽：對。
所以，你有什麼事情，說，當 我註冊，輸入我的名字。
我只需鍵入在這一領域，我的名字是 剝後直言不諱的Facebook
狀態密切的腳本標記。
而這只是被放入 數據庫，因為我不能說別人
在世界上沒有一個名字 用左箭頭，或在
在它的字的腳本。
這並沒有真正意義。
所以，我只是要確保我 消毒的東西之前，我打印出來
出到頁面中。
>> 觀眾：所以HTML特殊卡 防止腳本標籤？
>> 王陽：是啊。
所以它不會阻止腳本標記。
它只是可以確保 script標籤沒有得到
解釋為HTML或 -
是的。
它只是出來作為什麼 它實際上是。
好的。
所以這是測驗檢討。
涼爽。
>> [掌聲]