1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [Week 9] 2 00:00:02,570 --> 00:00:04,740 [David J. Malan - Universiti Harvard] 3 00:00:04,740 --> 00:00:07,170 [Ini adalah CS50. - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 Semua hak. Selamat kembali. Ini adalah CS50, dan ini adalah permulaan sebanyak 9 minggu. 5 00:00:12,350 --> 00:00:16,600 Hari ini kita memberi tumpuan khususnya pada reka bentuk, tidak lagi dalam konteks C 6 00:00:16,600 --> 00:00:20,010 tetapi dalam konteks PHP dan sedikit SQL dan sedikit JavaScript, 7 00:00:20,010 --> 00:00:23,730 terutamanya ke arah akhir kedua-dua pset 7 dan juga projek akhir anda. 8 00:00:23,730 --> 00:00:26,310 Malah, jika anda berada di titik itu dalam projek akhir anda 9 00:00:26,310 --> 00:00:30,100 mana mungkin seperti satu jam atau lebih yang lalu anda sekurang-kurangnya mula memberikan beberapa pemikiran 10 00:00:30,100 --> 00:00:33,730 projek akhir anda dan anda berfikir anda ingin bekerjasama dengan 1 atau 2 rakan sekelas, 11 00:00:33,730 --> 00:00:36,150 jika anda mempunyai masalah menyambung dengan berkata rakan sekelas, 12 00:00:36,150 --> 00:00:40,570 berasa bebas untuk mengisi borang di cs50.net/partners/form. 13 00:00:40,570 --> 00:00:42,880 Ia hanya meminta anda siapa anda, apa jenis projek anda memikirkan, 14 00:00:42,880 --> 00:00:44,870 di mana anda tinggal hanya atas sebab-sebab logistik. 15 00:00:44,870 --> 00:00:49,510 Dan kemudian jika anda mahu untuk memerhatikan pada sepanjang minggu depan atau jadi URL spreadsheet di situ, 16 00:00:49,510 --> 00:00:53,520 maka anda boleh melihat versi baca sahaja doc Google 17 00:00:53,520 --> 00:00:56,010 di mana kami mengumpul maklumat tersebut. 18 00:00:56,010 --> 00:00:58,930 Jadi jika anda mahu bekerja dengan seseorang, dengan cara semua berasa bebas untuk mendekati rakyat 19 00:00:58,930 --> 00:01:00,480 melalui mekanisme itu. 20 00:01:00,480 --> 00:01:02,690 Tetapi majoriti orang melakukan kerja solo. Itu betul-betul halus. 21 00:01:02,690 --> 00:01:06,120 Jadi tidak merasakan bahawa ini adalah dalam apa jua cara wajib. 22 00:01:06,120 --> 00:01:09,680 Pada hari Jumaat ia hanya saya dan beberapa pasukan di sini, 23 00:01:09,680 --> 00:01:11,100 teater kosong untuk sebahagian besar. 24 00:01:11,100 --> 00:01:14,600 Terdapat 3 pelancong duduk di sana, jadi yang agak janggal. 25 00:01:14,600 --> 00:01:18,970 Apa yang kita bercakap tentang adalah pangkalan data dan kita bercakap tentang pset 7 sedikit. 26 00:01:18,970 --> 00:01:22,200 Dan jika anda tidak berlaku untuk menangkap bahawa pada video sahaja lagi, yang halus. 27 00:01:22,200 --> 00:01:26,770 Saya akan cuba untuk menentukan apa-apa terma yang kita sebaliknya akan mengambil untuk diberikan 28 00:01:26,770 --> 00:01:28,840 berdasarkan kuliah Jumaat. 29 00:01:28,840 --> 00:01:32,550 >> Tetapi hari ini kita akan cuba untuk mendapatkan anda ke titik 30 00:01:32,550 --> 00:01:34,990 bukan hanya dapat melakukan sesuatu seperti pset 7 31 00:01:34,990 --> 00:01:37,360 tetapi benar-benar memahami apa yang berlaku di bawah hood, 32 00:01:37,360 --> 00:01:41,910 terutamanya beberapa abstrak bahawa kita meletakkan di tempat dalam fail functions.php 33 00:01:41,910 --> 00:01:45,780 untuk membuat hidup anda sedikit lebih mudah tetapi supaya anda akhirnya memahami 34 00:01:45,780 --> 00:01:48,760 supaya apabila roda latihan datang dalam beberapa minggu anda masih boleh hidup 35 00:01:48,760 --> 00:01:53,750 dalam dunia sebenar dan melakukan barangan ini tanpa rangka kerja mana-mana CS50 bawahnya anda. 36 00:01:53,750 --> 00:01:57,500 Ini _SESSION $, bagi mereka yang biasa 37 00:01:57,500 --> 00:02:01,960 atau yang sudah ditangkap video pada hari Jumaat, apakah SESI marilah kita lakukan 38 00:02:01,960 --> 00:02:04,330 dalam aplikasi PHP berasaskan web? 39 00:02:04,330 --> 00:02:09,650 Ini adalah pembolehubah Superglobal, yang bermakna ia adalah serupa dalam semangat untuk GET dan POST 40 00:02:09,650 --> 00:02:13,970 dan beberapa yang lain, tetapi apa yang perkara ini berguna? 41 00:02:13,970 --> 00:02:18,320 >> Apakah SESI digunakan untuk? Yeah. [Pelajar] Pembalakan masuk 42 00:02:18,320 --> 00:02:21,040 Maaf? [Pelajar] Pembalakan masuk Pembalakan masuk Sesungguhnya. 43 00:02:21,040 --> 00:02:25,100 Dalam pset 7 kita menggunakan Superglobal SESI untuk memudahkan log masuk 44 00:02:25,100 --> 00:02:28,600 Dan apa yang bagus tentang Superglobal ini adalah bahawa ia adalah satu array bersekutu. 45 00:02:28,600 --> 00:02:33,190 Array bersekutu, ingat, hanya pelbagai tetapi mempunyai tidak lagi yang indeks untuk menjadi nombor 46 00:02:33,190 --> 00:02:37,670 seperti 012. Mereka boleh menjadi nombor atau mereka boleh menjadi lebih rentetan. 47 00:02:37,670 --> 00:02:44,890 Dan sebagainya jika anda menyelam ke dalam pset 7 lagi, anda mungkin ingat bahawa kita menyimpan ID utama dipanggil 48 00:02:44,890 --> 00:02:50,330 di dalam array ini bersekutu yang nilai adalah sesuatu seperti 123 - 49 00:02:50,330 --> 00:02:53,780 apa dilog masuk ID pengguna. 50 00:02:53,780 --> 00:02:59,470 Motivasi untuk ini adalah bahawa walaupun selepas pengguna telah melawat localhost 51 00:02:59,470 --> 00:03:02,720 atau laman web saya lebih amnya dan kemudian mereka telah log masuk, 52 00:03:02,720 --> 00:03:07,320 walaupun mereka tidak klik link atau kembali ke laman web saya selama 5 minit 53 00:03:07,320 --> 00:03:10,730 atau walaupun sejam atau walaupun sehari tetapi mereka meninggalkan tetingkap pelayar mereka terbuka, 54 00:03:10,730 --> 00:03:14,370 melalui Superglobal ini saya boleh ingat bahawa mereka log masuk 55 00:03:14,370 --> 00:03:21,140 >> Dalam erti kata lain, ia membolehkan saya untuk menyimpan apa-apa sedikit jangka panjang saya mahu tentang pengguna. 56 00:03:21,140 --> 00:03:24,390 Dan anda boleh berfikir ia benar-benar sebagai penjelmaan shopping cart. 57 00:03:24,390 --> 00:03:27,740 Tempat seperti Amazon jelas membolehkan anda meletakkan perkara-perkara ke dalam troli membeli-belah, 58 00:03:27,740 --> 00:03:32,230 tetapi HTTP, protokol bahawa kuasa Web, adalah bernegara 59 00:03:32,230 --> 00:03:34,230 dalam erti kata bahawa apabila anda melawat laman web, 60 00:03:34,230 --> 00:03:37,290 bagi sebahagian besar anda tidak mempunyai beberapa sambungan rangkaian malar 61 00:03:37,290 --> 00:03:39,270 antara pelayar anda dan pelayan. 62 00:03:39,270 --> 00:03:42,190 Sebaik sahaja anda telah turun HTML dan JPEG dan GIF dan semua itu, 63 00:03:42,190 --> 00:03:48,200 sambungan hilang dan anda hanya mempunyai salinan HTML dan barang kecil dari pelayan. 64 00:03:48,200 --> 00:03:53,000 Tetapi jika pelayan mahu ingat sesuatu tentang anda, 65 00:03:53,000 --> 00:03:57,580 beban pada pelayan sebenarnya merekodkan maklumat itu. 66 00:03:57,580 --> 00:04:00,130 Dan supaya anda pengaturcara yang mempunyai kawalan ke atas pelayan 67 00:04:00,130 --> 00:04:04,400 boleh meletakkan apa-apa yang paling anda mahu di dalam array ini bersekutu Superglobal 68 00:04:04,400 --> 00:04:06,850 dan ia akan berada di sana masa depan pengguna datang kembali, 69 00:04:06,850 --> 00:04:12,070 sama ada minit atau walaupun hari kemudian, melainkan mereka menutup tetingkap pelayar mereka, 70 00:04:12,070 --> 00:04:14,360 di mana SESI titik hilang. 71 00:04:14,360 --> 00:04:17,779 Jadi ia adalah simpanan tidak kekal, ia adalah non-persistent, dan ia bertujuan untuk pergi 72 00:04:17,779 --> 00:04:22,360 secepat pengguna menutup pelayar mereka - tidak hanya bahawa tab, sering pelayar keseluruhan, 73 00:04:22,360 --> 00:04:24,930 sekali gus berkesan pembalakan pengguna. 74 00:04:24,930 --> 00:04:28,000 Jadi bagaimana perkara ini sebenarnya dilaksanakan? 75 00:04:28,000 --> 00:04:31,360 Mari kita lihat cepat di satu contoh mudah kita melihat pada hari Jumaat. 76 00:04:31,360 --> 00:04:33,340 Bagi mereka yang tidak biasa, ia adalah semudah ini. 77 00:04:33,340 --> 00:04:35,910 Ini adalah satu laman web yang tunggal tujuan dalam kehidupan adalah untuk memberitahu saya 78 00:04:35,910 --> 00:04:38,000 berapa kali saya telah melawat halaman ini. 79 00:04:38,000 --> 00:04:41,670 Ini adalah kali pertama di sini pada hari Isnin bahawa saya melawat, jadi ia mengatakan 0 times. 80 00:04:41,670 --> 00:04:46,940 >> Tetapi jika saya mula muatkan semula halaman ini, ia mengatakan 1 kali, 2, 3, 4, 5, 81 00:04:46,940 --> 00:04:49,800 dan ini akan akhirnya hanya menyimpan pada membilang sehingga, up, up, up, up 82 00:04:49,800 --> 00:04:53,130 bagi setiap kali saya sebenarnya klik Reload di atasnya. 83 00:04:53,130 --> 00:04:58,830 Jadi bagaimana ini bekerja? Biar saya pergi di dalam fail ini dipanggil counter.php. 84 00:04:58,830 --> 00:05:02,490 Bahagian atas ia adalah semua komen biru, tetapi bahagian yang menarik di sini. 85 00:05:02,490 --> 00:05:06,670 Pada 13 baris kita panggil ini session_start fungsi, 86 00:05:06,670 --> 00:05:09,600 dan itu adalah benar-benar semua yang anda perlu lakukan jika anda mahu mempunyai akses 87 00:05:09,600 --> 00:05:13,610 ini Superglobal khas dipanggil $ _SESSION. 88 00:05:13,610 --> 00:05:17,430 Yang menjadikan ia semua mungkin, dan kita akan melihat dalam seketika bagaimana itu semua mungkin. 89 00:05:17,430 --> 00:05:20,350 Dalam talian notis 16 apa yang saya lakukan. 90 00:05:20,350 --> 00:05:25,960 Jika kunci, dipanggil kaunter - dalam erti kata lain, nilai indeks - "kaunter" 91 00:05:25,960 --> 00:05:32,310 wujud dalam pelbagai ini dipanggil SESI, maka apa yang saya lakukan dengan ia dalam baris bawah? 92 00:05:32,310 --> 00:05:36,650 Apakah line 18 melakukan? 93 00:05:36,650 --> 00:05:40,360 >> [Sambutan pelajar didengar] Apa itu? [Pelajar] Menyimpan nilai. Baik. 94 00:05:40,360 --> 00:05:45,800 Ia menyimpan nilai yang dalam SESI sekarang dalam pembolehubah baru sementara tempatan, 95 00:05:45,800 --> 00:05:48,250 $ Kaunter dalam huruf kecil semua. 96 00:05:48,250 --> 00:05:50,770 Notis bahawa PHP sudah menjadi sedikit malas di sini. 97 00:05:50,770 --> 00:05:55,550 Notis kita tidak mempunyai apa-apa sebutan int atau float atau tali atau apa-apa seperti yang 98 00:05:55,550 --> 00:06:00,480 kerana PHP adalah lemah ditaip, di mana anda tidak perlu untuk menentukan jenis pembolehubah, 99 00:06:00,480 --> 00:06:03,310 dan dalam kes ini di sini saya telah tidak diisytiharkan lagi. 100 00:06:03,310 --> 00:06:08,980 Saya mengisytiharkan ia di dalam ini pendakap kerinting dan tidak seperti C, ini adalah sebenarnya okay. 101 00:06:08,980 --> 00:06:13,800 Tidak kira berapa mendalam bersarang pengisytiharan pembolehubah adalah dalam PHP - 102 00:06:13,800 --> 00:06:16,650 dalam pendakap, kerinting dalam pendakap kerinting dan sebagainya - 103 00:06:16,650 --> 00:06:21,230 ia akan pada ketika itu dalam masa wujud bagi baki program, 104 00:06:21,230 --> 00:06:22,680 bagi yang lebih baik atau untuk lebih teruk. 105 00:06:22,680 --> 00:06:26,930 Jadi ia segera menjadi global secepat anda menentukan ia seperti yang kita lakukan di sini. 106 00:06:26,930 --> 00:06:31,620 >> Jika tidak, jika saya tidak mendapati bahawa ada apa-apa dalam Superglobal SESI, 107 00:06:31,620 --> 00:06:34,680 Saya nampaknya Memulakan ini kounter pembolehubah kepada 0, 108 00:06:34,680 --> 00:06:37,580 sekali gus hanya menganggap pengguna telah tidak pernah hadir sebelum. 109 00:06:37,580 --> 00:06:40,030 Dan maka ini sudah tentu incrementing kaunter bagaimana? 110 00:06:40,030 --> 00:06:44,480 Saya mengemaskini nilai yang di dalam array ini bersekutu 111 00:06:44,480 --> 00:06:49,530 dengan menetapkan ia sama dengan apa jua kaunter kini + 1. 112 00:06:49,530 --> 00:06:53,520 Jika saya tatal ke bawah di sini untuk HTML halaman, ia sebenarnya agak mudah. 113 00:06:53,520 --> 00:06:58,920 Saya mempunyai dalam badan halaman ini, "Anda telah melawat laman ini kali jadi-dan-jadi." 114 00:06:58,920 --> 00:07:00,350 Dan ini adalah membina PHP. 115 00:07:00,350 --> 00:07:06,080 Jika anda lakukan 00:07:12,600 Ia adalah benar-benar bersamaan dengan sesuatu seperti printf, yang kita telah melihat banyak kali dalam C, 117 00:07:12,600 --> 00:07:15,940 walaupun kerana anda mungkin sudah tahu dari spec di pset 7, 118 00:07:15,940 --> 00:07:20,160 cetak adalah juga fungsi yang hanya mencetak sesuatu keluar, ia tidak benar-benar menggunakan kod format, 119 00:07:20,160 --> 00:07:23,270 dan anda sebenarnya boleh mengatakan gema serta. 120 00:07:23,270 --> 00:07:27,460 Mereka semua pernah jadi sedikit berbeza walaupun kesan bersih adalah akhirnya sama. 121 00:07:27,460 --> 00:07:31,270 Jadi ini penggunaan tanda sama adalah hanya jenis cara yang elegan melakukannya 122 00:07:31,270 --> 00:07:34,910 lebih ringkas daripada anda sebaliknya mungkin dapat. 123 00:07:34,910 --> 00:07:38,370 Jadi itulah semua laman ini tidak. Ia mencetak nilai kaunter. 124 00:07:38,370 --> 00:07:40,550 Bagaimana ini semua sebenarnya berlaku? 125 00:07:40,550 --> 00:07:43,250 Anda mungkin ingat seminggu atau lebih yang lalu, kami mula mencari di bawah hood 126 00:07:43,250 --> 00:07:47,910 bagaimana laman web berfungsi dengan menggunakan tab ini Inspektor. 127 00:07:47,910 --> 00:07:51,900 >> Chrome ini dalam kedua-dua versi Mac, versi Windows, dan juga versi Linux, 128 00:07:51,900 --> 00:07:59,510 dan Firefox dan IE mempunyai mekanisme yang sama di mana anda mempunyai ini penyahpepijat terbina dalam 129 00:07:59,510 --> 00:08:01,400 di dalam pelayar. 130 00:08:01,400 --> 00:08:03,040 Mari kita melihat perkara-perkara berikut. 131 00:08:03,040 --> 00:08:06,960 Kami mempunyai sekumpulan keseluruhan tab di sini, dan ingat bahawa satu terkiri Elemen, 132 00:08:06,960 --> 00:08:10,700 dan tidak kira berapa godawful HTML dan JavaScript adalah dalam halaman, 133 00:08:10,700 --> 00:08:15,710 ingat bahawa dengan tab Elemen anda sebenarnya boleh mengemudi HTML hierarki 134 00:08:15,710 --> 00:08:17,050 dan bagus dan kemas. 135 00:08:17,050 --> 00:08:19,370 Jadi, jika anda cuba untuk belajar dari laman web seperti Google atau Facebook 136 00:08:19,370 --> 00:08:22,370 atau benar-benar mana-mana laman web, menyedari bahawa anda mungkin lebih baik 137 00:08:22,370 --> 00:08:26,360 melihat kod sumber dengan cara ini berbanding untuk melihat sumber mentah, 138 00:08:26,360 --> 00:08:29,580 yang boleh menjadi kucar-kacir, seperti yang kita telah melihat khususnya di laman Google. 139 00:08:29,580 --> 00:08:32,220 Jadi jika saya sebaliknya klik pada tab Network sini, 140 00:08:32,220 --> 00:08:34,830 mari kita lihat apa yang berlaku apabila saya melawat halaman ini. 141 00:08:34,830 --> 00:08:38,669 Pertama izinkan saya mengosongkan cache saya. 142 00:08:38,669 --> 00:08:43,570 Saya akan pergi ke Tetapan dalam Chrome dan kemudian pergi ke Sejarah 143 00:08:43,570 --> 00:08:46,420 dan kemudian Padam semua data yang melayari. 144 00:08:46,420 --> 00:08:48,170 Anda mungkin digunakan untuk melakukan ini untuk tujuan lain, [ketawa] 145 00:08:48,170 --> 00:08:51,990 tetapi apabila ia datang untuk membangunkan laman web, ia sebenarnya berguna - 146 00:08:51,990 --> 00:08:55,980 jika anda ketawa anda tahu. [Ketawa] 147 00:08:55,980 --> 00:08:59,310 Ia sebenarnya benar-benar berguna apabila membangunkan laman web kerana realitinya adalah 148 00:08:59,310 --> 00:09:04,100 perkara-perkara seperti cookies dan perkara-perkara seperti HTML fail cache, cache fail JavaScript 149 00:09:04,100 --> 00:09:06,390 sebenarnya boleh menjadi sakit kepala besar, kerana jika atas apa jua sebab 150 00:09:06,390 --> 00:09:11,500 pelayar memutuskan untuk cache fail beberapa dan lagi anda telah membuat perubahan kepada fail tersebut pada pelayan 151 00:09:11,500 --> 00:09:14,670 tetapi pelayar tidak benar-benar menyedari bahawa fail telah berubah 152 00:09:14,670 --> 00:09:19,060 dan oleh itu tidak sebenarnya semula muat turun walaupun apabila anda klik butang Reload, 153 00:09:19,060 --> 00:09:23,210 salah satu cara yang paling surefire untuk hanya pastikan kesalahan tidak adalah dengan kod anda, 154 00:09:23,210 --> 00:09:26,480 ia adalah dengan tingkah laku pelayar, adalah untuk pergi di sini dalam pelayar anda 155 00:09:26,480 --> 00:09:29,950 dan hanya mengosongkan keseluruhan sejarah supaya terdapat kekeliruan tidak. 156 00:09:29,950 --> 00:09:33,210 >> Dan kemudian jika anda benar-benar mahu menjadi paranoid, berhenti pelayar, mulakan semula, 157 00:09:33,210 --> 00:09:35,660 dan kemudian pastikan semua bekerja seperti yang diharapkan. 158 00:09:35,660 --> 00:09:38,820 Jadi dalam jangka pendek, cache penjelasan adalah baik apabila melakukan pembangunan. 159 00:09:38,820 --> 00:09:40,690 Jadi di sini kita mempunyai tab Network. 160 00:09:40,690 --> 00:09:46,020 Saya sebelum ini telah melawat tapak 9 kali, tetapi biarlah saya pergi ke hadapan sekarang dan klik Reload. 161 00:09:46,020 --> 00:09:47,500 Dan saya kembali ke 0. 162 00:09:47,500 --> 00:09:52,100 Mari kita sebenarnya melihat bagaimana ia bahawa ini Superglobal SESI sedang dilaksanakan. 163 00:09:52,100 --> 00:09:55,990 Saya akan klik pada permintaan 1 HTTP yang telah dibuat, 164 00:09:55,990 --> 00:09:58,810 dan tetingkap ini debugging membolehkan saya melihat di dalam itu. 165 00:09:58,810 --> 00:10:01,970 Di sini saya melihat hanya respons dari pelayan, yang tidak menarik. 166 00:10:01,970 --> 00:10:04,030 Saya telah melihat ini dalam apa-apa bilangan cara. 167 00:10:04,030 --> 00:10:06,350 Tetapi apa yang teknikal yang menarik adalah pengepala. 168 00:10:06,350 --> 00:10:11,770 Jika saya tatal ke bawah di sini dan memberi tumpuan kepada tajuk permintaan dan klik sumber pandangan, 169 00:10:11,770 --> 00:10:14,400 apa yang saya akan melihat adalah benar-benar permintaan HTTP 170 00:10:14,400 --> 00:10:17,250 yang hanya pergi dari pelayar saya untuk pelayan, 171 00:10:17,250 --> 00:10:21,400 GET menjadi perkataan pembedahan dan kemudian / counter.php menjadi nama fail, 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1 hanya menjadi versi HTTP bahawa pelayar saya menggunakan. 173 00:10:25,670 --> 00:10:31,070 Ini sejajar di sini adalah satu peringatan sedikit dari pelayar ke pelayan apa nama pelayan 174 00:10:31,070 --> 00:10:33,020 bahawa ia mahu bercakap dengan. 175 00:10:33,020 --> 00:10:38,200 Dan kemudian selebihnya ini adalah kadang-kadang menarik tetapi tidak relevan sekarang. 176 00:10:38,200 --> 00:10:40,090 >> Ini adalah hanya jenis rasa ingin tahu. 177 00:10:40,090 --> 00:10:43,530 Samar walaupun rentetan ini, bila-bila masa pelayar anda melawat laman web 178 00:10:43,530 --> 00:10:47,110 ia memberitahu pelayan pelayar apa yang anda gunakan 179 00:10:47,110 --> 00:10:50,040 dan apa yang sistem operasi anda menggunakan dan apakah versi daripadanya. 180 00:10:50,040 --> 00:10:52,650 Jadi jika anda pernah tertanya-tanya bagaimana laman web seperti CNN dan barang kecil 181 00:10:52,650 --> 00:10:56,860 tahu apa peratusan adalah pengguna Mac kepada pengguna Web PC,, 182 00:10:56,860 --> 00:11:00,820 IE pengguna, pengguna Chrome dan sebagainya, ia adalah kerana semua pelayar kami 183 00:11:00,820 --> 00:11:04,300 memberitahu setiap laman web tunggal di luar sana apa yang kita. 184 00:11:04,300 --> 00:11:07,410 Ia tidak semestinya mengandungi maklumat peribadi, 185 00:11:07,410 --> 00:11:13,060 tetapi ia tidak memberitahu pelayan apa yang alamat IP anda dan apa yang pelayar dan OS anda menggunakan. 186 00:11:13,060 --> 00:11:14,720 Jadi itulah di mana maklumat ini. 187 00:11:14,720 --> 00:11:19,960 Tetapi apa yang lebih menarik sekarang apabila ia datang untuk sesi ini adalah tajuk tindak balas. 188 00:11:19,960 --> 00:11:22,530 Biar saya klik melihat sumber sebelah respons. 189 00:11:22,530 --> 00:11:24,590 Apa yang menarik di sini adalah beberapa perkara. 190 00:11:24,590 --> 00:11:27,580 1, kita mendapat kembali kod status 200. 191 00:11:27,580 --> 00:11:29,840 Kami tidak pernah melihat status kod ini kerana itu bererti semuanya berjalan dengan lancar. 192 00:11:29,840 --> 00:11:32,920 Ia bermaksud secara literal okay berbeza kepada sesuatu yang lain. 193 00:11:32,920 --> 00:11:36,380 Apakah nombor yang kadang-kadang kita melihat yang buruk? [Pelajar] 404. 194 00:11:36,380 --> 00:11:39,860 404, fail tidak dijumpai, 403 anda mungkin penghalang kepada sudah, 195 00:11:39,860 --> 00:11:43,660 yang dilarang, yang bermakna anda terlupa sesuatu chmod, kemungkinan besar. 196 00:11:43,660 --> 00:11:45,190 Dan ada sekumpulan orang lain. 197 00:11:45,190 --> 00:11:47,760 >> Turun di sini, ini adalah sedikit gila. 198 00:11:47,760 --> 00:11:52,340 Saya benar-benar hanya menulis fail ini beberapa minit yang lalu melalui tampal ke dalam gedit. 199 00:11:52,340 --> 00:11:57,100 Mengapa halaman ini tamat pada tahun 1981 sebelum ada benar-benar adalah web? 200 00:11:58,010 --> 00:12:00,730 Apa yang berlaku di sana? 201 00:12:00,730 --> 00:12:04,390 >> [Pelajar tindak balas didengar] setem masa. Tetapi mengapa? 202 00:12:06,110 --> 00:12:09,120 Ia agak sewenang-wenangnya, tetapi ia sebenarnya berguna. 203 00:12:09,120 --> 00:12:15,500 Apakah ini mengatakan kepada pelayar saya adalah fail PHP anda hanya diminta telah tamat tempoh. 204 00:12:15,500 --> 00:12:18,580 Malah, ia tamat 30 tahun lalu. 205 00:12:18,580 --> 00:12:20,260 Tetapi apakah yang benar-benar bermakna? 206 00:12:20,260 --> 00:12:22,500 Ia hanya bermakna masa depan pengguna melawat halaman ini, 207 00:12:22,500 --> 00:12:25,540 sama ada dengan memuatkan semula atau menaip URL di bar alamat, 208 00:12:25,540 --> 00:12:28,010 pastikan anda pergi mengambil salinan baru. 209 00:12:28,010 --> 00:12:30,840 Ini adalah jenis contoh busting cache, 210 00:12:30,840 --> 00:12:33,790 perkataan bodoh yang hanya bermakna cuba untuk tidak menggalakkan pelayar 211 00:12:33,790 --> 00:12:37,260 dari HTML sebenarnya caching yang telah dihantar dari pelayan 212 00:12:37,260 --> 00:12:41,490 supaya anda tidak sengaja memukul reload dan kemudian melihat versi yang sama fail. 213 00:12:41,490 --> 00:12:43,730 Anda sebenarnya mahu pelayan untuk menghantar satu salinan baru. 214 00:12:43,730 --> 00:12:47,440 Jadi hakikat bahawa ia adalah 1981 hanya bermakna bahawa apa perkakas memilih 215 00:12:47,440 --> 00:12:50,280 sebagai tarikh sembarangan pada masa lalu. 216 00:12:50,280 --> 00:12:53,380 Tetapi garis berair sebenar kini merupakan salah ini. 217 00:12:53,380 --> 00:12:57,550 Malah sebelum 50 anda mungkin samar-samar biasa dengan cookies. 218 00:12:57,550 --> 00:13:01,820 Sehingga sekarang, terutama di kalangan mereka yang kurang selesa atau di antara, 219 00:13:01,820 --> 00:13:04,120 apakah cookies dalam pemahaman anda sekarang 220 00:13:04,120 --> 00:13:06,980 walaupun kita berada kira-kira untuk membuat pemahaman anda lebih teknikal? 221 00:13:08,150 --> 00:13:10,070 Apa cookie? Yeah. 222 00:13:10,070 --> 00:13:13,890 [Pelajar] Maklumat mengenai pengguna, suka jika mereka telah menulis nama pengguna mereka atau sesuatu. 223 00:13:13,890 --> 00:13:17,370 >> Baik. Ia adalah maklumat mengenai pengguna, sama ada mereka telah ditaip dalam nama pengguna mereka sudah. 224 00:13:17,370 --> 00:13:21,190 Cookies adalah satu cara di mana pelayan boleh ingat sesuatu tentang pengguna. 225 00:13:21,190 --> 00:13:25,810 Dan apa cookie benar-benar adalah fail teks atau beberapa jujukan bait 226 00:13:25,810 --> 00:13:28,340 yang ditanam oleh pelayan di dalam pelayar anda, 227 00:13:28,340 --> 00:13:31,960 dan di dalam fail itu atau di kalangan mereka bytes adalah beberapa jenis pengecam. 228 00:13:31,960 --> 00:13:35,640 Mungkin ia adalah benar-benar nama pengguna anda, tetapi lebih kerap ia adalah sesuatu yang lebih samar-cari 229 00:13:35,640 --> 00:13:43,700 seperti perkara ini di sini - bo8dal3ct dan sebagainya - abjad angka benar-benar besar rentetan 230 00:13:43,700 --> 00:13:47,050 yang benar-benar hanya bertujuan untuk menjadi pengecam unik untuk anda. 231 00:13:47,050 --> 00:13:49,790 Atau anda boleh berfikir ia sebagai jenis setem tangan maya. 232 00:13:49,790 --> 00:13:53,020 Jika anda pergi ke beberapa kelab atau taman hiburan, untuk ingat bahawa anda telah benar-benar dibayar 233 00:13:53,020 --> 00:13:55,850 dan pergi, mereka meletakkan pelekat merah sedikit pada tangan anda beberapa jenis, 234 00:13:55,850 --> 00:13:59,270 dan yang mengingatkan rakyat di kaunter bahawa anda telah dibayar 235 00:13:59,270 --> 00:14:01,340 dan anda boleh datang dan pergi sesuka hati anda. 236 00:14:01,340 --> 00:14:04,250 Cookies adalah sedikit sama dalam semangat yang. 237 00:14:04,250 --> 00:14:08,070 Kali pertama saya melawat laman web ini, kerana saya hanya lakukan selepas mengosongkan cache saya, 238 00:14:08,070 --> 00:14:11,620 pelayan web, perkakas dalam kes ini, meletakkan setem pada tangan saya 239 00:14:11,620 --> 00:14:15,030 yang namanya PHPSESSID, sesi ID, 240 00:14:15,030 --> 00:14:18,260 nilainya adalah rentetan ini abjad angka yang benar-benar panjang. 241 00:14:18,260 --> 00:14:22,470 >> Jadi yang kini jenis terpampang di tangan saya supaya masa depan saya memukul reload 242 00:14:22,470 --> 00:14:25,230 atau manual melawat URL ini dalam pelayar, 243 00:14:25,230 --> 00:14:29,230 pelayar saya dengan definisi HTTP akan membentangkan setem tangan 244 00:14:29,230 --> 00:14:31,940 lagi dan lagi dan lagi. 245 00:14:31,940 --> 00:14:34,550 Jadi, walaupun pelayan tidak semestinya tahu siapa saya, 246 00:14:34,550 --> 00:14:39,610 mereka sekurang-kurangnya tahu bahawa saya adalah pengguna yang sama atau sekurang-kurangnya, lebih khusus, pelayar yang sama. 247 00:14:39,610 --> 00:14:45,660 Dan sebagainya ini akhirnya bagaimana Superglobal SESI dilaksanakan. 248 00:14:45,660 --> 00:14:51,200 Pelayan tidak mempunyai idea yang anda apabila anda mengkaji semula laman web untuk kedua atau kali ketiga 249 00:14:51,200 --> 00:14:53,410 melainkan anda sekarang ini setem tangan. 250 00:14:53,410 --> 00:14:55,530 Dan secepat anda hadir setem tangan, 251 00:14:55,530 --> 00:14:59,370 pelayan web dasarnya pergi ke pangkalan data sedikit tersendiri 252 00:14:59,370 --> 00:15:06,040 dan cek, okay, saya baru sahaja melihat setem tangan bo8dal3ct pengguna dan sebagainya. 253 00:15:06,040 --> 00:15:09,850 Biar saya melihat apa maklumat pengaturcara telah disimpan 254 00:15:09,850 --> 00:15:12,380 dalam Superglobal tentang pengguna ini, 255 00:15:12,380 --> 00:15:17,000 dan kemudian membiarkan saya pastikan bahawa data yang sekali lagi dalam SESI yang Superglobal 256 00:15:17,000 --> 00:15:19,830 supaya pengaturcara boleh semula mengakses data 257 00:15:19,830 --> 00:15:23,360 walaupun ia telah menetapkan beberapa minit atau jam yang lalu. 258 00:15:23,360 --> 00:15:26,150 Jadi dalam lain-lain perkataan, cookies, yang mendapat rap buruk untuk beberapa ketika 259 00:15:26,150 --> 00:15:29,990 kerana ketidakyakinan dalam pelayar dan mereka benar-benar boleh melanggar privasi kami dan semua ini, 260 00:15:29,990 --> 00:15:31,900 mereka sebenarnya mempunyai utiliti besar kerana tanpa mereka 261 00:15:31,900 --> 00:15:36,110 anda sentiasa akan log masuk ke laman Facebook setiap kali anda melawat 262 00:15:36,110 --> 00:15:40,680 atau setiap email Gmail anda membaca jika pelayar tidak mempunyai beberapa cara mengingat 263 00:15:40,680 --> 00:15:43,320 bahawa anda telah disahkan. 264 00:15:43,320 --> 00:15:46,640 >> Jadi dengan cara ini kuki dihantar ke belakang dan sebagainya merentasi dawai. 265 00:15:46,640 --> 00:15:52,470 Satu lagi rasa ingin tahu tentang cookies, terutamanya di sini, adalah bahawa ini adalah sepenuhnya dalam cleartext. 266 00:15:52,470 --> 00:15:54,930 Tiada penyulitan berlaku di sini jua, 267 00:15:54,930 --> 00:15:57,240 dan sesungguhnya saya menggunakan HTTP pada masa ini. 268 00:15:57,240 --> 00:16:00,890 Salah satu momen kegemaran kami di CS50, yang kini 2 tahun yang lalu, 269 00:16:00,890 --> 00:16:04,750 telah sekitar masa alat yang dipanggil Firesheep keluar. 270 00:16:04,750 --> 00:16:08,320 Ini adalah sekeping percuma perisian yang telah dibuat oleh penyelidik keselamatan 271 00:16:08,320 --> 00:16:13,250 sebagai panggilan bangun untuk masyarakat untuk mengatakan betapa atrociously dilaksanakan 272 00:16:13,250 --> 00:16:17,900 mekanisme pengesahan tertentu di Web. 273 00:16:17,900 --> 00:16:22,880 Jadi untuk beberapa waktu, Facebook adalah hampir keseluruhannya lebih HTTP, tiada HTTPS. 274 00:16:22,880 --> 00:16:25,640 Dan walaupun anda tidak mempunyai idea bagaimana kripto berfungsi, S adalah selamat 275 00:16:25,640 --> 00:16:27,950 jadi ia bermakna terdapat sekurang-kurangnya beberapa penyulitan yang terlibat. 276 00:16:27,950 --> 00:16:30,610 Facebook tidak digunakan untuk menyulitkan nama pengguna dan kata laluan, 277 00:16:30,610 --> 00:16:33,560 tetapi sebaik sahaja anda melihat anda pokes atau mesej anda atau suapan berita anda, 278 00:16:33,560 --> 00:16:35,360 semua yang tak disulitkan. 279 00:16:35,360 --> 00:16:37,870 Jadi adalah Gmail sehingga hanya setahun atau 2 yang lalu. 280 00:16:37,870 --> 00:16:41,100 Mana-mana masa yang anda log masuk, ya, mereka menggunakan penyulitan selamat, 281 00:16:41,100 --> 00:16:44,300 tetapi selepas itu mereka tidak. Dan mengapa yang mungkin? 282 00:16:44,300 --> 00:16:49,210 Mengapa tidak hanya menggunakan kriptografi semua masa dalam kes-kes penggunaan seperti ini? 283 00:16:49,210 --> 00:16:53,700 Apa itu? Saya fikir saya mendengar sesuatu. [Pelajar] Kelajuan. 284 00:16:53,700 --> 00:16:56,250 Kelajuan, kan? Terdapat cara sekitar ini. 285 00:16:56,250 --> 00:16:59,610 Tetapi jika anda hanya jenis berfikir tentang hal itu secara logiknya, jika anda sulitkan sesuatu, 286 00:16:59,610 --> 00:17:01,820 anda perlu melakukan sekurang-kurangnya kerja lebih sedikit. 287 00:17:01,820 --> 00:17:05,460 Dalam pset 2 apabila anda melaksanakan Caesar atau Vigenere atau malah Crack, 288 00:17:05,460 --> 00:17:07,760 hanya mencetak rentetan adalah agak mudah. 289 00:17:07,760 --> 00:17:12,040 Menyulitkan dan kemudian mencetak rentetan minimum memerlukan kerja sedikit lebih. 290 00:17:12,040 --> 00:17:14,520 >>  Bagi super laman web popular seperti Google dan Facebook, 291 00:17:14,520 --> 00:17:18,839 jika anda perlu melakukan kerja-kerja yang lebih untuk setiap pengguna untuk setiap satu laman web yang mereka lawati, 292 00:17:18,839 --> 00:17:20,520 yang hanya mengambil CPU lebih banyak masa. 293 00:17:20,520 --> 00:17:22,920 Dan jika anda memerlukan lebih banyak masa CPU, anda mungkin perlu lebih banyak pelayan, 294 00:17:22,920 --> 00:17:24,270 yang bermaksud anda mungkin perlu lebih banyak wang. 295 00:17:24,270 --> 00:17:27,579 Dan sebagainya selama bertahun-tahun ini hanya benar-benar tidak adalah amalan terbaik. 296 00:17:27,579 --> 00:17:31,440 Orang ramai akan menggunakan penyulitan SSL hanya apabila mereka diperlukan untuk. 297 00:17:31,440 --> 00:17:34,960 Tetapi ternyata, dan sebagai rakan ini dengan Firesheep dibuat super jelas, 298 00:17:34,960 --> 00:17:37,920 apabila anda lelaki yang kini di Facebook sekarang - 299 00:17:37,920 --> 00:17:39,880 Daripada rasa ingin tahu, mari kita lihat jika anda akan mengaku. 300 00:17:39,880 --> 00:17:42,620 Jika anda berada di Facebook sekarang dalam tab beberapa, walaupun ia tidak foregrounded, 301 00:17:42,620 --> 00:17:46,610 URL anda HTTP atau HTTPS? 302 00:17:46,610 --> 00:17:50,560 [Berbilang pelajar] S. S? [Ketawa] 303 00:17:50,560 --> 00:17:55,510 Okay. Mana-mana HTTP? Hanya 1? Okay. 304 00:17:55,510 --> 00:17:58,940 Jadi kita semua boleh hack akaun Facebook bahawa lelaki sekarang. 305 00:17:58,940 --> 00:18:04,100 Bagi sebahagian besar ini telah menjadi dihidupkan secara lalai, sekurang-kurangnya dalam beberapa laman web. 306 00:18:04,100 --> 00:18:08,120 Dan cerita pendek yang panjang, jika trafik web anda tidak disulitkan, 307 00:18:08,120 --> 00:18:12,960 bukan sahaja HTML pergi ke belakang dan sebagainya di seluruh WiFis tanpa enkrip, 308 00:18:12,960 --> 00:18:16,760 jadi jangan perkara-perkara seperti cookies pergi ke belakang dan sebagainya sepanjang udara 309 00:18:16,760 --> 00:18:18,940 tanpa apa-apa bentuk penyulitan. 310 00:18:18,940 --> 00:18:23,540 Jadi jika anda mempunyai hanya sedikit celik pengaturcaraan atau sedikit kemahiran Googling 311 00:18:23,540 --> 00:18:27,410 untuk mencari perisian percuma yang melakukan ini, semua yang anda perlu lakukan adalah duduk di Starbucks 312 00:18:27,410 --> 00:18:30,680 atau duduk di lapangan terbang di mana ada umumnya tanpa enkrip WiFi 313 00:18:30,680 --> 00:18:36,070 dan hanya menonton untuk kata kunci seperti Set-Cookie: atau PHPSESSID 314 00:18:36,070 --> 00:18:39,300 kerana jika anda mempunyai celik teknikal untuk hanya menonton WiFi 315 00:18:39,300 --> 00:18:43,010 untuk semua bit yang mengalir sepanjang udara untuk corak ini, 316 00:18:43,010 --> 00:18:50,840 maka anda boleh mengatakan bahawa PHPSESSID lelaki itu berlaku untuk menjadi bo8dal dan sebagainya. 317 00:18:50,840 --> 00:18:53,890 Dan kemudian sekali lagi jika anda cukup teknikal celik atau mempunyai alat yang betul, 318 00:18:53,890 --> 00:18:58,890 anda boleh kemudian hanya menyusun semula pelayar anda sendiri untuk memulakan membentangkan setem tangan 319 00:18:58,890 --> 00:19:05,030 Facebook.com, dan Facebook hanya akan menganggap bahawa anda adalah lelaki yang 320 00:19:05,030 --> 00:19:09,880 kerana semua mereka tahu tidak siapa anda tetapi bahawa anda mempunyai pengecam unik ini. 321 00:19:09,880 --> 00:19:14,650 Jadi jika anda mencuri bahawa pengecam unik dan membentangkan kepada pelayan web sebagai anda sendiri, 322 00:19:14,650 --> 00:19:16,860 mereka hanya akan menunjukkan kepada anda berita bahawa orang 323 00:19:16,860 --> 00:19:18,980 atau mesej orang itu atau pokes. 324 00:19:18,980 --> 00:19:23,190 >> Dan saya akan Google sekarang bagaimana untuk mengaktifkan HTTPS Facebook mungkin. 325 00:19:23,190 --> 00:19:25,150 Tetapi ia benar-benar adalah semudah itu. 326 00:19:25,150 --> 00:19:27,660 Dan sebagainya Facebook dan Google dan sebagainya telah mendapat benar-benar baik di ini, 327 00:19:27,660 --> 00:19:31,870 tetapi memerhatikan keluar semua lebih untuk mana-mana laman web yang anda lawati yang tidak menggunakan HTTP 328 00:19:31,870 --> 00:19:35,020 dan mempunyai beberapa jenis maklumat yang sensitif kepada mereka, 329 00:19:35,020 --> 00:19:37,490 sama ada kewangan atau peribadi atau sebagainya. 330 00:19:37,490 --> 00:19:43,180 Jika mereka tidak menggunakan ini, agak mungkin cookies seperti ini boleh menjadi sangat mudah dicuri 331 00:19:43,180 --> 00:19:46,270 dan kemudian dipalsukan, dan itulah apa yang Firesheep lakukan. 332 00:19:46,270 --> 00:19:48,250 Anda tidak perlu untuk menjadi seorang programmer. 333 00:19:48,250 --> 00:19:51,680 Semua yang anda perlu lakukan adalah telah sambungan Internet, memuat turun alat ini percuma, 334 00:19:51,680 --> 00:19:56,490 dan apa yang ia akan lakukan ialah anda log masuk dan kemudian ia akan menunjukkan kepada anda nama Facebook 335 00:19:56,490 --> 00:20:00,170 semua dalam Sanders, dalam demonstrasi ini khususnya, di sekeliling anda 336 00:20:00,170 --> 00:20:03,260 dan semua anda terpaksa lakukan klik pada nama mereka dan perisian automatik proses 337 00:20:03,260 --> 00:20:05,970 menghidu kuki itu, membentangkan kepada Facebook sebagai anda sendiri, 338 00:20:05,970 --> 00:20:07,990 dan Voilà, anda log masuk. 339 00:20:07,990 --> 00:20:11,190 Jadi ini adalah satu lagi salah seorang daripada mereka "tidak melakukan ini" rasmi. 340 00:20:11,190 --> 00:20:14,660 Jika anda mempunyai rangkaian rumah anda sendiri dan anda mahu menggerumit, dengan cara semua, 341 00:20:14,660 --> 00:20:17,530 tetapi sedar ini tidak garisan pada persekitaran universiti. 342 00:20:17,530 --> 00:20:20,030 >> Tetapi matlamat di sini adalah benar-benar untuk menekankan tidak bagaimana untuk melakukan ini 343 00:20:20,030 --> 00:20:22,320 tetapi bagaimana untuk mempertahankan terhadap jenis-jenis perkara. 344 00:20:22,320 --> 00:20:26,180 Dan penyelesaian remeh sini, walaupun ia sendiri adalah cacat, 345 00:20:26,180 --> 00:20:31,360 adalah untuk benar-benar mengurangkan penggunaan mana-mana laman web yang tidak menggunakan HTTPS sentiasa. 346 00:20:31,360 --> 00:20:34,520 Jadi laman web seperti Facebook dan Google semakin mempunyai kotak semak 347 00:20:34,520 --> 00:20:36,200 di mana anda boleh memilih jenis ini perkara, 348 00:20:36,200 --> 00:20:40,000 dan bank-bank telah ini selama bertahun-tahun, atas sebab-sebab yang sama. 349 00:20:40,000 --> 00:20:43,580 Jadi hanya sedikit faktor takut jika kita boleh. Tetapi itulah ia secara ringkas. 350 00:20:43,580 --> 00:20:46,420 Itu adalah bagaimana pelayan ingat siapa anda. 351 00:20:46,420 --> 00:20:50,760 Dan sebaik sahaja mereka boleh ingat siapa anda, mereka boleh ingat apa-apa tentang anda 352 00:20:50,760 --> 00:20:56,140 bahawa pengaturcara telah disimpan di dalam Superglobal ini khas dipanggil $ _SESSION. 353 00:20:56,140 --> 00:20:59,750 Dan untuk pset 7 kita menggunakan ia trivially hanya ingat int, 354 00:20:59,750 --> 00:21:02,260 iaitu ID unik pengguna yang telah log masuk, 355 00:21:02,260 --> 00:21:05,880 supaya kita tahu mereka telah berada di sana sebelum ini. 356 00:21:05,880 --> 00:21:12,450 Sebarang pertanyaan kemudian pada sesi atau cookies atau sebagainya? 357 00:21:12,450 --> 00:21:15,130 Firesheep tidak bekerja serta lagi, 358 00:21:15,130 --> 00:21:18,310 dan anda perlu meletakkan komputer anda ke dalam mod rambang khas 359 00:21:18,310 --> 00:21:20,700 jadi anda sebenarnya mendengar untuk lalu lintas selain dirimu. 360 00:21:20,700 --> 00:21:23,940 Jadi, jika anda sedang memuat turun Firesheep, menyedari ia tidak cukup sebagai mudah 361 00:21:23,940 --> 00:21:26,850 kerana ia sekali adalah untuk menunjukkan. 362 00:21:26,850 --> 00:21:29,070 Semua hak. Dan tidak melakukannya di Sanders. Melakukannya di rumah. 363 00:21:29,070 --> 00:21:30,890 Pangkalan data. 364 00:21:30,890 --> 00:21:33,580 Salah satu perkara yang kita lakukan dalam pset 7 sangat sengaja 365 00:21:33,580 --> 00:21:37,780 telah kita memberikan anda jadual sampel pangkalan data untuk pengguna yang mempunyai beberapa ID, 366 00:21:37,780 --> 00:21:41,020 beberapa nama pengguna, dan beberapa kata laluan disulitkan di dalamnya. 367 00:21:41,020 --> 00:21:44,520 Dan seperti yang anda akan lihat, jika anda tidak sudah, anda akan perlu menukar jadual sedikit. 368 00:21:44,520 --> 00:21:47,710 Anda akan mempunyai untuk menambah cache beberapa setiap pengguna dalam jadual itu, 369 00:21:47,710 --> 00:21:51,130 dan anda akan perlu untuk menambah satu lagi jadual sejarah, jadual portfolio, 370 00:21:51,130 --> 00:21:53,310 atau mungkin memanggil ia sesuatu yang lain. 371 00:21:53,310 --> 00:21:56,740 Tetapi dalam segi berfikir tentang bagaimana untuk melakukan ini, mari kita membuka alat ini 372 00:21:56,740 --> 00:22:00,570 yang kita digunakan pada hari Jumaat, tetapi jika tidak dikenali, perkakas datang dengan alat 373 00:22:00,570 --> 00:22:04,680 phpMyAdmin dipanggil yang kebetulan ditulis dalam PHP, 374 00:22:04,680 --> 00:22:07,950 tetapi tujuan dalam hidup, selepas saya login di sini sebagai jharvard dengan lembayung, 375 00:22:07,950 --> 00:22:15,160 adalah untuk memberi saya satu cara yang mesra pengguna melihat dan mengubah pangkalan data saya. 376 00:22:15,160 --> 00:22:18,040 >> Pangkalan data yang saya berjalan di perkakas dipanggil MySQL. 377 00:22:18,040 --> 00:22:23,420 Ini adalah sangat popular, dan ia adalah pangkalan data sumber bebas terbuka yang hebat mudah untuk digunakan, 378 00:22:23,420 --> 00:22:25,620 terutamanya dengan depan berakhir seperti ini. 379 00:22:25,620 --> 00:22:29,350 Apa alat ini membolehkan saya lakukan, misalnya, adalah mencucuk di sekitar jadual. 380 00:22:29,350 --> 00:22:30,890 Biar saya pergi ke hadapan dan melakukan ini. 381 00:22:30,890 --> 00:22:36,580 Pada hari Jumaat, kami mencipta jadual yang dipanggil pelajar yang mudah super. 382 00:22:36,580 --> 00:22:41,680 Ia mempunyai 3 lajur - id, nama, dan e-mel - dan saya secara manual memasukkan beberapa baris 383 00:22:41,680 --> 00:22:44,420 seperti David dan Mike dalam contoh ini tertentu. 384 00:22:44,420 --> 00:22:47,290 Mari kita ini sedikit lagi, dan mari kita andaikan bahawa kita mahu ingat lebih 385 00:22:47,290 --> 00:22:49,660 daripada hanya nama dan e-mel mengenai pengguna. 386 00:22:49,660 --> 00:22:53,090 Biarkan saya klik Struktur di sini di atas. 387 00:22:53,090 --> 00:22:55,440 Dan sekali lagi, pset berjalan anda melalui langkah-langkah yang diperlukan di sini, 388 00:22:55,440 --> 00:22:58,150 jadi jangan bimbang jika beberapa ini adalah agak cepat. 389 00:22:58,150 --> 00:22:59,690 Kemudian saya akan klik di sini. 390 00:22:59,690 --> 00:23:02,270 Saya akan menambah beberapa nombor selepas e-mel 391 00:23:02,270 --> 00:23:04,130 kerana saya mahu menambah sesuatu seperti rumah. 392 00:23:04,130 --> 00:23:06,640 Saya terlupa untuk merakam rumah pelajar. 393 00:23:06,640 --> 00:23:11,400 Biar saya klik Go, dan kini kita mempunyai borang ini yang malangnya sedikit luas dari kiri ke kanan, 394 00:23:11,400 --> 00:23:13,710 tetapi saya akan untuk memanggil nama rumah bidang ini, 395 00:23:13,710 --> 00:23:16,050 dan kemudian jenis saya kini perlu memilih. 396 00:23:16,050 --> 00:23:18,870 Jadi mari kita berbual ringkas tentang pelbagai jenis di MySQL 397 00:23:18,870 --> 00:23:24,590 kerana manakala PHP adalah ditaip dengan lemah dan ia semacam bermain pantas dan longgar dengan jenis, 398 00:23:24,590 --> 00:23:29,430 dalam pangkalan data terutama ia adalah penting super sebenarnya menggunakan menaip untuk keuntungan anda 399 00:23:29,430 --> 00:23:33,260 kerana salah MySQL perkara dan pangkalan data enjin lain boleh lakukan untuk anda 400 00:23:33,260 --> 00:23:37,910 adalah memastikan bahawa anda tidak meletakkan data palsu ke dalam pangkalan data anda. 401 00:23:37,910 --> 00:23:41,850 Ini adalah jenis bebas ralat memeriksa disediakan untuk anda. 402 00:23:41,850 --> 00:23:46,250 >> Untuk rumah kita jelas tidak mahu ia menjadi int, yang merupakan nilai 32-bit di MySQL. 403 00:23:46,250 --> 00:23:49,810 Kami tidak bercakap secara ringkas pada hari Jumaat kira-kira VARCHAR, yang bermaksud untuk panjang char ubah. 404 00:23:49,810 --> 00:23:54,720 Apakah ini? Ini membolehkan anda untuk menentukan yang anda mahu ini menjadi rentetan beberapa jenis. 405 00:23:54,720 --> 00:23:56,840 Anda tidak benar-benar tahu terlebih dahulu berapa lama ia adalah, 406 00:23:56,840 --> 00:24:00,100 jadi kita sewenang-wenangnya akan mengatakan nama rumah boleh menjadi 255 aksara, 407 00:24:00,100 --> 00:24:04,190 tetapi anda boleh pergi dengan 32, 64 - sebarang nombor benar-benar. 408 00:24:04,190 --> 00:24:10,700 Tetapi kelebihan menggunakan VARCHAR atas bidang yang dipanggil char adalah apa? 409 00:24:10,700 --> 00:24:15,110 Hanya intuitif jika saya tatal ke bawah di sini, notis ada char dan ada VARCHAR. 410 00:24:15,110 --> 00:24:19,520 VARCHAR ialah panjang char ubah; char adalah panjang char tetap. 411 00:24:19,520 --> 00:24:24,730 Jadi hanya berdasarkan takrif itu, apa kelebihan atau kelemahan masing-masing? 412 00:24:24,730 --> 00:24:30,490 Dalam erti kata lain, yang peduli tentang perbezaan, atau mengapa anda perlu penjagaan? 413 00:24:31,660 --> 00:24:35,750 >> Yeah. [Pelajar] VARCHAR mempunyai lebih banyak fleksibiliti tetapi mengambil lebih banyak memori. 414 00:24:35,750 --> 00:24:40,730 Baik. VARCHAR mengambil lebih - Mari kita lihat. Saya tidak pasti jika saya mendengar hak itu. 415 00:24:40,730 --> 00:24:42,360 Anda boleh mengatakan bahawa sekali lagi? 416 00:24:42,360 --> 00:24:45,850 [Pelajar] saya berkata VARCHAR mungkin mempunyai lebih banyak fleksibiliti tetapi ia mengambil lebih banyak memori. 417 00:24:45,850 --> 00:24:51,170 Menarik. Okay. VARCHAR mungkin memberikan anda lebih banyak fleksibiliti tetapi mengambil memori lebih. 418 00:24:51,170 --> 00:24:53,220 Terakhir ini tidak semestinya benar. 419 00:24:53,220 --> 00:24:56,290 Ia bergantung kepada konteks, tetapi mari kita kembali itu. 420 00:24:56,290 --> 00:25:03,230 >> [Pelajar tindak balas didengar] Tepat sekali. 421 00:25:03,230 --> 00:25:06,900 Ia sebenarnya kes yang char biasanya akan menggunakan memori yang lebih 422 00:25:06,900 --> 00:25:10,950 kerana char, seperti dalam C, adalah seperti rentetan, ia adalah pelbagai watak. 423 00:25:10,950 --> 00:25:13,690 Jadi, jika anda mengatakan medan char daripada 255 panjang, 424 00:25:13,690 --> 00:25:16,910 pangkalan data adalah benar-benar akan memberikan anda 255 aksara. 425 00:25:16,910 --> 00:25:22,290 Dan jika rumah tersebut akhirnya menjadi Mather dan 6 aksara total, 426 00:25:22,290 --> 00:25:25,090 anda membuang lebih 200 aksara. 427 00:25:25,090 --> 00:25:29,640 >> Jadi VARCHAR berkesan hanya menggunakan sebagai watak-watak yang banyak sebagaimana yang perlu 428 00:25:29,640 --> 00:25:31,590 sehingga jumlah maksimum. 429 00:25:31,590 --> 00:25:35,470 Tetapi harga yang anda bayar sebenarnya prestasi, berpotensi. 430 00:25:35,470 --> 00:25:39,740 Jika anda tahu terlebih dahulu bahawa semua rentetan anda akan menjadi 8 aksara - 431 00:25:39,740 --> 00:25:43,090 sebagai contoh, andaikan bahawa anda memerlukan kata laluan sebanyak 8 panjang - 432 00:25:43,090 --> 00:25:47,350 terbalik menggunakan medan char pada kesempatan, walaupun tidak kerap, 433 00:25:47,350 --> 00:25:51,100 adalah untuk menentukan panjang tetap untuk sesuatu seperti kata laluan 434 00:25:51,100 --> 00:25:53,300 kerana kini pangkalan data boleh menjadi lebih bijak. 435 00:25:53,300 --> 00:25:58,160 Jika ia tahu bahawa setiap bidang char, setiap rentetan dalam lajur adalah sama panjangnya, 436 00:25:58,160 --> 00:26:00,780 anda mendapat kembali ciri capaian rawak. 437 00:26:00,780 --> 00:26:05,110 Anda boleh melompat wujud antara pelbagai bidang char dalam jadual pangkalan data anda 438 00:26:05,110 --> 00:26:07,940 kerana berfikir pangkalan data sebagai baris dan lajur. 439 00:26:07,940 --> 00:26:11,670 Jadi, jika setiap satu daripada rentetan panjang yang sama, 440 00:26:11,670 --> 00:26:17,820 anda tahu bahawa yang pertama adalah pada 0 bait, yang seterusnya adalah pada 8 bait 441 00:26:17,820 --> 00:26:20,240 dan kemudian 16 dan kemudian 24 dan sebagainya. 442 00:26:20,240 --> 00:26:24,500 Jadi, jika semua rentetan panjang yang sama, anda boleh melompat di sekeliling lebih cekap. 443 00:26:24,500 --> 00:26:26,710 Jadi yang boleh menjadi manfaat dari segi prestasi, 444 00:26:26,710 --> 00:26:29,420 tetapi biasanya anda tidak mempunyai kemewahan mengetahui terlebih dahulu, 445 00:26:29,420 --> 00:26:32,170 jadi VARCHAR adalah cara untuk pergi. 446 00:26:32,170 --> 00:26:36,030 Berikut adalah satu lagi terperinci bahawa walaupun Facebook berlari ke akhirnya. 447 00:26:36,030 --> 00:26:39,670 Ints yang besar, dan kita jenis menggunakan mereka secara lalai pada bila-bila masa kita mahu nombor, 448 00:26:39,670 --> 00:26:41,750 tetapi ia adalah hanya 32 bit. 449 00:26:41,750 --> 00:26:46,210 >> Dan walaupun Facebook tidak cukup mempunyai 4 bilion pengguna kini, 450 00:26:46,210 --> 00:26:48,680 pasti ada sesetengah orang di luar sana dengan akaun berganda 451 00:26:48,680 --> 00:26:50,960 atau akaun-akaun yang telah dibuka dan kemudian ditutup, 452 00:26:50,960 --> 00:26:55,130 dan sebagainya Facebook sendiri saya percaya beberapa tahun yang lalu terpaksa peralihan dari int 453 00:26:55,130 --> 00:27:00,010 , sebagaimana yang tepat dipanggil, bigint, yang hanya 64-bit dan bukannya. 454 00:27:00,010 --> 00:27:02,230 Jadi ini juga adalah satu keputusan reka bentuk. 455 00:27:02,230 --> 00:27:06,570 Anda akan menakjubkan bertuah jika projek akhir anda bertukar permulaan, 456 00:27:06,570 --> 00:27:10,010 telah 4 bilion dan 1 pengguna, memberi atau mengambil, 457 00:27:10,010 --> 00:27:13,200 di mana menggunakan ints mungkin sedikit rabun. 458 00:27:13,200 --> 00:27:16,230 Tetapi dalam realiti, meja pengguna anda mungkin denda dengan ints. 459 00:27:16,230 --> 00:27:19,340 Tetapi sesuatu seperti pset 7, seperti meja sejarah anda, 460 00:27:19,340 --> 00:27:23,700 anda mungkin mempunyai beribu-ribu, berjuta-juta pengguna jika anda berubah menjadi etrade.com. 461 00:27:23,700 --> 00:27:26,020 Jadi sedangkan anda tidak mungkin mempunyai lebih daripada 4 bilion pengguna, 462 00:27:26,020 --> 00:27:30,070 mereka pengguna anda mempunyai mungkin mempunyai lebih daripada 4 bilion transaksi dari masa ke masa - 463 00:27:30,070 --> 00:27:33,200 membeli dan menjual dan perkara-perkara dalam sejarah mereka. 464 00:27:33,200 --> 00:27:38,090 Jadi, jika anda menjangka - sekali lagi, ini adalah masalah yang baik untuk mempunyai jika anda mempunyai banyak data ini - 465 00:27:38,090 --> 00:27:40,920 jika anda lakukan menjangka data melebihi saiz int, 466 00:27:40,920 --> 00:27:47,740 pergi dengan sesuatu seperti bigint adalah arahan yang tidak kerap cukup pakai oleh pereka 467 00:27:47,740 --> 00:27:49,710 kerana orang angka itu tidak akan menjadi masalah, 468 00:27:49,710 --> 00:27:51,930 tetapi ia adalah ini mudah untuk memilih sesuatu yang lebih besar daripada itu. 469 00:27:51,930 --> 00:27:55,380 Perpuluhan yang kita gunakan dalam pset 7, yang menyatakan ketepatan tetap 470 00:27:55,380 --> 00:27:59,840 supaya anda boleh mengelakkan isu-isu yang melibatkan terapung dan beregu dan sahih dan sebagainya. 471 00:27:59,840 --> 00:28:02,440 >> Dan kemudian ada beberapa bidang lain di sini. Kami akan melambai tangan kita pada mereka sedikit. 472 00:28:02,440 --> 00:28:07,270 Tetapi tarikh, masa semua mempunyai format yang ditetapkan dalam MySQL, 473 00:28:07,270 --> 00:28:10,830 dan kelebihan menyimpan tarikh sebagai tarikh dan tidak varchars 474 00:28:10,830 --> 00:28:15,730 bermakna bahawa pangkalan data sebenarnya boleh memformat semula mereka ke dalam format yang berbeza, 475 00:28:15,730 --> 00:28:18,800 sama ada format AS atau format Eropah atau sebagainya - tetapi anda mahu ia - 476 00:28:18,800 --> 00:28:22,700 lebih cekap daripada jika ia hanya beberapa VARCHAR generik. 477 00:28:22,700 --> 00:28:25,150 Dan kemudian ada beberapa binari lain, varbinary, gumpalan. 478 00:28:25,150 --> 00:28:28,580 Ini adalah binari objek yang besar, dan anda juga boleh menyimpan data binari 479 00:28:28,580 --> 00:28:30,750 serta data geometri dalam pangkalan data. 480 00:28:30,750 --> 00:28:34,350 Tetapi bagi kita, kita biasanya akan mengambil berat tentang ints dan varchars dan sebagainya. 481 00:28:34,350 --> 00:28:36,230 Mari kita selesaikan contoh ini dengan rumah. 482 00:28:36,230 --> 00:28:40,030 House Saya akan sewenang-wenangnya mengatakan akan menjadi 255 aksara. 483 00:28:40,030 --> 00:28:42,850 Kemudian nilai lalai kita boleh melakukan ini. 484 00:28:42,850 --> 00:28:47,440 Kita boleh secara lalai meletakkan semua orang dalam Mather House, misalnya. 485 00:28:47,440 --> 00:28:49,710 Itulah bagaimana kita boleh menentukan bahawa pangkalan data 486 00:28:49,710 --> 00:28:52,460 perlu memastikan bahawa seseorang sentiasa mempunyai nilai. Tetapi saya akan meninggalkan yang menjadi. 487 00:28:52,460 --> 00:28:55,270 Malah, bagi orang-orang yang tinggal di luar kampus dan tidak di rumah, 488 00:28:55,270 --> 00:28:59,590 mungkin saya sebenarnya mahu untuk menentukan bahawa nilai lalai untuk rumah adalah NULL, 489 00:28:59,590 --> 00:29:04,890 dan kemudian saya perlu untuk memeriksa kotak ini dan memberitahu pangkalan data ia adalah okay jika rumah pengguna adalah NULL. 490 00:29:04,890 --> 00:29:07,270 >> Sekali lagi, ini adalah satu lagi mekanisme pertahanan yang anda boleh meletakkan di tempat 491 00:29:07,270 --> 00:29:10,590 supaya anda tidak perlu untuk meletakkan ia dalam kod PHP anda semestinya. 492 00:29:10,590 --> 00:29:14,630 Pangkalan data akan memastikan bahawa perkara-perkara atau tidak NULL. 493 00:29:14,630 --> 00:29:17,310 Dan kemudian akhir sekali, sifat-sifat. 494 00:29:17,310 --> 00:29:18,920 Tiada seorang pun daripada ini adalah benar-benar relevan. 495 00:29:18,920 --> 00:29:22,880 Perduaan, tidak bertanda - tiada seorang pun daripada mereka adalah relevan kepada VARCHAR. 496 00:29:22,880 --> 00:29:24,220 Indeks. 497 00:29:24,220 --> 00:29:27,320 Adakah sesiapa yang tahu atau ingat atau mempunyai meneka apa indeks 498 00:29:27,320 --> 00:29:29,510 untuk sesuatu seperti rumah? 499 00:29:29,510 --> 00:29:35,240 Ini juga sebenarnya adalah keputusan reka bentuk yang penting dan agak mudah. 500 00:29:35,240 --> 00:29:39,200 Bagi mereka yang tidak lagi melihat ia, pada hari Jumaat kita bercakap secara ringkas tentang kunci primer. 501 00:29:39,200 --> 00:29:43,240 Dalam jadual pangkalan data, kunci utama adalah bidang atau lajur 502 00:29:43,240 --> 00:29:46,270 yang unik mengenal pasti baris dalam jadual. 503 00:29:46,270 --> 00:29:49,150 Jadi dalam jadual semasa kita mempunyai ID, kita mempunyai nama dan e-mel. 504 00:29:49,150 --> 00:29:52,050 Antara mereka adalah calon terbaik untuk menjadi kunci utama, 505 00:29:52,050 --> 00:29:55,810 peranan yang unik mengenal pasti baris? 506 00:29:55,810 --> 00:29:57,530 Mungkin ID. 507 00:29:57,530 --> 00:29:59,930 Boleh dikatakan, kita juga boleh menggunakan apa walaupun? 508 00:29:59,930 --> 00:30:02,860 Mungkin anda boleh menggunakan e-mel kerana dalam teori ia adalah unik 509 00:30:02,860 --> 00:30:05,380 melainkan orang yang berkongsi akaun e-mel. 510 00:30:05,380 --> 00:30:09,980 Tetapi realitinya adalah bahawa jika anda menggunakan ID berangka seperti 1234, 511 00:30:09,980 --> 00:30:14,170 yang hanya 32 bit, manakala alamat e-mel boleh menjadi ini bytes banyak atau ini bytes banyak. 512 00:30:14,170 --> 00:30:16,610 Jadi dari segi kecekapan untuk memberi maklumat pengenalan yang unik, 513 00:30:16,610 --> 00:30:19,270 ia cenderung untuk menjadi amalan yang baik hanya untuk menggunakan int 514 00:30:19,270 --> 00:30:23,090 walaupun anda mempunyai beberapa calon rentetan yang anda boleh dikatakan boleh menggunakan. 515 00:30:23,090 --> 00:30:26,760 >> Untuk sesuatu seperti rumah, ini tidak sepatutnya menjadi kunci utama 516 00:30:26,760 --> 00:30:30,770 kerana hanya 1 orang boleh hidup di Mather dan 1 orang di Currier dan sebagainya. 517 00:30:30,770 --> 00:30:32,790 Begitu juga, ini tidak sepatutnya menjadi unik. 518 00:30:32,790 --> 00:30:37,830 Perbezaan antara rendah dan unik adalah bahawa dalam kes jadual semasa kami, 519 00:30:37,830 --> 00:30:42,620 ID akan primer, tetapi e-mel tidak utama bagi sebab kita hanya disebut - 520 00:30:42,620 --> 00:30:44,740 prestasi tetapi ia masih perlu menjadi unik. 521 00:30:44,740 --> 00:30:47,200 Jadi anda masih boleh menguatkuasakan keunikan tanpa membuat tuntutan 522 00:30:47,200 --> 00:30:49,520 bahawa ia adalah satu bidang utama super penting. 523 00:30:49,520 --> 00:30:52,610 Tetapi yang satu ini agak membantu: Indeks. 524 00:30:52,610 --> 00:30:56,180 Jika anda tahu terlebih dahulu untuk projek akhir anda, untuk pset 7, atau secara umum, 525 00:30:56,180 --> 00:30:59,480 bahawa bidang ini rumah akan menjadi sesuatu yang anda mencari di banyak 526 00:30:59,480 --> 00:31:01,910 menggunakan kata kunci pilih atau sesuatu yang lain, 527 00:31:01,910 --> 00:31:05,180 maka anda preemptively boleh memberitahu pangkalan data untuk bekerja sihir 528 00:31:05,180 --> 00:31:10,510 dan pastikan bahawa ia mewujudkan dalam ingatan mana-mana struktur data mewah yang perlu 529 00:31:10,510 --> 00:31:13,770 untuk mempercepatkan carian berdasarkan rumah. 530 00:31:13,770 --> 00:31:17,860 Mungkin ia akan menggunakan jadual hash, mungkin ia akan menggunakan senarai yang berkaitan. 531 00:31:17,860 --> 00:31:21,260 Dalam realiti, ia cenderung untuk menggunakan pokok, sering struktur dipanggil B-pokok - 532 00:31:21,260 --> 00:31:24,090 bukan pokok binari tetapi B-pokok - yang merupakan pokok yang sangat luas 533 00:31:24,090 --> 00:31:27,370 yang mungkin anda lihat di dalam kelas seperti CS124, kelas struktur data. 534 00:31:27,370 --> 00:31:31,800 Tetapi dalam jangka pendek, anda tidak perlu bimbang tentang bahawa apabila menggunakan perisian pangkalan data pintar. 535 00:31:31,800 --> 00:31:35,890 Anda hanya boleh memberitahu, "Indeks bidang ini supaya saya boleh mencari ia lebih cekap." 536 00:31:35,890 --> 00:31:40,250 >> Jika anda meninggalkan luar ini dan anda cuba untuk mencari semua orang dalam pangkalan data yang tinggal di Mather, 537 00:31:40,250 --> 00:31:42,710 ia akan turun ke dalam carian linear. 538 00:31:42,710 --> 00:31:45,360 Dan jika anda telah mendapat 6000 undergrads semua hidup di dalam rumah beberapa, 539 00:31:45,360 --> 00:31:47,900 anda akan mencari jadual keseluruhan untuk mencari Matherites, 540 00:31:47,900 --> 00:31:52,190 , manakala jika anda mengatakan Indeks, mudah-mudahan ia akan menjadi sesuatu yang dekat dengan carian logaritma 541 00:31:52,190 --> 00:31:54,510 untuk mencari orang-orang jenis pelajar. 542 00:31:54,510 --> 00:31:56,750 Ini adalah hanya satu ciri percuma untuk menghidupkan, 543 00:31:56,750 --> 00:31:59,530 walaupun ia tidak datang pada harga beberapa jumlah ruang. 544 00:31:59,530 --> 00:32:02,690 Akhir sekali, auto-kenaikan, ini bidang AI, 545 00:32:02,690 --> 00:32:05,830 yang hanya bermakna jika ia int dan anda tidak mahu untuk menjaga kenaikan sendiri 546 00:32:05,830 --> 00:32:07,570 setiap kali ada pengguna baru, periksa bahawa, 547 00:32:07,570 --> 00:32:11,910 dan setiap pengguna yang mendapat dimasukkan secara automatik akan mendapat ID baru. 548 00:32:11,910 --> 00:32:15,620 Mari kita klik Simpan, dan sekarang mari kita mencari kesalahan dengan reka bentuk ini. 549 00:32:15,620 --> 00:32:20,200 Jika saya pergi ke People, notis bahawa kedua-dua Mike dan rumah saya adalah NULL. 550 00:32:20,200 --> 00:32:22,420 Saya boleh menggunakan phpMyAdmin untuk mengedit ini secara manual. 551 00:32:22,420 --> 00:32:25,110 Saya boleh pergi di sini dan jenis di Mather dan kemudian tekan Enter, 552 00:32:25,110 --> 00:32:27,740 dan kini melihat jadual adalah berbeza. 553 00:32:27,740 --> 00:32:29,270 Tetapi notis saya boleh melakukan sesuatu yang lain juga. 554 00:32:29,270 --> 00:32:33,530 ID Daud adalah 1, jadi phpMyAdmin lagi adalah hanya satu alat pentadbiran; 555 00:32:33,530 --> 00:32:35,970 ini bukanlah sesuatu yang pengguna anda pernah pergi untuk melihat. 556 00:32:35,970 --> 00:32:38,810 Jadi jika saya sebaliknya klik tab SQL top up - 557 00:32:38,810 --> 00:32:41,450 dan sekali lagi, pset 7 akan memperkenalkan anda kepada lebih daripada pertanyaan ini - 558 00:32:41,450 --> 00:32:45,260 Saya manual boleh melaksanakan arahan query SQL bahasa berstruktur 559 00:32:45,260 --> 00:32:56,410 Pengguna UPDATE SET rumah = 'Pfoho' WHERE id = 1. 560 00:32:56,410 --> 00:33:00,830 Ini pertanyaan SQL, baik cukup, cukup dibaca dari kiri ke kanan. 561 00:33:00,830 --> 00:33:04,350 Kemaskini jadual pengguna, menetapkan bidang yang dipanggil rumah untuk Pfoho 562 00:33:04,350 --> 00:33:06,830 mana ID pengguna ialah 1. 563 00:33:06,830 --> 00:33:11,480 Atau saya juga boleh lakukan di mana e-mel = 'malan@harvard.edu'. 564 00:33:11,480 --> 00:33:14,860 Selagi yang unik mengenal pasti saya, yang akan bekerja juga. 565 00:33:14,860 --> 00:33:18,810 Tetapi ID cenderung untuk prestasi yang lebih tinggi, jadi mari kita berbuat demikian. 566 00:33:18,810 --> 00:33:22,950 Mari kita klik Pergi. Okay, lecture.users tidak wujud. Apa kesilapan saya? 567 00:33:22,950 --> 00:33:26,220 Apa jadual yang sebenarnya dipanggil di sini? 568 00:33:26,220 --> 00:33:28,770 Ia dipanggil pelajar hanya kerana itulah apa yang kita lakukan di sini di sebelah kiri atas. 569 00:33:28,770 --> 00:33:31,860 Ia dipanggil pelajar, bukan pengguna. Jadi klik Pergi sekarang. 570 00:33:31,860 --> 00:33:34,330 Baris 1 terjejas. Pertanyaan mengambil masa 0.01 saat. 571 00:33:34,330 --> 00:33:38,010 Jika saya klik Lihat sekarang, sekarang kehidupan Malan dalam Pfoho. 572 00:33:38,010 --> 00:33:42,070 Jadi itulah satu lagi rasa SQL, tetapi pset akan berjalan anda melalui sedikit lebih daripada itu. 573 00:33:42,070 --> 00:33:44,710 >> Ada keputusan bodoh saya sudah dibuat di sini. 574 00:33:44,710 --> 00:33:47,820 Saya ingin berhujah bahawa ini reka bentuk pangkalan data adalah cekap 575 00:33:47,820 --> 00:33:51,650 kerana orang-orang yang lebih saya menambah jadual pelajar, 576 00:33:51,650 --> 00:33:54,730 lebih daripada kita saya mula menambah, lebih TFS saya mula menambah, 577 00:33:54,730 --> 00:33:58,320 kita akan mula melihat apa yang pertindihan dalam jadual ini? 578 00:34:00,840 --> 00:34:06,020 >> Yeah. [Pelajar] Melihat bahawa ia adalah di kalangan pelajar, kita menggunakan sama [didengar] 579 00:34:06,020 --> 00:34:07,360 - Hak yang sama, sebenarnya. 580 00:34:07,360 --> 00:34:10,400 Jadi, jika 400 orang tinggal di Mather, memberikan atau mengambil, 581 00:34:10,400 --> 00:34:15,000 akhirnya jadual ini akan mempunyai 400 baris yang mengatakan "Mather," "Mather," 582 00:34:15,000 --> 00:34:16,590 "Mather," "Mather," "Mather." 583 00:34:16,590 --> 00:34:19,820 Kami membuang semua-bait, dan ada beberapa takeaways di sana. 584 00:34:19,820 --> 00:34:23,080 1, terdapat kes sudut gila di mana jika seseorang membayar wang yang banyak 585 00:34:23,080 --> 00:34:25,949 dan menamakan semula Mather, kita kini mempunyai untuk menukar jadual pangkalan data keseluruhan kami. 586 00:34:25,949 --> 00:34:29,730 Itu tidak akan berlaku sering, walaupun Pfoho pernah dipanggil Utara House 15 tahun yang lalu, 587 00:34:29,730 --> 00:34:32,310 jadi ia berlaku. Tetapi itu bukan semua yang menarik. 588 00:34:32,310 --> 00:34:36,000 Lebih menarik daripada kes sudut seperti yang perlu untuk mengemaskini data dalam pukal 589 00:34:36,000 --> 00:34:41,150 bagi pangkalan data mengapa anda menyimpan Mather lagi dan lagi dan lagi dan lagi? 590 00:34:41,150 --> 00:34:43,020 Itulah banyak aksara, 6 aksara. 591 00:34:43,020 --> 00:34:45,500 Kita tidak boleh melakukan lebih baik daripada itu, terutama bagi Pforzheimer? 592 00:34:45,500 --> 00:34:48,320 Sesungguhnya kita boleh melakukan lebih baik daripada yang banyak watak. 593 00:34:48,320 --> 00:34:51,790 Mengapa tidak hanya mengaitkan pengecam unik dengan setiap rumah 594 00:34:51,790 --> 00:34:55,020 dan kedai yang bagi setiap pengguna? Jadi mari kita cuba ini. 595 00:34:55,020 --> 00:35:00,610 Bukannya hanya menggunakan jadual pelajar, biarlah saya pergi ke pangkalan data kuliah saya di sini di sebelah kiri atas. 596 00:35:00,610 --> 00:35:02,600 Notis di sini ia mengatakan Buat jadual. 597 00:35:02,600 --> 00:35:04,550 Izinkan saya membuat jadual baru yang dipanggil rumah. 598 00:35:04,550 --> 00:35:08,880 Bilangan lajur akan menjadi 2. Enter. 599 00:35:08,880 --> 00:35:11,200 Sekarang saya mempunyai 2 bidang. 600 00:35:11,200 --> 00:35:14,600 Saya akan memanggil nama ini, dan ia akan menjadi satu VARCHAR daripada 255 panjang, 601 00:35:14,600 --> 00:35:18,770 >> tetapi itulah agak sewenang-wenangnya. Izinkan saya meletakkan ini turun di sini oleh konvensyen. 602 00:35:18,770 --> 00:35:22,840 Jadi meletakkan ID di sini. Mari kita memberikan setiap rumah pengecam unik. 603 00:35:22,840 --> 00:35:25,360 Mari kita memberikan nama setiap rumah. 604 00:35:25,360 --> 00:35:30,980 Mari kita menentukan bahawa pengecam akan menjadi tidak bertanda hanya dengan konvensyen hanya menggunakan nombor positif. 605 00:35:30,980 --> 00:35:35,020 Mari kita pergi ke hadapan dan memberikan ini auto-kenaikan bidang untuk sekarang. 606 00:35:35,020 --> 00:35:38,160 Dan adakah kita perlu apa-apa lagi? 607 00:35:38,160 --> 00:35:41,010 Mari kita pergi ke hadapan dan klik Simpan. 608 00:35:41,010 --> 00:35:42,480 Sekarang saya mempunyai jadual kedua. 609 00:35:42,480 --> 00:35:45,860 Perhatikan sebagai selain ini adalah arahan SQL sedikit samar 610 00:35:45,860 --> 00:35:50,280 bahawa anda akan mempunyai untuk menaip secara manual jika tidak menggunakan alat pentadbiran seperti phpMyAdmin. 611 00:35:50,280 --> 00:35:51,990 Jadi satu lagi sebab kita gunakan. 612 00:35:51,990 --> 00:35:55,480 Ia adalah jenis hebat berguna pedagogically kerana anda boleh klik di sekitar 613 00:35:55,480 --> 00:36:01,050 dan memikirkan bagaimana perkara yang bekerja dengan hanya menyalin dan menampal apa phpMyAdmin pula. 614 00:36:01,050 --> 00:36:04,150 Tetapi arahan Buat jadual adalah apa sahaja dilaksanakan, dan di sini adalah jadual saya. 615 00:36:04,150 --> 00:36:11,370 Biar saya pergi ke hadapan sekarang dan menggunakan SQL mentah bukannya menggampangkan dengan mengklik tab Sisip. 616 00:36:11,370 --> 00:36:15,040 Izinkan saya tidak MASUKKAN KE rumah, 617 00:36:15,040 --> 00:36:22,230 dan saya akan mengatakan nama rumah akan mempunyai nilai 'Mather'. 618 00:36:22,230 --> 00:36:24,790 Itu sahaja. Sintaks Ini adalah sedikit lebih samar. 619 00:36:24,790 --> 00:36:26,660 Ini adalah nama satu bidang yang kita mahu untuk memasukkan. 620 00:36:26,660 --> 00:36:30,390 Ini adalah nilai-nilai yang kita mahu masukkan ke dalam bidang-bidang. Biar saya klik Pergi. 621 00:36:30,390 --> 00:36:34,410 1 baris disisipkan mengambil masa 0.02 saat. Biar saya klik Lihat sekarang. 622 00:36:34,410 --> 00:36:42,020 >> Notis jika saya klik Lihat, ada Mather, yang ID adalah dengan automasi nombor 1. 623 00:36:42,020 --> 00:36:45,000 Biar saya buat satu lagi. Biar saya pergi ke tab SQL. 624 00:36:45,000 --> 00:36:52,950 INSERT INTO rumah. Nama rumah akan mempunyai nilai Pfoho dan sebagainya. 625 00:36:52,950 --> 00:36:56,350 Pergi. Dan saya boleh terus melakukan ini sekali lagi dan lagi dan lagi. 626 00:36:56,350 --> 00:36:59,470 Atau jika anda bosan menggunakan phpMyAdmin, anda hanya boleh menggunakan tab Sisip 627 00:36:59,470 --> 00:37:01,000 dan tidak perlu menaip SQL mentah. 628 00:37:01,000 --> 00:37:04,690 Anda hanya boleh bang ia keluar lebih cepat dengan menaip, misalnya, Currier, Masukkan, 629 00:37:04,690 --> 00:37:07,610 dan kini jika kita klik Lihat, ada Currier dengan ID 3. 630 00:37:07,610 --> 00:37:09,920 Jadi ini adalah apa yang kita maksudkan dengan auto kenaikan. 631 00:37:09,920 --> 00:37:12,280 Tetapi sekarang kita mempunyai untuk menetapkan sesuatu dalam pelajar. 632 00:37:12,280 --> 00:37:16,240 Di kalangan pelajar apa yang perlu jenis data bidang rumah sekarang? 633 00:37:16,240 --> 00:37:19,450 Ia harus int, kan? 634 00:37:19,450 --> 00:37:23,950 Jadi matlamat di sini adalah faktor keluar, atau dikenali sebagai menormalkan, jadual 635 00:37:23,950 --> 00:37:27,940 supaya kita tidak menyimpan maklumat redundantly dalam mana-mana jadual saya. 636 00:37:27,940 --> 00:37:31,130 Dan sekali lagi, jalan kita di sini akan mengatakan Mather, Mather, 637 00:37:31,130 --> 00:37:34,220 Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, yang sangat diperlukan 638 00:37:34,220 --> 00:37:36,240 dari segi pembaziran daripada aksara. 639 00:37:36,240 --> 00:37:40,820 Jadi biarlah saya pergi ke hadapan dan perubahan ini dengan mengklik Struktur, 640 00:37:40,820 --> 00:37:44,620 dan biarlah saya pergi ke hadapan dan memeriksa bidang rumah, klik Tukar, 641 00:37:44,620 --> 00:37:46,990 dan sekarang saya akan menukar ini menjadi int. 642 00:37:46,990 --> 00:37:49,490 255 tidak lagi relevan. 643 00:37:49,490 --> 00:37:54,010 Biar saya pergi ke hadapan dan mengatakan bahawa denda jika ia masih NULL. Simpan. 644 00:37:54,010 --> 00:37:55,870 Sekarang pelajar jadual telah diubah dengan jayanya, 645 00:37:55,870 --> 00:37:59,090 dan notis lagi rumah adalah int. 646 00:37:59,090 --> 00:38:02,220 Sebagai mengetepikan, mengabaikan nombor dalam kurungan apabila ia datang kepada ints. 647 00:38:02,220 --> 00:38:03,770 >> Ini adalah atas sebab-sebab legasi. 648 00:38:03,770 --> 00:38:06,920 Kembali pada hari apabila anda tidak mempunyai GUIs, sebaliknya anda mempunyai persekitaran baris arahan, 649 00:38:06,920 --> 00:38:11,580 10 dan 11 masing-masing dinyatakan berapa banyak aksara yang anda perlu menunjukkan 650 00:38:11,580 --> 00:38:13,950 dalam tetingkap terminal untuk benar-benar memaparkan bidang. 651 00:38:13,950 --> 00:38:19,150 Ia mempunyai tiada kaitan dengan panjang sedikit bidang sebenar, jadi kita hanya akan mengabaikan bahawa buat masa sekarang. 652 00:38:19,150 --> 00:38:20,990 Sekarang saya perlu pergi ke dalam jadual ini. 653 00:38:20,990 --> 00:38:24,610 Dan jika David tinggal di Mather, rumah tidak harus 0, 654 00:38:24,610 --> 00:38:27,350 yang adalah nilai lalai int paling dekat dengan null. 655 00:38:27,350 --> 00:38:29,810 Dia harus tinggal di rumah 1. 656 00:38:29,810 --> 00:38:36,870 Mari kita sewenang-wenangnya mengatakan bahawa Mike kehidupan di Pfoho, jadi nombor rumah 2. 657 00:38:36,870 --> 00:38:40,160 Sekarang jadual saya kelihatan sedikit lebih samar. 658 00:38:40,160 --> 00:38:41,960 Tetapi dengan menimbangkan kecekapan. 659 00:38:41,960 --> 00:38:44,860 Saya kini menggunakan hanya 32 bit untuk mengenal pasti rumah, 660 00:38:44,860 --> 00:38:49,530 yang bermakna terdapat hanya 1 definisi kanun Mather rumah saya dan Pfoho 661 00:38:49,530 --> 00:38:52,090 dan itulah dalam jadual rumah. 662 00:38:52,090 --> 00:38:55,880 Jadi jika saya mahu sekarang menyertai semula jadual ini, berfikir ia cara ini. 663 00:38:55,880 --> 00:39:01,980 Di sini saya mempunyai jadual pelajar saya, dan di sebelah kanan ada nombor-nombor, 1 dan 2. 664 00:39:01,980 --> 00:39:04,180 1 adalah Mather, 2 adalah Pfoho. 665 00:39:04,180 --> 00:39:08,580 Kami mempunyai nombor-nombor yang sama dalam jadual ini lain, yang dipanggil rumah, 666 00:39:08,580 --> 00:39:11,020 1 dan 2 dan 3 bagi mereka 3 buah rumah. 667 00:39:11,020 --> 00:39:14,990 Apa yang sekarang kita mahu lakukan ialah mempunyai keupayaan dalam kod, PHP dan SQL, 668 00:39:14,990 --> 00:39:18,800 untuk menyusun menyertai semula jadual ini, di mana jika ini adalah pelajar dan ini adalah rumah-rumah, 669 00:39:18,800 --> 00:39:22,050 kita mahu entah bagaimana menggabungkan mereka supaya 1 garisan sehingga dengan 1, 670 00:39:22,050 --> 00:39:25,670 2 baris dengan 2, dan supaya kita boleh mengetahui di mana David 671 00:39:25,670 --> 00:39:28,000 dan di mana Mike dan di mana orang lain hidup. 672 00:39:28,000 --> 00:39:31,850 Untuk melakukan ini, kita boleh melaksanakan query SQL seperti berikut. 673 00:39:31,850 --> 00:39:40,470 SELECT * DARI pelajar JOIN rumah ON - 674 00:39:40,470 --> 00:39:43,000 Dan kini apa bidang yang kita mahu untuk menyertai? 675 00:39:43,000 --> 00:39:49,520 Jadi students.house = houses.id. 676 00:39:49,520 --> 00:39:54,150 >> A samar sedikit, tetapi bahagian ini bermakna benar-benar mewujudkan jadual sementara baru 677 00:39:54,150 --> 00:39:56,690 itulah hasil daripada menyertai pelajar dan rumah-rumah. 678 00:39:56,690 --> 00:40:00,340 Dan bagaimana anda ingin menggabungkan hujung jari saya di sini? 679 00:40:00,340 --> 00:40:05,280 Tetapkan 'padang rumah yang sama untuk rumah' medan ID pelajar. 680 00:40:05,280 --> 00:40:10,220 Dan jika saya sekarang klik Pergi, saya mendapat kembali apa yang saya berharap untuk. 681 00:40:10,220 --> 00:40:15,890 Daud adalah dalam Mather, Mike di Pfoho, dan saya juga melihat pengenalan yang unik. 682 00:40:15,890 --> 00:40:18,640 Tetapi persoalannya adalah sekarang saya mempunyai jadual yang lengkap. 683 00:40:18,640 --> 00:40:23,020 Dan sebagainya Fleet sini untuk pset 7 atau benar-benar untuk projek akhir: 684 00:40:23,020 --> 00:40:25,830 Jika anda mendapati bahawa anda menyimpan apa-apa sekeping maklumat redundantly, 685 00:40:25,830 --> 00:40:28,850 sama ada ia adalah sebuah rumah, mungkin ia adalah sebuah bandar, negeri, dan ZIP 686 00:40:28,850 --> 00:40:32,050 mana ZIP biasanya boleh tetapi tidak sentiasa digunakan sebagai pengecam unik, 687 00:40:32,050 --> 00:40:35,810 pergi melalui latihan mental dan kemudian dengan sesuatu seperti phpMyAdmin 688 00:40:35,810 --> 00:40:40,660 pemfaktoran bahawa data biasa kerana terutamanya sebagai laman web anda mendapat lebih baik digunakan 689 00:40:40,660 --> 00:40:45,440 dan lebih popular, ini adalah bagaimana anda memastikan bahawa segala-galanya adalah super cepat, 690 00:40:45,440 --> 00:40:51,930 dengan memberi pangkalan data sebagai petunjuk banyak keunikan yang mungkin. 691 00:40:51,930 --> 00:40:53,860 Itu adalah banyak. 692 00:40:53,860 --> 00:40:59,010 Apa-apa soalan? Semua hak. Mari kita rehat 5-minit di sana dan berkumpul semula. 693 00:41:01,600 --> 00:41:03,540 Semua hak. 694 00:41:03,540 --> 00:41:08,680 Berikut adalah contoh yang telah digunakan beberapa tahun yang lalu apabila saya mengambil CS161, 695 00:41:08,680 --> 00:41:10,960 yang merupakan sistem operasi kelas di kolej 696 00:41:10,960 --> 00:41:15,160 yang dikenali untuk menjadi yang menakjubkan tetapi jumlah kerja yang gila, 697 00:41:15,160 --> 00:41:19,810 dan ia benar-benar memberi tumpuan pada beberapa masalah tahap rendah yang timbul dalam sistem operasi 698 00:41:19,810 --> 00:41:22,700 dan juga walaupun di dunia pangkalan data. 699 00:41:22,700 --> 00:41:27,040 >> Cerita yang telah diberitahu oleh profesor, saya Margo Seltzer, tahun itu adalah seperti berikut. 700 00:41:27,040 --> 00:41:30,990 Andaikan anda mempunyai peti sejuk asrama sedikit untuk anda dan rakan sebilik anda 701 00:41:30,990 --> 00:41:34,030 dan kedua-dua anda benar-benar suka susu. 702 00:41:34,030 --> 00:41:36,360 Jadi anda pulang dari kelas satu hari, rakan sebilik anda belum ada, 703 00:41:36,360 --> 00:41:39,650 anda membuka peti sejuk, dan anda sedar, "Oh menyumpah, kami keluar susu." 704 00:41:39,650 --> 00:41:42,070 Jadi anda menutup peti sejuk, anda berjalan di seberang jalan untuk CVS 705 00:41:42,070 --> 00:41:45,830 dan mendapatkan dalam barisan yang semakin panjang untuk membeli sedikit susu di CVS. 706 00:41:45,830 --> 00:41:48,470 Sementara itu, rakan sebilik anda datang ke rumah dari atau kelas beliau, 707 00:41:48,470 --> 00:41:51,690 datang ke bilik, membuka peti sejuk yang benar-benar mahu sedikit susu, 708 00:41:51,690 --> 00:41:54,130 membuka peti sejuk dan, "Damn, tidak susu." 709 00:41:54,130 --> 00:41:57,890 Jadi dia menutup peti sejuk, berjalan keluar pintu, dan pergi ke ABP 710 00:41:57,890 --> 00:42:00,910 atau di tempat lain daripada CVS di mana anda tidak akan bertemu antara satu sama lain 711 00:42:00,910 --> 00:42:02,790 untuk pergi mendapatkan susu beberapa. 712 00:42:02,790 --> 00:42:04,820 Sudah tentu beberapa minit kemudian, kedua-dua anda pulang ke rumah 713 00:42:04,820 --> 00:42:07,740 dan kini anda mempunyai susu dua kali seberapa banyak yang anda benar-benar mahu. 714 00:42:07,740 --> 00:42:10,670 Dan susu, kini ia akan pergi buruk kerana anda suka susu 715 00:42:10,670 --> 00:42:14,200 tetapi anda tidak benar-benar seperti susu, jadi sekarang anda mempunyai susu yang terlalu banyak, jadi ia akan masam. 716 00:42:14,200 --> 00:42:16,830 Ini adalah yang besar (huru-haranya), keadaan mengerikan. 717 00:42:16,830 --> 00:42:22,920 Apa yang boleh menyelesaikan kesusahan ini jika anda adalah rumah rakan sebiliknya yang pertama? Ya. 718 00:42:22,920 --> 00:42:25,970 [Pelajar] Anda harus telah meninggalkan nota. [Ketawa] 719 00:42:25,970 --> 00:42:28,090 Baik. Anda harus telah meninggalkan nota. 720 00:42:28,090 --> 00:42:32,320 Anda perlu meletakkan nota Post-it atau seperti mengatakan, "Sudah bagi susu," 721 00:42:32,320 --> 00:42:36,830 dan kemudian rakan sebilik anda konsepnya akan telah dikunci keluar sebenarnya berbuat demikian. 722 00:42:36,830 --> 00:42:38,010 Atau anda boleh pergi langkah 1 lagi. 723 00:42:38,010 --> 00:42:41,060 Anda benar-benar boleh mengunci peti sejuk dengan beberapa jenis mangga, 724 00:42:41,060 --> 00:42:44,870 dan kini rakan sebilik anda benar-benar akan dikunci keluar dari peti sejuk. 725 00:42:44,870 --> 00:42:48,520 Jika kita umum kembali kepada pengaturcaraan, 726 00:42:48,520 --> 00:42:51,610 anda hampir boleh berfikir peti sejuk sebagai beberapa jenis pembolehubah atau struct, 727 00:42:51,610 --> 00:42:53,500 beberapa jenis bekas untuk maklumat. 728 00:42:53,500 --> 00:42:58,290 Masalah tersebut, pada dasarnya, di sini adalah bahawa kedua-dua anda telah dibenarkan untuk memeriksa 729 00:42:58,290 --> 00:43:02,370 atau membaca keadaan struktur data ini, 730 00:43:02,370 --> 00:43:08,050 tetapi anda melihat ia pada masa-masa yang berbeza tetapi kedua-dua anda membuat keputusan 731 00:43:08,050 --> 00:43:11,920 berdasarkan keadaan dunia pada detik-detik yang berbeza dalam masa. 732 00:43:11,920 --> 00:43:15,570 Jadi telah anda dikunci peti sejuk, anda akan sekurang-kurangnya dielakkan rakan sebilik anda 733 00:43:15,570 --> 00:43:19,070 daripada telah dapat memeriksa keadaan dunia, 734 00:43:19,070 --> 00:43:22,530 jadi dia tidak dapat dibuat bahawa keputusan yang sama. 735 00:43:22,530 --> 00:43:25,780 Jadi pangkalan data, kerana ia ternyata, mempunyai masalah ini sentiasa. 736 00:43:25,780 --> 00:43:31,050 >> Mari kita lihat jika kita boleh membina satu senario. 737 00:43:31,050 --> 00:43:34,310 Katakan bahawa anda jenis lelaki yang buruk dan anda pergi ke Bank of America 738 00:43:34,310 --> 00:43:37,950 atau salah satu daripada tempat-tempat lain di dataran yang mempunyai sisi berumur ATM menyebelah, 739 00:43:37,950 --> 00:43:41,200 dan entah bagaimana anda digambarkan bagaimana untuk salinan kad ATM - tidak semua yang keras. 740 00:43:41,200 --> 00:43:42,730 Ia hanya satu jalur magnet. 741 00:43:42,730 --> 00:43:45,180 Dan begitu apa yang anda mahu mencuba untuk melakukannya adalah bermain permainan ini 742 00:43:45,180 --> 00:43:49,060 di mana anda meletakkan 1 kad ke dalam 1 mesin, kad lain ke dalam mesin yang lain, 743 00:43:49,060 --> 00:43:51,980 dan anda dasarnya mahu mencuba untuk mengeluarkan wang secara serentak, 744 00:43:51,980 --> 00:43:54,930 kerana bayangkan cerita yang pergi seperti berikut. 745 00:43:54,930 --> 00:43:57,350 Mesin di sebelah kiri mengambil kad anda dan PIN anda, 746 00:43:57,350 --> 00:44:00,240 dan kemudian anda berkata, "Berikan saya $ 100." 747 00:44:00,240 --> 00:44:04,790 ATM diprogramkan terlebih dahulu melakukan pilih pangkalan data atau bersamaan - 748 00:44:04,790 --> 00:44:10,780 apa-apa pangkalan data ia menggunakan - untuk melihat pengguna ini mempunyai sekurang-kurangnya $ 100 dalam atau akaun beliau? 749 00:44:10,780 --> 00:44:16,180 Jika ya, maka meludah keluar $ 100 dan tolak $ 100 daripada baki mereka. 750 00:44:16,180 --> 00:44:20,470 Tetapi sudah tentu jika ada mesin pelbagai di sini atau pelbagai cara untuk memeriksa 751 00:44:20,470 --> 00:44:23,560 keadaan dunia itu, bilik kebal bank, untuk melihat berapa banyak wang yang anda miliki, 752 00:44:23,560 --> 00:44:26,780 menganggap bahawa hanya dengan peluang mesin di sebelah kiri dan kanan 753 00:44:26,780 --> 00:44:30,140 kedua-duanya bertanya soalan itu pada kira-kira masa yang sama dalam masa. 754 00:44:30,140 --> 00:44:34,160 >> Dan ini sudah tentu boleh berlaku. ATM adalah komputer hari ini. 755 00:44:34,160 --> 00:44:37,670 Jadi, jika mesin di sebelah kiri berkata, "Ya, anda mempunyai sekurang-kurangnya $ 100," 756 00:44:37,670 --> 00:44:42,150 manakala mesin di sebelah kanan berkata, "Ya, anda mempunyai sekurang-kurangnya $ 100," 757 00:44:42,150 --> 00:44:47,420 maka kedua-dua mereka meneruskan untuk menamatkan program mereka dan sebenarnya meludah keluar $ 100 758 00:44:47,420 --> 00:44:50,820 dan berkata, "Sebelum ini anda mempunyai $ 200." 759 00:44:50,820 --> 00:44:54,890 "Biar saya mengemaskini pembolehubah kini menjadi $ 100 ditinggalkan dalam akaun." 760 00:44:54,890 --> 00:44:58,780 Tetapi jika kedua-dua mereka telah menyemak baki akaun anda dan mendapati bahawa ia adalah 200 $ 761 00:44:58,780 --> 00:45:02,000 dan kedua-dua mereka kemudian melakukan matematik dan berkata 200-100, 762 00:45:02,000 --> 00:45:06,990 mesin telah berpotensi meludah keluar dua $ 100 bil di setiap mesin, 763 00:45:06,990 --> 00:45:11,360 tetapi mereka telah hanya dikemaskini baki akaun jumlah wang anda untuk menjadi $ 100. 764 00:45:11,360 --> 00:45:15,130 Dalam erti kata lain, anda telah dibawa keluar $ 200, tetapi kerana mereka diperiksa keadaan dunia 765 00:45:15,130 --> 00:45:18,840 secara serentak dan kemudian membuat keputusan berdasarkan nilai itu, 766 00:45:18,840 --> 00:45:21,930 mereka tidak mungkin melakukan matematik akhirnya betul. 767 00:45:21,930 --> 00:45:25,520 Jadi dalam keadaan bank juga anda benar-benar mahu mempunyai beberapa jenis sekat-masuk 768 00:45:25,520 --> 00:45:28,450 supaya sebaik sahaja anda telah memeriksa keadaan beberapa pembolehubah 769 00:45:28,450 --> 00:45:31,220 yang benar-benar penting, seperti baki akaun anda, 770 00:45:31,220 --> 00:45:36,070 jangan biarkan orang lain membuat keputusan berdasarkan itu sehingga anda selesai melakukan perkara anda, 771 00:45:36,070 --> 00:45:38,920 di mana dalam kes ini anda adalah ATM di sebelah kiri. 772 00:45:38,920 --> 00:45:41,160 Kunci orang lain keluar. 773 00:45:41,160 --> 00:45:44,650 Anda sebenarnya boleh mencapai kesan ini dalam beberapa cara yang berbeza. 774 00:45:44,650 --> 00:45:48,660 >> Cara yang paling mudah di MySQL adalah garis SQL bahawa kita memberikan anda 775 00:45:48,660 --> 00:45:52,030 dalam spesifikasi set masalah yang kelihatan sama seperti ini. 776 00:45:52,030 --> 00:45:57,420 Masukkan ke dalam jadual - apa ia dipanggil - id, simbol, dan saham, bilangan saham, 777 00:45:57,420 --> 00:45:59,660 nilai berikut, misalnya. 778 00:45:59,660 --> 00:46:03,370 Jika anda tidak membaca spec lagi, ini adalah satu contoh yang melibatkan bagaimana anda pergi tentang 779 00:46:03,370 --> 00:46:07,340 membeli 10 saham saham ini sen untuk Presiden Skroob, 780 00:46:07,340 --> 00:46:10,340 ID pengguna yang berlaku untuk menjadi nombor 7? 781 00:46:10,340 --> 00:46:14,070 Ini mengatakan MASUKKAN KE jadual id berikut, simbol, dan nombor saham 782 00:46:14,070 --> 00:46:18,200 7, 'DVN.V', dan 10. 783 00:46:18,200 --> 00:46:21,510 Tetapi - tetapi, tetapi, tetapi - baris kedua adalah salah satu yang penting. 784 00:46:21,510 --> 00:46:26,310 ATAS PENDUA saham UPDATE PENTING = saham + NILAI (saham). 785 00:46:26,310 --> 00:46:28,350 Jadi benar-benar samar-cari pada pandangan pertama. 786 00:46:28,350 --> 00:46:31,990 Tetapi hakikat bahawa ini query SQL, walaupun ia wrap ke 2 baris, 787 00:46:31,990 --> 00:46:35,920 1 query panjang, ia bermakna ia adalah atom 788 00:46:35,920 --> 00:46:41,000 dalam erti kata bahawa pertanyaan ini sama ada akan dilaksanakan semua bersama-sama atau tidak sama sekali. 789 00:46:41,000 --> 00:46:45,100 Dan oleh definisi MySQL, itulah bagaimana mereka melaksanakan pertanyaan ini. 790 00:46:45,100 --> 00:46:51,010 Ia adalah mengikut definisi di manual dijamin untuk melaksanakan semua sekali gus atau tidak sama sekali. 791 00:46:51,010 --> 00:46:54,020 Motivasi untuk ini adalah seperti berikut. 792 00:46:54,020 --> 00:46:58,540 Jika dalam kes ini, anda cuba untuk membeli 10 saham stok, 793 00:46:58,540 --> 00:47:02,260 ia adalah jenis cerita yang sama seperti susu, ia adalah jenis cerita yang sama seperti ATM. 794 00:47:02,260 --> 00:47:04,970 >> Jika anda membuat kesilapan yang tidak menggunakan sintaks ini 795 00:47:04,970 --> 00:47:09,610 tetapi sebaliknya memilih dari pangkalan data untuk melihat berapa banyak saham saham ini sen 796 00:47:09,610 --> 00:47:13,750 Presiden Skroob mempunyai, dan andaikan dia mempunyai 10 saham, 797 00:47:13,750 --> 00:47:19,330 dan kemudian beberapa sekelip kemudian anda kemudian melakukan kenyataan UPDATE, 798 00:47:19,330 --> 00:47:24,810 yang merupakan satu lagi kenyataan dalam SQL yang mengatakan bahawa pergi ke hadapan dan menambah 10 lebih saham 799 00:47:24,810 --> 00:47:28,700 10 semasa beliau supaya ideal jumlah itu adalah 20, 800 00:47:28,700 --> 00:47:33,490 Masalahnya adalah kerana dalam sistem pangkalan data hari ini dan kerana dalam komputer hari ini 801 00:47:33,490 --> 00:47:35,990 anda mempunyai pemproses berganda, pelbagai teras - 802 00:47:35,990 --> 00:47:38,920 dalam erti kata lain, komputer benar-benar boleh melakukan perkara-perkara yang berbilang sekali gus - 803 00:47:38,920 --> 00:47:44,270 tiada jaminan bahawa anda SELECT dan UPDATE anda dalam kes ini 804 00:47:44,270 --> 00:47:46,150 akan berlaku kembali ke belakang. 805 00:47:46,150 --> 00:47:49,140 Jadi senario yang buruk akan anda lakukan SELECT 806 00:47:49,140 --> 00:47:51,670 untuk melihat berapa banyak saham saham sen ini tidak Skroob mempunyai, 807 00:47:51,670 --> 00:47:54,710 dan kemudian hanya dengan satu lagi peluang pertanyaan pangkalan data dilaksanakan - 808 00:47:54,710 --> 00:47:57,740 mungkin Skroob dalam tetingkap pelayar yang lain cuba untuk membeli 10 saham 809 00:47:57,740 --> 00:48:00,700 dalam tetingkap lain sama sekali, sama seperti ATM - 810 00:48:00,700 --> 00:48:05,410 dan menganggap bahawa pertanyaan lagi mendapat di antara SELECT dan UPDATE. 811 00:48:05,410 --> 00:48:10,210 Ia boleh menjadi kes yang Skroob kini kehilangan beberapa bilangan saham 812 00:48:10,210 --> 00:48:14,340 kerana proses lain memeriksa keadaan dunia, 813 00:48:14,340 --> 00:48:17,800 atau dia mendapat saham lebih daripada yang sepatutnya. 814 00:48:17,800 --> 00:48:23,250 Kami tidak akan pergi ke butir-butir dengan tepat apa yang mereka kisah tertentu akan, 815 00:48:23,250 --> 00:48:28,380 tetapi persoalannya adalah jika anda mempunyai untuk memeriksa nilai pembolehubah dan kemudian membuat keputusan, 816 00:48:28,380 --> 00:48:32,500 jika terdapat risiko orang lain melakukan sesuatu di antara mereka 2 kenyataan, 817 00:48:32,500 --> 00:48:36,220 yang boleh berlaku dalam sistem multipemproses, multicore sistem, 818 00:48:36,220 --> 00:48:41,220 komputer dengan keupayaan untuk melakukan perkara-perkara sekaligus, perkara-perkara buruk boleh berlaku 819 00:48:41,220 --> 00:48:44,530 akaun bank seperti didebitkan tidak betul, membeli susu dua kali ganda, 820 00:48:44,530 --> 00:48:46,730 atau dalam kes ini nombor yang salah saham. 821 00:48:46,730 --> 00:48:48,370 Tetapi ada cara yang lebih mudah untuk berfikir tentang perkara ini. 822 00:48:48,370 --> 00:48:53,290 >> Ia ternyata bahawa SQL juga menyokong, jika anda menetapkan jadual anda dengan betul, 823 00:48:53,290 --> 00:48:56,920 sesuatu yang dipanggil transaksi, yang saya akan berhujah adalah sebenarnya lebih mudah untuk memahami 824 00:48:56,920 --> 00:49:00,650 daripada ini, tetapi ia bukan 1-liner, jadi ia sebenarnya sedikit lebih terlibat. 825 00:49:00,650 --> 00:49:04,960 Terdapat literal kenyataan dalam SQL dipanggil START TRANSAKSI. 826 00:49:04,960 --> 00:49:08,300 Sama seperti terdapat SELECT, UPDATE, INSERT, DELETE, dan JOIN dan sekumpulan orang lain, 827 00:49:08,300 --> 00:49:10,970 terdapat kata kunci seperti TRANSAKSI START. 828 00:49:10,970 --> 00:49:13,560 Dan apa yang anda kemudian melakukan dalam konteks-pset 7 - 829 00:49:13,560 --> 00:49:17,270 anda tidak perlu untuk melakukan ini untuk pset 7; ia jelas ditolak sebagai tidak perlu, 830 00:49:17,270 --> 00:49:18,830 tetapi untuk projek akhir ia boleh berguna - 831 00:49:18,830 --> 00:49:22,820 jika anda memanggil query TRANSAKSI START dan kemudian pertanyaan yang lain 832 00:49:22,820 --> 00:49:25,620 dan kemudian satu lagi pertanyaan dan kemudian yang lain, yang lain, dan satu lagi, 833 00:49:25,620 --> 00:49:31,860 pertanyaan akan sebenarnya tidak akan dilaksanakan sehingga anda memanggil kenyataan SQL melakukan, 834 00:49:31,860 --> 00:49:37,220 di mana titik, sama ada ia adalah 2 penyata atau 20 penyata, mereka semua akan dilaksanakan pada sekali, 835 00:49:37,220 --> 00:49:42,770 yang bermaksud tidak ada orang lain secara tidak sengaja boleh membeli susu yang terlalu banyak atau terlalu banyak wang debit 836 00:49:42,770 --> 00:49:46,340 atau membeli saham yang terlalu banyak kerana semua pertanyaan anda akan melaksanakan 837 00:49:46,340 --> 00:49:48,410 kembali ke belakang untuk kembali ke belakang. 838 00:49:48,410 --> 00:49:51,580 Dan ini adalah sangat penting, terutamanya apabila anda melakukan sesuatu seperti ini. 839 00:49:51,580 --> 00:49:54,900 Ini adalah satu contoh yang sewenang-wenangnya mengatakan mari mengemas kini akaun bank 840 00:49:54,900 --> 00:50:00,200 dengan menetapkan keseimbangan bersamaan dengan kira-kira - $ 1000 di mana nombor akaun ialah 2. 841 00:50:00,200 --> 00:50:04,260 Dan kemudian kenyataan kedua sekarang mari kita deposit bahawa $ 1000 842 00:50:04,260 --> 00:50:07,310 ke orang lain akaun bank yang nombor akaun adalah 1. 843 00:50:07,310 --> 00:50:10,400 >> Dalam erti kata lain, ini adalah satu contoh yang sempurna di mana anda ingin memastikan 844 00:50:10,400 --> 00:50:13,590 bahawa kedua-dua penyata ini berlaku atau tidak sama sekali 845 00:50:13,590 --> 00:50:15,450 kerana jika tidak, pelanggan akan mendapat diskrukan 846 00:50:15,450 --> 00:50:17,670 dan anda akan mengambil wang mereka dan tidak mendepositkan di tempat lain, 847 00:50:17,670 --> 00:50:20,470 atau bank akan mendapat diskrukan mana anda pergi untuk mendepositkan wang 848 00:50:20,470 --> 00:50:23,140 tetapi sebenarnya tidak tolak dari akaun pengguna. 849 00:50:23,140 --> 00:50:25,810 Jadi anda mahu kedua-dua mereka untuk melaksanakan bersama-sama. 850 00:50:25,810 --> 00:50:29,140 Oleh itu memasuki transaksi dunia. 851 00:50:29,140 --> 00:50:31,360 Jadi itulah sesuatu untuk menyimpan di belakang minda anda, 852 00:50:31,360 --> 00:50:34,710 tidak begitu banyak bagi maksud hanya projek akhir, 853 00:50:34,710 --> 00:50:36,700 tetapi jika anda mahu mengambil projek akhir anda tempat, 854 00:50:36,700 --> 00:50:39,040 jika anda mahu untuk memulakan beberapa syarikat di sekitar, 855 00:50:39,040 --> 00:50:41,270 jika anda mahu menyelesaikan masalah beberapa kumpulan pelajar di kampus 856 00:50:41,270 --> 00:50:45,210 dan sebenarnya mempunyai hidup, laman web yang aktif, ini adalah jenis pepijat yang halus yang boleh timbul 857 00:50:45,210 --> 00:50:49,480 jika anda tidak cukup berfikir melalui apa yang boleh berlaku jika 2 orang 858 00:50:49,480 --> 00:50:54,190 cuba untuk mengakses laman web anda di benar-benar masa yang sama dalam masa, 859 00:50:54,190 --> 00:50:56,890 mana pertanyaan mereka sebaliknya mungkin akan terjalin. 860 00:50:58,840 --> 00:51:01,420 >> Bersedia untuk beberapa JavaScript, penggoda daripadanya? 861 00:51:01,420 --> 00:51:04,320 Ini adalah bahasa kita yang terakhir bagi semester. Semua hak. 862 00:51:04,320 --> 00:51:09,940 Syukurlah, JavaScript kelihatan sangat, sangat, sangat serupa dengan 2 bahasa, C dan PHP, 863 00:51:09,940 --> 00:51:11,140 kita telah dilakukan setakat ini. 864 00:51:11,140 --> 00:51:14,340 Tiada JavaScript dalam pset 7, tetapi ia adalah satu alat yang amat berguna 865 00:51:14,340 --> 00:51:18,840 apabila ia datang untuk melakukan projek berasaskan web muktamad atau benar-benar hanya pengaturcaraan web yang lebih amnya. 866 00:51:18,840 --> 00:51:20,950 Jadi gambaran cepat sesuatu yang dipanggil DOM. 867 00:51:20,950 --> 00:51:23,600 Berikut adalah laman web yang sangat mudah yang benar-benar hanya berkata hello, dunia 868 00:51:23,600 --> 00:51:25,970 kedua-dua dalam tajuk dan di dalam badan. 869 00:51:25,970 --> 00:51:29,270 Sebagai pengengsotan telah mencadangkan untuk beberapa ketika, 870 00:51:29,270 --> 00:51:31,380 memang ada hierarki untuk laman web. 871 00:51:31,380 --> 00:51:34,220 Saya boleh menarik ini coretan sama HTML sebagai pokok, 872 00:51:34,220 --> 00:51:37,470 memikirkan kembali kepada perbincangan kita tentang struktur data dalam C, seperti berikut. 873 00:51:37,470 --> 00:51:40,710 Saya mempunyai beberapa nod akar khas dipanggil nod dokumen, 874 00:51:40,710 --> 00:51:43,650 dan kita akan melihat analog ini dalam JavaScript dalam hanya seketika. 875 00:51:43,650 --> 00:51:48,330 Anak pertama dan anak tunggal itu dalam kes ini adalah tag HTML. 876 00:51:48,330 --> 00:51:49,880 Tiada pemetaan langsung DOCTYPE yang. 877 00:51:49,880 --> 00:51:53,170 Itu adalah satu perkara yang istimewa, jadi kita hanya perlu mengabaikan apabila ia datang ini DOM, 878 00:51:53,170 --> 00:51:55,810 ini Objek Dokumen Model pokok. 879 00:51:55,810 --> 00:51:59,530 Perhatikan bahawa tag HTML, yang saya telah digambarkan sewenang-wenangnya sebagai sebuah segiempat tepat, 880 00:51:59,530 --> 00:52:02,890 mempunyai 2 anak: kepala dan badan. 881 00:52:02,890 --> 00:52:04,840 >> Mereka sama-sama dilukis sebagai segiempat tepat. 882 00:52:04,840 --> 00:52:08,970 Ia adalah bermakna bergambar bahawa kepala adalah ke kiri badan. 883 00:52:08,970 --> 00:52:11,960 Implikasinya adalah bahawa kepala datang pertama di pokok itu. 884 00:52:11,960 --> 00:52:14,910 Jadi ada sebenarnya pesanan kepada pokok apabila anda menarik ia seperti ini, 885 00:52:14,910 --> 00:52:17,460 walaupun bentuk dan barang kecil yang sewenang-wenangnya. 886 00:52:17,460 --> 00:52:20,360 Ketua pula mempunyai seorang anak tunggal yang dipanggil tajuk, 887 00:52:20,360 --> 00:52:25,170 dan tajuk sebenarnya mempunyai anak sendiri, yang merupakan "hello, dunia", 888 00:52:25,170 --> 00:52:32,210 yang saya sengaja menarik sebagai bujur di sini untuk membuat ia sedikit berbeza daripada segi empat tepat. 889 00:52:32,210 --> 00:52:37,420 Segiempat tepat ini adalah unsur-unsur, manakala hello, dunia adalah benar-benar nod teks. 890 00:52:37,420 --> 00:52:39,850 Jadi ia adalah satu nod dalam pokok itu, tetapi ia adalah satu jenis yang berbeza nod 891 00:52:39,850 --> 00:52:41,730 jadi saya menarik ia sewenang-wenangnya berbeza. 892 00:52:41,730 --> 00:52:45,000 Begitu juga tidak badan mempunyai kanak-kanak yang dipanggil hello, dunia serta, 893 00:52:45,000 --> 00:52:47,910 nod begitu berbeza walaupun mereka kebetulan teks yang sama, 894 00:52:47,910 --> 00:52:52,100 tetapi saya telah dilukis menggunakan bentuk yang sama. Jadi yang peduli? 895 00:52:52,100 --> 00:52:56,820 Nah, apa yang baik tentang HTML adalah bahawa ia tidak mempunyai sifat hierarki. 896 00:52:56,820 --> 00:53:01,010 Dan apa yang baik tentang JavaScript dan terutamanya perpustakaan yang disediakan secara terbuka 897 00:53:01,010 --> 00:53:07,120 dan popular seperti jQuery, anda boleh menavigasi struktur pokok yang begitu menakjubkan mudah. 898 00:53:07,120 --> 00:53:11,790 Mana-mana barangan yang kita lakukan dalam C dengan petunjuk dan pokok menyeberangi dan recursing pada nod 899 00:53:11,790 --> 00:53:15,300 anak kiri untuk kanak-kanak yang betul, tiba-tiba kita boleh menyusun mengambil untuk diberikan 900 00:53:15,300 --> 00:53:19,450 sebagai menakjubkan menyedarkan jika tidak sedikit mengecewakan 901 00:53:19,450 --> 00:53:22,470 tetapi tidak hampir cara yang berkesan untuk pergi tentang pengaturcaraan. 902 00:53:22,470 --> 00:53:24,470 Dan sebagainya dengan bahasa ini di peringkat yang lebih tinggi seperti JavaScript 903 00:53:24,470 --> 00:53:28,340 kita akan menjadi mampu untuk mengemudi pokok ini lebih intuitif. 904 00:53:28,340 --> 00:53:30,430 >> Dan sesungguhnya sintaks akan menjadi agak biasa. 905 00:53:30,430 --> 00:53:32,950 Jika anda tidak pernah dilihat JavaScript sebelum ini, ini adalah rujukan yang benar-benar baik 906 00:53:32,950 --> 00:53:35,910 daripada orang Mozilla, orang-orang yang membuat Firefox, 907 00:53:35,910 --> 00:53:38,370 jadi jangan berasa bebas untuk melayari bahawa mengikut keselesaan anda. 908 00:53:38,370 --> 00:53:41,590 Apa yang anda akan menemui dan slaid ini adalah sama dengan apa yang kita menggunakan hari lain - 909 00:53:41,590 --> 00:53:44,030 sama, utama hilang. 910 00:53:44,030 --> 00:53:47,010 Jadi apabila anda menulis program dalam JavaScript, tidak ada fungsi utama. 911 00:53:47,010 --> 00:53:48,690 Anda hanya mula menulis kod. 912 00:53:48,690 --> 00:53:51,660 Tetapi perbezaan utama antara JavaScript dan C dan PHP 913 00:53:51,660 --> 00:53:55,890 adalah bahawa manakala C dan PHP setakat ini telah dilaksanakan sebelah pelayan 914 00:53:55,890 --> 00:53:59,180 oleh perkakas dalam kes ini atau lebih secara amnya oleh pelayan, 915 00:53:59,180 --> 00:54:04,270 JavaScript oleh reka bentuk biasanya dijalankan oleh pelayar. 916 00:54:04,270 --> 00:54:08,440 Dalam erti kata lain, anda mungkin menulis kod JavaScript, seperti yang kita kira-kira untuk, 917 00:54:08,440 --> 00:54:13,080 pada pelayan dalam perkakas, tetapi anda termasuk di kalangan HTML anda, antara CSS anda, 918 00:54:13,080 --> 00:54:16,100 antara GIF dan PNGS anda dan JPEG anda 919 00:54:16,100 --> 00:54:19,170 supaya apabila pengguna melawat laman web anda, jika anda menggunakan JavaScript, 920 00:54:19,170 --> 00:54:21,770 bahawa kod JavaScript datang dari pelayan kepada pelayar, 921 00:54:21,770 --> 00:54:24,540 dan ia adalah pelayar yang benar-benar melaksanakan ia. 922 00:54:24,540 --> 00:54:27,960 Jadi ini mempunyai implikasi yang bermakna untuk harta walaupun intelektual. 923 00:54:27,960 --> 00:54:32,600 Ia jenis bodoh untuk berfikir tentang melindungi IP anda apabila ia datang kepada kod JavaScript 924 00:54:32,600 --> 00:54:37,560 kerana dengan sifat bahasa ia mendapat dilaksanakan biasanya sebelah pelayar. 925 00:54:37,560 --> 00:54:40,360 >> Anda boleh menggelapkan, yang bermakna anda boleh membuat ia kelihatan gila dan hodoh 926 00:54:40,360 --> 00:54:45,400 dengan tiada ruang kosong, dahsyat nama pemboleh ubah, untuk membuat ia lebih sukar bagi orang-orang untuk mencuri IP anda, 927 00:54:45,400 --> 00:54:48,120 tetapi utama adalah bahawa ia dilaksanakan sampingan pelayar. 928 00:54:48,120 --> 00:54:51,790 Walaupun sebagai satu sisi pelayan selain JavaScript boleh digunakan, 929 00:54:51,790 --> 00:54:54,480 kes penggunaan yang paling biasa sekarang masih pada pelayar. 930 00:54:54,480 --> 00:54:59,800 Dan di sini adalah apa yang kelihatan seperti. Berikut adalah jika-lain jika-lain membina seperti C, hanya seperti PHP. 931 00:54:59,800 --> 00:55:02,420 Berikut adalah ungkapan Boolean apabila anda "atau" 2 perkara bersama-sama. 932 00:55:02,420 --> 00:55:04,330 Berikut adalah apabila anda "dan" 2 perkara bersama-sama. 933 00:55:04,330 --> 00:55:08,300 Berikut adalah kenyataan suis, yang mirip dengan PHP 934 00:55:08,300 --> 00:55:10,810 di mana anda boleh menukar pada jenis nilai-nilai yang berbeza. 935 00:55:10,810 --> 00:55:15,180 Gelung sama ada untuk gelung di sini, yang distrukturkan sepercaman kepada apa yang kita telah lihat sebelum. 936 00:55:15,180 --> 00:55:18,110 Walaupun gelung, kita telah mendapat lakukan manakala gelung. 937 00:55:18,110 --> 00:55:20,290 Pembolehubah, pernah jadi sedikit berbeza. 938 00:55:20,290 --> 00:55:24,560 Anda tidak mengisytiharkan pembolehubah seperti yang anda lakukan dalam PHP dan C, 939 00:55:24,560 --> 00:55:27,860 tetapi sama hidupkan lemah ditaip. 940 00:55:27,860 --> 00:55:32,730 Anda tidak menentukan int atau float atau tali atau apa-apa seperti yang lazimnya. 941 00:55:32,730 --> 00:55:34,240 Anda boleh menentukan var. 942 00:55:34,240 --> 00:55:38,040 Anda tidak perlu untuk menentukan var, tetapi ia mempunyai implikasi jika anda tidak lakukan. 943 00:55:38,040 --> 00:55:42,000 Biasanya jika anda meninggalkan var, anda secara tidak sengaja mewujudkan pembolehubah global bukan tempatan. 944 00:55:42,000 --> 00:55:46,420 Jadi biarlah saya mencadangkan bahawa anda hampir sentiasa hanya mengatakan var dan kemudian nama pembolehubah. 945 00:55:46,420 --> 00:55:48,740 Ia bukan jenis, ia adalah hanya var bagi pemboleh ubah. 946 00:55:48,740 --> 00:55:52,930 Ini akan menjadi contoh, sama ada ia adalah 123 atau "hello, dunia". 947 00:55:52,930 --> 00:55:58,910 Perlengkapan hadir dan syntactically mirip dengan PHP. 948 00:55:58,910 --> 00:56:03,690 Saya akan mengatakan nombor var dan kemudian saya menggunakan kurungan persegi lagi untuk mengisytiharkan pembolehubah 949 00:56:03,690 --> 00:56:08,870 yang jenis tatasusunan yang mempunyai nombor-nombor tertentu di dalamnya dipisahkan dengan koma. 950 00:56:08,870 --> 00:56:11,740 Dan kemudian akhir sekali, ini adalah satu-satunya yang benar-benar kelihatan berbeza. 951 00:56:11,740 --> 00:56:16,700 Ingat bahawa dalam PHP kita akan melaksanakan pelbagai bersekutu bagi pelajar 952 00:56:16,700 --> 00:56:20,220 ke seperti Zamyla yang mungkin kelihatan seperti ini, di mana pembolehubah dipanggil pelajar. 953 00:56:20,220 --> 00:56:23,370 Kurungan persegi bermakna sini datang array. 954 00:56:23,370 --> 00:56:28,500 >> Hakikat bahawa saya tidak menggunakan indeks tetapi rentetan angka - id, rumah, dan nama - 955 00:56:28,500 --> 00:56:30,990 bermakna bahawa ini adalah satu array bersekutu, 956 00:56:30,990 --> 00:56:34,490 dan anak panah ini dengan tanda sama dan pendakap bersudut 957 00:56:34,490 --> 00:56:37,310 bermakna bahawa kunci adalah "id", nilai 1; 958 00:56:37,310 --> 00:56:39,310 utama adalah "rumah", nilai Winthrop House; 959 00:56:39,310 --> 00:56:41,800 utama adalah "nama", nilai adalah Zamyla Chan. 960 00:56:41,800 --> 00:56:47,110 Jadi, terdapat 3 kunci dalam array ini bersekutu, setiap yang mempunyai nilai tersendiri. 961 00:56:47,110 --> 00:56:52,880 Kita telah melihat bahawa dalam pset 7, atau anda tidak lama lagi akan, dalam idea JavaScript sama, 962 00:56:52,880 --> 00:56:55,220 tetapi ia akan kelihatan seperti ini. 963 00:56:55,220 --> 00:57:00,070 Pelajar yang Jadi var - tiada tanda dolar dan tidak menyebut jenis masih tetapi var - 964 00:57:00,070 --> 00:57:05,860 sama dan kemudian membuka pendakap kerinting kerana dalam JavaScript apabila anda mempunyai pasangan nilai utama, 965 00:57:05,860 --> 00:57:08,900 anda sebenarnya menggunakan sesuatu yang dipanggil objek. 966 00:57:08,900 --> 00:57:13,490 Dan orang-orang yang tidak mengambil APC atau seperti mungkin ingat objek dari Jawa 967 00:57:13,490 --> 00:57:15,140 atau bahasa yang sama. 968 00:57:15,140 --> 00:57:17,880 JavaScript bukan Jawa, pertama sekali. 969 00:57:17,880 --> 00:57:21,600 Ia adalah keputusan yang sengaja reka bentuk tahun lalu untuk mengetuk sesuatu yang lain yang popular, 970 00:57:21,600 --> 00:57:25,640 namanya, walaupun ia tidak mempunyai hubungan asas ke Jawa sendiri. 971 00:57:25,640 --> 00:57:31,490 JavaScript mempunyai objek, dan anda mencipta mereka dengan cara notasi bersedia kerinting. 972 00:57:31,490 --> 00:57:36,710 Objek di JavaScript cukup banyak bersamaan kepada barisan bersekutu dalam PHP 973 00:57:36,710 --> 00:57:40,030 apabila ia datang untuk menyimpan data di dalam mereka. 974 00:57:40,030 --> 00:57:44,100 >> Tetapi lebih kuat di JavaScript anda boleh mengaitkan sangat mudah fungsi-fungsi 975 00:57:44,100 --> 00:57:48,040 di dalam sesuatu objek, dan walaupun anda boleh lakukan ini dalam bahasa lain, 976 00:57:48,040 --> 00:57:50,040 ia adalah satu paradigma yang agak biasa, seperti yang kita akan lihat. 977 00:57:50,040 --> 00:57:54,380 Secara ringkas, objek ini mewakili pelajar, yang terutamanya Zamyla, 978 00:57:54,380 --> 00:58:00,380 dan ia adalah serupa konsep, hanya syntactically berbeza daripada ini. 979 00:58:00,380 --> 00:58:03,840 Mari kita sebenarnya menggunakan JavaScript dalam satu fail. 980 00:58:03,840 --> 00:58:05,570 Ia ternyata ada tag skrip. 981 00:58:05,570 --> 00:58:08,180 Kami telah melihat tag gaya dan kita telah melihat tag HTML yang lain. 982 00:58:08,180 --> 00:58:11,510 Tag skrip sebenarnya akan mengandungi beberapa kod JavaScript. 983 00:58:11,510 --> 00:58:15,500 Biar saya pergi ke dalam perkakas di mana kita mempunyai beberapa kod sumber pra-dibuat. 984 00:58:15,500 --> 00:58:18,700 Saya telah tidak diberikan lagi di laman web, tetapi saya akan berbuat demikian selepas kelas. 985 00:58:18,700 --> 00:58:21,770 Mari kita membuka satu ini, blink.html. 986 00:58:21,770 --> 00:58:27,560 Kembali pada tahun 1990-an, terdapat literal satu tag HTML dipanggil tag sekelip, 987 00:58:27,560 --> 00:58:30,340 dan ini adalah salah satu tag yang paling hebat secara berlebihan di Internet 988 00:58:30,340 --> 00:58:36,140 di mana anda akan melawat beberapa laman web 1990-an gaya dan mula melihat teks berkelip anda seperti ini, 989 00:58:36,140 --> 00:58:39,810 keputusan tag Marquis, yang telah teks akan seperti ini. 990 00:58:39,810 --> 00:58:45,070 Salah satu daripada beberapa kali di mana dunia sebenarnya telah bersetuju pada standard web, 991 00:58:45,070 --> 00:58:48,250 semua orang di seluruh lembaga membunuh tag sekelip beberapa tahun lalu. 992 00:58:48,250 --> 00:58:52,860 Tetapi kita boleh membangkitkan dengan JavaScript sebagai demonstrasi kuasa anda mempunyai 993 00:58:52,860 --> 00:58:56,660 apabila anda boleh menulis program di dalam laman web. 994 00:58:56,660 --> 00:59:00,240 Pertama mari kita melangkau ke atas barangan yang baru dan memberi tumpuan hanya pada yang lama. 995 00:59:00,240 --> 00:59:01,780 >> Berikut adalah barangan lama dalam contoh ini. 996 00:59:01,780 --> 00:59:06,350 Saya mempunyai tag HTML, tag kepala, dan tag tajuk. 997 00:59:06,350 --> 00:59:11,210 Kemudian saya mempunyai tag badan di sini dengan span, yang ingat hanya satu bahagian segiempat halaman 998 00:59:11,210 --> 00:59:14,720 bahawa saya telah diberikan ID unik sewenang-wenangnya "ucapan" kepada, 999 00:59:14,720 --> 00:59:18,320 hanya jadi saya mempunyai cara yang unik merujuk kepada, yang mempunyai beberapa teks yang sangat mudah: 1000 00:59:18,320 --> 00:59:20,220 hello, dunia. 1001 00:59:20,220 --> 00:59:23,940 Sekarang mari saya tatal ke atas ke atas fail ini dan lihat apa yang baru. 1002 00:59:23,940 --> 00:59:27,710 Perkara pertama yang top up baru adalah tag skrip, 1003 00:59:27,710 --> 00:59:31,280 dan di dalam notis tag skrip saya telah mengisytiharkan fungsi. 1004 00:59:31,280 --> 00:59:34,610 Untuk mengisytiharkan fungsi dalam JavaScript, agak mirip dengan PHP, 1005 00:59:34,610 --> 00:59:37,930 anda benar-benar menulis fungsi maka nama fungsi, kurungan, 1006 00:59:37,930 --> 00:59:40,400 dan mungkin beberapa hujah jika ia mengambil apa-apa. 1007 00:59:40,400 --> 00:59:43,510 Kemudian saya telah mendapat pendakap kerinting saya seperti biasa, dan kini kita mempunyai beberapa kod baru sedikit, 1008 00:59:43,510 --> 00:59:45,230 tetapi mari kita lihat apa ini bermakna. 1009 00:59:45,230 --> 00:59:48,670 Jadi div var, ini hanya bermaksud memberi saya div dipanggil ubah. 1010 00:59:48,670 --> 00:59:50,530 Saya boleh telah dipanggil ia foo, tetapi saya mahu ia akan dipanggil div 1011 00:59:50,530 --> 00:59:52,620 atas sebab-sebab yang akan menjadi jelas dalam kedua. 1012 00:59:52,620 --> 00:59:57,480 Kemudian ia ternyata di JavaScript - dan ini adalah kod JavaScript tertanam dalam laman web saya - 1013 00:59:57,480 --> 01:00:01,760 terdapat pembolehubah khas global pelbagai dipanggil dokumen. 1014 01:00:01,760 --> 01:00:04,780 JavaScript adalah sebenarnya bahasa berorientasi objek. 1015 01:00:04,780 --> 01:00:07,230 Kami tidak akan pergi ke terperinci pada 50 kepada apa yang bermakna, 1016 01:00:07,230 --> 01:00:11,180 tetapi untuk sekarang tahu bahawa objek adalah cukup banyak seperti struct. 1017 01:00:11,180 --> 01:00:14,740 Seperti yang kita lihat cara kembali apabila dalam satu masalah yang terawal set 1018 01:00:14,740 --> 01:00:17,150 di mana kita meletakkan banyak maklumat dalam struct, 1019 01:00:17,150 --> 01:00:21,330 sama dokumen struct khas yang dilengkapi dengan pelayar, 1020 01:00:21,330 --> 01:00:24,810 datang dengan mana-mana laman web. Ia bukan sesuatu yang saya mencipta. 1021 01:00:24,810 --> 01:00:28,210 Dalam struktur dokumen ini, walaupun, anda perlu bukan hanya data 1022 01:00:28,210 --> 01:00:30,010 tetapi anda juga mempunyai fungsi. 1023 01:00:30,010 --> 01:00:34,090 >> Dan bila-bila masa anda mempunyai fungsi di dalam struktur, di dalam sesuatu objek, 1024 01:00:34,090 --> 01:00:36,490 ia dipanggil kaedah. Tetapi ia adalah perkara yang sama. 1025 01:00:36,490 --> 01:00:40,110 Kaedah A adalah fungsi yang hanya kebetulan berada di dalam sesuatu yang lain. 1026 01:00:40,110 --> 01:00:42,990 Jadi ini bermakna bahawa ini pembolehubah global khas yang dipanggil dokumen 1027 01:00:42,990 --> 01:00:47,690 fungsi dipanggil getElementById yang benar-benar adakah itu. 1028 01:00:47,690 --> 01:00:52,460 Ia akan membawa anda satu elemen dari DOM, pokok Model Objek Dokumen, 1029 01:00:52,460 --> 01:00:55,520 yang ID adalah dalam ucapan kes ini. 1030 01:00:55,520 --> 01:00:59,200 Dalam erti kata lain, semua bahawa masa kita dibelanjakan ke atas struktur data mula bermain di sini. 1031 01:00:59,200 --> 01:01:01,400 Ini gambar DOM bahawa kita mempunyai seketika lalu, 1032 01:01:01,400 --> 01:01:06,100 walaupun halaman adalah sedikit berbeza, jika saya terpaksa div dalam gambar ini, 1033 01:01:06,100 --> 01:01:11,180 document.getElementById apa yang akan kembali kepada saya dengan berkesan akan menjadi penunjuk 1034 01:01:11,180 --> 01:01:15,440 segi empat tepat dalam pokok, rujukan kepada segi empat tepat di pokok itu. 1035 01:01:15,440 --> 01:01:18,410 Jadi itulah apa yang ia bermaksud untuk benar-benar memanggil salah satu daripada fungsi-fungsi. 1036 01:01:18,410 --> 01:01:21,960 Dalam kes ini, sekali lagi ia div. Ia bukan satu badan atau tajuk. 1037 01:01:21,960 --> 01:01:26,480 Jadi mari kita lihat apa yang saya kemudian lakukan dengan span ini sekarang bahawa saya mempunyai ia di dalam div variabel ini dipanggil. 1038 01:01:26,480 --> 01:01:32,580 Ia ternyata dengan JavaScript anda mempunyai keupayaan untuk tweak CSS halaman anda dinamik. 1039 01:01:32,580 --> 01:01:39,060 Sehingga kini, semua CSS kita telah dilakukan, walaupun terhad, adalah dalam sifat gaya, 1040 01:01:39,060 --> 01:01:41,730 atau mana lagi kita telah meletakkan CSS? 1041 01:01:42,730 --> 01:01:45,810 Saya jenis rosak bahawa salah. Dalam tag gaya di atas fail. 1042 01:01:45,810 --> 01:01:49,180 Atau tempat ketiga telah di? 1043 01:01:50,710 --> 01:01:54,590 >> Satu fail luaran, sesuatu. Css. 1044 01:01:54,590 --> 01:01:56,730 Jadi mereka adalah 3 tempat-tempat yang kita telah dilakukan CSS setakat, 1045 01:01:56,730 --> 01:01:59,310 tetapi tangkapan adalah kita telah dikodkan ia semua. 1046 01:01:59,310 --> 01:02:04,060 Anda memutuskan kerana anda merpati ke pset 7, kami memutuskan sebelum bersyarah apa CSS kita akan menjadi. 1047 01:02:04,060 --> 01:02:07,380 Tetapi jika anda mahu untuk menukar CSS anda, anda sebenarnya boleh berbuat demikian 1048 01:02:07,380 --> 01:02:09,370 apabila anda mempunyai bahasa pengaturcaraan sebenar. 1049 01:02:09,370 --> 01:02:13,910 CSS, HTML - bukan bahasa pengaturcaraan. JavaScript adalah. 1050 01:02:13,910 --> 01:02:18,200 Jadi ia ternyata bahawa sebaik sahaja anda mempunyai salah satu daripada mereka segiempat tepat dari pokok 1051 01:02:18,200 --> 01:02:23,050 dipanggil DOM, ia mempunyai sendiri beberapa data di dalamnya. 1052 01:02:23,050 --> 01:02:27,820 Jadi div bahawa saya hanya meraih dari pokok itu mempunyai apa yang kita akan memanggil harta di dalamnya 1053 01:02:27,820 --> 01:02:34,390 dipanggil gaya, dan harta gaya mempunyai sendiri harta yang dipanggil penglihatan. 1054 01:02:34,390 --> 01:02:37,330 Saya ingin tahu ini hanya dengan melihat manual pengguna CSS. 1055 01:02:37,330 --> 01:02:41,160 Ia ternyata ada harta penglihatan CSS yang melakukan apa yang dikatakannya. 1056 01:02:41,160 --> 01:02:44,530 Ia membuat sesuatu yang boleh dilihat atau tidak, kelihatan atau tidak. 1057 01:02:44,530 --> 01:02:46,810 Dan bagaimana anda lakukan yang ini. 1058 01:02:46,810 --> 01:02:50,510 Saya bertanya programatik jika penglihatan div ini tersembunyi, 1059 01:02:50,510 --> 01:02:53,390 apa yang saya mengubahnya? Kelihatan. 1060 01:02:53,390 --> 01:02:58,840 Lain jika penglihatan halaman ini tidak tersembunyi, secara logiknya saya membuat ia tersembunyi. 1061 01:02:58,840 --> 01:03:04,070 Saya tidak tahu mengapa ia kelihatan dan tersembunyi dan tidak dapat dilihat dan tidak kelihatan. 1062 01:03:04,070 --> 01:03:06,000 Ini adalah sebuah keputusan reka bentuk yang miskin di sepanjang jalan. 1063 01:03:06,000 --> 01:03:09,530 Tetapi mereka memang bertentangan dalam CSS: kelihatan dan tersembunyi. 1064 01:03:09,530 --> 01:03:15,520 Semua ini tidak adalah ia bermakna mengubah CSS fail saya di dalam dan di luar, di dalam dan luar 1065 01:03:15,520 --> 01:03:16,870 untuk div yang tertentu. 1066 01:03:16,870 --> 01:03:20,630 Tetapi sekali lagi, ini adalah satu fungsi yang dipanggil sekelip. Apabila fungsi sekelip dipanggil? 1067 01:03:20,630 --> 01:03:24,080 Ia ternyata bahawa terdapat satu lagi tetingkap khas ubah global yang dipanggil, 1068 01:03:24,080 --> 01:03:28,220 serupa dalam semangat untuk dokumen, tetapi manakala dokumen itu merujuk kepada laman web anda, 1069 01:03:28,220 --> 01:03:31,700 seperti pokok DOM, HTML anda dihantar dari pelayan, 1070 01:03:31,700 --> 01:03:35,250 tetingkap merujuk kepada krom di sekeliling, bar alamat, bar tajuk, 1071 01:03:35,250 --> 01:03:37,880 dan semua barangan yang di seluruh laman web anda. 1072 01:03:37,880 --> 01:03:42,800 >> Dan ternyata bahawa objek tingkap mempunyai dalam fungsi khas ia dipanggil setInterval 1073 01:03:42,800 --> 01:03:44,360 yang melakukan apa yang dikatakannya. 1074 01:03:44,360 --> 01:03:48,600 Ia akan menetapkan selang - dalam kes ini setiap 500 milisaat - 1075 01:03:48,600 --> 01:03:52,270 dan mengambil tekaan, apa yang ia akan lakukan setiap 500 milisaat? 1076 01:03:52,270 --> 01:03:55,240 Ia akan melaksanakan bahawa sekelip fungsi. 1077 01:03:55,240 --> 01:03:58,560 Dan apa yang baik di sini adalah bahawa kita boleh melakukan ini dalam C walaupun kita tidak pernah. 1078 01:03:58,560 --> 01:04:01,580 C tidak mempunyai sesuatu yang dipanggil penunjuk fungsi di mana anda boleh lulus fungsi sekitar 1079 01:04:01,580 --> 01:04:03,140 sebagai hujah. 1080 01:04:03,140 --> 01:04:07,620 Begitu juga di JavaScript anda boleh lulus nama fungsi ke fungsi yang lain. 1081 01:04:07,620 --> 01:04:10,630 Dan notis apa yang saya lakukan. Saya tidak melakukan ini. 1082 01:04:10,630 --> 01:04:14,380 Jika saya meletakkan kurungan selepas sekelip, yang akan bermakna memanggil fungsi sekelip. 1083 01:04:14,380 --> 01:04:17,430 Jika saya meninggalkan mereka, yang bermaksud di sini adalah fungsi sekelip 1084 01:04:17,430 --> 01:04:21,330 jadi setInterval yang boleh memanggil ia setiap 500 milisaat. 1085 01:04:21,330 --> 01:04:28,200 Jadi keputusan akhir, kejam walaupun ia adalah, adalah bahawa jika saya pergi ke localhost dan pergi ke blink.html, 1086 01:04:28,200 --> 01:04:32,120 Saya kini mempunyai perkara ini berlaku sekali lagi dan sekali lagi. 1087 01:04:32,120 --> 01:04:34,950 Dan jika saya sebenarnya Memeriksa Unsur, mari kita lihat jika kita boleh melihat ini. 1088 01:04:34,950 --> 01:04:38,550 Mari saya Memeriksa Unsur, biarlah saya tatal ke bawah sedikit sahaja, 1089 01:04:38,550 --> 01:04:44,320 biarlah saya memilih Elemen di sini, dan notis dalam DOM pemeriksa Chrome. 1090 01:04:44,320 --> 01:04:48,840 Ia benar-benar berubah dan berulang-alik setiap 500 milisaat. 1091 01:04:48,840 --> 01:04:55,660 Jika kita pergi kepada rakan Nate kami, 1092 01:04:55,660 --> 01:05:00,020 jika anda pernah tertanya-tanya bagaimana ini bekerja, idea yang serupa dengan selang, 1093 01:05:00,020 --> 01:05:04,810 tetapi Nate sebenarnya membuat penggunaan yang sangat berkesan warna dalam kes ini, khususnya di sini. 1094 01:05:04,810 --> 01:05:07,350 Jadi apa lagi yang boleh kita sebenarnya lakukan dengan ini? 1095 01:05:07,350 --> 01:05:09,990 Mari kita membuka satu lagi contoh dan cuba sesuatu 1096 01:05:09,990 --> 01:05:12,940 itulah programatik lebih berguna daripada membuat sekelip perkara. 1097 01:05:12,940 --> 01:05:17,990 Biar saya pergi ke dalam direktori bentuk kami hari ini dan pergi ke form0. 1098 01:05:17,990 --> 01:05:20,820 Ini adalah bentuk seburuk mungkin bahawa saya boleh tampil dengan, 1099 01:05:20,820 --> 01:05:23,290 dan biarlah saya hanya menunjukkan kepada anda apa yang ia kelihatan seperti dalam pelayar. 1100 01:05:23,290 --> 01:05:28,960 >> Biar saya pergi ke localhost / borang, dan ini adalah form0. 1101 01:05:28,960 --> 01:05:33,400 Ini adalah satu bentuk super hodoh HTML yang mempunyai bidang beberapa untuk e-mel, kata laluan, 1102 01:05:33,400 --> 01:05:37,190 kata laluan, dan kemudian checkbox sedikit untuk bersetuju dengan beberapa terma dan syarat. 1103 01:05:37,190 --> 01:05:41,350 Tangkapan adalah jika saya melawat borang ini dan saya tidak mahu memberi anda alamat e-mel saya, 1104 01:05:41,350 --> 01:05:44,730 Saya tidak mahu untuk bersetuju dengan terma dan syarat yang mungkin, saya boleh klik Register 1105 01:05:44,730 --> 01:05:46,920 dan ia membolehkan saya melalui anyway. 1106 01:05:46,920 --> 01:05:50,800 Ini berlaku untuk mengemukakan kepada fail PHP bodoh dipanggil dump.php. 1107 01:05:50,800 --> 01:05:58,420 Semua ia adalah mencetak kandungan $ _GET hanya untuk tujuan diagnostik. 1108 01:05:58,420 --> 01:06:01,580 Itu adalah apa yang telah dikemukakan oleh pengguna tadi. 1109 01:06:01,580 --> 01:06:05,010 Tetapi andaikan kita benar-benar mahu untuk mengesahkan penghantaran borang pengguna. 1110 01:06:05,010 --> 01:06:06,530 Biar saya pergi ke versi 1. 1111 01:06:06,530 --> 01:06:11,420 Ini adalah form1.html. Ia kelihatan estetik hanya sebagai lapuk, tetapi notis bagaimana ia mewah. 1112 01:06:11,420 --> 01:06:15,450 Jika saya klik Daftar tanpa bekerjasama, saya mendapat menjerit. 1113 01:06:15,450 --> 01:06:17,320 "Anda mesti memberikan alamat e-mel anda." 1114 01:06:17,320 --> 01:06:21,670 Semua hak. Jadi biarlah saya cuba itu. Jadi malan@harvard.edu. Saya tidak memerlukan kata laluan. 1115 01:06:21,670 --> 01:06:25,100 Mendaftar. "Anda mesti memberi kata laluan." Semua hak. 1116 01:06:25,100 --> 01:06:28,470 Jadi, saya akan memberikan kata laluan lembayung. Mendaftar. 1117 01:06:28,470 --> 01:06:32,300 "Kata laluan tidak sepadan." Saya kini perlu menaip di sini lembayung. 1118 01:06:32,300 --> 01:06:35,710 Saya sengaja diperiksa bahawa. Mendaftar. 1119 01:06:35,710 --> 01:06:39,860 "Anda mesti bersetuju dengan terma dan syarat." Semua hak. Setuju sana. Mendaftar. 1120 01:06:39,860 --> 01:06:43,700 Dan kini ia menunjukkan saya output diagnostik di sana. 1121 01:06:43,700 --> 01:06:45,630 >> Jadi apa yang berlaku? 1122 01:06:45,630 --> 01:06:48,330 Kami telah mempunyai keupayaan untuk mengesahkan penghantaran borang. 1123 01:06:48,330 --> 01:06:51,420 Malah, jika anda tidak menyelam ke dalam pset 7, terdapat satu fungsi Apologize 1124 01:06:51,420 --> 01:06:54,620 yang menjadikan ia agak mudah untuk menjerit pada pengguna dengan mesej pada skrin. 1125 01:06:54,620 --> 01:06:57,580 Saya menggunakan mekanisme yang sedikit berbeza, fungsi amaran, 1126 01:06:57,580 --> 01:07:03,690 yang bukan merupakan fungsi yang Tersenyum kerana ia membuatkan mesej pengguna yang sangat hodoh. 1127 01:07:03,690 --> 01:07:05,710 Tetapi mari kita lihat apa yang saya lakukan di sini. 1128 01:07:05,710 --> 01:07:09,620 Ini adalah form1.html, dan notis bahawa saya mempunyai beberapa sintaks yang cukup biasa: 1129 01:07:09,620 --> 01:07:12,920 badan tag, tag bentuk, sifat tindakan, sifat kaedah. 1130 01:07:12,920 --> 01:07:17,050 Tetapi notis Saya telah diberikan borang saya ID unik untuk kemudahan. 1131 01:07:17,050 --> 01:07:19,190 Kemudian saya telah mendapat satu bidang e-mel yang jenis teks, 1132 01:07:19,190 --> 01:07:23,780 medan kata laluan yang jenis kata laluan, pengesahan bidang yang jenis kata laluan, 1133 01:07:23,780 --> 01:07:28,070 dan kemudian checkbox yang namanya adalah perjanjian di sini, jenis kotak semak. 1134 01:07:28,070 --> 01:07:30,380 Dan kemudian saya telah mendapat butang submit. 1135 01:07:30,380 --> 01:07:33,050 Tetapi notis di atas apa yang lebih saya mempunyai. 1136 01:07:33,050 --> 01:07:35,810 Pertama sekali, terdapat satu lagi penggunaan tag skrip. 1137 01:07:35,810 --> 01:07:40,520 Jika anda mempunyai beberapa kod JavaScript dalam fail lain, seperti dengan CSS, anda boleh termasuk. 1138 01:07:40,520 --> 01:07:44,530 Dan anda berbuat demikian dengan sumber skrip, dan kemudian notis saya menyambung nampaknya 1139 01:07:44,530 --> 01:07:50,349 googleapis.com ke jalan yang sangat panjang tetapi nama fail yang berakhir di jquery.min 1140 01:07:50,349 --> 01:07:52,420 untuk minimum. js. 1141 01:07:52,420 --> 01:07:55,969 jQuery adalah sebuah perpustakaan super popular untuk JavaScript yang hanya membuat JavaScript 1142 01:07:55,969 --> 01:07:58,230 semua lebih user-friendly untuk digunakan. 1143 01:07:58,230 --> 01:08:00,610 Ia berkesan menjadi standard de facto. 1144 01:08:00,610 --> 01:08:04,090 Jadi, walaupun apa yang anda kira-kira untuk melihat tidak tulen JavaScript per se, 1145 01:08:04,090 --> 01:08:09,340 ia adalah sebuah perpustakaan di atas JavaScript banyak seperti perpustakaan CS50 adalah lapisan 1146 01:08:09,340 --> 01:08:13,670 di atas tahap rendah kod C; realitinya adalah hampir semua orang di Internet menggunakan ia. 1147 01:08:13,670 --> 01:08:18,030 Jadi ini tidak roda latihan. Ini adalah hanya yang terbaik mengamalkan hari ini. 1148 01:08:18,030 --> 01:08:22,830 Sekarang notis di bawah yang tag skrip saya sendiri, dan notis apa yang saya lakukan di sini. 1149 01:08:22,830 --> 01:08:27,450 Ia ternyata bahawa jQuery melakukan sesuatu mewah sedikit. 1150 01:08:27,450 --> 01:08:29,660 JavaScript mempunyai tanda-tanda dolar, tetapi mereka adalah sia-sia. 1151 01:08:29,660 --> 01:08:32,870 >> Mereka adalah seperti surat A atau B atau C. 1152 01:08:32,870 --> 01:08:36,670 jQuery hanya menerima pakai konvensyen atau jenis tuntutan dibentangkan kepada fakta 1153 01:08:36,670 --> 01:08:40,280 bahawa $ akan menjadi simbol khas mereka. 1154 01:08:40,280 --> 01:08:44,950 Demikian secepat anda memuatkan fail ini JavaScript global di sini dengan tag skrip, 1155 01:08:44,950 --> 01:08:49,080 anda mempunyai akses kepada pembolehubah khas global yang dipanggil $. 1156 01:08:49,080 --> 01:08:53,009 Ia lebih tepat dipanggil jQuery, tetapi yang tidak kelihatan hampir seperti seksi sebagai $. 1157 01:08:53,009 --> 01:08:56,250 Tetapi $ tidak mempunyai makna khas. Dalam PHP, ia mempunyai maksud yang istimewa. 1158 01:08:56,250 --> 01:08:58,440 Anda perlu mempunyai ia di hadapan pembolehubah. 1159 01:08:58,440 --> 01:09:01,670 Ini adalah hanya satu perkara seksi bahawa mereka mengambil. 1160 01:09:01,670 --> 01:09:03,389 Apa yang sedang berlaku di sini? 1161 01:09:03,389 --> 01:09:08,830 Notis saya berpindah kepada fungsi jQuery dokumen global saya ubah 1162 01:09:08,830 --> 01:09:10,860 dan kemudian saya memanggil bersedia. 1163 01:09:10,860 --> 01:09:15,480 Apa jQuery dasarnya tidak ialah ia membolehkan anda untuk mengambil beberapa perkara JavaScript vanila 1164 01:09:15,480 --> 01:09:17,889 seperti objek dokumen, objek tingkap, 1165 01:09:17,889 --> 01:09:20,790 dan jika anda lulus dalam fungsi jQuery - 1166 01:09:20,790 --> 01:09:24,429 dan sekali lagi, perlu jelas, ini adalah satu fungsi yang dipanggil jQuery - 1167 01:09:24,429 --> 01:09:28,240 apa yang ia adalah ia kembali kepada anda versi khas dokumen 1168 01:09:28,240 --> 01:09:30,700 yang mempunyai fungsi yang lebih dikaitkan dengannya. 1169 01:09:30,700 --> 01:09:34,760 Jadi dalam JavaScript mentah terdapat tiada fungsi bersedia, 1170 01:09:34,760 --> 01:09:37,810 tetapi jika anda lulus dokumen kepada fungsi jQuery pertama, 1171 01:09:37,810 --> 01:09:40,960 ia kembali kepada anda versi khas objek dokumen 1172 01:09:40,960 --> 01:09:43,030 yang mempunyai lebih banyak ciri-ciri mewah. 1173 01:09:43,030 --> 01:09:48,230 Dan itulah sebabnya orang suka. Ia hanya membuat perkara yang mudah untuk dilakukan, seperti yang kita kira-kira untuk melihat. 1174 01:09:48,230 --> 01:09:49,820 Jadi apakah garis kod ini bermakna? 1175 01:09:49,820 --> 01:09:52,690 Ini sejajar kod di sini bermakna apabila dokumen itu bersedia - 1176 01:09:52,690 --> 01:09:56,830 dalam erti kata lain, apabila pelayar dilakukan membaca fail ini atas ke bawah - 1177 01:09:56,830 --> 01:09:59,200 pergi ke hadapan dan melaksanakan fungsi berikut. 1178 01:09:59,200 --> 01:10:03,540 Apa yang benar-benar menarik dalam JavaScript dan PHP mempunyai ini serta - 1179 01:10:03,540 --> 01:10:05,450 adalah fungsi tanpa nama. 1180 01:10:05,450 --> 01:10:10,560 Di JavaScript anda boleh mengisytiharkan fungsi yang tidak mempunyai nama tetapi mereka mempunyai satu badan. 1181 01:10:10,560 --> 01:10:12,570 Notis apa yang berlaku di sini. 1182 01:10:12,570 --> 01:10:16,220 >> Ini adalah satu fungsi yang dipanggil bersedia, dan ia hanya bermaksud melakukan perkara yang berikut 1183 01:10:16,220 --> 01:10:20,220 apabila keseluruhan laman web adalah bersedia, apabila ia semua telah membaca dalam dari pelayan. 1184 01:10:20,220 --> 01:10:23,090 Apa yang anda mahu lakukan? Saya mahu untuk melaksanakan sebahagian kod. 1185 01:10:23,090 --> 01:10:27,120 Perhatikan bahawa kita tidak mahu untuk melaksanakan kod ini segera. 1186 01:10:27,120 --> 01:10:34,350 Jika saya ditinggalkan ini, ini bermakna segera mula melaksanakan baris kod. 1187 01:10:34,350 --> 01:10:39,040 Tetapi hakikat bahawa saya mengatakan tidak, tidak, tidak, balut ini dalam fungsi tanpa nama seperti ini 1188 01:10:39,040 --> 01:10:43,000 cara tidak melaksanakan ia lagi; memanggilnya akhirnya. 1189 01:10:43,000 --> 01:10:45,430 Kami melihat ini seketika lalu di contoh bentuk sebelumnya kami. 1190 01:10:45,430 --> 01:10:49,990 Apa fungsi adakah kita panggil akhirnya, 500 milisaat kemudian? Berkelip. 1191 01:10:49,990 --> 01:10:51,480 Jadi idea yang sama. 1192 01:10:51,480 --> 01:10:53,950 Sekali lagi, walaupun ini kelihatan sedikit pelik, hanya mengambil untuk saat pada iman 1193 01:10:53,950 --> 01:10:57,060 bahawa untuk mengisytiharkan fungsi tanpa nama yang dipanggil akhirnya, 1194 01:10:57,060 --> 01:11:01,720 anda hanya menulis function () { 1195 01:11:01,720 --> 01:11:05,380 Jadi apa kod kita akan pergi untuk melaksanakan akhirnya? Berikut. 1196 01:11:05,380 --> 01:11:10,460 Ini juga kelihatan baru sedikit, tetapi ini bermakna di sini adalah fungsi jQuery, 1197 01:11:10,460 --> 01:11:13,430 dan ini kini adalah jalan pintas. 1198 01:11:13,430 --> 01:11:18,830 Coretan HTML ini di bahagian bawah skrin sudah tentu mempunyai beberapa perwakilan pokok. 1199 01:11:18,830 --> 01:11:21,730 Ia tidak ini. Laman ini adalah lebih menarik daripada ini hello, contoh dunia. 1200 01:11:21,730 --> 01:11:25,210 Tetapi ada beberapa pokok yang sepadan dengan HTML ini. 1201 01:11:25,210 --> 01:11:28,910 Ia akan menjadi sakit di leher perlu melaksanakan beberapa jenis fungsi rekursi 1202 01:11:28,910 --> 01:11:34,380 bermula pada nod akar dan kemudian mencari nod yang ID ialah pendaftaran. 1203 01:11:34,380 --> 01:11:38,340 Jadi apa jQuery membuat super mudah bagi kita adalah benar-benar ini. 1204 01:11:38,340 --> 01:11:43,000 Teruskan dan mendapatkan saya apa div atau bentuk apa sahaja, apa jua HTML unsur 1205 01:11:43,000 --> 01:11:45,820 mempunyai ID pendaftaran. 1206 01:11:45,820 --> 01:11:52,440 Ini adalah bersamaan document.getElementById ('pendaftaran'). 1207 01:11:52,440 --> 01:11:54,170 >> Mengapa orang-orang seperti jQuery? 1208 01:11:54,170 --> 01:12:00,110 Kerana ia adalah lebih pendek untuk menaip. Tetapi itu semua ia. Ia adalah idea yang sama. 1209 01:12:00,110 --> 01:12:02,630 Dapatkan saya tag yang ID ialah pendaftaran. 1210 01:12:02,630 --> 01:12:06,300 Dan apabila yang tag, yang berlaku untuk menjadi bentuk, dikemukakan, 1211 01:12:06,300 --> 01:12:08,300 pergi ke hadapan dan melaksanakan kod ini. 1212 01:12:08,300 --> 01:12:11,320 Jadi mari kita mengambil satu melihat sekarang bagaimana kita lakukan borang pengesahan. 1213 01:12:11,320 --> 01:12:15,950 Sintaks adalah diakui samar pada mulanya, tetapi apa yang berlaku? 1214 01:12:15,950 --> 01:12:21,050 Jika garis kod ini adalah benar, saya akan menjerit pada pengguna untuk menyediakan alamat e-mel beliau. 1215 01:12:21,050 --> 01:12:22,970 Jadi apakah garis kod ini? 1216 01:12:22,970 --> 01:12:25,560 $ Bermakna jQuery. Sekarang notis ini. 1217 01:12:25,560 --> 01:12:27,920 Ini adalah semacam CSS. 1218 01:12:27,920 --> 01:12:33,370 Jika anda telah menyelam ke dalam CSS lagi, anda akan tahu bahawa ini bermakna unsur yang ID ialah pendaftaran. 1219 01:12:33,370 --> 01:12:39,840 Ruang bermakna mencari kanak-kanak atau keturunan pendaftaran yang namanya adalah input. 1220 01:12:39,840 --> 01:12:42,970 Dan maka perkara ini dalam persegi kurungan adalah penapis sedikit. 1221 01:12:42,970 --> 01:12:47,010 Dan walaupun ini kelihatan samar, ini hanya bermakna pergi kepada bentuk yang ID ialah pendaftaran, 1222 01:12:47,010 --> 01:12:51,230 pergi ke dalam unsur input itu yang namanya adalah e-mel, 1223 01:12:51,230 --> 01:12:55,440 dan kemudian mendapat nilainya, apa-apa nilai yang berlaku kepada menjadi - 1224 01:12:55,440 --> 01:12:59,670 asdf jika itu semua saya ditaip atau malan@harvard.edu jika itulah apa yang saya menaip. 1225 01:12:59,670 --> 01:13:05,250 Jadi, jika nilai medan email borang == tiada, menjerit pada pengguna. 1226 01:13:05,250 --> 01:13:09,700 Lain jika nilai medan kata laluan == apa-apa, menjerit pada pengguna. 1227 01:13:09,700 --> 01:13:19,520 >> Lain jika nilai medan kata laluan tidak menyamai nilai bidang pengesahan, 1228 01:13:19,520 --> 01:13:22,850 yang merupakan elemen bentuk lain, menjerit pada pengguna. 1229 01:13:22,850 --> 01:13:25,680 Dan kemudian akhirnya - dan yang satu ini juga mempunyai beberapa sintaks baru sendiri, 1230 01:13:25,680 --> 01:13:29,270 tetapi apabila anda telah melihat, ia sekurang-kurangnya sedikit lebih munasabah - 1231 01:13:29,270 --> 01:13:34,060 lain jika bentuk yang ID ialah pendaftaran mempunyai elemen input yang namanya adalah perjanjian 1232 01:13:34,060 --> 01:13:39,720 dan ia diperiksa, pergi ke hadapan dan menjerit pada pengguna. 1233 01:13:39,720 --> 01:13:42,520 Jadi saya benar-benar mengakui ini adalah benar-benar hangat pada pandangan pertama. 1234 01:13:42,520 --> 01:13:46,530 Ia banyak sintaks baru. Tetapi semua jQuery berikut ini jenis corak. 1235 01:13:46,530 --> 01:13:49,880 Dan secara jujur, saya tidak tahu ini wujud sehingga beberapa minit yang lalu. 1236 01:13:49,880 --> 01:13:53,640 Saya Googled, "Bagaimana anda memeriksa jika checkbox checked in jQuery?" 1237 01:13:53,640 --> 01:13:55,680 dan ini adalah sintaks, kerana ada cara yang berbeza untuk melakukannya 1238 01:13:55,680 --> 01:13:58,010 dengan sebenar mentah kod JavaScript. 1239 01:13:58,010 --> 01:14:01,030 Jadi, sebagai halaman pertama Set Masalah 7 menekankan, 1240 01:14:01,030 --> 01:14:04,500 pset 7 adalah sangat banyak latihan dalam pengikatan but diri 1241 01:14:04,500 --> 01:14:08,650 di mana kita telah disediakan, mudah-mudahan, rangka kerja konseptual dengan yang untuk menangani pset. 1242 01:14:08,650 --> 01:14:12,280 >> Tetapi seperti yang sering berlaku dengan reka bentuk laman web, ia terpulang kepada anda benar-benar untuk mencucuk di sekitar, 1243 01:14:12,280 --> 01:14:16,680 menggabungkan coretan kod dan contoh dari Web selagi anda memetik mereka 1244 01:14:16,680 --> 01:14:17,960 mengikut terma atas lembaran yang pertama, 1245 01:14:17,960 --> 01:14:21,460 dan menyedari bahawa pembelajaran HTML, CSS, JavaScript dan juga SQL 1246 01:14:21,460 --> 01:14:26,020 adalah benar-benar bertujuan untuk menjadi senaman ini di rumah seperti yang kita mula untuk mengambil roda latihan di luar. 1247 01:14:26,020 --> 01:14:29,150 Dan menyedari terlalu terdapat banyak lagi perkara yang boleh anda lakukan dengan pelayar. 1248 01:14:29,150 --> 01:14:33,790 Dalam kebanyakan unsur-unsur ini terdapat perkara-perkara lain yang dipanggil pengendali acara. 1249 01:14:33,790 --> 01:14:37,140 Dan walaupun kita hanya melihat orang-orang yang dipanggil onsubmit dan onready, 1250 01:14:37,140 --> 01:14:40,310 anda boleh melakukan perkara-perkara seperti onkeydown, onkeyup, 1251 01:14:40,310 --> 01:14:43,410 seperti apabila pengguna menyentuh kekunci, anda boleh mendengar untuk itu dan sehingga utama. 1252 01:14:43,410 --> 01:14:45,940 Gmail mempunyai pintasan papan kekunci. 1253 01:14:45,940 --> 01:14:49,490 Bagaimana Google melaksanakan pintasan papan kekunci seperti C untuk mengarang? 1254 01:14:49,490 --> 01:14:54,120 Mereka mendengar untuk acara-acara, kerana mereka sedang dipanggil, seperti onkeypress atau onkeyup dan onkeydown. 1255 01:14:54,120 --> 01:14:56,360 Jika anda pernah berlegar tetikus anda ke atas beberapa pilihan menu 1256 01:14:56,360 --> 01:15:00,180 dan semua tiba-tiba, Voilà, menu muncul atau perubahan warna grafik, 1257 01:15:00,180 --> 01:15:01,920 bagaimana mereka melakukannya? 1258 01:15:01,920 --> 01:15:06,940 Bukannya mendengar untuk onready atau onsubmit, anda mendengar untuk onmouseover atau onmouseout. 1259 01:15:06,940 --> 01:15:10,920 >> Jadi, dalam jangka pendek, dengan asas-asas yang sangat mudah yang kita telah mula menggaru permukaan hari ini 1260 01:15:10,920 --> 01:15:13,940 dan kami akan menyelam dalam lagi kepada pada hari Rabu, anda mempunyai, semakin, 1261 01:15:13,940 --> 01:15:17,530 kuasa untuk melaksanakan jenis perkara yang anda sudah biasa dengan. 1262 01:15:17,530 --> 01:15:21,620 Jadi mari kita berakhir di situ, dan kami akan meneruskan pada Rabu. 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]