[Powered by Google Translate] [Tuần 8, Tiếp tục] [David J. Malan] [Đại học Harvard] [Đây là CS50.] [CS50.TV] Đây là CS50, do đó, đây là kết thúc của Tuần 8 ở đây. Chúng tôi tất nhiên đã có một chút của một cơn bão đầu tuần này, vậy ngay bây giờ nó thực sự chỉ là bạn và tôi trong giảng đường này, nhưng hôm nay chúng tôi tiếp tục cuộc trò chuyện của chúng tôi về PHP và về lập trình web nói chung, chúng tôi cũng giới thiệu ý tưởng cơ sở dữ liệu, đặc biệt được gọi là MySQL, mà là khá phổ biến những ngày, một phần lớn vì khả năng mở rộng của nó cũng như bởi vì nó là miễn phí và mã nguồn mở. Nhưng trước tiên, nhìn vào nơi chúng tôi rời đi thời gian qua. Nhớ lại rằng chúng tôi đang tìm kiếm tại một số Frosh ví dụ tin nhắn tức thì, và đây là hình thức ghê gớm mà tôi đã đưa ra một số 15 năm trước để có học sinh đăng ký trường cho các môn thể thao sinh viên năm thứ nhất trong thành mà không thực sự phải đi bộ nữa trên sân để Wigglesworth để trượt một mảnh giấy vật lý của bên dưới cánh cửa của một số giám thị. Thay vào đó, chúng tôi di chuyển tất cả mọi thứ trực tuyến, nhưng để làm điều đó chúng tôi cần thiết để làm cho việc sử dụng của một vài công nghệ, vì vậy, chúng tôi cần HTML, ngôn ngữ đánh dấu siêu văn bản, mà lại là ngôn ngữ đánh dấu mà bạn thực hiện trang web cấu trúc. Sử dụng một chút CSS những ngày này, cascading style sheets, nhờ đó chúng ta sử dụng stylizations của trang web bằng cách sử dụng một cú pháp hơi khác nhau, trong khi HTML là tất cả về cấu trúc của nó. Chúng tôi cũng cần phải giới thiệu một ngôn ngữ lập trình web. Trong trường hợp này, chúng tôi sẽ sử dụng PHP, và PHP sẽ cho phép chúng tôi xuất nội dung ra tự động cũng như làm những chương trình như gửi email, cũng như các trường hợp trên lưu ý chúng tôi rời khỏi tuần trước. Nhớ lại rằng mã cho điều này là trong 2 phần. Một, chúng tôi đã có froshims3.php, và điều này phần lớn là đánh dấu với một hình thức HTML bên trong của nó, một chút nhỏ bé của CSS lên ở đây trong các thuộc tính phong cách để các mẫu tự sẽ được tập trung trên trang, nhưng ngoài ra chúng tôi đã có đầu vào một số hình thức đại diện, một trường văn bản, một hộp kiểm, một số nút radio, một menu lựa chọn, và một nút submit. Và thông qua hình thức này, chúng tôi gửi vào một tập tin đã được rõ ràng register3.php gọi là, mà bản thân nó nhìn một chút gì đó như thế này. Bây giờ, hầu hết các mã ở register3.php, thu hồi, là tất cả về email. Nó đã làm một chút xác nhận của các hình thức đã được gửi để đảm bảo rằng các trường đã thực sự cung cấp đã được dự kiến. Sau đó, chúng tôi gọi là một số chức năng PHP bằng cách sử dụng hơi cú pháp mới, mặc dù nó vay từ C. Mũi tên điều hành này cho phép chúng ta sử dụng một cái gì đó được gọi là lập trình hướng đối tượng. Chúng tôi sẽ không đi vào đó trong bất kỳ chi tiết ở đây, nhưng biết bây giờ đó là một cách có chức năng liên kết với các đối tượng, mà là một loại đặc biệt của cấu trúc, như chúng ta đã thấy trong C. Nhưng hiện nay, chỉ cần mang về đức tin rằng đây là cú pháp đúng để sử dụng khi sử dụng một thư viện như thư viện này PHPMailer. Và sau đó vào cuối của tập tin này, chúng tôi đã tự động tạo ra một email đã gửi vào tài khoản jharvard@cs50.net của tôi từ tài khoản jharvard@cs50.net của tôi, và chúng tôi thông báo cho người sử dụng cho phù hợp rằng họ đã được đăng ký cho môn thể thao này. Đó là khá nhiều Frosh tin nhắn tức thì trang web đã làm tất cả những năm trước đây khi tôi thực hiện nó, được cấp, trong một ngôn ngữ khác nhau, nhưng nó cho thấy bạn có lẽ sức mạnh mà bạn có bây giờ mà bạn có thể thể hiện bản thân không chỉ lập trình ở mức thấp trong một ngôn ngữ như C, nhưng ở một mức độ cao hơn nhiều với những ứng dụng rất thực tế trên thế giới như email thực sự giải quyết một số vấn đề thế giới thực. Bây giờ, tất nhiên, ngay cả khi tôi sử dụng kịch bản này để tạo ra một số email tự động từ jharvard@cs50.net, mà thực sự là một tài khoản mà tôi có thể truy cập, không thể khá cẩn thận để gửi gửi chỉ từ tài khoản thực sự của riêng bạn, vì sợ rằng những thứ có được trong một chút nước nóng trong cuộc sống. Với mà nói, Bây giờ chúng ta hãy chuyển sang giải quyết một vấn đề hoàn toàn khác nhau, của các quốc gia giữ lại. Bây giờ, điều này không những gì thực sự có nghĩa là gì? HTTP, giao thức truyền siêu văn bản này, thực sự là một giao thức không quốc tịch, và điều này có nghĩa là khi bạn kéo lên một cái gì đó giống như Google.com và sau đó nhấn Enter thường trình duyệt của bạn có một số loại biểu tượng quay mà sau đó kết quả trong một số trang web đang được tải về, và sau đó là biểu tượng nhỏ ngừng quay, và đó thực sự cho thấy HTTP đã hoàn thành một số loại kết nối đến máy chủ và đó là nó. HTTP là quốc tịch trong ý nghĩa rằng nó không duy trì một kết nối liên tục đến máy chủ trong Skype theo cùng một cách không hoặc Gchat không bởi vì với HTTP giả định là một khi bạn đã lấy một trang web đó là nó. Bây giờ, trong thực tế những ngày này trên các trang web như Facebook và Google Maps và Twitter và như thế có rất nhiều tính năng động, theo đó ngay cả sau khi biểu tượng đó ngừng quay trong thực tế, có thể nhận được cập nhật nhiều hơn từ máy chủ, tweet của quý vị nhiều hơn nữa, cập nhật trạng thái trên Facebook và các loại tương tự. Nhưng ngay cả khi đó là sử dụng một kỹ thuật mà chúng tôi sẽ nói về trong một hoặc hai tuần được biết đến như Ajax bằng cách sử dụng một ngôn ngữ được gọi là JavaScript, nhưng vào cuối ngày, HTTP là vẫn còn quốc tịch. Và nếu bạn muốn bằng cách nào đó nhớ lại những gì về người sử dụng ngay cả sau khi họ đã bị ngắt kết nối từ máy chủ của bạn PHP không đủ khả năng cho bạn một phương tiện để làm điều này bởi vì, như chúng ta đã thấy thời gian qua, PHP có một số superglobals, và superglobal một là, một lần nữa, một biến toàn cầu đặc biệt đó là giao cho bạn bởi các máy chủ web và PHP chính nó. Bạn không phải làm bất cứ điều gì để đưa giá trị trong nó, và giữa các superglobals chúng tôi đã nhìn thấy vậy, đến nay được nhận và đăng, đó là nơi mà các trường mẫu được đặt tự động cho bạn, cũng như một vài người khác mà chúng tôi đã không nhìn thấy. Bên trong của $ _SERVER một số biến đặc biệt liên quan đến máy chủ riêng của mình. Địa chỉ IP, giao thức HTTP hoặc HTTPS bạn đã sử dụng là gì, yêu cầu phương pháp sử dụng và như thế, vì vậy có thú vị một số, ngon ngọt thông tin chi tiết về máy chủ, và trên thực tế, người sử dụng trong đó là tốt. Có $ _cookie, đó là nơi mà những điều được gọi là cookie được lưu trữ. Chúng tôi sẽ không dành nhiều thời gian về các cookie tự ngày hôm nay, nhưng biết bây giờ mà một cookie chỉ là một mảnh nhỏ của thông tin rằng một máy chủ web có thể trồng trên một trình duyệt web và lần lượt RAM hoặc ổ cứng của máy tính của mình để lưu trữ thông tin về người sử dụng, ví dụ, tên người dùng của họ để họ không cần phải gõ nó mỗi khi họ đăng nhập vào hoặc một số số duy nhất hoặc định danh cho người dùng do đó bạn không có sự chấp thuận của họ với các loại cùng một câu hỏi về ưu đãi trong tương lai, nhưng hầu hết quan tâm ngay bây giờ là $ _SESSION. Superglobal đó, như những người khác, được giao cho bạn tự động bằng PHP khi bạn đang viết các trang web dựa trên PHP có thể lưu trữ bất cứ điều gì bạn muốn, chuỗi, số nguyên, nổi điểm, giá trị, mảng, đối tượng, thực sự bất cứ điều gì mà bạn muốn, và nó cho phép bạn lưu trữ nó trong một cách rằng ngay cả khi người dùng truy cập bạn bây giờ và sau đó trở lại một phút từ bây giờ hoặc 5 phút từ bây giờ bởi vì họ mất thời gian của họ trước khi nhấp vào một số liên kết khác PHP sẽ đảm bảo rằng bất cứ điều gì bạn đặt trong đó superglobal phiên phút hoặc 5 phút trước đây vẫn sẽ ở đó khi người sử dụng trở lại. Và bên dưới mui xe superglobal này được thực hiện bằng cách những điều được gọi là cookies, nhưng bây giờ, nó chỉ là một khái niệm trừu tượng theo đó nó là loại tương đương với chương trình của một giỏ mua hàng. Dù bạn, các lập trình viên, trong đó superglobal mảng kết hợp sẽ có một số số phút sau cho đến khi bạn xóa nó hoặc cho đến khi người dùng bỏ hoàn toàn trình duyệt của mình. Chúng ta hãy xem xét một ví dụ về làm thế nào điều này là thực sự được sử dụng. Trong counter.php giữa các miếng ngày hôm nay của mã chúng tôi có dòng sau. Vào lúc bắt đầu của tập tin này, chúng tôi có một loạt các ý kiến ​​màu xanh, được không thú vị cho bây giờ. Nhưng trong dòng 13, chúng tôi có một dòng mới, session_start, và thực hiện chính xác những gì nó nói. Nó bắt đầu phiên. Nó cho phép bạn sử dụng là lớn superglobal $ _SESSION, và nó đơn giản như vậy. Bây giờ, nếu chúng ta tiếp tục nhìn vào dòng 16, chúng ta hãy cố gắng tìm ra những gì trang web này là sẽ làm. If (isset ($ _SESSION ["counter"]) sau đó đi trước và lưu trữ trong biến đếm, chữ thường truy cập, $ _SESSION ["Counter"]. Điều này dường như được khai báo một biến địa phương gọi là truy cập bên trong đó đặt một bản sao của bất cứ điều gì là bên trong của các superglobal được gọi là phiên họp tại địa điểm "phản". Khác, rõ ràng, địa phương truy cập biến này, được khởi tạo là 0. Tuy nhiên, sau đó một vài dòng sau trong 26 thông báo rằng bản sao của phiên truy cập, chính của nó, có gán giá trị mới là giá trị hiện tại của nó cộng thêm 1. Trong ngắn hạn, tập tin này có vẻ được cập nhật một truy cập được lưu trữ bên trong của superglobal phiên bằng cách tăng 1, nhưng lần đầu tiên giữ lại một bản sao của giá trị trước đó bằng cách lưu trữ nó trong một biến địa phương được gọi là $ truy cập, và sau đó xuống đây chúng ta hãy xem những gì còn lại. Hóa ra đó là khá nhiều chỉ là HTML. Ở dưới cùng của trang này, chúng tôi nhìn thấy trong dòng 37 mà tôi đã truy cập trang web số lần truy cập, do đó, có một vài tính năng thú vị ở đây. Một, điều này rõ ràng là một biến, nhưng nó không đủ để chỉ cần đặt $ Truy cập trong cơ thể của HTML của bạn bởi vì tất nhiên nếu nó chỉ có trong PHP HTML của bạn sẽ cho rằng chỉ là HTML. Bạn có nghĩa là muốn $ truy cập được in trên màn hình. Nhưng thay vào đó bằng cách thả vào PHP chế độ với phần này của cú pháp, chúng tôi tự động có thể chèn một giá trị ở đây tinh thần tương tự với những gì chúng tôi đã làm thời gian qua với chèn các giá trị thành chuỗi. Trong thực tế, điều này chỉ là một ký hiệu viết tắt cho nói một cái gì đó như thế này theo nghĩa đen, in (truy cập) hoặc thậm chí một cái gì đó như printf (% s, truy cập), hoặc thậm chí, như bạn có thể nhìn thấy trực tuyến hoặc trong sách giáo khoa, có một chức năng trong PHP gọi là tiếng vọng mà không điều tương tự, và tất cả những cách chỉ còn hơi nói <=. Trong một trường hợp này, bạn không cần phải đặt PHP từ sau dấu chấm hỏi. Đây là ký hiệu viết tắt, một lần nữa, những gì chúng ta chỉ thấy một chút thời gian trước được lặp lại một số giá trị. Hãy xem những gì kết quả cuối cùng của việc này thực sự là. Hãy để tôi đi qua vào tập tin counter.php của chúng tôi, và chúng ta sẽ thấy rằng David chỉ cần thực hiện một sai lầm bằng cách chơi với các mã có. Chúng ta hãy đi sửa chữa bất cứ điều gì ông hơi say lên, và lỗi dường như có mặt ở đó đã biến mất, trên dòng 37. Theo đầu trang này, tôi đã truy cập trang web này 0 lần. Vâng, chúng ta đi trước bây giờ, và ở trên cùng của trình duyệt bấm vào tải lại biểu tượng, và tôi nhấp vào tải lại, và bây giờ tôi đã truy cập các trang web 1 lần, 2, 3, 4, 5, 6, 7, 8. Và quả thực, nếu chúng ta nhìn vào mã nguồn của trang này mã nguồn thực tế đang thay đổi, và nhận thấy sự vắng mặt hoàn toàn của PHP nào, và đó là bởi vì Mã PHP được đánh giá hay giải thích phía máy chủ, và do đó có nghĩa là đầu ra của kịch bản PHP là những gì cuối cùng gửi đến trình duyệt, trong trường hợp này là một số mã HTML và một số văn bản thô. Điều gì đang xảy ra ở đây? Vâng, với dòng tương đối ít mã tôi có thể để lưu trữ liên tục trong quá trình của một vài giây, hoặc nếu chúng tôi chờ đợi đủ lâu, phút, thậm chí vài giờ, một số giá trị trong một cách mà làm cho HTTP stateful có vẻ như là mặc dù chúng tôi đã giữ lại kết nối đến máy chủ, và nó chỉ là ghi nhớ những gì tôi đã nói với nó thời gian qua, nhưng trong thực tế có một bó toàn bộ phức tạp xảy ra bên dưới mui xe liên quan đến các tập tin cookie mà cho phép PHP để cho tôi ảo tưởng này giỏ mua hàng này giống như tính năng này. Để bây giờ, một ví dụ nhỏ, nơi chúng tôi đang chỉ lưu trữ một số nguyên, nhưng đó tính năng này sẽ trở lại có giá trị lớn khi chúng tôi bắt đầu nói chuyện về các dự án phức tạp hơn, trong đó có vấn đề thiết lập 7. Đây là vấn đề của bạn cuối cùng trong CS50. Tôi biết, nó rất buồn, nhưng những gì bạn sẽ tìm thấy là chúng ta sẽ kết luận phần này của học kỳ bằng cách thực sự chuyển đổi từ bối cảnh của C chắc chắn với bối cảnh của PHP nhưng trong khi sử dụng một số nguyên tắc cơ bản rất giống nhau chúng tôi đã nói chuyện về một thời gian. Mục tiêu với pset 7 là thực hiện CS50 Tài chính, mà là phiên bản của riêng bạn của Yahoo Tài chính hoặc Google Finance hoặc thậm chí Etrade.com nhờ đó mà bạn có khả năng nhìn lên giá cổ phiếu cho các ký hiệu nhất định, nhưng thậm chí còn nhiều hơn thế bạn có khả năng để "mua" và "bán" cổ phiếu được giao dịch trên thị trường chứng khoán khác nhau bởi vì như trang chủ ở đây, mà thực sự là mức độ mà chúng tôi đã bắt đầu đặt vấn đề cho bạn, bạn có một hình thức đăng nhập mà yêu cầu một tên người dùng và mật khẩu. Nó có một nút submit, nhưng sau đó, khi chúng ta cuối cùng sẽ thấy, không có gì thực sự xảy ra bên dưới mui xe nhưng vì nó còn lại dành cho bạn để thực hiện các khả năng để đăng ký người dùng mới, khả năng để mua cổ phiếu, bán cổ phiếu, để thực sự tìm kiếm giá cổ phiếu hiện tại. Và quả thực, điều này sẽ được như thế giới thực càng tốt bởi vì chúng tôi đã làm bao gồm một chút mã mà sẽ cho phép bạn với một chức năng duy nhất truy vấn Yahoo Tài chính, tuyệt vời làm cho dữ liệu có sẵn miễn phí nhìn lên giá cổ phiếu dựa trên các biểu tượng cổ phiếu hoặc biểu tượng ticker, và bạn nhận được giá cổ phiếu hiện tại của ngày. Các dữ liệu bạn đang thực sự nhìn thấy này pset cụ thể sẽ được như thế giới thực, vì nó có thể nhận được như vậy mà bạn đang thực sự interfacing với cổ phiếu thế giới thực, giá thế giới thực, và chúng ta sẽ thấy bạn có thể làm có lẽ bao nhiêu tiền trong vài ngày tiếp theo chơi với bộ vấn đề của bạn. Nhưng chúng ta hãy lần đầu tiên thiết lập các giai đoạn cho làm thế nào để thiết kế một cái gì đó chắc chắn phức tạp hơn hơn counter.php, đó là phức tạp hơn so với bất kỳ tin nhắn tức thì ví dụ Frosh vậy, đến nay, và chúng ta hãy cố gắng để giới thiệu một mô hình ở đây cho phép chúng tôi cho cả pset 7 và có thể cho dự án cuối cùng của bạn nếu bạn làm web cái gì đó dựa để giữ mã của bạn được tổ chức tốt, để giữ cho mình tỉnh táo, và để có một bước tiến tới hợp tác, cho dù trong dự án cuối cùng của CS50 hoặc xa hơn nếu bạn tiếp tục chương trình một cái gì đó trong tương lai. Có mô hình thiết kế tổng thể khoa học máy tính và phát triển phần mềm nói chung được biết đến như MVC, xem mô hình điều khiển, và đây là một từ viết tắt ngớ ngẩn mô tả một ý tưởng rất tốt đẹp, đó là sự tách biệt của các khía cạnh khác nhau của một chương trình, đặc biệt giữ riêng biệt logic hay là logic kinh doanh của một trang web do đó, rằng bất cứ điều gì có liên quan đến những thứ như gọi chức năng và truy vấn cơ sở dữ liệu và các loại tương tự xảy ra không nằm trong số HTML của bạn mà đúng hơn là trong các tập tin riêng biệt, và thực sự, có một tập tin này thường mà bạn đã gọi là bộ điều khiển đó thực sự là bộ não đằng sau hoạt động, và chúng tôi sẽ xem một ví dụ điều này trong thời điểm này chỉ là một. Có một mô hình được lập trình mã mà không nói chuyện với cơ sở dữ liệu của bạn, nói chuyện với Yahoo Tài chính và các loại tương tự, và sau đó có V trong MVC, các quan điểm, tất cả các công cụ liên quan đến thẩm mỹ, các tập tin mà thực sự có chứa HTML của bạn, có thể CSS của bạn và như thế. Ý tưởng ở đây, như hình ảnh này cho thấy, là bộ điều khiển là các tập tin, như chúng ta sẽ sớm thấy như bạn đặc biệt sẽ thấy trong pset 7, rằng thế giới nói chuyện với thông qua trình duyệt web của họ. Đó là tập tin được truy cập trên internet công cộng, nhưng bộ điều khiển nói chuyện với một mô hình có khả năng, đó là một hoặc nhiều tập tin khác có chứa mã liên quan đến dữ liệu, code liên quan đến cơ sở dữ liệu và các loại tương tự, và sau đó nó nói đến bộ điều khiển một hoặc nhiều các tập tin khác, được biết đến như quan điểm, đó là tính thẩm mỹ của một trang web, các mẫu của các loại, mà có thể mất một số dữ liệu như là đầu vào, nhưng vào cuối ngày logic chỉ bên trong của một cái nhìn nên thể hiện các dữ liệu đó, iterating trên một vòng lặp và thực sự phun ra một số HTML dựa trên rendition hoặc thậm chí một cái gì đó giống như một PDF. Gì tốt đẹp về MVC là bạn có thể có quan điểm khác nhau dựa vào loại thiết bị này, dựa vào loại định dạng tập tin mà bạn thực sự muốn hiển thị cho người dùng. Chúng ta hãy xem xét một vài ví dụ dần dần phức tạp hơn và cũng được thiết kế bằng cách bắt đầu từ đầu tiên với phiên bản 0 ở đây. Hãy để tôi đi trước và mở trong thư mục MVC của chúng tôi ngày hôm nay một file có tên index.php trong thư mục 0. Thông báo này là một trang web siêu đơn giản và rất underwhelming đó là sắp xếp của phiên bản 0 của trang chủ CS50 và nhận thấy làm thế nào chúng ta có một liên kết đến bài giảng, chúng tôi có một liên kết đến Giáo trình, và nếu tôi làm theo các liên kết đến các bài giảng thông báo rằng URL lên hàng đầu sẽ thay đổi lectures.php. Nếu tôi sau đó thực hiện theo các liên kết 1 Tuần thông báo rằng các thay đổi URL đến week1.php. Có vẻ như là một thứ bậc cấu trúc khá đơn giản ở đây. Hãy có một cái nhìn nhanh chóng bên dưới mui xe như thế nào được đặt ra, và quả thật, nếu tôi nhìn vào index.php nó khá đơn giản. Trong thực tế, mặc dù tôi được gọi là một tập tin PHP không có mã chương trình thực tế. Có một nhận xét mà tôi đã viết ở đây trong PHP chỉ để người dùng không nhìn thấy nó. Tất nhiên, như trước, bất cứ điều gì đó là trong giữa các thẻ PHP được giải thích, thậm chí nếu đó là một lời nhận xét, và giải thích một lời nhận xét có nghĩa là chỉ để vứt nó đi vào cuối ngày và không thực sự gửi nó vào trình duyệt, do đó, tất cả mọi thứ ở đây là chỉ là thẩm mỹ. Nếu tôi mở tương tự như lectures.php này quá chỉ là một tập tin được mã hóa cứng. Nó xảy ra để được gọi là một cái gì đó. Php, nhưng nó thực sự chỉ là html, và week1.php, week2.php tương tự như vậy chỉ là đánh dấu, do đó, có một loạt các thiếu sót của thiết kế này. Một, đó là một số lượng lớn các sao chép / dán. Mặc dù điều duy nhất mà thay đổi trong số những tập tin này là danh sách không có thứ tự, các thẻ li, tôi dù sao cũng có loại doc, HTML, người đứng đầu, tiêu đề, cơ thể gần, gần HTML và nhiều hơn nữa trong tất cả các tập tin duy nhất, có nghĩa là nếu tôi muốn tái cơ cấu trang web này hoặc restylize tôi phải đi vào và thay đổi tìm và thay thế tất cả các file bằng tay hoặc với một số lớn. Chúng ta hãy một bước tiến tới một thiết kế thông minh hơn, còn suy nghĩ trong phiên bản 1 ở đây theo đó theo đọc tôi rằng chúng tôi đã bao gồm để bạn có thể chơi cùng với những nhàn nhã hơn ở nhà thông báo rằng chúng tôi có ở đây một bản tóm tắt của các tập tin trong phiên bản 1 của trang web này, và có vẻ như là tôi đã lấy nó khi bản thân mình yếu tố ra một số mã thông thường, header.php và footer.php. Vâng, chúng ta hãy nhìn vào những gì bên trong đầu tiên của những người. Header.php có vẻ quen thuộc, nhưng nhận thấy nơi nào nó cắt? Ngay sau khi dòng 19, vì vậy đó là tất cả mọi thứ đã được phổ biến từ các tập tin index.php, lectures.php, Tuần 1 và week2.php từ ví dụ trước. Những gì tôi đã làm là sao chép và cắt tất cả mọi thứ đã được phổ biến cho tất cả các tập tin, đặt nó trong một file riêng, và tương tự trong footer.php Tôi đã áp dụng cùng một nguyên tắc theo đó chỉ thú vị dòng trong footer.php này, hai cơ thể và HTML gần gần. Nhưng điều này có nghĩa là bây giờ là trong phiên bản mới thông báo index.php nó có thể đơn giản hơn nhiều. Cấp, nhiều hơn một chút khó hiểu, một chút ít trực quan theo trên xuống dưới, nhưng Thiên Chúa của tôi, tất cả của sự dư thừa đó là bây giờ đi. Chúng tôi yêu cầu bằng cách sử dụng một chức năng PHP nghĩa đen được gọi là yêu cầu lên hàng đầu, đó là rất gợi nhớ, nhớ lại, C # bao gồm cơ chế. Chúng tôi yêu cầu header.php ở đầu trang. Chúng tôi yêu cầu footer.php ở phía dưới, và điều duy nhất mà là khác nhau đặc biệt về tập tin này là nội dung có nghĩa là phải duy nhất cho nó. Nếu tôi sau đó đi vào, nói, lectures.php, cùng một nguyên tắc được áp dụng. Một lần nữa, một số ý kiến ​​lên hàng đầu, nhưng sau đó tôi yêu cầu tiêu đề, yêu cầu chân trang, và ở giữa nó chỉ có các nội dung thực sự thay đổi. Và nếu chúng ta nhìn vào tuần 1 và tuần 2, chúng tôi muốn nhìn thấy cùng một nguyên tắc đã được áp dụng ở đó. Vâng, chúng tôi đang không hoàn toàn thực hiện ở đó. Chúng ta hãy xem xét phiên bản 2, trong đó có một cấu trúc tương tự, nhưng nhận thấy bây giờ tôi đã giới thiệu cái gì khác. Trong dòng 10, tôi đã giới thiệu helpers.php, mà dường như có chức năng trợ giúp. Một chức năng trợ giúp nói chung là một chức năng tương đối ngắn mà bạn viết để giúp bạn ra ở những nơi khác nhau, và chúng ta hãy xem những gì bên trong của helpers.php. Trong trường hợp này, có vẻ như nó có 2 chức năng. Nhớ lại từ ngày khác với ví dụ khối lập phương của chúng tôi bạn có thể xác định các chức năng của riêng bạn trong PHP, và những gì tôi đã làm bây giờ là tôi đã xác định chức năng được gọi là làm cho chân và làm cho tiêu đề, là người đầu tiên trong số đó có một tham số gọi là dữ liệu, có giá trị mặc định là một mảng trống rỗng, như đề nghị có, và chúng tôi thực sự có thể viết ngắn gọn hơn trong phiên bản mới nhất của PHP bằng cách nói mở khung hình vuông, đóng vuông khung. Điều đó có nghĩa là một mảng trống có kích thước 0 nhưng dù sao một mảng. Chức năng này chiết xuất là một chút đặc biệt trong đó những gì nó là nó mất như là đối số của nó một mảng kết hợp có 0 hoặc nhiều cặp giá trị quan trọng, và nếu bạn có một chìa khóa của foo và giá trị của thanh chức năng chiết xuất tạo ra một tình huống trong đó bây giờ, như dòng 11, bạn có một biến địa phương gọi là $ foo có giá trị thanh. Và nếu bạn có các phím và các giá trị trong mảng dữ liệu, tương tự như vậy họ sẽ được trích xuất vào phạm vi địa phương hoặc tên không gian để footer.php và cùng một ý tưởng xuống đây để header.php có quyền truy cập vào các biến. Trong thực tế, tôi mở ra một lần nữa header.php và thu hút sự chú ý bây giờ những gì nó trông giống như trong phiên bản này. Thay vì cứng mã hóa CS50 là tiêu đề cho mỗi trang duy nhất nhận thấy sự năng động đó là có thể bây giờ. Trong dòng 5 tôi nhắc lại một biến tiêu đề, nhưng đầu tiên tôi đi qua mà biến tiêu đề đến một chức năng được gọi là htmlspecialchars. Một tên ngu ngốc cho một chức năng, miễn là nó, nhưng nó thực sự những gì nó nói. Nó đảm bảo rằng bất kỳ ký tự đặc biệt trong chuỗi đó là được thông qua tại đúng cách trốn thoát HTML. Điều này thực sự là một cách để tránh một cái gì đó được gọi là một trang web qua kịch bản tấn công theo đó một người nào đó có thể độc hại hoặc vô tình tiêm HTML riêng của họ vào trang web của bạn bằng cách dán vào một số hình thức, ví dụ, một cái gì đó mà bạn không khá mong đợi, đặc biệt là mã JavaScript, như chúng ta sẽ nói về trong một tuần hoặc hai. Này header.php bây giờ, đó là một cái nhìn trong ý nghĩa rằng nó cho phép bạn xem thẩm mỹ nội dung của một số tập dữ liệu. Nhưng đặc biệt hơn, đó là một bản mẫu. Đây là loại của một kế hoạch chi tiết về những gì chúng ta muốn tiêu đề của mỗi trang để trông giống như, nhưng có một số tính năng động mà chúng tôi muốn tiêu đề để được tự động chèn dựa trên biến tiêu đề được chiết xuất khi chúng tôi gọi, một lần nữa, tiêu đề khiến chức năng. Bây giờ, nếu chúng ta nhìn ở chân render, có thực sự không có nhiều sử dụng mà ngay bây giờ bởi vì trong footer.php không có tính năng động nào. Có thể có, nhưng tại thời điểm đó là một danh sách cứng cũng là 2 thẻ, nhưng ý tưởng tương tự cũng được áp dụng, do đó, thực tế cho thấy lý do tại sao chúng ta đã lãng phí thời gian có một tiêu đề vẽ lại và vẽ lại một chức năng chân? Hãy để tôi đi thay vì vào phiên bản 3, và trong phiên bản 3 trong những người giúp đỡ, tôi đã quyết định để đơn giản hóa nó nhiều hơn. Hãy để tôi có một chức năng vẽ lại. Hãy để tôi phải mất một tham số khác, thời gian này được gọi là mẫu, đó là có nghĩa là tên của một mẫu, và sau đó tôi sẽ nối presumptuously php giá trị của biến đó. và sau đó nếu nó tồn tại foo.php, bar.php hoặc header.php và footer.php, sau đó tôi sẽ đi trước và trích xuất các dữ liệu biến và sau đó yêu cầu con đường đó. Nói cách khác, sử dụng này ngay bây giờ, nếu tôi mở index.php nhận thấy rằng tôi không gọi cho tiêu đề vẽ lại nữa. Tôi chỉ cần gọi render, nhưng tôi vượt qua trong một giá trị trích dẫn của tiêu đề để làm rõ mẫu tôi thực sự muốn để tải. Sau đó, ở đây nhận thấy những gì tôi đang làm. Tôi đang đi qua trong một chìa khóa tự động của tiêu đề, một giá trị CS50, và điều này quá, như chúng ta đã thấy trước đây, có thể được thực hiện gọn gàng hơn trong phiên bản mới nhất của PHP nơi tôi có thể thay thế chức năng mảng với dấu ngoặc vuông, mà tôi đề xuất là thậm chí còn dễ đọc hơn và chắc chắn một chút dễ dàng hơn để loại. Và tất nhiên, với các cuộc gọi vẽ lại chân ở phía dưới, chúng tôi không bận tâm đi qua trong một cuộc tranh luận thứ hai ở tất cả, không có mảng kết hợp, bởi vì có bên trong không có gì năng động của footer. Nó chỉ là một số thẻ gần gũi cho HTML. Tốt, chúng tôi đang thực hiện các bước theo hướng thực sự làm sạch mọi thứ ở đây, nhưng hãy để tôi mở ra 2 ví dụ thức. Điều này một, số 4, thông báo rằng tôi đã thực hiện một quyết định có ý thức cải tiến ví dụ trước bởi cuối cùng bằng cách sử dụng một số hệ thống phân cấp cho các tập tin của tôi. Chú ý rằng trong bản tóm tắt này, điều này đọc cho tôi, tôi đã giới thiệu một bao gồm các thư mục và thư mục một mẫu có nội dung đang có được những điều tôi muốn bao gồm và các mẫu mà tôi muốn làm, tương ứng. Điều này thực sự tôi là hậu môn và cố gắng để giữ cho mọi thứ gọn gàng, giữ các tập tin có liên quan với nhau, nhưng kết quả cuối cùng là bây giờ chúng ta có một thiết lập hơi ngăn nắp, nhưng chúng ta phải nhớ đến, ví dụ, index.php khi chúng tôi yêu cầu helpers.php tập tin bây giờ chúng ta phải yêu cầu nó thông qua bao gồm / helpers.php chứ không phải là chỉ nói helpers.php bởi vì bây giờ nó thực sự trong một thư mục phụ. Bây giờ, khi một sang một bên, bạn sẽ thấy trong các ví dụ và một số người khác các chức năng như yêu cầu, đòi hỏi một lần. Có thực sự là một chức năng được gọi là bao gồm, và họ đều có hành vi hơi khác nhau. Ở đây tôi nói yêu cầu một lần để làm cho siêu rõ ràng rằng tôi chỉ muốn những người giúp đỡ bao gồm trong dự án của tôi một lần. Nhưng nếu tôi cẩn thận và nếu tôi thực sự suy nghĩ thông qua logic của tôi đúng cách nó là đủ quá chỉ để nói yêu cầu lên hàng đầu chừng nào tôi còn bản thân mình không vô tình yêu cầu cùng một tập tin ở nơi khác. Trong thực tế, đây là một cách hiệu quả làm việc sau đó sử dụng nhiều hơn một chút yêu cầu một lần, vì vậy tôi sẽ cắt nó xuống chỉ yêu cầu. Chúng ta hãy thêm một bước nữa. Ví dụ cuối cùng bây giờ, phiên bản 5, có một hệ thống phân cấp thư mục thậm chí sạch hơn. Chú ý những gì tôi đã thực hiện ở đây mỗi đọc trong phiên bản cuối cùng bây giờ tôi có thư mục HTML của tôi, mà tôi đã có tất cả thời gian, nhưng bên trong đó bây giờ chỉ là lectures.php, index.php, week1.php và week2.php. Bao gồm các thư mục hiện đang sống cùng với các thư mục HTML, do đó, ở mức độ tương tự như người anh em, vậy để nói chuyện. Vì vậy, hiện thư mục mẫu. Takeaway quan trọng ở đây là tôi đã giới thiệu cấu trúc hơn một chút, nhưng tính năng quan trọng bây giờ là chỉ có các tập tin mà cần phải có trang web truy cập, công khai địa chỉ bởi một URL trên internet công cộng trong thư mục HTML của tôi. Trong khi đó, các tập tin khác, helpers.php, footer.php, header.php, được cho là có thể nhạy cảm hơn, có thể giúp đỡ thực sự có một số tên người dùng và mật khẩu hoặc một số trí tuệ tài sản của tôi, chức năng tôi thực sự không muốn thế giới nhìn thấy, ngay cả khi vô tình. Đó là thực hành tốt để giữ cho của thư mục công cộng HTML bất kỳ tập tin không cần mình phải được công khai. Tất cả những gì bạn phải làm trong trường hợp này khi nhìn vào, ví dụ, thư mục HTML của tập tin index.php, nhận thấy chúng ta chỉ có được một chút cẩn thận hơn khi yêu cầu hoặc yêu cầu một lần tập tin này. Tôi cần phải đầu tiên làm .. để đi đến thư mục cha, sau đó / bao gồm / helpers.php lặn quay trở lại để có được những tập tin mà tôi quan tâm. Bất kỳ câu hỏi sau đó trên MVC hoặc hiện thân tương đối đơn giản của chúng? Và hãy để tôi làm cho rõ ràng rằng, chúng tôi tập trung khá một chút về V ở đây, các quan điểm và bao thanh toán của các mẫu này. Chúng tôi đã không thực sự phân biệt M từ C chỉ được nêu ra. Trong thực tế, có thực sự là không có M ở đây, và ngay cả C của chúng tôi, điều khiển, không thực sự làm tất cả những gì nhiều, nhưng bạn sẽ nhận được nhiều hơn nữa quen thuộc với cả hai những 2 chữ cái từ MVC, hay đúng hơn, bạn sẽ nhận được nhiều quen thuộc hơn với C trong MVC cho 7 bộ vấn đề, do đó, có nhiều trên đường chân trời. Câu hỏi? Có thực sự là không có ai ở đây. Được rồi, Bây giờ chúng ta hãy di chuyển đến chủ đề thứ hai và cũng là cuối cùng cho ngày hôm nay. Đó là sự ra đời của một cơ sở dữ liệu. Cho đến thời điểm này, chúng tôi đã có một vài cách để lưu trữ dữ liệu. Chúng tôi đã sử dụng các biến. Trở lại trong tập tin C của chúng tôi, I / O thảo luận chúng tôi bắt đầu bằng cách sử dụng các tập tin văn bản và sử dụng các tập tin như fprintf, và sau đó chúng tôi thậm chí bắt đầu nói về CSV tập tin một chút, giá trị được tách nhau bằng dấu phẩy, do đó, tất cả trong số này cho phép chúng ta có được dữ liệu lưu trữ hoặc không liên tục hoặc liên tục. Nhưng ngay cả CSVs là không thực sự thuận lợi để tìm kiếm và chèn và xoá. Nó thực sự chỉ là một tập tin văn bản ngu ngốc cách nhau bằng dấu phẩy từng hàng từng hàng, vì vậy nếu bạn muốn tìm kiếm tập tin đó là tốt nhất bạn có thể làm thực sự là tuyến tính tìm kiếm. Bạn phải bắt đầu ở đầu của tập tin, đọc toàn bộ điều trong, và tìm kiếm một số giá trị quan tâm. Nếu bạn muốn chèn vào nó, bạn phải làm điều tương tự, iterating trên nó và chèn vào một nơi cụ thể, và trong thực tế, bạn có để làm tất cả của logic tìm kiếm chính mình. Bạn không thể làm mô hình thông minh kết hợp vào một tập tin CSV trừ khi bạn viết mã. Bạn không thể làm lọc của một tập tin CSV trừ khi bạn viết mã. Nó sẽ không được tốt đẹp nếu một người nào khác trong tất cả các nỗ lực để thực sự làm cho việc tìm kiếm dễ dàng và chèn dễ dàng và xóa và cập nhật và vv? Đó là chính xác những gì là một cơ sở dữ liệu. SQL, ngôn ngữ truy vấn có cấu trúc, là một ngôn ngữ khác mà chúng tôi đang giới thiệu ở đây ngày hôm nay, nhưng điều này là khá dễ tiếp cận, và những gì chúng tôi đang thực sự sẽ làm là chỉ cần nhổ ra khỏi nó một số nổi bật nhất đặc điểm để cho pset 7, và nếu bạn làm web cái gì đó dựa, dự án cuối cùng của bạn, bạn có khả năng để thể hiện chính mình về các truy vấn dữ liệu. Bạn có khả năng lưu trữ một chút hoặc rất nhiều dữ liệu một cách có cấu trúc hơn vào cuối ngày làm cho cuộc sống của bạn dễ dàng hơn bởi vì với SQL bạn có thể thể hiện chính mình chính xác hơn rất nhiều, nhiều hơn nữa phương pháp để lấy lại một số tập hợp dữ liệu từ một ngữ liệu lớn dữ liệu. Bạn có thể suy nghĩ của một cơ sở dữ liệu, trong trường hợp này, một cơ sở dữ liệu SQL, thực sự như Excel hoặc số nơi nó là một bảng tính, hoặc có thể nhiều bảng tính và bảng tính, tất nhiên, có hàng và cột, và đó là bởi vì SQL cơ sở dữ liệu quan hệ, quan hệ trong ý nghĩa mà họ lưu trữ dữ liệu trong các điều khoản của các bảng, hàng và cột. Họ thực hiện cao hơn so với một cái gì đó giống như một bảng tính, và một bảng tính có nghĩa là để được sử dụng bởi một con người. Một cơ sở dữ liệu có nghĩa là để được sử dụng bởi một lập trình viên viết mã chống lại nó, do đó, các hóa thân của một cơ sở dữ liệu là có được một trong hai dòng lệnh. Một trong những cơ sở dữ liệu quan hệ phổ biến nhất hiện có, một lần nữa, MySQL, đó là miễn phí tuyệt vời, hiệu suất rất cao, và đây là những gì Facebook được sử dụng từ rất sớm và đến một mức độ nào đó ngày nay vẫn còn để lưu trữ rất nhiều dữ liệu của nó, và chúng ta sẽ thấy trong một thời điểm rằng bằng cách sử dụng các lệnh tương đối đơn giản chúng ta có thể chọn dữ liệu, dữ liệu chèn, cập nhật dữ liệu, xóa dữ liệu và như thế, nhưng may mắn thay, có một người sử dụng giao diện thân thiện hơn hơn là chỉ cần gõ tại dấu nhắc màu đen và trắng ở đây. Chúng tôi sẽ sử dụng cho pset 7 và vượt ra ngoài một công cụ miễn phí được gọi là phpMyAdmin. Tên là sự trùng hợp ngẫu nhiên. Công cụ này xảy ra để được thực hiện trong PHP, nhưng đó là về cơ bản không liên quan. Gì hữu ích về phpMyAdmin là nó là một tiện ích dựa trên web. Chúng tôi đã cài đặt sẵn trong thiết bị này cho bạn, và với nó, bạn có thể tạo bảng trong một cơ sở dữ liệu, bạn có thể chèn dữ liệu, xóa dữ liệu, và thường thấy dữ liệu của bạn trong một môi trường thân thiện với người sử dụng một cách công bằng. Người dùng của bạn sẽ không sử dụng phpMyAdmin. Điều này thực sự chỉ là một công cụ hành chính hoặc nhà phát triển để xem và poke xung quanh dữ liệu của bạn và tìm ra làm thế nào để cấu trúc nó, giống như bạn có thể sử dụng Excel hoặc số, nhưng nó sẽ là một cách tuyệt vời của hình dung những gì đang xảy ra bên dưới mui xe để bạn có thể tập trung vào giải quyết vấn đề thú vị và không quá nhiều vào các câu lệnh phức tạp. Chúng ta hãy xem xét một ví dụ về dữ liệu có thể được lưu trữ tabularly trong một cơ sở dữ liệu quan hệ. Dưới đây là một ví dụ. Bây giờ, thật không may, phpMyAdmin sai lầm ở phía bên đường ném quá nhiều từ và đồ họa ở bạn, nhưng nếu bạn trau dồi tại chỉ trên ID cột, cột tên người dùng, và cột băm, điều này là có hiệu quả một bảng tính, nhưng nó sẽ xảy ra một đoạn của một bên trong bảng thiết bị bằng cách sử dụng một tập tin mà chúng tôi cung cấp cho bạn trong vấn đề bộ 7. Đặc biệt, chúng tôi cung cấp cho bạn một tập tin đại diện cho một bảng của người dùng, do đó, một bảng tính có chứa người sử dụng với 3 cột, một trong số đó là một ID duy nhất bắt đầu từ 1 và được tăng lên sau đó. Cột thứ hai là một tên người dùng, và những người bạn của những người đã làm Hacker, phiên bản Hacker cho pset 2, có thể nhận ra một số các tên người sử dụng ít nhất. Ở phía bên tay phải là mật khẩu, nhưng chúng không phải là mật khẩu theo nghĩa đen. Chúng băm của nó, do đó, nó quay ra lưu trữ mật khẩu trong một cơ sở dữ liệu là một ý tưởng thực sự tồi tệ. Bạn đã có thể đọc tại một số điểm của một số trang web hoặc cơ sở dữ liệu của một số công ty bị xâm phạm, và sau đó bạn phải thay đổi mật khẩu của bạn, bạn cần phải nhận được hoàn lại tiền vào những thứ bởi vì một số kẻ xấu đã đột nhập vào tài khoản của bạn như vậy. Lưu trữ mật khẩu trong văn bản rõ ràng, không được mã hóa trong một cơ sở dữ liệu là hoàn toàn ngu si, nhưng nó rất thú vị sau đó để đọc về một số công ty rất nổi tiếng đôi khi trên báo chí có cơ sở dữ liệu đang bị tổn hại, và phần đó không phải là buồn cười, nhưng thực tế là các cơ sở dữ liệu có chứa không được mã hóa mật khẩu là vô lý vì theo nghĩa đen với một dòng mã bạn có thể bảo vệ chống lại mối đe dọa cụ thể, và đó là những gì chúng tôi đã thực hiện ở đây. Ngay cả đối với phiên bản giả ít CS50 Tài chính của chúng tôi chúng tôi mã hóa mật khẩu cho các biện pháp tốt, và thực tế là tất cả các mật khẩu bắt đầu với $ 1 $ chỉ là quy ước. Điều đó chỉ có nghĩa là họ đã được mã hóa hoặc thực sự băm, mà là giống như một chức năng mã hóa một chiều nhờ đó mà bạn không thể đảo ngược tác dụng của nó với một cái gì đó gọi là MD5. Thực tế là 50 là sau đó có nghĩa là một giá trị muối số 50 đã được sử dụng cho băm tất cả các mật khẩu, ngoại trừ một. Mine, tất nhiên, như bạn có thể nhìn thấy ở đó, HA, bằng cách sử dụng một muối khác nhau, do đó, những người bạn của những người đã hơi vấp có thể trong Hacker 2, mà có thể có được kết quả có của chúng tôi được sử dụng băm khác nhau hơn so với những người khác bởi vì mật khẩu của tôi thực sự là như nhau như một số người sử dụng khác lên đó. Trong thực tế, nếu bạn đã chờ đợi tất cả những tuần lễ để tìm hiểu những gì các mật khẩu đã được ở đây là mật khẩu mà bạn đã thách thức để crack trong ấn bản Hacker của 2 bộ vấn đề, do đó, không quá khó khăn. Trong thực tế, Malan là giống như jharvard, nhưng nếu chúng ta quay trở lại họ nhìn khác nhau. Tập trung vào jharvard trong màu đỏ thẫm bởi vì họ đã được ướp muối khác nhau. Thuật toán được bị nhiễu loạn theo một cách mà các giá trị băm, giá trị mã hóa hơi khác một chút bởi vì các yếu tố đầu vào là hơi khác nhau, nhưng mật khẩu bên dưới mui xe vẫn còn cuối cùng là màu đỏ thẫm. Bây giờ, những người quan tâm về điều này? Vâng, chúng tôi đang cung cấp với người sử dụng mẫu, mẫu tên người dùng và băm các mật khẩu của họ, do đó mà bạn thực sự có một số khách hàng cho CS50 Tài chính khi bạn lần đầu tiên có được khỏi mặt đất với mã của bạn. Bạn sẽ phải thực hiện thêm bảng biểu bên trong MySQL, bên trong cơ sở dữ liệu. Bạn sẽ phải tạo các bảng tính nhiều hơn, có hiệu quả, nhưng chúng tôi đã quyết định cung cấp cho bạn một trong những điều này để giúp bạn bắt đầu, và bạn sẽ thấy rằng các thiết lập vấn đề đặc điểm kỹ thuật bạn đi qua quá trình nhập khẩu bảng này và cũng có thể giải thích những gì một số đặc điểm, và bạn cũng sẽ thấy rằng chúng tôi cung cấp cho bạn mã để xử lý các băm hoặc mã hóa các mật khẩu, do đó bạn không cần phải lo lắng quá nhiều về những gì MD5 hoặc như thế thực sự là tất cả về. Vì vậy, SQL, cấu trúc ngôn ngữ truy vấn. Điều này là khá đơn giản, ngôn ngữ chúng tôi về để bắt đầu sử dụng trong pset 7 và có lẽ vượt quá yêu cầu dữ liệu từ cơ sở dữ liệu một số. Dữ liệu được, một lần nữa, được lưu trữ tabularly trong các bảng quan hệ, cột, và các hàng, nhưng bằng cách sử dụng một số cú pháp tương đối đơn giản như xóa, chèn, cập nhật và chọn, chúng ta có thể làm chính xác điều đó. Chúng tôi có thể xóa từ cơ sở dữ liệu, chèn, cập nhật dữ liệu, cũng như lựa chọn, đó là, lấy dữ liệu từ cơ sở dữ liệu. Làm thế nào để chúng tôi đi về việc này? Hãy để tôi đi trước vào thiết bị. Hãy để tôi kéo lên http://localhost, , một lần nữa, bản thân thiết bị địa phương. Đó là biệt danh của nó mặc định. Và hãy để tôi đi đến / phpmyadmin. Điều này xảy ra là một URL đặc biệt mà thiết bị này là cấu hình sẵn để hiểu mà ngay lập tức sẽ nhắc tôi cho một tên người dùng và mật khẩu. Như thường lệ, tôi sẽ gõ jharvard và crimson, nhưng nhận ra đó là tài khoản quản trị viên trên máy tính. Nó chỉ là một sự trùng hợp ngẫu nhiên cũng có một jharvard đăng ký CS50 Tài chính. Jharvard, đỏ thẫm, bạn nhập mang lại cho tôi giao diện người dùng mà chúng ta đã thấy một cái nhìn thoáng qua của thời điểm trước đây, và đó là một chút áp đảo lúc đầu, nhưng yên tâm, bạn sẽ không bao giờ sẽ phải bấm vào hầu hết các liên kết trong công cụ này. Bạn sẽ kết thúc bằng cách sử dụng một tập hợp con nhỏ là siêu hữu ích, là người đầu tiên trong số đó là cơ sở dữ liệu ở đây. Nếu tôi đi đến cơ sở dữ liệu, thông báo rằng tôi đang nhắc nhở để tạo ra một cơ sở dữ liệu. Điều này giống như tạo ra một file Excel mới, có hiệu quả. Tôi sẽ đi trước và gọi đây là bài giảng, và tôi chỉ cần đi để bỏ qua các lĩnh vực có, đối chiếu. Nó có để làm với các đại diện của dữ liệu trong đó, và tôi sẽ nhấp chuột tạo ra, và bây giờ nhận thấy như tôi hãy đi tạo ở phía bên trái, nơi nó nói cơ sở dữ liệu không Tôi cần sớm nhìn thấy cơ sở dữ liệu bài giảng. Nếu bây giờ tôi bấm vào ở phía bên tay trái, cơ sở dữ liệu bài giảng, nhận thấy tab của tôi thay đổi một chút. Tôi đã có cấu trúc, SQL, xuất khẩu, nhập khẩu và một số thứ khác. Cấu trúc là khá nhiều trống. Không có bảng nào được tìm thấy trong cơ sở dữ liệu, như nó nói ở đây, do đó, chúng ta hãy tạo một bảng, và chúng ta hãy đi trước và tạo ra một bảng như học sinh, và chúng ta muốn có bao nhiêu cột? Hãy giữ cho đơn giản này, và hãy ghi lại cho mỗi học sinh một số ID, tên, và địa chỉ email. Chúng tôi sẽ giữ nó đơn giản như thế, do đó, 3 cột, đi. Các hình thức mà bạn nhìn thấy ở đây là một chút lộn xộn và áp đảo, nhưng chúng tôi chỉ cần có để đi qua nó hàng bởi hàng, do đó, thực sự nhanh chóng hãy cho cột đầu tiên trong cơ sở dữ liệu này một tên ID cho các định danh duy nhất. Nó sẽ là một số nguyên. Tôi thực sự có thể bỏ qua chiều dài và giá trị. Một int là có được 32 bit không có vấn đề gì bạn gõ vào đó, vì vậy hãy để trống. Giá trị mặc định, tôi có thể làm cho nó vô giá trị, theo định nghĩa. Tôi sẽ để lại đó một mình. Hãy để không phải lo lắng về các giá trị mặc định. Hãy di chuyển trên đây, thuộc tính bên phải. Điều này là thú vị. Hãy đi trước và phần nào tùy tiện nói rằng ID phải là unsigned. Hãy để không lãng phí bất kỳ số âm. Hãy đi 0 đến 4 tỷ đồng, cho hay phải mất, và sau đó chúng ta không chạm vào bất kỳ của các trường này chỉ được nêu ra ở đó, nhưng sau đó cho tôi gõ tên xuống đây, và sau đó là email, do đó nắm bắt được email và tên, rõ ràng không phải số nguyên, vì vậy chúng ta hãy thay đổi các lĩnh vực khác nhau. Hóa ra varchar, chiều dài thay đổi char, giống như một chuỗi trong một cơ sở dữ liệu SQL nhưng có chiều dài biến, và bạn thực sự phải nói cho nó trước chiều dài tối đa của chuỗi, vì vậy tôi sẽ để phần nào tùy tiện theo quy ước loại 255 ký tự. Tôi hoàn toàn có thể nói 32. Tôi có thể nói 1.000. Loại cần tự quyết định dựa trên nhân khẩu học của những gì là Tên học sinh dài nhất và đi với con số đó lớn hơn một chút, nhưng những gì tốt đẹp về một varchar là nó sẽ không để lãng phí 255 byte trên tên của mỗi học sinh. Nếu đó là DAVID nó sẽ không sử dụng 255 byte toàn bộ, nhưng đó là một trên ràng buộc, do đó, tôi sẽ đi với 255 chỉ theo quy ước, nhưng chúng ta có thể tranh luận rằng có một số giá trị thấp hơn, và cho địa chỉ email chỉ để phù hợp 255, nhưng một lần nữa, chúng ta có thể có các cuộc tranh luận tương tự. Nhưng tôi sẽ làm một việc khác ở đây ở phía bên tay phải. Mạnh mẽ về một cơ sở dữ liệu là nó có thể làm được rất nhiều nâng nặng hoặc phức tạp công việc cho bạn. Trong đó, tôi thực sự không quan tâm những gì số ID của học sinh của tôi. Nó chỉ có nghĩa là một định danh duy nhất trong cơ sở dữ liệu vì vậy tôi có một đại diện gọn gàng 32-bit của học sinh đó vì vậy mà tôi có một số cách duy nhất để phân biệt chúng vì sợ rằng có 2 Davids, ví dụ, trong một lớp học. Trong thực tế, tôi sẽ kiểm tra hộp này AI, tự động tăng, để các cơ sở dữ liệu, MySQL, con số ra mỗi học sinh mới được chèn vào ID là có được. Tôi thậm chí không cần phải quan tâm về điều đó trong mã của tôi, và tôi cũng sẽ chọn một cái gì đó dưới trình đơn chỉ mục. Chỉ số thả xuống ở đây đã tiểu học, độc đáo, chỉ số và văn bản đầy đủ. Bạn có thể có thể đoán những gì một vài những điều này, nhưng nó quay ra trong cơ sở dữ liệu quan hệ các lập trình viên hoặc quản trị viên cơ sở dữ liệu nhận được để preemptively đưa ra gợi ý vào cơ sở dữ liệu là những lĩnh vực trong một bảng là một chút đặc biệt. Ví dụ, trong trường hợp này tôi sẽ nói rằng ID là có được một chỉ số chính, nếu không được biết đến như một khóa chính. Điều này có nghĩa là theo định nghĩa là ID đó từ nay trở đi sẽ xác định duy nhất sinh viên trong bảng này. Không một học sinh sẽ có cùng một ID vì tôi đang áp đặt các hạn chế này, chỉ số này. Hơn nữa, điều này sẽ làm cho tôi là nó sẽ cho biết MySQL mà ID là đặc biệt. Tôi quan tâm đặc biệt về ID, nên đi trước và làm phép thuật ưa thích cấu trúc dữ liệu của bạn, xây dựng một số loại cây. Thông thường nó là một cái gì đó được gọi là B-cây, mà chúng ta không nhìn vào tuần trước, nhưng đó là một cấu trúc dữ liệu tinh thần tương tự như vậy với cây nhị phân và cố gắng mà chúng ta nhìn, nhưng nó sẽ nói cơ sở dữ liệu lĩnh vực này là rất quan trọng mà tôi có lẽ muốn để có thể tìm kiếm trên đó, đi trước và xây dựng một số ưa thích cấu trúc dữ liệu trong bộ nhớ để tiến hành tìm kiếm để lý tưởng họ hằng số thời gian hoặc ít nhất là gần đó là có thể để nó không devolve vào tìm kiếm tuyến tính, mà không được cao nhất thực hiện phương pháp tiếp cận. Ngược lại, địa chỉ email có thể có được một khóa chính. Về lý thuyết, địa chỉ email của tất cả mọi người là duy nhất, trừ khi bạn đang chia sẻ một số tài khoản, nhưng nói chung không tốt để sử dụng một cái gì đó giống như một chuỗi như một khóa chính bởi vì nếu mục đích của nó trong cuộc sống là để nhận diện hàng trong bảng của bạn không có lý do để sử dụng 255 byte tối đa để xác định một người nào đó nếu bạn có thể nhận được ngay với chỉ 4 byte hoặc một int 32-bit. Nói chung, một khóa chính nên ngắn gọn và súc tích và lý tưởng một cái gì đó giống như một số nguyên hoặc int a lớn, điều này sẽ xảy ra là 64 bit. Tuy nhiên, một địa chỉ email nên là duy nhất, và một trong các tính năng của một cơ sở dữ liệu là để thực thi duy nhất cho tôi. Bằng cách lựa chọn độc đáo ở đây bên cạnh email, mặc dù gửi email cho chính nó là cuộn ra khỏi màn hình, tôi đang nói đến cơ sở dữ liệu không tin tưởng tôi. Đừng để tôi chèn vào cơ sở dữ liệu cùng địa chỉ email hai lần, ngay cả khi tôi là một thằng ngốc và không phải là rất tốt với ifs và ifs khác và mã PHP thực tế và tôi vô tình cho phép người dùng đăng ký một địa chỉ email hiện có cơ sở dữ liệu là có một mức độ bảo vệ cho đúng đắn để đảm bảo rằng địa chỉ email trùng lặp không kết thúc trong bảng. Bây giờ, ngược lại, cho tên bạn có thể không muốn làm cho rằng độc đáo bởi vì sau đó không bao giờ có thể là 2 Davids hoặc 2 Mike Smiths, ví dụ, trong cơ sở dữ liệu của bạn, để chúng tôi sẽ chỉ để lại một mình. Tôi sẽ đi trước và bấm vào lưu ở góc dưới bên phải, và tất cả mọi thứ có vẻ tốt, nhưng nhận thấy ở đây đây là một phần rằng bây giờ chúng tôi sẽ không dành quá nhiều thời gian trên bởi vì cú pháp là một chút phức tạp, và chúng tôi không phải để tạo ra các bảng thường xuyên, nhưng SQL chính nó là một ngôn ngữ, cú pháp là quyền ở đây mà tôi đã nêu bật. PhpMyAdmin thực sự là nó tạo ra một giao diện dựa trên web cho bạn mà bạn có thể tiết kiệm thời gian và không phải tự loại ra một truy vấn SQL khá dài như thế. Nói cách khác, nếu bạn muốn tự tạo ra bảng này, vào lúc hoặc dấu nhắc rằng phpMyAdmin hoặc thậm chí trong màu đen và trắng bằng cách sử dụng tab này, SQL tab này, nơi bạn có thể gõ vào bất kỳ truy vấn SQL bạn muốn, thẳng thắn, điều này đã có thể lấy cho tôi một phút để thực sự nhớ cú pháp, và thậm chí sau đó, tôi có lẽ sẽ có thực hiện một số lỗi chính tả, do đó, công cụ này là hữu ích cho những thứ như thế, và nó cũng hướng dẫn. Bạn có thể bắt đầu để suy ra cú pháp là gì chỉ bằng cách mã hóa màu sắc đẹp mà phpMyAdmin được thêm để thuận tiện cho hình ảnh của chúng tôi. Nhưng bây giờ chúng ta hãy làm điều này thay vì. Hãy để tôi đi vào tab chèn ở đầu trang, và để cho tôi đi trước và chèn ví dụ một ID của chúng ta hãy nói rằng thực sự tôi không quan tâm. Nó sẽ tự động tăng. Tôi sẽ để cho các thỏa thuận cơ sở dữ liệu với điều này. Nhưng tôi được David, và email của tôi nên được malan@harvard.edu. Hãy đi trước đây và đưa vào Mike Smith là một số khác. Tôi sẽ cung cấp cho bản thân mình một tên cuối cùng là tốt, và chúng tôi sẽ có anh smith@example.com, và sau đó, nơi để tôi đi tiếp theo? Vâng, có vẻ như go là nút bấm, và thì đấy. Thông báo tại 2 hàng hàng đầu chèn. Đây là các truy vấn SQL thực tế. Đó là công cụ phpMyAdmin thực hiện cho tôi, nhưng kết quả cuối cùng, thông báo, nếu tôi đi đến tab trình duyệt, là để xem 2 dòng trong bảng này, rất gợi nhớ về mặt thẩm mỹ của bảng, chúng ta đã thấy cho người dùng của chúng tôi từ pset 7, một trong số đó là David Malan, một trong số đó là Mike Smith. Nhưng chỉ để được rõ ràng, tôi không cần phải sử dụng phpMyAdmin, và quả thật, bạn sẽ sớm được viết mã cho pset 7 tự động hóa quá trình thêm hàng, xóa hàng, cập nhật hàng và các loại tương tự, vì vậy hãy để tôi thay vì đi vào tab SQL lên đây và gõ * lựa chọn từ các sinh viên nơi email = "malan@harvard.edu." Nói cách khác giả sử bây giờ bạn có một số hình thức HTML, và người dùng trong địa chỉ email của họ, trong số các lĩnh vực khác, và mục tiêu hiện nay là trong PHP trên mã kết thúc trở lại để thực sự tìm kiếm các chi tiết khác của người sử dụng. Tên đầy đủ của bạn là gì? Số ID của bạn là gì? Bạn có thể viết một truy vấn SQL như thế này, chọn * từ sinh viên nơi email = "malan@harvard.edu." Và nếu tôi sau đó nhấp vào đi, nhận thấy rằng tôi nên, và thực sự tôi, có được một hàng. Mike được bỏ qua từ này tập hợp kết quả, như là bộ sưu tập hàng thường được gọi là, bởi vì anh ta không có địa chỉ email giống như tôi. Bây giờ, một lần nữa, ở đây cho pset 7, bạn sẽ sử dụng phpMyAdmin là một công cụ hành chính và một công cụ sư phạm để tìm hiểu theo cách của bạn trên toàn thế giới của SQL, nhưng vào cuối ngày bạn sẽ được viết các truy vấn bên trong mã PHP thực tế, và do đó, tiếp tục theo dõi trong walkthrough Zamyla đặc biệt nơi bạn sẽ nhận được một tour du lịch của các mã phân phối cho tập hợp vấn đề nơi mà chúng tôi đã đưa cho bạn không chỉ có tính thẩm mỹ cho trang đăng nhập và tốt đẹp sexy biểu tượng nói CS50 Tài chính, nhưng chúng tôi cũng đã đưa cho bạn một loạt các chức năng mà sẽ làm cho cuộc sống của bạn dễ dàng hơn một chút. Chúng tôi cũng đã viết một phần của pset cho bạn, phần đăng nhập của nó đặc biệt, cung cấp cho bạn một cảm giác của một thiết kế đại diện mà thực sự sử dụng một bộ điều khiển, dụ, index.php, login.php và như thế, và sau đó bạn sẽ thấy pset cũng có một thư mục mẫu có tất cả các quan điểm của bạn, tất cả các tính thẩm mỹ. Và do đó, các quy trình làm việc chung trong pset 7 là có được mà người dùng của bạn truy cập vào một bộ điều khiển thông qua một URL trong trình duyệt. Bộ điều khiển có chứa mã PHP mà bạn đã viết, và bên trong mã PHP của bạn có thể được một số dòng của SQL lồng nhau ở giữa dấu ngoặc kép và được chuyển đến một chức năng, chúng tôi đã viết truy vấn được gọi là sẽ giúp bạn nói chuyện với cơ sở dữ liệu mà không cần sử dụng một cái gì đó như thế một công cụ hành chính như phpMyAdmin. Bạn sẽ có thể để viết câu lệnh SQL trong PHP code và nhận được trở lại một mảng PHP của tập kết quả, của các hàng mà thực sự phù hợp với truy vấn. Và tương tự như bạn sẽ có thể làm chèn hoặc xóa hoặc cập nhật hoặc các loại tương tự, cú pháp là tương đối giống nhau, và bạn sẽ thấy một số tài liệu tham khảo trực tuyến, từ các mã phân phối và từ pset các gói chính nó chính xác làm thế nào để đi về làm điều đó. Nhận ra cuối cùng chúng ta đang thực sự chỉ trầy xước bề mặt của SQL và MySQL, nhưng sức mạnh của nó thực sự là nó giải phóng bạn tập trung vào các vấn đề bạn muốn giải quyết, các trường hợp sử dụng, bạn muốn thực hiện mà không phải lo lắng khá nhiều, ít nhất là đầu vào, ở đâu và làm thế nào để lưu trữ và tìm kiếm cơ sở dữ liệu của bạn, và điều này là hoàn toàn theo nghĩa đen chính Facebook đã bắt đầu bằng cách sử dụng MySQL và sau đó bằng cách sử dụng nhiều máy chủ MySQL và sau đó MySQL máy chủ trước khi dài cho đến khi họ đã thực sự bắt đầu suy nghĩ khó khăn về việc làm thế nào để lưu trữ dữ liệu, làm thế nào để lưu trữ những thứ thậm chí còn hiệu quả hơn, do đó, mặc dù chúng tôi sẽ đưa cho các cấp thực tế mà chỉ số và ràng buộc duy nhất và vv chỉ làm việc có một cuộc trò chuyện rất thú vị rằng điều này có thể tất cả cuối cùng dẫn, do đó, nhận ra rằng chúng tôi chỉ trầy xước bề mặt những gì có thể cuối cùng cho bạn hoặc các dự án của bạn trở nên khá một chút dữ liệu lớn. Với mà nói, chúng ta hãy kết thúc ở đây, và chúng tôi sẽ nhìn thấy bạn trong tuần tới. [CS50.TV]