[MUSIC SPILLE] DAVID J. MALAN: All right. Velkommen tilbake. Dette er CS50. Dette er slutten av uke 8. Og som du vet, vi har ganske vanlig kontortid i noen av spisesalene, inkludert Annenberg. Og noen av teamet ber tok noen bilder i det siste. Og til ære for Halloween, vi trodde vi skulle dele en som heller fanget oss av overraskelse her i Annenberg Hall bare den andre natten. Din klassekamerat Jacob poserte for dette bildet, men var mer morsomt var på Facebook, den påfølgende samtale som skjedde etterpå. Hans første innlegg svar til hans bilde var dette. Noen få minutter senere, bestemte han til en opp seg selv med dette. Det gikk på da å gå til dette, og da, enda mer morsom måte er når hans mor stemte i. Og så til slutt, det synes dette var bare en fantastisk ruse for en spille som skjer. Så, hvis du ønsker å se Jacob og andre, blant dem Cynthia Meng, er hvem bak kulissene av CS50 sonen ansatte, hodet til denne nettadressen, og dette stykket her. Så uten videre, vi i dag fortsette denne titt på web-programmering, og selve etableringen av programmer som ikke kjøre på kommandolinjen, men i stedet kjøre innsiden av en nettleser. Antagelig nå, eller svært kort tid, du kommer å være midt i å implementere din egen web server, som er forskjellig fra web-programmering. Webserveren i pset6 handler om å skrive programvare som vet å ta HTTP-forespørsler fra en nettleser, eller til og med fra deg, et menneske, med et program som heter Telnet, og deretter svare på disse forespørslene enten ved å spytte ut en HTML-fil, eller en jpeg, eller en gif, eller enda en php-fil. Men med en web server, er det ikke ment å bare åpne en PHP-fil, noe som ender i php, og så spytte ut innholdet. Det er ment å gjøre hva til denne filen først? Så å si. Ikke kompilere det, sa vi på mandag, men rather-- Så tolke den. PHP er et tolket språk, og så en av de viktigste funksjonene i nett server, enskjønt implementert av oss, er denne evnen til webserveren å legge merke til, oh. Dette er en fil som slutter på .php. La meg ikke bare sende den til brukeren som det er statisk innhold, men heller la meg lese den linjen ved linje, fra venstre til høyre, og tolke den. Og for å gjøre, som du Gutta vil i hovedsak punt til et program i apparatet, og på en rekke datasystemer, bare kalt PHP. Det er navnet på PHP på språkets egen tolk. Så, det stykke vi gjennomføre for deg, og det som er igjen for deg, til slutt, er en rekke av stykker, blant hvilke implementerer støtte for statisk innhold. Men nå, og med Problemet satt syv, du er kommer til å begynne å overgang til faktisk skrive PHP-kode som blir tolket i å snakke med en back end database som lagrer informasjon. Så la oss bedre forstå først et par av disse superglobals og hvor mye strøm du komme seg ut av boksen for gratis med et språk som PHP. Ting du ikke trenger å gjennomføre selv. Så, vi så på mandag $ _GET, som er en superglobal, som er bare PHP taler for en global variabelen du får tilgang til noe. Og hva som er inne på $ _GET? Hva er inni denne superglobal at vi ser? Sikkert statistisk på Minst én person vet. Hva er inni på $ _GET? Yeah? PUBLIKUM: Det er de variablene du putter i søkestrengen. DAVID J. MALAN: Perfect. Det er de variablene du satt i søkestrengen. Så, i våre eldre eksempel på reimplementing Google når vi hadde en URL, og deretter spørsmålstegn, som avgrenser starten av HTTP parametere, så vi hadde q lik noe, som q lik katter, hva ville automatisk gå inn av at $ _GET super globalt for deg, på grunn av PHP, er en nøkkel av Q, og derav av verdi for katter. Med andre ord, $ _GET og alle disse tingene er assosiative arrays, hash tabeller slags, at butikk nøkler og verdier. Nå, tilbake i pset5, hash Tabellen du kanskje har implementert, eller prøver du kanskje har implementert, egentlig var effektivt en assosiativ array, en datastruktur der du kan knytte taster med verdier. Men i pset5, var verdiene trivielt. Verdien var egentlig sant eller usant. Er ordet i ordboka? Så, når du hashet et ord som apple for å se om Apple er i ordboken, sjekken funksjon formodentlig returnert sant eller usant. Så, det er effektivt verdi vi får tilbake. Men vi så på mandag kort, kan du sikkert knytte mer interessant verdier enn bare sant eller usant med nøkler, som eple. Du kan faktisk returnere en vilkårlig streng, og faktisk, det er hva $ _GET og disse andre variabler lar deg gjøre. Så $ _POST er lik i ånden, men hvis du sender inn et skjema via post, en annen HTTP-metoden som er brukt til ting som kredittkort, og privat informasjon, og selv binær informasjon som bilder, disse tingene ende opp inne på $ _POST. Og faktisk etter filer som JPEG-bilder og whatnot, det er enda en annen som ikke er her oppe kalt $ _files også. Så, server vi vil ikke dvele på også mye, men det gir deg tilgang å sortere på lavere nivå detaljer om selve serveren du bruker. Cookie og økt, skjønt, vi vil effektivt se nå. Det siste er det vi bruker for å implementere oppfatningen av en handlekurv. En super enkel en, men tilbakekalling at vi hadde dette eksempelet her, telle hvor mange ganger du hadde besøkt denne siden før. Men i dag, i stedet for å bare se på Effekten av dette, la oss åpne Chrome Inspector, som du kan vanligvis gjøre ved å høyreklikke eller kontroll klikke hvor som helst på en webside, og velg deretter inspisere element. Eller du kan gå gjennom menyene som vi beskriver i pset6 sin spec. Og jeg kommer til kategorien Nettverk her, og la oss se på et øyeblikk HTTP-trafikk som er går frem og tilbake. La meg først gå videre og klar Chrome buffer. Så noen av dere kan bli kjent med denne teknikken allerede og vi kommer til å bruke den for debugging formål her. Nå er vi som datamaskinen Forskerne kommer til å starte gjør dette for debugging formål, hvorved vi vil tømme bufferen, typisk, slik at vi kan bli kvitt ting som kalles cookies. Så du er nok generelt kjent med hva cookies er, eller i det minste at de eksisterer, men hva er din forståelse av dem, som bare en bruker av datamaskiner, hva er en cookie? Yeah. PUBLIKUM: Det er litt of-- vel, ikke bit i en periode på informatikk. Det er et stykke data som et nettsted sender til deg for å være i stand til å ta opp statistikk på deg. DAVID J. MALAN: OK, bra. Så det er et stykke data som et server, setter på datamaskinen, og la oss generalisere det enda mer, er det en viktig value-- godt, som begynner å bli mer presis. Det er et stykke informasjon, et stykke av data, at en server er i stand å sette på din datamaskin og svært ofte, gjør serveren dette slik som å huske hvem du er. Så for eksempel, odds er du sannsynligvis logget inn på nettsteder som Facebook, eller Gmail, eller andre før, og du logge inn med din brukernavn og passord, og deretter etter at, i et visst antall av minutter eller timer eller dager, serveren husker at du er faktisk logget inn. Nå, hvordan er det egentlig som skjer? Fordi du absolutt ikke å måtte skrive brukernavn og passord hver gang du navigerer til et annen side på Facebook. Så det viser seg at cookies er svaret. En cookie du kan tenke på som, slags liker, en digital hånd stempel som du kan få på en fornøyelses park eller en klubb som i hovedsak indikerer at du har vært her før, og du har allerede vist din ID til dørvakt, for eksempel, og at klubben eller parken skal nå anta at du har godkjent allerede. Du har allerede blitt identifisert av den. Så med det i tankene, La oss åpne opp teller her. La meg gå videre, jeg bare gjorde det, og fjerne alle mine cookies. Og nå hva jeg skal gjøre er hold Shift, bare for godt mål, og tvangs oppdater siden. Skift bare sørg at ingenting blir lagret. Og her er forespørselen som gikk frem og tilbake. Så over her har vi en forespørsel, og la meg zoome inn her nede, og mye av dette er liksom uinteressante detaljer for nå som nettleseren har automatisk sendt, men la oss klikk på Vis Kilde for å se de rå overskrifter. Og hvis du har prøvd seg på pset6 allerede, vil du sikkert kjenne igjen ting som dette, og kanskje noen av disse andre linjer her, men hva er mer interessant for dag hvis jeg rulle ned, ikke til forespørselen men til den såkalte respons, denne linjen trolig ser kjent ut. Det er en god ting når du ser en 200 OK. Angivelig er dette dato og klokkeslett på serveren og det er en haug med ting. Å, dette er interessant. Det viser seg at når du bruker PHP, i det minste i denne serveren, serveren spytter ut hva versjon av PHP du bruker. Som, faktisk, for sikkerhet formål, er ikke en god ting. Men, vil vi komme tilbake til det en annen gang kanskje. Men nå er dette den saftig linje i dag, og vi så kort noen av disse, Jeg tror med Facebook når vi stakk rundt Inspector på den tiden, sett cookie er det som er å plante at lite stykke informasjon på din datamaskin. Dette er en HTTP-header det er effektivt forteller nettleseren din, Chrome, IE, uansett, hei browser butikken på brukerens harddisk eller i brukerens RAM, en nøkkel kalles PHPSESSID, som er en stenografi notasjon for session-ID, og gi den en verdi på 0vlk8t, prikk, prikk, prikk. En veldig lang pseudo tilfeldig alfanumerisk streng. Det er bare en virkelig stort tall, men det er kodet med bokstaver og tall slik at størrelsen av det kan bli enda større enn tallene alene. Og så, forresten, Sti = /, at betyr bare at denne informasjonskapselen skal være forbundet med helhet på nettsiden, ikke bare et spesifikt siden hele greia. Så dette er at virtuelle hånd stempel. Det er som om serveren, Facebook, eller i vårt tilfelle apparatet, har bokstavelig talt skrevet 0vlk8t og så videre, på hånden din. Legg merke til hva serverens, ikke gjør er det ikke lagring av brukernavnet mitt, sikkert ikke lagre passordet mitt. I stedet ser det ut til å være lagring pseudo tilfeldig informasjon slik at ingen kan gjette hva min hånd stempel er. På serversiden, i mellomtiden, serveren kommer til å huske, sannsynligvis i en database eller noe, at brukeren, som i fremtiden presenterer en håndstempel 0vlk8t, prikk, prikk, prikk, bør være knyttet til dette Særlig handlekurv, så å si. Med andre ord, hvis jeg nå gå tilbake hit og åpne denne siden, hvordan serveren vet som jeg besøkte en gang? Eller hvis jeg gjør det igjen, hvordan serveren vet at jeg har besøkt det to ganger? Vel, hvis jeg går ned til dette nyeste forespørsel, som Nå er den tredje som jeg har sendt totalt, legge merke til min forespørsel nå. Det er fortsatt dette be opp her, samme som før, det er fortsatt en hel haug av ting som vi har oversett som før, men den aller siste header, dette tid, fordi jeg har vært her før, er en presentasjon av denne virtuelle hånd stempel. Hvor denne linjen her, ikke satt cookie men cookie kolon PHPSESSI = 0vlk8t, det er bare min leseren automatisk presentasjonen av denne håndstempel, slik at Nå serveren, så snart den er klar, ooh, dette bruker 0vlk8t prikk, prikk, prikk, Nå kan jeg huske hvem han eller hun er og opprette tilknytningen med den brukeren uansett informasjonen jeg vil, og alle at informasjonen kan lagres av deg, programmerer, i $ _SESSION. Så for å være klar, hvis jeg åpner opp virkelig rask i gedit at selve filen, counter.php, i min lokale verten offentlig katalog som før, legge merke til at, ja, Jeg er i siste instans lagring i $ _SESSION Quote unquote "teller" verdien av telleren som tidligere Jeg får fra disse linjene her oppe at vi sett på sist gang pluss en. Så under panseret, det er alle informasjonskapsler er. Det er bare den slags digital hånd stempel går frem og tilbake, og ærlig hvis du åpner Chrome Inspektør på hvilken som helst nettside du besøker i dag, med super høy sannsynlighet, du kommer til å se kanskje en, kanskje et halvt dusin cookies blir husket av deg. Og enda verre, hvis de nettstedet du besøker alle har annonser, som er sikkert ganske vanlig i dag, og hvis disse annonsene kommer fra noen sentrale parti, noen som Google eller AdWords som de ringe en av sine produkter eller andre slike leverandører som selge annonser, det som er interessant, og ærlig hva som er en liten betenkelig, om hvordan HTTP fungerer, er at hvis du har en annonse innebygd i Facebook.com, og Google.com, og Harvard.edu, ubegrenset antall av nettsteder, så det er slik at det er en middelaldrende mann som soner opp annonser for alle tre av disse nettstedene, det viser seg at cookies er per domene. Så hvis du har en annonse som kommer fra samme selskap på ulike nettsteder, at selskapet effektivt kan spore hvem som du er over alle disse nettstedene. Harvard kanskje ikke vet du besøker Facebook. Facebook er kanskje ikke kjenner og du besøker Harvard. Men uansett ad service de bruker om at domenet er tilstede i begge Harvard.edu web sider og Facebook.com nettsider, dette midt mann sikkert vet hvem du er på grunn av disse informasjonskapslene blir delt tvers, eller snarere å, at såkalt mellommann. Så vi vil komme tilbake til dette i sikkerhetsimplikasjoner av disse, men det er mye informasjon blir lagret om deg hver gang du besøke de fleste hvilken som helst webside på Internett og det virkelig reduserer til denne svært enkel mekanisme. Hva skjer da, hvis du er super paranoid og du bestemmer deg for å gå inn i Chrome eller IE eller hva, og slå av informasjonskapslene? Hva skjer? Yeah? Du really-- du har gjort dette riktig? OK. Nei, gå videre. PUBLIKUM: Enkelte nettsteder har ikke en funksjon uten det liker Facebook. DAVID J. MALAN: Yeah! Så visse nettsteder vil bare slutte å jobbe. Og i de fleste nettsteder i disse dager som fundamentalt avhengige av cookies, spesielt hvis de har du logger i, er de bare kommer til å bryte. Fordi vurdere alternativ, hvis nettsiden har ingen mulighet til å huske hvem du er, og derfor nettleseren er ikke representerer med hver HTTP anmodning fra denne hånden stempel, effektivt et nettsted som Facebooks pågå til å be deg om å logg inn hver darn gang du bytter side, eller klikk på en lenke, som er sikkert ikke en spesielt god brukeropplevelse opplevelse. Slik at det også er blant de avveininger. Så uten videre, la oss ta for gitt at med web-programmering, i språk som PHP, kan du huske informasjon som det i oppgavesettet syv når du implementere din egen E * Trade-lignende nettside med å kjøpe og selge aksjer, vil du huske nøyaktig hva brukeren har kjøpt og solgt og hvem han eller hun er ved hjelp av denne sesjonen. Men vi kommer til å trenge en mer avansert måte enn e-post å begynne å holde informasjon rundt. Høyre? På mandag, snakket vi om Frosh direktemeldinger og hvordan i versjon en av den nettsiden, år siden, alt vi gjorde var e-post til Proctor som finnes ansvarlig for egenutført sport program, navnet, og kjønn, og hvorvidt de er en kaptein, og dorm av noen som er registrering av en egenutført sport. Så det er ikke dårlig, men han eller hun deretter måtte troll gjennom sin e-post, lage et regneark eller noe sånt det, for å holde alt organisert. Så sikkert vi som programmerere kan gjøre dette for at Proctor. Og så inn i SQL, Structured Query Language, som kommer til å se pen annerledes enn både C og PHP, og du vil dykke i mye flere hender på PHP og oppgavesettet syv men også SQL, eller SQL, er dette et språk som du bruker til å snakke til en database. Men hva er en database? Vel du tenker på en database, i hvert fall for nå, som bare blir som en Excel-fil, eller hvis du er en Mac-bruker et tall fil, eller hvis du er en Google Apps bruker et Google-regneark, det er effektivt en database, eller egentlig spesielt en relasjonsdatabase. En relasjonsdatabase er bare noe som har rader og kolonner, og du kan lagre alle typer informasjonen i disse rader eller kolonner. Men hva er fint om SQL, og om faktiske databaser, ikke bare regneark eller Google-regneark, er at du kan bruke et språk å faktisk kjøre spørringer til sette inn data, for å fjerne data, for å lete etter data, selv viktigst, og du trenger ikke å bruke det ganske manuelt som du kanskje vanligvis et Google regneark som dette. Så i SQL, er det en haug med prinsipielle uttalelser eller biter av funksjonalitet innebygd. Det er mange flere enn disse, men du kan gå en stor avstand bare ved å vite at dette språket kalles SQL har minst fire påstander du kan utnytte. Slette, for å fjerne data, Sett inn, for å legge til rader, Update, for endring rader, og velge, for å komme tilbake rader og det er faktisk hva SQL gjør. Den opererer helt på rader slik at når du setter inn, eller fjerne, eller oppdatere, eller velg hva du er å komme tilbake som en såkalt resultatsett, som en rekke rader. En haug med rader fra en tabell. Så tilbake i dag, og selv den dag i dag, du kan samhandle med database ved hjelp av en kommandolinje, men det er ikke spesielt morsomt å bruke svart og hvit stil vindu og faktisk utføre kommandoer og rote rundt databasen. Et grafisk brukergrensesnitt, eller GUI, er mye mer å foretrekke, uten tvil, og så verktøyet vi anbefaler, og forhåndsinstallert for deg på apparatet kalles phpMyAdmin. Det er en total tilfeldighet at Navnet på denne tingen har PHP i det, det betyr bare at folket som skrev dette programmet selv skrev det i PHP. Men det er til syvende og sist om å administrere en databaseserver, som en MySQL server at du kan ha, som du gjør, i CS50 apparatet. Så det er flere detaljer her enn vi trenger å bry seg om i dag, men hva er nøkkelen er at på venstre side er en liste over databasene at du har på datamaskinen, på CS50 apparatet, eller komme endelige prosjekter som du kanskje ha på en tredjepart, et selskaps nettside eller web server, som du kan betale for plass. Så til venstre er den databaser, hvorav ett er pset7 som jeg lånte fra neste uker PSet, og deretter på toppen Det merker det er en haug med faner, hvorav den ene er databaser, SQL, status, brukere, eksport og så videre. Så du kan gå en lang måte bare ved å realisere at det meste av brukergrensesnittet er i øvre venstre kolonne og øverst der oppe. Så hva kan vi egentlig gjøre med dette? Vel, la oss begynne å lage en bit av informasjon som følger. Anta at følgende er tilfelle, som vil være i løpet av få dager, du ønsker å implementere en nettside, kalt CS50 Finans, og denne nettsiden kan du kjøpe sitere unquote og selge aksjer. Og det kommer til å regne ut prisen på disse aksjene, til slutt som du ser, ved å snakke med Yahoo Finance. Hvilke, fantastisk, har en gratis tjeneste der du kan passere i en aksje ticker som GOOG for Google, og det vil gi deg tilbake Googles nåværende aksje pris innenfor det siste noen minutter minst. Så du kommer til å bruke det, i siste instans, å late for brukeren å kjøpe og selge faktiske bestandene som bruker virtuelle penger, men det aller første brukeren kommer til å se er dette innloggingsbildet som ber dem for deres brukernavn og passord. Og så, en av den første utfordringer for deg i pset7 kommer til å være å implementere bakenden database, regneark hvis du vil, som kommer til å lagre brukernes navn og passord og til slutt hvilke aksjer de eier, og hvor mange, og hvor mye penger de har, så en haug med andre ting i andre tabeller eller regneark. Så la oss ta en titt på hvordan dette kan synes ved første øyekast. Jeg kommer til å gå tilbake til apparatet og jeg er kommer til å gå til denne nettadressen her phpMyAdmin localhost / phpmyadmin og du vil se at det tar meg til et grensesnitt akkurat som vi så på skjermbilde, og her jeg har en ekstra database kalt foredrag for i dag og la meg gå videre først og klikk på pset7. Jeg synes å ha et par alternativer, ett for nye, for å lage en ny tabell, og en link til brukerne, som er en tabell jeg allerede opprettet. Så hva er en tabell? Så hvis du brukte Excel før, og hvis du har brukte tall eller Google Regneark, åpner du opp et vindu og du får en hel haug av rader og kolonner, men da du vanligvis har regneark langs bunnen, eller egne faner. Du kan tenke på hver regneark som en tabell slik at databasen, til slutt, er en Kombinasjonen av en eller flere tabeller, en eller flere regneark, i verden av en normal regneark. Så la meg gå videre og klikk på dette regnearket at jeg forhåndslagde, kalt brukere, a.k.a. Databasetabell. Og hvis jeg ruller nedover her, la meg zoome ut litt, dette er hva phpMyAdmin forteller oss er inne i denne tabellen akkurat nå. Det er litt forvirrende i begynnelsen blikk fordi UI er ikke den peneste i verden, men hva som er interessant er denne delen her. ID, brukernavn og hasj. På forhånd, og du vil være handed dette i oppgavesettet syv, Vi gir deg en fil som inneholder en super liten database tabellen, lånte faktisk fra hacker-utgaven av problemet satt to, på innsiden av hvilke der er seks rader. En for Belinda hele helt ned til en for Zamyla, og legg merke til venstre for de brukernavn er unike ID-er som en, to, tre, fire, fem, seks, heltall, og deretter til høyre er hashes. Og hvis, oddsen er, gjorde du ikke gjøre hacker utgave problemet satt to, men en hash er akkurat som en kryptert passordet med noen advarsler. Og så, det du ser her er de krypterte versjoner av alle seks av våre passord fra problem satt to er hacker-utgaven. Nå til venstre er bare noen GUI ting, redigerer denne raden, kopiere denne raden, slette denne raden. Men det som er interessant Nå er følgende. Jeg kan faktisk begynne eksperimentere med denne tabellen. Så hvis jeg går og klikk på SQL fane, får jeg denne store tekstboksen. Og dette er ikke hvordan vi skal gjør det når faktisk skrive kode. For å være klar, phpMyAdmin er bare et verktøy som er kommer til å la oss rote rundt i databasen og la oss eksperimentere med spørringer. Så for eksempel, anta Jeg utføre akkurat dette. Select, som er en av dem ordene jeg nevnte tidligere, stjerne, som representerer alle kolonnene i en tabell. Fra hva bordet? Vel, brukere. Og legg merke til det er dette rare konvensjonen i SQL hvor du faktisk bruker tilbake flått, typisk ikke apostrof og ikke doble anførselstegn når du snakker om bord navn, så bak sitatet er tingen på øverst til venstre på tastaturet mest sannsynlig. Så la meg gå videre nå og bare la det alene og bla ned og klikk Go, og vi er faktisk kommer til å se det samme. Vi har nettopp gjennomført en SQL-spørring sier velg alt stjerners fra tabell kalt brukere, og hva du får tilbake er dette. Til syvende og sist, vil vi være i stand til å gjøre det samme i kode, men for nå alt jeg ønsket å ikke var ser det i nettleseren min. Vel la oss gjøre noe litt annerledes. La meg gå tilbake til kategorien SQL, og la oss bare si at det som? Zamyla har mistet alle hennes penger, og derfor er det tid for oss å slette henne som bruker. Hun ikke lenger å logge inn. Så jeg kommer til å si slette from-- vel, vedlikeholde kapitalisering for konsistens, slette fra brukerne der. Og så kan vi ha disse predikater, eller disse kvalifiseringer, på slutten av min uttalelse hvor og hvordan kan jeg slette Zamyla? Ved hennes navn Zamyla, så kolonne, en av kolonnene ble kåret, så der name = "Zamyla". Og her jeg bruke doble sitater eller enkle anførselstegn, du bare bruker ryggen flått når snakker om navnene, for eksempel, av tabeller eller felt. Og la meg klikke Gå hit. Og nå, er nettsiden blir litt uptight. Eller vil du virkelig ønsker å utføre slette fra brukerne der navn lik Zamyla? Ja. Så nå, hvis vi går tilbake til mitt bord ved å klikke brukere, merker at Hm. Jeg goofed. Og faktisk, jeg slags klikket bort så fort du ikke engang se red feilmeldingen, kanskje. Hva har jeg gjort galt? PUBLIKUM: Du trenger ikke å utnytte hennes navn. DAVID J. MALAN: Ja, jeg kapitalisert hennes navn, men hennes username-- faktisk jeg gjorde et par feil, ikke sant? One, er hennes brukernavn zamyla, små bokstaver Z, og kolonnenavnet er brukernavn, ikke navn, så la oss gjøre dette igjen. La meg gå videre og slette fra brukere der brukernavn lik quote unquote "Zamyla". All right? Så dette ser litt bedre, la meg gå bla ned og klikk OK. Det er fortsatt kommer til å kjefte på meg for å være sikker. Jeg klikker Ja, og nå ser vi, oppriktig dette skjedde, egentlig rask, mindre enn én andre sikkert, dette er nøyaktig den spørringen som ble henrettet. For å bekrefte, la meg klikke brukere og faktisk nå Zamyla er borte. Nå la oss gjøre det motsatte. Anta at Gabe ønsker å registrere for nettstedet. Hva er SQL-spørring, hva er kommando jeg kan skrive for å legge til Gabe? Vel det er ganske grei. Sett inn brukere, og nå det blir litt kryptisk. Jeg trenger å spesifisere, til serveren, hvilke felt jeg ønsker å tildele. Jeg vet egentlig ikke om hva Gabe ID tallet er, så jeg kommer til å hoppe over det. Jeg er i stedet kommer til å si brukernavn, hash, og deretter de verdiene jeg ønsker å sette det kommer til å være Gabe. Og da hans hasj, jeg vet ikke. Så for nå, kommer jeg til å la det som en stor å gjøre. Vi vil komme tilbake til at i det problemet satt spec for hvordan du faktisk gjør det. Så legger merke til, igjen, syntaksen. Sett inn tabellnavn, deretter en parentes liste av feltene, kolonnene du vil legge til verdier til, og så bare de samme bestilling igjen å høyre for de verdiene du ønsker å legge til, og det er bare å pakke fordi teksten er litt lang. Så nå la meg klikker på Start. En rad satt inn. Og nå hvis jeg går tilbake til brukere, hva er interessant er at ikke bare er Gabe nå i database, hva er tydeligvis hans ID? Vel det er sju. Hvorfor er det sju da jeg ikke legge det? Så også dette er en av de funksjonene du får av databasen. Mange innebygd funksjonalitet. Det viser seg at når opprettet denne tabellen, Jeg forhåndskonfigurert det er automatisk tilordne en ID på en slik måte at det intervaller. Så hvis du noen gang har lett rundt, og så på hva din Facebook-ID tallet er, i disse dager er det ikke egentlig en ting å gjøre, men Facebook som et API, Application Programming Interface, hvor du kan komme tilbake en hel haug med data om selv, om dine venner, og tilkoblingene. Og det som pleide å være snill kult, tilbake i dag, var å slå opp hva din Facebook ID-nummer var. Mark Zuckerberg, For eksempel er tre siden han var forfatteren av nettstedet. Og som historien går, skapte han to testkontoer, brukere en og to, som han deretter slettet. Og så, Zuck, er som hans brukernavn på Facebook, er ID nummer tre, og alle av oss har tall mye større enn tre i disse dager. Faktisk, på et tidspunkt Facebook flyttet bort fra selv å bruke en int, som er en 32-biters verdi, til å bruke neste steg opp, egentlig en lang lang så at de kunne imøtekomme enda flere brukere som registrerer seg. Så en morsom liten historisk faktum. Så det er bare grunnleggende syntaks som vi kan gjennomføre et par spørringer, men vi kan faktisk gjøre en haug flere ting med SQL. Og du vil se, til slutt, i oppgavesettet syv at du må lage en antall design beslutninger, blant dem kommer til å være hvilke data typer å bruke. Så akkurat som i C, er det data typer i en database, som MySQL, og datatypene du har å velge fra inkludere disse feltene her. Char, varchar, Int, stor int, desimal og dato tid, og mange andre. Så la oss faktisk gjør dette. La oss late som vi ikke hånden du denne brukerens tabellen og la meg gå videre og skape, for meg selv, i forelesningene database-- faktisk la meg gå videre og slett bordet jeg har i her allerede slik at vi faktisk kan lage dette. Uff da. Jeg kommer til å slippe dette tabellen, og nå er jeg kommer til å gå igjen til forelese database over her, Jeg kommer til å opprette en tabell kalt brukere og la oss bare gjøre tre kolonner utgangspunktet og klikk OK. Nå, for det meste, igjen, dette er bare bruker dette grafisk verktøy kalt phpMyAdmin, og hva vi gjør nå er å skape et bord. Så dette er som å gå File, New, og skape en ny Excel-fil. Så det å spørre meg noen spørsmål, fra venstre til høyre, hva er navnet på den første kolonnen, og deretter navnet på den andre kolonnen og navnet på den tredje. Så la oss gjenskape dette. ID, og ​​deretter brukernavnet var en, og deretter hash var en annen. Så hva bør datatypen være nå for et felt som ID? Her er hele listen over datatyper tilgjengelig for deg i en database, og nå kan vi bare gå med int. 32-biters verdi, vet jeg ikke tenke realistisk jeg er kommer til å ha mer enn 4 milliarder brukere i kontoen min, i min tjeneste, så jeg kommer til å holde i bevegelse videre til neste spørsmål. Jeg kommer ikke til å spesifisere en lengde eller verdier, det er ikke aktuelt her for en int, per se. Og nå kan jeg spesifisere, tilsynelatende, en standard verdi, som jeg ikke kommer til å spesifisere. En sortering, jeg vet ikke hva det er. Et attributt. Nå er vi faktisk gjør har et design beslutning. Så det er noen felt her, ikke alle som er aktuelt, men usignerte betyr bare hva? At int må være? Bare ikke-negative. Så det må være 0 på opp. Nei, jeg kommer ikke til å sjekke fordi Jeg ønsker hver bruker skal ha en ID, det kan ikke være null. Og da får vi litt mer interessante designbeslutninger som dette. Vi vil komme tilbake til dette i et øyeblikk, men hva en annen funksjon i database er, er at du kan fortelle databaseserveren gå videre og optimalisere deg selv, din RAM og harddiskplass, slik som velger, og innstikk, og sletter, og oppdateringer er virkelig rask. Kontrast til dette med pset5. Hvis du ønsker å slå opp noe i hash table, som du tenker på som en database, som måtte gjøre alt arbeide for å gjøre din hash table fort. Det er som, selvsagt, du. Høyre? Du måtte sette inn hele tiden bot tuning ting, får en hash-funksjon rett, å finne ut hvordan mange bøtter å ha. Men det som er fint, igjen, om en database er du bare punt alle dette til andre mennesker som har tenkt dette gjennom for deg, og hva Jeg kommer til å si her i henhold til indeks er at min ID-feltet kommer til å være den primære måten å identifisere brukere i denne databasen. Jeg kommer ikke til å tenke av Zamyla som Zamyla, Jeg kommer til å tenke på henne som nummer 6. Hvorfor er det kanskje bedre intuitivt å tenke på og modell hver av dine individuelle rader med et tall i stedet for noe som en snor, som Zamyla eller Gabe eller lengre streng fortsatt? Yeah? PUBLIKUM: En ID er unik? DAVID J. MALAN: Si det igjen? PUBLIKUM: En ID er unik? DAVID J. MALAN: En ID er unik, men suppose-- som tilfellet generelt med brukernavn, anta Jeg sier også at det kan bare være én Zamyla i verden, og bare én Gabe. Jeg kunne pålegge det unike begrensningen på strenger, også, hvis jeg ønsket. Så det er ikke en dårlig tanke. PUBLIKUM: Sikrere. DAVID J. MALAN: Sikrere, hvorfor? PUBLIKUM: Du kan ikke fortelle hvilke er som, som i bruks. DAVID J. MALAN: OK, du kan ikke fortelle hvilken bruker er noe så det er en personvern aspekt til det, spesielt hvis de IDer kanskje vises i nettadresser. Så sikker, som kunne type arbeid, også. Andre tanker? Yeah? PUBLIKUM: Det er enklere å utføre operasjoner på en int. DAVID J. MALAN: Det er den virkelige kicker. Det er bare mer effektiv, eller enklere for datamaskinen, å utføre operasjoner på et heltall. Høyre? En int er garantert å være 32-bit, mens Zamyla er noen få tegn, Gabriel er noen flere tegn, Davenport er veldig lang, og så det er ikke spesielt effektivt å bruke strenger å sammenligne verdier og ser for felt, og oppdatere felt, hvis du kan komme unna med bare ett heltall. Bare 32 bits. Så brukernavn, også, på denne måten, trenger ikke å være unik, selv om de sannsynligvis burde være, og selv i dette altfor en bruker kan få lov til å endre sitt brukernavn. Så la oss nå la dette som primære middel for å identifisere brukeren. Dette forteller databasen gå videre og optimalisere selv slik at ser ups på ID er super rask. AI, fryktelig kalt, bare betyr Auto Increment, og dette er sjekken boksen vi må sjekke å spesifisere at ID-feltet til oppdateres automatisk for meg, og så kommer jeg til å bla til høyre her og ærlig jeg er egentlig ikke interessert i noen flere av disse feltene. Absolutt ikke i dag. Så jeg kommer til å gå tilbake hit, til den første kolonne, der Jeg trenger å oppgi brukernavn og hasj, og la oss minst fokus på andre en for nå. Int er sannsynligvis ikke den rette samtalen, så hva gjør mer fornuftig kanskje? PUBLIKUM: Tekst. DAVID J. MALAN: Si det igjen? PUBLIKUM: Tekst. DAVID J. MALAN: Tekst? OK, jeg hørte teksten. Hva annet? Vi slags har en haug med valg som er tekstlige i naturen. Så når, og hvorfor, gjør du bruker noen av disse? Vel røye, i motsetning til hva du kanskje tror, ​​er ikke en eneste karakter. Det er et bestemt antall tegn. Så hvis vi vet at alle brukernavn må være som åtte tegn, som anvendt for å være vanlig i eldre datasystemer, jeg kunne si røye og da kunne jeg si 8 her. Det er da den tredje kolonnen blir aktuelt når du oppretter en tabell. Men det er litt irriterende fordi noen mennesker kan ønsker å ha en lengre brukernavn enn åtte tegn, noen mennesker kan ønske å har en kortere brukernavn, så hvorfor forplikte meg til et bestemt nummer? Hvorfor ikke ha en variabel antall tegn og bare sier at den maksimale lengden av et navn er, vet jeg ikke, i likhet med 64 tegn. Jeg kan ikke tenke på noen venner som har navn lengre enn 64 tegn, og selv om det er for kort du kunne sikkert bump det opp vilkårlig. Så varchar er en variabel antall tegn. Innholdet er ikke en dårlig instinkt, og ærlig den slags gjør det de sier, men et tekstfelt kan være som 65.000 bytes minst. Det er sannsynligvis overkill for en feltet, og faktisk, yup, 65535. Det er sannsynligvis overkill for en navn, så vi vil holde, typisk, med varchars for tekstlig feltet og hasj, også. Hasj, viser det seg, kan vi gjøre en varchar så godt eller noe sånt, men vi vil ikke fokusere i dag på kryptografi der og tallene Det kan vi faktisk ønsker å bruke for sin lengde. Men la meg bla ned til høyre. Du kan bare ha én Hovedindeksen på et bord, men jeg ønsker å bruke noen av disse, nå, for å brukernavn, ville du si? Hva skal brukernavn være basert på en vag forståelse av disse fire alternativene? Bare ved navnene deres? PUBLIKUM: Unique. DAVID J. MALAN: Så unik, ikke sant? Så det viser seg at ikke bare kunne du forteller en database, på forhånd, Dette er den primære måten å identifisere felt. Du kan også si at dette er kommer til å bli et unikt felt. Det kommer ikke til å være det jeg stole på, men jeg vil gjerne databasen til hovedsak har at hvis tilstand, så at hvis jeg noen gang prøvd å registrere to brukere med samme navn, databasen flate ut er ikke til å la meg. Jeg har kanskje noen ekstra kode i PHP som hindrer så mye, men databasen også kan sørge at det aldri kommer til å skje. Nå, som en side, særlig ettersom du tenker på endelige prosjektene, husk det indeksen og full teksten er faktisk ganske nyttig. Hvis du har en større database, ikke med dusinvis, men med hundrevis eller tusenvis eller millioner av felt, kan du også fortelle databasen på forhånd dette er et felt jeg skal å være søker på mye. Kanskje det brukernavn, kanskje det er bio, hvis du er å lage en Facebook-lignende nettsted som har avsnitt som brukerens tillatt å spare, og hvis du ønsker å fortelle databasen på forhånd Jeg kommer til å være søker på dette feltet mye, men det er ikke nødvendigvis unik, du kan spesifisere lage meg en indeks. Eller, kan du si også tillate meg å gjøre slags vilkårlige søk som Command eller Ctrl F, som deg kanskje i et tekstbehandlingsprogram, slik at du kan se vilkårlige strenger eller unders på dette feltet. Med andre ord, vi får til det punktet i semesteret der du ikke trenger å bekymre deg hvordan å implementere ting effektivt. Du trenger bare å vite om hva design beslutninger for å gjøre slik at du er bruke de riktige verktøyene for handelen for å utnytte funksjoner at andre mennesker har bygget for deg. Så til oppsummering, bør bare primær har en, kan du bare ha en, og det er den tingen du forplikter deg til hjelp til å identifisere felt unikt. Unik er bare lik i ånden, men kanskje du bare sporadisk bruker det, men du vil at databasen til å pålegge den. Indeks betyr bare preemptively fart på sakene i fremtiden slik at jeg kan søke etter ting i dette feltet. Og så fulltekst er generelt for avsnitt, eller essays, eller store kropper av teksten der du kan også være lurt å ha jokere som tilsvarer stjerne. Høyre. Så det var litt en masse til alle på en gang. La oss se om vi ikke kan destillere et par av disse funksjonene og deretter bygge noe ganske enkel, men kraftig. Så blant annet design beslutninger du er til slutt kommer til å ha det sammen linjene av lagringsmotorer. Og la meg bare gjøre omtale av dette i påvente av endelige prosjektene, og påvente av la oss say-- nei la oss gjøre dette. La oss bygge denne lille programmet først. Jeg kommer til å gå inn i min terminal vinduet, og i her ikke er bare counter.php, som vi nå går å bli kvitt så ikke lenger germane, men vi har en hel haug av kataloger og dette kommer til å være svært like i ånden til hva du vil se i oppgavesettet sju. Så vi har tre kataloger omfatter offentlig og maler, som er akkurat der vi slapp på Mandag med hele vår MVC paradigme. Og til oppsummering, i det offentlige kommer til å gå enhver fil som jeg ønsker brukerne faktisk v kunne besøke i deres nettleser via URL. Mal. Hva gjorde vi satt i maler? Hva slags ting? Det var ikke mye, men et par filer minst på mandag. Yeah. PUBLIKUM: Header og bunntekst? DAVID J. MALAN: Header og bunntekst. Så har vi noe lignende i dag, også. Vi har fått noen flere filer, men Footer jeg ser, Header jeg ser, og deretter en haug med andre filer. Så dette er tilsvar av V MVC visningen, som, igjen, vil være litt mer klart i oppgavesettet syv, men dette er bare en mappe jeg er legger mye av mine estetikk. Mye av min HTML, mange av mine former. I mellomtiden, omfatter, er en annen katalog som har disse tre filene og la oss ta en rask titt på disse. Jeg kommer til å gå videre og åpne opp config.php. Som det viser seg, mye som tidligere i begrepet, du skarpe inkludert CS50 dot h med pset7. I dagens eksempel, du kommer for å gjøre det tilsvarende av at med en krever uttalelse som effektivt inkluderer disse flere linjer. Så for å være klar, er dette en fil kalt config.php. Og legg merke til hva det gjør. Det er tydeligvis gjør noe kryptiske, snu på feilmeldinger slik at du kan se dem i nettleseren. Det er, da, tydeligvis krever to andre filer så dette er som #include i C, og så dette vi fikk se, og vi har stolt på, slås denne på som handlekurv lignende funksjonalitet. Dette betyr en cookie vilje bli sendt frem og tilbake. Så hvorfor er dette interessant? Vel, hvis vi går tilbake til denne katalog og åpne opp, for eksempel, constance.php. Legg merke til at PHP støtter også konstanter, det er ikke helt som #define i C. I stedet, du bokstavelig talt sier definert, og varsel som jeg har lagret på forhånd fire konstanter i denne filen. En for dagens database, for passordet mitt, for mitt brukernavn, og for navnet på serveren. Så disse er faktisk kommer til å være ganske lik i oppgavesettet sju. Og til slutt, og det er der jeg er kommer til å få noen fine funksjonalitet fra de ansatte, i functions.php er en haug med kode vi har skrevet, og jeg stjal noe av dette fra oppgavesettet syv for i dag, gjør at en haug med ting og la oss bare se på en av dem spesielt. Denne funksjonen her, spørring, kommer til å være PHP-funksjonen vi kaller for å kjøre SQL. Et øyeblikk siden var vi ved hjelp phpMyAdmin, men det er bare for slags læringsformål og diagnostiske formål og glemme databasen sett. Når du faktisk bruker din database, du, det menneskelige, er åpenbart ikke kommer å være å trekke opp en web siden hver gang noen registrerer. Du kommer til å skrive kode som innstikk og sletter brukere på etterspørsel, og vi kommer til å gjøre dette ved hjelp av spørringsfunksjonen. Hvis jeg ruller nå nede, det er kommer til å bli noen flere funksjoner. Omadresser kommer til å være en funksjon vi skrev for deg som lar deg sender brukeren til en annen URL, og gjengi er en funksjon, ganske like vi så på mandag, som faktisk gjør en mal, men mer på disse i form av pset7 egen spasertur gjennom. For nå, la oss gå videre og gjøre dette. La meg gå inn i mitt foredrag bord og se at det er i dag ingenting her ennå, og la meg også gå inn i min offentlig katalog, hvor det er bare én fil, index.php. Denne filen ser ut til å være superenkel i øyeblikket, ser det akkurat som dette. Veldig mye som hvordan vi slapp på mandag. Jeg krever denne filen, config.php, som er i en inkluderer katalogen, som er i dot dot, mine foreldre, og da er det bare å gjengi denne filen. Så hva er denne filen? La oss åpne opp i mine maler form.php, og vi får se dette. Super enkelt, tydeligvis dette skjemaet er kommer til å sende med en $ _GET eller $ _POST. Hurtig tilregnelighet sjekk. Bokstavelig talt visuelt søke filen. Metoden tilsvarer innlegg. Så det ikke kommer til å bruke nettadressen, som Google gjør, det kommer til å sortere av hide informasjonen bak kulissene og det er kommer til å sende inn til en fil som heter register.php, og det er filen Vi har ennå ikke skrevet men hva dette kommer å se ut som dette. Hvis jeg går til en egen side Dette er hva localhost / index.php ser ut. Og igjen, er serveren bare antar index.php. Enter. Så det er der vi er på, og hva jeg ønsker å gjøre er kunne skrive ting som David, og deretter telefonnummeret mitt, som vil si 617-555-1212 for nå, registrer og nå register.php ble ikke funnet. Så jeg trenger for å gjennomføre dette. Så la oss raskt piske noe sånt som dette opp. La meg gå inn i min offentlig katalog og gjøre gedit av register.php, og nå kommer jeg til å gå videre og starter PHP-modus, som vi gjorde på mandag, og nær PHP sin tag, og la oss gjøre et par ting. Så en, jeg vet, fra ha skrevet at form, at jeg ønsker å se etter følgende. Hvis det er tomt, hva brukeren skrevet inn i navnefeltet, og deretter Jeg kommer til å si noe som beklager mangler navn. Beklager, i mellomtiden, er ikke en innebygd PHP ting, det er en funksjon vi skrev i functions.php for pset7 slik at du har tilgang til den. Else if det andre feltet er tom, nummer, da er jeg kommer til å be om unnskyldning til bruker og si mangler nummer. Lagre denne filen. Nå la oss gå tilbake til nettleseren min, gå tilbake til forumet prøv igjen. Registrere. OK. Ingenting har skjedd, noe som er bra. Jeg fikk ikke en feilmelding. Men hvis du i stedet, la oss laste dette side, og ikke gi noe. Pokker. Gjøre det. Registrere. Hva har jeg gjort galt? Dersom tomt, $ _POST navn. Si igjen? Oh, selvfølgelig. Jeg glemte den viktigste delen, som er require ("../ inkluderer / config.php."). Jeg trenger å ha tilgang til beklager funksjon, som Derfor ingenting skjedde. Funksjonen faktisk ikke eksisterer. Så la oss prøve dette igjen. La oss oppdater siden, klikker du på Registrer. OK. Det er det. Så, resultatet vi er se her er resultatet for å ringe en unnskyldning funksjon, super enkelt, og det skrives bare ut uansett Jeg gir det som et argument. Greit, så la oss samarbeide. La oss gi mitt navn som David, registrere, mangler nummer OK la oss gi det også. 617-555-1212. Registrere. OK. Så alt er bra nå, bare ingenting interessant som skjer. Så nå la oss gjøre noe mer interessant skje som dette. La meg gå inn i phpMyAdmin, og la oss faktisk lage en tabell kalt brukere, Jeg kommer til å gi det tre kolonner, og jeg vil raskt lage ID, og ​​deretter navn, og deretter nummer, og ID-feltet er jeg kommer til å forlate som en int. Navnet feltet jeg kommer å forlate som en varchar, og vi vil si 64, noe vilkårlig. Tallet jeg kommer å gjøre, vet du hva? Vi går inn i støtte amerikanske tall her, så jeg kommer til å gjøre noe som røye og deretter 10 tegn max for et retningsnummer og deretter sju siffer. Og så over her, kommer jeg til å angi auto tilvekst dette feltet, gjøre dette til en primærnøkkel, og Jeg kommer til å gå videre og ikke kontrollere en hvilken som helst av disse andre bokser. Så når jeg nå endelig klikker på Lagre, og jeg går tilbake til min bruker tabell, dette er hva det ser ut som om jeg nå klikke en ny fane struktur. Så dette, for å være klar, er bare phpMyAdmin måte si din database tabell har en ID, et navn, og et antall med de spesielle konfigurasjoner og vi vil ignorere resten av feltene der for nå. Så nå hva ønsker jeg å gjøre? Så hvis jeg går nå inn i min kildekoden, hvis alt er bra Jeg ønsker å kjøre følgende spørring. Sett inn, og jeg kan bare sier brukerne jeg ikke strengt trenger disse tilbake flått hvis det er ikke et farlig ord som brukere. Jeg kommer til å si navn, nummer, og så her er jeg ikke kommer til hardt koden den sifret av verdiene ennå. Jeg kommer til å sette to spørsmålstegn. Og dette er en konvensjon på mange språk der hvis du vil ha en plassholder for en streng du kommer til å bruke spørsmålet merkene, av grunner vi vil komme tilbake til å prate om sikkerhet, og her Jeg kommer til å passere i de to felt legge inn navn, og deretter legge nummer, og nå lagre filen. Og nå kommer jeg til å gå ned her er en super bare si rendersuccess.php, som kommer til å være en annen mal. Jeg kommer til å lage veldig fort. Geditsuccess.php og jeg skal bare å si H1 suksess i denne filen. OK. Så nå, la oss gå tilbake til nettleser, hvor jeg har besøkt før. La oss gå videre og bekrefte at jeg skrev i David, skrev jeg i et telefonnummer, registrer deg. Pokker. Hva har jeg gjort galt? Så jeg ser en feil her, du ha en feil i din SQL-syntaks. La meg gå tilbake til gedit, la meg gå tilbake til register.php, og hva gjorde jeg utelater at var viktig forrige gang? Jeg trenger dette. Du ønsker å vite at andre enn fra har lagt merke til før, men jeg trenger dette. Så nå la oss gå tilbake, og dette var nyttig å se i nettleseren og det er derfor i config.php vi spytter ut feil. La oss gå videre og laste, klikker Fortsett, suksess. Så nå la meg gå over til min database her og klikk på Brukere, og bla, og merker jeg nå har David i databasen min her. Nå teknisk dette nettstedet er ennå ikke på det offentlige internett, så jeg kan ikke ha andre folk i å sette her, men hvis jeg nå lyst til, for eksempel, send meg en tekstmelding. La oss gå ut på en lem her og se om dette faktisk fungerer. Jeg kommer til å gå videre og slette denne raden og vi vil viske dette ut i video senere slik at vi ikke har Hele internett tekste meg, og vi vil nå gå opp til Nettleseren og vi vil gå over til å forelese og vi vil skrive i forskjellige nummeret her, registrere, suksess. Så nå, er mitt eget nummer antagelig i databasen, og nå den morsomme delen. La oss faktisk bruker PHP til å gjøre noe programmatisk, enten fra kommando linje eller fra et annet sted, og for nå er jeg bare kommer til å holde det enkelt og jeg kommer til å gå inn i min katalogen her og gjør følgende. Gedit script la oss si, vi vil kall det tekst, #! / bruker / bin / env PHP, som vi så forrige gang. PHP. Nå skal jeg krever inkluderer config.php, selv om dette kan indusere en liten feil. Og nå kommer jeg til å gå videre og si rader, spørring, velger stjerne fra brukere, og nå her jeg kommer til å gjøre en teknikk fra forrige gang for hvert rader som rad. Og jeg kommer til å gjøre noe enkelt. Printf la oss si navn er dette, og nummer er dette, backslash n. Og nå kommer jeg til å passere i rad sitere unquote navn, og rad quote unquote nummer, og nå la oss gå videre og min terminalvindu chmod dette a + x å gjøre dette skriptet heter tekst kjørbar. Og nå la oss kjøre teksten. OK, så fremgang. Så jeg har nå skrevet en kommandolinjeskriptet, på et språk som heter PHP, som, på grunn av at krever linje, har tilgang til alle de konfigurasjonen konstanter at jeg spesifiserte. Navnet på databasen og så videre. Faktisk, bare for å være klar at dette ikke er et lykketreff, la meg gå videre og registrere, veldig fort, noen andre som Rob og vil gi ham 555-1212 nummer. Og nå, hvis jeg kjører skriptet igjen, merke strøm av hva vi gjør med databasen. Nå har jeg umiddelbart sett hva andre to rader er i min database. Så nå la oss prøve å gjøre noe enda mer avansert på innsiden av, og dette er den delen vi har ikke testet på forhånd, så sist gang jeg gjorde dette ting gikk fryktelig galt, vi har video til at effekten. Egentlig, ja, morsom side. Så siste gang, i en forelese som to år siden, vi bestemte oss, bestemte jeg meg, for å være alt dette ville være en god idé å dynamisk generere e-post i klasse, med hele databasen CS50 studenter, som hadde gitt oss sine tall og deres mobiltelefon operatører som du kanskje husker fra pset0, hvordan å resonnere, viser det seg Jeg hadde en mindre feil i mitt program og gjorde et par feil i 2012, tror jeg. Der, en jeg hadde for løkke som gjorde akkurat denne typen ting, iterere over hele databasen, å få et navn fra databasen, navn fra databasen, og deretter på hver gjentakelse av at løkken jeg sendte en e-post. Men i stedet for å sende en e-post, jeg sendte en e-post første iterasjon, og to e-poster om andre iterasjon, sendte tre e-poster i andre iterasjon, som som du kanskje husker fra vår drøfting av asymptotisk notasjon denne store O av dårlig, som n squared er hvor mange meldinger jeg har sendt, men det var ikke engang e-post det var tekstmeldinger. Og som dere vet, er ikke til stede super høy mot slutten av semesteret og så jeg trodde det ville være søt på tid til å si: "Hvorfor er ikke du klasse?" I tekstmeldingen jeg sendt til hele klassen, og det var morsomt å like 50% av klasse, men de øvrige 50%, hvorav noen hetta ut, sendte jeg utrolig unnskyldende søte toner til de ansatte beklaget etter å ha gått glipp av forelesningen bare dette en gang, ikke sant? Så det ville fryktelig forkjært. Så i denne ånd, la oss prøve dette igjen, men bare med nummeret mitt. På forhånd, functions.php, Jeg har skrevet denne funksjonen her. Det kalles tekst, og det tar inn tre argumenter. En rekke, en bærer, og en melding. Jeg bruker en bryter uttalelse, som vidunderlig PHP ta strenger, ikke bare heltall, og jeg ikke implementere all den støtte for dette ennå, Jeg har nettopp gjort AT & T og Verizon. Fordi det viser seg at med disse bærere de har e-post til SMS-gatewayer, hvor du faktisk kan send en e-post til en adresse som telefonnummer på vtext.com og hvis brukeren har ikke blokkert meldingene, vil det gå gjennom er en tekstmelding. Nå for å gjøre dette, er jeg nødt til å legge ett felt veldig fort til min database. Jeg kommer til å gå inn min struktur, og jeg er kommer til å gå videre og legge en felt på slutten av tabellen. La oss klikke Go, og jeg er kommer til å kalle dette carrier og for nå kommer jeg til å forlate dette som en bar tekst, men vi kan være mer avansert i fremtiden. Jeg kommer til å gå raskt i mitt bord, og jeg er kommer til å kvitte seg med Rob, fordi det er en falsk nummer, Jeg kommer til å gå inn i edit her, og jeg er kommer til å endre min operatør manuelt å være Verizon, som det er, og nå over her. La oss gjøre en rask tilregnelighet sjekk. La oss åpne opp vår tekst script, som ser slik ut, er carrier% s. Vi gjør mye mer feil sjekker enn jeg gjorde i 2012, transportør. Og nå, jeg kommer til å gå fremover og re-kjøre skriptet. OK. Carrier er Verizon, som betyr nå forhåpentligvis kan jeg gjøre akkurat dette. Riktig dette året, forhåpentligvis, here we go. Så innsiden av dette for loop, jeg er skal ikke bare ha denne printf, Jeg er også tenkt å ringe tekst og bruken av denne funksjonen tilbakekalling var det tar for et tall, en bærer, og en melding. Så la oss se, er antallet kommer til å være rad quote unquote "nummer", rad quote unquote "carrier" og den siste var melding. Ikke skru opp dette året, semikolon. OK. Vi krysser fingrene. La oss se om dette fungerer. All right, så. Here we go. La oss låse opp telefonen, krysse fingrene, for faen. Udefinert variabel may-- oh Vent, vent, vent, virkelig rask. Virkelig fort, virkelig rask. Dette er absolutt verdt det. La meg ta, la meg ta, uh-oh. Takk, tekstene har startet fra noen andre. La meg gå videre og åpne opp virke rask, dropbox.php / mail her. Standby. Totalt verdt det. Nedlastinger. OK, kilde src8m. OK. Trenger en mer linje her. Oh det er det, det er i Frosh Direktemeldinger, er det i registeret på tre. Oh hei, Margo, tusen takk. OK, og jeg manglet denne linjen her. Så la meg raskt hente denne linjen med kode, som inkluderer post eller biblioteket at jeg faktisk ønsker å bruke, Jeg kommer til å raskt gå tilbake til funksjoner, Jeg kommer til å gå til toppen av dette fil og krever denne filen også, og nå skal jeg virkelig krysse min fingrene når jeg går tilbake til kommando linje script, som er på innsiden av dagens lokale verten katalogen. Kjør tekst. Enter. Mail. Standby. Standby. Mail. Oh, OK. Here we go. Mail får ny PHP mailer. Gjorde jeg dette riktig? Pokker. To-- oh, vent, vent, vent. Stand by. Jeg lover, dette er kommer til å være så verdt det. Adresse. Dette er grunnen til at jeg ikke gjør det eksempler rett før klassen. Ugh. Følgende mottakere mislyktes. La oss prøve en siste ting. SMTP satt fra, legger adresse, adressen er faktisk at. La oss prøve denne siste delen i adressen. Aw, jeg er virkelig trist akkurat nå. Takk. Men jeg setter pris på alt tekstene du har vært å sende. Du har fått dette David. Du blåser det. La oss la det være det og vi vil fikse på mandag. Se deg da. Daven FARNHAM: Og nå Deep Tanker ved Daven Farnham. Hvis et binært tre faller i skogen og ingen er rundt til C it-- [humrer].