[Powered by Google Translate] [Week 9]
[David J. Malan - Universiti Harvard]
[Ini adalah CS50. - CS50.TV]
Semua hak. Selamat kembali. Ini adalah CS50, dan ini adalah permulaan sebanyak 9 minggu.
Hari ini kita memberi tumpuan khususnya pada reka bentuk, tidak lagi dalam konteks C
tetapi dalam konteks PHP dan sedikit SQL dan sedikit JavaScript,
terutamanya ke arah akhir kedua-dua pset 7 dan juga projek akhir anda.
Malah, jika anda berada di titik itu dalam projek akhir anda
mana mungkin seperti satu jam atau lebih yang lalu anda sekurang-kurangnya mula memberikan beberapa pemikiran
projek akhir anda dan anda berfikir anda ingin bekerjasama dengan 1 atau 2 rakan sekelas,
jika anda mempunyai masalah menyambung dengan berkata rakan sekelas,
berasa bebas untuk mengisi borang di cs50.net/partners/form.
Ia hanya meminta anda siapa anda, apa jenis projek anda memikirkan,
di mana anda tinggal hanya atas sebab-sebab logistik.
Dan kemudian jika anda mahu untuk memerhatikan pada sepanjang minggu depan atau jadi URL spreadsheet di situ,
maka anda boleh melihat versi baca sahaja doc Google
di mana kami mengumpul maklumat tersebut.
Jadi jika anda mahu bekerja dengan seseorang, dengan cara semua berasa bebas untuk mendekati rakyat
melalui mekanisme itu.
Tetapi majoriti orang melakukan kerja solo. Itu betul-betul halus.
Jadi tidak merasakan bahawa ini adalah dalam apa jua cara wajib.
Pada hari Jumaat ia hanya saya dan beberapa pasukan di sini,
teater kosong untuk sebahagian besar.
Terdapat 3 pelancong duduk di sana, jadi yang agak janggal.
Apa yang kita bercakap tentang adalah pangkalan data dan kita bercakap tentang pset 7 sedikit.
Dan jika anda tidak berlaku untuk menangkap bahawa pada video sahaja lagi, yang halus.
Saya akan cuba untuk menentukan apa-apa terma yang kita sebaliknya akan mengambil untuk diberikan
berdasarkan kuliah Jumaat.
>> Tetapi hari ini kita akan cuba untuk mendapatkan anda ke titik
bukan hanya dapat melakukan sesuatu seperti pset 7
tetapi benar-benar memahami apa yang berlaku di bawah hood,
terutamanya beberapa abstrak bahawa kita meletakkan di tempat dalam fail functions.php
untuk membuat hidup anda sedikit lebih mudah tetapi supaya anda akhirnya memahami
supaya apabila roda latihan datang dalam beberapa minggu anda masih boleh hidup
dalam dunia sebenar dan melakukan barangan ini tanpa rangka kerja mana-mana CS50 bawahnya anda.
Ini _SESSION $, bagi mereka yang biasa
atau yang sudah ditangkap video pada hari Jumaat, apakah SESI marilah kita lakukan
dalam aplikasi PHP berasaskan web?
Ini adalah pembolehubah Superglobal, yang bermakna ia adalah serupa dalam semangat untuk GET dan POST
dan beberapa yang lain, tetapi apa yang perkara ini berguna?
>> Apakah SESI digunakan untuk? Yeah. [Pelajar] Pembalakan masuk
Maaf? [Pelajar] Pembalakan masuk Pembalakan masuk Sesungguhnya.
Dalam pset 7 kita menggunakan Superglobal SESI untuk memudahkan log masuk
Dan apa yang bagus tentang Superglobal ini adalah bahawa ia adalah satu array bersekutu.
Array bersekutu, ingat, hanya pelbagai tetapi mempunyai tidak lagi yang indeks untuk menjadi nombor
seperti 012. Mereka boleh menjadi nombor atau mereka boleh menjadi lebih rentetan.
Dan sebagainya jika anda menyelam ke dalam pset 7 lagi, anda mungkin ingat bahawa kita menyimpan ID utama dipanggil
di dalam array ini bersekutu yang nilai adalah sesuatu seperti 123 -
apa dilog masuk ID pengguna.
Motivasi untuk ini adalah bahawa walaupun selepas pengguna telah melawat localhost
atau laman web saya lebih amnya dan kemudian mereka telah log masuk,
walaupun mereka tidak klik link atau kembali ke laman web saya selama 5 minit
atau walaupun sejam atau walaupun sehari tetapi mereka meninggalkan tetingkap pelayar mereka terbuka,
melalui Superglobal ini saya boleh ingat bahawa mereka log masuk
>> Dalam erti kata lain, ia membolehkan saya untuk menyimpan apa-apa sedikit jangka panjang saya mahu tentang pengguna.
Dan anda boleh berfikir ia benar-benar sebagai penjelmaan shopping cart.
Tempat seperti Amazon jelas membolehkan anda meletakkan perkara-perkara ke dalam troli membeli-belah,
tetapi HTTP, protokol bahawa kuasa Web, adalah bernegara
dalam erti kata bahawa apabila anda melawat laman web,
bagi sebahagian besar anda tidak mempunyai beberapa sambungan rangkaian malar
antara pelayar anda dan pelayan.
Sebaik sahaja anda telah turun HTML dan JPEG dan GIF dan semua itu,
sambungan hilang dan anda hanya mempunyai salinan HTML dan barang kecil dari pelayan.
Tetapi jika pelayan mahu ingat sesuatu tentang anda,
beban pada pelayan sebenarnya merekodkan maklumat itu.
Dan supaya anda pengaturcara yang mempunyai kawalan ke atas pelayan
boleh meletakkan apa-apa yang paling anda mahu di dalam array ini bersekutu Superglobal
dan ia akan berada di sana masa depan pengguna datang kembali,
sama ada minit atau walaupun hari kemudian, melainkan mereka menutup tetingkap pelayar mereka,
di mana SESI titik hilang.
Jadi ia adalah simpanan tidak kekal, ia adalah non-persistent, dan ia bertujuan untuk pergi
secepat pengguna menutup pelayar mereka - tidak hanya bahawa tab, sering pelayar keseluruhan,
sekali gus berkesan pembalakan pengguna.
Jadi bagaimana perkara ini sebenarnya dilaksanakan?
Mari kita lihat cepat di satu contoh mudah kita melihat pada hari Jumaat.
Bagi mereka yang tidak biasa, ia adalah semudah ini.
Ini adalah satu laman web yang tunggal tujuan dalam kehidupan adalah untuk memberitahu saya
berapa kali saya telah melawat halaman ini.
Ini adalah kali pertama di sini pada hari Isnin bahawa saya melawat, jadi ia mengatakan 0 times.
>> Tetapi jika saya mula muatkan semula halaman ini, ia mengatakan 1 kali, 2, 3, 4, 5,
dan ini akan akhirnya hanya menyimpan pada membilang sehingga, up, up, up, up
bagi setiap kali saya sebenarnya klik Reload di atasnya.
Jadi bagaimana ini bekerja? Biar saya pergi di dalam fail ini dipanggil counter.php.
Bahagian atas ia adalah semua komen biru, tetapi bahagian yang menarik di sini.
Pada 13 baris kita panggil ini session_start fungsi,
dan itu adalah benar-benar semua yang anda perlu lakukan jika anda mahu mempunyai akses
ini Superglobal khas dipanggil $ _SESSION.
Yang menjadikan ia semua mungkin, dan kita akan melihat dalam seketika bagaimana itu semua mungkin.
Dalam talian notis 16 apa yang saya lakukan.
Jika kunci, dipanggil kaunter - dalam erti kata lain, nilai indeks - "kaunter"
wujud dalam pelbagai ini dipanggil SESI, maka apa yang saya lakukan dengan ia dalam baris bawah?
Apakah line 18 melakukan?
>> [Sambutan pelajar didengar] Apa itu? [Pelajar] Menyimpan nilai. Baik.
Ia menyimpan nilai yang dalam SESI sekarang dalam pembolehubah baru sementara tempatan,
$ Kaunter dalam huruf kecil semua.
Notis bahawa PHP sudah menjadi sedikit malas di sini.
Notis kita tidak mempunyai apa-apa sebutan int atau float atau tali atau apa-apa seperti yang
kerana PHP adalah lemah ditaip, di mana anda tidak perlu untuk menentukan jenis pembolehubah,
dan dalam kes ini di sini saya telah tidak diisytiharkan lagi.
Saya mengisytiharkan ia di dalam ini pendakap kerinting dan tidak seperti C, ini adalah sebenarnya okay.
Tidak kira berapa mendalam bersarang pengisytiharan pembolehubah adalah dalam PHP -
dalam pendakap, kerinting dalam pendakap kerinting dan sebagainya -
ia akan pada ketika itu dalam masa wujud bagi baki program,
bagi yang lebih baik atau untuk lebih teruk.
Jadi ia segera menjadi global secepat anda menentukan ia seperti yang kita lakukan di sini.
>> Jika tidak, jika saya tidak mendapati bahawa ada apa-apa dalam Superglobal SESI,
Saya nampaknya Memulakan ini kounter pembolehubah kepada 0,
sekali gus hanya menganggap pengguna telah tidak pernah hadir sebelum.
Dan maka ini sudah tentu incrementing kaunter bagaimana?
Saya mengemaskini nilai yang di dalam array ini bersekutu
dengan menetapkan ia sama dengan apa jua kaunter kini + 1.
Jika saya tatal ke bawah di sini untuk HTML halaman, ia sebenarnya agak mudah.
Saya mempunyai dalam badan halaman ini, "Anda telah melawat laman ini kali jadi-dan-jadi."
Dan ini adalah membina PHP.
Jika anda lakukan <? =, Ini adalah bersamaan dengan berkesan untuk apa fungsinya?
Ia adalah benar-benar bersamaan dengan sesuatu seperti printf, yang kita telah melihat banyak kali dalam C,
walaupun kerana anda mungkin sudah tahu dari spec di pset 7,
cetak adalah juga fungsi yang hanya mencetak sesuatu keluar, ia tidak benar-benar menggunakan kod format,
dan anda sebenarnya boleh mengatakan gema serta.
Mereka semua pernah jadi sedikit berbeza walaupun kesan bersih adalah akhirnya sama.
Jadi ini penggunaan tanda sama adalah hanya jenis cara yang elegan melakukannya
lebih ringkas daripada anda sebaliknya mungkin dapat.
Jadi itulah semua laman ini tidak. Ia mencetak nilai kaunter.
Bagaimana ini semua sebenarnya berlaku?
Anda mungkin ingat seminggu atau lebih yang lalu, kami mula mencari di bawah hood
bagaimana laman web berfungsi dengan menggunakan tab ini Inspektor.
>> Chrome ini dalam kedua-dua versi Mac, versi Windows, dan juga versi Linux,
dan Firefox dan IE mempunyai mekanisme yang sama di mana anda mempunyai ini penyahpepijat terbina dalam
di dalam pelayar.
Mari kita melihat perkara-perkara berikut.
Kami mempunyai sekumpulan keseluruhan tab di sini, dan ingat bahawa satu terkiri Elemen,
dan tidak kira berapa godawful HTML dan JavaScript adalah dalam halaman,
ingat bahawa dengan tab Elemen anda sebenarnya boleh mengemudi HTML hierarki
dan bagus dan kemas.
Jadi, jika anda cuba untuk belajar dari laman web seperti Google atau Facebook
atau benar-benar mana-mana laman web, menyedari bahawa anda mungkin lebih baik
melihat kod sumber dengan cara ini berbanding untuk melihat sumber mentah,
yang boleh menjadi kucar-kacir, seperti yang kita telah melihat khususnya di laman Google.
Jadi jika saya sebaliknya klik pada tab Network sini,
mari kita lihat apa yang berlaku apabila saya melawat halaman ini.
Pertama izinkan saya mengosongkan cache saya.
Saya akan pergi ke Tetapan dalam Chrome dan kemudian pergi ke Sejarah
dan kemudian Padam semua data yang melayari.
Anda mungkin digunakan untuk melakukan ini untuk tujuan lain, [ketawa]
tetapi apabila ia datang untuk membangunkan laman web, ia sebenarnya berguna -
jika anda ketawa anda tahu. [Ketawa]
Ia sebenarnya benar-benar berguna apabila membangunkan laman web kerana realitinya adalah
perkara-perkara seperti cookies dan perkara-perkara seperti HTML fail cache, cache fail JavaScript
sebenarnya boleh menjadi sakit kepala besar, kerana jika atas apa jua sebab
pelayar memutuskan untuk cache fail beberapa dan lagi anda telah membuat perubahan kepada fail tersebut pada pelayan
tetapi pelayar tidak benar-benar menyedari bahawa fail telah berubah
dan oleh itu tidak sebenarnya semula muat turun walaupun apabila anda klik butang Reload,
salah satu cara yang paling surefire untuk hanya pastikan kesalahan tidak adalah dengan kod anda,
ia adalah dengan tingkah laku pelayar, adalah untuk pergi di sini dalam pelayar anda
dan hanya mengosongkan keseluruhan sejarah supaya terdapat kekeliruan tidak.
>> Dan kemudian jika anda benar-benar mahu menjadi paranoid, berhenti pelayar, mulakan semula,
dan kemudian pastikan semua bekerja seperti yang diharapkan.
Jadi dalam jangka pendek, cache penjelasan adalah baik apabila melakukan pembangunan.
Jadi di sini kita mempunyai tab Network.
Saya sebelum ini telah melawat tapak 9 kali, tetapi biarlah saya pergi ke hadapan sekarang dan klik Reload.
Dan saya kembali ke 0.
Mari kita sebenarnya melihat bagaimana ia bahawa ini Superglobal SESI sedang dilaksanakan.
Saya akan klik pada permintaan 1 HTTP yang telah dibuat,
dan tetingkap ini debugging membolehkan saya melihat di dalam itu.
Di sini saya melihat hanya respons dari pelayan, yang tidak menarik.
Saya telah melihat ini dalam apa-apa bilangan cara.
Tetapi apa yang teknikal yang menarik adalah pengepala.
Jika saya tatal ke bawah di sini dan memberi tumpuan kepada tajuk permintaan dan klik sumber pandangan,
apa yang saya akan melihat adalah benar-benar permintaan HTTP
yang hanya pergi dari pelayar saya untuk pelayan,
GET menjadi perkataan pembedahan dan kemudian / counter.php menjadi nama fail,
HTTP/1.1 hanya menjadi versi HTTP bahawa pelayar saya menggunakan.
Ini sejajar di sini adalah satu peringatan sedikit dari pelayar ke pelayan apa nama pelayan
bahawa ia mahu bercakap dengan.
Dan kemudian selebihnya ini adalah kadang-kadang menarik tetapi tidak relevan sekarang.
>> Ini adalah hanya jenis rasa ingin tahu.
Samar walaupun rentetan ini, bila-bila masa pelayar anda melawat laman web
ia memberitahu pelayan pelayar apa yang anda gunakan
dan apa yang sistem operasi anda menggunakan dan apakah versi daripadanya.
Jadi jika anda pernah tertanya-tanya bagaimana laman web seperti CNN dan barang kecil
tahu apa peratusan adalah pengguna Mac kepada pengguna Web PC,,
IE pengguna, pengguna Chrome dan sebagainya, ia adalah kerana semua pelayar kami
memberitahu setiap laman web tunggal di luar sana apa yang kita.
Ia tidak semestinya mengandungi maklumat peribadi,
tetapi ia tidak memberitahu pelayan apa yang alamat IP anda dan apa yang pelayar dan OS anda menggunakan.
Jadi itulah di mana maklumat ini.
Tetapi apa yang lebih menarik sekarang apabila ia datang untuk sesi ini adalah tajuk tindak balas.
Biar saya klik melihat sumber sebelah respons.
Apa yang menarik di sini adalah beberapa perkara.
1, kita mendapat kembali kod status 200.
Kami tidak pernah melihat status kod ini kerana itu bererti semuanya berjalan dengan lancar.
Ia bermaksud secara literal okay berbeza kepada sesuatu yang lain.
Apakah nombor yang kadang-kadang kita melihat yang buruk? [Pelajar] 404.
404, fail tidak dijumpai, 403 anda mungkin penghalang kepada sudah,
yang dilarang, yang bermakna anda terlupa sesuatu chmod, kemungkinan besar.
Dan ada sekumpulan orang lain.
>> Turun di sini, ini adalah sedikit gila.
Saya benar-benar hanya menulis fail ini beberapa minit yang lalu melalui tampal ke dalam gedit.
Mengapa halaman ini tamat pada tahun 1981 sebelum ada benar-benar adalah web?
Apa yang berlaku di sana?
>> [Pelajar tindak balas didengar] setem masa. Tetapi mengapa?
Ia agak sewenang-wenangnya, tetapi ia sebenarnya berguna.
Apakah ini mengatakan kepada pelayar saya adalah fail PHP anda hanya diminta telah tamat tempoh.
Malah, ia tamat 30 tahun lalu.
Tetapi apakah yang benar-benar bermakna?
Ia hanya bermakna masa depan pengguna melawat halaman ini,
sama ada dengan memuatkan semula atau menaip URL di bar alamat,
pastikan anda pergi mengambil salinan baru.
Ini adalah jenis contoh busting cache,
perkataan bodoh yang hanya bermakna cuba untuk tidak menggalakkan pelayar
dari HTML sebenarnya caching yang telah dihantar dari pelayan
supaya anda tidak sengaja memukul reload dan kemudian melihat versi yang sama fail.
Anda sebenarnya mahu pelayan untuk menghantar satu salinan baru.
Jadi hakikat bahawa ia adalah 1981 hanya bermakna bahawa apa perkakas memilih
sebagai tarikh sembarangan pada masa lalu.
Tetapi garis berair sebenar kini merupakan salah ini.
Malah sebelum 50 anda mungkin samar-samar biasa dengan cookies.
Sehingga sekarang, terutama di kalangan mereka yang kurang selesa atau di antara,
apakah cookies dalam pemahaman anda sekarang
walaupun kita berada kira-kira untuk membuat pemahaman anda lebih teknikal?
Apa cookie? Yeah.
[Pelajar] Maklumat mengenai pengguna, suka jika mereka telah menulis nama pengguna mereka atau sesuatu.
>> Baik. Ia adalah maklumat mengenai pengguna, sama ada mereka telah ditaip dalam nama pengguna mereka sudah.
Cookies adalah satu cara di mana pelayan boleh ingat sesuatu tentang pengguna.
Dan apa cookie benar-benar adalah fail teks atau beberapa jujukan bait
yang ditanam oleh pelayan di dalam pelayar anda,
dan di dalam fail itu atau di kalangan mereka bytes adalah beberapa jenis pengecam.
Mungkin ia adalah benar-benar nama pengguna anda, tetapi lebih kerap ia adalah sesuatu yang lebih samar-cari
seperti perkara ini di sini - bo8dal3ct dan sebagainya - abjad angka benar-benar besar rentetan
yang benar-benar hanya bertujuan untuk menjadi pengecam unik untuk anda.
Atau anda boleh berfikir ia sebagai jenis setem tangan maya.
Jika anda pergi ke beberapa kelab atau taman hiburan, untuk ingat bahawa anda telah benar-benar dibayar
dan pergi, mereka meletakkan pelekat merah sedikit pada tangan anda beberapa jenis,
dan yang mengingatkan rakyat di kaunter bahawa anda telah dibayar
dan anda boleh datang dan pergi sesuka hati anda.
Cookies adalah sedikit sama dalam semangat yang.
Kali pertama saya melawat laman web ini, kerana saya hanya lakukan selepas mengosongkan cache saya,
pelayan web, perkakas dalam kes ini, meletakkan setem pada tangan saya
yang namanya PHPSESSID, sesi ID,
nilainya adalah rentetan ini abjad angka yang benar-benar panjang.
>> Jadi yang kini jenis terpampang di tangan saya supaya masa depan saya memukul reload
atau manual melawat URL ini dalam pelayar,
pelayar saya dengan definisi HTTP akan membentangkan setem tangan
lagi dan lagi dan lagi.
Jadi, walaupun pelayan tidak semestinya tahu siapa saya,
mereka sekurang-kurangnya tahu bahawa saya adalah pengguna yang sama atau sekurang-kurangnya, lebih khusus, pelayar yang sama.
Dan sebagainya ini akhirnya bagaimana Superglobal SESI dilaksanakan.
Pelayan tidak mempunyai idea yang anda apabila anda mengkaji semula laman web untuk kedua atau kali ketiga
melainkan anda sekarang ini setem tangan.
Dan secepat anda hadir setem tangan,
pelayan web dasarnya pergi ke pangkalan data sedikit tersendiri
dan cek, okay, saya baru sahaja melihat setem tangan bo8dal3ct pengguna dan sebagainya.
Biar saya melihat apa maklumat pengaturcara telah disimpan
dalam Superglobal tentang pengguna ini,
dan kemudian membiarkan saya pastikan bahawa data yang sekali lagi dalam SESI yang Superglobal
supaya pengaturcara boleh semula mengakses data
walaupun ia telah menetapkan beberapa minit atau jam yang lalu.
Jadi dalam lain-lain perkataan, cookies, yang mendapat rap buruk untuk beberapa ketika
kerana ketidakyakinan dalam pelayar dan mereka benar-benar boleh melanggar privasi kami dan semua ini,
mereka sebenarnya mempunyai utiliti besar kerana tanpa mereka
anda sentiasa akan log masuk ke laman Facebook setiap kali anda melawat
atau setiap email Gmail anda membaca jika pelayar tidak mempunyai beberapa cara mengingat
bahawa anda telah disahkan.
>> Jadi dengan cara ini kuki dihantar ke belakang dan sebagainya merentasi dawai.
Satu lagi rasa ingin tahu tentang cookies, terutamanya di sini, adalah bahawa ini adalah sepenuhnya dalam cleartext.
Tiada penyulitan berlaku di sini jua,
dan sesungguhnya saya menggunakan HTTP pada masa ini.
Salah satu momen kegemaran kami di CS50, yang kini 2 tahun yang lalu,
telah sekitar masa alat yang dipanggil Firesheep keluar.
Ini adalah sekeping percuma perisian yang telah dibuat oleh penyelidik keselamatan
sebagai panggilan bangun untuk masyarakat untuk mengatakan betapa atrociously dilaksanakan
mekanisme pengesahan tertentu di Web.
Jadi untuk beberapa waktu, Facebook adalah hampir keseluruhannya lebih HTTP, tiada HTTPS.
Dan walaupun anda tidak mempunyai idea bagaimana kripto berfungsi, S adalah selamat
jadi ia bermakna terdapat sekurang-kurangnya beberapa penyulitan yang terlibat.
Facebook tidak digunakan untuk menyulitkan nama pengguna dan kata laluan,
tetapi sebaik sahaja anda melihat anda pokes atau mesej anda atau suapan berita anda,
semua yang tak disulitkan.
Jadi adalah Gmail sehingga hanya setahun atau 2 yang lalu.
Mana-mana masa yang anda log masuk, ya, mereka menggunakan penyulitan selamat,
tetapi selepas itu mereka tidak. Dan mengapa yang mungkin?
Mengapa tidak hanya menggunakan kriptografi semua masa dalam kes-kes penggunaan seperti ini?
Apa itu? Saya fikir saya mendengar sesuatu. [Pelajar] Kelajuan.
Kelajuan, kan? Terdapat cara sekitar ini.
Tetapi jika anda hanya jenis berfikir tentang hal itu secara logiknya, jika anda sulitkan sesuatu,
anda perlu melakukan sekurang-kurangnya kerja lebih sedikit.
Dalam pset 2 apabila anda melaksanakan Caesar atau Vigenere atau malah Crack,
hanya mencetak rentetan adalah agak mudah.
Menyulitkan dan kemudian mencetak rentetan minimum memerlukan kerja sedikit lebih.
>> Bagi super laman web popular seperti Google dan Facebook,
jika anda perlu melakukan kerja-kerja yang lebih untuk setiap pengguna untuk setiap satu laman web yang mereka lawati,
yang hanya mengambil CPU lebih banyak masa.
Dan jika anda memerlukan lebih banyak masa CPU, anda mungkin perlu lebih banyak pelayan,
yang bermaksud anda mungkin perlu lebih banyak wang.
Dan sebagainya selama bertahun-tahun ini hanya benar-benar tidak adalah amalan terbaik.
Orang ramai akan menggunakan penyulitan SSL hanya apabila mereka diperlukan untuk.
Tetapi ternyata, dan sebagai rakan ini dengan Firesheep dibuat super jelas,
apabila anda lelaki yang kini di Facebook sekarang -
Daripada rasa ingin tahu, mari kita lihat jika anda akan mengaku.
Jika anda berada di Facebook sekarang dalam tab beberapa, walaupun ia tidak foregrounded,
URL anda HTTP atau HTTPS?
[Berbilang pelajar] S. S? [Ketawa]
Okay. Mana-mana HTTP? Hanya 1? Okay.
Jadi kita semua boleh hack akaun Facebook bahawa lelaki sekarang.
Bagi sebahagian besar ini telah menjadi dihidupkan secara lalai, sekurang-kurangnya dalam beberapa laman web.
Dan cerita pendek yang panjang, jika trafik web anda tidak disulitkan,
bukan sahaja HTML pergi ke belakang dan sebagainya di seluruh WiFis tanpa enkrip,
jadi jangan perkara-perkara seperti cookies pergi ke belakang dan sebagainya sepanjang udara
tanpa apa-apa bentuk penyulitan.
Jadi jika anda mempunyai hanya sedikit celik pengaturcaraan atau sedikit kemahiran Googling
untuk mencari perisian percuma yang melakukan ini, semua yang anda perlu lakukan adalah duduk di Starbucks
atau duduk di lapangan terbang di mana ada umumnya tanpa enkrip WiFi
dan hanya menonton untuk kata kunci seperti Set-Cookie: atau PHPSESSID
kerana jika anda mempunyai celik teknikal untuk hanya menonton WiFi
untuk semua bit yang mengalir sepanjang udara untuk corak ini,
maka anda boleh mengatakan bahawa PHPSESSID lelaki itu berlaku untuk menjadi bo8dal dan sebagainya.
Dan kemudian sekali lagi jika anda cukup teknikal celik atau mempunyai alat yang betul,
anda boleh kemudian hanya menyusun semula pelayar anda sendiri untuk memulakan membentangkan setem tangan
Facebook.com, dan Facebook hanya akan menganggap bahawa anda adalah lelaki yang
kerana semua mereka tahu tidak siapa anda tetapi bahawa anda mempunyai pengecam unik ini.
Jadi jika anda mencuri bahawa pengecam unik dan membentangkan kepada pelayan web sebagai anda sendiri,
mereka hanya akan menunjukkan kepada anda berita bahawa orang
atau mesej orang itu atau pokes.
>> Dan saya akan Google sekarang bagaimana untuk mengaktifkan HTTPS Facebook mungkin.
Tetapi ia benar-benar adalah semudah itu.
Dan sebagainya Facebook dan Google dan sebagainya telah mendapat benar-benar baik di ini,
tetapi memerhatikan keluar semua lebih untuk mana-mana laman web yang anda lawati yang tidak menggunakan HTTP
dan mempunyai beberapa jenis maklumat yang sensitif kepada mereka,
sama ada kewangan atau peribadi atau sebagainya.
Jika mereka tidak menggunakan ini, agak mungkin cookies seperti ini boleh menjadi sangat mudah dicuri
dan kemudian dipalsukan, dan itulah apa yang Firesheep lakukan.
Anda tidak perlu untuk menjadi seorang programmer.
Semua yang anda perlu lakukan adalah telah sambungan Internet, memuat turun alat ini percuma,
dan apa yang ia akan lakukan ialah anda log masuk dan kemudian ia akan menunjukkan kepada anda nama Facebook
semua dalam Sanders, dalam demonstrasi ini khususnya, di sekeliling anda
dan semua anda terpaksa lakukan klik pada nama mereka dan perisian automatik proses
menghidu kuki itu, membentangkan kepada Facebook sebagai anda sendiri,
dan Voilà, anda log masuk.
Jadi ini adalah satu lagi salah seorang daripada mereka "tidak melakukan ini" rasmi.
Jika anda mempunyai rangkaian rumah anda sendiri dan anda mahu menggerumit, dengan cara semua,
tetapi sedar ini tidak garisan pada persekitaran universiti.
>> Tetapi matlamat di sini adalah benar-benar untuk menekankan tidak bagaimana untuk melakukan ini
tetapi bagaimana untuk mempertahankan terhadap jenis-jenis perkara.
Dan penyelesaian remeh sini, walaupun ia sendiri adalah cacat,
adalah untuk benar-benar mengurangkan penggunaan mana-mana laman web yang tidak menggunakan HTTPS sentiasa.
Jadi laman web seperti Facebook dan Google semakin mempunyai kotak semak
di mana anda boleh memilih jenis ini perkara,
dan bank-bank telah ini selama bertahun-tahun, atas sebab-sebab yang sama.
Jadi hanya sedikit faktor takut jika kita boleh. Tetapi itulah ia secara ringkas.
Itu adalah bagaimana pelayan ingat siapa anda.
Dan sebaik sahaja mereka boleh ingat siapa anda, mereka boleh ingat apa-apa tentang anda
bahawa pengaturcara telah disimpan di dalam Superglobal ini khas dipanggil $ _SESSION.
Dan untuk pset 7 kita menggunakan ia trivially hanya ingat int,
iaitu ID unik pengguna yang telah log masuk,
supaya kita tahu mereka telah berada di sana sebelum ini.
Sebarang pertanyaan kemudian pada sesi atau cookies atau sebagainya?
Firesheep tidak bekerja serta lagi,
dan anda perlu meletakkan komputer anda ke dalam mod rambang khas
jadi anda sebenarnya mendengar untuk lalu lintas selain dirimu.
Jadi, jika anda sedang memuat turun Firesheep, menyedari ia tidak cukup sebagai mudah
kerana ia sekali adalah untuk menunjukkan.
Semua hak. Dan tidak melakukannya di Sanders. Melakukannya di rumah.
Pangkalan data.
Salah satu perkara yang kita lakukan dalam pset 7 sangat sengaja
telah kita memberikan anda jadual sampel pangkalan data untuk pengguna yang mempunyai beberapa ID,
beberapa nama pengguna, dan beberapa kata laluan disulitkan di dalamnya.
Dan seperti yang anda akan lihat, jika anda tidak sudah, anda akan perlu menukar jadual sedikit.
Anda akan mempunyai untuk menambah cache beberapa setiap pengguna dalam jadual itu,
dan anda akan perlu untuk menambah satu lagi jadual sejarah, jadual portfolio,
atau mungkin memanggil ia sesuatu yang lain.
Tetapi dalam segi berfikir tentang bagaimana untuk melakukan ini, mari kita membuka alat ini
yang kita digunakan pada hari Jumaat, tetapi jika tidak dikenali, perkakas datang dengan alat
phpMyAdmin dipanggil yang kebetulan ditulis dalam PHP,
tetapi tujuan dalam hidup, selepas saya login di sini sebagai jharvard dengan lembayung,
adalah untuk memberi saya satu cara yang mesra pengguna melihat dan mengubah pangkalan data saya.
>> Pangkalan data yang saya berjalan di perkakas dipanggil MySQL.
Ini adalah sangat popular, dan ia adalah pangkalan data sumber bebas terbuka yang hebat mudah untuk digunakan,
terutamanya dengan depan berakhir seperti ini.
Apa alat ini membolehkan saya lakukan, misalnya, adalah mencucuk di sekitar jadual.
Biar saya pergi ke hadapan dan melakukan ini.
Pada hari Jumaat, kami mencipta jadual yang dipanggil pelajar yang mudah super.
Ia mempunyai 3 lajur - id, nama, dan e-mel - dan saya secara manual memasukkan beberapa baris
seperti David dan Mike dalam contoh ini tertentu.
Mari kita ini sedikit lagi, dan mari kita andaikan bahawa kita mahu ingat lebih
daripada hanya nama dan e-mel mengenai pengguna.
Biarkan saya klik Struktur di sini di atas.
Dan sekali lagi, pset berjalan anda melalui langkah-langkah yang diperlukan di sini,
jadi jangan bimbang jika beberapa ini adalah agak cepat.
Kemudian saya akan klik di sini.
Saya akan menambah beberapa nombor selepas e-mel
kerana saya mahu menambah sesuatu seperti rumah.
Saya terlupa untuk merakam rumah pelajar.
Biar saya klik Go, dan kini kita mempunyai borang ini yang malangnya sedikit luas dari kiri ke kanan,
tetapi saya akan untuk memanggil nama rumah bidang ini,
dan kemudian jenis saya kini perlu memilih.
Jadi mari kita berbual ringkas tentang pelbagai jenis di MySQL
kerana manakala PHP adalah ditaip dengan lemah dan ia semacam bermain pantas dan longgar dengan jenis,
dalam pangkalan data terutama ia adalah penting super sebenarnya menggunakan menaip untuk keuntungan anda
kerana salah MySQL perkara dan pangkalan data enjin lain boleh lakukan untuk anda
adalah memastikan bahawa anda tidak meletakkan data palsu ke dalam pangkalan data anda.
Ini adalah jenis bebas ralat memeriksa disediakan untuk anda.
>> Untuk rumah kita jelas tidak mahu ia menjadi int, yang merupakan nilai 32-bit di MySQL.
Kami tidak bercakap secara ringkas pada hari Jumaat kira-kira VARCHAR, yang bermaksud untuk panjang char ubah.
Apakah ini? Ini membolehkan anda untuk menentukan yang anda mahu ini menjadi rentetan beberapa jenis.
Anda tidak benar-benar tahu terlebih dahulu berapa lama ia adalah,
jadi kita sewenang-wenangnya akan mengatakan nama rumah boleh menjadi 255 aksara,
tetapi anda boleh pergi dengan 32, 64 - sebarang nombor benar-benar.
Tetapi kelebihan menggunakan VARCHAR atas bidang yang dipanggil char adalah apa?
Hanya intuitif jika saya tatal ke bawah di sini, notis ada char dan ada VARCHAR.
VARCHAR ialah panjang char ubah; char adalah panjang char tetap.
Jadi hanya berdasarkan takrif itu, apa kelebihan atau kelemahan masing-masing?
Dalam erti kata lain, yang peduli tentang perbezaan, atau mengapa anda perlu penjagaan?
>> Yeah. [Pelajar] VARCHAR mempunyai lebih banyak fleksibiliti tetapi mengambil lebih banyak memori.
Baik. VARCHAR mengambil lebih - Mari kita lihat. Saya tidak pasti jika saya mendengar hak itu.
Anda boleh mengatakan bahawa sekali lagi?
[Pelajar] saya berkata VARCHAR mungkin mempunyai lebih banyak fleksibiliti tetapi ia mengambil lebih banyak memori.
Menarik. Okay. VARCHAR mungkin memberikan anda lebih banyak fleksibiliti tetapi mengambil memori lebih.
Terakhir ini tidak semestinya benar.
Ia bergantung kepada konteks, tetapi mari kita kembali itu.
>> [Pelajar tindak balas didengar] Tepat sekali.
Ia sebenarnya kes yang char biasanya akan menggunakan memori yang lebih
kerana char, seperti dalam C, adalah seperti rentetan, ia adalah pelbagai watak.
Jadi, jika anda mengatakan medan char daripada 255 panjang,
pangkalan data adalah benar-benar akan memberikan anda 255 aksara.
Dan jika rumah tersebut akhirnya menjadi Mather dan 6 aksara total,
anda membuang lebih 200 aksara.
>> Jadi VARCHAR berkesan hanya menggunakan sebagai watak-watak yang banyak sebagaimana yang perlu
sehingga jumlah maksimum.
Tetapi harga yang anda bayar sebenarnya prestasi, berpotensi.
Jika anda tahu terlebih dahulu bahawa semua rentetan anda akan menjadi 8 aksara -
sebagai contoh, andaikan bahawa anda memerlukan kata laluan sebanyak 8 panjang -
terbalik menggunakan medan char pada kesempatan, walaupun tidak kerap,
adalah untuk menentukan panjang tetap untuk sesuatu seperti kata laluan
kerana kini pangkalan data boleh menjadi lebih bijak.
Jika ia tahu bahawa setiap bidang char, setiap rentetan dalam lajur adalah sama panjangnya,
anda mendapat kembali ciri capaian rawak.
Anda boleh melompat wujud antara pelbagai bidang char dalam jadual pangkalan data anda
kerana berfikir pangkalan data sebagai baris dan lajur.
Jadi, jika setiap satu daripada rentetan panjang yang sama,
anda tahu bahawa yang pertama adalah pada 0 bait, yang seterusnya adalah pada 8 bait
dan kemudian 16 dan kemudian 24 dan sebagainya.
Jadi, jika semua rentetan panjang yang sama, anda boleh melompat di sekeliling lebih cekap.
Jadi yang boleh menjadi manfaat dari segi prestasi,
tetapi biasanya anda tidak mempunyai kemewahan mengetahui terlebih dahulu,
jadi VARCHAR adalah cara untuk pergi.
Berikut adalah satu lagi terperinci bahawa walaupun Facebook berlari ke akhirnya.
Ints yang besar, dan kita jenis menggunakan mereka secara lalai pada bila-bila masa kita mahu nombor,
tetapi ia adalah hanya 32 bit.
>> Dan walaupun Facebook tidak cukup mempunyai 4 bilion pengguna kini,
pasti ada sesetengah orang di luar sana dengan akaun berganda
atau akaun-akaun yang telah dibuka dan kemudian ditutup,
dan sebagainya Facebook sendiri saya percaya beberapa tahun yang lalu terpaksa peralihan dari int
, sebagaimana yang tepat dipanggil, bigint, yang hanya 64-bit dan bukannya.
Jadi ini juga adalah satu keputusan reka bentuk.
Anda akan menakjubkan bertuah jika projek akhir anda bertukar permulaan,
telah 4 bilion dan 1 pengguna, memberi atau mengambil,
di mana menggunakan ints mungkin sedikit rabun.
Tetapi dalam realiti, meja pengguna anda mungkin denda dengan ints.
Tetapi sesuatu seperti pset 7, seperti meja sejarah anda,
anda mungkin mempunyai beribu-ribu, berjuta-juta pengguna jika anda berubah menjadi etrade.com.
Jadi sedangkan anda tidak mungkin mempunyai lebih daripada 4 bilion pengguna,
mereka pengguna anda mempunyai mungkin mempunyai lebih daripada 4 bilion transaksi dari masa ke masa -
membeli dan menjual dan perkara-perkara dalam sejarah mereka.
Jadi, jika anda menjangka - sekali lagi, ini adalah masalah yang baik untuk mempunyai jika anda mempunyai banyak data ini -
jika anda lakukan menjangka data melebihi saiz int,
pergi dengan sesuatu seperti bigint adalah arahan yang tidak kerap cukup pakai oleh pereka
kerana orang angka itu tidak akan menjadi masalah,
tetapi ia adalah ini mudah untuk memilih sesuatu yang lebih besar daripada itu.
Perpuluhan yang kita gunakan dalam pset 7, yang menyatakan ketepatan tetap
supaya anda boleh mengelakkan isu-isu yang melibatkan terapung dan beregu dan sahih dan sebagainya.
>> Dan kemudian ada beberapa bidang lain di sini. Kami akan melambai tangan kita pada mereka sedikit.
Tetapi tarikh, masa semua mempunyai format yang ditetapkan dalam MySQL,
dan kelebihan menyimpan tarikh sebagai tarikh dan tidak varchars
bermakna bahawa pangkalan data sebenarnya boleh memformat semula mereka ke dalam format yang berbeza,
sama ada format AS atau format Eropah atau sebagainya - tetapi anda mahu ia -
lebih cekap daripada jika ia hanya beberapa VARCHAR generik.
Dan kemudian ada beberapa binari lain, varbinary, gumpalan.
Ini adalah binari objek yang besar, dan anda juga boleh menyimpan data binari
serta data geometri dalam pangkalan data.
Tetapi bagi kita, kita biasanya akan mengambil berat tentang ints dan varchars dan sebagainya.
Mari kita selesaikan contoh ini dengan rumah.
House Saya akan sewenang-wenangnya mengatakan akan menjadi 255 aksara.
Kemudian nilai lalai kita boleh melakukan ini.
Kita boleh secara lalai meletakkan semua orang dalam Mather House, misalnya.
Itulah bagaimana kita boleh menentukan bahawa pangkalan data
perlu memastikan bahawa seseorang sentiasa mempunyai nilai. Tetapi saya akan meninggalkan yang menjadi.
Malah, bagi orang-orang yang tinggal di luar kampus dan tidak di rumah,
mungkin saya sebenarnya mahu untuk menentukan bahawa nilai lalai untuk rumah adalah NULL,
dan kemudian saya perlu untuk memeriksa kotak ini dan memberitahu pangkalan data ia adalah okay jika rumah pengguna adalah NULL.
>> Sekali lagi, ini adalah satu lagi mekanisme pertahanan yang anda boleh meletakkan di tempat
supaya anda tidak perlu untuk meletakkan ia dalam kod PHP anda semestinya.
Pangkalan data akan memastikan bahawa perkara-perkara atau tidak NULL.
Dan kemudian akhir sekali, sifat-sifat.
Tiada seorang pun daripada ini adalah benar-benar relevan.
Perduaan, tidak bertanda - tiada seorang pun daripada mereka adalah relevan kepada VARCHAR.
Indeks.
Adakah sesiapa yang tahu atau ingat atau mempunyai meneka apa indeks
untuk sesuatu seperti rumah?
Ini juga sebenarnya adalah keputusan reka bentuk yang penting dan agak mudah.
Bagi mereka yang tidak lagi melihat ia, pada hari Jumaat kita bercakap secara ringkas tentang kunci primer.
Dalam jadual pangkalan data, kunci utama adalah bidang atau lajur
yang unik mengenal pasti baris dalam jadual.
Jadi dalam jadual semasa kita mempunyai ID, kita mempunyai nama dan e-mel.
Antara mereka adalah calon terbaik untuk menjadi kunci utama,
peranan yang unik mengenal pasti baris?
Mungkin ID.
Boleh dikatakan, kita juga boleh menggunakan apa walaupun?
Mungkin anda boleh menggunakan e-mel kerana dalam teori ia adalah unik
melainkan orang yang berkongsi akaun e-mel.
Tetapi realitinya adalah bahawa jika anda menggunakan ID berangka seperti 1234,
yang hanya 32 bit, manakala alamat e-mel boleh menjadi ini bytes banyak atau ini bytes banyak.
Jadi dari segi kecekapan untuk memberi maklumat pengenalan yang unik,
ia cenderung untuk menjadi amalan yang baik hanya untuk menggunakan int
walaupun anda mempunyai beberapa calon rentetan yang anda boleh dikatakan boleh menggunakan.
>> Untuk sesuatu seperti rumah, ini tidak sepatutnya menjadi kunci utama
kerana hanya 1 orang boleh hidup di Mather dan 1 orang di Currier dan sebagainya.
Begitu juga, ini tidak sepatutnya menjadi unik.
Perbezaan antara rendah dan unik adalah bahawa dalam kes jadual semasa kami,
ID akan primer, tetapi e-mel tidak utama bagi sebab kita hanya disebut -
prestasi tetapi ia masih perlu menjadi unik.
Jadi anda masih boleh menguatkuasakan keunikan tanpa membuat tuntutan
bahawa ia adalah satu bidang utama super penting.
Tetapi yang satu ini agak membantu: Indeks.
Jika anda tahu terlebih dahulu untuk projek akhir anda, untuk pset 7, atau secara umum,
bahawa bidang ini rumah akan menjadi sesuatu yang anda mencari di banyak
menggunakan kata kunci pilih atau sesuatu yang lain,
maka anda preemptively boleh memberitahu pangkalan data untuk bekerja sihir
dan pastikan bahawa ia mewujudkan dalam ingatan mana-mana struktur data mewah yang perlu
untuk mempercepatkan carian berdasarkan rumah.
Mungkin ia akan menggunakan jadual hash, mungkin ia akan menggunakan senarai yang berkaitan.
Dalam realiti, ia cenderung untuk menggunakan pokok, sering struktur dipanggil B-pokok -
bukan pokok binari tetapi B-pokok - yang merupakan pokok yang sangat luas
yang mungkin anda lihat di dalam kelas seperti CS124, kelas struktur data.
Tetapi dalam jangka pendek, anda tidak perlu bimbang tentang bahawa apabila menggunakan perisian pangkalan data pintar.
Anda hanya boleh memberitahu, "Indeks bidang ini supaya saya boleh mencari ia lebih cekap."
>> Jika anda meninggalkan luar ini dan anda cuba untuk mencari semua orang dalam pangkalan data yang tinggal di Mather,
ia akan turun ke dalam carian linear.
Dan jika anda telah mendapat 6000 undergrads semua hidup di dalam rumah beberapa,
anda akan mencari jadual keseluruhan untuk mencari Matherites,
, manakala jika anda mengatakan Indeks, mudah-mudahan ia akan menjadi sesuatu yang dekat dengan carian logaritma
untuk mencari orang-orang jenis pelajar.
Ini adalah hanya satu ciri percuma untuk menghidupkan,
walaupun ia tidak datang pada harga beberapa jumlah ruang.
Akhir sekali, auto-kenaikan, ini bidang AI,
yang hanya bermakna jika ia int dan anda tidak mahu untuk menjaga kenaikan sendiri
setiap kali ada pengguna baru, periksa bahawa,
dan setiap pengguna yang mendapat dimasukkan secara automatik akan mendapat ID baru.
Mari kita klik Simpan, dan sekarang mari kita mencari kesalahan dengan reka bentuk ini.
Jika saya pergi ke People, notis bahawa kedua-dua Mike dan rumah saya adalah NULL.
Saya boleh menggunakan phpMyAdmin untuk mengedit ini secara manual.
Saya boleh pergi di sini dan jenis di Mather dan kemudian tekan Enter,
dan kini melihat jadual adalah berbeza.
Tetapi notis saya boleh melakukan sesuatu yang lain juga.
ID Daud adalah 1, jadi phpMyAdmin lagi adalah hanya satu alat pentadbiran;
ini bukanlah sesuatu yang pengguna anda pernah pergi untuk melihat.
Jadi jika saya sebaliknya klik tab SQL top up -
dan sekali lagi, pset 7 akan memperkenalkan anda kepada lebih daripada pertanyaan ini -
Saya manual boleh melaksanakan arahan query SQL bahasa berstruktur
Pengguna UPDATE SET rumah = 'Pfoho' WHERE id = 1.
Ini pertanyaan SQL, baik cukup, cukup dibaca dari kiri ke kanan.
Kemaskini jadual pengguna, menetapkan bidang yang dipanggil rumah untuk Pfoho
mana ID pengguna ialah 1.
Atau saya juga boleh lakukan di mana e-mel = 'malan@harvard.edu'.
Selagi yang unik mengenal pasti saya, yang akan bekerja juga.
Tetapi ID cenderung untuk prestasi yang lebih tinggi, jadi mari kita berbuat demikian.
Mari kita klik Pergi. Okay, lecture.users tidak wujud. Apa kesilapan saya?
Apa jadual yang sebenarnya dipanggil di sini?
Ia dipanggil pelajar hanya kerana itulah apa yang kita lakukan di sini di sebelah kiri atas.
Ia dipanggil pelajar, bukan pengguna. Jadi klik Pergi sekarang.
Baris 1 terjejas. Pertanyaan mengambil masa 0.01 saat.
Jika saya klik Lihat sekarang, sekarang kehidupan Malan dalam Pfoho.
Jadi itulah satu lagi rasa SQL, tetapi pset akan berjalan anda melalui sedikit lebih daripada itu.
>> Ada keputusan bodoh saya sudah dibuat di sini.
Saya ingin berhujah bahawa ini reka bentuk pangkalan data adalah cekap
kerana orang-orang yang lebih saya menambah jadual pelajar,
lebih daripada kita saya mula menambah, lebih TFS saya mula menambah,
kita akan mula melihat apa yang pertindihan dalam jadual ini?
>> Yeah. [Pelajar] Melihat bahawa ia adalah di kalangan pelajar, kita menggunakan sama [didengar]
- Hak yang sama, sebenarnya.
Jadi, jika 400 orang tinggal di Mather, memberikan atau mengambil,
akhirnya jadual ini akan mempunyai 400 baris yang mengatakan "Mather," "Mather,"
"Mather," "Mather," "Mather."
Kami membuang semua-bait, dan ada beberapa takeaways di sana.
1, terdapat kes sudut gila di mana jika seseorang membayar wang yang banyak
dan menamakan semula Mather, kita kini mempunyai untuk menukar jadual pangkalan data keseluruhan kami.
Itu tidak akan berlaku sering, walaupun Pfoho pernah dipanggil Utara House 15 tahun yang lalu,
jadi ia berlaku. Tetapi itu bukan semua yang menarik.
Lebih menarik daripada kes sudut seperti yang perlu untuk mengemaskini data dalam pukal
bagi pangkalan data mengapa anda menyimpan Mather lagi dan lagi dan lagi dan lagi?
Itulah banyak aksara, 6 aksara.
Kita tidak boleh melakukan lebih baik daripada itu, terutama bagi Pforzheimer?
Sesungguhnya kita boleh melakukan lebih baik daripada yang banyak watak.
Mengapa tidak hanya mengaitkan pengecam unik dengan setiap rumah
dan kedai yang bagi setiap pengguna? Jadi mari kita cuba ini.
Bukannya hanya menggunakan jadual pelajar, biarlah saya pergi ke pangkalan data kuliah saya di sini di sebelah kiri atas.
Notis di sini ia mengatakan Buat jadual.
Izinkan saya membuat jadual baru yang dipanggil rumah.
Bilangan lajur akan menjadi 2. Enter.
Sekarang saya mempunyai 2 bidang.
Saya akan memanggil nama ini, dan ia akan menjadi satu VARCHAR daripada 255 panjang,
>> tetapi itulah agak sewenang-wenangnya. Izinkan saya meletakkan ini turun di sini oleh konvensyen.
Jadi meletakkan ID di sini. Mari kita memberikan setiap rumah pengecam unik.
Mari kita memberikan nama setiap rumah.
Mari kita menentukan bahawa pengecam akan menjadi tidak bertanda hanya dengan konvensyen hanya menggunakan nombor positif.
Mari kita pergi ke hadapan dan memberikan ini auto-kenaikan bidang untuk sekarang.
Dan adakah kita perlu apa-apa lagi?
Mari kita pergi ke hadapan dan klik Simpan.
Sekarang saya mempunyai jadual kedua.
Perhatikan sebagai selain ini adalah arahan SQL sedikit samar
bahawa anda akan mempunyai untuk menaip secara manual jika tidak menggunakan alat pentadbiran seperti phpMyAdmin.
Jadi satu lagi sebab kita gunakan.
Ia adalah jenis hebat berguna pedagogically kerana anda boleh klik di sekitar
dan memikirkan bagaimana perkara yang bekerja dengan hanya menyalin dan menampal apa phpMyAdmin pula.
Tetapi arahan Buat jadual adalah apa sahaja dilaksanakan, dan di sini adalah jadual saya.
Biar saya pergi ke hadapan sekarang dan menggunakan SQL mentah bukannya menggampangkan dengan mengklik tab Sisip.
Izinkan saya tidak MASUKKAN KE rumah,
dan saya akan mengatakan nama rumah akan mempunyai nilai 'Mather'.
Itu sahaja. Sintaks Ini adalah sedikit lebih samar.
Ini adalah nama satu bidang yang kita mahu untuk memasukkan.
Ini adalah nilai-nilai yang kita mahu masukkan ke dalam bidang-bidang. Biar saya klik Pergi.
1 baris disisipkan mengambil masa 0.02 saat. Biar saya klik Lihat sekarang.
>> Notis jika saya klik Lihat, ada Mather, yang ID adalah dengan automasi nombor 1.
Biar saya buat satu lagi. Biar saya pergi ke tab SQL.
INSERT INTO rumah. Nama rumah akan mempunyai nilai Pfoho dan sebagainya.
Pergi. Dan saya boleh terus melakukan ini sekali lagi dan lagi dan lagi.
Atau jika anda bosan menggunakan phpMyAdmin, anda hanya boleh menggunakan tab Sisip
dan tidak perlu menaip SQL mentah.
Anda hanya boleh bang ia keluar lebih cepat dengan menaip, misalnya, Currier, Masukkan,
dan kini jika kita klik Lihat, ada Currier dengan ID 3.
Jadi ini adalah apa yang kita maksudkan dengan auto kenaikan.
Tetapi sekarang kita mempunyai untuk menetapkan sesuatu dalam pelajar.
Di kalangan pelajar apa yang perlu jenis data bidang rumah sekarang?
Ia harus int, kan?
Jadi matlamat di sini adalah faktor keluar, atau dikenali sebagai menormalkan, jadual
supaya kita tidak menyimpan maklumat redundantly dalam mana-mana jadual saya.
Dan sekali lagi, jalan kita di sini akan mengatakan Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, yang sangat diperlukan
dari segi pembaziran daripada aksara.
Jadi biarlah saya pergi ke hadapan dan perubahan ini dengan mengklik Struktur,
dan biarlah saya pergi ke hadapan dan memeriksa bidang rumah, klik Tukar,
dan sekarang saya akan menukar ini menjadi int.
255 tidak lagi relevan.
Biar saya pergi ke hadapan dan mengatakan bahawa denda jika ia masih NULL. Simpan.
Sekarang pelajar jadual telah diubah dengan jayanya,
dan notis lagi rumah adalah int.
Sebagai mengetepikan, mengabaikan nombor dalam kurungan apabila ia datang kepada ints.
>> Ini adalah atas sebab-sebab legasi.
Kembali pada hari apabila anda tidak mempunyai GUIs, sebaliknya anda mempunyai persekitaran baris arahan,
10 dan 11 masing-masing dinyatakan berapa banyak aksara yang anda perlu menunjukkan
dalam tetingkap terminal untuk benar-benar memaparkan bidang.
Ia mempunyai tiada kaitan dengan panjang sedikit bidang sebenar, jadi kita hanya akan mengabaikan bahawa buat masa sekarang.
Sekarang saya perlu pergi ke dalam jadual ini.
Dan jika David tinggal di Mather, rumah tidak harus 0,
yang adalah nilai lalai int paling dekat dengan null.
Dia harus tinggal di rumah 1.
Mari kita sewenang-wenangnya mengatakan bahawa Mike kehidupan di Pfoho, jadi nombor rumah 2.
Sekarang jadual saya kelihatan sedikit lebih samar.
Tetapi dengan menimbangkan kecekapan.
Saya kini menggunakan hanya 32 bit untuk mengenal pasti rumah,
yang bermakna terdapat hanya 1 definisi kanun Mather rumah saya dan Pfoho
dan itulah dalam jadual rumah.
Jadi jika saya mahu sekarang menyertai semula jadual ini, berfikir ia cara ini.
Di sini saya mempunyai jadual pelajar saya, dan di sebelah kanan ada nombor-nombor, 1 dan 2.
1 adalah Mather, 2 adalah Pfoho.
Kami mempunyai nombor-nombor yang sama dalam jadual ini lain, yang dipanggil rumah,
1 dan 2 dan 3 bagi mereka 3 buah rumah.
Apa yang sekarang kita mahu lakukan ialah mempunyai keupayaan dalam kod, PHP dan SQL,
untuk menyusun menyertai semula jadual ini, di mana jika ini adalah pelajar dan ini adalah rumah-rumah,
kita mahu entah bagaimana menggabungkan mereka supaya 1 garisan sehingga dengan 1,
2 baris dengan 2, dan supaya kita boleh mengetahui di mana David
dan di mana Mike dan di mana orang lain hidup.
Untuk melakukan ini, kita boleh melaksanakan query SQL seperti berikut.
SELECT * DARI pelajar JOIN rumah ON -
Dan kini apa bidang yang kita mahu untuk menyertai?
Jadi students.house = houses.id.
>> A samar sedikit, tetapi bahagian ini bermakna benar-benar mewujudkan jadual sementara baru
itulah hasil daripada menyertai pelajar dan rumah-rumah.
Dan bagaimana anda ingin menggabungkan hujung jari saya di sini?
Tetapkan 'padang rumah yang sama untuk rumah' medan ID pelajar.
Dan jika saya sekarang klik Pergi, saya mendapat kembali apa yang saya berharap untuk.
Daud adalah dalam Mather, Mike di Pfoho, dan saya juga melihat pengenalan yang unik.
Tetapi persoalannya adalah sekarang saya mempunyai jadual yang lengkap.
Dan sebagainya Fleet sini untuk pset 7 atau benar-benar untuk projek akhir:
Jika anda mendapati bahawa anda menyimpan apa-apa sekeping maklumat redundantly,
sama ada ia adalah sebuah rumah, mungkin ia adalah sebuah bandar, negeri, dan ZIP
mana ZIP biasanya boleh tetapi tidak sentiasa digunakan sebagai pengecam unik,
pergi melalui latihan mental dan kemudian dengan sesuatu seperti phpMyAdmin
pemfaktoran bahawa data biasa kerana terutamanya sebagai laman web anda mendapat lebih baik digunakan
dan lebih popular, ini adalah bagaimana anda memastikan bahawa segala-galanya adalah super cepat,
dengan memberi pangkalan data sebagai petunjuk banyak keunikan yang mungkin.
Itu adalah banyak.
Apa-apa soalan? Semua hak. Mari kita rehat 5-minit di sana dan berkumpul semula.
Semua hak.
Berikut adalah contoh yang telah digunakan beberapa tahun yang lalu apabila saya mengambil CS161,
yang merupakan sistem operasi kelas di kolej
yang dikenali untuk menjadi yang menakjubkan tetapi jumlah kerja yang gila,
dan ia benar-benar memberi tumpuan pada beberapa masalah tahap rendah yang timbul dalam sistem operasi
dan juga walaupun di dunia pangkalan data.
>> Cerita yang telah diberitahu oleh profesor, saya Margo Seltzer, tahun itu adalah seperti berikut.
Andaikan anda mempunyai peti sejuk asrama sedikit untuk anda dan rakan sebilik anda
dan kedua-dua anda benar-benar suka susu.
Jadi anda pulang dari kelas satu hari, rakan sebilik anda belum ada,
anda membuka peti sejuk, dan anda sedar, "Oh menyumpah, kami keluar susu."
Jadi anda menutup peti sejuk, anda berjalan di seberang jalan untuk CVS
dan mendapatkan dalam barisan yang semakin panjang untuk membeli sedikit susu di CVS.
Sementara itu, rakan sebilik anda datang ke rumah dari atau kelas beliau,
datang ke bilik, membuka peti sejuk yang benar-benar mahu sedikit susu,
membuka peti sejuk dan, "Damn, tidak susu."
Jadi dia menutup peti sejuk, berjalan keluar pintu, dan pergi ke ABP
atau di tempat lain daripada CVS di mana anda tidak akan bertemu antara satu sama lain
untuk pergi mendapatkan susu beberapa.
Sudah tentu beberapa minit kemudian, kedua-dua anda pulang ke rumah
dan kini anda mempunyai susu dua kali seberapa banyak yang anda benar-benar mahu.
Dan susu, kini ia akan pergi buruk kerana anda suka susu
tetapi anda tidak benar-benar seperti susu, jadi sekarang anda mempunyai susu yang terlalu banyak, jadi ia akan masam.
Ini adalah yang besar (huru-haranya), keadaan mengerikan.
Apa yang boleh menyelesaikan kesusahan ini jika anda adalah rumah rakan sebiliknya yang pertama? Ya.
[Pelajar] Anda harus telah meninggalkan nota. [Ketawa]
Baik. Anda harus telah meninggalkan nota.
Anda perlu meletakkan nota Post-it atau seperti mengatakan, "Sudah bagi susu,"
dan kemudian rakan sebilik anda konsepnya akan telah dikunci keluar sebenarnya berbuat demikian.
Atau anda boleh pergi langkah 1 lagi.
Anda benar-benar boleh mengunci peti sejuk dengan beberapa jenis mangga,
dan kini rakan sebilik anda benar-benar akan dikunci keluar dari peti sejuk.
Jika kita umum kembali kepada pengaturcaraan,
anda hampir boleh berfikir peti sejuk sebagai beberapa jenis pembolehubah atau struct,
beberapa jenis bekas untuk maklumat.
Masalah tersebut, pada dasarnya, di sini adalah bahawa kedua-dua anda telah dibenarkan untuk memeriksa
atau membaca keadaan struktur data ini,
tetapi anda melihat ia pada masa-masa yang berbeza tetapi kedua-dua anda membuat keputusan
berdasarkan keadaan dunia pada detik-detik yang berbeza dalam masa.
Jadi telah anda dikunci peti sejuk, anda akan sekurang-kurangnya dielakkan rakan sebilik anda
daripada telah dapat memeriksa keadaan dunia,
jadi dia tidak dapat dibuat bahawa keputusan yang sama.
Jadi pangkalan data, kerana ia ternyata, mempunyai masalah ini sentiasa.
>> Mari kita lihat jika kita boleh membina satu senario.
Katakan bahawa anda jenis lelaki yang buruk dan anda pergi ke Bank of America
atau salah satu daripada tempat-tempat lain di dataran yang mempunyai sisi berumur ATM menyebelah,
dan entah bagaimana anda digambarkan bagaimana untuk salinan kad ATM - tidak semua yang keras.
Ia hanya satu jalur magnet.
Dan begitu apa yang anda mahu mencuba untuk melakukannya adalah bermain permainan ini
di mana anda meletakkan 1 kad ke dalam 1 mesin, kad lain ke dalam mesin yang lain,
dan anda dasarnya mahu mencuba untuk mengeluarkan wang secara serentak,
kerana bayangkan cerita yang pergi seperti berikut.
Mesin di sebelah kiri mengambil kad anda dan PIN anda,
dan kemudian anda berkata, "Berikan saya $ 100."
ATM diprogramkan terlebih dahulu melakukan pilih pangkalan data atau bersamaan -
apa-apa pangkalan data ia menggunakan - untuk melihat pengguna ini mempunyai sekurang-kurangnya $ 100 dalam atau akaun beliau?
Jika ya, maka meludah keluar $ 100 dan tolak $ 100 daripada baki mereka.
Tetapi sudah tentu jika ada mesin pelbagai di sini atau pelbagai cara untuk memeriksa
keadaan dunia itu, bilik kebal bank, untuk melihat berapa banyak wang yang anda miliki,
menganggap bahawa hanya dengan peluang mesin di sebelah kiri dan kanan
kedua-duanya bertanya soalan itu pada kira-kira masa yang sama dalam masa.
>> Dan ini sudah tentu boleh berlaku. ATM adalah komputer hari ini.
Jadi, jika mesin di sebelah kiri berkata, "Ya, anda mempunyai sekurang-kurangnya $ 100,"
manakala mesin di sebelah kanan berkata, "Ya, anda mempunyai sekurang-kurangnya $ 100,"
maka kedua-dua mereka meneruskan untuk menamatkan program mereka dan sebenarnya meludah keluar $ 100
dan berkata, "Sebelum ini anda mempunyai $ 200."
"Biar saya mengemaskini pembolehubah kini menjadi $ 100 ditinggalkan dalam akaun."
Tetapi jika kedua-dua mereka telah menyemak baki akaun anda dan mendapati bahawa ia adalah 200 $
dan kedua-dua mereka kemudian melakukan matematik dan berkata 200-100,
mesin telah berpotensi meludah keluar dua $ 100 bil di setiap mesin,
tetapi mereka telah hanya dikemaskini baki akaun jumlah wang anda untuk menjadi $ 100.
Dalam erti kata lain, anda telah dibawa keluar $ 200, tetapi kerana mereka diperiksa keadaan dunia
secara serentak dan kemudian membuat keputusan berdasarkan nilai itu,
mereka tidak mungkin melakukan matematik akhirnya betul.
Jadi dalam keadaan bank juga anda benar-benar mahu mempunyai beberapa jenis sekat-masuk
supaya sebaik sahaja anda telah memeriksa keadaan beberapa pembolehubah
yang benar-benar penting, seperti baki akaun anda,
jangan biarkan orang lain membuat keputusan berdasarkan itu sehingga anda selesai melakukan perkara anda,
di mana dalam kes ini anda adalah ATM di sebelah kiri.
Kunci orang lain keluar.
Anda sebenarnya boleh mencapai kesan ini dalam beberapa cara yang berbeza.
>> Cara yang paling mudah di MySQL adalah garis SQL bahawa kita memberikan anda
dalam spesifikasi set masalah yang kelihatan sama seperti ini.
Masukkan ke dalam jadual - apa ia dipanggil - id, simbol, dan saham, bilangan saham,
nilai berikut, misalnya.
Jika anda tidak membaca spec lagi, ini adalah satu contoh yang melibatkan bagaimana anda pergi tentang
membeli 10 saham saham ini sen untuk Presiden Skroob,
ID pengguna yang berlaku untuk menjadi nombor 7?
Ini mengatakan MASUKKAN KE jadual id berikut, simbol, dan nombor saham
7, 'DVN.V', dan 10.
Tetapi - tetapi, tetapi, tetapi - baris kedua adalah salah satu yang penting.
ATAS PENDUA saham UPDATE PENTING = saham + NILAI (saham).
Jadi benar-benar samar-cari pada pandangan pertama.
Tetapi hakikat bahawa ini query SQL, walaupun ia wrap ke 2 baris,
1 query panjang, ia bermakna ia adalah atom
dalam erti kata bahawa pertanyaan ini sama ada akan dilaksanakan semua bersama-sama atau tidak sama sekali.
Dan oleh definisi MySQL, itulah bagaimana mereka melaksanakan pertanyaan ini.
Ia adalah mengikut definisi di manual dijamin untuk melaksanakan semua sekali gus atau tidak sama sekali.
Motivasi untuk ini adalah seperti berikut.
Jika dalam kes ini, anda cuba untuk membeli 10 saham stok,
ia adalah jenis cerita yang sama seperti susu, ia adalah jenis cerita yang sama seperti ATM.
>> Jika anda membuat kesilapan yang tidak menggunakan sintaks ini
tetapi sebaliknya memilih dari pangkalan data untuk melihat berapa banyak saham saham ini sen
Presiden Skroob mempunyai, dan andaikan dia mempunyai 10 saham,
dan kemudian beberapa sekelip kemudian anda kemudian melakukan kenyataan UPDATE,
yang merupakan satu lagi kenyataan dalam SQL yang mengatakan bahawa pergi ke hadapan dan menambah 10 lebih saham
10 semasa beliau supaya ideal jumlah itu adalah 20,
Masalahnya adalah kerana dalam sistem pangkalan data hari ini dan kerana dalam komputer hari ini
anda mempunyai pemproses berganda, pelbagai teras -
dalam erti kata lain, komputer benar-benar boleh melakukan perkara-perkara yang berbilang sekali gus -
tiada jaminan bahawa anda SELECT dan UPDATE anda dalam kes ini
akan berlaku kembali ke belakang.
Jadi senario yang buruk akan anda lakukan SELECT
untuk melihat berapa banyak saham saham sen ini tidak Skroob mempunyai,
dan kemudian hanya dengan satu lagi peluang pertanyaan pangkalan data dilaksanakan -
mungkin Skroob dalam tetingkap pelayar yang lain cuba untuk membeli 10 saham
dalam tetingkap lain sama sekali, sama seperti ATM -
dan menganggap bahawa pertanyaan lagi mendapat di antara SELECT dan UPDATE.
Ia boleh menjadi kes yang Skroob kini kehilangan beberapa bilangan saham
kerana proses lain memeriksa keadaan dunia,
atau dia mendapat saham lebih daripada yang sepatutnya.
Kami tidak akan pergi ke butir-butir dengan tepat apa yang mereka kisah tertentu akan,
tetapi persoalannya adalah jika anda mempunyai untuk memeriksa nilai pembolehubah dan kemudian membuat keputusan,
jika terdapat risiko orang lain melakukan sesuatu di antara mereka 2 kenyataan,
yang boleh berlaku dalam sistem multipemproses, multicore sistem,
komputer dengan keupayaan untuk melakukan perkara-perkara sekaligus, perkara-perkara buruk boleh berlaku
akaun bank seperti didebitkan tidak betul, membeli susu dua kali ganda,
atau dalam kes ini nombor yang salah saham.
Tetapi ada cara yang lebih mudah untuk berfikir tentang perkara ini.
>> Ia ternyata bahawa SQL juga menyokong, jika anda menetapkan jadual anda dengan betul,
sesuatu yang dipanggil transaksi, yang saya akan berhujah adalah sebenarnya lebih mudah untuk memahami
daripada ini, tetapi ia bukan 1-liner, jadi ia sebenarnya sedikit lebih terlibat.
Terdapat literal kenyataan dalam SQL dipanggil START TRANSAKSI.
Sama seperti terdapat SELECT, UPDATE, INSERT, DELETE, dan JOIN dan sekumpulan orang lain,
terdapat kata kunci seperti TRANSAKSI START.
Dan apa yang anda kemudian melakukan dalam konteks-pset 7 -
anda tidak perlu untuk melakukan ini untuk pset 7; ia jelas ditolak sebagai tidak perlu,
tetapi untuk projek akhir ia boleh berguna -
jika anda memanggil query TRANSAKSI START dan kemudian pertanyaan yang lain
dan kemudian satu lagi pertanyaan dan kemudian yang lain, yang lain, dan satu lagi,
pertanyaan akan sebenarnya tidak akan dilaksanakan sehingga anda memanggil kenyataan SQL melakukan,
di mana titik, sama ada ia adalah 2 penyata atau 20 penyata, mereka semua akan dilaksanakan pada sekali,
yang bermaksud tidak ada orang lain secara tidak sengaja boleh membeli susu yang terlalu banyak atau terlalu banyak wang debit
atau membeli saham yang terlalu banyak kerana semua pertanyaan anda akan melaksanakan
kembali ke belakang untuk kembali ke belakang.
Dan ini adalah sangat penting, terutamanya apabila anda melakukan sesuatu seperti ini.
Ini adalah satu contoh yang sewenang-wenangnya mengatakan mari mengemas kini akaun bank
dengan menetapkan keseimbangan bersamaan dengan kira-kira - $ 1000 di mana nombor akaun ialah 2.
Dan kemudian kenyataan kedua sekarang mari kita deposit bahawa $ 1000
ke orang lain akaun bank yang nombor akaun adalah 1.
>> Dalam erti kata lain, ini adalah satu contoh yang sempurna di mana anda ingin memastikan
bahawa kedua-dua penyata ini berlaku atau tidak sama sekali
kerana jika tidak, pelanggan akan mendapat diskrukan
dan anda akan mengambil wang mereka dan tidak mendepositkan di tempat lain,
atau bank akan mendapat diskrukan mana anda pergi untuk mendepositkan wang
tetapi sebenarnya tidak tolak dari akaun pengguna.
Jadi anda mahu kedua-dua mereka untuk melaksanakan bersama-sama.
Oleh itu memasuki transaksi dunia.
Jadi itulah sesuatu untuk menyimpan di belakang minda anda,
tidak begitu banyak bagi maksud hanya projek akhir,
tetapi jika anda mahu mengambil projek akhir anda tempat,
jika anda mahu untuk memulakan beberapa syarikat di sekitar,
jika anda mahu menyelesaikan masalah beberapa kumpulan pelajar di kampus
dan sebenarnya mempunyai hidup, laman web yang aktif, ini adalah jenis pepijat yang halus yang boleh timbul
jika anda tidak cukup berfikir melalui apa yang boleh berlaku jika 2 orang
cuba untuk mengakses laman web anda di benar-benar masa yang sama dalam masa,
mana pertanyaan mereka sebaliknya mungkin akan terjalin.
>> Bersedia untuk beberapa JavaScript, penggoda daripadanya?
Ini adalah bahasa kita yang terakhir bagi semester. Semua hak.
Syukurlah, JavaScript kelihatan sangat, sangat, sangat serupa dengan 2 bahasa, C dan PHP,
kita telah dilakukan setakat ini.
Tiada JavaScript dalam pset 7, tetapi ia adalah satu alat yang amat berguna
apabila ia datang untuk melakukan projek berasaskan web muktamad atau benar-benar hanya pengaturcaraan web yang lebih amnya.
Jadi gambaran cepat sesuatu yang dipanggil DOM.
Berikut adalah laman web yang sangat mudah yang benar-benar hanya berkata hello, dunia
kedua-dua dalam tajuk dan di dalam badan.
Sebagai pengengsotan telah mencadangkan untuk beberapa ketika,
memang ada hierarki untuk laman web.
Saya boleh menarik ini coretan sama HTML sebagai pokok,
memikirkan kembali kepada perbincangan kita tentang struktur data dalam C, seperti berikut.
Saya mempunyai beberapa nod akar khas dipanggil nod dokumen,
dan kita akan melihat analog ini dalam JavaScript dalam hanya seketika.
Anak pertama dan anak tunggal itu dalam kes ini adalah tag HTML.
Tiada pemetaan langsung DOCTYPE yang.
Itu adalah satu perkara yang istimewa, jadi kita hanya perlu mengabaikan apabila ia datang ini DOM,
ini Objek Dokumen Model pokok.
Perhatikan bahawa tag HTML, yang saya telah digambarkan sewenang-wenangnya sebagai sebuah segiempat tepat,
mempunyai 2 anak: kepala dan badan.
>> Mereka sama-sama dilukis sebagai segiempat tepat.
Ia adalah bermakna bergambar bahawa kepala adalah ke kiri badan.
Implikasinya adalah bahawa kepala datang pertama di pokok itu.
Jadi ada sebenarnya pesanan kepada pokok apabila anda menarik ia seperti ini,
walaupun bentuk dan barang kecil yang sewenang-wenangnya.
Ketua pula mempunyai seorang anak tunggal yang dipanggil tajuk,
dan tajuk sebenarnya mempunyai anak sendiri, yang merupakan "hello, dunia",
yang saya sengaja menarik sebagai bujur di sini untuk membuat ia sedikit berbeza daripada segi empat tepat.
Segiempat tepat ini adalah unsur-unsur, manakala hello, dunia adalah benar-benar nod teks.
Jadi ia adalah satu nod dalam pokok itu, tetapi ia adalah satu jenis yang berbeza nod
jadi saya menarik ia sewenang-wenangnya berbeza.
Begitu juga tidak badan mempunyai kanak-kanak yang dipanggil hello, dunia serta,
nod begitu berbeza walaupun mereka kebetulan teks yang sama,
tetapi saya telah dilukis menggunakan bentuk yang sama. Jadi yang peduli?
Nah, apa yang baik tentang HTML adalah bahawa ia tidak mempunyai sifat hierarki.
Dan apa yang baik tentang JavaScript dan terutamanya perpustakaan yang disediakan secara terbuka
dan popular seperti jQuery, anda boleh menavigasi struktur pokok yang begitu menakjubkan mudah.
Mana-mana barangan yang kita lakukan dalam C dengan petunjuk dan pokok menyeberangi dan recursing pada nod
anak kiri untuk kanak-kanak yang betul, tiba-tiba kita boleh menyusun mengambil untuk diberikan
sebagai menakjubkan menyedarkan jika tidak sedikit mengecewakan
tetapi tidak hampir cara yang berkesan untuk pergi tentang pengaturcaraan.
Dan sebagainya dengan bahasa ini di peringkat yang lebih tinggi seperti JavaScript
kita akan menjadi mampu untuk mengemudi pokok ini lebih intuitif.
>> Dan sesungguhnya sintaks akan menjadi agak biasa.
Jika anda tidak pernah dilihat JavaScript sebelum ini, ini adalah rujukan yang benar-benar baik
daripada orang Mozilla, orang-orang yang membuat Firefox,
jadi jangan berasa bebas untuk melayari bahawa mengikut keselesaan anda.
Apa yang anda akan menemui dan slaid ini adalah sama dengan apa yang kita menggunakan hari lain -
sama, utama hilang.
Jadi apabila anda menulis program dalam JavaScript, tidak ada fungsi utama.
Anda hanya mula menulis kod.
Tetapi perbezaan utama antara JavaScript dan C dan PHP
adalah bahawa manakala C dan PHP setakat ini telah dilaksanakan sebelah pelayan
oleh perkakas dalam kes ini atau lebih secara amnya oleh pelayan,
JavaScript oleh reka bentuk biasanya dijalankan oleh pelayar.
Dalam erti kata lain, anda mungkin menulis kod JavaScript, seperti yang kita kira-kira untuk,
pada pelayan dalam perkakas, tetapi anda termasuk di kalangan HTML anda, antara CSS anda,
antara GIF dan PNGS anda dan JPEG anda
supaya apabila pengguna melawat laman web anda, jika anda menggunakan JavaScript,
bahawa kod JavaScript datang dari pelayan kepada pelayar,
dan ia adalah pelayar yang benar-benar melaksanakan ia.
Jadi ini mempunyai implikasi yang bermakna untuk harta walaupun intelektual.
Ia jenis bodoh untuk berfikir tentang melindungi IP anda apabila ia datang kepada kod JavaScript
kerana dengan sifat bahasa ia mendapat dilaksanakan biasanya sebelah pelayar.
>> Anda boleh menggelapkan, yang bermakna anda boleh membuat ia kelihatan gila dan hodoh
dengan tiada ruang kosong, dahsyat nama pemboleh ubah, untuk membuat ia lebih sukar bagi orang-orang untuk mencuri IP anda,
tetapi utama adalah bahawa ia dilaksanakan sampingan pelayar.
Walaupun sebagai satu sisi pelayan selain JavaScript boleh digunakan,
kes penggunaan yang paling biasa sekarang masih pada pelayar.
Dan di sini adalah apa yang kelihatan seperti. Berikut adalah jika-lain jika-lain membina seperti C, hanya seperti PHP.
Berikut adalah ungkapan Boolean apabila anda "atau" 2 perkara bersama-sama.
Berikut adalah apabila anda "dan" 2 perkara bersama-sama.
Berikut adalah kenyataan suis, yang mirip dengan PHP
di mana anda boleh menukar pada jenis nilai-nilai yang berbeza.
Gelung sama ada untuk gelung di sini, yang distrukturkan sepercaman kepada apa yang kita telah lihat sebelum.
Walaupun gelung, kita telah mendapat lakukan manakala gelung.
Pembolehubah, pernah jadi sedikit berbeza.
Anda tidak mengisytiharkan pembolehubah seperti yang anda lakukan dalam PHP dan C,
tetapi sama hidupkan lemah ditaip.
Anda tidak menentukan int atau float atau tali atau apa-apa seperti yang lazimnya.
Anda boleh menentukan var.
Anda tidak perlu untuk menentukan var, tetapi ia mempunyai implikasi jika anda tidak lakukan.
Biasanya jika anda meninggalkan var, anda secara tidak sengaja mewujudkan pembolehubah global bukan tempatan.
Jadi biarlah saya mencadangkan bahawa anda hampir sentiasa hanya mengatakan var dan kemudian nama pembolehubah.
Ia bukan jenis, ia adalah hanya var bagi pemboleh ubah.
Ini akan menjadi contoh, sama ada ia adalah 123 atau "hello, dunia".
Perlengkapan hadir dan syntactically mirip dengan PHP.
Saya akan mengatakan nombor var dan kemudian saya menggunakan kurungan persegi lagi untuk mengisytiharkan pembolehubah
yang jenis tatasusunan yang mempunyai nombor-nombor tertentu di dalamnya dipisahkan dengan koma.
Dan kemudian akhir sekali, ini adalah satu-satunya yang benar-benar kelihatan berbeza.
Ingat bahawa dalam PHP kita akan melaksanakan pelbagai bersekutu bagi pelajar
ke seperti Zamyla yang mungkin kelihatan seperti ini, di mana pembolehubah dipanggil pelajar.
Kurungan persegi bermakna sini datang array.
>> Hakikat bahawa saya tidak menggunakan indeks tetapi rentetan angka - id, rumah, dan nama -
bermakna bahawa ini adalah satu array bersekutu,
dan anak panah ini dengan tanda sama dan pendakap bersudut
bermakna bahawa kunci adalah "id", nilai 1;
utama adalah "rumah", nilai Winthrop House;
utama adalah "nama", nilai adalah Zamyla Chan.
Jadi, terdapat 3 kunci dalam array ini bersekutu, setiap yang mempunyai nilai tersendiri.
Kita telah melihat bahawa dalam pset 7, atau anda tidak lama lagi akan, dalam idea JavaScript sama,
tetapi ia akan kelihatan seperti ini.
Pelajar yang Jadi var - tiada tanda dolar dan tidak menyebut jenis masih tetapi var -
sama dan kemudian membuka pendakap kerinting kerana dalam JavaScript apabila anda mempunyai pasangan nilai utama,
anda sebenarnya menggunakan sesuatu yang dipanggil objek.
Dan orang-orang yang tidak mengambil APC atau seperti mungkin ingat objek dari Jawa
atau bahasa yang sama.
JavaScript bukan Jawa, pertama sekali.
Ia adalah keputusan yang sengaja reka bentuk tahun lalu untuk mengetuk sesuatu yang lain yang popular,
namanya, walaupun ia tidak mempunyai hubungan asas ke Jawa sendiri.
JavaScript mempunyai objek, dan anda mencipta mereka dengan cara notasi bersedia kerinting.
Objek di JavaScript cukup banyak bersamaan kepada barisan bersekutu dalam PHP
apabila ia datang untuk menyimpan data di dalam mereka.
>> Tetapi lebih kuat di JavaScript anda boleh mengaitkan sangat mudah fungsi-fungsi
di dalam sesuatu objek, dan walaupun anda boleh lakukan ini dalam bahasa lain,
ia adalah satu paradigma yang agak biasa, seperti yang kita akan lihat.
Secara ringkas, objek ini mewakili pelajar, yang terutamanya Zamyla,
dan ia adalah serupa konsep, hanya syntactically berbeza daripada ini.
Mari kita sebenarnya menggunakan JavaScript dalam satu fail.
Ia ternyata ada tag skrip.
Kami telah melihat tag gaya dan kita telah melihat tag HTML yang lain.
Tag skrip sebenarnya akan mengandungi beberapa kod JavaScript.
Biar saya pergi ke dalam perkakas di mana kita mempunyai beberapa kod sumber pra-dibuat.
Saya telah tidak diberikan lagi di laman web, tetapi saya akan berbuat demikian selepas kelas.
Mari kita membuka satu ini, blink.html.
Kembali pada tahun 1990-an, terdapat literal satu tag HTML dipanggil tag sekelip,
dan ini adalah salah satu tag yang paling hebat secara berlebihan di Internet
di mana anda akan melawat beberapa laman web 1990-an gaya dan mula melihat teks berkelip anda seperti ini,
keputusan tag Marquis, yang telah teks akan seperti ini.
Salah satu daripada beberapa kali di mana dunia sebenarnya telah bersetuju pada standard web,
semua orang di seluruh lembaga membunuh tag sekelip beberapa tahun lalu.
Tetapi kita boleh membangkitkan dengan JavaScript sebagai demonstrasi kuasa anda mempunyai
apabila anda boleh menulis program di dalam laman web.
Pertama mari kita melangkau ke atas barangan yang baru dan memberi tumpuan hanya pada yang lama.
>> Berikut adalah barangan lama dalam contoh ini.
Saya mempunyai tag HTML, tag kepala, dan tag tajuk.
Kemudian saya mempunyai tag badan di sini dengan span, yang ingat hanya satu bahagian segiempat halaman
bahawa saya telah diberikan ID unik sewenang-wenangnya "ucapan" kepada,
hanya jadi saya mempunyai cara yang unik merujuk kepada, yang mempunyai beberapa teks yang sangat mudah:
hello, dunia.
Sekarang mari saya tatal ke atas ke atas fail ini dan lihat apa yang baru.
Perkara pertama yang top up baru adalah tag skrip,
dan di dalam notis tag skrip saya telah mengisytiharkan fungsi.
Untuk mengisytiharkan fungsi dalam JavaScript, agak mirip dengan PHP,
anda benar-benar menulis fungsi maka nama fungsi, kurungan,
dan mungkin beberapa hujah jika ia mengambil apa-apa.
Kemudian saya telah mendapat pendakap kerinting saya seperti biasa, dan kini kita mempunyai beberapa kod baru sedikit,
tetapi mari kita lihat apa ini bermakna.
Jadi div var, ini hanya bermaksud memberi saya div dipanggil ubah.
Saya boleh telah dipanggil ia foo, tetapi saya mahu ia akan dipanggil div
atas sebab-sebab yang akan menjadi jelas dalam kedua.
Kemudian ia ternyata di JavaScript - dan ini adalah kod JavaScript tertanam dalam laman web saya -
terdapat pembolehubah khas global pelbagai dipanggil dokumen.
JavaScript adalah sebenarnya bahasa berorientasi objek.
Kami tidak akan pergi ke terperinci pada 50 kepada apa yang bermakna,
tetapi untuk sekarang tahu bahawa objek adalah cukup banyak seperti struct.
Seperti yang kita lihat cara kembali apabila dalam satu masalah yang terawal set
di mana kita meletakkan banyak maklumat dalam struct,
sama dokumen struct khas yang dilengkapi dengan pelayar,
datang dengan mana-mana laman web. Ia bukan sesuatu yang saya mencipta.
Dalam struktur dokumen ini, walaupun, anda perlu bukan hanya data
tetapi anda juga mempunyai fungsi.
>> Dan bila-bila masa anda mempunyai fungsi di dalam struktur, di dalam sesuatu objek,
ia dipanggil kaedah. Tetapi ia adalah perkara yang sama.
Kaedah A adalah fungsi yang hanya kebetulan berada di dalam sesuatu yang lain.
Jadi ini bermakna bahawa ini pembolehubah global khas yang dipanggil dokumen
fungsi dipanggil getElementById yang benar-benar adakah itu.
Ia akan membawa anda satu elemen dari DOM, pokok Model Objek Dokumen,
yang ID adalah dalam ucapan kes ini.
Dalam erti kata lain, semua bahawa masa kita dibelanjakan ke atas struktur data mula bermain di sini.
Ini gambar DOM bahawa kita mempunyai seketika lalu,
walaupun halaman adalah sedikit berbeza, jika saya terpaksa div dalam gambar ini,
document.getElementById apa yang akan kembali kepada saya dengan berkesan akan menjadi penunjuk
segi empat tepat dalam pokok, rujukan kepada segi empat tepat di pokok itu.
Jadi itulah apa yang ia bermaksud untuk benar-benar memanggil salah satu daripada fungsi-fungsi.
Dalam kes ini, sekali lagi ia div. Ia bukan satu badan atau tajuk.
Jadi mari kita lihat apa yang saya kemudian lakukan dengan span ini sekarang bahawa saya mempunyai ia di dalam div variabel ini dipanggil.
Ia ternyata dengan JavaScript anda mempunyai keupayaan untuk tweak CSS halaman anda dinamik.
Sehingga kini, semua CSS kita telah dilakukan, walaupun terhad, adalah dalam sifat gaya,
atau mana lagi kita telah meletakkan CSS?
Saya jenis rosak bahawa salah. Dalam tag gaya di atas fail.
Atau tempat ketiga telah di?
>> Satu fail luaran, sesuatu. Css.
Jadi mereka adalah 3 tempat-tempat yang kita telah dilakukan CSS setakat,
tetapi tangkapan adalah kita telah dikodkan ia semua.
Anda memutuskan kerana anda merpati ke pset 7, kami memutuskan sebelum bersyarah apa CSS kita akan menjadi.
Tetapi jika anda mahu untuk menukar CSS anda, anda sebenarnya boleh berbuat demikian
apabila anda mempunyai bahasa pengaturcaraan sebenar.
CSS, HTML - bukan bahasa pengaturcaraan. JavaScript adalah.
Jadi ia ternyata bahawa sebaik sahaja anda mempunyai salah satu daripada mereka segiempat tepat dari pokok
dipanggil DOM, ia mempunyai sendiri beberapa data di dalamnya.
Jadi div bahawa saya hanya meraih dari pokok itu mempunyai apa yang kita akan memanggil harta di dalamnya
dipanggil gaya, dan harta gaya mempunyai sendiri harta yang dipanggil penglihatan.
Saya ingin tahu ini hanya dengan melihat manual pengguna CSS.
Ia ternyata ada harta penglihatan CSS yang melakukan apa yang dikatakannya.
Ia membuat sesuatu yang boleh dilihat atau tidak, kelihatan atau tidak.
Dan bagaimana anda lakukan yang ini.
Saya bertanya programatik jika penglihatan div ini tersembunyi,
apa yang saya mengubahnya? Kelihatan.
Lain jika penglihatan halaman ini tidak tersembunyi, secara logiknya saya membuat ia tersembunyi.
Saya tidak tahu mengapa ia kelihatan dan tersembunyi dan tidak dapat dilihat dan tidak kelihatan.
Ini adalah sebuah keputusan reka bentuk yang miskin di sepanjang jalan.
Tetapi mereka memang bertentangan dalam CSS: kelihatan dan tersembunyi.
Semua ini tidak adalah ia bermakna mengubah CSS fail saya di dalam dan di luar, di dalam dan luar
untuk div yang tertentu.
Tetapi sekali lagi, ini adalah satu fungsi yang dipanggil sekelip. Apabila fungsi sekelip dipanggil?
Ia ternyata bahawa terdapat satu lagi tetingkap khas ubah global yang dipanggil,
serupa dalam semangat untuk dokumen, tetapi manakala dokumen itu merujuk kepada laman web anda,
seperti pokok DOM, HTML anda dihantar dari pelayan,
tetingkap merujuk kepada krom di sekeliling, bar alamat, bar tajuk,
dan semua barangan yang di seluruh laman web anda.
>> Dan ternyata bahawa objek tingkap mempunyai dalam fungsi khas ia dipanggil setInterval
yang melakukan apa yang dikatakannya.
Ia akan menetapkan selang - dalam kes ini setiap 500 milisaat -
dan mengambil tekaan, apa yang ia akan lakukan setiap 500 milisaat?
Ia akan melaksanakan bahawa sekelip fungsi.
Dan apa yang baik di sini adalah bahawa kita boleh melakukan ini dalam C walaupun kita tidak pernah.
C tidak mempunyai sesuatu yang dipanggil penunjuk fungsi di mana anda boleh lulus fungsi sekitar
sebagai hujah.
Begitu juga di JavaScript anda boleh lulus nama fungsi ke fungsi yang lain.
Dan notis apa yang saya lakukan. Saya tidak melakukan ini.
Jika saya meletakkan kurungan selepas sekelip, yang akan bermakna memanggil fungsi sekelip.
Jika saya meninggalkan mereka, yang bermaksud di sini adalah fungsi sekelip
jadi setInterval yang boleh memanggil ia setiap 500 milisaat.
Jadi keputusan akhir, kejam walaupun ia adalah, adalah bahawa jika saya pergi ke localhost dan pergi ke blink.html,
Saya kini mempunyai perkara ini berlaku sekali lagi dan sekali lagi.
Dan jika saya sebenarnya Memeriksa Unsur, mari kita lihat jika kita boleh melihat ini.
Mari saya Memeriksa Unsur, biarlah saya tatal ke bawah sedikit sahaja,
biarlah saya memilih Elemen di sini, dan notis dalam DOM pemeriksa Chrome.
Ia benar-benar berubah dan berulang-alik setiap 500 milisaat.
Jika kita pergi kepada rakan Nate kami,
jika anda pernah tertanya-tanya bagaimana ini bekerja, idea yang serupa dengan selang,
tetapi Nate sebenarnya membuat penggunaan yang sangat berkesan warna dalam kes ini, khususnya di sini.
Jadi apa lagi yang boleh kita sebenarnya lakukan dengan ini?
Mari kita membuka satu lagi contoh dan cuba sesuatu
itulah programatik lebih berguna daripada membuat sekelip perkara.
Biar saya pergi ke dalam direktori bentuk kami hari ini dan pergi ke form0.
Ini adalah bentuk seburuk mungkin bahawa saya boleh tampil dengan,
dan biarlah saya hanya menunjukkan kepada anda apa yang ia kelihatan seperti dalam pelayar.
>> Biar saya pergi ke localhost / borang, dan ini adalah form0.
Ini adalah satu bentuk super hodoh HTML yang mempunyai bidang beberapa untuk e-mel, kata laluan,
kata laluan, dan kemudian checkbox sedikit untuk bersetuju dengan beberapa terma dan syarat.
Tangkapan adalah jika saya melawat borang ini dan saya tidak mahu memberi anda alamat e-mel saya,
Saya tidak mahu untuk bersetuju dengan terma dan syarat yang mungkin, saya boleh klik Register
dan ia membolehkan saya melalui anyway.
Ini berlaku untuk mengemukakan kepada fail PHP bodoh dipanggil dump.php.
Semua ia adalah mencetak kandungan $ _GET hanya untuk tujuan diagnostik.
Itu adalah apa yang telah dikemukakan oleh pengguna tadi.
Tetapi andaikan kita benar-benar mahu untuk mengesahkan penghantaran borang pengguna.
Biar saya pergi ke versi 1.
Ini adalah form1.html. Ia kelihatan estetik hanya sebagai lapuk, tetapi notis bagaimana ia mewah.
Jika saya klik Daftar tanpa bekerjasama, saya mendapat menjerit.
"Anda mesti memberikan alamat e-mel anda."
Semua hak. Jadi biarlah saya cuba itu. Jadi malan@harvard.edu. Saya tidak memerlukan kata laluan.
Mendaftar. "Anda mesti memberi kata laluan." Semua hak.
Jadi, saya akan memberikan kata laluan lembayung. Mendaftar.
"Kata laluan tidak sepadan." Saya kini perlu menaip di sini lembayung.
Saya sengaja diperiksa bahawa. Mendaftar.
"Anda mesti bersetuju dengan terma dan syarat." Semua hak. Setuju sana. Mendaftar.
Dan kini ia menunjukkan saya output diagnostik di sana.
>> Jadi apa yang berlaku?
Kami telah mempunyai keupayaan untuk mengesahkan penghantaran borang.
Malah, jika anda tidak menyelam ke dalam pset 7, terdapat satu fungsi Apologize
yang menjadikan ia agak mudah untuk menjerit pada pengguna dengan mesej pada skrin.
Saya menggunakan mekanisme yang sedikit berbeza, fungsi amaran,
yang bukan merupakan fungsi yang Tersenyum kerana ia membuatkan mesej pengguna yang sangat hodoh.
Tetapi mari kita lihat apa yang saya lakukan di sini.
Ini adalah form1.html, dan notis bahawa saya mempunyai beberapa sintaks yang cukup biasa:
badan tag, tag bentuk, sifat tindakan, sifat kaedah.
Tetapi notis Saya telah diberikan borang saya ID unik untuk kemudahan.
Kemudian saya telah mendapat satu bidang e-mel yang jenis teks,
medan kata laluan yang jenis kata laluan, pengesahan bidang yang jenis kata laluan,
dan kemudian checkbox yang namanya adalah perjanjian di sini, jenis kotak semak.
Dan kemudian saya telah mendapat butang submit.
Tetapi notis di atas apa yang lebih saya mempunyai.
Pertama sekali, terdapat satu lagi penggunaan tag skrip.
Jika anda mempunyai beberapa kod JavaScript dalam fail lain, seperti dengan CSS, anda boleh termasuk.
Dan anda berbuat demikian dengan sumber skrip, dan kemudian notis saya menyambung nampaknya
googleapis.com ke jalan yang sangat panjang tetapi nama fail yang berakhir di jquery.min
untuk minimum. js.
jQuery adalah sebuah perpustakaan super popular untuk JavaScript yang hanya membuat JavaScript
semua lebih user-friendly untuk digunakan.
Ia berkesan menjadi standard de facto.
Jadi, walaupun apa yang anda kira-kira untuk melihat tidak tulen JavaScript per se,
ia adalah sebuah perpustakaan di atas JavaScript banyak seperti perpustakaan CS50 adalah lapisan
di atas tahap rendah kod C; realitinya adalah hampir semua orang di Internet menggunakan ia.
Jadi ini tidak roda latihan. Ini adalah hanya yang terbaik mengamalkan hari ini.
Sekarang notis di bawah yang tag skrip saya sendiri, dan notis apa yang saya lakukan di sini.
Ia ternyata bahawa jQuery melakukan sesuatu mewah sedikit.
JavaScript mempunyai tanda-tanda dolar, tetapi mereka adalah sia-sia.
>> Mereka adalah seperti surat A atau B atau C.
jQuery hanya menerima pakai konvensyen atau jenis tuntutan dibentangkan kepada fakta
bahawa $ akan menjadi simbol khas mereka.
Demikian secepat anda memuatkan fail ini JavaScript global di sini dengan tag skrip,
anda mempunyai akses kepada pembolehubah khas global yang dipanggil $.
Ia lebih tepat dipanggil jQuery, tetapi yang tidak kelihatan hampir seperti seksi sebagai $.
Tetapi $ tidak mempunyai makna khas. Dalam PHP, ia mempunyai maksud yang istimewa.
Anda perlu mempunyai ia di hadapan pembolehubah.
Ini adalah hanya satu perkara seksi bahawa mereka mengambil.
Apa yang sedang berlaku di sini?
Notis saya berpindah kepada fungsi jQuery dokumen global saya ubah
dan kemudian saya memanggil bersedia.
Apa jQuery dasarnya tidak ialah ia membolehkan anda untuk mengambil beberapa perkara JavaScript vanila
seperti objek dokumen, objek tingkap,
dan jika anda lulus dalam fungsi jQuery -
dan sekali lagi, perlu jelas, ini adalah satu fungsi yang dipanggil jQuery -
apa yang ia adalah ia kembali kepada anda versi khas dokumen
yang mempunyai fungsi yang lebih dikaitkan dengannya.
Jadi dalam JavaScript mentah terdapat tiada fungsi bersedia,
tetapi jika anda lulus dokumen kepada fungsi jQuery pertama,
ia kembali kepada anda versi khas objek dokumen
yang mempunyai lebih banyak ciri-ciri mewah.
Dan itulah sebabnya orang suka. Ia hanya membuat perkara yang mudah untuk dilakukan, seperti yang kita kira-kira untuk melihat.
Jadi apakah garis kod ini bermakna?
Ini sejajar kod di sini bermakna apabila dokumen itu bersedia -
dalam erti kata lain, apabila pelayar dilakukan membaca fail ini atas ke bawah -
pergi ke hadapan dan melaksanakan fungsi berikut.
Apa yang benar-benar menarik dalam JavaScript dan PHP mempunyai ini serta -
adalah fungsi tanpa nama.
Di JavaScript anda boleh mengisytiharkan fungsi yang tidak mempunyai nama tetapi mereka mempunyai satu badan.
Notis apa yang berlaku di sini.
>> Ini adalah satu fungsi yang dipanggil bersedia, dan ia hanya bermaksud melakukan perkara yang berikut
apabila keseluruhan laman web adalah bersedia, apabila ia semua telah membaca dalam dari pelayan.
Apa yang anda mahu lakukan? Saya mahu untuk melaksanakan sebahagian kod.
Perhatikan bahawa kita tidak mahu untuk melaksanakan kod ini segera.
Jika saya ditinggalkan ini, ini bermakna segera mula melaksanakan baris kod.
Tetapi hakikat bahawa saya mengatakan tidak, tidak, tidak, balut ini dalam fungsi tanpa nama seperti ini
cara tidak melaksanakan ia lagi; memanggilnya akhirnya.
Kami melihat ini seketika lalu di contoh bentuk sebelumnya kami.
Apa fungsi adakah kita panggil akhirnya, 500 milisaat kemudian? Berkelip.
Jadi idea yang sama.
Sekali lagi, walaupun ini kelihatan sedikit pelik, hanya mengambil untuk saat pada iman
bahawa untuk mengisytiharkan fungsi tanpa nama yang dipanggil akhirnya,
anda hanya menulis function () {
Jadi apa kod kita akan pergi untuk melaksanakan akhirnya? Berikut.
Ini juga kelihatan baru sedikit, tetapi ini bermakna di sini adalah fungsi jQuery,
dan ini kini adalah jalan pintas.
Coretan HTML ini di bahagian bawah skrin sudah tentu mempunyai beberapa perwakilan pokok.
Ia tidak ini. Laman ini adalah lebih menarik daripada ini hello, contoh dunia.
Tetapi ada beberapa pokok yang sepadan dengan HTML ini.
Ia akan menjadi sakit di leher perlu melaksanakan beberapa jenis fungsi rekursi
bermula pada nod akar dan kemudian mencari nod yang ID ialah pendaftaran.
Jadi apa jQuery membuat super mudah bagi kita adalah benar-benar ini.
Teruskan dan mendapatkan saya apa div atau bentuk apa sahaja, apa jua HTML unsur
mempunyai ID pendaftaran.
Ini adalah bersamaan document.getElementById ('pendaftaran').
>> Mengapa orang-orang seperti jQuery?
Kerana ia adalah lebih pendek untuk menaip. Tetapi itu semua ia. Ia adalah idea yang sama.
Dapatkan saya tag yang ID ialah pendaftaran.
Dan apabila yang tag, yang berlaku untuk menjadi bentuk, dikemukakan,
pergi ke hadapan dan melaksanakan kod ini.
Jadi mari kita mengambil satu melihat sekarang bagaimana kita lakukan borang pengesahan.
Sintaks adalah diakui samar pada mulanya, tetapi apa yang berlaku?
Jika garis kod ini adalah benar, saya akan menjerit pada pengguna untuk menyediakan alamat e-mel beliau.
Jadi apakah garis kod ini?
$ Bermakna jQuery. Sekarang notis ini.
Ini adalah semacam CSS.
Jika anda telah menyelam ke dalam CSS lagi, anda akan tahu bahawa ini bermakna unsur yang ID ialah pendaftaran.
Ruang bermakna mencari kanak-kanak atau keturunan pendaftaran yang namanya adalah input.
Dan maka perkara ini dalam persegi kurungan adalah penapis sedikit.
Dan walaupun ini kelihatan samar, ini hanya bermakna pergi kepada bentuk yang ID ialah pendaftaran,
pergi ke dalam unsur input itu yang namanya adalah e-mel,
dan kemudian mendapat nilainya, apa-apa nilai yang berlaku kepada menjadi -
asdf jika itu semua saya ditaip atau malan@harvard.edu jika itulah apa yang saya menaip.
Jadi, jika nilai medan email borang == tiada, menjerit pada pengguna.
Lain jika nilai medan kata laluan == apa-apa, menjerit pada pengguna.
>> Lain jika nilai medan kata laluan tidak menyamai nilai bidang pengesahan,
yang merupakan elemen bentuk lain, menjerit pada pengguna.
Dan kemudian akhirnya - dan yang satu ini juga mempunyai beberapa sintaks baru sendiri,
tetapi apabila anda telah melihat, ia sekurang-kurangnya sedikit lebih munasabah -
lain jika bentuk yang ID ialah pendaftaran mempunyai elemen input yang namanya adalah perjanjian
dan ia diperiksa, pergi ke hadapan dan menjerit pada pengguna.
Jadi saya benar-benar mengakui ini adalah benar-benar hangat pada pandangan pertama.
Ia banyak sintaks baru. Tetapi semua jQuery berikut ini jenis corak.
Dan secara jujur, saya tidak tahu ini wujud sehingga beberapa minit yang lalu.
Saya Googled, "Bagaimana anda memeriksa jika checkbox checked in jQuery?"
dan ini adalah sintaks, kerana ada cara yang berbeza untuk melakukannya
dengan sebenar mentah kod JavaScript.
Jadi, sebagai halaman pertama Set Masalah 7 menekankan,
pset 7 adalah sangat banyak latihan dalam pengikatan but diri
di mana kita telah disediakan, mudah-mudahan, rangka kerja konseptual dengan yang untuk menangani pset.
>> Tetapi seperti yang sering berlaku dengan reka bentuk laman web, ia terpulang kepada anda benar-benar untuk mencucuk di sekitar,
menggabungkan coretan kod dan contoh dari Web selagi anda memetik mereka
mengikut terma atas lembaran yang pertama,
dan menyedari bahawa pembelajaran HTML, CSS, JavaScript dan juga SQL
adalah benar-benar bertujuan untuk menjadi senaman ini di rumah seperti yang kita mula untuk mengambil roda latihan di luar.
Dan menyedari terlalu terdapat banyak lagi perkara yang boleh anda lakukan dengan pelayar.
Dalam kebanyakan unsur-unsur ini terdapat perkara-perkara lain yang dipanggil pengendali acara.
Dan walaupun kita hanya melihat orang-orang yang dipanggil onsubmit dan onready,
anda boleh melakukan perkara-perkara seperti onkeydown, onkeyup,
seperti apabila pengguna menyentuh kekunci, anda boleh mendengar untuk itu dan sehingga utama.
Gmail mempunyai pintasan papan kekunci.
Bagaimana Google melaksanakan pintasan papan kekunci seperti C untuk mengarang?
Mereka mendengar untuk acara-acara, kerana mereka sedang dipanggil, seperti onkeypress atau onkeyup dan onkeydown.
Jika anda pernah berlegar tetikus anda ke atas beberapa pilihan menu
dan semua tiba-tiba, Voilà, menu muncul atau perubahan warna grafik,
bagaimana mereka melakukannya?
Bukannya mendengar untuk onready atau onsubmit, anda mendengar untuk onmouseover atau onmouseout.
>> Jadi, dalam jangka pendek, dengan asas-asas yang sangat mudah yang kita telah mula menggaru permukaan hari ini
dan kami akan menyelam dalam lagi kepada pada hari Rabu, anda mempunyai, semakin,
kuasa untuk melaksanakan jenis perkara yang anda sudah biasa dengan.
Jadi mari kita berakhir di situ, dan kami akan meneruskan pada Rabu.
>> [CS50.TV]