>> R.J. Aquino: Chúng ta hãy bắt đầu.
Vì vậy, đây là đố 1.
Dưới đây là một số thông tin cấp cao.
Trang Giới thiệu cho các bài kiểm tra là lúc này URL, không còn CS50.net, mặc dù đó
sẽ vẫn làm việc.
Nó CS50.harvard.edu/quizzes/2013/1.
Đó là lớn Về trang, nói cho bạn ở đâu và khi nào, cụ thể là thứ tư tới
trong một loạt các phòng.
Và thứ tư tới, tôi có nghĩa là hai ngày, kể từ bây giờ.
Tất cả các thông tin này là có.
Nhưng nó là tích lũy.
>> Vì vậy, tất cả mọi thứ từ nửa đầu năm là có khả năng trên các bài kiểm tra,
bởi vì bạn có thể không thực sự làm tiên tiến mọi thứ trong C không nếu có điều kiện và
cho các vòng và các loại tương tự.
Nhưng sẽ có một sự nhấn mạnh vào vật liệu che phủ từ quiz 0,
bắt đầu với cấu trúc và các tập tin I / O. Nó thường hơn
Câu đố đầy thách thức hơn 0.
Điểm số trung bình thường thấp.
Học tập chăm chỉ.
>> Trong khi bạn đang học, hãy sử dụng CS50/discuss để gửi câu hỏi của bạn
và đọc những câu hỏi của người khác.
Vì vậy, nếu bạn không có bất kỳ câu hỏi, đăng nhập và đọc
câu hỏi của bạn bè.
Họ đang có lẽ câu hỏi tốt.
Và có những câu đố thực hành.
Chúng tôi đã đưa ra câu đố cho bảy hay tám năm nay.
Tất cả chúng trực tuyến.
Câu hỏi tương lai tương tự các câu hỏi cũ.
Đó là cách chúng tôi làm cho họ.
>> Các bài kiểm tra không tồn tại được nêu ra.
Không ai trong số chúng ta đã nhìn thấy nó.
Nhưng nó sẽ giống như câu đố trước.
Cho phiên xét này, đây không phải là một danh sách dài các chủ đề.
Bạn không thể chỉ tham dự này và sau đó được hoàn toàn sẵn sàng cho bài kiểm tra.
Nếu không, nó sẽ không được rằng có rất nhiều bài kiểm tra.
Và điều này cũng không nhất thiết phải tất cả mọi thứ bạn cần biết về bất kỳ
cho chủ đề.
Nó có nghĩa là đặt bạn vào những điều chúng tôi đã được bảo hiểm, nhắc nhở bạn những gì chúng ta
bảo hiểm, và cách thức mà chúng bao phủ nó.
Nhưng bạn sẽ phải đi xa hơn và sâu hơn khi bạn học để kiểm tra lại
mà bạn biết mọi thứ về bất kỳ cho chủ đề và bạn đã điền vào
tất cả các góc đã được được đề cập trong bài giảng.
>> Các ghi chú bài kiểm tra cho bạn biết để đi đến ghi chú ghi chép, xem bài giảng video.
Đó là một cách tốt để chắc chắn rằng bạn đã bao gồm tất cả các căn cứ của bạn.
Vì vậy, khi bắt đầu, khi tôi thực hiện các trình bày, tôi đã cố gắng để đặt nơi tôi tìm thấy
thông tin.
Vì vậy, cho File I / O, ví dụ, Tuần 7, Bài giảng của Thứ hai, và đăng
Phần 6 và vấn đề Set tất cả đều có thông tin về File I / O. Tôi đã thực hiện
điều này cho mỗi chủ đề.
Vì vậy, những tiêu đề chuyển động có thể hữu ích cho bạn.
>> Vì vậy, ở đây chúng tôi có File I / O. Hãy nhớ rằng, trong Đặt vấn đề 5, chúng tôi sử dụng fopen, fclose,
fwrite, fread, và fseek.
Bị thu hồi 30ish JPEG và khi thay đổi kích thước và sai lầm với
ảnh, bạn nên được khá quen thuộc với các chức năng
và làm thế nào họ làm việc.
Nếu bạn không còn quen thuộc, chắc chắn xem xét lại.
Và chắc chắn rằng bạn hiểu những gì các đối số khác nhau,
khi họ đang sử dụng.
>> Nhưng các lỗi liên quan đến file phổ biến bạn có thể được yêu cầu về -
tốt, nếu bạn đã quên để kiểm tra xem fopen thực sự làm việc trước khi đi
sửa đổi một tập tin.
Đó có thể là xấu.
Nếu bạn đã quên fclose một tập tin mà bạn đã fopened, đó là tương tự như
rò rỉ bộ nhớ.
Đó là khá xấu.
Và quên để kiểm tra xem bạn đã đạt đến kết thúc của tập tin trước khi bạn
bắt đầu viết cho nó.
>> Vì vậy, nếu bạn nói, hey, tôi đang ở cuối của tập tin.
Cho tôi hơn 5 byte.
Vâng, đó là lẽ sẽ không làm việc ra theo cách bạn mong đợi.
Đó là thực sự nó cho File I / O, bởi vì chúng tôi đã làm rất nhiều của nó
với các vấn đề thiết lập.
Vì vậy, nếu bạn hiểu những gì đang xảy ra trong vấn đề Set 5, nhớ bitmats
và hình ảnh JPEG, sau đó bạn có lẽ tất cả thiết lập cho tập tin I / O. Nếu đó là một chút
mờ, chắc chắn xem xét vấn đề đó thiết lập và các tài liệu liên quan.
>> Cấu trúc là những chủ đề đã được trên ranh giới giữa 0 và Câu đố Câu đố 1.
Không hoàn toàn làm cho việc cắt giảm cho quiz 0.
Vì vậy, họ chắc chắn sẽ được trên Bài kiểm tra 1, Tuần 7, thứ Hai.
Một cấu trúc là gì?
Ở đây chúng ta thấy một cấu trúc.
Nó giống như một loại mới.
Nó giống như một container cho nhiều lĩnh vực.
>> Trong trường hợp này, chúng tôi đã tuyên bố một cấu trúc sinh viên có hai lĩnh vực -
một chuỗi mà chúng ta đang gọi tên và một int mà chúng ta đang kêu gọi tuổi.
Vì vậy, khi tôi vượt qua xung quanh sinh viên hoặc tôi sửa đổi sinh viên, tôi sẽ có thể
truy cập tên của họ và tuổi tác của họ.
Hãy nhìn vào một số mã cho điều đó.
Ở đây chúng tôi thấy rằng tôi đã tuyên bố một sinh viên s, giống như
Tôi tuyên bố bất kỳ biến -
int x, int y, vân vân.
>> Đây là sinh viên s.
Ông bắt đầu với không có gì trong các lĩnh vực của mình.
Vì vậy, hãy để họ ra đi.
Bạn thiết lập các lĩnh vực của một cấu trúc với dấu chấm.
Vì vậy, tôi đã nói ở đây là s.name = RJ.
Và s.age = 21.
Bạn cũng có thể cập nhật các lĩnh vực giống như cách bạn muốn cập nhật
giá trị của một biến.
Vì vậy, tôi muốn thay đổi tên của tôi từ RJ với không có thời gian để R.J. đánh vần
cách chính xác.
Nó sẽ được s.name = RJ, cùng như chúng tôi đã nói ban đầu nó.
Và sau đó bạn có thể truy cập chúng.
>> Vì vậy, chúng tôi đã thiết lập chúng.
Chúng tôi đã cập nhật chúng.
Bạn cũng có thể truy cập chúng theo cách rất giống nhau.
Vì vậy, ở đây, tôi in ra R.J. Là 21 tuổi.
Và tôi truy cập vào những giá trị với s.name và s.age.
Vì vậy, đó là truy cập vào cấu trúc với ký hiệu dấu chấm.
Vâng, đặt câu hỏi?
>> ĐỐI TƯỢNG: Có một lý do trên slide trước đó bạn đã không đặt
sinh viên trên dòng đầu, như typedef sinh viên cấu trúc và sau đó
sinh viên ở cuối?
>> R.J. Aquino: Vì vậy, câu hỏi là, trên slide này, chúng tôi đã thường thấy
typedef struct node và sau đó lĩnh vực cấu trúc và
sau đó các nút từ.
Và làm thế nào đến đây tôi đã không nói, typedef sinh viên cấu trúc và sau đó
lĩnh vực cấu trúc và sau đó sinh viên?
Lý do là tôi không cần phải truy cập vào nó bên trong các cấu trúc.
Vì vậy, nó đồng ý để lại nó mà không có một cái tên.
Tôi chỉ có thể để nó như một cấu trúc vô danh.
>> Lý do chúng tôi làm điều đó cho danh sách liên kết và điều là bởi vì bên trong bạn cần
để tham khảo một ngôi sao nút cấu trúc.
Vì vậy, các cấu trúc phải có tên, vì vậy bạn có thể truy cập nó sau này.
Đó là một chi tiết nhỏ.
Nhưng bạn sẽ thường thấy struct dấu ngoặc nhọn nếu bạn không cần
tên và struct một số tên sau dấu ngoặc nhọn nếu bạn sẽ
cần tên.
Vì vậy, đó là một câu hỏi hay.
>> Và vào thời điểm đó, chúng ta có xu hướng sửa đổi cấu trúc và vượt qua xung quanh cấu trúc của
tham khảo, không phải bởi giá trị.
Vì vậy, chúng ta sẽ vượt qua xung quanh con trỏ đến cấu trúc thay vì đi qua xung quanh
cấu trúc bản thân.
Vì vậy, bạn đang rất thường xuyên sẽ sử dụng, trong trường hợp này, sinh viên * hoặc
struct node * hoặc nút thay vì * ra sinh viên hoặc các nút.
Vì vậy, ở đây, tôi đã nói, OK, biến ptr là có được địa chỉ của s.
Nó sẽ là con trỏ cho học sinh R.J.
>> Vì vậy, chúng ta có thể có được ở các lĩnh vực giống như chúng ta có được bất cứ điều gì.
Đầu tiên, ID tham khảo con trỏ để có được các cấu trúc.
Đó là * ptr và sau đó một dấu chấm và sau đó tuổi.
Vì vậy, để truy cập vào lĩnh vực này, và tôi đã cập nhật nó bây giờ đến 22, bởi vì, chúng ta hãy
nói rằng, đó là sinh nhật của tôi.
Có một cú pháp phím tắt sử dụng mũi tên ở đây.
Tuổi mũi tên để ptr chỉ là giống như * ptr.age.
Bây giờ, đó là một cái gì đó bạn sẽ phải để ghi nhớ và nhớ.
>> Bạn sử dụng nó rất nhiều trong pset6, các pset Speller.
Nhưng điều này thực sự là những gì đang xảy ra trên dưới mui xe.
Nó dereferencing con trỏ và sau đó truy cập vào nó.
Câu hỏi?
>> ĐỐI TƯỢNG: [nghe được].
>> R.J. Aquino: Vì vậy, tại sao chúng ta sử dụng con trỏ như cấu trúc thay vì
cấu trúc chính mình?
Lý do là nếu bạn đang đi qua một cấu trúc cho một chức năng, bạn có thể
muốn vượt qua xung quanh chỉ là 4 hoặc lâu hơn byte đại diện cho con trỏ, như
trái ngược với khả năng 30 40 byte có cấu trúc.
Vì vậy, đi qua một cái gì đó đến một chức năng là dễ dàng hơn khi điều
là nhỏ hơn trong ngắn hạn.
Câu hỏi?
>> ĐỐI TƯỢNG: Bạn có thể đề cập đến điều này trong đầu, nhưng có
slide khác lên trên [nghe được]?
>> R.J. Aquino: Các slide sẽ được sau khi phiên xét.
Chúng tôi sẽ gửi cho họ trên trang web.
Vì vậy, di chuyển trên và di chuyển trên một chút nhanh hơn, chúng ta sẽ nói về dữ liệu
cấu trúc.
Có rất nhiều.
Chúng ta đã một bó của họ.
Đây là những gì bạn nên hiểu về cấu trúc dữ liệu.
>> Bạn thực sự cần phải hiểu ở mức cao cấp những gì mỗi cấu trúc là.
Bạn có thể giải thích bằng tiếng Anh để bạn bạn đã không được thực hiện như thế nào CS50
chúng tôi đang tổ chức dữ liệu của chúng tôi và lý do tại sao chúng tôi được sử dụng một cái gì đó theo cách này?
Đó là điều một.
Điều hai, hiểu việc thực hiện.
Vì vậy, hiểu làm thế nào để sử dụng những điều này C. Và chúng tôi sẽ được đi qua này.
>> Và sau đó điều ba sẽ được biết Thời gian chạy và những hạn chế của
cấu trúc khác nhau mà bạn đang sử dụng.
Vì vậy, hiểu tại sao bạn sẽ sử dụng một băm bảng thay vì một mảng.
Hiểu làm thế nào nhanh chóng, trung bình, truy cập vào một bảng băm là.
Hiểu những gì hoạt động được nhanh chóng trên danh sách liên kết nhưng chậm trên mảng và
ngược lại.
Vì vậy, để hiểu rằng, bạn sẽ phải hiểu Big-O ký hiệu chỉ để biết
làm thế nào để nói về những các loại vật.
Và chúng ta sẽ nói về điều đó.
>> Vì vậy, điều đầu tiên, danh sách liên kết.
Đây là một hình ảnh cao cấp của một danh sách liên kết.
Chúng tôi thấy điều này trong lớp.
Chúng tôi thường có 10 người đứng trên sân khấu.
Nhưng chúng tôi có một loạt các nút trong đó mỗi nút có một số giá trị và một con trỏ
giá trị tiếp theo.
Vì vậy, để có được từ một nút kế tiếp, bạn chỉ cần nói, cho tôi nút tiếp theo.
Bạn có nút đó.
Cho tôi nút tiếp theo.
Bạn có nút đó.
Cho tôi nút tiếp theo và vv cho đến khi không có nút bên trái.
>> Vì vậy, tiếp tục nói về nó ở mức cao.
Nó rất dễ dàng để chèn điều vào một danh sách liên kết.
Nếu bạn không quan tâm đến thứ tự, bạn chỉ có thể thả nó
đúng ngay từ đầu.
Đó là thời gian liên tục.
Nhưng thật khó để tìm thấy một giá trị.
Nếu bạn đang cố gắng để hỏi, là bảy trong danh sách của tôi?
Bạn phải đi qua mỗi giá trị duy nhất.
Đây là bảy?
Hơn và hơn nữa.
Và đó là O (n).
Vì vậy, khi nghiên cứu cho các bài kiểm tra, so sánh điều này với mảng.
>> Là OK?
Đèn đã mờ.
OK.
Khi là một danh sách liên kết tốt hơn?
Khi là một mảng tốt hơn?
Vì vậy, chúng ta hãy nhìn vào một số mã.
Đây là một nút tiềm năng.
Đó là một cấu trúc.
Nó có một int n, mà sẽ có giá trị của chúng tôi.
Và nó có một nút cấu trúc * tiếp theo, là con trỏ của chúng tôi đến nút tiếp theo.
Vì vậy, ở đây, chúng ta có thể thấy rằng chúng tôi đã xảy ra đã đặt một int trong nút của chúng tôi.
Nhưng nếu điều này là một danh sách liên kết của char sao hoặc một danh sách liên kết của phao nổi, chúng tôi
hoàn toàn có thể làm điều đó quá.
>> Nhớ trong pset6, có thể bạn đã có một danh sách liên kết của các ngôi sao char hoặc chỉ
mảng char tĩnh.
Chúng ta hãy xem đây tại một hoạt động.
Vì vậy, chúng tôi muốn chèn một mới n vào danh sách liên kết của chúng tôi.
Chúng tôi bắt đầu với một con trỏ đầu đó là một con trỏ đến nút này mà có
giá trị của n và tiếp theo của một con trỏ điểm nút này là một giá trị
n và tiếp theo của null, vì đó là nút cuối cùng.
Vì vậy, vì lợi ích của thời gian, tôi sẽ đặt tất cả các mã trên màn hình.
Và chúng tôi sẽ đi bộ qua nó một vài dòng tại một thời điểm.
>> Vì vậy, đây là các mã.
Tôi hy vọng nó có thể đọc được.
Điều đầu tiên chúng tôi làm là chúng tôi malloc một nút mới.
Vì vậy, nó làm cho một con trỏ đến một nút mới không hoàn toàn có bất cứ điều gì thiết lập
trong đó nêu ra.
Chúng tôi kiểm tra để đảm bảo rằng nút mới không phải là null.
Nếu không, chúng ta phải từ bỏ.
Vì vậy, khi kiểm tra rằng, hiện nay chúng tôi thiết lập các giá trị trong nút.
Vì vậy, chúng tôi đặt các n mới vào lĩnh vực n của chúng tôi.
Và chúng tôi đặt con trỏ tiếp theo để trỏ đến người đứng đầu ban đầu, để chúng ta có thể
bây giờ có thêm vào này nút vào danh sách của chúng tôi.
>> Cuối cùng, chúng tôi có điểm đầu toàn cầu đến nút mới của chúng tôi, do đó, nếu chúng ta
bắt đầu từ đầu, chúng tôi sẽ ở đây nút đầu tiên mới thay vì
nút đầu tiên cũ.
Và khi chức năng này thoát ra, các biến nút mới không còn tồn tại,
bởi vì nó là địa phương để các chức năng.
Vì vậy, đây là trạng thái của thế giới.
Đầu toàn cầu của chúng tôi chỉ mới của chúng tôi nút đầu tiên, mà điểm đến của chúng tôi
ban đầu nút đầu tiên, mà điểm đến nút ngay sau đó.
>> Đó là chèn.
Tôi hy vọng đó là tương đối đơn giản để làm theo.
Khi nghi ngờ, vẽ một bức tranh.
Vì vậy, tôi thấy rằng nói về danh sách liên kết và nhìn
đang rất không hữu ích.
Trong khi tìm kiếm một hình ảnh của một liên kết danh sách cho phép tôi nghĩ, oh, vì vậy
Tôi có nút này ở đây.
Nhưng nếu tôi cập nhật con trỏ đó, nó kết thúc lên bị ngắt kết nối.
Và tôi đã quên nơi nút đi.
Và mã thoát.
Và bạn có nhiều nút được ngắt kết nối.
Và bạn không kết thúc với danh sách mà bạn muốn.
>> Vì vậy, nếu bạn vẽ hình ảnh và làm điều đó từng bước, hy vọng, bạn sẽ thấy
đúng trình tự của điều về cập nhật các con trỏ để đảm bảo
rằng danh sách đến với nhau.
Chèn là tương đối đơn giản.
Một một phức tạp hơn sẽ được chèn vào một danh sách được sắp xếp.
Một chức năng phức tạp hơn là xóa và tìm thấy, do đó tìm kiếm thông qua danh sách để
xem có cái gì là có.
Có lẽ bạn đã làm điều này trong khi bạn pset6 đã vào bảng băm của bạn và bạn nói,
tốt, là quả táo từ trong danh sách liên kết của tôi?
>> Vì vậy, bạn có thể đã làm điều này.
Nhưng chắc chắn, làm mới bộ nhớ của bạn và cố gắng tìm và reimplement
reimplement xóa một danh sách liên kết.
Phụ lưu ý vui vẻ, cũng có liên kết kép danh sách, nơi bạn có
con trỏ trỏ cả hai phía trước và lạc hậu, do đó bạn có thể đi đến
nút tiếp theo và đến nút trước đó.
Và có một câu hỏi về năm ngoái bài kiểm tra của loại đó, nói chuyện
về danh sách liên kết kép.
>> Bây giờ, đó là một cấu trúc mà bạn tương đối quen thuộc, bởi vì hầu hết
các bạn có thể sử dụng chúng trên pset6.
Đây là một trong đó là một chút không quen thuộc.
Như một mặt lưu ý, tôi nghĩ rằng đố 1 là chủ yếu khó hơn đố 0, bởi vì
những thứ bạn đang làm, bạn đã không được thực hiện càng nhiều.
Đặt theo cách khác, ví đố 0, bạn đã viết rất nhiều C. Và chúng tôi
hỏi bạn về C.
>> Cho Câu hỏi 1, chúng ta sẽ hỏi bạn về PHP và JavaScript, mà bạn
đã không viết càng nhiều.
Chúng ta sẽ hỏi bạn về C-mã bạn đã không viết càng nhiều,
C công cụ cao cấp này.
Vì vậy, chắc chắn, thực hành những thứ chúng tôi đã nói trong bài giảng mà bạn
không nhất thiết phải làm về vấn đề thiết lập.
>> Phát biểu trong đó, bạn đã không viết một chồng về một vấn đề thiết lập.
Nhưng đó là trong bài giảng.
Dưới đây là hình ảnh cao cấp của ngăn xếp mà chúng tôi cho thấy mỗi năm.
Đó là chồng khay trong các Mather phòng ăn.
Ở mức độ cao, ngăn xếp là một cuối cùng , ra trước cấu trúc dữ liệu.
Điều đó có nghĩa bạn đang đi đặt mọi thứ trong -
1, 3, 7, 12, 14, tiêu cực 0.
Một trong những điều tôi không thể có nói - âm 3, 0.
Bạn đặt tất cả những điều này in
Và cuối cùng bạn đưa vào là lần đầu tiên một trong đó là sẽ đi ra.
>> Vì vậy, bạn có hai hoạt động -
đẩy và pop.
Tất cả các đặt trong tôi là cử chỉ như thế này là đẩy.
Và sau đó khi tôi đạt được trong để lấy một cái gì đó hoặc đạt được trên đầu trang để lấy
một cái gì đó, đó là pop.
Vì vậy, chúng ta sẽ thực hiện ngăn xếp.
Và chúng tôi cho thấy chúng trong bài giảng sử dụng các mảng.
Nhưng bạn có thể làm cho họ sử dụng danh sách liên kết.
Một stack là một dữ liệu khái niệm cấu trúc, không giống như một
thực hiện cụ thể một.
>> Vì vậy, những gì mà có thể nhìn như thế nào?
Nó sẽ trông giống như này.
Bạn muốn có một số nguyên kích thước.
Và bạn muốn có một mảng các giá trị chúng tôi đang gọi điện thoại khay, bởi vì đó là
những hình ảnh được cho chúng tôi - int khay -
và sau đó một số công suất tối đa.
Vậy điều gì sẽ thúc đẩy như thế nào?
Vâng, nếu chúng ta có một đống s, sau đó đẩy một cái gì đó vào s, chúng tôi sẽ nhận được
kích thước của s.
Và đó sẽ là tiếp theo chỗ mở của mảng của chúng tôi.
Vì vậy, nếu chúng tôi có ba điều trong ngăn xếp của chúng tôi, sau đó khay 3 sẽ là tiếp theo
mở tại chỗ, vì 0, 1, và 2 đã được lấp đầy.
>> Vì vậy, chúng tôi đặt các giá trị vào s.trays [s.size], vị trí thứ ba.
Và sau đó chúng tôi tăng s.size nói, hey, chúng tôi đã có ba điều trước.
Bây giờ, chúng tôi có bốn.
Vì vậy, lần sau khi bạn đẩy, bạn sẽ đặt cái gì đó vào 4.
Hoặc thời gian tiếp theo bạn bật, bạn sẽ nhìn vào 3 thay vì 4 hoặc bất cứ điều gì.
Và sau đó chúng tôi sẽ trở lại đúng với nói, hey, chúng tôi đã thành công.
Điều này làm việc.
Theo quy định của ngón tay cái, nếu một chức năng đó là phải để trở về đúng hoặc
sai luôn luôn trả về true, bạn có thể đã làm điều gì sai.
Vì vậy, để làm việc này?
>> Vâng, nó hoạt động tốt trong 1, và 2, 3, và 4, và năm.
Nhưng hãy nói rằng tôi đạt được khả năng của tôi.
Tôi đã sau đó chạy vào một vấn đề, bởi vì nếu kích thước tương tự như năng lực, tôi
bây giờ cố gắng để đưa một cái gì đó vào một mảng mà tôi không có không gian.
Do đó, một kiểm tra ngắn để sửa lỗi này.
Nếu s.size == NĂNG LỰC, trả về false.
Nếu không, hãy đi và làm những gì chúng tôi đã làm.
Vì vậy, những gì khác chúng ta có thể hỏi về cho ngăn xếp?
Bạn nên học những gì khác?
Bạn nên thực hành những gì khác?
>> Vâng, thực hiện pop.
Chúng tôi đã làm đẩy.
Tôi sẽ khắc phục điều đó.
Một thực hiện không mảng, nơi bạn sử dụng một danh sách liên kết, có lẽ.
Một thực hiện không int.
Chúng tôi đã làm ints đây.
Nhưng nó có thể là phao nổi.
Tôi có thể có được chuỗi.
Nó có thể đã được sao char.
Nhìn vào bài kiểm tra vừa qua cho các loại câu hỏi chúng tôi đã hỏi về ngăn xếp.
>> Tôi sẽ nói rằng chúng ta đã ngăn xếp xung quanh giống như chúng tôi đã được bảo hiểm họ trong
năm qua.
Vì vậy, các câu đố nên là một dấu hiệu tốt.
Di chuyển về phía trước nhanh hơn, hàng đợi.
Họ giống như ngăn xếp.
Nhưng chúng đầu tiên, ra trước.
Nếu bạn là người Anh, xếp hàng từ có thể thực hiện rất nhiều ý nghĩa với bạn.
Nếu không, bạn có thể có nghe nói về nó như một dòng.
Họ làm việc giống như các dòng tại các cửa hàng Apple.
Người đầu tiên xuất hiện vào lúc 3:00 vào buổi sáng là lần đầu tiên
người mua iPad của mình.
>> Vì vậy, chúng tôi có hai hoạt động -
enqueue và dequeue.
Enqueue đặt một người nào đó trong dòng.
Dequeue kéo đầu tiên người ra khỏi dây chuyền.
Một lần nữa, chúng ta có thể thực hiện này với một mảng.
Vì vậy, các cấu trúc, chúng tôi là những gì cho thấy trong bài giảng?
Đó là một này.
Một lần nữa, các con số.
Một lần nữa, kích thước và điều trước mới này.
Tại sao lại có một cái gì đó gọi là phía trước?
Đó là chỉ số tiếp theo yếu tố để dequeue.
Nó chỉ là nội bộ theo dõi anh chàng đầu tiên xuất hiện, vì vậy chúng tôi có
có thể kéo nó ra khi chúng ta cần.
>> Chắc chắn nhìn vào bài giảng và cố gắng để thực hiện enqueue và dequeue
khi nghiên cứu cho các bài kiểm tra.
Điều quan trọng để suy nghĩ về.
Bao quanh nếu phía trước cộng với kích thước kết thúc lớn hơn năng lực.
Một lần nữa, nếu cấu trúc của bạn là đầy đủ, bạn sẽ có một vấn đề.
Băm bảng bạn đã thấy trước đây.
Hầu hết các bạn có thể thực hiện những ngày pset6.
Đó là một cấu trúc nhằm mục đích cho O (1) thời gian liên tục chèn và O (1)
tra cứu thời gian liên tục.
>> Trong CS50, chúng tôi thực hiện điều này như một loạt các danh sách liên kết.
Các thành phần quan trọng để một bảng băm là hàm băm.
Vì vậy, nó chuyển đổi đầu vào của bạn, hãy nói, một từ trong từ điển, vào một số,
mà là có được chỉ số của chúng tôi.
Và chúng tôi sẽ sử dụng chỉ số vào mảng của chúng tôi.
Vì vậy, đây là một hình ảnh nhỏ dễ thương từ study.50.net.
Chúng tôi ném tất cả các từ vào hàm băm của chúng tôi.
Và hàm băm cho chúng ta nơi để đặt những lời này.
>> Đây là tất cả tuyệt vời trong đất nơi chỉ có một từ cho mỗi khe cắm.
Nhưng khi nhớ ra từ pset6, có là những từ hơn khe.
Vì vậy, những gì xảy ra khi bạn nhận được một va chạm?
Thay vì lưu trữ một giá trị trong, hãy nói, bảng băm 3, bạn
lưu trữ một danh sách liên kết.
Và vì vậy thay vì có dưa đỏ ở đây, bạn sẽ có một danh sách liên kết,
nơi nút đầu tiên là dưa đỏ.
Và nút tiếp theo là mèo.
Và nút thứ ba là va chạm, chúng ta hãy nói, bởi vì tất cả những lời bắt đầu
với C.
>> Vì vậy, hầu hết các bạn đã làm điều này cho pset6.
Nếu bạn không làm một bảng băm trên pset6 và bạn đã cố gắng một cái gì đó như
một Trie, chắc chắn xem xét bảng băm.
Nếu bạn đã làm điều đó trên pset6, chắc chắn xem xét các bảng băm.
Và nếu bạn đã làm nó trên pset6 và nó đã làm không làm việc ra hoàn toàn đúng và bạn
đã có rất nhiều rắc rối với nó, chắc chắn xem xét các bảng băm.
Vì vậy, bài học thực sự chắc chắn là xem xét các bảng băm.
>> Các dân tộc thiểu số lớn các bạn đã cố gắng cố gắng ra trên pset6.
Cao cấp hình ảnh.
Đó là một cái gì đó như thế này, trong đó mỗi nút có một bộ trẻ em, trong đó mỗi
con tương ứng với một lá thư.
Và tất cả các nút cũng nói, hey, tôi là một từ.
Vì vậy, trong trường hợp này, từ Maxwell, nếu bạn làm theo M vào A đến
X-W-E-L-L và sau đó làm theo nó một lần nữa.
Và bạn nhận được biểu tượng này, đồng bằng, mà chúng tôi biểu có nghĩa là đây là một từ.
Vì vậy, Maxwell là một từ.
Các vùng đồng bằng là suốt biểu mà điều đó là những từ và
điều này là không.
>> Vì vậy, trong pset6, dữ liệu chúng tôi lưu trữ cùng với bất kỳ các nút của chúng tôi là "Tôi là một
từ. "Và điều thú vị về cố gắng là họ chứng minh và chèn
tra cứu trong O (chiều dài của một từ).
Vì vậy, chỉ để có được thông qua Maxwell, đó là M-A-X-W-E-L-L. Vì vậy, bảy hoặc tám -
Tôi không thể đếm -
bước để có được đến cùng và kiểm tra mọi thứ.
Thực hiện để nhanh chóng ở đây.
Rob đã đi qua một liên kết liệt kê trong sau khi chết của mình.
Vì vậy, kiểm tra xem ra.
Xin lôi.
Đã đi qua một Trie trong sau khi chết của mình.
Vì vậy, kiểm tra xem ra.
>> Nhưng về cơ bản bạn có mỗi nút có 27 con trỏ đến nút tiếp theo và một
Boolean cho tôi một lời.
Kiểm tra sau khi chết của Rob trong bao điều này thực sự được thực hiện.
Cấu trúc cuối cùng của chúng tôi, cây của chúng tôi và cây tìm kiếm nhị phân.
Vì vậy, nhìn vào đó, chúng được bao phủ gần đây nhất là 8 tuần, thứ Hai.
Một cây tương tự như một Trie, ngoại trừ bạn không nhất thiết phải 27 nút ở
mỗi điểm.
Và bạn không có dữ liệu này tại mỗi bước nghĩa liệu -
con đường không quan trọng.
Trong khi một Trie, con đường từ trên xuống phía dưới, Maxwell, là quan trọng đối với chúng tôi.
>> Nhưng mỗi nút có nhiều trẻ em, có lẽ.
Chúng tôi có một số từ vựng hơn.
Các gốc rễ của cây là ở đầu.
Và chúng ta nói rằng rất dưới cùng các nút có không
trẻ em là lá.
Vì vậy, giống như một Trie, một cây một cấu trúc của các nút.
Một dạng phổ biến của cây mà chúng ta đang đi nói đến là một cây nhị phân, nơi
mỗi nút không có trẻ em hoặc một con hoặc hai con.
Vì vậy, hình ảnh này ở đây không phải là một cây nhị phân, vì
nút 3 có ba trẻ em.
>> Nhưng nếu chúng ta bỏ qua những, phần còn lại của nó là một cây nhị phân vì nó
chứng minh tài sản mà mỗi nút có không, một hoặc hai con.
Vậy làm thế nào chúng ta có thể thể hiện điều này trong mã?
Chúng ta có thể có một nút mà mỗi nút có một số nguyên bên trong của nó, cũng
như một con trỏ đến cây bên trái và một con trỏ đến cây trên
bên phải, do đó, hai trẻ em.
Làm thế này là hữu ích?
Vâng, nếu chúng ta thực hiện các quy định về nơi chúng tôi đặt các nút, chúng ta có thể thực hiện tìm kiếm nhanh hơn.
>> Do đó, có một khái niệm về một tìm kiếm nhị phân cây, nơi mà tất cả các nút trên
cây con trái có một giá trị nhỏ hơn hơn các nút chúng tôi đang tìm kiếm.
Và tất cả các nút trên cây con bên phải có giá trị lớn
hơn nút gốc.
Bây giờ, có vẻ như rất nhiều từ.
Tôi sẽ đặt nó bên trong của đôi báo giá và cho bạn thấy một bức tranh.
Vì vậy, đây là một ví dụ một cây tìm kiếm nhị phân.
Thấy rằng chúng tôi bắt đầu với 10.
Tất cả mọi thứ bên trái của 10 nhỏ hơn nó.
Và tất cả mọi thứ bên phải lớn hơn nó.
>> Nhưng nhiều hơn so với đó, mỗi nút trong cây thể hiện khách sạn này.
Vì vậy, các nút 7 có 3 đến trái và 9 bên phải.
Vì vậy, tất cả những nhỏ hơn 10.
Nhưng nhìn vào chỉ những người, 7 có 3 bên trái và 9 của nó bên phải của nó.
Và tương tự bên phải, 15 có 14 bên trái và 50 của mình bên phải của nó.
Vì vậy, ba nút ở đằng kia, 15, 14, và 50, cũng là một cây nhị phân hợp lệ
hoặc một cây tìm kiếm nhị phân hợp lệ.
Và tất cả đều lớn hơn 10.
Vì vậy, họ được phép có bên phải có.
Có một câu hỏi?
>> ĐỐI TƯỢNG: Làm thế nào để bạn đối phó khi bạn có hai lần bảy?
>> R.J. Aquino: Vâng.
Làm thế nào để bạn đối phó với hai giá trị đó là như nhau?
Một số cây tìm kiếm nhị phân nói rằng bạn bỏ qua bản sao, vì mục tiêu là
chỉ để nói rằng, tôi đã nhìn thấy những điều này cho đến nay.
Một số cây tìm kiếm nhị phân bạn có thể nói có một số bên trong của nút.
Những người khác có thể nói rằng tất cả mọi thứ để bên trái là ít hơn hoặc bằng.
Và tất cả mọi thứ bên phải lớn hơn.
>> Nó chỉ phụ thuộc vào những gì vấn đề là bạn đang giải quyết.
Vì vậy, trong một từ điển, ví dụ, bạn sẽ không quan tâm đến bản sao.
Bạn sẽ ném chúng ra.
Nhưng một số vấn đề khác bạn có thể quan tâm.
>> ĐỐI TƯỢNG: Có thể có 1 bên trái của 15, mà
là ít hơn 10?
>> R.J. Aquino: số
Nếu 14 đây là một 1, điều này sẽ không phải là một cây tìm kiếm nhị phân có giá trị,
bởi vì tất cả mọi thứ ở bên phải của 10 có được lớn hơn nó.
Và chúng ta sẽ thấy lý do tại sao.
Nếu trong đất tìm kiếm mục tiêu của tôi là để tìm 14, tôi bắt đầu ở gốc.
Vì vậy, tôi xem.
OK.
Chúng ta sẽ bắt đầu từ gốc.
Nhìn vào 10.
>> Vâng, 14, mục tiêu của chúng tôi, lớn hơn 10.
Vì vậy, nó phải được bên phải.
Điều này rất giống với toàn bộ điện thoại điều chúng tôi đã làm cuốn sách, nhị phân
tìm kiếm đó.
Nhưng thay vì tìm kiếm nhị phân trong một mảng, chúng ta nhị phân
tìm kiếm trong cây này.
Vì vậy, chúng tôi vẫn đang tìm kiếm 14.
Vâng, 14 nhỏ hơn 15.
Vì vậy nếu nó trong cây của chúng tôi, nó phải được trong lĩnh vực này ở đây.
Nó phải được ở bên phải của 10 và bên trái của 15.
>> Và vì vậy chúng tôi kiểm tra nút này.
Và yay, chúng tôi đã tìm thấy 14.
Tôi sẽ không đi qua nó.
Nhưng đây là các mã.
Nó thực sự tương đối đơn giản,
bởi vì đây là đệ quy.
Những gì chúng tôi có thể yêu cầu bạn làm trên một bài kiểm tra?
Chúng ta có thể yêu cầu bạn viết mã này.
Chúng ta có thể yêu cầu bạn nhìn vào mã này và sửa đổi mã này và giải thích những gì
nó làm.
Yeah.
Câu hỏi?
>> ĐỐI TƯỢNG: Là những slide sẽ làm sẵn có như họ thời gian qua không?
>> R.J. Aquino: Có.
Vì vậy, các slide sẽ chắc chắn được đăng.
>> ĐỐI TƯỢNG: Họ đang thực sự được đăng ngay bây giờ trên trang web.
David chỉ làm điều đó.
>> R.J. Aquino: Các slide là ngay bây giờ trên trang web.
Tôi có lẽ sẽ vá một vài các lỗi chính tả tôi ghi nhận và sửa chữa chúng.
Nhưng có một hiện tại phiên bản trên trang web.
Những người khác những điều chúng ta có thể yêu cầu bạn làm -
viết chèn.
Viết một phiên bản lặp đi lặp lại của hàm đệ quy, chúng tôi chỉ cho bạn
hoặc nói về những điều này, như trong đoạn văn, trong lời nói, trong câu.
So sánh thời gian chạy và giải thích những gì bạn sẽ muốn sử dụng một số nhị phân
cây tìm kiếm thay vì một băm bảng, ví dụ.
>> Vì vậy, hiểu được những cấu trúc ở mức khá sâu.
Hiểu làm thế nào để viết cho họ, làm thế nào để sử dụng chúng, làm thế nào để nói về chúng.
Và bạn sẽ được tất cả các thiết lập.
Câu hỏi?
>> ĐỐI TƯỢNG: Khi bạn đang viết cây tìm kiếm nhị phân, làm thế nào bạn
xác định giá trị làm cho nó như là gốc?
>> R.J. Aquino: Vì vậy, câu hỏi là, những gì giá trị để bạn thực hiện như là gốc?
Tùy thuộc vào mã của bạn, bạn có thể có một gốc toàn cầu.
Vì vậy, bạn có thể có khả năng đã có trong pset6 một bảng băm toàn cầu.
Hoặc bạn có thể vượt qua gốc trong như một tham số.
Vì vậy, chức năng tìm kiếm này đây có một đối một nút *.
Và vì vậy bất cứ nút bạn xảy ra được nhìn vào là một trong những bạn đang điều trị
như là người chủ của bạn khi bạn vượt qua nó vào
Và tôi là tất cả các thiết lập.
Đó là những trang trình bày của tôi.
Người tiếp theo có thể đến trao đổi trong một máy tính xách tay và mic.
>> ROB Bowden: Tôi nghĩ rằng tôi có thể có giải thích câu hỏi đó một cách khác nhau.
Nhưng tôi hiểu nó như là, nếu bạn có những con số 1, 2, và 3, làm thế nào chúng tôi
biết để làm cho 2 gốc như trái ngược với 1 hoặc 3?
Nếu chúng tôi có 2 gốc, sau đó nó độc đáo 1 và 3 ở bên trái và bên phải.
Nhưng nếu 1 là gốc rễ, thì đó là 1 đến đầu, 2 bên phải, 3 bên phải.
Vì vậy, theo mặc định, bạn không biết những gì để làm gốc.
Và cho bất kỳ thuật toán chúng tôi đang mong để cung cấp cho bạn, chỉ là những điều đầu tiên bạn
chèn sẽ là gốc.
Hoặc chúng tôi cung cấp cho bạn một cây nhị phân đã tồn tại mà có một gốc.
Nhưng các thuật toán khác tồn tại như vậy mà gốc sẽ cập nhật, do đó nếu bạn
kết thúc trong tình huống mà nó là 1, 2, 3, nó sẽ tự động cập nhật
làm cho 2 gốc mới, do đó, nó vẫn còn độc đáo là sự cân.
>> ANGELA LI: Cool.
Chào mọi người.
Tôi Angela.
Và tôi sẽ kết thúc ra C của chúng tôi và sau đó đi vào một số trang web của chúng tôi
công nghệ -
HTTP, HTML và CSS.
Vì vậy, điều đầu tiên là bộ đệm cuộc tấn công tràn.
Vì vậy, chúng ta hãy nhìn vào mã này.
Nó khá đơn giản.
Có một chức năng foo.
Và nó không trả lại bất cứ điều gì.
Nhưng phải mất trong một con trỏ một chuỗi được gọi là thanh.
>> Và nó sẽ tuyên bố này đệm, mà là một nhân vật
mảng có 12 khe.
Và nó sử dụng memcpy, mà chỉ là một là chức năng mà bản sao từ một địa chỉ
thành khác.
Vì vậy, đây là cố gắng để sao chép vào đệm của chúng tôi từ bất cứ điều gì
thanh được trỏ đến.
Vì vậy, bất kỳ ý tưởng gì sai với mã số này?
>> ĐỐI TƯỢNG: Nếu thanh dài hơn C, họ sẽ ghi đè lên.
>> ANGELA LI: Vâng, chính xác.
Chúng tôi không có gì đảm bảo rằng thanh là có được ít hơn 12.
Chúng ta chỉ cần thực hiện một số số tùy ý 12.
Và chúng tôi đã như thế, chúng ta hãy hy vọng rằng đầu vào người dùng của chúng tôi là ít hơn
Dài 12 ký tự.
Vì vậy, trong một thế giới lý tưởng, nếu đầu vào của chúng tôi là luôn luôn như mong đợi, sau đó chúng tôi sẽ nhận được
một cái gì đó như thế nào, xin chào.
Đó là ít hơn 12 ký tự.
Nó được đọc vào char c.
Và sau đó chúng tôi làm điều gì đó với nó.
Nó không thực sự quan trọng.
>> Nhưng một người độc hại có thể làm một cái gì đó như thế này, nơi họ
cung cấp cho chúng tôi bất cứ điều gì thanh được trỏ đến, nó sẽ trỏ đến mảng lớn này
chỉ của một.
Và đây là cách dài hơn 12.
Vì vậy, nó sẽ đi tất cả các cách xuống đây để mà trở lại
địa chỉ sử dụng được.
Vì vậy, chúng ta hãy nói chức năng này được gọi là foo.
Có lẽ foo được gọi bằng một số khác chức năng, được gọi là chính.
Vì vậy, khi foo đang chạy, nó cần để biết được nơi để trở về.
>> Nếu foo được gọi bằng một số chức năng được đặt tên baz, nó phải biết rằng nó
đã trở lại baz.
Và đó là những gì trở lại địa chỉ này xuống đây cho chúng ta.
Nhưng nếu chúng ta ghi đè lên nó với một số khác địa chỉ, trong trường hợp này, đây là một
đại diện của các địa chỉ ở khi bắt đầu của bộ đệm này, sau đó
những gì thực sự sẽ xảy ra là thay vì trả lại trở lại baz,
đó gọi là chức năng của chúng tôi, nó chỉ là sẽ đi vào phía trước của mã này.
>> Và nếu điều này là có bởi vì một độc hại của hacker anh chàng đến và
tiêm này, thì có lẽ số tiền này A không phải là thực sự của một.
Và nó thực sự chỉ là mã mà nghỉ máy tính hoặc một cái gì đó của bạn.
Vì vậy, để được phòng thủ về loại này điều, bạn phải không bao giờ giả định rằng
người sử dụng đầu vào là một số số lượng ký tự.
Ví dụ, khi bạn đang làm Speller, bạn đã nói rằng lời là
chỉ có được 40 ký tự tối đa dài.
Và đó là tốt.
>> Nhưng nếu không, sau đó bạn sẽ phải hãy chắc chắn để chỉ đọc trong 45
nhân vật tại một thời điểm.
Nếu không, bạn có thể ghi đè lên bộ đệm của bạn.
Thắc mắc về điều đó.
Yeah.
>> ĐỐI TƯỢNG: bạn có thể chỉ cần nói chuyện thêm một chút về những?
>> ANGELA LI: Xin lỗi.
Vâng.
>> ĐỐI TƯỢNG: Các mic là chỉ cho video.
Tôi sẽ cố gắng và dự án.
Hi, guys.
Sup?
Vì vậy, hãy đi qua một vài điều trong Thư viện CS50, mà bạn đã sử dụng
tất cả các học kỳ, chủ yếu là để có được người dùng nhập vào.
Như bạn biết, bạn bao gồm các CS50 thư viện bởi chỉ cần làm CS50.h, mà
chứa tất cả các nguyên mẫu của chức năng mà bạn có thể sử dụng, như
GetString và getInt, và GetFloat, vân vân.
Và có một dòng này trong CS50 thư viện định nghĩa một chuỗi,
các bạn đều biết bây giờ chỉ là một char *.
>> Nhưng chúng ta hãy một peek tại cách GetString hoạt động.
Đây là một phiên bản rất cô đọng.
Bạn có thể kéo các tập tin thư viện CS50 từ, tôi nghĩ rằng, manuals.CS50.net.
Và bạn có thể đọc thông qua chức năng thực tế.
Nhưng điều này bao gồm một số những phần quan trọng.
Vì vậy, chúng tôi đã tạo ra một số bộ đệm với một số năng lực.
Và những gì chúng tôi làm là chúng ta có được một nhân vật tại một thời điểm từ n tiêu chuẩn.
Đó là nơi mà các đầu vào người sử dụng văn bản trong giao diện điều khiển.
>> Và như vậy chúng ta sẽ đọc trong một nhân vật, miễn là nó không phải là một mới
dòng và nó không kết thúc của tập tin, là kết thúc của đầu vào tiêu chuẩn.
Và cho mỗi nhân vật mà chúng ta đọc trong, nếu nhân vật mà kết thúc lên thêm
với số ký tự chúng ta đã đọc và đó là nhiều hơn năng lực của chúng tôi,
sau đó những gì chúng tôi làm là chúng ta chỉ cần thay đổi kích thước của chúng tôi đệm để nó dài gấp đôi.
Vì vậy, một lần nữa, điều này bảo vệ chống lại đệm cuộc tấn công tràn, bởi vì bạn đọc
một nhân vật tại một thời điểm.
Và nếu bất cứ lúc nào bạn đọc trong quá nhiều, bạn chỉ cần mở rộng bộ đệm của bạn.
Bạn nhân nó bằng hai.
Và sau đó bạn có nhiều phòng.
>> Nếu không, bạn chỉ cần thêm một nhân vật để đệm.
Và sau khi bạn đã đọc trong tất cả các ký tự, nó sẽ thu nhỏ đệm
quay trở lại kích thước bình thường, thêm một kết thúc bởi null, và sau đó quay trở lại.
Bây giờ, chúng ta hãy nhìn vào getInt.
Các bạn có thể đọc này?
Tôi có thể phóng to một chút.
Tôi không biết làm thế nào máy tính làm việc.
Không sao đâu.
Tôi không thể phóng to đúng.
>> Điều này thực sự là khó.
Tôi xin lỗi.
Chúng ta hãy nhìn vào điều này.
Vì vậy, những gì getInt có phải là nó đầu tiên đọc trong một chuỗi từ GetString, mà
chúng tôi đã thực hiện trước đây.
Và một phần quan trọng cần lưu ý ở đây là nếu chia sẻ này mà nó kết thúc lên
đọc cũng giống như không thực sự là một chuỗi, sau đó chúng tôi chỉ trả lại INT_MAX để
đại diện cho thất bại.
Tại sao chúng ta lại thay vì INT_MAX của âm 1 hay 1?
Bất kỳ ý tưởng?
>> ĐỐI TƯỢNG: [nghe được] tiêu cực 1 trên một.
>> ANGELA LI: Vâng, chính xác.
Vì vậy bạn cách nhiều khả năng chỉ muốn nhập vào 1 hay tiêu cực 1 khi được nhắc
cho một thứ n và bất cứ điều gì đạt cực đại thứ n.
Nó là rất lớn.
Có lẽ bạn đang không sử dụng nó.
Vì vậy, điều này giống như một quyết định thiết kế để đảm bảo rằng bạn không vô tình
trả lại một lỗi hoặc bạn không trở lại 1, mà có thể được phân tích
như một câu trả lời chính xác.
Vì vậy, nếu một dòng không tồn tại, chúng ta trở lại INT-MAX.
Nếu không, chúng tôi sử dụng sscanf, mà là giống như scanf.
Nhưng nó đọc từ một chuỗi.
>> Và chúng tôi có định dạng này chuỗi, đó là% i% c.
Và chúng tôi cố gắng và kết hợp điều đó với bất cứ điều gì người sử dụng đã cho chúng tôi.
Chúng tôi muốn số lượng rất phù hợp với là 1, có nghĩa là chúng ta chỉ
thực sự muốn để phù hợp với một số nguyên bao quanh bởi có thể trắng
không gian, có thể không.
Trong trường hợp này, nếu bạn đặt trong một cái gì đó như thanh, thanh không phù hợp ở tất cả,
vì cần có một số nguyên vào đầu.
Vì vậy, không bao giờ quay sscan 0.
Vì vậy, bạn không trở lại đó.
>> Ngoài ra, nếu bạn đặt vào một cái gì đó như 1, 2, 3, A, B, C, phù hợp nhất
cả hai số nguyên mà còn các nhân vật sau khi nó.
Vì vậy, sscanf sẽ trở lại 2, cũng không phải là lý tưởng.
Bạn không muốn 1, 2, 3, A, B, C là một int hợp lệ.
Vì vậy, đó cũng không làm việc.
Nhưng nói rằng bạn đặt trong một cái gì đó giống như 50.
Điều đó sẽ phù hợp với% i, có nghĩa là nó sẽ được đọc vào n.
Và bây giờ, n sẽ chứa số 50.
Và sau đó bạn có thể trả lại.
>> Nếu không, bạn nhấn Thử lại.
Và sau đó nó chỉ đi qua một lần nữa cho đến khi bạn sẽ có được một đầu vào thích hợp từ người sử dụng.
Bất kỳ câu hỏi về điều đó?
>> ĐỐI TƯỢNG: Vì vậy, nếu bạn đã in ra giá trị của getInt trên [nghe được]
nó sẽ là chỉ số nguyên và tối đa?
>> ANGELA LI: Vâng.
Vì vậy, nếu bạn sử dụng getInt, bạn nên cho mà bạn không muốn tối đa thứ n đến
là một đầu vào có giá trị, bởi vì bạn sẽ cho rằng đó là xấu.
>> ĐỐI TƯỢNG: Nếu chúng tôi không có char c và ai đó đặt trong 1, 2, 3, Sam, phải không
vẫn còn làm việc cho 1, 2, 3?
>> ANGELA LI: Tôi nghĩ rằng nó sẽ làm việc.
Nhưng bạn không muốn để 123Sam là một đầu vào hợp lệ bởi một người dùng.
Đó không phải là thực sự là một int.
Vì vậy, nó không có vẻ không công bằng để phân tích nó như một int.
OK.
Trong trường hợp đó, chúng ta hãy di chuyển của trên internet.
Vì vậy, HTTP không phải là một ngôn ngữ.
HTTP chỉ là bộ tiêu chuẩn cho làm thế nào bạn gửi những điều từ khách hàng,
đó là bạn, đến các máy chủ.
Đó là những người khác trên web.
>> Vì vậy, HTTP là viết tắt của Hypertext Transfer Protocol.
Đó là trái tim và linh hồn của toàn bộ trang web.
Phần siêu văn bản chỉ đề cập đến HTML.
Việc chuyển giao là các khách hàng như bạn sẽ gửi yêu cầu tới
máy chủ, trong đó cung cấp câu trả lời.
Và giao thức chỉ là, làm thế nào bạn mong đợi một máy chủ để xử?
Và làm thế nào bạn có nghĩa vụ phải hành xử như vậy mà bạn có thể sắp xếp này
quá trình giao tiếp?
>> Vì vậy, các yêu cầu HTTP trông rất giống này.
GET là loại yêu cầu.
Các bạn đã thấy yêu cầu GET và yêu cầu POST.
Đó là điều thứ hai có, / tôi, đó là chỉ URI hoặc URL của nơi bạn
muốn đi trong máy chủ.
Vì vậy, yêu cầu này là yêu cầu cho các trang, giống như www.facebook.com / tôi.
Và đó là một yêu cầu GET.
Và sau đó HTTP/1.1 này, đó chỉ là các phiên bản của HTTP bạn đang sử dụng.
Nó hầu như luôn luôn 1.1.
>> Và sau đó có một loạt thứ khác quá.
Bạn thực sự có thể nhìn thấy những nếu bạn mở giao diện điều khiển của bạn khi bạn
duyệt web.
Phản ứng giống hơn như thế này.
Phần trên là, một lần nữa, loại HTTP bạn đang sử dụng
theo sau là một mã trạng thái.
Vì vậy, 200 OK là tất cả mọi thứ làm việc ra.
Dưới đây là nội dung của bạn.
Nội dung của bạn sẽ làm theo.
Và sau đó nó sẽ cho bạn biết những gì loại nội dung và các công cụ khác nữa.
>> Các mã trạng thái, có một vài những người quan trọng mà bạn nên biết.
200 OK giống như tất cả mọi thứ của vàng.
Tất cả mọi thứ hoạt động.
403 Forbidden.
Này bạn đã có thể nhìn thấy nếu bạn quên chmod cái gì đó đúng.
Nó có nghĩa là bạn không có đủ quyền hạn để
truy cập mà trên máy chủ.
Nó giống như, không có, bạn có thể không nhìn thấy nó.
404 có nghĩa là điều đó không tồn tại.
Không tìm thấy.
Bạn đã có thể thấy rằng rất nhiều.
>> 500 Internal Server Error thường như một cái gì đó đã đi sai trên mặt
của máy chủ.
Vì vậy, khi bạn đã thực hiện pset7, nếu bạn đã có lỗi PHP, bạn có thể
thực sự đi đến trang và thấy một bó toàn bộ các PHP lỗi công cụ.
Nhưng điều đó không thường xảy ra, bởi vì các trang web không thực sự muốn
nói cho bạn biết lý do tại sao trang web của họ bị phá vỡ.
Họ sẽ có thể chỉ trả lại một 500 Internal Server Error.
>> Và sau đó có 418 Tôi là một ấm trà.
Có một câu chuyện về tại sao đó là một điều.
Nhưng bạn có thể đọc về điều đó vào thời gian riêng của bạn.
Có một bó toàn bộ mã trạng thái khác quá.
Nhưng đó là những cái bạn nên biết.
Vì vậy, chúng ta hãy nói về HTML.
HTML, hãy nhớ, không phải là một ngôn ngữ lập trình.
Đó là một ngôn ngữ đánh dấu.
Có nghĩa là nó mô tả nội dung.
Nó sẽ cho bạn những gì một tài liệu HTML trông thích hoặc không phải những gì nó trông giống như
nhưng làm thế nào nó có cấu trúc.
>> Vì vậy, nó định nghĩa một cấu trúc và ngữ nghĩa của các trang web.
Nó giống như, đây là một đoạn văn.
Đây là một danh sách đặt hàng.
Điều này giống như một phần của trang web của tôi.
Đây là tiêu đề.
Nó công cụ như thế.
Nó không phong cách nào đó, bởi vì đó là những gì bạn làm trong CSS.
Và có vẻ như một loạt thẻ lồng nhau.
Vì vậy, để sử dụng một ví dụ về một thực sự cơ bản Trang HTML, bạn có DOCTYPE
khai trên đó.
>> Khai báo DOCTYPE này là nói, chúng tôi đang sử dụng HTML5.
Sau đó, bạn có thẻ HTML lớn.
Nó chứa một cái đầu và một cơ thể.
Bên trong đầu, bạn có tiêu đề.
Đó là những gì diễn ra trong tiêu đề thanh của trình duyệt.
Chúng tôi có một thẻ liên kết liên kết trong một sheet bên ngoài.
Và sau đó chúng tôi có một kịch bản mà kéo từ một JavaScript bên ngoài là tốt.
>> Và sau đó bên trong cơ thể của chúng tôi là thực sự những gì được hiển thị trên trang.
Chúng tôi đã có một đoạn văn và sau đó một hình ảnh bên trong đoạn đó.
Điều này là một hình ảnh của mèo con.
Nhận thấy rằng các hình ảnh tag đóng cửa của chính nó.
Vì vậy, thay vì mở với một hình ảnh và sau đó làm một / hình ảnh, bạn
chỉ có dấu gạch chéo này ít ở đây, mà đóng nó.
Và các thẻ hình ảnh cũng có phím này thuộc tính giá trị gọi là alt.
Đó là văn bản thay thế xảy ra khi bạn di chuột qua nó.
>> Hầu hết các phần tử HTML có một số giá trị quan trọng những điều mà bạn có thể cung cấp cho nó, khác nhau
tuỳ biến.
Yeah.
>> ĐỐI TƯỢNG: [nghe được].
>> ANGELA LI: Vâng, vì vậy nó là một thuộc tính của thẻ.
Vì vậy, nếu bạn đang sử dụng jQuery, bạn có thể làm image.getAttribute chọn.
Và sau đó bạn có thể tìm kiếm có được thuộc tính alt.
Và nó sẽ cung cấp cho bạn mèo con.
Nếu bạn nhớ các hình thức trong HTML, đầu vào yếu tố này sẽ có các thuộc tính tên.
Và đó là những gì PHP sử dụng để gửi các yêu cầu khi một mẫu được gửi.
>> ĐỐI TƯỢNG: Bạn đã đề cập đến một cái gì đó về làm thế nào nếu bạn sử dụng hoặc kittens.jpg
cái gì mà có người mất tích nộp thư mục hoặc tập tin khác?
>> ANGELA LI: Có.
Vì vậy, đây là những gì được gọi là một người thân con đường, bởi vì tôi không cho
bạn đường dẫn đầy đủ.
Điều này giống như khi trong C nếu bạn làm fopen một số tập tin, nếu bạn hi.txt fopen, mà
hi.txt dự kiến ​​sẽ được trong cùng một thư mục, trừ khi bạn cung cấp cho nó một nhiều hơn
con đường phức tạp.
>> ĐỐI TƯỢNG: Vì vậy, bạn có thể chỉ định mà thư mục [nghe được]?
>> ANGELA LI: Vâng.
Và bạn có thể tìm cách để làm điều đó.
Nhưng nếu tôi muốn có được kittens.jpg ra của thư mục cha, tôi sẽ làm
.. / Kittens.jpg.
Yeah.
Xin lôi.
Yeah.
Ôi trời, tôi quên câu hỏi.
Câu hỏi là gì?
Oh, câu hỏi là là, kittens.jpg dự kiến ​​sẽ được trong cùng một thư mục?
Và trong trường hợp này, nó được.
Nhưng bạn cũng có thể cung cấp cho nó một con đường nhất định như vậy mà nó không có được.
Tốt?
>> CSS.
Vì vậy, CSS, như HTML, không phải là một ngôn ngữ lập trình.
CSS chỉ là một loạt các quy tắc phong cách.
Nó là viết tắt của Cascading Style Sheets.
Và bạn sử dụng nó kết hợp với HTML để trang phong cách.
Vì vậy, có ba cách bạn có thể bao gồm nó.
Một cách để bạn có thể làm điều đó là vào đầu phần HTML của bạn, bạn có thể chỉ
mở một thẻ phong cách và sau đó dính một số CSS quy tắc trong đó.
Nó khá OK.
Yeah.
>> ĐỐI TƯỢNG: bạn có thể đặt những thẻ phong cách ở giữa, chúng ta hãy
nói, cơ thể và / cơ thể.
Và sau đó bạn sẽ có phong cách chỉ trong cơ thể.
>> ANGELA LI: Bạn có thể.
Nó sẽ làm việc.
Nhưng bạn không nên, bởi vì phong cách là loại siêu dữ liệu mà cần đi
người đứng đầu của tài liệu của bạn.
Cơ thể nên thực sự chỉ chứa những gì đang thực sự đi vào
hiển thị trên trang của bạn.
>> ĐỐI TƯỢNG: Vì vậy, bạn muốn đặt phong cách trong đầu của bạn để tạo kiểu cho
toàn bộ trang web, phải không?
>> ANGELA LI: Vâng.
Vì vậy, việc đưa phong cách ở đây, các quy tắc CSS sẽ áp dụng cho toàn bộ trang dựa trên
bộ chọn của họ.
Vì vậy, cách tốt hơn để làm điều đó là thay vì của việc có một từ khóa phong cách trong đầu của bạn,
bạn có liên kết này để một phong cách bên ngoài tờ như tôi đã giới thiệu trong các
ví dụ trước.
Điều này không là nó sẽ cố gắng và tìm thấy nộp style.css và sau đó kéo nó
và sử dụng đó như là phong cách cho trang.
Và style.css của bạn sẽ chỉ cần nhìn như thế này.
Nó sẽ chỉ được một loạt các CSS.
>> Và cuối cùng, có một cách khác bạn có thể bao gồm CSS, mà bạn thực sự
không bao giờ nên làm.
Đó là phong cách nội tuyến cuộc gọi.
Và vì vậy bất kỳ phần tử HTML cũng có thể có một thuộc tính phong cách.
Và sau đó trong đó thuộc tính phong cách, bạn có thể cung cấp cho nó những nguyên tắc CSS.
Vì vậy, trong trường hợp này, bất cứ điều gì div tôi xác định ngay tại đây, nó sẽ
có một nền đen và một màu sắc văn bản màu trắng.
Nhưng bạn không nên làm điều này, bởi vì những gì điều này là nó đặt phong cách của bạn
trong HTML của bạn.
>> Và tôi biết chúng tôi đã nói về HTML là cấu trúc và CSS là phong cách.
Nếu bạn làm điều này, nó hỗn hợp chúng lại với nhau.
Và nó không phải rất sạch sẽ.
Vì vậy, không làm điều đó.
Sử dụng một ví dụ về CSS, ở đó, chúng tôi chỉ cần chọn cơ thể của HTML
phim tài liệu.
Và chúng tôi như thế, tất cả mọi thứ của sẽ Comic Sans.
Tôi cũng không khuyên.
Nhưng bạn có thể làm điều đó.
>> Nguyên tắc thứ hai ở đây, nó sẽ để lựa chọn các yếu tố trên
trang với ID chính.
Vì vậy, bất cứ điều gì HTML yếu tố, tôi đã nói ID = Chính, tôi sẽ cho rằng một
Tỷ suất lợi nhuận 20-pixel và sắp xếp tất cả mọi thứ, tất cả các văn bản, đến trung tâm.
Điều cuối cùng lựa chọn bởi lớp CSS.
Vì vậy, bất kỳ yếu tố trên trang mà tôi đã một lớp học phần, tôi sẽ làm cho nó
một màu nền ánh sáng màu xanh.
Vâng.
Đó là tất cả tôi có.
Câu hỏi?
>> ĐỐI TƯỢNG: Gì hashtag trước khi chính làm gì?
>> ANGELA LI: Câu hỏi đặt ra là, những gì hiện hashtag trước khi làm chính?
Trong trường hợp này, băm trong CSS có nghĩa là chọn bởi ID.
Vì vậy, nếu tôi đã có một số phần tử HTML, như divid = chính, CSS này selects quy tắc
điều với ID chính.
Và tương tự, thời gian ở phía trước phần là chọn bởi lớp CSS hay
chọn bởi lớp HTML.
>> ĐỐI TƯỢNG: Tại sao lại có có trước 6 trong màu nền?
>> ANGELA LI: Vâng.
Vì vậy, câu hỏi là, tại sao lại có băm trước 6?
Điều này khác với băm.
Điều này có nghĩa rằng bạn đang đưa ra một màu thập lục phân.
Màu sắc để hex, điều này chỉ đại diện cho một màu sắc.
Và bạn nhớ RGB gấp ba khi bạn đã làm pháp y pset?
Điều này tương tự.
Hai chữ số đầu tiên đại diện cho bao nhiêu màu đỏ là ở màu sắc.
Thứ hai đại diện cho hai bao nhiêu màu xanh lá cây.
Và thứ ba đại diện cho bao nhiêu màu xanh.
Và băm là điều này sẽ đại diện cho một màu sắc.
>> Vì vậy, bất cứ điều gì từ 0, 0, 0, 0, 0, 0 lên đến F, F, F, F, F, F là hợp lệ.
Đó là một số màu sắc hợp lệ mà có thể được hiển thị bởi trình duyệt của bạn.
Câu hỏi?
>> ĐỐI TƯỢNG: Sự khác nhau giữa là gì sử dụng bằng ID và lớp học?
>> ANGELA LI: Câu hỏi là gì sự khác biệt giữa
sử dụng bằng ID và lớp học?
Bạn chỉ có thể có một phần tử trong một Tài liệu HTML mà có một ID nhất định.
Vì vậy, chỉ có một điều trên trang của tôi được phép có ID chính.
Vì vậy, bạn sử dụng nó cho việc này là tiêu đề.
Đây là định hướng.
Đây là chân.
Các lớp học khác nhau, bởi vì bạn có thể áp dụng các lớp học là nhiều yếu tố HTML
như bạn muốn.
>> Vì vậy, ví dụ, tôi đã làm phần lớp, bởi vì có thể nhiều hơn một
phần trên trang của mình.
Bạn chỉ được phép có nhiều yếu tố trên trang với cùng
lớp nhưng chỉ có một với một ID nhất định.
>> ĐỐI TƯỢNG: Vì vậy, các dấu chấm đại diện cho các lớp học?
>> ANGELA LI: Vâng.
Một dấu chấm đại diện cho một lớp học.
Mát mẻ.
Đó là tất cả tôi đã có, các cậu.
Cảm ơn bạn.
>> [Vỗ tay]
>> ZAMYLA CHAN: Hi, tất cả mọi người.
Tôi Zamyla.
Tôi sẽ được bao gồm PHP, MVC, và SQL hôm nay.
Rất nhiều các tài liệu mà tôi sẽ phủ là có được khá nhiều
phải ra khỏi pset7.
Được rồi.
Vì vậy, PHP là gì?
PHP là viết tắt của PHP Hypertext Tiền xử lý.
Vì vậy, nó, tự nó, là một đệ quy tên, mà là khá mát mẻ.
PHP là một ngôn ngữ kịch bản phía máy chủ, và nó cung cấp phụ trợ
và nền tảng hợp lý của trang web của chúng tôi.
>> Vì vậy, Angela đã nói rất nhiều về HTML và CSS mà sẽ làm cho cấu trúc
của trang web.
Nhưng nếu bạn muốn thay đổi điều đó nội dung tự động hoặc nếu nó thay đổi
dựa vào người sử dụng hoặc một số điều kiện?
Đó là nơi mà PHP có in
Bây giờ, thông thường, PHP có thể mất một vài đường ít hơn để thực hiện điều tương tự
C. Đó là bởi vì PHP xử lý bộ nhớ quản lý cho các lập trình viên,
như trái ngược với chúng ta phải malloc miễn phí, những thứ như thế.
>> Nhưng vì PHP là một nghệ thuật trình diễn ngôn ngữ, thông thường, nó có thể thực hiện
chậm hơn một chút so với C, là một ngôn ngữ biên soạn.
Bởi vì chúng tôi đang di chuyển lập trình ngôn ngữ, chúng ta hãy xem làm thế nào các
cú pháp sẽ khác nhau.
Hãy rất cẩn thận không để bị lẫn lộn với điều này.
Vì vậy, với cú pháp PHP, cho dù bạn là nhúng PHP của bạn bên trong một HTML
file hoặc trong một tập tin php. chính nó, bạn cần phải kèm theo mã trong mở
PHP và các thẻ PHP đóng như sau, giống như trên màn hình.
>> Biến trong PHP.
Mỗi biến duy nhất sẽ bắt đầu với ký hiệu $ theo sau là tên của
biến của bạn.
Bây giờ, các biến trong PHP được lỏng lẻo, có nghĩa là bạn không cần
để chỉ ra những kiểu dữ liệu là khi bạn khai báo nó.
Tuy nhiên, điều này không có nghĩa là họ không có bất kỳ loại ở tất cả.
Vì vậy, nếu tôi khai báo một biến và chỉ cần đặt nó bằng 1, và sau đó tôi tuyên bố
biến khác, thiết lập nó bằng "1" và sau đó một số khác 1.0, tốt,
tùy thuộc vào loại bình đẳng khai thác sử dụng tôi, nếu tôi muốn so sánh
trên tất cả các loại, sau đó họ sẽ được bình đẳng.
Nhưng nếu tôi muốn đảm bảo rằng các loại bằng nhau, PHP vẫn có thể làm
rằng, mặc dù chúng tôi không chỉ loại đó là khi chúng tôi
đầu tiên làm cho các tập tin.
>> Bây giờ, trong PHP, mặc dù chúng tôi chuyển qua từ lập trình
ngôn ngữ từ C, chúng ta vẫn phải của chúng tôi đáng tin cậy nếu điều kiện, chỉ cần như thế này.
Chúng ta vẫn còn vòng trong khi của chúng tôi, chỉ cần như thế này, nơi mà bạn đặt trong của bạn
điều kiện và sau đó cơ thể của vòng lặp.
Và sau đó chúng tôi cũng có của chúng tôi cho vòng lặp, mà thường trông như thế này.
Vì vậy, nếu tôi muốn lặp qua tất cả chín psets trình và gọi một
chức năng submitPset, sau đó tôi có thể làm điều đó ở đây, mà các bạn đã tất cả
thực hiện bởi thời điểm này.
Xin chúc mừng, bằng cách này.
>> Cho máy ảnh, người cho biết, cảm ơn bạn.
Bây giờ, nếu bạn không muốn chỉ cần sử dụng này cho vòng lặp, sau đó PHP thực sự cũng
đã điều được gọi là vòng lặp foreach.
Vì vậy, nếu tôi đã có một mảng các số nguyên, 0 thông qua 8, lưu trữ trong psets mảng,
sau đó tôi có thể có một vòng lặp foreach lặp trên tất cả các số trong psets.
Và sau đó tôi có thể gọi cùng hoạt động tám lần,
giống như tôi đã làm trước đây.
Vì vậy, điều này cho mỗi vòng lặp là tốt đẹp, bởi vì bạn không phải nếu bạn không biết
chiều dài chính xác của mảng mà bạn đã, sau đó sử dụng vòng lặp foreach này
sẽ chăm sóc cho bạn.
>> Vì vậy, tôi đã psets như là một mảng.
Chúng ta hãy nhìn vào đó.
Mảng trong PHP thường giống như những người mà chúng tôi đã có trong C, nơi
bạn có thể khai báo một mảng.
Và ở đây, tôi có thể khai báo một mảng trống và sau đó xây dựng tự động bằng cách sử dụng
chỉ số là số nguyên.
Vì vậy, chỉ số 0, tôi sẽ lưu trữ một số nguyên tên 1.
Tại chỉ số 1 trong danh sách của tôi, tôi sẽ để lưu trữ các giá trị 2.
Và chỉ số thứ ba nhưng số thứ hai, tôi sẽ
lưu trữ các số 12.
>> Bây giờ, điều này là tốt trong đó hoạt động nó hoạt động tốt.
Nhưng nói rằng nó quan trọng đối với tôi những gì mỗi chỉ số nắm giữ.
Đối với tôi, chỉ số 0 có nghĩa là như thế nào nhiều mèo tôi có.
Và chỉ số 1 có nghĩa là như thế nào nhiều cú tôi có.
Và kế tiếp là bao nhiêu con chó.
Vâng, sau đó nó để xác định rằng, thay vì phải nhớ 0 liên quan đến
mèo và 1 con cú, tôi có thể sử dụng mảng kết hợp, có nghĩa là
thay vì các số nguyên như chỉ số của tôi, Tôi thực sự có thể sử dụng dây.
>> Vì vậy, đây là khá hữu ích.
Và bạn đã cơ bản chỉ thay thế các số nguyên với chuỗi.
Và bạn đã có một mảng kết hợp.
Yeah.
>> ĐỐI TƯỢNG: Có một lý do tại sao có một gạch dưới cho phần thứ hai
một phần, bởi vì danh sách của tôi có mảng.
>> ZAMYLA CHAN: Câu hỏi là, là Có một lý do tại sao có một
nhấn mạnh giữa và danh sách của tôi?
Không.
Đó chỉ là cách tôi đặt tên biến của tôi.
>> ĐỐI TƯỢNG: Ngày đầu tiên dòng, đó là một từ.
>> ZAMYLA CHAN: lời xin lỗi của tôi.
Tôi sẽ khắc phục điều đó.
Yeah.
Họ sẽ có tên biến giống nhau.
Tốt bắt.
OK.
Vì vậy, chúng ta hãy chuyển sang chuỗi nối.
Nếu tôi muốn có hai dây, sau đó tôi có thể ghép chúng
với dấu chấm.
Vì vậy, nếu tôi có Milo như một tên đầu tiên và chuối như một tên cuối cùng, sau đó
ghép với các dấu chấm và sau đó đặt một không gian ở giữa
sẽ làm cho một chuỗi có chứa Milo Chuối, mà tôi sau đó có thể echo hay,
đúng hơn, in ra.
>> Nói về tiếng vang, chúng ta hãy nói về một vài hữu ích -
oops.
Tôi xin lỗi.
Một vài chức năng hữu ích PHP.
Vì vậy, chúng ta có -
khó khăn kỹ thuật.
Thứ hai.
Tôi đã gửi nó.
Vấn đề PowerPoint.
Và chúng tôi đang trở lại với chức năng PHP.
>> Vì vậy, chúng tôi đã yêu cầu chức năng, nơi nếu bạn vượt qua trong một tập tin, đây là chỉ là
một ví dụ của một tập tin Tôi có thể vượt qua in
Sau đó sẽ bao gồm mã PHP từ tập tin đó mà tôi biết.
Và nó sẽ đánh giá rằng in
Sau đó, chúng tôi cũng có tiếng vang, mà là một song song với printf.
Lối ra là một song song để phá vỡ, mà thoát ra khỏi khối
mã mà bạn đang nhập
Và sau đó kiểm tra xem một sản phẩm nào được biến giống như vô giá trị hoặc không có hoặc
bất cứ điều gì đánh đồng với sự trống rỗng.
Yeah.
>> ĐỐI TƯỢNG: Đối với các dây nối dấu chấm một, trong PHP, đó là
tương tự như trong JavaScript mà nó sử dụng dấu chấm cho nối có nghĩa là cộng?
Vì vậy, tên đầy đủ, bạn có thể có đô la đăng ký đầu tiên và sau đó + + cuối cùng?
>> ZAMYLA CHAN: Vâng.
Vì vậy câu hỏi là liệu trong PHP, chúng tôi có thể sử dụng cùng một chuỗi nối
như trong JavaScript với Điểm cộng.
Và Joseph sẽ nhận được vào mà sau này.
Tôi nghĩ anh ấy có một slide trên đó.
Trên thực tế, đó là khác nhau.
Vì vậy, trong JavaScript, bạn cần phải sử dụng cộng để nối dây.
Và trong PHP, bạn phải sử dụng các dấu chấm.
Vì vậy, chúng khác nhau.
>> OK.
Vì vậy, bây giờ mà chúng tôi đã bao phủ tất cả PHP này, nơi nào nó
thực sự có ích?
Vâng, nó có ích khi chúng ta có thể kết hợp nó với HTML.
Vì vậy, PHP của chúng tôi sẽ cung cấp cho chúng ta sức mạnh để thay đổi nội dung HTML của trang trước
tải của nó.
Vì vậy, dựa vào các điều kiện khác nhau, thường người sử dụng cụ thể đó là
đăng nhập, chúng tôi có thể hiển thị thông tin khác nhau.
Linda, anh có một câu hỏi?
>> ĐỐI TƯỢNG: Bạn có thể ghép một số nguyên cũng?
>> ZAMYLA CHAN: Có, bạn có thể.
Vì vậy câu hỏi là nếu bạn có thể ghép các số nguyên hoặc khác
variable.s bây giờ, chúng ta chuyển sang MVC, mà là một mô hình mà chúng tôi sử dụng trong
pset7 và rất nhiều nhà thiết kế web sử dụng cho tổ chức các mã trong các tập tin
trong trang web của họ.
M là viết tắt của Model.
Và về cơ bản, mô hình tập tin sẽ đối phó với các tương tác với cơ sở dữ liệu.
Xem các tập tin, chúng liên quan đến các tính thẩm mỹ của trang web.
Và xử lý điều khiển yêu cầu người sử dụng, phân tích
dữ liệu, không logic khác.
>> Trong pset7, chúng tôi kết hợp các mô hình và bộ điều khiển.
Và chúng tôi chỉ gọi chúng là các bộ điều khiển và đặt chúng trong thư mục công cộng.
Và các tập tin xem, chúng tôi sử dụng chúng như mẫu trong thư mục mẫu.
Vì vậy, sơ đồ này ở đây cũng đại diện cùng loại phân chia với
mô hình và bộ điều khiển màu tím đây bên trái và
nhìn bên phải.
Vì vậy, đây là một sơ đồ mà một số bạn có thể đã thấy tại Thời gian làm việc hoặc
sơ đồ mà chúng ta đã được vẽ như bạn đã tìm ra pset của bạn.
>> Vì vậy, ở đây, trong một bộ điều khiển được, một mô hình điều khiển, chúng tôi có chức năng
có liên quan đến truy vấn SQL cơ sở dữ liệu, thực hiện PHP logic.
Có thể bạn sẽ tìm kiếm một cổ phiếu trong Yahoo!
Tài chính.
Hoặc có lẽ, bạn sẽ chỉ cần kiểm tra để xem liệu người dùng đã đệ trình một
tạo đã trước khi có đến thăm trang của bạn.
Và sau đó bạn sẽ làm cho một hình thành trên đây.
Sau khi hình thức đã được gửi bởi người sử dụng, những hành động đó là
quy định trong thẻ HTML của form sẽ chỉ ra trang mà nó
trả về dữ liệu đó để.
>> Vì vậy, tất cả các thông tin đó sẽ là gửi trở lại điều khiển của bạn.
Sau đó, bạn có lẽ sẽ làm nhiều hơn một chút logic trên đó và có thể thực hiện một vài
truy vấn nhiều hơn trong cơ sở dữ liệu SQL và sau đó, cuối cùng, đến với một độc đáo
bộ đóng gói thông tin mà bạn sẽ vượt qua trong vào một số mẫu khác
mà hiển thị thông tin đó.
Bây giờ, làm thế nào để chúng tôi thực sự trọn gói thông tin đó lên?
Vâng, chúng ta có một chức năng gọi là Render đó là trong tập tin functions.php trong
pset7, nơi bạn vượt qua trong tên của một tập tin, tên của một bản mẫu.
>> Và sau đó bạn cũng vượt qua trong một mảng kết hợp.
Và để đại diện cho mảng kết hợp các thông tin khác nhau
mà bạn muốn vượt qua in
Bây giờ, điều gì sẽ là không đổi trong các ví dụ này là các phím hoặc,
đúng hơn, các phím của liên kết mảng, đó là những gì đang xảy ra là
dự kiến ​​sẽ được liên tục của các mẫu, bởi vì nó biết nó cần
một cái gì đó gọi là tin nhắn hoặc gọi tên.
Và sau đó những điều trên bên phải, giá trị thực tế, vì vậy trong trường hợp này, những người
một cậu bé tốt và Milo, những người sẽ là các giá trị được thay đổi
bộ điều khiển thay đổi mỗi khi hoặc dựa trên một điều kiện nhất định và
sẽ vượt qua mà in
>> Vì vậy, ở đây trong các mẫu, chúng tôi thấy rằng chúng tôi đang sử dụng HTML ký tự đặc biệt,
mà chỉ cần về cơ bản có nghĩa là chúng ta muốn để có được chuỗi ngang hàng mà các
người sử dụng đặt in
Và chúng tôi muốn thay thế tin trong đó.
Vì vậy, sau đó khi chúng tôi thực sự xem các tập tin, cụ thể
thông tin là thông qua nhập
Lưu ý quan trọng như thế nào làm cho công trình là rằng các phím của liên kết
mảng, những biến trở thành tên ở đây.
Và do đó, giá trị của khóa đó trong mảng kết hợp sau đó trở thành
giá trị của biến.
>> Bây giờ, chúng ta hãy chuyển sang SQL.
Nó tượng trưng cho cấu trúc Ngôn ngữ truy vấn.
Và do đó, đây chỉ là một lập trình ngôn ngữ thiết kế
quản lý cơ sở dữ liệu.
Và nó đã có ích cho chúng ta trong trang web tài chính pset7 của chúng tôi.
Về cơ bản, nó chỉ là một cách dễ dàng để theo dõi và quản lý đối tượng và bảng
và liên kết chúng với nhau.
Bây giờ, nghĩ về cơ sở dữ liệu SQL của bạn về cơ bản là một tập tin Excel, có lẽ,
với nhiều sheet tab.
>> Vì vậy, bạn có thể có nhiều bảng, có lẽ, đó là liên kết với nhau.
Và giống như Excel, chúng tôi có rất nhiều những chức năng mà chúng ta muốn.
Ví dụ, chúng ta có thể chọn một số hàng.
Chúng ta có thể chèn thông tin.
Chúng tôi có thể cập nhật hàng.
Và chúng tôi cũng có thể xóa mọi thứ.
>> SQL chọn công trình bằng cách chọn hàng hoặc một hàng cột được chỉ định từ một
cơ sở dữ liệu phù hợp với một số tiêu chí mà bạn chỉ ra.
Vì vậy, ở đây khi tôi nhìn thấy chọn * từ trình thuật sĩ nơi nhà = Ravenclaw, sau đó
Tôi chọn *, có nghĩa là tôi lựa chọn tất cả các cột duy nhất trong đó
hàng từ bảng phù thủy nhưng chỉ khi cột nhà bằng Ravenclaw.
Bây giờ, đây là tinh khiết hoặc SQL.
Vì vậy, nếu tôi đi vào phpMyAdmin, đó là cách cụ thể mà chúng tôi sử dụng để quản lý
cơ sở dữ liệu SQL của chúng tôi, sau đó tôi có thể chèn đó vào trang web của phpMyAdmin.
Và đó sẽ thực hiện.
>> Nhưng chúng tôi thực sự muốn làm mà ở bên PHP.
Vì vậy, làm thế nào để chúng tôi làm điều đó?
Vâng, chúng tôi sử dụng chức năng truy vấn, mà về cơ bản thực hiện truy vấn SQL.
Sử dụng không?
như một giữ chỗ, chúng ta có thể vượt qua trong một số giá trị chuỗi của chúng tôi mà chúng tôi
muốn thay thế.
Vì vậy, có lẽ tôi là lưu trữ khác nhau giá trị trong curr_house, mà
đại diện cho các nhà hiện tại mà tôi đang trải qua.
Vì vậy, tôi có thể vượt qua trong như một giữ chỗ với dấu chấm hỏi.
Và sau đó tôi sẽ về cơ bản thực hiện cùng một điều như tôi đã làm trước đây, ngoại trừ
bây giờ, tôi đang ở trong PHP.
>> Và truy vấn sẽ trả lại một mảng kết hợp.
Và tôi sẽ lưu nó trong hàng.
Bây giờ, truy vấn luôn luôn có thể thất bại.
Có lẽ các truy vấn SQL không thể thực hiện vì bảng không tồn tại.
Hoặc có lẽ, cột không tồn tại.
Một cái gì đó đã đi sai.
Vâng, trong trường hợp đó, bạn sẽ muốn làm chắc chắn rằng bạn kiểm tra xem
truy vấn trả về sai.
Và đó là bằng cách sử dụng các ba bằng hoạt động ở đó.
>> Và sau đó tôi xin lỗi, mà là một Chức năng CS50, đi qua trong một tin nhắn.
Và nếu bạn nhìn vào xin lỗi, tất cả nó thực sự là làm cho apology.php.
Yeah.
>> ĐỐI TƯỢNG: Ông có thể giải thích điều đó Ngôi sao nào giữa lựa chọn và từ đâu?
>> ZAMYLA CHAN: Yeah, hoàn toàn.
Vì vậy, các ngôi sao ở giữa và chọn từ có nghĩa là tôi muốn chọn toàn bộ
toàn bộ dòng từ bảng của tôi.
Tôi có thể đã chỉ ra chọn tên, năm, ngôi nhà.
Và tôi sẽ chỉ nhận được những ba cột trong bảng của tôi.
Nhưng nếu tôi nói chọn *, sau đó tôi sẽ được tất cả mọi thứ trong cột đó.
Sau đó, tôi sẽ đi bạn ở phía sau đầu.
>> ĐỐI TƯỢNG: Vì vậy, điều này vẫn còn trong SQL, phải không?
Là truy vấn này hoặc là PHP này?
>> ZAMYLA CHAN: Chúng tôi đang ở trong một truy vấn.
Vì vậy, đây là trong PHP.
Vì vậy, bằng cách sử dụng chức năng truy vấn PHP, chúng tôi đang thực hiện một truy vấn SQL.
>> ĐỐI TƯỢNG: là bất cứ điều gì trong SQL trường hợp nhạy cảm, như chọn
hay pháp sư hay nhà?
>> ZAMYLA CHAN: là bất cứ điều gì trong SQL trường hợp nhạy cảm?
Tôi tin như vậy, có.
Tôi tin rằng SELECT và FROM và đâu là trường hợp nhạy cảm.
Không?
>> ROB Bowden: Vì vậy, nó là ngược lại.
Các tên cột và các phương tiện bảng, tất cả những là trường hợp nhạy cảm.
Nhưng bất kỳ từ khóa MySQL, như CHỌN, từ, và ở đâu, những người không phải
trường hợp nhạy cảm.
OK.
Vì vậy, trái ngược với những gì tôi nói.
Vì vậy, tất cả các từ khóa MySQL -
lựa chọn, từ đâu - những không phải là trường hợp nhạy cảm.
Nhưng tất cả mọi thứ khác được.
OK.
Bạn ở phía trước.
>> ĐỐI TƯỢNG: Nếu tôi có $ hàng về nhiều hơn một dòng, không có nghĩa là
chỉ trở thành một mảng kết hợp?
>> ZAMYLA CHAN: Vậy câu hỏi là nếu hàng có nhiều hơn một dòng trong đó, không
nó trở thành một mảng kết hợp?
Vì vậy, nó là một mảng kết hợp mảng rồi.
Vì vậy, ngay cả khi chỉ có một hàng trở lại, sau đó bạn sẽ phải đi đến
chỉ số 0 kết quả đó.
Và sau đó bạn phải có hàng đầu tiên.
Có, Belinda?
>> ĐỐI TƯỢNG: Khi bạn sử dụng ===, đây là trường hợp duy nhất?
Hoặc là có những người khác?
>> ZAMYLA CHAN: Vì vậy, trong trường hợp này, === là một so sánh trên các loại.
Xin lôi. === Là một so sánh so sánh các loại.
Và sau đó == so sánh trên tất cả các loại.
>> ĐỐI TƯỢNG: Bạn có thể giải thích những gì hàng là trong tình huống này?
Có hàng dữ liệu?
>> ZAMYLA CHAN: Trong slide tiếp theo, tôi sẽ giải thích là những gì hàng.
Vì vậy, nếu bạn không nhớ giữ tắt về điều đó.
Và sau đó bạn ở phía sau?
>> ĐỐI TƯỢNG: Đối với các chức năng như truy vấn, vẽ lại và xin lỗi [không nghe được]?
>> ZAMYLA CHAN: Câu hỏi là liệu các chức năng - truy vấn, xin lỗi,
và đưa ra -
là phổ biến trên PHP.
Đây là những người mà CS50 viết cho pset7.
Và Jay?
>> ĐỐI TƯỢNG: Khi bạn cần phải nói $ _SESSION, Là chỉ cho ID?
Hoặc có thể bạn đã nói rằng ở đây?
>> ZAMYLA CHAN: Vì vậy, câu hỏi là, khi chúng tôi sử dụng $ _SESSION, đó là một cụ thể
biến toàn cầu mà chúng ta đang sử dụng.
Đây biến này sẽ được địa phương với chức năng của chúng tôi.
Vì vậy, chúng tôi chỉ cần khai báo một biến mới.
>> ĐỐI TƯỢNG: Làm thế nào là xin lỗi thực hiện?
>> ZAMYLA CHAN: Câu hỏi là, làm thế nào là xin lỗi thực hiện?
Và tôi nghĩ rằng đây thực sự là một khá thực hành tốt cho các bạn đi vào
phần functions.php và nhìn vào xin lỗi và xem làm thế nào bạn có thể có
thực hiện nó cho mình.
Vì vậy, tôi có thể để lại đó cho bạn, nhưng chỉ nói rằng nếu bạn nhìn vào xin lỗi,
sau đó phải mất thông điệp mà bạn nộp để xin lỗi, và sau đó nó
làm cho thông điệp đó.
Bất kỳ câu hỏi nhiều hơn?
Tôi yêu câu hỏi.
Vì vậy, giữ chúng tới.
>> ĐỐI TƯỢNG: [nghe được]
vang hoặc in đó?
>> ZAMYLA CHAN: Câu hỏi là, có thể chúng ta không chỉ đã đưa
vang hoặc in đó.
Vì vậy, đã có thể làm một cái gì đó hơi khác nhau.
Mà có thể đã in truy vấn không vào đó -
tốt, ngay bây giờ, chúng tôi thực sự trong bộ điều khiển của chúng tôi.
Vì vậy, chúng tôi không thực sự có HTML thiết lập ở đây.
Xin lỗi bằng cách làm cho apologize.php thực sự chuyển hướng bạn đến apology.php.
OK.
>> Vì vậy, bây giờ, chúng ta hãy đi vào giải quyết các câu hỏi từ trước đó về những gì
thực sự là hàng.
Vâng, truy vấn sẽ trở lại một loạt các hàng.
Và mỗi hàng được đại diện bởi một mảng kết hợp.
Vì vậy, nếu tôi đã thực hiện một số truy vấn SQL và Tôi đã được lưu trữ kết quả trong hàng, sau đó
sử dụng một vòng lặp foreach, sau đó các mảng tên là người đầu tiên có - hàng.
Và sau đó tôi sẽ gọi mỗi dòng trong đó $ row.
>> Vì vậy, lặp lại những điều đó, tôi có thể sau đó truy cập tên cột hàng nhất định của,
năm cột, và cột nhà.
Lưu ý rằng tôi sẽ không có được thể làm điều này với các hàng, bởi vì chỉ số hàng
tên không tồn tại.
Hàng chỉ là một mảng của mảng kết hợp.
Vì vậy, bạn có hai cấp độ đó.
Một khi bạn có các mảng của các hàng, bạn phải nhận được vào đó.
Và sau đó bạn có thể truy cập các cột.
Đã làm cho nó rõ ràng?
Yeah, ở phía trước?
>> ĐỐI TƯỢNG: [nghe được] mở khung cho [không nghe được]?
>> ZAMYLA CHAN: Xin lỗi?
>> ĐỐI TƯỢNG: Các dấu ngoặc mở.
>> ZAMYLA CHAN: Các đây?
Đó là cho phép tôi để bao gồm rằng biến.
Yeah.
>> ĐỐI TƯỢNG: Khi bạn in, bạn có in các mã HTML?
>> ZAMYLA CHAN: Có.
Khi tôi in, ở đây là bên trong mẫu của tôi bây giờ, vì vậy
điểm của tôi về phương pháp MVC.
Vì vậy, tôi in vào HTML.
>> ĐỐI TƯỢNG: Vì vậy, nếu chúng tôi đã đi vào phát triển công cụ sau khi chạy này, chúng ta có thể
mà thực sự trong mã?
>> ZAMYLA CHAN: Đó là một tuyệt vời câu hỏi, yeah.
Vì vậy, nếu bạn đã đi vào các công cụ phát triển trong Firefox sử dụng Firebug hoặc
Chrome, sau đó yeah, bạn có thể xem HTML cụ thể.
Vì vậy, nó sẽ không hiển thị $ row ["Name"].
Nó sẽ hiển thị nào tên ở hàng đó.
>> ĐỐI TƯỢNG: Chỉ cần một vấn đề chung, những gì là tr và td định nghĩa là?
Tại sao chúng ta [không nghe được]?
>> ZAMYLA CHAN: hàng tr bảng, bảng sau đó td cột.
OK.
>> ĐỐI TƯỢNG: Vâng, đó là dữ liệu bảng.
>> ZAMYLA CHAN: dữ liệu bảng.
Yeah.
>> ĐỐI TƯỢNG: Đó là một hàng trong đó hàng được đối xử như một cột?
>> ZAMYLA CHAN: Xin lỗi.
Bạn có thể lặp lại điều đó?
>> ĐỐI TƯỢNG: Làm thế nào bạn hình dung hàng?
>> ZAMYLA CHAN: Làm thế nào bạn sẽ hình dung hàng trong những loại đường?
Bạn đang nói về những hàng ở đây hoặc các hàng tr?
>> ĐỐI TƯỢNG: Các hàng.
>> ZAMYLA CHAN: Các dòng này đây?
Tôi muốn hình dung này như Tôi thực hiện truy vấn của tôi.
Và nó nói, OK, tôi có thể từ 0 đến n số lượng hàng phù hợp với các tiêu chuẩn
mà bạn đã truy vấn.
Vì vậy, tôi có một số số hàng.
Vì vậy, các hàng, các hàng $, cửa hàng mỗi một trong những hàng trong một mảng.
Vì vậy, ngay cả khi nó chỉ là một trong số họ, đó là vẫn còn một mảng của hàng phù hợp với nó.
>> Vì vậy, sau đó, ví dụ, đây là tương tự như khi bạn lấy
bộ nhớ cache từ người sử dụng.
Và các tiêu chí có nơi ID bằng ID phiên.
Có thực sự chỉ là một trong hàng mà có thể phù hợp với điều đó.
Nhưng vẫn còn hàng vừa trở về một hàng.
Vì vậy, bạn sẽ phải đi đến các hàng, chỉ số 0, chỉ số bộ nhớ cache để
thực sự có thể bộ nhớ cache của bạn.
>> ĐỐI TƯỢNG: là chức năng in trong vang vọng điều tương tự?
>> ZAMYLA CHAN: Có.
Vâng.
In một tiếng vang trong cùng.
>> ĐỐI TƯỢNG: Liệu các vòng lặp foreach Cách duy nhất để chỉ mục vào hàng?
>> ZAMYLA CHAN: là một vòng lặp foreach cách duy nhất mà bạn có thể
lặp lại qua hàng?
Không.
Bạn cũng có thể sử dụng một vòng lặp, cung cấp mà bạn biết chiều dài
của mảng của hàng.
>> ĐỐI TƯỢNG: bạn có thể truy cập vào nó sử dụng một hàng như [không nghe được]?
>> ZAMYLA CHAN: Vì vậy, bạn không thể truy cập chỉ sử dụng hàng nếu bạn không có một
foreach vòng lặp với điều kiện bạn đã không tuyên bố liên tiếp.
Vâng.
Yeah, trong trắng.
>> ĐỐI TƯỢNG: Vậy điều gì làm tr và td làm gì?
>> ZAMYLA CHAN: Vì vậy, tr và td là các thẻ HTML.
tr cho đầu của một dòng của bảng.
Và mỗi td chỉ ra một mới bảng cột dữ liệu.
>> ĐỐI TƯỢNG: Đối với một hình ảnh của những gì liên tiếp là như thế, chỉ cần tưởng tượng SQL, làm thế nào
họ có một hàng.
[Nghe được].
>> ZAMYLA CHAN: Vâng.
Đó là một điểm tuyệt vời.
Bạn có thể hình dung hàng như chỉ như trong một bảng Excel, chỉ
danh sách các hàng.
OK.
Được rồi.
Vì vậy, bây giờ mà chúng tôi đã đi qua lựa chọn, nếu không có bất kỳ câu hỏi nhiều hơn, chúng tôi sẽ
đi qua lên chèn.
Vì vậy, nếu tôi muốn chèn vào một số bảng và chèn cột nhất định
giá trị, tôi có thể chèn bản thân mình vào Ravenclaw trong năm 7.
Nhưng đôi khi có thể có trùng lặp giá trị, như chúng ta đã thấy trong pset7 khi chúng tôi
đã cập nhật danh mục đầu tư của chúng tôi.
>> Vì vậy, trong trường hợp này, chúng tôi muốn sử dụng ON SAO CHÉP KEY UPDATE, để chúng ta không
lưu trữ nhiều hàng với cùng giá mà là cập nhật nó.
Sau đó, chúng tôi thực sự có cập nhật, mà không phải là một chèn.
Nó chỉ là một bản cập nhật mà bạn cập nhật trong một bảng nào đó với một định
tiêu chuẩn, sau đó, cuối cùng, xóa, mà không một điều rất giống nhau.
>> ĐỐI TƯỢNG: Ông có thể một thời gian ngắn đi qua các khóa trùng lặp?
>> ZAMYLA CHAN: Vâng.
Về cơ bản đây, tôi có INSERT INTO Gringotts, là, thuyền buồm, những giá trị này.
Nhưng ID, có lẽ, là một chìa khóa duy nhất giá trị thiết lập trong bảng MySQL.
Vì vậy, nếu tôi đã có ID thiết lập, sau đó tôi không thể chèn một hàng mới.
Vì vậy, nếu nó không tồn tại, sau đó tôi phải cập nhật nó.
Ở giữa trong trắng.
>> ĐỐI TƯỢNG: Vì vậy, chèn, cập nhật, xóa, và lựa chọn, là tất cả những người có sẵn
tại địa phương [không nghe được]?
>> ZAMYLA CHAN: Vì vậy, chèn, cập nhật, xóa, và
chọn là tất cả các truy vấn SQL.
Vì vậy, bất cứ khi nào bạn đang sử dụng SQL, bạn sẽ có những người có sẵn.
>> ĐỐI TƯỢNG: Quay lại câu đố quá khứ -
có một câu hỏi mà bị xử lý nếu bạn đã có một bảng và muốn
chèn điểm kiểm tra trong một và bạn chèn Tên của bạn vì vậy nó sẽ không cho phép bạn
[Nghe được] kiểm tra điểm số của bạn của bạn.
Làm thế nào bạn sẽ làm điều đó với chèn?
>> ZAMYLA CHAN: Vì vậy, các câu hỏi về một câu hỏi giữa kỳ trước.
Tôi không biết trong đó một trong đó là ngay bây giờ.
Như vậy có lẽ sau đó, nếu bạn muốn đi lên và chỉ cho tôi, sau đó tôi có thể
chắc chắn cung cấp cho bạn lời khuyên.
Nhưng nói về những thứ chèn, như tỉ số của một ai đó khi bạn
không nên, chúng ta hãy nói về Các cuộc tấn công SQL injection.
Vì vậy, một cuộc tấn công SQL injection cơ bản nơi một người nào đó có
lợi dụng việc bảo mật thấp của cách mà bạn đang dùng trong dữ liệu.
>> Vì vậy, ở đây, giống như trong tài chính CS50, khi chúng ta đăng nhập, chúng ta có thể nhập vào một
username trong biểu mẫu đăng nhập, hộp văn bản đầu tiên, và
sau đó nhập vào một mật khẩu.
Có lẽ mã PHP của chúng tôi có thể trông một cái gì đó như thế này, nơi $ username
là tên người dùng và mật khẩu sau dữ liệu là mật khẩu sau dữ liệu.
Và sau đó chúng tôi chỉ thực hiện truy vấn của chúng tôi, nói, OK, tốt, truy vấn của chúng tôi sẽ
chọn từ những người dùng của chúng tôi, nơi tên người dùng là
một trong đó họ gửi.
Và mật khẩu là mật khẩu, có nghĩa là các mật khẩu phù hợp.
>> Bây giờ, nếu thay vì thực sự gửi một mật khẩu thực tế, như
12345 và đoán tại prong nói Mật khẩu và cố gắng để hack của họ
tài khoản, nếu thay vì họ gửi này.
Họ có thể gõ vào có thể một đoán mật khẩu.
Và sau đó họ sẽ kết thúc quote sau đó gõ vào hoặc 1 = 1.
Điều đó sẽ được tốc độ của trực tiếp vào SQL truy vấn để tìm một cái gì đó như thế này.
Chọn từ những người dùng nơi tên người dùng = Ngạnh và mật khẩu
bằng lily hoặc 1 = 1.
>> Vì vậy, hoặc mật khẩu có là đúng hoặc 1 = 1,
mà luôn luôn là sự thật.
Vì vậy, trong trường hợp này, về cơ bản, người dùng có thể tận dụng điều này và chỉ cần đăng nhập
bản thân và thuê tài khoản của một ai đó.
Vì vậy, đó là lý do tại sao chúng tôi muốn tránh một ai đó có để làm điều này.
Nhưng may mắn thay, chức năng truy vấn bằng cách đi qua trong giữ chỗ sẽ
chăm sóc này cho bạn.
Ngoài ra, bạn sẽ thường không bao giờ muốn để thực sự gửi mật khẩu
mình.
Đó là lý do tại sao chúng tôi băm hoặc mã hóa họ về tài chính CS50.
>> ĐỐI TƯỢNG: Các bài kiểm tra qua nói chuyện về MySQL chuỗi thoát.
Chúng ta phải lo lắng về điều đó?
>> ZAMYLA CHAN: Đó là một câu hỏi hay.
Dây thoát MySQL chắc chắn là một chức năng đã được sử dụng trong truy vấn của chúng tôi.
Nhưng chắc chắn nhìn vào đó.
Tôi muốn nói đó là trò chơi công bằng để biết mà bạn cần phải gọi đó là
hoạt động trên một chuỗi.
Yeah, Belinda?
>> ĐỐI TƯỢNG: Làm thế nào để bạn biết khi nó dấu nháy đơn hoặc dấu ngoặc kép?
Và cũng có thể, tôi cảm thấy như trong bài giảng bạn đề cập đến một cái gì đó về việc không có
các [nghe được] hoặc một cái gì đó hoặc nháy đơn thứ hai ở cuối.
Tôi nghĩ rằng ông đã chỉ ra trong bài giảng đó bạn đang nghĩa vụ phải có dấu nháy đơn 1
và sau đó không có dấu nháy hoặc một cái gì đó.
>> ĐỐI TƯỢNG: [nghe được].
>> ĐỐI TƯỢNG: Vấn đề là đĩa đơn cuối cùng giá trong có trong hộp thứ hai
không nên có.
[Nghe được]
Bởi vì khi bạn đi mà đơn cuối cùng trích dẫn ra và phù hợp với các nội dung
nơi mật khẩu là, nếu bạn có truy vấn, có một giá duy nhất tại
kết thúc rồi.
Bạn muốn sử dụng dấu nháy đơn như một trong đó phải đối mặt với một trong những
[Nghe được].
Vì vậy, những gì thực sự trong văn bản hộp không nên có.
>> ZAMYLA CHAN: Tôi sẽ thay đổi điều đó.
OK.
Nếu không có bất kỳ câu hỏi, sau đó tôi sẽ vượt qua nó cho Joseph nói chuyện
về JavaScript, vân vân.
>> [Vỗ tay]
>> JOSEPH ONG: Vì vậy, chúng tôi đang chạy một chút phía sau.
Vì vậy, nếu bạn đã để lại, đó là OK.
Nhưng chúng tôi yêu cầu bạn giữ đầu của bạn xuống nếu bạn đang ở giữa, vì vậy bạn
không chặn máy ảnh và bạn sử dụng lối ra trở lại nếu bạn phải.
Tôi Joseph bằng cách này.
Hi.
Kiểm tra, kiểm tra.
Dan, là tốt?
Mát mẻ.
>> Vì vậy, các video cũng sẽ được đăng trực tuyến cho những người
phải rời khỏi đây.
Khó xử.
OK.
Vì vậy, xem xét lại bài kiểm tra.
Đây là một con mèo.
Bây giờ, JavaScript, đó là có thể không như aww cho một số các bạn.
OK.
Vì vậy, đó là lần đầu tiên, nhớ lại từ Zamyla.
Hãy nhớ rằng PHP là chạy trên máy chủ.
Và rất nhiều lần, các bạn đã viết các vòng lặp trong PHP để in ra HTML, phải không?
Vì vậy, một khi mã thực thi, mà Đầu ra HTML mà bạn in ra
được gửi đến người sử dụng.
Và một khi điều đó xảy ra, không có PHP hơn có thể được chạy, trừ khi bạn tải lại trang, của
Tất nhiên, đó reexecutes PHP.
Nhưng một khi bạn in ra HTML, bạn không thể đi bất cứ nơi nào.
>> Vì vậy, HTML được gửi qua cho người sử dụng, đó là trình duyệt ở đây, nơi
Milo đang sử dụng máy tính.
Và rất tốt, có nhiều điều khi chúng tôi gửi HTML cho người dùng.
Đôi khi chúng tôi muốn làm một cái gì đó như khi bạn click vào một cái gì đó, chúng tôi muốn
hộp cảnh báo bật lên, những loại tương tác, giống như khi bạn nhấn
quan trọng, khi bạn nhấp vào một cái gì đó trên trang, tôi muốn một cái gì đó xảy ra.
Vâng, bạn không thể reexecute PHP mã một lần HTML được thiết lập.
Vì vậy, làm thế nào để bạn làm điều này?
>> Chúng tôi giới thiệu một ngôn ngữ mới được gọi là JavaScript, chạy trong trình duyệt
cho phép bạn làm những điều HTML sau khi bạn nhận được
chúng từ máy chủ.
Và đây là lý do tại sao chúng tôi gọi nó là một phía máy khách ngôn ngữ lập trình.
Nó hoạt động trên máy tính của bạn -
khách hàng.
Bất kỳ câu hỏi về điều đó cho đến nay?
Mô hình có ý nghĩa cho người dân?
OK.
Tốt.
Được rồi.
Vì vậy, điều đầu tiên cần lưu ý là JavaScript không phải là PHP.
>> Họ có một số cú pháp khác nhau, mà chúng tôi sẽ đi vào.
Và họ đã sử dụng rất khác nhau.
JavaScript, một lần nữa, cho bạn trình duyệt, cho khách hàng.
Máy chủ chạy ở đâu đó trên người khác máy tính gửi thông tin
cho bạn, đúng không?
Vì vậy, nếu chúng tôi yêu cầu bạn viết mã PHP trên một câu hỏi thi, không viết
JavaScript và ngược lại.
Bạn sẽ chỉ mất điểm, và nó sẽ không đúng.
>> Vì vậy, hãy vào một số sự khác biệt cú pháp -
JavaScript trên bên trái và PHP trên bên phải.
Điều đầu tiên bạn sẽ nhận thấy với JavaScript, chúng ta khai báo các biến với
var từ khóa -
V-A-R. PHP sử dụng các ký hiệu đô la, như Zamyla thảo luận trước đó.
Nếu bạn muốn khai báo một liên kết mảng, chúng ta thấy cú pháp quen thuộc trên
phía bên phải với PHP.
Ở phía bên trái, thay vì bạn sử dụng dấu ngoặc nhọn.
Và sau đó là các phím của bạn ở bên trái.
Sau đó, bạn có một dấu hai chấm.
Và sau đó bạn có giá trị mà bạn muốn.
>> Vì vậy, đây là cách bạn sẽ làm điều đó trong PHP ở phía bên phải với thứ hai
dòng bắt đầu tại Milo.
Và đó là cách bạn sẽ làm điều đó trên bên còn lại trong JavaScript nếu bạn muốn
những gì chúng ta gọi là một đối tượng.
Và các đối tượng trong JavaScript chỉ mảng kết hợp.
Vì vậy, nếu bạn muốn truy cập các lĩnh vực, trong PHP bạn sử dụng cú pháp khung này.
Và cách này, bạn có thể gán lĩnh vực chủ sở hữu này Lauren.
>> Vâng, trong JavaScript, nếu muốn truy cập vào một lĩnh vực và thay đổi nó, bạn có thể
sử dụng cú pháp chấm.
Bạn cũng có thể sử dụng cú pháp khung.
Nhưng bạn không thể sử dụng chấm cú pháp trong PHP.
Điều đó sẽ không làm việc.
Nó chỉ hoạt động trong PHP.
Và cuối cùng, để in những thứ đến giao diện điều khiển, bạn sử dụng console.log, mà
các bạn sử dụng rất nhiều trong pset8.
Bạn có thể console.log đó.
>> Nếu bạn muốn in một mảng trong PHP, bạn phải sử dụng in r.
Và ở phía bên phải, bạn sẽ thấy tôi băm nối chuỗi ở đó.
Có người hỏi trước đó.
Tôi sử dụng một cộng trong JavaScript.
Nếu tôi muốn một cái gì đó để nối trong PHP, tôi sử dụng dấu chấm.
Đây là khác nhau.
Nếu bạn đang viết mã PHP, không sử dụng một cộng.
Nếu bạn đang viết JavaScript mã, không viết một dấu chấm.
Nó sẽ là sai lầm.
Và bạn sẽ buồn.
>> Vì vậy, sự khác biệt cú pháp.
Biết cú pháp của bạn, bởi vì nếu bạn phải viết một câu hỏi và bạn sử dụng cú pháp
từ ngôn ngữ sai, nó sẽ không làm việc.
Và nó sẽ là sai lầm.
Vì vậy, chúng ta hãy nói về một số kiểm soát dòng chảy khác nhau, làm thế nào bạn sử dụng
vòng trong mỗi người.
Zamyla đã đi qua phía bên phải.
Công cụ trên bên phải nên quen thuộc.
Hãy nhìn vào phía bên trái.
>> Khi bạn sử dụng cho n vòng lặp trong JavaScript, biến vòng lặp của bạn, var i ở đó,
vòng lặp trên các phím của mảng.
Vì vậy, bạn thấy tên, nhà, và vai trò.
Nếu tôi console.log tôi, tôi nhận được tên, nhà, và vai trò.
Đó là các phím.
Trong JavaScript, một vòng lặp foreach đi qua các giá trị của mảng này.
Vì vậy, bạn nhận thấy họ cả tôi.
Nhưng ở đây ở phía bên PHP, nó in Milo ra, CS50, và Mascot.
Đó là những giá trị trong PHP.
>> Vì vậy, đây là cách hai là khác nhau trong các ngôn ngữ khác nhau.
Vì vậy, nếu bạn đang sử dụng một foreach vòng lặp, không giả định rằng nó
cung cấp cho bạn các phím.
Và nếu bạn đang sử dụng một vòng lặp cho n, không giả sử nó cung cấp cho bạn các giá trị.
Điều này có ý nghĩa cho đến nay?
Slide tiếp theo sẽ hiển thị cho bạn làm thế nào bạn có thể truy cập ngược lại
mỗi người.
>> Vâng, nếu bạn có chìa khóa trong JavaScript và bạn muốn giá trị ra,
bạn chỉ cần chỉ số vào mảng với điều đó.
Vì vậy, Milo của tôi sẽ giúp bạn có được những gì bạn muốn - các giá trị.
Có cú pháp khác nhau này trong PHP.
Nếu bạn thực sự muốn biết điều đó, tôi không nghĩ rằng chúng tôi đã đưa cho bạn được nêu ra.
Nhưng nếu bạn quan tâm, bạn có thể sử dụng cú pháp bổ sung này ở bên phải
bên đó thực sự sẽ cho phép bạn nhận được phím trong PHP khi bạn đang sử dụng
foreach vòng lặp.
Vì vậy chỉ cần một chút đố nếu bạn quan tâm.
>> Vì vậy, đó chỉ là để chứng minh sự khác nhau giữa hai tuyến này.
Không pha trộn chúng khi bạn lập trình một câu hỏi.
Thắc mắc về điều đó.
Mát mẻ.
Được rồi.
JavaScript đối tượng.
Tôi đã nói chuyện về chúng.
Họ giống như các mảng kết hợp.
Một trong những điều tôi muốn bạn cần lưu ý đây là một giá trị trong một liên kết
mảng có thể là bất cứ điều gì trong JavaScript.
>> Nó thậm chí có thể là một chức năng, như ở đó.
Tôi có một chức năng mà là một giá trị của một phím.
Và nếu tôi muốn gọi là chức năng, Tôi chỉ cần truy cập vỏ cây.
Và sau đó tôi đặt các dấu ngoặc đơn sau đó.
Và làm việc.
Vì vậy, bất kỳ câu hỏi?
Không?
OK.
Tốt.
JavaScript, như PHP, là lỏng lẻo.
Điều đó có nghĩa gì?
>> Nó có các loại.
Nhưng khi bạn khai báo một JavaScript biến, bạn nói var i.
Bạn không nói ra.
Đó không phải là một điều.
Bạn chỉ nói đó là một biến.
Và sau đó JavaScript sẽ xử lý loại dưới mui xe cho bạn.
Chúng tôi có thể tự do chuyển đổi giữa loại vì điều này.
Vì vậy, tôi bắt đầu ra như là một số trong trường hợp này.
Và sau đó tôi có một chuỗi.
Và tôi thêm tôi với nó.
Và tôi phân công lại nó trở lại vào tôi.
>> Vì vậy, trên dòng đầu tiên, i là số.
Trên dòng thứ hai, bây giờ tôi sẽ trở thành một chuỗi sau khi tôi làm tái chỉ định.
Và ở đây, tôi chỉ cần ghép con số vào chuỗi.
Vì vậy, bạn thấy rằng mặc dù tôi là một số nguyên trong phần đầu tiên, đó là loại
giống như được chuyển đổi sang một chuỗi và sau đó được bổ sung
lên rằng chuỗi hello.
Và đó là những gì tôi có nghĩa là do đánh máy lỏng lẻo.
Đó là bạn chuyển đổi giữa loại rất dễ dàng.
Và nó không ném cảnh báo tại bạn thích C không.
>> Vì vậy, bây giờ tôi có chào 123 vào chuỗi.
Tiếp theo.
Chúng tôi cũng có thể tự do so sánh giữa các loại.
Vì vậy, nếu bạn chỉ cần sử dụng ==, rất nhiều như trong PHP, JavaScript
làm một điều tương tự.
Chuỗi 123 là giống như số 123 khi bạn sử dụng bình đẳng đôi.
Khi sử dụng bình đẳng ba, nó cũng muốn đảm bảo rằng
loại là như nhau.
Vì vậy, bởi vì đó là một chuỗi và đó là một số, mặc dù họ đang cả hai
123, khi bạn sử dụng ba bằng, bạn sẽ có được sai.
Trong đôi bằng trường hợp, bạn sẽ có được sự thật, vì bình đẳng đôi không
quan tâm đến loại.
Bình đẳng ba không quan tâm đến loại.
Câu hỏi?
OK.
>> Và một điều về JavaScript phạm vi toàn cầu là loại trừ khi bạn
trong một hàm.
Và nó hoạt động tương tự cách trong PHP thực sự.
Vì vậy, hãy đi qua ví dụ này.
Tôi đặt tôi đến 999.
Và sau đó tôi đi vào việc này cho vòng lặp.
Vì vậy, nếu tôi in ra tôi trong này vòng lặp, tôi hy vọng 0, 1, 2, 3, 4.
Tôi nhận được để i = 4.
Nó increments tôi bây giờ đến 5 tại kết thúc vòng lặp cho.
Và sau đó nó phá vỡ ra khỏi vòng lặp, bởi vì nó không thực hiện
điều kiện nữa.
>> Làm những gì bạn nghĩ tới console.log in ra?
Vì vậy, đó là những gì nó sẽ làm gì trong C. Trong C, bởi vì nếu bạn có như var i bên ngoài
và bạn có var i bên trong một vòng lặp, như một cho vòng lặp, sau đó nó làm cho nó như vậy mà
nó scoped rằng hai tôi lại khác.
Trong JavaScript, nó sẽ chỉ đối xử với nó như i cùng.
Tôi nhận được 5, bởi vì đó là giá trị sau khi nó đã thoát ra khỏi vòng lặp.
Vì vậy, những của tôi là tôi cùng.
Điều đó có ý nghĩa?
>> Vâng, nó có ý nghĩa từ một quan điểm JavaScript.
Nhưng mô hình tương tự không mang sang C. Họ có
Phạm vi quy tắc khác nhau.
Vâng.
>> ĐỐI TƯỢNG: [nghe được]
ngoài chức năng [nghe được]?
>> JOSEPH ONG: Vì vậy, bên ngoài có chức năng?
Vì vậy, tôi sẽ nhận được rằng chỉ trong một giây.
Vì vậy, chúng ta gọi foo (i).
Này đi tôi vào foo, gia tăng nó, và sau đó đăng nhập nó.
Vì vậy, nó là 5.
Vì vậy, nó sẽ trở thành 6.
Nhưng những gì tôi đang nói về là mà tôi trong chức năng đó.
Bởi vì đó là một tham số, nó scoped để chức năng đó.
Vì vậy, khi tôi thực sự nhận ra rằng chức năng, nó bây giờ sẽ đi
trở về tôi cũ.
Tôi mà chỉ vì scoped nó trong một hàm.
Và chúng tôi có phạm vi và chức năng.
Nhưng chúng tôi không có phạm vi bên ngoài các chức năng trong JavaScript.
Điều đó có ý nghĩa?
Vâng.
Câu hỏi.
>> ĐỐI TƯỢNG: Cùng [nghe được]?
>> JOSEPH ONG: Vì vậy, yeah.
Trong PHP, đó là cùng một loại điều.
Có một sự tinh tế nhẹ thực sự.
Nhưng bạn có thể hỏi tôi về sau khi xem xét.
Bạn không thực sự cần phải biết mà tinh tế cho bài kiểm tra.
Đối với tất cả các tính năng, như biến, toàn cầu và PHP, trừ khi
họ đang ở trong một chức năng, cùng điều trong JavaScript.
Vâng.
>> ĐỐI TƯỢNG: Tại sao điều này được cho phép trong JavaScript và không có nơi nào khác?
>> JOSEPH ONG: Vậy tại sao nó cho phép trong JavaScript và không có trong C?
Nó chỉ là bất cứ ai đến với JavaScript quyết định rằng đây là OK trong
JavaScript.
Vì vậy, nó giống như một ngôn ngữ lập trình ước như chúng tôi sẽ nói.
Vâng.
>> ĐỐI TƯỢNG: Vậy tại sao nó đi 6-5?
>> JOSEPH ONG: Vì vậy, nó đã đi 6-5, bởi vì khi tôi đi ngang qua tôi vào foo, mà
tôi bên trong của foo bây giờ là scoped để foo, bởi vì phạm vi tồn tại trong các chức năng trong
JavaScript.
Nhưng một khi tôi ra khỏi đây, bởi vì nó được scoped đến chức năng, tôi chỉ
bằng cách sử dụng i thường xuyên đó là bên trong phần còn lại của các dòng điều khiển.
Có ý nghĩa?
Tôi có thể di chuyển trên?
Được rồi.
Mát mẻ.
>> Việc chấp nhận này là đối tượng được thông qua tham khảo.
Bạn biết làm thế nào khi bạn vượt qua một mảng vào C bạn có thể
thực sự sửa đổi các mảng?
Đó là điều tương tự trong JavaScript.
Nếu tôi vượt qua một đối tượng, trong trường hợp này, tôi thông qua Milo vào chức năng catify này.
Milo bắt đầu ra.
Tên của ông là Milo chuối.
Tôi vượt qua đối tượng đó vào một chức năng bởi vì nó là một đối tượng, một liên kết
mảng trong JavaScript.
>> Khi tôi thực hiện một hoạt động trong chức năng, nó sẽ
thực sự thay đổi đối tượng.
Vì vậy, điều này sẽ chỉ xảy ra cho các đối tượng trong JavaScript, giống như nó xảy ra
cho mảng bên trong của tên C. Vì vậy, Milo sẽ thực sự trở thành con mèo bây giờ.
Điều đó có ý nghĩa?
Vì vậy, điều này chỉ làm cho các đối tượng.
Đối tượng được thông qua tham khảo.
Vâng.
>> ĐỐI TƯỢNG: Vì vậy, bạn đang nói rằng trái ngược với tôi biến.
>> JOSEPH ONG: Vâng.
Mà biến tôi đã được chỉ một số, phải không?
Nó giống như trong C khi bạn vượt qua một số nguyên một, nó làm cho một bản sao.
Và khi bạn vượt qua một mảng, nó thực sự thay đổi các mảng thực tế
C. Điều tương tự cũng xảy ra với JavaScript trong trường hợp này.
Được rồi.
Và tiếp theo, Milo là buồn bởi vì ông bây giờ là một con mèo.
Đó là thực sự sau khi Milo một số chuyến đi đến bác sĩ thú y.
>> Vì vậy, làm thế nào để chúng tôi sử dụng JavaScript trong một trang web?
Chúng ta có thể bao gồm nó.
Đây là mã HTML với các thẻ dải.
Vì vậy, tôi có thẻ dải đó.
Và sau đó tôi đặt một số mã JavaScript mã trong thẻ script.
Và sau đó nó thực hiện điều này.
Khi tôi chỉ làm điều đó như thế này, đó là gọi là JavaScript nội tuyến.
Đó là loại lộn xộn, bởi vì JavaScript là thực sự trong HTML.
>> Một cách tốt hơn để làm điều này, rất đẹp, là viết JavaScript trong một
tập tin bên ngoài và sau đó cung cấp thẻ script với một nguồn.
Và điều này sẽ đi đến tập tin JavaScript và đọc mã JavaScript từ
mà nộp thay.
Và theo cách này, bạn không có nhiều JavaScript vào đầu của bạn
Tập tin HTML, mà làm cho nó thực sự lộn xộn.
Bạn chỉ cần đặt nó ở một nơi khác.
Và sau đó nó sẽ đọc nó từ đó.
Đã làm điều đó làm cho tinh thần?
>> Vấn đề vị trí.
Trong trường hợp cụ thể này, kịch bản là trước khi cơ thể.
Vì vậy, khi tôi thực hiện điều đó, có không có gì trong cơ thể được nêu ra.
Có lẽ điều này sẽ làm cho nhiều hơn một chút cảm nhận khi tôi thấy phần tiếp theo này.
Trong trường hợp này, kịch bản ra sau khi div.
Vì vậy, các div thực sự xuất hiện trên trang đầu tiên.
Ngay tại đây trong vòng tròn này ít màu đỏ, bạn thấy văn bản xuất hiện.
Và sau đó là cảnh báo xuất hiện.
>> Trong trường hợp đầu tiên, bởi vì kịch bản đã được trước khi div, các
cảnh báo hiện lên trước tiên.
Và sau đó là div xuất hiện sau khi bạn bỏ hộp.
Vì vậy, việc thực hiện vấn đề.
Vì vậy, chúng tôi sẽ ghi nhớ điều này.
Đây sẽ là quan trọng trong một chút.
OK.
Rất tốt, làm thế nào để bạn chờ đợi cho đến khi toàn bộ trang được nạp sau đó trước khi bạn
thực hiện một số mã?
Chúng tôi sẽ nhận được vào này một chút bit sau quá.
Nhưng chỉ cần giữ vị trí này các vấn đề trong tâm trí khi chúng tôi
đến trượt khác.
>> Vì vậy, chúng tôi nhận được DOM bây giờ.
Và DOM là gì?
Vì vậy, nếu bạn nhìn vào mã HTML, nó chỉ một loạt các văn bản trên màn hình.
Vì vậy, làm thế nào để biết rằng JavaScript đây là một phần tử HTML?
Vì vậy, chúng ta phải có một số bộ nhớ đại diện này
cấu trúc mà chúng ta có.
Và bất cứ khi nào chúng tôi có điều này trong bộ nhớ đại diện trong JavaScript, chúng ta gọi
mà DOM.
Và nó chỉ là một cách mà mọi người quyết định rằng chúng ta nên đại diện này
Cấu trúc HTML như.
>> Và những gì DOM này như thế nào?
Vâng, trong đại diện bộ nhớ, chúng tôi có văn bản này.
Và chúng tôi biến nó thành bộ nhớ đại diện.
Vì vậy đây là HTML.
Vì vậy, đầu tiên chúng tôi tìm ra rằng mỗi Cây DOM có một tài liệu.
Nó trông giống như một cái cây.
Và các tài liệu có chứa mã HTML tag, trên thực tế tất cả mọi thứ
bên trong này ngay bây giờ.
Các thẻ HTML có hai trẻ em.
Nó có một cái đầu.
Đầu đó, nếu bạn nhìn vào thụt đầu dòng ở đó như thế nào nó có cấu trúc
giữa các thẻ gần, đầu có một đứa trẻ.
Đứa trẻ là tiêu đề.
Chính xác.
>> Bây giờ, chúng tôi có một đứa trẻ cơ thể.
Và sau đó cơ thể có một con gọi là gia đình.
Và gia đình có ba người con -
lâu đời nhất, trung bình, và trẻ nhất.
Vì vậy, bạn nên biết làm thế nào để vẽ một sơ đồ như thế này khi chúng tôi yêu cầu bạn làm thế nào
để vẽ một sơ đồ khi chúng tôi cung cấp bạn HTML bên trái.
Biết làm thế nào để sản xuất cây DOM.
Và bên trong của những điều này, có chỉ một số văn bản, mà tôi đã đại diện
hộp càng ít.
>> Không cấu trúc cây DOM này làm cho ý nghĩa và những gì DOM?
Vì vậy, những gì hiện các p đứng cho?
Ở đây, p ở đó trong thẻ đại diện cho một
tag đoạn trong HTML.
Vì vậy, bạn có thể nhìn nó lên.
Nhưng nó chỉ có nghĩa đó là một số không gian cho một số văn bản.
Và nó có một số kiểu dáng CSS mặc định, bởi vì đó là một thẻ đoạn.
Nhưng không thực sự lo lắng về phần đó quá nhiều.
Chỉ biết đó là một giữ chỗ đối với một số văn bản.
Vâng.
Câu hỏi?
Vâng.
>> ĐỐI TƯỢNG: Bạn chỉ đề cập đến CSS.
Gia đình băm và băm tất cả những thứ về cơ bản là
đại diện cho ID trong CSS?
>> JOSEPH ONG: Vâng, chính xác.
Tôi sẽ nhận được những gì các băm có nghĩa là trong một giây.
Khi Angela đã đi qua CSS, cô nói về bộ chọn CSS.
Đây là những bộ chọn CSS cô ấy đang nói về.
Có, Rob?
>> ROB Bowden: Tôi cũng sẽ bình luận mà DOM bên trong thẻ tiêu đề
cũng là một nút văn bản.
>> JOSEPH ONG: Đúng vậy.
Vì vậy, bên trong các thẻ tiêu đề, Tôi có một số văn bản DOM.
Vì vậy, thực sự, tiêu đề này cần phải có như một hộp nhỏ sắp tắt của nó là tốt.
Nhưng nó không thực sự quan trọng quá nhiều trong trường hợp này.
Chúng tôi không thực sự quan tâm đến các nút văn bản, khi chúng tôi gọi cho họ, quá nhiều.
OK, chúng tôi làm.
Rõ ràng, chúng tôi làm.
Và tôi sẽ khắc phục điều đó khi Tôi tải nó lên một lần nữa.
Điều đó có ý nghĩa?
>> Vì vậy, làm thế nào để chúng tôi làm việc với DOM?
Bất cứ khi nào bạn đối phó với DOM trong JavaScript, có hai bước.
Bạn chọn một phần tử DOM.
Và sau đó bạn làm việc với nó.
Vì vậy, trong trường hợp này, trừu tượng, tôi đã lựa chọn các yếu tố trung.
Và sau đó là một ví dụ về làm công cụ nó sẽ được thay đổi văn bản.
Được sử dụng để được Bob.
Bây giờ, những gì tôi đã làm với nó là tôi đã thay đổi Bob Milo trong trường hợp này.
>> Vì vậy, làm thế nào để chúng tôi thực sự làm được điều này?
Làm thế nào để chúng tôi làm lựa chọn?
Và làm thế nào để chúng tôi làm các công cụ để điều khi chúng tôi đã thực hiện nó?
Vâng, con đường các bạn đã học được nó trong lớp này là bằng cách sử dụng một cái gì đó chúng tôi
gọi là jQuery.
Vì vậy, jQuery là gì?
jQuery là một thư viện mà làm cho JavaScript dễ dàng hơn để viết.
Vì vậy, một người nào đó đã dành thời gian và đã viết jQuery.
>> jQuery thực sự được viết trong JavaScript.
Và sau đó bởi vì họ đã làm điều này, chúng ta có một bó toàn bộ các chức năng mà
chúng ta có thể sử dụng mà làm cho chúng tôi sống thực sự dễ dàng.
Vì vậy, một số là gì điều đó không?
Nó làm cho việc lựa chọn các yếu tố dễ dàng hơn.
Nó làm thay đổi HTML, thêm các lớp học dễ dàng hơn.
Nó làm cho Ajax dễ dàng hơn.
Chúng tôi sẽ nhận được rằng trong một giây.
>> Và nó cũng tương tự như các thư viện C.
Vì vậy, bạn bao gồm string.h, bạn nhận được strlen.
Bạn nhận được strcpy, tất cả những điều này.
Khi bạn bao gồm jQuery, bạn có được tốt đẹp cách để lựa chọn các yếu tố để thay đổi
điều, vân vân.
Bạn sẽ có được chức năng thêm rằng JavaScript không cung cấp cho bạn.
Vì vậy, jQuery không phải là JavaScript.
jQuery là một thư viện mà được viết bằng JavaScript mà làm cho JavaScript
dễ dàng hơn để viết.
>> Vì vậy, jQuery không phải là một lập trình ngôn ngữ.
Nhưng JavaScript là.
thực hiện.
Chắc chắn bạn sẽ có được các thuật ngữ của bạn ngay.
Bất kỳ câu hỏi?
Vâng.
Là một câu hỏi?
Được rồi.
Vì vậy, làm thế nào để bạn sử dụng jQuery?
Vâng, khi bạn đang viết một số Mã JavaScript và bạn bao gồm một
jQuery ở trên cùng của tập tin của bạn như một tập tin kịch bản, bạn sử dụng các ký hiệu đô la
bây giờ để có được quyền truy cập vào jQuery.
Và điều này là khác nhau từ ký hiệu đô la trong PHP.
>> Đó là biểu tượng cùng bạn gõ trên bàn phím của bạn.
Nhưng họ có ý nghĩa rất khác nhau.
Ký hiệu đô la trong PHP có nghĩa này là làm thế nào tôi khai báo một biến.
Trong JavaScript, khi bạn đã bao gồm jQuery, nó là viết tắt của jQuery.
Vì vậy, giữ cho rằng trong tâm trí.
Vậy làm thế nào chúng ta có thể chọn các yếu tố DOM?
Vâng, khi bạn làm điều đó JavaScript xấu xí cách, bạn truy cập vào
tài liệu biến toàn cầu.
Và sau đó bạn sẽ có được yếu tố gia đình ID.
Điều này thực sự lâu dài và dài dòng và không phải là rất tốt đẹp.
>> Hoặc bạn có thể nhận được tất cả các yếu tố mà là một thẻ p.
Điều đó làm việc quá trong JavaScript.
Nhưng chúng tôi không bao giờ thực sự thấy bạn cú pháp quá nhiều.
Những gì chúng tôi cho thấy bạn là jQuery.
Vì vậy, toàn bộ chọn lên đó mà được thể hiện trong JavaScript chỉ được
ngưng tụ với đồng đô la rất tốt đẹp đăng ký gia đình hashtag.
Và $ p, chỉ cần nơi đó là như thế.
Nếu bạn muốn chọn tất cả các thẻ p trong một gia đình, chúng tôi đặt một không gian
giữa hai người.
Và bây giờ, chúng tôi nhận được tất cả các p thẻ trong một gia đình.
>> Và tìm kiếm quen thuộc?
Vâng, Angela nói về CSS Selectors.
Hãy cho tôi một giây.
Và do đó, để chọn một phần tử, bạn chỉ cần sử dụng những điều tương tự như bạn
sẽ làm gì với một chọn CSS.
Nếu bạn đặt một băm trước của nó, nó chọn bởi ID.
Một dấu chấm chọn của các lớp học.
Nếu bạn chỉ có điều không có băm hoặc dấu chấm, nó chọn những thẻ.
Câu hỏi.
Có?
>> ĐỐI TƯỢNG: Khi chúng ta sử dụng dấu chấm trong của chúng tôi HTML, là không jQuery?
>> JOSEPH ONG: Dot trong HTML của chúng tôi là một điều JavaScript.
Nó không phải là một điều jQuery.
Cách các bạn đã học nó với jQuery là sử dụng html..
Và sau đó bạn thông qua nó bất cứ điều gì HTML là có được.
Vì vậy, tôi sẽ nhận được rằng chỉ trong một thứ hai thực sự.
Vì vậy, làm thế nào để chúng tôi làm công cụ để yếu tố một khi chúng ta đã chọn nó?
Vì vậy, đó là một ví dụ về lựa chọn một phần tử.
Vì vậy, bây giờ, chúng tôi muốn làm công cụ để nó.
>> Vì vậy, trong trường hợp này, hãy để tôi quay trở lại lại slide trước đó.
Đó là Bob trước.
Và tôi muốn thay đổi điều đó trong HTML để Milo.
Vì vậy, tôi gọi hàm HTML từ các yếu tố.
Đó là chức năng HTML một phương pháp phần tử.
Và sau đó tôi cung cấp cho nó những gì Tôi muốn các HTML được.
Và nó chỉ thay thế những gì bên trong của mà thẻ với bất cứ điều gì tôi cho nó.
Vâng.
Câu hỏi?
>> ĐỐI TƯỢNG: Các hashtag được sử dụng chỉ jQuery.
[Nghe được]
chúng tôi sẽ không sử dụng đó.
>> JOSEPH ONG: Vâng, chính xác.
Nhưng đừng lo lắng quá nhiều JavaScript về tinh khiết.
Tôi chỉ muốn các bạn tập trung vào cách bạn sẽ làm điều đó với jQuery, vì
đó sẽ là quan trọng phần trên các bài kiểm tra.
Đúng.
Chính xác.
Vì vậy, bạn thấy hashtag đó, để tương ứng để lựa chọn các phần tử với
giữa ID vì hashtag đó.
Hashtag có nghĩa là ID.
Và yếu tố này có một ID của trung.
Vì vậy, đó là yếu tố chúng tôi lựa chọn.
>> ĐỐI TƯỢNG: [nghe được].
ký hiệu đô la hashtag [nghe được]?
>> JOSEPH ONG: Vì vậy, không có.
Câu hỏi đặt ra là bạn có thể sử dụng. Giá trị.
Và giá trị. Chỉ hoạt động trên các yếu tố đó là đầu vào.
Trong jQuery, nó sẽ là . Val, không giá trị..
Vì vậy, tôi sẽ nhận được một ví dụ nhỏ thể hiện tất cả điều này kết hợp
trong một giây.
Nhưng tôi nghĩ rằng điều này phục vụ một chút đoạn có ý nghĩa với mọi người cho đến nay.
Muốn thay đổi HTML, gọi phương thức HTML.
Vâng.
>> ĐỐI TƯỢNG: bạn có thể giải thích phương pháp một lần nữa?
>> JOSEPH ONG: Vì vậy, một phương pháp chỉ là một chức năng mà thuộc về một, trong này
trường hợp, một trong những yếu tố DOM, bởi vì bạn thấy tôi
chọn phần tử đầu tiên.
Trên thực tế, hãy để tôi sử dụng chuột.
Tôi chọn phần tử đầu tiên.
Và sau đó tôi gọi là HTML này chức năng mà nó có.
Và bởi vì chức năng này thuộc về điều này, chúng tôi gọi nó là một phương pháp.
Đó chỉ là một tên ưa thích cho nó.
Nói rằng một lần nữa.
Vì vậy, hãy nhớ rằng, chúng tôi đã chọn các yếu tố bây giờ.
Và chúng tôi đã đặt nó bên trong biến yếu tố.
Đúng không?
>> Vì vậy, khi chúng ta muốn thay đổi HTML trên bên trong, bởi vì nó là Bob trước, bạn
muốn thay đổi văn bản để Milo.
Vì vậy, chúng ta gọi là HTML.
Và chúng tôi nói với nó những gì HTML bên trong yếu tố đó phải được bây giờ.
Và do đó, nó thay đổi nó để Milo, bởi vì tôi đã cho nó Milo.
>> ĐỐI TƯỢNG: Vì vậy, họ đang làm việc với nhau.
[Nghe được]
>> JOSEPH ONG: Vâng, vâng.
Họ đang làm việc với nhau.
Vì vậy, một trong số họ lựa chọn các yếu tố đầu tiên.
Và điều thứ hai không một cái gì đó cho nó.
Vâng.
>> ĐỐI TƯỢNG: [nghe được].
Nếu phương pháp này là khác nhau từ trong HTML bạn có phương pháp bằng thực tế.
>> JOSEPH ONG: Vâng.
Đó là một phương pháp khác nhau.
Và chúng ta có thể nói về điều này chỉ trong một giây khi chúng tôi nhận được một ví dụ.
Tôi muốn chắc chắn rằng chúng ta tăng tốc độ bởi vì chúng ta đang sắp hết thời gian.
Nhưng chúng tôi đã chạy cách qua thời gian bây giờ.
OK.
Mát mẻ.
Vì vậy, nếu bạn muốn thêm vào một lớp học, có cũng là một phương thức add lớp.
Đây chỉ là một ví dụ về những gì bạn có thể làm với jQuery.
Mà chỉ cần thêm một lớp.
>> Nếu bạn muốn loại bỏ nó, bạn có thể gọi loại bỏ.
Đó chỉ là một điều bạn có thể làm.
Vì vậy, nhiều ví dụ về những điều bạn có thể làm.
Vì vậy, có thể tôi chỉ cần đặt nó ở đầu như thế này?
Loại bỏ nhỏ nhất.
Nếu tôi chỉ cần thực hiện JavaScript tại đầu tập tin của tôi, mà sẽ làm việc?
Đúng.
Vì giữa không tồn tại được nêu ra.
Vì vậy, đây không phải là đi để làm việc.
Để thực hiện.
Nó đi đến đỉnh đầu tiên.
Những gì?
>> ĐỐI TƯỢNG: nhỏ nhất không tồn tại chưa?
>> JOSEPH ONG: Vâng.
Trẻ không tồn tại được nêu ra.
Chính xác.
>> ĐỐI TƯỢNG: Bạn nói trung.
>> JOSEPH ONG: Xin lỗi.
Trẻ không tồn tại được nêu ra.
Và điều khác là tôi đã không bao gồm jQuery
nộp yêu cầu kịch bản src.
Vì vậy, đó không phải đi làm việc.
Trên thực tế, tôi đã không làm điều đó trong slide tiếp theo, đó là
phải khắc phục điều đó một trong hai.
Nhưng cách chúng ta làm điều này là JavaScript là sự kiện hướng.
Vì vậy, những gì chúng tôi làm là chúng tôi sử dụng một sự kiện xử lý để thực hiện điều này.
Và vì vậy tôi chọn tài liệu thiết lập đầu tiên.
Tôi nói, OK, khi tài liệu sẵn sàng, hãy để tôi chạy một chức năng.
Vì vậy, đó là tất cả những phương tiện cú pháp.
>> Tôi lựa chọn tài liệu.
Bây giờ, khi tài liệu sẵn sàng, chạy chức năng.
Và vì vậy ở đây khi tài liệu sẵn sàng, có nghĩa là tất cả các HTML có
nạp, sau đó tôi chạy chức năng loại bỏ yếu tố đó.
Và vì vậy bây giờ, khi tôi chạy chức năng này mà tôi thông qua thành sẵn sàng, tôi
đảm bảo rằng tất cả các HTML trên trang sẽ tồn tại đầu tiên.
Vâng.
Câu hỏi?
>> ĐỐI TƯỢNG: các từ khóa sự kiện là gì trong chức năng?
>> JOSEPH ONG: Vì vậy, từ khóa sự kiện trong chức năng chỉ là một tham số
được thông qua với chức năng cho bất kỳ sự kiện.
Nó chỉ là một cái gì đó bạn nhận được miễn phí.
Khi bạn đang sử dụng bộ xử lý quan trọng trong pset8, sự kiện đó có thể cho bạn, cho
Ví dụ, mà chính bạn nhấn vào.
Trong trường hợp này, một sự kiện đã sẵn sàng, nó thực sự không phải là siêu hữu ích.
Nhưng đối với một sự kiện phím, nó nhiều hơn hữu ích, vì bạn có thể biết được
chính bạn nhấn bằng cách truy cập chính đang ra rằng đối tượng sự kiện.
Đúng không?
Điều đó có ý nghĩa?
OK.
Vâng.
Câu hỏi?
>> ĐỐI TƯỢNG: Vì vậy, bạn có thể đặt thẻ script xuống thấp hơn?
>> JOSEPH ONG: Vì vậy, yeah.
Bạn có thể đặt kịch bản thẻ xuống thấp hơn.
Nhưng sau đó nó chỉ thực sự trở nên lộn xộn.
Và chúng tôi muốn tập trung tất cả mã của chúng tôi ở một nơi.
Và điều này sẽ cho phép chúng ta làm điều đó.
Nhớ trước đó tôi đã nói có một đẹp hơn cách để đảm bảo rằng yếu tố này
trên trang trước khi bạn thực thi mã?
Và đây chỉ là một cách tốt đẹp bạn sẽ thực hiện điều đó.
>> ĐỐI TƯỢNG: [nghe được].
>> JOSEPH ONG: Vâng.
Bạn vẫn sẽ có, phải không?
Vì nhớ, bạn đã bao gồm các nộp ở đầu trang.
Vì vậy, nó sẽ thực hiện đầu tiên trước khi bạn nhận được để dưới cùng của trang.
OK.
Vì vậy, bạn cũng có thể thêm một khác nhau loại xử lý sự kiện.
Điều này chỉ xử lý nhấp chuột.
Khi tôi bấm vào trẻ, sau đó nó sẽ bật lên với một cảnh báo.
Đây chỉ là một khác nhau loại sự kiện.
Như trái ngược với các sự kiện đã sẵn sàng, bây giờ bạn sử dụng sự kiện click khi bạn nhận được
nhấp chuột vào một phần tử.
>> Và do đó trong trường hợp này, hãy nhớ, nhấp chuột xử lý được gắn liền với trẻ.
Vì vậy, nó chỉ xảy ra khi Tôi bấm vào trẻ.
Và trong một trong những khác, các sự kiện sẵn sàng đã được gắn liền với tài liệu.
Vì vậy, nó đợi cho tài liệu sẵn sàng.
Có ý nghĩa?
Tôi nghĩ rằng tôi có thể di chuyển trên.
Vâng.
Câu hỏi?
>> ĐỐI TƯỢNG: [nghe được].
trong trường hợp này bạn sử dụng [không nghe được].
>> JOSEPH ONG: Oh, yeah, bởi vì trong này trường hợp, tôi phải đợi cho trẻ
yếu tố để xuất hiện trên màn hình đầu tiên trước khi tôi có thể đính kèm một nhấp chuột để xử lý
nó, đó là lý do tại sao tôi đặt nó bên trong của một tài liệu đã sẵn sàng.
OK.
Và tiếp theo, vì vậy đây là một ví dụ lớn làm thế nào bạn sẽ kết hợp tất cả mọi thứ.
Đây chỉ là một ví dụ xác nhận hình thức bạn đã thấy trong bài giảng.
Vì vậy, mang nó từng bước như bạn đi qua này.
Và nó sẽ được hoàn toàn OK.
Chỉ cần đọc nó từ trên xuống dưới.
>> Tôi có một hình thức ở phía dưới.
Khi tài liệu đã sẵn sàng, tôi đính kèm một trình xử lý mẫu, như vậy mà
khi tôi nộp đơn, tôi nhận được các giá trị mỗi bên trong những yếu tố đầu vào.
Và tôi kiểm tra xem nó là trống.
Nếu nó trống, tôi trở lại sai, bởi vì Tôi không muốn gửi biểu mẫu,
bởi vì hình thức là sai.
Nếu mật khẩu là trống hoặc nó ít hơn tám ký tự, tôi không nộp
hình thức, bởi vì đó cũng là sai.
Và sai trở lại chỉ ngăn chặn hình thức nộp và
đi đến một trang mới.
>> Và hy vọng, điều này có ý nghĩa.
Tôi nghĩ các bạn nên đi bộ qua đang từng bước một mình.
Và một khi bạn hiểu những gì các lựa chọn các yếu tố và làm công cụ để nó
thực sự đòi hỏi, điều này sẽ làm rất nhiều ý nghĩa với bạn.
Có?
>> ĐỐI TƯỢNG: làm gì tên = tên người dùng nghĩa là gì?
>> JOSEPH ONG: Vì vậy, các tên = tên người dùng và name = mật khẩu chỉ có nghĩa là nhìn vào
thuộc tính của bất cứ điều gì bạn đang lựa chọn.
Và sau đó có để phù hợp.
Vì vậy, chúng tôi đi vào đăng ký.
Và sau đó chúng ta nhìn vào tất cả các yếu tố đầu vào và đăng ký.
Và sau đó chúng tôi chọn một trong những nơi mà tên thuộc tính bằng tên người dùng.
Để chọn đầu tiên chỉ selects đầu vào tên người dùng.
Và chọn thứ hai chỉ chọn mật khẩu một, bởi vì những người có
thuộc tính tên của họ thiết lập như những gì họ đang coi được.
Câu hỏi?
>> ĐỐI TƯỢNG: Mở trình, làm thế nào phần dưới cùng giải quyết phần trên?
>> JOSEPH ONG: Vì vậy, đó là bởi vì của xử lý sự kiện.
Vì vậy, chúng tôi đang chờ đợi một sự kiện trình mà bị sa thải từ hình thức.
Và đó là tất cả những gì trình.
Tại sao tôi gọi trình trên đó?
Nó nói, khi biểu mẫu được gửi, Tôi nhận được một sự kiện trình.
Vì vậy, hãy để tôi chỉ đánh chặn đó và sau đó chạy mã này để thay thế.
Có?
>> ĐỐI TƯỢNG: Tại sao bạn phải có chức năng sự kiện?
Tại sao không có thể bạn chỉ cần [nghe được]?
>> JOSEPH ONG: Bởi vì trong JavaScript, bạn phải khai báo các chức năng.
Đó chỉ là cách nó hoạt động trong JavaScript.
Bạn có thể nói nó sẽ để chạy một chức năng.
Vì vậy, bạn đang nói với nó rằng bạn mong đợi một chức năng ở đây thay vì
chỉ dấu ngoặc nhọn.
>> ĐỐI TƯỢNG: Và chức năng là bất cứ điều gì sau?
>> JOSEPH ONG: Vâng.
Chức năng là bất cứ điều gì là bên trong các dấu ngoặc nhọn sau
mà chức năng từ khóa.
Có?
>> ĐỐI TƯỢNG: [nghe được].
>> JOSEPH ONG: Đối với trình?
>> ĐỐI TƯỢNG: Không, vì chức năng mà không có sự kiện này.
>> JOSEPH ONG: Vâng.
Vì vậy, không có sự kiện này, bạn có thể có điều đó.
Nếu bạn không cần sự kiện này, sau đó bạn chỉ có thể bỏ qua nó.
Nhưng nếu bạn làm, sau đó bạn chỉ cần đặt nó ở đó.
Vâng.
Câu hỏi nhanh chóng?
>> ĐỐI TƯỢNG: [nghe được].
>> JOSEPH ONG: Vâng.
Bởi vì những gì bạn cần phải làm, document.ready chỉ nói chờ đợi cho tất cả
HTML trên trang để tải đầu tiên.
Và thông thường, bạn muốn các yếu tố của bạn trước khi bạn chạy mã bất kỳ.
Được rồi.
Chúng tôi có để có được Ajax.
Chúng tôi không có nhiều thời gian.
Vì vậy, ưu và nhược điểm.
JavaScript là thử dễ dàng hơn viết với jQuery.
Nhưng jQuery là loại chậm.
>> Nó giống như PHP là chậm hơn so với C, bởi vì nó giải thích.
Và jQuery là một chút chậm hơn so với JavaScript, bởi vì nó rất nhiều
thứ dưới mui xe.
Và do đó, nếu bạn đang sử dụng jQuery, nó chỉ cần một chút chậm hơn so với
JavaScript, mặc dù nó cung cấp cho bạn đẹp sang trọng.
Và cuối cùng, Ajax.
Cho đến nay với Ajax, bạn không nhìn thấy Ajax về pset7 chưa, bởi vì
khi bạn làm, bạn gửi một hình thức để báo giá.
Nó tải một trang mới.
Vì vậy, bạn sẽ có được flash lớn màu trắng trên trang trong khi đó
tải trang thứ hai, đúng không?
>> Nó sẽ thực sự tốt đẹp nếu bạn không có đèn flash này.
Như Facebook, nếu bạn chỉ cần di chuyển đến phía dưới, nó cho biết thêm nội dung mới
mà không làm mới toàn bộ trang.
Vì vậy, một cái gì đó như thế này sẽ được tốt đẹp.
Đây là mã JavaScript ở phía bên trái.
Bạn sẽ có được những gì bên trong của đầu vào.
Bạn sẽ có được các thông tin chứng khoán từ Yahoo!
Và sau đó bạn thực hiện một chuỗi lớn nói, OK, đây là thông điệp mà tôi muốn
hiển thị trên màn hình.
Và sau đó bạn đưa tin rằng bên trong của một số phần tử HTML mà được
hiển thị trên màn hình.
>> Vì vậy, đó là tất cả những gì xảy ra ở đây.
Vì vậy, về cơ bản, bởi vì đây là tất cả JavaScript và bạn không cần phải chạy
nữa PHP, điều này sẽ đảm bảo rằng trang này không làm mới.
Vì vậy, đây chỉ là một ý tưởng trừu tượng mà tôi đang nói ở đây bây giờ.
Ý tưởng trừu tượng là nếu bạn làm điều đó tất cả trong JavaScript, bạn không có một
làm mới trang.
Nhưng làm thế nào để bạn thực sự làm được điều này?
>> Vâng, thực sự, chúng ta hãy nói về một vấn đề với điều này đầu tiên.
Một vấn đề là trong JavaScript, thực hiện được đồng bộ.
Vì vậy, bạn phải chờ đợi cho một dòng để kết thúc trước khi bạn
thực thi các dòng tiếp theo.
Và những gì nếu tôi đi qua Yahoo!, và các máy chủ của họ là rất chậm, và
nó đưa họ ba giây để cho tôi trở lại những thông tin chứng khoán?
Khi tôi nhấn mà đường giá, nếu thực hiện đồng bộ, vì nó là bằng
Mặc định, những gì nó chỉ cần đi làm là trình duyệt của bạn sẽ đứng cho
ba giây.
Và bạn sẽ không có khả năng làm bất cứ điều gì trong khi nó được dữ liệu đó.
Nó sẽ bị đóng băng.
>> Và đó là xấu.
Bạn không muốn người dùng có một trang web đông lạnh.
Đúng không?
Đó chỉ là xấu.
Tất cả mọi người đồng ý?
Nếu bạn đang duyệt Facebook và nó đóng băng và bạn không thể làm bất cứ điều gì, bạn
nhận được thực sự thất vọng.
Vì vậy, giải pháp là chúng ta làm một cái gì đó không đồng bộ thay thế.
Vì vậy, tất cả điều này không đồng bộ nói được, tôi sẽ yêu cầu này
URL cho một số dữ liệu.
Và sau đó tôi sẽ tiếp tục đi.
Tôi chỉ cần đi để tiếp tục thực hiện bất cứ điều gì mã là sau đó.
>> Và sau đó bất cứ khi nào dữ liệu đã sẵn sàng, sau đó tôi sẽ xử lý nó.
Đó là tất cả nó nói.
>> ĐỐI TƯỢNG: Ajax chỉ làm cho mã không đồng bộ?
>> JOSEPH ONG: Đây là một không đồng bộ cách dữ liệu quyến rũ.
Vì vậy, điều đầu tiên về Ajax là nó cho phép tôi có được dữ liệu
từ một trang web bên ngoài.
Và điều thứ hai là nó đảm bảo mà trang của tôi không đứng trong khi tôi đang
lấy dữ liệu đó.
Đó là một phần không đồng bộ của nó.
Bởi vì nó sẽ tắt ở một nơi khác, bởi vì tôi nói rằng tôi tiếp tục đi vào trong khi
nó lấy dữ liệu đó, mà làm cho nó không đồng bộ.
Tôi tiếp tục thực hiện.
>> Vì vậy, giữ không đồng bộ mà ý tưởng trong tâm trí.
Và tôi sẽ chỉ cho bạn những gì sự khác biệt là.
Phiên bản đồng bộ là ở phía bên trái.
Phiên bản không đồng bộ là ở phía bên phải.
Nhìn vào các con số để xem bước tương ứng với những gì
thực hiện ở mỗi dòng.
Ở đó, cảnh báo hiện lên trước tiên.
Vì nhận được thông tin chứng khoán từ Yahoo!
mất ba giây, nó quầy hàng trong ba giây.
Và sau đó nó cảnh báo giá sau ba giây.
>> Vì vậy, bây giờ, đó cảnh báo chương trình tại thời điểm đó -
ba giây in
Và sau đó nó cảnh báo bằng cách sau đó.
Vì vậy, nó chỉ đi từng bước.
Nó giống như những gì các bạn sẽ chấp nhận, đúng không?
Với thực hiện không đồng bộ, bạn cảnh báo đầu tiên.
Sau đó, bạn đi ra đến URL này.
Và bạn nói, tôi sẽ chỉ cần hỏi cho dữ liệu.
Và sau đó tôi sẽ xử lý nó sau này.
Vì vậy, nó ngay lập tức thực hiện các dòng tiếp theo sau khi tôi làm cho điều đó
yêu cầu không đồng bộ.
>> Vì vậy, một 0,001 giây, bạn sẽ thấy cảnh báo hi.
Thực hiện chức năng đó, tạm biệt cảnh báo.
Và bởi vì tôi đã hứa rằng tôi sẽ xử lý dữ liệu sau đó, những gì
xảy ra là khi dữ liệu trở lại ba giây sau, sau đó tôi chạy mà
chức năng mà tôi có ở đó.
Có?
>> ĐỐI TƯỢNG: bạn có thể chỉ định hoặc làm rõ những gì Ajax có nghĩa là?
>> JOSEPH ONG: Vậy Ajax là một cách mà nếu tôi cần dữ liệu khi tôi đang trên một trang web và tôi
không muốn làm mới trang, sau đó Tôi sử dụng công nghệ này được gọi là Ajax.
Mà thực chất chỉ có nghĩa là, đi lấy dữ liệu từ một trang web khác.
Và làm điều đó trong một cách mà chỉ không đứng trang web của tôi.
>> ĐỐI TƯỢNG: Vì vậy, là một cố hữu một phần của JavaScript hoặc jQuery?
>> JOSEPH ONG: Vì vậy, ai đó đã viết một cách để làm này trong JavaScript một thời gian dài trước đây.
Tại một thời điểm, nó không tồn tại.
Và do đó người phát minh ra kỹ thuật này cho phép mọi người để yêu cầu dữ liệu này
trong thời trang này.
Và họ đã viết một số công cụ để làm điều đó cho bạn.
Và jQuery chỉ cung cấp cho bạn này cách rất tốt đẹp để làm điều đó
với $ này. có chức năng.
câu hỏi?
Tôi có thể trả lời các câu hỏi về Ajax sau đó quá.
Tôi sẽ ở đây.
>> Vì vậy, nó cho phép của chúng tôi lấy dữ liệu mà không cần làm mới trang.
Và nó cho phép của chúng tôi làm điều này trong một cách không đồng bộ mà
không đóng băng trang.
Quá dài, không đọc nếu đó giải thích quá dài cho bạn.
Vì vậy, cuối cùng, cross-site tấn công kịch bản.
Chúng ta đã thấy điều này với Zamyla.
Nếu trong cơ sở dữ liệu của tôi một người nào đó có tên này, đó là thẻ này kịch bản, và tôi
có một số mã trên trang của mình rằng bản in ra tên của người dân trong một hàng, hoặc tôi có
một số mã JavaScript mà chèn tên này vào trang,
những gì HTML được sản xuất?
Vâng, tôi in ra các thẻ HTML.
Tôi in ra tất cả các thẻ.
>> Tôi nhận được để một phần nơi tôi in bạn bè.
Tôi in Lauren ra.
Nó in Milo ra.
Và sau đó tên của tôi trong cơ sở dữ liệu là kịch bản bài
không tốt tình trạng Facebook.
Bởi vì tôi chèn này vào trang bởi vì nó trông giống như JavaScript, khi
Trang này được gửi đến người sử dụng, nó được thực hiện như JavaScript.
Và vì vậy đây là những gì chúng ta gọi là tấn công cross-site scripting.
Ai đó đặt thông tin độc hại trong cơ sở dữ liệu của bạn có thể tương ứng với
một số chuỗi bổ sung hoặc một số chuỗi JavaScript.
>> Và khi nó được in ra với trang trong thời trang này, sau đó những gì
xảy ra là mã xấu được thi hành mà tôi không có ý định
cho nó để được thực thi.
Và đó là tất cả một cross-site tấn công kịch bản là.
Và cách bạn có được xung quanh đây là như Zamyla nói.
Bạn chỉ cần quấn những thứ trong HTML ký tự đặc biệt.
Và điều này HTML ký tự đặc biệt là một PHP chức năng mà sẽ ngăn chặn loại này
điều này xảy ra với bạn nếu bạn có một độc hại
chuỗi trong cơ sở dữ liệu của bạn.
Nó chỉ cần thoát nó, để nó không được hiểu là HTML.
Nó thay thế các dấu ngoặc nhỏ với những gì chúng ta gọi là các thực thể.
Và chúng tôi đã giới này trong bài giảng quá.
Vì vậy, tôi nghĩ các bạn nên có một nắm bắt tốt về điều đó.
Câu hỏi?
Vâng.
>> ĐỐI TƯỢNG: Vậy làm thế nào sẽ các [nghe được]?
>> JOSEPH ONG: Nói rằng một lần nữa.
>> ĐỐI TƯỢNG: Làm thế nào sẽ giám sát -
>> JOSEPH ONG: Đúng vậy.
Vì vậy, bạn có cái gì mà nói, khi Tôi đăng ký, nhập vào tên của tôi.
Tôi chỉ cần gõ trong lĩnh vực đó, tên của tôi là stript bài không tốt Facebook
tình trạng thẻ script gần.
Và chỉ được đưa vào cơ sở dữ liệu, bởi vì tôi không thể nói một người nào đó
trên thế giới không có tên với một mũi tên trái trong nó hoặc
kịch bản từ trong đó.
Điều đó không thực sự có ý nghĩa.
Vì vậy, tôi chỉ cần phải chắc chắn rằng tôi vệ sinh những thứ trước khi tôi in
ra trang.
>> ĐỐI TƯỢNG: Vì vậy, các thẻ HTML đặc biệt ngăn chặn các thẻ script?
>> JOSEPH ONG: Vâng.
Vì vậy, nó không ngăn cản các thẻ script.
Nó chỉ làm cho chắc chắn rằng các thẻ script không nhận được
giải thích như HTML hoặc -
yeah.
Nó chỉ đi lên như những gì nó thực sự là.
Được rồi.
Vì vậy, đó là xem xét lại bài kiểm tra.
Mát mẻ.
>> [Vỗ tay]