1 00:00:00,000 --> 00:00:08,070 2 00:00:08,070 --> 00:00:10,430 >> R.J. AQUINO: La oss bare komme i gang. 3 00:00:10,430 --> 00:00:12,310 Så dette er quiz en. 4 00:00:12,310 --> 00:00:14,890 Her er noen informasjon på høyt nivå. 5 00:00:14,890 --> 00:00:19,915 Om-side for quizen er på dette URL, ikke lenger CS50.net, selv om det 6 00:00:19,915 --> 00:00:21,080 vil fortsatt fungere. 7 00:00:21,080 --> 00:00:26,920 Det er CS50.harvard.edu/quizzes/2013/1. 8 00:00:26,920 --> 00:00:31,070 Det er den store Om siden, forteller deg hvor og når, nemlig neste onsdag 9 00:00:31,070 --> 00:00:32,100 i en haug med rom. 10 00:00:32,100 --> 00:00:36,120 Og ved neste onsdag, jeg bety to dager fra nå. 11 00:00:36,120 --> 00:00:37,890 All denne informasjonen er der. 12 00:00:37,890 --> 00:00:39,110 Men det er kumulative. 13 00:00:39,110 --> 00:00:43,790 >> Så alt fra den første halvpart av året er potensielt på quiz, 14 00:00:43,790 --> 00:00:50,780 fordi du ikke kan virkelig gjøre avanserte ting i C uten hvis forholdene og 15 00:00:50,780 --> 00:00:51,920 for løkker og lignende. 16 00:00:51,920 --> 00:00:55,580 Men det vil bli lagt vekt på Materialet dekket siden Quiz 0, 17 00:00:55,580 --> 00:00:59,570 starter med structs og Fil I / O. Det er vanligvis mer 18 00:00:59,570 --> 00:01:01,620 utfordrende enn Quiz 0. 19 00:01:01,620 --> 00:01:03,870 Den gjennomsnittlige poengsum er vanligvis lavere. 20 00:01:03,870 --> 00:01:05,980 Studere hardt. 21 00:01:05,980 --> 00:01:09,340 >> Mens du studerer, sørg for å bruke CS50/discuss å poste dine spørsmål 22 00:01:09,340 --> 00:01:10,830 og lese andres spørsmål. 23 00:01:10,830 --> 00:01:13,550 Så hvis du ikke har noen spørsmål, logge inn og lese 24 00:01:13,550 --> 00:01:14,580 dine venners spørsmål. 25 00:01:14,580 --> 00:01:16,560 De er sikkert gode spørsmål. 26 00:01:16,560 --> 00:01:17,730 Og ta de praktiske tester. 27 00:01:17,730 --> 00:01:20,750 Vi har vært å gi spørrekonkurranser for syv eller åtte år nå. 28 00:01:20,750 --> 00:01:22,180 De er alle på Internett. 29 00:01:22,180 --> 00:01:25,540 Fremtidige spørsmål er lik til gamle spørsmål. 30 00:01:25,540 --> 00:01:26,550 Det er slik vi gjør dem. 31 00:01:26,550 --> 00:01:27,740 >> Quizen ikke finnes ennå. 32 00:01:27,740 --> 00:01:28,670 Ingen av oss har sett den. 33 00:01:28,670 --> 00:01:32,496 Men det vil se ut tidligere spørrekonkurranser. 34 00:01:32,496 --> 00:01:36,500 For denne anmeldelsen sesjon, er dette ikke en uttømmende liste over emner. 35 00:01:36,500 --> 00:01:40,740 Du kan ikke bare delta på dette og deretter være helt klar for quiz. 36 00:01:40,740 --> 00:01:43,330 Ellers ville det ikke være at mye av en quiz. 37 00:01:43,330 --> 00:01:46,270 Og dette er heller ikke nødvendigvis alt du trenger å vite om noen 38 00:01:46,270 --> 00:01:46,970 gitt tema. 39 00:01:46,970 --> 00:01:50,520 Det er ment for å utsette deg for de tingene vi har dekket, minne deg på hva vi 40 00:01:50,520 --> 00:01:53,070 dekket, og den måten som vi dekket det. 41 00:01:53,070 --> 00:01:57,030 Men du er nødt til å gå videre og dypere når du studerer til å dobbeltsjekke 42 00:01:57,030 --> 00:02:00,230 at du vet alt om et gitt emnet og at du har fylt inn 43 00:02:00,230 --> 00:02:03,320 alle hjørner som var dekket i forelesningen. 44 00:02:03,320 --> 00:02:07,980 >> Quizen notater fortelle deg å gå til risse notater, klokke forelesningsvideoer. 45 00:02:07,980 --> 00:02:10,155 Det er en god måte å sørge for at du har dekket alle baser. 46 00:02:10,155 --> 00:02:12,670 47 00:02:12,670 --> 00:02:17,340 Så å komme i gang, når jeg har gjort disse lysbilder, prøvde jeg å sette der jeg fant 48 00:02:17,340 --> 00:02:18,350 informasjon. 49 00:02:18,350 --> 00:02:22,890 Så for File I / O, for eksempel, uke 7, Mandag foredrag, og postet 50 00:02:22,890 --> 00:02:27,960 § 6 og oppgavesettet har alle informasjon om Fil I / O. Jeg har gjort 51 00:02:27,960 --> 00:02:28,840 dette for hvert emne. 52 00:02:28,840 --> 00:02:33,010 Så de tittellysbilder kan være nyttig for deg. 53 00:02:33,010 --> 00:02:38,950 >> Så her har vi File I / O. Husk, i Problemet ligger fem, brukte vi fopen, fclose, 54 00:02:38,950 --> 00:02:41,210 fwrite, fread, og fseek. 55 00:02:41,210 --> 00:02:48,090 Etter å ha gjenvunnet 30ish JPEG og å ha endret størrelse og rotet med 56 00:02:48,090 --> 00:02:50,320 bitmaps, bør du være ganske kjent med disse funksjonene 57 00:02:50,320 --> 00:02:51,830 og hvordan de fungerer. 58 00:02:51,830 --> 00:02:54,420 Hvis du ikke lenger er kjent, definitivt vurdere dem. 59 00:02:54,420 --> 00:02:56,860 Og sørg for at du forstår hva de forskjellige argumentene er, 60 00:02:56,860 --> 00:02:58,260 når de er brukt. 61 00:02:58,260 --> 00:03:03,620 >> Men de vanligste filtypene relaterte bugs du kan bli bedt om - 62 00:03:03,620 --> 00:03:07,270 vel, hvis du har glemt å sjekke om fopen faktisk jobbet før du går til 63 00:03:07,270 --> 00:03:08,350 modifisere en fil. 64 00:03:08,350 --> 00:03:09,760 Det kan være dårlig. 65 00:03:09,760 --> 00:03:13,560 Hvis du har glemt å fclose en fil at du har fopened, det er lik 66 00:03:13,560 --> 00:03:14,400 en minnelekkasje. 67 00:03:14,400 --> 00:03:15,980 Det er ganske ille. 68 00:03:15,980 --> 00:03:18,670 Og glemmer å sjekke om du har nådd slutten av filen før du 69 00:03:18,670 --> 00:03:19,790 begynner å skrive til den. 70 00:03:19,790 --> 00:03:22,320 >> Så hvis du sier, hei, jeg er på slutten av filen. 71 00:03:22,320 --> 00:03:23,750 Gi meg fem flere bytes. 72 00:03:23,750 --> 00:03:27,370 Vel, det er sannsynligvis ikke kommer til å trene slik du forventer. 73 00:03:27,370 --> 00:03:30,930 Det er egentlig det for File I / O, fordi vi gjorde så mye av det 74 00:03:30,930 --> 00:03:32,300 med oppgavesettet. 75 00:03:32,300 --> 00:03:36,000 Så hvis du forsto hva som foregikk i oppgave Set 5, husker bitmats 76 00:03:36,000 --> 00:03:40,090 og JPEG-bilder, så er du sannsynligvis alt satt for File I / O. Hvis det er litt 77 00:03:40,090 --> 00:03:44,770 fuzzy, definitivt vurdere det problemet set og den tilknyttede materiale. 78 00:03:44,770 --> 00:03:51,110 >> Structs var temaet som var på linje mellom Quiz 0 og Quiz 1. 79 00:03:51,110 --> 00:03:53,090 Visste ikke helt gjøre kutt for Quiz 0. 80 00:03:53,090 --> 00:03:57,040 Så de vil definitivt være på Quiz 1, uke 7, mandag. 81 00:03:57,040 --> 00:03:58,150 Hva er en struct? 82 00:03:58,150 --> 00:04:00,250 Her viser vi en struct. 83 00:04:00,250 --> 00:04:03,140 Det er som en ny type. 84 00:04:03,140 --> 00:04:07,940 Det er som en container for flere felt. 85 00:04:07,940 --> 00:04:12,970 >> I dette tilfellet har vi erklært en struct student som har to felt - 86 00:04:12,970 --> 00:04:17,750 en streng som vi kaller navn og en int som vi kaller alder. 87 00:04:17,750 --> 00:04:21,450 Så når jeg passerer rundt studenter eller jeg modifisere studenter, vil jeg være i stand til å 88 00:04:21,450 --> 00:04:24,430 tilgang til deres navn og deres alder. 89 00:04:24,430 --> 00:04:26,670 La oss se på noen kode for det. 90 00:04:26,670 --> 00:04:29,090 Her ser vi at jeg har erklært en student s, akkurat som 91 00:04:29,090 --> 00:04:30,300 Jeg erklærer noe variabel - 92 00:04:30,300 --> 00:04:32,430 int x, int y, et cetera. 93 00:04:32,430 --> 00:04:34,180 >> Her er student s. 94 00:04:34,180 --> 00:04:37,370 Han starter med ingenting i sine felt. 95 00:04:37,370 --> 00:04:38,240 Så la oss sette dem. 96 00:04:38,240 --> 00:04:40,681 Du angir felt av en struct med prikk. 97 00:04:40,681 --> 00:04:43,780 Så jeg har sagt her at s.name = RJ. 98 00:04:43,780 --> 00:04:46,470 Og s.age = 21. 99 00:04:46,470 --> 00:04:48,500 Du kan også oppdatere felt på samme måte som du ville oppdatere 100 00:04:48,500 --> 00:04:49,550 verdien av en variabel. 101 00:04:49,550 --> 00:04:53,270 Så jeg ønsker å endre navnet mitt fra RJ med ingen perioder til R.J. stavet 102 00:04:53,270 --> 00:04:54,540 korrekt måte. 103 00:04:54,540 --> 00:04:58,890 Det ville være s.name = RJ, det samme som vi sa det opprinnelig. 104 00:04:58,890 --> 00:05:00,030 Og så kan du få tilgang til dem. 105 00:05:00,030 --> 00:05:00,930 >> Så vi har satt dem. 106 00:05:00,930 --> 00:05:01,840 Vi har oppdatert dem. 107 00:05:01,840 --> 00:05:03,890 Du kan også få tilgang til dem i den samme måten. 108 00:05:03,890 --> 00:05:09,330 Så her, jeg skriver ut R.J. Er 21 år gammel. 109 00:05:09,330 --> 00:05:14,700 Og jeg tilgang til disse verdiene med s.name og s.age. 110 00:05:14,700 --> 00:05:17,040 Så det er tilgang structs med dot notasjon. 111 00:05:17,040 --> 00:05:17,850 Jepp, stille spørsmål? 112 00:05:17,850 --> 00:05:21,176 >> PUBLIKUM: Er det en grunn på forrige lysbilde som du ikke sette 113 00:05:21,176 --> 00:05:24,848 student på øverste linje, som typedef struct student og deretter 114 00:05:24,848 --> 00:05:25,840 student på slutten? 115 00:05:25,840 --> 00:05:29,040 >> R.J. AQUINO: Så spørsmålet var, på dette lysbildet, har vi vanligvis sett 116 00:05:29,040 --> 00:05:32,400 typedef struct node og deretter felt av struct og 117 00:05:32,400 --> 00:05:34,250 deretter ordet node. 118 00:05:34,250 --> 00:05:37,790 Og hvordan kommer her jeg ikke si, typedef struct student og deretter 119 00:05:37,790 --> 00:05:39,820 felt av struct og deretter student? 120 00:05:39,820 --> 00:05:44,310 Grunnen er at jeg ikke trenger å tilgang til den innsiden av struct. 121 00:05:44,310 --> 00:05:46,270 Så det er OK å la det uten et navn. 122 00:05:46,270 --> 00:05:49,210 Jeg kan bare la det som en anonym struct. 123 00:05:49,210 --> 00:05:53,130 >> Grunnen til at vi gjør det for lenkede lister og ting er fordi inne du trenger 124 00:05:53,130 --> 00:05:55,360 å referere til en struct noder stjerne. 125 00:05:55,360 --> 00:05:58,220 Så struct må ha et navn, slik at du får tilgang til den senere. 126 00:05:58,220 --> 00:05:59,540 Det er en liten detalj. 127 00:05:59,540 --> 00:06:04,750 Men du vil vanligvis se typedef struct klammeparentes hvis du ikke trenger 128 00:06:04,750 --> 00:06:08,720 navnet og typedef struct noen navn etterfulgt av klammeparenteser hvis du vil 129 00:06:08,720 --> 00:06:09,520 trenger navnet. 130 00:06:09,520 --> 00:06:12,070 Så det er et godt spørsmål. 131 00:06:12,070 --> 00:06:17,000 >> Og på det punktet, har vi en tendens til å endre structs og pass rundt structs etter 132 00:06:17,000 --> 00:06:18,680 referere, ikke av verdi. 133 00:06:18,680 --> 00:06:21,940 Så får vi bare passerer rundt pekere til structs stedet for å gå rundt 134 00:06:21,940 --> 00:06:23,150 structs seg. 135 00:06:23,150 --> 00:06:28,050 Så du svært ofte kommer til å være ved hjelp av, i dette tilfellet, student * or 136 00:06:28,050 --> 00:06:34,150 struct node * eller node * stedet ut studenter eller noder. 137 00:06:34,150 --> 00:06:39,350 Så her, jeg har sagt, OK, den variable ptr kommer til å være adressen til s. 138 00:06:39,350 --> 00:06:45,570 Det kommer til å være pekeren til studenten R.J. 139 00:06:45,570 --> 00:06:48,965 >> Så vi kan få på disse feltene det samme som vi får noe. 140 00:06:48,965 --> 00:06:51,460 Først ID referere pekeren å få struct. 141 00:06:51,460 --> 00:06:55,530 Det er * ptr og deretter en prikk og deretter alder. 142 00:06:55,530 --> 00:06:58,790 Så for å få tilgang til feltet, og jeg har oppdatert den nå til 22, fordi, la oss 143 00:06:58,790 --> 00:07:00,860 si, det var min bursdag. 144 00:07:00,860 --> 00:07:03,990 Det er en snarvei syntaks Via pilen her. 145 00:07:03,990 --> 00:07:07,060 Så ptr pil alder er bare det samme som * ptr.age. 146 00:07:07,060 --> 00:07:10,150 147 00:07:10,150 --> 00:07:11,550 Nå, det er noe du vil ha å huske og huske. 148 00:07:11,550 --> 00:07:15,010 >> Du brukte det mye i pset6, stavekontrollen PSett. 149 00:07:15,010 --> 00:07:18,350 Men dette er faktisk hva som kommer på under panseret. 150 00:07:18,350 --> 00:07:20,500 Det er dereferencing pekeren og deretter få tilgang til den. 151 00:07:20,500 --> 00:07:21,432 Spørsmål? 152 00:07:21,432 --> 00:07:22,682 >> PUBLIKUM: [uhørbart]. 153 00:07:22,682 --> 00:07:25,860 154 00:07:25,860 --> 00:07:28,060 >> R.J. AQUINO: Så hvorfor bruker vi pekere som structs i stedet for 155 00:07:28,060 --> 00:07:29,500 structs seg selv? 156 00:07:29,500 --> 00:07:33,740 Grunnen ville være hvis du passerer en struct til en funksjon, har du sannsynligvis 157 00:07:33,740 --> 00:07:36,900 ønsker å passere rundt bare 4 eller så byte som representerer pekeren, som 158 00:07:36,900 --> 00:07:40,375 motsetning til den potensielt 30 eller 40 bytes som er struct. 159 00:07:40,375 --> 00:07:44,410 Så passerer noe til en funksjon er enklere når ting 160 00:07:44,410 --> 00:07:48,230 er mindre i kort. 161 00:07:48,230 --> 00:07:49,074 Spørsmål? 162 00:07:49,074 --> 00:07:53,026 >> PUBLIKUM: Du har kanskje nevnt dette i begynnelsen, men er det 163 00:07:53,026 --> 00:07:56,000 andre kan skyves opp på [uhørbart]? 164 00:07:56,000 --> 00:07:58,960 >> R.J. AQUINO: Disse lysbildene vil være opp etter gjennomgangen økten. 165 00:07:58,960 --> 00:08:00,210 Vi vil legge dem ut på nettstedet. 166 00:08:00,210 --> 00:08:02,450 167 00:08:02,450 --> 00:08:06,870 Så går videre og flytte på litt raskere, vi kommer til å snakke om data 168 00:08:06,870 --> 00:08:07,350 strukturer. 169 00:08:07,350 --> 00:08:08,040 Det er mye. 170 00:08:08,040 --> 00:08:10,080 Vi dekket en haug av dem. 171 00:08:10,080 --> 00:08:12,500 Her er hva du bør forstå om datastruktur. 172 00:08:12,500 --> 00:08:15,590 >> Du burde virkelig forstår seg på et høyt nivå hva hver struktur er. 173 00:08:15,590 --> 00:08:21,190 Kan du forklare på engelsk til din venn som ikke har tatt CS50 hvordan 174 00:08:21,190 --> 00:08:25,580 vi organisere våre data og hvorfor vi hadde være å bruke noe på denne måten? 175 00:08:25,580 --> 00:08:26,990 Det er ting en. 176 00:08:26,990 --> 00:08:29,650 Thing to, forstår gjennomføringen. 177 00:08:29,650 --> 00:08:34,270 Så forstå hvordan du bruker disse tingene i C. Og skal vi gå over dette. 178 00:08:34,270 --> 00:08:39,030 >> Og så ting tre ville bli kjent med levetid og begrensningene til 179 00:08:39,030 --> 00:08:40,470 ulike strukturer du bruker. 180 00:08:40,470 --> 00:08:44,059 Så forstå hvorfor du ville bruke en hash tabell i stedet for en matrise. 181 00:08:44,059 --> 00:08:49,570 Forstå hvor fort, i gjennomsnitt, tilgang til en hash table er. 182 00:08:49,570 --> 00:08:54,010 Forstå hva slags operasjoner er raskt på lenket liste, men treg på matriser og 183 00:08:54,010 --> 00:08:56,080 vice versa. 184 00:08:56,080 --> 00:08:59,780 Så for å forstå det, må du forstå Big-O notasjon bare vite 185 00:08:59,780 --> 00:09:01,310 hvordan å snakke om disse slags ting. 186 00:09:01,310 --> 00:09:02,700 Og vi skal snakke om det. 187 00:09:02,700 --> 00:09:06,040 >> Så første tingen, knyttet lister. 188 00:09:06,040 --> 00:09:07,770 Her er et høyt nivå bilde av en lenket liste. 189 00:09:07,770 --> 00:09:08,830 Vi viser dette i klassen. 190 00:09:08,830 --> 00:09:11,670 Vi har vanligvis 10 personer står på scenen. 191 00:09:11,670 --> 00:09:16,790 Men vi har en rekke noder der hver node har noen verdi, og en peker 192 00:09:16,790 --> 00:09:18,610 til sin neste verdi. 193 00:09:18,610 --> 00:09:21,730 Så for å komme fra en node til den neste, du bare si, gi meg neste node. 194 00:09:21,730 --> 00:09:22,530 Du har den noden. 195 00:09:22,530 --> 00:09:23,770 Gi meg neste node. 196 00:09:23,770 --> 00:09:24,400 Du har den noden. 197 00:09:24,400 --> 00:09:28,790 Gi me den neste node, og så videre inntil det er ingen node venstre. 198 00:09:28,790 --> 00:09:31,850 >> Så fortsett å snakke om det på et høyt nivå. 199 00:09:31,850 --> 00:09:34,100 Det er veldig lett å sette ting inn i en lenket liste. 200 00:09:34,100 --> 00:09:36,010 Hvis du ikke bryr deg om rekkefølgen, du kan bare slippe det 201 00:09:36,010 --> 00:09:36,840 helt i begynnelsen. 202 00:09:36,840 --> 00:09:38,520 Det er konstant tid. 203 00:09:38,520 --> 00:09:39,900 Men det er vanskelig å finne en verdi. 204 00:09:39,900 --> 00:09:43,060 Hvis du prøver å spørre, er syv i min liste? 205 00:09:43,060 --> 00:09:44,740 Du må gå gjennom hver enkelt verdi. 206 00:09:44,740 --> 00:09:45,680 Er dette sju? 207 00:09:45,680 --> 00:09:46,610 Er dette sju? 208 00:09:46,610 --> 00:09:47,770 Er dette sju? 209 00:09:47,770 --> 00:09:48,690 Er dette sju? 210 00:09:48,690 --> 00:09:49,830 Igjen og igjen. 211 00:09:49,830 --> 00:09:51,520 Og det er O (n). 212 00:09:51,520 --> 00:09:53,800 Så når studerer for quiz, sammenligne dette med matriser. 213 00:09:53,800 --> 00:09:57,010 214 00:09:57,010 --> 00:09:58,220 >> Er det OK? 215 00:09:58,220 --> 00:09:59,220 Lysene gikk dim. 216 00:09:59,220 --> 00:10:01,110 OK. 217 00:10:01,110 --> 00:10:02,400 Når er en lenket liste bedre? 218 00:10:02,400 --> 00:10:04,640 Når er en matrise bedre? 219 00:10:04,640 --> 00:10:06,670 Så la oss se på noen kode. 220 00:10:06,670 --> 00:10:08,960 Her er en potensiell node. 221 00:10:08,960 --> 00:10:09,770 Det er en struct. 222 00:10:09,770 --> 00:10:12,220 Den har en int n, hvor vil være vår verdi. 223 00:10:12,220 --> 00:10:17,780 Og det har en struct node * neste, som er vår peker til den neste noden. 224 00:10:17,780 --> 00:10:23,040 Så her kan vi se at vi har skjedd å ha satt en int i vår node. 225 00:10:23,040 --> 00:10:27,850 Men hvis dette var en lenket liste av røye stjerner eller en lenket liste med flyter, vi 226 00:10:27,850 --> 00:10:28,820 helt kunne gjøre det også. 227 00:10:28,820 --> 00:10:33,110 >> Husk i pset6, har du sannsynligvis hatt en lenket liste av røye stjerner eller bare 228 00:10:33,110 --> 00:10:34,360 statiske røye arrays. 229 00:10:34,360 --> 00:10:37,370 230 00:10:37,370 --> 00:10:39,040 La oss se her på en operasjon. 231 00:10:39,040 --> 00:10:43,570 Så vi ønsker å sette inn en ny n inn i vår lenket liste. 232 00:10:43,570 --> 00:10:48,940 Vi starter ut med et hode peker som er en peker til denne noden som har 233 00:10:48,940 --> 00:10:53,460 Verdien av n, og en neste av en peker som peker til denne node er en verdi av 234 00:10:53,460 --> 00:10:57,760 n og en ved siden av null, fordi det er den siste noden. 235 00:10:57,760 --> 00:11:00,440 Så av hensyn til tid, vil jeg legge all koden på skjermen. 236 00:11:00,440 --> 00:11:03,130 Og vi vil gå gjennom det noen linjer om gangen. 237 00:11:03,130 --> 00:11:05,790 >> Så her er koden. 238 00:11:05,790 --> 00:11:07,560 Jeg håper det er lesbart. 239 00:11:07,560 --> 00:11:11,275 Det første vi gjør er vi malloc en ny node. 240 00:11:11,275 --> 00:11:15,105 Så det gjør en peker til en ny node som ikke helt har noe satt 241 00:11:15,105 --> 00:11:16,450 opp i det ennå. 242 00:11:16,450 --> 00:11:19,580 Vi sjekke for å være sikker på at den nye noden er ikke null. 243 00:11:19,580 --> 00:11:22,220 Ellers må vi gi opp. 244 00:11:22,220 --> 00:11:27,680 Så etter å ha sjekket at vi nå sett verdiene i noden. 245 00:11:27,680 --> 00:11:31,520 Så vi satte ny n inn i vår n feltet. 246 00:11:31,520 --> 00:11:36,050 Og vi setter neste pekeren å peke på den opprinnelige hodet, slik at vi kan 247 00:11:36,050 --> 00:11:38,900 nå har satt dette node til listen vår. 248 00:11:38,900 --> 00:11:44,600 >> Endelig har vi den globale hodet punktet til vår nye node, slik at hvis vi skulle 249 00:11:44,600 --> 00:11:50,300 starter på hodet, ville vi være på dette ny første node i stedet for 250 00:11:50,300 --> 00:11:51,560 den gamle første noden. 251 00:11:51,560 --> 00:11:55,320 Og når denne funksjonen kommer ut, den variable ny node ikke lenger eksisterer, 252 00:11:55,320 --> 00:11:57,130 fordi det var lokale til funksjonen. 253 00:11:57,130 --> 00:11:59,770 Så dette er tilstanden i verden. 254 00:11:59,770 --> 00:12:03,570 Vårt globale hodet peker til vår nye første node, som peker til vår 255 00:12:03,570 --> 00:12:06,346 opprinnelige første node, som poeng til noden etter at. 256 00:12:06,346 --> 00:12:09,790 >> Det var innsetting. 257 00:12:09,790 --> 00:12:12,150 Jeg håper det var relativt grei å følge. 258 00:12:12,150 --> 00:12:14,300 Når du er i tvil, tegne et bilde. 259 00:12:14,300 --> 00:12:17,820 Så jeg synes at det å snakke om lenkede lister og ser på 260 00:12:17,820 --> 00:12:19,870 Koden er svært nyttig. 261 00:12:19,870 --> 00:12:23,790 Mens du ser på et bilde av en koblet liste tillater meg å tenke, oh, så 262 00:12:23,790 --> 00:12:24,970 Jeg har denne noden her. 263 00:12:24,970 --> 00:12:28,980 Men hvis jeg oppdatere denne pekeren, det ender opp frakoblet. 264 00:12:28,980 --> 00:12:34,340 Og jeg har glemt hvor noden går. 265 00:12:34,340 --> 00:12:35,390 Og koden kommer ut. 266 00:12:35,390 --> 00:12:37,830 Og du har flere noder som er frakoblet. 267 00:12:37,830 --> 00:12:39,970 Og du ikke ender opp med listen du vil. 268 00:12:39,970 --> 00:12:43,320 >> Så hvis du tegner bildet og gjøre det trinn for trinn, forhåpentligvis, vil du se 269 00:12:43,320 --> 00:12:46,840 den riktige rekkefølgen av ting i form av oppdatere pekere for å være sikker 270 00:12:46,840 --> 00:12:48,830 at listen kommer sammen. 271 00:12:48,830 --> 00:12:51,240 Sett er relativt grei. 272 00:12:51,240 --> 00:12:55,210 En mer komplisert ville være innsetting i en sortert liste. 273 00:12:55,210 --> 00:12:59,980 En mer komplisert funksjon er slett og finne, så ser gjennom en liste for å 274 00:12:59,980 --> 00:13:03,030 se om noe er der. 275 00:13:03,030 --> 00:13:07,220 Kanskje du gjorde dette i pset6 når du fikk inn din hash table, og du sa, 276 00:13:07,220 --> 00:13:10,460 vel, er ordet eple i min lenket liste? 277 00:13:10,460 --> 00:13:11,440 >> Så kanskje du allerede har gjort dette. 278 00:13:11,440 --> 00:13:15,530 Men definitivt, friske opp hukommelsen og prøve å reimplement funn og 279 00:13:15,530 --> 00:13:19,150 reimplement slette en lenket liste. 280 00:13:19,150 --> 00:13:22,850 Morsom side note, det også dobbelt-linked lister, hvor du har 281 00:13:22,850 --> 00:13:27,490 pekere som peker både fremover og bakover, slik at du kunne gå til 282 00:13:27,490 --> 00:13:29,270 neste node, og den foregående noden. 283 00:13:29,270 --> 00:13:33,860 Og det var et spørsmål om fjorårets quiz av denne typen, snakker 284 00:13:33,860 --> 00:13:36,190 om dobbelt-lenkede lister. 285 00:13:36,190 --> 00:13:40,070 >> Nå, det er en struktur som du er relativt kjent med, fordi de fleste 286 00:13:40,070 --> 00:13:42,520 av dere sikkert brukt dem på pset6. 287 00:13:42,520 --> 00:13:45,680 Her er en som er litt mindre kjent. 288 00:13:45,680 --> 00:13:51,020 Som en side note, tror jeg at Quiz 1 er primært hardere enn Quiz 0, fordi 289 00:13:51,020 --> 00:13:54,600 ting du gjør, du har ikke gjort så mye. 290 00:13:54,600 --> 00:13:58,100 For å sette det på en annen måte, for Quiz 0, du hadde skrevet en masse C. Og vi 291 00:13:58,100 --> 00:13:58,880 spurte du om C. 292 00:13:58,880 --> 00:14:02,310 >> For Quiz 1, kommer vi til å spørre deg om PHP og Javascript, som du 293 00:14:02,310 --> 00:14:03,490 skriver ikke så mye av. 294 00:14:03,490 --> 00:14:07,590 Vi kommer til å spørre deg om C-kode som du har ikke skrevet så mye av, 295 00:14:07,590 --> 00:14:09,130 denne avanserte C stuff. 296 00:14:09,130 --> 00:14:11,520 Så definitivt, øve på ting vi snakket om i foredraget at du 297 00:14:11,520 --> 00:14:15,260 ikke nødvendigvis gjøre på oppgavesettet. 298 00:14:15,260 --> 00:14:17,870 >> Apropos, har du ikke skrevet en stabel på et oppgavesettet. 299 00:14:17,870 --> 00:14:19,610 Men det var på forelesning. 300 00:14:19,610 --> 00:14:22,530 Her er det høyt nivå bilde av stabler at vi viser hvert år. 301 00:14:22,530 --> 00:14:26,180 Det er bunken med skuffer i den Mather spisesal. 302 00:14:26,180 --> 00:14:30,570 Ved et høyt nivå, stabler er en siste inn, først ut datastruktur. 303 00:14:30,570 --> 00:14:32,040 Det betyr at du kommer å sette ting i - 304 00:14:32,040 --> 00:14:36,400 1, 3, 7, 12, 14, negativ 0. 305 00:14:36,400 --> 00:14:39,180 Det eneste jeg kunne ikke ha sa - negative 3, 0. 306 00:14:39,180 --> 00:14:40,250 Du setter alle disse tingene i. 307 00:14:40,250 --> 00:14:42,940 Og det siste du putter i er den første en som kommer til å komme ut. 308 00:14:42,940 --> 00:14:44,170 >> Så du har to operasjoner - 309 00:14:44,170 --> 00:14:45,260 presse og pop. 310 00:14:45,260 --> 00:14:49,180 Alle de sette i at jeg var gestikulerer som dette er push. 311 00:14:49,180 --> 00:14:52,020 Og så når jeg kommer inn til grab noe eller komme på toppen for å hente 312 00:14:52,020 --> 00:14:53,940 noe, det er pop. 313 00:14:53,940 --> 00:14:55,540 Så vi kommer til å gjennomføre stabler. 314 00:14:55,540 --> 00:14:57,870 Og vi viste dem på forelesning bruke matriser. 315 00:14:57,870 --> 00:14:59,550 Men du kan gjøre dem ved hjelp av lenkede lister. 316 00:14:59,550 --> 00:15:01,770 En stabel er en konseptuell data struktur, ikke som en 317 00:15:01,770 --> 00:15:03,760 implementeringsspesifikk ett. 318 00:15:03,760 --> 00:15:06,420 >> Så hva ville det se ut? 319 00:15:06,420 --> 00:15:07,970 Det ville se litt som dette. 320 00:15:07,970 --> 00:15:10,840 Du vil ha et heltall størrelse. 321 00:15:10,840 --> 00:15:16,000 Og du vil ha en matrise med verdier som vi ringer skuffer, fordi det er 322 00:15:16,000 --> 00:15:18,570 hva bildet var for oss - int skuffer - 323 00:15:18,570 --> 00:15:21,740 og litt til maksimal kapasitet. 324 00:15:21,740 --> 00:15:27,100 Så hva ville presse ut? 325 00:15:27,100 --> 00:15:33,250 Vel, hvis vi har en bunke s, deretter å presse noe på s, ville vi få 326 00:15:33,250 --> 00:15:34,620 størrelse s. 327 00:15:34,620 --> 00:15:42,270 Og det vil være det neste åpen flekk av vår array. 328 00:15:42,270 --> 00:15:50,510 Så hvis vi har tre ting i stacken, Da skuffer tre ville bli den neste 329 00:15:50,510 --> 00:15:54,290 åpen flekk, på grunn 0, 1 og 2 er allerede fylt opp. 330 00:15:54,290 --> 00:16:01,790 >> Så vi setter verdien inn s.trays [s.size], det tredje punktet. 331 00:16:01,790 --> 00:16:06,290 Og så øke vi s.size å si, hei, vi hadde tre ting før. 332 00:16:06,290 --> 00:16:07,400 Nå har vi fire. 333 00:16:07,400 --> 00:16:10,180 Så neste gang du trykker, du er kommer til å sette noe inn i fire. 334 00:16:10,180 --> 00:16:15,560 Eller neste gang du pop, du kommer å se på tre i stedet for fire eller hva. 335 00:16:15,560 --> 00:16:18,000 Og så får vi return true til sier hei, lyktes vi. 336 00:16:18,000 --> 00:16:19,160 Dette fungerte. 337 00:16:19,160 --> 00:16:22,060 Som en tommelfingerregel, hvis en funksjon som er skal returnere true eller 338 00:16:22,060 --> 00:16:26,370 falsk returnerer alltid sant, du kan har gjort noe galt. 339 00:16:26,370 --> 00:16:28,350 Så fungerer dette? 340 00:16:28,350 --> 00:16:32,400 >> Vel, det fungerer fint for en, og 2 og 3, og 4, og fem. 341 00:16:32,400 --> 00:16:34,640 Men la oss si at jeg nå min kapasitet. 342 00:16:34,640 --> 00:16:38,750 Jeg har da kjørt inn i et problem, fordi Hvis størrelsen er den samme som kapasitet, er jeg 343 00:16:38,750 --> 00:16:43,340 nå prøver å sette noe inn i en matrise hvor jeg ikke har plass. 344 00:16:43,340 --> 00:16:46,980 Så en kort sjekk for å fikse dette. 345 00:16:46,980 --> 00:16:51,630 Hvis s.size == KAPASITET, return false. 346 00:16:51,630 --> 00:16:54,130 Ellers, gå og gjøre det vi gjorde. 347 00:16:54,130 --> 00:16:55,660 Så hva annet kan vi spørre om for stabler? 348 00:16:55,660 --> 00:16:56,460 Hva annet bør du studere? 349 00:16:56,460 --> 00:16:57,690 Hva annet bør du øve? 350 00:16:57,690 --> 00:17:01,030 >> Vel, implementere pop. 351 00:17:01,030 --> 00:17:02,370 Vi allerede gjorde push. 352 00:17:02,370 --> 00:17:04,280 Jeg skal fikse det. 353 00:17:04,280 --> 00:17:08,180 En ikke-matrise gjennomføring, hvor du bruke en lenket liste, kanskje. 354 00:17:08,180 --> 00:17:09,390 En ikke-int gjennomføring. 355 00:17:09,390 --> 00:17:10,940 Vi gjorde ints her. 356 00:17:10,940 --> 00:17:11,880 Men det kunne ha vært flyter. 357 00:17:11,880 --> 00:17:13,010 Jeg kunne ha vært strenger. 358 00:17:13,010 --> 00:17:14,290 Det kunne ha vært røye stjerner. 359 00:17:14,290 --> 00:17:17,960 Se på tidligere spørrekonkurranser for de typer spørsmål vi har spurt om stabler. 360 00:17:17,960 --> 00:17:20,000 >> Jeg vil si at vi dekket stabler rundt det samme som vi har dekket dem i 361 00:17:20,000 --> 00:17:20,540 år tidligere. 362 00:17:20,540 --> 00:17:24,400 Så spørsmålene bør være en god indikasjon. 363 00:17:24,400 --> 00:17:27,010 Fremover enda raskere, køer. 364 00:17:27,010 --> 00:17:28,200 De er som stabler. 365 00:17:28,200 --> 00:17:29,960 Men de er først inn, først ut. 366 00:17:29,960 --> 00:17:33,530 Hvis du er britisk, ordet køen trolig gjort mye fornuftig for deg. 367 00:17:33,530 --> 00:17:36,390 Ellers kan du ha hørt på det som en linje. 368 00:17:36,390 --> 00:17:38,120 De fungerer som linjen på Apple Store. 369 00:17:38,120 --> 00:17:40,740 Den første personen til å dukke opp på 3:00 om morgenen den første 370 00:17:40,740 --> 00:17:42,880 person til å kjøpe sin iPad. 371 00:17:42,880 --> 00:17:44,260 >> Så vi har to operasjoner - 372 00:17:44,260 --> 00:17:45,720 enqueue og dequeue. 373 00:17:45,720 --> 00:17:47,560 Enqueue setter noen i linjen. 374 00:17:47,560 --> 00:17:50,070 Dequeue trekker først person av linjen. 375 00:17:50,070 --> 00:17:52,640 Igjen, kan vi implementere dette med en matrise. 376 00:17:52,640 --> 00:17:54,880 Så hva er den struct vi viste i foredraget? 377 00:17:54,880 --> 00:17:57,660 Det var denne. 378 00:17:57,660 --> 00:17:59,300 Igjen, tallene. 379 00:17:59,300 --> 00:18:02,020 Igjen, størrelse og denne nye ting foran. 380 00:18:02,020 --> 00:18:04,880 Hvorfor er det noe som heter foran? 381 00:18:04,880 --> 00:18:07,050 Det er indeksen for den neste element å dequeue. 382 00:18:07,050 --> 00:18:12,210 Det er bare internt å holde styr på den første fyren til å dukke opp, slik at vi 383 00:18:12,210 --> 00:18:15,005 kan trekke den ut når vi må. 384 00:18:15,005 --> 00:18:19,322 >> Definitivt se på forelesningsnotater og prøve å implementere enqueue og dequeue 385 00:18:19,322 --> 00:18:21,700 når man studerer for quizen. 386 00:18:21,700 --> 00:18:23,190 Viktige ting å tenke på. 387 00:18:23,190 --> 00:18:27,260 Innpakning rundt hvis fronten pluss størrelse ender opp større enn kapasiteten. 388 00:18:27,260 --> 00:18:32,670 Igjen, hvis strukturen er full, du kommer til å ha et problem. 389 00:18:32,670 --> 00:18:34,780 Hash tabeller du har sett før. 390 00:18:34,780 --> 00:18:39,820 De fleste av dere sikkert implementert disse på pset6. 391 00:18:39,820 --> 00:18:44,210 Det er en struktur som tar sikte på O (1) konstant tid innsetting og O (1) 392 00:18:44,210 --> 00:18:46,430 konstant tid oppslag. 393 00:18:46,430 --> 00:18:49,760 >> I CS50, vi implementert dette som en rekke lenkede lister. 394 00:18:49,760 --> 00:18:53,690 Nøkkelen komponent til en hash table er hash-funksjon. 395 00:18:53,690 --> 00:18:58,350 Så det konverterer dine innspill, la oss si, en ordbok ord, i et antall, 396 00:18:58,350 --> 00:18:59,560 som kommer til å være vår hovedside. 397 00:18:59,560 --> 00:19:01,410 Og vi vil bruke indeksen inn i vårt utvalg. 398 00:19:01,410 --> 00:19:05,374 Så her er en søt liten bilde fra study.50.net. 399 00:19:05,374 --> 00:19:08,060 Vi kaster alle ordene i vår hash-funksjon. 400 00:19:08,060 --> 00:19:10,950 Og hash-funksjon forteller oss hvor du skal plassere disse ordene. 401 00:19:10,950 --> 00:19:15,650 >> Dette er alle gode i landet der det er bare ett ord for hver slot. 402 00:19:15,650 --> 00:19:20,480 Men som du husker fra pset6, det er flere ord enn spilleautomater. 403 00:19:20,480 --> 00:19:23,080 Så hva skjer når du få en kollisjon? 404 00:19:23,080 --> 00:19:26,730 I stedet for å lagre én verdi i, la oss si, hash table 3, du 405 00:19:26,730 --> 00:19:27,990 lagre en lenket liste. 406 00:19:27,990 --> 00:19:32,900 Og så i stedet for å ha cantaloupe her, vil du ha en lenket liste, 407 00:19:32,900 --> 00:19:34,190 hvor den første noden er honningmelon. 408 00:19:34,190 --> 00:19:35,260 Og neste node er katt. 409 00:19:35,260 --> 00:19:38,970 Og den tredje node er kollisjon, la oss si, fordi alle disse ordene begynner 410 00:19:38,970 --> 00:19:41,110 med C. 411 00:19:41,110 --> 00:19:42,700 >> Så de fleste av dere gjorde dette for pset6. 412 00:19:42,700 --> 00:19:45,685 Hvis du ikke gjør en hash table på pset6 og du forsøkt noe sånt 413 00:19:45,685 --> 00:19:47,720 en trie, definitivt vurdere hash tabeller. 414 00:19:47,720 --> 00:19:50,650 Hvis du gjorde det på pset6, definitivt gjennom hash tabeller. 415 00:19:50,650 --> 00:19:53,610 Og hvis du gjorde det på pset6 og det gjorde ikke trene helt rett, og du 416 00:19:53,610 --> 00:19:56,150 hadde mye trøbbel med det, definitivt gjennom hash tabeller. 417 00:19:56,150 --> 00:20:01,610 Så lærdommen er virkelig definitivt gjennom hash tabeller. 418 00:20:01,610 --> 00:20:07,130 >> De aller mindretall av dere prøvd ut prøver på pset6. 419 00:20:07,130 --> 00:20:08,570 High-level bilde. 420 00:20:08,570 --> 00:20:15,150 Det er noe sånt som dette, hvor hver node har et sett av barn, hvor hvert 421 00:20:15,150 --> 00:20:17,100 Barnet tilsvarer et brev. 422 00:20:17,100 --> 00:20:20,520 Og hver node sier også, hei, jeg er et ord. 423 00:20:20,520 --> 00:20:25,933 Så i dette tilfellet, ordet Maxwell, hvis du følger M til A til 424 00:20:25,933 --> 00:20:28,530 X-W-E-L-L og deretter følger det en til. 425 00:20:28,530 --> 00:20:32,800 Og du får dette symbolet, deltaet, som vi betegne å mener dette er et ord. 426 00:20:32,800 --> 00:20:34,780 Så Maxwell er et ord. 427 00:20:34,780 --> 00:20:38,430 Disse deltaer er hele betegnende hvilke ting er ord og som 428 00:20:38,430 --> 00:20:40,360 ting er ikke. 429 00:20:40,360 --> 00:20:46,400 >> Så i pset6, dataene vi lagret sammen med noen av våre noder var "Jeg er en 430 00:20:46,400 --> 00:20:52,630 Ordet. "Og den kule ting om forsøk er de viser innsetting og 431 00:20:52,630 --> 00:20:55,080 Oppslag i O (lengde av et ord). 432 00:20:55,080 --> 00:20:59,450 Så bare for å komme gjennom Maxwell, er det M-A-X-W-E-L-L. Så syv eller åtte - 433 00:20:59,450 --> 00:21:00,360 Jeg kan ikke telle - 434 00:21:00,360 --> 00:21:03,920 tiltak for å få til slutten og sjekke ting ut. 435 00:21:03,920 --> 00:21:06,800 Så rask implementering her. 436 00:21:06,800 --> 00:21:10,230 Rob gikk gjennom en koblet liste i hans post mortem. 437 00:21:10,230 --> 00:21:11,600 Så sjekk det ut. 438 00:21:11,600 --> 00:21:11,720 Unnskyld. 439 00:21:11,720 --> 00:21:13,240 Gikk gjennom en trie i hans post mortem. 440 00:21:13,240 --> 00:21:14,260 Så sjekk det ut. 441 00:21:14,260 --> 00:21:24,410 >> Men du i utgangspunktet har hver node har 27 pekere til de neste noder og ett 442 00:21:24,410 --> 00:21:27,050 Boolsk for jeg er et ord. 443 00:21:27,050 --> 00:21:31,530 Sjekk ut Rob post mortem for hvordan dette faktisk er implementert. 444 00:21:31,530 --> 00:21:34,750 Vår endelige struktur, våre trær og binære søketrær. 445 00:21:34,750 --> 00:21:41,530 Så se på disse, disse ble dekket sist uke 8, mandag. 446 00:21:41,530 --> 00:21:46,960 Et tre er lik en trie, bortsett fra at du ikke nødvendigvis har 27 noder på 447 00:21:46,960 --> 00:21:47,500 hvert punkt. 448 00:21:47,500 --> 00:21:52,820 Og du trenger ikke disse dataene ved hver trinn som betyr om - 449 00:21:52,820 --> 00:21:54,030 banen spiller ingen rolle. 450 00:21:54,030 --> 00:22:00,870 Mens en trie, banen fra topp til bunn, Maxwell, var viktig for oss. 451 00:22:00,870 --> 00:22:05,270 >> Men hver node har flere barn, kanskje. 452 00:22:05,270 --> 00:22:07,290 Vi har litt mer vokabular. 453 00:22:07,290 --> 00:22:09,530 Roten av treet er helt på toppen. 454 00:22:09,530 --> 00:22:12,520 Og vi sier at den aller nederste noder som ikke har noen 455 00:22:12,520 --> 00:22:14,530 barn er bladene. 456 00:22:14,530 --> 00:22:18,040 Så ut som et trie, er et tre en struktur av noder. 457 00:22:18,040 --> 00:22:21,490 En vanlig type tre som vi skal å snakke om er et binært tre, hvor 458 00:22:21,490 --> 00:22:26,040 hver node har ingen barn eller ett barn eller to barn. 459 00:22:26,040 --> 00:22:28,890 Så dette bildet her er ikke et binært tre, fordi 460 00:22:28,890 --> 00:22:32,890 node 3 har tre barn. 461 00:22:32,890 --> 00:22:38,140 >> Men hvis vi skulle ignorere dem, resten av det er et binært tre, fordi 462 00:22:38,140 --> 00:22:43,200 demonstrerer den egenskapen at hver node har null, ett eller to barn. 463 00:22:43,200 --> 00:22:46,400 Så hvordan kan vi uttrykke dette i koden? 464 00:22:46,400 --> 00:22:51,460 Vi kunne ha en node der hver node har et helt tall på innsiden av den, samt 465 00:22:51,460 --> 00:22:55,590 som en peker til treet til venstre og en peker til treet på 466 00:22:55,590 --> 00:22:59,510 høyre, slik at de to barn. 467 00:22:59,510 --> 00:23:00,880 Hvordan er dette nyttig? 468 00:23:00,880 --> 00:23:05,740 Vel, hvis vi gjør regler om hvor vi sette noder, kan vi gjøre søk raskere. 469 00:23:05,740 --> 00:23:10,630 >> Så det er et konsept av et binært søk tre, hvor alle nodene på 470 00:23:10,630 --> 00:23:14,420 venstre subtre har en mindre verdi enn noden vi ser på. 471 00:23:14,420 --> 00:23:17,880 Og alle noder på høyre subtre har en større verdi 472 00:23:17,880 --> 00:23:18,660 enn rotnoden. 473 00:23:18,660 --> 00:23:20,670 Nå ser det ut som en masse ord. 474 00:23:20,670 --> 00:23:23,770 Jeg kommer til å sette den på innsiden av dobbelt sitater og vise deg et bilde. 475 00:23:23,770 --> 00:23:27,010 Så her er et eksempel på et binært søketre. 476 00:23:27,010 --> 00:23:28,770 Se at vi begynner med 10. 477 00:23:28,770 --> 00:23:31,780 Alt til venstre for 10 er mindre enn den. 478 00:23:31,780 --> 00:23:33,130 Og alt mot høyre er større enn den. 479 00:23:33,130 --> 00:23:37,620 >> Men mer enn det, hver node i treet uttrykker denne eiendommen. 480 00:23:37,620 --> 00:23:42,110 Så noden 7 har en 3 til venstre og en ni til høyre. 481 00:23:42,110 --> 00:23:44,440 Så alle de som er mindre enn 10 år. 482 00:23:44,440 --> 00:23:50,470 Men ser på bare de har 7 3 til sin venstre og 9 til sin rett. 483 00:23:50,470 --> 00:23:56,100 Og på samme måte på høyre, har 14 15 til dens venstre og 50 til høyre. 484 00:23:56,100 --> 00:24:03,770 Så de tre nodene enn der, 15, 14, og 50, er også en gyldig binært tre 485 00:24:03,770 --> 00:24:05,480 eller et gyldig binært søketre. 486 00:24:05,480 --> 00:24:07,250 Og de er alle større enn 10. 487 00:24:07,250 --> 00:24:08,960 Så de har lov til å være på høyre der. 488 00:24:08,960 --> 00:24:09,940 Er det et spørsmål? 489 00:24:09,940 --> 00:24:12,580 >> PUBLIKUM: Hvordan takler du når du har to sjuere? 490 00:24:12,580 --> 00:24:12,850 >> R.J. AQUINO: Yeah. 491 00:24:12,850 --> 00:24:16,550 Hvordan takler du med to verdier som er de samme? 492 00:24:16,550 --> 00:24:21,465 Noen binære søketrær si at du ignorere duplikater, fordi målet er 493 00:24:21,465 --> 00:24:24,280 bare for å si, jeg har sett disse tingene så langt. 494 00:24:24,280 --> 00:24:28,120 Noen binære søketrær du kan si har en telling på innsiden av noden. 495 00:24:28,120 --> 00:24:32,000 Andre kan si at alt å Til venstre er mindre enn eller lik. 496 00:24:32,000 --> 00:24:33,470 Og alt mot høyre er større enn. 497 00:24:33,470 --> 00:24:36,520 >> Det avhenger bare av hva den Problemet er at du skal løse. 498 00:24:36,520 --> 00:24:40,840 Så i en ordbok, for eksempel, du ville ikke bryr seg om duplikater. 499 00:24:40,840 --> 00:24:41,490 Du vil kaste dem ut. 500 00:24:41,490 --> 00:24:44,719 Men andre problemer du måtte bry seg. 501 00:24:44,719 --> 00:24:49,242 >> PUBLIKUM: Er det mulig å ha en 1 til venstre for 15, som 502 00:24:49,242 --> 00:24:50,590 er mindre enn 10? 503 00:24:50,590 --> 00:24:51,885 >> R.J. AQUINO: Nei. 504 00:24:51,885 --> 00:24:56,570 Dersom den 14 her var en 1, vil denne ikke være en gyldig binært søk treet 505 00:24:56,570 --> 00:25:00,840 fordi alt til høyre for 10 må være større enn det. 506 00:25:00,840 --> 00:25:02,300 Og vi vil se hvorfor. 507 00:25:02,300 --> 00:25:07,960 Hvis du er i landet av søke mitt mål er å finne 14, begynner jeg ved roten. 508 00:25:07,960 --> 00:25:08,500 Så jeg ser. 509 00:25:08,500 --> 00:25:08,710 OK. 510 00:25:08,710 --> 00:25:10,670 Vi kommer til å starte ved roten. 511 00:25:10,670 --> 00:25:12,500 Se på ti. 512 00:25:12,500 --> 00:25:16,050 >> Vel, 14, våre mål, er større enn 10 år. 513 00:25:16,050 --> 00:25:17,370 Så det må være på høyre side. 514 00:25:17,370 --> 00:25:21,780 Dette er svært lik hele telefonen Boken ting vi gjorde, den binære 515 00:25:21,780 --> 00:25:23,720 søke der. 516 00:25:23,720 --> 00:25:26,430 Men i stedet for binære søk i en matrise, er vi binær 517 00:25:26,430 --> 00:25:28,490 søker i dette treet. 518 00:25:28,490 --> 00:25:31,260 Så vi er fortsatt på jakt etter 14. 519 00:25:31,260 --> 00:25:32,480 Vel, 14 er mindre enn 15. 520 00:25:32,480 --> 00:25:36,430 Så hvis det er i treet vårt, må det være i dette området her. 521 00:25:36,430 --> 00:25:39,680 Det må være til høyre 10 og til venstre for 15. 522 00:25:39,680 --> 00:25:42,250 >> Og så sjekker vi denne noden. 523 00:25:42,250 --> 00:25:45,790 Og yay, har vi funnet 14. 524 00:25:45,790 --> 00:25:46,760 Jeg kommer ikke til å gå gjennom den. 525 00:25:46,760 --> 00:25:48,090 Men her er koden. 526 00:25:48,090 --> 00:25:49,690 Det er faktisk relativt grei, 527 00:25:49,690 --> 00:25:52,630 fordi dette er rekursiv. 528 00:25:52,630 --> 00:25:55,420 Hva kan vi be deg om å gjøre på en quiz? 529 00:25:55,420 --> 00:25:57,000 Vi kan be deg om å skrive denne koden. 530 00:25:57,000 --> 00:25:59,170 Vi kan be deg om å se på denne koden og modifisere denne koden og forklare hva 531 00:25:59,170 --> 00:26:00,210 det gjør. 532 00:26:00,210 --> 00:26:00,390 Yeah. 533 00:26:00,390 --> 00:26:00,770 Spørsmål? 534 00:26:00,770 --> 00:26:04,240 >> PUBLIKUM: Er disse lysbildene kommer til å være gjort tilgjengelig som de var sist gang? 535 00:26:04,240 --> 00:26:04,740 >> R.J. AQUINO: Ja. 536 00:26:04,740 --> 00:26:06,460 Så disse lysbildene vil definitivt bli lagt ut. 537 00:26:06,460 --> 00:26:08,640 >> PUBLIKUM: De er faktisk lagt ut akkurat nå på nettsiden. 538 00:26:08,640 --> 00:26:10,020 David bare gjorde det. 539 00:26:10,020 --> 00:26:12,720 >> R.J. AQUINO: Skinnene er akkurat nå på nettsiden. 540 00:26:12,720 --> 00:26:16,420 Jeg vil sannsynligvis flikke på et par skrivefeil Jeg noterte og fikse dem. 541 00:26:16,420 --> 00:26:19,940 Men det er en aktuell versjon på nettstedet. 542 00:26:19,940 --> 00:26:21,820 Andre ting som vi kan be deg om å gjøre - 543 00:26:21,820 --> 00:26:23,790 skrive innsats. 544 00:26:23,790 --> 00:26:27,490 Skriv en iterativ versjon av rekursiv funksjon vi bare viste deg 545 00:26:27,490 --> 00:26:32,520 eller snakke om disse tingene, som i avsnitt, i ord, i setninger. 546 00:26:32,520 --> 00:26:35,760 Sammenligning av kjøretider og forklare hva du ønsker å bruke en binær 547 00:26:35,760 --> 00:26:39,200 søketre for i stedet for en hash bord, f.eks. 548 00:26:39,200 --> 00:26:43,580 >> Så forstår disse strukturene på en ganske dypt nivå. 549 00:26:43,580 --> 00:26:47,440 Forstå hvordan du skriver dem, hvordan du bruke dem, hvordan du kan snakke om dem. 550 00:26:47,440 --> 00:26:50,270 Og du vil være klar. 551 00:26:50,270 --> 00:26:50,630 Spørsmål? 552 00:26:50,630 --> 00:26:55,070 >> PUBLIKUM: Når du skriver det binært søketre, hvordan gjør du 553 00:26:55,070 --> 00:27:01,460 bestemme hvilken verdi å gjøre det som root? 554 00:27:01,460 --> 00:27:06,120 >> R.J. AQUINO: Så spørsmålet var, hva verdi gjør du som roten? 555 00:27:06,120 --> 00:27:08,760 Avhengig av koden din, du kan ha en global rot. 556 00:27:08,760 --> 00:27:14,290 Så du kan ha sannsynlig hatt i pset6 en global hash table. 557 00:27:14,290 --> 00:27:18,640 Eller du kan passere roten inn som et argument. 558 00:27:18,640 --> 00:27:23,810 Så denne søkefunksjonen her tar et argument en node *. 559 00:27:23,810 --> 00:27:27,420 Og så hva node du tilfeldigvis være ser på er den du behandler 560 00:27:27,420 --> 00:27:31,510 som root når du passerer det i. 561 00:27:31,510 --> 00:27:32,320 Og jeg er klar. 562 00:27:32,320 --> 00:27:33,480 De er mine lysbilder. 563 00:27:33,480 --> 00:27:35,940 Den neste personen kan komme swap i en bærbar PC og mikrofon. 564 00:27:35,940 --> 00:27:47,390 565 00:27:47,390 --> 00:27:49,760 >> ROB BOWDEN: Jeg tror jeg kan ha tolket det spørsmålet annerledes. 566 00:27:49,760 --> 00:27:53,826 Men jeg tolket det som, hvis du har tallene 1, 2, og 3, hvordan gjør vi 567 00:27:53,826 --> 00:27:56,720 vet å lage to roten i motsetning til 1 eller 3? 568 00:27:56,720 --> 00:27:59,480 Hvis vi gjør to roten, så er det pent 1 og 3 til venstre og høyre. 569 00:27:59,480 --> 00:28:04,610 Men hvis en er roten, så er det en til top, 2 til høyre, 3 mot høyre. 570 00:28:04,610 --> 00:28:10,880 Så som standard, trenger du ikke vet hva du skal gjøre roten. 571 00:28:10,880 --> 00:28:15,400 Og for noen algoritme vi forventer å gi deg, bare det første du 572 00:28:15,400 --> 00:28:16,680 innsats ville være roten. 573 00:28:16,680 --> 00:28:19,890 Eller vi skulle gi deg et binært tre som Det finnes allerede som har en rot. 574 00:28:19,890 --> 00:28:24,760 Men andre algoritmer finnes slik at roten vil oppdatere, slik at hvis du 575 00:28:24,760 --> 00:28:28,370 ende opp i en situasjon der det er en, to, 3, vil den automatisk oppdatere til 576 00:28:28,370 --> 00:28:30,900 foreta to nye roten, slik at det er fortsatt pent balansert. 577 00:28:30,900 --> 00:28:33,750 578 00:28:33,750 --> 00:28:34,833 >> ANGELA LI: Cool. 579 00:28:34,833 --> 00:28:36,170 Hei, folkens. 580 00:28:36,170 --> 00:28:37,810 Jeg er Angela. 581 00:28:37,810 --> 00:28:42,490 Og jeg kommer til å fullføre av våre C og deretter gå inn i noen av våre web 582 00:28:42,490 --> 00:28:43,120 teknologier - 583 00:28:43,120 --> 00:28:46,570 HTTP, HTML og CSS. 584 00:28:46,570 --> 00:28:49,610 Så det første er buffer flow angrep. 585 00:28:49,610 --> 00:28:53,070 Så la oss ta en titt på denne koden. 586 00:28:53,070 --> 00:28:54,260 Det er ganske enkelt. 587 00:28:54,260 --> 00:28:55,460 Det er en funksjon foo. 588 00:28:55,460 --> 00:28:56,990 Og den ikke returnerer noe. 589 00:28:56,990 --> 00:29:00,950 Men det tar i en peker til en streng som heter bar. 590 00:29:00,950 --> 00:29:04,920 >> Og det kommer til å erklære dette buffer, noe som er et tegn 591 00:29:04,920 --> 00:29:07,690 array som har 12 plasser. 592 00:29:07,690 --> 00:29:11,730 Og den bruker memcpy, som er bare en funksjon som kopierer fra en adresse 593 00:29:11,730 --> 00:29:12,910 inn i en annen. 594 00:29:12,910 --> 00:29:19,400 Så dette er å prøve å kopiere inn vår buffer fra uansett 595 00:29:19,400 --> 00:29:21,140 bar peker til. 596 00:29:21,140 --> 00:29:24,640 Så noen anelse om hva som er galt med denne koden? 597 00:29:24,640 --> 00:29:27,568 598 00:29:27,568 --> 00:29:30,830 >> PUBLIKUM: Ved baren er lenger enn C, vil de overskrive. 599 00:29:30,830 --> 00:29:31,520 >> ANGELA LI: Ja, akkurat. 600 00:29:31,520 --> 00:29:34,200 Vi har ingen garanti for at bar kommer til å være mindre enn 12. 601 00:29:34,200 --> 00:29:36,080 Vi har nettopp gjort noen vilkårlig nummer 12. 602 00:29:36,080 --> 00:29:38,380 Og vi var liksom, la oss håpe at vår brukerundersøkelser er mindre enn 603 00:29:38,380 --> 00:29:40,440 12 tegn lange. 604 00:29:40,440 --> 00:29:46,320 Så i en ideell verden, hvis våre innspill er alltid som forventet, så vi får 605 00:29:46,320 --> 00:29:47,550 noe sånt, hallo. 606 00:29:47,550 --> 00:29:48,920 Det er mindre enn 12 tegn. 607 00:29:48,920 --> 00:29:51,870 Det blir lest inn char c. 608 00:29:51,870 --> 00:29:53,280 Og så gjør vi noe med det. 609 00:29:53,280 --> 00:29:54,800 Det spiller egentlig ingen rolle. 610 00:29:54,800 --> 00:29:59,740 >> Men en ondsinnet person kunne gjøre noe mer som dette, hvor de 611 00:29:59,740 --> 00:30:04,760 gi oss uansett bar peker til, det kommer til å peke til dette enorme utvalget 612 00:30:04,760 --> 00:30:06,280 av bare A-er. 613 00:30:06,280 --> 00:30:10,680 Og dette er måten lenger enn 12. 614 00:30:10,680 --> 00:30:13,830 Så det kommer til å gå hele veien ned her til der avkastningen 615 00:30:13,830 --> 00:30:15,420 adresse pleide å være. 616 00:30:15,420 --> 00:30:17,860 Så la oss si at denne funksjonen kalles foo. 617 00:30:17,860 --> 00:30:20,970 Kanskje foo ble kalt av noen andre funksjon, som ble kalt av hoved. 618 00:30:20,970 --> 00:30:24,890 Så når foo er i gang, må det å vite hvor du skal gå tilbake til. 619 00:30:24,890 --> 00:30:29,130 >> Hvis foo ble kalt av noen funksjon som heter Baz, har det å vite at det er 620 00:30:29,130 --> 00:30:30,250 må gå tilbake til Baz. 621 00:30:30,250 --> 00:30:34,040 Og det er det denne returadresse her nede er å fortelle oss. 622 00:30:34,040 --> 00:30:38,340 Men hvis vi overskrive den med noen andre adressen, i dette tilfelle, er dette en 623 00:30:38,340 --> 00:30:42,650 fremstilling av adressen til begynnelsen av denne buffer, deretter 624 00:30:42,650 --> 00:30:45,240 hva som faktisk kommer til å skje er at stedet for å returnere tilbake til baz, 625 00:30:45,240 --> 00:30:48,470 som kalles vår funksjon, er det bare kommer til å gå til forsiden av denne koden. 626 00:30:48,470 --> 00:30:53,930 >> Og hvis dette var det fordi en ondsinnet hacker fyr kom og 627 00:30:53,930 --> 00:30:56,820 injisert dette, så kanskje dette beløpet av A-er er faktisk ikke A sin. 628 00:30:56,820 --> 00:31:02,030 Og det er faktisk bare kode som bryter datamaskinen eller noe. 629 00:31:02,030 --> 00:31:05,930 Så for å være defensiv om denne typen ting, må du aldri anta at 630 00:31:05,930 --> 00:31:09,120 brukerundersøkelser er en viss Mengden av tegn. 631 00:31:09,120 --> 00:31:13,310 For eksempel, når du gjorde stavekontroll, du ble fortalt at ordene var 632 00:31:13,310 --> 00:31:15,580 bare skal være 40 tegn lang maksimum. 633 00:31:15,580 --> 00:31:16,570 Og det var bra. 634 00:31:16,570 --> 00:31:20,150 >> Men hvis ikke, så ville du ha til sørg for å bare lese i 45 635 00:31:20,150 --> 00:31:21,520 tegn om gangen. 636 00:31:21,520 --> 00:31:24,430 Ellers kan du overskrive buffer. 637 00:31:24,430 --> 00:31:26,140 Eventuelle spørsmål om det. 638 00:31:26,140 --> 00:31:26,733 Yeah. 639 00:31:26,733 --> 00:31:28,850 >> PUBLIKUM: Kan du bare snakke litt mer om disse? 640 00:31:28,850 --> 00:31:29,790 >> ANGELA LI: Beklager. 641 00:31:29,790 --> 00:31:31,040 Ja. 642 00:31:31,040 --> 00:31:32,813 643 00:31:32,813 --> 00:31:35,870 >> PUBLIKUM: The mic er bare for video. 644 00:31:35,870 --> 00:31:37,640 Jeg vil prøve og prosjekt. 645 00:31:37,640 --> 00:31:39,900 Hei, folkens. 646 00:31:39,900 --> 00:31:40,920 Sup? 647 00:31:40,920 --> 00:31:45,330 Så la oss gå over et par ting i den CS50-biblioteket, som du har brukt 648 00:31:45,330 --> 00:31:49,072 hele semesteret, for det meste å få brukerundersøkelser. 649 00:31:49,072 --> 00:31:53,140 Som du vet, du inkluderer den CS50 biblioteket ved å bare gjøre CS50.h, som 650 00:31:53,140 --> 00:31:55,660 inneholder alle prototyper av funksjoner som du kan bruke, som 651 00:31:55,660 --> 00:31:58,640 GetString og GetInt, og GetFloat, et cetera. 652 00:31:58,640 --> 00:32:02,870 Og det er dette en linje i CS50 bibliotek som definerer en streng, som 653 00:32:02,870 --> 00:32:05,380 dere alle vet nå er bare en char *. 654 00:32:05,380 --> 00:32:07,900 >> Men la oss ta en titt på hvordan GetString fungerer. 655 00:32:07,900 --> 00:32:10,010 Dette er en svært forkortet versjon. 656 00:32:10,010 --> 00:32:15,090 Du kan trekke opp de CS50 bibliotek filer fra, tror jeg, manuals.CS50.net. 657 00:32:15,090 --> 00:32:16,750 Og du kan lese gjennom selve funksjonen. 658 00:32:16,750 --> 00:32:19,330 Men dette dekker noen av de viktigste delene. 659 00:32:19,330 --> 00:32:23,870 Derfor har vi laget noen buffer med en viss kapasitet. 660 00:32:23,870 --> 00:32:27,570 Og det vi gjør er at vi får en karakter gangen fra standard n. 661 00:32:27,570 --> 00:32:30,910 Det er der de bruker innganger Teksten i konsollen. 662 00:32:30,910 --> 00:32:33,430 >> Og så skal vi lese i en karakter så lenge det ikke er en ny 663 00:32:33,430 --> 00:32:37,220 linje og det er ikke slutt på fil, som er slutten av standard input. 664 00:32:37,220 --> 00:32:45,690 Og for hvert tegn som vi leser i, hvis det tegnet ender opp med å legge 665 00:32:45,690 --> 00:32:50,120 til antall tegn har vi lest i, og det er mer enn kapasiteten, 666 00:32:50,120 --> 00:32:53,490 så det vi gjør er vi bare endre størrelsen vår buffer, slik at den er dobbelt så lang. 667 00:32:53,490 --> 00:32:56,950 Så igjen, denne beskytte mot bufferen flow angrep, fordi du leser i 668 00:32:56,950 --> 00:32:58,315 et tegn om gangen. 669 00:32:58,315 --> 00:33:02,290 Og hvis vi på noe tidspunkt du leser i altfor mange, du bare utvide buffer. 670 00:33:02,290 --> 00:33:03,330 Du multipliserer det med to. 671 00:33:03,330 --> 00:33:05,510 Og da har du mer plass. 672 00:33:05,510 --> 00:33:09,120 >> Ellers, du bare legge et tegn til buffer. 673 00:33:09,120 --> 00:33:15,080 Og etter at du har lest i hele tegn, vil den krympe bufferen 674 00:33:15,080 --> 00:33:18,510 ned igjen til normal størrelse, legge til et null terminator, og så tilbake. 675 00:33:18,510 --> 00:33:21,880 676 00:33:21,880 --> 00:33:24,960 Nå, la oss se på GetInt. 677 00:33:24,960 --> 00:33:27,700 Kan dere lese dette? 678 00:33:27,700 --> 00:33:30,710 Jeg kan zoome inn litt. 679 00:33:30,710 --> 00:33:33,410 680 00:33:33,410 --> 00:33:34,660 Jeg vet ikke hvordan datamaskiner fungerer. 681 00:33:34,660 --> 00:33:40,840 682 00:33:40,840 --> 00:33:41,270 Bare hyggelig. 683 00:33:41,270 --> 00:33:42,520 Jeg kan ikke zoome inn på riktig måte. 684 00:33:42,520 --> 00:33:47,500 685 00:33:47,500 --> 00:33:48,770 >> Dette er virkelig hardt. 686 00:33:48,770 --> 00:33:49,180 Jeg beklager. 687 00:33:49,180 --> 00:33:51,490 La oss bare se på dette. 688 00:33:51,490 --> 00:33:57,140 Så hva GetInt gjør er det første leser i en snor fra GetString, som 689 00:33:57,140 --> 00:33:59,250 vi har implementert før. 690 00:33:59,250 --> 00:34:02,945 Og den viktigste delen å merke seg her er hvis denne delingen at det ender opp 691 00:34:02,945 --> 00:34:06,400 lesing er som faktisk ikke en streng, så vi bare tilbake INT_MAX til 692 00:34:06,400 --> 00:34:09,409 representerer svikt. 693 00:34:09,409 --> 00:34:12,645 Hvorfor får vi tilbake INT_MAX stedet negativ 1 eller 1? 694 00:34:12,645 --> 00:34:13,895 Noen ideer? 695 00:34:13,895 --> 00:34:16,853 696 00:34:16,853 --> 00:34:19,350 >> PUBLIKUM: [uhørbart] negativ en mot en. 697 00:34:19,350 --> 00:34:20,070 >> ANGELA LI: Ja, akkurat. 698 00:34:20,070 --> 00:34:24,560 Så du er langt mer sannsynlig å bare ønsker å legge inn en eller negativ en når du blir bedt om 699 00:34:24,560 --> 00:34:27,469 for en n'te og hva n'te Maxes. 700 00:34:27,469 --> 00:34:27,969 Det er enorme. 701 00:34:27,969 --> 00:34:29,690 Du er sannsynligvis ikke kommer til å bruke den. 702 00:34:29,690 --> 00:34:32,690 Så dette er som et design beslutning om å sørg for at du ikke ved et uhell 703 00:34:32,690 --> 00:34:38,540 returnere en feil, eller du ikke kommer tilbake 1, som kan analyseres 704 00:34:38,540 --> 00:34:41,199 som et riktig svar. 705 00:34:41,199 --> 00:34:45,110 Så hvis en linje ikke eksisterer, vi tilbake INT-MAX. 706 00:34:45,110 --> 00:34:48,090 Ellers bruker vi sscanf, som er som scanf. 707 00:34:48,090 --> 00:34:49,449 Men den leser fra en streng. 708 00:34:49,449 --> 00:34:54,310 >> Og vi har denne formatert streng, som er% i% c. 709 00:34:54,310 --> 00:34:57,440 Og vi prøver og matche det med hva brukeren ga oss. 710 00:34:57,440 --> 00:35:01,420 Vi ønsker antall matchet ting til å være 1, hvilket betyr at vi bare 711 00:35:01,420 --> 00:35:04,940 virkelig ønsker å matche et heltall omgitt av kanskje hvit 712 00:35:04,940 --> 00:35:06,840 plass, kanskje ikke. 713 00:35:06,840 --> 00:35:10,710 I dette tilfellet, hvis du setter på noe som bar, ikke bar stemmer ikke i det hele tatt, 714 00:35:10,710 --> 00:35:14,400 fordi det må være et helt tall på start. 715 00:35:14,400 --> 00:35:17,060 Så sscan aldri slått 0. 716 00:35:17,060 --> 00:35:19,640 Så du ikke returnere den. 717 00:35:19,640 --> 00:35:23,850 >> Alternativt, hvis du setter på noe som 1, 2, 3, A, B, C, at fyrstikker 718 00:35:23,850 --> 00:35:27,180 begge det hele tallet, men også tegnet etter det. 719 00:35:27,180 --> 00:35:29,990 Så sscanf vil returnere 2, som er heller ikke ideelt. 720 00:35:29,990 --> 00:35:34,620 Du ønsker ikke en, to, tre, A, B, C for å være en gyldig int. 721 00:35:34,620 --> 00:35:36,990 Slik at også ikke fungerer. 722 00:35:36,990 --> 00:35:38,530 Men si at du putter i noe sånt som 50. 723 00:35:38,530 --> 00:35:42,460 Det vil matche% i, noe som betyr det vil bli lest inn n. 724 00:35:42,460 --> 00:35:44,790 Og nå, vil n inneholde nummer 50. 725 00:35:44,790 --> 00:35:46,110 Og så kan du returnere den. 726 00:35:46,110 --> 00:35:49,270 >> Ellers treffer du på Prøv på nytt. 727 00:35:49,270 --> 00:35:55,790 Og da er det bare går over igjen før du får en skikkelig input fra brukeren. 728 00:35:55,790 --> 00:35:56,891 Eventuelle spørsmål om det? 729 00:35:56,891 --> 00:36:02,182 >> PUBLIKUM: Så hvis du var å skrive ut verdien av GetInt på [uhørbart] 730 00:36:02,182 --> 00:36:06,250 ville det være bare heltall og max? 731 00:36:06,250 --> 00:36:07,440 >> ANGELA LI: Yeah. 732 00:36:07,440 --> 00:36:11,780 Så hvis du bruker GetInt, bør du anta at du ikke vil n'te max til 733 00:36:11,780 --> 00:36:15,328 være et gyldig input, fordi du kommer å anta at det var ille. 734 00:36:15,328 --> 00:36:27,740 >> PUBLIKUM: Hvis vi ikke hadde char c og noen satt i en, to, tre, Sam, ville det 735 00:36:27,740 --> 00:36:29,430 fortsatt arbeid for 1, 2, 3? 736 00:36:29,430 --> 00:36:29,750 >> ANGELA LI: Jeg tror det ville fungere. 737 00:36:29,750 --> 00:36:33,340 Men du ikke ønsker 123Sam til være en gyldig inngang av en bruker. 738 00:36:33,340 --> 00:36:34,670 Det er egentlig ikke en int. 739 00:36:34,670 --> 00:36:36,840 Så det virker ikke rettferdig å analysere det som en int. 740 00:36:36,840 --> 00:36:40,910 741 00:36:40,910 --> 00:36:42,160 OK. 742 00:36:42,160 --> 00:36:45,800 I så fall, la oss flytte seg på internett. 743 00:36:45,800 --> 00:36:49,120 Så HTTP er ikke et språk. 744 00:36:49,120 --> 00:36:56,060 HTTP er bare sett av standarder for hvordan du sender ting fra kunder, 745 00:36:56,060 --> 00:36:57,280 det er deg, for å servere. 746 00:36:57,280 --> 00:36:59,730 Det er andre mennesker på nettet. 747 00:36:59,730 --> 00:37:02,900 >> Så HTTP står for Hypertext Overføringsprotokoll. 748 00:37:02,900 --> 00:37:04,610 Det er hjertet og sjelen av hele nettet. 749 00:37:04,610 --> 00:37:07,050 Den hyper del bare refererer til HTML. 750 00:37:07,050 --> 00:37:10,690 Overføringen er klienter som du vil sende forespørsler til 751 00:37:10,690 --> 00:37:13,060 servere, som gir svar. 752 00:37:13,060 --> 00:37:16,380 Og protokollen er bare, hvordan du forvente en server til å oppføre seg? 753 00:37:16,380 --> 00:37:19,960 Og hvordan har du tenkt å oppføre seg slik at du kan effektivisere denne 754 00:37:19,960 --> 00:37:21,920 kommunikasjonsprosessen? 755 00:37:21,920 --> 00:37:26,650 >> Så HTTP-forespørsler ligne mye på dette. 756 00:37:26,650 --> 00:37:28,070 GET er den type forespørsel. 757 00:37:28,070 --> 00:37:31,220 Dere har sett GET-forespørsler og POST forespørsler. 758 00:37:31,220 --> 00:37:36,690 At andre ting der, / me, det er bare URI eller nettadressen til der du 759 00:37:36,690 --> 00:37:38,140 vil gå i verten. 760 00:37:38,140 --> 00:37:44,140 Så denne forespørselen ber om det side, som www.facebook.com / meg. 761 00:37:44,140 --> 00:37:45,300 Og det er en GET-forespørsel. 762 00:37:45,300 --> 00:37:51,020 Og så dette HTTP/1.1, det er bare den versjonen av HTTP du bruker. 763 00:37:51,020 --> 00:37:55,020 Det er nesten alltid 1.1. 764 00:37:55,020 --> 00:37:56,880 >> Og så er det en gjeng av andre ting også. 765 00:37:56,880 --> 00:38:02,510 Du kan faktisk se disse hvis du åpne opp konsollen når du er 766 00:38:02,510 --> 00:38:03,770 surfer på nettet. 767 00:38:03,770 --> 00:38:07,290 Svarene ser noe mer som dette. 768 00:38:07,290 --> 00:38:09,620 Den øvre delen er, igjen, type HTTP du bruker 769 00:38:09,620 --> 00:38:12,310 etterfulgt av en statuskode. 770 00:38:12,310 --> 00:38:14,700 Så 200 OK er alt fungert. 771 00:38:14,700 --> 00:38:16,200 Her er innholdet. 772 00:38:16,200 --> 00:38:17,390 Innholdet kommer til å følge. 773 00:38:17,390 --> 00:38:21,730 Og så vil den fortelle deg hva slags av innhold og andre ting også. 774 00:38:21,730 --> 00:38:24,620 >> Statuskoder, er det noen viktigste som du bør vite. 775 00:38:24,620 --> 00:38:26,460 200 OK er som alt er gyllen. 776 00:38:26,460 --> 00:38:28,490 Alt fungerer. 777 00:38:28,490 --> 00:38:29,710 403 Forbidden. 778 00:38:29,710 --> 00:38:32,910 Dette har du sikkert sett hvis du har glemt chmod noe ordentlig. 779 00:38:32,910 --> 00:38:34,510 Det betyr at du ikke trenger de rette tillatelser til 780 00:38:34,510 --> 00:38:36,210 tilgang til den på serveren. 781 00:38:36,210 --> 00:38:38,110 Det er som, nei, du kan ikke se det. 782 00:38:38,110 --> 00:38:39,780 404 betyr at ting ikke eksisterer. 783 00:38:39,780 --> 00:38:40,400 Ikke funnet. 784 00:38:40,400 --> 00:38:41,640 Du har sikkert sett at mye. 785 00:38:41,640 --> 00:38:45,510 >> 500 Internal Server Error er vanligvis som noe gikk galt på siden 786 00:38:45,510 --> 00:38:46,460 til serveren. 787 00:38:46,460 --> 00:38:50,830 Så når du var å implementere pset7, hvis du hadde PHP feil, kunne du 788 00:38:50,830 --> 00:38:53,890 faktisk gå til siden og se en hel haug av PHP-feil ting. 789 00:38:53,890 --> 00:38:56,900 Men det skjer normalt ikke, fordi nettsteder ikke virkelig ønsker å 790 00:38:56,900 --> 00:38:58,830 fortelle deg hvorfor deres nettsted er brutt. 791 00:38:58,830 --> 00:39:03,370 De vil sannsynligvis bare gå tilbake et 500 Internal Server Error. 792 00:39:03,370 --> 00:39:06,120 >> Og så er det 418 jeg er en tekanne. 793 00:39:06,120 --> 00:39:07,910 Det er en hel historie om hvorfor det er en ting. 794 00:39:07,910 --> 00:39:09,860 Men du kan lese om det på din egen tid. 795 00:39:09,860 --> 00:39:11,450 Det er en hel haug med andre statuskoder også. 796 00:39:11,450 --> 00:39:12,700 Men disse er de du bør vite. 797 00:39:12,700 --> 00:39:15,660 798 00:39:15,660 --> 00:39:18,610 Så la oss snakke om HTML. 799 00:39:18,610 --> 00:39:22,180 HTML, husk, er ikke en programmeringsspråk. 800 00:39:22,180 --> 00:39:23,510 Det er et kodespråk. 801 00:39:23,510 --> 00:39:25,210 Det betyr at den beskriver innholdet. 802 00:39:25,210 --> 00:39:30,440 Den forteller deg hva et HTML-dokument ser liker eller ikke hvordan den ser ut 803 00:39:30,440 --> 00:39:32,230 men hvordan den er strukturert. 804 00:39:32,230 --> 00:39:36,110 >> Så det definerer en struktur og semantikk av nettsider. 805 00:39:36,110 --> 00:39:37,830 Det er som, dette er et avsnitt. 806 00:39:37,830 --> 00:39:40,060 Dette er en sortert liste. 807 00:39:40,060 --> 00:39:42,360 Dette er som en del av min side. 808 00:39:42,360 --> 00:39:43,260 Her er tittelen. 809 00:39:43,260 --> 00:39:44,310 Det gjør sånt. 810 00:39:44,310 --> 00:39:48,770 Det trenger ikke å style noe av det, fordi det er hva du gjør i CSS. 811 00:39:48,770 --> 00:39:50,270 Og det ser ut som en serie av nestet tags. 812 00:39:50,270 --> 00:39:54,720 Så å bruke et eksempel på en veldig enkel HTML-side, har du DOCTYPE 813 00:39:54,720 --> 00:39:56,720 erklæring der oppe. 814 00:39:56,720 --> 00:40:00,940 >> Dette DOCTYPE-deklarasjonen er si, vi bruker HTML5. 815 00:40:00,940 --> 00:40:03,370 Da har du store HTML-koden. 816 00:40:03,370 --> 00:40:05,230 Den inneholder et hode og et legeme. 817 00:40:05,230 --> 00:40:06,970 Inne i hodet, har du tittelen. 818 00:40:06,970 --> 00:40:12,950 Det er det som går i tittelen feltet i nettleseren din. 819 00:40:12,950 --> 00:40:15,810 Vi har en link tag som knytter i et eksternt stilark. 820 00:40:15,810 --> 00:40:19,880 Og så har vi et skript som trekker fra en ekstern Java også. 821 00:40:19,880 --> 00:40:23,750 >> Og så inne i kroppen vår er faktisk hva som blir vist på siden. 822 00:40:23,750 --> 00:40:28,210 Vi har fått et avsnitt og deretter en image inne nevnte punkt. 823 00:40:28,210 --> 00:40:32,000 Dette er et bilde av kattunger. 824 00:40:32,000 --> 00:40:35,840 Legg merke til at bilde tag lukker seg. 825 00:40:35,840 --> 00:40:41,760 Så i stedet for å åpne med et bilde og deretter gjøre en annen / bilde, du 826 00:40:41,760 --> 00:40:47,500 bare ha denne lille skråstrek her, som lukker den. 827 00:40:47,500 --> 00:40:53,670 Og bildekoden har også denne tasten verdi attributt kalt alt. 828 00:40:53,670 --> 00:40:56,970 Det er alternativ tekst som skjer når du holder pekeren over den. 829 00:40:56,970 --> 00:41:03,170 >> De fleste HTML-elementer har noen nøkkelverdi ting som du kan gi det, diverse 830 00:41:03,170 --> 00:41:04,420 tilpasning. 831 00:41:04,420 --> 00:41:06,230 832 00:41:06,230 --> 00:41:08,705 Yeah. 833 00:41:08,705 --> 00:41:09,955 >> PUBLIKUM: [uhørbart]. 834 00:41:09,955 --> 00:41:17,510 835 00:41:17,510 --> 00:41:19,680 >> ANGELA LI: Vel, så det er en egenskap av koden. 836 00:41:19,680 --> 00:41:25,320 Så hvis du skulle bruke jQuery, kunne du velger image.getAttribute. 837 00:41:25,320 --> 00:41:27,930 Og så kan du søke etter få alt-attributtet. 838 00:41:27,930 --> 00:41:31,040 Og det vil gi deg kattunger. 839 00:41:31,040 --> 00:41:37,400 Hvis du husker skjemaer i HTML, inngang elementer vil ha navne attributter. 840 00:41:37,400 --> 00:41:41,870 Og det er det PHP bruker til å sende forespørsler når et skjema som sendes inn. 841 00:41:41,870 --> 00:41:44,762 842 00:41:44,762 --> 00:41:50,064 >> PUBLIKUM: Visste du nevne noe om hvordan hvis du bruker kittens.jpg eller 843 00:41:50,064 --> 00:41:54,410 noe som har den savnede filmapper eller andre filer? 844 00:41:54,410 --> 00:41:54,750 >> ANGELA LI: Ja. 845 00:41:54,750 --> 00:41:57,010 Så dette er det som kalles en relativ banen, fordi jeg ikke gi 846 00:41:57,010 --> 00:41:58,740 du hele banen. 847 00:41:58,740 --> 00:42:05,160 Dette er som når du er i C hvis du gjør fopen noen fil, hvis du fopen hi.txt, at 848 00:42:05,160 --> 00:42:09,190 hi.txt er forventet å være i samme katalogen, med mindre du gir den en mer 849 00:42:09,190 --> 00:42:11,530 kompleks bane. 850 00:42:11,530 --> 00:42:14,900 >> PUBLIKUM: Så du kunne spesifisere hvilken mappe [uhørbart]? 851 00:42:14,900 --> 00:42:17,660 >> ANGELA LI: Yeah. 852 00:42:17,660 --> 00:42:19,370 Og du kan slå opp hvordan du gjør det. 853 00:42:19,370 --> 00:42:23,480 Men hvis jeg ønsket å få kittens.jpg ut av den overordnede katalogen, ville jeg gjøre 854 00:42:23,480 --> 00:42:24,730 .. / Kittens.jpg. 855 00:42:24,730 --> 00:42:29,680 856 00:42:29,680 --> 00:42:30,930 Yeah. 857 00:42:30,930 --> 00:42:32,960 858 00:42:32,960 --> 00:42:33,760 Unnskyld. 859 00:42:33,760 --> 00:42:34,045 Yeah. 860 00:42:34,045 --> 00:42:35,700 Oh man, jeg glemte spørsmålet. 861 00:42:35,700 --> 00:42:36,460 Hva var spørsmålet? 862 00:42:36,460 --> 00:42:39,570 Oh, var spørsmålet er, kittens.jpg forventes å være i samme katalog? 863 00:42:39,570 --> 00:42:40,630 Og i dette tilfellet er det. 864 00:42:40,630 --> 00:42:44,030 Men du kan også gi den en bestemt bane slik at den ikke behøver å være. 865 00:42:44,030 --> 00:42:47,100 866 00:42:47,100 --> 00:42:48,350 Bra? 867 00:42:48,350 --> 00:42:50,190 868 00:42:50,190 --> 00:42:51,350 >> CSS. 869 00:42:51,350 --> 00:42:55,420 Så CSS, som HTML, er ikke et programmeringsspråk. 870 00:42:55,420 --> 00:42:58,250 CSS er bare en serie med styling regler. 871 00:42:58,250 --> 00:43:00,130 Det står for Cascading Style Sheets. 872 00:43:00,130 --> 00:43:03,910 Og du bruke det sammen med HTML å style sider. 873 00:43:03,910 --> 00:43:08,140 Så er det tre måter du kan ta den med. 874 00:43:08,140 --> 00:43:11,950 En måte du kan gjøre det er i hodet del av HTML, kan du bare 875 00:43:11,950 --> 00:43:15,410 åpne en stil tag og så holde noen CSS-regler i det. 876 00:43:15,410 --> 00:43:16,759 Det er ganske OK. 877 00:43:16,759 --> 00:43:17,228 Yeah. 878 00:43:17,228 --> 00:43:21,449 >> PUBLIKUM: Kan du putte dem stil koder i mellom, la oss 879 00:43:21,449 --> 00:43:22,860 si, kropp og / body. 880 00:43:22,860 --> 00:43:27,400 Og så ville du være styling bare i kroppen. 881 00:43:27,400 --> 00:43:28,840 >> ANGELA LI: Du kunne. 882 00:43:28,840 --> 00:43:29,590 Det vil fungere. 883 00:43:29,590 --> 00:43:33,990 Men du bør ikke, fordi styling er form av metadata som bør gå i 884 00:43:33,990 --> 00:43:35,890 leder av dokumentet. 885 00:43:35,890 --> 00:43:38,280 Kroppen skal egentlig bare inneholde hva som faktisk kommer til å 886 00:43:38,280 --> 00:43:39,420 møt opp på siden din. 887 00:43:39,420 --> 00:43:42,155 >> PUBLIKUM: Så du vil sette stil i hodet ditt til å style den 888 00:43:42,155 --> 00:43:43,930 hel nettside, ikke sant? 889 00:43:43,930 --> 00:43:44,300 >> ANGELA LI: Yeah. 890 00:43:44,300 --> 00:43:50,470 Så setter stil her, disse CSS-regler vil gjelde for hele siden basert på 891 00:43:50,470 --> 00:43:52,100 sine velgere. 892 00:43:52,100 --> 00:43:57,090 Så bedre måte å gjøre det på er i stedet av å ha en stil tag i hodet ditt, 893 00:43:57,090 --> 00:44:00,430 du har denne koblingen til en ekstern stil ark som jeg viste deg i 894 00:44:00,430 --> 00:44:01,980 forrige eksempel. 895 00:44:01,980 --> 00:44:05,920 Hva dette er den prøver og finner filen style.css og deretter trekker det 896 00:44:05,920 --> 00:44:08,470 i og anvender det som den stiler for siden. 897 00:44:08,470 --> 00:44:10,500 Og din style.css ville bare se slik ut. 898 00:44:10,500 --> 00:44:13,330 Det ville bare være en haug med CSS. 899 00:44:13,330 --> 00:44:16,210 >> Og til slutt, det er en annen måte du kan inkludere CSS, som du virkelig 900 00:44:16,210 --> 00:44:17,480 bør ikke noensinne gjøre. 901 00:44:17,480 --> 00:44:18,950 Det er samtalen inline styling. 902 00:44:18,950 --> 00:44:22,650 Og så noen HTML-element kan også ta en stil attributt. 903 00:44:22,650 --> 00:44:26,320 Og så i den stilen attributt, du kan gi det CSS-regler. 904 00:44:26,320 --> 00:44:29,140 Så i dette tilfellet, hva div jeg er definere akkurat her, det kommer til å 905 00:44:29,140 --> 00:44:32,580 har en svart bakgrunn og en hvit tekstfarge. 906 00:44:32,580 --> 00:44:35,620 Men du bør ikke gjøre dette, fordi det dette ikke er det setter din styling 907 00:44:35,620 --> 00:44:36,850 inni HTML. 908 00:44:36,850 --> 00:44:40,530 >> Og jeg vet at vi har snakket om HTML er struktur og CSS er stil. 909 00:44:40,530 --> 00:44:42,790 Hvis du gjør dette, blander det dem sammen. 910 00:44:42,790 --> 00:44:44,550 Og det er ikke veldig rent. 911 00:44:44,550 --> 00:44:45,800 Så ikke gjør det. 912 00:44:45,800 --> 00:44:47,690 913 00:44:47,690 --> 00:44:52,100 Ved hjelp av et eksempel på CSS, der oppe, vi bare velg kroppen av HTML 914 00:44:52,100 --> 00:44:52,380 dokumentar. 915 00:44:52,380 --> 00:44:55,110 Og vi er like, alt er kommer til å være Comic Sans. 916 00:44:55,110 --> 00:44:57,290 Jeg tror heller ikke anbefale det. 917 00:44:57,290 --> 00:44:59,940 Men du kan gjøre det. 918 00:44:59,940 --> 00:45:03,140 >> Den andre regelen akkurat her, det kommer å velge element på 919 00:45:03,140 --> 00:45:04,880 side med ID viktigste. 920 00:45:04,880 --> 00:45:11,690 Så uansett hva HTML-element, sa jeg ID = Hoved, kommer jeg til å gi den en 921 00:45:11,690 --> 00:45:16,020 20-pixel margin og justere alt, all tekst, til midten. 922 00:45:16,020 --> 00:45:19,030 Det siste velger av CSS-klasse. 923 00:45:19,030 --> 00:45:24,450 Så noe element på siden som jeg ga en seksjon klasse, kommer jeg til å gjøre det 924 00:45:24,450 --> 00:45:26,602 en bakgrunnsfarge av lys blå. 925 00:45:26,602 --> 00:45:29,380 926 00:45:29,380 --> 00:45:30,040 Jepp. 927 00:45:30,040 --> 00:45:30,700 Det er alt jeg fikk. 928 00:45:30,700 --> 00:45:30,890 Spørsmål? 929 00:45:30,890 --> 00:45:34,020 >> PUBLIKUM: Hva gjør hashtag før hoved gjøre? 930 00:45:34,020 --> 00:45:36,310 >> ANGELA LI: Spørsmålet er, hva gjør hashtag før hoved do? 931 00:45:36,310 --> 00:45:40,770 I dette tilfellet, hash i CSS betyr Valg etter ID. 932 00:45:40,770 --> 00:45:47,490 Så hvis jeg hadde noen HTML-element, som Divid = viktigste, dette CSS-regel velger 933 00:45:47,490 --> 00:45:49,260 tingen med ID viktigste. 934 00:45:49,260 --> 00:45:53,940 Og på samme måte, for foran delen er å velge etter CSS-klasse eller 935 00:45:53,940 --> 00:45:56,558 Velg etter HTML klasse. 936 00:45:56,558 --> 00:46:00,940 >> PUBLIKUM: Hvorfor er det en har før 6 i bakgrunnsfarge? 937 00:46:00,940 --> 00:46:01,270 >> ANGELA LI: Yeah. 938 00:46:01,270 --> 00:46:03,360 Så spørsmålet er, hvorfor er det en hash før 6? 939 00:46:03,360 --> 00:46:05,320 Dette er annerledes enn det hasj. 940 00:46:05,320 --> 00:46:09,500 Dette betyr at du gir heksadesimale farge. 941 00:46:09,500 --> 00:46:14,260 Så hex farger, dette bare representerer en farge. 942 00:46:14,260 --> 00:46:17,860 Og du husker RGB triples når du gjorde forensics PSett? 943 00:46:17,860 --> 00:46:18,770 Dette er lik. 944 00:46:18,770 --> 00:46:21,590 De to første sifrene representerer hvor mye rødt er i fargen. 945 00:46:21,590 --> 00:46:23,260 Den andre to representerer hvor mye grønt. 946 00:46:23,260 --> 00:46:25,450 Og den tredje representerer hvor mye blått. 947 00:46:25,450 --> 00:46:30,060 Og hasj er dette kommer for å representere en farge. 948 00:46:30,060 --> 00:46:35,660 >> Så alt fra 0, 0, 0, 0, 0, 0 opp til F, F, F, F, F, F er gyldig. 949 00:46:35,660 --> 00:46:39,550 Det er noen gyldig farge som kan vises av nettleseren din. 950 00:46:39,550 --> 00:46:39,790 Spørsmål? 951 00:46:39,790 --> 00:46:43,590 >> PUBLIKUM: Hva er forskjellen mellom ved hjelp av ID og etter klasse? 952 00:46:43,590 --> 00:46:46,470 >> ANGELA LI: Spørsmålet er hva som er forskjellen 953 00:46:46,470 --> 00:46:48,950 ved hjelp av ID og klasse? 954 00:46:48,950 --> 00:46:54,390 Du kan bare ha ett element i en HTML-dokument som har en gitt ID. 955 00:46:54,390 --> 00:46:58,660 Så bare én ting på min side er lov til å ha ID viktigste. 956 00:46:58,660 --> 00:47:02,580 Så du bruker det for dette er overskriften. 957 00:47:02,580 --> 00:47:03,850 Dette er navigeringen. 958 00:47:03,850 --> 00:47:05,230 Dette er bunnteksten. 959 00:47:05,230 --> 00:47:09,070 Klassene er annerledes, fordi du kan gjelder klassene til så mange HTML-elementer 960 00:47:09,070 --> 00:47:10,100 som du ønsker. 961 00:47:10,100 --> 00:47:15,860 >> Så for eksempel, gjorde jeg klasse delen, fordi det er sannsynligvis mer enn én 962 00:47:15,860 --> 00:47:17,540 seksjon på siden min. 963 00:47:17,540 --> 00:47:20,200 Du er bare lov til å ha så mange elementer på siden med det samme 964 00:47:20,200 --> 00:47:23,190 klasse, men bare en med en bestemt ID. 965 00:47:23,190 --> 00:47:25,600 >> PUBLIKUM: Så prikk representerer klassen? 966 00:47:25,600 --> 00:47:26,090 >> ANGELA LI: Yeah. 967 00:47:26,090 --> 00:47:27,380 En prikk representerer en klasse. 968 00:47:27,380 --> 00:47:29,990 969 00:47:29,990 --> 00:47:31,540 Cool. 970 00:47:31,540 --> 00:47:32,370 Det er alt jeg har fått, folkens. 971 00:47:32,370 --> 00:47:33,544 Takk. 972 00:47:33,544 --> 00:48:13,380 >> [APPLAUSE] 973 00:48:13,380 --> 00:48:14,290 >> ZAMYLA CHAN: Hei, alle sammen. 974 00:48:14,290 --> 00:48:14,880 Jeg er Zamyla. 975 00:48:14,880 --> 00:48:18,830 Jeg kommer til å bli dekket PHP, MVC og SQL dag. 976 00:48:18,830 --> 00:48:22,350 977 00:48:22,350 --> 00:48:26,110 Mye av materialet som jeg vil være dekker kommer til å være ganske mye 978 00:48:26,110 --> 00:48:29,100 rett ut av pset7. 979 00:48:29,100 --> 00:48:29,700 OK. 980 00:48:29,700 --> 00:48:31,180 Så hva er PHP? 981 00:48:31,180 --> 00:48:35,150 PHP står for PHP Hypertext Preprosessor. 982 00:48:35,150 --> 00:48:38,740 Slik er det i seg selv er en rekursiv navn, noe som er ganske kult. 983 00:48:38,740 --> 00:48:42,220 PHP er et server-side skriptspråk, og det gir backend 984 00:48:42,220 --> 00:48:44,610 og de logiske fundamentet av våre nettsider. 985 00:48:44,610 --> 00:48:48,520 >> Så Angela snakket mye om HTML og CSS som vil gjøre konstruksjonen 986 00:48:48,520 --> 00:48:49,530 på nettsiden. 987 00:48:49,530 --> 00:48:53,210 Men hva hvis du ønsker å endre det innhold dynamisk eller om det varierer 988 00:48:53,210 --> 00:48:55,240 basert på brukerens eller visse vilkår? 989 00:48:55,240 --> 00:48:57,060 Det er der PHP leveres i. 990 00:48:57,060 --> 00:49:02,610 Nå, typisk, PHP kan ta noen mindre linjer for å gjennomføre det samme 991 00:49:02,610 --> 00:49:07,380 i C. Det er fordi PHP håndterer minne management for programmereren, 992 00:49:07,380 --> 00:49:11,170 i motsetning til oss måtte malloc gratis, sånne ting. 993 00:49:11,170 --> 00:49:15,430 >> Men siden PHP er en fortolkende language, typisk kan det utføre 994 00:49:15,430 --> 00:49:19,540 litt saktere enn C, noe er et kompilert språk. 995 00:49:19,540 --> 00:49:23,150 Fordi vi flytter programmering språk, la oss se på hvordan 996 00:49:23,150 --> 00:49:24,570 syntaks vil variere. 997 00:49:24,570 --> 00:49:28,770 La oss være veldig forsiktig så du ikke bli forvirret med dette. 998 00:49:28,770 --> 00:49:33,750 Så med PHP syntaks, enten du er Inkludering PHP innsiden av en HTML 999 00:49:33,750 --> 00:49:40,430 fil eller innen en. php-fil selv, du må omslutte koden i den åpne 1000 00:49:40,430 --> 00:49:45,270 PHP og de lukkede PHP koder som følgende måte, i likhet med på skjermen. 1001 00:49:45,270 --> 00:49:46,660 >> Variabler i PHP. 1002 00:49:46,660 --> 00:49:51,490 Hver enkelt variabel vil starte med $-tegnet etterfulgt av navnet på 1003 00:49:51,490 --> 00:49:53,150 variabelen. 1004 00:49:53,150 --> 00:49:56,530 Nå er variabler i PHP løst skrevet, noe som betyr at du ikke trenger 1005 00:49:56,530 --> 00:50:00,030 for å indikere hva datatypen er når du erklære det. 1006 00:50:00,030 --> 00:50:03,505 Men dette betyr ikke at de har ikke noen typer på alle. 1007 00:50:03,505 --> 00:50:09,370 Så hvis jeg deklarere en variabel og bare satt det lik 1, og da jeg erklærer 1008 00:50:09,370 --> 00:50:15,140 en annen variabel, settes det lik "1" og deretter en annen 1.0, vel, 1009 00:50:15,140 --> 00:50:19,410 avhengig av typen av likhet operatører bruker jeg, hvis jeg ønsker å sammenligne 1010 00:50:19,410 --> 00:50:21,830 på tvers av alle typer, og deretter de vil være lik. 1011 00:50:21,830 --> 00:50:25,570 Men hvis jeg vil være sikker på at typer er like, kan PHP fortsatt gjøre 1012 00:50:25,570 --> 00:50:28,690 at selv om vi ikke viser hvilken type det er når vi 1013 00:50:28,690 --> 00:50:31,170 først gjøre filen. 1014 00:50:31,170 --> 00:50:33,990 >> Nå, i PHP, selv om vi er bytter over fra programmering 1015 00:50:33,990 --> 00:50:39,360 språk fra C, vi har fortsatt vår trofaste hvis tilstand, akkurat som dette. 1016 00:50:39,360 --> 00:50:43,270 Vi har fortsatt våre mens loops, bare som dette, hvor du putter i din 1017 00:50:43,270 --> 00:50:47,300 tilstand og deretter delen av løkken. 1018 00:50:47,300 --> 00:50:50,360 Og så har vi også vår for loop, som vanligvis ser slik ut. 1019 00:50:50,360 --> 00:50:55,330 Så hvis jeg ønsket å iterere over alle ni psets og sende og ringe en 1020 00:50:55,330 --> 00:50:58,960 funksjon submitPset, så jeg kan gjøre det her, som dere har alt 1021 00:50:58,960 --> 00:50:59,830 gjøres ved dette punktet. 1022 00:50:59,830 --> 00:51:01,080 Gratulerer, forresten. 1023 00:51:01,080 --> 00:51:04,560 1024 00:51:04,560 --> 00:51:07,550 >> For kameraet, folk sa takk. 1025 00:51:07,550 --> 00:51:11,220 Nå, hvis du ikke ønsker å bare bruke denne for loop, deretter PHP faktisk også 1026 00:51:11,220 --> 00:51:13,580 har ting kalt foreach løkker. 1027 00:51:13,580 --> 00:51:22,210 Så hvis jeg hadde en rekke heltall, 0 gjennom åtte, lagret i matrisen psets, 1028 00:51:22,210 --> 00:51:27,290 så jeg kunne ha en foreach loop som gjentas mer enn hvert nummer i psets. 1029 00:51:27,290 --> 00:51:30,640 Og så jeg kunne ringe det samme fungere åtte ganger, 1030 00:51:30,640 --> 00:51:31,910 akkurat som jeg gjorde før. 1031 00:51:31,910 --> 00:51:36,480 Så dette for hver sløyfe er fint, fordi du trenger ikke å hvis du ikke vet 1032 00:51:36,480 --> 00:51:39,470 den eksakte lengden på tabellen som du har, så bruker dette foreach løkke 1033 00:51:39,470 --> 00:51:42,800 vil ta seg av det for deg. 1034 00:51:42,800 --> 00:51:45,410 >> Så jeg gjorde psets som en matrise. 1035 00:51:45,410 --> 00:51:46,700 La oss se på det. 1036 00:51:46,700 --> 00:51:51,290 Arrays i PHP er vanligvis den samme som de som vi har hatt i C, der 1037 00:51:51,290 --> 00:51:52,960 du kan erklære en matrise. 1038 00:51:52,960 --> 00:51:59,200 Og her, kan jeg erklære en tom array og deretter bygge opp dynamisk ved hjelp 1039 00:51:59,200 --> 00:52:00,850 indekser som heltall. 1040 00:52:00,850 --> 00:52:04,140 Så indeks 0, kommer jeg til å lagre et heltall heter en. 1041 00:52:04,140 --> 00:52:09,210 At indeksen 1 på listen min, jeg kommer for å lagre verdien to. 1042 00:52:09,210 --> 00:52:12,670 Og på den tredje indeksen, men den andre rekke, kommer jeg til å 1043 00:52:12,670 --> 00:52:14,870 lagre nummeret 12. 1044 00:52:14,870 --> 00:52:17,250 >> Nå er dette greit i at fungerer det fungerer godt. 1045 00:52:17,250 --> 00:52:21,310 Men sier det er viktig for meg hva hver indeks holder. 1046 00:52:21,310 --> 00:52:24,500 For meg, indeks 0 betyr hvor mange katter jeg har. 1047 00:52:24,500 --> 00:52:27,400 Og indeksen 1 betyr hvor mange ugler jeg har. 1048 00:52:27,400 --> 00:52:29,450 Og den neste betyr hvor mange hunder. 1049 00:52:29,450 --> 00:52:34,140 Vel, da er det å spesifisere det, i stedet for å måtte huske 0 vedrører 1050 00:52:34,140 --> 00:52:38,090 katter og en til ugler, kan jeg bruke assosiative arrays, noe som betyr at 1051 00:52:38,090 --> 00:52:42,260 i stedet for heltall som mine indekser, Jeg kan faktisk bruke strenger. 1052 00:52:42,260 --> 00:52:43,290 >> Så dette er ganske nyttig. 1053 00:52:43,290 --> 00:52:47,130 Og du har i utgangspunktet bare erstattet heltallene med strenger. 1054 00:52:47,130 --> 00:52:50,074 Og der har du en assosiativ array. 1055 00:52:50,074 --> 00:52:51,930 Yeah. 1056 00:52:51,930 --> 00:52:55,800 >> PUBLIKUM: Er det en grunn til at det er en understrek for den andre 1057 00:52:55,800 --> 00:52:58,750 del, fordi min liste har matrisen. 1058 00:52:58,750 --> 00:53:01,330 >> ZAMYLA CHAN: Spørsmålet var, er det en grunn til at det er en 1059 00:53:01,330 --> 00:53:03,320 strek mellom min og liste? 1060 00:53:03,320 --> 00:53:03,610 Nei. 1061 00:53:03,610 --> 00:53:06,878 Det er bare hvordan jeg navngi min variabel. 1062 00:53:06,878 --> 00:53:11,670 >> PUBLIKUM: På den første linje, er det ett ord. 1063 00:53:11,670 --> 00:53:12,560 >> ZAMYLA CHAN: Min unnskyldninger. 1064 00:53:12,560 --> 00:53:13,410 Jeg skal fikse det. 1065 00:53:13,410 --> 00:53:13,620 Yeah. 1066 00:53:13,620 --> 00:53:15,460 De bør være den samme variabelnavn. 1067 00:53:15,460 --> 00:53:16,710 God fangst. 1068 00:53:16,710 --> 00:53:19,640 1069 00:53:19,640 --> 00:53:19,950 OK. 1070 00:53:19,950 --> 00:53:22,610 Så la oss gå videre til strengen sammensetning. 1071 00:53:22,610 --> 00:53:27,500 Hvis jeg ønsket å ta to strenger, Da kan jeg sette sammen dem 1072 00:53:27,500 --> 00:53:28,550 med prikken operatør. 1073 00:53:28,550 --> 00:53:32,440 Så hvis jeg har Milo som et fornavn og banan som et etternavn, deretter 1074 00:53:32,440 --> 00:53:35,430 lenke sammen med prikken operatør og deretter sette en plass i mellom 1075 00:53:35,430 --> 00:53:39,210 vil gjøre en streng som inneholder Milo Banana, som jeg kan deretter echo eller, 1076 00:53:39,210 --> 00:53:41,280 heller, skrive ut. 1077 00:53:41,280 --> 00:53:44,465 >> Snakker av ekko, la oss snakke om noen nyttige - 1078 00:53:44,465 --> 00:53:44,920 oops. 1079 00:53:44,920 --> 00:53:46,030 Jeg beklager. 1080 00:53:46,030 --> 00:53:52,920 Et par nyttige PHP funksjoner. 1081 00:53:52,920 --> 00:53:56,240 Så vi har - 1082 00:53:56,240 --> 00:53:57,444 tekniske problemer. 1083 00:53:57,444 --> 00:53:58,694 Ett sekund. 1084 00:53:58,694 --> 00:54:16,960 1085 00:54:16,960 --> 00:54:19,550 Jeg sendte det. 1086 00:54:19,550 --> 00:54:22,320 PowerPoint-problemer. 1087 00:54:22,320 --> 00:54:29,200 Og vi er tilbake med PHP funksjoner. 1088 00:54:29,200 --> 00:54:32,010 1089 00:54:32,010 --> 00:54:35,150 Og vi er tilbake med PHP funksjoner. 1090 00:54:35,150 --> 00:54:39,890 >> Så vi har den krever funksjon, hvor hvis du passerer i en fil, her er bare 1091 00:54:39,890 --> 00:54:43,300 et eksempel på en fil som Jeg kan passere i. 1092 00:54:43,300 --> 00:54:47,605 Så det vil omfatte PHP-koden fra den filen som jeg indikerer. 1093 00:54:47,605 --> 00:54:49,940 Og det vil evaluere det i. 1094 00:54:49,940 --> 00:54:54,450 Så vi har også ekko, som er en parallell til printf. 1095 00:54:54,450 --> 00:54:57,710 Exit er en parallell til stykker, som kommer ut av blokken med 1096 00:54:57,710 --> 00:54:58,570 kode som du er i. 1097 00:54:58,570 --> 00:55:03,180 Og så tomme sjekker om en gitt variable er som null eller null eller 1098 00:55:03,180 --> 00:55:08,482 hva er likestilt med å være tom. 1099 00:55:08,482 --> 00:55:09,438 Yeah. 1100 00:55:09,438 --> 00:55:15,341 >> PUBLIKUM: For streng sammensetning dot operatør ett, i PHP, er at 1101 00:55:15,341 --> 00:55:20,158 samme som i Java hvor den bruker punktum for sammensetning betyr pluss? 1102 00:55:20,158 --> 00:55:27,440 Så for fullt navn, kunne du ha dollar signere første + og deretter + vare? 1103 00:55:27,440 --> 00:55:27,720 >> ZAMYLA CHAN: Yeah. 1104 00:55:27,720 --> 00:55:32,150 Så spørsmålet var om i PHP vi kan bruke den samme streng sammensetning 1105 00:55:32,150 --> 00:55:33,890 som i Java med de positive. 1106 00:55:33,890 --> 00:55:35,410 Og Josef vil komme inn som senere. 1107 00:55:35,410 --> 00:55:36,620 Jeg tror han har et lysbilde på det. 1108 00:55:36,620 --> 00:55:37,570 Egentlig er det annerledes. 1109 00:55:37,570 --> 00:55:41,310 Så i Javascript, må du bruke pluss å sette sammen strenger. 1110 00:55:41,310 --> 00:55:43,280 Og i PHP, må du bruke dot operatør. 1111 00:55:43,280 --> 00:55:44,530 Så de er forskjellige. 1112 00:55:44,530 --> 00:55:46,680 1113 00:55:46,680 --> 00:55:46,910 >> OK. 1114 00:55:46,910 --> 00:55:49,500 Så nå som vi har dekket alle Dette PHP, hvor kommer det 1115 00:55:49,500 --> 00:55:50,490 virkelig komme til nytte? 1116 00:55:50,490 --> 00:55:54,470 Vel, det kommer godt med når vi kan kombinere det med vår HTML. 1117 00:55:54,470 --> 00:55:59,550 Så vår PHP vil gi oss kraft til å endre en sidens HTML-innhold før 1118 00:55:59,550 --> 00:56:00,000 sin lasting. 1119 00:56:00,000 --> 00:56:04,270 Så basert på ulike forhold, vanligvis den spesifikke brukeren som er 1120 00:56:04,270 --> 00:56:07,520 logget inn, kan vi vise forskjellig informasjon. 1121 00:56:07,520 --> 00:56:08,800 Linda, hadde du et spørsmål? 1122 00:56:08,800 --> 00:56:15,510 >> PUBLIKUM: Kan du sette sammen et heltall også? 1123 00:56:15,510 --> 00:56:16,760 >> ZAMYLA CHAN: Ja, det kan du. 1124 00:56:16,760 --> 00:56:19,530 1125 00:56:19,530 --> 00:56:23,270 Så spørsmålet var om du kan sette sammen heltall eller annen 1126 00:56:23,270 --> 00:56:28,920 variable.s nå, kan vi gå videre til MVC, som er et paradigme som vi brukte i 1127 00:56:28,920 --> 00:56:33,380 pset7 og en rekke web-designere bruker for organisere koden i filene 1128 00:56:33,380 --> 00:56:34,490 på deres hjemmeside. 1129 00:56:34,490 --> 00:56:35,870 M står for Model. 1130 00:56:35,870 --> 00:56:41,450 Og i utgangspunktet, vil modellfiler avtale med samhandling med databasen. 1131 00:56:41,450 --> 00:56:44,640 Vis filer, de forholder seg til estetikk på nettsiden. 1132 00:56:44,640 --> 00:56:47,550 Og kontrolleren håndterer brukerforespørsler, analyserer 1133 00:56:47,550 --> 00:56:49,230 data, foretar annen logikk. 1134 00:56:49,230 --> 00:56:52,520 >> I pset7, vi kombinerte modellen og kontrolleren. 1135 00:56:52,520 --> 00:56:55,880 Og vi bare kalte dem kontrollere og sette dem i offentlig katalog. 1136 00:56:55,880 --> 00:57:01,730 Og vise filer, bruker vi dem som malene i Maler-katalogen. 1137 00:57:01,730 --> 00:57:07,260 Så dette diagrammet representerer her også at samme type divisjon med 1138 00:57:07,260 --> 00:57:10,510 modellen og kontrolleren i purpur her til venstre og 1139 00:57:10,510 --> 00:57:12,770 visningen til høyre. 1140 00:57:12,770 --> 00:57:16,020 Så dette er en skjematisk at noen av dere kanskje har sett på Arbeidstid eller 1141 00:57:16,020 --> 00:57:19,130 diagrammer som vi ble tegning som du var å finne ut din PSett. 1142 00:57:19,130 --> 00:57:25,030 >> Så her, i en gitt kontroller, en modell kontrolleren, har vi funksjoner 1143 00:57:25,030 --> 00:57:30,490 som er knyttet til det å spørre SQL database, utfører PHP logikk. 1144 00:57:30,490 --> 00:57:32,370 Kanskje du ville slå opp en aksje i Yahoo! 1145 00:57:32,370 --> 00:57:34,590 Finance. 1146 00:57:34,590 --> 00:57:37,390 Eller kanskje, ville du bare sjekke til se om en bruker hadde sendt inn en 1147 00:57:37,390 --> 00:57:40,250 danne allerede før du har besøkt siden din. 1148 00:57:40,250 --> 00:57:43,390 Og så ville gjengi en form over her. 1149 00:57:43,390 --> 00:57:48,210 Etter at formen hadde blitt sendt av brukeren, handlingen som var 1150 00:57:48,210 --> 00:57:53,470 spesifisert i form HTML tag skulle tilsi siden at det 1151 00:57:53,470 --> 00:57:55,620 returnerer disse dataene til. 1152 00:57:55,620 --> 00:57:59,460 >> Så all denne informasjonen ville være sendt tilbake til kontrolleren. 1153 00:57:59,460 --> 00:58:02,620 Da ville du sannsynligvis gjøre litt mer logikk på det og kanskje utføre noen 1154 00:58:02,620 --> 00:58:06,510 flere spørringer i SQL-databasen og så, til slutt, komme opp med et pent 1155 00:58:06,510 --> 00:58:11,930 pakket sett med informasjon som du ville gjort passere i inn i noen annen mal 1156 00:58:11,930 --> 00:58:13,950 som vises denne informasjonen. 1157 00:58:13,950 --> 00:58:17,030 Nå, hvordan gjør vi faktisk pakke at informasjonen? 1158 00:58:17,030 --> 00:58:23,980 Vel, vi har en funksjon som heter Render som var i functions.php filen i 1159 00:58:23,980 --> 00:58:29,950 pset7, hvor du passerer i navnet en fil, navnet på en mal. 1160 00:58:29,950 --> 00:58:32,160 >> Og så er du også passere i en assosiativ array. 1161 00:58:32,160 --> 00:58:37,150 Og slik at assosiativ array representerer den annen informasjon 1162 00:58:37,150 --> 00:58:39,040 som du ønsker å passere i. 1163 00:58:39,040 --> 00:58:43,460 Nå, hva kommer til å være konstant i disse eksemplene er at tastene eller, 1164 00:58:43,460 --> 00:58:47,070 heller, nøklene til assosiative matriser, de er hva som kommer til å være 1165 00:58:47,070 --> 00:58:51,050 forventes å være konstant ved malen fordi den vet det er behov for 1166 00:58:51,050 --> 00:58:53,990 noe som kalles melding eller kalt navn. 1167 00:58:53,990 --> 00:58:56,940 Og så ting på høyre, faktiske verdier, så i dette tilfellet, er hvem 1168 00:58:56,940 --> 00:59:00,750 en god gutt og Milo, er de som skal å være de verdiene som er i endring 1169 00:59:00,750 --> 00:59:05,610 at regulatoren endres hver gang eller basert på en bestemt tilstand og 1170 00:59:05,610 --> 00:59:07,120 vil passere det i. 1171 00:59:07,120 --> 00:59:12,790 >> Så her i maler, ser vi at vi bruker HTML spesialtegn, 1172 00:59:12,790 --> 00:59:16,370 som bare i utgangspunktet betyr at vi ønsker for å få den peer strengen at 1173 00:59:16,370 --> 00:59:17,580 bruker satt i. 1174 00:59:17,580 --> 00:59:20,880 Og vi ønsker å erstatte melding der inne. 1175 00:59:20,880 --> 00:59:26,110 Så når vi faktisk se filen, den spesifikke 1176 00:59:26,110 --> 00:59:28,700 Informasjonen er gått i. 1177 00:59:28,700 --> 00:59:33,850 Legg merke til at nøkkelen hvordan gjengi verk er at nøklene til assosiative 1178 00:59:33,850 --> 00:59:37,170 matriser, de blir variabel navnene her. 1179 00:59:37,170 --> 00:59:40,720 Og så verdiene til den aktuelle tasten i assosiativ array deretter blir 1180 00:59:40,720 --> 00:59:41,970 verdien av variabelen. 1181 00:59:41,970 --> 00:59:44,800 1182 00:59:44,800 --> 00:59:46,040 >> Nå, la oss gå videre til SQL. 1183 00:59:46,040 --> 00:59:48,010 Det står for Structured Spørrespråk. 1184 00:59:48,010 --> 00:59:50,460 Og så dette er bare et programmerings språk designet 1185 00:59:50,460 --> 00:59:51,880 for å administrere databaser. 1186 00:59:51,880 --> 00:59:56,860 Og det kom godt med for oss i vår pset7 finans nettside. 1187 00:59:56,860 --> 01:00:00,510 I hovedsak er det bare en enkel måte å spore og administrere objekter og tabeller 1188 01:00:00,510 --> 01:00:02,070 og koble dem til hverandre. 1189 01:00:02,070 --> 01:00:06,860 Nå, tenk på din SQL database utgangspunktet som en Excel-fil, kanskje, 1190 01:00:06,860 --> 01:00:10,040 med flere faner ark. 1191 01:00:10,040 --> 01:00:13,820 >> Så du kan ha flere tabeller, kanskje, som er knyttet til hverandre. 1192 01:00:13,820 --> 01:00:19,420 Og mye som Excel, har vi mye av funksjonaliteten som vi ønsker. 1193 01:00:19,420 --> 01:00:22,300 For eksempel kan vi velge visse rader. 1194 01:00:22,300 --> 01:00:24,110 Vi kan sette inn informasjon. 1195 01:00:24,110 --> 01:00:25,560 Vi kan oppdatere rader. 1196 01:00:25,560 --> 01:00:27,440 Og vi kan også slette ting. 1197 01:00:27,440 --> 01:00:30,920 1198 01:00:30,920 --> 01:00:36,560 >> SQL velg verk ved å velge rader eller en rad med spesifiserte kolonner fra en 1199 01:00:36,560 --> 01:00:39,640 database som samsvarer med en viss kriterier som du angir. 1200 01:00:39,640 --> 01:00:44,930 Så over her når jeg ser velge * fra veivisere hvor huset = Ravenclaw, deretter 1201 01:00:44,930 --> 01:00:48,340 Jeg velger *, noe som betyr at jeg er velge hver enkelt kolonne i at 1202 01:00:48,340 --> 01:00:56,340 rad fra veivisere tabellen, men bare hvis huset kolonnen tilsvarer Ravenclaw. 1203 01:00:56,340 --> 01:00:57,840 Nå, dette er ren eller SQL. 1204 01:00:57,840 --> 01:01:02,680 Så hvis jeg gikk inn i phpMyAdmin, som er den spesielle måten som vi bruker til å administrere 1205 01:01:02,680 --> 01:01:07,040 våre SQL databaser, så jeg kunne sette inn det inn i phpmyadmin nettstedet. 1206 01:01:07,040 --> 01:01:08,290 Og det ville utføre. 1207 01:01:08,290 --> 01:01:11,280 >> Men vi faktisk ønsker å gjøre at på PHP side. 1208 01:01:11,280 --> 01:01:12,580 Så hvordan gjør vi det? 1209 01:01:12,580 --> 01:01:20,180 Vel, vi bruker spørringen funksjon, som utgangspunktet utfører som SQL-spørring. 1210 01:01:20,180 --> 01:01:21,830 Ved hjelp? 1211 01:01:21,830 --> 01:01:25,850 som plassholder, kan vi passere i visse verdier til vår streng som vi 1212 01:01:25,850 --> 01:01:26,920 ønsker å erstatte. 1213 01:01:26,920 --> 01:01:32,110 Så kanskje jeg lagring annerledes verdier i curr_house, som 1214 01:01:32,110 --> 01:01:34,400 representerer den nåværende huset at jeg går gjennom. 1215 01:01:34,400 --> 01:01:39,040 Så jeg kan gi denne inn som en plassholder med spørsmålstegn. 1216 01:01:39,040 --> 01:01:43,290 Og så skal jeg i utgangspunktet utføre samme som jeg gjorde før, med unntak av 1217 01:01:43,290 --> 01:01:45,550 nå er jeg i PHP. 1218 01:01:45,550 --> 01:01:51,300 >> Og søket vil returnere en assosiativ array. 1219 01:01:51,300 --> 01:01:53,470 Og jeg kommer til å lagre den i rader. 1220 01:01:53,470 --> 01:01:56,880 Nå kan søket alltid mislykkes. 1221 01:01:56,880 --> 01:02:02,870 Kanskje SQL-spørringen kunne ikke utføre fordi tabellen ikke eksisterte. 1222 01:02:02,870 --> 01:02:04,310 Eller kanskje, gjorde kolonnen ikke eksisterer. 1223 01:02:04,310 --> 01:02:05,400 Noe gikk galt. 1224 01:02:05,400 --> 01:02:08,170 Vel, i så fall, vil du ønsker å gjøre sikker på at du sjekker om den 1225 01:02:08,170 --> 01:02:09,700 spørring ga falsk. 1226 01:02:09,700 --> 01:02:15,590 Og det er ved å bruke trippel lik operasjon der. 1227 01:02:15,590 --> 01:02:19,660 >> Og så beklager jeg, som er en annen CS50-funksjon, som går i en melding. 1228 01:02:19,660 --> 01:02:23,435 Og hvis du ser inn beklager, alt det egentlig gjør er å gjengi apology.php. 1229 01:02:23,435 --> 01:02:26,100 1230 01:02:26,100 --> 01:02:26,410 Yeah. 1231 01:02:26,410 --> 01:02:29,630 >> PUBLIKUM: Kan du forklare hva som star does mellom velger og fra? 1232 01:02:29,630 --> 01:02:30,710 >> ZAMYLA CHAN: Ja, absolutt. 1233 01:02:30,710 --> 01:02:35,220 Så stjernen i mellom velger og fra betyr at jeg vil velge hele 1234 01:02:35,220 --> 01:02:37,440 hel rad fra mitt bord. 1235 01:02:37,440 --> 01:02:41,900 Jeg kunne ha indikert velger navnet, året, huset. 1236 01:02:41,900 --> 01:02:46,160 Og jeg ville bare få de tre kolonner i mitt bord. 1237 01:02:46,160 --> 01:02:51,560 Men hvis jeg sier velge *, så skal jeg får alt i denne kolonnen. 1238 01:02:51,560 --> 01:02:53,760 Så jeg kommer til å gå deg i ryggen først. 1239 01:02:53,760 --> 01:02:57,656 >> PUBLIKUM: Så dette er fortsatt i SQL, ikke sant? 1240 01:02:57,656 --> 01:02:59,610 Er dette spørring eller er dette PHP? 1241 01:02:59,610 --> 01:03:00,550 >> ZAMYLA CHAN: Vi er i en spørring. 1242 01:03:00,550 --> 01:03:01,940 Så dette er i PHP. 1243 01:03:01,940 --> 01:03:06,280 Så ved hjelp av PHP-funksjonen spørring, vi utfører en SQL-spørring. 1244 01:03:06,280 --> 01:03:11,988 1245 01:03:11,988 --> 01:03:15,364 >> PUBLIKUM: Er det noe i SQL store og små bokstaver, som velger 1246 01:03:15,364 --> 01:03:17,834 eller veivisere eller hus? 1247 01:03:17,834 --> 01:03:20,050 >> ZAMYLA CHAN: Er det noe i SQL store og små bokstaver? 1248 01:03:20,050 --> 01:03:21,760 Jeg tror det, ja. 1249 01:03:21,760 --> 01:03:24,620 Jeg tror at SELECT og FROM Og hvor store og små bokstaver. 1250 01:03:24,620 --> 01:03:25,535 Nei? 1251 01:03:25,535 --> 01:03:27,500 >> ROB BOWDEN: Så, er det motsatt. 1252 01:03:27,500 --> 01:03:32,030 Kolonnenavnene og tabellen betyr, alle av dem er store og små bokstaver. 1253 01:03:32,030 --> 01:03:35,470 Men noen av MySQL stikkord, som SELECT, FROM og WHERE, de er ikke 1254 01:03:35,470 --> 01:03:36,140 store og små bokstaver. 1255 01:03:36,140 --> 01:03:36,420 OK. 1256 01:03:36,420 --> 01:03:37,780 Så det motsatte av hva jeg sa. 1257 01:03:37,780 --> 01:03:40,420 Så alle de MySQL søkeord - 1258 01:03:40,420 --> 01:03:42,670 velger, fra, hvor - de skiller ikke mellom store og små bokstaver. 1259 01:03:42,670 --> 01:03:44,630 Men alt annet er. 1260 01:03:44,630 --> 01:03:45,210 OK. 1261 01:03:45,210 --> 01:03:46,500 Du i front. 1262 01:03:46,500 --> 01:03:52,041 >> PUBLIKUM: Hvis jeg har $ rader i form av mer enn én rad, betyr det er 1263 01:03:52,041 --> 01:03:53,640 bare blir en assosiativ array? 1264 01:03:53,640 --> 01:03:59,550 >> ZAMYLA CHAN: Så spørsmålet var om rader har mer enn én rad i det, betyr 1265 01:03:59,550 --> 01:04:01,800 det blitt en assosiativ array? 1266 01:04:01,800 --> 01:04:05,680 Så det er en rekke assosiativ arrays allerede. 1267 01:04:05,680 --> 01:04:10,730 Så selv om det er bare én rad returnert, så du må gå til 1268 01:04:10,730 --> 01:04:12,690 indeks 0 av dette resultatet. 1269 01:04:12,690 --> 01:04:15,316 Og da bør du ha den første raden. 1270 01:04:15,316 --> 01:04:17,482 Ja, Belinda? 1271 01:04:17,482 --> 01:04:21,258 >> PUBLIKUM: Når du bruker ===, er dette det eneste tilfellet? 1272 01:04:21,258 --> 01:04:22,210 Eller er det andre? 1273 01:04:22,210 --> 01:04:26,815 >> ZAMYLA CHAN: Så i dette tilfellet === er en sammenligning på tvers typer. 1274 01:04:26,815 --> 01:04:29,870 1275 01:04:29,870 --> 01:04:34,050 Unnskyld. === Er en sammenligning som sammenligner typer. 1276 01:04:34,050 --> 01:04:37,620 Og da == sammenligner på tvers av alle typer. 1277 01:04:37,620 --> 01:04:41,620 >> PUBLIKUM: Kan du forklare hva radene er i denne situasjonen? 1278 01:04:41,620 --> 01:04:45,120 Er det ro av data? 1279 01:04:45,120 --> 01:04:48,100 >> ZAMYLA CHAN: I neste lysbilde, jeg er kommer til å forklare hva rader er. 1280 01:04:48,100 --> 01:04:49,890 Så hvis du ikke har noe imot å holde off på det. 1281 01:04:49,890 --> 01:04:50,620 Og så deg i ryggen? 1282 01:04:50,620 --> 01:04:54,699 >> PUBLIKUM: For funksjoner som søk, gjengi og beklager [uhørbart]? 1283 01:04:54,699 --> 01:04:59,050 1284 01:04:59,050 --> 01:05:03,050 >> ZAMYLA CHAN: Spørsmålet var om disse funksjonene - spørring, beklager, 1285 01:05:03,050 --> 01:05:04,510 og gjengi - 1286 01:05:04,510 --> 01:05:05,930 er felles på tvers av PHP. 1287 01:05:05,930 --> 01:05:09,460 Disse er de som CS50 skrev for pset7. 1288 01:05:09,460 --> 01:05:09,910 Og Jay? 1289 01:05:09,910 --> 01:05:15,333 >> PUBLIKUM: Når du trenger å si $ _SESSION, Er at bare for-IDer? 1290 01:05:15,333 --> 01:05:17,310 Eller kunne du ha sagt at her? 1291 01:05:17,310 --> 01:05:23,440 >> ZAMYLA CHAN: Så spørsmålet var, da vi bruke $ _SESSION, som var en spesifikk 1292 01:05:23,440 --> 01:05:25,290 global variabel som vi bruker. 1293 01:05:25,290 --> 01:05:32,080 Her denne variabelen kommer til å være lokale til vår funksjon. 1294 01:05:32,080 --> 01:05:36,588 Så vi bare erklære en ny variabel. 1295 01:05:36,588 --> 01:05:38,460 >> PUBLIKUM: Hvordan er beklager implementert? 1296 01:05:38,460 --> 01:05:40,960 >> ZAMYLA CHAN: Spørsmålet var, hvordan er be om unnskyldning implementert? 1297 01:05:40,960 --> 01:05:44,180 Og jeg tror dette er faktisk en ganske god praksis for dere å gå inn 1298 01:05:44,180 --> 01:05:49,260 den functions.php seksjonen og se på beklager og se hvordan du kunne ha 1299 01:05:49,260 --> 01:05:50,670 gjort det selv. 1300 01:05:50,670 --> 01:05:55,620 Så jeg kan la det til deg, men bare si at hvis du ser på beklager, 1301 01:05:55,620 --> 01:06:02,110 så tar det budskapet om at du sendt beklager, og da er det 1302 01:06:02,110 --> 01:06:06,570 gjengir den meldingen. 1303 01:06:06,570 --> 01:06:08,240 Eventuelle flere spørsmål? 1304 01:06:08,240 --> 01:06:08,710 Jeg elsker spørsmål. 1305 01:06:08,710 --> 01:06:09,555 Så holde dem kommer. 1306 01:06:09,555 --> 01:06:11,888 >> PUBLIKUM: [uhørbart] 1307 01:06:11,888 --> 01:06:13,840 echo eller print det? 1308 01:06:13,840 --> 01:06:15,900 >> ZAMYLA CHAN: Spørsmålet var, kunne vi ikke bare har satt 1309 01:06:15,900 --> 01:06:17,000 echo eller print der. 1310 01:06:17,000 --> 01:06:19,710 Så det ville ha gjort noe litt annerledes. 1311 01:06:19,710 --> 01:06:23,750 Det ville ha trykt spørring mislyktes i det - 1312 01:06:23,750 --> 01:06:27,420 vel, akkurat nå, er vi faktisk i vår controller. 1313 01:06:27,420 --> 01:06:30,350 Så vi ikke egentlig har HTML satt opp her. 1314 01:06:30,350 --> 01:06:34,946 Apologize ved å gjengi apologize.php faktisk sender deg til apology.php. 1315 01:06:34,946 --> 01:06:39,560 1316 01:06:39,560 --> 01:06:42,200 OK. 1317 01:06:42,200 --> 01:06:45,880 >> Så nå, la oss gå på å ta opp spørsmål fra tidligere om hva 1318 01:06:45,880 --> 01:06:47,330 virkelig er rader. 1319 01:06:47,330 --> 01:06:51,960 Vel, søket vil returnere en matrise med rader. 1320 01:06:51,960 --> 01:06:55,020 Og hver rad er representert av en assosiativ array. 1321 01:06:55,020 --> 01:07:02,840 Så hvis jeg har henrettet noen SQL-spørring og Jeg har lagret resultatet i rader, deretter 1322 01:07:02,840 --> 01:07:07,850 ved hjelp av en foreach sløyfe, så matrisen Navnet er det første man der - rader. 1323 01:07:07,850 --> 01:07:13,170 Og så kommer jeg til å ringe hver rad i det $ rad. 1324 01:07:13,170 --> 01:07:20,060 >> Så gjentar over det, jeg kan da tilgang til gitt rad navn kolonnen, 1325 01:07:20,060 --> 01:07:22,340 år kolonne og huset kolonnen. 1326 01:07:22,340 --> 01:07:28,010 Legg merke til at jeg ikke ville ha vært i stand til å gjøre dette med rader, fordi rader index 1327 01:07:28,010 --> 01:07:29,290 Navnet finnes ikke. 1328 01:07:29,290 --> 01:07:31,970 Rader er bare et utvalg av assosiative arrays. 1329 01:07:31,970 --> 01:07:34,870 Så du har to nivåer der. 1330 01:07:34,870 --> 01:07:37,170 Når du har rekken av rader, du har til å komme inn i det. 1331 01:07:37,170 --> 01:07:39,110 Og så kan du få tilgang til kolonnene. 1332 01:07:39,110 --> 01:07:41,636 Gjorde det det klart? 1333 01:07:41,636 --> 01:07:42,520 Ja, foran? 1334 01:07:42,520 --> 01:07:45,490 >> PUBLIKUM: [uhørbart] åpne braketter for [uhørbart]? 1335 01:07:45,490 --> 01:07:46,220 >> ZAMYLA CHAN: Unnskyld meg? 1336 01:07:46,220 --> 01:07:49,740 >> PUBLIKUM: De åpne parentes. 1337 01:07:49,740 --> 01:07:52,420 >> ZAMYLA CHAN: Disse her? 1338 01:07:52,420 --> 01:07:58,520 Det er å tillate meg å inkludere den variabelen. 1339 01:07:58,520 --> 01:07:58,670 Yeah. 1340 01:07:58,670 --> 01:08:01,900 >> PUBLIKUM: Når du skriver ut, er du utskrift til HTML-koden? 1341 01:08:01,900 --> 01:08:03,110 >> ZAMYLA CHAN: Ja. 1342 01:08:03,110 --> 01:08:07,720 Når jeg skriver ut, er dette her inne malen min nå, så 1343 01:08:07,720 --> 01:08:10,310 mitt syn på MVC-metoden. 1344 01:08:10,310 --> 01:08:12,750 Så jeg skriver inn i HTML. 1345 01:08:12,750 --> 01:08:16,670 >> PUBLIKUM: Så hvis vi gikk inn utvikleren verktøy etter å ha kjørt dette, vi kunne 1346 01:08:16,670 --> 01:08:17,160 som faktisk i koden? 1347 01:08:17,160 --> 01:08:18,410 >> ZAMYLA CHAN: Det er en stor spørsmål, ja. 1348 01:08:18,410 --> 01:08:22,359 Så hvis du gikk inn i utviklerverktøy i Firefox ved hjelp av Firebug eller 1349 01:08:22,359 --> 01:08:26,109 Chrome, så ja, kan du se spesifikk HTML. 1350 01:08:26,109 --> 01:08:28,470 Så det ville ikke vise $ row ["navn"]. 1351 01:08:28,470 --> 01:08:32,524 Det ville vise hvilken Navnet er i samme rad. 1352 01:08:32,524 --> 01:08:36,268 >> PUBLIKUM: Bare et generelt problem, hva er tr og td definert som? 1353 01:08:36,268 --> 01:08:37,672 Hvorfor skulle vi [uhørbart]? 1354 01:08:37,672 --> 01:08:41,850 1355 01:08:41,850 --> 01:08:44,814 >> ZAMYLA CHAN: Tabell rad st, Tabellen deretter td kolonne. 1356 01:08:44,814 --> 01:08:48,060 1357 01:08:48,060 --> 01:08:49,310 OK. 1358 01:08:49,310 --> 01:08:55,771 1359 01:08:55,771 --> 01:08:56,835 >> PUBLIKUM: Ja, det er tabelldata. 1360 01:08:56,835 --> 01:08:58,770 >> ZAMYLA CHAN: Tabell data. 1361 01:08:58,770 --> 01:08:59,894 Yeah. 1362 01:08:59,894 --> 01:09:08,670 >> PUBLIKUM: Det er en rad der raden blir behandlet som en kolonne? 1363 01:09:08,670 --> 01:09:08,910 >> ZAMYLA CHAN: Beklager. 1364 01:09:08,910 --> 01:09:10,570 Kan du gjenta det? 1365 01:09:10,570 --> 01:09:14,450 >> PUBLIKUM: Hvordan ville du visualisere rader? 1366 01:09:14,450 --> 01:09:16,310 >> ZAMYLA CHAN: Hvordan vil du visualisere rader i hva slags måte? 1367 01:09:16,310 --> 01:09:21,796 Snakker du om disse rader her eller tr rader? 1368 01:09:21,796 --> 01:09:22,630 >> PUBLIKUM: Radene. 1369 01:09:22,630 --> 01:09:25,229 >> ZAMYLA CHAN: Disse radene her? 1370 01:09:25,229 --> 01:09:28,620 Jeg vil visualisere dette som Jeg utføre mine søk. 1371 01:09:28,620 --> 01:09:38,729 Og det sier, OK, jeg har enten 0 til n Mengden av rader som oppfyller kriteriene 1372 01:09:38,729 --> 01:09:40,510 at du hadde spurt. 1373 01:09:40,510 --> 01:09:43,740 Så jeg har noen flere rader. 1374 01:09:43,740 --> 01:09:51,450 Så rader, de $ rader, butikker hver en av de radene i en matrise. 1375 01:09:51,450 --> 01:09:58,110 Så selv om det er bare en av dem, er det fortsatt en rekke rader som oppfyller det. 1376 01:09:58,110 --> 01:10:03,010 >> Derfor, for eksempel, er denne samme måte som da du hentet 1377 01:10:03,010 --> 01:10:05,390 cache fra brukerne. 1378 01:10:05,390 --> 01:10:10,810 Og de kriteriene var det der ID er lik økt-ID. 1379 01:10:10,810 --> 01:10:14,250 Det egentlig bare er én rad som kan matche det. 1380 01:10:14,250 --> 01:10:18,960 Men fortsatt rader nettopp returnert én rad. 1381 01:10:18,960 --> 01:10:22,620 Så du må gå til rader, indeks 0, indeks cache til 1382 01:10:22,620 --> 01:10:26,195 faktisk komme til din cache. 1383 01:10:26,195 --> 01:10:29,650 >> PUBLIKUM: Er utskriftsfunksjonen i ekko det samme? 1384 01:10:29,650 --> 01:10:30,670 >> ZAMYLA CHAN: Ja. 1385 01:10:30,670 --> 01:10:31,190 Ja. 1386 01:10:31,190 --> 01:10:33,304 Skriv ut et ekko av det samme. 1387 01:10:33,304 --> 01:10:42,400 >> PUBLIKUM: Er foreach loop eneste måten å indeksere i rader? 1388 01:10:42,400 --> 01:10:46,110 >> ZAMYLA CHAN: Er en foreach løkke den eneste måten du kan 1389 01:10:46,110 --> 01:10:47,030 iterere gjennom rader? 1390 01:10:47,030 --> 01:10:47,180 Nei. 1391 01:10:47,180 --> 01:10:51,000 Du kan også bruke en for loop, forut at du vet lengden 1392 01:10:51,000 --> 01:10:53,024 array raden tallet. 1393 01:10:53,024 --> 01:10:58,500 >> PUBLIKUM: Kan du få tilgang til det ved hjelp av en rad som [uhørbart]? 1394 01:10:58,500 --> 01:11:01,640 >> ZAMYLA CHAN: Så du ikke får tilgang til den bare å bruke rad hvis du ikke har en 1395 01:11:01,640 --> 01:11:05,160 foreach løkke forutsatt at du ikke har erklært rad. 1396 01:11:05,160 --> 01:11:08,150 1397 01:11:08,150 --> 01:11:09,660 Ja. 1398 01:11:09,660 --> 01:11:10,810 Ja, i den hvite. 1399 01:11:10,810 --> 01:11:13,990 >> PUBLIKUM: Så hva gjør tr og td gjøre? 1400 01:11:13,990 --> 01:11:16,790 >> ZAMYLA CHAN: Så tr og td er HTML-koder. 1401 01:11:16,790 --> 01:11:19,590 tr indikerer begynnelsen av en tabell rad. 1402 01:11:19,590 --> 01:11:26,625 Og hver td indikerer en ny tabell datakolonne. 1403 01:11:26,625 --> 01:11:32,275 >> PUBLIKUM: For en visuell av hva en rad er like, bare tenk SQL, hvordan 1404 01:11:32,275 --> 01:11:33,510 de har en rad. 1405 01:11:33,510 --> 01:11:35,980 [Uhørbart]. 1406 01:11:35,980 --> 01:11:36,390 >> ZAMYLA CHAN: Yeah. 1407 01:11:36,390 --> 01:11:37,630 Det er et stort poeng. 1408 01:11:37,630 --> 01:11:41,510 Du kan visualisere rader som bare som i en Excel-tabell, bare 1409 01:11:41,510 --> 01:11:44,540 en liste av radene. 1410 01:11:44,540 --> 01:11:46,870 OK. 1411 01:11:46,870 --> 01:11:47,230 OK. 1412 01:11:47,230 --> 01:11:50,740 Så nå som vi har gått over velger, hvis det er ikke noen flere spørsmål, vi vil 1413 01:11:50,740 --> 01:11:52,970 gå over på innsatsen. 1414 01:11:52,970 --> 01:11:58,220 Så hvis jeg ønsket å sette inn noen bord og setter visse kolonne 1415 01:11:58,220 --> 01:12:02,320 verdier, kunne jeg sette meg selv inn Ravenclaw i år 7. 1416 01:12:02,320 --> 01:12:07,245 Men noen ganger kan det være duplikat verdier, som vi så i pset7 når vi 1417 01:12:07,245 --> 01:12:09,240 ble oppdaterer vår portefølje. 1418 01:12:09,240 --> 01:12:15,610 >> Så i dette tilfellet, vi ønsker å bruke på Duplikatnøkkel UPDATE, slik at vi ikke gjør det 1419 01:12:15,610 --> 01:12:18,280 lagre flere rader med samme verdsetter, men heller oppdatere den. 1420 01:12:18,280 --> 01:12:21,780 1421 01:12:21,780 --> 01:12:25,560 Så vi har faktisk oppdatering, som ikke er en innsats. 1422 01:12:25,560 --> 01:12:30,100 Det er bare en oppdatering hvor du oppdaterer i et bestemt bord med en gitt 1423 01:12:30,100 --> 01:12:34,403 kriterier og så, til slutt, slette, som gjør en veldig lignende ting. 1424 01:12:34,403 --> 01:12:40,200 >> PUBLIKUM: Kan du kort gå over like nøkler? 1425 01:12:40,200 --> 01:12:40,850 >> ZAMYLA CHAN: Yeah. 1426 01:12:40,850 --> 01:12:48,340 I hovedsak her, har jeg INSERT INTO Gringotts, er, gallioner, disse verdiene. 1427 01:12:48,340 --> 01:12:56,900 Men ID, formodentlig, er en unik nøkkel verdien satt opp i MySQL tabellen. 1428 01:12:56,900 --> 01:13:06,750 Så hvis jeg allerede har som ID satt opp, så jeg kan ikke sette inn en ny rad. 1429 01:13:06,750 --> 01:13:10,961 Så hvis det ikke finnes allerede, da må jeg oppdatere den. 1430 01:13:10,961 --> 01:13:16,040 1431 01:13:16,040 --> 01:13:17,722 I midten på hvitt. 1432 01:13:17,722 --> 01:13:21,570 >> PUBLIKUM: Så sette inn, oppdatere, slette, og velger, er de alle tilgjengelige 1433 01:13:21,570 --> 01:13:22,875 lokalt [uhørbart]? 1434 01:13:22,875 --> 01:13:27,320 1435 01:13:27,320 --> 01:13:29,630 >> ZAMYLA CHAN: Så sette inn, oppdatere, slette og 1436 01:13:29,630 --> 01:13:31,120 velge er alle SQL-spørringer. 1437 01:13:31,120 --> 01:13:34,970 Så når du bruker SQL, har du de som er tilgjengelige. 1438 01:13:34,970 --> 01:13:38,226 1439 01:13:38,226 --> 01:13:40,706 >> PUBLIKUM: Tilbake til fortiden quizer - 1440 01:13:40,706 --> 01:13:44,178 det var et spørsmål som omhandlet hvis du hadde et bord og ønsket å 1441 01:13:44,178 --> 01:13:52,610 sette inn testresultater i en, og du setter inn navnet ditt, så det vil ikke la deg 1442 01:13:52,610 --> 01:13:54,594 [Uhørbart] din venns test score. 1443 01:13:54,594 --> 01:13:59,060 Hvordan ville du gjøre det med innlegg? 1444 01:13:59,060 --> 01:14:02,490 >> ZAMYLA CHAN: Så spørsmålet var om en tidligere mid-term spørsmål. 1445 01:14:02,490 --> 01:14:04,320 Jeg er ikke klar over hvilke en det er akkurat nå. 1446 01:14:04,320 --> 01:14:06,790 Så kanskje etterpå, hvis du ønsker å komme opp og vise meg, så jeg kan 1447 01:14:06,790 --> 01:14:08,155 sikkert gi deg tips. 1448 01:14:08,155 --> 01:14:11,250 1449 01:14:11,250 --> 01:14:15,460 Men snakker om å sette inn ting, som ta noens poengsum når du 1450 01:14:15,460 --> 01:14:18,800 bør ikke, la oss snakke om SQL-injeksjon angrep. 1451 01:14:18,800 --> 01:14:22,050 Så en SQL-injeksjon angrep er i hovedsak der noen tar 1452 01:14:22,050 --> 01:14:27,680 fordel av lav sikkerhet av måte som du tar i data. 1453 01:14:27,680 --> 01:14:35,660 >> Så her, akkurat som i CS50 finans, når vi er logget inn, kan vi gå inn i en 1454 01:14:35,660 --> 01:14:39,510 brukernavn i innloggingsskjemaet, den første tekstboksen, og 1455 01:14:39,510 --> 01:14:41,570 deretter inn i et passord. 1456 01:14:41,570 --> 01:14:45,610 Kanskje vår PHP-kode kan se noe sånt som dette, der $ username 1457 01:14:45,610 --> 01:14:51,410 er den post-data brukernavn og passord er post-data passord. 1458 01:14:51,410 --> 01:14:55,110 Og da har vi bare utføre søket vårt, sier, OK, vel, er vår spørring skal 1459 01:14:55,110 --> 01:14:57,990 velg fra våre brukere, hvor brukernavnet er 1460 01:14:57,990 --> 01:14:58,970 en som de sendte inn. 1461 01:14:58,970 --> 01:15:06,870 Og passordet er passordet, noe som betyr at passordene matche. 1462 01:15:06,870 --> 01:15:12,670 >> Nå, hva om stedet for faktisk sende en faktisk passord, som 1463 01:15:12,670 --> 01:15:16,850 12345 og gjette på spiss som sier passord og prøver å hacke deres 1464 01:15:16,850 --> 01:15:21,460 konto, hva om stedet de sendte inn dette. 1465 01:15:21,460 --> 01:15:24,380 De kunne skrive i kanskje gjette på et passord. 1466 01:15:24,380 --> 01:15:30,480 Og så ville de avslutte sitat deretter inn i eller 1 = 1. 1467 01:15:30,480 --> 01:15:35,160 Det ville tempoet direkte inn i SQL spørring for å se omtrent slik ut. 1468 01:15:35,160 --> 01:15:38,200 Velg fra brukere der brukernavn = utstikkerne og passord 1469 01:15:38,200 --> 01:15:41,450 tilsvarer lilje eller 1 = 1. 1470 01:15:41,450 --> 01:15:45,450 >> Så enten passordet har å være korrekt eller 1 = 1, 1471 01:15:45,450 --> 01:15:47,870 som alltid er sann. 1472 01:15:47,870 --> 01:15:52,780 Så i dette tilfellet, i utgangspunktet, kan en bruker dra nytte av dette og bare logge 1473 01:15:52,780 --> 01:15:55,240 seg inn og hack noens konto. 1474 01:15:55,240 --> 01:15:58,950 Så det er derfor vi ønsker å unngå noen som har å gjøre dette. 1475 01:15:58,950 --> 01:16:03,890 Men heldigvis, spørringen funksjon ved passerer i plassholderne vil ta 1476 01:16:03,890 --> 01:16:04,800 vare på dette for deg. 1477 01:16:04,800 --> 01:16:08,570 Også, vil du vanligvis aldri vil å faktisk sende passordene 1478 01:16:08,570 --> 01:16:09,310 selv. 1479 01:16:09,310 --> 01:16:14,115 Det er derfor vi hashet eller kryptert dem i CS50 finans. 1480 01:16:14,115 --> 01:16:17,553 >> PUBLIKUM: Det siste quiz snakket om MySQL rømnings strenger. 1481 01:16:17,553 --> 01:16:21,800 Har vi trenger å bekymre deg det? 1482 01:16:21,800 --> 01:16:22,670 >> ZAMYLA CHAN: Det er et godt spørsmål. 1483 01:16:22,670 --> 01:16:29,050 MySQL rømnings strenger er definitivt en Funksjonen som ble brukt i vår spørring. 1484 01:16:29,050 --> 01:16:30,420 Men definitivt se nærmere på det. 1485 01:16:30,420 --> 01:16:32,950 Jeg vil si det er fritt vilt å vite at du hadde behov for å kalle det 1486 01:16:32,950 --> 01:16:34,370 fungere på en streng. 1487 01:16:34,370 --> 01:16:35,245 Ja, Belinda? 1488 01:16:35,245 --> 01:16:38,606 >> PUBLIKUM: Hvordan vet du når det er apostrof eller doble anførselstegn? 1489 01:16:38,606 --> 01:16:43,516 Og også, jeg føler i forelesning deg nevnte noe om ikke å ha 1490 01:16:43,516 --> 01:16:48,426 den [uhørbart] eller noe eller andre singel sitat på slutten. 1491 01:16:48,426 --> 01:16:56,407 1492 01:16:56,407 --> 01:17:00,825 Jeg tror han påpekte i foredraget at du skal liksom ha apostrof 1 1493 01:17:00,825 --> 01:17:04,290 og deretter ikke ha apostrofer eller noe. 1494 01:17:04,290 --> 01:17:05,540 >> PUBLIKUM: [uhørbart]. 1495 01:17:05,540 --> 01:17:14,860 1496 01:17:14,860 --> 01:17:18,657 >> PUBLIKUM: Saken er den siste singel sitat i der i den andre boksen 1497 01:17:18,657 --> 01:17:19,391 ikke skal være der. 1498 01:17:19,391 --> 01:17:21,840 [Uhørbart] 1499 01:17:21,840 --> 01:17:26,730 Fordi når du tar den siste singel sitere ut og matche disse for innhold 1500 01:17:26,730 --> 01:17:30,522 hvor passordet er, hvis du har den spørring, er det et enkelt sitat på 1501 01:17:30,522 --> 01:17:31,340 slutten allerede. 1502 01:17:31,340 --> 01:17:36,580 Du ønsker å bruke den eneste sitat som den ene som vender mot ett 1503 01:17:36,580 --> 01:17:37,574 [Uhørbart]. 1504 01:17:37,574 --> 01:17:42,820 Så hva er egentlig i denne teksten boksen skal ikke ha det. 1505 01:17:42,820 --> 01:17:44,070 >> ZAMYLA CHAN: Jeg kommer til å endre det. 1506 01:17:44,070 --> 01:17:56,490 1507 01:17:56,490 --> 01:17:56,880 OK. 1508 01:17:56,880 --> 01:18:00,435 Hvis det ikke er noen spørsmål, så skal jeg gi det over til Joseph å snakke 1509 01:18:00,435 --> 01:18:04,332 om Javascript, et cetera. 1510 01:18:04,332 --> 01:18:09,540 >> [APPLAUSE] 1511 01:18:09,540 --> 01:18:11,660 >> JOSEPH ONG: Så vi kjører litt bak. 1512 01:18:11,660 --> 01:18:13,280 Så hvis du har til å forlate, det er OK. 1513 01:18:13,280 --> 01:18:16,540 Men vi ber om at du holder hodet ned hvis du er i midten, slik at du 1514 01:18:16,540 --> 01:18:19,560 ikke blokkerer kameraet, og du bruker baksiden exit hvis du må. 1515 01:18:19,560 --> 01:18:25,010 1516 01:18:25,010 --> 01:18:26,306 Jeg er Joseph forresten. 1517 01:18:26,306 --> 01:18:27,556 Hei. 1518 01:18:27,556 --> 01:18:37,910 1519 01:18:37,910 --> 01:18:38,630 Test, test. 1520 01:18:38,630 --> 01:18:39,630 Dan, er det bra? 1521 01:18:39,630 --> 01:18:40,880 Cool. 1522 01:18:40,880 --> 01:18:44,460 1523 01:18:44,460 --> 01:18:47,600 >> Så videoen vil også bli lagt ut online for de som 1524 01:18:47,600 --> 01:18:48,850 må gå nå. 1525 01:18:48,850 --> 01:18:51,350 1526 01:18:51,350 --> 01:18:52,600 Awkward. 1527 01:18:52,600 --> 01:18:56,300 1528 01:18:56,300 --> 01:18:57,510 OK. 1529 01:18:57,510 --> 01:18:59,730 Så quiz gjennomgang. 1530 01:18:59,730 --> 01:19:00,980 Dette er en katt. 1531 01:19:00,980 --> 01:19:03,150 1532 01:19:03,150 --> 01:19:07,170 Nå, Javascript, som er kanskje ikke som aww for noen av dere. 1533 01:19:07,170 --> 01:19:07,370 OK. 1534 01:19:07,370 --> 01:19:09,280 Så det er først, husker fra Zamyla. 1535 01:19:09,280 --> 01:19:11,270 Husk at PHP er kjøres på serveren. 1536 01:19:11,270 --> 01:19:15,230 Og mange ganger, skrev dere sløyfer i PHP for å skrive ut HTML, ikke sant? 1537 01:19:15,230 --> 01:19:19,170 Så når denne koden utfører, at HTML-utgang som du skriver ut 1538 01:19:19,170 --> 01:19:20,500 blir sendt til brukeren. 1539 01:19:20,500 --> 01:19:25,960 Og når det skjer, ikke mer PHP kan kjøres, med mindre du har lastet inn siden, av 1540 01:19:25,960 --> 01:19:27,660 Kurset, som reexecutes PHP. 1541 01:19:27,660 --> 01:19:30,080 Men når du skriver ut som HTML, du kan ikke gå hvor som helst. 1542 01:19:30,080 --> 01:19:33,580 >> Slik at HTML er sendt over til brukeren, som er den nettleseren over her, hvor 1543 01:19:33,580 --> 01:19:35,470 Milo bruker datamaskinen. 1544 01:19:35,470 --> 01:19:40,340 Og så godt, er det flere ting når vi sender HTML til brukeren. 1545 01:19:40,340 --> 01:19:43,350 Noen ganger ønsker vi å gjøre noe sånt når du klikker på noe, vi vil ha 1546 01:19:43,350 --> 01:19:47,350 varsle bokser å dukke opp, de slags interaksjoner, som når du trykker på 1547 01:19:47,350 --> 01:19:50,740 nøkkel, når du klikker noe på side, jeg vil ha noe å skje. 1548 01:19:50,740 --> 01:19:54,550 Vel, kan du ikke kjøre på nytt PHP kode en gang at HTML er satt. 1549 01:19:54,550 --> 01:19:55,900 Så hvordan gjør du dette? 1550 01:19:55,900 --> 01:19:59,930 >> Vi introduserer et nytt språk kalt Javascript, som kjører i nettleseren 1551 01:19:59,930 --> 01:20:02,890 som lar deg gjøre ting til HTML når du har mottatt 1552 01:20:02,890 --> 01:20:04,020 dem fra serveren. 1553 01:20:04,020 --> 01:20:07,050 Og dette er grunnen til at vi kaller det en klient-side programmeringsspråk. 1554 01:20:07,050 --> 01:20:09,110 Det fungerer på din datamaskin - 1555 01:20:09,110 --> 01:20:11,400 klienten. 1556 01:20:11,400 --> 01:20:13,830 Eventuelle spørsmål om det så langt? 1557 01:20:13,830 --> 01:20:15,650 At paradigmet er fornuftig for folk? 1558 01:20:15,650 --> 01:20:16,010 OK. 1559 01:20:16,010 --> 01:20:16,790 Bra. 1560 01:20:16,790 --> 01:20:17,340 OK. 1561 01:20:17,340 --> 01:20:20,850 Så den første tingen å merke seg er Javascript er ikke PHP. 1562 01:20:20,850 --> 01:20:23,010 >> De har noen annen syntaks, som vi vil gå inn. 1563 01:20:23,010 --> 01:20:24,530 Og de har svært ulike bruksområder. 1564 01:20:24,530 --> 01:20:26,640 Javascript, igjen, for din leseren, for klienten. 1565 01:20:26,640 --> 01:20:30,640 Server kjører et sted på andres datamaskinen som sender informasjon 1566 01:20:30,640 --> 01:20:31,720 til deg, korrigere? 1567 01:20:31,720 --> 01:20:36,730 Så hvis vi be deg om å skrive PHP-kode på en eksamen spørsmål, ikke skriv 1568 01:20:36,730 --> 01:20:38,710 Javascript og vice versa. 1569 01:20:38,710 --> 01:20:41,710 Du vil bare miste poeng, og det vil ikke være riktig. 1570 01:20:41,710 --> 01:20:43,690 >> Så la oss få inn noen syntaks forskjeller - 1571 01:20:43,690 --> 01:20:46,140 Java til venstre og PHP på høyre side. 1572 01:20:46,140 --> 01:20:48,670 Det første du vil legge merke til med Java, erklærer vi variabler med 1573 01:20:48,670 --> 01:20:49,440 VaR søkeord - 1574 01:20:49,440 --> 01:20:53,590 V-A-R. PHP brukes dollartegn, som Zamyla diskutert tidligere. 1575 01:20:53,590 --> 01:20:57,570 Hvis du ønsker å erklære en assosiativ array, ser vi det kjente syntaks på 1576 01:20:57,570 --> 01:20:59,030 høyre side med PHP. 1577 01:20:59,030 --> 01:21:01,630 På venstre side, i stedet du bruker krøllparenteser. 1578 01:21:01,630 --> 01:21:03,280 Og da nøklene er på venstre. 1579 01:21:03,280 --> 01:21:04,670 Da har du et kolon. 1580 01:21:04,670 --> 01:21:06,560 Og så har du de verdier som du ønsker. 1581 01:21:06,560 --> 01:21:09,840 >> Så dette er hvordan du vil gjøre det i PHP på høyre side med det annet 1582 01:21:09,840 --> 01:21:10,955 linje som starter på Milo. 1583 01:21:10,955 --> 01:21:14,540 Og det er hvordan du vil gjøre det på venstre side i Javascript hvis du vil 1584 01:21:14,540 --> 01:21:16,110 hva vi kaller et objekt. 1585 01:21:16,110 --> 01:21:19,340 Og objekter i Javascript er bare assosiative arrays. 1586 01:21:19,340 --> 01:21:23,710 Så hvis du vil ha tilgang til felt, i PHP du bruker denne braketten syntaks. 1587 01:21:23,710 --> 01:21:27,170 Og på denne måten, kan du overføre denne eier feltet til Lauren. 1588 01:21:27,170 --> 01:21:30,150 >> Vel, i Javascript, hvis man ønsker å tilgang til et felt og endre det, kan du 1589 01:21:30,150 --> 01:21:31,370 bruke dot syntaks. 1590 01:21:31,370 --> 01:21:33,860 Du kan også bruke braketten syntaks. 1591 01:21:33,860 --> 01:21:35,550 Men du kan ikke bruke den dot syntaks i PHP. 1592 01:21:35,550 --> 01:21:36,525 Det vil ikke fungere. 1593 01:21:36,525 --> 01:21:38,910 Det fungerer bare i PHP. 1594 01:21:38,910 --> 01:21:42,060 Og til slutt, for å skrive ut ting til konsoll, bruker du console.log, som 1595 01:21:42,060 --> 01:21:43,720 dere bruker mye i pset8. 1596 01:21:43,720 --> 01:21:45,260 Du kan console.log det. 1597 01:21:45,260 --> 01:21:50,030 >> Hvis du ønsker å skrive ut en liste i PHP, må du bruke utskrifts r. 1598 01:21:50,030 --> 01:21:53,240 Og på høyre side, ser du jeg hash streng sammensetning der borte. 1599 01:21:53,240 --> 01:21:54,070 Noen spurte tidligere. 1600 01:21:54,070 --> 01:21:55,850 Jeg bruker et pluss i Javascript. 1601 01:21:55,850 --> 01:21:59,800 Hvis jeg ønsker å sette sammen noe i PHP, bruker jeg prikken. 1602 01:21:59,800 --> 01:22:00,800 Disse er forskjellige. 1603 01:22:00,800 --> 01:22:03,420 Hvis du skriver PHP-kode, bruker ikke et pluss. 1604 01:22:03,420 --> 01:22:06,810 Hvis du skriver Java kode, ikke skriv en prikk. 1605 01:22:06,810 --> 01:22:08,230 Det vil være feil. 1606 01:22:08,230 --> 01:22:09,640 Og du vil være trist. 1607 01:22:09,640 --> 01:22:11,000 >> Så syntaks forskjeller. 1608 01:22:11,000 --> 01:22:14,710 Kjenn din syntaks, fordi hvis du må skrive et spørsmål og du bruker syntaks 1609 01:22:14,710 --> 01:22:16,890 fra feil språk, det vil ikke fungere. 1610 01:22:16,890 --> 01:22:19,520 Og det vil være galt. 1611 01:22:19,520 --> 01:22:22,420 Så la oss snakke om en viss kontroll flyte forskjeller, hvordan du bruker 1612 01:22:22,420 --> 01:22:24,040 løkker i hver av dem. 1613 01:22:24,040 --> 01:22:26,610 Zamyla gikk over høyre side. 1614 01:22:26,610 --> 01:22:27,780 Ting på høyre side bør være kjent. 1615 01:22:27,780 --> 01:22:29,670 La oss se på på venstre side. 1616 01:22:29,670 --> 01:22:34,830 >> Når du bruker for n sløyfe i Javascript, loop variabel, Var jeg der borte, 1617 01:22:34,830 --> 01:22:37,210 løkken over nøklene til matrisen. 1618 01:22:37,210 --> 01:22:39,150 Så du ser navn, house, og rolle. 1619 01:22:39,150 --> 01:22:42,440 Hvis jeg console.log jeg, får jeg navn, house, og rolle. 1620 01:22:42,440 --> 01:22:44,720 De er nøklene. 1621 01:22:44,720 --> 01:22:50,080 I Javascript, går en foreach løkke i løpet av de verdier av denne matrisen. 1622 01:22:50,080 --> 01:22:52,040 Så du legger merke til de er både jeg. 1623 01:22:52,040 --> 01:22:56,000 Men her på PHP side, skriver den ut Milo, CS50, og Mascot. 1624 01:22:56,000 --> 01:22:57,390 De er de verdiene i PHP. 1625 01:22:57,390 --> 01:23:00,180 >> Så dette er hvordan disse to er forskjellige på de forskjellige språkene. 1626 01:23:00,180 --> 01:23:02,970 Så hvis du bruker en foreach loop, ikke anta at det 1627 01:23:02,970 --> 01:23:03,760 gir deg nøklene. 1628 01:23:03,760 --> 01:23:08,010 Og hvis du bruker en for n loop, gjør ikke anta at det gir deg verdiene. 1629 01:23:08,010 --> 01:23:10,420 Betyr dette fornuftig så langt? 1630 01:23:10,420 --> 01:23:13,630 Den neste lysbilde kommer til å vise deg hvordan du kan få tilgang til det motsatte i 1631 01:23:13,630 --> 01:23:15,160 hver av dem. 1632 01:23:15,160 --> 01:23:18,550 >> Vel, hvis du har nøkkelen i Javascript og du vil at verdien ut, 1633 01:23:18,550 --> 01:23:20,440 du bare indeks inn i array med det. 1634 01:23:20,440 --> 01:23:23,640 Så Milo av jeg vil få deg hva du vil - verdiene. 1635 01:23:23,640 --> 01:23:25,260 Det er dette annerledes syntaks i PHP. 1636 01:23:25,260 --> 01:23:28,140 Hvis du virkelig vil vite det, vet jeg ikke tror vi har vist den til deg ennå. 1637 01:23:28,140 --> 01:23:31,740 Men hvis du er interessert, kan du bruke denne ekstra syntaksen til høyre 1638 01:23:31,740 --> 01:23:35,130 side som faktisk vil la deg få nøkler i PHP når du bruker en 1639 01:23:35,130 --> 01:23:35,880 foreach loop. 1640 01:23:35,880 --> 01:23:39,640 Så bare en liten bit av trivia hvis du er interessert. 1641 01:23:39,640 --> 01:23:42,630 >> Så det er bare for å demonstrere Forskjellene mellom disse to sløyfer. 1642 01:23:42,630 --> 01:23:47,060 Ikke bland dem opp når du er programmere et spørsmål. 1643 01:23:47,060 --> 01:23:49,774 Eventuelle spørsmål om det. 1644 01:23:49,774 --> 01:23:50,770 Cool. 1645 01:23:50,770 --> 01:23:51,310 OK. 1646 01:23:51,310 --> 01:23:52,250 Java gjenstander. 1647 01:23:52,250 --> 01:23:53,040 Jeg snakket om dem. 1648 01:23:53,040 --> 01:23:54,650 De er som assosiative arrays. 1649 01:23:54,650 --> 01:23:57,730 Det eneste jeg ønsker at dere skal notere her er at en verdi i en assosiativ 1650 01:23:57,730 --> 01:23:59,540 matrise kan være noe i Javascript. 1651 01:23:59,540 --> 01:24:02,240 >> Det kan også være en funksjon, som der borte. 1652 01:24:02,240 --> 01:24:04,600 Jeg har en funksjon som er en verdi av en nøkkel. 1653 01:24:04,600 --> 01:24:07,030 Og hvis jeg ønsker å kalle den funksjonen, Jeg bare tilgang til bark. 1654 01:24:07,030 --> 01:24:08,490 Og da jeg satte parente etter det. 1655 01:24:08,490 --> 01:24:09,790 Og det fungerer. 1656 01:24:09,790 --> 01:24:15,570 Så noen spørsmål? 1657 01:24:15,570 --> 01:24:16,370 Nei? 1658 01:24:16,370 --> 01:24:16,650 OK. 1659 01:24:16,650 --> 01:24:18,190 Bra. 1660 01:24:18,190 --> 01:24:20,130 Javascript, som PHP, er løst skrevet. 1661 01:24:20,130 --> 01:24:20,970 Hva betyr det? 1662 01:24:20,970 --> 01:24:22,380 >> Det har typer. 1663 01:24:22,380 --> 01:24:24,800 Men når du deklarerer en Java variabel, sier du Var jeg. 1664 01:24:24,800 --> 01:24:25,850 Du trenger ikke si det. 1665 01:24:25,850 --> 01:24:26,460 Det er ikke en ting. 1666 01:24:26,460 --> 01:24:28,000 Du bare sier det er en variabel. 1667 01:24:28,000 --> 01:24:31,590 Og deretter Java vil håndtere typer under panseret for deg. 1668 01:24:31,590 --> 01:24:34,390 Vi kan fritt konvertere mellom typer på grunn av dette. 1669 01:24:34,390 --> 01:24:37,360 Så jeg starter som et tall i dette tilfellet. 1670 01:24:37,360 --> 01:24:38,790 Og så har jeg en streng. 1671 01:24:38,790 --> 01:24:39,710 Og jeg legger jeg til det. 1672 01:24:39,710 --> 01:24:41,810 Og jeg overføre den tilbake inn i. 1673 01:24:41,810 --> 01:24:43,640 >> Så på den første linjen, i er nummeret. 1674 01:24:43,640 --> 01:24:47,310 På den andre linjen, nå blir jeg en strengen etter jeg gjør omdisponering. 1675 01:24:47,310 --> 01:24:52,820 Og her, jeg bare lenke sammen at nummeret på strengen. 1676 01:24:52,820 --> 01:24:56,210 Så du ser at selv om jeg var en heltall i den første delen, er det liksom 1677 01:24:56,210 --> 01:24:58,500 av som å bli konvertert til en streng og deretter blir tilsatt 1678 01:24:58,500 --> 01:25:00,510 på at hallo streng. 1679 01:25:00,510 --> 01:25:02,340 Og så det er hva jeg mener av den løse skrive. 1680 01:25:02,340 --> 01:25:04,760 Det er som du konvertere mellom typer veldig enkelt. 1681 01:25:04,760 --> 01:25:08,840 Og det trenger ikke kaste advarsler på deg som C gjør. 1682 01:25:08,840 --> 01:25:12,420 >> Så jeg inneholder nå hallo 123 til strengen. 1683 01:25:12,420 --> 01:25:13,270 Neste. 1684 01:25:13,270 --> 01:25:15,610 Vi kan også fritt sammenligne mellom typer. 1685 01:25:15,610 --> 01:25:19,310 Så hvis du bare bruker ==, veldig mye som i PHP, Javascript 1686 01:25:19,310 --> 01:25:20,480 gjør en lignende ting. 1687 01:25:20,480 --> 01:25:24,780 Strengen 123 er det samme som antallet 123 når du bruker doble likemenn. 1688 01:25:24,780 --> 01:25:27,820 Når den brukes trippel likemenn, det også ønsker å sørge for at 1689 01:25:27,820 --> 01:25:29,240 typen er den samme. 1690 01:25:29,240 --> 01:25:31,960 Så fordi det er en streng, og som er et tall, selv om de er både 1691 01:25:31,960 --> 01:25:35,280 123, når du bruker trippel lik, du får falsk. 1692 01:25:35,280 --> 01:25:39,330 I den doble lik sak, får du ekte, fordi doble likhets ikke 1693 01:25:39,330 --> 01:25:40,020 bryr seg om type. 1694 01:25:40,020 --> 01:25:42,500 Triple likemenn bryr seg om type. 1695 01:25:42,500 --> 01:25:43,750 Spørsmål? 1696 01:25:43,750 --> 01:25:45,790 1697 01:25:45,790 --> 01:25:48,390 OK. 1698 01:25:48,390 --> 01:25:52,870 >> Og en annen ting om Java er Omfanget er slags global mindre du er 1699 01:25:52,870 --> 01:25:53,460 i funksjon. 1700 01:25:53,460 --> 01:25:55,660 Og det fungerer på samme måte i PHP faktisk. 1701 01:25:55,660 --> 01:25:57,500 Så la oss gå gjennom dette eksempelet. 1702 01:25:57,500 --> 01:25:59,110 Jeg satt jeg til 999. 1703 01:25:59,110 --> 01:26:00,900 Og så går jeg inn i dette for loop. 1704 01:26:00,900 --> 01:26:06,110 Så hvis jeg skriver jeg ut i dette for loop, forventer jeg 0, 1, 2, 3, 4. 1705 01:26:06,110 --> 01:26:07,390 Jeg får til i = 4. 1706 01:26:07,390 --> 01:26:10,770 Den øker jeg nå til fem på slutten av for sløyfen. 1707 01:26:10,770 --> 01:26:13,300 Og da det bryter ut av loopen, fordi det ikke oppfyller de 1708 01:26:13,300 --> 01:26:14,550 tilstand lenger. 1709 01:26:14,550 --> 01:26:16,650 >> Hva tror du det neste console.log skriver ut? 1710 01:26:16,650 --> 01:26:20,570 1711 01:26:20,570 --> 01:26:24,790 Så det er hva det ville gjøre i C. I C, fordi hvis du har like Var jeg ute 1712 01:26:24,790 --> 01:26:28,855 og du har Var jeg inne i en loop, som en for loop, så det gjør det slik at 1713 01:26:28,855 --> 01:26:30,690 det er angitt omfang at de to Is er forskjellige. 1714 01:26:30,690 --> 01:26:34,630 I Javascript, vil det bare behandle det som det samme jeg. 1715 01:26:34,630 --> 01:26:37,870 Jeg får fem, fordi det var verdien etter at det kom ut av sløyfen. 1716 01:26:37,870 --> 01:26:39,120 Så de jeg er den samme jeg. 1717 01:26:39,120 --> 01:26:42,620 1718 01:26:42,620 --> 01:26:44,130 Betyr det fornuftig? 1719 01:26:44,130 --> 01:26:45,720 >> Vel, det er fornuftig fra en Javascript-ståsted. 1720 01:26:45,720 --> 01:26:49,510 Men det samme paradigmet ikke bære over til C. De har 1721 01:26:49,510 --> 01:26:50,310 forskjellige scoping regler. 1722 01:26:50,310 --> 01:26:50,630 Ja. 1723 01:26:50,630 --> 01:26:52,566 >> PUBLIKUM: [uhørbart] 1724 01:26:52,566 --> 01:26:54,990 utenfor funksjonen [uhørbart]? 1725 01:26:54,990 --> 01:26:58,340 >> JOSEPH ONG: Så utenfor som funksjon? 1726 01:26:58,340 --> 01:27:00,810 Så jeg får til det i løpet av et sekund. 1727 01:27:00,810 --> 01:27:02,580 Så vi kaller foo (i). 1728 01:27:02,580 --> 01:27:06,920 Dette går jeg inn foo, trinn det, og deretter logger det. 1729 01:27:06,920 --> 01:27:07,750 Så var det fem. 1730 01:27:07,750 --> 01:27:09,210 Så det blir seks. 1731 01:27:09,210 --> 01:27:11,670 Men hva jeg snakker om er som i i denne funksjonen. 1732 01:27:11,670 --> 01:27:14,430 Fordi det er en parameter, er det scoped til denne funksjonen. 1733 01:27:14,430 --> 01:27:17,800 Så når jeg faktisk får ut av det funksjon, er det nå kommer til å gå 1734 01:27:17,800 --> 01:27:19,860 tilbake til den gamle i. 1735 01:27:19,860 --> 01:27:23,000 At jeg er bare scoped fordi det er i en funksjon. 1736 01:27:23,000 --> 01:27:24,200 Og vi har omfang og funksjoner. 1737 01:27:24,200 --> 01:27:29,080 Men vi har ikke omfanget utenfor av funksjoner i Javascript. 1738 01:27:29,080 --> 01:27:31,170 Betyr det fornuftig? 1739 01:27:31,170 --> 01:27:31,320 Ja. 1740 01:27:31,320 --> 01:27:31,660 Spørsmål. 1741 01:27:31,660 --> 01:27:34,030 >> PUBLIKUM: Same [uhørbart]? 1742 01:27:34,030 --> 01:27:34,500 >> JOSEPH ONG: Så ja. 1743 01:27:34,500 --> 01:27:36,260 I PHP, er det den samme type ting. 1744 01:27:36,260 --> 01:27:37,680 Det er en liten finesse faktisk. 1745 01:27:37,680 --> 01:27:40,130 Men du kan spørre meg om at etter gjennomgangen. 1746 01:27:40,130 --> 01:27:43,930 Du trenger egentlig ikke trenger å vite at subtilitet for quiz. 1747 01:27:43,930 --> 01:27:47,600 For alle praktiske formål, som variabler, global og PHP, med mindre 1748 01:27:47,600 --> 01:27:49,150 de er i en funksjon, samme ting i Javascript. 1749 01:27:49,150 --> 01:27:49,480 Ja. 1750 01:27:49,480 --> 01:27:52,890 >> PUBLIKUM: Hvorfor er dette tillatt i Javascript og nei hvor ellers? 1751 01:27:52,890 --> 01:27:55,010 >> JOSEPH ONG: Så hvorfor er det tillatt i Javascript og ikke i C? 1752 01:27:55,010 --> 01:27:58,180 Det er bare den som kom opp med Java besluttet at dette var OK i 1753 01:27:58,180 --> 01:27:59,510 Javascript. 1754 01:27:59,510 --> 01:28:02,430 Så det er akkurat som et programmeringsspråk konvensjon som vi ville si. 1755 01:28:02,430 --> 01:28:02,580 Ja. 1756 01:28:02,580 --> 01:28:04,480 >> PUBLIKUM: Så hvorfor gjorde den gå 6-5? 1757 01:28:04,480 --> 01:28:08,280 >> JOSEPH ONG: Så det gikk 6-5, fordi når jeg gikk jeg inn foo, at 1758 01:28:08,280 --> 01:28:13,420 Jeg innsiden av foo er nå omfattet til foo, fordi omfanget eksisterer i funksjoner i 1759 01:28:13,420 --> 01:28:15,050 Javascript. 1760 01:28:15,050 --> 01:28:18,720 Men når jeg kommer ut herfra, fordi det ble scoped til funksjonen, jeg er bare 1761 01:28:18,720 --> 01:28:24,300 med vanlig jeg som var inne resten av styrestrømmen. 1762 01:28:24,300 --> 01:28:25,210 Fornuftig? 1763 01:28:25,210 --> 01:28:26,910 Kan jeg gå videre? 1764 01:28:26,910 --> 01:28:27,320 OK. 1765 01:28:27,320 --> 01:28:29,180 Cool. 1766 01:28:29,180 --> 01:28:31,890 >> Aksept av dette er gjenstander er gått ved referanse. 1767 01:28:31,890 --> 01:28:33,990 Du vet hvordan når du passerer en matrise i C du kunne 1768 01:28:33,990 --> 01:28:35,810 faktisk endre array? 1769 01:28:35,810 --> 01:28:37,350 Det er det samme i Javascript. 1770 01:28:37,350 --> 01:28:42,960 Dersom jeg passerer en gjenstand, i dette tilfelle, I passert Milo inn i denne catify funksjonen. 1771 01:28:42,960 --> 01:28:44,490 Milo starter. 1772 01:28:44,490 --> 01:28:46,310 Hans navn er Milo Banana. 1773 01:28:46,310 --> 01:28:51,670 Jeg passerer dette objektet inn i en funksjon fordi det er et objekt, en assosiativ 1774 01:28:51,670 --> 01:28:53,730 array i Javascript. 1775 01:28:53,730 --> 01:28:57,110 >> Når jeg utfører en operasjon i den funksjonen, vil det 1776 01:28:57,110 --> 01:28:58,560 faktisk endre objektet. 1777 01:28:58,560 --> 01:29:01,720 Så dette vil bare skje etter gjenstander i Javascript, akkurat som det skjer 1778 01:29:01,720 --> 01:29:09,230 for arrays innsiden av C. Så Milo navn faktisk vil bli katt nå. 1779 01:29:09,230 --> 01:29:10,090 Betyr det fornuftig? 1780 01:29:10,090 --> 01:29:11,840 Så dette fungerer bare for objekter. 1781 01:29:11,840 --> 01:29:13,090 Objekter sendes som referanse. 1782 01:29:13,090 --> 01:29:13,400 Ja. 1783 01:29:13,400 --> 01:29:16,850 >> PUBLIKUM: Så du sier at i motsetning til variabelen i. 1784 01:29:16,850 --> 01:29:17,240 >> JOSEPH ONG: Yeah. 1785 01:29:17,240 --> 01:29:20,330 Hvilken variabel jeg var bare et tall, ikke sant? 1786 01:29:20,330 --> 01:29:25,280 Det er som i C når du passerer en heltall a, gjør det til en kopi. 1787 01:29:25,280 --> 01:29:28,130 Og når du passerer en matrise, er det faktisk endringer selve array i 1788 01:29:28,130 --> 01:29:32,870 C. Det samme skjer med Java i dette tilfellet. 1789 01:29:32,870 --> 01:29:34,070 OK. 1790 01:29:34,070 --> 01:29:38,134 Og neste, er Milo trist fordi han er nå en katt. 1791 01:29:38,134 --> 01:29:40,790 1792 01:29:40,790 --> 01:29:45,060 Det var faktisk Milo etter noen tur til veterinæren. 1793 01:29:45,060 --> 01:29:46,860 >> Så hvordan skal vi bruke Java i en web-side? 1794 01:29:46,860 --> 01:29:47,790 Vi kan ta den med. 1795 01:29:47,790 --> 01:29:50,090 Dette er HTML-kode med strippe koder. 1796 01:29:50,090 --> 01:29:51,300 Så jeg har strippe koder der. 1797 01:29:51,300 --> 01:29:54,820 Og da jeg satt noen Java kode innenfor skriptkodene. 1798 01:29:54,820 --> 01:29:56,390 Og så utfører dette. 1799 01:29:56,390 --> 01:29:58,830 Når jeg bare gjøre det slik, er det kalt inline Javascript. 1800 01:29:58,830 --> 01:30:02,400 Det er litt rotete, fordi Javascript er faktisk i HTML. 1801 01:30:02,400 --> 01:30:07,010 >> En bedre måte å gjøre dette på, mye hyggeligere, er å skrive din Java en 1802 01:30:07,010 --> 01:30:10,920 ekstern fil og deretter gi skriptmerket med en kilde. 1803 01:30:10,920 --> 01:30:14,920 Og dette vil gå til at Javascript-fil og lese Javascript-kode fra 1804 01:30:14,920 --> 01:30:15,960 denne filen i stedet. 1805 01:30:15,960 --> 01:30:18,820 Og på denne måten, trenger du ikke mye Java i begynnelsen av din 1806 01:30:18,820 --> 01:30:20,760 HTML-fil, noe som gjør det veldig rotete. 1807 01:30:20,760 --> 01:30:21,860 Du bare sette den et annet sted. 1808 01:30:21,860 --> 01:30:24,310 Og så vil den lese det derfra. 1809 01:30:24,310 --> 01:30:25,560 Gjorde som gir mening? 1810 01:30:25,560 --> 01:30:27,990 1811 01:30:27,990 --> 01:30:29,640 >> Plasserings saker. 1812 01:30:29,640 --> 01:30:32,620 I dette spesielle tilfellet, den skriptet er før kroppen. 1813 01:30:32,620 --> 01:30:36,090 Så når jeg utfører det, det er ingenting i kroppen ennå. 1814 01:30:36,090 --> 01:30:39,920 Kanskje dette vil gjøre litt mer følelse når jeg viser dette neste del. 1815 01:30:39,920 --> 01:30:43,210 I dette tilfelle skriptet kommer etter div. 1816 01:30:43,210 --> 01:30:46,620 Så div faktisk vises på siden først. 1817 01:30:46,620 --> 01:30:49,470 Akkurat her i denne lille røde sirkelen, du se teksten vises. 1818 01:30:49,470 --> 01:30:51,810 Og så våken dukker opp. 1819 01:30:51,810 --> 01:30:54,890 >> I det første tilfellet, fordi skriften var før div, den 1820 01:30:54,890 --> 01:30:56,170 alert dukker opp først. 1821 01:30:56,170 --> 01:30:59,250 Og så div dukker opp etter du forkaste boksen. 1822 01:30:59,250 --> 01:31:01,330 Så henrettelsen teller. 1823 01:31:01,330 --> 01:31:02,290 Så vi vil ha dette i bakhodet. 1824 01:31:02,290 --> 01:31:03,640 Dette vil være viktig i en liten bit. 1825 01:31:03,640 --> 01:31:08,730 1826 01:31:08,730 --> 01:31:09,540 OK. 1827 01:31:09,540 --> 01:31:12,750 Så godt, hvordan du venter ikke til hele siden er lastet da før du 1828 01:31:12,750 --> 01:31:13,580 kjøre noen kode? 1829 01:31:13,580 --> 01:31:15,540 Vi skal gå inn på dette litt litt senere også. 1830 01:31:15,540 --> 01:31:19,016 Men bare holde denne plasseringen saker i tankene for når vi 1831 01:31:19,016 --> 01:31:20,570 komme til et annet lysbilde. 1832 01:31:20,570 --> 01:31:22,030 >> Så får vi til DOM nå. 1833 01:31:22,030 --> 01:31:23,550 Og hva er DOM? 1834 01:31:23,550 --> 01:31:26,830 Så hvis du ser på HTML-kode, er det bare en haug med tekst på skjermen. 1835 01:31:26,830 --> 01:31:30,560 Så hvordan Java vet at dette er et HTML-element? 1836 01:31:30,560 --> 01:31:33,410 Så vi må ha noe minne fremstilling av denne 1837 01:31:33,410 --> 01:31:34,930 struktur som vi har. 1838 01:31:34,930 --> 01:31:40,240 Og når vi har dette i minnet representasjon i Javascript, kaller vi 1839 01:31:40,240 --> 01:31:41,750 at DOM. 1840 01:31:41,750 --> 01:31:45,130 Og det er bare en måte at folk besluttet at vi skal representere denne 1841 01:31:45,130 --> 01:31:46,400 HTML struktur som. 1842 01:31:46,400 --> 01:31:47,940 >> Og hva betyr dette DOM se ut? 1843 01:31:47,940 --> 01:31:50,460 Vel, i minnet representasjon, vi tar denne teksten. 1844 01:31:50,460 --> 01:31:52,870 Og vi slår den inn i minnet representasjon. 1845 01:31:52,870 --> 01:31:54,400 Så dette er HTML. 1846 01:31:54,400 --> 01:31:58,090 Så vi først finne ut at hver DOM treet har et dokument. 1847 01:31:58,090 --> 01:31:59,400 Det ser ut som et tre. 1848 01:31:59,400 --> 01:32:03,550 Og dokumentet inneholder HTML tag, faktisk alt 1849 01:32:03,550 --> 01:32:05,150 innsiden av dette nå. 1850 01:32:05,150 --> 01:32:06,970 HTML-koden har to barn. 1851 01:32:06,970 --> 01:32:08,630 Den har et hode. 1852 01:32:08,630 --> 01:32:12,380 At hodet, hvis du ser på innrykk der borte på hvordan det er strukturert 1853 01:32:12,380 --> 01:32:14,960 mellom de nære koder, Hodet har et barn. 1854 01:32:14,960 --> 01:32:17,130 Barnet er tittelen. 1855 01:32:17,130 --> 01:32:18,370 Nettopp. 1856 01:32:18,370 --> 01:32:21,000 >> Nå har vi en kropp barn. 1857 01:32:21,000 --> 01:32:24,870 Og så at kroppen har en Barnet heter familie. 1858 01:32:24,870 --> 01:32:27,950 Og at familien har tre barn - 1859 01:32:27,950 --> 01:32:29,550 eldste, midten, og yngste. 1860 01:32:29,550 --> 01:32:31,960 Så du bør vite hvordan du kan tegne et diagram som dette når vi spør deg hvordan 1861 01:32:31,960 --> 01:32:34,270 å tegne et diagram når vi gir du HTML til venstre. 1862 01:32:34,270 --> 01:32:36,350 Vite hvordan å produsere DOM treet. 1863 01:32:36,350 --> 01:32:38,930 Og inne i disse tingene, er det bare litt tekst, som jeg har representert 1864 01:32:38,930 --> 01:32:40,180 som små bokser. 1865 01:32:40,180 --> 01:32:42,750 1866 01:32:42,750 --> 01:32:47,980 >> Gjør dette DOM trestruktur fornuft og hva DOM er? 1867 01:32:47,980 --> 01:32:49,300 Så hva betyr det p står for? 1868 01:32:49,300 --> 01:32:51,850 Over her, p der borte i den koden representerer en 1869 01:32:51,850 --> 01:32:54,510 avsnitt tag i HTML. 1870 01:32:54,510 --> 01:32:57,080 Så du kan slå det opp. 1871 01:32:57,080 --> 01:32:59,290 Men det betyr bare at det er noen plass til litt tekst. 1872 01:32:59,290 --> 01:33:02,910 Og det har noen standard CSS styling, fordi det er et avsnitt tag. 1873 01:33:02,910 --> 01:33:05,130 Men vet egentlig ikke bekymre deg at en del for mye. 1874 01:33:05,130 --> 01:33:07,510 Bare vet det er en plassholder for noen tekst. 1875 01:33:07,510 --> 01:33:08,480 Ja. 1876 01:33:08,480 --> 01:33:10,200 Spørsmål? 1877 01:33:10,200 --> 01:33:11,021 Ja. 1878 01:33:11,021 --> 01:33:12,374 >> PUBLIKUM: Du bare nevnte CSS. 1879 01:33:12,374 --> 01:33:15,492 Hash familie og hash alt det der er i utgangspunktet 1880 01:33:15,492 --> 01:33:17,400 representerer IDer i CSS? 1881 01:33:17,400 --> 01:33:18,440 >> JOSEPH ONG: Ja, akkurat. 1882 01:33:18,440 --> 01:33:20,380 Jeg skal få til hva disse hashes bety i et sekund. 1883 01:33:20,380 --> 01:33:23,480 Når Angela gikk over CSS, hun snakket om CSS velgere. 1884 01:33:23,480 --> 01:33:26,770 Dette er CSS-velgere som hun snakket om. 1885 01:33:26,770 --> 01:33:28,268 Ja, Rob? 1886 01:33:28,268 --> 01:33:32,060 >> ROB BOWDEN: Jeg vil også kommentere at DOM innsiden av tittelkode 1887 01:33:32,060 --> 01:33:35,385 også er en tekst-node. 1888 01:33:35,385 --> 01:33:36,070 >> JOSEPH ONG: Høyre. 1889 01:33:36,070 --> 01:33:38,370 Så inne i tittelen tag, Jeg har litt tekst DOM. 1890 01:33:38,370 --> 01:33:42,730 Så egentlig, bør denne tittelen har som en lille boksen som kommer ut av det også. 1891 01:33:42,730 --> 01:33:45,740 Men det spiller egentlig ingen rolle for mye i dette tilfellet. 1892 01:33:45,740 --> 01:33:49,620 Vi har egentlig ikke bryr seg om tekstnoder, som vi kaller dem, for mye. 1893 01:33:49,620 --> 01:33:50,270 OK, vi gjør. 1894 01:33:50,270 --> 01:33:51,520 Angivelig, det gjør vi. 1895 01:33:51,520 --> 01:33:54,260 1896 01:33:54,260 --> 01:33:57,100 Og jeg vil fikse at når Jeg laste det opp igjen. 1897 01:33:57,100 --> 01:33:59,830 Betyr det fornuftig? 1898 01:33:59,830 --> 01:34:01,160 >> Så hvordan skal vi jobbe med DOM? 1899 01:34:01,160 --> 01:34:03,790 Når du avtale med DOM i Javascript, er det to trinn. 1900 01:34:03,790 --> 01:34:05,030 Du velger et DOM-element. 1901 01:34:05,030 --> 01:34:06,580 Og så gjør du ting til det. 1902 01:34:06,580 --> 01:34:11,480 Så i dette tilfellet, abstrakt, har jeg valgt midten element. 1903 01:34:11,480 --> 01:34:14,530 Og så et eksempel på å gjøre ting til at det ville være å endre teksten. 1904 01:34:14,530 --> 01:34:16,020 Det pleide å være Bob. 1905 01:34:16,020 --> 01:34:19,930 Nå, hva jeg gjorde med det var jeg endret Bob til Milo i dette tilfellet. 1906 01:34:19,930 --> 01:34:22,130 >> Så hvordan skal vi egentlig gjøre dette? 1907 01:34:22,130 --> 01:34:23,440 Hvordan gjør vi det velge? 1908 01:34:23,440 --> 01:34:26,560 Og hvordan gjør vi det gjør ting til ting når vi har tatt det? 1909 01:34:26,560 --> 01:34:30,470 Vel, den måten dere har lært det i denne klassen er ved hjelp av noe vi 1910 01:34:30,470 --> 01:34:32,420 kalt jQuery. 1911 01:34:32,420 --> 01:34:33,910 Så hva er jQuery? 1912 01:34:33,910 --> 01:34:37,220 jQuery er et bibliotek som gjør Java lettere å skrive. 1913 01:34:37,220 --> 01:34:39,500 Så noen tok seg tid og skrev jQuery. 1914 01:34:39,500 --> 01:34:41,530 >> jQuery er faktisk skrevet i Javascript. 1915 01:34:41,530 --> 01:34:44,550 Og så fordi de gjorde dette, har vi nå har en hel haug med funksjoner som 1916 01:34:44,550 --> 01:34:46,020 vi kan bruke som gjør vår lever virkelig enkelt. 1917 01:34:46,020 --> 01:34:48,580 1918 01:34:48,580 --> 01:34:50,030 Hva er noen av de ting den gjør? 1919 01:34:50,030 --> 01:34:51,650 Det gjør velge elementer lettere. 1920 01:34:51,650 --> 01:34:54,020 Det gjør skiftende HTML, legge klasser enklere. 1921 01:34:54,020 --> 01:34:55,360 Det gjør Ajax enklere. 1922 01:34:55,360 --> 01:34:58,230 Vi får til det i et sekund. 1923 01:34:58,230 --> 01:35:00,630 >> Og det er analogt til C-biblioteker. 1924 01:35:00,630 --> 01:35:03,090 Så du inkluderer string.h, du får strlen. 1925 01:35:03,090 --> 01:35:04,680 Du får strcpy, alle disse tingene. 1926 01:35:04,680 --> 01:35:09,650 Når du tar med jQuery, får du fin måter å velge elementer til endring 1927 01:35:09,650 --> 01:35:10,390 ting, et cetera. 1928 01:35:10,390 --> 01:35:12,990 Du får ekstra funksjonalitet som Java ikke gir deg. 1929 01:35:12,990 --> 01:35:15,310 Så jQuery er ikke Javascript. 1930 01:35:15,310 --> 01:35:18,660 jQuery er et bibliotek som er skrevet i Javascript som gjør Java 1931 01:35:18,660 --> 01:35:20,440 lettere å skrive. 1932 01:35:20,440 --> 01:35:23,170 >> Så jQuery er ikke et programmerings språk. 1933 01:35:23,170 --> 01:35:24,540 Men Java er. 1934 01:35:24,540 --> 01:35:27,420 1935 01:35:27,420 --> 01:35:27,590 gjøre. 1936 01:35:27,590 --> 01:35:30,420 Sikker på at du får din terminologi rett. 1937 01:35:30,420 --> 01:35:32,490 Eventuelle spørsmål? 1938 01:35:32,490 --> 01:35:33,882 Ja. 1939 01:35:33,882 --> 01:35:35,132 Er det et spørsmål? 1940 01:35:35,132 --> 01:35:37,910 1941 01:35:37,910 --> 01:35:38,350 OK. 1942 01:35:38,350 --> 01:35:40,080 Så hvordan bruker du jQuery? 1943 01:35:40,080 --> 01:35:42,390 Vel, når du skriver noe Javascript-kode og du har en 1944 01:35:42,390 --> 01:35:45,570 jQuery på toppen av filen som en script-fil, bruker du dollartegnet 1945 01:35:45,570 --> 01:35:47,310 nå for å få tilgang til jQuery. 1946 01:35:47,310 --> 01:35:49,860 Og dette er forskjellig fra dollartegn i PHP. 1947 01:35:49,860 --> 01:35:51,590 >> Det er det samme symbolet du skriver på tastaturet. 1948 01:35:51,590 --> 01:35:52,780 Men de betyr svært forskjellige ting. 1949 01:35:52,780 --> 01:35:56,090 Dollartegn i PHP betyr dette er hvordan jeg erklære en variabel. 1950 01:35:56,090 --> 01:35:59,120 I Javascript, når du har tatt jQuery, står det for jQuery. 1951 01:35:59,120 --> 01:36:01,280 Så ha det i bakhodet. 1952 01:36:01,280 --> 01:36:03,420 Så hvordan kan vi velge DOM elementer? 1953 01:36:03,420 --> 01:36:06,500 Vel, når du gjør det stygge Java måte, får du tilgang til 1954 01:36:06,500 --> 01:36:08,240 dokumentere global variabel. 1955 01:36:08,240 --> 01:36:11,170 Og så får du element av ID-familien. 1956 01:36:11,170 --> 01:36:15,270 Dette er virkelig lang og ordrike og ikke veldig hyggelig. 1957 01:36:15,270 --> 01:36:18,190 >> Eller du kan få alle elementer som er en p-taggen. 1958 01:36:18,190 --> 01:36:20,080 Det fungerer også i Javascript. 1959 01:36:20,080 --> 01:36:22,470 Men vi aldri virkelig viste du syntaksen for mye. 1960 01:36:22,470 --> 01:36:24,620 Det vi viste du var jQuery. 1961 01:36:24,620 --> 01:36:28,720 Slik at hele velger der oppe at ble uttrykt i Java bare blir 1962 01:36:28,720 --> 01:36:33,320 kondenseres til dette veldig fint dollar signere hashtag familie. 1963 01:36:33,320 --> 01:36:38,480 Og $ p, akkurat der det er sånn. 1964 01:36:38,480 --> 01:36:41,690 Hvis du ønsker å velge alle p-koder inne i en familie, setter vi en plass 1965 01:36:41,690 --> 01:36:42,890 mellom de to. 1966 01:36:42,890 --> 01:36:44,815 Og nå, vi får alle p tags inne i en familie. 1967 01:36:44,815 --> 01:36:48,740 1968 01:36:48,740 --> 01:36:50,380 >> Og ser kjent ut? 1969 01:36:50,380 --> 01:36:52,880 Vel, Angela snakket om CSS velgere. 1970 01:36:52,880 --> 01:36:54,200 Gi meg ett sekund. 1971 01:36:54,200 --> 01:36:57,230 Og så for å velge et element, du bare bruke det samme som deg 1972 01:36:57,230 --> 01:36:58,530 ville gjøre med en CSS velgeren. 1973 01:36:58,530 --> 01:37:00,910 Hvis du putter en hash foran av det, velger den av ID. 1974 01:37:00,910 --> 01:37:02,220 En prikk velger av klassene. 1975 01:37:02,220 --> 01:37:06,230 Hvis du bare har ting uten hashes eller prikker, velges disse kodene. 1976 01:37:06,230 --> 01:37:07,140 Spørsmål. 1977 01:37:07,140 --> 01:37:07,470 Ja? 1978 01:37:07,470 --> 01:37:11,510 >> PUBLIKUM: Når vi bruker punktum i vår HTML, er at ikke jQuery? 1979 01:37:11,510 --> 01:37:13,520 >> JOSEPH ONG: Dot i vår HTML er en Javascript-ting. 1980 01:37:13,520 --> 01:37:14,750 Det er ikke en jQuery ting. 1981 01:37:14,750 --> 01:37:17,620 Måten dere lært det med jQuery er å bruke. html. 1982 01:37:17,620 --> 01:37:21,510 Og så gikk det uansett HTML skal være. 1983 01:37:21,510 --> 01:37:23,480 Så jeg får til det i løpet av bare et sekund faktisk. 1984 01:37:23,480 --> 01:37:27,800 Så hvordan gjør vi ting til element når vi har valgt det? 1985 01:37:27,800 --> 01:37:30,130 Så det er et eksempel på velge et element. 1986 01:37:30,130 --> 01:37:32,280 Så nå, ønsker vi å gjøre ting til det. 1987 01:37:32,280 --> 01:37:35,730 >> Så i dette tilfellet, la meg gå tilbake til forrige lysbilde. 1988 01:37:35,730 --> 01:37:37,360 Det var Bob før. 1989 01:37:37,360 --> 01:37:40,660 Og jeg ønsker å endre det inne HTML til Milo. 1990 01:37:40,660 --> 01:37:43,240 Så jeg kaller HTML-funksjonen fra elementet. 1991 01:37:43,240 --> 01:37:45,580 At HTML-funksjonen er en fremgangsmåte for element. 1992 01:37:45,580 --> 01:37:47,430 Og så gir jeg det hva Jeg vil at HTML skal være. 1993 01:37:47,430 --> 01:37:50,560 Og det bare erstatter det som er inne i det merket med hva jeg gir den. 1994 01:37:50,560 --> 01:37:50,830 Ja. 1995 01:37:50,830 --> 01:37:51,170 Spørsmål? 1996 01:37:51,170 --> 01:37:57,397 >> PUBLIKUM: The hashtag brukes for bare jQuery. 1997 01:37:57,397 --> 01:37:59,313 [Uhørbart] 1998 01:37:59,313 --> 01:38:01,230 vi ville ikke bruke det. 1999 01:38:01,230 --> 01:38:01,960 >> JOSEPH ONG: Ja, akkurat. 2000 01:38:01,960 --> 01:38:03,750 Men ikke bekymre deg for mye om ren Javascript. 2001 01:38:03,750 --> 01:38:06,670 Jeg vil bare at dere å fokusere på hvordan du ville gjøre det med jQuery, fordi 2002 01:38:06,670 --> 01:38:10,020 som kommer til å være den viktigste del på quiz. 2003 01:38:10,020 --> 01:38:10,400 Høyre. 2004 01:38:10,400 --> 01:38:10,880 Nettopp. 2005 01:38:10,880 --> 01:38:16,025 Så du ser at hashtag, slik at svarer til velge-element med 2006 01:38:16,025 --> 01:38:18,310 ID midten på grunn av at hashtag. 2007 01:38:18,310 --> 01:38:19,670 Hashtag betyr ID. 2008 01:38:19,670 --> 01:38:22,870 Og dette elementet har en ID på midten. 2009 01:38:22,870 --> 01:38:24,366 Så det er det elementet vi velger. 2010 01:38:24,366 --> 01:38:27,160 >> PUBLIKUM: [uhørbart]. 2011 01:38:27,160 --> 01:38:31,090 dollartegn hashtag [uhørbart]? 2012 01:38:31,090 --> 01:38:31,710 >> JOSEPH ONG: Så nei. 2013 01:38:31,710 --> 01:38:33,280 Spørsmålet er kan du bruke. Verdi. 2014 01:38:33,280 --> 01:38:36,445 Og. Verdien virker bare på elementer som er innganger. 2015 01:38:36,445 --> 01:38:40,950 2016 01:38:40,950 --> 01:38:45,495 I jQuery, ville det være . Val, ikke. Verdi. 2017 01:38:45,495 --> 01:38:49,080 Så jeg kommer til å få et lite eksempel på at demonstrerer alt dette i kombinasjon 2018 01:38:49,080 --> 01:38:49,850 i et sekund. 2019 01:38:49,850 --> 01:38:53,130 Men jeg tror dette serverer et lite tekstutdrag fornuftig å folk så langt. 2020 01:38:53,130 --> 01:38:55,450 Vil du endre HTML, ringe HTML-metoden. 2021 01:38:55,450 --> 01:38:56,432 Ja. 2022 01:38:56,432 --> 01:38:58,200 >> PUBLIKUM: Kan du forklare metoden igjen? 2023 01:38:58,200 --> 01:39:01,900 >> JOSEPH ONG: Så en metode er bare en funksjon som hører til en i denne 2024 01:39:01,900 --> 01:39:04,590 tilfelle, ett av disse DOM elementer fordi du ser jeg 2025 01:39:04,590 --> 01:39:05,940 valgte elementet først. 2026 01:39:05,940 --> 01:39:07,320 Egentlig, la meg bruke musen. 2027 01:39:07,320 --> 01:39:09,330 Jeg valgte elementet først. 2028 01:39:09,330 --> 01:39:12,310 Og da jeg ringte denne HTML fungere som den hadde. 2029 01:39:12,310 --> 01:39:15,710 Og fordi denne funksjonen tilhører denne tingen, kaller vi det en metode. 2030 01:39:15,710 --> 01:39:19,480 Det er bare et fancy navn for det. 2031 01:39:19,480 --> 01:39:20,730 Si det igjen. 2032 01:39:20,730 --> 01:39:22,880 2033 01:39:22,880 --> 01:39:25,170 Så husk, vi har valgt elementet nå. 2034 01:39:25,170 --> 01:39:27,810 Og vi har satt den på innsiden av elementet variabel. 2035 01:39:27,810 --> 01:39:28,600 Korrigere? 2036 01:39:28,600 --> 01:39:34,380 >> Så når vi ønsker å endre HTML på innsiden, fordi det var Bob før, du 2037 01:39:34,380 --> 01:39:36,420 vil endre denne teksten til Milo. 2038 01:39:36,420 --> 01:39:37,920 Så vi kaller HTML. 2039 01:39:37,920 --> 01:39:41,610 Og vi forteller det hva HTML inne at elementet skal nå. 2040 01:39:41,610 --> 01:39:44,107 Og så det forandrer det til Milo, fordi jeg ga det Milo. 2041 01:39:44,107 --> 01:39:46,542 >> PUBLIKUM: Så de jobber sammen. 2042 01:39:46,542 --> 01:39:47,030 [Uhørbart] 2043 01:39:47,030 --> 01:39:47,390 >> JOSEPH ONG: Ja, ja. 2044 01:39:47,390 --> 01:39:48,180 De jobber sammen. 2045 01:39:48,180 --> 01:39:50,210 Så en av dem velger elementet først. 2046 01:39:50,210 --> 01:39:52,863 Og den andre gjør noe til det. 2047 01:39:52,863 --> 01:39:53,790 Ja. 2048 01:39:53,790 --> 01:39:56,168 >> PUBLIKUM: [uhørbart]. 2049 01:39:56,168 --> 01:40:01,280 Hvis denne metoden er forskjellig fra i HTML du har metoden lik faktiske. 2050 01:40:01,280 --> 01:40:01,560 >> JOSEPH ONG: Yeah. 2051 01:40:01,560 --> 01:40:03,370 Det er en annen metode. 2052 01:40:03,370 --> 01:40:04,670 Det er en annen metode. 2053 01:40:04,670 --> 01:40:07,860 Og vi kan dekke det i bare et sekund når vi kommer til et eksempel. 2054 01:40:07,860 --> 01:40:12,000 Jeg vil være sikker på at vi fremskynde fordi vi kjører ut av tiden. 2055 01:40:12,000 --> 01:40:15,360 Men vi har kjørt veien over tid nå. 2056 01:40:15,360 --> 01:40:15,490 OK. 2057 01:40:15,490 --> 01:40:16,430 Cool. 2058 01:40:16,430 --> 01:40:20,130 Så hvis du ønsker å legge til en klasse, er det også et tilleggsklassemetode. 2059 01:40:20,130 --> 01:40:24,300 Dette er bare et eksempel på hva du kan gjøre med jQuery. 2060 01:40:24,300 --> 01:40:25,950 Det legger bare en klasse. 2061 01:40:25,950 --> 01:40:28,660 >> Hvis du ønsker å fjerne det, du kan ringe fjerne. 2062 01:40:28,660 --> 01:40:32,280 Det er bare en annen ting du kan gjøre. 2063 01:40:32,280 --> 01:40:35,680 Så flere eksempler på ting du kan gjøre. 2064 01:40:35,680 --> 01:40:37,510 Så kan jeg bare sette den på toppen som dette? 2065 01:40:37,510 --> 01:40:38,760 Yngste remove. 2066 01:40:38,760 --> 01:40:42,470 2067 01:40:42,470 --> 01:40:45,930 Hvis jeg bare kjøre at Java på toppen av min fil, vil det fungere? 2068 01:40:45,930 --> 01:40:48,540 2069 01:40:48,540 --> 01:40:48,920 Høyre. 2070 01:40:48,920 --> 01:40:50,530 Fordi midten ikke finnes ennå. 2071 01:40:50,530 --> 01:40:51,840 Så dette er ikke til å fungere. 2072 01:40:51,840 --> 01:40:52,800 Utførelse orden. 2073 01:40:52,800 --> 01:40:55,040 Det går til toppen først. 2074 01:40:55,040 --> 01:40:55,540 Hva? 2075 01:40:55,540 --> 01:40:57,450 >> PUBLIKUM: Yngste ikke finnes ennå? 2076 01:40:57,450 --> 01:40:57,810 >> JOSEPH ONG: Yeah. 2077 01:40:57,810 --> 01:40:58,710 Yngste ikke finnes ennå. 2078 01:40:58,710 --> 01:40:59,600 Nettopp. 2079 01:40:59,600 --> 01:41:01,320 >> PUBLIKUM: Du sa midten. 2080 01:41:01,320 --> 01:41:01,510 >> JOSEPH ONG: Beklager. 2081 01:41:01,510 --> 01:41:02,720 Yngste ikke finnes ennå. 2082 01:41:02,720 --> 01:41:04,510 Og den andre tingen er at jeg har ikke inkludert jQuery 2083 01:41:04,510 --> 01:41:06,580 fil spør script src. 2084 01:41:06,580 --> 01:41:07,960 Så det ikke kommer til å fungere. 2085 01:41:07,960 --> 01:41:09,580 Egentlig gjorde jeg ikke gjøre det i neste lysbilde, noe som er 2086 01:41:09,580 --> 01:41:10,700 ment for å fikse det heller. 2087 01:41:10,700 --> 01:41:14,120 Men måten vi gjør dette er Java er hendelsesdrevet. 2088 01:41:14,120 --> 01:41:17,410 Så det vi gjør er at vi bruker en hendelse Handler for å gjøre dette skje. 2089 01:41:17,410 --> 01:41:19,510 Og så jeg velger dokumentet satt først. 2090 01:41:19,510 --> 01:41:23,810 Jeg sier, OK, når dokumentet er klar, la meg kjøre en funksjon. 2091 01:41:23,810 --> 01:41:25,470 Så det er alt som syntaks midler. 2092 01:41:25,470 --> 01:41:27,100 >> Jeg valgte dokumentet. 2093 01:41:27,100 --> 01:41:29,530 Nå, når dokumentet er klar, kjør funksjonen. 2094 01:41:29,530 --> 01:41:32,970 Og så over her når dokumentet er klar, noe som betyr at alt det har HTML 2095 01:41:32,970 --> 01:41:36,140 lastet, så jeg kjører funksjonen som fjerner det elementet. 2096 01:41:36,140 --> 01:41:40,270 Og så nå, når jeg kjører denne funksjonen at jeg gikk inn i klar, jeg er 2097 01:41:40,270 --> 01:41:43,780 garantert at alle HTML på siden kommer til å eksistere først. 2098 01:41:43,780 --> 01:41:44,100 Ja. 2099 01:41:44,100 --> 01:41:44,425 Spørsmål? 2100 01:41:44,425 --> 01:41:48,200 >> PUBLIKUM: Hva er hendelsen søkeord i funksjonen? 2101 01:41:48,200 --> 01:41:51,750 >> JOSEPH ONG: Slik at arrangementet søkeord i funksjon er bare en parameter som 2102 01:41:51,750 --> 01:41:53,490 blir sendt til funksjonen for ethvert arrangement. 2103 01:41:53,490 --> 01:41:55,470 Det er bare noe som du få gratis. 2104 01:41:55,470 --> 01:41:59,320 Når du bruker nøkkel handlers i pset8, kunne så fall fortelle deg, for 2105 01:41:59,320 --> 01:42:01,350 eksempel hvilken tast du trykket på. 2106 01:42:01,350 --> 01:42:05,540 I dette tilfellet, for et ferdig hendelse, det er faktisk ikke super nyttig. 2107 01:42:05,540 --> 01:42:08,640 Men for en nøkkel ned hendelse, er det mer nyttig, fordi du får vite hvilke 2108 01:42:08,640 --> 01:42:12,330 tasten du trykket ved å gå inn nøkkel kode av at hendelsesobjekt. 2109 01:42:12,330 --> 01:42:13,530 Korrigere? 2110 01:42:13,530 --> 01:42:15,160 Betyr det fornuftig? 2111 01:42:15,160 --> 01:42:16,280 OK. 2112 01:42:16,280 --> 01:42:16,580 Ja. 2113 01:42:16,580 --> 01:42:17,150 Spørsmål? 2114 01:42:17,150 --> 01:42:19,290 >> PUBLIKUM: Så kan du sette script tag lavere ned? 2115 01:42:19,290 --> 01:42:19,940 >> JOSEPH ONG: Så ja. 2116 01:42:19,940 --> 01:42:21,500 Du kan sette skriptet tagge lavere ned. 2117 01:42:21,500 --> 01:42:23,090 Men da det bare blir veldig rotete. 2118 01:42:23,090 --> 01:42:26,590 Og vi liker å sentralisere alle av koden vår på ett sted. 2119 01:42:26,590 --> 01:42:28,290 Og dette vil gi oss mulighet til å gjøre det. 2120 01:42:28,290 --> 01:42:32,010 Husker jeg sa at det er en hyggeligere måte for å sikre at elementene er 2121 01:42:32,010 --> 01:42:33,880 på siden før du kjøre kode? 2122 01:42:33,880 --> 01:42:36,079 Og dette er bare en fin måte du vil oppnå det. 2123 01:42:36,079 --> 01:42:37,329 >> PUBLIKUM: [uhørbart]. 2124 01:42:37,329 --> 01:42:41,710 2125 01:42:41,710 --> 01:42:42,230 >> JOSEPH ONG: Yeah. 2126 01:42:42,230 --> 01:42:43,460 Du vil fortsatt ha til, ikke sant? 2127 01:42:43,460 --> 01:42:46,930 Fordi husk, inkludert deg fil øverst på siden. 2128 01:42:46,930 --> 01:42:49,890 Så det kommer til å kjøre først før du kommer til bunnen av siden. 2129 01:42:49,890 --> 01:42:54,600 2130 01:42:54,600 --> 01:42:55,180 OK. 2131 01:42:55,180 --> 01:42:59,210 Så du kan også legge til en annen type hendelsesbehandling. 2132 01:42:59,210 --> 01:43:00,640 Dette bare behandler klikk. 2133 01:43:00,640 --> 01:43:03,910 Når jeg klikker på yngste, deretter det vil komme opp med et varsel. 2134 01:43:03,910 --> 01:43:05,440 Dette er bare en annen type arrangement. 2135 01:43:05,440 --> 01:43:08,840 I motsetning til klar hendelse, du nå bruke klikk hendelse når du mottar 2136 01:43:08,840 --> 01:43:10,190 klikker på et element. 2137 01:43:10,190 --> 01:43:13,860 >> Og så i dette tilfellet, husk, klikk håndterer er festet til yngste. 2138 01:43:13,860 --> 01:43:16,080 Så det bare skjer når Jeg klikker på yngste. 2139 01:43:16,080 --> 01:43:19,510 Og i den andre, den klare arrangementet ble knyttet til dokumentet. 2140 01:43:19,510 --> 01:43:23,750 Så den venter på dokumentet å være klar. 2141 01:43:23,750 --> 01:43:25,120 Fornuftig? 2142 01:43:25,120 --> 01:43:26,190 Jeg tror jeg kan gå videre. 2143 01:43:26,190 --> 01:43:26,610 Ja. 2144 01:43:26,610 --> 01:43:26,980 Spørsmål? 2145 01:43:26,980 --> 01:43:28,230 >> PUBLIKUM: [uhørbart]. 2146 01:43:28,230 --> 01:43:31,676 2147 01:43:31,676 --> 01:43:33,620 i dette tilfellet du bruker [uhørbart]. 2148 01:43:33,620 --> 01:43:36,650 >> JOSEPH ONG: Oh, yeah, fordi i denne tilfelle, må jeg vente for de yngste 2149 01:43:36,650 --> 01:43:40,740 element skal vises på skjermen første før jeg kan legge ved et klikk håndterer til 2150 01:43:40,740 --> 01:43:43,062 det, noe som er grunnen til at jeg satte den inn av et dokument klar. 2151 01:43:43,062 --> 01:43:45,780 2152 01:43:45,780 --> 01:43:46,840 OK. 2153 01:43:46,840 --> 01:43:52,390 Og neste, så dette er et stort eksempel på hvordan du vil kombinere alt. 2154 01:43:52,390 --> 01:43:55,930 Dette er bare en form validering eksempel du har sett på forelesning. 2155 01:43:55,930 --> 01:43:58,410 Så ta det steg for steg som du går gjennom dette. 2156 01:43:58,410 --> 01:43:59,590 Og det vil være helt OK. 2157 01:43:59,590 --> 01:44:01,400 Bare les den fra topp til bunn. 2158 01:44:01,400 --> 01:44:03,030 >> Jeg har et skjema nederst. 2159 01:44:03,030 --> 01:44:07,590 Når dokumentet er ferdig, jeg legger ved en sende behandleren til skjemaet, slik at 2160 01:44:07,590 --> 01:44:12,910 når jeg sender inn skjemaet, får jeg verdiene inne i hver av disse innganger. 2161 01:44:12,910 --> 01:44:14,560 Og jeg sjekke om det er tomt. 2162 01:44:14,560 --> 01:44:17,090 Hvis det er tomt, jeg return false, fordi Jeg ønsker ikke å sende inn skjemaet, 2163 01:44:17,090 --> 01:44:18,950 fordi skjemaet er galt. 2164 01:44:18,950 --> 01:44:22,040 Hvis passordet er tomt eller det er mindre enn åtte tegn, tror jeg ikke sende 2165 01:44:22,040 --> 01:44:24,470 form, fordi det er også galt. 2166 01:44:24,470 --> 01:44:28,150 Og avkastningen falske bare forhindrer form fra å sende inn og 2167 01:44:28,150 --> 01:44:30,150 går til en ny side. 2168 01:44:30,150 --> 01:44:31,310 >> Og forhåpentligvis, dette er fornuftig. 2169 01:44:31,310 --> 01:44:34,650 Jeg tror dere bør gå gjennom denne koden trinnvis på egen hånd. 2170 01:44:34,650 --> 01:44:38,350 Og når du forstår hva den velger elementer og gjøre ting til det 2171 01:44:38,350 --> 01:44:40,520 faktisk innebærer, vil dette gjøre mye fornuftig for deg. 2172 01:44:40,520 --> 01:44:41,295 Ja? 2173 01:44:41,295 --> 01:44:44,150 >> PUBLIKUM: Hva gjør name = brukernavn bety? 2174 01:44:44,150 --> 01:44:48,530 >> JOSEPH ONG: Så navnet = brukernavn og name = passord betyr bare se på 2175 01:44:48,530 --> 01:44:50,730 egenskap av hva du velger. 2176 01:44:50,730 --> 01:44:51,790 Og så det må matche. 2177 01:44:51,790 --> 01:44:53,870 Så vi går inn i registreringen. 2178 01:44:53,870 --> 01:44:56,240 Og så ser vi på alle innganger og registrering. 2179 01:44:56,240 --> 01:44:59,990 Og da vi plukke en hvor navnet attributt er lik brukernavn. 2180 01:44:59,990 --> 01:45:04,040 Så det første velgeren bare velger brukernavn innspill. 2181 01:45:04,040 --> 01:45:08,220 Og at andre valg bare velger passordet én, fordi de har 2182 01:45:08,220 --> 01:45:12,240 deres navn attributter satt som hva de er ment å være. 2183 01:45:12,240 --> 01:45:12,575 Spørsmål? 2184 01:45:12,575 --> 01:45:17,030 >> PUBLIKUM: Ved innlevering, hvordan nederste delen løse den øverste delen? 2185 01:45:17,030 --> 01:45:19,350 >> JOSEPH ONG: Så det er fordi av hendelseshåndterer. 2186 01:45:19,350 --> 01:45:23,000 Så vi venter på en sender hendelse som får sparken fra skjemaet. 2187 01:45:23,000 --> 01:45:24,730 Og det er alt som er å sende. 2188 01:45:24,730 --> 01:45:26,080 Hvorfor kaller jeg sende opp der? 2189 01:45:26,080 --> 01:45:28,870 Den sier, når skjemaet er sendt, Jeg får en sende hendelsen. 2190 01:45:28,870 --> 01:45:33,480 Så la meg bare snappe det og deretter kjøre denne koden i stedet. 2191 01:45:33,480 --> 01:45:33,823 Ja? 2192 01:45:33,823 --> 01:45:35,866 >> PUBLIKUM: Hvorfor har du å ha funksjon hendelse? 2193 01:45:35,866 --> 01:45:38,580 Hvorfor kan du ikke bare [uhørbart]? 2194 01:45:38,580 --> 01:45:41,140 >> JOSEPH ONG: Fordi i Javascript, du nødt til å erklære funksjonene. 2195 01:45:41,140 --> 01:45:42,910 Det er bare hvordan det fungerer i Javascript. 2196 01:45:42,910 --> 01:45:44,800 Du må si det som skjer å kjøre en funksjon. 2197 01:45:44,800 --> 01:45:47,290 Du sier det at du er forventer en funksjon her i stedet for 2198 01:45:47,290 --> 01:45:48,260 bare klammeparentes. 2199 01:45:48,260 --> 01:45:50,460 >> PUBLIKUM: Og funksjonen er uansett følger? 2200 01:45:50,460 --> 01:45:50,650 >> JOSEPH ONG: Yeah. 2201 01:45:50,650 --> 01:45:52,790 Funksjonen er det som er på innsiden klammeparentes etter 2202 01:45:52,790 --> 01:45:53,630 at funksjon søkeord. 2203 01:45:53,630 --> 01:45:54,045 Ja? 2204 01:45:54,045 --> 01:45:55,295 >> PUBLIKUM: [uhørbart]. 2205 01:45:55,295 --> 01:46:00,180 2206 01:46:00,180 --> 01:46:00,660 >> JOSEPH ONG: For sende? 2207 01:46:00,660 --> 01:46:03,520 >> PUBLIKUM: Nei, for funksjon uten hendelsen. 2208 01:46:03,520 --> 01:46:03,770 >> JOSEPH ONG: Yeah. 2209 01:46:03,770 --> 01:46:05,610 Så uten arrangementet du kan ha det. 2210 01:46:05,610 --> 01:46:08,480 Hvis du ikke trenger arrangementet, så kan du bare utelate det. 2211 01:46:08,480 --> 01:46:12,220 Men hvis du gjør det, så du bare sette den der. 2212 01:46:12,220 --> 01:46:12,520 Ja. 2213 01:46:12,520 --> 01:46:13,190 Rask spørsmål? 2214 01:46:13,190 --> 01:46:14,440 >> PUBLIKUM: [uhørbart]. 2215 01:46:14,440 --> 01:46:21,170 2216 01:46:21,170 --> 01:46:21,440 >> JOSEPH ONG: Yeah. 2217 01:46:21,440 --> 01:46:24,550 Fordi hva du trenger å gjøre, document.ready bare sier vente til alle 2218 01:46:24,550 --> 01:46:26,540 HTML-koden på siden å laste første. 2219 01:46:26,540 --> 01:46:30,510 Og vanligvis, vil du at elementer på plass før du kjører noen kode. 2220 01:46:30,510 --> 01:46:31,030 OK. 2221 01:46:31,030 --> 01:46:32,180 Vi må få til Ajax. 2222 01:46:32,180 --> 01:46:33,110 Vi har ikke mye tid. 2223 01:46:33,110 --> 01:46:35,170 Så fordeler og ulemper. 2224 01:46:35,170 --> 01:46:37,450 Javascript er lettere prøve skrive med jQuery. 2225 01:46:37,450 --> 01:46:38,930 Men jQuery er litt treg. 2226 01:46:38,930 --> 01:46:42,290 >> Det er som PHP er tregere enn C, fordi den er tolket. 2227 01:46:42,290 --> 01:46:45,690 Og jQuery er litt tregere enn Javascript, fordi det gjør mye av 2228 01:46:45,690 --> 01:46:46,630 ting under panseret. 2229 01:46:46,630 --> 01:46:48,660 Og så hvis du bruker jQuery, er det bare litt tregere enn 2230 01:46:48,660 --> 01:46:51,630 Javascript, selv om det gir deg fin eleganse. 2231 01:46:51,630 --> 01:46:53,970 Og til slutt, Ajax. 2232 01:46:53,970 --> 01:46:59,170 Så langt med Ajax, har du ikke sett Ajax i form av pset7 ennå, fordi 2233 01:46:59,170 --> 01:47:01,150 når du gjør det, sender du en form for sitat. 2234 01:47:01,150 --> 01:47:02,350 Den laster en ny side. 2235 01:47:02,350 --> 01:47:04,440 Så du får dette store hvite flash på siden, mens det 2236 01:47:04,440 --> 01:47:06,820 andre siden lastes, riktig? 2237 01:47:06,820 --> 01:47:08,780 >> Det ville være veldig fint om du hadde ikke denne flash. 2238 01:47:08,780 --> 01:47:11,600 Som Facebook, hvis du bare bla til bunnen, legger det nytt innhold 2239 01:47:11,600 --> 01:47:13,490 uten å oppdatere hele siden. 2240 01:47:13,490 --> 01:47:15,420 Så noe sånt som dette ville være hyggelig. 2241 01:47:15,420 --> 01:47:17,370 Dette er Javascript-kode på venstre side. 2242 01:47:17,370 --> 01:47:19,390 Du får det som er på innsiden av den inngangen. 2243 01:47:19,390 --> 01:47:21,340 Du får aksje info fra Yahoo! 2244 01:47:21,340 --> 01:47:27,440 Og så du gjør en stor streng som sier, OK, er dette budskapet jeg ønsker 2245 01:47:27,440 --> 01:47:28,400 som skal vises på skjermen. 2246 01:47:28,400 --> 01:47:32,280 Og så sette den meldingen inne av noen HTML-element som får 2247 01:47:32,280 --> 01:47:33,970 vises på skjermen. 2248 01:47:33,970 --> 01:47:35,540 >> Så det er alt som skjer her. 2249 01:47:35,540 --> 01:47:39,410 Så i utgangspunktet, fordi dette er alt Java og du trenger ikke å løpe 2250 01:47:39,410 --> 01:47:42,980 lenger PHP, dette vil sørge for at at siden ikke lastes. 2251 01:47:42,980 --> 01:47:47,470 Så dette er bare en abstrakt idé at jeg sier her for nå. 2252 01:47:47,470 --> 01:47:50,630 Den abstrakt idé er at hvis du gjør det alt i Javascript, trenger du ikke en 2253 01:47:50,630 --> 01:47:52,330 siden oppdateres. 2254 01:47:52,330 --> 01:47:53,800 Men hvordan gjør du egentlig dette? 2255 01:47:53,800 --> 01:47:56,230 >> Vel, faktisk, la oss snakke om et problem med denne første. 2256 01:47:56,230 --> 01:47:59,340 Et problem er i Javascript, utførelsen er synkron. 2257 01:47:59,340 --> 01:48:02,000 Så du må vente på en linje for å fullføre før du 2258 01:48:02,000 --> 01:48:03,370 utføre neste linje. 2259 01:48:03,370 --> 01:48:06,130 Og hva hvis jeg skal over til Yahoo!, og deres servere er veldig treg, og 2260 01:48:06,130 --> 01:48:08,790 det tar dem tre sekunder til gi meg tilbake som lager info? 2261 01:48:08,790 --> 01:48:12,620 Når jeg treffer den prisen linjen, hvis den utførelse er synkron, som det er av 2262 01:48:12,620 --> 01:48:15,390 standard, hva det er bare kommer til å gjøre er Nettleseren din kommer til å stoppe for 2263 01:48:15,390 --> 01:48:15,930 tre sekunder. 2264 01:48:15,930 --> 01:48:18,900 Og du kommer ikke til å være i stand til å gjøre noe mens det blir disse dataene. 2265 01:48:18,900 --> 01:48:20,010 Det kommer til å bli fryst. 2266 01:48:20,010 --> 01:48:20,800 >> Og det er ille. 2267 01:48:20,800 --> 01:48:23,390 Du ønsker ikke en bruker å har en frossen nettside. 2268 01:48:23,390 --> 01:48:24,170 Korrigere? 2269 01:48:24,170 --> 01:48:25,480 Det er bare dårlig. 2270 01:48:25,480 --> 01:48:26,770 Alle er enige? 2271 01:48:26,770 --> 01:48:29,270 Hvis du surfer Facebook, og det fryser, og du kan ikke gjøre noe, du 2272 01:48:29,270 --> 01:48:31,920 bli virkelig frustrert. 2273 01:48:31,920 --> 01:48:34,960 Så løsningen er at vi gjør noe asynkron stedet. 2274 01:48:34,960 --> 01:48:38,910 Så alt dette asynkron greia sier er, kommer jeg til å spørre om dette 2275 01:48:38,910 --> 01:48:40,280 URL for noen data. 2276 01:48:40,280 --> 01:48:41,610 Og så kommer jeg til å holde det gående. 2277 01:48:41,610 --> 01:48:45,330 Jeg skal bare holde utføring hva kode som var etter det. 2278 01:48:45,330 --> 01:48:49,290 >> Og så når disse dataene er klar, da vil jeg behandle det. 2279 01:48:49,290 --> 01:48:50,540 Det er alt det er å si. 2280 01:48:50,540 --> 01:48:52,795 2281 01:48:52,795 --> 01:48:56,710 >> PUBLIKUM: Ajax bare gjør kode asynkron? 2282 01:48:56,710 --> 01:48:58,560 >> JOSEPH ONG: Det er en asynkron måte henting av data. 2283 01:48:58,560 --> 01:49:01,230 Så det første om Ajax er det lar meg få data 2284 01:49:01,230 --> 01:49:03,170 fra en ekstern nettside. 2285 01:49:03,170 --> 01:49:07,045 Og den andre tingen er det som gjør at at siden min ikke stall mens jeg er 2286 01:49:07,045 --> 01:49:07,970 hente disse dataene. 2287 01:49:07,970 --> 01:49:09,600 Det er den asynkrone delen av det. 2288 01:49:09,600 --> 01:49:13,040 Fordi det går av et annet sted, fordi jeg sier jeg holder skjer mens 2289 01:49:13,040 --> 01:49:14,900 det er å hente disse dataene, som gjør det asynkron. 2290 01:49:14,900 --> 01:49:17,170 Jeg fortsetter å kjøre. 2291 01:49:17,170 --> 01:49:18,960 >> Så hold det asynkron ideen i bakhodet. 2292 01:49:18,960 --> 01:49:22,010 Og jeg skal vise deg hva forskjellen er. 2293 01:49:22,010 --> 01:49:23,920 Synkron versjon er på venstre side. 2294 01:49:23,920 --> 01:49:26,240 Den asynkrone versjon er på høyre side. 2295 01:49:26,240 --> 01:49:29,170 Se på tallene for å se hvilke trinn tilsvarer det 2296 01:49:29,170 --> 01:49:30,610 utføres på hver linje. 2297 01:49:30,610 --> 01:49:32,730 Over det, viser varselet opp først. 2298 01:49:32,730 --> 01:49:34,590 Fordi få lager info fra Yahoo! 2299 01:49:34,590 --> 01:49:37,250 tar tre sekunder, boder det i tre sekunder. 2300 01:49:37,250 --> 01:49:39,880 Og da det varsler prisen etter disse tre sekunder. 2301 01:49:39,880 --> 01:49:43,690 >> Så nå, at varsel show opp på den tid - 2302 01:49:43,690 --> 01:49:44,610 tre sekunder i. 2303 01:49:44,610 --> 01:49:47,670 Og da det varsler etter etter det. 2304 01:49:47,670 --> 01:49:48,930 Så det går bare trinnvis. 2305 01:49:48,930 --> 01:49:51,200 Det er som hva dere ville godta, riktig? 2306 01:49:51,200 --> 01:49:54,170 Med asynkron utførelse, du varsle først. 2307 01:49:54,170 --> 01:49:57,410 Deretter kan du gå bort til denne nettadressen. 2308 01:49:57,410 --> 01:49:59,530 Og du sier, jeg kommer til å bare spør for dataene. 2309 01:49:59,530 --> 01:50:01,170 Og så kommer jeg til å bearbeide det senere. 2310 01:50:01,170 --> 01:50:04,230 Så det umiddelbart utfører neste linje etter at jeg gjør det 2311 01:50:04,230 --> 01:50:05,710 asynkron forespørsel. 2312 01:50:05,710 --> 01:50:08,920 >> Så en 0,001 sekunder, ser du våken hi. 2313 01:50:08,920 --> 01:50:10,960 Utfør denne funksjonen, våken bye. 2314 01:50:10,960 --> 01:50:14,240 Og fordi jeg har gjort et løfte om at jeg ville behandle dataene senere, hva 2315 01:50:14,240 --> 01:50:17,920 skjer er når dataene kommer tilbake tre sekunder senere, da kjører jeg at 2316 01:50:17,920 --> 01:50:21,380 funksjon som jeg har der borte. 2317 01:50:21,380 --> 01:50:21,870 Ja? 2318 01:50:21,870 --> 01:50:25,750 >> PUBLIKUM: Kan du spesifisere eller avklare hva Ajax betyr? 2319 01:50:25,750 --> 01:50:30,460 >> JOSEPH ONG: Så Ajax er en måte at hvis jeg trenger data når jeg er på en nettside og jeg 2320 01:50:30,460 --> 01:50:34,690 ønsker ikke å oppdatere siden, da Jeg bruker denne teknologien kalles Ajax. 2321 01:50:34,690 --> 01:50:40,630 Som i hovedsak betyr bare, gå hente data fra et annet nettsted. 2322 01:50:40,630 --> 01:50:43,724 Og gjør det på en måte som bare ikke stall min nettside. 2323 01:50:43,724 --> 01:50:46,650 >> PUBLIKUM: Så er det en iboende del av Javascript eller jQuery? 2324 01:50:46,650 --> 01:50:50,590 >> JOSEPH ONG: Så noen skrev en måte å gjøre dette i Javascript for lenge siden. 2325 01:50:50,590 --> 01:50:52,050 På et tidspunkt, gjorde det ikke eksisterer. 2326 01:50:52,050 --> 01:50:56,630 Og så noen oppfant denne teknikken å tillate folk å be om disse dataene 2327 01:50:56,630 --> 01:50:57,680 på denne måte. 2328 01:50:57,680 --> 01:50:59,550 Og de skrev noen ting å gjøre det for deg. 2329 01:50:59,550 --> 01:51:01,605 Og jQuery bare gir deg dette veldig fin måte å gjøre det 2330 01:51:01,605 --> 01:51:03,112 med denne $. få funksjon. 2331 01:51:03,112 --> 01:51:07,200 2332 01:51:07,200 --> 01:51:09,480 spørsmål? 2333 01:51:09,480 --> 01:51:11,560 Jeg kan svare på spørsmål om Ajax etterpå også. 2334 01:51:11,560 --> 01:51:13,870 Jeg skal være her. 2335 01:51:13,870 --> 01:51:16,390 >> Så det la oss oss hente data uten oppdatere siden. 2336 01:51:16,390 --> 01:51:18,200 Og det la oss oss gjøre dette i en asynkron måte at 2337 01:51:18,200 --> 01:51:19,450 fryser ikke på siden. 2338 01:51:19,450 --> 01:51:22,680 2339 01:51:22,680 --> 01:51:27,310 For lang, ikke lese om det Forklaringen var for lang for deg. 2340 01:51:27,310 --> 01:51:29,430 Så til slutt, cross-site skriptangrep. 2341 01:51:29,430 --> 01:51:30,910 Vi så dette med Zamyla. 2342 01:51:30,910 --> 01:51:34,285 Hvis du er i min database noen har dette navnet, som er denne skriptmerket, og jeg 2343 01:51:34,285 --> 01:51:38,280 har noen kode på siden min som utskrifter ut folks navn på rad, eller jeg har 2344 01:51:38,280 --> 01:51:43,310 noen Javascript-kode som setter inn dette navnet inn på siden, 2345 01:51:43,310 --> 01:51:45,680 hva HTML blir produsert? 2346 01:51:45,680 --> 01:51:47,290 Vel, jeg skriver ut HTML-koden. 2347 01:51:47,290 --> 01:51:48,390 Jeg skrive ut alle disse kodene. 2348 01:51:48,390 --> 01:51:50,740 >> Jeg kommer til den delen hvor jeg er utskrift ut med vennene mine. 2349 01:51:50,740 --> 01:51:52,980 Jeg skriver Lauren ut. 2350 01:51:52,980 --> 01:51:54,200 Det skriver Milo ut. 2351 01:51:54,200 --> 01:51:56,810 Og så navnet mitt i databasen er script innlegg 2352 01:51:56,810 --> 01:51:58,060 lite flatterende Facebook-statusen. 2353 01:51:58,060 --> 01:52:00,740 2354 01:52:00,740 --> 01:52:04,330 Fordi jeg satt dette inn på siden fordi det ser ut som Javascript, når 2355 01:52:04,330 --> 01:52:07,930 denne siden blir sendt til brukeren, det blir utført som Javascript. 2356 01:52:07,930 --> 01:52:10,800 Og så dette er hva vi kaller en cross-site scripting-angrep. 2357 01:52:10,800 --> 01:52:14,570 Noen setter skadelig informasjon i databasen som kan tilsvare 2358 01:52:14,570 --> 01:52:17,080 noen ekstra streng eller noen Java streng. 2359 01:52:17,080 --> 01:52:20,130 >> Og når det blir skrevet ut til side på denne måten, så hva 2360 01:52:20,130 --> 01:52:22,580 skjer er at dårlig kode blir henrettet at jeg ikke hadde tenkt 2361 01:52:22,580 --> 01:52:25,110 for det å bli henrettet. 2362 01:52:25,110 --> 01:52:28,230 Og det er alt en cross-site skriptangrep er. 2363 01:52:28,230 --> 01:52:31,790 Og måten du får rundt dette er som Zamyla sa. 2364 01:52:31,790 --> 01:52:34,340 Du bare pakk ting i HTML spesialtegn. 2365 01:52:34,340 --> 01:52:39,460 Og denne HTML spesialtegn er en PHP funksjon som vil forhindre denne typen 2366 01:52:39,460 --> 01:52:42,000 ting skjer med deg hvis du har en skadelig 2367 01:52:42,000 --> 01:52:43,830 streng i databasen. 2368 01:52:43,830 --> 01:52:47,650 Det unnslipper bare det, slik at det ikke bli tolket som HTML. 2369 01:52:47,650 --> 01:52:50,960 Det erstatter de små brak med det vi kaller enheter. 2370 01:52:50,960 --> 01:52:52,250 Og vi gikk over dette i foredraget også. 2371 01:52:52,250 --> 01:52:55,800 Så jeg tror dere bør ha et godt grep om det. 2372 01:52:55,800 --> 01:52:57,420 Spørsmål? 2373 01:52:57,420 --> 01:52:57,820 Ja. 2374 01:52:57,820 --> 01:53:00,860 >> PUBLIKUM: Så hvordan ville den [uhørbart]? 2375 01:53:00,860 --> 01:53:01,555 >> JOSEPH ONG: Si det igjen. 2376 01:53:01,555 --> 01:53:02,500 >> PUBLIKUM: Hvordan ville skjermen - 2377 01:53:02,500 --> 01:53:02,860 >> JOSEPH ONG: Høyre. 2378 01:53:02,860 --> 01:53:06,080 Så du har noe som sier, når Jeg registrerer, skriver i mitt navn. 2379 01:53:06,080 --> 01:53:09,390 Jeg bare skriver i dette feltet, er mitt navn Stript innlegg lite flatterende Facebook 2380 01:53:09,390 --> 01:53:11,570 status nær skriptmerket. 2381 01:53:11,570 --> 01:53:15,690 Og som bare blir satt inn i database, fordi jeg ikke kan si noen 2382 01:53:15,690 --> 01:53:18,260 i verden ikke har et navn med en pil venstre i det eller de 2383 01:53:18,260 --> 01:53:19,036 Ordet script i det. 2384 01:53:19,036 --> 01:53:21,330 Som egentlig ikke gir mening. 2385 01:53:21,330 --> 01:53:24,560 Så jeg må bare sørge for at jeg rense ting før jeg skriver det 2386 01:53:24,560 --> 01:53:25,420 ut til siden. 2387 01:53:25,420 --> 01:53:27,140 >> PUBLIKUM: So HTML spesielle kort hindrer skriptkodene? 2388 01:53:27,140 --> 01:53:28,710 >> JOSEPH ONG: Yeah. 2389 01:53:28,710 --> 01:53:29,960 Så det spiller ingen hindre skriptkodene. 2390 01:53:29,960 --> 01:53:32,320 Det gjør bare at skriptkodene ikke får 2391 01:53:32,320 --> 01:53:35,120 tolkes som HTML eller - 2392 01:53:35,120 --> 01:53:35,400 ja. 2393 01:53:35,400 --> 01:53:38,470 Det kommer bare opp som hva det faktisk er. 2394 01:53:38,470 --> 01:53:39,220 OK. 2395 01:53:39,220 --> 01:53:40,930 Så det var det quiz gjennomgang. 2396 01:53:40,930 --> 01:53:41,830 Cool. 2397 01:53:41,830 --> 01:53:45,088 >> [APPLAUSE]