[音樂播放] DAVID J.馬蘭:好吧。 歡迎回來。 這是CS50。 這是8週結束。 如你所知,我們有漂亮 在幾個正常辦公時間 的食堂, 包括安嫩伯格。 而一些球隊的好心 拍了些照片最近。 為了慶祝 萬聖節,我們認為我們會 分享一個而被抓住了我們 驚喜在這裡安嫩伯格廳剛剛 那天晚上。 你的同學雅各布合影 這張照片,但更有趣 是在Facebook上,隨後 談話發生之後。 響應他的第一篇文章 他的照片是這樣的。 幾分鐘後,他決定 來一補自己與此有關。 它接著說,然後去這個, 然後,甚至更可笑 是當他的媽媽在幫腔。 然後最終, 看來這只是 一個美妙的詭計了 玩這回事。 所以,如果你想 看到雅各布和其他人, 其中辛西婭·孟,誰的 背後CS50區工作人員的場景, 前往這個網址,這戲在這裡。 因此,事不宜遲,今天我們 繼續這個看網絡編程, 和節目的實際製作 沒有你的命令行中運行, 而是在瀏覽器內運行。 據推測,現在,還是挺 不久,你會 要在落實之中 自己的Web服務器, 從web編程不同。 在pset6 Web服務器是所有關於 編寫軟件,它知道如何採取 從瀏覽器的HTTP請求, 甚至從你,一個人, 有一個程序叫Telnet和 再響應這些請求要么 通過吐出一個HTML文件,或 JPEG或GIF,甚至是PHP文件。 但是,與Web服務器,它不是 應該只是打開一個PHP文件, 東西.php結尾,並 然後吐出的內容。 它應該做的 什麼該文件第一? 可以這麼說。 不編譯它,我們週一表示, 但rather--因此,解釋它。 PHP是一種解釋型語言,所以 在你的網絡的關鍵特徵之一 服務器,儘管美國實施, 這種能力對於你的web服務器 要注意哦。 這是.php結尾的文件。 我不只是將其發送到 用戶喜歡它的靜態內容, 而是讓我讀它一行 線,從左到右,並解釋它。 而要做到,你 球員將主​​要 踢一個節目中的器具, 和對大量的計算機系統, 只是所謂的PHP。 這就是PHP的名 語言本身的解釋。 所以,這一塊我們實施 你和什麼留給你, 最終,是一個數 件,其中 正在實施的支持 對於靜態內容。 但現在,與 問題設置7,你 要開始過渡到 實際編寫PHP代碼 這被解釋 在談及到後端 數據庫,其存儲的信息。 因此,讓我們更好地了解第一 一對夫婦這些超全局變量 而到底有多少權力,你 獲得開箱即用免費 與像PHP語言。 你做的事情沒有 自己實現。 所以,我們看到在週一$ _ GET, 這是一個超全局, 這是剛剛PHP代言的全球 變量,你可以在任何地方訪問。 而且裡面有什麼的$ _GET? 什麼是這裡面 超全局,我們看到了什麼? 當然,在統計上 至少有一個人知道。 什麼是裡面的$ _GET? 是嗎? 聽眾:這是變數 你把在查詢字符串。 DAVID J.馬蘭:完美。 這是你的變量 把在查詢字符串。 所以,在我們的年長的例子 谷歌重新實現的時候,我們有 一個URL,然後問號, 其中劃定HTTP的開始 參數,那麼我們有Q等於 東西,像Q等於貓, 你會自動地往裡走 那$ _GET超級全局適合你, 因為PHP的,是Q的一個關鍵, 和其價值的貓。 換句話說,$ _GET和所有的 這些東西都是關聯數組, 排序哈希表,即 存儲鍵和值。 現在,早在pset5,哈希 表,你可能已經實現, 或者試試你可能 已經實施了,真的 是有效的關聯 陣列,數據結構 由此可以聯想 鍵與值。 但在pset5,該值是微不足道的。 價值本質上是真的還是假的。 在字典中的字? 所以,當你散列像蘋果字 看是否蘋果是在詞典, 你的檢查功能想必 返回true或false。 所以,這是有效的 值,我們得到了。 但是我們看到在週一 簡單地說,你肯定能 聯想更有趣 價值不僅僅是true或false 連鍵,就像蘋果。 其實你可以返回 任意的字符串,而事實上, 這就是$ _ GET和這些 其他變量讓你做。 因此,$ _ POST是神似, 但如果你通過郵寄提交表單, 不同的HTTP方法是 用的東西像信用卡, 信息和私人信息,甚至 二進制信息,如照片, 這些事情最終的$ _ POST內。 而實際上的文件 像JPEG文件和諸如此類的東西, 甚至還有另一個不 在這裡所謂的$ _FILES為好。 因此,我們的服務器將不糾纏於太多 不多,但它可以讓你訪問 排序大約低級別的細節 您正在使用的服務器本身。 Cookie和會話,不過, 我們將切實看到了。 最後就是我們用來實現 一個購物車的概念。 一個超級簡單的,但召回 我們有這樣的例子在這裡, 計算有多少次你 之前曾訪問過這個頁面。 但今天,而不是僅僅看 這樣的效果,讓我們打開了 Chrome的檢查, 這通常可以 做通過右鍵單擊或控制 點擊網頁上的任何地方, 然後選擇檢查元素。 或者,你可以通過菜單 我們描述pset6的規範。 而我要去的網絡標籤 在這裡,讓我們觀看了一會兒 在HTTP流量的 來回。 首先,讓我繼續前進 和清晰的Chrome瀏覽器的緩存。 所以,有些人可能很熟悉 這種技術已經, 而我們要使用它 在這裡調試。 現在我們電腦 科學家們將開始 這樣做調試 的目的,從而 我們將清除緩存, 典型地,這樣我們就 可以去掉的東西叫做餅乾。 所以,你可能熟悉一般 用什麼餅乾,或至少 它們的存在,但有什麼 你了解他們, 由於只是一個用戶 計算機,什麼是Cookie? 是啊。 聽眾:這是一個有點of--好,不 在計算機科學中的一個術語位。 它是一個數據塊,一個 網址發送給您,以便 要能夠對你記錄統計。 DAVID J.馬蘭:好,好。 所以它是一個數據塊,一個 服務器,使您的計算機上, 讓我們甚至概括它 更多的,它是一個關鍵的value--好, 這是越來越精確。 它是一塊 信息,一個數據片, 該服務器能夠 把你的計算機上 而很多時候,服務器做 這使要記住你是誰。 因此,例如,比值 你很可能 登錄到網站,如Facebook, 或Gmail或其它前, 你在你的登錄 用戶名和密碼, 再後,對某些數 幾分鐘或幾小時甚至幾天的, 服務器記住 你是,事實上,已登錄。 現在,如何是實際發生的事情? 因為你肯定不會重新輸入 您的用戶名和密碼,每次 您導航到 不同的頁面在Facebook上。 因此,原來的 餅乾的答案。 一個cookie,你可以想到的是, 有點像,數字手 郵票,你可能會在遊 公園或俱樂部,基本上 表示你一直在這裡 之前,你已經過 顯示你的ID的保鏢,對於 實例,該俱樂部或公園 現在應該假設你 已通過身份驗證。 你已經確定了。 所以考慮到這一點, 讓我們在這裡開闢專櫃。 讓我先走,我只是做了, 並清除所有的我的餅乾。 現在我什麼都做的是 按住Shift,只為好措施, 強行重新加載頁面。 按住Shift鍵,只要確保 沒有什麼被緩存。 而這裡的請求 這又來回。 所以,在這裡我們有一個請求,讓 我放大到這裡,和大量的本 是有點無趣的細節 現在,瀏覽器會自動有 發送,但讓我們點擊查看 來源看原始頭。 如果你已經潛入pset6不已, 你一定會認識到的東西 這樣,也許有些 這裡的這些線, 但更有趣的今天 如果我向下滾動,而不是請求 但所謂的反應, 這條線可能看起來很熟悉。 這是一件好事 當你看到一個200 OK。 顯然,這是 日期和時間,在服務器上 這裡面的一堆東西。 哦,這是有趣的。 原來,當你使用 PHP的,至少在這台服務​​器, 服務器吐出什麼 PHP版本你使用。 其中,實際上,為了安全 目的,是不是一件好事。 但是,我們會回來的 其他時間也許吧。 但是,現在這是多汁行的今天, 我們簡要地看到了其中的一些, 我想我的時候,我們戳 各地督察在那個時候, 設置cookie是什麼種植 那個小資料片 到您的計算機。 這是一個HTTP頭 這是有效的 告訴你的瀏覽器, Chrome瀏覽器,IE瀏覽器,不管, 在用戶的瀏覽器哎商店 硬盤驅動器,或在用戶的RAM中, 一個叫做PHPSESSID鍵,這是一個 速記符號的會話ID, 並給它的值 0vlk8t,點,點,點。 一個很長的假 隨機的字母數字字符串。 這只是一個非常大的數字,但 它的編碼字母和數字 使得它的尺寸可以 甚至比單純的數字更大。 然後,通過該方式,路徑= /,即 只是表示這個cookie應 與相關聯的 該網站的全部, 不只是一個特定 頁面整個事情。 因此,這是虛擬的郵戳。 這是因為,雖然服務器,臉譜, 或者在我們的例子家電, 有字面上寫0vlk8t 等等,在你的手。 注意一下服務器的, 不這樣做是不是 保存我的用戶名,當然 不存儲密碼。 相反,它似乎是 存儲偽隨機信息 所以沒有人能猜到 什麼我的手郵票。 在服務器端, 同時,服務器 是要記住,大概 在數據庫什麼的, 該用戶,誰在未來 呈現0vlk8t的郵戳,點, 點,斑點,應與此相關的 特別是購物車,可以這麼說。 換句話說,如果我現在去 回到這裡,然後刷新頁面, 如何在服務器知道 我參觀了一次? 或者,如果我再這樣做,如何做服務器 知道,我已經訪問過它兩次? 好吧,如果我去到這個 最近的請求,這 現在是第三次,我已經發 總體而言,現在看到我的要求。 還有這個 請在這裡,同 和以前一樣,還是有一大堆 的東西,我們忽略了和以前一樣, 但在最後頭,這 一次,因為我以前來過這裡, 是演示文稿的 這個虛擬的郵戳。 因此這條線在這裡,沒有設置的cookie 但餅乾結腸PHPSESSI = 0vlk8t, 這只是我的瀏覽器的自動 演示這個郵戳,這樣的 現在的服務器,只要它實現, 哦,這是用戶0vlk8t點,點,點, 我現在還記得他或她是誰 和與該用戶重新關聯的任何 信息我想,所有的 這些信息可以通過你存儲, 程序員在$ _SESSION。 所以要清楚,如果我打開了真正的快 在gedit中的實際文件,counter.php, 在我的本地主機的公共目錄 和以前一樣,請注意,事實上, 我最終存儲在 $ _SESSION報價引文結束“反” 在前面的計數器的值,該值 我從這些線爬起來在這裡,我們 看著最後一次加一。 因此,引擎蓋下方, 這是所有的餅乾。 這數字只是那種 用手戳來回, 坦白地說,如果你打開Chrome的 督察在任何網站上 你今天拜訪,與 超高概率, 你會看到也許有, 也許半打餅乾 被記住你。 而更糟糕的是,如果這些 網站你訪問 所有有廣告,這 肯定是相當普遍的今天, 如果這些廣告的未來 一些中央黨,有人 像谷歌或AdWords,因為他們 稱自己的產品之一 或其它這樣的供應商那 賣廣告,什麼是有趣的, 坦率地說什麼是一個小 令人擔憂的,如何HTTP工作, 是,如果你有一個內嵌廣告 在Facebook.com和Google.com, 和Harvard.edu,任何數量 的網站,所以它是這樣 ,有一個中間人誰是服務 了廣告所有這三個網站, 事實證明,在 Cookies是每個域。 所以,如果你有一個廣告的未來 同一家公司在不同的網站, 該公司能夠有效地跟踪誰 你是在所有這些網站。 哈佛可能不知道 您正在訪問的Facebook。 Facebook的可能不知道 您正在訪問的哈佛。 但無論廣告服務 他們使用的是如果該域名 存在於兩個Harv​​ard.edu幅 頁面和Facebook.com網頁, 這個中間人一定會知道你是誰 因為被共享這些cookie 對面,或者更確切地說於, 那個所謂的中間人。 因此,我們會回來這 安全隱患物, 但有大量的信息 隨時存儲你你 請訪問幾乎所有的網頁 互聯網,它真的 降低到這個非常簡單的機構。 會發生什麼,那麼,如果 你是超級偏執狂 而你決定進入Chrome或IE瀏覽器 或什麼的,然後關閉你的cookies? 會發生什麼? 是嗎? 你really--你這樣做對嗎? 行。 不,請便。 聽眾:某些網站沒有 沒有它的功能像Facebook的。 DAVID J.馬蘭:是啊! 因此,某些網站 只是停止工作。 而在大多數網站這幾天 從根本上依賴於餅乾, 特別是如果他們有登錄 在,他們只是要打破。 由於考慮 替代方案中,如果網站 有沒有辦法記住你是誰, 因此,您的瀏覽器不 表示與每個HTTP 該郵戳的要求, 有效的網站 像Facebook是怎麼回事 不得不提示你 每一次縫補一次登錄 更改網頁,或點擊一個鏈接,該鏈接 肯定不是一個特別好的用戶 的經驗。 所以,有,也就是 之間的權衡。 因此,事不宜遲,讓我們 想當然地認為web編程, 像PHP語言,你可以記住 在問題這樣的設置信息 當你實現自己的7 E * TRADE樣的網站,用以購買 而賣出股票,你會記得很清楚 什麼樣的用戶已經購買和出售 他或她是誰 通過本次會議的方式。 但是,我們將需要 比電子郵件鴿友方式 開始圍繞保持信息。 對不對? 上週一,我們談到了即時的新生 如何在版本一個網站, 幾年前,所有我們所做的是 通過電子郵件發送普羅克特誰的 負責校內體育 節目,名稱,性別, 而無論他們是否是一個隊長, 和別人的宿舍是誰的 註冊為校內運動。 因此,它不壞,但他或她再 不得不巨魔通過他們的電子郵件, 創建一個電子表格或類似的東西 即,把一切都安排。 所以我們肯定程序員 可以為監考官做到這一點。 和SQL這樣進入, 結構化查詢語言, 這是會好看 不同於C和PHP, 你會在潛水得多手 PHP和問題設置7,而且SQL, 或SQL,這是一種語言 你用跟一個數據庫。 但是,什麼是數據庫? 那麼你想想 數據庫,至少在目前, 剛才是像一個Excel文件,或 如果你是一個Mac用戶一個數字文件, 或者如果你是一個谷歌企業應用套件 用戶谷歌電子表格, 它實際上是一個數據庫,還是真的 具體的關係數據庫。 關係數據庫是剛剛 一些具有行和列, 你可以存儲任何類型的 在這些行或列的信息。 但是,什麼是好的關於SQL和 關於實際的數據庫,而不是 電子表格或谷歌電子表格, 是,你可以用一種語言 實際執行查詢 插入數據,刪除數據, 尋找數據,甚至 最重要的是,和你 不必相當手動使用它 正如你可能通常一個谷歌 電子表格是這樣的。 因此,在SQL中,有一堆 基本陳述或片 功能內置的。 沒有什麼比這更多的, 但你可以去一個巨大的距離 只是知道 這種語言稱為 SQL有至少四個 語句,你可以利用。 刪除,用於去除數據, 插入,添加行, 更新時,用於改變 行和選擇, 為取回行 這確實是SQL做什麼。 它的工作完全是靠行,以便 當你插入或刪除, 或更新,或選擇你是什麼 取回作為一個所謂的結果集, 象行的陣列。 從表一幫行。 因此,早在一天, 甚至到今天, 你可以用互動 數據庫使用命令行, 但它不是特別有趣的使用 這種黑白風格的窗口 而實際執行的命令 戳在你的數據庫。 圖形用戶界面或GUI, 是更可取的,可以說, 所以我們推薦工具 預裝你在設備上 被稱為phpMyAdmin的。 這是一個總的巧合, 這個東西的名字有PHP中呢, 它只是意味著人 誰寫了這個程序本身 在PHP寫的。 但它的最終目的是管理 數據庫服務器,如MySQL服務器 你可能有,因為你 這樣做,在CS50設備。 因此,有更詳細的在這裡比 我們需要關心的今天, 但什麼是關鍵的是,在左邊 手側的數據庫的列表 您有您的計算機上, 您CS50家電, 或來最終的項目,你可能會 對第三方公司的 網站或網絡服務器,即 你可能會付出空間。 這樣,左邊的是 的數據庫,其中的一個 是pset7這是我從旁邊借來的 週pset中,然後在頂 有注意到有一個 一堆標籤,其中一 是數據庫,SQL,地位, 用戶,出口等等。 所以,你可以走很長 方法只是實現 大多數的用戶界面 在頂部左邊的列 和橫跨右上方那裡。 那麼,我們能不能用這個做什麼? 好吧,讓我們開始創建 信息位如下。 假設下面是這種情況, 這將是在短短的幾天裡, 你想實現一個 網站名為CS50金融, 這個網站可以讓你買 引用引文結束和出售股票。 而且它要弄清楚 這些股票的價格, 最終,你會看到, 通過交談,雅虎財經。 其中,奇妙,有一個免費服務 因此,你可以通過在股票行情 就像歌為谷歌,它會 給你回谷歌目前的股票 過去的價格範圍內 至少幾分鐘。 所以你使用的是,最終, 假裝為用戶 購買和出售實際 使用虛擬貨幣的股票, 但第一件事 用戶會看到 這是登錄界面,詢問他們 為自己的用戶名和密碼。 因此,第一之一 在pset7你挑戰 將是實現後端 數據庫,電子表格,如果你願意, 這是怎麼回事存儲 用戶名和密碼 最終他們擁有的股票, 有多少,多少錢他們有, 所以在一堆其他的東西 其他表或電子表格。 因此,讓我們來看看如何 可能出現的第一眼。 我要回去 家電和我 打算去這個網址在這裡 phpMyAdmin的本地主機/ phpmyadmin的 你會看到它 帶我到一個接口 正是因為我們看到的 屏幕截圖,在這裡我 有一個附加的數據庫 所謂講座今天 讓我繼續前進 首先,點擊pset7。 我似乎有幾個選項, 1為新的,用於創建一個新的表, 和一個鏈接到用戶,這 是我已經創建了一個表。 那麼什麼是表? 所以,如果你使用Excel中 以前,如果你已經 使用數字或谷歌 電子表格,你打開一個窗口 你會得到一大堆 行和列, 但你通常工作表 在底部,或者單獨的標籤。 你能想到的每一個 工作表作為表 使得數據庫,最終是 的一個或多個表的組合,1 或多個工作表,在 世界上正常的電子表格。 因此,讓我繼續前進, 點擊此工作表上 我預製,叫用戶,亦稱 數據庫表。 如果我在這裡向下滾動, 讓我縮小了一點, 這是phpMyAdmin的告訴 我們是這個表裡面現在。 這是一個有點混亂,在第一 一目了然因為UI不是 最漂亮的東西在世界上,但 有趣的是這部分在這裡。 ID,用戶名和哈希值。 在前進,你會交到 在這個問題集7, 我們為您提供包含超級文件 小型數據庫表,居然借 從黑客版 問題設置兩個, 這裡面有六排。 一個是貝琳達所有 一路下跌到一個用於Zamyla, 並注意對那些左 用戶名就像一個唯一的ID, 兩個,三個,四個,五個,六個,整體, 然後向右是哈希值。 如果,賠率是,你沒做 黑客版的問題設置兩個, 但是哈希就像一個加密 密碼有幾個注意事項。 所以,你在這裡看到什麼 所有六個的加密版本 我們從問題的密碼 設置兩個的黑客版。 現在左邊是只是一些GUI的東西, 編輯此行,複製該行, 刪除此行。 但是,什麼是有趣的 現如下。 其實我可以開始 嘗試用此表。 所以,如果我去,然後單擊SQL 選項卡中,我得到這個大文本框。 這不是我們如何去 這樣做在實際編寫代碼。 需要明確的是,phpMyAdmin的 僅僅是一個工具,它是 打算讓我們撥開圍繞數據庫 讓我們嘗試查詢。 因此,例如,假設 我執行的正是這一點。 選擇,這是其中之一 關鍵字我前面提到的,明星, 它代表所有 列在表中。 從什麼表? 那麼,用戶。 並注意有這 奇怪的約定,SQL 在這裡你實際使用 背面蜱,通常, 不是單引號,而不是雙引號 當你談論的表名, 所以後面的報價是對的事 鍵盤的左上角最 有可能。 所以,現在讓我繼續前進 而剛剛離開,僅 向下滾動並單擊Go,我們 究竟要看到同樣的事情。 我們剛剛執行的SQL查詢 他說選擇明星的一切 從表稱為用戶, 你得到的回复是這樣。 最終,我們將能夠 做同樣的事情在代碼中, 但現在我想說的 確實是看到它在我的瀏覽器。 好吧,讓我們做一些事情 有一點不同。 讓我回到了SQL選項卡, 讓我們只想說,什麼? Zamyla已經失去了她所有的 錢,因此,它是 時間讓我們刪除了她作為一個用戶。 她不再登錄。 所以我要說刪除from-- 好,維護資本 為了保持一致性,刪除 從用戶那裡。 因此,我們可以有這些 謂詞,或者這些 預選賽,在我發言結束 在那裡,我怎麼能刪除Zamyla? 她的名字Zamyla,所以 列,其中一列 被命名的,所以其中name =“Zamyla”。 在這裡,我使用雙 引號或單引號, 你只用背蜱時 談論的名稱,例如, 的表或字段。 讓我點擊轉到這裡。 而現在,網頁是 作為一個小緊張。 或者,你真的要執行刪除 從用戶那裡名稱等於Zamyla? 是。 所以,現在,如果我們回到我的表 通過點擊用戶,請注意,哼。 我瘋玩。 而事實上樣的,我 點擊走這麼快 你甚至不看 紅色的錯誤消息,也許吧。 我做了什麼錯? 聽眾:你沒必要 要利用她的名字。 DAVID J.馬蘭:是的,我 大寫她的名字, 但她的username--其實我 做了幾個錯誤,對吧? 其中,她的用戶名是 zamyla,小寫字母Z, 並且列名是用戶名, 沒有名字,所以讓我們再次做到這一點。 讓我繼續前進, 從用戶那裡刪除 用戶名等於報價引文結束“Zamyla”。 行? 因此,這看起來好一點,讓 我去向下滾動並單擊Go。 它仍然會 罵我是肯定的。 我點擊是的,現在我們看到, 坦率地說這事,真的 快,不到一 第二當然,這 正是得到執行的查詢。 為了確認,讓我點擊用戶 而事實上,現在Zamyla走了。 現在,讓我們做的正好相反。 假設加布希望 註冊該網站。 什麼是SQL查詢,有什麼 命令我可以鍵入要添加加布? 那麼它是相當簡單的。 插入到用戶,而現在 它變得有點神秘。 我需要指定給所述服務器, 哪些領域我想分配。 我真的不關心什麼Gabe的ID 數字是多少,所以我打算跳過。 我不是要說 用戶名,散列,然後 值我想把 那裡將是加布。 然後他的散列,我不知道。 所以現在,我要去 離開,作為一個大的事情。 我們會回來 在這個問題集 規範,如何你真正做到這一點。 所以注意,再次,語法。 插入到表名,然後 字段括號的列表中, 你想要的列添加 值,然後就 完全相同的順序從左 對你要添加的值, 它只是因為包裝 文字是有點長。 所以,現在讓我單擊Go。 一行插入。 而現在,如果我回去 用戶,有什麼有趣的 是,不僅是加布現在在 數據庫,什麼是顯然他的身份證? 那麼它的七人。 為什麼7時,我沒加嗎? 所以這也就是一 功能,你可獲得的數據庫。 很多內置功能。 事實證明,當 在該表中, 我預先配置是自動 以這樣的方式分配一個編號 它遞增。 所以,如果你曾經戳左右, 看著你的Facebook的ID 數字是多少,這些天它不是真的 一個事情,但Facebook作為一個API, 應用程序編程接口, 因此,你可以拿回 約一大堆數據 你自己,你的朋友, 和你聯繫。 而曾經被認為是一種 性涼,早在一天, 是仰視你的 Facebook的ID號了。 馬克·扎克伯格的, 例如,為三 因為他是該網站的作者。 而隨著劇情的推移,他創造 兩個測試帳號,用戶一和二, 他隨後被刪除。 因此,扎克,這是他的用戶名 在Facebook上,是ID號3, 我們大家都有數多 大於3的這些日子。 事實上,在某些時候 Facebook的離開 即使從使用int,這 是一個32位的值,以使用 下一步驟時, 基本上是一個很長很長這樣 它們能夠容納 甚至更多的用戶註冊。 因此,一個有趣的小歷史事實。 所以,這只是 基本語法與 我們可能會執行幾個 查詢,但我們實際上可以 做了一堆更多的事情與SQL。 你會看到,最終, 在問題設置7 你必須做出一個 的設計決定數, 其中將是 使用什麼樣的數據類型。 所以,就像在C,有數據 在一個數據庫類型,如MySQL, 並且數據類型,你必須選擇 從這裡包括這些領域。 CHAR,VARCHAR,INT,大整型,小數 和日期的時間,以及其他許多。 因此,讓我們真正做到這一點。 讓我們假裝我們沒 一方面你這個用戶的表 讓我繼續前進,創造,為 我在講課數據庫 - 居然讓我繼續前進,刪除 表我在這裡已經 這樣我們就可以真正創造這一點。 哎呦。 我要放棄這一 表,現在我 打算再次去了 講課的數據庫在這裡, 我要創建一個表 所謂的用戶,讓我們 只是做三列 最初,然後單擊Go。 現在,在大多數情況下, 再次,這僅僅是 使用這個所謂的圖形化工具 phpMyAdmin的,我們正在做什麼,現在 在創建表。 因此,這又彷彿文件,新建, 並創建一個新的Excel文件。 所以它問我幾 題,從左至右, 什麼是第一列的名稱, 然後將第二列的名稱, 和第三的名稱。 因此,讓我們重新創建。 ID,然後用戶名是1, 然後哈希是另一回事。 那麼,如果數據類型 現在可以像ID的字段? 這裡是數據類型的整個列表 在數據庫中提供給你, 而現在就讓我們一起去整型。 32位的值,我不知道 認為現實的我 將有超過4十億 用戶在我的帳戶,我的服務, 所以我要繼續前進 到下一個問題。 我不打算指定 長度或值, 它不適用 這裡的int本身。 現在我可以指定, 顯然,一個缺省 值,這我不會指定。 排序規則,我不知道那是什麼。 一個屬性。 現在我們實際上做 有一個設計決定。 因此,有幾場在這裡,並不是所有的 它們都是適用的,但無符號 僅僅意味著什麼? 該整數必須是? 只是非負的。 所以它必須是0上起來。 不,我不會去檢查,因為 我希望每個用戶都擁有一個ID, 它不能為空。 然後,我們得到了一些更 有趣的設計決策是這樣的。 我們會回來的這一刻, 數據庫但另一特點 是,是,你可以告訴 數據庫服務器繼續 並優化自己,你的 內存和硬盤空間, 使選擇和插入, 刪除和更新都非常快。 與pset5對比這一點。 如果你想查找的東西 在哈希表,該表 你覺得作為一個數據庫, 誰必須做所有的 為使您的哈希表的快速工作。 這就像,很明顯,你。 對不對? 你必須把所有的時間精 調整外,獲得一個散列函數 沒錯,搞清楚如何 許多水桶有。 但是,什麼是好的,再次, 關於數據庫 你剛才踢所有的 這對其它人 誰曾想到這 通過對你來說,什麼 我要在這裡說下 索引是我的ID字段 將是的主要方式 識別用戶在該數據庫中。 我不會想 Zamyla為Zamyla的, 我會想 她為數字6。 為什麼,或許,更好的 直觀地想和型號 每個使用您的個人行 一個數,而不是其他 像字符串,象Zamyla 或者加布或更長的字符串還是? 是嗎? 聽眾:一個ID是唯一的? DAVID J.馬蘭:再說一遍嗎? 聽眾:一個ID是唯一的? DAVID J.馬蘭:一個ID 是唯一的,但suppose-- 如在一般的情況下 與用戶名,假設 我也說只能有1 Zamyla在世界上,只有一個加布。 我可以並處的獨特性 約束對字符串也一樣,如果我想要的。 所以不是一個糟糕的想法。 聽眾:更安全。 DAVID J.馬蘭:更安全,為什麼呢? 聽眾:你不能分辨出哪 是,如在該用戶。 DAVID J.馬蘭:OK,你 不能告訴用戶哪些 是所以有 隱私方面的, 特別是如果該標識可能 出現的URL。 這麼肯定,那可能這種工作了。 其他的想法? 是嗎? 聽眾:它更容易 在一個int執行操作。 DAVID J.馬蘭:這是真正的踢球者。 這只是更有效率, 或更容易為計算機, 對整數進行操作。 對不對? 一個int是保證 是32位,而Zamyla 是幾個字符長,加布里埃爾 是幾個字符, 達文波特是很長的,所以它的 沒有特別有效的是使用 要比較的字符串值,並期待 對於字段,更新領域, 如果你能逃脫 只用一個整數。 只有32位。 這樣的用戶名,也通過這種方式, 不必是唯一的, 雖然他們也許應該 是,甚至在這種方式也 用戶可以被允許 改變他或她的用戶名。 現在讓我們離開這個作為 識別用戶的主要手段。 這是告訴數據庫 繼續優化自己 等等的ID查找窗口是超級快。 AI,可怕的命名,只是 指自動遞增, 這是校驗 框,我們需要檢查 指定的ID字段 自動更新對我來說, 然後我要去 滾動到這裡權 坦白說,我真的沒有興趣 在任意多個域。 當然不是今天。 所以,我要回去在這裡, 到第一列,其中 我需要指定用戶名 和散列,讓我們 至少集中於 第二個現在。 INT可能不是正確的判罰, 還等什麼更有意義吧? 聽眾:文本。 DAVID J.馬蘭:再說一遍嗎? 聽眾:文本。 DAVID J.馬蘭:文本? OK,我聽到的文字。 還有什麼? 樣的,我們有一大堆的選擇 這是文字上的。 所以,什麼時候,為什麼,做 你使用其中的一些? 好吧CHAR,相反你可能會 想,是不是一個單一的字符。 它的字符的特定數目。 因此,如果我們知道,所有的用戶名 必須像八個字, 作為用於在年齡較大的共同 電腦系統,我可​​以說的char 然後我可以在這裡說,8。 這時候,第三列變 適用的創建表的時候。 但是,這是一種煩人 因為有些人可能 希望有一個較長的用戶名 超過八個字符, 有些人可能會想 具有更短的用戶名, 那麼,為什麼自己奉獻 到一個特定號碼? 為什麼不能有一個變量 字符數量和公正 說,一個名稱的最大長度 是的,我不知道,像64個字符。 我想不出任何朋友誰 有超過64個字符的名稱, 即使那是太短,你可以 當然碰到它隨意。 這樣的varchar是可變 字符數。 文字是不是一個壞的本能,和 排序坦言,做什麼它說, 但一個文本字段可以是 像65000字節最少。 這可能是矯枉過正了 場,而事實上,是的,65,535。 這可能是矯枉過正了 名字,所以我們會堅持,通常情況下, 用VARCHAR處理的文本 場和哈希,太。 哈希,事實證明,我們可以做一個 VARCHAR以及之類的東西, 但我們今天不會集中在 加密那裡和數字 我們實際上可能 要使用它的長度。 但讓​​我失望向右滾動。 你只能有一個 為表主索引, 但我想申請任何這些, 現在,用戶名,你會說什麼? 什麼用戶名應該是基於一個模糊 這四個選項的理解? 只是他們的名字? 聽眾:獨特的。 DAVID J.馬蘭:所以唯一的,對不對? 所以,事實證明,不僅可以 你告訴一個數據庫,提前, 這是主要的方式 的識別領域。 你也可以說這是 將是一個唯一的字段。 它不會是 我依靠的東西, 但我想數據庫 基本上有,如果條件下,使 如果我曾經試圖註冊 兩個用戶具有相同的名稱, 數據庫平出 不會讓我。 我可能有一些額外的代碼 在PHP中,防止為多, 但數據庫也可以確保 這是永遠不會發生的。 現在,作為一個在旁邊,特別是作為 你想想最後的項目, 記住它索引而進行全 文字實際上是相當有用的。 如果你有一個更大的數據庫,而不是用 幾十個,但與數百或數千 甚至上百萬的領域,你可以 還提前告知數據庫 這是一場我要去 要搜索了很多。 也許它的用戶名, 也許它的生物,如果你 做一個類似Facebook的網站, 具有該用戶的允許的段落 保存,如果你想 提前告知數據庫 我將要尋找在這個領域 很多,但它不一定是唯一的, 您可以指定我創建一個索引。 或者,你也可以說讓我做 排序的任意搜查的命令一樣 或控制樓喜歡你 可能在文字處理, 所以你可以看任意字符串 和子在這個領域。 換句話說,我們得到 在學期點 在這裡你不必擔心 如何高效實現的事情。 你只需要了解什麼 設計決策做出讓你 使用了正確的工具 貿易,以充分利用功能 其他人都為你打造的。 所以要回顧一下,主要應該只 有一個,你只能有一個, 它就是你承諾的東西 用來識別領域唯一。 獨特的是在精神上剛相似,但 你可能只是偶爾使用它, 但你希望數據庫強加於人。 指數只是手段搶先 加快速度,在未來 這樣我可以搜索 物在該區域。 然後全文一般是 段落或短文,或大機構 在那裡,你的文字 也可能希望 通配符像明星的等價物。 右。 所以這是一種 很多的一次。 讓我們來看看,如果我們不能提取 這樣的一些特徵 然後建立一些 相當簡單,但功能強大。 所以其中的其他 你的設計決策 最終將會有沿 存儲引擎的線條。 而讓我補提這個 在期待最後的項目, 與期待讓我們 say--沒有讓我們做到這一點。 讓我們來打造這個小 應用程序第一次。 我要進入我的終端 窗口,並在這裡不 只有counter.php,這是我們現在要 擺脫為不再有密切關係, 但我們有一大堆 目錄和這個的 將是在精神上非常相似 什麼,你會在看到問題設置7。 因此,我們有三個目錄 包括公共和模板, 也正是我們離開的 我們的整個MVC模式(星期一)。 並回顧一下,在公眾還將會持續下去 我希望用戶在任何文件實際 V能夠參觀 通過URL瀏覽器。 模板。 我們沒有把模板是什麼? 什麼樣的東西? 沒有太多,但一對夫婦 至少在星期一的文件。 是啊。 聽眾:頁眉和頁腳? DAVID J.馬蘭:頁眉和頁腳。 所以,我們今天類似的東西了。 我們有幾個文件,但 頁腳我明白了,頭喔, 然後一堆其他文件。 因此,這是等價 在V MVC視圖,其中, 再次,將是一個多一點 明確在問題設置7, 但是這僅僅是一個文件夾,我 投入了很多我的美學。 我的很多的HTML,我的很多形式。 同時,包括,是另一 有這三個文件目錄 讓我們來快速瀏覽一下這些。 我要繼續前進 開放config.php文件。 事實證明,很多 就像前面的名詞, 你犀利包括 CS50點h行駛pset7。 在今天的例子,你會 做的是,等效 有需要聲明 有效地 包括以下幾行。 所以要清楚,這是 一個名為config.php文件。 並注意它在做什麼。 它顯然是在做什麼 神秘,打開錯誤信息 所以,你可以看到他們在瀏覽器中。 它,那麼,顯然 需要其他兩個文件 所以這是像的#include在C中, 然後這一塊我們也看到, 我們已經依靠,這開啟 該購物車一樣的功能。 這意味著cookie將 可以來回發送。 那麼,為什麼這很有趣? 那麼,如果我們回到這個 目錄並打開,例如 constance.php。 請注意,PHP不支持常量, 它不是很喜歡的#define在C. 相反,你從字面上 說的定義,並通知 我已經預先存儲 四個常數在這個文件中。 一個是今天的數據庫,為 我的密碼,我的用戶名, 和服務器的名稱。 因此,這些實際上將是 在問題非常相似設置7。 最後,這就是我 會得到一些不錯的功能 從工作人員,在functions.php文件 是一串代碼,我們已經寫了, 我偷了一些這方面的 從問題設置7 今天,是做了一堆東西 讓我們只看其中一個 特別是。 此功能在這裡, 查詢時,將是 我們調用PHP函數 為了執行SQL。 剛才我們使用 phpMyAdmin的,但是這只是 對於那種學習的目的 和診斷目的 而忘記了你的數據庫集。 當你真正使用 數據庫,你的人, 顯然不會 被拔了網 頁面每次有人註冊。 你會寫代碼, 插入和刪除用戶的需求, 而我們要做到這一點 由查詢功能的方式。 如果我現在向下滾動,有 將是一些更多的功能。 重定向是要 是我們寫了一個函數 為您,讓您 向用戶發送到另一個URL, 和渲染是一個函數,很喜歡 我們看到在週一,實際呈現 一個模板,但更多關於這些的 形式pset7自己的穿行。 現在,讓我們繼續前進,做到這一點。 讓我進入我的演講表 看到有目前沒有 在這裡,只是還沒有,讓我也去 進入我的公開目錄,其中 這裡只有一個文件,index.php文件。 這個文件看起來是超級簡單 此刻,它看起來就像這樣。 很像我們如何 週一不放過。 我需要這個文件, config.php中,這是在 一個包括目錄,該目錄 在點點,我的父母, 然後它只是呈現這個文件。 所以,這是什麼文件? 讓我們在我的模板中打開 form.php的,我們會看到這一點。 超級簡單的,顯然這種形式是 要通過$ _GET或$ _POST提交。 快速完整性檢查。 從字面上直觀地搜索文件。 方法等於職位。 因此,它不會使用的URL,如 谷歌確實,這將排序隱藏 背後的信息 場景和它的 要提交到 所謂register.php文件, 這就是文件 我們還沒有寫 但是,這是怎麼回事 樣子是這樣的。 如果我去到一個單獨的頁面,這是 哪些本地主機/ index.php的樣子。 又一次,在服務器的 只是假設的index.php。 輸入。 所以這就是我們 在和我想要做的 是能夠鍵入東西 像大衛,然後 我的電話號碼,這會說 617-555-1212現在,註冊 現在找不到register.php。 所以,我需要實現這一點。 因此,讓我們迅速掀起 這樣的事情了。 讓我進入我的公開目錄 做register.php的gedit中, 現在我要繼續前進, 啟動PHP模式,就像我們在週一, 並關閉PHP的標籤,並 讓我們做一些事情。 所以一個,我知道,從 寫過這種形式, 我要檢查以下幾點。 如果是空的,無論用戶 鍵入的名稱字段中,然後 我會說些什麼 像道歉失踪的名字。 道歉,同時, 沒有一個內置的PHP的東西, 這是我們寫了一個函數 在functions.php中的pset7 這樣您就可以訪問它。 否則,如果其他領域 為空,數,那麼我 要道歉 用戶說缺數。 保存該文件。 現在,讓我們回到我的瀏覽器, 回到論壇再試一次。 註冊。 行。 什麼都沒有發生,這是很好的。 我沒有得到一個錯誤信息。 但如果相反,讓我們重新加載此 頁面,並且不提供任何東西。 該死的。 做到這一點。 註冊。 我做了什麼錯? 如果為空,$ _ POST名。 再說一遍? 哦,當然。 我忘了最重要的部分,它 是需要(“../包括/ config.php文件”)。 我需要有訪問 抱歉功能, 所以,什麼也沒有發生。 該功能實際上並不存在。 因此,讓我們試試這個了。 讓我們重新加載頁面,點擊註冊。 行。 它就在那裡。 因此,輸出我們 這裡看到的是結果 中調用一個道歉 功能,超級簡單, 它只是打印出什麼 我把它作為一個參數。 好吧,讓我們的合作。 讓我們來為我的名字 像大衛,註冊, 失踪人數確定讓我們 提供這一點。 617-555-1212。 註冊。 行。 所以,一切都很好了,只是沒有 有趣的事情正在發生。 所以,現在讓我們做更多的東西 有趣的發生是這樣的。 讓我進入phpMyAdmin的,讓我們 其實創建一個名為users表, 我要去給它3 列,我會很快 創建ID,然後 名字,然後數, 和ID字段我 要離開為int。 名稱字段我要去 離開為varchar, 我們會說64,有些武斷。 我要去數 做,你知道嗎? 我們正在進入 支持美國的數字在這裡, 所以我打算做的事 像焦炭,然後10個字符 最大的區號 然後七位數。 然後在這裡,我要 指定自動增加這個領域, 使之成為一個主鍵, 我要繼續前進,不 檢查任何其他的盒子。 所以,當我現在終於單擊保存, 我回到我的用戶表, 這是什麼樣子,如果我 現在點擊新標籤結構。 所以這一點,要清楚, 僅僅是phpMyAdmin的的方法 說法數據庫表 有一個ID,名字,和一個數 這些特定的配置 我們會忽略其餘字段 還有現在。 所以,現在我該怎麼想呢? 所以,如果我現在去到我 源代碼,如果一切正常 我想請執行以下查詢。 插入,而我正好可以 用戶說我不嚴格 需要那些背蜱,如果是 不是一個危險的詞像用戶。 我要說的名字, 號,然後在這裡我 不會硬編碼 數字值的呢。 我打算把兩個問號。 這是一個約定 在許多語言 如果你想擁有其中 佔位符的字符串 你要使用的問題 商標,其原因我們將 再來聊聊 安全性,並且在這裡 我要通過這些 兩個字段的名稱後, 然後發布號, 現在保存文件。 而現在我要去 再往這裡是一個超級 簡單地說rendersuccess.php,這 將是另一個模板。 我要創造非常快。 Geditsuccess.php,我只是去 說H1的成功在該文件中。 行。 所以,現在,讓我們回到 瀏覽器,在那裡我參觀之前。 讓我們繼續前進,並確認我寫的 大衛,我寫了一個電話號碼, 註冊。 該死的。 我做了什麼錯? 所以,我看到一個錯誤在這裡,你 在您的SQL語法錯誤。 讓我跳回到gedit中,讓 我回去register.php, 並沒有我忽略了什麼 重要的是最後一次? 我需要這個。 你想知道比其他 拜讀過,但我需要這個。 所以,現在讓我們回去,這 是要看到在瀏覽器有用 這就是為什麼在config.php 我們吐出的錯誤。 讓我們繼續前進,刷新, 點擊繼續,取得成功。 所以,現在讓我去到我 這裡的數據庫,然後單擊用戶, 和瀏覽,而現在通知我 有大衛在我的數據庫在這裡。 現在,技術上這個網站是 還沒有在公共互聯網上, 所以我不能有其他 人們把這裡 但如果我現在想,對於 舉例來說,給自己發送了一條短信。 讓我們去上肢體這裡 看看這個實際工作。 我要繼續前進 並刪除該行 我們將這種模糊 出在視頻購買 所以我們沒有 整個互聯網發短信我, 我們現在會去到 瀏覽器,我們就去了演講 我們會輸入不同 數字在這裡,註冊,取得成功。 所以,現在,我自己的號碼是大概在 數據庫中,現在最有趣的部分。 讓我們實際使用PHP做 編程的東西, 無論是從命令 行或從其他地方, 而現在我只是 要保持簡單 而我要進入我的 在此目錄中,並做到以下幾點。 gedit中的腳本讓我們說,我們將 把它叫做文本,#!/用戶/斌/ env的PHP, 就像我們看到的最後一次。 PHP。 現在我該怎麼辦要求 包括config.php文件, 但這樣做可能 導致一定的誤差。 現在我要繼續前進,說 行查詢,從用戶選擇的明星, 現在在這裡,我會做一個技術 從最後一次為每行的行。 而我要做的事情很簡單。 printf的假設名字是這樣的, 和數量是這樣的,反斜線ñ。 而現在,我要通過 行引用引文結束的名字, 和行報價引文結束數, 現在讓我們繼續 和我的終端窗口 CHMOD此一+ X,使 這個腳本調用可執行文件的文本。 現在,讓我們運行文本。 好了,進步。 所以,我現在已經寫了 命令行腳本, 在一個名為PHP,即語言, 由於需要線 可以訪問所有這些配置 我指定的常量。 數據庫等的名稱。 其實,只是要清楚 這不是僥倖, 讓我繼續前進,登記, 真快,別人喜歡搶 並給他的555-1212號。 而現在,如果我運行腳本 再次,注意電源 是我們正在做的數據庫。 現在我馬上看到什麼 另外兩行是在我的數據庫。 所以,現在讓我們嘗試做一些事情 甚至裡面票友, 這是我們的一部分 事先沒有測試, 所以我最後一次這樣做 事情發生了可怕的出錯, 我們有視頻的效果。 事實上,是的,搞笑的一邊。 所以最後一次,在一個 講課就像兩年前, 我們決定,我決定了,要 這一切都將是一個偉大的想法 動態生成的電子郵件 類,使用整個數據庫CS50 學生,誰給了我們他們的數字 和他們的手機運營商,你 可能還記得pset0, 怎麼講道理,事實證明 我在我的程序中有一個小錯誤,並 在2012年做了幾個錯誤,我想。 由此,一個我曾經for循環 究竟做了這種事情, 遍歷數據庫, 從數據庫中獲取的名稱, 從數據庫的名稱,然後在每個 該循環迭代我發了封電子郵件。 而不是發送一個電子郵件,但是,我 發送一個電子郵件的第一次迭代, 和兩個郵件第二次迭代,發 三封郵件,第二次迭代,這 你可能還記得我們 漸近符號的討論 不好這個大O,如:n的平方 為我發送了多少短信, 但它甚至沒有電子郵件 這是短信。 如你所知,上座率不 超級朝著結束的學期高 所以我認為這將是可愛的 的時候說,“你為什麼不上課嗎?” 在短信我 發送給全班同學, 而這是有趣的喜歡的50% 類,但另外50%,其中一些人 嚇壞了,我送難以置信 歉意的甜蜜音符 工作人員道歉 已經錯過了剛剛​​的演講 這一次,對不對? 這樣就會可怕地歪。 因此,在這樣的精神,讓我們試試這個 再次,只是用我的電話號碼。 事先,在functions.php中, 我在這裡寫了這個功能。 這就是所謂的文本,它 需要三個參數。 一個數字,載體,並發送信息。 我使用一個switch語句,其 奇妙的PHP取字符串,不只是 整數,而我並沒有實現 這所有的一切支持, 我剛剛做了AT&T和Verizon。 因為事實證明 與這些運營商 他們有郵件短信網關, 讓你可以確實 發送電子郵件到一個地址 就像在vtext.com電話號碼 而如果用戶還沒有被阻止 消息,它會通過 是一條短信。 現在要做到這一點,我將要加 一個字段的真快,以我的數據庫。 我要進入 我的結構,我 要繼續前進,並添加 字段在表的末端。 讓我們單擊Go,我 要調用這個載體 而現在我要去 離開這個作為一個欄文本, 但我們可以在未來的票友。 我要趕緊去 進入我的表,我 要擺脫搶的, 因為這是一個假的號碼, 我要進入編輯在這裡和我 要手動更改我的運營商 是Verizon公司,它 是的,現在在這裡。 讓我們做一個快速的完整性檢查。 讓我們打開了我們的文字腳本,該腳本 看起來是這樣,運營商為%s。 我們做了很多的錯誤 檢查比我在2012年,運營商。 而現在,我要去 前進,重新運行該腳本。 行。 開利公司是Verizon公司,這意味著 現在希望我可以做這個。 正確今年以來, 但願,我們開始吧。 所以這個循環裡面,我 將不僅有這個的printf, 我還打算叫文字和 這個函數調用的用法 是它需要一個數字,一個 載體,並發送信息。 所以,讓我們來看看,數量要 是行報價引文結束“號,” 行報價引文結束“航母” 最後一個是消息。 不要搞砸了,今年分號。 行。 手指交叉。 讓我們來看看,如果這個工程。 好吧,就這樣。 開始了。 讓我們來解鎖手機, 用你的手指,該死的。 未定義的變量可 - 哦 等待,等待,等待,真正的快速。 真正的快,真正的快速。 這是完全值得的。 讓我搶,我搶,嗯,哦。 謝謝你的文字有 從別人開始。 讓我繼續前進,真正的開放 快速,dropbox.php /郵件在了這裡。 待機。 完全值得的。 下載。 OK,源src8m。 行。 在這裡需要多一個線。 哦,還有這是,這是在的新生 即時消息,它在寄存器中的三個。 哦,你好,馬戈,非常感謝你。 OK,我在這裡失踪的這條線。 所以讓我趕緊搶 這行代碼, 其中包括郵件或庫 其實我是想用, 我要趕緊 返回到功能, 我要去的這頂 文件並要求該文件為好, 現在我要真正過我 當我回去的命令手指 行腳本,這是內部 今天的本地主機目錄。 運行文本。 輸入。 郵件。 待機。 待機。 郵件。 哦,好吧。 開始了。 郵件獲取新的PHP郵件。 難道我這樣做對嗎? 該死的。 To--哦,等待,等待,等待。 支持。 我保證,這是 將是太值了。 地址。 這就是為什麼我不做了 課前右例子。 唉。 下列收件人失敗。 讓我們嘗試最後一件事。 從SMTP,添加地址設置, 地址的確是。 讓我們嘗試在地址的最後一部分。 唉,我真的很傷心,現在。 謝謝。 不過,我真的很感激所有 文本你已經發送。 你有這個大衛。 你吹吧。 讓我們離開它那裡, 我們將解決在星期一。 到時候見。 DAVEN FARNHAM:現在深 思考了Daven法納姆。 如果一個二進制樹倒在森林中和 周圍沒有人到C它 - [笑著]。