1 00:00:00,000 --> 00:00:10,393 >> [MUSIK SPELA] 2 00:00:10,393 --> 00:00:11,037 3 00:00:11,037 --> 00:00:12,120 DAVID J. MALAN: Okej. 4 00:00:12,120 --> 00:00:12,830 Välkommen tillbaka. 5 00:00:12,830 --> 00:00:13,890 Detta är CS50. 6 00:00:13,890 --> 00:00:15,570 Detta är slutet av vecka 8. 7 00:00:15,570 --> 00:00:18,360 Och som ni vet, vi har ganska ordinarie kontorstid i ett fåtal 8 00:00:18,360 --> 00:00:21,090 av matsalar, inklusive Annenberg. 9 00:00:21,090 --> 00:00:23,860 Och en del av laget vänligt tog några bilder på sistone. 10 00:00:23,860 --> 00:00:26,230 Och för att hedra Halloween, trodde vi att vi skulle 11 00:00:26,230 --> 00:00:30,160 dela en som snarare fångade oss överraskning här i Annenberg Hall bara 12 00:00:30,160 --> 00:00:31,490 häromkvällen. 13 00:00:31,490 --> 00:00:36,300 Din klasskamrat Jacob poserade för detta foto, men var mer underhållande 14 00:00:36,300 --> 00:00:39,760 var på Facebook, den efterföljande konversation som hände efteråt. 15 00:00:39,760 --> 00:00:43,020 >> Hans första inlägg som svar till hans foto var det. 16 00:00:43,020 --> 00:00:46,740 Några minuter senare, bestämde han till en upp sig med detta. 17 00:00:46,740 --> 00:00:53,800 Det fortsatte sedan att gå till denna, och sedan, ännu mera roande 18 00:00:53,800 --> 00:00:55,320 är när hans mamma instämde. 19 00:00:55,320 --> 00:00:59,240 20 00:00:59,240 --> 00:01:01,800 Och sedan slutligen, verkar detta var bara 21 00:01:01,800 --> 00:01:04,860 en underbar knep för en spela som händer. 22 00:01:04,860 --> 00:01:07,080 >> Så, om du vill att se Jakob och andra, 23 00:01:07,080 --> 00:01:10,880 bland dem Cynthia Meng, som är bakom kulisserna i CS50 zonen personal, 24 00:01:10,880 --> 00:01:13,970 gå till denna URL och detta spel här. 25 00:01:13,970 --> 00:01:18,810 Så utan vidare, idag har vi fortsätta titta på webbprogrammering, 26 00:01:18,810 --> 00:01:21,810 och det faktiska skapandet av program som inte körs på din kommandorad, 27 00:01:21,810 --> 00:01:24,080 men i stället köras inuti en webbläsare. 28 00:01:24,080 --> 00:01:26,320 >> Förmodligen nu, eller mycket inom kort, du kommer 29 00:01:26,320 --> 00:01:30,200 att vara mitt i genomförandet en egen webbserver, vilket 30 00:01:30,200 --> 00:01:31,700 skiljer sig från webbprogrammering. 31 00:01:31,700 --> 00:01:36,210 Webbservern i pset6 handlar om skriva programvara som vet hur man tar 32 00:01:36,210 --> 00:01:39,300 HTTP-förfrågningar från en webbläsare, eller till och med från er, en människa, 33 00:01:39,300 --> 00:01:42,340 med ett program som heter Telnet, och sedan svara på dessa förfrågningar antingen 34 00:01:42,340 --> 00:01:48,600 genom att spotta ut en HTML-fil, eller en JPEG, eller en gif, eller ens en .php fil. 35 00:01:48,600 --> 00:01:52,490 >> Men med en webbserver, är det inte tänkt att bara öppna en PHP-fil, 36 00:01:52,490 --> 00:01:55,260 något som slutar på .php, och sedan spotta ut innehållet. 37 00:01:55,260 --> 00:01:58,440 Det är tänkt att göra vad man den filen först? 38 00:01:58,440 --> 00:01:59,390 Så att säga. 39 00:01:59,390 --> 00:02:04,060 Inte kompilera det, sade vi på måndag, men rather-- Så tolkar den. 40 00:02:04,060 --> 00:02:08,070 >> PHP är ett tolkat språk, och så en av de viktigaste funktionerna i din webb 41 00:02:08,070 --> 00:02:11,550 server, om än implementeras av oss, är denna förmåga till webbservern 42 00:02:11,550 --> 00:02:12,490 att lägga märke till, oh. 43 00:02:12,490 --> 00:02:14,580 Detta är en fil som slutar på .php. 44 00:02:14,580 --> 00:02:17,970 Låt mig inte bara skicka den till användaren som det är statiskt innehåll, 45 00:02:17,970 --> 00:02:20,970 utan låt mig läsa det rad för line, från vänster till höger, och tolka den. 46 00:02:20,970 --> 00:02:23,030 >> Och att göra, att du killar kommer i huvudsak 47 00:02:23,030 --> 00:02:26,520 punt till ett program i apparaten, och på en massa av datorsystem, 48 00:02:26,520 --> 00:02:27,500 bara kallas PHP. 49 00:02:27,500 --> 00:02:30,579 Det är namnet på PHP på språkets egen tolk. 50 00:02:30,579 --> 00:02:33,120 Så den biten vi genomför för dig, och vad som återstår för dig, 51 00:02:33,120 --> 00:02:35,240 i slutändan, är ett nummer bitar, bland vilka 52 00:02:35,240 --> 00:02:37,960 genomför stöd för statiskt innehåll. 53 00:02:37,960 --> 00:02:40,180 >> Men nu, och med Problemet satt sju, du är 54 00:02:40,180 --> 00:02:43,660 kommer att börja övergången till faktiskt skriva PHP-kod 55 00:02:43,660 --> 00:02:45,970 som får tolkas av att prata med en back end 56 00:02:45,970 --> 00:02:47,960 databas som lagrar information. 57 00:02:47,960 --> 00:02:51,020 Så låt oss bättre förstå först ett par av dessa superglobals 58 00:02:51,020 --> 00:02:53,720 och hur mycket kraft du komma ur lådan gratis 59 00:02:53,720 --> 00:02:55,250 med ett språk som PHP. 60 00:02:55,250 --> 00:02:57,350 Saker du inte har att genomföra själv. 61 00:02:57,350 --> 00:03:01,700 >> Så vi såg på måndagen $ _GET, som är en superglobal, 62 00:03:01,700 --> 00:03:05,496 vilket är just PHP talar för en global variabel du kan komma åt överallt. 63 00:03:05,496 --> 00:03:06,620 Och vad är inne i $ _GET? 64 00:03:06,620 --> 00:03:09,930 65 00:03:09,930 --> 00:03:12,110 Vad finns inuti denna superglobal som vi ser? 66 00:03:12,110 --> 00:03:15,900 67 00:03:15,900 --> 00:03:19,020 Säkert statist vid Minst en person vet. 68 00:03:19,020 --> 00:03:21,590 Vad är inne i $ _GET? 69 00:03:21,590 --> 00:03:22,426 Yeah? 70 00:03:22,426 --> 00:03:24,130 >> PUBLIK: Det är variablerna du sätter i frågesträngen. 71 00:03:24,130 --> 00:03:24,530 >> DAVID J. MALAN: Perfect. 72 00:03:24,530 --> 00:03:26,488 Det är variablerna dig sätta i frågesträngen. 73 00:03:26,488 --> 00:03:29,910 Så i våra äldre exempel på reimplementing Google när vi hade 74 00:03:29,910 --> 00:03:34,130 en webbadress, och sedan frågetecken, som avgränsar början av HTTP 75 00:03:34,130 --> 00:03:37,950 parametrar, då vi hade q lika något, som q är lika med katter, 76 00:03:37,950 --> 00:03:41,500 Vad automatiskt skulle gå inne av att $ _GET super globalt för dig, 77 00:03:41,500 --> 00:03:47,430 på grund av PHP, är en nyckel till Q, och värdet av dessa katter. 78 00:03:47,430 --> 00:03:51,250 >> Med andra ord, $ _GET och alla av dessa saker är associativa arrayer, 79 00:03:51,250 --> 00:03:54,530 hashtabeller av slag, som lagra nycklar och värden. 80 00:03:54,530 --> 00:03:57,980 Nu, tillbaka pset5, hash bord som du kan ha genomfört, 81 00:03:57,980 --> 00:04:00,220 eller prova du kanske har genomfört, verkligen 82 00:04:00,220 --> 00:04:04,010 var effektivt en associativ array, en datastruktur 83 00:04:04,010 --> 00:04:07,220 där du kan associera nycklar med värden. 84 00:04:07,220 --> 00:04:09,690 >> Men i pset5, värdena var triviala. 85 00:04:09,690 --> 00:04:12,430 Värdet var i huvudsak sant eller falskt. 86 00:04:12,430 --> 00:04:13,900 Är ordet i ordlistan? 87 00:04:13,900 --> 00:04:18,279 Så när du hash ett ord som äpple för att se om Apple är i ordlistan 88 00:04:18,279 --> 00:04:21,820 din funktionskontroll förmodligen return sant eller falskt. 89 00:04:21,820 --> 00:04:24,120 Så, det är effektivt värde vi får tillbaka. 90 00:04:24,120 --> 00:04:26,456 >> Men vi såg i måndags kort, kan du säkert 91 00:04:26,456 --> 00:04:28,830 associera mer intressant värden än bara sant eller falskt 92 00:04:28,830 --> 00:04:30,790 med nycklar, som äpple. 93 00:04:30,790 --> 00:04:33,909 Du kan faktiskt tillbaka en godtycklig sträng, och faktiskt, 94 00:04:33,909 --> 00:04:36,200 det är vad $ _GET och dessa andra variabler låter dig göra. 95 00:04:36,200 --> 00:04:40,595 >> Så $ _POST är liknande i anden, men om du skickar in en blankett via post, 96 00:04:40,595 --> 00:04:44,490 en annan HTTP-metoden som är används för saker som kreditkort, 97 00:04:44,490 --> 00:04:48,410 och privat information, och till och med binär information såsom bilder, 98 00:04:48,410 --> 00:04:51,840 dessa saker hamnar inne i $ _POST. 99 00:04:51,840 --> 00:04:53,770 Och faktiskt för filer som JPEG och allt, 100 00:04:53,770 --> 00:04:58,290 det finns även en annan som inte är upp här kallad $ _FILES också. 101 00:04:58,290 --> 00:05:01,280 >> Så, server vi inte att bo på för mycket, men det ger dig tillgång 102 00:05:01,280 --> 00:05:04,860 att sortera på lägre nivå detaljer om själva servern som du använder. 103 00:05:04,860 --> 00:05:07,430 Cookie och sessions, fast, vi får ett effektivt sätt ser nu. 104 00:05:07,430 --> 00:05:10,940 Det sista är det som vi använder för att genomföra begreppet en kundvagn. 105 00:05:10,940 --> 00:05:14,480 En super enkel, men minns att vi hade detta exempel här, 106 00:05:14,480 --> 00:05:17,640 räkna hur många gånger du hade besökt denna sida tidigare. 107 00:05:17,640 --> 00:05:20,850 >> Men idag, i stället för att bara titta på effekten av detta, låt oss öppna upp 108 00:05:20,850 --> 00:05:22,640 Chromes Inspector, som du kan oftast 109 00:05:22,640 --> 00:05:25,740 göra genom att högerklicka eller Ctrl klicka var som helst på en webbsida, 110 00:05:25,740 --> 00:05:27,250 och välj sedan inspektera elementet. 111 00:05:27,250 --> 00:05:31,600 Eller så kan du gå igenom menyerna som vi beskriver i pset6 s spec. 112 00:05:31,600 --> 00:05:35,020 Och jag kommer till fliken Nätverk här, och låt oss titta på en stund 113 00:05:35,020 --> 00:05:37,590 HTTP-trafik som är går fram och tillbaka. 114 00:05:37,590 --> 00:05:40,929 >> Låt mig först gå vidare och tydlig Chromes cache. 115 00:05:40,929 --> 00:05:43,470 Så en del av er kanske känner med denna teknik redan, 116 00:05:43,470 --> 00:05:45,790 och vi kommer att använda det för felsökning här. 117 00:05:45,790 --> 00:05:48,890 118 00:05:48,890 --> 00:05:50,890 Nu vi som datorn Forskarna kommer att börja 119 00:05:50,890 --> 00:05:53,920 gör det här för felsökning ändamål, varigenom 120 00:05:53,920 --> 00:05:55,910 Vi kommer att rensa cachen, typiskt, så att vi 121 00:05:55,910 --> 00:05:57,670 kan bli av med saker som kallas cookies. 122 00:05:57,670 --> 00:06:01,700 Så du är förmodligen allmänt bekant med vad cookies är, eller åtminstone 123 00:06:01,700 --> 00:06:04,370 att de finns, men vad är din förståelse för dem, 124 00:06:04,370 --> 00:06:06,920 som bara en användare av datorer, vad är en kaka? 125 00:06:06,920 --> 00:06:09,490 126 00:06:09,490 --> 00:06:09,990 Yeah. 127 00:06:09,990 --> 00:06:14,391 >> PUBLIK: Det är lite of-- bra, inte bit i en tid av datavetenskap. 128 00:06:14,391 --> 00:06:18,303 Det är en bit av data som en webbplats skickar till dig för 129 00:06:18,303 --> 00:06:20,209 för att kunna spela in statistik på dig. 130 00:06:20,209 --> 00:06:21,250 DAVID J. MALAN: OK, bra. 131 00:06:21,250 --> 00:06:24,980 Så det är en bit av data som en server, sätter på din dator, 132 00:06:24,980 --> 00:06:28,840 och låt oss generalisera det ännu mer, det är en nyckel value-- bra, 133 00:06:28,840 --> 00:06:30,064 det börjar bli mer exakt. 134 00:06:30,064 --> 00:06:31,980 Det är en bit av informationen, en bit av data, 135 00:06:31,980 --> 00:06:34,430 att en server kan att sätta på datorn 136 00:06:34,430 --> 00:06:38,592 och väldigt ofta, gör servern detta för att komma ihåg vem du är. 137 00:06:38,592 --> 00:06:40,300 Så till exempel, odds är du förmodligen 138 00:06:40,300 --> 00:06:42,982 inloggad på sajter som Facebook, eller Gmail, eller andra före, 139 00:06:42,982 --> 00:06:44,940 och du loggar in med ditt användarnamn och lösenord, 140 00:06:44,940 --> 00:06:49,000 och sedan efter att under ett antal av minuter eller timmar eller tom dagar, 141 00:06:49,000 --> 00:06:52,970 servern minns att du är faktiskt loggat in. 142 00:06:52,970 --> 00:06:54,600 Nu, hur är det egentligen som händer? 143 00:06:54,600 --> 00:06:58,630 Eftersom du absolut inte skriva om ditt användarnamn och lösenord varje gång 144 00:06:58,630 --> 00:07:00,760 du navigera till en annan sida på Facebook. 145 00:07:00,760 --> 00:07:02,570 Så visar det sig att cookies är svaret. 146 00:07:02,570 --> 00:07:05,360 >> En cookie kan du tänka på som, slags vilja, en digital handen 147 00:07:05,360 --> 00:07:09,200 stämpel som du kan få på en nöjespark parken eller en klubb som i huvudsak 148 00:07:09,200 --> 00:07:11,740 anger att du har varit här innan, och du har redan 149 00:07:11,740 --> 00:07:16,070 visas ditt ID till bouncer, för exempel, och att klubben eller parken 150 00:07:16,070 --> 00:07:19,050 bör nu anta att du har autentiserats redan. 151 00:07:19,050 --> 00:07:21,270 Du har redan identifierats av den. 152 00:07:21,270 --> 00:07:24,740 >> Så med det i åtanke, låt oss öppna upp räknaren här. 153 00:07:24,740 --> 00:07:27,220 Låt mig gå vidare, jag bara gjorde, och rensa alla mina cookies. 154 00:07:27,220 --> 00:07:29,970 Och nu vad jag ska göra är att Håll Shift, bara för bra åtgärd, 155 00:07:29,970 --> 00:07:31,740 och våld ladda om sidan. 156 00:07:31,740 --> 00:07:34,170 Shift bara se att ingenting blir cachade. 157 00:07:34,170 --> 00:07:36,850 Och här är begäran som gick fram och tillbaka. 158 00:07:36,850 --> 00:07:41,560 Så här borta har vi en förfrågan, och låt mig zooma in här nere, och en hel del av detta 159 00:07:41,560 --> 00:07:44,710 är en slags ointressanta detaljer för nu när webbläsare har automatiskt 160 00:07:44,710 --> 00:07:47,800 skickats, men låt oss klicka på Visa Källa för att se rå rubriker. 161 00:07:47,800 --> 00:07:51,700 >> Och om du redan har dök in pset6, du kommer säkert att känna igen saker 162 00:07:51,700 --> 00:07:54,990 så här, och kanske lite av dessa andra linjer här, 163 00:07:54,990 --> 00:07:59,040 men vad är mer intressant för idag om jag bläddra ner, inte på begäran 164 00:07:59,040 --> 00:08:02,870 utan att den så kallade respons, denna linje ser förmodligen bekant. 165 00:08:02,870 --> 00:08:04,977 Det är en bra sak när du ser en 200 OK. 166 00:08:04,977 --> 00:08:07,060 Tydligen är detta datum och tid på servern 167 00:08:07,060 --> 00:08:08,268 och det finns en massa grejer. 168 00:08:08,268 --> 00:08:09,290 Åh, detta är intressant. 169 00:08:09,290 --> 00:08:13,430 >> Det visade sig att när du använder PHP, åtminstone i denna server, 170 00:08:13,430 --> 00:08:16,360 servern spottar ut vad version av PHP du använder. 171 00:08:16,360 --> 00:08:18,962 Vilket, faktiskt, för säkerhet ändamål, är inte bra. 172 00:08:18,962 --> 00:08:21,170 Men, vi ska återkomma till detta en annan gång kanske. 173 00:08:21,170 --> 00:08:25,740 Men nu är den saftiga nätet idag, och vi såg i korthet några av dessa, 174 00:08:25,740 --> 00:08:29,240 Jag tror med Facebook när vi petade runt Inspector på den tiden, 175 00:08:29,240 --> 00:08:33,380 set cookie är vad som planterar den lilla bit av information 176 00:08:33,380 --> 00:08:34,890 på din dator. 177 00:08:34,890 --> 00:08:37,490 >> Detta är ett HTTP-huvud det är ett effektivt sätt 178 00:08:37,490 --> 00:08:39,970 berätta din webbläsare, Chrome, IE, vad som helst, 179 00:08:39,970 --> 00:08:44,480 hej webbläsare butik på användarens hårddisk, eller i användarens RAM, 180 00:08:44,480 --> 00:08:49,680 en nyckel som heter PHPSESSID, som är en stenografi notation för sessions-ID, 181 00:08:49,680 --> 00:08:53,670 och ge den ett värde av 0vlk8t, punkt, punkt, punkt. 182 00:08:53,670 --> 00:08:56,480 En riktigt lång pseudo slumpmässig alfanumerisk sträng. 183 00:08:56,480 --> 00:08:59,480 Det är bara ett riktigt stort antal, men det är kodade med bokstäver och siffror 184 00:08:59,480 --> 00:09:03,550 så att storleken av det kan vara ännu större än enbart siffror. 185 00:09:03,550 --> 00:09:06,947 Och sedan, förresten, Path = /, att betyder bara att den här cookien ska vara 186 00:09:06,947 --> 00:09:08,780 associerad med den helhet av webbplatsen, 187 00:09:08,780 --> 00:09:11,150 inte bara en viss sidan det hela. 188 00:09:11,150 --> 00:09:12,930 Så detta är den virtuella handen stämpel. 189 00:09:12,930 --> 00:09:16,330 Det är som om servern, Facebook, eller i vårt fall apparaten, 190 00:09:16,330 --> 00:09:21,140 har bokstavligen skriven 0vlk8t och så vidare, på din hand. 191 00:09:21,140 --> 00:09:24,360 Lägg märke till vad serverns, inte gör är det inte 192 00:09:24,360 --> 00:09:27,730 lagra mitt användarnamn, säkert inte lagra mitt lösenord. 193 00:09:27,730 --> 00:09:31,710 >> Istället verkar det vara lagring av pseudoslump informationen 194 00:09:31,710 --> 00:09:35,010 så att ingen kan gissa vad min hand stämpeln är. 195 00:09:35,010 --> 00:09:37,590 På serversidan, under tiden, servern 196 00:09:37,590 --> 00:09:40,370 kommer att minnas, förmodligen i en databas eller något, 197 00:09:40,370 --> 00:09:46,490 att användaren, som i framtiden presenterar en handstämpel 0vlk8t, pricka, 198 00:09:46,490 --> 00:09:51,440 dot, dot, bör förknippas med detta särskilt kundvagn, så att säga. 199 00:09:51,440 --> 00:09:55,060 Med andra ord, om jag nu går tillbaka hit och ladda om sidan, 200 00:09:55,060 --> 00:09:58,020 hur servern känner som jag besökte en gång? 201 00:09:58,020 --> 00:10:01,730 >> Eller om jag gör det igen, hur servern vet att jag har besökt det två gånger? 202 00:10:01,730 --> 00:10:04,680 Tja, om jag går ner till denna senaste begäran, som 203 00:10:04,680 --> 00:10:09,150 är nu den tredje som jag har sänt totalt, märker min begäran nu. 204 00:10:09,150 --> 00:10:11,300 Det finns fortfarande här begära upp här, samma 205 00:10:11,300 --> 00:10:15,040 som tidigare, det finns fortfarande en hel drös saker som vi har ignorerat som tidigare, 206 00:10:15,040 --> 00:10:19,350 men den allra sista header, detta tid, eftersom jag har varit här innan, 207 00:10:19,350 --> 00:10:21,980 är en presentation av denna virtuella handen stämpel. 208 00:10:21,980 --> 00:10:28,957 >> Varigenom denna linje här, inte ställa kaka men kaka kolon PHPSESSI = 0vlk8t, 209 00:10:28,957 --> 00:10:32,040 det är bara min webbläsare automatiskt presentation av denna hand stämpel så att 210 00:10:32,040 --> 00:10:37,910 nu servern, så snart som den inser, ooh, det här användar 0vlk8t prick, pricka, punkt, 211 00:10:37,910 --> 00:10:42,010 Jag kan nu minnas vem han eller hon är och associera med den användaren vad 212 00:10:42,010 --> 00:10:46,450 information som jag vill, och alla att information kan lagras av dig, 213 00:10:46,450 --> 00:10:50,130 programmeraren, i $ _SESSION. 214 00:10:50,130 --> 00:10:57,170 >> Så för att vara tydlig, om jag öppnar upp riktigt snabbt i gedit att själva filen, counter.php, 215 00:10:57,170 --> 00:11:02,340 i min lokala värd offentliga katalogen som tidigare, att märka det, ja, 216 00:11:02,340 --> 00:11:06,860 Jag är slutligen lagring i $ _SESSION Citat unquote "räknare", 217 00:11:06,860 --> 00:11:10,110 värdet av den föregående räknare som Jag får från dessa rader upp här att vi 218 00:11:10,110 --> 00:11:13,010 såg på förra gången plus ett. 219 00:11:13,010 --> 00:11:14,980 Så under huven, det är alla cookies är. 220 00:11:14,980 --> 00:11:17,563 Det är just den typ av digitala handen stämpel som går fram och tillbaka, 221 00:11:17,563 --> 00:11:20,450 och ärligt talat om du öppnar Chrome Inspektör på en webbplats 222 00:11:20,450 --> 00:11:22,580 du besöker i dag, med super hög sannolikhet, 223 00:11:22,580 --> 00:11:25,450 du kommer att se kanske en, kanske ett halvdussin cookies 224 00:11:25,450 --> 00:11:26,650 bli ihågkommen av dig. 225 00:11:26,650 --> 00:11:29,500 >> Och ännu värre, om de webbplatsen du besöker 226 00:11:29,500 --> 00:11:32,640 alla annonser, vilket är förvisso ganska vanligt i dag, 227 00:11:32,640 --> 00:11:36,100 och om dessa annonser kommer från några centrala parti, någon 228 00:11:36,100 --> 00:11:39,000 som Google eller AdWords som de ring någon av deras produkter 229 00:11:39,000 --> 00:11:42,880 eller andra sådana leverantörer som sälja annonser, vad som är intressant, 230 00:11:42,880 --> 00:11:46,510 och ärligt talat vad är lite oroande, om hur HTTP fungerar, 231 00:11:46,510 --> 00:11:50,855 är att om du har en annons inbäddad i Facebook.com och Google.com, 232 00:11:50,855 --> 00:11:54,240 och Harvard.edu, vilket antal av webbplatser, så det är en sådan 233 00:11:54,240 --> 00:11:58,130 att det finns en mellanhand som avtjänar annonser för alla tre av dessa webbplatser, 234 00:11:58,130 --> 00:12:02,110 Det visar sig att cookies är per domän. 235 00:12:02,110 --> 00:12:05,910 >> Så om du har en annons som kommer från Samma företag på olika webbplatser, 236 00:12:05,910 --> 00:12:11,140 att företaget på ett effektivt sätt kan spåra vem du är över alla dessa webbplatser. 237 00:12:11,140 --> 00:12:13,140 Harvard kanske inte vet du besöker Facebook. 238 00:12:13,140 --> 00:12:15,306 Facebook kanske inte vet och Du besöker Harvard. 239 00:12:15,306 --> 00:12:18,160 Men oavsett annonstjänst de använder, om den domänen är 240 00:12:18,160 --> 00:12:21,710 närvarande i både Harvard.edu banan sidor och Facebook.com webbsidor, 241 00:12:21,710 --> 00:12:26,850 Detta mitten mannen vet säkert vem du är på grund av dessa kakor som delas 242 00:12:26,850 --> 00:12:30,910 över, eller snarare, att så kallade mellanhänder. 243 00:12:30,910 --> 00:12:33,820 >> Så vi ska återkomma till detta i säkerhetskonsekvenser av dessa, 244 00:12:33,820 --> 00:12:37,170 men det finns en hel del information lagras om dig när du 245 00:12:37,170 --> 00:12:40,120 besöka de flesta en webbsida på internet och det verkligen 246 00:12:40,120 --> 00:12:42,877 reduceras till denna mycket enkel mekanism. 247 00:12:42,877 --> 00:12:44,710 Vad händer då, om du är super paranoid 248 00:12:44,710 --> 00:12:48,190 och du väljer att gå in i Chrome eller IE eller vad som helst och stäng av dina cookies? 249 00:12:48,190 --> 00:12:49,365 Vad händer? 250 00:12:49,365 --> 00:12:50,790 Yeah? 251 00:12:50,790 --> 00:12:53,170 Du really-- du har gjort det här rätt? 252 00:12:53,170 --> 00:12:54,350 OK. 253 00:12:54,350 --> 00:12:55,994 Nej, gå vidare. 254 00:12:55,994 --> 00:12:59,645 >> PUBLIK: Vissa webbplatser har inte en funktion utan det gillar Facebook. 255 00:12:59,645 --> 00:13:00,520 DAVID J. MALAN: Yeah! 256 00:13:00,520 --> 00:13:02,311 Så vissa webbplatser kommer bara sluta fungera. 257 00:13:02,311 --> 00:13:05,520 Och i de flesta webbplatser dessa dagar som i grunden är beroende av cookies, 258 00:13:05,520 --> 00:13:08,360 speciellt om de har du loggar i, de är bara att bryta. 259 00:13:08,360 --> 00:13:10,360 Eftersom överväga alternativ, om webbplatsen 260 00:13:10,360 --> 00:13:14,480 har ingen möjlighet att komma ihåg vem du är, och därför kan din webbläsare är inte 261 00:13:14,480 --> 00:13:16,949 representerar varje HTTP begäran av den här handen stämpel, 262 00:13:16,949 --> 00:13:18,740 effektivt en webbplats som Facebooks pågående 263 00:13:18,740 --> 00:13:22,050 att behöva be dig logga in varje darn tid 264 00:13:22,050 --> 00:13:26,200 du byter sida, eller klicka på en länk, som är väl inte en särskilt bra användar 265 00:13:26,200 --> 00:13:26,920 erfarenhet. 266 00:13:26,920 --> 00:13:30,020 >> Så att det är också bland avvägningar. 267 00:13:30,020 --> 00:13:34,140 Så utan vidare, låt oss ta för givet att med webbprogrammering, 268 00:13:34,140 --> 00:13:37,630 i språk som PHP, kan du komma ihåg uppgifter som det i problembild 269 00:13:37,630 --> 00:13:41,550 sju när du genomför din egen E * Trade-liknande webbplats som man kan köpa 270 00:13:41,550 --> 00:13:45,710 och sälja aktier, kommer du ihåg exakt vad användaren har köpt och sålt 271 00:13:45,710 --> 00:13:49,110 och vem han eller hon är genom denna session. 272 00:13:49,110 --> 00:13:51,110 Men vi kommer att behöva en snyggare sätt än e-post 273 00:13:51,110 --> 00:13:52,640 börja hålla information kring. 274 00:13:52,640 --> 00:13:53,140 Rätt? 275 00:13:53,140 --> 00:13:56,780 >> I måndags talade vi om Frosh IM och hur i version ett av denna webbplats, 276 00:13:56,780 --> 00:14:00,250 år sedan, allt vi gjorde var maila Proctor som är 277 00:14:00,250 --> 00:14:04,250 ansvarig för Skolidrott program, namn och kön, 278 00:14:04,250 --> 00:14:07,330 och oavsett om de är en kapten, och studentrummet av någon som är 279 00:14:07,330 --> 00:14:10,136 registrerar sig för en intramural sport. 280 00:14:10,136 --> 00:14:13,010 Så det är inte dåligt, men han eller hon sedan fick troll igenom sin e-post, 281 00:14:13,010 --> 00:14:16,010 gör ett kalkylblad eller något liknande att för att hålla allt organiserat. 282 00:14:16,010 --> 00:14:19,750 Visst måste vi som programmerare kan göra detta för den proctor. 283 00:14:19,750 --> 00:14:22,970 Och så gå in i SQL, Structured Query Language, 284 00:14:22,970 --> 00:14:26,050 som kommer att se ganska annorlunda än både C och PHP, 285 00:14:26,050 --> 00:14:30,990 och du kommer att dyka i mycket mer händer på PHP och problem satt sju men även SQL, 286 00:14:30,990 --> 00:14:35,310 eller SQL är detta ett språk som du använder för att prata med en databas. 287 00:14:35,310 --> 00:14:36,480 >> Men vad är en databas? 288 00:14:36,480 --> 00:14:38,440 Jo du tänker på en databas, åtminstone för nu, 289 00:14:38,440 --> 00:14:41,750 så bara vara som en Excel-fil, eller om du är en Mac-användare ett nummer fil, 290 00:14:41,750 --> 00:14:44,400 eller om du är en Google Apps användaren en Google kalkylark, 291 00:14:44,400 --> 00:14:49,120 Det är i praktiken en databas, eller egentligen specifikt en relationsdatabas. 292 00:14:49,120 --> 00:14:53,070 En relationsdatabas är bara något som har rader och kolumner, 293 00:14:53,070 --> 00:14:56,440 och du kan lagra alla typer av informationen i dessa rader eller kolumner. 294 00:14:56,440 --> 00:15:00,480 >> Men vad är trevligt om SQL och om faktiska databaser, inte bara 295 00:15:00,480 --> 00:15:04,910 kalkylblad eller Google kalkylblad, är att du kan använda ett språk 296 00:15:04,910 --> 00:15:09,000 att faktiskt köra frågor till infoga data, ta bort data 297 00:15:09,000 --> 00:15:11,620 att leta efter data, även viktigast av allt, och ni 298 00:15:11,620 --> 00:15:16,110 behöver inte använda det ganska manuellt som du kanske vanligtvis en Google 299 00:15:16,110 --> 00:15:17,690 kalkylblad så här. 300 00:15:17,690 --> 00:15:22,217 >> Så i SQL, det finns ett gäng grundläggande uttalanden eller bitar 301 00:15:22,217 --> 00:15:23,300 funktionalitet inbyggd. 302 00:15:23,300 --> 00:15:26,450 Det finns många fler än dessa, men du kan gå en enorm distans 303 00:15:26,450 --> 00:15:28,620 bara genom att veta att detta språk kallas 304 00:15:28,620 --> 00:15:30,840 SQL har minst fyra uttalanden som du kan utnyttja. 305 00:15:30,840 --> 00:15:34,420 >> Radera för att ta bort data Infoga för att lägga till rader, 306 00:15:34,420 --> 00:15:37,340 Uppdatering, för att ändra rader, och Val, 307 00:15:37,340 --> 00:15:39,860 för att få tillbaka rader och det är verkligen vad SQL gör. 308 00:15:39,860 --> 00:15:43,810 Den fungerar helt på rader så att när du sätter i eller tar bort, 309 00:15:43,810 --> 00:15:47,470 eller uppdatering, eller välj vad du är komma tillbaka som en så kallad resultatuppsättningen, 310 00:15:47,470 --> 00:15:49,690 som en matris med rader. 311 00:15:49,690 --> 00:15:51,700 Ett gäng rader från en tabell. 312 00:15:51,700 --> 00:15:54,050 >> Så tillbaka i dag, och till och med i dag, 313 00:15:54,050 --> 00:15:56,560 du kan interagera med databas med hjälp av en kommandorad, 314 00:15:56,560 --> 00:15:59,691 men det är inte särskilt roligt att använda denna svartvita stil fönster 315 00:15:59,691 --> 00:16:02,190 och faktiskt utföra kommandon och rota runt din databas. 316 00:16:02,190 --> 00:16:06,054 Ett grafiskt användargränssnitt eller GUI, är mycket mer att föredra, utan tvekan, 317 00:16:06,054 --> 00:16:08,970 och så det verktyg vi rekommenderar och förinstallerad för dig på apparaten 318 00:16:08,970 --> 00:16:10,580 kallas phpMyAdmin. 319 00:16:10,580 --> 00:16:14,060 Det är en total slump att Namnet på den här saken har PHP i den, 320 00:16:14,060 --> 00:16:17,430 det betyder bara att folket som skrev detta program själva 321 00:16:17,430 --> 00:16:18,670 skrev det i PHP. 322 00:16:18,670 --> 00:16:23,740 >> Men det är i slutändan om hur du administrerar en databasserver, som en MySQL-server 323 00:16:23,740 --> 00:16:26,589 som du kan ha, som ni gör, i CS50 apparaten. 324 00:16:26,589 --> 00:16:29,130 Så det finns närmare här än Vi behöver bry sig om i dag, 325 00:16:29,130 --> 00:16:33,280 men vad är nyckeln är att på den vänstra sidan finns en lista med databaser 326 00:16:33,280 --> 00:16:36,040 som du har på din dator, på din CS50 apparat, 327 00:16:36,040 --> 00:16:40,090 eller komma slutliga projekt som du kanske har på en tredje part, ett företags 328 00:16:40,090 --> 00:16:43,415 webbplats eller webbserver, att du kanske betala för rymden. 329 00:16:43,415 --> 00:16:45,290 Så på vänster är databaser, en av vilka 330 00:16:45,290 --> 00:16:48,750 är pset7 som jag lånat från nästa veckor pset, och sedan på toppen 331 00:16:48,750 --> 00:16:51,570 det märker att det finns en gäng flikar, av vilka 332 00:16:51,570 --> 00:16:55,150 är databaser, SQL, status, användare, export och så vidare. 333 00:16:55,150 --> 00:16:56,900 Så du kan gå en lång sätt bara genom att inse 334 00:16:56,900 --> 00:16:59,770 att de flesta av användargränssnittet är i det övre vänstra kolumnen 335 00:16:59,770 --> 00:17:02,650 och över den övre höger uppe. 336 00:17:02,650 --> 00:17:04,980 Så vad kan vi egentligen göra med detta? 337 00:17:04,980 --> 00:17:08,609 Nåväl, låt oss börja skapa en bit av information enligt följande. 338 00:17:08,609 --> 00:17:11,760 >> Antag följande är fallet, som kommer att vara i bara några dagar, 339 00:17:11,760 --> 00:17:14,440 du vill genomföra en hemsida, som kallas CS50 Finance, 340 00:17:14,440 --> 00:17:17,328 och denna webbplats kan du köpa citera unquote och sälja aktier. 341 00:17:17,328 --> 00:17:19,619 Och det kommer att räkna ut priset på dessa bestånd, 342 00:17:19,619 --> 00:17:22,380 i slutändan som du ser, genom att tala med Yahoo Finance. 343 00:17:22,380 --> 00:17:26,250 Vilket härligt, har en gratistjänst där du kan skicka i ett börsinformation 344 00:17:26,250 --> 00:17:29,830 som GOOG för Google, och det kommer ge dig tillbaka Googles nuvarande lager 345 00:17:29,830 --> 00:17:32,250 pris inom det förflutna några minuter åtminstone. 346 00:17:32,250 --> 00:17:35,080 >> Så du kommer att använda det, i slutändan, att låtsas för användaren 347 00:17:35,080 --> 00:17:37,750 att köpa och sälja verkliga bestånd som använder virtuella pengar, 348 00:17:37,750 --> 00:17:39,750 men det allra första användaren kommer att se 349 00:17:39,750 --> 00:17:43,850 är detta inloggningsskärmen som ber dem för sitt användarnamn och lösenord. 350 00:17:43,850 --> 00:17:46,540 Och så, en av den första utmaningar för dig i pset7 351 00:17:46,540 --> 00:17:50,460 kommer att vara att genomföra den bakre änden databas, kalkylbladet om du vill, 352 00:17:50,460 --> 00:17:53,369 det kommer att lagra användare och lösenord 353 00:17:53,369 --> 00:17:56,660 och slutligen vad bestånden de äger, och hur många, och hur mycket pengar de har, 354 00:17:56,660 --> 00:18:00,110 så en massa andra saker i andra tabeller, eller kalkylblad. 355 00:18:00,110 --> 00:18:05,020 >> Så låt oss ta en titt på hur det kan verka vid första anblicken. 356 00:18:05,020 --> 00:18:06,980 Jag kommer att gå tillbaka till apparaten och jag är 357 00:18:06,980 --> 00:18:14,102 kommer att gå till denna URL här phpMyAdmin localhost / phpmyadmin 358 00:18:14,102 --> 00:18:16,060 och du kommer att se att det tar mig till ett gränssnitt 359 00:18:16,060 --> 00:18:18,520 precis som vi såg på skärmdump, och här jag 360 00:18:18,520 --> 00:18:21,560 har en extra databas kallas föreläsning för idag 361 00:18:21,560 --> 00:18:24,280 och låt mig gå vidare först och klicka på pset7. 362 00:18:24,280 --> 00:18:27,940 >> Jag verkar ha ett par alternativ, en för ny, för att skapa en ny tabell, 363 00:18:27,940 --> 00:18:30,770 och en länk till användarna, vilket är en tabell jag redan skapat. 364 00:18:30,770 --> 00:18:31,790 Så vad är en tabell? 365 00:18:31,790 --> 00:18:33,740 Så om du använde Excel innan, och om du har 366 00:18:33,740 --> 00:18:37,110 använda siffror eller Google Spreadsheets, du öppnar upp ett fönster 367 00:18:37,110 --> 00:18:39,350 och du får en hel massa rader och kolumner, 368 00:18:39,350 --> 00:18:43,120 men då du brukar ha kalkylblad längs botten, eller separata flikar. 369 00:18:43,120 --> 00:18:46,140 Du kan tänka på varje kalkylblad som en tabell 370 00:18:46,140 --> 00:18:51,150 så att databasen, i slutändan, är en kombination av en eller flera tabeller, en 371 00:18:51,150 --> 00:18:54,064 eller flera kalkylblad, i värld av en normal kalkylblad. 372 00:18:54,064 --> 00:18:55,980 Så låt mig gå vidare och klicka på den här arbetsbladet 373 00:18:55,980 --> 00:18:59,420 att jag förgjorda, kallade användare, alias 374 00:18:59,420 --> 00:19:00,700 Databastabell. 375 00:19:00,700 --> 00:19:04,130 Och om jag bläddra ner här, Låt mig zooma ut lite, 376 00:19:04,130 --> 00:19:08,479 detta är vad phpMyAdmin berättar oss är inne i den här tabellen just nu. 377 00:19:08,479 --> 00:19:11,020 Det är lite förvirrande i början blick eftersom gränssnittet är inte 378 00:19:11,020 --> 00:19:15,140 den vackraste sak i världen, utan Vad som är intressant är denna del här. 379 00:19:15,140 --> 00:19:17,970 ID, användarnamn, och hash. 380 00:19:17,970 --> 00:19:20,510 >> I förväg, och du ska vara handed detta i problemet satt sju, 381 00:19:20,510 --> 00:19:25,050 Vi ger dig en fil som innehåller en super liten databastabell, lånade faktiskt 382 00:19:25,050 --> 00:19:27,070 från hacker upplagan av problemet satt två, 383 00:19:27,070 --> 00:19:29,480 insidan av vilka det finns sex rader. 384 00:19:29,480 --> 00:19:32,720 En för Belinda all ända ner till en för Zamyla, 385 00:19:32,720 --> 00:19:35,980 och märker till vänster om dem användarnamn är unika ID: n som en, 386 00:19:35,980 --> 00:19:39,410 två, tre, fyra, fem, sex, heltal, och sedan till höger är hashar. 387 00:19:39,410 --> 00:19:42,780 >> Och om, oddsen är, har du inte göra hacker edition problemet satt två, 388 00:19:42,780 --> 00:19:46,560 men en hash är precis som ett krypterat lösenord med några varningar. 389 00:19:46,560 --> 00:19:49,470 Och så, vad du ser här är de krypterade versioner av alla sex 390 00:19:49,470 --> 00:19:52,950 våra lösenord från problem ställa två s hacker upplaga. 391 00:19:52,950 --> 00:19:56,500 Nu till vänster är bara några GUI grejer, redigera denna rad, kopiera den här raden, 392 00:19:56,500 --> 00:19:57,630 radera den här raden. 393 00:19:57,630 --> 00:19:59,840 >> Men vad som är intressant nu är följande. 394 00:19:59,840 --> 00:20:03,810 Jag kan faktiskt börja experimentera med denna tabell. 395 00:20:03,810 --> 00:20:07,330 Så om jag går och klicka på SQL fliken, jag får detta stora textrutan. 396 00:20:07,330 --> 00:20:10,190 Och det är inte hur vi ska göra det när det verkligen att skriva kod. 397 00:20:10,190 --> 00:20:12,700 För att vara tydlig, phpMyAdmin är bara ett verktyg som är 398 00:20:12,700 --> 00:20:16,450 kommer att låta oss rota runt i databasen och låt oss experimentera med frågor. 399 00:20:16,450 --> 00:20:19,430 >> Så till exempel, anta Jag kör just detta. 400 00:20:19,430 --> 00:20:22,820 Välj, vilket är ett av de som sökord jag nämnde tidigare, stjärna, 401 00:20:22,820 --> 00:20:25,900 som representerar alla kolumnerna i en tabell. 402 00:20:25,900 --> 00:20:26,820 Från vilken tabell? 403 00:20:26,820 --> 00:20:27,990 Tja, användare. 404 00:20:27,990 --> 00:20:29,950 Och meddelande finns det här konstig konvent i SQL 405 00:20:29,950 --> 00:20:32,140 där du faktiskt använder tillbaka fästingar, typiskt, 406 00:20:32,140 --> 00:20:35,940 inte apostrof och inte dubbla citationstecken när man talar om bord namn, 407 00:20:35,940 --> 00:20:38,990 så baksidan citat är grejen på övre vänstra på tangentbordet mest 408 00:20:38,990 --> 00:20:39,720 troligt. 409 00:20:39,720 --> 00:20:41,850 >> Så låt mig gå vidare nu och bara lämna det ensam 410 00:20:41,850 --> 00:20:46,020 och bläddra ner och klicka på Sök, och vi är faktiskt kommer att se samma sak. 411 00:20:46,020 --> 00:20:52,410 Vi har just genomfört en SQL-fråga säga väljer allt stjärna 412 00:20:52,410 --> 00:20:55,610 från tabell som kallas användare, och vad du får tillbaka det här. 413 00:20:55,610 --> 00:20:58,400 I slutändan kommer vi att kunna göra samma sak i koden, 414 00:20:58,400 --> 00:21:02,109 men nu allt jag ville tror var ser det i min webbläsare. 415 00:21:02,109 --> 00:21:03,900 Nåväl låt oss göra något lite annorlunda. 416 00:21:03,900 --> 00:21:08,330 Låt mig gå tillbaka till fliken SQL, och låt oss bara säga att vad? 417 00:21:08,330 --> 00:21:11,520 Zamyla har förlorat alla sina pengar, och därför är det 418 00:21:11,520 --> 00:21:13,190 dags för oss att ta bort henne som användare. 419 00:21:13,190 --> 00:21:14,630 Hon inte längre logga in. 420 00:21:14,630 --> 00:21:18,870 >> Så jag ska säga radera from-- bra, underhålla aktivering 421 00:21:18,870 --> 00:21:23,080 för konsekvens, ta bort från användare där. 422 00:21:23,080 --> 00:21:25,430 Och så kan vi ha dessa predikat, eller dessa 423 00:21:25,430 --> 00:21:31,180 kval, i slutet av mitt uttalande var och hur kunde jag ta bort Zamyla? 424 00:21:31,180 --> 00:21:34,190 Genom hennes namn Zamyla, så kolonn, en av kolumnerna 425 00:21:34,190 --> 00:21:37,950 hette, så där namn = "Zamyla". 426 00:21:37,950 --> 00:21:40,000 Och här använder jag dubbel offerter eller apostrof, 427 00:21:40,000 --> 00:21:42,958 du bara använda baksidan fästingar när talar om namnen, t.ex. 428 00:21:42,958 --> 00:21:45,130 tabeller eller fält. 429 00:21:45,130 --> 00:21:47,440 Och låt mig klicka Gå hit. 430 00:21:47,440 --> 00:21:50,400 Och nu är webbsidan att vara lite spända. 431 00:21:50,400 --> 00:21:53,620 >> Eller vill du verkligen vill köra bort från användare där namn är lika Zamyla? 432 00:21:53,620 --> 00:21:54,680 Ja. 433 00:21:54,680 --> 00:22:01,900 Så nu, om vi går tillbaka till mitt bord genom att klicka användare, märker att Hm. 434 00:22:01,900 --> 00:22:02,530 Jag goofed. 435 00:22:02,530 --> 00:22:04,070 Och faktiskt, jag liksom klickade bort så fort 436 00:22:04,070 --> 00:22:06,195 du inte ens se rött felmeddelande, kanske. 437 00:22:06,195 --> 00:22:07,649 Vad gjorde jag för fel? 438 00:22:07,649 --> 00:22:09,690 PUBLIK: Du behövde inte att kapitalisera hennes namn. 439 00:22:09,690 --> 00:22:11,260 DAVID J. MALAN: Ja jag aktiverade hennes namn, 440 00:22:11,260 --> 00:22:13,770 men hennes username-- faktiskt jag gjorde ett par misstag, eller hur? 441 00:22:13,770 --> 00:22:16,720 En är hennes användarnamn zamyla, gemener Z, 442 00:22:16,720 --> 00:22:20,140 och kolumnnamnet är användarnamn, inte namn, så låt oss göra det igen. 443 00:22:20,140 --> 00:22:25,750 Låt mig gå vidare och radera från användare där 444 00:22:25,750 --> 00:22:28,990 användarnamn är lika med citat unquote "Zamyla". 445 00:22:28,990 --> 00:22:29,490 Okej? 446 00:22:29,490 --> 00:22:32,600 Så det här ser lite bättre, låt mig gå scrolla ner och klicka på Sök. 447 00:22:32,600 --> 00:22:34,730 Det kommer fortfarande att skrika på mig för att vara säker. 448 00:22:34,730 --> 00:22:37,500 Jag klickar på Ja, och nu ser vi, uppriktigt sagt detta hände, egentligen 449 00:22:37,500 --> 00:22:39,870 snabb, mindre än en andra säkert, detta 450 00:22:39,870 --> 00:22:41,720 är precis den frågan som fick avrättades. 451 00:22:41,720 --> 00:22:45,617 För att bekräfta, låt mig klicka användare och faktiskt nu Zamyla är borta. 452 00:22:45,617 --> 00:22:46,700 Nu gör det motsatta. 453 00:22:46,700 --> 00:22:49,320 Antag att Gabe vill anmäla sig till webbplatsen. 454 00:22:49,320 --> 00:22:52,825 Vad är SQL-fråga, vad är det kommando jag kunde skriva att lägga Gabe? 455 00:22:52,825 --> 00:22:54,200 Jo det är ganska enkelt. 456 00:22:54,200 --> 00:22:58,260 Sätt in användare, och nu det blir lite kryptiskt. 457 00:22:58,260 --> 00:23:03,190 Jag måste ange, till servern, vilka områden jag vill tilldela. 458 00:23:03,190 --> 00:23:06,630 Jag bryr mig egentligen inte vad Gabe ID nummer är, så jag kommer att hoppa över det. 459 00:23:06,630 --> 00:23:11,360 Jag stället ska säga användarnamn, hasch, och sedan 460 00:23:11,360 --> 00:23:14,960 de värden som jag vill sätta det kommer att bli Gabe. 461 00:23:14,960 --> 00:23:16,800 Och sedan hans hash, jag vet inte. 462 00:23:16,800 --> 00:23:19,900 Så nu kommer jag att lämnar det som ett stort att göra. 463 00:23:19,900 --> 00:23:21,650 Vi ska återkomma till att i problemet inställd 464 00:23:21,650 --> 00:23:23,390 spec om hur du faktiskt gör det. 465 00:23:23,390 --> 00:23:24,630 >> Så märker, igen, syntax. 466 00:23:24,630 --> 00:23:28,430 Sätt in i tabellnamn, sedan en parentes lista över fälten, 467 00:23:28,430 --> 00:23:30,980 de kolumner som du vill lägga till värden till och sedan bara 468 00:23:30,980 --> 00:23:34,495 exakt samma beställning vänster till höger om de värden som du vill lägga till, 469 00:23:34,495 --> 00:23:36,870 och det är bara att linda eftersom texten är lite lång. 470 00:23:36,870 --> 00:23:38,520 Så nu vill jag klicka på Gå. 471 00:23:38,520 --> 00:23:39,830 En rad infogas. 472 00:23:39,830 --> 00:23:43,020 Och nu om jag går tillbaka till användare, vad som är intressant 473 00:23:43,020 --> 00:23:48,960 är att det inte bara är Gabe nu i databas, vad är tydligen hans ID? 474 00:23:48,960 --> 00:23:49,820 >> Jo det är sju. 475 00:23:49,820 --> 00:23:51,479 Varför är det sju när jag inte lägga till den? 476 00:23:51,479 --> 00:23:54,020 Så det här är också en av de funktioner du får av databasen. 477 00:23:54,020 --> 00:23:55,750 En hel del inbyggd funktionalitet. 478 00:23:55,750 --> 00:23:57,950 Det visar sig att när skapade denna tabell, 479 00:23:57,950 --> 00:24:01,390 Jag förkonfigurerade det automatiskt tilldela ett ID på ett sådant sätt 480 00:24:01,390 --> 00:24:02,480 att det inkrementerar. 481 00:24:02,480 --> 00:24:05,470 Så om du någonsin petade runt, och tittade på vad ditt Facebook ID 482 00:24:05,470 --> 00:24:09,292 nummer är, dessa dagar är det inte riktigt en sak att göra, men Facebook som ett API, 483 00:24:09,292 --> 00:24:11,750 Application Programming Interface, där du kan få tillbaka 484 00:24:11,750 --> 00:24:14,430 en massa data om själv, om dina vänner, 485 00:24:14,430 --> 00:24:15,347 och dina kontakter. 486 00:24:15,347 --> 00:24:17,430 Och vad som brukade vara snäll av cool, tillbaka i dag, 487 00:24:17,430 --> 00:24:19,510 var att slå upp vad din Facebook ID-nummer var. 488 00:24:19,510 --> 00:24:22,390 Mark Zuckerberg, till exempel, är tre 489 00:24:22,390 --> 00:24:23,890 eftersom han var författare av webbplatsen. 490 00:24:23,890 --> 00:24:27,610 Och som historien går, skapade han två testkonton, användare ett och två, 491 00:24:27,610 --> 00:24:28,690 som han bort då. 492 00:24:28,690 --> 00:24:32,780 Och så, Zuck, är hans användarnamn som på Facebook, är ID-nummer tre, 493 00:24:32,780 --> 00:24:36,110 och alla vi har siffror mycket större än tre i dessa dagar. 494 00:24:36,110 --> 00:24:37,980 Faktum är att någon gång Facebook förflyttas bort 495 00:24:37,980 --> 00:24:42,410 från och med hjälp av en int, som är en 32-bitars värde, att genom att använda 496 00:24:42,410 --> 00:24:44,480 nästa steg upp, i huvudsak en lång lång så 497 00:24:44,480 --> 00:24:47,150 att de kunde rymma ännu fler användare som registrerar sig. 498 00:24:47,150 --> 00:24:49,420 Så en rolig liten historiskt faktum. 499 00:24:49,420 --> 00:24:51,660 >> Så det är bara grundläggande syntax som 500 00:24:51,660 --> 00:24:54,470 vi kan köra ett par frågor, men vi kan faktiskt 501 00:24:54,470 --> 00:24:56,744 göra en massa mer saker med SQL. 502 00:24:56,744 --> 00:24:58,910 Och du ser, i slutändan, i problemet satt sju 503 00:24:58,910 --> 00:25:01,034 att du måste göra en antal designbeslut, 504 00:25:01,034 --> 00:25:03,290 bland dem kommer att vara vilka data typer som ska användas. 505 00:25:03,290 --> 00:25:08,240 Så precis som i C, det finns uppgifter typerna i en databas, som MySQL, 506 00:25:08,240 --> 00:25:12,640 och de datatyper som du har att välja från bland annat dessa områden här. 507 00:25:12,640 --> 00:25:17,287 Röding, varchar, Int, stort int, decimal och datum tid, och många andra. 508 00:25:17,287 --> 00:25:18,370 Så låt oss verkligen göra det här. 509 00:25:18,370 --> 00:25:21,060 Låt oss låtsas att vi inte hand du här användarens bord 510 00:25:21,060 --> 00:25:25,080 och låt mig gå vidare och skapa, för mig själv, i föreläsningarna database-- 511 00:25:25,080 --> 00:25:31,000 faktiskt Låt mig gå vidare och ta bort tabellen har jag i här redan 512 00:25:31,000 --> 00:25:32,940 så att vi faktiskt kan skapa denna. 513 00:25:32,940 --> 00:25:33,550 Hoppsan. 514 00:25:33,550 --> 00:25:35,970 Jag kommer att släppa detta bord, och nu är jag 515 00:25:35,970 --> 00:25:38,337 kommer att gå igen till föreläsning databas över här, 516 00:25:38,337 --> 00:25:40,420 Jag ska skapa en tabell kallade användare och låt oss 517 00:25:40,420 --> 00:25:43,010 bara göra tre kolumner initialt och klicka på Gå. 518 00:25:43,010 --> 00:25:44,990 >> Nu, för det mesta, återigen, det är bara 519 00:25:44,990 --> 00:25:48,570 med hjälp av denna grafiska verktyg som kallas phpMyAdmin, och vad vi gör nu 520 00:25:48,570 --> 00:25:49,600 skapar en tabell. 521 00:25:49,600 --> 00:25:53,170 Så det här är som att gå på Arkiv, Nytt, och skapa en ny Excel-fil. 522 00:25:53,170 --> 00:25:55,440 Så det ber mig ett par frågor, från vänster till höger, 523 00:25:55,440 --> 00:25:58,620 vad är namnet på den första kolumnen, och sedan namnet på den andra kolumnen 524 00:25:58,620 --> 00:25:59,560 och namnet på den tredje. 525 00:25:59,560 --> 00:26:00,518 Så låt oss återskapa denna. 526 00:26:00,518 --> 00:26:05,460 ID och sedan användarnamn var en, och sedan hash var en annan. 527 00:26:05,460 --> 00:26:08,970 Så vad ska datatypen vara nu ett fält som ID? 528 00:26:08,970 --> 00:26:14,470 >> Här är hela listan över datatyper tillgängliga i en databas, 529 00:26:14,470 --> 00:26:16,070 och nu ska vi bara gå med int. 530 00:26:16,070 --> 00:26:18,160 32-bitars värde, det gör jag inte tänka realistiskt är jag 531 00:26:18,160 --> 00:26:21,484 kommer att ha mer än 4 miljarder användare i mitt konto, i min tjänst, 532 00:26:21,484 --> 00:26:23,650 så jag kommer att hålla i rörelse vidare till nästa fråga. 533 00:26:23,650 --> 00:26:25,490 Jag tänker inte ange en längd eller värderingar, 534 00:26:25,490 --> 00:26:28,540 det är inte tillämpligt för en int här, i och för sig. 535 00:26:28,540 --> 00:26:30,740 Och nu kan jag specificera, tydligen, en standard 536 00:26:30,740 --> 00:26:33,970 värde, som jag inte kommer att specificera. 537 00:26:33,970 --> 00:26:36,050 En sammanställning, jag vet inte vad det är. 538 00:26:36,050 --> 00:26:37,290 Ett attribut. 539 00:26:37,290 --> 00:26:39,455 Nu vi faktiskt gör ha ett beslut design. 540 00:26:39,455 --> 00:26:42,580 Så det finns några områden som här, inte alla av dessa är tillämpliga, men unsigned 541 00:26:42,580 --> 00:26:43,380 betyder bara vad? 542 00:26:43,380 --> 00:26:45,400 Att int vara? 543 00:26:45,400 --> 00:26:46,210 Bara icke-negativt. 544 00:26:46,210 --> 00:26:48,090 Så det måste vara 0 på upp. 545 00:26:48,090 --> 00:26:51,120 Nej, jag kommer inte att kontrollera eftersom Jag vill att varje användare har ett ID, 546 00:26:51,120 --> 00:26:52,470 det kan inte vara null. 547 00:26:52,470 --> 00:26:55,949 Och då får vi lite mer intressanta designbeslut som denna. 548 00:26:55,949 --> 00:26:58,990 Vi ska återkomma till detta i ett ögonblick, men vad en annan funktion i databasen 549 00:26:58,990 --> 00:27:04,200 är, är att du kan berätta databasservern gå vidare 550 00:27:04,200 --> 00:27:07,100 och optimera dig själv, din RAM och din hårddiskutrymme, 551 00:27:07,100 --> 00:27:11,770 så som väljer, och skär, och bort, och uppdateringar är riktigt snabb. 552 00:27:11,770 --> 00:27:13,250 Jämför detta med pset5. 553 00:27:13,250 --> 00:27:16,259 >> Om du ville söka upp något i hash-tabell, som 554 00:27:16,259 --> 00:27:18,300 du tänker på som en databas, som hade att göra alla 555 00:27:18,300 --> 00:27:21,500 arbeta för att göra din hashtabell snabbt. 556 00:27:21,500 --> 00:27:22,840 Det är som, självklart, du. 557 00:27:22,840 --> 00:27:23,060 Rätt? 558 00:27:23,060 --> 00:27:26,080 Du var tvungen att sätta in hela tiden böter tuning saker, att få en hash-funktion 559 00:27:26,080 --> 00:27:27,820 rätt, räkna ut hur många hinkar att ha. 560 00:27:27,820 --> 00:27:29,611 >> Men vad är trevligt, återigen, om en databas är 561 00:27:29,611 --> 00:27:31,762 du just stakbåten alla detta till andra människor 562 00:27:31,762 --> 00:27:33,720 som har tänkt här igenom för dig, och vad 563 00:27:33,720 --> 00:27:37,170 Jag kommer att säga här under index är att min ID-fält 564 00:27:37,170 --> 00:27:41,149 kommer att vara det primära sättet att identifiera användare i denna databas. 565 00:27:41,149 --> 00:27:42,940 Jag tänker inte tänka av Zamyla som Zamyla, 566 00:27:42,940 --> 00:27:45,800 Jag kommer att tänka på henne som nummer 6. 567 00:27:45,800 --> 00:27:49,814 >> Varför är det kanske bättre intuitivt att tänka på och modell 568 00:27:49,814 --> 00:27:52,480 alla dina individuella rader med hjälp ett nummer i stället för något 569 00:27:52,480 --> 00:27:56,480 som en sträng, som den Zamyla eller Gabe eller längre sträng fortfarande? 570 00:27:56,480 --> 00:27:57,444 Yeah? 571 00:27:57,444 --> 00:28:00,117 >> PUBLIK: Ett ID är unikt? 572 00:28:00,117 --> 00:28:01,200 DAVID J. MALAN: Säg igen? 573 00:28:01,200 --> 00:28:02,283 PUBLIK: Ett ID är unikt? 574 00:28:02,283 --> 00:28:04,400 David J. MALAN: En ID är unika, men suppose-- 575 00:28:04,400 --> 00:28:06,320 såsom är fallet i allmänhet med användarnamn, antar 576 00:28:06,320 --> 00:28:10,110 Jag sa också att det kan bara finnas en Zamyla i världen, och endast en Gabe. 577 00:28:10,110 --> 00:28:13,730 Jag skulle kunna införa det unika hinder för strängar, även om jag ville. 578 00:28:13,730 --> 00:28:15,550 Så inte en dålig tanke. 579 00:28:15,550 --> 00:28:16,500 >> PUBLIK: Säkrare. 580 00:28:16,500 --> 00:28:17,874 >> DAVID J. MALAN: Säkrare, varför? 581 00:28:17,874 --> 00:28:20,705 PUBLIK: Du kan inte säga vilken är att, som i användaren. 582 00:28:20,705 --> 00:28:22,580 DAVID J. MALAN: OK, du kan inte berätta vilken användare 583 00:28:22,580 --> 00:28:24,380 är som så att det finns en integritetsaspekten till den, 584 00:28:24,380 --> 00:28:27,810 särskilt om ID kanske som förekommer i webbadresser. 585 00:28:27,810 --> 00:28:29,960 Så visst, det kunde typ av arbete, också. 586 00:28:29,960 --> 00:28:30,640 Andra tankar? 587 00:28:30,640 --> 00:28:31,383 Yeah? 588 00:28:31,383 --> 00:28:34,316 >> PUBLIK: Det är lättare att utföra operationer på en int. 589 00:28:34,316 --> 00:28:35,940 DAVID J. MALAN: Det är den verkliga kicker. 590 00:28:35,940 --> 00:28:38,850 Det är bara mer effektivt, eller lättare för datorn, 591 00:28:38,850 --> 00:28:40,431 att utföra operationer på ett heltal. 592 00:28:40,431 --> 00:28:40,930 Rätt? 593 00:28:40,930 --> 00:28:43,905 En int garanteras vara 32-bitars, medan Zamyla 594 00:28:43,905 --> 00:28:47,660 är några tecken, Gabriel är några fler tecken, 595 00:28:47,660 --> 00:28:51,930 Davenport är riktigt långt, och så är det inte särskilt effektivt att använda 596 00:28:51,930 --> 00:28:55,860 strängar för att jämföra värden och ser för fält, och uppdateringsfält, 597 00:28:55,860 --> 00:28:57,790 om du kan komma undan med bara ett heltal. 598 00:28:57,790 --> 00:28:59,090 Bara 32 bitar. 599 00:28:59,090 --> 00:29:02,570 Så användarnamn, även på detta sätt, behöver inte vara unika, 600 00:29:02,570 --> 00:29:05,040 även om de antagligen borde vara, och även på detta sätt alltför 601 00:29:05,040 --> 00:29:07,520 en användare skulle kunna tillåtas att förändra sitt användarnamn. 602 00:29:07,520 --> 00:29:10,810 >> Så låt oss nu lämna detta som främsta medlet för att identifiera användaren. 603 00:29:10,810 --> 00:29:13,510 Detta är talande databasen gå vidare och optimera själv 604 00:29:13,510 --> 00:29:17,065 så att ser ups på ID är supersnabb. 605 00:29:17,065 --> 00:29:19,620 AI, fruktansvärt namnges, precis innebär automatisk ökning, 606 00:29:19,620 --> 00:29:21,500 och detta är kontrollen rutan vi måste kolla 607 00:29:21,500 --> 00:29:24,614 att ange att ID-fältet till uppdateras automatiskt för mig, 608 00:29:24,614 --> 00:29:26,530 och sedan ska jag Bläddra till höger här 609 00:29:26,530 --> 00:29:29,279 och ärligt talat är jag inte riktigt intresserad i något flera av dessa områden. 610 00:29:29,279 --> 00:29:30,630 Absolut inte i dag. 611 00:29:30,630 --> 00:29:33,770 >> Så jag kommer att gå tillbaka hit, till den första kolumnen, där 612 00:29:33,770 --> 00:29:35,830 Jag måste ange användarnamn och hasch, och låt oss 613 00:29:35,830 --> 00:29:38,080 åtminstone fokus på andra för nu. 614 00:29:38,080 --> 00:29:41,498 Int är förmodligen inte rätt samtalet, så vad är mer förnuftigt kanske? 615 00:29:41,498 --> 00:29:42,741 >> PUBLIK: Text. 616 00:29:42,741 --> 00:29:43,824 DAVID J. MALAN: Säg igen? 617 00:29:43,824 --> 00:29:44,710 PUBLIK: Text. 618 00:29:44,710 --> 00:29:44,980 DAVID J. MALAN: Text? 619 00:29:44,980 --> 00:29:45,590 OK, jag hörde text. 620 00:29:45,590 --> 00:29:46,090 Vad mer? 621 00:29:46,090 --> 00:29:50,520 622 00:29:50,520 --> 00:29:53,860 Vi har lite av en massa val som är text i naturen. 623 00:29:53,860 --> 00:29:55,990 Så när, och varför, gör du använder någon av dessa? 624 00:29:55,990 --> 00:29:59,560 Tja röding, i motsats till vad du kanske tror inte ett enda tecken. 625 00:29:59,560 --> 00:30:01,550 Det är ett visst antal tecken. 626 00:30:01,550 --> 00:30:04,600 Så om vi vet att alla användarnamn måste vara som åtta tecken, 627 00:30:04,600 --> 00:30:08,490 som brukade vara vanligt i äldre datorsystem, jag skulle kunna säga char 628 00:30:08,490 --> 00:30:09,830 och då kunde jag säga 8 här. 629 00:30:09,830 --> 00:30:12,930 Det var då den tredje kolumnen blir gäller när du skapar en tabell. 630 00:30:12,930 --> 00:30:15,450 >> Men det är typ av irriterande eftersom vissa människor kanske 631 00:30:15,450 --> 00:30:17,660 vill ha en längre användarnamn än åtta tecken, 632 00:30:17,660 --> 00:30:19,743 vissa människor kanske vill har en kortare användarnamn, 633 00:30:19,743 --> 00:30:22,210 så varför engagera mig till ett specifikt nummer? 634 00:30:22,210 --> 00:30:24,710 Varför inte ha en variabel antal tecken och bara 635 00:30:24,710 --> 00:30:28,580 säger att den maximala längden av ett namn är, jag vet inte, liksom 64 tecken. 636 00:30:28,580 --> 00:30:31,780 Jag kan inte komma på några vänner som har namn längre än 64 tecken, 637 00:30:31,780 --> 00:30:34,810 och även om det är för kort du kunde säkert bump upp godtyckligt. 638 00:30:34,810 --> 00:30:37,330 >> Så varchar är en variabel antal tecken. 639 00:30:37,330 --> 00:30:41,010 Text är inte en dålig instinkt, och uppriktigt sagt den sortens gör vad den säger, 640 00:30:41,010 --> 00:30:45,460 men ett textfält kan vara som 65.000 bytes minst. 641 00:30:45,460 --> 00:30:50,790 Det är förmodligen overkill för en fält, och i själva verket, Japp, 65.535. 642 00:30:50,790 --> 00:30:53,740 Det är förmodligen overkill för en namn, så vi ska hålla, typiskt, 643 00:30:53,740 --> 00:30:56,910 med varchars för text fält och hash, också. 644 00:30:56,910 --> 00:30:59,990 Hash, visar det sig, kan vi göra en varchar lika bra eller något liknande, 645 00:30:59,990 --> 00:31:03,080 men vi kommer inte att fokusera idag på kryptering där och siffrorna 646 00:31:03,080 --> 00:31:05,210 att vi kanske faktiskt vill använda för sin längd. 647 00:31:05,210 --> 00:31:07,430 >> Men låt mig rulla ner till höger. 648 00:31:07,430 --> 00:31:11,280 Du kan endast ha en primärindex för en tabell, 649 00:31:11,280 --> 00:31:16,380 men jag vill använda någon av dessa, Nu, till användarnamn, skulle du säga? 650 00:31:16,380 --> 00:31:21,980 Vad ska användarnamn bygga på en vag förståelse av dessa fyra alternativ? 651 00:31:21,980 --> 00:31:23,340 Bara genom deras namn? 652 00:31:23,340 --> 00:31:24,140 >> PUBLIK: Unique. 653 00:31:24,140 --> 00:31:25,100 >> DAVID J. MALAN: Så unikt, eller hur? 654 00:31:25,100 --> 00:31:28,190 Så visar det sig att det inte bara kunde du berätta en databas, på förhand, 655 00:31:28,190 --> 00:31:30,380 Detta är det främsta sättet av att identifiera områden. 656 00:31:30,380 --> 00:31:32,990 Du kan också säga att detta är kommer att bli en unik fält. 657 00:31:32,990 --> 00:31:34,700 Det kommer inte att vara det jag litar på, 658 00:31:34,700 --> 00:31:38,490 men jag skulle vilja databasen till i huvudsak har att om tillstånd, så 659 00:31:38,490 --> 00:31:42,340 att om jag någonsin försökt att registrera två användare med samma namn, 660 00:31:42,340 --> 00:31:44,360 databasen platta ut kommer inte att låta mig. 661 00:31:44,360 --> 00:31:47,490 Jag kanske har lite extra kod i PHP som förhindrar så mycket, 662 00:31:47,490 --> 00:31:50,640 men databasen också kan säkerställa att det aldrig kommer att hända. 663 00:31:50,640 --> 00:31:53,370 >> Nu, som en sidoreplik, särskilt som du tänker på examensarbeten, 664 00:31:53,370 --> 00:31:57,030 kom ihåg det index och full Texten är faktiskt ganska bra. 665 00:31:57,030 --> 00:32:01,080 Om du har en större databas, inte med dussintals, men med hundratals eller tusentals 666 00:32:01,080 --> 00:32:05,270 eller miljontals fält, kan du också berätta databasen i förväg 667 00:32:05,270 --> 00:32:07,980 Detta är ett område jag ska att söka på en hel del. 668 00:32:07,980 --> 00:32:10,520 Kanske dess användarnamn, kanske är det bio, om du är 669 00:32:10,520 --> 00:32:13,750 gör en Facebook-liknande webbplats som har stycken som användarens tillåtna 670 00:32:13,750 --> 00:32:16,799 spara och om du vill tala om databasen i förväg 671 00:32:16,799 --> 00:32:20,090 Jag kommer att söka på detta område en hel del, men det är inte nödvändigtvis unik, 672 00:32:20,090 --> 00:32:22,800 Du kan ange skapa mig ett index. 673 00:32:22,800 --> 00:32:27,990 Eller kan du också säga tillåta mig att göra slags godtyckliga sökningar som Command 674 00:32:27,990 --> 00:32:30,420 eller Ctrl F, som du kanske i en ordbehandlare, 675 00:32:30,420 --> 00:32:34,184 så du kan se godtyckliga strängar eller delsträngar inom detta område. 676 00:32:34,184 --> 00:32:36,600 Med andra ord, vi får till den punkt i terminen 677 00:32:36,600 --> 00:32:40,720 där du inte behöver oroa sig för hur man ska genomföra saker och ting på ett effektivt sätt. 678 00:32:40,720 --> 00:32:44,540 Du behöver bara veta vad designbeslut för att göra så att du är 679 00:32:44,540 --> 00:32:48,470 använda rätt verktyg för handel i syfte att utnyttja funktioner 680 00:32:48,470 --> 00:32:50,380 att andra människor har byggt åt dig. 681 00:32:50,380 --> 00:32:54,240 Så för att sammanfatta, primärt bör endast har en, kan du bara har en, 682 00:32:54,240 --> 00:32:59,630 och det är det du ska binda dig till använder för att identifiera områden som är unikt. 683 00:32:59,630 --> 00:33:02,710 Unikt är bara i samma anda, men du kanske bara ibland använda det, 684 00:33:02,710 --> 00:33:04,530 men du vill att databasen införa den. 685 00:33:04,530 --> 00:33:08,050 Index betyder bara i förebyggande syfte påskynda det hela i framtiden 686 00:33:08,050 --> 00:33:10,230 så att jag kan söka efter saker på detta område. 687 00:33:10,230 --> 00:33:13,700 Och sedan fulltext är generellt för stycken, eller essäer, eller stora kroppar 688 00:33:13,700 --> 00:33:16,270 av texten där du kanske också vill ha 689 00:33:16,270 --> 00:33:19,420 wild cards som motsvarande stjärnan. 690 00:33:19,420 --> 00:33:19,920 Höger. 691 00:33:19,920 --> 00:33:22,580 >> Så det var typ av mycket för alla på en gång. 692 00:33:22,580 --> 00:33:25,220 Låt oss se om vi inte kan destillera ett par av dessa funktioner 693 00:33:25,220 --> 00:33:29,540 och sedan bygga något ganska enkelt, men kraftfullt. 694 00:33:29,540 --> 00:33:31,380 Så bland annat designbeslut du är 695 00:33:31,380 --> 00:33:34,005 i slutändan kommer att ha är tillsammans linjerna av motorer förvaring. 696 00:33:34,005 --> 00:33:37,370 Och låt mig bara nämna i detta i väntan på examensarbeten, 697 00:33:37,370 --> 00:33:42,020 och förutse låt oss säga-- nej låt oss göra detta. 698 00:33:42,020 --> 00:33:43,820 Låt oss bygga denna lilla ansökan först. 699 00:33:43,820 --> 00:33:48,070 Jag kommer att gå in i min terminal fönster, och här är inte 700 00:33:48,070 --> 00:33:52,500 Endast counter.php, som vi nu ska att bli av med så inte längre är förbunden, 701 00:33:52,500 --> 00:33:54,570 men vi har en hel drös av kataloger och detta 702 00:33:54,570 --> 00:33:58,080 kommer att vara mycket likartad i anden vad du ser i problembild sju. 703 00:33:58,080 --> 00:34:00,980 >> Så vi har tre kataloger omfattar offentliga och mallar, vilket 704 00:34:00,980 --> 00:34:05,040 är precis där vi slutade på Måndag med hela vår MVC paradigm. 705 00:34:05,040 --> 00:34:09,290 Och återblick, offentligt kommer att gå alla filer som jag vill att användare faktiskt 706 00:34:09,290 --> 00:34:12,969 v kunna besöka in sin webbläsare via URL. 707 00:34:12,969 --> 00:34:13,502 Mall. 708 00:34:13,502 --> 00:34:14,710 Vad gjorde vi i mallar? 709 00:34:14,710 --> 00:34:17,070 Vilken typ av saker? 710 00:34:17,070 --> 00:34:21,659 Det var inte mycket men ett par filer åtminstone på måndag. 711 00:34:21,659 --> 00:34:22,619 Yeah. 712 00:34:22,619 --> 00:34:23,100 >> PUBLIK: Sidhuvud och sidfot? 713 00:34:23,100 --> 00:34:24,516 >> DAVID J. MALAN: Sidhuvud och sidfot. 714 00:34:24,516 --> 00:34:26,679 Så vi har något liknande i dag också. 715 00:34:26,679 --> 00:34:30,330 Vi har fått några fler filer, men Sidfot ser jag, Header jag ser, 716 00:34:30,330 --> 00:34:31,909 och sedan en massa andra filer. 717 00:34:31,909 --> 00:34:35,482 Så detta är motsvarigheten V MVC uppfattning, vilket, 718 00:34:35,482 --> 00:34:37,690 igen, kommer att vara lite mer tydlig problembild sju, 719 00:34:37,690 --> 00:34:40,380 men detta är bara en mapp är jag sätta en hel del av mina estetik. 720 00:34:40,380 --> 00:34:42,840 En stor del av min HTML, en hel del av mina former. 721 00:34:42,840 --> 00:34:46,899 Samtidigt innefattar, är en annan katalog som har dessa tre filer 722 00:34:46,899 --> 00:34:48,440 och låt oss ta en snabb titt på dessa. 723 00:34:48,440 --> 00:34:51,699 >> Jag kommer att gå vidare och öppna upp config.php. 724 00:34:51,699 --> 00:34:54,610 Som det visar sig, mycket liksom tidigare i tiden, 725 00:34:54,610 --> 00:34:57,850 du skarp inkluderade CS50 dot h med pset7. 726 00:34:57,850 --> 00:35:00,780 I dagens exempel, du kommer att göra det ekvivalent att 727 00:35:00,780 --> 00:35:03,600 med en kräva uttalande som effektivt 728 00:35:03,600 --> 00:35:05,340 omfattar dessa flera rader. 729 00:35:05,340 --> 00:35:08,225 Så för att vara tydlig, det är en fil som heter config.php. 730 00:35:08,225 --> 00:35:09,350 Och märker vad den gör. 731 00:35:09,350 --> 00:35:11,970 Det är uppenbarligen gör något kryptiska, slå på felmeddelanden 732 00:35:11,970 --> 00:35:13,680 så att du kan se dem i webbläsaren. 733 00:35:13,680 --> 00:35:15,860 Det är alltså tydligen kräver två andra filer 734 00:35:15,860 --> 00:35:19,530 så detta är som #include i C, och sedan detta vi fick se, 735 00:35:19,530 --> 00:35:22,720 och vi har förlitat sig på, stängs detta på den varukorg som funktionalitet. 736 00:35:22,720 --> 00:35:25,610 >> Detta innebär en cookie kommer skickas fram och tillbaka. 737 00:35:25,610 --> 00:35:27,290 Så varför är det här intressant? 738 00:35:27,290 --> 00:35:32,460 Tja, om vi går tillbaka till det här katalog och öppna upp, till exempel, 739 00:35:32,460 --> 00:35:33,741 constance.php. 740 00:35:33,741 --> 00:35:38,840 Lägg märke till att PHP stödjer konstanter, det är inte riktigt som #define i C. 741 00:35:38,840 --> 00:35:41,290 Istället du bokstavligen säger definierad och varsel 742 00:35:41,290 --> 00:35:44,110 som jag har lagrat i förväg fyra konstanter i den här filen. 743 00:35:44,110 --> 00:35:47,020 En för dagens databas för mitt lösenord, för mitt användarnamn, 744 00:35:47,020 --> 00:35:48,690 och för att namnet på servern. 745 00:35:48,690 --> 00:35:51,644 Så dessa faktiskt kommer att bli ganska lika i problembild sju. 746 00:35:51,644 --> 00:35:54,560 Och slutligen, och det är där jag är kommer att få några trevliga funktioner 747 00:35:54,560 --> 00:35:59,000 från personalen, i functions.php är ett gäng kod som vi har skrivit, 748 00:35:59,000 --> 00:36:01,040 och jag stal en del av detta från problemet satt sju 749 00:36:01,040 --> 00:36:05,920 för idag, gör att en massa saker och låt oss bara titta på en av dem 750 00:36:05,920 --> 00:36:07,270 i synnerhet. 751 00:36:07,270 --> 00:36:09,720 Denna funktion här, fråga, kommer att bli 752 00:36:09,720 --> 00:36:13,600 PHP-funktionen som vi kallar För att köra SQL. 753 00:36:13,600 --> 00:36:16,070 För en stund sedan var vi med hjälp av phpMyAdmin, men det är bara 754 00:36:16,070 --> 00:36:18,720 för slags inlärningsändamål och diagnostiska ändamål 755 00:36:18,720 --> 00:36:20,494 och glömma din databas set. 756 00:36:20,494 --> 00:36:22,660 När du faktiskt använder din databas, du som människa, 757 00:36:22,660 --> 00:36:24,100 uppenbarligen inte kommer att dra upp en webb 758 00:36:24,100 --> 00:36:25,740 sida varje gång någon registrerar. 759 00:36:25,740 --> 00:36:29,870 Du kommer att skriva kod som skär och tar bort användare på efterfrågan, 760 00:36:29,870 --> 00:36:32,490 och vi kommer att göra detta med hjälp av frågefunktionen. 761 00:36:32,490 --> 00:36:35,360 Om jag bläddrar nu nere, det finns kommer att bli några fler funktioner. 762 00:36:35,360 --> 00:36:37,170 Omdirigering kommer att vara en funktion som vi skrev 763 00:36:37,170 --> 00:36:40,160 för er som låter dig skicka användaren till en annan webbadress, 764 00:36:40,160 --> 00:36:43,780 och göra är en funktion, ganska precis vi såg i måndags, som faktiskt gör 765 00:36:43,780 --> 00:36:48,000 en mall, men mer om dessa i form pset7 egen promenad genom. 766 00:36:48,000 --> 00:36:50,500 För nu, låt oss gå vidare och göra det. 767 00:36:50,500 --> 00:36:54,860 >> Låt mig gå in i min föreläsningar bord och se till att det finns för närvarande inget 768 00:36:54,860 --> 00:36:59,640 här ännu, och låt mig också gå i min offentliga katalogen, där 769 00:36:59,640 --> 00:37:02,780 det finns bara en fil, index.php. 770 00:37:02,780 --> 00:37:06,920 Den här filen verkar vara super enkelt just nu ser det ut precis så här. 771 00:37:06,920 --> 00:37:09,110 Mycket likt hur vi slutade på måndag. 772 00:37:09,110 --> 00:37:11,945 Jag kräver här filen, config.php, vilket är i 773 00:37:11,945 --> 00:37:15,160 en omfattar katalog, som är dot dot, mina föräldrar, 774 00:37:15,160 --> 00:37:17,650 och sedan är det bara att göra den här filen. 775 00:37:17,650 --> 00:37:18,960 Så vad är den här filen? 776 00:37:18,960 --> 00:37:24,700 >> Vi öppnar upp i mina mallar form.php, och vi får se det här. 777 00:37:24,700 --> 00:37:28,500 Super enkelt, tydligen denna form är kommer att lämna med en $ _GET eller $ _POST. 778 00:37:28,500 --> 00:37:29,320 Snabb sanity check. 779 00:37:29,320 --> 00:37:33,760 780 00:37:33,760 --> 00:37:35,690 Bokstavligen visuellt söka filen. 781 00:37:35,690 --> 00:37:36,610 Metod lika inlägg. 782 00:37:36,610 --> 00:37:39,280 Så det kommer inte att använda webbadressen, som Google gör, det kommer att sortera av skinn 783 00:37:39,280 --> 00:37:41,030 informationen bakom scenerna och det är 784 00:37:41,030 --> 00:37:43,580 kommer att underkasta sig en fil som heter register.php, 785 00:37:43,580 --> 00:37:45,660 och det är filen Vi har ännu inte skrivit 786 00:37:45,660 --> 00:37:47,610 men vad detta kommer att se ut är det här. 787 00:37:47,610 --> 00:37:52,670 >> Om jag går till en separat sida här är vad localhost / index.php ser ut. 788 00:37:52,670 --> 00:37:56,930 Och återigen, serverns bara under antagande index.php. 789 00:37:56,930 --> 00:37:57,910 Enter. 790 00:37:57,910 --> 00:37:59,870 Så det är där vi är på, och vad jag vill göra 791 00:37:59,870 --> 00:38:02,450 är att kunna skriva saker som David, och sedan 792 00:38:02,450 --> 00:38:08,050 mitt telefonnummer, vilket kommer att säga 617-555-1212 för nu, registrera 793 00:38:08,050 --> 00:38:09,910 och nu register.php kunde inte hittas. 794 00:38:09,910 --> 00:38:11,440 Så jag behöver för att genomföra detta. 795 00:38:11,440 --> 00:38:13,320 Så låt oss snabbt piska ungefär så här upp. 796 00:38:13,320 --> 00:38:18,640 Låt mig gå in i min offentliga katalogen och göra gedit av register.php, 797 00:38:18,640 --> 00:38:22,300 och nu ska jag gå vidare och Starta PHP-läge, som vi gjorde i måndags, 798 00:38:22,300 --> 00:38:25,430 och nära PHP tag, och låt oss göra ett par saker. 799 00:38:25,430 --> 00:38:28,336 >> Så en, jag vet, från efter att ha skrivit den formen, 800 00:38:28,336 --> 00:38:29,960 att jag vill kontrollera följande. 801 00:38:29,960 --> 00:38:35,670 Om den är tom, oavsett användarens skrev in till namnfältet och sedan 802 00:38:35,670 --> 00:38:39,860 Jag ska säga något som ursäkt saknade namn. 803 00:38:39,860 --> 00:38:42,380 Ber om ursäkt, under tiden, är inte en inbyggd PHP sak, 804 00:38:42,380 --> 00:38:45,970 Det är en funktion som vi skrev i functions.php för pset7 805 00:38:45,970 --> 00:38:47,940 så att du har tillgång till den. 806 00:38:47,940 --> 00:38:53,830 Annars om den andra fält är tom, nummer, då är jag 807 00:38:53,830 --> 00:38:58,370 kommer att be om ursäkt till användarnamn och säga saknade nummer. 808 00:38:58,370 --> 00:38:59,320 Spara den här filen. 809 00:38:59,320 --> 00:39:02,640 >> Nu går vi tillbaka till min webbläsare, gå tillbaka till forumet försöka igen. 810 00:39:02,640 --> 00:39:04,070 Registrera. 811 00:39:04,070 --> 00:39:05,090 OK. 812 00:39:05,090 --> 00:39:06,730 Ingenting hände, vilket är bra. 813 00:39:06,730 --> 00:39:08,120 Jag fick ett felmeddelande. 814 00:39:08,120 --> 00:39:11,651 Men om istället, låt oss ladda om sida, och inte ge något. 815 00:39:11,651 --> 00:39:12,150 Fan också. 816 00:39:12,150 --> 00:39:15,350 817 00:39:15,350 --> 00:39:17,140 Gör det. 818 00:39:17,140 --> 00:39:18,810 Registrera. 819 00:39:18,810 --> 00:39:20,350 Vad gjorde jag för fel? 820 00:39:20,350 --> 00:39:24,860 Om den är tom, $ _POST namn. 821 00:39:24,860 --> 00:39:26,350 Säg igen? 822 00:39:26,350 --> 00:39:27,670 >> Åh, naturligtvis. 823 00:39:27,670 --> 00:39:30,919 Jag glömde den viktigaste delen, som är kräver ("../ includes / config.php."). 824 00:39:30,919 --> 00:39:34,210 825 00:39:34,210 --> 00:39:36,460 Jag behöver ha tillgång till apologize funktion, som 826 00:39:36,460 --> 00:39:37,770 Därför ingenting hände. 827 00:39:37,770 --> 00:39:39,460 Funktionen egentligen inte existerar. 828 00:39:39,460 --> 00:39:40,640 Så låt oss prova det här igen. 829 00:39:40,640 --> 00:39:42,350 Låt oss ladda om sidan klickar du på Registrera. 830 00:39:42,350 --> 00:39:43,060 OK. 831 00:39:43,060 --> 00:39:43,770 Där är det. 832 00:39:43,770 --> 00:39:45,700 Så utgången är vi ser här är resultatet 833 00:39:45,700 --> 00:39:47,685 att kalla en ursäkt funktion, super enkel, 834 00:39:47,685 --> 00:39:50,060 och det bara skriver ut vad som helst Jag ger det som argument. 835 00:39:50,060 --> 00:39:51,370 >> Okej, så låt oss samarbeta. 836 00:39:51,370 --> 00:39:54,240 Låt oss ge mitt namn som David, registrera, 837 00:39:54,240 --> 00:39:56,890 saknade nummer OK låt oss ger det också. 838 00:39:56,890 --> 00:39:58,650 617-555-1212. 839 00:39:58,650 --> 00:39:59,250 Registrera. 840 00:39:59,250 --> 00:39:59,750 OK. 841 00:39:59,750 --> 00:40:02,760 Så allt är bra nu, bara något intressant händer. 842 00:40:02,760 --> 00:40:06,000 Så nu ska vi göra något mer intressant händer här. 843 00:40:06,000 --> 00:40:09,980 Låt mig gå in i phpMyAdmin, och låt oss faktiskt skapa en tabell som kallas användare, 844 00:40:09,980 --> 00:40:12,330 Jag ska ge det tre kolumner, och jag ska snart 845 00:40:12,330 --> 00:40:16,250 skapa ID, och sedan namn, och sedan numret, 846 00:40:16,250 --> 00:40:18,832 och ID-fältet är jag kommer att lämna som en int. 847 00:40:18,832 --> 00:40:20,790 Namnfältet jag ska att lämna som en varchar, 848 00:40:20,790 --> 00:40:23,257 och vi ska säga 64, något godtyckligt. 849 00:40:23,257 --> 00:40:25,090 Numret jag ska att göra, vet du vad? 850 00:40:25,090 --> 00:40:27,350 Vi är på väg in stödja amerikanska siffror här, 851 00:40:27,350 --> 00:40:31,510 så jag kommer att göra något som röding och sedan 10 tecken 852 00:40:31,510 --> 00:40:34,540 max för riktnummer och sedan sju siffror. 853 00:40:34,540 --> 00:40:37,870 Och sedan här borta, kommer jag att Ange automatisk ökning på området, 854 00:40:37,870 --> 00:40:40,550 gör detta till en primärnyckel, och Jag kommer att gå vidare och inte 855 00:40:40,550 --> 00:40:42,240 kontrollera någon av dessa andra lådor. 856 00:40:42,240 --> 00:40:48,030 >> Så när jag nu äntligen på Spara, och jag går tillbaka till min användare bord, 857 00:40:48,030 --> 00:40:52,270 detta är vad det ser ut som om jag nu klickar på en ny flik struktur. 858 00:40:52,270 --> 00:40:54,550 Så det här, för att vara tydlig, är precis phpMyAdmin sätt 859 00:40:54,550 --> 00:40:58,570 att säga din databastabell har ett ID, ett namn och ett nummer 860 00:40:58,570 --> 00:41:02,040 med dessa speciella konfigurationer och vi kommer att ignorera resten av fälten 861 00:41:02,040 --> 00:41:03,140 där för nu. 862 00:41:03,140 --> 00:41:04,810 >> Så nu vad vill jag göra? 863 00:41:04,810 --> 00:41:09,060 Så om jag går nu in i min källkod, om allt är bra 864 00:41:09,060 --> 00:41:11,190 Jag vill köra följande fråga. 865 00:41:11,190 --> 00:41:14,970 Sätt in i, och jag kan bara säger användarna jag inte strikt 866 00:41:14,970 --> 00:41:18,620 behöver dem där fästingar om det är inte ett farligt ord som användare. 867 00:41:18,620 --> 00:41:22,810 Jag kommer att säga namnet, nummer, och sedan här är jag 868 00:41:22,810 --> 00:41:24,960 inte att hårt kod siffran av de värden än. 869 00:41:24,960 --> 00:41:26,760 Jag ska sätta två frågetecken. 870 00:41:26,760 --> 00:41:29,320 Och detta är en konvention på många språk 871 00:41:29,320 --> 00:41:31,730 vari om du vill ha en platshållare för en sträng 872 00:41:31,730 --> 00:41:34,105 du kommer att använda frågan varumärken, av skäl som vi ska 873 00:41:34,105 --> 00:41:36,370 komma tillbaka för att prata om säkerhet, och här 874 00:41:36,370 --> 00:41:39,420 Jag kommer att passera i de två fält posta namn, 875 00:41:39,420 --> 00:41:44,850 och sedan skicka nummer, och nu spara filen. 876 00:41:44,850 --> 00:41:47,090 >> Och nu ska jag gå ner här är en super 877 00:41:47,090 --> 00:41:55,690 bara säga rendersuccess.php, vilket kommer att bli en annan mall. 878 00:41:55,690 --> 00:41:57,380 Jag kommer att skapa riktigt snabbt. 879 00:41:57,380 --> 00:42:06,270 Geditsuccess.php och jag kommer bara säga H1 framgång i den filen. 880 00:42:06,270 --> 00:42:06,990 Okej. 881 00:42:06,990 --> 00:42:11,312 Så nu, låt oss gå tillbaka till browser, där jag besökt tidigare. 882 00:42:11,312 --> 00:42:14,270 Låt oss gå vidare och bekräfta jag skrev i David, skrev jag i ett telefonnummer, 883 00:42:14,270 --> 00:42:15,390 registrera. 884 00:42:15,390 --> 00:42:16,100 Fan också. 885 00:42:16,100 --> 00:42:17,420 Vad gjorde jag för fel? 886 00:42:17,420 --> 00:42:20,850 Så jag ser ett fel här, du har ett fel i din SQL-syntax. 887 00:42:20,850 --> 00:42:24,900 Låt mig gå tillbaka till gedit, låt mig gå tillbaka till register.php, 888 00:42:24,900 --> 00:42:28,830 och vad gjorde jag utelämnar att var viktigt förra gången? 889 00:42:28,830 --> 00:42:29,722 Jag behöver det här. 890 00:42:29,722 --> 00:42:32,930 Du vill veta att andra än från har märkt innan, men jag behöver det här. 891 00:42:32,930 --> 00:42:35,596 >> Så nu ska vi gå tillbaka, och detta var bra att se i webbläsaren 892 00:42:35,596 --> 00:42:37,680 och det är därför i config.php vi spotta ut fel. 893 00:42:37,680 --> 00:42:41,770 Låt oss gå vidare och ladda om, klicka på Fortsätt, framgång. 894 00:42:41,770 --> 00:42:47,060 Så nu vill jag gå över till min Databasen här och klicka på Användare, 895 00:42:47,060 --> 00:42:51,680 och surfa, och märker jag nu har David i min databas här. 896 00:42:51,680 --> 00:42:55,810 Nu tekniskt denna webbplats är ännu inte på den publika Internet, 897 00:42:55,810 --> 00:42:57,890 så jag kan inte ha annat människor att sätta här, 898 00:42:57,890 --> 00:43:01,120 men om jag ville nu, för exempel skicka mig ett textmeddelande. 899 00:43:01,120 --> 00:43:03,920 Låt oss gå ut på en lem här och se om det verkligen fungerar. 900 00:43:03,920 --> 00:43:07,331 Jag kommer att gå vidare och ta bort den här raden 901 00:43:07,331 --> 00:43:09,080 och vi ska sudda ut i videon senare 902 00:43:09,080 --> 00:43:11,900 så att vi inte har den hela internet textning mig, 903 00:43:11,900 --> 00:43:17,270 och vi kommer nu att gå upp till webbläsare och vi ska gå över för att föreläsa 904 00:43:17,270 --> 00:43:22,040 och vi ska skriva in olika nummer här, registrera, framgång. 905 00:43:22,040 --> 00:43:25,550 >> Så nu är mitt eget nummer förmodligen i databasen, och nu det roliga. 906 00:43:25,550 --> 00:43:28,774 Låt oss faktiskt använder PHP att göra något programmatiskt, 907 00:43:28,774 --> 00:43:30,940 antingen från kommando linje eller från någon annanstans, 908 00:43:30,940 --> 00:43:32,773 och nu är jag bara kommer att hålla det enkelt 909 00:43:32,773 --> 00:43:36,230 och jag kommer att gå in i min katalog här och gör följande. 910 00:43:36,230 --> 00:43:44,920 Gedit script låt oss säga, vi ska kalla det text, #! / user / bin / env PHP, 911 00:43:44,920 --> 00:43:46,700 som vi såg förra gången. 912 00:43:46,700 --> 00:43:47,950 PHP. 913 00:43:47,950 --> 00:43:55,055 >> Nu ska jag kräver innefattar config.php, 914 00:43:55,055 --> 00:43:57,360 även om detta kan inducera ett litet fel. 915 00:43:57,360 --> 00:44:03,960 Och nu ska jag gå vidare och säga rader, fråga, väljer stjärnan från användarna, 916 00:44:03,960 --> 00:44:08,149 och nu här kommer jag att göra en teknik från förra gången för varje varv som följd. 917 00:44:08,149 --> 00:44:09,690 Och jag kommer att göra något enkelt. 918 00:44:09,690 --> 00:44:19,090 Printf låt oss säga namn är detta, och nummer är detta, omvänt snedstreck n. 919 00:44:19,090 --> 00:44:23,320 Och nu ska jag passera i rad citerar unquote namn, 920 00:44:23,320 --> 00:44:28,140 och rad citat unquote nummer, och nu ska vi gå vidare 921 00:44:28,140 --> 00:44:31,430 och min terminalfönster chmod denna a + x för att göra 922 00:44:31,430 --> 00:44:33,970 detta script som kallas text körbar. 923 00:44:33,970 --> 00:44:36,080 Och nu ska vi text köra. 924 00:44:36,080 --> 00:44:37,590 >> OK, så framsteg. 925 00:44:37,590 --> 00:44:39,960 Så jag har nu skrivit en kommandorad manus, 926 00:44:39,960 --> 00:44:43,300 på ett språk som heter PHP, att, på grund av detta kräver linje, 927 00:44:43,300 --> 00:44:46,380 har tillgång till alla de konfiguration konstanter som jag specificerade. 928 00:44:46,380 --> 00:44:48,177 Namnet på databasen och så vidare. 929 00:44:48,177 --> 00:44:50,260 Faktum är att bara för att vara tydlig att detta inte är en lyckträff, 930 00:44:50,260 --> 00:44:54,730 Låt mig gå vidare och registrera dig, riktigt snabbt, någon annan som Rob 931 00:44:54,730 --> 00:44:58,890 och kommer att ge honom 555-1212 numret. 932 00:44:58,890 --> 00:45:01,557 >> Och nu, när jag kör skriptet igen, märker makten 933 00:45:01,557 --> 00:45:03,140 om vad vi gör med databasen. 934 00:45:03,140 --> 00:45:07,680 Nu har jag genast sett vad två andra rader är i min databas. 935 00:45:07,680 --> 00:45:10,699 Så nu ska vi försöka göra något ännu snyggare inuti, 936 00:45:10,699 --> 00:45:12,740 och detta är den del vi har ej testad i förväg, 937 00:45:12,740 --> 00:45:15,910 så sista gången jag gjorde detta det gick fruktansvärt snett, 938 00:45:15,910 --> 00:45:17,120 Vi har video om detta. 939 00:45:17,120 --> 00:45:18,286 >> Faktiskt, ja, roligt åt sidan. 940 00:45:18,286 --> 00:45:20,480 Så sista gången, i en föreläsning som två år sedan, 941 00:45:20,480 --> 00:45:23,230 Vi bestämde, jag bestämde, att vara allt detta skulle vara en bra idé 942 00:45:23,230 --> 00:45:28,150 att dynamiskt generera e-post i klass, med hjälp av hela databasen CS50 943 00:45:28,150 --> 00:45:33,390 studenter, som hade gett oss sitt nummer och deras mobiltelefon företag som du 944 00:45:33,390 --> 00:45:36,290 kanske kommer ihåg från pset0, hur man resonera, visar det sig 945 00:45:36,290 --> 00:45:40,650 Jag hade en liten bugg i mitt program och gjorde ett par misstag under 2012, tror jag. 946 00:45:40,650 --> 00:45:43,997 >> Varigenom, jag hade för loop som gjorde exakt sånt här, 947 00:45:43,997 --> 00:45:46,580 iteration över databasen, få ett namn i databasen, 948 00:45:46,580 --> 00:45:49,940 namn från databasen, och sedan på varje iteration av slingan jag skickade ett mail. 949 00:45:49,940 --> 00:45:54,130 Men istället för att skicka en e-post, jag skickade ett e-postmeddelande den första iterationen, 950 00:45:54,130 --> 00:45:58,200 och två e-postmeddelanden en andra iteration, skickade tre e-postmeddelanden en andra iteration, vilket 951 00:45:58,200 --> 00:46:01,230 som ni kanske kommer ihåg från vår diskussion av asymptotisk notation 952 00:46:01,230 --> 00:46:06,400 denna stora O i dåligt, som n kvadrat är hur många meddelanden som jag skickat, 953 00:46:06,400 --> 00:46:08,560 men det var inte ens e-post det var textmeddelanden. 954 00:46:08,560 --> 00:46:12,070 >> Och som ni vet, inte närvaro super high mot slutet av terminen 955 00:46:12,070 --> 00:46:15,360 och så jag trodde det skulle vara söt på tid att säga: "Varför är du inte klass?" 956 00:46:15,360 --> 00:46:17,880 I textmeddelandet I skickas till hela klassen, 957 00:46:17,880 --> 00:46:22,140 och det var roligt att ha 50% av klassen, men de andra 50%, varav några 958 00:46:22,140 --> 00:46:26,102 flippade ut, skickade jag otroligt apologetiska söta anteckningar 959 00:46:26,102 --> 00:46:28,560 till personalen adjö för ha missat föreläsningen bara 960 00:46:28,560 --> 00:46:29,530 denna gång, eller hur? 961 00:46:29,530 --> 00:46:32,790 962 00:46:32,790 --> 00:46:34,030 >> Så det skulle fruktansvärt snett. 963 00:46:34,030 --> 00:46:37,030 Så i denna anda, låt oss prova detta igen men bara med mitt nummer. 964 00:46:37,030 --> 00:46:41,940 I förväg, i functions.php, Jag har skrivit denna funktion här. 965 00:46:41,940 --> 00:46:44,250 Det kallas text, och det tar in tre argument. 966 00:46:44,250 --> 00:46:46,360 Ett tal, en bärare, och ett meddelande. 967 00:46:46,360 --> 00:46:50,390 >> Jag använder en switch uttalande, som härligt PHP tar strängar, inte bara 968 00:46:50,390 --> 00:46:53,350 heltal, och jag har inte genomfört allt stöd för detta ännu, 969 00:46:53,350 --> 00:46:55,370 Jag har precis gjort AT & T och Verizon. 970 00:46:55,370 --> 00:46:57,610 Eftersom det visar sig att med dessa flygbolag 971 00:46:57,610 --> 00:47:00,570 de har e-post till SMS-gateways, där du kan faktiskt 972 00:47:00,570 --> 00:47:05,529 skicka ett mail till en adress som telefonnummer på vtext.com 973 00:47:05,529 --> 00:47:08,070 och om användaren inte har blockerat meddelandena, det ska gå igenom 974 00:47:08,070 --> 00:47:09,340 är ett textmeddelande. 975 00:47:09,340 --> 00:47:13,270 >> Nu för att göra detta, kommer jag att behöva lägga ett fält riktigt snabbt till min databas. 976 00:47:13,270 --> 00:47:15,470 Jag kommer att gå in min struktur, och jag är 977 00:47:15,470 --> 00:47:21,880 kommer att gå vidare och lägga till en fält i slutet av tabellen. 978 00:47:21,880 --> 00:47:25,227 Låt oss klicka på Gå, och jag är kommer att kalla detta lufttrafik 979 00:47:25,227 --> 00:47:27,310 och nu ska jag lämna detta som en bar text, 980 00:47:27,310 --> 00:47:29,320 men vi kan vara finare i framtiden. 981 00:47:29,320 --> 00:47:31,961 Jag ska snabbt gå till mitt bord, och jag är 982 00:47:31,961 --> 00:47:34,210 kommer att bli av Rob, eftersom det är en falsk nummer, 983 00:47:34,210 --> 00:47:38,540 Jag kommer att gå in i redigerings här och jag är kommer att ändra min karriär manuellt 984 00:47:38,540 --> 00:47:43,410 vara Verizon, som det är, och nu här. 985 00:47:43,410 --> 00:47:44,980 >> Låt oss göra en snabb kontroll förstånd. 986 00:47:44,980 --> 00:47:52,730 Vi öppnar upp vår text script, som ser ut så här, är bärare% s. 987 00:47:52,730 --> 00:47:58,230 Vi gör mycket mer fel kontroll än jag gjorde under 2012, bärare. 988 00:47:58,230 --> 00:48:01,160 Och nu kommer jag att gå framåt och åter köra skriptet. 989 00:48:01,160 --> 00:48:01,660 OK. 990 00:48:01,660 --> 00:48:06,100 Carrier är Verizon, vilket innebär nu förhoppningsvis kan jag göra just detta. 991 00:48:06,100 --> 00:48:08,360 Rätt i år, förhoppningsvis, nu kör vi. 992 00:48:08,360 --> 00:48:12,200 >> Så inne i detta för loop, jag är ska inte bara ha denna printf, 993 00:48:12,200 --> 00:48:15,990 Jag kommer även att ringa text och användningen av denna funktion återkallande 994 00:48:15,990 --> 00:48:19,670 var det tar ett nummer, en bärare, och ett meddelande. 995 00:48:19,670 --> 00:48:23,310 Så låt oss se, är numret går till vara rad citat unquote "nummer" 996 00:48:23,310 --> 00:48:31,660 rad citat unquote "bärare" och den sista var budskapet. 997 00:48:31,660 --> 00:48:36,250 Skruva inte upp i år, semikolon. 998 00:48:36,250 --> 00:48:36,780 >> OK. 999 00:48:36,780 --> 00:48:38,280 Tummarna. 1000 00:48:38,280 --> 00:48:39,970 Låt oss se om det fungerar. 1001 00:48:39,970 --> 00:48:41,720 Okej, så. 1002 00:48:41,720 --> 00:48:43,000 Här går vi. 1003 00:48:43,000 --> 00:48:47,380 Låt oss låsa upp telefonen, håll tummarna, för fan. 1004 00:48:47,380 --> 00:48:50,300 Undefined variabel may-- oh vänta, vänta, vänta, riktigt snabbt. 1005 00:48:50,300 --> 00:48:51,340 Riktigt snabbt, riktigt snabbt. 1006 00:48:51,340 --> 00:48:53,380 Detta är helt klart värt det. 1007 00:48:53,380 --> 00:48:57,710 Låt mig ta tag i, låt mig ta, uh-oh. 1008 00:48:57,710 --> 00:48:59,965 Tack, texterna har startade från någon annan. 1009 00:48:59,965 --> 00:49:04,770 1010 00:49:04,770 --> 00:49:11,650 Låt mig gå vidare och öppna upp verkliga snabb, dropbox.php / Mail här inne. 1011 00:49:11,650 --> 00:49:12,660 Standby. 1012 00:49:12,660 --> 00:49:14,455 Helt värt det. 1013 00:49:14,455 --> 00:49:17,430 Nedladdningar. 1014 00:49:17,430 --> 00:49:18,560 OK, käll src8m. 1015 00:49:18,560 --> 00:49:19,700 OK. 1016 00:49:19,700 --> 00:49:21,380 >> Behöver ytterligare en linje här. 1017 00:49:21,380 --> 00:49:24,530 Åh det är det, det är i Frosh IM, det är i registret vid tre. 1018 00:49:24,530 --> 00:49:28,820 Åh hej, Margo, tack så mycket. 1019 00:49:28,820 --> 00:49:31,130 OK, och jag saknade denna linje här. 1020 00:49:31,130 --> 00:49:33,010 Så låt mig ta snabbt här kodraden, 1021 00:49:33,010 --> 00:49:36,200 som inkluderar den post eller bibliotek att jag vill verkligen använda, 1022 00:49:36,200 --> 00:49:38,300 Jag ska snabbt gå tillbaka till funktioner, 1023 00:49:38,300 --> 00:49:42,337 Jag kommer att gå till toppen av detta fil och kräver denna fil också, 1024 00:49:42,337 --> 00:49:45,420 och nu ska jag verkligen korsa min fingrarna när jag går tillbaka till kommandot 1025 00:49:45,420 --> 00:49:49,530 line script, som är inne i dagens lokala värden katalogen. 1026 00:49:49,530 --> 00:49:50,610 Kör text. 1027 00:49:50,610 --> 00:49:52,720 Enter. 1028 00:49:52,720 --> 00:49:53,220 Mail. 1029 00:49:53,220 --> 00:49:53,719 Standby. 1030 00:49:53,719 --> 00:49:58,850 1031 00:49:58,850 --> 00:49:59,600 Standby. 1032 00:49:59,600 --> 00:50:01,680 Mail. 1033 00:50:01,680 --> 00:50:02,290 Åh, OK. 1034 00:50:02,290 --> 00:50:03,870 Här går vi. 1035 00:50:03,870 --> 00:50:06,880 >> Mail får ny PHP mailer. 1036 00:50:06,880 --> 00:50:09,970 Gjorde jag det här rätt? 1037 00:50:09,970 --> 00:50:11,067 Fan också. 1038 00:50:11,067 --> 00:50:12,150 Att-- oh, vänta, vänta, vänta. 1039 00:50:12,150 --> 00:50:12,649 Stand by. 1040 00:50:12,649 --> 00:50:15,820 1041 00:50:15,820 --> 00:50:18,630 Jag lovar, det här är kommer att vara så värt det. 1042 00:50:18,630 --> 00:50:20,340 Adress. 1043 00:50:20,340 --> 00:50:24,390 Detta är anledningen till att jag inte gör det exempel just före klass. 1044 00:50:24,390 --> 00:50:26,350 Ugh. 1045 00:50:26,350 --> 00:50:27,910 Följande mottagare misslyckades. 1046 00:50:27,910 --> 00:50:31,500 1047 00:50:31,500 --> 00:50:33,040 Låt oss försöka en sista sak. 1048 00:50:33,040 --> 00:50:40,660 SMTP in från, lägga till adress, adressen är verkligen det. 1049 00:50:40,660 --> 00:50:43,980 Låt oss prova denna sista delen i adressen. 1050 00:50:43,980 --> 00:50:47,210 Aw, jag är verkligen ledsen just nu. 1051 00:50:47,210 --> 00:50:47,854 Tack. 1052 00:50:47,854 --> 00:50:50,270 Men jag uppskattar verkligen alla texterna som du har sänt. 1053 00:50:50,270 --> 00:50:53,130 1054 00:50:53,130 --> 00:50:56,320 Du har fått den här David. 1055 00:50:56,320 --> 00:50:59,310 Du blåser det. 1056 00:50:59,310 --> 00:51:01,720 Låt oss lämna den där och Vi kommer att fixa på måndag. 1057 00:51:01,720 --> 00:51:04,290 Vi ses då. 1058 00:51:04,290 --> 00:51:08,090 >> Daven FARNHAM: Och nu Djup Tankar från Daven Farnham. 1059 00:51:08,090 --> 00:51:11,340 1060 00:51:11,340 --> 00:51:17,590 Om ett binärt träd faller i skogen och ingen är runt till C det-- [skrattande]. 1061 00:51:17,590 --> 00:51:18,998