SAM LEVATICH: Välkommen till avsnittet för den här veckan. Jag är inte Andi. Andi har fallit sjuk i dag, och jag har slags kallas i sista minuten att ta över. Det är influensasäsong, så se till att du vistas ren, tvätta händerna, och äta hälsosamt så att du också, inte sängliggande. Men utan ytterligare ADO, låt oss komma igång. Idag ska vi prata om PHP lite bit-- hur PHP avser HTML, hur det avser CSS och en del av banan saker du gjorde på den senaste tilldelningen. Vi kommer att prata lite om SQL och hur du kan arbeta med databaser, vilket är en ganska viktig del av P set 8-- P inställd 7. P set 7. Och sedan ska vi prata lite lite om hur visa styrenheter fungerar och varför det är en filosofi bakom några moderna webbsidor och annorlunda design. Ganska mycket en hel del olika typer av appar och program som du kan leverera använder denna modell, controller ram view, att du kommer att använda i P set 7, så jag ska prata lite om varför det har blivit populär, varför det är viktigt och trevligt. Och sedan ska jag äntligen gå vidare till några tips om att ta itu med P set 7. Och om vi har tid kvar i slutet, vi faktiskt kan göra något arbeta på det tillsammans. Så, PHP. I själva verket kan du ha märkt this-- att du inte verkligen måste dyka in det-- men P set 6 hade någon PHP kod som pågick. Och eftersom PHP är ett C-liknande språket, PHP, till skillnad från HTML och CSS, är ett programmeringsspråk, medan HTML och CSS är statiska. De är märkspråk som behandlar med stil och visuell layout. PHP är den verkliga affären. PHP har loopar, den har conditions-- allt det där som är kul om C. Det har några saker som är lite lite bättre än C, som vi får se, men jag tror att det enklaste sättet att prata om PHP är bara att dyka i. Så jag kommer att gå rätt in IDE vid denna punkt. Det första vi ska göra är att faktiskt titta en liten bit på några av de PHP-kod som var i P set 6. Så det sätt som vi gör that-- innan, det sätt som vi körde servern för apparaten var att vi skulle behöva Motortyp- antingen använda din implementation eller personalens genomförandet av server.c genom att gå in i katalogen och rinnande server.c med antingen ingen arguments-- så bara kalla det på lokala värden, vilket är vad du förmodligen gjorde det mesta av time-- och sedan mata den en directory-- med som att använda som dess rot där webbplatsen skulle köras, i grund och botten. Denna vecka för P set 7, som stor som vår kod för server.c är att det finns människor som redan har skrivit dessa fina saker över på CS50 som har en lite mer funktionalitet, ett serverprogram som är kapabel att hantera lite mer av de krångligheter som vi ska se i både P set 7 och P ställa 8. Och det sätt som du startar server är genom att bara skriva "apache50." Och innan du gör något, du vill vara säker på att Apache 50 är inte redan körs som det är på min maskin, som jag gjorde för att testa det. Och du gör det genom att ringa apache50. Stopp, och du ser att det är stopp webbservern, om du kan se det längst ned i terminalfönstret. Och sedan bara att börja, vi är kommer att kalla "apache50 börja." Och då kommer vi att mata den en katalog. Nu, eftersom vi vill se på några av P set 6-kod att vi hade genomfört, jag faktiskt kopieras en liten bit av P set 6-koden i min egen mapp, som du kan se på vänster finns. Den heter "SECTION8" i alla versaler eftersom jag är bara så upphetsad att vara levande strömmande idag. Så om vi kör detta, bör det alla fungerar ganska effektivt. Det säger, OK, är vår hemsida nu tillgänglig på adressen för IDE, i grund och botten, vilket är vad du använde precis som det var i P set 7-- P set 6. Alla mina index är ett index i dag. Så vi kan gå till den adress, om du kommer ihåg, genom att bara klicka på den här lilla knappen i det övre högra. Och du kommer ihåg den här koden, som hände när du gick in i hello.php. Och vad är utformad för att gör är när du skrev in ett namn här-- om du säger Sam eftersom det är min name-- och jag klickar Say Hello, när vi gick till nästa sida, det namnet var tänkt att visas. Det skulle säga, "Hej, Sam" eller "Hej," vilket namn du lagt ned på det trots att vi gick till en helt ny webbsida. Och det är denna typ av sak att PHP kan göra för dig. PHP kan skicka data mellan två webbsidor. Detta är en helt annan sida. Du ser titeln är "hej" här. Faktiskt, har de samma titel, men jag lova att de är olika web sidor om vi tittar på källan. Och du kan skicka data som är in i det här textfältet, du skickar det till nästa sida som kallas upp, och sedan dessa data kan vara där i sin nuvarande form. Nu har vi ännu inte har genomfört detta själva, som är vad vi ska göra just nu för att sort få en smak för hur PHP fungerar, men det viktigaste idén är att PHP-- du kan sorts tänker på det som en funktion. Något som PHP kan låta dig gör det kan ta parametrar att du matar in en HTML-sida genom användning av PHP och former, och det kan passera dem som parametrar till nästa sida som den laddar upp. I det här fallet, vi laddar upp denna sida med knappen "Säg hej". Men nu, jag faktiskt raderat en del av denna kod i hello.php som drivs som faktiskt visar "hej, värld "eller" Hej, Sam "eller "Hej," oavsett var bara mata in. Så för just nu, vi är kommer att göra det, i princip. Vi kommer att återskapa den och också lägga till några fler funktioner, göra lite mer med det, se vad PHP är verkligen kan. Så först, låt oss tala om den här filen, hello.php. Så om vi in ​​i en lite bit-- och nu är jag sorts försöker rulla alla sättet around-- där vi går. Du ser det heter hello.php, men syntaxen i det ser ut som en HTML-fil. Detta beror på att faktiska PHP i den här filen är alla fastnat mellan dessa Frågetecken-Caret block. Allt här anses PHP-kod. Och du kommer att märka att när jag gjorde en kommentar, ser du den välbekanta två snedstreck. Och om du minns, i HTML, om jag skriver en kommentar, det ser något närmare detta, vilket är en kommentar i HTML. Så egentligen allt mellan dessa två vinkelfästen är nu PHP-kod, som återspeglas i det faktum att denna lilla kommentar symbol förvandlas till en kommentar. Så varje gång du skriver PHP-kod, även om det inte finns någon HTML-kod utanför den, det alltid kommer att vara inneslutna i dessa vinkelfästen med frågetecken. Du kan sorts tänka det-- hur allt av koden som sprang in din C-program inneslöts i en int main, tomrum, klammerparentes, end klammerparentes uttalande. Och ser du klammerparenteserna i PHP, också, men det är typ av som den huvudsakliga metoden för PHP. Så nu, hur ska vi göra någonting i PHP? Nu är PHP ett programmeringsspråk språk som är väldigt C-liknande, men det fungerar på webben. Så en sak som du immediately-- en av de första saker du verkligen gjorde med C du skrev saker ut, eller hur? Så i C vi gjorde det med en printf funktion. Vi gav det ett snöre, troligen med en ny linje, och sedan vi avslutade det med ett semikolon. Så det sätt som vi kommer att göra det i PHP-- eftersom det inte är helt printf. Det är en lite annorlunda syntax. Det sätt som vi skriver ut saker i PHP är att vi säger, "echo hello" eller "echo" alla ord. Och det har effekten av att göra printf med en sträng, "Hej." Och det tillför den nya linjen till det. Så låt oss nu göra sure-- Jag ska zooma ut igen lite bit-- Låt oss se till att att koden fungerar eftersom det kan mycket väl vara ett fel i denna kod att vi kommer att behöva ta itu med. Så servern redan är igång. Så om vi rulla tillbaka ner till botten, Japp, är servern fortfarande körs. Så om vi bara peka på detta lite rätt här-- welcome-- vi bör get-- stor. Vi fortfarande har bekant "Säg hej" dialog, men när jag skriver in "hej" vi får se att texten "hello" verkligen var skrivas ut, vilket är exakt som vi förväntade oss eftersom eko ​​i PHP är precis som en printf uttalande. Så tillbaka till koden, hur i P ställer 6 gjorde det kodfördelning du har tillgång göra det så att PHP skulle utgång det som du skrivas in på föregående skärm? Och sorts undersöka varför det händer, vi är gå in index.html, som är den ursprungliga filen, filen som dyker upp på skärmen med knappen "Säg hej". Du märker att det finns alla de klassiska sakerna vi har kommit att förvänta sig från HTML sådan eftersom dessa saker, dessa taggar slutna i vinkeljärnen, som PHP men utan frågetecken, vilket tyder på en speciell sak till HTML. Vi har titel, som är "Hej." Och du kommer att märka att när vi såg, titeln är "Hej" i båda fallen. Låt oss ändra detta att "säga" bara så vi kan skilja oss där vi är. Men vi har en kropp. Och sedan den intressanta biten, bit som dyker upp i HTML, är detta formulärelement. Och så har vi ett formulär. Och det är nyckeln. Det är så vi arbetar med PHP. Verkan parametern formulär säger att hello.php är vad vi kommer att skicka värdena i detta formulär för att. Det är där vi passerar parametrar, så att säga. Du kommer att märka en annan sak här är att metoden är "får." Det finns två huvudsakliga metoder genom vilka kommer att använda PHP för att skicka data mellan websites-- webbsidor, rather-- i detta uppdrag. Och dessa metoder är "får" och "post." Det finns några subtila skillnader mellan get och post att vi kommer att få into-- vi kommer att "få" in, om man så vill. Men i allt väsentligt och ändamål, få och post ligger bara ett sätt som du skicka parametrar med lite olika utföranden. För nu, kommer vi att använda få eftersom får var vad som användes ursprungligen i PHP-fil P set 6. Och faktiskt, om vi går in och titta innan vi har redigerat något annat, Jag kommer att säga hej att-- vad heter du? PUBLIK: Elliot. SAM LEVATICH: Åh, Jisses. Jag vet inte hur man stavar det. Kan du stava det för mig? Publik: E-L-L-I-O-T. SAM LEVATICH: I-O-T? PUBLIK: Ja. SAM LEVATICH: Perfect. OK. Jag antar att jag visste hur man stavar det. Förlåt för det. Men om vi säger "Säg hej," det är inte det kommer inte att dyka upp på skärmen men eftersom vi ändrade koden lite. Men om vi gör "Säg hej" - OK, så "hello" är här. Men om vi tar en närmare titta på själva webbadressen, vi får se att det slutar med hello.php? name = Elliot. Så detta är ett sätt att kommunicera till nästa webbsidan de parametrar som vi har passerat. Vi sade name = Elliot. Och det är i slutändan hur P ställer 6 åt den variabel som vi passerade i via formuläret. Och detta är något som är utmärkande för en begäran få. En get begäran gör parametrarna känd i webbadressen till webbplatsen. Och du kommer ihåg, alltför, i P set 6 som du var tvungen att skriva en funktion som handlade om det faktum att detta frågesträngen skulle kunna existera efter en fil. Det kan finnas ett frågetecken följt genom att i princip alla antal tecken. Och det är precis vad som händer här. Och anledningen till att du var tvungen att tolka det i genomförandet av server.c i P set 6 är så att du kan berätta PHP-kod som name = Elliot. Du behövs för att kunna parse att av URL så att PHP-fil i fråga visste vad det handlade med. Så förhoppningsvis detta ger motivationen att server.c nu när vi går vidare utanför C i PHP. Så låt oss verkligen fokusera på att komma åt saker passera genom en begäran få nu vid denna punkt. Jag kommer att spara. Vi ville inte ändra någonting. Det ser ut som om vi har fått en inmatningsfält. Vi ställa in några egenskaper, som vi kan göra en HTML. Dessa är enkla saker. Vi behöver inte dessa. Men vi har Komplettera automatiskt bort, som i princip says-- du vet, när du skriver saker i banan, ibland det försöker fylla det åt dig. Så det är en bra sak. Vi vill stänga av den för detta ändamål. Det var ett CS50 beslut. Så vi kan ta bort den om vi ville. Autofokus pinnar bara markören i form alldeles i början. Återigen, inte alltför viktig. Men name = "namn" - det är lite knepigt eftersom det är namn och namn. Men vi kunde har ändrat detta till något annat. Och i själva verket är det vad vi ska göra just nu. Vi kommer att säga "person" som är ungefär som namn om en person definieras av deras namn. Så låt oss avsluta detta, öppna upp vår hemsida eftersom vår server är fortfarande igång Apache 50, och vi kommer att säga, hej, här är Elliot igen. Varför inte? Hallå. Och om vi går upp här, vi får se då i stället för name = Elliot, det står personen = Elliot. Och det är ett direkt resultat av det faktum att vi bara bytt namn = "person." Så i ett inmatningselement av ett HTML-formulär, namnfältet är identifierare för parameter som är passeras. Det är som om du skapar en funktion "lägg till" som tog in två heltal och du sa int a och int b. Det skulle vara namn a, och om du ville en annan form, som vi kan göra just genom att kopiera och klistra in, då skulle vi ha namn b. Så nu kommer vi att ha två parametrar som håller på att passera genom komma till nästa website-- nästa webbsida, hello.php. Och vi kan faktiskt se det igen om vi vill. Detta är det enklaste sättet att ta itu med webbkoden i IDE, i princip. Du startar servern, får den kör, och sedan varje gång du göra vissa förändringar, bara stänga filen bara för att vara säker. Genom att trycka på bakåtknappen är lite knepigt eftersom det kan ladda en tidigare versionen, inte den mest uppdaterade ett. Och sedan klickar du bara din knappen igen, pop höger up-- oh, och nu finns det två former. Och så om vi skriver en sak i varje en-- "Jason Hirshhorn" för instance-- vi säger hej. Vi tittar upp på våra parametrar. Det ser ut som vi har fått, som förväntat, a = jason och b = Hirshhorn, som representerar de två parametrarna att vi gick till denna funktion. Så nu ska vi faktiskt få genomförandet av denna funktionalitet som vi hade i P set 6. Så just nu är vi bara ekande hej. Och det är inte mycket användbar. Vi vill upprepa några variabel som skickades till oss. Och vi vet namnet på denna variabel. Vi har en och vi har b. Så att vi kunde välja att upprepa den ena. Men hur gör vi åt det? Tja, det finns vissa globala variabler i PHP. Och jag kommer att skriva dem i kommentarer här. De två viktigaste är get och efter för våra ändamål just nu. Det är dessa kedjor eller, tekniskt, ordböcker där våra variabler som vi är övergå till nästa webbsida live. Och vi ska snart se hur man använder dem. En annan kort anteckning om PHP-kod och vissa detaljerna i det-- i C, att deklarera en variabel eller att använda variabler, du först tvungen att förklara dem. Och vad du var tvungen att göra när du förklarade dem var säga int a eller röding b. Du var tvungen att förklara vilka typer av dessa variabler innan du skapade dem. PHP-- du inte behöver göra något av det. PHP frågar inte efter vilken typ av variabel. Och det sätt som du skapa en variable-- snarare än att säga int, char, string-- vilket är riktigt char *, som vi vet-- snarare än att göra alla att eftersom allt är av samma typ, typeless, vi kan bara använder ett tecken, som är dollartecken. Och du ser den redan poppar upp, lite Komplettera automatiskt saker. Och det säger att _GET och _POST är två alternativ som jag har till förfogande till mig. Några av dessa andra saker är andra globala variabler i PHP att du kommer att använda över Under P set 7. För nu ska vi fokusera på get och post. Men detta är ett användbart sak som IDE gör där när du har skrivit i det dollartecken, det ska börja fylla i globala variabler eller variabler som du redan har definierat. Så om du ville definiera en variabel som kallas "sträng" du kan bara ställa in den lika med "hej." Och det är i princip så enkelt är det. Och då kan vi göra något liknande "echo $ string." IDE bör kasta några fel om jag gör något fel, så förhoppningsvis jag gör allt rätt. Men buggar alltid uppstår. En annan knepig sak om PHP är att det inte kompileras. Så med C-program, skulle du göra den dagliga rutinen of-- princip, skulle du göra ändringar till koden, skulle du spara den, och sedan du skulle gör det, där make var det steg som kallas kompilator, klang, för att göra din kod, denna text fil, till en körbar. PHP är C-liknande, men det är verk i farten från din webbläsare. Så det finns inget sätt att veta. Gör skulle kasta dem hjälp fel, eller hur? Det skulle vara som du inte förklara denna variabel innan du försökte använda den. Du gjorde allt detta dåliga stuff-- segfault, segfault, allt sorts roliga tider som kom med make. PHP är ett tveeggat svärd eftersom du inte kommer att få dessa fel, men det innebär också att du inte vet verkligen vad som är fel med ditt program Om du bara köra det och det fungerar inte. Men debugger bör påpeka några förhoppningsvis hjälp småsaker syntaktiskt att du kan fixa. Så nu om vi går över att-- säger, låt oss avsluta det. Öppna. Och vi är tillbaka hit. Så vi har en variabel och en rörlig b. Och dessa kommer inte i slutändan roll. Vi kallar dem h och g utan någon speciell anledning. Och vi säger hej. Nu ser det ut som vår sträng "hej" är verkligen utskrift. Vi skapade en variabel som heter "sträng" ställa in den lika med "hej." Lägg märke till att vi inte behövde göra malloc eller göra en karaktär array. I PHP, eftersom variabler är typeless, en sträng är densamma som en röding för alla avseenden. Detta kan vara "hej." Detta kan vara just den karaktären k. Detta kan vara ett nummer ett. Och det bryr sig inte. PHP bryr sig inte om vilken typ av variabel. Eller, det gör det vård. Det bryr sig när du försöker och göra saker med det, men det bryr sig inte in deklarationen steget. Och precis som du kan i C, kan du deklarera strängar på stacken så här men att säga "stack" är en liten bit av en potentiell missvisande när vi pratar om PHP. Men vi behöver inte bekymra dig om det. Så vi fick vår sträng "Hej", och vi upprepar sträng. Så nu har vi diskuterat variabler. Så nu måste vi prata om get och publicera och utför sista sak som är behövs för att verkligen få den tillbaka upp funktionaliteten av P set 6. Så just nu är vi ekande strängen, men vi har dessa variabler få och post. Och eftersom vi använder metoden få, det verkar naturligt att vår variabel som vi är intresserade av, både a och b, kommer att ligga i arrayen eller ordbok, tekniskt få. Så om vi sätter upp får så här med din groups-- jag tryckte ange och det gillade inte det-- men här har vi. Och så får redan existerar. Så vi kan redan börja tillgång några av de delar av get. Om vi ​​får denna syntax för matriser i PHP är mycket C-liknande. Vi har våra två hakparenteser. Så om vi säger får i en normal array, kan vi komma åt den nollte index, det första indexet. PHP är noll index. Vi skulle kunna säga noll, ett, two-- sånt här. Och jag har sagt att få är tekniskt en ordbok. Så vad PHP gör under huven, vilket är lite trevligare än C, är det redan ger dig några ordbok funktionalitet, vilket är verkligen hashtabeller, eller försöker, förmodligen. Eller, tekniskt sett skulle kunna vara ett försök också. Men PHP genomför en hashtabell, vilket bildar en effektiv ordbok. Och så vi vet namnet vår variabel, eller hur? Det passeras i frågesträngen med PHP. Vi har a = h och b = g var och b är namnen på variablerna. Så det sätt som vi kan få tillgång till värde som motsvarar den tangent i vår ordlista är bara genom att säga _GET_GET ["a"]. Så nu har vi _GET ["a"]. Och om vi bara byta inne vår eko, om vi upprepar _GET_GET ["a"] - och vi får se om debugger kastar eventuella fel om this-- Vi ska spara det och avveckla detta. Öppna den. Så vi bara göra rätt nu, så b bör ingen roll. "hennes" och "honom" - "brum." "hennes" och "hum." Låter bra. Och det skrivs ut "henne" som är galen. Men det är precis vad hände i P set 6. I grund och botten, ställa in vilken P 6 var doing-- echo hello, name-- där det hade en variabelnamn och det bara ber dig att skriva in den biten av text. Det fanns också en del tilläggsnummer där det ingår om uttalanden, som vi kan göra just nu. Vi kan säga om det finns, som är en funktionalitet inom PHP, _GET Med understreck, "namn" - som i princip säger, "om namnet har fyllts i" eftersom Vi kunde bara klickat på knappen att skicka formuläret utan skriva någonting i detta område. Och vi slå in det i vår vänliga klammerparenteserna. Vi kan ha en annan förklaring. Och det är allt inom PHP vinkeln fäste, frågetecken, vinkelparentes, om du vill. Och nu ska vi se om det fungerar. Jag fortsätter att vänta på att felsöka och skit på mig, i princip, men det har ännu inte. Kanske kommer det nu eftersom jag talade om. Japp. Det gjorde faktiskt. Så, ingenting dyker upp. Det är på grund av något fel som jag skrev i PHP-koden. Och jag nämnde felsökning är knepigt eftersom i PHP, vi inte kompilera det i förväg och kompilatorn var inte gillar, här är där dina fel är. Men vad vi kan göra är-- gör människor minns hur man ser på de olika nätverk begär att PHP-- eller att webbplatser skicka? [? Malin?] Gjorde detta i föreläsning en eller två gånger. Kommer du ihåg när vi gå för att hitta de olika skulder och 200 OKs, alla dessa koder som skickas via HTTP från webbsidan till webbsidan? Kommer någon ihåg där vi går att göra det? PUBLIK: Sidkälla. SAM LEVATICH Page källa. Exakt. Om du går till sidan Source-- perfekt. Så Page Source drar upp inspektören. Och jag använder Safari. En hel del av er kommer förmodligen att använda Chrome eller Firefox. Men så länge du är i alla moderna browser-- och känn dig fri att följa tillsammans om du vill. Du kan skriva upp denna kod eller bara titta in i P set 6 katalog för några liknande saker. hello.php är vad vi är arbetar för närvarande med att efterlikna. Så det finns ett antal olika flikar. Vi kan titta på alla resurser. Vi kan se källkoden. Så ser ut som det inte komma förbi kroppen i slutändan. Det funnit ett fel i PHP och det slutade laddar hela webbsidan. Vi har inte ens ett slut tagg för HTML eller något. Och om vi ser på nätet, vi kan se att vi skickas en förfrågan. Detta är den domänen. Detta är adressen. Det är ett dokument. Vi använder metoden GET. Och det är rött. Eller, det var rött när jag inte att välja det. Hur gör jag avmarkera det? Tja, det var rött. Låt mig uppdatera. Där är den. Nu är det rött. Så det är rött, vilket innebär Det misslyckades, vilket är dåligt. Så låt oss undersöka varför det gjorde misslyckas. Så allt som Sidkälla kan princip säga är din grej fungerade inte, som vi redan kan se. Så idealt det skulle vara ett mer användbart verktyg. Och det finns några webbläsartillägg som gör att du kan felsöka PHP, men vi kommer inte att att skriva massor av PHP, så det är förmodligen bara bäst att titta igenom din kod noggrant och bara se till att det är inte gör något annat. Så låt oss se om formatet på detta if-sats är där problemet är. Jag vill läsa det tillbaka hit. Hallå Hej. Så det finns ett problem där. Så för korrekt syntax av PHP är PHP går att vara C-liknande i att du får se loopar. Du får se om uttalanden. Du ser alla dessa vänner att du har blivit bekant med under loppet av denna CS50 termin. Men det bästa sättet att ta reda på hur man göra något i PHP är att Google det eller för att titta på några exempel på PHP-kod eftersom du vet funktionaliteten. Du vet vad du kan göra med programmet. Du kan loop. Du kan loop så många gånger du vill. Du kan slinga i alla möjliga olika sätt. Du kan skapa funktioner. Du kan skapa funktioner som ringa andra funktioner, funktioner som kallar sig. Och du har namn för dessa begrepp. Du har rekursion, loopar, om, andra styrflöden. Och så Google är din bästa vän. Även säger, "PHP om påståendet "och det blir finnas massor av inlägg med svar till andra människor som har haft liknande frågor till dig, som just har börjat med PHP och är nyfiken på en syntax sak. Eftersom vi har lyxen av att vara kunna titta på koden i P-set 6, vi faktiskt dra upp och se att OK, här är något intressant. Så det här är vad det egentligen såg ut i P set 6. Så om vi går igenom detta, Vi kan se att vi har fick flera av dessa små PHP-liknande frågetecken bitar. Och det finns inte klammerparenteserna. Det finns kolon. Och det finns lockigt hängslen i PHP, men detta är ett format och ett sätt att göra PHP som fungerar bra med HTML eftersom som du ser, vi stänger utanför dessa PHP bits-- den elses och ifs och alla that-- och sedan vi interspersing HTML inuti dem medan fortfarande efter flödeskontroll som anges av PHP. Så jag ska bara snabb promenad genom denna eftersom det är en hel del av samma koncept som vi gjorde innan. Vi har om inte tom, parenteser, _GET_GET ["namn"]. Detta är alla samma grejer. Vi använder _GET lexikon som PHP skickar på begäran av blanketter, eftersom det är parametrarna för åtgärder, och metoden är få. Och då slutar det. Kolon är en signifier att bara göra detta Om if utvärderas till true. Det är som en klammerparentes. Och i själva verket är det en klammerparentes i andra språk som Python, som kan uppstå om du bara göra det för din slutprojekt. Och sedan denna linje, hej. Sedan har vi detta konstig sak. Vi har fler konsoler. Det finns ingen HTTP there-- eller PHP, sorry. Men det finns ett likhetstecken. Och sedan har vi en funktion, htmlspecialchars (_GEThtmlspecialchars (_GET ["namn"]). Detta är ungefär som en mer avancerad version av eko. Som vi hade eko som ett sätt att skriva saker i PHP. Detta är en funktion som är definieras i PHP som kommer att behandla lite mer otäck tecken och bytevärden att du kan skicka det. Det är alltid säkrast att använda detta. Men eko kommer att göra jobbet bara bra om vi inte arbetar med något alltför otäck. Och så detta har samma effekten av i grund och botten, det här i mellan frågan märken utvärderas av PHP. htmlspecialchars returnerar en trevlig HTML tryckta värde _GET_GET ["namn"], dvs. vad vi skrev i formuläret. Och då kommer det att säga hej, kommatecken utrymme, och då. Det hela mellan vinkeljärnen kommer att ersättas av vad htmlspecialchars sätter ut. Så det är i princip lika vad vi gör. Och vi har en annan förklaring som är hallå världen, vilket är vettigt. Så nu ska vi gå tillbaka till vår kod och se exactly-- oh. Jag sa existerar, vilket inte en sak som vi ville göra. Vi ville inte säga tom. Och så detta bör arbeta lite lite bättre, inte tom _GET_GET ["namn"]. Och det klammerparentes matchar det klammerparentes. Vi har våra klammerparenteserna här. echo hello _GET ["namn"]. Låt oss se om det fungerar lite bättre. Vi är fortfarande kör vår server. Hej Jason. Hej Jason. Och det fungerade den här gången. Och så det är ett bevis att du kan verkligen använda klammerparenteserna som du vet och kärlek i PHP-kod i HTML. PHP-koden tillhandahålls dig pset 6-- pset 6-- ger ett annat sätt att göra samma sak. Så nu har vi makten. Vi har funktioner för att genomföra PHP-kod som vi såg i pset 6 av oss, i grund och botten. Innan jag går vidare, vad är några av de frågor som du har på denna punkt? Ja [OHÖRBAR]. PUBLIK: Så i den version som pset6, när du kör det, det finns ett mellanslag. Och jag kan se där utrymmet är efter kommatecknet. [OHÖRBAR] start den öppna konsolen. Hur gör du infoga utrymmet hur du skrev dina egna koder? Speak: Det är en bra fråga. Och så låt oss räkna ut. Så det är en riktigt bra fråga och en som jag inte tänka på. Men låt oss göra det tillsammans. Så först av allt, vad Jag gör med eko är när vi upprepar bara Hej, matar det hej. Om vi ​​upprepar nu detta få på en separat linje, låt oss undersöka vad som händer. Så vi klickar här. Vi håller säga hej Jason. Så återigen, vi har inte detta utrymme. Och det är därför, i PHP, när vi har eko, oavsett hur många spaces-- nix, inte V-- oavsett hur många platser vi sätter in här-- om vi nu ladda upp det igen, hej Jason. Ja, se, alla de utrymmen fick ätas upp. Och det är något som echo funktionen gör. Så för att ta hand om det utrymmet, är och detta en av orsakerna varför du inte använder eko och du använder htmlspecialchars istället. Jag är nyfiken på vad skulle hända om vi gjorde detta där vi bifogade en plats i en sträng. Jag är ärligt talat inte säker på vad kommer att hända när jag gör detta. Så det är ett sätt. Det är ett sätt att ta hand om det. Om du svepa utrymmet en sträng, då utrymmet matas ut snyggt av eko. Det säkraste man kan göra är att göra htmlspecialchars. Det är alltid en säker satsning. Men nu har vi ett sätt att göra det med eko om nödvändigt. Och på liknande sätt, kan vi echo nya linjer, alla slags av saker du är bekant att göra i PHP. Någon annan, vad är något mer frågor som andra människor har vid denna punkt om PHP? Om människor visade upp lite sent, Jag är glad att stanna efter en lite och tala om några av början. Och det är också allt livestreamed, och arkiveras, som är galen. Hur som helst, så nu ska vi göra några mer avancerade saker med PHP. Och en av de tidigaste saker som du infördes i C var för slingor. Och PHP har en mer kraftfull för slingan kallas foreach slingan. Och det ser ut som this-- för varje ämne som tomma, lockigt parentes, gör saken. Så det här är i grunden en stenografi. Se, for-slingan som en syntaktisk konstruktion utarbetades i C och montering språk och saker som. Devised i C, bestämt som förkortning för många av de typer av slingor att människor skulle få se. Som när du skrev en slinga, där var ofta ett initieringssteg utförs precis i början, en tillstånd där slingan skulle stop-- och det är funktionen det är bara i en while-slinga, eller att ett tag har exakt just det feature-- och sedan en inkrementering steg i slutet. Och så skulle du ofta befinner dig skriva kod som följande. Jag kommer att radera en del av detta. Men om vi iterera igenom tecken i en array, till exempel, som vi har fick en matris med tecken. Ledsen att föra tillbaka C. Jag vet, du trodde du var klar. Men det är bara för ändamålet att lära PHP, jag lovar. Så om du har en röding str längd 8, och låt oss säga att det säger hellooo med en avslutande null. Stor, så det är vår sträng. Och sedan hade vi en for-loop. Vi har int i är lika med 0. Och vi vill avsluta när str av lika jag inte är lika med noll, eftersom vi avsluta när det är lika med noll. Och sedan gör vi i ++ vid varje punkt i för slingan. Att göra något med str av i. Så grundformeln var, vi hade denna array som vi ville behandla som separata element. Men vad vi hade att göra är att vi var tvungna att princip skapa en separat heltal variabel som räknade upp varje tiden gick vi genom öglan. Och då skulle vi behöva sedan ringa strstr [i] när det som vi verkligen ville göra är bara gå tecken för tecken, eller hur? Vi vill inte öka en heltal och sedan använda det heltal att få tillgång till varje tecken för sig. Vi vill verkligen tecken för tecken. Och så för varje intelligent beräknar det för oss. Om vi ​​har en matris, som vi kan deklarera i PHP som bara-- om vi har en variabel kallas, låt oss kalla det array. Mirakel ingen skriva, är det precis som alla andra variabler. Det är bara en array. Och vi har en liten [OHÖRBAR] som en, 2, 3, bara ett slags initialized matris. Det är OK, inte gillar min foreach. Men om vi foreach-- faktiskt Jag skrev att lite fel. Det finns två sätt att göra en foreach loop. Det är i syntax och som syntax. Och vi kommer att göra i syntax först, inte så. Det är mitt misstag. Så foreach num i slagordning, eko num. Och PHP skriker på mig av någon anledning. Det är att hitta en oväntad ii något, som är lite av en förtret. Men vi ska räkna ut varför det är i ett ögonblick. Så inte gillar det. Låt oss försöka använda som. Den föredrar som syntax är verkar. Så låt oss göra foreach array som num. Så en liten förklaring av vad som just hänt Den som syntaxen saying-- väl först, låt oss titta på vad det skrivs ut. Så öppnar vi upp vårt IDE. Vi går här. Vi säger, Hej Jason. Och det gjorde det 123, som var innehållet av uppsättningen som vi skapade där uppe. Så dyka in i denna foreach loop, vi har en variabel som heter array som är en array av tre tal. Och sedan gör vi foreach array som num, eko num. Och det är mer intuitivt än en för lop. Vi säger, att behandla var och en av saker i gruppen som num, Jag vill att du ger mig num. Och det är precis vad det gör. PHP beräknar att när du säger foreach array, och du har att göra med en rad, vad du kommer att vilja iterera över är karaktärerna i denna samling, är de ints i den arrayen, är elementen i den arrayen. Och det låter dig lagra de variabler som num, och sedan bara utgångs num direkt istället för att säga, Jag har en variabel som heter i, och då vill jag utgångs strstr [i]. Och så som tillåter oss att göra coola saker. Liksom i princip vi inte behöver skapa dessa variabler som jag är och gör allt denna inkrementering grejer i slutet. PHP tar hand om allt detta för dig. Så nu ska vi prata om foreach som det tillämpas i vår _GET ordbok. Så vi ska kommentera ut snabbt. Så vi har vår _GET array. Vi har denna variabel. Och det har lite grejer i den. Just nu har vi bara en variabel som skickas till den, vilket är namnet. Men om vi på Enter, nu vi kan ha två variabler. Vi kan ha namn och ålder, till exempel, Om vi ​​vill få ålder och även namnet på en person, lustigt nog. Så nu _GET kommer att bli en ordbok med två element, med två nyckelpar värde. Och den första key-- jag ska skriva här på bordet också. Vi har vår ordlista är _GET. Tyvärr, det är är lite svårt att se. Men inuti vår ordlista vi har namn, vilket kommer att bli något att vi har gett. Och vi kommer att ha ålder, som också är kommer att vara något som vi har gett. Och detta är helheten av vår ordlista. Så det har fått två element i den. Och så på grund foreach loopar är smarta, vi kanske tror, ​​och korrekt kanske tror att foreach kan iterera genom detta ordbok, skriva ut de värden som ges med namn och ålder. Så låt oss faktiskt göra just det. Låt oss konstruera en foreach slinga. Och vi kommer att göra för _GET som. Och vi kommer att göra följande. Så låt oss se vad som händer om vi skriver bara ord, och sedan säga eko ord. Vi kommer även att upprepa en ny linje bara för att göra det lite tydligare, vad händer. Så låt oss se. Det är inte att ge mig några fel. Och vi kommer att stänga. På vår hemsida, du kommer att göra en hel del som under loppet av pset7. Så vi säger mitt namn är Sam. Min ålder är 45. Det är inte. Men det skrivs ut, som förväntat, Sam 45. Och så kommer du att märka att vad foreach slinga did-- här, Låt oss gå tillbaka till den så det är upp på board-- vi får _GET som ord. Och det fanns fyra saker i _GET. Men det bara skrivas ut två saker. foreach, är dess intelligens själv, antas att vad vi verkligen ville var värdena, inte nycklar. Men det finns ett sätt att vi kunde skriva ut ut nycklarna också, om vi ville. Om vi ​​ville också veta vad dessa variabler kallades, det finns ett sätt som vi kan få tillgång till detta. Och sättet att sorts göra det, så vi kan säga, låter verkligen dela upp den i nyckelpar värde. Så låt oss se vad som händer nu. Så vi har nyckeln. Vi har värde. Vi har en annan ny linje för läsbarhet. Och låt oss se vad som händer När vi gör detta nu. Jag vet inte hur gammal Jason är. Jasons 15. Så vi har namn Jason, 15 år. Så vi kunde få tillgång till nyckeln och värdepar av denna ordbok bara genom att säga så viktiga punkter att värde. Och det är en foreach syntaktiskt socker bit som gör du kan komma åt saker i ordboken. Så förhoppningsvis den här sortens betonar kraften i foreach loop. Du kan ganska mycket kasta något som verkar iterable, som något som har flera element som en array, som en dictionary-- de är två primära saker du kommer att arbeta med både i livet och i pset 7. Så du kan kasta det där på det, och det kommer att räkna ut vad du vill göra med det. Det kommer att säga, OK, jag kommer att få dessa saker från de data som skickades till mig. Och det är något som du är kommer att använda en hel del i pset 7. Jag ska snabbt bläddra ner bara för att se var jag är på. Har människor har frågor på denna punkt? Frågor alls? Ja? PUBLIK: Så med nyckel och värde, du kan kalla den något annat och det skulle fortfarande att fungera? Speak: Oj. Wow, jag bort helt hela linjen. Bra jobbat. Så en, en. Key och värdet är bara en konvention. Det är bra. Du skulle få några motiv punkter, kanske några stilpoäng för att göra detta, eftersom den verkligen förmedlar avsikten. Men vi säger ett och yarp. PUBLIK: Du behöver inte ändra något i HTML-filen för att återspegla det? Speak: Inte alls. PUBLIK: Och det bara vet att på grund av den är lika med större than-- Speak: Ja. PUBLIK: --det indikator som that's-- Speak: Ja. Det är en foreach syntax, men ja. PUBLIK: Det är inte typer. Så vad händer om du ville ålder bara vara ett nummer? Finns det ett sätt att göra det? Speak: Det finns sätt att kontrollera om variabler överensstämmer med vissa typer. Så PHP frågar lite mer från dig eftersom det inte finns några typer i. Några sätt den frågar mindre. På sätt och vis frågar mer. För om du bara något i en variabel, du har ingen aning om vilken typ det är. Men om du är smart om variabler att du tilldelar slag till och se till att som fungerar bara return-- du vill funktioner till endast avkastning en typ av värde så att du kan i princip förväntar sig att den variabel som du får tillbaka från en funktion kommer att vara av den typ som att du tror att det kommer att bli, i princip. Men det finns några metoder med vilken du kan kontrollera. Jag minns inte dem från toppen av mitt huvud. Jag väntar på den för att slå blå. isint? isstr? Det finns metoder inbyggt i PHP som kan kontrollera vilken typ av variabler för dig. Men om du tilldelar variabler smart, ska du inte måste göra det för mycket i pset 7. Men dessa metoder existerar. Och det är något som är i själva språket. Och jag minns inte den exakta syntaxen. Vi kan även slå upp det. Men tiden är knapp. har Finns det någon annan har några fler frågor? Ja. PUBLIK: Jag har bara en mer. Så du nämnde GET-metoden, men du nämnde inte POST-metoden. Ska vi komma tillbaka till det? Speak: Ja, vi kommer att komma tillbaka till det. Det är precis vad jag letade på min telefon, som nu somnade, men jag hittar det. Bara se till att vi hit alla PHP anteckningar. Japp, det finns ingen felsökning version. Ja, vi har några fler saker som vi vill göra nu på denna punkt. Så talar om POST, som ni nämnde, den enda skillnaden mellan GET och POST är att komma ihåg när vi såg på följande webbadress och vi såg, oh, Namnet är en och ålder är lika yarp har rätt i webbadressen där för oss. POST är lite mer hemlighets med sin bortgång av information. Så om du inte vill att en användare att veta, till exempel, du ville inte användarnamnet och lösenord för den person inloggad ska visas i URL, vilket är en rimlig sak att inte vilja i webbadressen, eftersom någon kan se det. Om de länkar någon till en sida, du inte vill att deras URL putsade där, eftersom det skulle göra det möjligt för människor att logga in bara med klister av en webbadress i stället för att faktiskt fylla i ett formulär. POST är lite mer hemlighets. Och det enda som vi måste ändra är denna metod förändring från får publicera. Och sedan inne i HTTP, i stället att få tillgång arrayen _GET, vi kommer att få tillgång till arrayen _POST. Och vi kommer att märka att om Vi öppnar upp igen, Jason avtar långsamt i ålder. namn Jason, 14 år. Samma saker dyker upp. Men vi går till webbadressen och dessa variabler är inte där. Och det sätt som POST passes-- så kom ihåg hur man ser på källan på en sida. Vi går till nätverket. Vi uppdaterar. Och detta är en annan sak som POST ger dig varningar om. Du kanske har sett en låda, en text ruta så här i din webbläsare. Är du säker på att du vill att skicka en blankett igen? POST är vad det är som att skicka dessa former. Eftersom i stort sett om du skickade din kreditkortsinformation till någon, det kommer inte att dyka upp i webbadressen. Det kommer att bli en POST-begäran. Så när du uppdaterar sidan, det omsändning det inlägget begäran. Så nu är vi vill skicka bildar igen eftersom det inte kommer att skapa eventuella dubblerade inköp. Och vi kommer att märka att här nere, den metod vi använder är POST. Och det gjorde verkligen överföra byte. Överförs 401 av dem. Program är ganska liten. Men det finns ingenstans att vi kan se de värden som förs över. Webbsidorna själva kan se, men vi som användare inte kan se, om du inte är en hacker. Om du är en bra hacker, kan du titta. Om du känner till grundläggande format HTML, värdena kommer att göra sig till känna i sidorna. Du kommer att kunna se. Värdena kommer att vara där, de är bara lite mindre självklart för dig att komma åt, i princip. Har vi något mer frågor om GET, POST before-- vad vi ska göra härnäst är faktiskt titta på några av koden att du ger i pset 7, tala om hur man använder en del av dessa begrepp, och prata om saker som du ska att behöva göra lite i pset 7. Några fler frågor innan dess? Fler frågor ni har? Bra. Okej, låt oss titta lite i pset 7, ingen tvekan om vad du är alla mest entusiastiska över. Jag menar, är detta något som David går igenom lite. Men vi kommer att ha tre kataloger på top, liksom en konfigurationsfil. Det är för databaser, som vi ska tala om i ungefär fem minuter. Inkluderar, du aldrig behöver att titta i den här katalogen om du inte vill, men det är trevligt att vet att det finns alla typer av hjälpare. Hjälpare är som hjälpfunktioner. Och sedan har vi config, som sätter lite grejer. Det finns några funktioner som CS50 har skriven som är i hjälpare och config. Och en del av PHP som redan avslutas i filer kommer att göra en hel del mer sort av trubbig benet arbete för dig. Som om vi går in allmänheten login.php, vilket är vad dyker upp till höger när du går in pset 7. Vi ser att det finns Detta kräver uttalande. Och det ungefär som en skarp innefattar, hashtag inkluderar om du är en nyare generation. Men i grunden säger att jag behöver tillgång till alla funktioner i config.php. Och du kan ha ett krav för alla typer av andra saker. config kräver faktiskt hjälpare. Så när du behöver config, du är också inklusive eller kräver medhjälpare också. Så som ger dig tillgång till alla häftiga funktioner som vi kommer att använda, saker som gör. Jag faktiskt kommer att underlätta ner det lite. Så fungerar då är vi kommer att gå igenom precis innan vi går vidare till SQL lite biten är login.php funktionen, bara eftersom den använder en del av de ämnen att vi bara talade om i PHP. Du ser det första är om $ _SERVER. Detta är en annan global variabel som du kommer att ha att göra med. Det är som _GET och _POST, men vad server innehåller detta kan låta dig veta om förfrågningsmetoden var en GET eller POST. Liksom tidigare vad vi gjorde är bara i vår kod som vi skrev, vi bara ändra det för att vara GET och POST beroende på vad HTML har. Men det finns sidor som kan vara nås med båda typerna av förfrågningar. Och kanske du vill göra olika saker beroende på vilken typ av begäran, precis som inloggning gör. Så du kan kontrollera att begäran metod genom tillgång nycklar, genom att använda en nyckel och få värdet av något i ordboken _SERVER. Så det är en annan global variabel som _GET och _POST. Om det är GET, vill vi göra inloggningsformuläret. Rendera är en funktion som i grund och botten bara sätter upp lämpliga HTML och skickar den vissa parametrar. Denna titel är en parameter som är används vid visning, konstigt nog, titeln på sidan i fråga, saken upp här, säger eller hej i vårt tidigare exempel. Nu har vi en annan sak. Annars om det är POST, vi göra några andra saker. Vi använder det tomma metod. Det finns inte, det är tomt. Och vi såg tidigare, PHP har en hel del inbyggda i metoder som David will-- om det är metoder som är användbara för dig, de ska varnas för dig i promenad genom att David ger i början översikten, och även Zamyla s hjälp bitar. Hon är tillbaka alla. Vi kan alla glädjas. be om ursäkt är en passande namnet funktion som bara i princip skrivs ut några felmeddelanden, eftersom CS50 är mycket artigt. Och nu detta, är detta en knepigt lite eftersom detta är där vi att fråga databasen. Nu har vi inte pratat om databaser. Och vi kommer att i nästa fem minuter eller så, max. Men detta är en funktion att CS50 har skrivit att få en tabell i grund och botten från en databas att vi arbetar med i pset 7. Jag är verkligen dåligt med min noll indexering idag. Men ja, det är 7. Så fråga det kommer att returnera en matris, är i grunden nyckelaxet. Och eftersom dessa saker inte har maskinskrivning, så rader är en samling av matriser. För när vi funderar ett bord, vad vi ska göra är, som du lärde dig i psets som spelet 15, i alla fall där du var tvungen att använda en dubbel array, vi i grund och botten har matris med andra arrayer gör en tabell. Och du har rader och kolumner. Och då kan du komma åt dem som [0] [1], får du [0] [1]. Grundläggande sånt. Så vad vi gör här i denna funktion, Vi frågar databasen om användaren som är försöker logga in, kommer det vara skickas via POST-metoden. Vi får se vi får användarnamnet från _POST. De kommer att ha sänt användaren eller om du kommer att skicka ett värde genom ett formulär genom POST eftersom det är användarnamn och lösenord grejer. Vi kollar användarnamn att se, är detta i tabellen? För om en användare loggar i, då deras användarnamn bör lagras i tabellen i användare som finns för den här webbplatsen. Så i grund och botten om användaren är i databasen, fråga kommer att återvända den raden, som är en array. Men den svåra delen är att om även om den dubbla uppsättningen är bara en rad, även om det är en en rad array-- som om du har basically-- om du har en storlek en array som är med annat array, du verkligen ta itu med en kolumn. Men det är fortfarande behandlas som en dubbelmatris. Och det är där det ibland kan få knepigt, eftersom vi har rader här. Vår variabel är rader. Och sedan skapar vi en ny variabel som kallas rad och ställer in det lika med den första raden av rader. Och du kommer att märka att kommentar säger att det är den första och enda raden. Så det här är den knepiga del där nu funktioner kan återvända arrayer mycket lätt. Det finns inte mallocs. Du kommer inte att se mallocs. Så du kommer inte att se seg fel. Men funktioner kommer fortfarande att passera runt matriser och data i grupper. Och du måste vara försiktig med vad exakt dina funktioner kommer tillbaka. Och även om det är en kolumn så här, fråga fortfarande kommer att återvända en dubbel uppsättning. Så att komma åt som column-- eller om du kan tänka på allt detta som inverterad eftersom vi pratar om rader. Men för att få tillgång till att en rad, du kan inte bara säga rader. Även om det är en rad, måste du gör rowsrows [0] för att sorts eliminera detta yttre bit av uppställningen och har bara din en rad. Gör en del andra saker. Det finns en funktion kallas password_verify som verifierar lösenord som bokfördes. Och sedan ser vi en annan global variabel här, _SESSION. I grund och botten sessions-id är hur du hålla koll av om någon är inloggad eller inte. Så just nu med login.php, vi loggar en användare i. Så vad vi vill göra är att vi vill säga sessions-ID är lika med den rad id, som just är logiskt eftersom varje rad kommer att ha olika id nummer som en del av tabellen. Vi kommer att komma in i SQL i en andra, så om något av detta verkar lite som bla, då alla kommer att klaras upp. Men vi kommer att ställa id lika med rätt sak, användaren loggas in. Ber om ursäkt om något går fel. Och det är inloggningar syfte livet som professor Malan skulle säga. Så det var login.php. Och en hel del PHP-koden du skriver i pset 7, kommer de att vara lite. Glöm inte att chmod till rätt behörighet. Det kommer att bli lite om att i början av spec. Men PHP att du är skrivning kommer att bli gör saker som liknar detta. Du kommer att vara åtkomst några saker som ges till dig i globala variabler i PHP som har att göra med den nuvarande inloggade användaren, oavsett om det har varit ansökningar till detta sida, olika saker. Och det kommer också att vara potentiellt iterera genom rader av denna sak. I en annan funktion, fråga kommer tillbaka denna dubbla array. Och om det finns fler än en rader i det, om det är-- ja, om det är mer än en rader i det, då blir det en tabell. Och du kanske vill iterera genom raderna av denna matris som använder den foreach loop som vi beskrivit. Så om du gör foreach på en dubbel array, vad blir det word-- här, Jag ska faktiskt skriva det. Jag ska skriva det snabbt här. Om vi ​​har en foreach rader som rad, vad är den typ av raden? Någon som vet? Du har det? Så rader är en dubbel uppsättning. Så vad är foreach kommer att sluta att vi vill ha från denna dubbla array om vi iteration över det? Vi kan i princip utgå från att det kommer att vara antingen element, eller rader eller kolumner, i princip. Och så rader och kolumner vi kan behandla som samma sak. I grund och botten vad foreach loop går att göra är att det kommer att återvända rader. rad kommer att vara av typen rad, medan rader är en dubbel uppsättning. Så om du ger foreach en dubbel uppsättning, det är kommer inte att upprepa mer än en nivå djup. Som är i grunden att säga om det finns åtta celler i detta table-- 1,2, 3 4, 5, 6, 7, 8-- den foreach slingan inte kommer att gå igenom var och en av dessa celler. Vad foreach slingan kommer att göra var det kommer att gå igenom den här raden, ger dig hela den här raden. Och då ska gå igenom den raden. Så det bara itererar en nivå djup. Om du lägger till en kapslad foreach loop, då du kan behandla varje rad återvänt från rader, ni foreach rad som element, låt oss säga. Och då kan du upprepa elementet. Så det är en kort liten repetition av hur du kanske använder foreach loopar i samband med frågan. Finns det några frågor om PHP? Någonting alls innan vi gå vidare till att tala om SQL och det roliga i databasen? Mår bra? Mår bra. Okej. Låt oss gå vidare tillbaka till PowerPoint, som du förmodligen missa. SQL, yay. Människor som är i mitt avsnitt typiskt vet att undernummer akronymer är alltid bara de första orden Jag tänker på den match som algorithm-- att akronym. Det är inte en algoritm. Så SQL är en databas. Det är ett språk som arbetar med databaser. Och alla databaser finns är tabeller, åtminstone på det sätt att SQL företräder dem. Ett annat sätt att tänka på databaser är databaser är en uppsättning nycklar och värden i grund och botten. Du kan tänka på en databas som en ordbok och även som en tabell. I grunden är det ett sätt att associera olika data med andra data, ofta genom rader och kolumner. Och det är så det är SQL fungerar bäst. Så detta är ett exempel på en tabell. Jag har fått några exempel på människor i mitt avsnitt, som Jag har inte tid att byta. Men vi har saker som ID, namn, supermakt, och hemstad. Jag vet inte var någons från i min avdelning, så jag ska bara anta alla är från New York Staden eftersom jag har en hög statistisk Sannolikheten för att vara korrekt. SQL automatiskt ta hand om ID-kolumnen för dig. Om du sätter i en ny rad i en SQL-databas, Det kommer att öka det ID-nummer och bara princip hålla ut fem namn, supermakt, hemstad, vem på slutet av tabellen. Så ID är en kolumn du aldrig oroa dig. Men, som i fallet av login.php, när vi fick sessions-ID från ett bord och bara använda ID, ID är ett sätt att identifiera ett element i en databas. Så om vi hade två Sams, båda som lärde CS50, och båda av vem var från Milwaukee, de skulle fortfarande har distinkta ID-nummer och därmed skiljer sig i samband med tabellen. Så det här är vad SQL handlar med, arbetar med i bakändan. Nu är dessa fyra kommandon att du behöver för att arbeta med SQL. Och jag kastade upp dem alla på en bild. Men vi kommer att gå igenom dem alla individuellt. Det första kommandot är UPDATE som gör vad man kan förvänta sig. Säg att du har en del data i tabellen som är föråldrad. Som om du håller koll på människors namn och åldras, om någon är ålder ökar, då du kommer att vilja gå in och uppdatera just den personens ålder. För ett exempel som fungerar med vår första table-- oroa dig inte om att skriva alla dessa kommandon samtidigt. Men om du har uppdateringen ner, som kommer att vara bra för denna del, eftersom vi kommer att gå tillbaka till bordet. Så om vi går tillbaka till bordet, låt oss säga något som hände var det var en jordbävning eller en förkastningslinje som delas direkt genom New York City. Och vi ville uppdatera alla som bodde i New York City. De alla var tvungna att flytta till Pennsylvania. Det är inte en hemstad. De alla var tvungna att flytta till New Haven. Det går vi. Så alla i New York flyttar till New Haven. Och så det är något som är redigera tre rader i den här tabellen. Men i SQL, kan du göra att på bara ett uttalande. Så vi går tillbaka till uppdateringen. Låt mig snabbt radera detta forum igen. När vi pratar om uppdatering, finns det några delar av syntax som är viktiga. Tja, är alla syntaxen nyckeln. Men saker i grönt är valfritt. Den vita krävs, som fördefinierade namn. Och ljusblå är saker som varierar beroende på bordet. Så det är vad som händer med färgsättning här uppe. Så om vi vill uppdatera bara dessa rader av de människor som bor i New York, så vad vi skulle göra om vi sa UPPDATERING? Så tabellen är där vi lägger namnet på vårt bord. Låt oss bara säga namnet av vårt bord är bord ett. Så vi vill uppdatera tabell ett. Och vi vill set-- vad vi vill ställa? Jo vi vill säga, så column-- PHP behandlar rader som unika identifierare. Och sedan kolumner de olika fälten av de delar av databasen. Så det första elementet av databasen har ett namn Sam, supermakt CS50, och en hemstad Milwaukee. Så om vi nämnda uppsättning, låt oss titta på parametrarna återigen att uppsättningen tar. Vi har kolumnen lika värde. Så vill vi säga några column-- som minns är en field-- vi vill se en fältet är lika med något nytt. Så om vi just sagt uppdatering tabell 1, ange namn lika Elliot. Få några människor från nytt avsnitt på den här. Men om vi bara gjorde uppdatering tabell 1 uppsättningsnamn lika Elliot, vad skulle tabellen ser ut efter det? Människor har någon idé? Ja. PUBLIK: Allt i det raden skulle bli Elliot. Speak: Allt i vilken rad? PUBLIK: I den första raden. Speak: I den första raden? Varför den första raden? Jag menar inte att plocka på dig. PUBLIK: Kanske allt i hela bordet? Speak: Allt i hela tabellen, ja. Och det är precis rätt because-- jag bara hjälpa dig ut lite there-- eftersom vi utelämnade tillval WHERE. Om du inte har WHERE klausul, vad detta kommando kommer att göra det kommer att arbeta med varje enda rad i tabellen. Allas namn kommer bli Elliott, i princip, som Elliot är mycket glad över. Eller Yanni, en av de två. Men allas namn kommer att förändras. Så hur vi använder WHERE clause-- och detta gäller alla Wheres som är i var och en av dessa olika saker. Så du kommer att märka att SET har kolumnen lika värde. Och det gör VAR. Men dessa är olika typer av uttalanden. Så kolonnen lika värde i SET är i uppdrag. Som vi säger att vi vill ha för att ställa in namn lika med Elliot. Men i WHERE klausuler, dessa är jämlikhets uttalanden. Så låt oss säga att vi bara ville ändra personens namn till Elliot om deras namn var Ryan, låt oss säga. Så när vi säger VAR Namnet är Ryan, att skulle framgångsrikt enda förändring det name-- det skulle bara ändra namnet fältet i rader där namnfältet är lika med Ryan. Så om vi hade flera personer namngav Ryan, alla deras namn skulle ändras till Elliot. Detta liknar det exempel av om en förkastningslinje delar New York City och alla måste flytta till New Haven, hur vi kan gör det i ett uttalande UPPDATERING Tabell1 SET hemstad = New Haven där hemstad lika New York City. Detta är kraften i UPDATE uttalande. Vi kan välja valfritt antal rader genom sanna påståenden om fälten i dessa rader. Vi kan inte säga UPDATE Tabell1 set name = Elliot WHERE v = 1, förutom att vi kan om vi säger ID = 1. Så vi kommer att vara arbetar med jämställdhet fält, jämlikhet kolumner. Men med hjälp av ID-fältet är ett sätt att välja enskilda rader specifikt eftersom ID-fältet är en unik identifierare i en SQL-databas. Så som att uppdatera rad ett, lika ID 1. Uppdatering rad två, precis ändra detta ID-nummer. Men kraften i WHERE uttalande är att vi kan uppdatera saker baserat på vad deras aktuella värden för vissa saker är. Ja Elliot? PUBLIK: Och vad händer om du vill att-- igen, detta är en annan fråga. Men min första fråga var, där händer detta? Var ska jag uppdatera denna? Är detta i ett PHP-kod? Speak: Där du uppdaterar, ja. Vi kommer att prata om var allt detta händer slags när vi går genom alla kommandon. Men vad du behöver vet nu är i grunden att din SQL-databas existerar som något som skall nås av frågan funktion, vilket CS50 definieras. Så om du använder sökfunktion, du kan komma åt den här tabellen. Så du kommer att skicka dessa kommandon till ditt bord i PHP-filer genom frågefunktion. Du kan också leka med ditt bord direkt. Och det är det bästa sättet att testa dessa typer av kommandon. Och vi kommer att gå igenom exakt hur att göra det på bara en liten bit. Så det är UPDATE kommando. Och resten av kommandona kommer att vara typ av liknande, arbetar på liknande saker. INSERT INTO är förmodligen den mest skiljer sig från UPDATE. Jag kommer att lämna det där uppe för bara en liten bit och arbeta här. Så INSERT INTO ser du tabellen är fortfarande densamma. Du vill infoga i. Kapitalisering, SQL är fallet okänslig. Så du behöver inte kapitalisera dessa saker. Av konvention orden i vitt aktiveras. Men jag också färgkodade dem. Den enda anledningen till att du kapitalisera de när du skriver dem bara för att understryka att de är konstanter. Och så kan du antingen titta på kapitaliseringen eller det faktum att jag har färgat dem på olika sätt. Så vi har INSERT INTO, låt oss göra table1 igen. Detta är allt på en rad. Jag bara separera den genom de olika uttalanden. Så oroa dig inte om det faktum att Tabell1 gjorde det på den andra raden. Så vi vill infoga INTO tabell 1. vissa värden. Och du kommer att märka den valfria bit, som jag får i en sekund. Så vi har fått VÄRDEN. Så låt oss säga att vi vill lägga till Andi till vårt bord, eftersom vi saknar Andi. Andi är sjuk. Så låt oss lägga Andi till vårt bord. Kom ihåg att ID-numret uppdateras automatiskt. Så de enda områden vi behöver oroa sig är namn, supermakt, och hemstad. Och så sätt att vi gör det, titta på vår syntax, är vi har precis fått en parentes, med kommatecken separerade värden, vilka vart och ett är ett värde. Så om vi ville sätta in Andi i vår bord, är allt vi har att göra rätt Andi. Vad är Andi supermakt, människor i Andi sektion? Hon gillar flyg, eller gillar hastighet, eller något. Vad gör vi redan har där uppe? Vi har CS50, flyg, hastighet och styrka. PUBLIK: Tidsresor. Speak: Tidsresor, fantastiskt. Så vi har Andi, tid resor och hennes hemstad. Det är en riktigt bra fråga. New York City, om inte någon vet. Alla är från New York är den läxa att ta ifrån i dag. Så detta uttalande skulle infoga, som en femte rad, med supermakten tidsresor och en hemstad New York City. Men det valfritt fält är i grunden ett sätt att ange exakt vilka kolumner du vill infoga saker. Det sätt som vi gör det nu, Andi, tidsresor, New York City, går i exakt ordning vår table-- namn, supermakt, hemstad. Och om du ville göra något annat än att som säger att du inte visste någons supermakt, som hur jag inte visste Andi s supermakt i början. Så allt jag visste var hennes namn och sin hemstad. Vad jag kan göra är att jag kunde do-- Jag ska radera detta snabbt. Jag vill bara uppdatera kolumnerna. Och det är där som tillval kolumnlistan kommer in i bilden. Jag vill bara att uppdatera namn och hemstad. Och då vill jag säga VÄRDEN. Jag ska göra Andi och New York City. Om jag hade utelämnat listan över kolumner och bara gjort dessa två saker, där skulle New York har gått? Vilken kolumn skulle New York Staden har placerats i? Människor har någon idé? Supermakt, exakt. Så det här kommer bara att gå i ordning. Och när den når slutet av den listan, kommer det bara sluta fylla saker. Och de värden som den ska hålla i alla kolumner kommer bara vara NULL. Så eftersom vi specificerade namn och hemstad, vi kommer att ha ID 5, namnet Andi, supermakt NULL. Så supermakt är en oinitierad värde. Du kommer inte nödvändigtvis att få Samma Valgrind fel om du försöker och få tillgång till den. Allt kommer att snyggt nollställs ut, eftersom NULL är ett värde i SQL. Det är en konstant. Och sedan hemstad kommer att vara New York City. Så det är INSERT INTO kommandot. Innan vi går, det finns två kommandon. Har människor har några frågor om UPDATE, om INSERT INTO, om SQL i allmänhet innan vi flyttar på vår sista bitarna? Människor känner sig bra, bra. Älskar det. Så låt oss tala om SELECT. Going dike UPPDATERING hit. Och SELECT kommer att vara mycket lika. Målet för SELECT, VÄLJ syfte i livet är att ge dig ett gäng kolumner som uppfyller vissa villkor. Och när jag säger att tillfredsställa vissa villkor, ditt sinne kanske omedelbart gå tillbaka till det WHERE som kom upp i UPDATE. Och denna klausul är precis där i SELECT. Om vi ​​inte sätter WHERE klausul och vi säger SELECT namn, hometown-- stavas det lite wrong-- namn, hemstad ur tabell 1. Om vi ​​bara säga att, vad VÄLJ kommer att ge oss är det kommer att ge oss en double-- en tabell, snarare. En dubbel uppsättning om vi funderar i PHP känner. Men det är bara kommer att ge oss en dubbel uppsättning av två columns-- namn, och hemstad. Och det kommer att ignorera-ID. Och det kommer att ignorera supermakt. Och det kommer bara ge oss varje enda rad i tabellen. Så om vi bara insatt Andi, kommer vi att ha andi. Och vi kommer att ha de ursprungliga fyra. Om de har uppdaterats, kommer att reflekteras, et cetera, et cetera. Så det här är att vi inte använda WHERE. Men vi kan använda den i exakt samma sätt som vi använde det i UPDATE. Om vi ​​bara vill ha en tabell av namnen och superkrafter för människor som lever i New York, kan vi köra en sats som SELECT namn, superpower-- Jag kommer bara att lämna that-- FRÅN tabell 1 där hemstad = New York City. Så detta går att visa att du kan få helt olika kolumner, och sedan lägga kolumner som du inte även att få tillbaka i WHERE klausulen. Vi vet inte ens vill hemstad alla. Men vi vill att namn och supermakt människor vars hemstad är New York City. Så det är något vi kan göra med WHERE klausulen är att vi kan ta itu med kolumner att vi inte nödvändigtvis vill tillbaka. På samma sätt UPDATE, kan vi ta itu med kolumner som vi inte nödvändigtvis vill uppdatera. Vi kan uppdatera staden alla som heter Sam, till exempel. Vi kan uppdatera staden alla vars ID-nummer är 2. Så bara uppdatera staden den andra raden där vi inte har att göra med nödvändigt vanlig fråga. Och radera, eftersom du skulle förvänta, DELETE FROM tabell 1. Och sedan har vi fått en annan WHERE. Så vi kan säga var ID = 1. Ta bort den första raden. Och DELETE kommer alltid att ta bort en rad, eller kommer det att ta bort en del antal rader. DELETE FROM tabell VAR hemstad = New York raderar alla i New York City. Det är om det fanns en plötslig tragiska pest och du ville bara ta bort alla från bordet som bodde i en viss stad som drabbades av pesten. Må de vila i frid. Dessa är de fyra SQL-kommandon att du kommer att behöva använda. Du kanske inte ens behöver använda dem alla. Men dessa är de fyra att CS50 förväntar sig att du att vara bekväm med att gå in både frågesport 1 och även pset7 och pset8. Det är bara det att bordet igen. I den här, har Roy supermakt uppdaterats till laserstrålar, som är ett exempel jag inte använda. Jag vet inte vilka en Roy föredrar, men styrka. Roy har en supermakt styrka. Katherine gjorde inte det i dag. Det är olyckligt. Men hon har super hastighet. Ja, det var PHP. Innan vi talar om MVC, gör någon som har frågor om PHP? Nu SQL eller PHP om du plötsligt har komma med en fråga om PHP? Bra. Okej, vi alla satt sedan. Så talar en liten bit om Model View controllers, Låt oss gå tillbaka till någon av grejer i pset7. Så vilken modell view controller är-- Jag är inte kommer att spara mina ändringar för att logga in eftersom jag helt slaktat det. Men i grund och botten har vi två skilda saker händer. Vi har ett offentligt katalog som innehåller den kod som kommer att utföras och webbsidor som kommer att besökas. Och vi har också denna utsikt katalogen. Och vyer innehåller mallar. Detta är vad funktionen render-- vi såg göra funktionen i en massa PHP-koden att CS50 har redan skrivit för dig, som tar in vissa parametrar. Vad det koden gör det kommer till vyer, som är uppsättningar av liknande prewritten HTML-kod, och det är att infoga värden i vissa ställen. Detta är hur när du gå in CS50 Finance, samma rubrik är på varje sida. Samma sidfot på varje sida. Detta beror på det sätt att göra verk är det kommer automatiskt patch i det sidhuvud och viewer där du kan hitta av utsikten. Vi faktiskt kan gå in i huvudet, och titta, det är en HTML-fil med ett huvud. Det har fått vissa mallar. Du behöver inte titta på CSS för pset7 om du inte vill. Men du kan ändra dem om du vill, göra din Finance ser lite annorlunda ut. Det har fått en del PHP i huvudet lite för att se om det finns en annan titel det bör införa denna rubrik. Men bara några andra skript, och länkar, och andra saker. Head slutar, kroppen börjar och oops, Vi har denna konstiga lilla slutbiten. Och det finns en div, precis som en formlös sorts elementet som har en idé om mitten. Och sedan när vi ser sidfot, Vi har i slutet av en div. Vi har en botten, som är där sidfotstext är. Slutet av div, i slutet av kroppen, i slutet av HTML. Så vad gör är gör är göra är typ av lappa huvudet, en olika PHP-fil som kommer att innehålla de faktiska saker som du se, liksom tabellen av bestånden Om du köper eller säljer aktier. Och då ska man lägga i sidfoten. Och modellen view controller Tanken är att vi vill separera hur det ser från koden. Det är vi vill separera frontend och backend, där frontend är de saker som användaren ser, den trevliga visuals-- HTML, CSS, sånt, bilder, et cetera. Och backend är PHP. Detta är kod som du skriver. Det är där koden som är gör den egentliga verksamheten. Det är när du lägger till ett lager till ditt bord, när du ska köpa och sälja, det är backend. Och vi kan, som du såg, inklusive PHP direkt i HTML. Så vad vi kunde ha gjort för detta uppdrag bara haft en HTML-fil för varje sida, som inloggning. Och sedan på den sidan, bara hade en enorm block av PHP-kod, inklusive all kod som den sidan specifikt skulle behöva. Och då kunde vi ha gjort det för portfölj. Vi kunde ha gjort alla uppköp och försäljning inom de enskilda sidor. Men eftersom vi gör separat från där vi skriver backend kod, vi kan lätt ändra hur det ser ut utan ändra varje enskild fil. Vi gör saker som bara lägga en ny div till botten of-- Hej Jag ändrade sidfoten. Du kan bara göra sånt. Men också, kan du ändra hela visuella layouten utan att det påverkar vad som är går i backend. Och du kan ändra hela backend och fortfarande har det ser ut precis som det gjorde innan. Detta Är idén om Model View Controller. Och det är faktiskt en påtvingad paradigm i några av de programmeringsspråk kanske du vill använda för examensarbeten. Om du gör iOS utveckling, De har utsikt, vilket är vad du ser på iPhone, och då backend som som en separat sak. Du kan tänka lite. Det finns en hel del binärer i datavetenskap, som är roligt, eftersom allt är i binärt. Jag hade inte planerat det. Det var en vits oavsiktlig. Ja, vits inte avsedd. Men som .h filer och .c filer, finns det en hel del separering av saker som vi kanske inte behöver. Så vi kan bara redigera h filer, eller någon kan bara se en .h fil och vet exakt de funktioner som finns i .c fil utan att nödvändigtvis veta genomförandet. Denna idé att separera komponenter som är beroende av varandra men kan sorts komma åt varandra genom olika kanaler, passerar variabler, precis inkluderar uttalanden, saker så, denna princip bidrar till att skapa applikationer som är lättare att redigerad av flera personer, lättare kan ändras eller ändras på en stor skala, och är lättare att felsöka i många sätt. Riktigt snabb, har jag några tips för pset7, som jag ska göra helskärm så att du inte bara titta på the-- spets spets tippee. Det finns inte så många tips. Men jag nämnde PHP är svårt att felsöka. Dubbel och trippel kolla upp det. Om din kod är helt enkelt inte dyker upp på sidan, det är förmodligen en PHP fel, sorry. Du behöver aldrig titta på CSS om du inte vill. Men när du är klar, kan det vara en trevlig liten rolig sak att bara gå in och bråka med CSS parametrarna. CSS och HTML är ett exempel på en modell visa controller stil sak också, eller hur? Du kunde ha stil taggar insidan av HTML-element. Men om du typ av lägga ut dem till CSS, de blir lättare att redigera och spela runt med och ha kul med. Behandla CS50 hjälpare fungerar som svarta lådor. Du behöver inte veta exakt vad render gör, men lita på att alltid göra rätt sak beroende på vad du klarar det, sånt här. Och jag skulle rekommendera tittar Davids genomgång, går igenom alla saker, inte bara todos, men du verkligen kan behandla dessa som svarta lådor. Gå inte in i dessa funktioner söker buggar. Och välkommen återkomst av vår overlord Zamyla. Bra. Finns det några slutgiltiga frågor innan vi sorts studsar för dagen? Jag fortfarande lever? Bra. Hi Live människor. Bra. Finns det längre frågor? Nej? Och då jag tror att vi är bra att gå för i dag. Jag ska stanna kvar lite efteråt om folk hade frågor de var rädda att fråga på strömmen. Men annars har en bra dag.