[MUSIK SPELA] DAVID J. MALAN: Okej. Välkommen tillbaka. Detta är CS50. Detta är slutet av vecka 8. Och som ni vet, vi har ganska ordinarie kontorstid i ett fåtal av matsalar, inklusive Annenberg. Och en del av laget vänligt tog några bilder på sistone. Och för att hedra Halloween, trodde vi att vi skulle dela en som snarare fångade oss överraskning här i Annenberg Hall bara häromkvällen. Din klasskamrat Jacob poserade för detta foto, men var mer underhållande var på Facebook, den efterföljande konversation som hände efteråt. Hans första inlägg som svar till hans foto var det. Några minuter senare, bestämde han till en upp sig med detta. Det fortsatte sedan att gå till denna, och sedan, ännu mera roande är när hans mamma instämde. Och sedan slutligen, verkar detta var bara en underbar knep för en spela som händer. Så, om du vill att se Jakob och andra, bland dem Cynthia Meng, som är bakom kulisserna i CS50 zonen personal, gå till denna URL och detta spel här. Så utan vidare, idag har vi fortsätta titta på webbprogrammering, och det faktiska skapandet av program som inte körs på din kommandorad, men i stället köras inuti en webbläsare. Förmodligen nu, eller mycket inom kort, du kommer att vara mitt i genomförandet en egen webbserver, vilket skiljer sig från webbprogrammering. Webbservern i pset6 handlar om skriva programvara som vet hur man tar HTTP-förfrågningar från en webbläsare, eller till och med från er, en människa, med ett program som heter Telnet, och sedan svara på dessa förfrågningar antingen genom att spotta ut en HTML-fil, eller en JPEG, eller en gif, eller ens en .php fil. Men med en webbserver, är det inte tänkt att bara öppna en PHP-fil, något som slutar på .php, och sedan spotta ut innehållet. Det är tänkt att göra vad man den filen först? Så att säga. Inte kompilera det, sade vi på måndag, men rather-- Så tolkar den. PHP är ett tolkat språk, och så en av de viktigaste funktionerna i din webb server, om än implementeras av oss, är denna förmåga till webbservern att lägga märke till, oh. Detta är en fil som slutar på .php. Låt mig inte bara skicka den till användaren som det är statiskt innehåll, utan låt mig läsa det rad för line, från vänster till höger, och tolka den. Och att göra, att du killar kommer i huvudsak punt till ett program i apparaten, och på en massa av datorsystem, bara kallas PHP. Det är namnet på PHP på språkets egen tolk. Så den biten vi genomför för dig, och vad som återstår för dig, i slutändan, är ett nummer bitar, bland vilka genomför stöd för statiskt innehåll. Men nu, och med Problemet satt sju, du är kommer att börja övergången till faktiskt skriva PHP-kod som får tolkas av att prata med en back end databas som lagrar information. Så låt oss bättre förstå först ett par av dessa superglobals och hur mycket kraft du komma ur lådan gratis med ett språk som PHP. Saker du inte har att genomföra själv. Så vi såg på måndagen $ _GET, som är en superglobal, vilket är just PHP talar för en global variabel du kan komma åt överallt. Och vad är inne i $ _GET? Vad finns inuti denna superglobal som vi ser? Säkert statist vid Minst en person vet. Vad är inne i $ _GET? Yeah? PUBLIK: Det är variablerna du sätter i frågesträngen. DAVID J. MALAN: Perfect. Det är variablerna dig sätta i frågesträngen. Så i våra äldre exempel på reimplementing Google när vi hade en webbadress, och sedan frågetecken, som avgränsar början av HTTP parametrar, då vi hade q lika något, som q är lika med katter, Vad automatiskt skulle gå inne av att $ _GET super globalt för dig, på grund av PHP, är en nyckel till Q, och värdet av dessa katter. Med andra ord, $ _GET och alla av dessa saker är associativa arrayer, hashtabeller av slag, som lagra nycklar och värden. Nu, tillbaka pset5, hash bord som du kan ha genomfört, eller prova du kanske har genomfört, verkligen var effektivt en associativ array, en datastruktur där du kan associera nycklar med värden. Men i pset5, värdena var triviala. Värdet var i huvudsak sant eller falskt. Är ordet i ordlistan? Så när du hash ett ord som äpple för att se om Apple är i ordlistan din funktionskontroll förmodligen return sant eller falskt. Så, det är effektivt värde vi får tillbaka. Men vi såg i måndags kort, kan du säkert associera mer intressant värden än bara sant eller falskt med nycklar, som äpple. Du kan faktiskt tillbaka en godtycklig sträng, och faktiskt, det är vad $ _GET och dessa andra variabler låter dig göra. Så $ _POST är liknande i anden, men om du skickar in en blankett via post, en annan HTTP-metoden som är används för saker som kreditkort, och privat information, och till och med binär information såsom bilder, dessa saker hamnar inne i $ _POST. Och faktiskt för filer som JPEG och allt, det finns även en annan som inte är upp här kallad $ _FILES också. Så, server vi inte att bo på för mycket, men det ger dig tillgång att sortera på lägre nivå detaljer om själva servern som du använder. Cookie och sessions, fast, vi får ett effektivt sätt ser nu. Det sista är det som vi använder för att genomföra begreppet en kundvagn. En super enkel, men minns att vi hade detta exempel här, räkna hur många gånger du hade besökt denna sida tidigare. Men idag, i stället för att bara titta på effekten av detta, låt oss öppna upp Chromes Inspector, som du kan oftast göra genom att högerklicka eller Ctrl klicka var som helst på en webbsida, och välj sedan inspektera elementet. Eller så kan du gå igenom menyerna som vi beskriver i pset6 s spec. Och jag kommer till fliken Nätverk här, och låt oss titta på en stund HTTP-trafik som är går fram och tillbaka. Låt mig först gå vidare och tydlig Chromes cache. Så en del av er kanske känner med denna teknik redan, och vi kommer att använda det för felsökning här. Nu vi som datorn Forskarna kommer att börja gör det här för felsökning ändamål, varigenom Vi kommer att rensa cachen, typiskt, så att vi kan bli av med saker som kallas cookies. Så du är förmodligen allmänt bekant med vad cookies är, eller åtminstone att de finns, men vad är din förståelse för dem, som bara en användare av datorer, vad är en kaka? Yeah. PUBLIK: Det är lite of-- bra, inte bit i en tid av datavetenskap. Det är en bit av data som en webbplats skickar till dig för för att kunna spela in statistik på dig. DAVID J. MALAN: OK, bra. Så det är en bit av data som en server, sätter på din dator, och låt oss generalisera det ännu mer, det är en nyckel value-- bra, det börjar bli mer exakt. Det är en bit av informationen, en bit av data, att en server kan att sätta på datorn och väldigt ofta, gör servern detta för att komma ihåg vem du är. Så till exempel, odds är du förmodligen inloggad på sajter som Facebook, eller Gmail, eller andra före, och du loggar in med ditt användarnamn och lösenord, och sedan efter att under ett antal av minuter eller timmar eller tom dagar, servern minns att du är faktiskt loggat in. Nu, hur är det egentligen som händer? Eftersom du absolut inte skriva om ditt användarnamn och lösenord varje gång du navigera till en annan sida på Facebook. Så visar det sig att cookies är svaret. En cookie kan du tänka på som, slags vilja, en digital handen stämpel som du kan få på en nöjespark parken eller en klubb som i huvudsak anger att du har varit här innan, och du har redan visas ditt ID till bouncer, för exempel, och att klubben eller parken bör nu anta att du har autentiserats redan. Du har redan identifierats av den. Så med det i åtanke, låt oss öppna upp räknaren här. Låt mig gå vidare, jag bara gjorde, och rensa alla mina cookies. Och nu vad jag ska göra är att Håll Shift, bara för bra åtgärd, och våld ladda om sidan. Shift bara se att ingenting blir cachade. Och här är begäran som gick fram och tillbaka. Så här borta har vi en förfrågan, och låt mig zooma in här nere, och en hel del av detta är en slags ointressanta detaljer för nu när webbläsare har automatiskt skickats, men låt oss klicka på Visa Källa för att se rå rubriker. Och om du redan har dök in pset6, du kommer säkert att känna igen saker så här, och kanske lite av dessa andra linjer här, men vad är mer intressant för idag om jag bläddra ner, inte på begäran utan att den så kallade respons, denna linje ser förmodligen bekant. Det är en bra sak när du ser en 200 OK. Tydligen är detta datum och tid på servern och det finns en massa grejer. Åh, detta är intressant. Det visade sig att när du använder PHP, åtminstone i denna server, servern spottar ut vad version av PHP du använder. Vilket, faktiskt, för säkerhet ändamål, är inte bra. Men, vi ska återkomma till detta en annan gång kanske. Men nu är den saftiga nätet idag, och vi såg i korthet några av dessa, Jag tror med Facebook när vi petade runt Inspector på den tiden, set cookie är vad som planterar den lilla bit av information på din dator. Detta är ett HTTP-huvud det är ett effektivt sätt berätta din webbläsare, Chrome, IE, vad som helst, hej webbläsare butik på användarens hårddisk, eller i användarens RAM, en nyckel som heter PHPSESSID, som är en stenografi notation för sessions-ID, och ge den ett värde av 0vlk8t, punkt, punkt, punkt. En riktigt lång pseudo slumpmässig alfanumerisk sträng. Det är bara ett riktigt stort antal, men det är kodade med bokstäver och siffror så att storleken av det kan vara ännu större än enbart siffror. Och sedan, förresten, Path = /, att betyder bara att den här cookien ska vara associerad med den helhet av webbplatsen, inte bara en viss sidan det hela. Så detta är den virtuella handen stämpel. Det är som om servern, Facebook, eller i vårt fall apparaten, har bokstavligen skriven 0vlk8t och så vidare, på din hand. Lägg märke till vad serverns, inte gör är det inte lagra mitt användarnamn, säkert inte lagra mitt lösenord. Istället verkar det vara lagring av pseudoslump informationen så att ingen kan gissa vad min hand stämpeln är. På serversidan, under tiden, servern kommer att minnas, förmodligen i en databas eller något, att användaren, som i framtiden presenterar en handstämpel 0vlk8t, pricka, dot, dot, bör förknippas med detta särskilt kundvagn, så att säga. Med andra ord, om jag nu går tillbaka hit och ladda om sidan, hur servern känner som jag besökte en gång? Eller om jag gör det igen, hur servern vet att jag har besökt det två gånger? Tja, om jag går ner till denna senaste begäran, som är nu den tredje som jag har sänt totalt, märker min begäran nu. Det finns fortfarande här begära upp här, samma som tidigare, det finns fortfarande en hel drös saker som vi har ignorerat som tidigare, men den allra sista header, detta tid, eftersom jag har varit här innan, är en presentation av denna virtuella handen stämpel. Varigenom denna linje här, inte ställa kaka men kaka kolon PHPSESSI = 0vlk8t, det är bara min webbläsare automatiskt presentation av denna hand stämpel så att nu servern, så snart som den inser, ooh, det här användar 0vlk8t prick, pricka, punkt, Jag kan nu minnas vem han eller hon är och associera med den användaren vad information som jag vill, och alla att information kan lagras av dig, programmeraren, i $ _SESSION. Så för att vara tydlig, om jag öppnar upp riktigt snabbt i gedit att själva filen, counter.php, i min lokala värd offentliga katalogen som tidigare, att märka det, ja, Jag är slutligen lagring i $ _SESSION Citat unquote "räknare", värdet av den föregående räknare som Jag får från dessa rader upp här att vi såg på förra gången plus ett. Så under huven, det är alla cookies är. Det är just den typ av digitala handen stämpel som går fram och tillbaka, och ärligt talat om du öppnar Chrome Inspektör på en webbplats du besöker i dag, med super hög sannolikhet, du kommer att se kanske en, kanske ett halvdussin cookies bli ihågkommen av dig. Och ännu värre, om de webbplatsen du besöker alla annonser, vilket är förvisso ganska vanligt i dag, och om dessa annonser kommer från några centrala parti, någon som Google eller AdWords som de ring någon av deras produkter eller andra sådana leverantörer som sälja annonser, vad som är intressant, och ärligt talat vad är lite oroande, om hur HTTP fungerar, är att om du har en annons inbäddad i Facebook.com och Google.com, och Harvard.edu, vilket antal av webbplatser, så det är en sådan att det finns en mellanhand som avtjänar annonser för alla tre av dessa webbplatser, Det visar sig att cookies är per domän. Så om du har en annons som kommer från Samma företag på olika webbplatser, att företaget på ett effektivt sätt kan spåra vem du är över alla dessa webbplatser. Harvard kanske inte vet du besöker Facebook. Facebook kanske inte vet och Du besöker Harvard. Men oavsett annonstjänst de använder, om den domänen är närvarande i både Harvard.edu banan sidor och Facebook.com webbsidor, Detta mitten mannen vet säkert vem du är på grund av dessa kakor som delas över, eller snarare, att så kallade mellanhänder. Så vi ska återkomma till detta i säkerhetskonsekvenser av dessa, men det finns en hel del information lagras om dig när du besöka de flesta en webbsida på internet och det verkligen reduceras till denna mycket enkel mekanism. Vad händer då, om du är super paranoid och du väljer att gå in i Chrome eller IE eller vad som helst och stäng av dina cookies? Vad händer? Yeah? Du really-- du har gjort det här rätt? OK. Nej, gå vidare. PUBLIK: Vissa webbplatser har inte en funktion utan det gillar Facebook. DAVID J. MALAN: Yeah! Så vissa webbplatser kommer bara sluta fungera. Och i de flesta webbplatser dessa dagar som i grunden är beroende av cookies, speciellt om de har du loggar i, de är bara att bryta. Eftersom överväga alternativ, om webbplatsen har ingen möjlighet att komma ihåg vem du är, och därför kan din webbläsare är inte representerar varje HTTP begäran av den här handen stämpel, effektivt en webbplats som Facebooks pågående att behöva be dig logga in varje darn tid du byter sida, eller klicka på en länk, som är väl inte en särskilt bra användar erfarenhet. Så att det är också bland avvägningar. Så utan vidare, låt oss ta för givet att med webbprogrammering, i språk som PHP, kan du komma ihåg uppgifter som det i problembild sju när du genomför din egen E * Trade-liknande webbplats som man kan köpa och sälja aktier, kommer du ihåg exakt vad användaren har köpt och sålt och vem han eller hon är genom denna session. Men vi kommer att behöva en snyggare sätt än e-post börja hålla information kring. Rätt? I måndags talade vi om Frosh IM och hur i version ett av denna webbplats, år sedan, allt vi gjorde var maila Proctor som är ansvarig för Skolidrott program, namn och kön, och oavsett om de är en kapten, och studentrummet av någon som är registrerar sig för en intramural sport. Så det är inte dåligt, men han eller hon sedan fick troll igenom sin e-post, gör ett kalkylblad eller något liknande att för att hålla allt organiserat. Visst måste vi som programmerare kan göra detta för den proctor. Och så gå in i SQL, Structured Query Language, som kommer att se ganska annorlunda än både C och PHP, och du kommer att dyka i mycket mer händer på PHP och problem satt sju men även SQL, eller SQL är detta ett språk som du använder för att prata med en databas. Men vad är en databas? Jo du tänker på en databas, åtminstone för nu, så bara vara som en Excel-fil, eller om du är en Mac-användare ett nummer fil, eller om du är en Google Apps användaren en Google kalkylark, Det är i praktiken en databas, eller egentligen specifikt en relationsdatabas. En relationsdatabas är bara något som har rader och kolumner, och du kan lagra alla typer av informationen i dessa rader eller kolumner. Men vad är trevligt om SQL och om faktiska databaser, inte bara kalkylblad eller Google kalkylblad, är att du kan använda ett språk att faktiskt köra frågor till infoga data, ta bort data att leta efter data, även viktigast av allt, och ni behöver inte använda det ganska manuellt som du kanske vanligtvis en Google kalkylblad så här. Så i SQL, det finns ett gäng grundläggande uttalanden eller bitar funktionalitet inbyggd. Det finns många fler än dessa, men du kan gå en enorm distans bara genom att veta att detta språk kallas SQL har minst fyra uttalanden som du kan utnyttja. Radera för att ta bort data Infoga för att lägga till rader, Uppdatering, för att ändra rader, och Val, för att få tillbaka rader och det är verkligen vad SQL gör. Den fungerar helt på rader så att när du sätter i eller tar bort, eller uppdatering, eller välj vad du är komma tillbaka som en så kallad resultatuppsättningen, som en matris med rader. Ett gäng rader från en tabell. Så tillbaka i dag, och till och med i dag, du kan interagera med databas med hjälp av en kommandorad, men det är inte särskilt roligt att använda denna svartvita stil fönster och faktiskt utföra kommandon och rota runt din databas. Ett grafiskt användargränssnitt eller GUI, är mycket mer att föredra, utan tvekan, och så det verktyg vi rekommenderar och förinstallerad för dig på apparaten kallas phpMyAdmin. Det är en total slump att Namnet på den här saken har PHP i den, det betyder bara att folket som skrev detta program själva skrev det i PHP. Men det är i slutändan om hur du administrerar en databasserver, som en MySQL-server som du kan ha, som ni gör, i CS50 apparaten. Så det finns närmare här än Vi behöver bry sig om i dag, men vad är nyckeln är att på den vänstra sidan finns en lista med databaser som du har på din dator, på din CS50 apparat, eller komma slutliga projekt som du kanske har på en tredje part, ett företags webbplats eller webbserver, att du kanske betala för rymden. Så på vänster är databaser, en av vilka är pset7 som jag lånat från nästa veckor pset, och sedan på toppen det märker att det finns en gäng flikar, av vilka är databaser, SQL, status, användare, export och så vidare. Så du kan gå en lång sätt bara genom att inse att de flesta av användargränssnittet är i det övre vänstra kolumnen och över den övre höger uppe. Så vad kan vi egentligen göra med detta? Nåväl, låt oss börja skapa en bit av information enligt följande. Antag följande är fallet, som kommer att vara i bara några dagar, du vill genomföra en hemsida, som kallas CS50 Finance, och denna webbplats kan du köpa citera unquote och sälja aktier. Och det kommer att räkna ut priset på dessa bestånd, i slutändan som du ser, genom att tala med Yahoo Finance. Vilket härligt, har en gratistjänst där du kan skicka i ett börsinformation som GOOG för Google, och det kommer ge dig tillbaka Googles nuvarande lager pris inom det förflutna några minuter åtminstone. Så du kommer att använda det, i slutändan, att låtsas för användaren att köpa och sälja verkliga bestånd som använder virtuella pengar, men det allra första användaren kommer att se är detta inloggningsskärmen som ber dem för sitt användarnamn och lösenord. Och så, en av den första utmaningar för dig i pset7 kommer att vara att genomföra den bakre änden databas, kalkylbladet om du vill, det kommer att lagra användare och lösenord och slutligen vad bestånden de äger, och hur många, och hur mycket pengar de har, så en massa andra saker i andra tabeller, eller kalkylblad. Så låt oss ta en titt på hur det kan verka vid första anblicken. Jag kommer att gå tillbaka till apparaten och jag är kommer att gå till denna URL här phpMyAdmin localhost / phpmyadmin och du kommer att se att det tar mig till ett gränssnitt precis som vi såg på skärmdump, och här jag har en extra databas kallas föreläsning för idag och låt mig gå vidare först och klicka på pset7. Jag verkar ha ett par alternativ, en för ny, för att skapa en ny tabell, och en länk till användarna, vilket är en tabell jag redan skapat. Så vad är en tabell? Så om du använde Excel innan, och om du har använda siffror eller Google Spreadsheets, du öppnar upp ett fönster och du får en hel massa rader och kolumner, men då du brukar ha kalkylblad längs botten, eller separata flikar. Du kan tänka på varje kalkylblad som en tabell så att databasen, i slutändan, är en kombination av en eller flera tabeller, en eller flera kalkylblad, i värld av en normal kalkylblad. Så låt mig gå vidare och klicka på den här arbetsbladet att jag förgjorda, kallade användare, alias Databastabell. Och om jag bläddra ner här, Låt mig zooma ut lite, detta är vad phpMyAdmin berättar oss är inne i den här tabellen just nu. Det är lite förvirrande i början blick eftersom gränssnittet är inte den vackraste sak i världen, utan Vad som är intressant är denna del här. ID, användarnamn, och hash. I förväg, och du ska vara handed detta i problemet satt sju, Vi ger dig en fil som innehåller en super liten databastabell, lånade faktiskt från hacker upplagan av problemet satt två, insidan av vilka det finns sex rader. En för Belinda all ända ner till en för Zamyla, och märker till vänster om dem användarnamn är unika ID: n som en, två, tre, fyra, fem, sex, heltal, och sedan till höger är hashar. Och om, oddsen är, har du inte göra hacker edition problemet satt två, men en hash är precis som ett krypterat lösenord med några varningar. Och så, vad du ser här är de krypterade versioner av alla sex våra lösenord från problem ställa två s hacker upplaga. Nu till vänster är bara några GUI grejer, redigera denna rad, kopiera den här raden, radera den här raden. Men vad som är intressant nu är följande. Jag kan faktiskt börja experimentera med denna tabell. Så om jag går och klicka på SQL fliken, jag får detta stora textrutan. Och det är inte hur vi ska göra det när det verkligen att skriva kod. För att vara tydlig, phpMyAdmin är bara ett verktyg som är kommer att låta oss rota runt i databasen och låt oss experimentera med frågor. Så till exempel, anta Jag kör just detta. Välj, vilket är ett av de som sökord jag nämnde tidigare, stjärna, som representerar alla kolumnerna i en tabell. Från vilken tabell? Tja, användare. Och meddelande finns det här konstig konvent i SQL där du faktiskt använder tillbaka fästingar, typiskt, inte apostrof och inte dubbla citationstecken när man talar om bord namn, så baksidan citat är grejen på övre vänstra på tangentbordet mest troligt. Så låt mig gå vidare nu och bara lämna det ensam och bläddra ner och klicka på Sök, och vi är faktiskt kommer att se samma sak. Vi har just genomfört en SQL-fråga säga väljer allt stjärna från tabell som kallas användare, och vad du får tillbaka det här. I slutändan kommer vi att kunna göra samma sak i koden, men nu allt jag ville tror var ser det i min webbläsare. Nåväl låt oss göra något lite annorlunda. Låt mig gå tillbaka till fliken SQL, och låt oss bara säga att vad? Zamyla har förlorat alla sina pengar, och därför är det dags för oss att ta bort henne som användare. Hon inte längre logga in. Så jag ska säga radera from-- bra, underhålla aktivering för konsekvens, ta bort från användare där. Och så kan vi ha dessa predikat, eller dessa kval, i slutet av mitt uttalande var och hur kunde jag ta bort Zamyla? Genom hennes namn Zamyla, så kolonn, en av kolumnerna hette, så där namn = "Zamyla". Och här använder jag dubbel offerter eller apostrof, du bara använda baksidan fästingar när talar om namnen, t.ex. tabeller eller fält. Och låt mig klicka Gå hit. Och nu är webbsidan att vara lite spända. Eller vill du verkligen vill köra bort från användare där namn är lika Zamyla? Ja. Så nu, om vi går tillbaka till mitt bord genom att klicka användare, märker att Hm. Jag goofed. Och faktiskt, jag liksom klickade bort så fort du inte ens se rött felmeddelande, kanske. Vad gjorde jag för fel? PUBLIK: Du behövde inte att kapitalisera hennes namn. DAVID J. MALAN: Ja jag aktiverade hennes namn, men hennes username-- faktiskt jag gjorde ett par misstag, eller hur? En är hennes användarnamn zamyla, gemener Z, och kolumnnamnet är användarnamn, inte namn, så låt oss göra det igen. Låt mig gå vidare och radera från användare där användarnamn är lika med citat unquote "Zamyla". Okej? Så det här ser lite bättre, låt mig gå scrolla ner och klicka på Sök. Det kommer fortfarande att skrika på mig för att vara säker. Jag klickar på Ja, och nu ser vi, uppriktigt sagt detta hände, egentligen snabb, mindre än en andra säkert, detta är precis den frågan som fick avrättades. För att bekräfta, låt mig klicka användare och faktiskt nu Zamyla är borta. Nu gör det motsatta. Antag att Gabe vill anmäla sig till webbplatsen. Vad är SQL-fråga, vad är det kommando jag kunde skriva att lägga Gabe? Jo det är ganska enkelt. Sätt in användare, och nu det blir lite kryptiskt. Jag måste ange, till servern, vilka områden jag vill tilldela. Jag bryr mig egentligen inte vad Gabe ID nummer är, så jag kommer att hoppa över det. Jag stället ska säga användarnamn, hasch, och sedan de värden som jag vill sätta det kommer att bli Gabe. Och sedan hans hash, jag vet inte. Så nu kommer jag att lämnar det som ett stort att göra. Vi ska återkomma till att i problemet inställd spec om hur du faktiskt gör det. Så märker, igen, syntax. Sätt in i tabellnamn, sedan en parentes lista över fälten, de kolumner som du vill lägga till värden till och sedan bara exakt samma beställning vänster till höger om de värden som du vill lägga till, och det är bara att linda eftersom texten är lite lång. Så nu vill jag klicka på Gå. En rad infogas. Och nu om jag går tillbaka till användare, vad som är intressant är att det inte bara är Gabe nu i databas, vad är tydligen hans ID? Jo det är sju. Varför är det sju när jag inte lägga till den? Så det här är också en av de funktioner du får av databasen. En hel del inbyggd funktionalitet. Det visar sig att när skapade denna tabell, Jag förkonfigurerade det automatiskt tilldela ett ID på ett sådant sätt att det inkrementerar. Så om du någonsin petade runt, och tittade på vad ditt Facebook ID nummer är, dessa dagar är det inte riktigt en sak att göra, men Facebook som ett API, Application Programming Interface, där du kan få tillbaka en massa data om själv, om dina vänner, och dina kontakter. Och vad som brukade vara snäll av cool, tillbaka i dag, var att slå upp vad din Facebook ID-nummer var. Mark Zuckerberg, till exempel, är tre eftersom han var författare av webbplatsen. Och som historien går, skapade han två testkonton, användare ett och två, som han bort då. Och så, Zuck, är hans användarnamn som på Facebook, är ID-nummer tre, och alla vi har siffror mycket större än tre i dessa dagar. Faktum är att någon gång Facebook förflyttas bort från och med hjälp av en int, som är en 32-bitars värde, att genom att använda nästa steg upp, i huvudsak en lång lång så att de kunde rymma ännu fler användare som registrerar sig. Så en rolig liten historiskt faktum. Så det är bara grundläggande syntax som vi kan köra ett par frågor, men vi kan faktiskt göra en massa mer saker med SQL. Och du ser, i slutändan, i problemet satt sju att du måste göra en antal designbeslut, bland dem kommer att vara vilka data typer som ska användas. Så precis som i C, det finns uppgifter typerna i en databas, som MySQL, och de datatyper som du har att välja från bland annat dessa områden här. Röding, varchar, Int, stort int, decimal och datum tid, och många andra. Så låt oss verkligen göra det här. Låt oss låtsas att vi inte hand du här användarens bord och låt mig gå vidare och skapa, för mig själv, i föreläsningarna database-- faktiskt Låt mig gå vidare och ta bort tabellen har jag i här redan så att vi faktiskt kan skapa denna. Hoppsan. Jag kommer att släppa detta bord, och nu är jag kommer att gå igen till föreläsning databas över här, Jag ska skapa en tabell kallade användare och låt oss bara göra tre kolumner initialt och klicka på Gå. Nu, för det mesta, återigen, det är bara med hjälp av denna grafiska verktyg som kallas phpMyAdmin, och vad vi gör nu skapar en tabell. Så det här är som att gå på Arkiv, Nytt, och skapa en ny Excel-fil. Så det ber mig ett par frågor, från vänster till höger, vad är namnet på den första kolumnen, och sedan namnet på den andra kolumnen och namnet på den tredje. Så låt oss återskapa denna. ID och sedan användarnamn var en, och sedan hash var en annan. Så vad ska datatypen vara nu ett fält som ID? Här är hela listan över datatyper tillgängliga i en databas, och nu ska vi bara gå med int. 32-bitars värde, det gör jag inte tänka realistiskt är jag kommer att ha mer än 4 miljarder användare i mitt konto, i min tjänst, så jag kommer att hålla i rörelse vidare till nästa fråga. Jag tänker inte ange en längd eller värderingar, det är inte tillämpligt för en int här, i och för sig. Och nu kan jag specificera, tydligen, en standard värde, som jag inte kommer att specificera. En sammanställning, jag vet inte vad det är. Ett attribut. Nu vi faktiskt gör ha ett beslut design. Så det finns några områden som här, inte alla av dessa är tillämpliga, men unsigned betyder bara vad? Att int vara? Bara icke-negativt. Så det måste vara 0 på upp. Nej, jag kommer inte att kontrollera eftersom Jag vill att varje användare har ett ID, det kan inte vara null. Och då får vi lite mer intressanta designbeslut som denna. Vi ska återkomma till detta i ett ögonblick, men vad en annan funktion i databasen är, är att du kan berätta databasservern gå vidare och optimera dig själv, din RAM och din hårddiskutrymme, så som väljer, och skär, och bort, och uppdateringar är riktigt snabb. Jämför detta med pset5. Om du ville söka upp något i hash-tabell, som du tänker på som en databas, som hade att göra alla arbeta för att göra din hashtabell snabbt. Det är som, självklart, du. Rätt? Du var tvungen att sätta in hela tiden böter tuning saker, att få en hash-funktion rätt, räkna ut hur många hinkar att ha. Men vad är trevligt, återigen, om en databas är du just stakbåten alla detta till andra människor som har tänkt här igenom för dig, och vad Jag kommer att säga här under index är att min ID-fält kommer att vara det primära sättet att identifiera användare i denna databas. Jag tänker inte tänka av Zamyla som Zamyla, Jag kommer att tänka på henne som nummer 6. Varför är det kanske bättre intuitivt att tänka på och modell alla dina individuella rader med hjälp ett nummer i stället för något som en sträng, som den Zamyla eller Gabe eller längre sträng fortfarande? Yeah? PUBLIK: Ett ID är unikt? DAVID J. MALAN: Säg igen? PUBLIK: Ett ID är unikt? David J. MALAN: En ID är unika, men suppose-- såsom är fallet i allmänhet med användarnamn, antar Jag sa också att det kan bara finnas en Zamyla i världen, och endast en Gabe. Jag skulle kunna införa det unika hinder för strängar, även om jag ville. Så inte en dålig tanke. PUBLIK: Säkrare. DAVID J. MALAN: Säkrare, varför? PUBLIK: Du kan inte säga vilken är att, som i användaren. DAVID J. MALAN: OK, du kan inte berätta vilken användare är som så att det finns en integritetsaspekten till den, särskilt om ID kanske som förekommer i webbadresser. Så visst, det kunde typ av arbete, också. Andra tankar? Yeah? PUBLIK: Det är lättare att utföra operationer på en int. DAVID J. MALAN: Det är den verkliga kicker. Det är bara mer effektivt, eller lättare för datorn, att utföra operationer på ett heltal. Rätt? En int garanteras vara 32-bitars, medan Zamyla är några tecken, Gabriel är några fler tecken, Davenport är riktigt långt, och så är det inte särskilt effektivt att använda strängar för att jämföra värden och ser för fält, och uppdateringsfält, om du kan komma undan med bara ett heltal. Bara 32 bitar. Så användarnamn, även på detta sätt, behöver inte vara unika, även om de antagligen borde vara, och även på detta sätt alltför en användare skulle kunna tillåtas att förändra sitt användarnamn. Så låt oss nu lämna detta som främsta medlet för att identifiera användaren. Detta är talande databasen gå vidare och optimera själv så att ser ups på ID är supersnabb. AI, fruktansvärt namnges, precis innebär automatisk ökning, och detta är kontrollen rutan vi måste kolla att ange att ID-fältet till uppdateras automatiskt för mig, och sedan ska jag Bläddra till höger här och ärligt talat är jag inte riktigt intresserad i något flera av dessa områden. Absolut inte i dag. Så jag kommer att gå tillbaka hit, till den första kolumnen, där Jag måste ange användarnamn och hasch, och låt oss åtminstone fokus på andra för nu. Int är förmodligen inte rätt samtalet, så vad är mer förnuftigt kanske? PUBLIK: Text. DAVID J. MALAN: Säg igen? PUBLIK: Text. DAVID J. MALAN: Text? OK, jag hörde text. Vad mer? Vi har lite av en massa val som är text i naturen. Så när, och varför, gör du använder någon av dessa? Tja röding, i motsats till vad du kanske tror inte ett enda tecken. Det är ett visst antal tecken. Så om vi vet att alla användarnamn måste vara som åtta tecken, som brukade vara vanligt i äldre datorsystem, jag skulle kunna säga char och då kunde jag säga 8 här. Det var då den tredje kolumnen blir gäller när du skapar en tabell. Men det är typ av irriterande eftersom vissa människor kanske vill ha en längre användarnamn än åtta tecken, vissa människor kanske vill har en kortare användarnamn, så varför engagera mig till ett specifikt nummer? Varför inte ha en variabel antal tecken och bara säger att den maximala längden av ett namn är, jag vet inte, liksom 64 tecken. Jag kan inte komma på några vänner som har namn längre än 64 tecken, och även om det är för kort du kunde säkert bump upp godtyckligt. Så varchar är en variabel antal tecken. Text är inte en dålig instinkt, och uppriktigt sagt den sortens gör vad den säger, men ett textfält kan vara som 65.000 bytes minst. Det är förmodligen overkill för en fält, och i själva verket, Japp, 65.535. Det är förmodligen overkill för en namn, så vi ska hålla, typiskt, med varchars för text fält och hash, också. Hash, visar det sig, kan vi göra en varchar lika bra eller något liknande, men vi kommer inte att fokusera idag på kryptering där och siffrorna att vi kanske faktiskt vill använda för sin längd. Men låt mig rulla ner till höger. Du kan endast ha en primärindex för en tabell, men jag vill använda någon av dessa, Nu, till användarnamn, skulle du säga? Vad ska användarnamn bygga på en vag förståelse av dessa fyra alternativ? Bara genom deras namn? PUBLIK: Unique. DAVID J. MALAN: Så unikt, eller hur? Så visar det sig att det inte bara kunde du berätta en databas, på förhand, Detta är det främsta sättet av att identifiera områden. Du kan också säga att detta är kommer att bli en unik fält. Det kommer inte att vara det jag litar på, men jag skulle vilja databasen till i huvudsak har att om tillstånd, så att om jag någonsin försökt att registrera två användare med samma namn, databasen platta ut kommer inte att låta mig. Jag kanske har lite extra kod i PHP som förhindrar så mycket, men databasen också kan säkerställa att det aldrig kommer att hända. Nu, som en sidoreplik, särskilt som du tänker på examensarbeten, kom ihåg det index och full Texten är faktiskt ganska bra. Om du har en större databas, inte med dussintals, men med hundratals eller tusentals eller miljontals fält, kan du också berätta databasen i förväg Detta är ett område jag ska att söka på en hel del. Kanske dess användarnamn, kanske är det bio, om du är gör en Facebook-liknande webbplats som har stycken som användarens tillåtna spara och om du vill tala om databasen i förväg Jag kommer att söka på detta område en hel del, men det är inte nödvändigtvis unik, Du kan ange skapa mig ett index. Eller kan du också säga tillåta mig att göra slags godtyckliga sökningar som Command eller Ctrl F, som du kanske i en ordbehandlare, så du kan se godtyckliga strängar eller delsträngar inom detta område. Med andra ord, vi får till den punkt i terminen där du inte behöver oroa sig för hur man ska genomföra saker och ting på ett effektivt sätt. Du behöver bara veta vad designbeslut för att göra så att du är använda rätt verktyg för handel i syfte att utnyttja funktioner att andra människor har byggt åt dig. Så för att sammanfatta, primärt bör endast har en, kan du bara har en, och det är det du ska binda dig till använder för att identifiera områden som är unikt. Unikt är bara i samma anda, men du kanske bara ibland använda det, men du vill att databasen införa den. Index betyder bara i förebyggande syfte påskynda det hela i framtiden så att jag kan söka efter saker på detta område. Och sedan fulltext är generellt för stycken, eller essäer, eller stora kroppar av texten där du kanske också vill ha wild cards som motsvarande stjärnan. Höger. Så det var typ av mycket för alla på en gång. Låt oss se om vi inte kan destillera ett par av dessa funktioner och sedan bygga något ganska enkelt, men kraftfullt. Så bland annat designbeslut du är i slutändan kommer att ha är tillsammans linjerna av motorer förvaring. Och låt mig bara nämna i detta i väntan på examensarbeten, och förutse låt oss säga-- nej låt oss göra detta. Låt oss bygga denna lilla ansökan först. Jag kommer att gå in i min terminal fönster, och här är inte Endast counter.php, som vi nu ska att bli av med så inte längre är förbunden, men vi har en hel drös av kataloger och detta kommer att vara mycket likartad i anden vad du ser i problembild sju. Så vi har tre kataloger omfattar offentliga och mallar, vilket är precis där vi slutade på Måndag med hela vår MVC paradigm. Och återblick, offentligt kommer att gå alla filer som jag vill att användare faktiskt v kunna besöka in sin webbläsare via URL. Mall. Vad gjorde vi i mallar? Vilken typ av saker? Det var inte mycket men ett par filer åtminstone på måndag. Yeah. PUBLIK: Sidhuvud och sidfot? DAVID J. MALAN: Sidhuvud och sidfot. Så vi har något liknande i dag också. Vi har fått några fler filer, men Sidfot ser jag, Header jag ser, och sedan en massa andra filer. Så detta är motsvarigheten V MVC uppfattning, vilket, igen, kommer att vara lite mer tydlig problembild sju, men detta är bara en mapp är jag sätta en hel del av mina estetik. En stor del av min HTML, en hel del av mina former. Samtidigt innefattar, är en annan katalog som har dessa tre filer och låt oss ta en snabb titt på dessa. Jag kommer att gå vidare och öppna upp config.php. Som det visar sig, mycket liksom tidigare i tiden, du skarp inkluderade CS50 dot h med pset7. I dagens exempel, du kommer att göra det ekvivalent att med en kräva uttalande som effektivt omfattar dessa flera rader. Så för att vara tydlig, det är en fil som heter config.php. Och märker vad den gör. Det är uppenbarligen gör något kryptiska, slå på felmeddelanden så att du kan se dem i webbläsaren. Det är alltså tydligen kräver två andra filer så detta är som #include i C, och sedan detta vi fick se, och vi har förlitat sig på, stängs detta på den varukorg som funktionalitet. Detta innebär en cookie kommer skickas fram och tillbaka. Så varför är det här intressant? Tja, om vi går tillbaka till det här katalog och öppna upp, till exempel, constance.php. Lägg märke till att PHP stödjer konstanter, det är inte riktigt som #define i C. Istället du bokstavligen säger definierad och varsel som jag har lagrat i förväg fyra konstanter i den här filen. En för dagens databas för mitt lösenord, för mitt användarnamn, och för att namnet på servern. Så dessa faktiskt kommer att bli ganska lika i problembild sju. Och slutligen, och det är där jag är kommer att få några trevliga funktioner från personalen, i functions.php är ett gäng kod som vi har skrivit, och jag stal en del av detta från problemet satt sju för idag, gör att en massa saker och låt oss bara titta på en av dem i synnerhet. Denna funktion här, fråga, kommer att bli PHP-funktionen som vi kallar För att köra SQL. För en stund sedan var vi med hjälp av phpMyAdmin, men det är bara för slags inlärningsändamål och diagnostiska ändamål och glömma din databas set. När du faktiskt använder din databas, du som människa, uppenbarligen inte kommer att dra upp en webb sida varje gång någon registrerar. Du kommer att skriva kod som skär och tar bort användare på efterfrågan, och vi kommer att göra detta med hjälp av frågefunktionen. Om jag bläddrar nu nere, det finns kommer att bli några fler funktioner. Omdirigering kommer att vara en funktion som vi skrev för er som låter dig skicka användaren till en annan webbadress, och göra är en funktion, ganska precis vi såg i måndags, som faktiskt gör en mall, men mer om dessa i form pset7 egen promenad genom. För nu, låt oss gå vidare och göra det. Låt mig gå in i min föreläsningar bord och se till att det finns för närvarande inget här ännu, och låt mig också gå i min offentliga katalogen, där det finns bara en fil, index.php. Den här filen verkar vara super enkelt just nu ser det ut precis så här. Mycket likt hur vi slutade på måndag. Jag kräver här filen, config.php, vilket är i en omfattar katalog, som är dot dot, mina föräldrar, och sedan är det bara att göra den här filen. Så vad är den här filen? Vi öppnar upp i mina mallar form.php, och vi får se det här. Super enkelt, tydligen denna form är kommer att lämna med en $ _GET eller $ _POST. Snabb sanity check. Bokstavligen visuellt söka filen. Metod lika inlägg. Så det kommer inte att använda webbadressen, som Google gör, det kommer att sortera av skinn informationen bakom scenerna och det är kommer att underkasta sig en fil som heter register.php, och det är filen Vi har ännu inte skrivit men vad detta kommer att se ut är det här. Om jag går till en separat sida här är vad localhost / index.php ser ut. Och återigen, serverns bara under antagande index.php. Enter. Så det är där vi är på, och vad jag vill göra är att kunna skriva saker som David, och sedan mitt telefonnummer, vilket kommer att säga 617-555-1212 för nu, registrera och nu register.php kunde inte hittas. Så jag behöver för att genomföra detta. Så låt oss snabbt piska ungefär så här upp. Låt mig gå in i min offentliga katalogen och göra gedit av register.php, och nu ska jag gå vidare och Starta PHP-läge, som vi gjorde i måndags, och nära PHP tag, och låt oss göra ett par saker. Så en, jag vet, från efter att ha skrivit den formen, att jag vill kontrollera följande. Om den är tom, oavsett användarens skrev in till namnfältet och sedan Jag ska säga något som ursäkt saknade namn. Ber om ursäkt, under tiden, är inte en inbyggd PHP sak, Det är en funktion som vi skrev i functions.php för pset7 så att du har tillgång till den. Annars om den andra fält är tom, nummer, då är jag kommer att be om ursäkt till användarnamn och säga saknade nummer. Spara den här filen. Nu går vi tillbaka till min webbläsare, gå tillbaka till forumet försöka igen. Registrera. OK. Ingenting hände, vilket är bra. Jag fick ett felmeddelande. Men om istället, låt oss ladda om sida, och inte ge något. Fan också. Gör det. Registrera. Vad gjorde jag för fel? Om den är tom, $ _POST namn. Säg igen? Åh, naturligtvis. Jag glömde den viktigaste delen, som är kräver ("../ includes / config.php."). Jag behöver ha tillgång till apologize funktion, som Därför ingenting hände. Funktionen egentligen inte existerar. Så låt oss prova det här igen. Låt oss ladda om sidan klickar du på Registrera. OK. Där är det. Så utgången är vi ser här är resultatet att kalla en ursäkt funktion, super enkel, och det bara skriver ut vad som helst Jag ger det som argument. Okej, så låt oss samarbeta. Låt oss ge mitt namn som David, registrera, saknade nummer OK låt oss ger det också. 617-555-1212. Registrera. OK. Så allt är bra nu, bara något intressant händer. Så nu ska vi göra något mer intressant händer här. Låt mig gå in i phpMyAdmin, och låt oss faktiskt skapa en tabell som kallas användare, Jag ska ge det tre kolumner, och jag ska snart skapa ID, och sedan namn, och sedan numret, och ID-fältet är jag kommer att lämna som en int. Namnfältet jag ska att lämna som en varchar, och vi ska säga 64, något godtyckligt. Numret jag ska att göra, vet du vad? Vi är på väg in stödja amerikanska siffror här, så jag kommer att göra något som röding och sedan 10 tecken max för riktnummer och sedan sju siffror. Och sedan här borta, kommer jag att Ange automatisk ökning på området, gör detta till en primärnyckel, och Jag kommer att gå vidare och inte kontrollera någon av dessa andra lådor. Så när jag nu äntligen på Spara, och jag går tillbaka till min användare bord, detta är vad det ser ut som om jag nu klickar på en ny flik struktur. Så det här, för att vara tydlig, är precis phpMyAdmin sätt att säga din databastabell har ett ID, ett namn och ett nummer med dessa speciella konfigurationer och vi kommer att ignorera resten av fälten där för nu. Så nu vad vill jag göra? Så om jag går nu in i min källkod, om allt är bra Jag vill köra följande fråga. Sätt in i, och jag kan bara säger användarna jag inte strikt behöver dem där fästingar om det är inte ett farligt ord som användare. Jag kommer att säga namnet, nummer, och sedan här är jag inte att hårt kod siffran av de värden än. Jag ska sätta två frågetecken. Och detta är en konvention på många språk vari om du vill ha en platshållare för en sträng du kommer att använda frågan varumärken, av skäl som vi ska komma tillbaka för att prata om säkerhet, och här Jag kommer att passera i de två fält posta namn, och sedan skicka nummer, och nu spara filen. Och nu ska jag gå ner här är en super bara säga rendersuccess.php, vilket kommer att bli en annan mall. Jag kommer att skapa riktigt snabbt. Geditsuccess.php och jag kommer bara säga H1 framgång i den filen. Okej. Så nu, låt oss gå tillbaka till browser, där jag besökt tidigare. Låt oss gå vidare och bekräfta jag skrev i David, skrev jag i ett telefonnummer, registrera. Fan också. Vad gjorde jag för fel? Så jag ser ett fel här, du har ett fel i din SQL-syntax. Låt mig gå tillbaka till gedit, låt mig gå tillbaka till register.php, och vad gjorde jag utelämnar att var viktigt förra gången? Jag behöver det här. Du vill veta att andra än från har märkt innan, men jag behöver det här. Så nu ska vi gå tillbaka, och detta var bra att se i webbläsaren och det är därför i config.php vi spotta ut fel. Låt oss gå vidare och ladda om, klicka på Fortsätt, framgång. Så nu vill jag gå över till min Databasen här och klicka på Användare, och surfa, och märker jag nu har David i min databas här. Nu tekniskt denna webbplats är ännu inte på den publika Internet, så jag kan inte ha annat människor att sätta här, men om jag ville nu, för exempel skicka mig ett textmeddelande. Låt oss gå ut på en lem här och se om det verkligen fungerar. Jag kommer att gå vidare och ta bort den här raden och vi ska sudda ut i videon senare så att vi inte har den hela internet textning mig, och vi kommer nu att gå upp till webbläsare och vi ska gå över för att föreläsa och vi ska skriva in olika nummer här, registrera, framgång. Så nu är mitt eget nummer förmodligen i databasen, och nu det roliga. Låt oss faktiskt använder PHP att göra något programmatiskt, antingen från kommando linje eller från någon annanstans, och nu är jag bara kommer att hålla det enkelt och jag kommer att gå in i min katalog här och gör följande. Gedit script låt oss säga, vi ska kalla det text, #! / user / bin / env PHP, som vi såg förra gången. PHP. Nu ska jag kräver innefattar config.php, även om detta kan inducera ett litet fel. Och nu ska jag gå vidare och säga rader, fråga, väljer stjärnan från användarna, och nu här kommer jag att göra en teknik från förra gången för varje varv som följd. Och jag kommer att göra något enkelt. Printf låt oss säga namn är detta, och nummer är detta, omvänt snedstreck n. Och nu ska jag passera i rad citerar unquote namn, och rad citat unquote nummer, och nu ska vi gå vidare och min terminalfönster chmod denna a + x för att göra detta script som kallas text körbar. Och nu ska vi text köra. OK, så framsteg. Så jag har nu skrivit en kommandorad manus, på ett språk som heter PHP, att, på grund av detta kräver linje, har tillgång till alla de konfiguration konstanter som jag specificerade. Namnet på databasen och så vidare. Faktum är att bara för att vara tydlig att detta inte är en lyckträff, Låt mig gå vidare och registrera dig, riktigt snabbt, någon annan som Rob och kommer att ge honom 555-1212 numret. Och nu, när jag kör skriptet igen, märker makten om vad vi gör med databasen. Nu har jag genast sett vad två andra rader är i min databas. Så nu ska vi försöka göra något ännu snyggare inuti, och detta är den del vi har ej testad i förväg, så sista gången jag gjorde detta det gick fruktansvärt snett, Vi har video om detta. Faktiskt, ja, roligt åt sidan. Så sista gången, i en föreläsning som två år sedan, Vi bestämde, jag bestämde, att vara allt detta skulle vara en bra idé att dynamiskt generera e-post i klass, med hjälp av hela databasen CS50 studenter, som hade gett oss sitt nummer och deras mobiltelefon företag som du kanske kommer ihåg från pset0, hur man resonera, visar det sig Jag hade en liten bugg i mitt program och gjorde ett par misstag under 2012, tror jag. Varigenom, jag hade för loop som gjorde exakt sånt här, iteration över databasen, få ett namn i databasen, namn från databasen, och sedan på varje iteration av slingan jag skickade ett mail. Men istället för att skicka en e-post, jag skickade ett e-postmeddelande den första iterationen, och två e-postmeddelanden en andra iteration, skickade tre e-postmeddelanden en andra iteration, vilket som ni kanske kommer ihåg från vår diskussion av asymptotisk notation denna stora O i dåligt, som n kvadrat är hur många meddelanden som jag skickat, men det var inte ens e-post det var textmeddelanden. Och som ni vet, inte närvaro super high mot slutet av terminen och så jag trodde det skulle vara söt på tid att säga: "Varför är du inte klass?" I textmeddelandet I skickas till hela klassen, och det var roligt att ha 50% av klassen, men de andra 50%, varav några flippade ut, skickade jag otroligt apologetiska söta anteckningar till personalen adjö för ha missat föreläsningen bara denna gång, eller hur? Så det skulle fruktansvärt snett. Så i denna anda, låt oss prova detta igen men bara med mitt nummer. I förväg, i functions.php, Jag har skrivit denna funktion här. Det kallas text, och det tar in tre argument. Ett tal, en bärare, och ett meddelande. Jag använder en switch uttalande, som härligt PHP tar strängar, inte bara heltal, och jag har inte genomfört allt stöd för detta ännu, Jag har precis gjort AT & T och Verizon. Eftersom det visar sig att med dessa flygbolag de har e-post till SMS-gateways, där du kan faktiskt skicka ett mail till en adress som telefonnummer på vtext.com och om användaren inte har blockerat meddelandena, det ska gå igenom är ett textmeddelande. Nu för att göra detta, kommer jag att behöva lägga ett fält riktigt snabbt till min databas. Jag kommer att gå in min struktur, och jag är kommer att gå vidare och lägga till en fält i slutet av tabellen. Låt oss klicka på Gå, och jag är kommer att kalla detta lufttrafik och nu ska jag lämna detta som en bar text, men vi kan vara finare i framtiden. Jag ska snabbt gå till mitt bord, och jag är kommer att bli av Rob, eftersom det är en falsk nummer, Jag kommer att gå in i redigerings här och jag är kommer att ändra min karriär manuellt vara Verizon, som det är, och nu här. Låt oss göra en snabb kontroll förstånd. Vi öppnar upp vår text script, som ser ut så här, är bärare% s. Vi gör mycket mer fel kontroll än jag gjorde under 2012, bärare. Och nu kommer jag att gå framåt och åter köra skriptet. OK. Carrier är Verizon, vilket innebär nu förhoppningsvis kan jag göra just detta. Rätt i år, förhoppningsvis, nu kör vi. Så inne i detta för loop, jag är ska inte bara ha denna printf, Jag kommer även att ringa text och användningen av denna funktion återkallande var det tar ett nummer, en bärare, och ett meddelande. Så låt oss se, är numret går till vara rad citat unquote "nummer" rad citat unquote "bärare" och den sista var budskapet. Skruva inte upp i år, semikolon. OK. Tummarna. Låt oss se om det fungerar. Okej, så. Här går vi. Låt oss låsa upp telefonen, håll tummarna, för fan. Undefined variabel may-- oh vänta, vänta, vänta, riktigt snabbt. Riktigt snabbt, riktigt snabbt. Detta är helt klart värt det. Låt mig ta tag i, låt mig ta, uh-oh. Tack, texterna har startade från någon annan. Låt mig gå vidare och öppna upp verkliga snabb, dropbox.php / Mail här inne. Standby. Helt värt det. Nedladdningar. OK, käll src8m. OK. Behöver ytterligare en linje här. Åh det är det, det är i Frosh IM, det är i registret vid tre. Åh hej, Margo, tack så mycket. OK, och jag saknade denna linje här. Så låt mig ta snabbt här kodraden, som inkluderar den post eller bibliotek att jag vill verkligen använda, Jag ska snabbt gå tillbaka till funktioner, Jag kommer att gå till toppen av detta fil och kräver denna fil också, och nu ska jag verkligen korsa min fingrarna när jag går tillbaka till kommandot line script, som är inne i dagens lokala värden katalogen. Kör text. Enter. Mail. Standby. Standby. Mail. Åh, OK. Här går vi. Mail får ny PHP mailer. Gjorde jag det här rätt? Fan också. Att-- oh, vänta, vänta, vänta. Stand by. Jag lovar, det här är kommer att vara så värt det. Adress. Detta är anledningen till att jag inte gör det exempel just före klass. Ugh. Följande mottagare misslyckades. Låt oss försöka en sista sak. SMTP in från, lägga till adress, adressen är verkligen det. Låt oss prova denna sista delen i adressen. Aw, jag är verkligen ledsen just nu. Tack. Men jag uppskattar verkligen alla texterna som du har sänt. Du har fått den här David. Du blåser det. Låt oss lämna den där och Vi kommer att fixa på måndag. Vi ses då. Daven FARNHAM: Och nu Djup Tankar från Daven Farnham. Om ett binärt träd faller i skogen och ingen är runt till C det-- [skrattande].