[Powered by Google Translate] [Linggo 9]
[David J. Malan - Harvard University]
[Ito ay CS50. - CS50.TV]
Ayos lang. Maligayang pagbabalik. Ito ay CS50, at ito ay ang simula ng linggo 9.
Ngayon naming tumutok sa mga partikular na sa disenyo, hindi na sa konteksto ng C
ngunit sa konteksto ng PHP at isang bit ng SQL at isang bit ng JavaScript,
lalo na patungo sa isang dulo ng parehong pset 7 at din ang iyong panghuling proyekto.
Sa katunayan, kung ikaw ay sa puntong iyon sa iyong huling proyekto
kung saan baka bilang ng isang oras o kaya ang nakalipas sa iyo ng hindi bababa sa na nagsimula upang bigyan ng ilang-iisip
sa iyong panghuling proyekto at pinag-iisipan mo na nais mong makipagtulungan sa 1 o 2 mga kaklase,
kung nagkakaroon ka ng problema sa pagkonekta sa sinabi kaklase,
huwag mag-atubiling upang punan ang form sa cs50.net/partners/form.
Nagtatanong ka lang kung sino ka, kung anong uri ng proyekto pinag-iisipan mo tungkol sa,
kung saan ka nakatira lamang para sa mga logistical dahilan.
At pagkatapos ay kung nais mong panatilihin ang isang mata sa sa mga susunod na linggo o kaya spreadsheet URL doon,
maaari mong makita ang isang read-only na bersyon ng Google doc
kung saan kami ay mangolekta ng impormasyon na iyon.
Kaya kung nais mong upang gumana sa isang tao, sa pamamagitan ng lahat ng paraan huwag mag-atubiling makipag-ugnay sa mga tao
sa pamamagitan ng na mekanismo.
Subalit ang karamihan sa mga tao ang trabaho solo. Na lubos fine.
Kaya huwag pakiramdam na ito ay sa anumang paraan sapilitan.
Sa Biyernes ito ay lamang sa akin at ng ilang ng koponan sa dito,
walang laman ang teatro para sa pinaka-bahagi.
Mayroong ay 3 turista sitting doon, kaya na ay isang maliit na mahirap.
Ano usapan natin ang tungkol database at usapan natin ang tungkol pset 7 ng kaunti.
At kung hindi mo mangyari na mahuli sa video pa, na fine.
Kukunin ko na subukan upang tukuyin ang anumang mga tuntunin na namin kung hindi man mang-ahas
batay sa Biyernes ng panayam.
>> Ngunit ngayon na kami ay pagpunta sa subukan upang makakuha ka sa punto
ng hindi lamang upang gawin ang isang bagay tulad ng pset 7
ngunit talagang unawa kung ano ang nangyayari sa ilalim ng hood,
lalo ilan ng abstractions na ilagay namin sa lugar sa file functions.php
upang gumawa ng iyong buhay ng kaunti mas madali ngunit kaya na huli mo maunawaan
sa gayon ay kapag ang mga gulong ng pagsasanay dumating sa loob ng ilang linggo maaari mo pa ring nakataguyod makalipas ang
sa tunay na mundo at gawin ang mga bagay na ito nang walang anumang CS50 framework sa ilalim mo.
Ito $ _SESSION, para sa mga na pamilyar
o na na nahuli ang video sa Biyernes, ano ang nilalaman ng session ipaalam sa gawin sa amin
sa PHP-based web application?
Ito ay isang superglobal variable, na nangangahulugan na katulad sa espiritu sa GET at POST
at ng ilang mga iba, ngunit kung ano ang bagay na ito kapaki-pakinabang para sa?
>> Ano ang session na ginagamit para sa? Oo. [Mag-aaral] Nagla-log in.
Paumanhin? [Mag-aaral] Nagla-log in Nagla-log in. Katunayan.
Sa pset 7 na aming ginagamit session na ito superglobal upang pangasiwaan ang pag-log in.
At kung ano ang magaling tungkol ito superglobal na ito ang isang nag-uugnay array.
Isang nag-uugnay array, manariwa sa diwa, isang array ngunit na indeks ng hindi na kailangang maging numero
tulad ng 012. Maaari silang maging ang mga numero o maaari silang kahit string.
At kaya kung ikaw dived sa pset 7, maaari mong isipin ang na namin ang pag-iimbak ng isang key na tinatawag na ID
sa loob ng ito nag-uugnay array na ang halaga ay isang bagay tulad ng 123 -
anuman ang kasalukuyang naka-log in gumagamit ID ay.
Ang pagganyak para sa na kahit na matapos ang gumagamit ay binisita localhost
o aking website sa mas pangkalahatang at pagkatapos nilang naka-log in,
kahit na hindi sila i-click ang isang link o bumalik sa aking website para sa 5 minuto
o kahit isang oras o kahit sa isang araw ngunit iwanan nila ang kanilang browser window bukas,
sa pamamagitan ng ito superglobal ko matandaan na sila ay naka-log-in.
>> Sa ibang salita, ito ay nagbibigay-daan sa akin upang mag-imbak ng bahagyang pangmatagalang anumang bagay na gusto ko tungkol sa isang user.
At maaari mong tingin nito ay talagang bilang ang pagkakatawang-tao ng isang shopping cart.
Lugar tulad ng Amazon malinaw naman ipaalam mo ilagay ang mga bagay sa isang shopping cart,
ngunit HTTP, ang protocol na nagpapagana sa Web, ay stateless
sa kamalayan na kapag bumisita ka sa isang website,
para sa pinaka-bahagi hindi mo ang ilang mga pare-pareho ang koneksyon ng network
sa pagitan ng iyong browser at ang server.
Sa lalong madaling na-download mo ang HTML at ang mga JPEG na at ang mga GIF at ang lahat ng iyon,
mawala ang koneksyon at mo lamang ng isang kopya ng HTML at watnat mula sa server.
Ngunit kung ang server ang nais upang matandaan ang isang bagay tungkol sa iyo,
pasanin sa server sa aktwal na-record na impormasyon.
At kaya mo ang programmer na may kontrol sa server
ilagay ang karamihan ng anumang nais mo sa loob ng ito superglobal nag-uugnay array
at ito ay doon sa susunod na oras na ang user na ito ay bumalik,
kung ito ay ang mga minuto o kahit araw, maliban kung sila isara ang kanilang mga browser window,
sa puntong session mawala.
Kaya ito ay panandalian imbakan, mabuway, at ito ay sinadya upang pumunta ang layo
sa lalong madaling isinasara ng user ang kanilang browser - hindi lamang na tab, madalas sa buong browser,
sa gayong paraan epektibong pag-log sa user.
Kaya kung paano ay bagay ito aktwal na naipatupad?
Natin ang isang mabilis na pagtingin sa isang simpleng halimbawa na namin ay tumingin sa sa Biyernes.
Para sa mga pamilyar, ito ay kasing simple ng ito.
Ito ay isang web page na ang tanging layunin sa buhay ay upang sabihin sa akin
kung gaano karaming beses na binisita ko ang pahinang ito.
Ito ang unang pagkakataon dito sa Lunes na binisita ko ito, kaya ito sabi ni 0 beses.
>> Ngunit kung sisimulan ko i-reload ang pahinang ito, sinasabi nito 1 oras, 2, 3, 4, 5,
at ito ay malaon lamang panatilihin sa pagbibilang up, up, up, up, up
para sa bawat oras na aking aktwal na i-click ang I-reload ito.
Kaya kung paano ay pagtatrabaho na ito? Hayaan akong pumunta sa loob ng ang file na ito na tinatawag na counter.php.
Ang tuktok na bahagi ng lahat ng asul na mga komento, ngunit kawili-wiling bahagi ay dito.
Sa linya 13 Tinatawag namin itong function na session_start,
at iyon ay literal ang lahat ng kailangan mong gawin kung gusto mong magkaroon ng access
ito espesyal superglobal tinatawag $ _SESSION.
Na ginagawang lahat ng mga posibleng, at makikita namin makita sa isang sandali kung paano na ang lahat ng posibleng.
Sa linya 16 paunawa kung ano ang ako ginagawa.
Kung ang susi, na tinatawag na counter - sa ibang salita, ang halaga ng index - "counter"
umiiral sa loob ng array na ito na tinatawag na session, pagkatapos ay kung ano ang ako ginagawa sa ito sa linya sa ibaba?
Ano ang linya 18 ginagawa?
>> [Hindi marinig na mag-aaral tugon] Ano iyan? [Mag-aaral] pag-iimbak ang halaga. Mabuti.
Ito ay ang pag-iimbak ang halaga na sa session ngayon sa isang bagong lokal na pansamantalang variable,
$ Counter sa lahat ng maliit na.
Pansinin na ang PHP na ng kaunti tamad dito.
Pansinin na hindi namin ang anumang pagbanggit ng int o Float o string o anumang bagay tulad na
dahil PHP ay mahina-type, kung saan hindi mo upang tukuyin ang uri ng variable,
at sa kasong ito dito hindi ko na kahit na ipinahayag ito.
Ako deklarasyon ito sa loob ng mga kulot tirante at hindi tulad ng C, ito ay talagang okay.
Hindi mahalaga kung paano malalim Nested deklarasyon ng variable sa PHP -
sa loob ng kulot suhay, sa loob ng kulot suhay at ang tulad -
ito sa sandaling iyon sa oras umiiral para sa natitira ng programa,
para sa mas mahusay o para sa mas masahol pa.
Kaya agad na magiging global sa lalong madaling mong tukuyin ang mga ito bilang ang ginagawa namin dito.
>> Kung hindi man, kung hindi ko makita na may anumang bagay sa superglobal session,
Tila ako Sinisimulan ito variable counter sa 0,
sa gayong paraan lamang ipagpalagay ang user ay hindi kailanman ay dito bago.
At pagkatapos na ito ng kurso ay incrementing ang counter kung paano?
Ako nag-a-update ng ang halaga na ang nasa loob ng mga ito nag-uugnay array
sa pamamagitan ng pagtatakda ng katumbas ng anumang counter kasalukuyang + 1.
Kung mag-scroll pababa ko dito sa HTML ng pahina, ito ay aktwal na medyo simple.
Ang ko sa katawan ng pahinang ito, "Ikaw binisita ang site na ito kaya-at-kaya beses."
At ito ay bumuo ng PHP.
Kung gagawin mo <? =, Ito ay katumbas epektibo sa kung ano ang function na?
Talagang katumbas sa isang bagay tulad ng printf, na nakakita kami ng maraming beses sa C,
kahit na bilang ng maaaring alam mo na mula sa spec sa pset 7,
naka-print ay din ng isang function na lamang ng mga Kopya isang bagay ang, hindi ito aktwal na gumamit ng mga code ng format,
at maaari mong aktwal na sabihin echo pati na rin.
Ang mga ito ang lahat ng napaka bahagyang naiiba kahit na ang net na epekto ay huli ang parehong.
Kaya ang paggamit ng equals sign lamang ang uri ng isang eleganteng paraan ng paggawa nito
mas succinctly kaysa sa maaaring iba magagawang.
Kaya na ang lahat ng mga site na ito ay hindi. Ito ng mga Kopya ang halaga ng counter.
Paano ito lahat ng mga aktwal na nangyayari?
Maaari mong isipin ang isang linggo o kaya nakalipas na sinimulan namin ng pagtingin sa ilalim ng hood
sa kung paano gumagana ang isang web page sa pamamagitan ng paggamit ng Inspector tab na ito.
>> Chrome ay may ito pareho sa Mac na bersyon, ang bersyon ng Windows, at kahit na ang Linux bersyon,
at Firefox at IE ay may mga katulad na mekanismo kung saan mayroon kang ang built-in debugger
sa loob ng browser.
Natin tingnan sa sumusunod.
Mayroon kaming ang maramihang mga tab dito, at isipin ang na ang pinakakaliwa isa ay Mga Sangkap ng,
at kahit kung gaano godawful ang HTML at JavaScript sa isang pahina,
isipin ang na gamit ang tab na Mga Elemento ng iyong aktwal na-navigate ang HTML hierarchically
at maganda at makinis.
Kaya't kung sinusubukan mong upang matuto mula sa isang website tulad ng Google o Facebook
o talagang website anumang, Napagtanto na ikaw ay marahil mas mahusay na off
pagtingin sa source code ang paraan na ito bilang kabaligtaran tingnan ang raw pinagmulan,
na maaaring maging isang gulo, bilang nasaksihan namin lalo na sa site ng Google.
Kaya kung ako sa halip ay mag-click sa tab na Mga Network dito,
sabihin makita kung ano ang nangyayari kapag binisita ko ang pahinang ito.
Unang hayaan mo akong i-clear ang aking cache.
Ako pagpunta sa pumunta sa Mga Setting sa Chrome at pagkatapos ay pumunta sa Kasaysayan
at pagkatapos ay I-clear ang lahat ng data sa pag-browse.
Maaari mong gamitin sa ginagawa ito para sa iba pang mga layunin, [tawa]
ngunit pagdating sa pagbuo ng website, ito ay aktwal na kapaki-pakinabang -
kung ikaw ay tumatawa alam mo. [Tawa]
Ang aktwal na talagang kapaki-pakinabang kapag pagbuo ng website dahil ang katotohanan ay
mga bagay tulad ng mga cookies at mga bagay tulad ng mga naka-cache na mga HTML file, naka-cache na JavaScript file
maaaring aktwal na maging isang malaking sakit ng ulo, dahil kung para sa anumang dahilan
browser ang nagpasya sa cache ng ilang mga file at pa nagawa mo na ang mga pagbabago sa file na iyon sa server
ngunit ang browser ay hindi talaga natanto na ang file ay nagbago
at samakatuwid ay hindi aktwal na muling i-download ito kahit na kapag ikaw ay i-click ang pindutan ng I-reload,
isa ng ang pinaka-walang kamali paraan upang tiyakin lamang na kasalanan ay hindi sa iyong code,
ito na ang pag-uugali ng browser, ay upang pumunta sa dito sa iyong browser
at i-clear ang buong kasaysayan nang sa gayon ay ang walang pagkalito.
>> At pagkatapos ay kung gusto mo talagang maging paranoyd, isara ang browser, i-restart ito,
at pagkatapos ay tiyakin na lahat ng mga gumagana gaya ng inaasahan.
Kaya sa maikling salita, clearing cache ay magandang kapag ginagawa unlad.
Kaya dito mayroon kaming ang tab na Network.
Ko dati ay binisita ang site nang 9 beses, ngunit hayaan mo akong magpatuloy ngayon at i-click ang I-reload.
At ako ay bumalik down sa 0.
Natin ang aktwal na makita kung paano ito ay na session na ito superglobal ay ipinatupad.
Ako pagpunta sa mag-click sa 1 HTTP na kahilingan na ginawa,
at pag-debug na window na ito ay nagbibigay-daan sa tumingin ako sa loob ng na.
Dito makita ko lang ang tugon mula sa server, na kung saan ay hindi na interesante.
Nakita ko na ito sa anumang bilang ng mga paraan.
Ngunit kung ano ang technically kawili-wili ang mga header.
Kung mag-scroll pababa ko dito at tumuon sa header ng kahilingan at i-click ang pinagmulan ng pagtingin,
kung ano ang ako pagpunta upang makita literal ang HTTP na kahilingan
na lang nagpunta mula sa aking browser sa server,
GET ang pinaiiral salita at / counter.php pagkatapos ang file name,
HTTP/1.1 lamang ang bersyon ng HTTP na ang aking browser ay gumagamit.
Ang linyang ito dito ay isang maliit na paalala mula sa browser sa server kung ano ang pangalan ng server ay
na gustong makipag-usap sa.
At pagkatapos ang lahat ng ito ay kawili-wili minsan ngunit hindi nauugnay sa ngayon.
>> Ito lamang ang uri ng isang pagkausyoso.
Misteriyoso bagaman ay ang string na ito, anumang oras ang iyong browser ay bumisita sa isang website
ito ay sa server kung ano ang browser na iyong ginagamit
at kung anong operating system ang ginagamit at kung ano ang bersyon nito.
Kaya kung sakaling mo na kung paano mga website tulad ng CNN at watnat
malaman kung ano ang porsyento ng mga gumagamit ng Mac sa Web, ang mga gumagamit ng PC,
IE mga gumagamit, gumagamit ng Chrome at tulad, ito ay dahil ang lahat ng aming mga browser
ay nagsasabi sa bawat solong website out doon kung ano tayo.
Ito ay hindi kinakailangang naglalaman ng personal na makikilalang impormasyon,
ngunit ito ang sabihin sa server kung ano ang iyong IP address at kung ano ang browser at OS na ginagamit.
Kaya na kung saan ang impormasyon na ito ay.
Ngunit ano mas kawili-wiling ngayon pagdating sa mga sesyon ang tugon header.
Hayaang i-click ang sa akin tingnan ang pinagmulan sa tabi ng tugon.
Ano ang kawili-wili dito ay ang ilang mga bagay.
1, nakuha namin pabalik ng isang code ng katayuan ng 200.
Hindi namin makita ang code ng katayuan na ito dahil ito ay nangangahulugan na lahat na rin.
Ito ay nangangahulugan na literal okay sa kaibahan sa iba pa.
Ano ang isang numero na nakikita namin minsan na masamang? [Mag-aaral] 404.
404, ang file ay hindi nahanap, 403 ka maaaring stumbling kapag na,
na Ipinagbabawal, na nangangahulugan na nakalimutan mo ang chmod isang bagay, malamang.
At may isang bungkos ng iba.
>> Down dito, ito ay isang maliit na mabaliw.
Ko talagang lamang sinulat ni ang file na ito ng ilang minuto ang nakalipas sa pamamagitan ng pag-paste ito sa gedit.
Bakit ang pahinang ito mag-e-expire sa 1981 bago may talaga ng Web?
Kung anong nangyayari sa doon?
>> [Hindi marinig na mag-aaral ng tugon] Ang time stamp. Ngunit bakit?
Medyo arbitrary, ngunit ito ang aktwal na kapaki-pakinabang.
Ano ito ay sinasabi sa aking browser ay ang PHP file na ito na iyong hiniling ay expired na.
Sa katunayan, nag-expire na 30 taon na ang nakakaraan.
Ngunit kung ano ang na talagang ibig sabihin?
Ay nangangahulugan lamang ito sa susunod na pagkakataon ng user ang bumisita sa pahinang ito,
kung sa pamamagitan ng pag-i-reload o pag-type ang URL sa address bar,
tiyakin kang pumunta at makuha ang isang bagong kopya ng.
Ito ay uri ng isang halimbawa ng cache busting,
isang bobo na salita na lamang ay nangangahulugan na ang sinusubukan upang pahinain ang loob ng mga browser
mula sa aktwal na caching HTML na ipinadala mula sa isang server
upang hindi ka aksidenteng pindutin ang reload at pagkatapos ay makita ang parehong bersyon ng file.
Aktwal na nais server upang magpadala ng bagong kopya.
Kaya ang katotohanan na ito ay 1981 ay nangangahulugan na na kung ano ang appliance ay pagpili
bilang isang arbitrary na petsa sa nakalipas.
Ngunit ang tunay na makatas linya ngayon ang isang ito.
Kahit bago 50 malamang vaguely pamilyar sa cookies.
Sa ngayon, lalo na bukod sa mga mas mababa kumportable o sa pagitan,
kung ano ang isang cookie sa iyong pag-unawa sa ngayon
kahit na hindi namin tungkol sa upang gumawa ng karagdagang teknikal na ang iyong pag-unawa?
Ano ang isang cookie? Oo.
[Mag-aaral] Impormasyon tungkol sa user, bang kung nakasulat ang kanilang mga user name o isang bagay.
>> Mabuti. Impormasyon tungkol sa gumagamit, kung nai-type sa kanilang mga user name na.
Cookies ay isang paraan na kung saan ang mga server ay matandaan ang isang bagay tungkol sa isang user.
At kung ano ang isang cookie ay talagang ay isang text file o ilang pagkakasunud-sunod ng mga byte
na nakatanim sa pamamagitan ng ang server sa loob ng iyong browser,
at sa loob ng file na iyon o isa mga byte ilang mga uri ng identifier.
Siguro ito literal ang iyong user name, ngunit mas madalas ito ay isang bagay na mas mukhang misteriyoso-
tulad ng ito bagay dito - bo8dal3ct at iba pa - talagang malaking alphanumeric string
na talagang lamang nilalayong maging isang natatanging identifier para sa iyo.
O maaari mong isipin ng mga ito bilang uri ng isang virtual kamay stamp.
Kung ikaw ay pumunta sa ilang club o isang amusement park, tandaan na aktwal na ang iyong nabayaran
at nawala sa, sila maglagay ng maliit na pulang sticker sa iyong kamay ng uri,
at na reminds ang mga tao sa counter na nabayaran mo na
at maaari mong darating at pumunta bilang ninyo.
Cookies ay isang maliit na katulad sa espiritu na.
Ang unang pagkakataon ko binisita ang website na ito, bilang ko lang ginawa pagkatapos ng pag-clear ang aking cache,
ang web server, ang appliance sa kasong ito, maglagay ng stamp sa aking kamay
na ang pangalan PHPSESSID, session ID,
na ang halaga ay talagang mahaba alphanumeric string.
>> Upang ang uri ng emblazoned na ngayon sa aking kamay kaya na sa susunod na oras na ako pindutin reload
o mano-manong bisitahin ang URL na ito sa isang browser,
ang aking browser sa pamamagitan ng kahulugan ng HTTP upang ipakita ang kamay stamp
muli at muli at muli.
Kaya kahit na ang server ay hindi kinakailangang malaman kung sino ako,
sila ay hindi bababa sa malaman na ako ang parehong gumagamit o hindi bababa sa, higit na partikular, sa parehong browser.
At kaya ito ay sa huli kung paano ang session superglobal ay ipinatupad.
Ang server ay walang ideya kung sino ka kapag ikaw ay muling bisitahin ang isang website para sa pangalawang o pangatlong beses
maliban kung nagpapakita ka ito stamp sa kamay.
At sa lalong madaling nagpapakita sa iyo na stamp sa kamay,
ang web server ay mahalagang napupunta sa isang maliit na database ng sarili nitong
at pagsusuri, okay, lang ako nakita ang kamay stamp ng user bo8dal3ct at iba pa.
Hayaan akong makita kung anong impormasyon programmer ay naka-imbak
sa loob ng ang superglobal tungkol sa user na ito,
at pagkatapos ay hayaan mo akong tiyakin na ang data na muli sa loob ng session superglobal
kaya na programmer muling ma-access ang data na iyon
kahit na ito ay naka-ilang minuto o oras ang nakalipas.
Kaya sa ibang salita, mga cookies, kung saan nakuha ng isang masamang rap para sa ilang oras
dahil sa insecurities sa browser at maaari nilang talagang lumalabag sa aming privacy at ang lahat ng ito,
aktwal na sila ay may mahusay na utility dahil walang mga ito
nais mong patuloy na pag-log in sa bawat pahina ng Facebook na binisita mo
o bawat Gmail email mong basahin kung browser ay hindi magkaroon ng ilang mga paraan ng pag-alala
na napatotohanan mo na.
>> Kaya sa ganitong paraan cookies ay ipinadala pabalik-balik sa kabuuan ng wire.
Isa pang pagkausyoso tungkol sa mga cookies, lalo na dito, ay na ito ay ganap na sa cleartext.
Walang-encrypt na pagpunta sa dito anumang,
at sa katunayan ako gumagamit ng HTTP sa sandaling ito.
Isa ng aming mga sandali sa mga paborito sa CS50, na ngayon ay 2 taon na ang nakakaraan,
ay sa paligid ng oras ng tool na tinatawag Firesheep dumating out.
Ito ay isang libreng piraso ng software na ginawa sa pamamagitan ng seguridad tagapagpananaliksik
ng wake-up na tawag para sa komunidad upang sabihin lamang kung paano atrociously ipinatupad
ay ang ilang mga mekanismo ng authentication sa Web.
Kaya para sa ilang oras, Facebook ay halos ganap na sa paglipas ng HTTP, hindi HTTPS.
At kahit kung mayroon kang mga ideya kung paano gumagana ang ang crypto, S ay ligtas
kaya nangangahulugan itong may hindi bababa sa ilang mga pag-encrypt kasangkot.
Facebook ay ginagamit upang i-encrypt ang mga user name at password,
ngunit sa lalong madaling tiningnan mo ang iyong pokes o ang iyong mga mensahe o sa iyong feed ng balita,
lahat ng na ay unencrypted.
Kaya Gmail hanggang lamang sa isang taon o 2 ang nakalipas.
Anumang oras-log in ka, oo, sila gumamit ng secure na-encrypt,
ngunit pagkatapos noon sila ay hindi. At kung bakit maaaring na maging?
Bakit hindi lamang gamitin ang cryptography lahat ng oras sa mga kaso ng paggamit tulad nito?
Ano iyon? Tingin ko Narinig ko ng isang bagay. [Mag-aaral] Bilis.
Bilis, i-right? May mga paraan sa paligid na ito.
Ngunit kung ikaw uri ng sa tingin tungkol dito lohikal, kung i-encrypt mo ang isang bagay,
mayroon kang hindi bababa sa isang maliit na pang trabaho.
Sa pset 2 kapag ipinatupad Caesar o Vigenere o kahit crack,
lamang na pag-print ng string ay medyo madali.
Encrypt at pagkatapos ng pag-print ng isang string sa Nagnais ng pinakamababang nangangailangan ng kaunti pang trabaho.
>> Para sa mga napaka-tanyag na mga website tulad ng Google at Facebook,
kung mayroon ka pang trabaho para sa bawat user para sa bawat solong pahina ng web page na binisita nila,
na lang na tumatagal ng higit pang CPU oras.
At kung kailangan mo ng karagdagang CPU oras, baka kailangan mo ng higit pang mga server,
na nangangahulugan na maaari mong kailangan ng mas maraming pera.
At iba pa para sa maraming mga taon na ito lamang talaga ay hindi pinakamahusay na kasanayan.
Mga tao ay gamitin ang SSL-encrypt lamang kapag kailangan nila.
Ngunit ito ay naka-out, at bilang ito kapwa may Firesheep ginawa sobrang malinaw,
kapag ikaw guys na ay kasalukuyang sa Facebook ngayon -
Out sa pagkausyoso, sabihin makita kung makikita mo fess up.
Kung ikaw ay sa Facebook ngayon sa ilang mga tab, kahit na hindi ito foregrounded,
ang iyong URL HTTP o HTTPS?
[Maramihang mga mag-aaral] S. S? [Tawa]
Okay. Anumang HTTP? May 1? Okay.
Kaya lahat sa atin Hack Facebook account na tao ngayon.
Para sa nakararaming bahagi na ito ay naging naka-on bilang default, ng hindi bababa sa ilang mga website.
At mahaba kuwento maikli, kung ang iyong trapiko sa web ay hindi naka-encrypt,
hindi lamang ay ang HTML bumalik-balik sa buong WiFis unencrypted,
kaya ang mga bagay tulad ng cookies bumalik-balik sa buong himpapawid
nang walang anumang paraan ng pag-encrypt.
Kaya kung ikaw ay may kaunting programming savvy o isang bit ng Pag-Google kasanayan
upang mahanap ang libreng software na ito, ang lahat ng kailangan mong gawin ay umupo sa Starbucks
o umupo sa isang airport kung saan mayroong pangkalahatang unencrypted WiFi
at panoorin para sa mga keyword tulad ng Set-Cookie: o PHPSESSID
dahil kung mayroon kang teknikal savvy upang panoorin ang WiFi
para sa lahat ng mga bit na daloy sa buong air para sa ang pattern na ito,
maaari mong sabihin na PHPSESSID tao ang mangyayari sa bo8dal at iba pa.
At muli kung hindi mo sapat technically savvy o ang mga tamang tool,
maaari mong lamang reconfigure iyong sariling browser upang simulan ang pagtatanghal na kamay stamp
Facebook.com, at Facebook ay lamang pagpunta sa ipagpalagay na ikaw na tao
dahil ang alam nila ay hindi na ngunit na mayroon kang natatanging identifier na ito.
Kaya kung magnakaw sa iyo na natatanging identifier at ipakita ito sa web server bilang iyong sariling,
sila ay pagpunta upang ipakita sa iyo ng balita feed na tao
o mensahe na tao o pokes.
>> At gusto ko ang Google ngayon kung paano upang i-activate ang HTTPS para sa Facebook marahil.
Ngunit ito talaga ay bilang simpleng bilang na.
At kaya ang Facebook at Google at ang mga tulad nakuha talagang magandang sa,
ngunit abangan ang lahat ng higit pa para sa anumang mga website na binibisita mo na hindi gumagamit ng HTTP
at magkaroon ng ilang uri ng mga sensitibong impormasyon sa kanila,
kung ito ay ang pinansyal o personal o ang gusto.
Kung hindi nila ginagamit ito, medyo posibleng cookies tulad nito ay napaka madaling ninakaw
at pagkatapos palsipikado, at na eksakto kung ano ang Firesheep ginawa.
Hindi mo na maging isang programmer.
Lahat ng iyong ay gawin na ang isang koneksyon sa Internet, i-download ang libreng tool na ito,
at kung ano ang gagawin mong mag-log in at pagkatapos ay ito ipakita sa iyo ang mga pangalan ng Facebook
ng lahat sa Sanders, sa partikular na pagpapakita, sa paligid mo
at ang lahat ng mayroon kang gawin ay mag-click sa kanilang mga pangalan at software awtomatiko ang proseso
ng sniffing na cookie, pagtatanghal sa Facebook bilang iyong sariling,
at, voila, naka-log in.
Kaya ito ay isa pang isa sa mga "huwag gawin ito" opisyal.
Kung mayroon ka ng iyong sariling home network at gusto mong maghinang, sa ano mang paraan,
ngunit Napagtanto ito ang-cross ang linya sa isang kapaligiran ng unibersidad.
>> Ngunit ang layunin dito ay talagang upang bigyang-diin hindi kung paano gawin ito
ngunit kung paano ipagtanggol laban sa mga ganitong uri ng bagay.
At ang trivia solusyon dito, kahit ito mismo ay flawed,
ay talagang bawasan ang paggamit ng anumang mga site na hindi gumagamit ng HTTPS Patuloy.
Kaya mga site tulad ng Facebook at Google nagiging may mga checkbox
kung saan maaari kang mag-opt in sa ganitong uri ng bagay,
at bangko na nagkaroon ito para sa mga taon para sa katulad na mga dahilan.
Kaya lamang ng kaunting takot kadahilanan kung kaya namin. Ngunit iyon lamang ito sa isang maikling salita.
Iyon ay kung paano Naaalala ng server ng kung sino ka.
At sa lalong madaling maaari nilang tandaan na, maaari nilang maalala ang kahit ano tungkol sa iyo
na programmer ay naka-imbak sa loob ng ito espesyal superglobal tinatawag $ _SESSION.
At para sa pset 7 namin ginagamit ito trivially lamang tandaan ang isang int,
lalo natatanging ID ng gumagamit na naka-log in,
kaya na alam namin pa doon bago.
Anumang mga katanungan pagkatapos ay sa session o mga cookies o ang tulad ng?
Firesheep ay hindi gumagana pati na rin ito,
at kailangan mong ilagay ang iyong computer sa isang espesyal na mode na makati
kaya aktwal na pakikinig para sa trapiko bukod sa sarili.
Kaya kung kasalukuyang nagda-download ka ng Firesheep, Napagtanto ito ay hindi pa madaling
bilang sa sandaling ito ay upang ipakita.
Ayos lang. At huwag gawin ito sa Sanders. Gawin ito sa bahay.
Database.
Isa ng mga bagay na aming ginawa sa pset 7 napaka sadyang
ay kami magbibigay sa iyo ng isang sample ng database ng talahanayan para sa mga gumagamit na may ilang mga ID ng gumagamit,
ilang mga pangalan ng user, at ang ilan ay naka-encrypt ang mga password sa ganyang bagay.
At tulad ng makikita mo, kung hindi mo pa nagagawa, ikaw ay pagpunta sa baguhin ang talahanayan ng kaunti.
Ay pagpunta sa may upang magdagdag ng ilang mga cache sa bawat isa ng ang mga gumagamit sa talahanayan na,
at ikaw ay pagpunta sa may upang magdagdag ng isa pang kasaysayan table, table ng portfolio,
o marahil ay tumawag iba pa.
Ngunit sa mga tuntunin ng pag-iisip tungkol sa kung paano gawin ito, sabihin buksan ang tool na ito
kung saan ginamit namin sa Biyernes, ngunit kung pamilyar, ang appliance ay may isang tool
tinatawag na phpMyAdmin na coincidentally nakasulat sa PHP,
ngunit nito layunin sa buhay, pagkatapos kong mag-log in dito bilang jharvard may pulang-pula,
ay upang bigyan ako ng isang user-friendly na paraan ng pagtingin at pagbabago sa aking database.
>> Ang database na ako tumatakbo sa appliance ay tinatawag na MySQL.
Na ito ay napaka-tanyag, at ito ay isang libreng open source database na kamangha-mangha madaling gamitin,
lalo na front ay nagtatapos tulad nito.
Ano ang tool na ito ay nagbibigay-daan sa akin upang gawin, halimbawa, sundutin sa paligid ng talahanayan.
Hayaan akong magpatuloy at gawin ito.
Sa Biyernes aming ginawa ang isang talahanayan na tinatawag na mag-aaral na sobrang simple.
Ito ay may 3 haligi - id, pangalan, at email - at ko bang mano-manong ipinasok ng ilang mga hilera
tulad ng David at Mike sa partikular na halimbawa na ito.
Hayaan ang mga ito ng kaunti pa, at sabihin ipinapalagay na gusto naming tandaan higit pa
pa sa pangalan at email tungkol sa isang user.
Ipaalam sa akin i-click ang Istraktura dito sa tuktok.
At muli, ang pset ay nagtuturo sa iyo sa pamamagitan ng mga kinakailangang hakbang dito,
kaya huwag mag-alala kung ang ilan sa mga ito ay isang bit mabilis.
Pagkatapos ako mag-click sa dito.
Ako pagpunta sa magdagdag ng ilang bilang ng mga haligi pagkatapos email
dahil gusto ko upang magdagdag ng isang bagay na tulad ng bahay.
Nakalimutan ko ang upang i-record ang bahay ng mag-aaral.
Hayaan i-click ang Pumunta sa akin, at ngayon kami ay may form na ito na sa kasamaang-palad ay isang maliit na malawak na mula kaliwa hanggang kanang,
ngunit ako pagpunta sa tumawag sa pangalan ng bahay field na ito,
at pagkatapos uri ako ngayon upang pumili.
Kaya sabihin ay isang maikling chat tungkol sa iba't ibang uri sa MySQL
dahil kung saan PHP ay mahina-type at uri ng-play ng mabilis at hindi kabit-kabit na may uri,
sa isang database lalo na ito ay sobrang mahalaga sa aktwal na gamitin ang pagta-type sa iyong kalamangan
dahil ang isa ng mga bagay na MySQL at iba pang mga database engine ay maaaring gawin para sa iyo
ay matiyak na hindi mo ilagay ang mga bogus data sa iyong database.
Ito ay uri ng libreng error sa pagsusuri ng magagamit sa iyo.
>> Para sa bahay namin malinaw naman hindi gusto ang mga ito sa isang int, na kung saan ay isang 32-bit na halaga sa MySQL.
Ginawa namin maikling makipag-usap sa Biyernes tungkol sa varchar, na nakatayo para sa variable na haba magpasinda.
Ano ito? Ito ay nagpapahintulot sa iyo na tukuyin na gusto mo ito sa isang string ng mga uri.
Hindi mo talaga alam nang maaga kung gaano ito kahaba,
kaya ipapakita namin mang sabihin ang pangalan ng bahay na 255 character,
ngunit maaari kang pumunta may 32, 64 - anumang bilang ay talagang.
Subalit ang kalamangan ng paggamit ng isang varchar higit sa isang patlang na tinatawag na magpasinda ang?
Lamang intuitively kung mag-scroll down na ko dito, napansin may pansamantalang trabaho at may varchar.
Varchar ay variable na haba magpasinda; magpasinda isang nakapirming haba magpasinda.
Kaya batay lamang sa kahulugan na, kung ano ang bentahe o dehado ng bawat isa sa mga ito?
Sa ibang salita, na nagmamalasakit tungkol sa pagkakaiba, o kung bakit dapat mong pinapahalagahan?
>> Oo. [Mag-aaral] Varchar may higit pang kakayahang umangkop ngunit tumatagal ng up ng higit memory.
Mabuti. Varchar tumatagal hanggang mas - natin makita. Hindi ako sigurado kung Narinig ko na karapatan.
Maaari mong sabihin na sa sandaling higit pa?
[Mag-aaral] sinabi ko varchar marahil ay may higit pang kakayahang umangkop ngunit ito ay tumatagal ng up ng higit memory.
Kawili-wili. Okay. Varchar marahil ay nagbibigay sa iyo ng higit pang kakayahang umangkop ngunit tumatagal ng up ng higit memory.
Ang huli ay hindi kinakailangang totoo.
Depende sa konteksto, ngunit sabihin bumalik na.
>> [Hindi marinig na mag-aaral tugon] Mismong.
Ito ay talagang kaso na pansamantalang trabaho ay karaniwang gamitin ang higit pa memory
dahil sa isang pansamantalang trabaho, tulad ng sa C, ay tulad ng isang string, ang isang hanay ng mga character.
Kaya kung sinasabi mo magpasinda field ng haba 255,
database ay literal pagpunta upang bigyan ka ng 255 na character.
At kung ang bahay ay nagtatapos Mather at 6 kabuuang character,
aksaya ka sa higit sa 200 mga character.
>> Kaya ng varchar epektibo lamang ay gumagamit ng maraming mga character ay kinakailangan
hanggang sa isang maximum na halaga.
Ngunit ang presyo na binabayaran mo ay aktwal na pagganap, potensyal na.
Kung alam mo nang maaga na ang lahat ng iyong mga string ay pagpunta sa 8 character -
halimbawa, ipagpalagay na kailangan mo ng mga password ng haba 8 -
ng bentahe ng gamit ang isang pansamantalang trabaho na field sa okasyon, bagamat hindi madalas,
upang tukuyin ang isang nakapirming haba para sa isang bagay tulad ng isang password
dahil ngayon database ay maaaring maging kahit na mas matalinong.
Kung alam na ang bawat magpasinda field, bawat string sa isang haligi ng parehong haba,
makabalik ka tampok ng random access.
Maaari mong tumalon sa paligid kabilang sa iba't ibang magpasinda mga patlang sa iyong talahanayan ng database
dahil sa tingin ng isang database bilang mga hanay at haligi.
Kaya kung ang bawat isa ng string ay ang parehong haba,
alam mo na ang unang isa sa byte 0, sa susunod na isa sa byte 8
at pagkatapos ay 16 at pagkatapos ay 24 at iba pa.
Kaya kung ang lahat ng mga string ng parehong haba, maaari mong tumalon sa paligid ng mas mahusay.
Kaya na maaaring maging isang benepisyo sa mga tuntunin ng pagganap,
ngunit karaniwang hindi mo ang luxury ng pag-alam nang maaga,
kaya ang isang varchar ay ang paraan upang pumunta.
Narito ang isa pang detalye na kahit Facebook tumakbo sa kalaunan.
Ints ay mahusay, at namin uri ng gamitin ang mga ito sa pamamagitan ng default sa anumang oras na gusto namin ng isang numero,
ngunit lamang 32 bit.
>> At kahit na ang Facebook ay hindi pa magkaroon ng 4 bilyong mga gumagamit na ngayon,
mayroong tiyak na ang ilang mga tao out doon na may maramihang mga account
o mga account na ay binuksan at pagkatapos ay nakasara,
at kaya Facebook mismo naniniwala ako ng ilang taon na ang nakakaraan nagkaroon sa paglipat mula int
sa, bilang ay aptly tinatawag, ang bigint, na may 64 bit sa halip.
Kaya ito masyadong ay isang disenyo na desisyon.
Ay amazingly masuwerteng kung ang iyong huling proyekto lumiliko startup,
ay may 4 bilyong at 1 user, bigyan o tumagal,
kung saan gamit ints ay maaaring maging isang maliit na hindi makakita sa malayo.
Ngunit sa katotohanan, ang talahanayan ng iyong mga user ay maaaring masarap na may ints.
Ngunit para sa isang bagay tulad ng pset 7, tulad ng iyong talahanayan ng kasaysayan,
maaari kang magkaroon ng libo-libo, milyun-milyong ng mga gumagamit kung ikaw ay magbabago sa etrade.com.
Kaya kung saan hindi ka maaaring magkaroon ng higit sa 4 bilyong mga gumagamit,
mga gumagamit na iyon na mayroon kang ay maaaring magkaroon ng higit sa 4 bilyong mga transaksyon sa paglipas ng panahon -
bumibili at nagbebenta at mga bagay sa kanilang kasaysayan.
Kaya kung gagawin mo inaasahan - muli, ito ay mahusay na mga problema kung mayroon kang ito maraming data -
kung gagawin mo inaasahan data na lalampas sa sukat ng isang int,
pagpunta na may isang bagay tulad ng bigint ay isang direksyon na hindi madalas sapat na pinagtibay sa pamamagitan ng designer
dahil sa mga tao sa figure na hindi pagpunta sa maging isang problema,
ngunit ito madaling upang pumili ng isang bagay na mas malaki kaysa sa.
Decimal na aming ginagamit sa pset 7, na tumutukoy nakapirming katumpakan
sa gayon ay maaari mong maiwasan ang mga isyu na kinasasangkutan ng mga kamay at Doubles at reals at ang mga tulad ng.
>> At pagkatapos ay may ilang mga iba pang mga patlang dito. Iwagayway namin ang aming mga kamay sa mga ito sa ilang mga lawak.
Ngunit petsa, beses lahat ng inireseta sa mga format sa MySQL,
at ng kalamangan sa pag-iimbak ng mga petsa ng mga petsa at hindi varchars
ay nangangahulugan na ang database ang maaaring aktwal na i-reformat ang mga ito sa iba't-ibang mga format,
kung ang format ng US o European format o ang tulad - gayunpaman gusto mong -
mas mahusay kaysa sa kung ito ay ilang generic na varchar.
At pagkatapos ay ang ilang iba pang mga binary, varbinary, blobs.
Ito ang binary malalaking bagay, at maaari mo ring i-imbak ang mga binary data
pati na rin geometric data sa isang database.
Ngunit para sa amin namin karaniwang pakialam tungkol sa mga ints at varchars at katulad.
Natin tapusin ito halimbawa may bahay.
House Pupunta ako sa mang sabihin ay 255 char.
Pagkatapos default value maaari naming gawin ito.
Maaaring namin bilang default ilagay lahat sa Mather House, halimbawa.
Iyon ay kung paano namin maaaring tukuyin na ang database
dapat matiyak na ang isang tao ay laging may isang halaga. Ngunit ko bang iwan na maging.
Sa katunayan, para sa mga taong nakatira off campus at hindi sa isang bahay,
maaaring aktwal ko nais upang tukuyin na ang default na halaga para sa bahay ay null,
at pagkatapos ay kailangan kong i-check ang kahong ito at sabihin sa database okay lang kung ang bahay ng gumagamit ay null.
>> Muli, ito ay isa pang pagtatanggol mekanismo na maaari mong ilagay sa lugar
kaya hindi mo kahit na upang ilagay ang mga ito sa iyong code na PHP kinakailangan.
Ang database ay matiyak na ang mga bagay ay o hindi null.
At pagkatapos ay bilang wakas, ang mga Katangian.
Wala sa mga ito ay talagang may-katuturang.
Binary, unsigned - wala ng mga may-katuturan sa isang varchar.
Index.
Nakakaalam ba o tandaan o ng hula sa kung ano ang index ng
para sa isang bagay tulad ng bahay?
Ito masyadong ay talagang isang mahalagang at relatibong madaling disenyo desisyon.
Para sa mga taong hindi pa ito nakikita, sa Biyernes usapan natin ang maikling tungkol sa mga pangunahing key.
Sa isang table ng database, ang isang pangunahing key sa field o haligi
na natatanging nagpapakilala sa mga hilera sa talahanayan.
Kaya sa talahanayan sa kasalukuyang mayroon kaming ID, mayroon kami ng mga pangalan at email.
Alin sa mga ang pinakamahusay na kandidato upang maging isang pangunahing key,
na papel para makilala hilera?
Marahil ID.
Arguably, maaari rin naming gamitin ang kung ano ang kahit na?
Marahil, maaari mong gamitin ang email na ito dahil sa basal natatangi
maliban kung ang mga tao ay pagbabahagi ng mga email account.
Ngunit ang katotohanan ay na kung gumagamit ka ng numeric na ID tulad ng 1234,
na lamang 32 bit, kung saan ang isang email address na ito maraming mga byte o ito maraming byte.
Kaya sa mga tuntunin ng kahusayan para sa mga natatanging mga tagapagpakilala ng,
may kaugaliang mahusay na kasanayan upang gamitin ang isang int
kahit kung mayroon kang ilang mga string kandidato na maaari mong arguably gamitin.
>> Para sa isang bagay tulad ng bahay, ito ay hindi dapat maging isang pangunahing key
dahil ang 1 tao lamang maaaring mabuhay sa Mather at 1 tao sa Currier at ang mga tulad ng.
Gayundin, ito ay hindi dapat maging natatangi.
Ang pagkakaiba sa pagitan ng pangunahin at natatanging ay na sa kaso ng aming kasalukuyang talahanayan,
ID ay pangunahing ngunit ang email ay hindi pangunahing para sa mga dahilan na nabanggit lang namin -
pagganap - ngunit dapat pa rin itong maging natatangi.
Kaya maaari mo pa ring ipatupad natatangi nang hindi gumagawa ang claim
na ito ay isang napaka-mahalagang pangunahing field.
Ngunit ang isang ito ay lubos na kapaki-pakinabang: Index.
Kung alam mo sa maaga para sa iyong huling proyekto, para sa pset 7, o sa pangkalahatan,
na ang patlang na ito ng bahay ay pagpunta sa isang bagay kang maghanap sa maraming
gamit ang mga piling keyword o iba pa,
maaari mong preemptively sabihin sa database upang gumana ang magic
at tiyakin na ito ay lumilikha ng sa memory anumang magarbong mga istraktura ng data na kinakailangan
upang mapabilis ang paghahanap na batay sa bahay.
Siguro ito gamitin ng hash table, maaaring ito ay gumamit ng isang naka-link na listahan.
Sa katotohanan, may kaugaliang na gumamit ng isang puno, madalas ang istraktura ng tinatawag na B-puno -
hindi isang binary puno ngunit ang B-puno - na ay isang malawak na puno
na maaari mong makita sa isang klase tulad ng CS124, ang klase istraktura ng data.
Ngunit sa maikling salita, hindi mo kailangang mag-alala tungkol sa na kapag ginagamit ang smart database software.
Maaari mo lamang sabihin dito, "Index sa field na ito sa gayon ay maaari kong maghanap sa mas mahusay."
>> Kung iniwan mo ito off at subukan mo upang maghanap para sa lahat sa database na nakatira sa Mather,
ito ay malipat sa linear paghahanap.
At kung ikaw Mayroon 6,000 undergrads lahat ng sala sa ilang mga bahay,
ka pagpunta upang maghanap sa buong table upang makita ang mga Matherites,
samantalang kung sinasabi mo Index, sana ay ito ay isang bagay na malapit sa isang logarithmic paghahanap
upang mahanap ang mga uri ng mga mag-aaral.
Ito ay isang libreng tampok upang i-on,
kahit na ito ay sa isang presyo ng ilang halaga ng puwang.
Panghuli, ang auto-pagdagdag, ang Ai field na ito,
kung saan ay nangangahulugan lamang kung ito ay isang int at hindi mo nais na pakialam sa dagdagan ang mga ito sa iyong sarili
sa bawat oras na may isang bagong gumagamit, tingnan na,
at ang bawat user ay makakakuha ng ipinasok ay awtomatikong makakuha ng bagong ID.
Sabihin i-click ang I-save, at ngayon sabihin maghanap ng pula na may ganitong disenyo.
Kung pumunta ako sa browse, notice na parehong Mike at aking bahay null.
Maaari ko bang gamitin ang phpMyAdmin upang i-edit ito nang manu-mano.
Maaari kong pumunta sa dito at uri sa Mather at pagkatapos ay pindutin ang Enter,
at ngayon ay makapansin ng talahanayan ang iba.
Ngunit mapansin ang maaari kong gawin ang iba pa pati na rin.
Ni David ang ID 1, kaya phpMyAdmin muli ng isang administrative tool;
ito ay hindi isang bagay sa iyong mga user ay kailanman pagpunta upang makita.
Kaya kung ako sa halip na i-click ang tab na SQL up sa tuktok -
at muli, pset 7 ay ipakilala sa higit pa ng mga query na ito -
Maaari ko bang mano-manong i-execute SQL query nakabalangkas na wika utos
I-update ang mga gumagamit na itinakda bahay = 'Pfoho' WHERE id = 1.
Mga SQL query sa, mabuti sapat, medyo nababasa mula kaliwa hanggang kanang.
I-update ang mga gumagamit ng talahanayan, itakda ang patlang na tinatawag na bahay sa Pfoho
kung saan ang ID ng gumagamit ay 1.
O maaari ko kahit gawin kung saan ang email = 'malan@harvard.edu'.
Hangga't na natatanging nagpapakilala sa akin, na gumagana pati na rin.
Ngunit ID may kaugaliang upang maging mas mataas na pagganap, kaya sabihin gawin iyon.
Natin i-klik ang Go. Okay, lecture.users ay hindi umiiral. Ano ang aking mga error?
Ano ang talahanayan ng aktwal na tinatawag dito?
Ito ay tinatawag na mag-aaral dahil lang na kung ano ang ginawa namin dito sa kaliwang tuktok.
Ito ay tinatawag na mga mag-aaral, hindi ang mga gumagamit. Kaya i-click ang Pumunta ngayon.
1 hilera apektado. Query sa kinuha 0.01 segundo.
Kung i-click ang ko ngayon-browse ng, ngayon Malan buhay sa Pfoho.
Kaya na isa pang lasa ng SQL, ngunit pset ay dadalhin ka sa pamamagitan ng kaunti higit pa sa na.
>> May isang bobo desisyon ko na ginawa dito.
Gusto ko magtaltalan na ito disenyo ng database ay hindi mabisa
dahil ang higit pang mga tao na idagdag ako sa table ng mga mag-aaral,
ang higit pa sa atin sisimulan ko ang pagdaragdag, ang higit pa ng TFs sisimulan ko ang pagdaragdag ng,
kami ay pagpunta upang simulan upang makita kung ano ang redundancies sa table na ito?
>> Oo. [Mag-aaral] Nakakakita na ito sa mga mag-aaral, kami ay gamit ang parehong [hindi marinig]
Ang parehong - Kanan, eksakto.
Kaya kung 400 tao naninirahan sa Mather, bigyan o,
kalaunan ang talahanayan na ito ay pagpunta sa 400 hilera na sabihin ng "Mather," "Mather,"
"Mather," "Mather," "Mather."
Kami ay aksaya ang lahat ng mga bytes, at ang ilang mga takeaways doon.
1, ang mabaliw kaso ng sulok kung saan kung ang isang tao ay nagbabayad ng maraming ng pera
mga at renames Mather, na namin ngayon upang baguhin ang aming buong database ng talahanayan.
Na hindi pagpunta sa mangyayari madalas, kahit na Pfoho ay isang beses na tinatawag na North House 15 taon na ang nakalipas,
kaya ang mangyayari. Ngunit na hindi lahat ng nakapanghihimok.
Mas nakakahimok kaysa sa isang sulok kaso tulad ng nangangailangan upang i-update ang data sa maramihan
para sa isang database ay kung bakit ang iyong pag-iimbak Mather muli at muli at muli at muli?
Na ang isang maraming ng char, 6 char.
Hindi ginagawa namin mas mahusay kaysa, lalo na para sa Pforzheimer?
Tiyak na maaari naming gawin mas mahusay kaysa maraming character.
Bakit hindi lamang iugnay ang isang natatanging identifier sa bawat bahay
at tindahan na para sa bawat user? Kaya sabihin subukan ito.
Sa halip na lamang gamitin ang talahanayan ng mga mag-aaral, hayaan mo akong pumunta hanggang sa aking database ng panayam hanggang dito sa kaliwang tuktok.
Mapansin dito sinasabi nito ang Lumikha ng talahanayan.
Hayaan akong lumikha ng isang bagong talahanayan na tinatawag na bahay.
Ang bilang ng mga haligi na 2. Enter.
Ngayon Mayroon akong 2 mga patlang.
Pupunta ako upang tumawag ito ang pangalan, at ito ay pagpunta sa isang varchar ng haba 255,
>> ngunit medyo arbitrary. Hayaan akong ilagay ito down na dito sa pamamagitan ng convention.
Kaya maglagay ng ID dito. Natin bigyan ang bawat bahay ng isang natatanging identifier.
Natin bigyan ang bawat bahay ng isang pangalan.
Natin tukuyin na ang identifier na unsigned sa pamamagitan lamang ng convention lang gumamit ng mga positibong numero.
Natin sige at bigyan ito ng isang auto-patong na field sa ngayon.
At kailangan namin ang anumang bagay?
Natin sige at i-click ang I-save.
Ngayon Mayroon akong ng pangalawang talahanayan.
Mapansin bilang isang bukod na ito ay bahagyang misteriyoso SQL utos
na nais mong ay i-type ang mano-mano kung hindi gumagamit ng isang administrative tool tulad phpMyAdmin.
Kaya isa pang dahilan na ginagamit namin ito.
Ito ay kamangha-mangha kapaki-pakinabang na uri ng pedagogically dahil maaari mong i-click sa paligid
at malaman kung paano ang mga bagay ay gumagana sa pamamagitan ng lamang pagkopya at pag-paste kung ano ang phpMyAdmin ginawa.
Ngunit ang utos Lumikha ng talahanayan ay kung ano ang lamang pinaandar, at dito ay ang aking mga talahanayan.
Hayaan akong magpatuloy ngayon at gamitin ang raw SQL kaysa oversimplify sa pamamagitan ng pag-click ang Ipasok na tab.
Hayaan akong INSERT SA bahay,
at ako pagpunta upang sabihin ang pangalan ng bahay ay pagpunta sa magkaroon ng isang halaga ng 'Mather'.
Iyan na ang lahat. Syntax na ito ay ng kaunti pa misteriyoso.
Ito ay ang pangalan ng field na gusto namin upang ipasok.
Ito ay ang halaga na gusto naming upang ipasok sa mga patlang. Hayaan i-click ang sa akin Pumunta.
1 hilera ang ipinasok kinuha 0.02 segundo. Hayaang i-click ang sa akin-browse ng ngayon.
>> Pansinin kung i-click ko-browse ng, Mather, na ang ID sa pamamagitan ng automation ang bilang 1.
Hayaan ang gawin sa akin ng isa pang isa. Hayaan akong pumunta sa tab ng SQL.
INSERT SA bahay. Ang pangalan ng bahay ay pagpunta sa magkaroon ng isang halaga ng Pfoho at iba pa.
Go. At maaari ba akong patuloy na ginagawa ito muli at muli at muli.
O kung hindi ka nababato gamit phpMyAdmin, maaari mo lamang gamitin ang tab ng Magsingit
at hindi i-type ang raw SQL.
Maaari mo lamang Bang ito nang mas mabilis sa pamamagitan ng pagta-type, halimbawa, Currier, Ipasok,
at ngayon kung i-click namin-browse ng, may Currier na may ID ng 3.
Kaya ito ay kung ano ang ibig sabihin namin sa pamamagitan ng auto-patong.
Ngunit ngayon namin upang ayusin ang isang bagay sa mga mag-aaral.
Sa mga mag-aaral kung ano ang dapat ang data ng uri ng patlang ng house na ngayon?
Dapat ito ay isang int, i-right?
Kaya ang layunin dito ay sa salik, kung hindi man kilala bilang normalize, ang mga talahanayan
sa gayon ay hindi namin imbak ng impormasyon redundantly sa anumang ng aking mga talahanayan.
At muli, ang landas namin sa dito ay pagpunta sa sabihin Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, na napaka kalabisan
sa mga tuntunin ng ang wastefulness ng char.
Kaya hayaan mo akong magpatuloy at baguhin ito sa pamamagitan ng pag-click Istraktura,
at ipaalam sa akin sige at tingnan off ang bahay field, i-click ang Baguhin ang,
at ngayon ako pagpunta sa baguhin ito sa isang int.
255 ay hindi na may-katuturan.
Hayaan akong magpatuloy at sabihin na ang fine kung pa rin null. I-save.
Ngayon talahanayan ng mga mag-aaral ay matagumpay na binago,
at mapansin muli bahay ay isang int.
Bilang isang bukod, balewalain ang numero sa panaklong pagdating sa ints.
>> Ito ay para sa mga kadahilanan ng legacy.
Bumalik sa araw kapag hindi mo GUIs, sa halip ay isang kapaligiran sa linya ng command na,
10 at 11 ayon sa pagkakasunud-sunod na tinukoy kung gaano karaming mga character na dapat mong ipakita
sa terminal na window sa aktwal na ipakita ang mga patlang.
Ay walang kinalaman sa may bit haba ng aktwal na patlang, kaya balewalain lang namin na sa ngayon.
Ngayon ay mayroon akong pumunta sa table na ito.
At kung David nakatira sa Mather, bahay ay hindi dapat ay 0,
na isang default na halaga int na pinakamalapit sa null.
Dapat siya nakatira sa bahay 1.
Sabihin mang sabihin na Mike buhay sa Pfoho, kaya bahay bilang 2.
Ngayon ang aking talahanayan mukhang ng kaunti pa misteriyoso.
Ngunit isaalang-alang ang kahusayan.
Ngayon gumagamit ako ng 32 bit lamang upang matukoy ang bahay,
na nangangahulugan na may lamang 1 canonical kahulugan ng aking bahay Mather at Pfoho
at na sa table ng mga bahay.
Kaya kung gusto ko sa ngayon sumaling muli ang mga talahanayan, sa tingin ito sa ganitong paraan.
Narito Mayroon akong talahanayan ng aking mga mag-aaral, at sa kanang bahagi ay may mga numero, 1 at 2.
1 ay Mather, 2 ay Pfoho.
Mayroon kaming mga parehong numero sa iba pang mga talahanayan na ito, na kung saan ay tinatawag na bahay,
1 at 2 at 3 para sa mga 3 bahay.
Ano namin ngayon ay nais na gawin ay ang kakayahan sa code, PHP at SQL,
upang pag-uri-uriin ng sumaling muli ang mga talahanayan, kung saan kung ito ay ang mga mag-aaral at ito ang mga bahay,
gusto naming pagsamahin ang mga ito sa paanuman upang ang 1 linya up na may 1,
2 linya up na may 2, at sa gayon maaari naming malaman kung saan David
at kung saan Mike at kung saan ang iba nakatira.
Upang gawin ito, maaari naming magsagawa ng isang SQL query tulad ng sumusunod.
Piliin ang * MULA mag-aaral SUMALI bahay SA -
At ngayon kung ano ang mga field ang gusto namin na sumali sa?
Kaya students.house = houses.id.
>> Ang isang maliit na misteriyoso, ngunit ang bahagi na ito ay nangangahulugan na literal na lumikha ng isang bagong pansamantalang talahanayan
na ang resulta ng pagsali ng mga mag-aaral at mga bahay.
At kung paano ang gusto mong pagsamahin ang mga tip ng aking mga daliri dito?
Itakda ang katumbas sa bahay 'ID field ng ang mga mag-aaral' house field.
At kung ako ngayon i-click ang Pumunta, nakukuha ko kung ano mismo ang ko umaasa sa.
David sa Mather, Mike ay sa Pfoho, at ko rin makita ang mga natatanging mga tagapagpakilala ng.
Ngunit ang punto ay ngayon mayroon akong isang kumpletong table.
At kaya ang takeaway dito para pset 7 o talagang para sa pangwakas na proyekto:
Kung nakita mo na ang ka sa pag-iimbak ng anumang piraso ng impormasyon redundantly,
kung ito ay isang bahay, maaaring ito ay isang lungsod, estado, at ZIP
kung saan ZIP maaari karaniwang ngunit hindi palaging ginagamit bilang isang natatanging identifier,
huwag pumunta sa pamamagitan ng ehersisyo sa pag-iisip at pagkatapos ay may isang bagay tulad phpMyAdmin
ng factoring out na karaniwang data dahil lalo na ang iyong website ay makakakuha ng mas mahusay na ginagamit
at mas popular na, ito ay kung paano gumawa ka ba na ang lahat ng bagay ay napakabilis na,
sa pamamagitan ng pagbibigay ng database ng maraming mga pahiwatig sa natatangi hangga't maaari.
Na ng maraming.
Anumang mga katanungan? Ayos lang. Natin ng isang 5-minutong break na doon at pangkating muli.
Ayos lang.
Ang sumusunod ay isang halimbawa na ginamit ilang taon na ang nakalipas kapag kinuha ko CS161,
kung saan ay ang operating system ng klase sa kolehiyo
na kung saan ay kilala sa pagiging kamangha-manghang ngunit isang mabaliw halaga ng trabaho,
at nakatutok talaga sa ilang ng mababang antas na mga problema na lumabas dahil sa mga operating system
at din kahit na sa mundo ng mga database.
>> Ang kuwento na Sinabi ng aking propesor, Margo seltser na tubig, ang taon na tulad ng sumusunod.
Ipagpalagay na mayroon kang isang maliit na refrigerator sa dorm para sa iyo at sa iyong mga kasama
at pareho mo talagang gusto gatas.
Kaya dumating ka ng bahay mula sa klase isang araw, ang iyong kasama ay hindi pa doon,
binuksan mo ang refrigerator, at natanto, "Oh mapahamak, hindi namin ng gatas."
Kaya mo isara ang refrigerator, ituturo sa iyo sa kabuuan ng kalye sa CVS
at kumuha sa nagiging mahaba linya upang bumili ng ilang gatas sa CVS.
Samantala, ang iyong kasama sa kuwarto na ito ay tahanan mula sa kanyang klase,
pagdating sa room, nagbukas ng refrigerator talaga na kinakapos ilang gatas,
magbubukas refrigerator at, "mapahamak, walang gatas."
Kaya niya isinasara ang refrigerator, nagtuturo ang pinto, at napupunta sa ABP
o sa ibang lugar kaysa sa mga CVS na kung saan hindi ka pagpunta sa paga sa bawat isa
upang pumunta makakuha ng ilang gatas.
Siyempre ng ilang minuto mamaya, parehong mo bumalik sa bahay
at ngayon ay mayroon kang dalawang beses ng mas maraming gatas bilang iyong aktwal na gusto.
At pagiging gatas, ngayon ito maging masama dahil gusto mo gatas
ngunit hindi mo talagang tulad ng gatas, kaya ngayon ikaw ay may masyadong maraming gatas, kaya ito ay pagpunta sa maasim.
Ito ay isang kahindik-hindik, kakila-kilabot na sitwasyon.
Ano ang maaaring malutas ang suliranin na ito kung ikaw ay ang unang bahay kasama? Oo.
[Mag-aaral] Dapat mong-iwan ng tala. [Tawa]
Mabuti. Dapat mong-iwan ng tala.
Dapat mong ilagay ang isang Post-tala o tulad ng sinasabi, "Wala para sa gatas,"
at ang iyong kasama conceptually sana ay nai-lock ng aktwal na ginagawa na.
O maaari kang pumunta 1 hakbang karagdagang.
Maaari mong literal i-lock ang refrigerator na may ilang mga uri ng kandado,
at ngayon ang iyong kasama ay literal na lock out ng refrigerator.
Kung namin ng tuntuning panlahat pabalik sa programming,
Maaari mo halos tingin ng refrigerator bilang ilang mga uri ng variable o isang struct,
ang ilang mga uri ng lalagyan para sa impormasyon.
Ang problema sa panimula dito ay na ang parehong mo ay pinapayagan upang siyasatin
o basahin ang estado ng istrakturang ito ng data,
ngunit tiningnan mo ito sa iba't ibang oras at pa parehong mo gumawa ng desisyon
batay sa estado ng mundo sa mga iba't ibang mga sandali sa oras.
Kaya ay naka-lock mo ang refrigerator, gusto mo na hindi bababa sa Iniwasan ang iyong kasama
mula sa pag-upang siyasatin ang estado ng mundo,
kaya siya ay hindi maaaring ginawa na parehong desisyon.
Kaya database, bilang ito ay lumiliko out, patuloy ang problema na ito.
>> Natin makita kung maaari naming bumuo ng isang sitwasyon.
Ipagpalagay na ikaw ay ang uri ng masamang tao at pumunta ka sa Bank ng Amerika
o isa sa ang iba pang mga lugar sa square na may ilang bahagi ng ATM-tabi,
at sa paanuman mo naisip kung paano i-duplicate ang isang ATM card - hindi lahat na mahirap.
Lamang magnetic strip.
At kaya kung ano ang gusto mong subukang gawin ay play ang laro
kung saan inilagay mo ang 1 card sa 1 machine, isa pang card sa iba pang mga machine,
at gusto mo mahalagang upang subukang mag-withdraw ng pera nang sabay-sabay,
dahil isipin kuwento na napupunta tulad ng sumusunod.
Ang machine sa kaliwa ay tumatagal ng iyong card at ang iyong PIN,
at pagkatapos ay sabihin sa iyo, "Bigyan mo ako $ 100."
Ang ATM program sa unang gawin ng isang piling sa database o ang katumbas -
anumang database gumagamit ito - upang makita ang user na ito may hindi bababa sa $ 100 sa kanyang account?
Kung gayon, pagkatapos ay sabihin ang lahat sa $ 100 at ibawas $ 100 mula sa kanilang balanse.
Ngunit siyempre kung mayroong maramihang mga machine dito o maramihang mga paraan ng inspecting
ang estado ng mundo na, ang bangko hanay ng mga arko, upang makita kung gaano karaming pera ang mayroon kang,
ipagpalagay na sa pamamagitan lamang ng pagkakataon ang machine sa kaliwa at kanan
parehong hinihiling na tanong sa halos parehong sandali sa oras.
>> At ito ay maaaring tiyak na mangyayari. ATM ay mga computer mga araw na ito.
Kaya kung ang machine sa kaliwa sabi, "Oo, mayroon kang hindi bababa sa $ 100,"
samantala ang machine sa kanan sabi, "Oo, mayroon kang hindi bababa sa $ 100,"
pagkatapos ay pareho sa kanila magpatuloy upang tapusin ang kanilang mga programa at aktwal na sabihin ang lahat ng $ 100
at sabihin, "Dati mayroon kang $ 200."
"Hayaan akong i-update ang variable na ngayon $ 100 na naiwan sa account."
Ngunit kung parehong sa kanila na naka-check ang iyong balanse sa account at nalaman na ito ay $ 200
at ang parehong sa kanila pagkatapos gawin ang matematika at sabihin 200-100,
ang mga machine na potensyal na sabihin ang lahat ng mga dalawang $ 100 bill sa bawat machine,
ngunit lamang sila na-update ang iyong balanse sa account sa kabuuan na $ 100.
Sa ibang salita, nagsagawa ang $ 200, ngunit dahil sila ay siniyasat ang estado ng mundo
nang sabay-sabay at pagkatapos ay ginawa ng isang desisyon na batay sa halaga na,
hindi nila maaaring gawin ang matematika sa huli tama.
Kaya sa isang bank sitwasyon masyadong gusto mo talagang magkaroon ng ilang mga uri ng lockout
sa gayon ay sa lalong madaling mo na masusuri ang estado ng ilang mga variable
na talagang mahalaga, tulad ng iyong balanse sa account,
hindi ipaalam sa sinumang iba pa na gumawa ng mga pagpapasya batay sa na hanggang sa ikaw ay tapos nang ginagawa ang iyong kakayanan,
kung saan sa kasong ito ay ang ATM sa kaliwa.
I-lock ang iba.
Maaari mong aktwal na makamit ang epekto sa loob ng ilang iba't ibang mga paraan.
>> Ang pinakasimpleng paraan sa MySQL ay isang linya ng SQL na ibinigay namin ka
sa detalye ng problema set na mukhang eksakto tulad nito.
Ipasok ang sa talahanayan - anumang ito ay tinatawag na - isang id, simbolo, at ibahagi, ang isang bilang ng mga pagbabahagi,
mga sumusunod na halaga, halimbawa.
Kung hindi mo pa basahin ang spec, ito ay isang halimbawa na kinasasangkutan ng kung paano mo pumunta tungkol sa
pagbili ng 10 pagbabahagi ng ito peni stock para sa Pangulo Skroob,
na user ID mangyayari ang bilang 7?
Nagsasabing INSERT SA talahanayan ang mga sumusunod na id, simbolo, at bilang ng mga pagbabahagi
ng 7, 'DVN.V', at 10.
Ngunit - ngunit, ngunit, ngunit - ang pangalawang linya ang mahalagang.
SA mga duplicate na KEY i-update ang pagbabahagi = pagbabahagi + halaga (pagbabahagi).
Kaya lubos misteriyoso-pagtingin sa unang tingin.
Ngunit ang katotohanan na ang SQL query na ito, kahit na ito bumabalot sa 2 linya sa,
1 mahaba ang query, nangangahulugan ito atomic
sa kamalayan na ang query na ito ay alinman sa pinaandar lahat ng sama-sama o hindi sa lahat.
At sa pamamagitan ng kahulugan ng MySQL, na kung paano sila ipinatupad sa query na ito.
Ito ay sa pamamagitan ng kahulugan sa manu-manong na katiyakan upang maisagawa ang lahat ng sabay-sabay o hindi sa lahat.
Ang pagganyak para sa ay ang mga sumusunod.
Kung sa kasong ito ikaw ay sinusubukan upang bumili ng 10 pagbabahagi ng stock,
ito uri ng ang parehong kuwento bilang gatas, uri ng ang parehong kuwento bilang ng ATM.
>> Kung gumawa ka ng pagkakamali ng hindi gamit ang syntax na ito
ngunit sa halip ng pagpili mula sa database upang makita kung gaano karaming pagbabahagi ng ito peni stock
ang Pangulo Skroob mayroon, at ipagpalagay na siya ay may 10 pagbabahagi,
at pagkatapos ay ang ilang split ikalawang mamaya pagkatapos mo gawin ng isang update statement,
na isa pang pahayag sa SQL na nagsasabing magpatuloy at magdagdag ng 10 pang pagbabahagi
sa kanyang kasalukuyang 10 upang ang perpektong kabuuang ay 20,
ang problema ay dahil sa mga database system ngayon at dahil sa computer na ngayon
mayroon kang maramihang mga processors, maramihang mga core -
sa ibang salita, ang mga computer ay maaaring literal na paggawa ng maramihang mga bagay nang sabay-sabay -
ang walang garantiya na ang iyong piliin at iyong update sa kasong ito
mangyari muli upang i-back.
Kaya masamang sitwasyon ay gagawin mo ang piliin ang
upang makita kung gaano karaming mga pagbabahagi ng ito peni stock ay magkaroon ng Skroob,
at pagkatapos ay sa pamamagitan lamang ng pagkakataon ng isa pang database query ay pinaandar -
siguro ang Skroob nito sa ibang window ng browser sinusubukan upang bumili ng 10 pagbabahagi
sa isa pang window sa kabuuan, tulad ng ATM -
at ipagpalagay na ang isa pang query ay nakakakuha sa pagitan ng piliin ang at ang update.
Ito ay maaaring maging kaso na Skroob ngayon loses ilang bilang ng mga pagbabahagi
dahil ang proseso ng isa pang inspecting ang estado ng kanyang mundo,
o siya ay nakakakuha ng higit pang pagbabahagi sa dapat niyang.
Hindi namin ay pumunta sa particular ng eksakto kung ano ang mga partikular na mga linya ng kuwento ay,
ngunit ang punto ay kung mayroon kang mag-check ng mga variable na halaga at pagkatapos ay gumawa ng desisyon,
kung may panganib ng ibang tao sa paggawa ng isang bagay sa pagitan ng mga 2 pahayag,
na maaaring mangyari sa multiprocessor system, sa multicore system,
computer na may kakayahang gawin ng maraming mga bagay nang sabay-sabay, masamang bagay ay maaaring mangyari
tulad ng bank account debit mali, pagbili ng dalawang beses ng maraming gatas,
o sa kasong ito maling bilang ng mga pagbabahagi.
Ngunit may isang mas madaling paraan upang isipin ang tungkol sa.
>> Ito ay lumiliko out na sa SQL Sinusuportahan din, kung tama mong i-configure ang iyong talahanayan,
isang bagay na tinatawag transaksyon, na Gusto ko magtaltalan ay talagang mas madali upang maunawaan
kaysa ito, ngunit ito ay hindi isang 1-Liner, kaya ito ay talagang isang kaunti pa kasangkot.
May literal isang pahayag sa SQL tinatawag START TRANSAKSYON.
Tulad lamang ng kung piliin, UPDATE, INSERT, TANGGALIN, at SUMALI at ng grupo ng mga iba,
may mga keyword tulad START TRANSAKSYON.
At kung ano ang mong gawin sa konteksto ng pset 7 -
hindi mo na kailangang gawin ito para sa pset 7; Pagwawaksi tahasan ito bilang hindi kinakailangan,
ngunit para sa mga panghuling proyekto maaari itong maging kapaki-pakinabang -
kung tumawag ka ng isang query ng START TRANSAKSYON at pagkatapos ay isa pang query
at isa pang query at pagkatapos ay isa pang, isa pa, at isa pa,
mga query na iyon ay hindi aktwal na ipatupad ang hanggang tawagan mo ang SQL pahayag commit,
sa puntong, kung ito ay ang 2 pahayag o 20 mga pahayag, ay lahat ng mga ito ay ipatupad ang sabay-sabay,
na nangangahulugan na walang sinuman ang maaaring sinasadyang bumili ng masyadong maraming gatas o debit ng masyadong maraming pera
o bumili ng masyadong maraming pagbabahagi dahil ang lahat ng iyong mga query sa execute
bumalik upang i-back i-back upang i-back.
At ito ay sobrang mahalaga, lalo na kapag ikaw ay paggawa ng isang bagay tulad nito.
Ito ay isang arbitrary na halimbawa na nagsasabing natin i-update ang bank account
sa pamamagitan ng pagtatakda ng isang balanse na katumbas ng balanse - $ 1000 kung saan ang account number ay 2.
At pagkatapos ay ang ikalawang pahayag ay ngayon hayaan deposit na $ 1000
sa ibang tao ang bank account na ang account number ay 1.
>> Sa ibang salita, ito ay isang perpektong halimbawa ng kung saan nais mong tiyakin
na ang parehong mga pahayag na ito ay mangyari o hindi sa lahat ng
dahil kung hindi man customer ay pagpunta upang screwed
at ikaw ay pagpunta sa kanilang pera at hindi magdeposito ito sa ibang lugar,
o bangko ay pagpunta upang screwed kung saan ka na magdeposito ng pera
ngunit hindi aktwal na ibawas ang mga ito mula sa account ng user.
Kaya gusto mong pareho sa kanila upang maisagawa nang.
Kaya sinasang-ayunan ang mga transaksyon ng mundo.
Kaya, na ang isang bagay upang panatilihing sa likod ng iyong isip,
hindi kaya magkano para sa mga layunin ng isang pangwakas na proyekto,
ngunit kung nais mong dalhin ang iyong huling proyekto sa isang lugar,
kung nais mong simulan ang ilang mga kumpanya sa paligid nito,
kung nais mong upang malutas ang problema ng ilang mga grupo ng mag-aaral sa campus
at aktwal na magkaroon ng isang live na, aktibong website, ito ay ang uri ng banayad na bug na maaaring lumabas dahil
kung hindi mo lubos na tingin sa pamamagitan ng kung ano ang maaaring mangyari kung ang 2 tao
sinusubukang i-access ang iyong website sa literal ang parehong sandali sa oras,
kung saan ang kanilang mga query na maaaring kung hindi man ay interwoven.
>> Handa na para sa ilang JavaScript, isang teaser nito?
Ito ay aming huling wika para sa semestre. Ayos lang.
Thankfully, ang JavaScript ay mukhang napaka, napaka, na halos kapareho sa 2 wika, C at PHP,
tapos kami na sa gayon ay malayo.
Walang JavaScript sa pset 7, ngunit ito ay isang hindi kapani-paniwalang na kapaki-pakinabang na tool
pagdating sa paggawa ng mga web-based na panghuling proyekto o talagang lamang web programming mas pangkalahatang.
Kaya isang mabilis na pangkalahatang-ideya ng isang bagay na tinatawag DOM.
Narito ang isang napaka-simpleng web page na talagang lamang sabi kumusta, mundo
parehong sa pamagat at sa katawan.
Bilang indentation ay nagmumungkahi para sa ilang oras,
doon ay talagang isang hierarchy sa mga pahina ng web.
Maaari kong iguhit ang parehong snippet ng HTML bilang isang puno,
iniisip pabalik sa aming mga talakayan ng mga istraktura ng data sa C, tulad ng sumusunod.
Mayroon akong ilang mga espesyal na root node tinatawag dokumento node,
at kami na makita ang analog ng ito sa JavaScript sa sandali lamang.
Ang unang anak at lamang na anak ng na sa kasong ito ay ang mga tag na HTML.
Walang direktang pagmamapa ng doctype.
Iyon ay isang espesyal na bagay, kaya dapat balewalain lang namin ang pagdating na ito DOM,
ito Dokumento Bagay Modelo puno.
Pansinin na ang mga HTML tag, na kung saan ko na itinatanghal mang bilang isang parihaba,
may 2 bata: ulo at body.
>> Yaong ay katulad iginuhit bilang mga parihaba.
Ay makahulugang pictorially na ulo sa kaliwa ng katawan.
Implikasyon ay na ulo mauna sa tree.
Kaya ang aktwal na pag-order sa isang puno kapag gumuhit ka ito tulad nito,
kahit na ang mga hugis at watnat arbitrary.
Head samantala ng isang bata na tinatawag na pamagat,
at pamagat aktwal ay may sariling anak, na "hoy, mundo",
kung saan ko sadyang iginuhit bilang isang hugis-itlog sa dito upang gawin itong bahagyang naiiba mula sa parihaba.
Mga parihaba na ito ay elemento, samantalang kumusta, mundo ay talagang isang tekstong node.
Kaya ito ay isang node sa tree, ngunit ito ay isang iba't ibang mga uri ng node
kaya iginuhit ko ito mang naiiba.
Katulad nito ang katawan magkaroon ng anak na tinatawag na kumusta, ang mundo pati na rin,
kaya ibang node kahit hindi sila coincidentally parehong teksto,
ngunit ko ang iginuhit ito gamit ang parehong hugis. Kaya na nagmamalasakit?
Well, kung ano ang magaling tungkol sa HTML na ito ay na ito hierarchical kalikasan.
At kung ano ang magaling tungkol sa JavaScript at partikular na mga aklatan na malayang magagamit
at sikat na tulad ng jQuery, maaari kang mag-navigate ang mala-punong balangkas upang amazingly madaling.
Anumang ng ang mga bagay na aming ginawa sa C na may mga payo at mga puno ng traversing at recursing sa node
kaliwang bata sa kanang anak, ang lahat ng isang biglaang maaari naming pag-uri-uriin ng mang-ahas
bilang amazingly nakapapaliwanag kung hindi isang bit nakakabigo
ngunit hindi halos isang mahusay na paraan upang pumunta tungkol sa programming.
At iba pa na may mga mas mataas na antas ng wika tulad ng JavaScript
magagawa naming i-navigate ang puno mas intuitively.
>> At sa katunayan syntax ay medyo pamilyar.
Kung hindi mo pa nakita ang JavaScript bago, ito ay talagang maganda ang reference
mula sa Mozilla na mga tao, ang mga tao na gumawa ng Firefox,
kaya huwag mag-atubiling upang mag-browse sa iyong kaginhawaan.
Ano ang makikita mo - at ang mga slide na ito ay magkapareho sa kung ano ang ginamit namin sa iba pang mga araw -
katulad, ang pangunahing ay nawala.
Kaya kapag sumulat ka ng isang programa sa JavaScript, ay hindi pangunahing function na.
Mo lamang simulan ang pagsusulat ng code.
Ngunit isang pangunahing pagkakaiba sa pagitan ng JavaScript at C at PHP
ay na kung saan C at PHP sa gayon malayo ay pinaandar server side
ng appliance sa kasong ito o higit pa sa pangkalahatan sa pamamagitan ng isang server,
JavaScript sa pamamagitan ng disenyo ay kadalasang isinasagawa sa pamamagitan ng isang browser.
Sa ibang salita, maaari mong isulat ang code ng JavaScript, dahil hindi namin sa,
sa isang server sa appliance, ngunit isama mo ito kasama ng iyong HTML, bukod sa iyong CSS,
sa iyong mga GIF at iyong mga PNGs at sa iyong mga JPEG
kaya na kapag ang user ay bumisita sa iyong web page, kung gumagamit ka ng JavaScript,
na JavaScript code ay mula sa server sa browser,
at ito ang browser na aktwal na executes ito.
Kaya ito ay may makahulugang mga implikasyon para sa kahit intelektwal na pagmamay-ari.
Uri ng ulok sa kahit na sa tingin tungkol sa pagprotekta ng iyong IP pagdating sa JavaScript code
dahil sa pamamagitan ng likas na katangian ng wika ito ay makakakuha pinaandar karaniwang browser gilid.
>> Maaari mong tumaranta ito, na nangangahulugan na maaari kang magsagawa ng tumingin ito mabaliw at pangit
na walang whitespace, kalagim-lagim variable na pangalan, upang gawin itong mas mahirap para sa mga tao upang nakawin ang iyong IP,
ngunit ang key na ito ay pinaandar browser gilid.
Kahit bilang isang bukod JavaScript ay maaaring magamit bahagi ng server,
pinaka-karaniwang pagkakataon ng paggamit ngayon ay pa rin sa browser.
At narito ang kung ano ang mukhang. Narito ang isang kung-tao kung-tao bumuo tulad ng C, tulad ng PHP.
Dito ay isang Boolean expression kapag ikaw "o" 2 bagay.
Dito ay kapag ikaw "at" 2 bagay.
Narito ang isang lumipat statement, na kung saan ay katulad sa PHP
na maaari mong lumipat sa iba't ibang mga uri ng mga halaga.
Loop ay parehong may para sa loop dito, na kung saan ay nakaayos identically sa kung ano ang nasaksihan namin bago.
Habang loop; Mayroon kaming gawin habang loop.
Variable, napaka bahagyang naiiba.
Mo idineklara ng mga variable tulad ng gagawin mo sa PHP at C,
ngunit katulad JavaScript mahina-type.
Hindi ka tumukoy ng int o Float o string o anumang bagay tulad na karaniwang.
Maaari mong tukuyin var.
Hindi mo upang tukuyin ang var, ngunit ito ay may mga implikasyon kung wala ka.
Karaniwan kung ligtaan mo var, hindi mo sinasadyang lumikha ng isang global variable sa halip ng mga lokal na.
Kaya hayaan mo akong magpanukala na halos palaging lamang sabihin var at pagkatapos ay ang pangalan ng variable.
Ito ay hindi isang uri, lamang var para sa variable.
Ito ay isang halimbawa, kung ito ay ang 123 o "hoy, mundo".
Array ay kasalukuyan at syntactically na katulad sa PHP.
Sasabihin kong var numero at pagkatapos ko bang gamitin muli ang mga square bracket upang idedeklara ang isang variable
na uri ng array na may mga partikular na numero sa mga ito na pinaghihiwalay ng mga kuwit.
At pagkatapos ay sa wakas, ito ay ang isa lamang na talagang ganito ang iba't ibang.
Manariwa sa diwa na sa PHP namin ang nagpatupad ng isang nag-uugnay array para sa isang mag-aaral
tulad Zamyla na maaaring magmukhang ganito, kung saan ang variable ay tinatawag na mag-aaral.
Ang mga square bracket ibig sabihin dito ay isang array.
>> Ang katotohanan na hindi ko ginagamit numeric mga indeks ngunit string - id, bahay, at pangalan -
nangangahulugan na ito ay isang nag-uugnay array,
at ang mga arrow na may equals sign at ang angled bracket
nangangahulugan na ang susi ay "id", ang halaga ay 1;
key ay "bahay", ang halaga ay Winthrop House;
Ang susi ay ang "pangalan", ang halaga ang Zamyla Chan.
Kaya may 3 susi sa loob ng ito nag-uugnay array, ang bawat isa ay may sariling halaga.
Iyong nakita namin na sa pset 7, o sa lalong madaling panahon, sa JavaScript parehong ideya,
ngunit ito ganito ang hitsura.
Kaya var mag-aaral - walang dollar sign at hindi pagbanggit ng uri pa rin ngunit var -
katumbas at pagkatapos ay buksan ang kulot tirante dahil sa JavaScript kapag mayroon kang pangunahing pares ng halaga,
aktwal mong gamitin ang isang bagay na tinatawag na isang bagay.
At ang mga mo na ay tumagal APCS o ang tulad ng maaaring isipin ang mga bagay mula sa Java
o katulad na mga wika.
JavaScript ay hindi Java, una sa lahat.
Ito ay sinadya na disenyo ng desisyon taon na ang nakakaraan sa magpatumba off ang ibang bagay na sikat na,
ang pangalan nito, kahit na ito ay walang saligan na may kaugnayan sa Java mismo.
JavaScript ay may mga bagay, at lumikha ka ng mga ito sa pamamagitan ng paraan ng kulot suhay pagtatanda.
Objects sa JavaScript ay medyo mas katumbas sa mga nag-uugnay array sa PHP
pagdating sa pag-iimbak ng mga data sa loob ng mga ito.
>> Ngunit mas powerfully sa JavaScript, maaari mong iugnay napaka madaling function
sa loob ng isang bagay, at bagaman maaari mong gawin ito sa iba pang mga wika,
ito ay lubos isang karaniwang paradaym, dahil kakailanganin namin nakikita.
Sa maikli, ang bagay na ito ay kumakatawan sa isang mag-aaral, na lalo Zamyla,
at katulad conceptually, lamang syntactically ibang mula sa.
Natin ang aktwal na gamitin ang JavaScript sa isang file.
Lumiliko out may script tag.
Nakakita kami ng estilo tag at nakakita kami ng iba pang mga tag na HTML.
Ang script tag na aktwal na maglaman ng ilang JavaScript code.
Hayaan akong pumunta sa appliance kung saan mayroon kaming ilang mga source code na pre-ginawa.
Hindi ko pa ito na-post pa sa website, ngunit ko na pagkatapos ng klase.
Natin buksan up na ito isa, blink.html.
Bumalik sa 1990s, ay literal isang HTML na tag na tinatawag na magpikit tag,
at ito ay isa ng ang pinaka-kamangha-mangha baldado tag sa Internet
kung saan gusto mong bisitahin ang ilang 1990s estilo ng pahina ng web at magsisimulang makakita ng teksto na kumikislap tulad nito,
ang mga resulta ng tag ng makwis, na teksto pagpunta tulad nito.
Isa ng ilang mga beses kung saan ang mundo ay aktwal na sumang-ayon sa isang pamantayan ng web,
lahat ng tao sa buong board pinatay ang magpikit tag ilang taon na ang nakalipas.
Ngunit maaari naming muling ibalik ito sa JavaScript bilang isang demonstration ng kapangyarihan na mayroon ka
kapag maaari mong magsulat ng isang programa sa loob ng isang web page.
Una sabihin laktawan sa ibabaw ng bagong bagay-bagay at tumutok lamang sa ang lumang.
>> Narito ang lumang bagay sa halimbawang ito.
Mayroon akong isang HTML tag, tag ng ulo, at ng isang pamagat na tag.
Pagkatapos Mayroon akong body tag dito na may div, na manariwa sa diwa ay isang parihabang division ng pahina
Ibinigay ko ang isang natatanging ID mang "greeting" sa,
lamang kaya mayroon akong isang paraan ng natatanging nagre-refer dito, na may ilang simpleng teksto:
kumusta, mundo.
Ngayon hayaan mo akong mag-scroll pataas sa tuktok ng file na ito at makita kung ano ang bago.
Ang unang bagay na ang bago up tuktok ang script tag,
at sa loob ng paunawa ng script tag ko na ipinahayag ng isang function.
Idedeklara ang isang function sa JavaScript, medyo katulad sa PHP,
literal ka magsulat ng function na ang pangalan ng pag-andar, panaklong,
at marahil ilang mga argumento kung ito ay tumatagal ng anumang.
Pagkatapos ko Mayroon aking kulot suhay gaya ng dati, at ngayon ay mayroon kaming ilang mga bahagyang bagong code,
ngunit sabihin makita kung ano ang ibig sabihin nito ay.
Kaya var div, ito lamang ay nangangahulugan na bigyan ako ng isang variable na tinatawag na div.
Ko tinatawag na ito foo, ngunit gusto ko ito sa tinatawag na div
para sa mga dahilan na maging malinaw sa isang segundo.
At ito lumiliko sa JavaScript - at ito JavaScript code na naka-embed sa aking pahina ng web -
may isang espesyal na global variable ng uri na tinatawag na dokumento.
JavaScript ay sa katunayan isang object-oriented wika.
Hindi namin pumunta sa detalye sa 50 sa kung ano ito ay nangangahulugan na,
ngunit sa ngayon malaman na ang isang bagay ay medyo tulad ng isang struct.
Tulad ng nakita namin ang paraan pabalik kapag sa isa sa pinakamaagang problema nagtatakda
kung saan namin maglagay ng maraming impormasyon sa isang struct,
katulad ay idokumento ang isang espesyal na struct na may browser,
ay may anumang web page. Ito ay hindi isang bagay ko nilikha.
Sa loob ng dokumentong ito istraktura, bagaman, mayroon kang hindi lamang data
ngunit mayroon ka ring mga function.
>> At anumang oras mayroon kang isang function sa loob ng istruktura, sa loob ng isang bagay,
ito ay tinatawag na paraan ng isang. Ngunit ito ay ang parehong bagay.
Ay ang paraan ng isang function na lang kaya ang mangyayari sa loob ng iba pa.
Kaya ito ay nangangahulugan na ito espesyal na global variable na tinatawag na dokumento
ang function na tinatawag na ng getElementById na literal na ginagawa na.
Ito ay makakakuha ka ng isang elemento mula sa DOM, puno ng Modelo ng Dokumento Bagay,
na ang ID ay sa pagbati kaso na ito.
Sa ibang salita, ang lahat ng oras na namin na ginugol sa istraktura ng data ay sa pag-play dito.
Ang larawang ito ng isang DOM na nagkaroon kami ng ilang sandali ang nakalipas,
kahit na ang pahina ay isang maliit na naiiba, kung ako ay nagkaroon ng isang div sa larawan na ito,
ano document.getElementById ay bumalik sa akin ay epektibong isang pointer
sa parihaba sa tree, isang reference sa parihaba sa tree.
Kaya na kung ano ang ibig sabihin nito upang aktwal na tumawag sa isa sa mga function.
Sa kasong ito muli ng div. Ito ay hindi isang katawan o ng isang pamagat.
Kaya sabihin makita kung ano pagkatapos kong gawin na ang div ito ngayon na mayroon akong ito sa loob ng ito variable na tinatawag na div.
Ito lumiliko out na may JavaScript mayroon kang kakayahan upang baguhin ang CSS ng iyong pahina dynamic.
Hanggang ngayon, ang lahat ng CSS tapos kami na, kahit na limitado, sa mga katangian ng estilo,
o kung saan ang ibang tao na namin ilagay ang CSS?
Uri ako ng pinahaba ang buntot na ang isa. Sa estilo tag sa tuktok ng file.
O third lugar ay sa?
>> Isang panlabas na file, isang bagay. Css.
Kaya mga ang 3 lugar tapos kami na CSS sa gayon ay malayo,
ngunit ang catch ay mahirap namin ang code lahat.
Napagpasyahan mo habang ikaw ay kalapati sa pset 7, napagpasyahan naming bago panayam kung ano ang aming CSS ay.
Ngunit kung gusto mong baguhin ang iyong CSS, maaari mong aktwal na gawin iyon
sa sandaling mayroon kang isang aktwal na wika ng programming.
CSS, HTML - hindi mga programa wika. JavaScript.
Kaya ito lumiliko out na sa lalong madaling panahon bilang mayroon kang isa ng mga parihaba mula sa puno
na tinatawag na DOM, ito ay mismong ilang mga data sa loob nito.
Kaya sa div ko lang grabbed mula sa puno ay may kung ano ang makikita namin tumawag sa isang ari-arian sa loob nito
tinatawag na estilo, at ang estilo ng ari-arian ay may sa mismong isang ari-arian na tinatawag na kakayahang makita.
Gusto kong malaman ang mga ito lamang sa pamamagitan ng pagtingin manu-manong gumagamit ng CSS.
Lumiliko out may isang ari-arian ng visibility ng CSS na ginagawa kung ano ang nakasulat.
Gumagawa ng isang bagay na nakikita o hindi, nakikita o hindi.
At kung paano gawin mo na ito.
Ako humihingi programa kung ang pagpapakita ng div na ito ay nakatago,
ano ang gagawin ko baguhin ito sa? Nakikita.
Iba Pa kung ang pagpapakita ng pahinang ito ay hindi nakatago, lohikal ko gawin ito nakatagong.
Mayroon akong walang ideya kung bakit ito ay nakikita at nakatago at hindi nakikita at di-nakikita.
Ito ay isang mahinang desisyon ng disenyo sa kahabaan ng paraan.
Ngunit ang mga katunayan opposites sa CSS: nakikita at nakatago.
Ang lahat ng ito ay nangangahulugan itong baguhin ang CSS ng aking mga file on at off, on at off
para sa partikular na div.
Ngunit muli, ito ay isang function na tinatawag na kumurap. Kapag ang kumurap function na tinatawag?
Ito lumiliko out na may isa pang espesyal na global variable na tinatawag na window,
katulad sa espiritu sa dokumento, ngunit kung saan ang dokumento ay tumutukoy sa iyong web page,
tulad ng puno ng DOM, ang HTML na iyong ipinadala mula sa server,
window ay tumutukoy sa chrome sa paligid nito, ang address bar, ang mga bar ng pamagat,
at ang lahat ng na mga bagay-bagay sa paligid ng iyong web page.
>> At lumiliko ito na ang window ng bagay ay may espesyal na function na sa loob ng tinatawag na setInterval
na ginagawa kung ano ang nakasulat.
Ito ay magtakda ng isang agwat - sa kasong ito bawat 500 millisecond -
at, tumagal ng hula, kung ano ang ito pagpunta sa gawin ang bawat 500 millisecond?
Ito ay upang maisagawa na function na kumurap.
At kung ano ang magaling dito ay na maaari naming nagawa ito sa C kahit hindi namin ginawa.
C ang isang bagay na tinatawag payo ng function na kung saan maaari mong ipasa ang mga function sa paligid
bilang argumento.
Katulad nito sa JavaScript, maaari mong pumasa sa pangalan ng isang function sa isa pang function na.
At pansinin kung ano ang ako ginagawa. Hindi ako ginagawa ito.
Kung ko bang ilagay ang mga panaklong pagkatapos ng magpikit, na ibig sabihin tawagan ang function na sa magpikit.
Kung ligtaan ko ang mga ito, na nangangahulugang dito magkukurap function na
kaya setInterval na maaaring tumawag ito bawat 500 millisecond.
Kaya ang resulta, mabangis bagaman ito ay, na kung pumunta ako sa localhost at pumunta sa blink.html,
Ako ngayon ito mangyari muli at muli.
At kung ako aktwal Siyasatin ang Elemento, sabihin makita kung maaari naming makita ito.
Hayaan akong Siyasatin Element, ipaalam sa akin na mag-scroll pababa ng kaunti lamang,
hayaan mo akong pumili ng mga Mga Elemento ng sa paglipas dito, at mapansin ang DOM sa loob ng Chrome inspector.
Literal ito pagbabago pabalik-balik bawat 500 millisecond.
Kung pumunta kami sa aming kaibigan Nate,
kung sakaling nagtaka kung paano ito gumagana, katulad ideya na may isang agwat,
ngunit Nate ay aktwal na paggawa ng epektibong paggamit ng kulay sa partikular na kasong ito dito.
Kaya kung ano ang higit pa namin ang aktwal na gawin sa mga ito?
Natin buksan ang isa pang halimbawa at subukan ang isang bagay
na programa kahit na mas kapaki-pakinabang kaysa sa paggawa ng mga bagay sa magpikit.
Hayaan akong pumunta sa aming mga form ng direktoryo ngayon at pumunta sa form0.
Ito ang ugliest na posibleng form na maaari kong makabuo ng,
at ipaalam sa akin lamang ipakita sa iyo kung ano ang mukhang sa isang browser.
>> Hayaan akong pumunta sa localhost / form, at ito ay form0.
Ito ay isang napakabilis na pangit HTML form na may ilang mga patlang para sa email, para sa password,
password, at pagkatapos ay isang maliit na checkbox upang sumang-ayon sa ilang mga tuntunin at kundisyon.
Catch ay kung bisitahin ko ang form na ito at hindi ko nais upang bigyan ka ng aking email address,
Hindi ko nais upang sumang-ayon sa mga tuntunin at kundisyon siguro, ang maaari kong i-click ang Magrehistro
at ito ay nagbibigay-daan sa akin sa pamamagitan ng anumang paraan.
Nangyayari ito upang isumite sa bobo PHP file na tinatawag na dump.php.
Lahat ng ito ginagawa ay i-print ang mga nilalaman ng $ _GET lamang para sa mga layuning pang-diagnostic.
Iyon ay kung ano ang isinumite ng user ngayon lang.
Ngunit ipagpalagay na aktwal na namin nais na patunayan ang pagsusumite ng form ng gumagamit.
Hayaan akong pumunta sa bersyon 1.
Ito ay form1.html. Hitsura aesthetically lang ng masama, ngunit mapansin kung paano magarbong ito ay.
Kung iki-click ko Magparehistro walang cooperating, ako yelled sa.
"Dapat mong ibigay ang iyong email address."
Ayos lang. Kaya hayaan mo akong subukan na. Kaya malan@harvard.edu. Hindi ko kailangan ng password.
Magrehistro. "Dapat kang magbigay ng isang password." Ayos lang.
Kaya ako magbigay ng password ng pulang-pula. Magrehistro.
"Ang mga password ay hindi tumutugma." Mayroon akong ngayon type sa krimson dito.
Ko aksidenteng naka-check na. Magrehistro.
"Dapat kang sumang-ayon sa mga tuntunin at kundisyon." Ayos lang. Sumang-ayon doon. Magrehistro.
At ngayon ito ay nagpapakita sa akin ang diagnostic output doon.
>> Kaya kung ano lang nangyari?
Namin ay ang kakayahan na ito upang patunayan ang pagsusumite ng form.
Sa katunayan, kung ginawa mo ang dive sa pset 7, ang isang function na humihingi ng paumanhin
na ginagawang mas kaakit-akit madaling sumigaw sa user na may isang mensahe sa screen.
Gumagamit ako ng isang bahagyang naiiba mekanismo, ang alerto function na,
na kung saan ay hindi isang function na smiled kapag dahil ito ay napaka-pangit na mga mensahe ng user.
Ngunit sabihin makita kung ano ang ako ginagawa dito.
Na ito ay form1.html, at mapansin na mayroon akong ilang medyo pamilyar syntax:
body tag, tag ng form na, attribute ng pagkilos, paraan ng attribute.
Ngunit mapansin Ibinigay ko ang aking form sa isang natatanging ID para sa kaginhawaan.
Pagkatapos Mayroon akong isang email na field na ang uri ng teksto,
patlang ng password na uri ng password, pagkumpirma field na ang uri ng password,
at pagkatapos ay ang isang checkbox na ang pangalan ay kasunduan sa paglipas dito, i-type ang checkbox.
At pagkatapos Mayroon akong isumite pindutan.
Ngunit mapansin sa itaas kung ano ang mas mayroon akong.
Una sa lahat, may isa pang paggamit ng tag ng script.
Kung mayroon kang ilang mga code ng JavaScript sa isa pang file, tulad ng may CSS maaari mong isama ito.
At gawin mo na may script pinagmulan, at pagkatapos ay mapansin ako pagkonekta tila
sa googleapis.com sa isang mahabang landas ngunit na ang pangalan ng file na nagtatapos sa jquery.min
para sa minimum. js.
jQuery ay sobrang sikat na library para sa JavaScript na lang ginagawang JavaScript
ang lahat ng mga mas user-friendly gamitin.
Epektibo ito ay naging isang talaga pamantayan.
Kaya kahit na kung ano ang ikaw ay tungkol sa upang makita ay hindi purong JavaScript per se,
ito ay isang library sa tuktok ng JavaScript tulad ng CS50 library ay isang layer
sa tuktok ng mababang antas na C code; katotohanan ay halos lahat ng tao sa Internet ay gumagamit ng.
Kaya ito ay hindi pagsasanay gulong. Ito ay pinakamahusay na magsagawa ng mga araw na ito.
Ngayon mapansin ibaba na ang aking sariling script tag, at pansinin kung ano ang nagawa ko na dito.
Ito lumiliko out na jQuery ang isang bagay ng kaunti fancy.
JavaScript ay may mga palatandaan ng dolyar, ngunit ang mga ito ay walang kahulugan.
>> Ito ay tulad ng sulat A o B o C.
jQuery ay lamang pinagtibay ang convention o uri ng inilatag claim na ang katotohanan
na $ kanilang espesyal na simbolo.
Ito sa lalong madaling-load mo ito global na JavaScript file dito na may tag ng script,
mayroon kang access sa isang espesyal na global variable na tinatawag na $.
Ito ay mas maayos na tinatawag jQuery, ngunit na hindi mukhang halos bilang sexy ng $.
Ngunit $ ay walang espesyal na kahulugan. Sa PHP may espesyal na kahulugan.
Ay upang magkaroon ang mga ito sa harap ng isang variable.
Ito ay isang sexy bagay na kinuha nila sa.
Ano ang nangyayari sa dito?
Mapansin ako pagpasa sa jQuery function na aking global variable na dokumento
at pagkatapos ay ako pagtawag. handa.
Ano jQuery mahalagang ay ay nagpapahintulot sa iyo na tumagal ng ilang mga banilya JavaScript bagay
tulad ng dokumento ng bagay, window ng bagay,
at kung kayo na ipasa ito sa jQuery function na -
at muli, maging malinaw, ito ay isang function na tinatawag jQuery -
kung ano ang ginagawa nito ay bumalik sa iyo ng isang espesyal na bersyon ng dokumento
na may higit pang mga pag-andar na nauugnay dito.
Kaya sa raw JavaScript ay hindi handa na function na,
ngunit kung pumasa ka dokumento sa jQuery function na una,
bumalik sa iyo ng isang espesyal na bersyon ng mga bagay ng dokumento
na may higit pang mga magarbong mga tampok.
At na kung bakit ito gusto ng mga tao. Ito lamang ang gumagawa ng mga bagay na madaling gawin, hindi namin tungkol sa upang makita.
Kaya kung ano ang ang linya ng code na ibig sabihin nito?
Ang linya ng code dito ay nangangahulugan na kapag ang dokumento ay handa na -
sa ibang salita, kapag ang browser ay tapos na basahin ang file na ito itaas hanggang sa ibaba -
sige at isagawa ang mga sumusunod na function na.
Ano ang talagang kawili-wili sa JavaScript - at PHP ay may ito pati na rin -
anonymous na function.
Sa JavaScript, maaari mong ipinapahayag ng mga function na walang pangalan ngunit gawin nilang magkaroon ng katawan.
Pansinin kung ano ang nangyayari dito.
>> Ito ay isang function na tinatawag na handa, at ito ay nangangahulugan na gawin ang mga sumusunod
kapag ang buong web page ay handa na, kapag ang lahat ng ito ay basahin in mula sa server.
Ano ang gusto mong gawin? Gusto kong magsagawa ng isang tipak ng code.
Pansinin na hindi namin nais na i-execute ang code na ito agad.
Kung tinanggal ko na ito, ito ay nangangahulugan agad simulang execute ang mga linya ng code.
Ngunit ang katotohanan na ako sinasabi hindi, hindi, hindi, I-wrap ang mga ito sa isang hindi nakikilalang na function na tulad nito
paraan ay hindi nagsagawa pa ito; tumawag ito kalaunan.
Nakita namin ito ng ilang sandali ang nakalipas sa aming nakaraang halimbawa ng anyo.
Ano ang function kami tatawag sa kalaunan, 500 millisecond mamaya? Magkukurap.
Kaya ang parehong ideya.
Muli, kahit na ang hitsura ng kaunti kakaiba, lang ang dadalhin sa ngayon sa pananampalataya
na idedeklara ang isang hindi nakikilalang na function na tinatawag na kalaunan,
mo lamang isulat ang function na () {
Kaya kung ano ang code ay namin pagpunta upang maisagawa kalaunan? Ang mga sumusunod na.
Ito masyadong mukhang isang maliit na bago, ngunit ito ay nangangahulugan na dito ang jQuery function na,
at ito ngayon ay isang shortcut.
Ang snippet ng HTML sa ibaba ng screen ng kurso ay may ilang puno na representasyon.
Hindi ito. Ang pahinang ito ay mas kawili-wiling kaysa ito hoy, mundo halimbawa.
Ngunit ang ilang puno na tumutugon sa ang HTML.
Ito ay isang sakit sa ulo upang ipatupad ang ilang mga uri ng recursive function na
magsimula sa root node at pagkatapos ay hanapin ang node na ang ID ay pagpaparehistro.
Kaya kung ano ang jQuery ginagawang sobrang madali para sa amin ay literal na ito.
Sige at makakuha ng sa akin ang anumang div o anumang anyo, anumang HTML elemento
may isang ID ng pagpaparehistro.
Ito ay katumbas sa document.getElementById ('pagpaparehistro').
>> Bakit ang mga tao tulad ng jQuery?
Dahil ito ay mas maikli i-type. Ngunit iyon lamang ang lahat ng ito ay. Ang parehong ideya.
Kumuha ng sa akin ang tag na ang ID ay pagpaparehistro.
At kapag na tag, na mangyayari sa isang form, ay isinumite,
sige at isakatuparan ang code na ito.
Kaya sabihin isa tumingin ngayon sa kung paano namin ginagawa form ng pagpapatunay.
Syntax ay tinatanggap na misteriyoso sa unang, ngunit kung anong nangyayari sa?
Kung ang linya ng code ay totoo, ako pagpunta sa sumigaw sa gumagamit upang magbigay ng kanyang email address.
Kaya ano ang linya ng code?
$ Ay nangangahulugan jQuery. Ngayon mapansin ito.
Ito ay uri ng tulad ng CSS.
Kung ikaw dived sa CSS, malalaman mo na ang ibig sabihin nito ay ang elemento na ang ID ay pagpaparehistro.
Espasyo nangangahulugan makahanap ng isang bata o inapo ng pagpaparehistro na ang pangalan ay input.
At pagkatapos ay ang bagay na ito sa square bracket ay isang maliit na filter.
At kahit na ito mukhang misteriyoso, ito ay nangangahulugan lamang pumunta sa ang form na ang ID ay pagpaparehistro,
pumunta sa loob ng elemento ng input ng na na ang pangalan ay email,
at pagkatapos ay makakuha ng ang halaga nito, anumang ang halaga nito ang mangyayari upang maging -
asdf kung na ang lahat ko-type o malan@harvard.edu kung na ang ako-type.
Kaya kung ang halaga ng email patlang ang form == walang, sumigaw sa user.
Iba Pa kung ang halaga ng patlang ng password == walang, sumigaw sa user.
>> Iba Pa kung ang halaga ng patlang ng password ay hindi katumbas ng halaga ng patlang ng pagkumpirma,
kung saan ang iba pang mga elemento ng anyo, sumigaw sa user.
At pagkatapos ay sa wakas - at ang isang ito ay may ilang mga bagong syntax ng sarili nitong,
ngunit sa sandaling nakita mo ang mga ito, hindi bababa sa isang maliit na mas makatwirang -
tao kung ang form na ang ID ay pagpaparehistro ay isang elemento ng input na ang pangalan ay kasunduan
at ito ay naka-check, sige at sumigaw sa user.
Kaya ko lubos umamin na ito ay ganap napakalaki sa unang tingin.
Ng maraming ng mga bagong syntax. Subalit ang lahat ng jQuery ay sumusunod sa mga ganitong uri ng mga pattern ng.
At matapat, hindi ko alam ito umiral hanggang ng ilang minuto ang nakalipas.
Googled ko, "Paano mo suriin kung ang checkbox ay naka-check sa jQuery?"
at ito ay ang syntax, dahil mayroong iba't ibang mga paraan ng paggawa nito
may aktwal na raw JavaScript code.
Kaya ng sa unang pahina ng Problema Set 7 emphasizes,
pset 7 napaka isang ehersisyo sa bootstrapping iyong sarili
kung saan nagbigay kami, sana, isang haka-haka framework upang matugunan ang mga pset.
>> Ngunit bilang ay madalas na ang kaso sa web design, hanggang sa iyo talagang upang sundutin sa paligid,
isama ang mga snippet ng code at mga halimbawa mula sa Web hangga't banggitin mo ang mga ito
alinsunod sa mga tuntunin sa na unang sheet,
at Napag-alaman na ang pag-aaral ng HTML, CSS, JavaScript at kahit SQL
ay talagang nilalayong ito sa bahay ehersisyo habang sinisimulan namin upang gawin ang mga gulong ng pagsasanay.
At masyadong Napagtanto may kaya maraming iba pang mga bagay na maaari mong gawin sa isang browser.
Loob ng karamihan sa mga sangkap na ito ay may iba pang mga bagay na tinatawag na kaganapan handler.
At kahit lang namin tumingin sa mga tinatawag onsubmit at onready,
maaari mong gawin mga bagay tulad onkeydown, onkeyup,
bang kapag ang user ay touch isang susi, maaari kang makinig para sa at key up.
Ang Gmail ay may mga shortcut sa keyboard.
Paano naiiba ang Google ipatupad ang mga shortcut sa keyboard tulad ng C para sumulat?
Makinig ito ay para sa mga kaganapan, habang ang mga ito ay tinatawag na, tulad ng onkeypress o onkeyup at onkeydown.
Kung sakaling mo na hovered ang iyong mouse sa paglipas ng ilang pagpipilian ng menu
at ang lahat ng isang biglaang, voila, ang menu ng lilitaw o graphic pagbabago ng kulay,
paano sila ginagawa na?
Sa halip na makinig para sa onready o onsubmit, makinig para sa onmouseover o onmouseout.
>> Kaya sa maikling salita, may mga napaka-simpleng mga pangunahing kaalaman na namin ang nagsimula sa scratch sa ibabaw ng ngayon
at kami na sumisid sa karagdagang sa sa Miyerkules, mayroon ka, nagiging,
kapangyarihan upang ipatupad ang mga uri ng mga bagay na ikaw ay pamilyar sa.
Kaya sabihin magtapos doon, at ipagpapatuloy namin ito sa Miyerkules.
>> [CS50.TV]