>> [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.
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].