[Musikken afspilles] DAVID J. MALAN: Okay. Velkommen tilbage. Dette er CS50. Dette er slutningen af ​​uge 8. Og som du ved, har vi temmelig almindelig kontortid i et par af spisesale, herunder Annenberg. Og nogle af holdet venligt tog nogle billeder på det seneste. Og til ære for Halloween, vi troede, vi havde deler en, der hellere fangede os ved overraskelse her i Annenberg Hall bare den anden aften. Din klassekammerat Jacob poserede for dette billede, men var mere morsomt var på Facebook, den efterfølgende samtale, der skete bagefter. Hans første indlæg i svar til hans foto var dette. Et par minutter senere, besluttede han til en op selv med dette. Det gik derefter at gå til denne, og derefter endnu mere underholdende er, når hans mor ringede i. Og så i sidste ende, det synes dette var blot en vidunderlig kneb for en spille det der foregår. Så hvis du gerne vil at se Jacob og andre, blandt dem Cynthia Meng, der er bag kulisserne på CS50 zone personale, hoved til denne URL, og denne leg her. Så uden videre, vi i dag fortsætte denne kig på web programmering, og selve skabelsen af ​​programmer der ikke kører på din kommando linje, men i stedet køre inde i en browser. Formentlig nu, eller meget snart, du kommer at være midt i gennemførelsen din egen web-server, som er forskellig fra webprogrammering. Webserveren i pset6 handler om skrive software, der ved, hvordan man tager HTTP-anmodninger fra en browser, eller endda fra dig, et menneske, med et program kaldet Telnet, og derefter reagere på disse anmodninger enten ved at spytte ud en HTML-fil eller en jpeg, eller en gif, eller endda en php fil. Men med en web-server, er det ikke formodes at bare åbne en PHP-fil, noget, der sluttede i .php, og derefter spytte indholdet ud. Det er meningen at gøre hvad filen først? Så at sige. Ikke kompilere det, vi sagde i mandags, men rather-- Så fortolke den. PHP er et fortolket sprog, og så en af ​​de vigtigste funktioner i din web server, omend gennemføres af os, er denne evne til din webserver at lægge mærke til, oh. Dette er en fil, der sluttede i .php. Lad mig ikke bare sende det til bruger ligesom det er statisk indhold, men hellere lade mig læse det linje linie, fra venstre mod højre, og fortolke den. Og for at gøre, at du fyre vil hovedsageligt punt til et program i apparatet, og på en masse af edb-systemer, bare kaldet PHP. Det er navnet på PHP den sprog egen tolk. Så det stykke, vi gennemfører for dig, og hvad der er tilbage for dig, i sidste ende er et antal stykker, blandt hvilke er ved at gennemføre støtte for statisk indhold. Men nu, og med problem sæt syv, er du vil begynde at overgangen til faktisk skriver PHP kode der bliver fortolket i at tale med en bagende database, der lagrer information. Så lad os bedre at forstå først et par af disse superglobale variabler og hvor meget strøm du komme ud af boksen for fri med et sprog som PHP. Ting du ikke har at gennemføre selv. Så så vi på mandag $ _GET, som er en superglobal, der er bare PHP taler for en global variabel, du kan få adgang til overalt. Og hvad der er inde i $ _GET? Hvad er inde i dette superglobal at vi ser? Sikkert statistisk på mindst én person kender. Hvad er inde i $ _GET? Ja? PUBLIKUM: Det er de variabler du lægger i søgestrengen. DAVID J. MALAN: Perfect. Det er de variabler, du sætte i søgestrengen. Så i vores ældre eksempel omimplementere Google, når vi havde en URL, og derefter spørgsmålstegn, som afgrænser begyndelsen af ​​HTTP parametre, så havde vi q lig noget, ligesom q er lig med katte, hvad ville automatisk gå inde af at $ _GET super global for dig, på grund af PHP, er en nøgle af Q, og værdien heraf af katte. Med andre ord, $ _GET og alle disse ting er associative arrays, hash tabeller slags, at opbevaring af nøgler og værdier. Nu tilbage i pset5, hash tabel, du måske har gennemført, eller prøv du måske har gennemført, virkelig var faktisk en associativ array, en datastruktur hvor du kan knytte nøgler med værdier. Men i pset5 var værdierne trivielt. Værdien var hovedsagelig sandt eller falsk. Er ord i ordbogen? Så når du hashet et ord som æble at se, om Apple er i ordbogen, din check funktion formentlig returnerede sandt eller falsk. Så det er effektivt værdi, vi får tilbage. Men vi så på mandag kort, kan du sikkert associere mere interessant værdier end bare sandt eller falsk med nøgler, som Apple. Du kunne faktisk returnere en vilkårlig streng, og faktisk, det er, hvad $ _GET og disse andre variabler lade dig gøre. Så $ _POST er ens i ånden, men hvis du sender en formular med posten, en anden HTTP metode, der er bruges til ting som kreditkort, og private oplysninger, og selv binær information som billeder, disse ting ender inde i $ _POST. Og faktisk for filer som JPEG-filer og whatnot, der er endda en anden, der ikke er heroppe kaldet $ _FILES så godt. Så server vil vi ikke dvæle ved alt meget, men det giver dig adgang for at sortere på lavere plan detaljer om selve serveren at du bruger. Cookie og session, selvom, vi faktisk se nu. Det sidste er det, vi bruger til at gennemføre forestillingen om en indkøbskurv. En super enkel, men tilbagekaldelse at vi havde dette eksempel her, tælle hvor mange gange du havde besøgt denne side før. Men i dag, i stedet for bare at se på virkningen af ​​denne, lad os åbne Chromes Inspector, som du kan normalt gøre ved at højreklikke eller holde Ctrl klikke et sted på en webside, og vælg derefter inspicere element. Eller du kan gå gennem menuerne at vi beskriver i pset6 spec. Og jeg har tænkt mig at fanen Netværk her, og lad os se et øjeblik HTTP trafik, der er gå frem og tilbage. Lad mig først gå videre og klar Chromes cache. Så nogle af jer måske være bekendt med denne teknik allerede og vi kommer til at bruge det for debugging formål her. Nu er vi som computer forskere vil begynde gør dette til fejlsøgning formål, hvorved Vi vil rydde cachen, typisk, så vi kan slippe af med ting, der kaldes cookies. Så er du sikkert generelt bekendt med, hvad cookies er, eller i det mindste at de eksisterer, men hvad er din forståelse af dem, som blot en bruger af computere, hvad er en cookie? Ja. PUBLIKUM: Det er lidt of-- godt, ikke bit i en periode på datalogi. Det er et stykke data, som et website sender til dig for at være i stand til at registrere statistikker om dig. DAVID J. MALAN: OK, godt. Så det er et stykke data, som et server, sætter på din computer, og lad os generalisere det selv mere, det er en nøgle value-- godt, der bliver mere præcis. Det er et stykke information, et stykke data, at en server er i stand at sætte på din computer og meget ofte, serveren gør dette således at huske, hvem du er. Så for eksempel odds er du sandsynligvis logget ind på sites som Facebook, eller Gmail eller andre før, og du logger ind med din brugernavn og adgangskode, og derefter efter, at et bestemt antal minutter eller timer eller endda dage, serveren husker, at du er i virkeligheden logget ind. Nu, hvordan er det egentlig, der sker? Fordi du bestemt ikke genindtastning dit brugernavn og din adgangskode, hver gang du navigerer til et forskellig side på Facebook. Så det viser sig cookies er svaret. En cookie du kan tænke på som, Lidt ligesom en digital hånd stempel, som du kan få på en forlystelsespark park eller en klub, der hovedsagelig angiver, at du har været her før, og du har allerede vist dit id til dørmanden, for Eksempelvis og at klubben eller parken bør nu antage, at du har autentificeret allerede. Du har allerede blevet identificeret af den. Så med det i tankerne, Lad os åbne counter her. Lad mig gå videre, jeg lige gjorde, og fjerne alle mine cookies. Og nu, hvad jeg har tænkt mig at gøre, er holde Shift, bare for god foranstaltning, og med magt genindlæse siden. Shift bare sørg at intet bliver cached. Og her er anmodningen der gik frem og tilbage. Så herovre har vi en anmodning, og lad mig zoome ind hernede, og en masse af dette er en slags uinteressante oplysninger om nu, at browseren har automatisk sendt, men lad os klikke på Vis Kilde for at se de rå overskrifter. Og hvis du har dykket ned pset6 allerede, du vil helt sikkert genkende ting som dette, og måske nogle af disse andre linjer her, men hvad er mere interessant for i dag hvis jeg rulle ned, for ikke at anmodningen men at den såkaldte reaktion, denne linje sandsynligvis ser bekendt. Det er en god ting når du ser en 200 OK. Tilsyneladende er dato og tid på serveren og der er en masse ting. Åh, det er interessant. Slår ud, når du bruger PHP, i det mindste i denne server, serveren spytter hvad version af PHP du bruger. Hvilket faktisk, for sikkerhed formål, er ikke en god ting. Men, vi vil komme tilbage til det en anden gang måske. Men nu er den saftige linje i dag, og vi så kort nogle af disse, Jeg tror med Facebook, når vi jordet omkring Inspector dengang, sæt cookie er hvad er plantning det lille stykke information på din computer. Dette er en HTTP header det er effektivt fortælle din browser, Chrome, IE, uanset hvad, hey browser butik på brugerens harddisk, eller i brugerens RAM, en nøgle kaldes PHPSESSID, som er en stenografi notation for session-id, og give det en værdi på 0vlk8t, prik, prik, prik. En virkelig lang pseudo tilfældige alfanumerisk streng. Det er bare en rigtig stor antal, men det er kodet med bogstaver og tal således at størrelsen af ​​det kan være endnu større end tal alene. Og derefter, ved den måde, Sti = /, at betyder blot, at denne cookie skal være forbundet med helhed af hjemmesiden, ikke kun en specifik side det hele. Så dette er, at den virtuelle hånd stempel. Det er som om serveren, Facebook, eller i vores tilfælde apparatet, har bogstaveligt talt skrevet 0vlk8t og så videre, på din hånd. Læg mærke til hvad serverens, ikke gør, er det ikke lagring mit brugernavn, sikkert ikke opbevare min adgangskode. I stedet synes at være lagring pseudo tilfældig information så ingen kan gætte hvad min hånd stempel er. På serversiden, mellemtiden, serveren kommer til at huske, sandsynligvis i en database eller noget, at brugeren, som i fremtiden præsenterer en hånd stempel 0vlk8t, dot, dot, dot, bør være forbundet med dette særlig indkøbskurv, så at sige. Med andre ord, hvis jeg nu gå tilbage her og genindlæs denne side, hvordan serveren kender at jeg besøgte en gang? Eller hvis jeg gør det igen, hvordan gør serveren vide, at jeg har besøgt det to gange? Tja, hvis jeg går ned til dette seneste anmodning, som er nu den tredje, som jeg har sendt i alt, mærke min anmodning nu. Der er stadig dette anmode om op her, samme som før, er der stadig en hel masse ting, som vi har ignoreret som før, men den allersidste header dette tid, fordi jeg har været her før, er en præsentation af denne virtuelle hånd stempel. Hvorved denne linje her, ikke indstillet cookie men cookie kolon PHPSESSI = 0vlk8t, det er bare min browser automatiske præsentation af denne hånd stempel således, at nu serveren, så snart den opdager, ooh, det er brugeren 0vlk8t prik, prik, prik, Jeg kan nu huske, hvem han eller hun er og reassociere med brugeren uanset oplysninger, som jeg vil, og alle at information kan lagres af dig, programmør, i $ _SESSION. Så for at være klar, hvis jeg åbner op reelle hurtig i gedit, at den faktiske fil, counter.php, i min lokale vært offentlig fortegnelse som før, bemærke, ja, Jeg i sidste ende lagring $ _SESSION Citat citat slut "tæller" værdien af ​​det foregående tæller, som Jeg får fra disse linjer heroppe, at vi så på sidste gang plus en. Så under kølerhjelmen, det er alle cookies er. Det er netop den slags digital hånd stempel går frem og tilbage, og helt ærligt, hvis du åbner Chromes Inspektør på ethvert websted du besøger i dag, med super høj sandsynlighed, du kommer til at se måske en, måske en halv snes cookies blive husket af dig. Og værre endnu, hvis de, websted, du besøger alle reklamer, som er sikkert helt almindelige i dag, og hvis de reklamer kommer fra nogle centrale parti, nogen som Google eller AdWords, som de ringe til et af deres produkter eller andre sådanne sælgere som sælge annoncer, hvad er interessant, og helt ærligt, hvad er lidt bekymrende, hvordan HTTP fungerer, er, at hvis du har en annonce indlejret i Facebook.com, og Google.com, og Harvard.edu helst antal af hjemmesider, så det er sådan at der er en mellemvej mand, der afsoner up annoncer for alle tre af disse hjemmesider, det viser sig, at cookies er per domæne. Så hvis du har en annonce, der kommer fra samme selskab på forskellige hjemmesider, at virksomheden effektivt kan spore, hvem du er på tværs af alle disse websteder. Harvard måske ikke kender du besøger Facebook. Facebook måske ikke kender og du besøger Harvard. Men uanset ad tjeneste de bruger, hvis dette domæne er til stede i både Harvard.edu web sider og Facebook.com websider, denne midterste mand sikkert ved, hvem du er på grund af disse cookies deles på tværs af, eller rettere, at såkaldte mellemmand. Så vi vil vende tilbage til dette i sikkerhedsmæssige konsekvenser deraf, men der er en masse oplysninger bliver gemt om dig hver gang du besøge de fleste enhver webside på internettet, og det er virkelig reducerer dette meget enkel mekanisme. Hvad sker der, derefter, hvis det du er super paranoid og du beslutter at gå ind i Chrome eller IE eller hvad og slukke dine cookies? Hvad sker der? Ja? Du really-- du har gjort det rigtigt? OK. Nej, gå videre. PUBLIKUM: Visse hjemmesider ikke har en funktion uden at det gerne Facebook. DAVID J. MALAN: Yeah! Så visse hjemmesider vil bare stoppe med at arbejde. Og i de fleste websites i disse dage der fundamentalt afhængige af cookies, især hvis de har du logger i, er de bare kommer til at bryde. Fordi overveje alternativ, hvis hjemmesiden har ingen mulighed for at huske, hvem du er, og derfor din web browser er ikke repræsenterer med hver HTTP anmodning fra denne hånd stempel, effektivt en hjemmeside ligesom Facebooks igangværende nødt til at bede dig om at logge ind hver darn gang du skifter sider, eller klikke på et link, som er helt sikkert ikke en særlig god brugeroplevelse oplevelse. Således at der også er blandt de afvejninger. Så uden videre, lad os tage for givet, at med web-programmering, i sprog som PHP, kan du huske information som den i problem sæt syv, når du implementerer din egen E * Trade-lignende website med til at købe og sælge aktier, vil du huske præcis hvad brugeren har købt og solgt og som han eller hun er ved hjælp af denne samling. Men vi får brug for en amatør måde end email at begynde at holde information omkring. Right? I mandags talte vi om Frosh IM'er og hvordan i version en af ​​denne hjemmeside, år siden, alle vi gjorde var e-mail til Proctor, der er ansvaret for de intramurale sportsgrene program, navn og køn, og hvorvidt de er en kaptajn, og kollegiet af en person, der er tilmelding til en intramurale sport. Så det er ikke dårligt, men han eller hun derefter måtte trold gennem deres e-mail, lave et regneark eller noget lignende at for at holde alt organiseret. Så sikkert vi som programmører kan gøre dette for at proctor. Og så indtaster i SQL, Structured Query Language, som kommer til at se temmelig anderledes både C og PHP, og du vil dykke i langt flere hænder på PHP og problem sæt syv, men også SQL, eller SQL, dette er et sprog, du bruger til at tale med en database. Men hvad er en database? Nå du tænker på en database, i hvert fald for nu, som blot at være som en Excel-fil, eller hvis du er en Mac-bruger nogle numre fil, eller hvis du er en Google Apps bruger et Google-regneark, Det er i realiteten en database, eller virkelig specifikt en relationel database. En relationsdatabase er lige noget, der har rækker og kolonner, og du kan gemme alle slags oplysningerne i disse rækker eller kolonner. Men hvad er rart om SQL, og om faktiske databaser, ikke blot regneark eller Google regneark, er, at du kan bruge et sprog til rent faktisk at udføre forespørgsler til indsætte data, for at fjerne data, at lede efter data, selv vigtigst, og man ikke behøver at bruge det forholdsvis manuelt som du måske typisk en Google regneark som denne. Så i SQL, der er en masse af grundlæggende erklæringer eller stykker funktionalitet indbygget. Der er mange flere end disse, men du kan gå en enorm distance blot ved at vide, at dette sprog kaldes SQL har mindst fire udsagn, du kan udnytte. Slet, til fjernelse af data, Indsæt til at tilføje rækker, Update, til at ændre rækker, og Valg, for at komme tilbage rækker og det er faktisk, hvad SQL gør. Det fungerer udelukkende på rækker, så at når du indsætter eller fjerne, eller opdatere eller vælge hvad du er komme tilbage som en såkaldt resultat sæt, som en matrix af rækker. En flok af rækker fra en tabel. Så tilbage i dag, og selv den dag i dag, du kan interagere med database ved hjælp af en kommandolinje, men det er ikke særlig sjovt at bruge denne sorte og hvide stil vindue og faktisk udføre kommandoer og stikke omkring din database. En grafisk brugergrænseflade eller GUI, er langt mere at foretrække, velsagtens, og så det værktøj, vi anbefaler og forudinstalleret for dig på apparatet kaldes phpMyAdmin. Det er en total tilfældighed, at den Navnet på denne ting har PHP i det, det betyder bare, at de mennesker, der skrev dette program selv skrev det i PHP. Men det er i sidste ende om at administrere en database-server, ligesom en MySQL-server at du måske har, som du gør i CS50 apparatet. Så der er flere detaljer her end vi nødt til at bekymre sig om i dag, men hvad er centrale er, at på den venstre side er en liste over de databaser at du har på din computer, på din CS50 apparat, eller kommer de endelige projekter, som du måske har på en tredjepart, en virksomheds hjemmeside eller web-server, der du kan betale for rummet. Så til venstre er det databaser, hvoraf den ene er pset7 som jeg lånt fra næste uger pset, og derefter på toppen der bemærker der er en bundt af faner, hvoraf den ene er databaser, SQL, status, brugere, eksport og så videre. Så du kan gå en lang måde blot ved at realisere at de fleste af brugergrænsefladen er i øverste venstre kolonne og på tværs af øverste højre op dér. Så hvad kan vi egentlig gøre med dette? Nå, lad os begynde at skabe en bit af information som følger. Antag at følgende er tilfældet, som vil være i blot et par dage, du ønsker at gennemføre en hjemmeside, kaldet CS50 Finance, og denne hjemmeside kan du købe citere citat slut og sælge aktier. Og det kommer til at regne ud prisen for disse bestande, i sidste ende, som du vil se, ved at tale med Yahoo Finance. Hvilket vidunderligt, har en gratis service hvor du kan passere i en bestand ticker ligesom GOOG for Google, og det vil give dig tilbage Googles nuværende bestand pris inden for de seneste få minutter mindst. Så du vil bruge det, i sidste ende, at foregive for brugeren at købe og sælge faktiske lagre ved hjælp af virtuelle penge, men det allerførste brugeren kommer til at se er dette login skærm, som beder dem for deres brugernavn og adgangskode. Og så en af ​​de første udfordringer til dig i pset7 vil være at implementere bagenden database, regneark, hvis du vil, der kommer til at gemme brugernavne og adgangskoder og i sidste ende, hvad bestandene de ejer, og hvor mange, og hvor mange penge de har, så en masse andre ting i andre tabeller eller regneark. Så lad os tage et kig på, hvordan dette kan synes ved første øjekast. Jeg har tænkt mig at gå tilbage til apparatet, og jeg er kommer til at gå til denne URL her phpMyAdmin localhost / phpmyadmin og du vil se, at det tager mig til en grænseflade præcis som vi oplevede på skærmbillede, og her er jeg have en ekstra database kaldet forelæsning for i dag og lad mig gå videre først og klik på pset7. Jeg synes at have et par muligheder, én for ny, for at skabe en ny tabel, og et link til brugere, som er en tabel jeg allerede har oprettet. Så hvad er en tabel? Så hvis du har brugt Excel før, og hvis du har brugte numre eller Google Regneark, du åbner et vindue og du får en hel masse af rækker og kolonner, men så du normalt har regneark langs bunden, eller separate faner. Du kan tænke på hver regneark som en tabel således at databasen, i sidste ende, er en kombination af en eller flere tabeller, en eller flere regneark, i verden af ​​en normal regneark. Så lad mig gå videre og klik på dette regneark at jeg premade, kaldet brugere, alias Database tabel. Og hvis jeg rulle ned her, Lad mig zoome ud en smule, dette er hvad phpMyAdmin fortæller os, er inde i denne tabel lige nu. Det er lidt forvirrende i starten blik fordi UI er ikke den smukkeste ting i verden, men Det interessante er denne del her. ID, brugernavn og hash. På forhånd, og du vil blive afleveret dette i problem sæt syv, Vi giver dig en fil, der indeholder en super lille database tabel, lånt faktisk fra hacker udgave af problem indstille to, inden i hvilken der er seks rækker. En for Belinda alle helt ned til én for Zamyla, og bemærk til venstre for dem brugernavne er unikke id'er som en, to, tre, fire, fem, seks, heltal, og derefter til højre er hashes. Og hvis, odds er, har du ikke gøre hacker udgave problem indstille to, men en hash er ligesom en krypteret adgangskode med et par forbehold. Og så, hvad du ser her, er de krypterede versioner af alle seks af vores adgangskoder fra problem indstille to hacker udgave. Nu til venstre er blot nogle GUI ting, redigere denne række, kopiere denne række, slette denne række. Men hvad er interessant nu er det følgende. Jeg kan faktisk begynde eksperimentere med denne tabel. Så hvis jeg går og klik på SQL fane, får jeg denne store tekstfelt. Og det er ikke, hvordan vi kommer til at gøre det, når faktisk at skrive kode. For at være klar, phpMyAdmin er blot et værktøj, der er vil lade os poke databasen og lad os eksperimentere med forespørgsler. Så for eksempel antage, Jeg udføre netop dette. Select, som er en af ​​dem søgeord, jeg nævnte tidligere, stjerne, som repræsenterer alle kolonnerne i en tabel. Fra hvad bordet? Nå, brugere. Og meddelelse er der denne underlige konvention i SQL hvor du rent faktisk bruger tilbage flåter typisk ikke enlige citater og ikke dobbelte anførselstegn når du taler om tabeller navne så bagsiden citat er den ting på øverste venstre på tastaturet mest sandsynligt. Så lad mig gå videre nu og bare lade det alene og rul ned og klik på Go, og vi er faktisk kommer til at se de samme ting. Vi har netop gennemført en SQL-forespørgsel siger vælge alt stjerne fra tabel kaldet brugere, og hvad du får tilbage, er dette. I sidste ende, vil vi være i stand til at gøre det samme i kode, men for nu alle jeg ville gøre var at se det i min browser. Jamen så lad os gøre noget lidt anderledes. Lad mig gå tilbage til fanen SQL, og lad os bare sige, at hvad? Zamyla har mistet alle hendes penge, og derfor er det tid for os at slette hende som bruger. Hun er ikke længere logge ind. Så jeg har tænkt mig at sige slette from-- godt opretholde aktivering for konsistens, slette fra brugerne, hvor. Og så kan vi have disse prædikater, eller disse kvalifikationskampe, i slutningen af ​​min redegørelse hvor og hvordan kan jeg slette Zamyla? Ved hendes navn Zamyla, så kolonne, en af ​​kolonnerne blev navngivet, så hvor name = "Zamyla". Og her vil jeg bruge dobbelt citater eller enkelte anførselstegn, du kun bruge bagsiden flåter, når taler om navne, for eksempel, af tabeller eller felter. Og lad mig så klik Go her. Og nu, websiden er være lidt forkrampede. Eller ønsker du virkelig at udføre slette fra brugerne, hvor navnet er lig Zamyla? Ja. Så nu, hvis vi går tilbage til min tabel ved at klikke brugere, bemærk at Hm. Jeg goofed. Og i virkeligheden, jeg slags klikkede væk så hurtigt du ikke engang se den rød fejlmeddelelse, måske. Hvad gjorde jeg forkert? PUBLIKUM: Du har ikke brug for at udnytte hendes navn. DAVID J. MALAN: Ja jeg kapitaliseret hendes navn, men hendes username-- faktisk jeg lavet et par fejl, right? One, hendes brugernavn er zamyla, små bogstaver Z, og kolonne navn er brugernavn, ikke navn, så lad os gøre det igen. Lad mig gå videre og slette fra brugerne, hvor brugernavn lig citat citat slut "Zamyla". Okay? Så det ser lidt bedre, så lad mig gå rulle ned og klik på Go. Det er stadig til yell på mig at være sikker. Jeg klikker på Ja, og nu ser vi, ærligt dette skete, virkelig hurtigt, mindre end en andet bestemt, dette er præcis den forespørgsel, der blev henrettet. For at bekræfte, lad mig klikker brugere og faktisk nu Zamyla er væk. Lad os nu gøre det modsatte. Antag, at Gabe ønsker at registrere for hjemmesiden. Hvad er SQL-forespørgslen, hvad er kommando jeg kunne skrive for at tilføje Gabe? Jamen det er temmelig ligetil. Sæt ind i brugere, og nu det bliver lidt kryptisk. Jeg har brug for at angive, at serveren, hvilke områder, jeg ønsker at tildele. Jeg er faktisk ligeglad hvad Gabe ID nummer er, så jeg har tænkt mig at springe. Jeg i stedet kommer til at sige brugernavn, hash, og derefter de værdier, jeg ønsker at sætte Der kommer til at være Gabe. Og så hans hash, jeg ikke kender. Så for nu, vil jeg efterlade det som en stor at gøre. Vi vil komme tilbage til at problemet indstillet spec på, hvordan du rent faktisk gør det. Så bemærke, igen, syntaks. Indsæt i tabellen navn, så en parentes liste over de felter, de kolonner, du ønsker at tilføje værdier til og så bare nøjagtig den samme bestilling tilbage til ret af de værdier, du vil tilføje, og det er bare indpakning fordi Teksten er lidt lang. Så lad mig nu klik på Go. En række skal indsættes. Og nu, hvis jeg gå tilbage til brugere, hvad er interessant er, at ikke kun er Gabe nu i database, hvilket tilsyneladende er hans id? Jamen det er syv. Hvorfor er det syv, når jeg ikke tilføje det? Så også dette er en af ​​de funktioner, du får af databasen. En masse indbygget funktionalitet. Det viser sig, at når oprettet denne tabel, Jeg prækonfigurerede det automatisk tildele en ID på en sådan måde at det intervaller. Så hvis du nogensinde har jordet rundt, og kigget på, hvad dit Facebook ID nummer er, i disse dage er det ikke rigtig en ting at gøre, men Facebook som et API, Application Programming Interface, hvorved du kan komme tilbage en hel bunke af data om dig selv, om dine venner, og dine forbindelser. Og hvad der plejede at være venlig cool, tilbage i dag, var at se op, hvad din Facebook ID-nummer var. Mark Zuckerberg, for eksempel, er tre siden han var forfatter til webstedet. Og som historien går, skabte han to testkonti, brugere et og to, som han derefter slettes. Og så, Zuck, som er hans brugernavn på Facebook, er ID-nummer tre, og for os alle har numre meget større end tre i disse dage. Faktisk, på et tidspunkt Facebook flyttes væk fra selv ved hjælp af en int, som er en 32-bit værdi, til anvendelse det næste skridt op, væsentlige en lang lang så at de kunne rumme endnu flere brugere at registrere sig. Så en sjov lille historisk kendsgerning. Så det er bare at grundlæggende syntaks, som vi kunne udføre et par forespørgsler, men vi kan faktisk gøre en masse flere ting med SQL. Og du vil se, i sidste ende, i problemet sæt syv at du er nødt til at gøre en Antallet af design beslutninger, blandt dem vil være hvad datatyper at bruge. Så ligesom i C, er der data typer i en database, som MySQL, og de typer data, du nødt til at vælge fra inkludere disse felter her. Char, varchar, Int, stor int, decimal og dato tid, og mange andre. Så lad os rent faktisk gør dette. Lad os lade som om, at vi ikke gjorde hånd, du denne brugers bord og lad mig gå videre og skabe, for mig selv, i forelæsningerne database-- faktisk lade mig gå videre og slette tabellen, jeg har i her allerede således at vi rent faktisk kan skabe dette. Hovsa. Jeg har tænkt mig at droppe dette bord, og nu er jeg vil gå igen til foredrag database herovre, Jeg har tænkt mig at oprette en tabel kaldet brugere og lad os bare gøre tre kolonner oprindeligt og klik på Go. Nu, for det meste, igen, det er bare ved hjælp af dette grafiske værktøj kaldet phpMyAdmin, og hvad vi laver nu er at skabe et bord. Så dette er som at gå på Filer, Ny, og skabe en ny Excel-fil. Så det spørger mig et par spørgsmål, fra venstre mod højre, hvad er navnet på den første kolonne, og derefter navnet på den anden kolonne og navnet på den tredje. Så lad os genskabe denne. ID og derefter brugernavn var én, og derefter hash var en anden. Så hvad skal datatypen være nu for et felt som ID? Her er hele listen over datatyper til rådighed for dig i en database, og lad os nu bare gå med int. 32-bit værdi, det gør jeg ikke tænke realistisk jeg kommer til at have mere end 4 milliarder brugere på min konto, i min tjeneste, så jeg har tænkt mig at holde bevægelige videre til det næste spørgsmål. Jeg har ikke tænkt mig at specificere en længde eller værdier, Det er ikke relevant her for en int, per se. Og nu kan jeg angive, tilsyneladende en standard værdi, som jeg ikke vil angive. En sortering, ved jeg ikke, hvad det er. En attribut. Nu er vi rent faktisk gør har et design beslutning. Så der er et par områder her, ikke alle af hvilke der ved men usigneret betyder bare, hvad? At int skal være? Blot ikke-negativ. Så det må være 0 på op. Nej, jeg har ikke tænkt mig at kontrollere, fordi Jeg vil hver bruger skal have et ID, det kan ikke være null. Og så får vi til nogle mere interessante design beslutninger som denne. Vi kommer tilbage til dette om et øjeblik, men hvad en anden funktion i databasen er, at du kan fortælle databaseserveren gå videre og optimere dig selv, din RAM og din plads på harddisken, så vælger, og skær, og sletter, og opdateringer er virkelig hurtig. Kontrast dette med pset5. Hvis du ønskede at se op noget i din hash tabel, som du tænker på som en database, der havde at gøre alle arbejde for at gøre din hash tabel hurtigt. Det er ligesom, naturligvis, du. Right? Du var nødt til at sætte i al den tid bøde tuning ting, at få en hash-funktion højre, regne ud, hvordan mange spande at have. Men hvad er rart, igen, om en database du bare punt alle dette til andre mennesker der har tænkt dette igennem for dig, og hvad Jeg har tænkt mig at sige her under indeks er, at mit ID felt vil være den primære måde identificere brugere i denne database. Jeg har ikke tænkt mig at tænke af Zamyla som Zamyla, Jeg har tænkt mig at tænke på hende som nummer 6. Hvorfor er det måske bedre intuitivt at tænke på og model hver af dine individuelle rækker ved hjælp af et nummer i stedet for noget som en snor, som Zamyla eller Gabe eller længere snor stadig? Ja? PUBLIKUM: Et id er unik? DAVID J. MALAN: Sig igen? PUBLIKUM: Et id er unik? DAVID J. MALAN: An ID er unik, men suppose-- som tilfældet i almindelighed med brugernavne, formoder Jeg sagde også, at der kun kan være én Zamyla i verden, og kun én Gabe. Jeg kunne pålægge det unikke pres på strengene, også, hvis jeg ønskede. Så ikke en dårlig tanke. PUBLIKUM: Mere sikker. DAVID J. MALAN: Mere sikker, hvorfor? PUBLIKUM: Du kan ikke sige, hvilken er der, som i brugeren. DAVID J. MALAN: OK, du kan ikke fortælle hvilken bruger er der så der er en privatliv aspekt til det, især hvis id'er måske optræder i de webadresser. Så sikker, at kunne slags arbejde, også. Andre tanker? Ja? PUBLIKUM: Det er nemmere at udføre operationer på en int. DAVID J. MALAN: Det er den virkelige kicker. Det er bare mere effektive, eller lettere for computeren, til at udføre operationer på et heltal. Right? En int er garanteret at være 32-bit, hvorimod Zamyla er et par tegn, Gabriel er et par flere tegn, Davenport er virkelig lang, og så det er ikke særlig effektivt at bruge strenge at sammenligne værdier og ser for felter, og opdatere felter, hvis du kan komme væk med kun én heltal. Blot 32 bit. Så brugernavne, også, på denne måde, behøver ikke at være unikke, selv om de burde nok være, og endda også på denne måde en bruger kunne få lov til ændre sit brugernavn. Så lad os nu forlade dette som primære middel til at identificere brugeren. Dette fortæller databasen gå videre og optimere dig selv så det blik ups på ID er super hurtig. AI, forfærdeligt navngivet, bare betyder Auto Interval, og dette er check kasse vi nødt til at tjekke at angive, at ID-feltet til opdateres automatisk for mig, og så vil jeg Rul til højre her og helt ærligt jeg er ikke rigtig interesseret i mere af disse områder. Bestemt ikke i dag. Så jeg har tænkt mig at gå tilbage her, til den første kolonne, hvor Jeg har brug for at angive brugernavn og hash, og lad os mindst fokus på én for nu. Int er nok ikke den rigtige opkald, så hvad er mere fornuftigt måske? PUBLIKUM: Tekst. DAVID J. MALAN: Sig igen? PUBLIKUM: Tekst. DAVID J. MALAN: Tekst? OK, jeg hørte tekst. Hvad ellers? Vi slags har en flok valgmuligheder der er tekstmæssige i naturen. Så hvornår og hvorfor, gør du bruge nogle af disse? Nå char, i modsætning til hvad du måske tror, ​​er ikke et enkelt tegn. Det er et bestemt antal tegn. Så hvis vi ved, at alle brugernavne skal ligne otte tegn, som plejede at være almindelig i ældre edb-systemer, kunne jeg sige char og så kunne jeg sige 8 her. Det er, når den tredje kolonne bliver anvendelig, når du opretter en tabel. Men det er slags irriterende fordi nogle mennesker måske ønsker at have en længere brugernavn end otte tegn, nogle mennesker måske ønsker at har en kortere brugernavn, så hvorfor forpligte mig til et bestemt nummer? Hvorfor ikke have en variabel Antallet af tegn og kun siger, at den maksimale længde for et navn er, ved jeg ikke, ligesom 64 tegn. Jeg kan ikke tænke på nogen venner, der har navne længere end 64 tegn, og selv hvis det er for kort, du kunne sikkert bump det op vilkårligt. Så varchar er en variabel Antallet af tegn. Tekst er ikke en dårlig instinkt, og ærligt den slags gør hvad det siger, men et tekstfelt kan være ligesom 65.000 bytes mindst. Det er sandsynligvis overkill for en område, og i virkeligheden, yup, 65.535. Det er sandsynligvis overkill for en navn, så vi vil holde, typisk med varchars for tekstmæssige marken og hash, også. Hash, viser det sig, kunne vi gøre en VARCHAR så godt eller noget lignende, men vi vil ikke fokusere i dag på kryptografi der og de numre at vi kan faktisk vil bruge til dens længde. Men lad mig rulle ned til højre. Du kan kun have én primært indeks for en tabel, men ønsker jeg at anvende nogen af ​​disse, nu, at brugernavn, ville du sige? Hvad skal brugernavn være baseret på en vag forståelse af disse fire muligheder? Lige ved deres navne? PUBLIKUM: Unique. DAVID J. MALAN: Så unik, right? Så det viser sig, at ikke kun kunne du fortæller en database, i forvejen, dette er den primære måde identificere områder. Du kan også sige, det er vil være en unik område. Det kommer ikke til at være de ting, jeg stole på, men jeg vil gerne databasen til har i det væsentlige at hvis tilstand, så at hvis jeg nogensinde forsøgt at registrere to brugere med samme navn, databasen flade ud vil ikke lade mig. Jeg måske har nogle ekstra kode i PHP der forhindrer så meget, men databasen også kan sikre at der aldrig kommer til at ske. Nu, da en side, især da du synes om afgangsprojekter, husk det indeks og fuld tekst er faktisk ret nyttigt. Hvis du har en større database, ikke med snesevis, men med hundreder eller tusinder eller endda millioner af felter kan du også fortælle databasen i forvejen dette er et område, jeg har tænkt mig at søge på en masse. Måske dens brugernavn, måske er det bio, hvis du er at lave en Facebook-lignende hjemmeside, har stykker at brugerens tilladt at spare, og hvis du ønsker at fortæller databasen i forvejen Jeg har tænkt mig at være at søge på dette område en masse, men det er ikke nødvendigvis enestående, du kan angive oprette mig et indeks. Eller du kan sige også tillade mig at gøre slags vilkårlige søgninger som Command eller Kontrol F, ligesom du måske i et tekstbehandlingsprogram, så man kunne se vilkårlige strenge eller understrenge på dette område. Med andre ord, vi får til det punkt i semesteret hvor du ikke behøver at bekymre dig om hvordan man gennemfører tingene effektivt. Du skal bare have at vide om, hvad design beslutninger at gøre, så du er bruger de rigtige værktøjer til handel med henblik på at udnytte funktioner at andre mennesker har bygget for dig. Så for at opsummere, bør kun primær har en, kan du kun have én, og det er de ting, du forpligte sig til bruger til at identificere områder entydigt. Unique er bare ens i ånden, men du måske kun lejlighedsvis bruge det, men du vil have databasen til at pålægge det. Indeks betyder blot præventivt fremskynde tingene op i fremtiden så jeg kan søge efter ting i dette område. Og så fulde tekst er generelt for afsnit eller essays eller store organer af tekst, hvor du måske også ønsker at have wild cards som svarer til stjerne. Højre. Så det var slags en masse at alle på en gang. Lad os se om vi ikke kan destillere et par af disse funktioner og derefter bygge noget forholdsvis enkel, men kraftfuld. Så blandt andet designbeslutninger du er i sidste ende kommer til at have, er sammen linjerne i opbevaring motorer. Og lad mig bare gøre omtale af dette i forventning om afgangsprojekter, og foregribelse af lad os say-- nej lad os gøre dette. Lad os bygge dette lille ansøgning først. Jeg har tænkt mig at gå ind i min terminal vindue, og her er ikke kun counter.php, som vi nu går at slippe af med, da der ikke længere er germane, men vi har en hel masse af telefonbøger og dette kommer til at være meget ens i ånden til hvad du vil se i problem sæt syv. Så vi har tre mapper omfatter offentlige og skabeloner, som er præcis, hvor vi slap på Mandag med hele vores MVC paradigme. Og for at opsummere, i det offentlige kommer til at gå enhver fil, som jeg vil have at brugere faktisk v kunne besøge i deres browser via en URL. Skabelon. Hvad gjorde vi sætte i skabeloner? Hvilken slags ting? Der var ikke meget, men et par filer i det mindste på mandag. Ja. PUBLIKUM: Sidehoved og sidefod? DAVID J. MALAN: Sidehoved og sidefod. Så vi har noget lignende i dag, også. Vi har fået et par flere filer, men Footer Jeg ser, Header jeg ser, og derefter en masse andre filer. Så dette er ækvivalent V MVC synspunkt, som, igen, vil være en smule mere klart problem sæt syv, men dette er blot en mappe jeg sætte en masse af mine æstetik. En masse af min HTML, en masse af mine former. I mellemtiden, omfatter en anden bibliotek, der har disse tre filer og lad os tage et hurtigt kig på disse. Jeg har tænkt mig at gå videre og åbne op config.php. Da det viser sig, meget ligesom tidligere i udtrykket, dig skarp inkluderet CS50 dot h med pset7. I dagens eksempel, du vil at gøre det svarer til, at med et krav erklæring der effektivt omfatter disse forskellige linjer. Så for at være klar, dette er en fil kaldet config.php. Og læg mærke til, hvad det gør. Det er tilsyneladende at gøre noget kryptiske, tænde fejlmeddelelser så du kan se dem i browseren. Det er da, tilsyneladende kræver mindst to andre filer så det er ligesom #include i C, og så denne ene vi kunne se, og vi har påberåbt sig, dette tændes at indkøbsvognen lignende funktionalitet. Det betyder, at en cookie sendes frem og tilbage. Så hvorfor er det interessant? Tja, hvis vi går tilbage til dette bibliotek og åbne for eksempel constance.php. Bemærk, at PHP understøtter også konstanter, det er ikke helt ligesom #define i C. I stedet kan du bogstaveligt talt sige defineret, og varsel at jeg har gemt på forhånd fire konstanter i denne fil. En for dagens database, for mit password, for mit brugernavn, og efter navnet på den server. Så disse er faktisk kommer til at være temmelig ens i problem sæt syv. Og endelig, og dette er, hvor jeg er kommer til at få nogle nice funktioner fra personalet, i functions.php er en flok af kode, vi har skrevet, og jeg stjal nogle af dette fra problem sæt syv for i dag, der gør en masse ting og lad os bare se på en af ​​dem i særdeleshed. Denne funktion her, forespørgsel, bliver PHP-funktionen vi kalder med henblik på at udføre SQL. For et øjeblik siden var vi ved hjælp af phpMyAdmin, men det er bare til sortering af læring, og diagnostiske formål og glemmer din database sæt. Når du rent faktisk bruger din database, du som menneske, er naturligvis ikke vil at trække en web side hver gang nogen registre. Du kommer til at skrive kode, indstik og sletter brugere on-demand, og vi vil gøre dette ved hjælp af forespørgslen funktion. Hvis jeg nu rulle ned, er der kommer til at være et par flere funktioner. Redirect vil være en funktion, vi skrev for dig, der giver dig mulighed for sende brugeren til en anden URL, og gøre er en funktion, helt ligesom vi så på mandag, der rent faktisk gør en skabelon, men mere på disse i form for pset7 egen gåtur gennem. For nu, lad os gå videre og gøre dette. Lad mig gå ind i mit foredrag bord og se, at der er i øjeblikket intet her endnu, og lad mig også gå ind i min offentlige mappe, hvor der er bare en fil, index.php. Denne fil ser ud til at være super enkel i det øjeblik, det ser bare sådan ud. Meget gerne, hvordan vi slap på mandag. Jeg kræver denne fil, config.php, som er i en indeholder mappen, som er i dot dot, mine forældre, og så er det bare at gøre denne fil. Så hvad er denne fil? Lad os åbne op i mine skabeloner form.php, og vi vil se dette. Super enkel, tilsyneladende denne formular er kommer til at indsende en $ _GET eller $ _POST. Hurtig tilregnelighed check. Bogstaveligt talt visuelt søge i filen. Metode er lig med indlæg. Så det kommer ikke til at bruge URL'en, ligesom Google gør, det kommer til at sortere af skind oplysningerne bag kulisserne, og det er kommer til at underkaste sig en fil kaldet register.php, og det er den fil vi har endnu ikke skrevet men hvad dette foregår at ligne er dette. Hvis jeg går til en separat side Dette er hvad localhost / index.php ser ud. Og igen, serverens bare antager index.php. Enter. Så det er, hvor vi er på, og hvad jeg ønsker at gøre er i stand til at skrive ting som David, og derefter mit telefonnummer, som vil sige 617-555-1212 for nu, registrere og nu register.php blev ikke fundet. Så jeg er nødt til at gennemføre dette. Så lad os hurtigt pisk noget som dette op. Lad mig gå ind i min offentlige mappe og gøre gedit af register.php, og nu vil jeg gå videre og starte PHP mode, som vi gjorde i mandags, og tæt PHP tag, og lad os gøre et par ting. Så en, jeg kender, fra have skrevet denne form at jeg ønsker at kontrollere, om følgende. Hvis den er tom, hvad brugeren indtastes til navnet feltet, så Jeg har tænkt mig at sige noget ligesom undskylde mangler navn. Undskylde, i mellemtiden, er ikke en indbygget PHP ting, Det er en funktion, vi skrev i functions.php for pset7 så du har adgang til det. Else, hvis det andet felt er tom, nummer, så er jeg kommer til at undskylde over for bruger og sige manglende tal. Gem denne fil. Lad os nu gå tilbage til min browser, gå tilbage til forummet prøv igen. Registrer. OK. Intet skete, hvilket er godt. Jeg fik ikke en fejlmeddelelse. Men hvis man i stedet, lad os genindlæse denne side, og ikke give noget. Damn det. Gør det. Registrer. Hvad gjorde jeg forkert? Hvis tom, $ _POST navn. Sig igen? Åh, selvfølgelig. Jeg har glemt den vigtigste del, som er kræve ("../ includes / config.php."). Jeg har brug for at have adgang til det undskylder funktion, som Derfor er der intet skete. Funktionen faktisk ikke eksisterer. Så lad os prøve det igen. Lad os genindlæse siden, skal du klikke på Register. OK. Der er det. Så output vi ser her er resultatet kalde en undskylder funktion, super enkel, og det bare udskrives uanset Jeg giver det som et argument. Okay, så lad os samarbejde. Lad os give mit navn ligesom David, kan du registrere, manglende antal OK lad os fastsætte, at også. 617-555-1212. Registrer. OK. Så alt er godt nu, bare ingenting interessant sker. Så lad os nu gøre noget mere interessant ske på denne måde. Lad mig gå ind i phpMyAdmin, og lad os faktisk oprette en tabel kaldet brugere, Jeg har tænkt mig at give det tre kolonner, og jeg vil hurtigt skabe id, og derefter navn og derefter nummer, og ID-feltet er jeg vil forlade som int. Navnefeltet jeg har tænkt mig at forlade som en varchar, og vi vil sige 64, noget vilkårligt. Det nummer jeg har tænkt mig at gøre, ved du hvad? Vi går ind i støtte amerikanske tal her, så jeg har tænkt mig at gøre noget ligesom char og derefter 10 tegn max for et område kode og derefter syv cifre. Og så herovre, vil jeg specificere auto tilvækst dette område, gør dette til en primær nøgle, og Jeg har tænkt mig at gå videre og ikke kontrollere ethvert af disse andre kasser. Så når jeg nu endelig klikker på Gem, og jeg går tilbage til mine brugere bord, dette er, hvad det ser ud, hvis jeg nu klikke et nyt faneblad struktur. Så dette, at være klar, er bare phpMyAdmin måde at sige din database tabel har et ID, et navn og et nummer med disse særlige konfigurationer og vi vil ignorere resten af ​​felterne der for nu. Så nu, hvad ønsker jeg at gøre? Så hvis jeg går nu ind i mit kildekode, hvis alt er godt Jeg ønsker at udføre følgende forespørgsel. Sæt ind, og jeg kan bare siger brugerne gør jeg ikke strengt brug dem tilbage flåter, hvis det er ikke en farlig ord som brugere. Jeg har tænkt mig at sige navnet, nummer, og så her jeg ikke kommer til hård kode den ciffer af værdierne endnu. Jeg har tænkt mig at sætte to spørgsmålstegn. Og det er en konvention på mange sprog hvorved hvis du vil have pladsholder for en streng du kommer til at bruge det spørgsmål varemærker, af årsager vi får komme tilbage til at chatte om sikkerhed, og her Jeg har tænkt mig at passere i de to felter skrive navn, og derefter sende nummer, og nu gemme filen. Og nu jeg har tænkt mig at gå ned her er en super blot sige rendersuccess.php, som kommer til at være en anden skabelon. Jeg har tænkt mig at lave rigtig hurtigt. Geditsuccess.php og jeg bare at sige H1 succes i filen. Ok. Så nu, lad os gå tilbage til browser, hvor jeg besøgte før. Lad os gå videre og bekræfte at jeg skrev i David, jeg skrev i et telefonnummer, registrere. Damn det. Hvad gjorde jeg forkert? Så jeg ser en fejl her, du har en fejl i din SQL-syntaks. Lad mig springe tilbage til gedit, så lad mig gå tilbage til register.php, og hvad gjorde jeg udelade at var vigtigt sidste gang? Jeg har brug for dette. Du ønsker at vide, at andre end fra har bemærket før, men jeg har brug for dette. Så lad os nu gå tilbage, og dette var nyttigt at se i browseren og det er derfor i config.php vi spytte ud fejl. Lad os gå videre og genindlæse, Klik på Fortsæt, succes. Så lad mig nu gå over til min database her og klik på Brugere og gennemse, og læg mærke til jeg nu har David i min database her. Nu teknisk denne hjemmeside er endnu ikke på det offentlige internet, så jeg kan ikke have andre folk i at sætte her, men hvis jeg nu ville, for Eksempelvis sende mig en sms. Lad os gå ud på en lemmer her og se om det rent faktisk virker. Jeg har tænkt mig at gå videre og slette denne række og vi vil sløre dette i videoen senere så vi har ikke Hele internet sms'e mig, og vi vil nu gå op til browser, og vi vil gå over til foredrag og vi vil skrive i forskellige nummer her, tilmeld, succes. Så nu mit eget nummer er formentlig i databasen, og nu er den sjove del. Lad os rent faktisk at bruge PHP til at gøre noget programmeringsmæssigt, enten fra kommandolinjen linje eller fra et andet sted, og for nu er jeg bare kommer til at holde det simpelt og jeg har tænkt mig at gå ind i min biblioteket her og gøre følgende. Gedit script lad os sige, vi får kalder det tekst, #! / user / bin / env PHP, ligesom vi oplevede sidste gang. PHP. Nu vil jeg kræver omfatter config.php, selvom dette måske inducere en lille fejl. Og nu jeg har tænkt mig at gå videre og sige rækker, forespørgsel, skal du vælge stjerne fra brugerne, og nu her vil jeg gøre en teknik fra sidste gang for hver rækker som række. Og jeg har tænkt mig at gøre noget simpelt. Printf lad os sige navn er dette, og nummer er det, backslash n. Og nu vil jeg til at passere i række citerer citat slut navn, og rækken citat Citat slut nummer, og lad os nu gå videre og min terminal vindue chmod denne a + x for at gøre dette script kaldet tekst eksekverbare. Og lad os nu køre tekst. OK, så fremskridt. Så jeg har nu skrevet en kommandolinje script, på et sprog, kaldet PHP, at på grund af at kræve linje, har adgang til alle dem konfiguration konstanter, som jeg er specificeret. Navnet på databasen, og så videre. I virkeligheden blot være klart at dette ikke er en fluke, lad mig gå videre og registrere, rigtig hurtigt, en anden ligesom Rob og vil give ham 555-1212 nummer. Og nu, hvis jeg kører scriptet igen, bemærk magt af, hvad vi gør med databasen. Nu har jeg straks set, hvad to andre rækker er i min database. Så lad os nu prøve at gøre noget selv amatør inde i, og det er den del, vi har ikke testes på forhånd, så sidste gang jeg gjorde det tingene gik grueligt galt, vi har video herom. Faktisk, ja, sjove side. Så sidste gang, i en foredrag ligesom for to år siden, besluttede vi, besluttede jeg, at være alt dette ville være en rigtig god idé til dynamisk at generere e-mails i klasse, ved hjælp af hele databasen CS50 studerende, som havde givet os deres numre og deres cellphone luftfartsselskaber, som du måske husker fra pset0, hvordan at ræsonnere, viser det sig Jeg havde en mindre fejl i mit program og gjorde et par fejl i 2012, tror jeg. Hvorved, jeg havde for løkke, gjorde præcis denne slags ting, iteration i databasen, at få et navn fra databasen, navn fra databasen, og derefter på hver iteration af denne løkke jeg sendte en e-mail. Men i stedet for at sende en e-mail, jeg sendt en e-mail den første iteration, og to e-mails en anden iteration, sendt tre e-mails en anden iteration, som som du måske husker fra vores diskussion af asymptotisk notation denne store O i dårlige, ligesom n kvadreret er, hvor mange beskeder jeg har sendt, men det var endnu ikke e-mails det var tekstbeskeder. Og som du ved, fremmøde er ikke super høj mod slutningen af ​​semestret og så jeg tænkte det ville være sød ved tid til at sige: "Hvorfor er du ikke klasse?" I sms'en jeg sendt til hele klassen, og det var sjovt at lide 50% af klasse, men de resterende 50%, hvoraf ellevild, jeg sendte utroligt apologetiske søde noter til personalet undskylde for have forpasset foredraget bare denne gang, ikke? Så det ville grueligt galt. Så i denne ånd, lad os prøve denne igen, men blot med mit nummer. På forhånd i functions.php, Jeg har skrevet denne funktion her. Det hedder tekst, og det tager i tre argumenter. Et antal, en bærer, og en besked. Jeg bruger en switch-statement, som vidunderligt PHP tage strenge, ikke bare heltal, og jeg havde ikke gennemføre al den støtte for dette endnu, Jeg har netop gjort AT & T og Verizon. Fordi det viser sig at med disse luftfartsselskaber de har e-mail til SMS-gateways, hvor du kan faktisk Send en e-mail til en adresse ligesom telefonnummer på vtext.com og hvis brugeren ikke har blokeret meddelelserne, vil det gå igennem er en tekstbesked. Nu for at gøre dette, vil jeg nødt til at tilføje ét felt virkelig hurtigt til min database. Jeg har tænkt mig at gå ind i min struktur, og jeg er vil gå videre og tilføje en felt ved slutningen af ​​tabellen. Lad os klikke på Gå, og jeg er vil kalde dette luftfartsselskab og for nu jeg har tænkt mig at forlade dette som en bar tekst, men vi kan være mere avanceret i fremtiden. Jeg har tænkt mig at gå hurtigt ind i mit bord, og jeg er kommer til at slippe af med Rob, fordi det er en falsk nummer, Jeg har tænkt mig at gå ind i edit her, og jeg er kommer til at ændre min karriere manuelt at være Verizon, som det er, og nu herovre. Lad os gøre en hurtig sanity check. Lad os åbne vores tekst script, som ser sådan ud, bærer er% s. Vi laver en masse mere fejl kontrol, end jeg gjorde i 2012, bærer. Og nu, jeg har tænkt mig at gå fremad og re-køre scriptet. OK. Carrier er Verizon, hvilket betyder, nu forhåbentlig kan jeg gøre netop dette. Korrekt dette år, forhåbentlig, her er vi gå. Så inde i denne for-løkke, er jeg vil ikke kun har denne printf, Jeg vil også ringe til tekst og brugen af ​​denne funktion tilbagekaldelse var det tager et nummer, et bærer, og en besked. Så lad os se, er nummer kommer til at være rækken citat citat slut "nummer" rækken citat citat slut "transportør" og den sidste var beskeden. Må ikke skrue op dette år, semikolon. OK. Fingrene krydsede. Lad os se om det virker. Okay, så. Her går vi. Lad os låse telefonen op, krydse fingre, for fanden. Undefined variable may-- oh Vent, vent, vent, real hurtigt. Rigtig hurtigt, virkelig hurtigt. Det er fuldstændig det værd. Lad mig få fat i, lad mig få fat i, uh-oh. Tak, teksterne har startet fra en anden. Lad mig gå videre og åbne op real hurtig, dropbox.php / mail her. Standby. Fuldstændig værd. Downloads. OK, kilde src8m. OK. Har brug for en mere linje her. Oh der er det, det er i Frosh IM, det er i register på tre. Oh hej, Margo, mange tak. OK, og jeg manglede denne linje her. Så lad mig hurtigt fat denne linje kode, som omfatter mail eller biblioteket at jeg faktisk vil bruge, Jeg har tænkt mig at hurtigt gå tilbage til funktioner, Jeg har tænkt mig at gå til toppen af ​​denne fil og kræver denne fil så godt, og nu vil jeg virkelig krydse min fingre, når jeg gå tilbage til kommandoen line script, som er inde i dagens lokale vært bibliotek. Kør tekst. Enter. Mail. Standby. Standby. Mail. Åh, OK. Her går vi. Mail får ny PHP mailer. Har jeg gør det rigtigt? Damn det. At-- åh, vent, vent, vent. Stand by. Jeg lover, det er kommer til at være så det værd. Adresse. Det er derfor jeg ikke gør eksempler lige før klassen. Ugh. De følgende modtagere mislykkedes. Lad os prøve en sidste ting. SMTP indstilles fra, tilsæt adresse, adressen er faktisk, at. Lad os prøve denne sidste del i adresse. Øv, jeg er virkelig ked af det lige nu. Tak. Men jeg virkelig værdsætter alle de tekster, du har været at sende. Du har fået denne David. Du blæser det. Lad os overlade det der og vi vil løse på mandag. Se dig derefter. Daven FARNHAM: Og nu Deep Tanker ved Daven Farnham. Hvis et binært træ falder i en skov og ingen er omkring til C it-- [klukker].